build(deps-dev): apply updates
[poolifier.git] / rollup.config.mjs
CommitLineData
d5fdc57b 1import * as os from 'node:os'
b40c4b06 2import { dts } from 'rollup-plugin-dts'
8f98d75d
JB
3import terser from '@rollup/plugin-terser'
4import typescript from '@rollup/plugin-typescript'
f45e4999 5import analyze from 'rollup-plugin-analyzer'
5ea22628 6import command from 'rollup-plugin-command'
eae1fc25 7import del from 'rollup-plugin-delete'
5d4b2a88 8import { defineConfig } from 'rollup'
660940b0 9
d5fdc57b
JB
10const availableParallelism = () => {
11 let availableParallelism = 1
12 try {
13 availableParallelism = os.availableParallelism()
14 } catch {
562a4037
JB
15 const cpus = os.cpus()
16 if (Array.isArray(cpus) && cpus.length > 0) {
17 availableParallelism = cpus.length
d5fdc57b
JB
18 }
19 }
20 return availableParallelism
21}
22
660940b0 23const isDevelopmentBuild = process.env.BUILD === 'development'
9dc351aa
JB
24const isAnalyzeBuild = process.env.ANALYZE
25const isDocumentationBuild = process.env.DOCUMENTATION
660940b0 26
d5fdc57b 27const maxWorkers = Math.floor(availableParallelism() / 2)
509e904b 28
5d4b2a88 29export default defineConfig([
b40c4b06 30 {
78cdf6bc 31 input: './src/index.ts',
b40c4b06
JB
32 strictDeprecations: true,
33 output: [
34 {
35 format: 'cjs',
36 ...(isDevelopmentBuild && {
78cdf6bc 37 dir: './lib',
b40c4b06
JB
38 sourcemap: true,
39 preserveModules: true,
78cdf6bc 40 preserveModulesRoot: './src'
b40c4b06
JB
41 }),
42 ...(!isDevelopmentBuild && {
78cdf6bc 43 file: './lib/index.js',
b40c4b06
JB
44 plugins: [terser({ maxWorkers })]
45 })
46 },
47 {
48 format: 'esm',
49 ...(isDevelopmentBuild && {
78cdf6bc 50 dir: './lib',
b40c4b06
JB
51 sourcemap: true,
52 entryFileNames: '[name].mjs',
efaeaba6 53 chunkFileNames: '[name]-[hash].mjs',
b40c4b06 54 preserveModules: true,
78cdf6bc 55 preserveModulesRoot: './src'
b40c4b06
JB
56 }),
57 ...(!isDevelopmentBuild && {
78cdf6bc 58 file: './lib/index.mjs',
b40c4b06
JB
59 plugins: [terser({ maxWorkers })]
60 })
61 }
62 ],
63 external: [
64 'node:async_hooks',
65 'node:cluster',
66 'node:crypto',
67 'node:events',
68 'node:fs',
69 'node:os',
70 'node:perf_hooks',
71 'node:worker_threads'
72 ],
73 plugins: [
74 typescript({
75 tsconfig: isDevelopmentBuild
2bdcd112
JB
76 ? './tsconfig.development.json'
77 : './tsconfig.production.json'
34a0cfab 78 }),
b40c4b06 79 del({
78cdf6bc 80 targets: ['./lib/*']
34a0cfab 81 }),
b40c4b06
JB
82 isAnalyzeBuild && analyze(),
83 isDocumentationBuild && command('pnpm typedoc')
84 ]
85 },
86 {
87 input: './lib/dts/index.d.ts',
78cdf6bc 88 output: [{ format: 'esm', file: './lib/index.d.ts' }],
b40c4b06
JB
89 external: [
90 'node:async_hooks',
91 'node:cluster',
92 'node:events',
93 'node:perf_hooks',
94 'node:worker_threads'
95 ],
96 plugins: [
97 dts(),
98 del({
78cdf6bc 99 targets: ['./lib/dts'],
b40c4b06 100 hook: 'buildEnd'
096c02a7
JB
101 }),
102 isAnalyzeBuild && analyze()
b40c4b06
JB
103 ]
104 }
5d4b2a88 105])