| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- /**
- * @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
- */
- const core_1 = require("@angular-devkit/core");
- const schematics_1 = require("@angular-devkit/schematics");
- const path_1 = require("path");
- const ts = require("../third_party/github.com/Microsoft/TypeScript/lib/typescript");
- const ast_utils_1 = require("../utility/ast-utils");
- function findBootstrapModuleCall(host, mainPath) {
- const mainBuffer = host.read(mainPath);
- if (!mainBuffer) {
- throw new schematics_1.SchematicsException(`Main file (${mainPath}) not found`);
- }
- const mainText = mainBuffer.toString('utf-8');
- const source = ts.createSourceFile(mainPath, mainText, ts.ScriptTarget.Latest, true);
- const allNodes = ast_utils_1.getSourceNodes(source);
- let bootstrapCall = null;
- for (const node of allNodes) {
- let bootstrapCallNode = null;
- bootstrapCallNode = ast_utils_1.findNode(node, ts.SyntaxKind.Identifier, 'bootstrapModule');
- // Walk up the parent until CallExpression is found.
- while (bootstrapCallNode && bootstrapCallNode.parent
- && bootstrapCallNode.parent.kind !== ts.SyntaxKind.CallExpression) {
- bootstrapCallNode = bootstrapCallNode.parent;
- }
- if (bootstrapCallNode !== null &&
- bootstrapCallNode.parent !== undefined &&
- bootstrapCallNode.parent.kind === ts.SyntaxKind.CallExpression) {
- bootstrapCall = bootstrapCallNode.parent;
- break;
- }
- }
- return bootstrapCall;
- }
- exports.findBootstrapModuleCall = findBootstrapModuleCall;
- function findBootstrapModulePath(host, mainPath) {
- const bootstrapCall = findBootstrapModuleCall(host, mainPath);
- if (!bootstrapCall) {
- throw new schematics_1.SchematicsException('Bootstrap call not found');
- }
- const bootstrapModule = bootstrapCall.arguments[0];
- const mainBuffer = host.read(mainPath);
- if (!mainBuffer) {
- throw new schematics_1.SchematicsException(`Client app main file (${mainPath}) not found`);
- }
- const mainText = mainBuffer.toString('utf-8');
- const source = ts.createSourceFile(mainPath, mainText, ts.ScriptTarget.Latest, true);
- const allNodes = ast_utils_1.getSourceNodes(source);
- const bootstrapModuleRelativePath = allNodes
- .filter(node => node.kind === ts.SyntaxKind.ImportDeclaration)
- .filter(imp => {
- return ast_utils_1.findNode(imp, ts.SyntaxKind.Identifier, bootstrapModule.getText());
- })
- .map((imp) => {
- const modulePathStringLiteral = imp.moduleSpecifier;
- return modulePathStringLiteral.text;
- })[0];
- return bootstrapModuleRelativePath;
- }
- exports.findBootstrapModulePath = findBootstrapModulePath;
- function getAppModulePath(host, mainPath) {
- const moduleRelativePath = findBootstrapModulePath(host, mainPath);
- const mainDir = path_1.dirname(mainPath);
- const modulePath = core_1.normalize(`/${mainDir}/${moduleRelativePath}.ts`);
- return modulePath;
- }
- exports.getAppModulePath = getAppModulePath;
|