UNPKG

@yolkai/nx-workspace

Version:

Extensible Dev Tools for Monorepos

52 lines (51 loc) 1.93 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const file_utils_1 = require("../file-utils"); const filter_affected_projects_1 = require("./filter-affected-projects"); function filterAffected(graph, touchedFiles, workspaceJson = file_utils_1.readWorkspaceJson(), nxJson = file_utils_1.readNxJson()) { // Additional affected logic should be in this array. const touchedProjectLocators = [ getTouchedProjects, getImplicitlyTouchedProjects ]; const touchedProjects = touchedProjectLocators.reduce((acc, f) => { return acc.concat(f(workspaceJson, nxJson, touchedFiles)); }, []); return filter_affected_projects_1.filterAffectedProjects(graph, { workspaceJson, nxJson, touchedProjects }); } exports.filterAffected = filterAffected; // --------------------------------------------------------------------------- function getTouchedProjects(workspaceJson, nxJson, touchedFiles) { return touchedFiles .map(f => { return Object.keys(workspaceJson.projects).find(projectName => { const p = workspaceJson.projects[projectName]; return f.file.startsWith(p.root); }); }) .filter(Boolean); } function getImplicitlyTouchedProjects(workspaceJson, nxJson, fileChanges) { if (!nxJson.implicitDependencies) { return []; } const touched = []; for (const [filePath, projects] of Object.entries(nxJson.implicitDependencies)) { const implicitDependencyWasChanged = fileChanges.some(f => f.file === filePath); if (!implicitDependencyWasChanged) { continue; } // File change affects all projects, just return all projects. if (projects === '*') { return Object.keys(workspaceJson.projects); } else { touched.push(...projects); } } return touched; }