fix(compiler): improve error message when a module imports itself (#14646)
Closes #14644
This commit is contained in:
		
							parent
							
								
									f2adb2900d
								
							
						
					
					
						commit
						6bc6482765
					
				| @ -425,6 +425,7 @@ export class CompileMetadataResolver { | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         if (importedModuleType) { |         if (importedModuleType) { | ||||||
|  |           if (this._checkSelfImport(moduleType, importedModuleType)) return; | ||||||
|           const importedModuleSummary = this.getNgModuleSummary(importedModuleType); |           const importedModuleSummary = this.getNgModuleSummary(importedModuleType); | ||||||
|           if (!importedModuleSummary) { |           if (!importedModuleSummary) { | ||||||
|             this._reportError( |             this._reportError( | ||||||
| @ -567,6 +568,15 @@ export class CompileMetadataResolver { | |||||||
|     return compileMeta; |     return compileMeta; | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|  |   private _checkSelfImport(moduleType: Type<any>, importedModuleType: Type<any>): boolean { | ||||||
|  |     if (moduleType === importedModuleType) { | ||||||
|  |       this._reportError( | ||||||
|  |           syntaxError(`'${stringifyType(moduleType)}' module can't import itself`), moduleType); | ||||||
|  |       return true; | ||||||
|  |     } | ||||||
|  |     return false; | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|   private _getTypeDescriptor(type: Type<any>): string { |   private _getTypeDescriptor(type: Type<any>): string { | ||||||
|     if (this._directiveResolver.isDirective(type)) { |     if (this._directiveResolver.isDirective(type)) { | ||||||
|       return 'directive'; |       return 'directive'; | ||||||
|  | |||||||
| @ -135,6 +135,15 @@ export function main() { | |||||||
|              .toThrowError(`Expected 'styles' to be an array of strings.`); |              .toThrowError(`Expected 'styles' to be an array of strings.`); | ||||||
|        })); |        })); | ||||||
| 
 | 
 | ||||||
|  |     it('should throw with descriptive error message when a module imports itself', | ||||||
|  |        inject([CompileMetadataResolver], (resolver: CompileMetadataResolver) => { | ||||||
|  |          @NgModule({imports: [SomeModule]}) | ||||||
|  |          class SomeModule { | ||||||
|  |          } | ||||||
|  |          expect(() => resolver.loadNgModuleDirectiveAndPipeMetadata(SomeModule, true)) | ||||||
|  |              .toThrowError(`'SomeModule' module can't import itself`); | ||||||
|  |        })); | ||||||
|  | 
 | ||||||
|     it('should throw with descriptive error message when provider token can not be resolved', |     it('should throw with descriptive error message when provider token can not be resolved', | ||||||
|        inject([CompileMetadataResolver], (resolver: CompileMetadataResolver) => { |        inject([CompileMetadataResolver], (resolver: CompileMetadataResolver) => { | ||||||
|          @NgModule({declarations: [MyBrokenComp1]}) |          @NgModule({declarations: [MyBrokenComp1]}) | ||||||
| @ -144,6 +153,7 @@ export function main() { | |||||||
|          expect(() => resolver.loadNgModuleDirectiveAndPipeMetadata(SomeModule, true)) |          expect(() => resolver.loadNgModuleDirectiveAndPipeMetadata(SomeModule, true)) | ||||||
|              .toThrowError(`Can't resolve all parameters for MyBrokenComp1: (?).`); |              .toThrowError(`Can't resolve all parameters for MyBrokenComp1: (?).`); | ||||||
|        })); |        })); | ||||||
|  | 
 | ||||||
|     it('should throw with descriptive error message when a directive is passed to imports', |     it('should throw with descriptive error message when a directive is passed to imports', | ||||||
|        inject([CompileMetadataResolver], (resolver: CompileMetadataResolver) => { |        inject([CompileMetadataResolver], (resolver: CompileMetadataResolver) => { | ||||||
|          @NgModule({imports: [ComponentWithoutModuleId]}) |          @NgModule({imports: [ComponentWithoutModuleId]}) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user