diff --git a/packages/compiler-cli/src/ngtsc/metadata/src/api.ts b/packages/compiler-cli/src/ngtsc/metadata/src/api.ts index 64a95b8fc90..4c8bb036812 100644 --- a/packages/compiler-cli/src/ngtsc/metadata/src/api.ts +++ b/packages/compiler-cli/src/ngtsc/metadata/src/api.ts @@ -251,10 +251,17 @@ export interface MetadataReader { } /** - * A MetadataReader which also allows access to the set of all known directive classes. + * A MetadataReader which also allows access to the set of all known trait classes. */ export interface MetadataReaderWithIndex extends MetadataReader { - getKnown(kind: MetaKind): Iterable; + getKnown(kind: MetaKind): Array; +} + +/** + * An NgModuleIndex allows access to information about traits exported by NgModules. + */ +export interface NgModuleIndex { + getNgModulesExporting(directiveOrPipe: ClassDeclaration): Array>; } /** diff --git a/packages/compiler-cli/src/ngtsc/metadata/src/registry.ts b/packages/compiler-cli/src/ngtsc/metadata/src/registry.ts index 8eaa9eff2d8..aa23f172e2a 100644 --- a/packages/compiler-cli/src/ngtsc/metadata/src/registry.ts +++ b/packages/compiler-cli/src/ngtsc/metadata/src/registry.ts @@ -40,14 +40,14 @@ export class LocalMetadataRegistry implements MetadataRegistry, MetadataReaderWi this.pipes.set(meta.ref.node, meta); } - getKnown(kind: MetaKind): Iterable { + getKnown(kind: MetaKind): Array { switch (kind) { case MetaKind.Directive: - return this.directives.keys(); + return Array.from(this.directives.values()).map(v => v.ref.node); case MetaKind.Pipe: - return this.pipes.keys(); + return Array.from(this.pipes.values()).map(v => v.ref.node); case MetaKind.NgModule: - return this.ngModules.keys(); + return Array.from(this.ngModules.values()).map(v => v.ref.node); } } } diff --git a/packages/compiler-cli/src/ngtsc/typecheck/testing/index.ts b/packages/compiler-cli/src/ngtsc/typecheck/testing/index.ts index e906ec19751..65abc20e405 100644 --- a/packages/compiler-cli/src/ngtsc/typecheck/testing/index.ts +++ b/packages/compiler-cli/src/ngtsc/typecheck/testing/index.ts @@ -13,7 +13,7 @@ import {absoluteFrom, AbsoluteFsPath, getSourceFileOrError, LogicalFileSystem} f import {TestFile} from '../../file_system/testing'; import {AbsoluteModuleStrategy, LocalIdentifierStrategy, LogicalProjectStrategy, ModuleResolver, Reexport, Reference, ReferenceEmitter, RelativePathStrategy} from '../../imports'; import {NOOP_INCREMENTAL_BUILD} from '../../incremental'; -import {ClassPropertyMapping, CompoundMetadataReader, DirectiveMeta, HostDirectivesResolver, MatchSource, MetadataReader, MetadataReaderWithIndex, MetaKind} from '../../metadata'; +import {ClassPropertyMapping, CompoundMetadataReader, DirectiveMeta, HostDirectivesResolver, MatchSource, MetadataReader, MetadataReaderWithIndex, MetaKind, NgModuleIndex, NgModuleMeta, PipeMeta} from '../../metadata'; import {NOOP_PERF_RECORDER} from '../../perf'; import {TsCreateProgramDriver} from '../../program_driver'; import {ClassDeclaration, isNamedClassDeclaration, TypeScriptReflectionHost} from '../../reflection'; @@ -550,14 +550,15 @@ export function setup(targets: TypeCheckingTarget[], overrides: { }; const fakeMetadataReader = getFakeMetadataReader(fakeMetadataRegistry); + const fakeNgModuleIndex = getFakeNgModuleIndex(fakeMetadataRegistry); const typeCheckScopeRegistry = new TypeCheckScopeRegistry( fakeScopeReader, new CompoundMetadataReader([fakeMetadataReader]), new HostDirectivesResolver(fakeMetadataReader)); const templateTypeChecker = new TemplateTypeCheckerImpl( program, programStrategy, checkAdapter, fullConfig, emitter, reflectionHost, host, - NOOP_INCREMENTAL_BUILD, fakeMetadataReader, fakeMetadataReader, fakeScopeReader, - typeCheckScopeRegistry, NOOP_PERF_RECORDER); + NOOP_INCREMENTAL_BUILD, fakeMetadataReader, fakeMetadataReader, fakeNgModuleIndex, + fakeScopeReader, typeCheckScopeRegistry, NOOP_PERF_RECORDER); return { templateTypeChecker, program, @@ -577,10 +578,9 @@ function getFakeMetadataReader(fakeMetadataRegistry: Map { + getKnown(kind: MetaKind): Array { switch (kind) { - case MetaKind.Directive: - return fakeMetadataRegistry.keys(); + // TODO: This is not needed for these ngtsc tests, but may be wanted in the future. default: return []; } @@ -588,6 +588,14 @@ function getFakeMetadataReader(fakeMetadataRegistry: Map): NgModuleIndex { + return { + getNgModulesExporting(trait: ClassDeclaration): Array> { + return []; + } + } as NgModuleIndex; +} + type DeclarationResolver = (decl: TestDeclaration) => ClassDeclaration; function prepareDeclarations(