Skip to content

Commit 7c4d99b

Browse files
authored
fix(dts-plugin): temp tsconfig path should extends original tsconfig (#2780)
1 parent fa37cc4 commit 7c4d99b

File tree

12 files changed

+55
-30
lines changed

12 files changed

+55
-30
lines changed

.changeset/clean-kiwis-repair.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@module-federation/dts-plugin': patch
3+
---
4+
5+
fix(dts-plugin): temp tsconfig path should extends original tsconfig

packages/dts-plugin/src/core/configurations/hostPlugin.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { retrieveTypesArchiveDestinationPath } from '../lib/archiveHandler';
66

77
describe('hostPlugin', () => {
88
const moduleFederationConfig = {
9-
name: 'moduleFederationHost',
9+
name: 'hostPluginTestHost',
1010
filename: 'remoteEntry.js',
1111
remotes: {
1212
moduleFederationTypescript: 'http://localhost:3000/remoteEntry.js',

packages/dts-plugin/src/core/configurations/remotePlugin.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { retrieveRemoteConfig } from './remotePlugin';
55

66
describe('hostPlugin', () => {
77
const moduleFederationConfig = {
8-
name: 'moduleFederationHost',
8+
name: 'remotePluginTestHost',
99
filename: 'remoteEntry.js',
1010
exposes: {
1111
'./button': './src/components/button',
@@ -35,6 +35,7 @@ describe('hostPlugin', () => {
3535
});
3636

3737
expect(tsConfig).toStrictEqual({
38+
extends: tsConfigPath,
3839
compileOnSave: false,
3940
compilerOptions: {
4041
target: 'es2017',
@@ -98,6 +99,7 @@ describe('hostPlugin', () => {
9899

99100
expect(tsConfig).toStrictEqual({
100101
compileOnSave: false,
102+
extends: tsConfigPath,
101103
compilerOptions: {
102104
module: 'esnext',
103105
resolveJsonModule: true,

packages/dts-plugin/src/core/configurations/remotePlugin.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,8 @@ const readTsConfig = (
105105
...defaultCompilerOptions,
106106
};
107107

108+
delete rawTsConfigJson.compilerOptions?.paths;
109+
108110
const filesToCompile = [
109111
...Object.values(mapComponentsToExpose),
110112
...additionalFilesToCompile,
@@ -115,10 +117,7 @@ const readTsConfig = (
115117
rawTsConfigJson.exclude = [];
116118
'references' in rawTsConfigJson && delete rawTsConfigJson.references;
117119

118-
const extendsPath = rawTsConfigJson.extends;
119-
if (extendsPath && extendsPath.startsWith('.')) {
120-
rawTsConfigJson.extends = resolve(context, extendsPath);
121-
}
120+
rawTsConfigJson.extends = resolvedTsConfigPath;
122121
return rawTsConfigJson;
123122
};
124123

packages/dts-plugin/src/core/lib/DTSManager.advance.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ describe('DTSManager advance usage', () => {
1212
const typesFolder = '@mf-types-dts-test-advance';
1313
const remoteOptions = {
1414
moduleFederationConfig: {
15-
name: 'moduleFederationTypescript',
15+
name: 'dtsManagerAdvanceSpecRemote',
1616
filename: 'remoteEntry.js',
1717
exposes: {
1818
'./index': join(__dirname, '..', './index.ts'),
@@ -36,7 +36,7 @@ describe('DTSManager advance usage', () => {
3636
const hostOptions = {
3737
context: projectRoot,
3838
moduleFederationConfig: {
39-
name: 'moduleFederationTypescript',
39+
name: 'dtsManagerAdvanceSpecHost',
4040
filename: 'remoteEntry.js',
4141
remotes: {
4242
remotes: 'remote@https://bar.it',

packages/dts-plugin/src/core/lib/DTSManager.spec.ts

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ import AdmZip from 'adm-zip';
22
import axios from 'axios';
33
import dirTree from 'directory-tree';
44
import { rmSync, existsSync } from 'fs';
5-
import { basename, join } from 'path';
6-
import { describe, expect, it, vi, afterAll } from 'vitest';
5+
import { join } from 'path';
6+
import { describe, expect, it, vi } from 'vitest';
77
import { DTSManager } from './DTSManager';
88
import { UpdateMode } from '../../server/constant';
99

@@ -14,7 +14,7 @@ describe('DTSManager', () => {
1414
const typesFolder = '@mf-types-dts-test';
1515
const remoteOptions = {
1616
moduleFederationConfig: {
17-
name: 'moduleFederationTypescript',
17+
name: 'dtsManagerSpecRemote',
1818
filename: 'remoteEntry.js',
1919
exposes: {
2020
'./index': join(__dirname, '..', './index.ts'),
@@ -34,7 +34,7 @@ describe('DTSManager', () => {
3434

3535
const hostOptions = {
3636
moduleFederationConfig: {
37-
name: 'moduleFederationTypescript',
37+
name: 'dtsManagerSpecHost',
3838
filename: 'remoteEntry.js',
3939
remotes: {
4040
remotes: 'remote@https://foo.it',
@@ -53,15 +53,6 @@ describe('DTSManager', () => {
5353
host: hostOptions,
5454
});
5555

56-
afterAll(() => {
57-
[
58-
join(projectRoot, TEST_DIT_DIR, remoteOptions.typesFolder),
59-
join(projectRoot, hostOptions.typesFolder),
60-
].forEach((tmpDir) => {
61-
rmSync(tmpDir, { recursive: true });
62-
});
63-
});
64-
6556
it('generate types', async () => {
6657
const distFolder = join(
6758
projectRoot,
@@ -355,13 +346,13 @@ describe('DTSManager', () => {
355346
rmSync(distFolder, { recursive: true });
356347
expect(existsSync(distFolder)).toEqual(false);
357348
await dtsManager.updateTypes({
358-
remoteName: remoteOptions.moduleFederationConfig.name,
349+
remoteName: hostOptions.moduleFederationConfig.name,
359350
remoteTarPath: '',
360351
updateMode: UpdateMode.POSITIVE,
361352
});
362353
expect(
363354
dirTree(distFolder, {
364-
exclude: [/node_modules/, /dev-worker/, /plugins/, /server/],
355+
exclude: [/node_modules/, /dev-worker/, /plugins/, /server/, ,],
365356
}),
366357
).toMatchObject({
367358
name: '@mf-types-dts-test',

packages/dts-plugin/src/core/lib/DtsWorker.spec.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ describe('generateTypesInChildProcess', () => {
99
const typesFolder = '@mf-types-dts-test-child-process';
1010
const remoteOptions = {
1111
moduleFederationConfig: {
12-
name: 'moduleFederationTypescript',
12+
name: 'dtsWorkerSpecRemote',
1313
filename: 'remoteEntry.js',
1414
exposes: {
1515
'./index': join(__dirname, '..', './index.ts'),
@@ -30,7 +30,7 @@ describe('generateTypesInChildProcess', () => {
3030
const hostOptions = {
3131
context: projectRoot,
3232
moduleFederationConfig: {
33-
name: 'moduleFederationTypescript',
33+
name: 'dtsWorkerSpecHost',
3434
filename: 'remoteEntry.js',
3535
remotes: {
3636
remotes: 'remote@https://foo.it',

packages/dts-plugin/src/core/lib/archiveHandler.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ describe('archiveHandler', () => {
7373
context: process.cwd(),
7474
abortOnError: true,
7575
consumeAPITypes: false,
76+
runtimePkgs: [],
7677
};
7778

7879
const destinationFolder = 'typesHostFolder';
@@ -118,6 +119,7 @@ describe('archiveHandler', () => {
118119
context: process.cwd(),
119120
abortOnError: false,
120121
consumeAPITypes: false,
122+
runtimePkgs: [],
121123
};
122124
axios.get = vi.fn().mockRejectedValue(new Error(message));
123125
const res = await downloadTypesArchive(hostOptions)([

packages/dts-plugin/src/core/lib/typeScriptCompiler.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { ensureDirSync, writeFileSync, existsSync } from 'fs-extra';
2+
import crypto from 'crypto';
23
import { stat, readdir, writeFile, rm, readFile } from 'fs/promises';
34
import { randomUUID } from 'crypto';
45
import {
@@ -54,12 +55,20 @@ export const retrieveMfAPITypesPath = (
5455
`${remoteOptions.typesFolder}.d.ts`,
5556
);
5657

57-
function writeTempTsConfig(tsConfig: TsConfigJson, context: string) {
58+
function writeTempTsConfig(
59+
tsConfig: TsConfigJson,
60+
context: string,
61+
name: string,
62+
) {
63+
const createHash = (contents: string) => {
64+
return crypto.createHash('md5').update(contents).digest('hex');
65+
};
66+
const hash = createHash(`${JSON.stringify(tsConfig)}${name}`);
5867
const tempTsConfigJsonPath = resolve(
5968
context,
6069
'node_modules',
6170
TEMP_DIR,
62-
`tsconfig.${randomUUID()}.json`,
71+
`tsconfig.${hash}.json`,
6372
);
6473
ensureDirSync(dirname(tempTsConfigJsonPath));
6574
writeFileSync(tempTsConfigJsonPath, JSON.stringify(tsConfig, null, 2));
@@ -152,6 +161,7 @@ export const compileTs = async (
152161
const tempTsConfigJsonPath = writeTempTsConfig(
153162
tsConfig,
154163
remoteOptions.context,
164+
remoteOptions.moduleFederationConfig.name || 'mf',
155165
);
156166
try {
157167
const mfTypePath = retrieveMfTypesPath(tsConfig, remoteOptions);

packages/dts-plugin/tests/setup.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { rmSync } from 'fs';
2+
import path from 'path';
3+
4+
const TEMP_TS_CONFIG_DIR = path.resolve(__dirname, 'node_modules/.federation');
5+
try {
6+
rmSync(TEMP_TS_CONFIG_DIR, { recursive: true });
7+
} catch (err) {
8+
// noop
9+
}

0 commit comments

Comments
 (0)