| 
									
										
										
										
											2016-12-13 17:44:52 -08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @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
 | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * This is a private API for the ngtools toolkit. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This API should be stable for NG 2. It can be removed in NG 4..., but should be replaced by | 
					
						
							|  |  |  |  * something else. | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-19 14:07:35 +01:00
										 |  |  | /** | 
					
						
							|  |  |  |  ********************************************************************* | 
					
						
							|  |  |  |  * Changes to this file need to be approved by the Angular CLI team. * | 
					
						
							|  |  |  |  ********************************************************************* | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-13 17:44:52 -08:00
										 |  |  | import * as ts from 'typescript'; | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-20 09:46:41 -07:00
										 |  |  | import {CompilerHost, CompilerOptions, LazyRoute} from './transformers/api'; | 
					
						
							|  |  |  | import {getOriginalReferences} from './transformers/compiler_host'; | 
					
						
							|  |  |  | import {createProgram} from './transformers/entry_points'; | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | export interface NgTools_InternalApi_NG2_CodeGen_Options { | 
					
						
							|  |  |  |   basePath: string; | 
					
						
							|  |  |  |   compilerOptions: ts.CompilerOptions; | 
					
						
							|  |  |  |   program: ts.Program; | 
					
						
							|  |  |  |   host: ts.CompilerHost; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-13 16:55:42 -07:00
										 |  |  |   angularCompilerOptions: CompilerOptions; | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   // i18n options.
 | 
					
						
							| 
									
										
										
										
											2017-03-29 09:34:45 -07:00
										 |  |  |   i18nFormat?: string; | 
					
						
							|  |  |  |   i18nFile?: string; | 
					
						
							|  |  |  |   locale?: string; | 
					
						
							| 
									
										
										
										
											2017-04-13 09:17:37 +02:00
										 |  |  |   missingTranslation?: string; | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   readResource: (fileName: string) => Promise<string>; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Every new property under this line should be optional.
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | export interface NgTools_InternalApi_NG2_ListLazyRoutes_Options { | 
					
						
							|  |  |  |   program: ts.Program; | 
					
						
							|  |  |  |   host: ts.CompilerHost; | 
					
						
							| 
									
										
										
										
											2017-09-13 16:55:42 -07:00
										 |  |  |   angularCompilerOptions: CompilerOptions; | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  |   entryModule: string; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Every new property under this line should be optional.
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-13 17:44:52 -08:00
										 |  |  | export interface NgTools_InternalApi_NG_2_LazyRouteMap { [route: string]: string; } | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-19 11:56:10 -08:00
										 |  |  | export interface NgTools_InternalApi_NG2_ExtractI18n_Options { | 
					
						
							|  |  |  |   basePath: string; | 
					
						
							|  |  |  |   compilerOptions: ts.CompilerOptions; | 
					
						
							|  |  |  |   program: ts.Program; | 
					
						
							|  |  |  |   host: ts.CompilerHost; | 
					
						
							| 
									
										
										
										
											2017-09-13 16:55:42 -07:00
										 |  |  |   angularCompilerOptions: CompilerOptions; | 
					
						
							| 
									
										
										
										
											2017-03-29 09:34:45 -07:00
										 |  |  |   i18nFormat?: string; | 
					
						
							| 
									
										
										
										
											2016-12-19 11:56:10 -08:00
										 |  |  |   readResource: (fileName: string) => Promise<string>; | 
					
						
							|  |  |  |   // Every new property under this line should be optional.
 | 
					
						
							| 
									
										
										
										
											2017-02-16 17:03:18 +01:00
										 |  |  |   locale?: string; | 
					
						
							| 
									
										
										
										
											2017-02-15 18:50:03 +01:00
										 |  |  |   outFile?: string; | 
					
						
							| 
									
										
										
										
											2016-12-19 11:56:10 -08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * @internal | 
					
						
							| 
									
										
										
										
											2017-10-20 09:46:41 -07:00
										 |  |  |  * @deprecatd Use ngtools_api2 instead! | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  |  */ | 
					
						
							|  |  |  | export class NgTools_InternalApi_NG_2 { | 
					
						
							|  |  |  |   /** | 
					
						
							|  |  |  |    * @internal | 
					
						
							|  |  |  |    */ | 
					
						
							| 
									
										
										
										
											2017-05-25 10:00:26 -07:00
										 |  |  |   static codeGen(options: NgTools_InternalApi_NG2_CodeGen_Options): Promise<any> { | 
					
						
							| 
									
										
										
										
											2017-10-20 09:46:41 -07:00
										 |  |  |     throw throwNotSupportedError(); | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   /** | 
					
						
							|  |  |  |    * @internal | 
					
						
							|  |  |  |    */ | 
					
						
							| 
									
										
										
										
											2016-12-13 17:44:52 -08:00
										 |  |  |   static listLazyRoutes(options: NgTools_InternalApi_NG2_ListLazyRoutes_Options): | 
					
						
							|  |  |  |       NgTools_InternalApi_NG_2_LazyRouteMap { | 
					
						
							| 
									
										
										
										
											2017-10-20 09:46:41 -07:00
										 |  |  |     // TODO(tbosch): Also throwNotSupportedError once Angular CLI 1.5.1 ships,
 | 
					
						
							|  |  |  |     // as we only needed this to support Angular CLI 1.5.0 rc.*
 | 
					
						
							|  |  |  |     const ngProgram = createProgram({ | 
					
						
							|  |  |  |       rootNames: options.program.getRootFileNames(), | 
					
						
							| 
									
										
										
										
											2017-10-24 12:52:14 -07:00
										 |  |  |       options: {...options.angularCompilerOptions, collectAllErrors: true}, | 
					
						
							| 
									
										
										
										
											2017-10-20 09:46:41 -07:00
										 |  |  |       host: options.host | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  |     const lazyRoutes = ngProgram.listLazyRoutes(options.entryModule); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     // reset the referencedFiles that the ng.Program added to the SourceFiles
 | 
					
						
							|  |  |  |     // as the host might be caching the source files!
 | 
					
						
							|  |  |  |     for (const sourceFile of options.program.getSourceFiles()) { | 
					
						
							|  |  |  |       const originalReferences = getOriginalReferences(sourceFile); | 
					
						
							|  |  |  |       if (originalReferences) { | 
					
						
							|  |  |  |         sourceFile.referencedFiles = originalReferences; | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     const result: NgTools_InternalApi_NG_2_LazyRouteMap = {}; | 
					
						
							|  |  |  |     lazyRoutes.forEach(lazyRoute => { | 
					
						
							|  |  |  |       const route = lazyRoute.route; | 
					
						
							|  |  |  |       const referencedFilePath = lazyRoute.referencedModule.filePath; | 
					
						
							|  |  |  |       if (result[route] && result[route] != referencedFilePath) { | 
					
						
							|  |  |  |         throw new Error( | 
					
						
							|  |  |  |             `Duplicated path in loadChildren detected: "${route}" is used in 2 loadChildren, ` + | 
					
						
							|  |  |  |             `but they point to different modules "(${result[route]} and ` + | 
					
						
							|  |  |  |             `"${referencedFilePath}"). Webpack cannot distinguish on context and would fail to ` + | 
					
						
							|  |  |  |             'load the proper one.'); | 
					
						
							|  |  |  |       } | 
					
						
							|  |  |  |       result[route] = referencedFilePath; | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return result; | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2016-12-19 11:56:10 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |   /** | 
					
						
							|  |  |  |    * @internal | 
					
						
							|  |  |  |    */ | 
					
						
							| 
									
										
										
										
											2017-05-25 10:00:26 -07:00
										 |  |  |   static extractI18n(options: NgTools_InternalApi_NG2_ExtractI18n_Options): Promise<any> { | 
					
						
							| 
									
										
										
										
											2017-10-20 09:46:41 -07:00
										 |  |  |     throw throwNotSupportedError(); | 
					
						
							| 
									
										
										
										
											2016-12-19 11:56:10 -08:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2016-12-13 17:35:06 -08:00
										 |  |  | } | 
					
						
							| 
									
										
										
										
											2017-10-20 09:46:41 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | function throwNotSupportedError() { | 
					
						
							|  |  |  |   throw new Error(`Please update @angular/cli. Angular 5+ requires at least Angular CLI 1.5+`); | 
					
						
							|  |  |  | } |