rollup.config.ts 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import alias from '@rollup/plugin-alias'
  2. import commonjs from '@rollup/plugin-commonjs'
  3. import json from '@rollup/plugin-json'
  4. import { nodeResolve } from '@rollup/plugin-node-resolve'
  5. import replace from '@rollup/plugin-replace'
  6. import * as fs from 'node:fs/promises'
  7. import { builtinModules, createRequire } from 'node:module'
  8. import { type RollupOptions, defineConfig } from 'rollup'
  9. import dts from 'rollup-plugin-dts'
  10. import esbuild from 'rollup-plugin-esbuild'
  11. const require = createRequire(import.meta.url)
  12. const pkg = require('./package.json')
  13. const DEV = !!process.env.DEV
  14. const PROD = !DEV
  15. const external = [
  16. ...Object.keys(pkg.dependencies),
  17. ...Object.keys(pkg.peerDependencies),
  18. ...builtinModules.flatMap((m) =>
  19. m.includes('punycode') ? [] : [m, `node:${m}`]
  20. )
  21. ]
  22. const plugins = [
  23. alias({ entries: { 'readable-stream': 'stream' } }),
  24. replace({
  25. // polyfill broken browser check from bundled deps
  26. 'navigator.userAgentData': 'undefined',
  27. 'navigator.userAgent': 'undefined',
  28. preventAssignment: true
  29. }),
  30. commonjs(),
  31. nodeResolve({ preferBuiltins: false }),
  32. esbuild({ target: 'node18' }),
  33. json()
  34. ]
  35. const esmBuild: RollupOptions = {
  36. input: ['src/node/index.ts', 'src/node/cli.ts'],
  37. output: {
  38. format: 'esm',
  39. entryFileNames: `[name].js`,
  40. chunkFileNames: 'chunk-[hash].js',
  41. dir: 'dist/node',
  42. sourcemap: DEV
  43. },
  44. external,
  45. plugins,
  46. onwarn(warning, warn) {
  47. if (warning.code !== 'EVAL') warn(warning)
  48. }
  49. }
  50. const typesExternal = [
  51. ...external,
  52. /\/vitepress\/(?!(dist|node_modules|vitepress)\/).*\.d\.ts$/,
  53. 'source-map-js',
  54. 'fast-glob'
  55. ]
  56. const dtsNode = dts({
  57. respectExternal: true,
  58. tsconfig: 'src/node/tsconfig.json',
  59. compilerOptions: { preserveSymlinks: false }
  60. })
  61. const nodeTypes: RollupOptions = {
  62. input: 'src/node/index.ts',
  63. output: {
  64. format: 'esm',
  65. file: 'dist/node/index.d.ts'
  66. },
  67. external: typesExternal,
  68. plugins: [dtsNode]
  69. }
  70. const clientTypes: RollupOptions = {
  71. input: 'dist/client-types/index.d.ts',
  72. output: {
  73. format: 'esm',
  74. file: 'dist/client/index.d.ts'
  75. },
  76. external: typesExternal,
  77. plugins: [
  78. dts({ respectExternal: true }),
  79. {
  80. name: 'cleanup',
  81. async closeBundle() {
  82. if (PROD) {
  83. await fs.rm('dist/client-types', { recursive: true })
  84. }
  85. }
  86. }
  87. ]
  88. }
  89. export default defineConfig([esmBuild, nodeTypes, clientTypes])