From 9d79e3f48072a61530c676a2fe0a7286b96c2327 Mon Sep 17 00:00:00 2001 From: Victor Berchet Date: Wed, 14 Sep 2016 16:49:13 -0700 Subject: [PATCH] fix(MetadataResolver): throw Component.moduleId is not a string fixes #11590 --- .../@angular/compiler/src/metadata_resolver.ts | 12 +++++++++--- .../compiler/test/metadata_resolver_spec.ts | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/modules/@angular/compiler/src/metadata_resolver.ts b/modules/@angular/compiler/src/metadata_resolver.ts index f590ec4148f3f..7dcc215e8ebed 100644 --- a/modules/@angular/compiler/src/metadata_resolver.ts +++ b/modules/@angular/compiler/src/metadata_resolver.ts @@ -759,15 +759,21 @@ function staticTypeModuleUrl(value: any): string { return cpl.isStaticSymbol(value) ? value.filePath : null; } -function componentModuleUrl(reflector: ReflectorReader, type: Type, cmpMetadata: Component): string { +function componentModuleUrl( + reflector: ReflectorReader, type: Type, cmpMetadata: Component): string { if (cpl.isStaticSymbol(type)) { return staticTypeModuleUrl(type); } - if (isPresent(cmpMetadata.moduleId)) { - const moduleId = cmpMetadata.moduleId; + const moduleId = cmpMetadata.moduleId; + + if (typeof moduleId === 'string') { const scheme = getUrlScheme(moduleId); return scheme ? moduleId : `package:${moduleId}${MODULE_SUFFIX}`; + } else if (moduleId !== null && moduleId !== void 0) { + throw new Error( + `moduleId should be a string in "${stringify(type)}". See https://goo.gl/wIDDiL for more information.\n` + + `If you're using Webpack you should inline the template and the styles, see https://goo.gl/X2J8zc.`); } return reflector.importUri(type); diff --git a/modules/@angular/compiler/test/metadata_resolver_spec.ts b/modules/@angular/compiler/test/metadata_resolver_spec.ts index 80050c875887e..1199a3b598367 100644 --- a/modules/@angular/compiler/test/metadata_resolver_spec.ts +++ b/modules/@angular/compiler/test/metadata_resolver_spec.ts @@ -52,6 +52,17 @@ export function main() { expect(value.endsWith(expectedEndValue)).toBe(true); })); + it('should throw when the moduleId is not a string', + inject([CompileMetadataResolver], (resolver: CompileMetadataResolver) => { + expect(() => resolver.getDirectiveMetadata(ComponentWithInvalidModuleId)) + .toThrowError( + `moduleId should be a string in "ComponentWithInvalidModuleId". See` + + ` https://goo.gl/wIDDiL for more information.\n` + + `If you're using Webpack you should inline the template and the styles, see` + + ` https://goo.gl/X2J8zc.`); + })); + + it('should throw when metadata is incorrectly typed', inject([CompileMetadataResolver], (resolver: CompileMetadataResolver) => { expect(() => resolver.getDirectiveMetadata(MalformedStylesComponent)) @@ -179,6 +190,10 @@ export function main() { class ComponentWithoutModuleId { } +@Component({selector: 'someComponent', template: '', moduleId: 0}) +class ComponentWithInvalidModuleId { +} + @Component({ selector: 'someSelector', inputs: ['someProp'],