| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- "use strict";
- /**
- * @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
- */
- Object.defineProperty(exports, "__esModule", { value: true });
- const core_1 = require("@angular-devkit/core");
- const schematics_1 = require("@angular-devkit/schematics");
- const config_1 = require("../../utility/config");
- const json_utils_1 = require("../../utility/json-utils");
- /** Get a project target which builder and target names matches the provided. */
- function getProjectTarget(project, targetName, builderName) {
- const projectRoot = json_utils_1.findPropertyInAstObject(project, 'root');
- if (!projectRoot || projectRoot.kind !== 'string') {
- return undefined;
- }
- const architect = json_utils_1.findPropertyInAstObject(project, 'architect');
- if (!architect || architect.kind !== 'object') {
- return undefined;
- }
- const target = json_utils_1.findPropertyInAstObject(architect, targetName);
- if (!target || target.kind !== 'object') {
- return undefined;
- }
- const builder = json_utils_1.findPropertyInAstObject(target, 'builder');
- // Projects who's build builder is @angular-devkit/build-ng-packagr
- if (builder && builder.kind === 'string' && builder.value === builderName) {
- return target;
- }
- return undefined;
- }
- exports.getProjectTarget = getProjectTarget;
- function getTargets(workspace, targetName, builderName) {
- const projects = json_utils_1.findPropertyInAstObject(workspace, 'projects');
- if (!projects || projects.kind !== 'object' || !projects.properties) {
- return [];
- }
- const targets = [];
- for (const project of projects.properties) {
- const projectConfig = project.value;
- if (projectConfig.kind !== 'object') {
- continue;
- }
- const target = getProjectTarget(projectConfig, targetName, builderName);
- if (target) {
- targets.push({ target, project: projectConfig });
- }
- }
- return targets;
- }
- exports.getTargets = getTargets;
- /** Helper to retreive all the options in various configurations. */
- function getAllOptions(builderConfig, configurationsOnly = false) {
- const options = [];
- const configurations = json_utils_1.findPropertyInAstObject(builderConfig, 'configurations');
- if (configurations && configurations.kind === 'object') {
- options.push(...configurations.properties.map(x => x.value));
- }
- if (!configurationsOnly) {
- options.push(json_utils_1.findPropertyInAstObject(builderConfig, 'options'));
- }
- return options.filter(o => o && o.kind === 'object');
- }
- exports.getAllOptions = getAllOptions;
- function getWorkspace(host) {
- const path = config_1.getWorkspacePath(host);
- const content = readJsonFileAsAstObject(host, path);
- if (!content) {
- throw new schematics_1.SchematicsException(`Could not find (${path})`);
- }
- return content;
- }
- exports.getWorkspace = getWorkspace;
- function readJsonFileAsAstObject(host, path) {
- const configBuffer = host.read(path);
- if (!configBuffer) {
- return undefined;
- }
- const content = configBuffer.toString();
- const astContent = core_1.parseJsonAst(content, core_1.JsonParseMode.Loose);
- if (!astContent || astContent.kind !== 'object') {
- throw new schematics_1.SchematicsException(`Invalid JSON AST Object (${path})`);
- }
- return astContent;
- }
- exports.readJsonFileAsAstObject = readJsonFileAsAstObject;
- function isIvyEnabled(tree, tsConfigPath) {
- // In version 9, Ivy is turned on by default
- // Ivy is opted out only when 'enableIvy' is set to false.
- const buffer = tree.read(tsConfigPath);
- if (!buffer) {
- return true;
- }
- const tsCfgAst = core_1.parseJsonAst(buffer.toString(), core_1.JsonParseMode.Loose);
- if (tsCfgAst.kind !== 'object') {
- return true;
- }
- const ngCompilerOptions = json_utils_1.findPropertyInAstObject(tsCfgAst, 'angularCompilerOptions');
- if (ngCompilerOptions && ngCompilerOptions.kind === 'object') {
- const enableIvy = json_utils_1.findPropertyInAstObject(ngCompilerOptions, 'enableIvy');
- if (enableIvy) {
- return !!enableIvy.value;
- }
- }
- const configExtends = json_utils_1.findPropertyInAstObject(tsCfgAst, 'extends');
- if (configExtends && configExtends.kind === 'string') {
- const extendedTsConfigPath = core_1.resolve(core_1.dirname(core_1.normalize(tsConfigPath)), core_1.normalize(configExtends.value));
- return isIvyEnabled(tree, extendedTsConfigPath);
- }
- return true;
- }
- exports.isIvyEnabled = isIvyEnabled;
- // TS represents paths internally with '/' and expects paths to be in this format.
- // angular.json expects paths with '/', but doesn't enforce them.
- function forwardSlashPath(path) {
- return path.replace(/\\/g, '/');
- }
- exports.forwardSlashPath = forwardSlashPath;
|