fix(core): properly report missing providers and viewProviders (#9411)

Fixes #8237
This commit is contained in:
Pawel Kozlowski
2016-06-22 02:27:27 +02:00
committed by Victor Berchet
parent 5954a26bce
commit f114dd300b
2 changed files with 47 additions and 2 deletions

View File

@ -112,14 +112,16 @@ export class CompileMetadataResolver {
});
changeDetectionStrategy = cmpMeta.changeDetection;
if (isPresent(dirMeta.viewProviders)) {
viewProviders = this.getProvidersMetadata(dirMeta.viewProviders);
viewProviders = this.getProvidersMetadata(
verifyNonBlankProviders(directiveType, dirMeta.viewProviders, 'viewProviders'));
}
moduleUrl = componentModuleUrl(this._reflector, directiveType, cmpMeta);
}
var providers: any[] /** TODO #9100 */ = [];
if (isPresent(dirMeta.providers)) {
providers = this.getProvidersMetadata(dirMeta.providers);
providers = this.getProvidersMetadata(
verifyNonBlankProviders(directiveType, dirMeta.providers, 'providers'));
}
var queries: any[] /** TODO #9100 */ = [];
var viewQueries: any[] /** TODO #9100 */ = [];
@ -423,6 +425,23 @@ function flattenArray(tree: any[], out: Array<Type|any[]>): void {
}
}
function verifyNonBlankProviders(
directiveType: Type, providersTree: any[], providersType: string): any[] {
var flat: any[] = [];
var errMsg: string;
flattenArray(providersTree, flat);
for (var i = 0; i < flat.length; i++) {
if (isBlank(flat[i])) {
errMsg = flat.map(provider => isBlank(provider) ? '?' : stringify(provider)).join(', ');
throw new BaseException(
`One or more of ${providersType} for "${stringify(directiveType)}" were not defined: [${errMsg}].`);
}
}
return providersTree;
}
function isStaticType(value: any): boolean {
return isStringMap(value) && isPresent(value['name']) && isPresent(value['filePath']);
}