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'
11 const availableParallelism = () => {
12 let availableParallelism = 1
14 availableParallelism = os.availableParallelism()
16 const cpus = os.cpus()
17 if (Array.isArray(cpus) && cpus.length > 0) {
18 availableParallelism = cpus.length
21 return availableParallelism
24 const isDevelopmentBuild = env.BUILD === 'development'
25 const isAnalyzeBuild = env.ANALYZE
26 const isDocumentationBuild = env.DOCUMENTATION
28 const maxWorkers = Math.floor(availableParallelism() / 2)
30 export default defineConfig([
32 input: './src/index.ts',
33 strictDeprecations: true,
37 ...(isDevelopmentBuild && {
40 preserveModules: true,
41 preserveModulesRoot: './src'
43 ...(!isDevelopmentBuild && {
44 file: './lib/index.js',
46 plugins: [terser({ maxWorkers })]
51 ...(isDevelopmentBuild && {
54 entryFileNames: '[name].mjs',
55 chunkFileNames: '[name]-[hash].mjs',
56 preserveModules: true,
57 preserveModulesRoot: './src'
59 ...(!isDevelopmentBuild && {
60 file: './lib/index.mjs',
62 plugins: [terser({ maxWorkers })]
78 tsconfig: './tsconfig.build.json'
83 isAnalyzeBuild && analyze(),
84 isDocumentationBuild && command('pnpm typedoc')
88 input: './lib/dts/index.d.ts',
89 output: [{ format: 'esm', file: './lib/index.d.ts' }],
100 targets: ['./lib/dts'],
103 isAnalyzeBuild && analyze()