nx 22.2.0-canary.20251120-aa38b25 → 22.2.0-canary.20251121-9a6c7ad

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 (49) hide show
  1. package/executors.json +16 -16
  2. package/generators.json +13 -13
  3. package/migrations.json +143 -143
  4. package/package.json +11 -14
  5. package/presets/npm.json +4 -4
  6. package/schemas/nx-schema.json +1286 -1286
  7. package/schemas/project-schema.json +359 -359
  8. package/schemas/workspace-schema.json +165 -165
  9. package/src/ai/set-up-ai-agents/schema.json +31 -31
  10. package/src/command-line/daemon/command-object.d.ts +3 -2
  11. package/src/command-line/daemon/command-object.d.ts.map +1 -1
  12. package/src/command-line/daemon/command-object.js +11 -4
  13. package/src/command-line/yargs-utils/arguments-of.d.ts +12 -0
  14. package/src/command-line/yargs-utils/arguments-of.d.ts.map +1 -0
  15. package/src/command-line/yargs-utils/arguments-of.js +9 -0
  16. package/src/daemon/client/client.d.ts.map +1 -1
  17. package/src/daemon/client/client.js +2 -0
  18. package/src/executors/noop/schema.json +8 -8
  19. package/src/executors/run-commands/schema.json +187 -187
  20. package/src/executors/run-script/schema.json +25 -25
  21. package/src/nx-cloud/generators/connect-to-nx-cloud/schema.json +38 -38
  22. package/src/project-graph/error-types.d.ts +3 -2
  23. package/src/project-graph/error-types.d.ts.map +1 -1
  24. package/src/project-graph/error-types.js +9 -2
  25. package/src/project-graph/plugins/get-plugins.d.ts.map +1 -1
  26. package/src/project-graph/plugins/get-plugins.js +33 -35
  27. package/src/project-graph/plugins/in-process-loader.d.ts.map +1 -1
  28. package/src/project-graph/plugins/in-process-loader.js +2 -2
  29. package/src/project-graph/plugins/isolation/plugin-pool.js +3 -2
  30. package/src/project-graph/plugins/isolation/plugin-worker.js +3 -3
  31. package/src/project-graph/plugins/loaded-nx-plugin.d.ts +5 -0
  32. package/src/project-graph/plugins/loaded-nx-plugin.d.ts.map +1 -1
  33. package/src/project-graph/plugins/loaded-nx-plugin.js +5 -0
  34. package/src/project-graph/project-graph.d.ts +1 -0
  35. package/src/project-graph/project-graph.d.ts.map +1 -1
  36. package/src/project-graph/project-graph.js +21 -0
  37. package/src/project-graph/utils/project-configuration-utils.d.ts +1 -1
  38. package/src/project-graph/utils/project-configuration-utils.d.ts.map +1 -1
  39. package/src/project-graph/utils/project-configuration-utils.js +46 -15
  40. package/src/project-graph/utils/retrieve-workspace-files.d.ts +1 -1
  41. package/src/project-graph/utils/retrieve-workspace-files.d.ts.map +1 -1
  42. package/src/tasks-runner/utils.d.ts.map +1 -1
  43. package/src/tasks-runner/utils.js +3 -2
  44. package/src/utils/ab-testing.js +1 -1
  45. package/src/utils/assert-workspace-validity.d.ts.map +1 -1
  46. package/src/utils/assert-workspace-validity.js +5 -8
  47. package/src/utils/call-sites.d.ts +15 -0
  48. package/src/utils/call-sites.d.ts.map +1 -0
  49. package/src/utils/call-sites.js +28 -0
@@ -30,20 +30,12 @@ async function getPlugins(root = workspace_root_1.workspaceRoot) {
30
30
  pluginsConfigurationHash === currentPluginsConfigurationHash) {
31
31
  return loadedPlugins;
32
32
  }
33
- // Cleanup current plugins before loading new ones
34
- cleanupSpecifiedPlugins?.();
35
- pendingPluginsPromise ??= loadSpecifiedNxPlugins(pluginsConfiguration, root);
36
33
  currentPluginsConfigurationHash = pluginsConfigurationHash;
