@nxworker/workspace
Version:
Nx plugin providing generators for managing workspace files, including the move-file generator for safely moving files between projects while updating all imports
53 lines (52 loc) • 2.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "updateImportPathsInDependentProjects", {
enumerable: true,
get: function() {
return updateImportPathsInDependentProjects;
}
});
const _devkit = require("@nx/devkit");
const _checkforimportsinproject = require("../validation/check-for-imports-in-project");
const _updateimportstorelative = require("./update-imports-to-relative");
const _updateimportsbyaliasinproject = require("./update-imports-by-alias-in-project");
async function updateImportPathsInDependentProjects(tree, projectGraph, projects, sourceProjectName, sourceImportPath, targetImportPath, target, getCachedDependentProjectsFn, getProjectSourceFilesFn) {
const { targetProjectName, targetRelativePath } = target ?? {};
const dependentProjectNames = Array.from(getCachedDependentProjectsFn(projectGraph, sourceProjectName));
let candidates;
if (dependentProjectNames.length) {
// Use dependency graph when available
candidates = dependentProjectNames.map((name)=>{
const project = projects.get(name);
return project ? [
name,
project
] : null;
}).filter((entry)=>entry !== null);
} else {
// Filter: check all projects for imports
const projectEntries = Array.from(projects.entries());
candidates = projectEntries.filter(([, project])=>(0, _checkforimportsinproject.checkForImportsInProject)(tree, project, sourceImportPath, getProjectSourceFilesFn)).map(([name, project])=>[
name,
project
]);
}
// Preload project file caches for all dependent projects to improve performance
// This avoids sequential file tree traversals when updating imports
candidates.forEach(([, dependentProject])=>{
getProjectSourceFilesFn(tree, dependentProject.root);
});
candidates.forEach(([dependentName, dependentProject])=>{
_devkit.logger.verbose(`Checking project ${dependentName} for imports`);
// If the dependent project is the target project, use relative imports
if (targetProjectName && targetRelativePath && dependentName === targetProjectName) {
_devkit.logger.verbose(`Updating imports in target project ${dependentName} to use relative paths`);
(0, _updateimportstorelative.updateImportsToRelative)(tree, dependentProject, sourceImportPath, targetRelativePath, [], getProjectSourceFilesFn);
} else {
(0, _updateimportsbyaliasinproject.updateImportsByAliasInProject)(tree, dependentProject, sourceImportPath, targetImportPath, getProjectSourceFilesFn);
}
});
}
//# sourceMappingURL=update-import-paths-in-dependent-projects.js.map