UNPKG

nx

Version:

Smart, Fast and Extensible Build System

64 lines 2.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTouchedProjectsFromTsConfig = void 0; const json_diff_1 = require("../../../utils/json-diff"); const typescript_1 = require("../../../utils/typescript"); const getTouchedProjectsFromTsConfig = (touchedFiles, _a, _b, _c, graph) => { const rootTsConfig = (0, typescript_1.getRootTsConfigFileName)(); if (!rootTsConfig) { return []; } const tsConfigJsonChanges = touchedFiles.find((change) => change.file === rootTsConfig); if (!tsConfigJsonChanges) { return []; } const changes = tsConfigJsonChanges.getChanges(); if (!allChangesArePathChanges(changes)) { return Object.keys(graph.nodes); } const touched = []; for (let i = 0; i < changes.length; i++) { const change = changes[i]; if (change.path.length !== 4) { continue; } // If a path is deleted, everything is touched if (change.type === json_diff_1.DiffType.Deleted) { return Object.keys(graph.nodes); } touched.push(...getProjectsAffectedByPaths(change, Object.values(graph.nodes))); } return touched; }; exports.getTouchedProjectsFromTsConfig = getTouchedProjectsFromTsConfig; function allChangesArePathChanges(changes) { return changes.every(isChangeToPathMappings); } /** * Gets both previous project and current project of a particular change to tsconfig paths */ function getProjectsAffectedByPaths(change, nodes) { const result = []; const paths = [change.value.lhs, change.value.rhs]; paths.forEach((path) => { nodes.forEach((project) => { const normalizedPath = path && path.startsWith('./') ? path.substring(2) : path; const r = project.data.root; const root = r && r.endsWith('/') ? r.substring(0, r.length - 1) : r; if ((normalizedPath && root && normalizedPath.startsWith(root)) || normalizedPath == root) { result.push(project.name); } }); }); return result; } /** * Change is possibly a change to path mappings */ function isChangeToPathMappings(change) { return ((0, json_diff_1.isJsonChange)(change) && change.path[0] === 'compilerOptions' && (!change.path[1] || change.path[1] === 'paths')); } //# sourceMappingURL=tsconfig-json-changes.js.map