+/* eslint-disable n/no-unpublished-import */
+import * as os from 'node:os';
+import { env } from 'node:process';
+
+import json from '@rollup/plugin-json';
+import terser from '@rollup/plugin-terser';
+import typescript from '@rollup/plugin-typescript';
+import { copy } from '@web/rollup-plugin-copy';
+import { defineConfig } from 'rollup';
import analyze from 'rollup-plugin-analyzer';
-import copy from 'rollup-plugin-copy';
import del from 'rollup-plugin-delete';
-import istanbul from 'rollup-plugin-istanbul';
-import json from '@rollup/plugin-json';
-import { terser } from 'rollup-plugin-terser';
-import typescript from 'rollup-plugin-typescript2';
-const isDevelopmentBuild = process.env.BUILD === 'development';
+const availableParallelism = () => {
+ // eslint-disable-next-line no-shadow
+ let availableParallelism = 1;
+ try {
+ availableParallelism = os.availableParallelism();
+ } catch {
+ const cpus = os.cpus();
+ if (Array.isArray(cpus) && cpus.length > 0) {
+ availableParallelism = cpus.length;
+ }
+ }
+ return availableParallelism;
+};
+
+const isDevelopmentBuild = env.BUILD === 'development';
+const isAnalyzeBuild = env.ANALYZE;
+const sourcemap = !!isDevelopmentBuild;
-export default {
- input: ['src/start.ts', 'src/charging-station/ChargingStationWorker.ts'],
- output:
- {
- dir: 'dist',
- format: 'cjs',
- exports: 'auto',
- sourcemap: true,
- preserveModules: true,
- preserveModulesRoot: 'src',
- ...!isDevelopmentBuild && { plugins: [terser({ numWorkers: 2 })] }
- },
- external: ['basic-ftp', 'chalk', 'crypto', 'fs', '@mikro-orm/core', 'mongodb', 'path', 'perf_hooks', 'poolifier', 'reflect-metadata', 'tar', 'url', 'uuid', 'ws', 'winston-daily-rotate-file', 'winston/lib/winston/transports', 'winston', 'worker_threads'],
+export default defineConfig({
+ input: ['./src/start.ts', './src/charging-station/ChargingStationWorker.ts'],
+ strictDeprecations: true,
+ output: [
+ {
+ dir: './dist',
+ format: 'esm',
+ sourcemap,
+ plugins: [terser({ maxWorkers: Math.floor(availableParallelism() / 2) })],
+ },
+ ],
+ external: [
+ '@mikro-orm/core',
+ '@mikro-orm/reflection',
+ 'ajv',
+ 'ajv-formats',
+ 'basic-ftp',
+ 'chalk',
+ 'date-fns',
+ 'deep-clone',
+ 'http-status-codes',
+ 'just-merge',
+ 'mnemonist/lru-map-with-delete.js',
+ 'mnemonist/queue.js',
+ 'mongodb',
+ 'node:async_hooks',
+ 'node:crypto',
+ 'node:events',
+ 'node:fs',
+ 'node:http',
+ 'node:http2',
+ 'node:path',
+ 'node:perf_hooks',
+ 'node:process',
+ 'node:stream',
+ 'node:url',
+ 'node:util',
+ 'node:worker_threads',
+ 'poolifier',
+ 'tar',
+ 'winston',
+ 'winston-daily-rotate-file',
+ 'winston/lib/winston/transports/index.js',
+ 'ws',
+ ],
plugins: [
json(),
typescript({
- tsconfig: 'tsconfig.json'
+ tsconfig: './tsconfig.json',
+ compilerOptions: {
+ sourceMap: sourcemap,
+ },
}),
- isDevelopmentBuild && istanbul(),
del({
- targets: 'dist/*'
+ targets: [
+ './dist/*',
+ '!./dist/assets',
+ './dist/assets/*.json',
+ './dist/assets/json-schemas',
+ './dist/assets/station-templates',
+ './dist/assets/ui-protocol',
+ ],
}),
copy({
- targets: [
- { src: 'src/assets', dest: 'dist/' }
- ]
+ rootDir: './src',
+ patterns: 'assets/**/*.json',
+ exclude: [
+ 'assets/config-template.json',
+ 'assets/*config[-_.]*.json',
+ 'assets/idtags-template.json',
+ 'assets/authorization-tags-template.json',
+ 'assets/ui-protocol/**/*',
+ ],
}),
- isDevelopmentBuild && analyze()
- ]
-};
+ isAnalyzeBuild && analyze(),
+ ],
+});