| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | #!/usr/bin/env node | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							|  |  |  |  * Copyright Google Inc. All Rights Reserved. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Use of this source code is governed by an MIT-style license that can be | 
					
						
							|  |  |  |  * found in the LICENSE file at https://angular.io/license
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-03-27 09:44:35 -07:00
										 |  |  | // Must be imported first, because Angular decorators throw on load.
 | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | import 'reflect-metadata'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import * as path from 'path'; | 
					
						
							|  |  |  | import * as ts from 'typescript'; | 
					
						
							|  |  |  | import * as assert from 'assert'; | 
					
						
							| 
									
										
										
										
											2019-01-22 18:50:21 +01:00
										 |  |  | import {createProgram, readConfiguration} from '@angular/compiler-cli'; | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-22 19:51:03 +02:00
										 |  |  | /* tslint:disable:no-console  */ | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * Main method. | 
					
						
							|  |  |  |  * Standalone program that executes codegen using the ngtools API and tests that files were | 
					
						
							|  |  |  |  * properly read and wrote. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | function main() { | 
					
						
							| 
									
										
										
										
											2019-01-22 18:50:21 +01:00
										 |  |  |   Promise.resolve().then(() => lazyRoutesTest()).then(() => { process.exit(0); }).catch((err) => { | 
					
						
							|  |  |  |     console.error(err.stack); | 
					
						
							|  |  |  |     process.exit(1); | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | function lazyRoutesTest() { | 
					
						
							|  |  |  |   const basePath = path.join(__dirname, '../ngtools_src'); | 
					
						
							|  |  |  |   const project = path.join(basePath, 'tsconfig-build.json'); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-20 09:54:47 -07:00
										 |  |  |   const config = readConfiguration(project); | 
					
						
							|  |  |  |   const host = ts.createCompilerHost(config.options, true); | 
					
						
							| 
									
										
										
										
											2019-01-22 18:50:21 +01:00
										 |  |  |   const program = createProgram({ | 
					
						
							|  |  |  |     rootNames: config.rootNames, | 
					
						
							|  |  |  |     options: config.options, host, | 
					
						
							|  |  |  |   }); | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-20 09:54:47 -07:00
										 |  |  |   config.options.basePath = basePath; | 
					
						
							| 
									
										
										
										
											2019-01-22 18:50:21 +01:00
										 |  |  |   config.options.rootDir = basePath; | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-22 18:50:21 +01:00
										 |  |  |   const lazyRoutes = program.listLazyRoutes('app.module#AppModule'); | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  |   const expectations: {[route: string]: string} = { | 
					
						
							|  |  |  |     './lazy.module#LazyModule': 'lazy.module.ts', | 
					
						
							|  |  |  |     './feature/feature.module#FeatureModule': 'feature/feature.module.ts', | 
					
						
							|  |  |  |     './feature/lazy-feature.module#LazyFeatureModule': 'feature/lazy-feature.module.ts', | 
					
						
							| 
									
										
										
										
											2016-12-31 20:25:47 +11:00
										 |  |  |     './feature.module#FeatureModule': 'feature/feature.module.ts', | 
					
						
							|  |  |  |     './lazy-feature-nested.module#LazyFeatureNestedModule': 'feature/lazy-feature-nested.module.ts', | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  |     'feature2/feature2.module#Feature2Module': 'feature2/feature2.module.ts', | 
					
						
							|  |  |  |     './default.module': 'feature2/default.module.ts', | 
					
						
							|  |  |  |     'feature/feature.module#FeatureModule': 'feature/feature.module.ts' | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-22 18:50:21 +01:00
										 |  |  |   lazyRoutes.forEach(lazyRoute => { | 
					
						
							|  |  |  |     const routeName = lazyRoute.route; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // Normalize the module path and the expected module path so that these can be compared
 | 
					
						
							|  |  |  |     // on Windows where path separators are not consistent with TypeScript internal paths.
 | 
					
						
							|  |  |  |     const modulePath = path.normalize(lazyRoute.referencedModule.filePath); | 
					
						
							|  |  |  |     const expectedModulePath = path.normalize(path.join(basePath, expectations[routeName])); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     assert(routeName in expectations, `Found a route that was not expected: "${routeName}".`); | 
					
						
							| 
									
										
										
										
											2016-12-13 17:44:52 -08:00
										 |  |  |     assert( | 
					
						
							| 
									
										
										
										
											2019-01-22 18:50:21 +01:00
										 |  |  |         modulePath === expectedModulePath, | 
					
						
							|  |  |  |         `Route "${routeName}" does not point to the expected absolute path ` + | 
					
						
							|  |  |  |             `"${expectedModulePath}". It points to "${modulePath}"`); | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Verify that all expectations were met.
 | 
					
						
							| 
									
										
										
										
											2016-12-13 17:44:52 -08:00
										 |  |  |   assert.deepEqual( | 
					
						
							| 
									
										
										
										
											2019-01-22 18:50:21 +01:00
										 |  |  |       lazyRoutes.map(lazyRoute => lazyRoute.route), Object.keys(expectations), | 
					
						
							|  |  |  |       `Expected routes listed to be: \n` + | 
					
						
							| 
									
										
										
										
											2016-12-13 17:44:52 -08:00
										 |  |  |           `  ${JSON.stringify(Object.keys(expectations))}\n` + | 
					
						
							|  |  |  |           `Actual:\n` + | 
					
						
							|  |  |  |           `  ${JSON.stringify(Object.keys(lazyRoutes))}\n`); | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | main(); |