"use strict"; /** * @license * Copyright Google LLC 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 */ Object.defineProperty(exports, "__esModule", { value: true }); const core_1 = require("@angular-devkit/core"); /** Name of the default Angular CLI workspace configuration files. */ const defaultWorkspaceConfigPaths = ['/angular.json', '/.angular.json']; /** * Gets all tsconfig paths from a CLI project by reading the workspace configuration * and looking for common tsconfig locations. */ function getProjectTsConfigPaths(tree) { // Start with some tsconfig paths that are generally used within CLI projects. Note // that we are not interested in IDE-specific tsconfig files (e.g. /tsconfig.json) const buildPaths = new Set([]); const testPaths = new Set([]); // Add any tsconfig directly referenced in a build or test task of the angular.json workspace. const workspace = getWorkspaceConfigGracefully(tree); if (workspace) { const projects = Object.keys(workspace.projects).map(name => workspace.projects[name]); for (const project of projects) { const buildPath = getTargetTsconfigPath(project, 'build'); const testPath = getTargetTsconfigPath(project, 'test'); if (buildPath) { buildPaths.add(buildPath); } if (testPath) { testPaths.add(testPath); } } } // Filter out tsconfig files that don't exist in the CLI project. return { buildPaths: Array.from(buildPaths).filter(p => tree.exists(p)), testPaths: Array.from(testPaths).filter(p => tree.exists(p)), }; } exports.getProjectTsConfigPaths = getProjectTsConfigPaths; /** Gets the tsconfig path from the given target within the specified project. */ function getTargetTsconfigPath(project, targetName) { if (project.targets && project.targets[targetName] && project.targets[targetName].options && project.targets[targetName].options.tsConfig) { return core_1.normalize(project.targets[targetName].options.tsConfig); } if (project.architect && project.architect[targetName] && project.architect[targetName].options && project.architect[targetName].options.tsConfig) { return core_1.normalize(project.architect[targetName].options.tsConfig); } return null; } /** * Resolve the workspace configuration of the specified tree gracefully. We cannot use the utility * functions from the default Angular schematics because those might not be present in older * versions of the CLI. Also it's important to resolve the workspace gracefully because * the CLI project could be still using `.angular-cli.json` instead of thew new config. */ function getWorkspaceConfigGracefully(tree) { const path = defaultWorkspaceConfigPaths.find(filePath => tree.exists(filePath)); const configBuffer = tree.read(path); if (!path || !configBuffer) { return null; } try { // Parse the workspace file as JSON5 which is also supported for CLI // workspace configurations. return core_1.parseJson(configBuffer.toString(), core_1.JsonParseMode.Json5); } catch (e) { return null; } } //# sourceMappingURL=project-tsconfig-paths.js.map