UNPKG

@nxrocks/common

Version:

Common library to share code among the `@nxrocks/*` plugins.

126 lines 5.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createDependenciesIf = exports.createNodesForV2 = exports.createNodesFor = void 0; const devkit_1 = require("@nx/devkit"); const minimatch_1 = require("minimatch"); const utils_1 = require("./utils"); const path_1 = require("path"); function getPackageInfosForNxProjects(pluginName, projectFilter, getPackageInfo, workspace) { const workspacePackageInfo = { projects: {}, packages: {}, }; Object.entries(workspace.projects) .filter(([, project]) => projectFilter(project)) .forEach(([projectName, project]) => { try { const pkgInfo = getPackageInfo(project); workspacePackageInfo.projects[project.root] = pkgInfo; workspacePackageInfo.packages[pkgInfo.packageId] = projectName; } catch (e) { if (process.env['NX_VERBOSE_LOGGING'] === 'true') { devkit_1.logger.warn(`[${pluginName}]: Failed to get package info for project '${projectName}'`); devkit_1.logger.warn(e); } } }); return workspacePackageInfo; } function getDependenciesForProject(pluginName, filePath, sourceProjectName, workspace) { if (process.env['NX_VERBOSE_LOGGING'] === 'true') { devkit_1.logger.debug(`[${pluginName}]: Getting dependencies for project '${sourceProjectName}'...`); } const dependencies = []; const sourceProjectRoot = (0, utils_1.getProjectRootFromFile)(filePath); const sourcePkgInfo = workspace.projects[sourceProjectRoot]; if (!sourcePkgInfo) return dependencies; sourcePkgInfo.dependencies?.forEach((depPkgInfo) => { const targetProjectName = workspace.packages[depPkgInfo.packageId]; if (targetProjectName) { dependencies.push({ source: sourceProjectName, target: targetProjectName, type: devkit_1.DependencyType.static, sourceFile: (0, devkit_1.joinPathFragments)(sourceProjectRoot, sourcePkgInfo.packageFile), }); } }); sourcePkgInfo.modules?.forEach((moduleId) => { const depProject = workspace.projects[moduleId]; if (depProject) { dependencies.push({ source: sourceProjectName, target: workspace.packages[depProject.packageId], type: devkit_1.DependencyType.static, sourceFile: (0, devkit_1.joinPathFragments)(sourceProjectRoot, sourcePkgInfo.packageFile), }); } }); return dependencies; } function getProjectFilesGlob(projectFiles) { return projectFiles.length > 1 ? `**/{${projectFiles.join(',')}}` : `**/${projectFiles[0]}`; } // Project Graph using CreateNode (V1) const createNodesFor = (projectFiles, projectFilter, getProjectTypeAndTargets, pluginName) => [ getProjectFilesGlob(projectFiles), createNodesInternal(projectFilter, getProjectTypeAndTargets, pluginName), ]; exports.createNodesFor = createNodesFor; // Project Graph using CreateNode (V2) const createNodesForV2 = (projectFiles, projectFilter, getProjectTypeAndTargets, pluginName) => [ getProjectFilesGlob(projectFiles), (files, options, context) => { return (0, devkit_1.createNodesFromFiles)(createNodesInternal(projectFilter, getProjectTypeAndTargets, pluginName), files, options, context); }, ]; exports.createNodesForV2 = createNodesForV2; const createDependenciesIf = (pluginName, projectFiles, projectFilter, getPackageInfo, ctx) => { if (process.env['NX_VERBOSE_LOGGING'] === 'true') { devkit_1.logger.debug(`[${pluginName}]: Looking related projects inside the workspace...`); } let workspace = undefined; let dependencies = []; const projectFileGlob = getProjectFilesGlob(projectFiles); for (const source in ctx.filesToProcess.projectFileMap) { const changed = ctx.filesToProcess.projectFileMap[source]; for (const file of changed) { if ((0, minimatch_1.minimatch)(file.file, projectFileGlob)) { // we only create the workspace map once and only if changed file is of interest workspace ??= getPackageInfosForNxProjects(pluginName, projectFilter, getPackageInfo, { projects: ctx.projects }); dependencies = dependencies.concat(getDependenciesForProject(pluginName, file.file, source, workspace)); } } } dependencies.forEach((dep) => (0, devkit_1.validateDependency)(dep, ctx)); return dependencies; }; exports.createDependenciesIf = createDependenciesIf; function createNodesInternal(projectFilter, getProjectTypeAndTargets, pluginName) { return (file, options, context) => { if (!projectFilter({ root: (0, utils_1.getProjectRootFromFile)(file) })) { return {}; // back off if the file/project does not match the criteria } const root = (0, path_1.dirname)(file); // eslint-disable-next-line no-useless-escape -- eslint's wrong const parts = root.split(/[\/\\]/g); const name = parts[parts.length - 1].toLowerCase(); return { projects: { [name]: { name, root, ...((0, utils_1.isNxCrystalEnabled)() ? getProjectTypeAndTargets(file, options) : {}), tags: [`type:${pluginName.replace('@nxrocks/', '')}`], }, }, }; }; } //# sourceMappingURL=project-graph.js.map