build: enable source map in test
[poolifier.git] / rollup.config.mjs
1 import * as os from 'node:os'
2 import { env } from 'node:process'
3 import { dts } from 'rollup-plugin-dts'
4 import terser from '@rollup/plugin-terser'
5 import typescript from '@rollup/plugin-typescript'
6 import analyze from 'rollup-plugin-analyzer'
7 import command from 'rollup-plugin-command'
8 import del from 'rollup-plugin-delete'
9 import { defineConfig } from 'rollup'
10
11 const availableParallelism = () => {
12 let availableParallelism = 1
13 try {
14 availableParallelism = os.availableParallelism()
15 } catch {
16 const cpus = os.cpus()
17 if (Array.isArray(cpus) && cpus.length > 0) {
18 availableParallelism = cpus.length
19 }
20 }
21 return availableParallelism
22 }
23
24 const isDevelopmentBuild = env.BUILD === 'development'
25 const isAnalyzeBuild = env.ANALYZE
26 const isDocumentationBuild = env.DOCUMENTATION
27
28 const maxWorkers = Math.floor(availableParallelism() / 2)
29
30 export default defineConfig([
31 {
32 input: './src/index.ts',
33 strictDeprecations: true,
34 output: [
35 {
36 format: 'cjs',
37 sourcemap: true,
38 ...(isDevelopmentBuild && {
39 dir: './lib',
40 preserveModules: true,
41 preserveModulesRoot: './src'
42 }),
43 ...(!isDevelopmentBuild && {
44 file: './lib/index.js',
45 plugins: [terser({ maxWorkers })]
46 })
47 },
48 {
49 format: 'esm',
50 sourcemap: true,
51 ...(isDevelopmentBuild && {
52 dir: './lib',
53 entryFileNames: '[name].mjs',
54 chunkFileNames: '[name]-[hash].mjs',
55 preserveModules: true,
56 preserveModulesRoot: './src'
57 }),
58 ...(!isDevelopmentBuild && {
59 file: './lib/index.mjs',
60 plugins: [terser({ maxWorkers })]
61 })
62 }
63 ],
64 external: [/^node:*/],
65 plugins: [
66 typescript({
67 tsconfig: './tsconfig.build.json',
68 compilerOptions: {
69 sourceMap: true
70 }
71 }),
72 del({
73 targets: ['./lib/*']
74 }),
75 Boolean(isAnalyzeBuild) && analyze(),
76 Boolean(isDocumentationBuild) && command('pnpm typedoc')
77 ]
78 },
79 {
80 input: './lib/dts/index.d.ts',
81 output: [{ format: 'esm', file: './lib/index.d.ts' }],
82 external: [/^node:*/],
83 plugins: [
84 dts(),
85 del({
86 targets: ['./lib/dts'],
87 hook: 'buildEnd'
88 }),
89 Boolean(isAnalyzeBuild) && analyze()
90 ]
91 }
92 ])