@vitus-labs/tools-rolldown 1.15.0 → 1.15.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # Change Log
2
2
 
3
+ ## 1.15.1
4
+
5
+ ### Patch Changes
6
+
7
+ - [`2aa6a53`](https://github.com/vitus-labs/tools/commit/2aa6a531eac6b1f48bdd81b0883efa8672e7b29d) Thanks [@vitbokisch](https://github.com/vitbokisch)! - Fix DTS generation collisions for packages with multiple subpath exports
8
+
9
+ - Updated dependencies []:
10
+ - @vitus-labs/tools-core@1.15.1
11
+
3
12
  ## 1.15.0
4
13
 
5
14
  ### Patch Changes
@@ -74,11 +74,27 @@ const fixDtsCodeSplit = (outDir, entryName) => {
74
74
  }
75
75
  }
76
76
  };
77
+ /** Collect all unique DTS output directories from the configs */
78
+ const getDtsOutputDirs = (dtsConfigs) => {
79
+ const dirs = new Set();
80
+ for (const config of dtsConfigs) {
81
+ const dir = config.output.dir;
82
+ if (dir)
83
+ dirs.add(dir);
84
+ }
85
+ return [...dirs];
86
+ };
77
87
  const generateDeclarations = async () => {
78
88
  const dtsConfigs = buildAllDts();
79
89
  if (dtsConfigs.length === 0)
80
90
  return;
81
91
  log(`\n${dim('Generating')} declarations...`);
92
+ // Clean all DTS output directories before generating.
93
+ // This prevents collisions when multiple subpath exports
94
+ // share the same types directory (e.g., lib/types/).
95
+ for (const dir of getDtsOutputDirs(dtsConfigs)) {
96
+ rimraf.sync(`${process.cwd()}/${dir}`);
97
+ }
82
98
  for (const dtsFile of dtsConfigs) {
83
99
  const tscStart = performance.now();
84
100
  const { output, file, ...input } = dtsFile;
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/scripts/build.ts"],"names":[],"mappings":"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","sourcesContent":["import { cpSync, readdirSync, renameSync, statSync, unlinkSync } from 'node:fs'\nimport { join } from 'node:path'\nimport chalk from 'chalk'\nimport { rimraf } from 'rimraf'\nimport { rolldown } from 'rolldown'\nimport { CONFIG, PKG } from '../config/index.js'\nimport {\n buildAllDts,\n createBuildPipeline,\n config as rolldownConfig,\n} from '../rolldown/index.js'\n\nconst { log } = console\nconst allBuilds = createBuildPipeline()\nconst allBuildsCount = allBuilds.length\n\nconst FORMAT_LABEL: Record<string, string> = {\n cjs: 'CJS',\n es: 'ESM',\n umd: 'UMD',\n iife: 'IIFE',\n}\n\nconst label = (text: string) => chalk.bold.bgCyan.black(` ${text} `)\nconst dim = chalk.dim\nconst bold = chalk.bold\n\nasync function build({\n inputOptions,\n outputOptions,\n}: {\n inputOptions: any\n outputOptions: any\n}) {\n const bundle = await rolldown(inputOptions)\n await bundle.write(outputOptions)\n await bundle.close()\n}\n\nconst createBuilds = async () => {\n let p = Promise.resolve()\n\n allBuilds.forEach((item: Record<string, any>) => {\n const { output, ...input } = rolldownConfig(item)\n const format = FORMAT_LABEL[output.format] || output.format\n p = p.then(() => {\n const start = performance.now()\n\n return build({ inputOptions: input, outputOptions: output })\n .then(() => {\n const duration = Math.round(performance.now() - start)\n log(\n ` ${chalk.green('+')} ${bold(format)} ${dim('->')} ${dim(`${output.dir}/${output.entryFileNames}`)} ${dim(`(${duration}ms)`)}`,\n )\n })\n .catch((e) => {\n log(`\\n${chalk.bold.red('Build failed')}`)\n log(chalk.gray(` Format: ${format}`))\n log(chalk.gray(` File: ${output.dir}/${output.entryFileNames}`))\n log(e)\n throw e\n })\n })\n })\n\n return p\n}\n\nconst copyStaticFiles = () => {\n if (!Array.isArray(CONFIG.copyFiles) || CONFIG.copyFiles.length === 0) return\n\n log(`\\n${dim('Copying')} static files...\\n`)\n for (const { from, to } of CONFIG.copyFiles as {\n from: string\n to: string\n }[]) {\n cpSync(from, to, { recursive: true })\n log(` ${chalk.green('+')} ${dim(from)} ${dim('->')} ${dim(to)}`)\n }\n}\n\nconst fixDtsCodeSplit = (outDir: string, entryName: string) => {\n const entryPath = join(outDir, entryName)\n const allDts = readdirSync(outDir).filter(\n (f) => f.endsWith('.d.ts') && f !== entryName,\n )\n\n if (allDts.length !== 1 || !allDts[0]) return\n\n const chunkPath = join(outDir, allDts[0])\n const chunkSize = statSync(chunkPath).size\n const entrySize = statSync(entryPath).size\n\n if (chunkSize > entrySize) {\n unlinkSync(entryPath)\n renameSync(chunkPath, entryPath)\n try {\n unlinkSync(`${entryPath}.map`)\n renameSync(`${chunkPath}.map`, `${entryPath}.map`)\n } catch {\n // sourcemap may not exist\n }\n }\n}\n\nconst generateDeclarations = async () => {\n const dtsConfigs = buildAllDts()\n if (dtsConfigs.length === 0) return\n\n log(`\\n${dim('Generating')} declarations...`)\n\n for (const dtsFile of dtsConfigs) {\n const tscStart = performance.now()\n const { output, file, ...input } = dtsFile\n await build({ inputOptions: input, outputOptions: output })\n fixDtsCodeSplit(output.dir as string, output.entryFileNames as string)\n\n const tscDuration = Math.round(performance.now() - tscStart)\n log(\n ` ${chalk.green('+')} ${bold('DTS')} ${dim('->')} ${dim(file)} ${dim(`(${tscDuration}ms)`)}`,\n )\n }\n}\n\nconst runBuild = async () => {\n const start = performance.now()\n\n log(\n `\\n${label('rolldown')} ${bold(PKG.name || '')} ${dim(`v${PKG.version || '0.0.0'}`)}\\n`,\n )\n\n log(`${dim('Cleaning')} ${CONFIG.outputDir}/`)\n rimraf.sync(`${process.cwd()}/${CONFIG.outputDir}`)\n\n log(\n `${dim('Building')} ${bold(String(allBuildsCount))} bundle${allBuildsCount > 1 ? 's' : ''}...\\n`,\n )\n\n await createBuilds()\n copyStaticFiles()\n await generateDeclarations()\n\n const total = Math.round(performance.now() - start)\n log(`\\n${chalk.green('Done')} ${dim(`in ${total}ms`)}\\n`)\n}\n\nexport { runBuild }\n"]}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/scripts/build.ts"],"names":[],"mappings":"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","sourcesContent":["import { cpSync, readdirSync, renameSync, statSync, unlinkSync } from 'node:fs'\nimport { join } from 'node:path'\nimport chalk from 'chalk'\nimport { rimraf } from 'rimraf'\nimport { rolldown } from 'rolldown'\nimport { CONFIG, PKG } from '../config/index.js'\nimport {\n buildAllDts,\n createBuildPipeline,\n config as rolldownConfig,\n} from '../rolldown/index.js'\n\nconst { log } = console\nconst allBuilds = createBuildPipeline()\nconst allBuildsCount = allBuilds.length\n\nconst FORMAT_LABEL: Record<string, string> = {\n cjs: 'CJS',\n es: 'ESM',\n umd: 'UMD',\n iife: 'IIFE',\n}\n\nconst label = (text: string) => chalk.bold.bgCyan.black(` ${text} `)\nconst dim = chalk.dim\nconst bold = chalk.bold\n\nasync function build({\n inputOptions,\n outputOptions,\n}: {\n inputOptions: any\n outputOptions: any\n}) {\n const bundle = await rolldown(inputOptions)\n await bundle.write(outputOptions)\n await bundle.close()\n}\n\nconst createBuilds = async () => {\n let p = Promise.resolve()\n\n allBuilds.forEach((item: Record<string, any>) => {\n const { output, ...input } = rolldownConfig(item)\n const format = FORMAT_LABEL[output.format] || output.format\n p = p.then(() => {\n const start = performance.now()\n\n return build({ inputOptions: input, outputOptions: output })\n .then(() => {\n const duration = Math.round(performance.now() - start)\n log(\n ` ${chalk.green('+')} ${bold(format)} ${dim('->')} ${dim(`${output.dir}/${output.entryFileNames}`)} ${dim(`(${duration}ms)`)}`,\n )\n })\n .catch((e) => {\n log(`\\n${chalk.bold.red('Build failed')}`)\n log(chalk.gray(` Format: ${format}`))\n log(chalk.gray(` File: ${output.dir}/${output.entryFileNames}`))\n log(e)\n throw e\n })\n })\n })\n\n return p\n}\n\nconst copyStaticFiles = () => {\n if (!Array.isArray(CONFIG.copyFiles) || CONFIG.copyFiles.length === 0) return\n\n log(`\\n${dim('Copying')} static files...\\n`)\n for (const { from, to } of CONFIG.copyFiles as {\n from: string\n to: string\n }[]) {\n cpSync(from, to, { recursive: true })\n log(` ${chalk.green('+')} ${dim(from)} ${dim('->')} ${dim(to)}`)\n }\n}\n\nconst fixDtsCodeSplit = (outDir: string, entryName: string) => {\n const entryPath = join(outDir, entryName)\n const allDts = readdirSync(outDir).filter(\n (f) => f.endsWith('.d.ts') && f !== entryName,\n )\n\n if (allDts.length !== 1 || !allDts[0]) return\n\n const chunkPath = join(outDir, allDts[0])\n const chunkSize = statSync(chunkPath).size\n const entrySize = statSync(entryPath).size\n\n if (chunkSize > entrySize) {\n unlinkSync(entryPath)\n renameSync(chunkPath, entryPath)\n try {\n unlinkSync(`${entryPath}.map`)\n renameSync(`${chunkPath}.map`, `${entryPath}.map`)\n } catch {\n // sourcemap may not exist\n }\n }\n}\n\n/** Collect all unique DTS output directories from the configs */\nconst getDtsOutputDirs = (\n dtsConfigs: ReturnType<typeof buildAllDts>,\n): string[] => {\n const dirs = new Set<string>()\n for (const config of dtsConfigs) {\n const dir = config.output.dir as string\n if (dir) dirs.add(dir)\n }\n return [...dirs]\n}\n\nconst generateDeclarations = async () => {\n const dtsConfigs = buildAllDts()\n if (dtsConfigs.length === 0) return\n\n log(`\\n${dim('Generating')} declarations...`)\n\n // Clean all DTS output directories before generating.\n // This prevents collisions when multiple subpath exports\n // share the same types directory (e.g., lib/types/).\n for (const dir of getDtsOutputDirs(dtsConfigs)) {\n rimraf.sync(`${process.cwd()}/${dir}`)\n }\n\n for (const dtsFile of dtsConfigs) {\n const tscStart = performance.now()\n const { output, file, ...input } = dtsFile\n await build({ inputOptions: input, outputOptions: output })\n fixDtsCodeSplit(output.dir as string, output.entryFileNames as string)\n\n const tscDuration = Math.round(performance.now() - tscStart)\n log(\n ` ${chalk.green('+')} ${bold('DTS')} ${dim('->')} ${dim(file)} ${dim(`(${tscDuration}ms)`)}`,\n )\n }\n}\n\nconst runBuild = async () => {\n const start = performance.now()\n\n log(\n `\\n${label('rolldown')} ${bold(PKG.name || '')} ${dim(`v${PKG.version || '0.0.0'}`)}\\n`,\n )\n\n log(`${dim('Cleaning')} ${CONFIG.outputDir}/`)\n rimraf.sync(`${process.cwd()}/${CONFIG.outputDir}`)\n\n log(\n `${dim('Building')} ${bold(String(allBuildsCount))} bundle${allBuildsCount > 1 ? 's' : ''}...\\n`,\n )\n\n await createBuilds()\n copyStaticFiles()\n await generateDeclarations()\n\n const total = Math.round(performance.now() - start)\n log(`\\n${chalk.green('Done')} ${dim(`in ${total}ms`)}\\n`)\n}\n\nexport { runBuild }\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/scripts/build.ts"],"names":[],"mappings":"AA4HA,QAAA,MAAM,QAAQ,qBAoBb,CAAA;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/scripts/build.ts"],"names":[],"mappings":"AA+IA,QAAA,MAAM,QAAQ,qBAoBb,CAAA;AAED,OAAO,EAAE,QAAQ,EAAE,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vitus-labs/tools-rolldown",
3
- "version": "1.15.0",
3
+ "version": "1.15.1",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -176,9 +176,9 @@ describe('build', () => {
176
176
  },
177
177
  },
178
178
  ])
179
- mockReaddirSync.mockReturnValue(['chunk-abc.d.ts'])
179
+ mockReaddirSync.mockReturnValue(['index2.d.ts'])
180
180
  vi.mocked(statSync).mockImplementation((p: any) => {
181
- if (String(p).includes('chunk'))
181
+ if (String(p).includes('index2'))
182
182
  return { size: 1000 } as ReturnType<typeof statSync>
183
183
  return { size: 10 } as ReturnType<typeof statSync>
184
184
  })
@@ -103,12 +103,31 @@ const fixDtsCodeSplit = (outDir: string, entryName: string) => {
103
103
  }
104
104
  }
105
105
 
106
+ /** Collect all unique DTS output directories from the configs */
107
+ const getDtsOutputDirs = (
108
+ dtsConfigs: ReturnType<typeof buildAllDts>,
109
+ ): string[] => {
110
+ const dirs = new Set<string>()
111
+ for (const config of dtsConfigs) {
112
+ const dir = config.output.dir as string
113
+ if (dir) dirs.add(dir)
114
+ }
115
+ return [...dirs]
116
+ }
117
+
106
118
  const generateDeclarations = async () => {
107
119
  const dtsConfigs = buildAllDts()
108
120
  if (dtsConfigs.length === 0) return
109
121
 
110
122
  log(`\n${dim('Generating')} declarations...`)
111
123
 
124
+ // Clean all DTS output directories before generating.
125
+ // This prevents collisions when multiple subpath exports
126
+ // share the same types directory (e.g., lib/types/).
127
+ for (const dir of getDtsOutputDirs(dtsConfigs)) {
128
+ rimraf.sync(`${process.cwd()}/${dir}`)
129
+ }
130
+
112
131
  for (const dtsFile of dtsConfigs) {
113
132
  const tscStart = performance.now()
114
133
  const { output, file, ...input } = dtsFile