UNPKG

@nx/workspace

Version:

The Workspace plugin contains executors and generators that are useful for any Nx workspace. It should be present in every Nx workspace and other plugins build on it.

107 lines (106 loc) 3.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.removeProjectReferencesInConfig = removeProjectReferencesInConfig; const devkit_1 = require("@nx/devkit"); function removeProjectReferencesInConfig(tree, schema) { const nxJson = (0, devkit_1.readNxJson)(tree); let nxJsonChanged = false; // Unset default project if deleting the default project if (nxJson.defaultProject && nxJson.defaultProject === schema.projectName) { delete nxJson.defaultProject; nxJsonChanged = true; } // Remove project from conformance rules if (removeProjectFromConformanceRules(nxJson, schema.projectName)) { nxJsonChanged = true; } // Remove project from owners patterns if (removeProjectFromOwnersPatterns(nxJson, schema.projectName)) { nxJsonChanged = true; } if (nxJsonChanged) { (0, devkit_1.updateNxJson)(tree, nxJson); } // Remove implicit dependencies onto removed project (0, devkit_1.getProjects)(tree).forEach((project, projectName) => { if (project.implicitDependencies && project.implicitDependencies.some((projectName) => projectName === schema.projectName)) { project.implicitDependencies = project.implicitDependencies.filter((projectName) => projectName !== schema.projectName); (0, devkit_1.updateProjectConfiguration)(tree, projectName, project); } }); } function removeProjectFromConformanceRules(nxJson, projectName) { const conformance = nxJson['conformance']; if (!conformance?.rules) { return false; } let changed = false; // Iterate backwards so that splicing doesn't shift unvisited indices for (let i = conformance.rules.length - 1; i >= 0; i--) { const rule = conformance.rules[i]; if (!rule.projects) { continue; } const originalLength = rule.projects.length; rule.projects = rule.projects.filter((entry) => { if (typeof entry === 'string') { return entry !== projectName; } if (typeof entry === 'object' && entry.matcher) { return entry.matcher !== projectName; } return true; }); if (rule.projects.length !== originalLength) { changed = true; if (rule.projects.length === 0) { conformance.rules.splice(i, 1); } } } return changed; } function removeProjectFromOwnersPatterns(nxJson, projectName) { const owners = nxJson['owners']; if (typeof owners !== 'object' || !owners) { return false; } let changed = false; // Filter top-level patterns if (owners.patterns) { if (filterOwnersPatternsList(owners.patterns, projectName)) { changed = true; } } // Filter section-level patterns (GitLab) if (owners.sections) { for (const section of owners.sections) { if (section.patterns) { if (filterOwnersPatternsList(section.patterns, projectName)) { changed = true; } } } } return changed; } function filterOwnersPatternsList(patterns, projectName) { let changed = false; // Iterate backwards so that splicing doesn't shift unvisited indices for (let i = patterns.length - 1; i >= 0; i--) { const pattern = patterns[i]; if (!pattern.projects) { continue; } const originalLength = pattern.projects.length; pattern.projects = pattern.projects.filter((entry) => entry !== projectName); if (pattern.projects.length !== originalLength) { changed = true; if (pattern.projects.length === 0) { patterns.splice(i, 1); } } } return changed; }