UNPKG

@nrwl/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.

72 lines • 2.67 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.checkTargets = void 0; const tslib_1 = require("tslib"); const devkit_1 = require("@nrwl/devkit"); /** * Check whether the project to be removed has builders targetted by another project * * Throws an error if the project is in use, unless the `--forceRemove` option is used. * * @param schema The options provided to the schematic */ function checkTargets(tree, schema) { return tslib_1.__awaiter(this, void 0, void 0, function* () { if (schema.forceRemove) { return; } const graph = yield (0, devkit_1.createProjectGraphAsync)(); const errors = []; (0, devkit_1.getProjects)(tree).forEach((projectConfig, projectName) => { if (projectName === schema.projectName) { return; } Object.entries(projectConfig.targets || {}).forEach(([, targetConfig]) => { checkIfProjectIsUsed(targetConfig, (value) => { try { const { project } = (0, devkit_1.parseTargetString)(value, graph); if (project === schema.projectName) { errors.push(`"${value}" is used by "${projectName}"`); } } catch (err) { /** * It threw because the target string was not * in the format of project:target:configuration * * In that case, we don't care about it. * So we can ignore this error. */ } }); }); }); if (errors.length > 0) { let message = `${schema.projectName} is still targeted by some projects:\n\n`; for (let error of errors) { message += `${error}\n`; } throw new Error(message); } }); } exports.checkTargets = checkTargets; function checkIfProjectIsUsed(config, callback) { function recur(obj, key, value) { if (typeof value === 'string') { callback(value); } else if (Array.isArray(value)) { value.forEach((x, idx) => recur(value, idx, x)); } else if (typeof value === 'object') { Object.entries(value).forEach(([k, v]) => { recur(value, k, v); }); } } Object.entries(config).forEach(([k, v]) => { recur(config, k, v); }); } //# sourceMappingURL=check-targets.js.map