diff --git a/e2e/package.json b/e2e/package.json index 6dcdebc3..085e3219 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -14,7 +14,7 @@ }, "devDependencies": { "@playwright/test": "1.43.1", - "@rsbuild/core": "1.0.1-beta.3", + "@rsbuild/core": "0.0.0-next-20240723074951", "@rslib/core": "workspace:*", "@rslib/tsconfig": "workspace:*", "@types/fs-extra": "^11.0.4", diff --git a/packages/core/package.json b/packages/core/package.json index 013fef0b..51a69001 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -38,7 +38,7 @@ "prebundle": "prebundle" }, "dependencies": { - "@rsbuild/core": "1.0.1-beta.3", + "@rsbuild/core": "0.0.0-next-20240723074951", "rsbuild-plugin-dts": "workspace:*" }, "devDependencies": { diff --git a/packages/core/src/config.ts b/packages/core/src/config.ts index 51eaffd1..93c9527d 100644 --- a/packages/core/src/config.ts +++ b/packages/core/src/config.ts @@ -429,11 +429,6 @@ export async function initRsbuild(rslibConfig: RslibConfig) { return createRsbuild({ rsbuildConfig: { environments: rsbuildConfigObject, - // TODO: temporarily inject the plugin externally - ...getDefaultDtsConfig( - rslibConfig.lib[0]?.dts, - rslibConfig.lib[0]?.bundle, - ), }, }); } diff --git a/packages/plugin-dts/package.json b/packages/plugin-dts/package.json index 99066bba..10627429 100644 --- a/packages/plugin-dts/package.json +++ b/packages/plugin-dts/package.json @@ -31,7 +31,7 @@ }, "devDependencies": { "@microsoft/api-extractor": "^7.47.2", - "@rsbuild/core": "1.0.1-beta.3", + "@rsbuild/core": "0.0.0-next-20240723074951", "@rslib/tsconfig": "workspace:*", "typescript": "^5.5.3" }, diff --git a/packages/plugin-dts/src/apiExtractor.ts b/packages/plugin-dts/src/apiExtractor.ts index 17caf4ef..04af6f9a 100644 --- a/packages/plugin-dts/src/apiExtractor.ts +++ b/packages/plugin-dts/src/apiExtractor.ts @@ -5,13 +5,15 @@ import { type ExtractorResult, } from '@microsoft/api-extractor'; import { logger } from '@rsbuild/core'; -import { ensureTempDeclarationDir } from './utils'; -export function bundleDts(outDir: string, tsconfigPath = 'tsconfig.json') { - const cwd = process.cwd(); +export function bundleDts( + cwd: string, + outDir: string, + entry = 'index.d.ts', + tsconfigPath = 'tsconfig.json', +) { const internalConfig = { - // TODO: use source.entry.main - mainEntryPointFilePath: join(ensureTempDeclarationDir(), 'index.d.ts'), + mainEntryPointFilePath: entry, // TODO: use !externals // bundledPackages: [], dtsRollup: { diff --git a/packages/plugin-dts/src/index.ts b/packages/plugin-dts/src/index.ts index fc1ff024..943bc0b2 100644 --- a/packages/plugin-dts/src/index.ts +++ b/packages/plugin-dts/src/index.ts @@ -1,3 +1,4 @@ +import { join } from 'node:path'; import type { RsbuildPlugin } from '@rsbuild/core'; import { bundleDts } from './apiExtractor'; import { emitDts } from './tsc'; @@ -24,11 +25,14 @@ export const pluginDts = ( setup(api) { const { tsconfigPath } = options; - api.onAfterBuild(async () => { - const { outDir } = emitDts(options); + api.onAfterBuild(async ({ environments }) => { + const { outDir, cwd, dtsFileMap } = emitDts(options); if (options.bundle === true) { - bundleDts(outDir, tsconfigPath); + const entry = environments.esm?.config.source.entry?.main as string; + const entryDtsFile = dtsFileMap.get(join(cwd, entry)); + + bundleDts(cwd, outDir, entryDtsFile, tsconfigPath); } }); }, diff --git a/packages/plugin-dts/src/tsc.ts b/packages/plugin-dts/src/tsc.ts index 9be650a8..bc68e98d 100644 --- a/packages/plugin-dts/src/tsc.ts +++ b/packages/plugin-dts/src/tsc.ts @@ -6,6 +6,8 @@ import { ensureTempDeclarationDir, loadTsconfig } from './utils'; export function emitDts(options: pluginDtsOptions): { outDir: string; + cwd: string; + dtsFileMap: Map; } { const { tsconfigPath, distPath, bundle } = options; const cwd = process.cwd(); @@ -30,6 +32,8 @@ export function emitDts(options: pluginDtsOptions): { emitDeclarationOnly: true, }; + const currentDirectory = ts.sys.getCurrentDirectory(); + const host: ts.CompilerHost = ts.createCompilerHost(compilerOptions); const program: ts.Program = ts.createProgram( @@ -38,7 +42,33 @@ export function emitDts(options: pluginDtsOptions): { host, ); - const emitResult = program.emit(); + const dtsFileMap = new Map(); + + const writeFile: ts.WriteFileCallback = ( + fileName, + text, + writeByteOrderMark, + onError, + sourceFiles, + data, + ) => { + const sourceFileName = sourceFiles?.[0]?.fileName; + + if (sourceFileName) { + dtsFileMap.set(sourceFileName, fileName); + } + + return host.writeFile( + fileName, + text, + writeByteOrderMark, + onError, + sourceFiles, + data, + ); + }; + + const emitResult = program.emit(undefined, writeFile, undefined, true); const allDiagnostics = ts .getPreEmitDiagnostics(program) @@ -79,5 +109,7 @@ export function emitDts(options: pluginDtsOptions): { return { outDir: outDir || './dist', + cwd: currentDirectory, + dtsFileMap, }; } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 749eac61..cf798529 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -67,8 +67,8 @@ importers: specifier: 1.43.1 version: 1.43.1 '@rsbuild/core': - specifier: 1.0.1-beta.3 - version: 1.0.1-beta.3 + specifier: 0.0.0-next-20240723074951 + version: 0.0.0-next-20240723074951 '@rslib/core': specifier: workspace:* version: link:../packages/core @@ -95,6 +95,8 @@ importers: e2e/cases/autoExtension/type-module: {} + e2e/cases/dts/bundle: {} + examples/basic: devDependencies: '@rslib/core': @@ -107,8 +109,8 @@ importers: specifier: ^7 version: 7.47.2(@types/node@18.19.39) '@rsbuild/core': - specifier: 1.0.1-beta.3 - version: 1.0.1-beta.3 + specifier: 0.0.0-next-20240723074951 + version: 0.0.0-next-20240723074951 rsbuild-plugin-dts: specifier: workspace:* version: link:../plugin-dts @@ -147,8 +149,8 @@ importers: specifier: ^7.47.2 version: 7.47.2(@types/node@18.19.39) '@rsbuild/core': - specifier: 1.0.1-beta.3 - version: 1.0.1-beta.3 + specifier: 0.0.0-next-20240723074951 + version: 0.0.0-next-20240723074951 '@rslib/tsconfig': specifier: workspace:* version: link:../../scripts/tsconfig @@ -1154,8 +1156,8 @@ packages: cpu: [x64] os: [win32] - '@rsbuild/core@1.0.1-beta.3': - resolution: {integrity: sha512-/jgx/bWfFu+dNzskpz+M/BLUrXz7bD5ShsXWUZVzUstC871nVqQpCnHn+sEL3W6FrusHYgL7uuUXjLp+nkc+kg==} + '@rsbuild/core@0.0.0-next-20240723074951': + resolution: {integrity: sha512-+sud8z2nB/Do1gGAiBirkYtCOkMKQZcDjw5VR3hSalTfxOVe6QX9dr2t0ryToThe2+sN23AfoM4d+6ggzDGdXA==} engines: {node: '>=16.7.0'} hasBin: true @@ -3725,7 +3727,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.18.1': optional: true - '@rsbuild/core@1.0.1-beta.3': + '@rsbuild/core@0.0.0-next-20240723074951': dependencies: '@rspack/core': '@rspack/core-canary@1.0.0-canary-d77b591-20240718094414(@swc/helpers@0.5.11)' '@rspack/lite-tapable': 1.0.0-alpha.5