nx 18.1.0-canary.20240228-4d13753 → 18.1.0-canary.20240229-f6a183c

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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nx",
3
- "version": "18.1.0-canary.20240228-4d13753",
3
+ "version": "18.1.0-canary.20240229-f6a183c",
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": {
@@ -66,7 +66,7 @@
66
66
  "yargs-parser": "21.1.1",
67
67
  "node-machine-id": "1.1.12",
68
68
  "ora": "5.3.0",
69
- "@nrwl/tao": "18.1.0-canary.20240228-4d13753"
69
+ "@nrwl/tao": "18.1.0-canary.20240229-f6a183c"
70
70
  },
71
71
  "peerDependencies": {
72
72
  "@swc-node/register": "^1.8.0",
@@ -81,16 +81,16 @@
81
81
  }
82
82
  },
83
83
  "optionalDependencies": {
84
- "@nx/nx-darwin-x64": "18.1.0-canary.20240228-4d13753",
85
- "@nx/nx-darwin-arm64": "18.1.0-canary.20240228-4d13753",
86
- "@nx/nx-linux-x64-gnu": "18.1.0-canary.20240228-4d13753",
87
- "@nx/nx-linux-x64-musl": "18.1.0-canary.20240228-4d13753",
88
- "@nx/nx-win32-x64-msvc": "18.1.0-canary.20240228-4d13753",
89
- "@nx/nx-linux-arm64-gnu": "18.1.0-canary.20240228-4d13753",
90
- "@nx/nx-linux-arm64-musl": "18.1.0-canary.20240228-4d13753",
91
- "@nx/nx-linux-arm-gnueabihf": "18.1.0-canary.20240228-4d13753",
92
- "@nx/nx-win32-arm64-msvc": "18.1.0-canary.20240228-4d13753",
93
- "@nx/nx-freebsd-x64": "18.1.0-canary.20240228-4d13753"
84
+ "@nx/nx-darwin-x64": "18.1.0-canary.20240229-f6a183c",
85
+ "@nx/nx-darwin-arm64": "18.1.0-canary.20240229-f6a183c",
86
+ "@nx/nx-linux-x64-gnu": "18.1.0-canary.20240229-f6a183c",
87
+ "@nx/nx-linux-x64-musl": "18.1.0-canary.20240229-f6a183c",
88
+ "@nx/nx-win32-x64-msvc": "18.1.0-canary.20240229-f6a183c",
89
+ "@nx/nx-linux-arm64-gnu": "18.1.0-canary.20240229-f6a183c",
90
+ "@nx/nx-linux-arm64-musl": "18.1.0-canary.20240229-f6a183c",
91
+ "@nx/nx-linux-arm-gnueabihf": "18.1.0-canary.20240229-f6a183c",
92
+ "@nx/nx-win32-arm64-msvc": "18.1.0-canary.20240229-f6a183c",
93
+ "@nx/nx-freebsd-x64": "18.1.0-canary.20240229-f6a183c"
94
94
  },
