feat(ivy): create a ModuleResolver to map module paths to files (#27697)
PR Close #27697
This commit is contained in:
parent
9e5016c845
commit
19a2b783cf
|
@ -8,4 +8,4 @@
|
|||
|
||||
export {ImportRewriter, NoopImportRewriter, R3SymbolsImportRewriter, validateAndRewriteCoreSymbol} from './src/core';
|
||||
export {AbsoluteReference, ImportMode, NodeReference, Reference, ResolvedReference} from './src/references';
|
||||
export {ReferenceResolver, TsReferenceResolver} from './src/resolver';
|
||||
export {ModuleResolver, ReferenceResolver, TsReferenceResolver} from './src/resolver';
|
||||
|
|
|
@ -17,6 +17,28 @@ export interface ReferenceResolver {
|
|||
Reference<ts.Declaration>;
|
||||
}
|
||||
|
||||
/**
|
||||
* Used by `RouterEntryPointManager` and `NgModuleRouteAnalyzer` (which is in turn is used by
|
||||
* `NgModuleDecoratorHandler`) for resolving the module source-files references in lazy-loaded
|
||||
* routes (relative to the source-file containing the `NgModule` that provides the route
|
||||
* definitions).
|
||||
*/
|
||||
export class ModuleResolver {
|
||||
constructor(
|
||||
private program: ts.Program, private compilerOptions: ts.CompilerOptions,
|
||||
private host: ts.CompilerHost) {}
|
||||
|
||||
resolveModuleName(module: string, containingFile: ts.SourceFile): ts.SourceFile|null {
|
||||
const resolved =
|
||||
ts.resolveModuleName(module, containingFile.fileName, this.compilerOptions, this.host)
|
||||
.resolvedModule;
|
||||
if (resolved === undefined) {
|
||||
return null;
|
||||
}
|
||||
return this.program.getSourceFile(resolved.resolvedFileName) || null;
|
||||
}
|
||||
}
|
||||
|
||||
export class TsReferenceResolver implements ReferenceResolver {
|
||||
private moduleExportsCache = new Map<string, Map<ts.Declaration, string>|null>();
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ import {ComponentDecoratorHandler, DirectiveDecoratorHandler, InjectableDecorato
|
|||
import {BaseDefDecoratorHandler} from './annotations/src/base_def';
|
||||
import {ErrorCode, ngErrorCode} from './diagnostics';
|
||||
import {FlatIndexGenerator, ReferenceGraph, checkForPrivateExports, findFlatIndexEntryPoint} from './entry_point';
|
||||
import {ImportRewriter, NoopImportRewriter, R3SymbolsImportRewriter, Reference, TsReferenceResolver} from './imports';
|
||||
import {ImportRewriter, ModuleResolver, NoopImportRewriter, R3SymbolsImportRewriter, Reference, TsReferenceResolver} from './imports';
|
||||
import {PartialEvaluator} from './partial_evaluator';
|
||||
import {TypeScriptReflectionHost} from './reflection';
|
||||
import {HostResourceLoader} from './resource_loader';
|
||||
|
@ -45,6 +45,7 @@ export class NgtscProgram implements api.Program {
|
|||
private flatIndexGenerator: FlatIndexGenerator|null = null;
|
||||
|
||||
private constructionDiagnostics: ts.Diagnostic[] = [];
|
||||
private moduleResolver: ModuleResolver;
|
||||
|
||||
|
||||
constructor(
|
||||
|
@ -124,6 +125,7 @@ export class NgtscProgram implements api.Program {
|
|||
ts.createProgram(rootFiles, options, this.host, oldProgram && oldProgram.getTsProgram());
|
||||
|
||||
this.entryPoint = entryPoint !== null ? this.tsProgram.getSourceFile(entryPoint) || null : null;
|
||||
this.moduleResolver = new ModuleResolver(this.tsProgram, options, this.host);
|
||||
}
|
||||
|
||||
getTsProgram(): ts.Program { return this.tsProgram; }
|
||||
|
|
Loading…
Reference in New Issue