refactor: remove duplicate import in examples
[poolifier.git] / rollup.config.mjs
index e1bdac21fe03b621fa5b4e81d2c73b3e2ef5be52..e40f170d422e4b09a18f5e64f975a24d2b15bfb2 100644 (file)
@@ -1,24 +1,71 @@
+import * as os from 'node:os'
 import terser from '@rollup/plugin-terser'
 import typescript from '@rollup/plugin-typescript'
 import analyze from 'rollup-plugin-analyzer'
 import command from 'rollup-plugin-command'
 import del from 'rollup-plugin-delete'
 
+const availableParallelism = () => {
+  let availableParallelism = 1
+  try {
+    availableParallelism = os.availableParallelism()
+  } catch {
+    const numberOfCpus = os.cpus()
+    if (Array.isArray(numberOfCpus) && numberOfCpus.length > 0) {
+      availableParallelism = numberOfCpus.length
+    }
+  }
+  return availableParallelism
+}
+
 const isDevelopmentBuild = process.env.BUILD === 'development'
-const isAnalyze = process.env.ANALYZE
-const isDocumentation = process.env.DOCUMENTATION
+const isAnalyzeBuild = process.env.ANALYZE
+const isDocumentationBuild = process.env.DOCUMENTATION
+
+const maxWorkers = Math.floor(availableParallelism() / 2)
 
 export default {
   input: 'src/index.ts',
-  output: {
-    ...(isDevelopmentBuild ? { dir: 'lib' } : { file: 'lib/index.js' }),
-    format: 'cjs',
-    sourcemap: !!isDevelopmentBuild,
-    ...(isDevelopmentBuild && { preserveModules: true }),
-    ...(isDevelopmentBuild && { preserveModulesRoot: 'src' }),
-    ...(!isDevelopmentBuild && { plugins: [terser({ maxWorkers: 2 })] })
-  },
-  external: ['async_hooks', 'cluster', 'events', 'os', 'worker_threads'],
+  strictDeprecations: true,
+  output: [
+    {
+      format: 'cjs',
+      ...(isDevelopmentBuild && {
+        dir: 'lib',
+        sourcemap: true,
+        preserveModules: true,
+        preserveModulesRoot: 'src'
+      }),
+      ...(!isDevelopmentBuild && {
+        file: 'lib/index.js',
+        plugins: [terser({ maxWorkers })]
+      })
+    },
+    {
+      format: 'esm',
+      ...(isDevelopmentBuild && {
+        dir: 'lib',
+        sourcemap: true,
+        entryFileNames: '[name].mjs',
+        preserveModules: true,
+        preserveModulesRoot: 'src'
+      }),
+      ...(!isDevelopmentBuild && {
+        file: 'lib/index.mjs',
+        plugins: [terser({ maxWorkers })]
+      })
+    }
+  ],
+  external: [
+    'node:async_hooks',
+    'node:cluster',
+    'node:crypto',
+    'node:events',
+    'node:fs',
+    'node:os',
+    'node:perf_hooks',
+    'node:worker_threads'
+  ],
   plugins: [
     typescript({
       tsconfig: isDevelopmentBuild
@@ -28,7 +75,7 @@ export default {
     del({
       targets: ['lib/*']
     }),
-    isAnalyze && analyze(),
-    isDocumentation && command('npm run typedoc')
+    isAnalyzeBuild && analyze(),
+    isDocumentationBuild && command('pnpm typedoc')
   ]
 }