95
95
  "nx-migrations": {
96
96
  "migrations": "./migrations.json",
@@ -137,9 +137,12 @@ async function processFilesAndCreateAndSerializeProjectGraph() {
137
137
  logger_1.serverLogger.requestLog([...updatedFiles.values()]);
138
138
  logger_1.serverLogger.requestLog([...deletedFiles]);
139
139
  const nxJson = (0, nx_json_1.readNxJson)(workspace_root_1.workspaceRoot);
140
+ global.NX_GRAPH_CREATION = true;
140
141
  const graphNodes = await (0, retrieve_workspace_files_1.retrieveProjectConfigurations)(workspace_root_1.workspaceRoot, nxJson);
141
142
  await processCollectedUpdatedAndDeletedFiles(graphNodes, updatedFileHashes, deletedFiles);
142
- return createAndSerializeProjectGraph(graphNodes);
143
+ const g = createAndSerializeProjectGraph(graphNodes);
144
+ delete global.NX_GRAPH_CREATION;
145
+ return g;
143
146
  }
144
147
  catch (err) {
145
148
  return Promise.resolve({
@@ -6,9 +6,11 @@ const json_1 = require("../../generators/utils/json");
6
6
  const format_changed_files_with_prettier_if_available_1 = require("../../generators/internal-utils/format-changed-files-with-prettier-if-available");
7
7
  const retrieve_workspace_files_1 = require("../../project-graph/utils/retrieve-workspace-files");
8
8
  const internal_api_1 = require("../../project-graph/plugins/internal-api");
9
+ const plugin_pool_1 = require("../../project-graph/plugins/plugin-pool");
9
10
  async function default_1(tree) {
10
11
  const nxJson = (0, nx_json_1.readNxJson)(tree);
11
12
  const projectFiles = await (0, retrieve_workspace_files_1.retrieveProjectConfigurationPaths)(tree.root, await (0, internal_api_1.loadNxPlugins)(nxJson?.plugins));
13
+ await (0, plugin_pool_1.shutdownPluginWorkers)();
12
14
  const projectJsons = projectFiles.filter((f) => f.endsWith('project.json'));
13
15
  for (let f of projectJsons) {
14
16
  const projectJson = (0, json_1.readJson)(tree, f);
@@ -187,8 +187,6 @@ async function updateProjectGraphWithPlugins(context, initProjectGraph) {
187
187
  const createDependencyPlugins = plugins.filter((plugin) => (0, utils_1.isNxPluginV2)(plugin) && plugin.createDependencies);
188
188
  await Promise.all(createDependencyPlugins.map(async (plugin) => {
189
189
  perf_hooks_1.performance.mark(`${plugin.name}:createDependencies - start`);
190
- // Set this globally to allow plugins to know if they are being called from the project graph creation
191
- global.NX_GRAPH_CREATION = true;
192
190
  try {
193
191
  // TODO: we shouldn't have to pass null here
194
192
  const dependencies = await plugin.createDependencies(null, {
@@ -206,7 +204,6 @@ async function updateProjectGraphWithPlugins(context, initProjectGraph) {
206
204
  }
207
205
  throw new Error(message);
208
206
  }
209
- delete global.NX_GRAPH_CREATION;
210
207
  perf_hooks_1.performance.mark(`${plugin.name}:createDependencies - end`);
211
208
  perf_hooks_1.performance.measure(`${plugin.name}:createDependencies`, `${plugin.name}:createDependencies - start`, `${plugin.name}:createDependencies - end`);
212
209
  }));
@@ -12,7 +12,7 @@ export type RemotePlugin = Omit<NormalizedPlugin, 'createNodes'> & {
12
12
  fn: (matchedFiles: string[], context: CreateNodesContext) => Promise<CreateNodesResultWithContext[]>
13
13
  ];
14
14
  };
15
- export declare const nxPluginCache: Map<unknown, RemotePlugin>;
15
+ export declare const nxPluginCache: Map<unknown, Promise<RemotePlugin>>;
16
16
  export declare function loadNxPlugins(plugins: PluginConfiguration[], root?: string): Promise<RemotePlugin[]>;
17
17
  export declare function loadNxPlugin(plugin: PluginConfiguration, root?: string): Promise<RemotePlugin>;
18
18
  export declare function getDefaultPlugins(root: string): Promise<string[]>;
@@ -27,11 +27,11 @@ exports.loadNxPlugins = loadNxPlugins;
27
27
  async function loadNxPlugin(plugin, root = workspace_root_1.workspaceRoot) {
28
28
  const cacheKey = JSON.stringify(plugin);
29
29
  if (exports.nxPluginCache.has(cacheKey)) {
30
- return exports.nxPluginCache.get(cacheKey);
30
+ return await exports.nxPluginCache.get(cacheKey);
31
31
  }
32
- const loadedPlugin = await (0, plugin_pool_1.loadRemoteNxPlugin)(plugin, root);
33
- exports.nxPluginCache.set(cacheKey, loadedPlugin);
34
- return loadedPlugin;
32
+ const loadingPlugin = (0, plugin_pool_1.loadRemoteNxPlugin)(plugin, root);
33
+ exports.nxPluginCache.set(cacheKey, loadingPlugin);
34
+ return await loadingPlugin;
35
35
  }
36
36
  exports.loadNxPlugin = loadNxPlugin;
37
37
  async function getDefaultPlugins(root) {
@@ -94,53 +94,35 @@ function createWorkerHandler(worker, onload, onloadError) {
94
94
  ? [
95
95
  createNodesPattern,
96
96
  (configFiles, ctx) => {
97
- return new Promise(function (res, rej) {
98
- const tx = pluginName + ':createNodes:' + performance.now();
97
+ const tx = pluginName + ':createNodes:' + performance.now();
98
+ return registerPendingPromise(tx, pending, () => {
99
99
  worker.send((0, messaging_1.createMessage)({
100
100
  type: 'createNodes',
101
101
  payload: { configFiles, context: ctx, tx },
102
102
  }));
103
- pending.add(tx);
104
- promiseBank.set(tx, {
105
- promise: this,
106
- resolver: res,
107
- rejecter: rej,
108
- });
109
103
  });
110
104
  },
111
105
  ]
112
106
  : undefined,
113
107
  createDependencies: result.hasCreateDependencies
114
108
  ? (opts, ctx) => {
115
- return new Promise(function (res, rej) {
116
- const tx = pluginName + ':createNodes:' + performance.now();
109
+ const tx = pluginName + ':createDependencies:' + performance.now();
110
+ return registerPendingPromise(tx, pending, () => {
117
111
  worker.send((0, messaging_1.createMessage)({
118
112
  type: 'createDependencies',
119
113
  payload: { context: ctx, tx },
120
114
  }));
121
- pending.add(tx);
122
- promiseBank.set(tx, {
123
- promise: this,
124
- resolver: res,
125
- rejecter: rej,
126
- });
127
115
  });
128
116
  }
129
117
  : undefined,
130
118
  processProjectGraph: result.hasProcessProjectGraph
131
119
  ? (graph, ctx) => {
132
- return new Promise(function (res, rej) {
133
- const tx = pluginName + ':processProjectGraph:' + performance.now();
120
+ const tx = pluginName + ':processProjectGraph:' + performance.now();
121
+ return registerPendingPromise(tx, pending, () => {
134
122
  worker.send((0, messaging_1.createMessage)({
135
123
  type: 'processProjectGraph',
136
124
  payload: { graph, ctx, tx },
137
125
  }));
138
- pending.add(tx);
139
- promiseBank.set(tx, {
140
- promise: this,
141
- resolver: res,
142
- rejecter: rej,
143
- });
144
126
  });
145
127
  }
146
128
  : undefined,
@@ -212,3 +194,23 @@ function getPendingPromises(pool, pidMap) {
212
194
  }
213
195
  return pendingTxs;
214
196
  }
197
+ function registerPendingPromise(tx, pending, callback) {
198
+ let resolver, rejecter;
199
+ const promise = new Promise((res, rej) => {
200
+ resolver = res;
201
+ rejecter = rej;
202
+ callback();
203
+ }).then((val) => {
204
+ // Remove the promise from the pending set
205
+ pending.delete(tx);
206
+ // Return the original value
207
+ return val;
208
+ });
209
+ pending.add(tx);
210
+ promiseBank.set(tx, {
211
+ promise,
212
+ resolver,
213
+ rejecter,
214
+ });
215
+ return promise;
216
+ }
@@ -65,6 +65,7 @@ function readProjectsConfigurationFromProjectGraph(projectGraph) {
65
65
  }
66
66
  exports.readProjectsConfigurationFromProjectGraph = readProjectsConfigurationFromProjectGraph;
67
67
  async function buildProjectGraphAndSourceMapsWithoutDaemon() {
68
+ global.NX_GRAPH_CREATION = true;
68
69
  const nxJson = (0, nx_json_1.readNxJson)();
69
70
  perf_hooks_1.performance.mark('retrieve-project-configurations:start');
70
71
  const { projects, externalNodes, sourceMaps, projectRootMap } = await (0, retrieve_workspace_files_1.retrieveProjectConfigurations)(workspace_root_1.workspaceRoot, nxJson);
@@ -76,6 +77,7 @@ async function buildProjectGraphAndSourceMapsWithoutDaemon() {
76
77
  perf_hooks_1.performance.mark('build-project-graph-using-project-file-map:start');
77
78
  const projectGraph = (await (0, build_project_graph_1.buildProjectGraphUsingProjectFileMap)(projects, externalNodes, fileMap, allWorkspaceFiles, rustReferences, cacheEnabled ? (0, nx_deps_cache_1.readFileMapCache)() : null, cacheEnabled)).projectGraph;
78
79
  perf_hooks_1.performance.mark('build-project-graph-using-project-file-map:end');
80
+ delete global.NX_GRAPH_CREATION;
79
81
  return { projectGraph, sourceMaps };
80
82
  }
81
83
  exports.buildProjectGraphAndSourceMapsWithoutDaemon = buildProjectGraphAndSourceMapsWithoutDaemon;
@@ -141,8 +141,6 @@ plugins, root = workspace_root_1.workspaceRoot) {
141
141
  }
142
142
  const matchedFiles = [];
143
143
  performance.mark(`${plugin.name}:createNodes - start`);
144
- // Set this globally to allow plugins to know if they are being called from the project graph creation
145
- global.NX_GRAPH_CREATION = true;
146
144
  for (const file of projectFiles) {
147
145
  if ((0, minimatch_1.minimatch)(file, pattern, { dot: true })) {
148
146
  matchedFiles.push(file);
@@ -9,6 +9,7 @@ const internal_api_1 = require("../plugins/internal-api");
9
9
  const workspace_context_1 = require("../../utils/workspace-context");
10
10
  const build_all_workspace_files_1 = require("./build-all-workspace-files");
11
11
  const path_1 = require("path");
12
+ const plugin_pool_1 = require("../plugins/plugin-pool");
12
13
  /**
13
14
  * Walks the workspace directory to create the `projectFileMap`, `ProjectConfigurations` and `allWorkspaceFiles`
14
15
  * @throws
@@ -41,7 +42,11 @@ exports.retrieveWorkspaceFiles = retrieveWorkspaceFiles;
41
42
  */
42
43
  async function retrieveProjectConfigurations(workspaceRoot, nxJson) {
43
44
  const plugins = await (0, internal_api_1.loadNxPlugins)(nxJson?.plugins ?? [], workspaceRoot);
44
- return _retrieveProjectConfigurations(workspaceRoot, nxJson, plugins);
45
+ const projects = await _retrieveProjectConfigurations(workspaceRoot, nxJson, plugins);
46
+ if (!global.NX_GRAPH_CREATION) {
47
+ await (0, plugin_pool_1.shutdownPluginWorkers)();
48
+ }
49
+ return projects;
45
50
  }
46
51
  exports.retrieveProjectConfigurations = retrieveProjectConfigurations;
47
52
  async function retrieveProjectConfigurationsWithAngularProjects(workspaceRoot, nxJson) {