nx 20.2.0-beta.5 → 20.2.0-beta.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. package/bin/post-install.js +5 -3
  2. package/package.json +11 -11
  3. package/plugins/package-json.d.ts +5 -1
  4. package/plugins/package-json.js +26 -2
  5. package/src/command-line/affected/affected.js +3 -1
  6. package/src/command-line/format/format.js +4 -2
  7. package/src/command-line/show/project.js +4 -0
  8. package/src/command-line/show/projects.js +4 -0
  9. package/src/command-line/sync/sync.js +3 -3
  10. package/src/daemon/server/project-graph-incremental-recomputation.js +4 -4
  11. package/src/daemon/server/shutdown-utils.js +2 -2
  12. package/src/executors/utils/convert-nx-executor.js +2 -3
  13. package/src/native/nx.wasm32-wasi.wasm +0 -0
  14. package/src/plugins/package-json/create-nodes.d.ts +3 -4
  15. package/src/plugins/package-json/create-nodes.js +19 -2
  16. package/src/project-graph/affected/affected-project-graph.js +3 -0
  17. package/src/project-graph/affected/locators/project-glob-changes.js +16 -4
  18. package/src/project-graph/build-project-graph.d.ts +1 -0
  19. package/src/project-graph/build-project-graph.js +12 -3
  20. package/src/project-graph/error-types.d.ts +1 -1
  21. package/src/project-graph/plugins/get-plugins.d.ts +4 -0
  22. package/src/{daemon/server/plugins.js → project-graph/plugins/get-plugins.js} +19 -1
  23. package/src/project-graph/plugins/index.js +1 -0
  24. package/src/project-graph/plugins/internal-api.d.ts +4 -0
  25. package/src/project-graph/plugins/internal-api.js +14 -7
  26. package/src/project-graph/plugins/isolation/index.js +1 -7
  27. package/src/project-graph/plugins/isolation/plugin-worker.js +2 -2
  28. package/src/project-graph/plugins/loader.d.ts +1 -1
  29. package/src/project-graph/plugins/loader.js +0 -3
  30. package/src/project-graph/project-graph.js +19 -11
  31. package/src/project-graph/utils/retrieve-workspace-files.d.ts +2 -6
  32. package/src/project-graph/utils/retrieve-workspace-files.js +3 -5
  33. package/src/tasks-runner/run-command.js +2 -2
  34. package/src/utils/sync-generators.js +9 -14
  35. package/src/daemon/server/plugins.d.ts +0 -3
