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