refactor(ngcc): resolve modules based on the provided `moduleResolver` (#34494)
The `DependencyHost` implementations were duplicating the "postfix" strings which are used to find matching paths when resolving module specifiers. Now the hosts reuse the postfixes given to the `ModuleResolver` that is passed to the host. PR Close #34494
This commit is contained in:
parent
e2b184515b
commit
69950e3888
|
@ -39,7 +39,7 @@ export abstract class DependencyHostBase implements DependencyHost {
|
||||||
collectDependencies(
|
collectDependencies(
|
||||||
entryPointPath: AbsoluteFsPath, {dependencies, missing, deepImports}: DependencyInfo): void {
|
entryPointPath: AbsoluteFsPath, {dependencies, missing, deepImports}: DependencyInfo): void {
|
||||||
const resolvedFile =
|
const resolvedFile =
|
||||||
resolveFileWithPostfixes(this.fs, entryPointPath, ['', '.js', '/index.js']);
|
resolveFileWithPostfixes(this.fs, entryPointPath, this.moduleResolver.relativeExtensions);
|
||||||
if (resolvedFile !== null) {
|
if (resolvedFile !== null) {
|
||||||
const alreadySeen = new Set<AbsoluteFsPath>();
|
const alreadySeen = new Set<AbsoluteFsPath>();
|
||||||
this.recursivelyCollectDependencies(
|
this.recursivelyCollectDependencies(
|
||||||
|
|
|
@ -24,7 +24,7 @@ import {PathMappings, isRelativePath, resolveFileWithPostfixes} from '../utils';
|
||||||
export class ModuleResolver {
|
export class ModuleResolver {
|
||||||
private pathMappings: ProcessedPathMapping[];
|
private pathMappings: ProcessedPathMapping[];
|
||||||
|
|
||||||
constructor(private fs: FileSystem, pathMappings?: PathMappings, private relativeExtensions = [
|
constructor(private fs: FileSystem, pathMappings?: PathMappings, readonly relativeExtensions = [
|
||||||
'', '.js', '/index.js'
|
'', '.js', '/index.js'
|
||||||
]) {
|
]) {
|
||||||
this.pathMappings = pathMappings ? this.processPathMappings(pathMappings) : [];
|
this.pathMappings = pathMappings ? this.processPathMappings(pathMappings) : [];
|
||||||
|
|
|
@ -135,6 +135,40 @@ runInEachFileSystem(() => {
|
||||||
expect(dependencies.has(_('/node_modules/lib-1'))).toBe(true);
|
expect(dependencies.has(_('/node_modules/lib-1'))).toBe(true);
|
||||||
expect(dependencies.has(_('/node_modules/lib-1/sub-1'))).toBe(true);
|
expect(dependencies.has(_('/node_modules/lib-1/sub-1'))).toBe(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should resolve modules based on the provided `moduleResolver`', () => {
|
||||||
|
const fs = getFileSystem();
|
||||||
|
loadTestFiles([
|
||||||
|
{
|
||||||
|
name: _('/external/index.d.ts'),
|
||||||
|
contents: `import * from './internal-typings';`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: _('/external/internal-typings.d.ts'),
|
||||||
|
contents: `export {X} from 'lib-1';\nexport {Y} from 'lib-1/sub-1';`,
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Default JS mode will not pick up `internal-typings.d.ts` dependency
|
||||||
|
const jsHost = new EsmDependencyHost(fs, new ModuleResolver(fs));
|
||||||
|
const jsDeps = createDependencyInfo();
|
||||||
|
jsHost.collectDependencies(_('/external/index.d.ts'), jsDeps);
|
||||||
|
expect(jsDeps.dependencies.size).toEqual(0);
|
||||||
|
expect(jsDeps.deepImports.size).toEqual(0);
|
||||||
|
expect(jsDeps.missing.size).toEqual(1);
|
||||||
|
expect(jsDeps.missing.has(relativeFrom('./internal-typings'))).toBeTruthy();
|
||||||
|
|
||||||
|
// Typings mode will pick up `internal-typings.d.ts` dependency
|
||||||
|
const dtsHost = new EsmDependencyHost(
|
||||||
|
fs, new ModuleResolver(fs, undefined, ['', '.d.ts', 'index.d.ts']));
|
||||||
|
const dtsDeps = createDependencyInfo();
|
||||||
|
dtsHost.collectDependencies(_('/external/index.d.ts'), dtsDeps);
|
||||||
|
expect(dtsDeps.dependencies.size).toEqual(2);
|
||||||
|
expect(dtsDeps.dependencies.has(_('/node_modules/lib-1'))).toBeTruthy();
|
||||||
|
expect(dtsDeps.dependencies.has(_('/node_modules/lib-1/sub-1'))).toBeTruthy();
|
||||||
|
expect(dtsDeps.deepImports.size).toEqual(0);
|
||||||
|
expect(dtsDeps.missing.size).toEqual(0);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
function setupMockFileSystem(): void {
|
function setupMockFileSystem(): void {
|
||||||
|
|
Loading…
Reference in New Issue