@@ -18,10 +18,12 @@ const workspace_context_1 = require("../src/utils/workspace-context");
18
18
  if (isMainNxPackage() && (0, fileutils_1.fileExists)((0, path_1.join)(workspace_root_1.workspaceRoot, 'nx.json'))) {
19
19
  (0, assert_supported_platform_1.assertSupportedPlatform)();
20
20
  (0, workspace_context_1.setupWorkspaceContext)(workspace_root_1.workspaceRoot);
21
- try {
22
- await client_1.daemonClient.stop();
21
+ if (client_1.daemonClient.enabled()) {
22
+ try {
23
+ await client_1.daemonClient.stop();
24
+ }
25
+ catch (e) { }
23
26
  }
24
- catch (e) { }
25
27
  const tasks = [
26
28
  (0, project_graph_1.buildProjectGraphAndSourceMapsWithoutDaemon)(),
27
29
  ];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nx",
3
- "version": "20.2.0-beta.5",
3
+ "version": "20.2.0-beta.6",
4
4
  "private": false,
5
5
  "description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.",
6
6
  "repository": {
@@ -80,16 +80,16 @@
80
80
  }
81
81
  },
82
82
  "optionalDependencies": {
83
- "@nx/nx-darwin-x64": "20.2.0-beta.5",
84
- "@nx/nx-darwin-arm64": "20.2.0-beta.5",
85
- "@nx/nx-linux-x64-gnu": "20.2.0-beta.5",
86
- "@nx/nx-linux-x64-musl": "20.2.0-beta.5",
87
- "@nx/nx-win32-x64-msvc": "20.2.0-beta.5",
88
- "@nx/nx-linux-arm64-gnu": "20.2.0-beta.5",
89
- "@nx/nx-linux-arm64-musl": "20.2.0-beta.5",
90
- "@nx/nx-linux-arm-gnueabihf": "20.2.0-beta.5",
91
- "@nx/nx-win32-arm64-msvc": "20.2.0-beta.5",
92
- "@nx/nx-freebsd-x64": "20.2.0-beta.5"
83
+ "@nx/nx-darwin-x64": "20.2.0-beta.6",
84
+ "@nx/nx-darwin-arm64": "20.2.0-beta.6",
85
+ "@nx/nx-linux-x64-gnu": "20.2.0-beta.6",
86
+ "@nx/nx-linux-x64-musl": "20.2.0-beta.6",
87
+ "@nx/nx-win32-x64-msvc": "20.2.0-beta.6",
88
+ "@nx/nx-linux-arm64-gnu": "20.2.0-beta.6",
89
+ "@nx/nx-linux-arm64-musl": "20.2.0-beta.6",
90
+ "@nx/nx-linux-arm-gnueabihf": "20.2.0-beta.6",
91
+ "@nx/nx-win32-arm64-msvc": "20.2.0-beta.6",
92
+ "@nx/nx-freebsd-x64": "20.2.0-beta.6"
93
93
  },
94
94
  "nx-migrations": {
95
95
  "migrations": "./migrations.json",
@@ -1 +1,5 @@
1
- export {};
1
+ import { ProjectConfiguration } from '../src/config/workspace-json-project-json';
2
+ export type PackageJsonConfigurationCache = {
3
+ [hash: string]: ProjectConfiguration;
4
+ };
5
+ export declare function readPackageJsonConfigurationCache(): PackageJsonConfigurationCache;
@@ -1,12 +1,36 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.readPackageJsonConfigurationCache = readPackageJsonConfigurationCache;
4
+ const plugins_1 = require("../src/project-graph/plugins");
3
5
  const workspace_root_1 = require("../src/utils/workspace-root");
4
6
  const package_json_1 = require("../src/plugins/package-json");
7
+ const cache_directory_1 = require("../src/utils/cache-directory");
8
+ const path_1 = require("path");
9
+ const fileutils_1 = require("../src/utils/fileutils");
10
+ const cachePath = (0, path_1.join)(cache_directory_1.workspaceDataDirectory, 'package-json.hash');
11
+ function readPackageJsonConfigurationCache() {
12
+ try {
13
+ return (0, fileutils_1.readJsonFile)(cachePath);
14
+ }
15
+ catch (e) {
16
+ return {};
17
+ }
18
+ }
19
+ function writeCache(cache) {
20
+ (0, fileutils_1.writeJsonFile)(cachePath, cache);
21
+ }
5
22
  const plugin = {
6
23
  name: 'nx-all-package-jsons-plugin',
7
- createNodes: [
24
+ createNodesV2: [
8
25
  '*/**/package.json',
9
- (f) => (0, package_json_1.createNodeFromPackageJson)(f, workspace_root_1.workspaceRoot),
26
+ (configFiles, options, context) => {
27
+ const cache = readPackageJsonConfigurationCache();
28
+ const result = (0, plugins_1.createNodesFromFiles)((f) => (0, package_json_1.createNodeFromPackageJson)(f, workspace_root_1.workspaceRoot, cache), configFiles, options, context);
29
+ writeCache(cache);
30
+ return result;
31
+ },
10
32
  ],
11
33
  };
12
34
  module.exports = plugin;
35
+ module.exports.readPackageJsonConfigurationCache =
36
+ readPackageJsonConfigurationCache;
@@ -26,7 +26,9 @@ async function affected(command, args, extraTargetDependencies = {}, extraOption
26
26
  printWarnings: command !== 'print-affected' && !args.plain && args.graph !== 'stdout',
27
27
  }, nxJson);
28
28
  await (0, connect_to_nx_cloud_1.connectToNxCloudIfExplicitlyAsked)(nxArgs);
29
- const projectGraph = await (0, project_graph_1.createProjectGraphAsync)({ exitOnError: true });
29
+ const projectGraph = await (0, project_graph_1.createProjectGraphAsync)({
30
+ exitOnError: true,
31
+ });
30
32
  const projects = await getAffectedGraphNodes(nxArgs, projectGraph);
31
33
  try {
32
34
  switch (command) {
@@ -34,7 +34,7 @@ async function format(command, args) {
34
34
  const patterns = (await getPatterns({ ...args, ...nxArgs })).map(
35
35
  // prettier removes one of the \
36
36
  // prettier-ignore
37
- (p) => `"${p.replace(/\$/g, "\\\$")}"`);
37
+ (p) => `"${p.replace(/\$/g, '\\\$')}"`);
38
38
  // Chunkify the patterns array to prevent crashing the windows terminal
39
39
  const chunkList = (0, chunkify_1.chunkify)(patterns);
40
40
  switch (command) {
@@ -110,7 +110,9 @@ async function getPatterns(args) {
110
110
  }
111
111
  }
112
112
  async function getPatternsFromApps(affectedFiles, allWorkspaceFiles, projectGraph) {
113
- const graph = await (0, project_graph_1.createProjectGraphAsync)({ exitOnError: true });
113
+ const graph = await (0, project_graph_1.createProjectGraphAsync)({
114
+ exitOnError: true,
115
+ });
114
116
  const affectedGraph = await (0, affected_project_graph_1.filterAffected)(graph, (0, file_utils_1.calculateFileChanges)(affectedFiles, allWorkspaceFiles));
115
117
  return getPatternsFromProjects(Object.keys(affectedGraph.nodes), projectGraph);
116
118
  }
@@ -5,6 +5,8 @@ const output_1 = require("../../utils/output");
5
5
  const project_graph_1 = require("../../project-graph/project-graph");
6
6
  const graph_1 = require("../graph/graph");
7
7
  async function showProjectHandler(args) {
8
+ performance.mark('code-loading:end');
9
+ performance.measure('code-loading', 'init-local', 'code-loading:end');
8
10
  const graph = await (0, project_graph_1.createProjectGraphAsync)();
9
11
  const node = graph.nodes[args.projectName];
10
12
  if (!node) {
@@ -56,5 +58,7 @@ async function showProjectHandler(args) {
56
58
  }
57
59
  }
58
60
  }
61
+ // TODO: Find a better fix for this
62
+ await new Promise((res) => setImmediate(res));
59
63
  await output_1.output.drain();
60
64
  }
@@ -11,6 +11,8 @@ const all_file_data_1 = require("../../utils/all-file-data");
11
11
  const command_line_utils_1 = require("../../utils/command-line-utils");
12
12
  const find_matching_projects_1 = require("../../utils/find-matching-projects");
13
13
  async function showProjectsHandler(args) {
14
+ performance.mark('code-loading:end');
15
+ performance.measure('code-loading', 'init-local', 'code-loading:end');
14
16
  let graph = await (0, project_graph_1.createProjectGraphAsync)();
15
17
  const nxJson = (0, nx_json_1.readNxJson)();
16
18
  const { nxArgs } = (0, command_line_utils_1.splitArgsIntoNxArgsAndOverrides)(args, 'affected', {
@@ -59,6 +61,8 @@ async function showProjectsHandler(args) {
59
61
  console.log(project);
60
62
  }
61
63
  }
64
+ // TODO: Find a better fix for this
65
+ await new Promise((res) => setImmediate(res));
62
66
  await output_1.output.drain();
63
67
  }
64
68
  function getGraphNodesMatchingPatterns(graph, patterns) {
@@ -29,7 +29,7 @@ function syncHandler(options) {
29
29
  title: options.check
30
30
  ? 'The workspace is up to date'
31
31
  : 'The workspace is already up to date',
32
- bodyLines: syncGenerators.map((generator) => `The ${chalk.bold(generator)} sync generator didn't identify any files in the workspace that are out of sync.`),
32
+ bodyLines: syncGenerators.map((generator) => `[${chalk.bold(generator)}]: All files are up to date.`),
33
33
  });
34
34
  return 0;
35
35
  }
@@ -85,9 +85,9 @@ function syncHandler(options) {
85
85
  'Syncing the workspace failed with the following error:',
86
86
  '',
87
87
  e.message,
88
- ...(options.verbose && !!e.stack ? [`\n${e.stack}`] : []),
88
+ ...(!!e.stack ? [`\n${e.stack}`] : []),
89
89
  '',
90
- 'Please rerun with `--verbose` and report the error at: https://github.com/nrwl/nx/issues/new/choose',
90
+ 'Please report the error at: https://github.com/nrwl/nx/issues/new/choose',
91
91
  ],
92
92
  });
93
93
  return 1;
@@ -16,8 +16,8 @@ const workspace_context_1 = require("../../utils/workspace-context");
16
16
  const workspace_root_1 = require("../../utils/workspace-root");
17
17
  const file_watcher_sockets_1 = require("./file-watching/file-watcher-sockets");
18
18
  const logger_1 = require("./logger");
19
- const plugins_1 = require("./plugins");
20
19
  const error_types_1 = require("../../project-graph/error-types");
20
+ const get_plugins_1 = require("../../project-graph/plugins/get-plugins");
21
21
  let cachedSerializedProjectGraphPromise;
22
22
  const collectedUpdatedFiles = new Set();
23
23
  const collectedDeletedFiles = new Set();
@@ -38,7 +38,7 @@ async function getCachedSerializedProjectGraphPromise() {
38
38
  // reset the wait time
39
39
  waitPeriod = 100;
40
40
  await resetInternalStateIfNxDepsMissing();
41
- const plugins = await (0, plugins_1.getPlugins)();
41
+ const plugins = await (0, get_plugins_1.getPlugins)();
42
42
  if (collectedUpdatedFiles.size == 0 && collectedDeletedFiles.size == 0) {
43
43
  if (!cachedSerializedProjectGraphPromise) {
44
44
  cachedSerializedProjectGraphPromise =
@@ -90,7 +90,7 @@ function addUpdatedAndDeletedFiles(createdFiles, updatedFiles, deletedFiles) {
90
90
  waitPeriod = waitPeriod * 2;
91
91
  }
92
92
  cachedSerializedProjectGraphPromise =
93
- processFilesAndCreateAndSerializeProjectGraph(await (0, plugins_1.getPlugins)());
93
+ processFilesAndCreateAndSerializeProjectGraph(await (0, get_plugins_1.getPlugins)());
94
94
  const { projectGraph } = await cachedSerializedProjectGraphPromise;
95
95
  if (createdFiles.length > 0) {
96
96
  (0, file_watcher_sockets_1.notifyFileWatcherSockets)(createdFiles, null, null);
@@ -238,7 +238,7 @@ async function createAndSerializeProjectGraph({ projects, sourceMaps, }) {
238
238
  const fileMap = copyFileMap(exports.fileMapWithFiles.fileMap);
239
239
  const allWorkspaceFiles = copyFileData(exports.fileMapWithFiles.allWorkspaceFiles);
240
240
  const rustReferences = exports.fileMapWithFiles.rustReferences;
241
- const { projectGraph, projectFileMapCache } = await (0, build_project_graph_1.buildProjectGraphUsingProjectFileMap)(projects, knownExternalNodes, fileMap, allWorkspaceFiles, rustReferences, exports.currentProjectFileMapCache || (0, nx_deps_cache_1.readFileMapCache)(), await (0, plugins_1.getPlugins)(), sourceMaps);
241
+ const { projectGraph, projectFileMapCache } = await (0, build_project_graph_1.buildProjectGraphUsingProjectFileMap)(projects, knownExternalNodes, fileMap, allWorkspaceFiles, rustReferences, exports.currentProjectFileMapCache || (0, nx_deps_cache_1.readFileMapCache)(), await (0, get_plugins_1.getPlugins)(), sourceMaps);
242
242
  exports.currentProjectFileMapCache = projectFileMapCache;
243
243
  exports.currentProjectGraph = projectGraph;
244
244
  perf_hooks_1.performance.mark('create-project-graph-end');
@@ -13,9 +13,9 @@ const workspace_root_1 = require("../../utils/workspace-root");
13
13
  const logger_1 = require("./logger");
14
14
  const socket_utils_1 = require("../socket-utils");
15
15
  const cache_1 = require("../cache");
16
- const plugins_1 = require("./plugins");
17
16
  const error_types_1 = require("../../project-graph/error-types");
18
17
  const db_connection_1 = require("../../utils/db-connection");
18
+ const get_plugins_1 = require("../../project-graph/plugins/get-plugins");
19
19
  exports.SERVER_INACTIVITY_TIMEOUT_MS = 10800000; // 10800000 ms = 3 hours
20
20
  let watcherInstance;
21
21
  function storeWatcherInstance(instance) {
@@ -50,7 +50,7 @@ async function handleServerProcessTermination({ server, reason, sockets, }) {
50
50
  logger_1.serverLogger.watcherLog(`Stopping the watcher for ${workspace_root_1.workspaceRoot} (outputs)`);
51
51
  }
52
52
  (0, cache_1.deleteDaemonJsonProcessCache)();
53
- (0, plugins_1.cleanupPlugins)();
53
+ (0, get_plugins_1.cleanupPlugins)();
54
54
  (0, db_connection_1.removeDbConnections)();
55
55
  logger_1.serverLogger.log(`Server stopped because: "${reason}"`);
56
56
  }
@@ -7,7 +7,7 @@ exports.convertNxExecutor = convertNxExecutor;
7
7
  const nx_json_1 = require("../../config/nx-json");
8
8
  const retrieve_workspace_files_1 = require("../../project-graph/utils/retrieve-workspace-files");
9
9
  const project_configuration_utils_1 = require("../../project-graph/utils/project-configuration-utils");
10
- const internal_api_1 = require("../../project-graph/plugins/internal-api");
10
+ const get_plugins_1 = require("../../project-graph/plugins/get-plugins");
11
11
  /**
12
12
  * Convert an Nx Executor into an Angular Devkit Builder
13
13
  *
@@ -17,12 +17,11 @@ function convertNxExecutor(executor) {
17
17
  const builderFunction = (options, builderContext) => {
18
18
  const promise = async () => {
19
19
  const nxJsonConfiguration = (0, nx_json_1.readNxJson)(builderContext.workspaceRoot);
20
- const [plugins, cleanup] = await (0, internal_api_1.loadNxPlugins)(nxJsonConfiguration.plugins, builderContext.workspaceRoot);
20
+ const plugins = await (0, get_plugins_1.getPlugins)();
21
21
  const projectsConfigurations = {
22
22
  version: 2,
23
23
  projects: (0, project_configuration_utils_1.readProjectConfigurationsFromRootMap)((await (0, retrieve_workspace_files_1.retrieveProjectConfigurations)(plugins, builderContext.workspaceRoot, nxJsonConfiguration)).projects),
24
24
  };
25
- cleanup();
26
25
  const context = {
27
26
  root: builderContext.workspaceRoot,
28
27
  projectName: builderContext.target.project,
Binary file
@@ -2,13 +2,12 @@ import { NxJsonConfiguration } from '../../config/nx-json';
2
2
  import { ProjectConfiguration } from '../../config/workspace-json-project-json';
3
3
  import { PackageJson } from '../../utils/package-json';
4
4
  import { CreateNodesV2 } from '../../project-graph/plugins';
5
+ import { PackageJsonConfigurationCache } from '../../../plugins/package-json';
5
6
  export declare const createNodesV2: CreateNodesV2;
6
7
  export declare function buildPackageJsonWorkspacesMatcher(workspaceRoot: string, readJson: (string: any) => any): (p: string) => boolean;
7
- export declare function createNodeFromPackageJson(pkgJsonPath: string, workspaceRoot: string): {
8
+ export declare function createNodeFromPackageJson(pkgJsonPath: string, workspaceRoot: string, cache: PackageJsonConfigurationCache): {
8
9
  projects: {
9
- [x: string]: ProjectConfiguration & {
10
- name: string;
11
- };
10
+ [x: string]: ProjectConfiguration;
12
11
  };
13
12
  };
14
13
  export declare function buildProjectConfigurationFromPackageJson(packageJson: PackageJson, workspaceRoot: string, packageJsonPath: string, nxJson: NxJsonConfiguration): ProjectConfiguration & {
@@ -18,6 +18,8 @@ const package_json_1 = require("../../utils/package-json");
18
18
  const path_1 = require("../../utils/path");
19
19
  const plugins_1 = require("../../project-graph/plugins");
20
20
  const path_2 = require("path");
21
+ const file_hasher_1 = require("../../hasher/file-hasher");
22
+ const package_json_2 = require("../../../plugins/package-json");
21
23
  exports.createNodesV2 = [
22
24
  (0, globs_1.combineGlobPatterns)('package.json', '**/package.json', 'project.json', '**/project.json'),
23
25
  (configFiles, _, context) => {
@@ -27,13 +29,14 @@ exports.createNodesV2 = [
27
29
  const isNextToProjectJson = (packageJsonPath) => {
28
30
  return projectJsonRoots.has((0, node_path_1.dirname)(packageJsonPath));
29
31
  };
32
+ const cache = (0, package_json_2.readPackageJsonConfigurationCache)();
30
33
  return (0, plugins_1.createNodesFromFiles)((packageJsonPath, options, context) => {
31
34
  if (!isInPackageJsonWorkspaces(packageJsonPath) &&
32
35
  !isNextToProjectJson(packageJsonPath)) {
33
36
  // Skip if package.json is not part of the package.json workspaces and not next to a project.json.
34
37
  return null;
35
38
  }
36
- return createNodeFromPackageJson(packageJsonPath, context.workspaceRoot);
39
+ return createNodeFromPackageJson(packageJsonPath, context.workspaceRoot, cache);
37
40
  }, packageJsons, _, context);
38
41
  },
39
42
  ];
@@ -75,9 +78,23 @@ function buildPackageJsonWorkspacesMatcher(workspaceRoot, readJson) {
75
78
  */
76
79
  negativePatterns.every((negative) => (0, minimatch_1.minimatch)(p, negative));
77
80
  }
78
- function createNodeFromPackageJson(pkgJsonPath, workspaceRoot) {
81
+ function createNodeFromPackageJson(pkgJsonPath, workspaceRoot, cache) {
79
82
  const json = (0, fileutils_1.readJsonFile)((0, node_path_1.join)(workspaceRoot, pkgJsonPath));
83
+ const projectRoot = (0, node_path_1.dirname)(pkgJsonPath);
84
+ const hash = (0, file_hasher_1.hashObject)({
85
+ ...json,
86
+ root: projectRoot,
87
+ });
88
+ const cached = cache[hash];
89
+ if (cached) {
90
+ return {
91
+ projects: {
92
+ [cached.root]: cached,
93
+ },
94
+ };
95
+ }
80
96
  const project = buildProjectConfigurationFromPackageJson(json, workspaceRoot, pkgJsonPath, (0, nx_json_1.readNxJson)(workspaceRoot));
97
+ cache[hash] = project;
81
98
  return {
82
99
  projects: {
83
100
  [project.root]: project,
@@ -17,7 +17,10 @@ async function filterAffected(graph, touchedFiles, nxJson = (0, configuration_1.
17
17
  ];
18
18
  const touchedProjects = [];
19
19
  for (const locator of touchedProjectLocators) {
20
+ performance.mark(locator.name + ':start');
20
21
  const projects = await locator(touchedFiles, graph.nodes, nxJson, packageJson, graph);
22
+ performance.mark(locator.name + ':end');
23
+ performance.measure(locator.name, locator.name + ':start', locator.name + ':end');
21
24
  touchedProjects.push(...projects);
22
25
  }
23
26
  return filterAffectedProjects(graph, {
@@ -6,11 +6,23 @@ const workspace_root_1 = require("../../../utils/workspace-root");
6
6
  const path_1 = require("path");
7
7
  const fs_1 = require("fs");
8
8
  const retrieve_workspace_files_1 = require("../../utils/retrieve-workspace-files");
9
- const internal_api_1 = require("../../plugins/internal-api");
10
9
  const globs_1 = require("../../../utils/globs");
11
- const getTouchedProjectsFromProjectGlobChanges = async (touchedFiles, projectGraphNodes, nxJson) => {
12
- const [plugins] = await (0, internal_api_1.loadNxPlugins)(nxJson?.plugins ?? [], workspace_root_1.workspaceRoot);
13
- const globPattern = (0, globs_1.combineGlobPatterns)((0, retrieve_workspace_files_1.configurationGlobs)(plugins));
10
+ const get_plugins_1 = require("../../plugins/get-plugins");
11
+ const getTouchedProjectsFromProjectGlobChanges = async (touchedFiles, projectGraphNodes) => {
12
+ const globPattern = await (async () => {
13
+ // TODO: We need a quicker way to get patterns that should not
14
+ // require starting up plugin workers
15
+ if (process.env.NX_FORCE_REUSE_CACHED_GRAPH === 'true') {
16
+ return (0, globs_1.combineGlobPatterns)([
17
+ '**/package.json',
18
+ '**/project.json',
19
+ 'project.json',
20
+ 'package.json',
21
+ ]);
22
+ }
23
+ const plugins = await (0, get_plugins_1.getPlugins)();
24
+ return (0, globs_1.combineGlobPatterns)((0, retrieve_workspace_files_1.configurationGlobs)(plugins));
25
+ })();
14
26
  const touchedProjects = new Set();
15
27
  for (const touchedFile of touchedFiles) {
16
28
  const isProjectFile = (0, minimatch_1.minimatch)(touchedFile.file, globPattern, {
@@ -12,6 +12,7 @@ export declare function getFileMap(): {
12
12
  allWorkspaceFiles: FileData[];
13
13
  rustReferences: NxWorkspaceFilesExternals | null;
14
14
  };
15
+ export declare function hydrateFileMap(fileMap: FileMap, allWorkspaceFiles: FileData[], rustReferences: NxWorkspaceFilesExternals): void;
15
16
  export declare function buildProjectGraphUsingProjectFileMap(projectRootMap: Record<string, ProjectConfiguration>, externalNodes: Record<string, ProjectGraphExternalNode>, fileMap: FileMap, allWorkspaceFiles: FileData[], rustReferences: NxWorkspaceFilesExternals, fileMapCache: FileMapCache | null, plugins: LoadedNxPlugin[], sourceMap: ConfigurationSourceMaps): Promise<{
16
17
  projectGraph: ProjectGraph;
17
18
  projectFileMapCache: FileMapCache;
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getFileMap = getFileMap;
4
+ exports.hydrateFileMap = hydrateFileMap;
4
5
  exports.buildProjectGraphUsingProjectFileMap = buildProjectGraphUsingProjectFileMap;
5
6
  exports.applyProjectMetadata = applyProjectMetadata;
6
7
  const workspace_root_1 = require("../utils/workspace-root");
@@ -39,6 +40,11 @@ function getFileMap() {
39
40
  };
40
41
  }
41
42
  }
43
+ function hydrateFileMap(fileMap, allWorkspaceFiles, rustReferences) {
44
+ storedFileMap = fileMap;
45
+ storedAllWorkspaceFiles = allWorkspaceFiles;
46
+ storedRustReferences = rustReferences;
47
+ }
42
48
  async function buildProjectGraphUsingProjectFileMap(projectRootMap, externalNodes, fileMap, allWorkspaceFiles, rustReferences, fileMapCache, plugins, sourceMap) {
43
49
  storedFileMap = fileMap;
44
50
  storedAllWorkspaceFiles = allWorkspaceFiles;
@@ -119,7 +125,6 @@ function readCombinedDeps() {
119
125
  };
120
126
  }
121
127
  async function buildProjectGraphUsingContext(knownExternalNodes, ctx, cachedFileData, projectGraphVersion, plugins, sourceMap) {
122
- perf_hooks_1.performance.mark('build project graph:start');
123
128
  const builder = new project_graph_builder_1.ProjectGraphBuilder(null, ctx.fileMap.projectFileMap);
124
129
  builder.setVersion(projectGraphVersion);
125
130
  for (const node in knownExternalNodes) {
@@ -158,8 +163,6 @@ async function buildProjectGraphUsingContext(knownExternalNodes, ctx, cachedFile
158
163
  }
159
164
  (0, implicit_project_dependencies_1.applyImplicitDependencies)(ctx.projects, updatedBuilder);
160
165
  const finalGraph = updatedBuilder.getUpdatedProjectGraph();
161
- perf_hooks_1.performance.mark('build project graph:end');
162
- perf_hooks_1.performance.measure('build project graph', 'build project graph:start', 'build project graph:end');
163
166
  if (!error) {
164
167
  return finalGraph;
165
168
  }
@@ -182,6 +185,7 @@ async function updateProjectGraphWithPlugins(context, initProjectGraph, plugins,
182
185
  const errors = [];
183
186
  const builder = new project_graph_builder_1.ProjectGraphBuilder(graph, context.fileMap.projectFileMap, context.fileMap.nonProjectFiles);
184
187
  const createDependencyPlugins = plugins.filter((plugin) => plugin.createDependencies);
188
+ perf_hooks_1.performance.mark('createDependencies:start');
185
189
  await Promise.all(createDependencyPlugins.map(async (plugin) => {
186
190
  perf_hooks_1.performance.mark(`${plugin.name}:createDependencies - start`);
187
191
  try {
@@ -200,6 +204,8 @@ async function updateProjectGraphWithPlugins(context, initProjectGraph, plugins,
200
204
  perf_hooks_1.performance.mark(`${plugin.name}:createDependencies - end`);
201
205
  perf_hooks_1.performance.measure(`${plugin.name}:createDependencies`, `${plugin.name}:createDependencies - start`, `${plugin.name}:createDependencies - end`);
202
206
  }));
207
+ perf_hooks_1.performance.mark('createDependencies:end');
208
+ perf_hooks_1.performance.measure(`createDependencies`, `createDependencies:start`, `createDependencies:end`);
203
209
  const graphWithDeps = builder.getUpdatedProjectGraph();
204
210
  const { errors: metadataErrors, graph: updatedGraph } = await applyProjectMetadata(graphWithDeps, plugins, {
205
211
  nxJsonConfiguration: context.nxJsonConfiguration,
@@ -225,6 +231,7 @@ function readRootTsConfig() {
225
231
  async function applyProjectMetadata(graph, plugins, context, sourceMap) {
226
232
  const results = [];
227
233
  const errors = [];
234
+ perf_hooks_1.performance.mark('createMetadata:start');
228
235
  const promises = plugins.map(async (plugin) => {
229
236
  if (plugin.createMetadata) {
230
237
  perf_hooks_1.performance.mark(`${plugin.name}:createMetadata - start`);
@@ -250,5 +257,7 @@ async function applyProjectMetadata(graph, plugins, context, sourceMap) {
250
257
  }
251
258
  }
252
259
  }
260
+ perf_hooks_1.performance.mark('createMetadata:end');
261
+ perf_hooks_1.performance.measure(`createMetadata`, `createMetadata:start`, `createMetadata:end`);
253
262
  return { errors, graph };
254
263
  }
@@ -1,7 +1,7 @@
1
1
  import { ConfigurationResult, ConfigurationSourceMaps } from './utils/project-configuration-utils';
2
2
  import { ProjectConfiguration } from '../config/workspace-json-project-json';
3
3
  import { ProjectGraph } from '../config/project-graph';
4
- import { CreateNodesFunctionV2 } from './plugins';
4
+ import { CreateNodesFunctionV2 } from './plugins/public-api';
5
5
  export declare class ProjectGraphError extends Error {
6
6
  #private;
7
7
  constructor(errors: Array<AggregateCreateNodesError | MergeNodesError | ProjectsWithNoNameError | MultipleProjectsWithSameNameError | ProcessDependenciesError | CreateMetadataError | WorkspaceValidityError>, partialProjectGraph: ProjectGraph, partialSourceMaps: ConfigurationSourceMaps);
@@ -0,0 +1,4 @@
1
+ import { LoadedNxPlugin } from './internal-api';
2
+ export declare function getPlugins(): Promise<LoadedNxPlugin[]>;
3
+ export declare function getOnlyDefaultPlugins(): Promise<LoadedNxPlugin[]>;
4
+ export declare function cleanupPlugins(): void;
@@ -1,10 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getPlugins = getPlugins;
4
+ exports.getOnlyDefaultPlugins = getOnlyDefaultPlugins;
4
5
  exports.cleanupPlugins = cleanupPlugins;
5
6
  const file_hasher_1 = require("../../hasher/file-hasher");
6
7
  const nx_json_1 = require("../../config/nx-json");
7
- const internal_api_1 = require("../../project-graph/plugins/internal-api");
8
+ const internal_api_1 = require("./internal-api");
8
9
  const workspace_root_1 = require("../../utils/workspace-root");
9
10
  let currentPluginsConfigurationHash;
10
11
  let loadedPlugins;
@@ -27,6 +28,23 @@ async function getPlugins() {
27
28
  loadedPlugins = result;
28
29
  return result;
29
30
  }
31
+ let loadedDefaultPlugins;
32
+ let cleanupDefaultPlugins;
33
+ async function getOnlyDefaultPlugins() {
34
+ // If the plugins configuration has not changed, reuse the current plugins
35
+ if (loadedDefaultPlugins) {
36
+ return loadedPlugins;
37
+ }
38
+ // Cleanup current plugins before loading new ones
39
+ if (cleanupDefaultPlugins) {
40
+ cleanupDefaultPlugins();
41
+ }
42
+ const [result, cleanupFn] = await (0, internal_api_1.loadNxPlugins)([], workspace_root_1.workspaceRoot);
43
+ cleanupDefaultPlugins = cleanupFn;
44
+ loadedPlugins = result;
45
+ return result;
46
+ }
30
47
  function cleanupPlugins() {
31
48
  cleanup();
49
+ cleanupDefaultPlugins();
32
50
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createNodesFromFiles = exports.registerPluginTSTranspiler = exports.readPluginPackageJson = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  tslib_1.__exportStar(require("./public-api"), exports);
6
+ // export * from './get-plugins';
6
7
  var loader_1 = require("./loader");
7
8
  Object.defineProperty(exports, "readPluginPackageJson", { enumerable: true, get: function () { return loader_1.readPluginPackageJson; } });
8
9
  Object.defineProperty(exports, "registerPluginTSTranspiler", { enumerable: true, get: function () { return loader_1.registerPluginTSTranspiler; } });
@@ -18,5 +18,9 @@ export type CreateNodesResultWithContext = CreateNodesResult & {
18
18
  file: string;
19
19
  pluginName: string;
20
20
  };
21
+ /**
22
+ * Use `getPlugins` instead.
23
+ * @deprecated Do not use this. Use `getPlugins` instead.
24
+ */
21
25
  export declare function loadNxPlugins(plugins: PluginConfiguration[], root?: string): Promise<readonly [LoadedNxPlugin[], () => void]>;
22
26
  export declare function getDefaultPlugins(root: string): Promise<string[]>;
@@ -80,21 +80,28 @@ function isIsolationEnabled() {
80
80
  // Default value
81
81
  return true;
82
82
  }
83
+ /**
84
+ * Use `getPlugins` instead.
85
+ * @deprecated Do not use this. Use `getPlugins` instead.
86
+ */
83
87
  async function loadNxPlugins(plugins, root = workspace_root_1.workspaceRoot) {
84
88
  performance.mark('loadNxPlugins:start');
85
89
  const loadingMethod = isIsolationEnabled()
86
90
  ? isolation_1.loadNxPluginInIsolation
87
91
  : loader_1.loadNxPlugin;
88
92
  plugins = await normalizePlugins(plugins, root);
89
- const result = new Array(plugins?.length);
90
93
  const cleanupFunctions = [];
91
- await Promise.all(plugins.map(async (plugin, idx) => {
92
- const [loadedPluginPromise, cleanup] = await loadingMethod(plugin, root);
93
- result[idx] = loadedPluginPromise;
94
- cleanupFunctions.push(cleanup);
95
- }));
96
94
  const ret = [
97
- await Promise.all(result),
95
+ await Promise.all(plugins.map(async (plugin) => {
96
+ const pluginPath = typeof plugin === 'string' ? plugin : plugin.plugin;
97
+ performance.mark(`Load Nx Plugin: ${pluginPath} - start`);
98
+ const [loadedPluginPromise, cleanup] = await loadingMethod(plugin, root);
99
+ cleanupFunctions.push(cleanup);
100
+ const res = await loadedPluginPromise;
101
+ performance.mark(`Load Nx Plugin: ${pluginPath} - end`);
102
+ performance.measure(`Load Nx Plugin: ${pluginPath}`, `Load Nx Plugin: ${pluginPath} - start`, `Load Nx Plugin: ${pluginPath} - end`);
103
+ return res;
104
+ })),
98
105
  () => {
99
106
  for (const fn of cleanupFunctions) {
100
107
  fn();
@@ -4,11 +4,5 @@ exports.loadNxPluginInIsolation = loadNxPluginInIsolation;
4
4
  const workspace_root_1 = require("../../../utils/workspace-root");
5
5
  const plugin_pool_1 = require("./plugin-pool");
6
6
  async function loadNxPluginInIsolation(plugin, root = workspace_root_1.workspaceRoot) {
7
- const [loadingPlugin, cleanup] = await (0, plugin_pool_1.loadRemoteNxPlugin)(plugin, root);
8
- return [
9
- loadingPlugin,
10
- () => {
11
- cleanup();
12
- },
13
- ];
7
+ return (0, plugin_pool_1.loadRemoteNxPlugin)(plugin, root);
14
8
  }
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const messaging_1 = require("./messaging");
4
- const loader_1 = require("../loader");
5
4
  const serializable_error_1 = require("../../../utils/serializable-error");
6
5
  const consume_messages_from_socket_1 = require("../../../utils/consume-messages-from-socket");
7
6
  const net_1 = require("net");
@@ -34,7 +33,8 @@ const server = (0, net_1.createServer)((socket) => {
34
33
  clearTimeout(loadTimeout);
35
34
  process.chdir(root);
36
35
  try {
37
- const [promise] = (0, loader_1.loadNxPlugin)(pluginConfiguration, root);
36
+ const { loadNxPlugin } = await Promise.resolve().then(() => require('../loader'));
37
+ const [promise] = loadNxPlugin(pluginConfiguration, root);
38
38
  plugin = await promise;
39
39
  return {
40
40
  type: 'load-result',
@@ -1,6 +1,6 @@
1
1
  import { ProjectConfiguration } from '../../config/workspace-json-project-json';
2
2
  import { PackageJson } from '../../utils/package-json';
3
- import { PluginConfiguration } from '../../config/nx-json';
3
+ import type { PluginConfiguration } from '../../config/nx-json';
4
4
  import { LoadedNxPlugin } from './internal-api';
5
5
  export declare function readPluginPackageJson(pluginName: string, projects: Record<string, ProjectConfiguration>, paths?: string[]): {
6
6
  path: string;
@@ -195,12 +195,9 @@ async function loadNxPluginAsync(pluginConfiguration, paths, root) {
195
195
  projectsWithoutInference ??=
196
196
  await (0, retrieve_workspace_files_1.retrieveProjectConfigurationsWithoutPluginInference)(root);
197
197
  }
198
- performance.mark(`Load Nx Plugin: ${moduleName} - start`);
199
198
  const { pluginPath, name } = getPluginPathAndName(moduleName, paths, projectsWithoutInference, root);
200
199
  const plugin = await importPluginModule(pluginPath);
201
200
  plugin.name ??= name;
202
- performance.mark(`Load Nx Plugin: ${moduleName} - end`);
203
- performance.measure(`Load Nx Plugin: ${moduleName}`, `Load Nx Plugin: ${moduleName} - start`, `Load Nx Plugin: ${moduleName} - end`);
204
201
  return new internal_api_1.LoadedNxPlugin(plugin, pluginConfiguration);
205
202
  }
206
203
  catch (e) {
@@ -18,8 +18,9 @@ const workspace_root_1 = require("../utils/workspace-root");
18
18
  const build_project_graph_1 = require("./build-project-graph");
19
19
  const error_types_1 = require("./error-types");
20
20
  const nx_deps_cache_1 = require("./nx-deps-cache");
21
- const internal_api_1 = require("./plugins/internal-api");
22
21
  const retrieve_workspace_files_1 = require("./utils/retrieve-workspace-files");
22
+ const get_plugins_1 = require("./plugins/get-plugins");
23
+ const logger_1 = require("../utils/logger");
23
24
  /**
24
25
  * Synchronously reads the latest cached copy of the workspace's ProjectGraph.
25
26
  * @throws {Error} if there is no cached ProjectGraph to read from
@@ -75,7 +76,7 @@ async function buildProjectGraphAndSourceMapsWithoutDaemon() {
75
76
  perf_hooks_1.performance.mark('retrieve-project-configurations:start');
76
77
  let configurationResult;
77
78
  let projectConfigurationsError;
78
- const [plugins, cleanup] = await (0, internal_api_1.loadNxPlugins)(nxJson.plugins);
79
+ const plugins = await (0, get_plugins_1.getPlugins)();
79
80
  try {
80
81
  configurationResult = await (0, retrieve_workspace_files_1.retrieveProjectConfigurations)(plugins, workspace_root_1.workspaceRoot, nxJson);
81
82
  }
@@ -112,15 +113,6 @@ async function buildProjectGraphAndSourceMapsWithoutDaemon() {
112
113
  throw e;
113
114
  }
114
115
  }
115
- finally {
116
- // When plugins are isolated we don't clean them up during
117
- // a single run of the CLI. They are cleaned up when the CLI
118
- // process exits. Cleaning them here could cause issues if pending
119
- // promises are not resolved.
120
- if (process.env.NX_ISOLATE_PLUGINS !== 'true') {
121
- cleanup();
122
- }
123
- }
124
116
  const { projectGraph, projectFileMapCache } = projectGraphResult;
125
117
  perf_hooks_1.performance.mark('build-project-graph-using-project-file-map:end');
126
118
  delete global.NX_GRAPH_CREATION;
@@ -195,6 +187,22 @@ async function createProjectGraphAsync(opts = {
195
187
  exitOnError: false,
196
188
  resetDaemonClient: false,
197
189
  }) {
190
+ if (process.env.NX_FORCE_REUSE_CACHED_GRAPH === 'true') {
191
+ try {
192
+ const graph = readCachedProjectGraph();
193
+ const projectRootMap = Object.fromEntries(Object.entries(graph.nodes).map(([project, { data }]) => [
194
+ data.root,
195
+ project,
196
+ ]));
197
+ const { allWorkspaceFiles, fileMap, rustReferences } = await (0, retrieve_workspace_files_1.retrieveWorkspaceFiles)(workspace_root_1.workspaceRoot, projectRootMap);
198
+ (0, build_project_graph_1.hydrateFileMap)(fileMap, allWorkspaceFiles, rustReferences);
199
+ return graph;
200
+ // If no cached graph is found, we will fall through to the normal flow
201
+ }
202
+ catch (e) {
203
+ logger_1.logger.verbose('Unable to use cached project graph', e);
204
+ }
205
+ }
198
206
  const projectGraphAndSourceMaps = await createProjectGraphAndSourceMapsAsync(opts);
199
207
  return projectGraphAndSourceMaps.projectGraph;
200
208
  }
@@ -21,10 +21,6 @@ export declare function retrieveWorkspaceFiles(workspaceRoot: string, projectRoo
21
21
  */
22
22
  export declare function retrieveProjectConfigurations(plugins: LoadedNxPlugin[], workspaceRoot: string, nxJson: NxJsonConfiguration): Promise<ConfigurationResult>;
23
23
  export declare function retrieveProjectConfigurationsWithAngularProjects(workspaceRoot: string, nxJson: NxJsonConfiguration): Promise<ConfigurationResult>;
24
- export declare function retrieveProjectConfigurationPaths(root: string, plugins: Array<{
25
- createNodes?: readonly [string, ...unknown[]];
26
- } & unknown>): Promise<string[]>;
24
+ export declare function retrieveProjectConfigurationPaths(root: string, plugins: Array<LoadedNxPlugin>): Promise<string[]>;
27
25
  export declare function retrieveProjectConfigurationsWithoutPluginInference(root: string): Promise<Record<string, ProjectConfiguration>>;
28
- export declare function configurationGlobs(plugins: Array<{
29
- createNodes?: readonly [string, ...unknown[]];
30
- }>): string[];
26
+ export declare function configurationGlobs(plugins: Array<LoadedNxPlugin>): string[];
@@ -10,10 +10,10 @@ const perf_hooks_1 = require("perf_hooks");
10
10
  const angular_json_1 = require("../../adapter/angular-json");
11
11
  const nx_json_1 = require("../../config/nx-json");
12
12
  const project_configuration_utils_1 = require("./project-configuration-utils");
13
- const internal_api_1 = require("../plugins/internal-api");
14
13
  const workspace_context_1 = require("../../utils/workspace-context");
15
14
  const build_all_workspace_files_1 = require("./build-all-workspace-files");
16
15
  const path_1 = require("path");
16
+ const get_plugins_1 = require("../plugins/get-plugins");
17
17
  /**
18
18
  * Walks the workspace directory to create the `projectFileMap`, `ProjectConfigurations` and `allWorkspaceFiles`
19
19
  * @throws
@@ -52,9 +52,8 @@ async function retrieveProjectConfigurationsWithAngularProjects(workspaceRoot, n
52
52
  (typeof p === 'object' && p.plugin === angular_json_1.NX_ANGULAR_JSON_PLUGIN_NAME))) {
53
53
  pluginsToLoad.push((0, path_1.join)(__dirname, '../../adapter/angular-json'));
54
54
  }
55
- const [plugins, cleanup] = await (0, internal_api_1.loadNxPlugins)(nxJson?.plugins ?? [], workspaceRoot);
55
+ const plugins = await (0, get_plugins_1.getPlugins)();
56
56
  const res = await retrieveProjectConfigurations(plugins, workspaceRoot, nxJson);
57
- cleanup();
58
57
  return res;
59
58
  }
60
59
  function retrieveProjectConfigurationPaths(root, plugins) {
@@ -65,7 +64,7 @@ const projectsWithoutPluginCache = new Map();
65
64
  // TODO: This function is called way too often, it should be optimized without this cache
66
65
  async function retrieveProjectConfigurationsWithoutPluginInference(root) {
67
66
  const nxJson = (0, nx_json_1.readNxJson)(root);
68
- const [plugins, cleanup] = await (0, internal_api_1.loadNxPlugins)([]); // only load default plugins
67
+ const plugins = await (0, get_plugins_1.getOnlyDefaultPlugins)(); // only load default plugins
69
68
  const projectGlobPatterns = await retrieveProjectConfigurationPaths(root, plugins);
70
69
  const cacheKey = root + ',' + projectGlobPatterns.join(',');
71
70
  if (projectsWithoutPluginCache.has(cacheKey)) {
@@ -74,7 +73,6 @@ async function retrieveProjectConfigurationsWithoutPluginInference(root) {
74
73
  const projectFiles = (await (0, workspace_context_1.globWithWorkspaceContext)(root, projectGlobPatterns)) ?? [];
75
74
  const { projects } = await (0, project_configuration_utils_1.createProjectConfigurations)(root, nxJson, projectFiles, plugins);
76
75
  projectsWithoutPluginCache.set(cacheKey, projects);
77
- cleanup();
78
76
  return projects;
79
77
  }
80
78
  function configurationGlobs(plugins) {
@@ -149,8 +149,8 @@ async function ensureWorkspaceIsInSyncAndGetGraphs(projectGraph, nxJson, project
149
149
  const failedSyncGeneratorsFixMessageLines = (0, sync_generators_1.getFailedSyncGeneratorsFixMessageLines)(results, nxArgs.verbose);
150
150
  const outOfSyncTitle = 'The workspace is out of sync';
151
151
  const resultBodyLines = (0, sync_generators_1.getSyncGeneratorSuccessResultsMessageLines)(results);
152
- const fixMessage = 'You can manually run `nx sync` to update your workspace with the identified changes or you can set `sync.applyChanges` to `true` in your `nx.json` to apply the changes automatically when running tasks in interactive environments.';
153
- const willErrorOnCiMessage = 'Please note that having the workspace out of sync will result in an error in CI.';
152
+ const fixMessage = 'Make sure to run `nx sync` to apply the identified changes or set `sync.applyChanges` to `true` in your `nx.json` to apply them automatically when running tasks in interactive environments.';
153
+ const willErrorOnCiMessage = 'This will result in an error in CI.';
154
154
  if ((0, is_ci_1.isCI)() || !process.stdout.isTTY) {
155
155
  // If the user is running in CI or is running in a non-TTY environment we
156
156
  // throw an error to stop the execution of the tasks.
@@ -145,10 +145,7 @@ function getSyncGeneratorSuccessResultsMessageLines(results) {
145
145
  if ('error' in result) {
146
146
  continue;
147
147
  }
148
- messageLines.push(`The ${chalk.bold(result.generatorName)} sync generator identified ${chalk.bold(result.changes.length)} file${result.changes.length === 1 ? '' : 's'} in the workspace that ${result.changes.length === 1 ? 'is' : 'are'} out of sync${result.outOfSyncMessage ? ':' : '.'}`);
149
- if (result.outOfSyncMessage) {
150
- messageLines.push(result.outOfSyncMessage);
151
- }
148
+ messageLines.push(`[${chalk.bold(result.generatorName)}]: ${result.outOfSyncMessage ?? `Some files are out of sync.`}`);
152
149
  }
153
150
  return messageLines;
154
151
  }
@@ -159,11 +156,11 @@ function getFailedSyncGeneratorsFixMessageLines(results, verbose, globalGenerato
159
156
  let isFirst = true;
160
157
  for (const result of results) {
161
158
  if ('error' in result) {
162
- if (!isFirst) {
159
+ if (!isFirst && verbose) {
163
160
  messageLines.push('');
164
161
  }
165
162
  isFirst = false;
166
- messageLines.push(`The ${chalk.bold(result.generatorName)} sync generator reported the following error:`, '', errorToString(result.error, verbose));
163
+ messageLines.push(`[${chalk.bold(result.generatorName)}]: ${errorToString(result.error, verbose)}`);
167
164
  if (globalGeneratorSet.has(result.generatorName)) {
168
165
  globalGenerators.push(result.generatorName);
169
166
  }
@@ -181,11 +178,11 @@ function getFlushFailureMessageLines(result, verbose, globalGeneratorSet = new S
181
178
  const taskGenerators = [];
182
179
  let isFirst = true;
183
180
  for (const failure of result.generatorFailures) {
184
- if (!isFirst) {
181
+ if (!isFirst && verbose) {
185
182
  messageLines.push('');
186
183
  }
187
184
  isFirst = false;
188
- messageLines.push(`The ${chalk.bold(failure.generator)} sync generator failed to apply its changes with the following error:`, '', errorToString(failure.error, verbose));
185
+ messageLines.push(`[${chalk.bold(failure.generator)}]: ${errorToString(failure.error, verbose)}`);
189
186
  if (globalGeneratorSet.has(failure.generator)) {
190
187
  globalGenerators.push(failure.generator);
191
188
  }
@@ -205,13 +202,11 @@ function getFlushFailureMessageLines(result, verbose, globalGeneratorSet = new S
205
202
  messageLines.push(...[
206
203
  '',
207
204
  result.generalFailure.message,
208
- ...(verbose && !!result.generalFailure.stack
205
+ ...(!!result.generalFailure.stack
209
206
  ? [`\n${result.generalFailure.stack}`]
210
207
  : []),
211
208
  '',
212
- verbose
213
- ? 'Please report the error at: https://github.com/nrwl/nx/issues/new/choose'
214
- : 'Please run with `--verbose` and report the error at: https://github.com/nrwl/nx/issues/new/choose',
209
+ 'Please report the error at: https://github.com/nrwl/nx/issues/new/choose',
215
210
  ]);
216
211
  }
217
212
  return messageLines;
@@ -329,7 +324,7 @@ function getFailedSyncGeneratorsMessageLines(taskGenerators, globalGenerators, v
329
324
  }
330
325
  function errorToString(error, verbose) {
331
326
  if (error.title) {
332
- let message = ` ${chalk.red(error.title)}`;
327
+ let message = `${chalk.red(error.title)}`;
333
328
  if (error.bodyLines?.length) {
334
329
  message += `
335
330
 
@@ -339,7 +334,7 @@ function errorToString(error, verbose) {
339
334
  return message;
340
335
  }
341
336
  }
342
- return ` ${chalk.red(error.message)}${verbose && error.stack ? '\n ' + error.stack : ''}`;
337
+ return `${chalk.red(error.message)}${verbose && error.stack ? '\n ' + error.stack : ''}`;
343
338
  }
344
339
  function toSerializableError(error) {
345
340
  return error instanceof SyncError
@@ -1,3 +0,0 @@
1
- import { LoadedNxPlugin } from '../../project-graph/plugins/internal-api';
2
- export declare function getPlugins(): Promise<LoadedNxPlugin[]>;
3
- export declare function cleanupPlugins(): void;