@yolkai/nx-workspace
Version:
52 lines (51 loc) • 1.93 kB
JavaScript
;
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;
}