37
- const [[result, cleanupFn], defaultPlugins] = await Promise.all([
38
- pendingPluginsPromise,
34
+ const [defaultPlugins, specifiedPlugins] = await Promise.all([
39
35
  getOnlyDefaultPlugins(root),
36
+ (pendingPluginsPromise ??= loadSpecifiedNxPlugins(pluginsConfiguration, root)),
40
37
  ]);
41
- cleanupSpecifiedPlugins = () => {
42
- loadedPlugins = undefined;
43
- pendingPluginsPromise = undefined;
44
- cleanupFn();
45
- };
46
- loadedPlugins = result.concat(defaultPlugins);
38
+ loadedPlugins = specifiedPlugins.concat(defaultPlugins);
47
39
  return loadedPlugins;
48
40
  }
49
41
  /**
@@ -77,6 +69,8 @@ async function getOnlyDefaultPlugins(root = workspace_root_1.workspaceRoot) {
77
69
  function cleanupPlugins() {
78
70
  cleanupSpecifiedPlugins?.();
79
71
  cleanupDefaultPlugins?.();
72
+ pendingPluginsPromise = undefined;
73
+ pendingDefaultPluginPromise = undefined;
80
74
  }
81
75
  /**
82
76
  * Stuff for generic loading
@@ -108,34 +102,38 @@ async function loadDefaultNxPlugins(root = workspace_root_1.workspaceRoot) {
108
102
  performance.measure('loadDefaultNxPlugins', 'loadDefaultNxPlugins:start', 'loadDefaultNxPlugins:end');
109
103
  return ret;
110
104
  }
111
- async function loadSpecifiedNxPlugins(plugins, root = workspace_root_1.workspaceRoot) {
105
+ async function loadSpecifiedNxPlugins(pluginsConfigurations, root = workspace_root_1.workspaceRoot) {
106
+ // Returning existing plugins is handled by getPlugins,
107
+ // so, if we are here and there are existing plugins, they are stale
108
+ if (cleanupSpecifiedPlugins) {
109
+ cleanupSpecifiedPlugins();
110
+ }
112
111
  performance.mark('loadSpecifiedNxPlugins:start');
113
- plugins ??= [];
112
+ pluginsConfigurations ??= [];
114
113
  const cleanupFunctions = [];
115
- const ret = [
116
- await Promise.all(plugins.map(async (plugin, index) => {
117
- const pluginPath = typeof plugin === 'string' ? plugin : plugin.plugin;
118
- performance.mark(`Load Nx Plugin: ${pluginPath} - start`);
119
- const [loadedPluginPromise, cleanup] = await loadingMethod(plugin, root, index);
120
- cleanupFunctions.push(cleanup);
121
- const res = await loadedPluginPromise;
122
- res.index = index;
123
- performance.mark(`Load Nx Plugin: ${pluginPath} - end`);
124
- performance.measure(`Load Nx Plugin: ${pluginPath}`, `Load Nx Plugin: ${pluginPath} - start`, `Load Nx Plugin: ${pluginPath} - end`);
125
- return res;
126
- })),
127
- () => {
128
- for (const fn of cleanupFunctions) {
129
- fn();
130
- }
131
- if ((0, transpiler_1.pluginTranspilerIsRegistered)()) {
132
- (0, transpiler_1.cleanupPluginTSTranspiler)();
133
- }
134
- },
135
- ];
114
+ const plugins = await Promise.all(pluginsConfigurations.map(async (plugin, index) => {
115
+ const pluginPath = typeof plugin === 'string' ? plugin : plugin.plugin;
116
+ performance.mark(`Load Nx Plugin: ${pluginPath} - start`);
117
+ const [loadedPluginPromise, cleanup] = await loadingMethod(plugin, root, index);
118
+ cleanupFunctions.push(cleanup);
119
+ const res = await loadedPluginPromise;
120
+ res.index = index;
121
+ performance.mark(`Load Nx Plugin: ${pluginPath} - end`);
122
+ performance.measure(`Load Nx Plugin: ${pluginPath}`, `Load Nx Plugin: ${pluginPath} - start`, `Load Nx Plugin: ${pluginPath} - end`);
123
+ return res;
124
+ }));
136
125
  performance.mark('loadSpecifiedNxPlugins:end');
137
126
  performance.measure('loadSpecifiedNxPlugins', 'loadSpecifiedNxPlugins:start', 'loadSpecifiedNxPlugins:end');
138
- return ret;
127
+ cleanupSpecifiedPlugins = () => {
128
+ for (const fn of cleanupFunctions) {
129
+ fn();
130
+ }
131
+ if ((0, transpiler_1.pluginTranspilerIsRegistered)()) {
132
+ (0, transpiler_1.cleanupPluginTSTranspiler)();
133
+ }
134
+ pendingPluginsPromise = undefined;
135
+ };
136
+ return plugins;
139
137
  }
140
138
  function getDefaultPlugins(root) {
141
139
  return [
@@ -1 +1 @@
1
- {"version":3,"file":"in-process-loader.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/project-graph/plugins/in-process-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAGhF,OAAO,EACL,WAAW,EAEZ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAUzD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC9C,KAAK,WAAsB,GAC1B;IACD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;CACnB,CA0BA;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,kDAKrE;AAED,wBAAsB,iBAAiB,CACrC,mBAAmB,EAAE,mBAAmB,EACxC,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,CAgBzB"}
1
+ {"version":3,"file":"in-process-loader.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/project-graph/plugins/in-process-loader.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAGhF,OAAO,EACL,WAAW,EAEZ,MAAM,0BAA0B,CAAC;AAGlC,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AASzD,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC9C,KAAK,WAAsB,GAC1B;IACD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,WAAW,CAAC;CACnB,CA0BA;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,kDAKrE;AAED,wBAAsB,iBAAiB,CACrC,mBAAmB,EAAE,mBAAmB,EACxC,KAAK,EAAE,MAAM,EAAE,EACf,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,cAAc,CAAC,CAmBzB"}
@@ -9,7 +9,6 @@ const package_json_1 = require("../../utils/package-json");
9
9
  const fileutils_1 = require("../../utils/fileutils");
10
10
  const error_types_1 = require("../error-types");
11
11
  const path = require("node:path/posix");
12
- const load_resolved_plugin_1 = require("./load-resolved-plugin");
13
12
  const resolve_plugin_1 = require("./resolve-plugin");
14
13
  const transpiler_1 = require("./transpiler");
15
14
  function readPluginPackageJson(pluginName, projects, paths = (0, installation_directory_1.getNxRequirePaths)()) {
@@ -52,7 +51,8 @@ async function loadNxPluginAsync(pluginConfiguration, paths, root) {
52
51
  if (shouldRegisterTSTranspiler) {
53
52
  (0, transpiler_1.registerPluginTSTranspiler)();
54
53
  }
55
- return (0, load_resolved_plugin_1.loadResolvedNxPluginAsync)(pluginConfiguration, pluginPath, name);
54
+ const { loadResolvedNxPluginAsync } = await Promise.resolve().then(() => require('./load-resolved-plugin'));
55
+ return loadResolvedNxPluginAsync(pluginConfiguration, pluginPath, name);
56
56
  }
57
57
  catch (e) {
58
58
  throw new error_types_1.LoadPluginError(moduleName, e);
@@ -32,7 +32,7 @@ async function loadRemoteNxPlugin(plugin, root, index) {
32
32
  }
33
33
  const moduleName = typeof plugin === 'string' ? plugin : plugin.plugin;
34
34
  const { name, pluginPath, shouldRegisterTSTranspiler } = await (0, resolve_plugin_1.resolveNxPlugin)(moduleName, root, (0, installation_directory_1.getNxRequirePaths)(root));
35
- const { worker, socket } = await startPluginWorker();
35
+ const { worker, socket } = await startPluginWorker(name);
36
36
  // Register plugin worker as a subprocess of the main CLI
37
37
  // This allows metrics collection when the daemon is not used
38
38
  if (worker.pid) {
@@ -276,7 +276,7 @@ function registerPendingPromise(tx, pending, callback, context) {
276
276
  return promise;
277
277
  }
278
278
  global.nxPluginWorkerCount ??= 0;
279
- async function startPluginWorker() {
279
+ async function startPluginWorker(name) {
280
280
  // this should only really be true when running unit tests within
281
281
  // the Nx repo. We still need to start the worker in this case,
282
282
  // but its typescript.
@@ -296,6 +296,7 @@ async function startPluginWorker() {
296
296
  ...(isWorkerTypescript ? ['--require', 'ts-node/register'] : []),
297
297
  workerPath,
298
298
  ipcPath,
299
+ name,
299
300
  ], {
300
301
  stdio: 'inherit',
301
302
  env,
@@ -71,7 +71,7 @@ const server = (0, net_1.createServer)((socket) => {
71
71
  };
72
72
  }
73
73
  },
74
- createNodes: async ({ configFiles, context, tx }) => {
74
+ createNodes: async function createNodes({ configFiles, context, tx }) {
75
75
  try {
76
76
  const result = await plugin.createNodes[1](configFiles, context);
77
77
  return {
@@ -90,7 +90,7 @@ const server = (0, net_1.createServer)((socket) => {
90
90
  };
91
91
  }
92
92
  },
93
- createDependencies: async ({ context, tx }) => {
93
+ createDependencies: async function createDependencies({ context, tx }) {
94
94
  try {
95
95
  const result = await plugin.createDependencies(context);
96
96
  return {
@@ -109,7 +109,7 @@ const server = (0, net_1.createServer)((socket) => {
109
109
  };
110
110
  }
111
111
  },
112
- createMetadata: async ({ graph, context, tx }) => {
112
+ createMetadata: async function createMetadata({ graph, context, tx }) {
113
113
  try {
114
114
  const result = await plugin.createMetadata(graph, context);
115
115
  return {
@@ -2,6 +2,11 @@ import type { ProjectGraph } from '../../config/project-graph';
2
2
  import { type PluginConfiguration } from '../../config/nx-json';
3
3
  import type { RawProjectGraphDependency } from '../project-graph-builder';
4
4
  import type { CreateDependenciesContext, CreateMetadataContext, CreateNodesContextV2, CreateNodesResult, NxPluginV2, PostTasksExecutionContext, PreTasksExecutionContext, ProjectsMetadata } from './public-api';
5
+ /**
6
+ * NOTE: Avoid using `import type` with this class. It causes issues with
7
+ * jest's module resolution when running tests in projects that import
8
+ * the devkit-internals
9
+ */
5
10
  export declare class LoadedNxPlugin {
6
11
  index?: number;
7
12
  readonly name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"loaded-nx-plugin.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/project-graph/plugins/loaded-nx-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAKhE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,KAAK,EACV,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,yBAAyB,EACzB,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAItB,qBAAa,cAAc;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE;QACrB,WAAW,EAAE,MAAM;QAGnB,EAAE,EAAE,CACF,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CACV,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAC1E;KACF,CAAC;IACF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAC5B,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,CACxB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,qBAAqB,KAC3B,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAC3B,OAAO,EAAE,wBAAwB,KAC9B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAC5B,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;gBAEhB,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB;CAuFtE"}
1
+ {"version":3,"file":"loaded-nx-plugin.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/project-graph/plugins/loaded-nx-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAKhE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAC1E,OAAO,KAAK,EACV,yBAAyB,EACzB,qBAAqB,EACrB,oBAAoB,EACpB,iBAAiB,EACjB,UAAU,EACV,yBAAyB,EACzB,wBAAwB,EACxB,gBAAgB,EACjB,MAAM,cAAc,CAAC;AAItB;;;;GAIG;AACH,qBAAa,cAAc;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE;QACrB,WAAW,EAAE,MAAM;QAGnB,EAAE,EAAE,CACF,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,oBAAoB,KAC1B,OAAO,CACV,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAC1E;KACF,CAAC;IACF,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAC5B,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,yBAAyB,EAAE,CAAC,CAAC;IAC1C,QAAQ,CAAC,cAAc,CAAC,EAAE,CACxB,KAAK,EAAE,YAAY,EACnB,OAAO,EAAE,qBAAqB,KAC3B,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/B,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAC3B,OAAO,EAAE,wBAAwB,KAC9B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAChC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAC5B,OAAO,EAAE,yBAAyB,KAC/B,OAAO,CAAC,IAAI,CAAC,CAAC;IAEnB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;gBAEhB,MAAM,EAAE,UAAU,EAAE,gBAAgB,EAAE,mBAAmB;CAuFtE"}
@@ -4,6 +4,11 @@ exports.LoadedNxPlugin = void 0;
4
4
  const error_types_1 = require("../error-types");
5
5
  const enabled_1 = require("./isolation/enabled");
6
6
  const client_1 = require("../../daemon/client/client");
7
+ /**
8
+ * NOTE: Avoid using `import type` with this class. It causes issues with
9
+ * jest's module resolution when running tests in projects that import
10
+ * the devkit-internals
11
+ */
7
12
  class LoadedNxPlugin {
8
13
  constructor(plugin, pluginDefinition) {
9
14
  this.name = plugin.name;
@@ -51,4 +51,5 @@ export declare function createProjectGraphAndSourceMapsAsync(opts?: {
51
51
  projectGraph: ProjectGraph;
52
52
  sourceMaps: import("./utils/project-configuration-utils").ConfigurationSourceMaps;
53
53
  }>;
54
+ export declare function preventRecursionInGraphConstruction(): void;
54
55
  //# sourceMappingURL=project-graph.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"project-graph.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/project-graph/project-graph.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,uCAAuC,CAAC;AAoC/C;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,iBAAiB,CAAC,EAAE,MAAM,GACzB,YAAY,CAuBd;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,GAClB,oBAAoB,CAQtB;AAED;;GAEG;AACH,wBAAgB,yCAAyC,CACvD,YAAY,EAAE,YAAY,GACzB,sBAAsB,CAUxB;AAED,wBAAsB,2CAA2C;;;GA+EhE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,EAAE,CAAC,KAAA,QA8BxE;AAgBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,GAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAGxD,GACA,OAAO,CAAC,YAAY,CAAC,CAkBvB;AAED,wBAAsB,oCAAoC,CACxD,IAAI,GAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAGxD;;;GAmIF"}
1
+ {"version":3,"file":"project-graph.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/project-graph/project-graph.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EACL,oBAAoB,EACpB,sBAAsB,EACvB,MAAM,uCAAuC,CAAC;AAqC/C;;;;;GAKG;AACH,wBAAgB,sBAAsB,CACpC,iBAAiB,CAAC,EAAE,MAAM,GACzB,YAAY,CAuBd;AAED,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,MAAM,GAClB,oBAAoB,CAQtB;AAED;;GAEG;AACH,wBAAgB,yCAAyC,CACvD,YAAY,EAAE,YAAY,GACzB,sBAAsB,CAUxB;AAED,wBAAsB,2CAA2C;;;GAiFhE;AAED,wBAAgB,uBAAuB,CAAC,IAAI,EAAE;IAAE,WAAW,EAAE,OAAO,CAAA;CAAE,EAAE,CAAC,KAAA,QA8BxE;AAgBD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,GAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAGxD,GACA,OAAO,CAAC,YAAY,CAAC,CAkBvB;AAED,wBAAsB,oCAAoC,CACxD,IAAI,GAAE;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;CAGxD;;;GAmIF;AAED,wBAAgB,mCAAmC,SA0BlD"}
@@ -7,6 +7,7 @@ exports.buildProjectGraphAndSourceMapsWithoutDaemon = buildProjectGraphAndSource
7
7
  exports.handleProjectGraphError = handleProjectGraphError;
8
8
  exports.createProjectGraphAsync = createProjectGraphAsync;
9
9
  exports.createProjectGraphAndSourceMapsAsync = createProjectGraphAndSourceMapsAsync;
10
+ exports.preventRecursionInGraphConstruction = preventRecursionInGraphConstruction;
10
11
  const perf_hooks_1 = require("perf_hooks");
11
12
  const nx_json_1 = require("../config/nx-json");
12
13
  const client_1 = require("../daemon/client/client");
@@ -25,6 +26,7 @@ const native_1 = require("../native");
25
26
  const path_1 = require("path");
26
27
  const cache_directory_1 = require("../utils/cache-directory");
27
28
  const delayed_spinner_1 = require("../utils/delayed-spinner");
29
+ const call_sites_1 = require("../utils/call-sites");
28
30
  /**
29
31
  * Synchronously reads the latest cached copy of the workspace's ProjectGraph.
30
32
  *
@@ -77,6 +79,7 @@ function readProjectsConfigurationFromProjectGraph(projectGraph) {
77
79
  };
78
80
  }
79
81
  async function buildProjectGraphAndSourceMapsWithoutDaemon() {
82
+ preventRecursionInGraphConstruction();
80
83
  global.NX_GRAPH_CREATION = true;
81
84
  const nxJson = (0, nx_json_1.readNxJson)();
82
85
  perf_hooks_1.performance.mark('retrieve-project-configurations:start');
@@ -325,3 +328,21 @@ async function createProjectGraphAndSourceMapsAsync(opts = {
325
328
  }
326
329
  }
327
330
  }
331
+ function preventRecursionInGraphConstruction() {
332
+ // preventRecursionInGraphConstruction -> callee -> ...
333
+ // slice removes preventRecursionInGraphConstruction and its caller,
334
+ // which is useful when using this function to detect recursion in buildProjectGraphAndSourceMapsWithoutDaemon
335
+ const stackframes = (0, call_sites_1.getCallSites)().slice(2);
336
+ if (stackframes.some((f) => {
337
+ const functionName = f.getFunctionName();
338
+ const fileName = f.getFileName() || '';
339
+ return (functionName === buildProjectGraphAndSourceMapsWithoutDaemon.name ||
340
+ (['createNodes', 'createDependencies', 'createMetadata'].includes(functionName || '') &&
341
+ fileName.endsWith('plugin-worker.js')));
342
+ })) {
343
+ throw new Error(`Project graph construction cannot be performed due to a loop detected in the call stack. This can happen if 'createProjectGraphAsync' is called directly or indirectly during project graph construction.\n` +
344
+ 'To avoid this, you can add a check against "global.NX_GRAPH_CREATION" before calling "createProjectGraphAsync".\n' +
345
+ 'Call stack:\n' +
346
+ stackframes.join('\n'));
347
+ }
348
+ }
@@ -1,7 +1,7 @@
1
1
  import { NxJsonConfiguration, TargetDefaults } from '../../config/nx-json';
2
2
  import { ProjectGraphExternalNode } from '../../config/project-graph';
3
3
  import { ProjectConfiguration, ProjectMetadata, TargetConfiguration, TargetMetadata } from '../../config/workspace-json-project-json';
4
- import { LoadedNxPlugin } from '../plugins/loaded-nx-plugin';
4
+ import type { LoadedNxPlugin } from '../plugins/loaded-nx-plugin';
5
5
  export type SourceInformation = [file: string | null, plugin: string];
6
6
  export type ConfigurationSourceMaps = Record<string, Record<string, SourceInformation>>;
7
7
  export declare function mergeProjectConfigurationIntoRootMap(projectRootMap: Record<string, ProjectConfiguration>, project: ProjectConfiguration, configurationSourceMaps?: ConfigurationSourceMaps, sourceInformation?: SourceInformation, skipTargetNormalization?: boolean): void;
@@ -1 +1 @@
1
- {"version":3,"file":"project-configuration-utils.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/project-graph/utils/project-configuration-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project-configuration-utils.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/project-graph/utils/project-configuration-utils.ts"],"names":[],"mappings":"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"}
@@ -354,13 +354,18 @@ function mergeCreateNodesResults(results, nxJsonConfiguration, workspaceRoot, er
354
354
  try {
355
355
  validateAndNormalizeProjectRootMap(workspaceRoot, projectRootMap, nxJsonConfiguration, configurationSourceMaps);
356
356
  }
357
- catch (e) {
358
- if ((0, error_types_1.isProjectsWithNoNameError)(e) ||
359
- (0, error_types_1.isMultipleProjectsWithSameNameError)(e)) {
360
- errors.push(e);
361
- }
362
- else {
363
- throw e;
357
+ catch (error) {
358
+ const unknownErrors = [];
359
+ let _errors = error instanceof AggregateError ? error.errors : [error];
360
+ for (const e of _errors) {
361
+ if ((0, error_types_1.isProjectsWithNoNameError)(e) ||
362
+ (0, error_types_1.isMultipleProjectsWithSameNameError)(e) ||
363
+ (0, error_types_1.isWorkspaceValidityError)(e)) {
364
+ errors.push(e);
365
+ }
366
+ else {
367
+ throw e;
368
+ }
364
369
  }
365
370
  }
366
371
  const rootMap = createRootMap(projectRootMap);
@@ -438,6 +443,7 @@ function validateAndNormalizeProjectRootMap(workspaceRoot, projectRootMap, nxJso
438
443
  // to provide better error messaging.
439
444
  const conflicts = new Map();
440
445
  const projectRootsWithNoName = [];
446
+ const validityErrors = [];
441
447
  for (const root in projectRootMap) {
442
448
  const project = projectRootMap[root];
443
449
  // We're setting `// targets` as a comment `targets` is empty due to Project Crystal.
@@ -473,13 +479,30 @@ function validateAndNormalizeProjectRootMap(workspaceRoot, projectRootMap, nxJso
473
479
  }
474
480
  for (const root in projectRootMap) {
475
481
  const project = projectRootMap[root];
476
- normalizeTargets(project, sourceMaps, nxJsonConfiguration, workspaceRoot, projects);
482
+ try {
483
+ normalizeTargets(project, sourceMaps, nxJsonConfiguration, workspaceRoot, projects);
484
+ }
485
+ catch (e) {
486
+ if (e instanceof error_types_1.WorkspaceValidityError) {
487
+ validityErrors.push(e);
488
+ }
489
+ else {
490
+ throw e;
491
+ }
492
+ }
477
493
  }
494
+ const errors = [];
478
495
  if (conflicts.size > 0) {
479
- throw new error_types_1.MultipleProjectsWithSameNameError(conflicts, projects);
496
+ errors.push(new error_types_1.MultipleProjectsWithSameNameError(conflicts, projects));
480
497
  }
481
498
  if (projectRootsWithNoName.length > 0) {
482
- throw new error_types_1.ProjectsWithNoNameError(projectRootsWithNoName, projects);
499
+ errors.push(new error_types_1.ProjectsWithNoNameError(projectRootsWithNoName, projects));
500
+ }
501
+ if (validityErrors.length > 0) {
502
+ errors.push(...validityErrors);
503
+ }
504
+ if (errors.length > 0) {
505
+ throw new AggregateError(errors);
483
506
  }
484
507
  return projectRootMap;
485
508
  }
@@ -488,6 +511,7 @@ function normalizeTargets(project, sourceMaps, nxJsonConfiguration, workspaceRoo
488
511
  * Project configurations keyed by project name
489
512
  */
490
513
  projects) {
514
+ const targetErrorMessage = [];
491
515
  for (const targetName in project.targets) {
492
516
  project.targets[targetName] = normalizeTarget(project.targets[targetName], project, workspaceRoot, projects, [project.root, targetName].join(':'));
493
517
  const projectSourceMaps = sourceMaps[project.root];
@@ -497,14 +521,14 @@ projects) {
497
521
  if (targetDefaults && isCompatibleTarget(targetConfig, targetDefaults)) {
498
522
  project.targets[targetName] = mergeTargetDefaultWithTargetDefinition(targetName, project, normalizeTarget(targetDefaults, project, workspaceRoot, projects, ['nx.json[targetDefaults]', targetName].join(':')), projectSourceMaps);
499
523
  }
524
+ const target = project.targets[targetName];
500
525
  if (
501
526
  // If the target has no executor or command, it doesn't do anything
502
- !project.targets[targetName].executor &&
503
- !project.targets[targetName].command) {
527
+ !target.executor &&
528
+ !target.command) {
504
529
  // But it may have dependencies that do something
505
- if (project.targets[targetName].dependsOn &&
506
- project.targets[targetName].dependsOn.length > 0) {
507
- project.targets[targetName].executor = 'nx:noop';
530
+ if (target.dependsOn && target.dependsOn.length > 0) {
531
+ target.executor = 'nx:noop';
508
532
  }
509
533
  else {
510
534
  // If it does nothing, and has no depenencies,
@@ -512,6 +536,13 @@ projects) {
512
536
  delete project.targets[targetName];
513
537
  }
514
538
  }
539
+ if (target.cache && target.continuous) {
540
+ targetErrorMessage.push(`- "${targetName}" has both "cache" and "continuous" set to true. Continuous targets cannot be cached. Please remove the "cache" property.`);
541
+ }
542
+ }
543
+ if (targetErrorMessage.length > 0) {
544
+ targetErrorMessage.unshift(`Errors detected in targets of project "${project.name}":`);
545
+ throw new error_types_1.WorkspaceValidityError(targetErrorMessage.join('\n'));
515
546
  }
516
547
  }
517
548
  function validateProject(project,
@@ -1,7 +1,7 @@
1
1
  import { ProjectConfiguration } from '../../config/workspace-json-project-json';
2
2
  import { NxJsonConfiguration } from '../../config/nx-json';
3
3
  import { ConfigurationResult } from './project-configuration-utils';
4
- import { LoadedNxPlugin } from '../plugins/loaded-nx-plugin';
4
+ import type { LoadedNxPlugin } from '../plugins/loaded-nx-plugin';
5
5
  /**
6
6
  * Walks the workspace directory to create the `projectFileMap`, `ProjectConfigurations` and `allWorkspaceFiles`
7
7
  * @throws
@@ -1 +1 @@
1
- {"version":3,"file":"retrieve-workspace-files.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/project-graph/utils/retrieve-workspace-files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAKhF,OAAO,EAAE,mBAAmB,EAAc,MAAM,sBAAsB,CAAC;AACvE,OAAO,EACL,mBAAmB,EAEpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAU7D;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;GA6BvC;AAED;;GAEG;AAEH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,cAAc,EAAE,EACzB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAc9B;AAED,wBAAsB,gDAAgD,CACpE,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAsB9B;AAED,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,GAC7B,OAAO,CAAC,MAAM,EAAE,CAAC,CAOnB;AAQD,wBAAsB,mDAAmD,CACvE,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAsB/C;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,GAC7B,MAAM,EAAE,CAEV"}
1
+ {"version":3,"file":"retrieve-workspace-files.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/project-graph/utils/retrieve-workspace-files.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0CAA0C,CAAC;AAKhF,OAAO,EAAE,mBAAmB,EAAc,MAAM,sBAAsB,CAAC;AACvE,OAAO,EACL,mBAAmB,EAEpB,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAUlE;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAC1C,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;;;GA6BvC;AAED;;GAEG;AAEH,wBAAsB,6BAA6B,CACjD,OAAO,EAAE,cAAc,EAAE,EACzB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAc9B;AAED,wBAAsB,gDAAgD,CACpE,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAsB9B;AAED,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,GAC7B,OAAO,CAAC,MAAM,EAAE,CAAC,CAOnB;AAQD,wBAAsB,mDAAmD,CACvE,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC,CAsB/C;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,GAC7B,MAAM,EAAE,CAEV"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/utils.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACvB,MAAM,uCAAuC,CAAC;AAe/C,MAAM,MAAM,gCAAgC,GAAG,sBAAsB,GAAG;IACtE,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,EACxD,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,sBAAsB,GAAG,MAAM,CAAC,EAAE,CAAC,EAC5E,YAAY,EAAE,YAAY,EAC1B,cAAc,EAAE,MAAM,EAAE,GACvB,gCAAgC,EAAE,GAAG,SAAS,CAehD;AAED,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,MAAM,GAAG,sBAAsB,EAC3C,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,YAAY,EACnB,cAAc,EAAE,MAAM,EAAE,GACvB,gCAAgC,EAAE,CASpC;AAED,wBAAgB,iCAAiC,CAC/C,gBAAgB,EAAE,sBAAsB,EACxC,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,YAAY,GAClB,gCAAgC,CAalC;AAED,wBAAgB,iCAAiC,CAC/C,sBAAsB,EAAE,MAAM,GAAG,sBAAsB,EACvD,KAAK,EAAE,YAAY,GAClB,sBAAsB,CAwBxB;AA4BD,wBAAgB,iCAAiC,CAC/C,gBAAgB,EAAE,gCAAgC,EAClD,cAAc,EAAE,MAAM,EAAE,GACvB,gCAAgC,EAAE,CAepC;AAED,wBAAgB,oCAAoC,CAClD,YAAY,EAAE,MAAM,EACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,GAChD;IAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAkBzC;AAED,wBAAgB,UAAU,CACxB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,EAC1C,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,EACtB,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,YAO7B;AAED,wBAAgB,2CAA2C,CACzD,gBAAgB,EAAE,sBAAsB,GACvC,IAAI,CAAC,sBAAsB,EAAE,UAAU,CAAC,GAAG;IAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAuBnE;AAqCD,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAIhD;AAED,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,YA2B5E;AAED;;GAEG;AACH,wBAAgB,mCAAmC,CACjD,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,uBAAuB,GAC5B,MAAM,EAAE,CAAC;AACZ,wBAAgB,mCAAmC,CACjD,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,EAC7B,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,GAAG,uBAAuB,EACtD,IAAI,EAAE,uBAAuB,GAC5B,MAAM,EAAE,CAAC;AAqEZ,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,MAAM,CAqB/D;AAsBD,wBAAgB,6BAA6B,CAC3C,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,GACzB,mBAAmB,GAAG,SAAS,CAGjC;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,EAAE,YAAY,UAE5E;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,GACzB,cAAc,GAAG;IAAE,UAAU,EAAE,OAAO,CAAC;IAAC,YAAY,EAAE,OAAO,CAAA;CAAE,CAUjE;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,YAAY,GACzB,YAAY,GAAG,IAAI,CAGrB;AAED,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,MAAM,EAAE,GACZ,SAAS,CAQX;AA0CD,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,SAAS,GACnB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAmB1B;AAED,wBAAgB,UAAU,WAEzB;AAED,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,IAAI,YAYxD;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,YAQtE;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,iBAAiB,EAAE,MAAM,GAAG,IAAI,GAC/B,OAAO,CAQT;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE;IACP,mBAAmB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;CACpC,GACA,OAAO,CAWT;AAeD,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAEjD;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GAAG,SAAS,GAChC,MAAM,CAMR"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/utils.ts"],"names":[],"mappings":"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"}
@@ -386,7 +386,7 @@ function shouldStreamOutput(task, initiatingProject) {
386
386
  return false;
387
387
  }
388
388
  function isCacheableTask(task, options) {
389
- if (task.cache !== undefined && !longRunningTask(task)) {
389
+ if (task.cache !== undefined) {
390
390
  return task.cache;
391
391
  }
392
392
  const cacheable = options.cacheableOperations || options.cacheableTargets;
@@ -396,7 +396,8 @@ function isCacheableTask(task, options) {
396
396
  }
397
397
  function longRunningTask(task) {
398
398
  const t = task.target.target;
399
- return ((!!task.overrides['watch'] && task.overrides['watch'] !== 'false') ||
399
+ return (task.continuous ||
400
+ (!!task.overrides['watch'] && task.overrides['watch'] !== 'false') ||
400
401
  t.endsWith(':watch') ||
401
402
  t.endsWith('-watch') ||
402
403
  t === 'serve' ||
@@ -80,7 +80,7 @@ async function recordStat(opts) {
80
80
  command: opts.command,
81
81
  isCI: (0, is_ci_1.isCI)(),
82
82
  useCloud: opts.useCloud,
83
- meta: opts.meta,
83
+ meta: `${opts.nxVersion}${opts.meta ? ',' + opts.meta : ''}`,
84
84
  });
85
85
  }
86
86
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"assert-workspace-validity.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/utils/assert-workspace-validity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAMxD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC9C,MAAM,EAAE,mBAAmB,QA8F5B"}
1
+ {"version":3,"file":"assert-workspace-validity.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/utils/assert-workspace-validity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAMxD,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC9C,MAAM,EAAE,mBAAmB,QA2F5B"}
@@ -28,19 +28,16 @@ function assertWorkspaceValidity(projects, nxJson) {
28
28
  });
29
29
  }
30
30
  const projectsWithNonArrayImplicitDependencies = new Map();
31
- projectNames
32
- .filter((projectName) => {
31
+ projectNames.reduce((map, projectName) => {
33
32
  const project = projects[projectName];
34
- // Report if for whatever reason, a project is configured to use implicitDependencies but it is not an array
35
33
  if (!!project.implicitDependencies &&
36
34
  !Array.isArray(project.implicitDependencies)) {
37
35
  projectsWithNonArrayImplicitDependencies.set(projectName, project.implicitDependencies);
36
+ return map;
37
+ }
38
+ if (!project.implicitDependencies) {
39
+ return map;
38
40
  }
39
- return (!!project.implicitDependencies &&
40
- Array.isArray(project.implicitDependencies));
41
- })
42
- .reduce((map, projectName) => {
43
- const project = projects[projectName];
44
41
  detectAndSetInvalidProjectGlobValues(map, projectName, project.implicitDependencies, projects, projectGraphNodes);
45
42
  return map;
46
43
  }, invalidImplicitDependencies);
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Returns an array of CallSite objects representing the current call stack.
3
+ *
4
+ * NOTE: The returned CallSite[] does not include the frame for getCallSites itself,
5
+ * but will include the function that called getCallSites. If you are checking for
6
+ * things like recursion, you need to make sure to account for that.
7
+ *
8
+ * The behavior should match node:util.getCallSites, introduced in Node.js v22.0.0.
9
+ *
10
+ * @todo(@AgentEnder) Move this to node:util when we remove support for Node.js versions < 22, around Nx 24
11
+ *
12
+ * @returns {NodeJS.CallSite[]} An array of CallSite objects.
13
+ */
14
+ export declare function getCallSites(): NodeJS.CallSite[];
15
+ //# sourceMappingURL=call-sites.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-sites.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/utils/call-sites.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,sBAY3B"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getCallSites = getCallSites;
4
+ /**
5
+ * Returns an array of CallSite objects representing the current call stack.
6
+ *
7
+ * NOTE: The returned CallSite[] does not include the frame for getCallSites itself,
8
+ * but will include the function that called getCallSites. If you are checking for
9
+ * things like recursion, you need to make sure to account for that.
10
+ *
11
+ * The behavior should match node:util.getCallSites, introduced in Node.js v22.0.0.
12
+ *
13
+ * @todo(@AgentEnder) Move this to node:util when we remove support for Node.js versions < 22, around Nx 24
14
+ *
15
+ * @returns {NodeJS.CallSite[]} An array of CallSite objects.
16
+ */
17
+ function getCallSites() {
18
+ const prepareStackTraceBackup = Error.prepareStackTrace;
19
+ Error.prepareStackTrace = (_, stackTraces) => {
20
+ return stackTraces;
21
+ };
22
+ const errorObject = {};
23
+ Error.captureStackTrace(errorObject);
24
+ const trace = errorObject.stack;
25
+ Error.prepareStackTrace = prepareStackTraceBackup;
26
+ trace.shift(); // remove getCallSites
27
+ return trace; // return stack up to what called getCallSites
28
+ }