diff --git a/.changeset/stale-roses-drive.md b/.changeset/stale-roses-drive.md new file mode 100644 index 0000000000..d8f8d60c75 --- /dev/null +++ b/.changeset/stale-roses-drive.md @@ -0,0 +1,5 @@ +--- +'@module-federation/dts-plugin': patch +--- + +fix(dts-plugin): add expose file imported files to tsconfig files diff --git a/apps/modern-component-data-fetch/provider-csr/module-federation.config.ts b/apps/modern-component-data-fetch/provider-csr/module-federation.config.ts index bc0fc0ec85..e8784e9e8b 100644 --- a/apps/modern-component-data-fetch/provider-csr/module-federation.config.ts +++ b/apps/modern-component-data-fetch/provider-csr/module-federation.config.ts @@ -1,4 +1,4 @@ -import { createModuleFederationConfig } from '@module-federation/modern-js'; +import { createModuleFederationConfig } from '@module-federation/rsbuild-plugin'; export default createModuleFederationConfig({ name: 'provider_csr', diff --git a/packages/dts-plugin/src/core/configurations/remotePlugin.ts b/packages/dts-plugin/src/core/configurations/remotePlugin.ts index e82463895e..77d2ad7513 100644 --- a/packages/dts-plugin/src/core/configurations/remotePlugin.ts +++ b/packages/dts-plugin/src/core/configurations/remotePlugin.ts @@ -53,6 +53,19 @@ function getEffectiveRootDir( ); } +const getDependentFiles = ( + rootFiles: string[], + configContent: typescript.ParsedCommandLine, + rootDir: string, +): string[] => { + const program = typescript.createProgram(rootFiles, configContent.options); + const sourceFiles = program.getSourceFiles(); + const dependentFiles = sourceFiles + .map((file) => file.fileName) + .filter((file) => !file.endsWith('.d.ts') && file.startsWith(rootDir)); + return dependentFiles.length ? dependentFiles : rootFiles; +}; + const readTsConfig = ( { tsConfigPath, @@ -121,20 +134,24 @@ const readTsConfig = ( ); const excludeExtensions = ['.mdx', '.md']; - const filesToCompile = [ + const rootFiles = [ ...Object.values(mapComponentsToExpose), + ...additionalFilesToCompile, + ].filter( + (filename) => !excludeExtensions.some((ext) => filename.endsWith(ext)), + ); + + const filesToCompile = [ + ...getDependentFiles(rootFiles, configContent, rootDir), ...configContent.fileNames.filter( (filename) => filename.endsWith('.d.ts') && !filename.startsWith(outDirWithoutTypesFolder), ), - ...additionalFilesToCompile, - ].filter( - (filename) => !excludeExtensions.some((ext) => filename.endsWith(ext)), - ); + ]; rawTsConfigJson.include = []; - rawTsConfigJson.files = filesToCompile; + rawTsConfigJson.files = [...new Set(filesToCompile)]; rawTsConfigJson.exclude = []; 'references' in rawTsConfigJson && delete rawTsConfigJson.references;