Skip to content

Commit 6b134ed

Browse files
authored
fix(typescript): change the value of isExternalLibraryImport to false if the resolvedModule should be compiled (#1521)
1 parent d875c5f commit 6b134ed

File tree

6 files changed

+25
-4
lines changed

6 files changed

+25
-4
lines changed

packages/typescript/src/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export default function typescript(options: RollupTypescriptOptions = {}): Plugi
4242
parsedOptions.fileNames = parsedOptions.fileNames.filter(filter);
4343

4444
const formatHost = createFormattingHost(ts, parsedOptions.options);
45-
const resolveModule = createModuleResolver(ts, formatHost);
45+
const resolveModule = createModuleResolver(ts, formatHost, filter);
4646

4747
let program: Watch<unknown> | null = null;
4848

packages/typescript/src/moduleResolution.ts

+12-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import type {
55
ResolvedProjectReference,
66
ModuleKind
77
} from 'typescript';
8+
import type { CreateFilter } from '@rollup/pluginutils';
89

910
import type { DiagnosticsHost } from './diagnostics/host';
1011

@@ -24,7 +25,8 @@ export type Resolver = (
2425
*/
2526
export default function createModuleResolver(
2627
ts: typeof typescript,
27-
host: ModuleResolverHost
28+
host: ModuleResolverHost,
29+
filter: ReturnType<CreateFilter>
2830
): Resolver {
2931
const compilerOptions = host.getCompilationSettings();
3032
const cache = ts.createModuleResolutionCache(
@@ -35,7 +37,7 @@ export default function createModuleResolver(
3537
const moduleHost = { ...ts.sys, ...host };
3638

3739
return (moduleName, containingFile, redirectedReference, mode) => {
38-
const resolved = ts.resolveModuleName(
40+
const { resolvedModule } = ts.resolveModuleName(
3941
moduleName,
4042
containingFile,
4143
compilerOptions,
@@ -44,6 +46,13 @@ export default function createModuleResolver(
4446
redirectedReference,
4547
mode
4648
);
47-
return resolved.resolvedModule;
49+
/**
50+
* If the module's path contains 'node_modules', ts considers it an external library and refuses to compile it,
51+
* so we have to change the value of `isExternalLibraryImport` to false if it's true
52+
* */
53+
if (resolvedModule?.isExternalLibraryImport && filter(resolvedModule?.resolvedFileName)) {
54+
resolvedModule.isExternalLibraryImport = false;
55+
}
56+
return resolvedModule;
4857
};
4958
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { dep } from './node_modules/dep';

packages/typescript/test/fixtures/external-library-import/node_modules/dep.ts

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{}

packages/typescript/test/test.js

+9
Original file line numberDiff line numberDiff line change
@@ -1393,3 +1393,12 @@ test.serial('noForceEmit option defers to tsconfig.json for noEmit', async (t) =
13931393
const originalCode = fs.readFileSync(path.join(__dirname, input), 'utf8');
13941394
t.is(output[0].code, originalCode);
13951395
});
1396+
1397+
test.serial('compiled external library', async (t) => {
1398+
const input = 'fixtures/external-library-import/main.ts';
1399+
await rollup({
1400+
input,
1401+
plugins: [typescript({ tsconfig: 'fixtures/external-library-import/tsconfig.json' })]
1402+
});
1403+
t.pass();
1404+
});

0 commit comments

Comments
 (0)