The support for decorators that were imported via a namespace, e.g. `import * as core from `@angular/core` was implemented piecemeal. This meant that it was easy to miss situations where a decorator identifier needed to be handled as a namepsaced import rather than a direct import. One such issue was that UMD processing of decorators was not correct: the namespace was being omitted from references to decorators. Now the types have been modified to make it clear that a `Decorator.identifier` could hold a namespaced identifier, and the corresponding code that uses these types has been fixed. Fixes #31394 PR Close #31426
		
			
				
	
	
		
			92 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			92 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
| #!/bin/bash
 | ||
| 
 | ||
| set -e -x
 | ||
| 
 | ||
| PATH=$PATH:$(npm bin)
 | ||
| 
 | ||
| ivy-ngcc --help
 | ||
| 
 | ||
| # node --inspect-brk $(npm bin)/ivy-ngcc -f esm2015
 | ||
| # Run ngcc and check it logged compilation output as expected
 | ||
| ivy-ngcc | grep 'Compiling'
 | ||
| if [[ $? != 0 ]]; then exit 1; fi
 | ||
| 
 | ||
| # Did it add the appropriate build markers?
 | ||
| 
 | ||
|   # - esm2015
 | ||
|   cat node_modules/@angular/common/package.json | awk 'ORS=" "' | grep '"__processed_by_ivy_ngcc__":[^}]*"esm2015": "'
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
| 
 | ||
|   # - fesm2015
 | ||
|   cat node_modules/@angular/common/package.json | awk 'ORS=" "' | grep '"__processed_by_ivy_ngcc__":[^}]*"fesm2015": "'
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
|   cat node_modules/@angular/common/package.json | awk 'ORS=" "' | grep '"__processed_by_ivy_ngcc__":[^}]*"es2015": "'
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
| 
 | ||
|   # - esm5
 | ||
|   cat node_modules/@angular/common/package.json | awk 'ORS=" "' | grep '"__processed_by_ivy_ngcc__":[^}]*"esm5": "'
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
| 
 | ||
|   # - fesm5
 | ||
|   cat node_modules/@angular/common/package.json | awk 'ORS=" "' | grep '"__processed_by_ivy_ngcc__":[^}]*"module": "'
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
|   cat node_modules/@angular/common/package.json | awk 'ORS=" "' | grep '"__processed_by_ivy_ngcc__":[^}]*"fesm5": "'
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
| 
 | ||
| # Did it replace the PRE_R3 markers correctly?
 | ||
|   grep "= SWITCH_COMPILE_COMPONENT__POST_R3__" node_modules/@angular/core/fesm2015/core.js
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
|   grep "= SWITCH_COMPILE_COMPONENT__POST_R3__" node_modules/@angular/core/fesm5/core.js
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
| 
 | ||
| # Did it compile @angular/core/ApplicationModule correctly?
 | ||
|   grep "ApplicationModule.ngModuleDef = ɵɵdefineNgModule" node_modules/@angular/core/fesm2015/core.js
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
|   grep "ApplicationModule.ngModuleDef = ɵɵdefineNgModule" node_modules/@angular/core/fesm5/core.js
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
|   grep "ApplicationModule.ngModuleDef = ɵngcc0.ɵɵdefineNgModule" node_modules/@angular/core/esm2015/src/application_module.js
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
|   grep "ApplicationModule.ngModuleDef = ɵngcc0.ɵɵdefineNgModule" node_modules/@angular/core/esm5/src/application_module.js
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
| 
 | ||
| # Did it transform @angular/core typing files correctly?
 | ||
|   grep "import [*] as ɵngcc0 from './src/r3_symbols';" node_modules/@angular/core/core.d.ts
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
|   grep "static ngInjectorDef: ɵngcc0.ɵɵInjectorDef<ApplicationModule>;" node_modules/@angular/core/core.d.ts
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
| 
 | ||
| # Did it generate a base factory call for synthesized constructors correctly?
 | ||
|   grep "const ɵMatTable_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatTable);" node_modules/@angular/material/esm2015/table.js
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
|   grep "const ɵMatTable_BaseFactory = ɵngcc0.ɵɵgetInheritedFactory(MatTable);" node_modules/@angular/material/esm5/table.es5.js
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
| 
 | ||
| # Did it generate a base definition for undecorated classes with inputs and view queries?
 | ||
| grep "_MatMenuBase.ngBaseDef = ɵngcc0.ɵɵdefineBase({ inputs: {" node_modules/@angular/material/esm2015/menu.js
 | ||
| if [[ $? != 0 ]]; then exit 1; fi
 | ||
| grep "_MatMenuBase.ngBaseDef = ɵngcc0.ɵɵdefineBase({ inputs: {" node_modules/@angular/material/esm5/menu.es5.js
 | ||
| if [[ $? != 0 ]]; then exit 1; fi
 | ||
| 
 | ||
| # Did it handle namespace imported decorators in UMD?
 | ||
| grep "type: core.Injectable," node_modules/@angular/cdk/bundles/cdk-a11y.umd.js
 | ||
| 
 | ||
| # Can it be safely run again (as a noop)?
 | ||
| # And check that it logged skipping compilation as expected
 | ||
| ivy-ngcc -l debug | grep 'Skipping'
 | ||
| if [[ $? != 0 ]]; then exit 1; fi
 | ||
| 
 | ||
| # Check that running it with logging level error outputs nothing
 | ||
| ivy-ngcc -l error | grep '.' && exit 1
 | ||
| 
 | ||
| # Does running it with --formats fail?
 | ||
| ivy-ngcc --formats fesm2015 && exit 1
 | ||
| 
 | ||
| # Now try compiling the app using the ngcc compiled libraries
 | ||
| ngc -p tsconfig-app.json
 | ||
| 
 | ||
| # Did it compile the main.ts correctly (including the ngIf and MatButton directives)?
 | ||
|   grep "directives: \[.*\.NgIf.*\]" dist/src/main.js
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 | ||
|   grep "directives: \[.*\.MatButton.*\]" dist/src/main.js
 | ||
|   if [[ $? != 0 ]]; then exit 1; fi
 |