fix(compiler): report a reasonable error with invalid metadata (#20062)

The compiler would throw an internal exception if an import using
the `ngModule` syntax and the module as not a resolvable symbol.

Fixes: #20049
This commit is contained in:
Chuck Jazdzewski 2017-11-06 10:01:27 -08:00 committed by Victor Berchet
parent 880201681f
commit bf22f2df88
2 changed files with 22 additions and 8 deletions

View File

@ -664,16 +664,18 @@ export class CompileMetadataResolver {
}
private _getTypeDescriptor(type: Type): string {
if (this.isDirective(type)) {
return 'directive';
}
if (isValidType(type)) {
if (this.isDirective(type)) {
return 'directive';
}
if (this.isPipe(type)) {
return 'pipe';
}
if (this.isPipe(type)) {
return 'pipe';
}
if (this.isNgModule(type)) {
return 'module';
if (this.isNgModule(type)) {
return 'module';
}
}
if ((type as any).provide) {

View File

@ -399,6 +399,18 @@ export function main() {
expect(() => resolver.getNgModuleMetadata(ModuleWithComponentInBootstrap)).not.toThrow();
}));
// #20049
it('should throw a reasonable message when an invalid import is given',
inject([CompileMetadataResolver], (resolver: CompileMetadataResolver) => {
@NgModule({imports: [{ngModule: true as any}]})
class InvalidModule {
}
expect(() => { resolver.getNgModuleMetadata(InvalidModule); })
.toThrowError(
`Unexpected value '[object Object]' imported by the module 'InvalidModule'. Please add a @NgModule annotation.`);
}));
});
it('should dedupe declarations in NgModule',