fix(compiler): improve the error when template is not a string
Closes #8708 Closes #13377
This commit is contained in:
parent
5b4bea24de
commit
2c0c86e3ce
|
@ -65,10 +65,18 @@ export class DirectiveNormalizer {
|
||||||
SyncAsyncResult<CompileTemplateMetadata> {
|
SyncAsyncResult<CompileTemplateMetadata> {
|
||||||
let normalizedTemplateSync: CompileTemplateMetadata = null;
|
let normalizedTemplateSync: CompileTemplateMetadata = null;
|
||||||
let normalizedTemplateAsync: Promise<CompileTemplateMetadata>;
|
let normalizedTemplateAsync: Promise<CompileTemplateMetadata>;
|
||||||
if (prenormData.template) {
|
if (prenormData.template != null) {
|
||||||
|
if (typeof prenormData.template !== 'string') {
|
||||||
|
throw new SyntaxError(
|
||||||
|
`The template specified for component ${stringify(prenormData.componentType)} is not a string`);
|
||||||
|
}
|
||||||
normalizedTemplateSync = this.normalizeTemplateSync(prenormData);
|
normalizedTemplateSync = this.normalizeTemplateSync(prenormData);
|
||||||
normalizedTemplateAsync = Promise.resolve(normalizedTemplateSync);
|
normalizedTemplateAsync = Promise.resolve(normalizedTemplateSync);
|
||||||
} else if (prenormData.templateUrl) {
|
} else if (prenormData.templateUrl) {
|
||||||
|
if (typeof prenormData.templateUrl !== 'string') {
|
||||||
|
throw new SyntaxError(
|
||||||
|
`The templateUrl specified for component ${stringify(prenormData.componentType)} is not a string`);
|
||||||
|
}
|
||||||
normalizedTemplateAsync = this.normalizeTemplateAsync(prenormData);
|
normalizedTemplateAsync = this.normalizeTemplateAsync(prenormData);
|
||||||
} else {
|
} else {
|
||||||
throw new SyntaxError(
|
throw new SyntaxError(
|
||||||
|
|
|
@ -33,6 +33,22 @@ export function main() {
|
||||||
moduleUrl: SOME_MODULE_URL,
|
moduleUrl: SOME_MODULE_URL,
|
||||||
})).toThrowError(SyntaxError, 'No template specified for component SomeComp');
|
})).toThrowError(SyntaxError, 'No template specified for component SomeComp');
|
||||||
}));
|
}));
|
||||||
|
it('should throw if template is not a string',
|
||||||
|
inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => {
|
||||||
|
expect(
|
||||||
|
() => normalizer.normalizeTemplate(
|
||||||
|
{componentType: SomeComp, moduleUrl: SOME_MODULE_URL, template: <any>{}}))
|
||||||
|
.toThrowError(
|
||||||
|
SyntaxError, 'The template specified for component SomeComp is not a string');
|
||||||
|
}));
|
||||||
|
it('should throw if templateUrl is not a string',
|
||||||
|
inject([DirectiveNormalizer], (normalizer: DirectiveNormalizer) => {
|
||||||
|
expect(
|
||||||
|
() => normalizer.normalizeTemplate(
|
||||||
|
{componentType: SomeComp, moduleUrl: SOME_MODULE_URL, templateUrl: <any>{}}))
|
||||||
|
.toThrowError(
|
||||||
|
SyntaxError, 'The templateUrl specified for component SomeComp is not a string');
|
||||||
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('normalizeTemplateSync', () => {
|
describe('normalizeTemplateSync', () => {
|
||||||
|
|
Loading…
Reference in New Issue