UNPKG

nx

Version:

The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.

120 lines (119 loc) 6.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.setupWorkspaceContext = setupWorkspaceContext; exports.getNxWorkspaceFilesFromContext = getNxWorkspaceFilesFromContext; exports.globWithWorkspaceContextSync = globWithWorkspaceContextSync; exports.globWithWorkspaceContext = globWithWorkspaceContext; exports.multiGlobWithWorkspaceContext = multiGlobWithWorkspaceContext; exports.hashWithWorkspaceContext = hashWithWorkspaceContext; exports.hashMultiGlobWithWorkspaceContext = hashMultiGlobWithWorkspaceContext; exports.updateContextWithChangedFiles = updateContextWithChangedFiles; exports.updateFilesInContext = updateFilesInContext; exports.getAllFileDataInContext = getAllFileDataInContext; exports.getFilesInDirectoryUsingContext = getFilesInDirectoryUsingContext; exports.updateProjectFiles = updateProjectFiles; exports.resetWorkspaceContext = resetWorkspaceContext; const perf_hooks_1 = require("perf_hooks"); const cache_directory_1 = require("./cache-directory"); const is_on_daemon_1 = require("../daemon/is-on-daemon"); const client_1 = require("../daemon/client/client"); let workspaceContext; function setupWorkspaceContext(workspaceRoot) { const { WorkspaceContext } = require('../native'); perf_hooks_1.performance.mark('workspace-context'); workspaceContext = new WorkspaceContext(workspaceRoot, (0, cache_directory_1.workspaceDataDirectoryForWorkspace)(workspaceRoot)); perf_hooks_1.performance.mark('workspace-context:end'); perf_hooks_1.performance.measure('workspace context init', 'workspace-context', 'workspace-context:end'); } async function getNxWorkspaceFilesFromContext(workspaceRoot, projectRootMap) { if ((0, is_on_daemon_1.isOnDaemon)() || !client_1.daemonClient.enabled()) { ensureContextAvailable(workspaceRoot); return workspaceContext.getWorkspaceFiles(projectRootMap); } return client_1.daemonClient.getWorkspaceFiles(projectRootMap); } /** * Sync method to get files matching globs from workspace context. * NOTE: This method will create the workspace context if it doesn't exist. * It should only be used within Nx internal in code paths that **must** be sync. * If used in an isolated plugin thread this will cause the workspace context * to be recreated which is slow. */ function globWithWorkspaceContextSync(workspaceRoot, globs, exclude) { ensureContextAvailable(workspaceRoot); return workspaceContext.glob(globs, exclude); } async function globWithWorkspaceContext(workspaceRoot, globs, exclude) { if ((0, is_on_daemon_1.isOnDaemon)() || !client_1.daemonClient.enabled()) { ensureContextAvailable(workspaceRoot); return workspaceContext.glob(globs, exclude); } else { return client_1.daemonClient.glob(globs, exclude); } } async function multiGlobWithWorkspaceContext(workspaceRoot, globs, exclude) { if ((0, is_on_daemon_1.isOnDaemon)() || !client_1.daemonClient.enabled()) { ensureContextAvailable(workspaceRoot); return workspaceContext.multiGlob(globs, exclude); } return client_1.daemonClient.multiGlob(globs, exclude); } async function hashWithWorkspaceContext(workspaceRoot, globs, exclude) { if ((0, is_on_daemon_1.isOnDaemon)() || !client_1.daemonClient.enabled()) { ensureContextAvailable(workspaceRoot); return workspaceContext.hashFilesMatchingGlob(globs, exclude); } return client_1.daemonClient.hashGlob(globs, exclude); } async function hashMultiGlobWithWorkspaceContext(workspaceRoot, globGroups) { if ((0, is_on_daemon_1.isOnDaemon)() || !client_1.daemonClient.enabled()) { ensureContextAvailable(workspaceRoot); return workspaceContext.hashFilesMatchingGlobs(globGroups); } return client_1.daemonClient.hashMultiGlob(globGroups); } async function updateContextWithChangedFiles(workspaceRoot, createdFiles, updatedFiles, deletedFiles) { if (!client_1.daemonClient.enabled()) { updateFilesInContext(workspaceRoot, [...createdFiles, ...updatedFiles], deletedFiles); } else if ((0, is_on_daemon_1.isOnDaemon)()) { // make sure to only import this when running on the daemon const { addUpdatedAndDeletedFiles } = await Promise.resolve().then(() => require('../daemon/server/project-graph-incremental-recomputation')); // update files for the incremental graph recomputation on the daemon addUpdatedAndDeletedFiles(createdFiles, updatedFiles, deletedFiles); } else { // daemon is enabled but we are not running on it, ask the daemon to update the context await client_1.daemonClient.updateWorkspaceContext(createdFiles, updatedFiles, deletedFiles); } } function updateFilesInContext(workspaceRoot, updatedFiles, deletedFiles) { ensureContextAvailable(workspaceRoot); return workspaceContext?.incrementalUpdate(updatedFiles, deletedFiles); } async function getAllFileDataInContext(workspaceRoot) { if ((0, is_on_daemon_1.isOnDaemon)() || !client_1.daemonClient.enabled()) { ensureContextAvailable(workspaceRoot); return workspaceContext.allFileData(); } return client_1.daemonClient.getWorkspaceContextFileData(); } async function getFilesInDirectoryUsingContext(workspaceRoot, dir) { if ((0, is_on_daemon_1.isOnDaemon)() || !client_1.daemonClient.enabled()) { ensureContextAvailable(workspaceRoot); return workspaceContext.getFilesInDirectory(dir); } return client_1.daemonClient.getFilesInDirectory(dir); } function updateProjectFiles(projectRootMappings, rustReferences, updatedFiles, deletedFiles) { return workspaceContext?.updateProjectFiles(projectRootMappings, rustReferences.projectFiles, rustReferences.globalFiles, updatedFiles, deletedFiles); } function ensureContextAvailable(workspaceRoot) { if (!workspaceContext || workspaceContext?.workspaceRoot !== workspaceRoot) { setupWorkspaceContext(workspaceRoot); } } function resetWorkspaceContext() { workspaceContext = undefined; }