nx 22.1.0-canary.20251111-647d751 → 22.1.0-canary.20251114-b3e6b03

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 (58) hide show
  1. package/bin/init-local.d.ts.map +1 -1
  2. package/bin/init-local.js +40 -2
  3. package/executors.json +16 -16
  4. package/generators.json +13 -13
  5. package/migrations.json +143 -143
  6. package/package.json +14 -11
  7. package/presets/npm.json +4 -4
  8. package/schemas/nx-schema.json +1285 -1285
  9. package/schemas/project-schema.json +359 -359
  10. package/schemas/workspace-schema.json +165 -165
  11. package/src/ai/set-up-ai-agents/schema.json +31 -31
  12. package/src/command-line/add/add.d.ts.map +1 -1
  13. package/src/command-line/add/add.js +5 -2
  14. package/src/command-line/configure-ai-agents/configure-ai-agents.d.ts.map +1 -1
  15. package/src/command-line/configure-ai-agents/configure-ai-agents.js +3 -1
  16. package/src/command-line/init/command-object.d.ts.map +1 -1
  17. package/src/command-line/init/command-object.js +10 -0
  18. package/src/command-line/init/init-v2.d.ts +1 -1
  19. package/src/command-line/init/init-v2.d.ts.map +1 -1
  20. package/src/command-line/init/init-v2.js +29 -1
  21. package/src/command-line/migrate/migrate.d.ts.map +1 -1
  22. package/src/command-line/migrate/migrate.js +2 -1
  23. package/src/core/graph/main.js +1 -1
  24. package/src/core/graph/styles.css +2 -2
  25. package/src/daemon/client/client.d.ts +3 -0
  26. package/src/daemon/client/client.d.ts.map +1 -1
  27. package/src/daemon/client/client.js +14 -0
  28. package/src/daemon/message-types/nx-console.d.ts +18 -0
  29. package/src/daemon/message-types/nx-console.d.ts.map +1 -0
  30. package/src/daemon/message-types/nx-console.js +19 -0
  31. package/src/daemon/server/handle-nx-console.d.ts +4 -0
  32. package/src/daemon/server/handle-nx-console.d.ts.map +1 -0
  33. package/src/daemon/server/handle-nx-console.js +54 -0
  34. package/src/daemon/server/nx-console-operations.d.ts +31 -0
  35. package/src/daemon/server/nx-console-operations.d.ts.map +1 -0
  36. package/src/daemon/server/nx-console-operations.js +135 -0
  37. package/src/daemon/server/server.d.ts.map +1 -1
  38. package/src/daemon/server/server.js +12 -0
  39. package/src/daemon/server/shutdown-utils.d.ts.map +1 -1
  40. package/src/daemon/server/shutdown-utils.js +3 -0
  41. package/src/devkit-internals.d.ts +1 -1
  42. package/src/devkit-internals.d.ts.map +1 -1
  43. package/src/devkit-internals.js +2 -1
  44. package/src/executors/noop/schema.json +8 -8
  45. package/src/executors/run-commands/schema.json +187 -187
  46. package/src/executors/run-script/schema.json +25 -25
  47. package/src/native/index.d.ts +37 -34
  48. package/src/native/native-bindings.js +1 -0
  49. package/src/native/nx.wasi-browser.js +53 -45
  50. package/src/native/nx.wasm32-wasi.wasm +0 -0
  51. package/src/nx-cloud/generators/connect-to-nx-cloud/schema.json +38 -38
  52. package/src/tasks-runner/process-metrics-service.d.ts +2 -2
  53. package/src/tasks-runner/process-metrics-service.d.ts.map +1 -1
  54. package/src/tasks-runner/tasks-schedule.d.ts.map +1 -1
  55. package/src/tasks-runner/tasks-schedule.js +10 -3
  56. package/src/utils/package-json.d.ts +4 -0
  57. package/src/utils/package-json.d.ts.map +1 -1
  58. package/src/utils/package-json.js +45 -11
@@ -1,28 +1,28 @@
1
1
  {
2
- "version": 2,
3
- "title": "Run Script",
4
- "description": "Run any NPM script of a project in the project's root directory.",
5
- "type": "object",
6
- "cli": "nx",
7
- "outputCapture": "pipe",
8
- "properties": {
9
- "script": {
10
- "type": "string",
11
- "description": "An npm script name in the `package.json` file of the project (e.g., `build`)."
12
- },
13
- "__unparsed__": {
14
- "hidden": true,
15
- "type": "array",
16
- "items": {
17
- "type": "string"
18
- },
19
- "$default": {
20
- "$source": "unparsed"
21
- },
22
- "x-priority": "internal"
23
- }
2
+ "version": 2,
3
+ "title": "Run Script",
4
+ "description": "Run any NPM script of a project in the project's root directory.",
5
+ "type": "object",
6
+ "cli": "nx",
7
+ "outputCapture": "pipe",
8
+ "properties": {
9
+ "script": {
10
+ "type": "string",
11
+ "description": "An npm script name in the `package.json` file of the project (e.g., `build`)."
24
12
  },
25
- "additionalProperties": true,
26
- "required": ["script"],
27
- "examplesFile": "../../../docs/run-script-examples.md"
13
+ "__unparsed__": {
14
+ "hidden": true,
15
+ "type": "array",
16
+ "items": {
17
+ "type": "string"
18
+ },
19
+ "$default": {
20
+ "$source": "unparsed"
21
+ },
22
+ "x-priority": "internal"
23
+ }
24
+ },
25
+ "additionalProperties": true,
26
+ "required": ["script"],
27
+ "examplesFile": "../../../docs/run-script-examples.md"
28
28
  }
@@ -193,13 +193,6 @@ export declare class WorkspaceContext {
193
193
  getFilesInDirectory(directory: string): Array<string>
194
194
  }
195
195
 
196
- /** Batch metrics snapshot */
197
- export interface BatchMetricsSnapshot {
198
- batchId: string
199
- taskIds: Array<string>
200
- processes: Array<ProcessMetrics>
201
- }
202
-
203
196
  export interface CachedResult {
204
197
  code: number
205
198
  terminalOutput?: string
@@ -272,6 +265,30 @@ export declare export declare function getFilesForOutputs(directory: string, ent
272
265
 
273
266
  export declare export declare function getTransformableOutputs(outputs: Array<string>): Array<string>
274
267
 
268
+ /**
269
+ * Group information - union of different process group types
270
+ * Use group_type to discriminate which optional fields are present
271
+ */
272
+ export interface GroupInfo {
273
+ /** Type discriminator: MainCLI, Daemon, Task, or Batch */
274
+ groupType: GroupType
275
+ /** Display name for the group */
276
+ displayName: string
277
+ /** Unique ID for this group */
278
+ id: string
279
+ /** Task IDs in this batch (present for Batch groups) */
280
+ taskIds?: Array<string>
281
+ }
282
+
283
+ /** Group type discriminator */
284
+ export declare const enum GroupType {
285
+ MainCLI = 'MainCLI',
286
+ MainCliSubprocesses = 'MainCliSubprocesses',
287
+ Daemon = 'Daemon',
288
+ Task = 'Task',
289
+ Batch = 'Batch'
290
+ }
291
+
275
292
  export declare export declare function hashArray(input: Array<string | undefined | null>): string
276
293
 
277
294
  export interface HashDetails {
@@ -311,10 +328,19 @@ export declare export declare function isEditorInstalled(editor: SupportedEditor
311
328
 
312
329
  export declare export declare function logDebug(message: string): void
313
330
 
331
+ /** Combined metadata for groups and processes */
332
+ export interface Metadata {
333
+ /** Group-level metadata */
334
+ groups: Record<string, GroupInfo>
335
+ /** Process-level metadata (keyed by PID as string for NAPI compatibility) */
336
+ processes: Record<string, ProcessMetadata>
337
+ }
338
+
314
339
  /** Metrics update sent every collection cycle */
315
340
  export interface MetricsUpdate {
316
- metrics: ProcessMetricsSnapshot
317
- metadata?: Record<string, ProcessMetadata>
341
+ timestamp: number
342
+ processes: Array<ProcessMetrics>
343
+ metadata: Metadata
318
344
  }
319
345
 
320
346
  /** Stripped version of the NxJson interface for use in rust */
@@ -344,6 +370,8 @@ export interface ProcessMetadata {
344
370
  exePath: string
345
371
  cwd: string
346
372
  alias?: string
373
+ groupId: string
374
+ isRoot: boolean
347
375
  }
348
376
 
349
377
  /** Process metrics (dynamic, changes every collection) */
@@ -353,22 +381,6 @@ export interface ProcessMetrics {
353
381
  memory: number
354
382
  }
355
383
 
356
- /** Organized collection of process metrics with timestamp */
357
- export interface ProcessMetricsSnapshot {
358
- timestamp: number
359
- system: SystemMetrics
360
- mainCli?: ProcessTreeMetrics
361
- daemon?: ProcessTreeMetrics
362
- tasks: Record<string, Array<ProcessMetrics>>
363
- batches: Record<string, BatchMetricsSnapshot>
364
- }
365
-
366
- /** Metrics for a process and its subprocesses (used for both CLI and daemon) */
367
- export interface ProcessTreeMetrics {
368
- main: ProcessMetrics
369
- subprocesses: Array<ProcessMetrics>
370
- }
371
-
372
384
  export interface Project {
373
385
  root: string
374
386
  namedInputs?: Record<string, Array<JsInputs>>
@@ -410,15 +422,6 @@ export interface SystemInfo {
410
422
  totalMemory: number
411
423
  }
412
424
 
413
- /** System metrics (dynamic, changes every collection) */
414
- export interface SystemMetrics {
415
- cpu: number
416
- memory: number
417
- availableMemory: number
418
- swapUsed: number
419
- swapTotal: number
420
- }
421
-
422
425
  export interface Target {
423
426
  executor?: string
424
427
  inputs?: Array<JsInputs>
@@ -390,6 +390,7 @@ module.exports.getBinaryTarget = nativeBinding.getBinaryTarget
390
390
  module.exports.getDefaultMaxCacheSize = nativeBinding.getDefaultMaxCacheSize
391
391
  module.exports.getFilesForOutputs = nativeBinding.getFilesForOutputs
392
392
  module.exports.getTransformableOutputs = nativeBinding.getTransformableOutputs
393
+ module.exports.GroupType = nativeBinding.GroupType
393
394
  module.exports.hashArray = nativeBinding.hashArray
394
395
  module.exports.hashFile = nativeBinding.hashFile
395
396
  module.exports.installNxConsole = nativeBinding.installNxConsole
@@ -59,51 +59,55 @@ function __napi_rs_initialize_modules(__napiInstance) {
59
59
  __napiInstance.exports['__napi_register__get_transformable_outputs_5']?.()
60
60
  __napiInstance.exports['__napi_register__hash_array_6']?.()
61
61
  __napiInstance.exports['__napi_register__hash_file_7']?.()
62
- __napiInstance.exports['__napi_register__can_install_nx_console_8']?.()
63
- __napiInstance.exports['__napi_register__install_nx_console_9']?.()
64
- __napiInstance.exports['__napi_register__NxConsolePreferences_struct_10']?.()
65
- __napiInstance.exports['__napi_register__NxConsolePreferences_impl_14']?.()
66
- __napiInstance.exports['__napi_register__log_debug_15']?.()
67
- __napiInstance.exports['__napi_register__IS_WASM_16']?.()
68
- __napiInstance.exports['__napi_register__get_binary_target_17']?.()
69
- __napiInstance.exports['__napi_register__ImportResult_struct_18']?.()
70
- __napiInstance.exports['__napi_register__find_imports_19']?.()
71
- __napiInstance.exports['__napi_register__transfer_project_graph_20']?.()
72
- __napiInstance.exports['__napi_register__ExternalNode_struct_21']?.()
73
- __napiInstance.exports['__napi_register__Target_struct_22']?.()
74
- __napiInstance.exports['__napi_register__Project_struct_23']?.()
75
- __napiInstance.exports['__napi_register__ProjectGraph_struct_24']?.()
76
- __napiInstance.exports['__napi_register__HashPlanInspector_struct_25']?.()
77
- __napiInstance.exports['__napi_register__HashPlanInspector_impl_28']?.()
78
- __napiInstance.exports['__napi_register__HashPlanner_struct_29']?.()
79
- __napiInstance.exports['__napi_register__HashPlanner_impl_33']?.()
80
- __napiInstance.exports['__napi_register__HashDetails_struct_34']?.()
81
- __napiInstance.exports['__napi_register__HasherOptions_struct_35']?.()
82
- __napiInstance.exports['__napi_register__TaskHasher_struct_36']?.()
83
- __napiInstance.exports['__napi_register__TaskHasher_impl_39']?.()
84
- __napiInstance.exports['__napi_register__Task_struct_40']?.()
85
- __napiInstance.exports['__napi_register__TaskTarget_struct_41']?.()
86
- __napiInstance.exports['__napi_register__TaskResult_struct_42']?.()
87
- __napiInstance.exports['__napi_register__TaskGraph_struct_43']?.()
88
- __napiInstance.exports['__napi_register__FileData_struct_44']?.()
89
- __napiInstance.exports['__napi_register__InputsInput_struct_45']?.()
90
- __napiInstance.exports['__napi_register__FileSetInput_struct_46']?.()
91
- __napiInstance.exports['__napi_register__RuntimeInput_struct_47']?.()
92
- __napiInstance.exports['__napi_register__EnvironmentInput_struct_48']?.()
93
- __napiInstance.exports['__napi_register__ExternalDependenciesInput_struct_49']?.()
94
- __napiInstance.exports['__napi_register__DepsOutputsInput_struct_50']?.()
95
- __napiInstance.exports['__napi_register__NxJson_struct_51']?.()
96
- __napiInstance.exports['__napi_register__is_ai_agent_52']?.()
97
- __napiInstance.exports['__napi_register__FileLock_struct_53']?.()
98
- __napiInstance.exports['__napi_register__FileLock_impl_55']?.()
99
- __napiInstance.exports['__napi_register__WorkspaceContext_struct_56']?.()
100
- __napiInstance.exports['__napi_register__WorkspaceContext_impl_67']?.()
101
- __napiInstance.exports['__napi_register__WorkspaceErrors_68']?.()
102
- __napiInstance.exports['__napi_register__NxWorkspaceFiles_struct_69']?.()
103
- __napiInstance.exports['__napi_register__NxWorkspaceFilesExternals_struct_70']?.()
104
- __napiInstance.exports['__napi_register__UpdatedWorkspaceFiles_struct_71']?.()
105
- __napiInstance.exports['__napi_register__FileMap_struct_72']?.()
106
- __napiInstance.exports['__napi_register____test_only_transfer_file_map_73']?.()
62
+ __napiInstance.exports['__napi_register__SupportedEditor_8']?.()
63
+ __napiInstance.exports['__napi_register__can_install_nx_console_9']?.()
64
+ __napiInstance.exports['__napi_register__can_install_nx_console_for_editor_10']?.()
65
+ __napiInstance.exports['__napi_register__install_nx_console_11']?.()
66
+ __napiInstance.exports['__napi_register__install_nx_console_for_editor_12']?.()
67
+ __napiInstance.exports['__napi_register__is_editor_installed_13']?.()
68
+ __napiInstance.exports['__napi_register__NxConsolePreferences_struct_14']?.()
69
+ __napiInstance.exports['__napi_register__NxConsolePreferences_impl_18']?.()
70
+ __napiInstance.exports['__napi_register__log_debug_19']?.()
71
+ __napiInstance.exports['__napi_register__IS_WASM_20']?.()
72
+ __napiInstance.exports['__napi_register__get_binary_target_21']?.()
73
+ __napiInstance.exports['__napi_register__ImportResult_struct_22']?.()
74
+ __napiInstance.exports['__napi_register__find_imports_23']?.()
75
+ __napiInstance.exports['__napi_register__transfer_project_graph_24']?.()
76
+ __napiInstance.exports['__napi_register__ExternalNode_struct_25']?.()
77
+ __napiInstance.exports['__napi_register__Target_struct_26']?.()
78
+ __napiInstance.exports['__napi_register__Project_struct_27']?.()
79
+ __napiInstance.exports['__napi_register__ProjectGraph_struct_28']?.()
80
+ __napiInstance.exports['__napi_register__HashPlanInspector_struct_29']?.()
81
+ __napiInstance.exports['__napi_register__HashPlanInspector_impl_32']?.()
82
+ __napiInstance.exports['__napi_register__HashPlanner_struct_33']?.()
83
+ __napiInstance.exports['__napi_register__HashPlanner_impl_37']?.()
84
+ __napiInstance.exports['__napi_register__HashDetails_struct_38']?.()
85
+ __napiInstance.exports['__napi_register__HasherOptions_struct_39']?.()
86
+ __napiInstance.exports['__napi_register__TaskHasher_struct_40']?.()
87
+ __napiInstance.exports['__napi_register__TaskHasher_impl_43']?.()
88
+ __napiInstance.exports['__napi_register__Task_struct_44']?.()
89
+ __napiInstance.exports['__napi_register__TaskTarget_struct_45']?.()
90
+ __napiInstance.exports['__napi_register__TaskResult_struct_46']?.()
91
+ __napiInstance.exports['__napi_register__TaskGraph_struct_47']?.()
92
+ __napiInstance.exports['__napi_register__FileData_struct_48']?.()
93
+ __napiInstance.exports['__napi_register__InputsInput_struct_49']?.()
94
+ __napiInstance.exports['__napi_register__FileSetInput_struct_50']?.()
95
+ __napiInstance.exports['__napi_register__RuntimeInput_struct_51']?.()
96
+ __napiInstance.exports['__napi_register__EnvironmentInput_struct_52']?.()
97
+ __napiInstance.exports['__napi_register__ExternalDependenciesInput_struct_53']?.()
98
+ __napiInstance.exports['__napi_register__DepsOutputsInput_struct_54']?.()
99
+ __napiInstance.exports['__napi_register__NxJson_struct_55']?.()
100
+ __napiInstance.exports['__napi_register__is_ai_agent_56']?.()
101
+ __napiInstance.exports['__napi_register__FileLock_struct_57']?.()
102
+ __napiInstance.exports['__napi_register__FileLock_impl_59']?.()
103
+ __napiInstance.exports['__napi_register__WorkspaceContext_struct_60']?.()
104
+ __napiInstance.exports['__napi_register__WorkspaceContext_impl_71']?.()
105
+ __napiInstance.exports['__napi_register__WorkspaceErrors_72']?.()
106
+ __napiInstance.exports['__napi_register__NxWorkspaceFiles_struct_73']?.()
107
+ __napiInstance.exports['__napi_register__NxWorkspaceFilesExternals_struct_74']?.()
108
+ __napiInstance.exports['__napi_register__UpdatedWorkspaceFiles_struct_75']?.()
109
+ __napiInstance.exports['__napi_register__FileMap_struct_76']?.()
110
+ __napiInstance.exports['__napi_register____test_only_transfer_file_map_77']?.()
107
111
  }
108
112
  export const FileLock = __napiModule.exports.FileLock
109
113
  export const HashPlanInspector = __napiModule.exports.HashPlanInspector
@@ -113,6 +117,7 @@ export const NxConsolePreferences = __napiModule.exports.NxConsolePreferences
113
117
  export const TaskHasher = __napiModule.exports.TaskHasher
114
118
  export const WorkspaceContext = __napiModule.exports.WorkspaceContext
115
119
  export const canInstallNxConsole = __napiModule.exports.canInstallNxConsole
120
+ export const canInstallNxConsoleForEditor = __napiModule.exports.canInstallNxConsoleForEditor
116
121
  export const copy = __napiModule.exports.copy
117
122
  export const expandOutputs = __napiModule.exports.expandOutputs
118
123
  export const findImports = __napiModule.exports.findImports
@@ -122,10 +127,13 @@ export const getTransformableOutputs = __napiModule.exports.getTransformableOutp
122
127
  export const hashArray = __napiModule.exports.hashArray
123
128
  export const hashFile = __napiModule.exports.hashFile
124
129
  export const installNxConsole = __napiModule.exports.installNxConsole
130
+ export const installNxConsoleForEditor = __napiModule.exports.installNxConsoleForEditor
125
131
  export const IS_WASM = __napiModule.exports.IS_WASM
126
132
  export const isAiAgent = __napiModule.exports.isAiAgent
133
+ export const isEditorInstalled = __napiModule.exports.isEditorInstalled
127
134
  export const logDebug = __napiModule.exports.logDebug
128
135
  export const remove = __napiModule.exports.remove
136
+ export const SupportedEditor = __napiModule.exports.SupportedEditor
129
137
  export const testOnlyTransferFileMap = __napiModule.exports.testOnlyTransferFileMap
130
138
  export const transferProjectGraph = __napiModule.exports.transferProjectGraph
131
139
  export const validateOutputs = __napiModule.exports.validateOutputs
Binary file
@@ -1,41 +1,41 @@
1
1
  {
2
- "$schema": "https://json-schema.org/schema",
3
- "id": "NxCloudInit",
4
- "title": "Add Nx Cloud Configuration to the workspace",
5
- "description": "Connect a workspace to Nx Cloud.",
6
- "type": "object",
7
- "cli": "nx",
8
- "properties": {
9
- "analytics": {
10
- "type": "boolean",
11
- "description": "Anonymously store hashed machine ID for task runs",
12
- "default": false
13
- },
14
- "installationSource": {
15
- "type": "string",
16
- "description": "Name of Nx Cloud installation invoker (ex. user, add-nx-to-monorepo, create-nx-workspace, nx-upgrade",
17
- "default": "user"
18
- },
19
- "hideFormatLogs": {
20
- "type": "boolean",
21
- "description": "Hide formatting logs",
22
- "x-priority": "internal"
23
- },
24
- "generateToken": {
25
- "type": "boolean",
26
- "description": "Explicitly asks for a token to be created, do not override existing tokens from Nx Cloud"
27
- },
28
- "github": {
29
- "type": "boolean",
30
- "description": "If the user will be using GitHub as their git hosting provider",
31
- "default": false
32
- },
33
- "directory": {
34
- "type": "string",
35
- "description": "The directory where the workspace is located",
36
- "x-priority": "internal"
37
- }
2
+ "$schema": "https://json-schema.org/schema",
3
+ "id": "NxCloudInit",
4
+ "title": "Add Nx Cloud Configuration to the workspace",
5
+ "description": "Connect a workspace to Nx Cloud.",
6
+ "type": "object",
7
+ "cli": "nx",
8
+ "properties": {
9
+ "analytics": {
10
+ "type": "boolean",
11
+ "description": "Anonymously store hashed machine ID for task runs",
12
+ "default": false
38
13
  },
39
- "additionalProperties": false,
40
- "required": []
14
+ "installationSource": {
15
+ "type": "string",
16
+ "description": "Name of Nx Cloud installation invoker (ex. user, add-nx-to-monorepo, create-nx-workspace, nx-upgrade",
17
+ "default": "user"
18
+ },
19
+ "hideFormatLogs": {
20
+ "type": "boolean",
21
+ "description": "Hide formatting logs",
22
+ "x-priority": "internal"
23
+ },
24
+ "generateToken": {
25
+ "type": "boolean",
26
+ "description": "Explicitly asks for a token to be created, do not override existing tokens from Nx Cloud"
27
+ },
28
+ "github": {
29
+ "type": "boolean",
30
+ "description": "If the user will be using GitHub as their git hosting provider",
31
+ "default": false
32
+ },
33
+ "directory": {
34
+ "type": "string",
35
+ "description": "The directory where the workspace is located",
36
+ "x-priority": "internal"
37
+ }
38
+ },
39
+ "additionalProperties": false,
40
+ "required": []
41
41
  }
@@ -1,5 +1,5 @@
1
- import { ProcessMetadata, ProcessMetrics, ProcessTreeMetrics, ProcessMetricsSnapshot, BatchMetricsSnapshot, MetricsUpdate, SystemInfo } from '../native';
2
- export type { ProcessMetadata, ProcessMetrics, ProcessTreeMetrics, ProcessMetricsSnapshot, BatchMetricsSnapshot, MetricsUpdate, SystemInfo, };
1
+ import { ProcessMetadata, ProcessMetrics, MetricsUpdate, SystemInfo, Metadata, GroupInfo, GroupType } from '../native';
2
+ export type { ProcessMetadata, ProcessMetrics, MetricsUpdate, SystemInfo, Metadata, GroupInfo, GroupType, };
3
3
  export type MetricsCallback = (event: MetricsUpdate) => void;
4
4
  /**
5
5
  * Simplified service providing subscription-based access to Rust metrics collector
@@ -1 +1 @@
1
- {"version":3,"file":"process-metrics-service.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/process-metrics-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EACb,UAAU,EACX,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,EACb,UAAU,GACX,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAE7D;;;;GAIG;AACH,cAAM,qBAAqB;IACzB,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,iBAAiB,CAAS;;IAmBlC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IA+B1C;;;OAGG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAQtD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAQpE;;OAEG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQxC;;OAEG;IACH,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ5D;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IASlC;;OAEG;IACH,QAAQ,IAAI,IAAI;CAOjB;AAOD;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,qBAAqB,CAKhE"}
1
+ {"version":3,"file":"process-metrics-service.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/process-metrics-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,eAAe,EACf,cAAc,EACd,aAAa,EACb,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,EACV,MAAM,WAAW,CAAC;AAGnB,YAAY,EACV,eAAe,EACf,cAAc,EACd,aAAa,EACb,UAAU,EACV,QAAQ,EACR,SAAS,EACT,SAAS,GACV,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAC;AAE7D;;;;GAIG;AACH,cAAM,qBAAqB;IACzB,OAAO,CAAC,SAAS,CAAwC;IACzD,OAAO,CAAC,iBAAiB,CAAS;;IAmBlC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAe/B;;;OAGG;IACH,SAAS,CAAC,QAAQ,EAAE,eAAe,GAAG,IAAI;IA+B1C;;;OAGG;IACH,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAQtD;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAQpE;;OAEG;IACH,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAQxC;;OAEG;IACH,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ5D;;OAEG;IACH,aAAa,IAAI,UAAU,GAAG,IAAI;IASlC;;OAEG;IACH,QAAQ,IAAI,IAAI;CAOjB;AAOD;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,qBAAqB,CAKhE"}
@@ -1 +1 @@
1
- {"version":3,"file":"tasks-schedule.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/tasks-schedule.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAKvD,MAAM,WAAW,KAAK;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,qBAAa,aAAa;IAetB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhB1B,OAAO,CAAC,qBAAqB,CAAkB;IAC/C,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,mBAAmB,CAA8B;IACzD,OAAO,CAAC,WAAW,CAAwC;IAE3D,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,8BAA8B,CAAqB;IAC3D,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,OAAO,CAAC,mBAAmB,CAA8B;gBAGtC,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,yBAAyB;IAGxC,IAAI;IAkBJ,iBAAiB;IAMvB,QAAQ;IASR,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE;IAW1B,oBAAoB;;;;IAOpB,QAAQ;IAQR,SAAS,IAAI,KAAK;IAMlB,kBAAkB,IAAI,IAAI,EAAE;YAUrB,aAAa;YAWb,YAAY;YAkDZ,eAAe;IAY7B,OAAO,CAAC,aAAa;YAUP,qBAAqB;IAoDnC,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,cAAc;IAiCf,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGzD"}
1
+ {"version":3,"file":"tasks-schedule.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/tasks-schedule.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAKvD,MAAM,WAAW,KAAK;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,qBAAa,aAAa;IAetB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAhB1B,OAAO,CAAC,qBAAqB,CAAkB;IAC/C,OAAO,CAAC,eAAe,CAAwC;IAC/D,OAAO,CAAC,mBAAmB,CAA8B;IACzD,OAAO,CAAC,WAAW,CAAwC;IAE3D,OAAO,CAAC,gBAAgB,CAAe;IACvC,OAAO,CAAC,cAAc,CAAgB;IACtC,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,8BAA8B,CAAqB;IAC3D,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,OAAO,CAAC,mBAAmB,CAA8B;gBAGtC,YAAY,EAAE,YAAY,EAC1B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,yBAAyB;IAGxC,IAAI;IAkBJ,iBAAiB;IAMvB,QAAQ;IASR,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE;IAW1B,oBAAoB;;;;IAOpB,QAAQ;IAQR,SAAS,IAAI,KAAK;IAMlB,kBAAkB,IAAI,IAAI,EAAE;YAUrB,aAAa;YAWb,YAAY;YAkDZ,eAAe;IAkB7B,OAAO,CAAC,aAAa;YAUP,qBAAqB;IA+DnC,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,cAAc;IAiCf,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGzD"}
@@ -128,7 +128,7 @@ class TasksSchedule {
128
128
  for (const root of this.notScheduledTaskGraph.roots) {
129
129
  const rootTask = this.notScheduledTaskGraph.tasks[root];
130
130
  const executorName = (0, utils_1.getExecutorNameForTask)(rootTask, this.projectGraph);
131
- await this.processTaskForBatches(batchMap, rootTask, executorName, true);
131
+ await this.processTaskForBatches(batchMap, rootTask, executorName, true, new Set());
132
132
  }
133
133
  for (const [executorName, taskGraph] of Object.entries(batchMap)) {
134
134
  this.scheduleBatch({ executorName, taskGraph });
@@ -139,7 +139,11 @@ class TasksSchedule {
139
139
  this.notScheduledTaskGraph = (0, utils_1.removeTasksFromTaskGraph)(this.notScheduledTaskGraph, Object.keys(taskGraph.tasks));
140
140
  this.scheduledBatches.push({ executorName, taskGraph });
141
141
  }
142
- async processTaskForBatches(batches, task, rootExecutorName, isRoot) {
142
+ async processTaskForBatches(batches, task, rootExecutorName, isRoot, visitedInBatch) {
143
+ // Skip if already processed in this batch - prevents redundant traversals
144
+ if (visitedInBatch.has(task.id)) {
145
+ return;
146
+ }
143
147
  if (!this.canBatchTaskBeScheduled(task, batches[rootExecutorName])) {
144
148
  return;
145
149
  }
@@ -151,6 +155,9 @@ class TasksSchedule {
151
155
  if (!batchImplementationFactory) {
152
156
  return;
153
157
  }
158
+ // Mark as visited only after all checks pass and we're actually adding to batch
159
+ // This ensures tasks can be added if they pass checks from any path
160
+ visitedInBatch.add(task.id);
154
161
  const batch = (batches[rootExecutorName] =
155
162
  batches[rootExecutorName] ??
156
163
  {
@@ -169,7 +176,7 @@ class TasksSchedule {
169
176
  }
170
177
  for (const dep of this.reverseTaskDeps[task.id]) {
171
178
  const depTask = this.taskGraph.tasks[dep];
172
- await this.processTaskForBatches(batches, depTask, rootExecutorName, false);
179
+ await this.processTaskForBatches(batches, depTask, rootExecutorName, false, visitedInBatch);
173
180
  }
174
181
  }
175
182
  canBatchTaskBeScheduled(task, batchTaskGraph) {
@@ -110,6 +110,10 @@ export declare function installPackageToTmp(pkg: string, requiredVersion: string
110
110
  tempDir: string;
111
111
  cleanup: () => void;
112
112
  };
113
+ export declare function installPackageToTmpAsync(pkg: string, requiredVersion: string): Promise<{
114
+ tempDir: string;
115
+ cleanup: () => void;
116
+ }>;
113
117
  /**
114
118
  * Get the resolved version of a dependency from package.json.
115
119
  *
@@ -1 +1 @@
1
- {"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/utils/package-json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package-json.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/utils/package-json.ts"],"names":[],"mappings":"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"}
@@ -9,10 +9,13 @@ exports.readTargetsFromPackageJson = readTargetsFromPackageJson;
9
9
  exports.readModulePackageJsonWithoutFallbacks = readModulePackageJsonWithoutFallbacks;
10
10
  exports.readModulePackageJson = readModulePackageJson;
11
11
  exports.installPackageToTmp = installPackageToTmp;
12
+ exports.installPackageToTmpAsync = installPackageToTmpAsync;
12
13
  exports.getDependencyVersionFromPackageJson = getDependencyVersionFromPackageJson;
13
14
  const child_process_1 = require("child_process");
15
+ const util_1 = require("util");
14
16
  const fs_1 = require("fs");
15
17
  const path_1 = require("path");
18
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
16
19
  const tmp_1 = require("tmp");
17
20
  const json_1 = require("../generators/utils/json");
18
21
  const project_configuration_utils_1 = require("../project-graph/utils/project-configuration-utils");
@@ -199,7 +202,11 @@ function readModulePackageJson(moduleSpecifier, requirePaths = (0, installation_
199
202
  path: packageJsonPath,
200
203
  };
201
204
  }
202
- function installPackageToTmp(pkg, requiredVersion) {
205
+ /**
206
+ * Prepares all necessary information for installing a package to a temporary directory.
207
+ * This is used by both sync and async installation functions.
208
+ */
209
+ function preparePackageInstallation(pkg, requiredVersion) {
203
210
  const { dir: tempDir, cleanup } = (0, package_manager_1.createTempNpmDirectory)?.() ?? {
204
211
  dir: (0, tmp_1.dirSync)().name,
205
212
  cleanup: () => { },
@@ -209,29 +216,56 @@ function installPackageToTmp(pkg, requiredVersion) {
209
216
  const isVerbose = process.env.NX_VERBOSE_LOGGING === 'true';
210
217
  generatePackageManagerFiles(tempDir, packageManager);
211
218
  const preInstallCommand = (0, package_manager_1.getPackageManagerCommand)(packageManager).preInstall;
212
- if (preInstallCommand) {
213
- // ensure package.json and repo in tmp folder is set to a proper package manager state
214
- (0, child_process_1.execSync)(preInstallCommand, {
215
- cwd: tempDir,
216
- stdio: isVerbose ? 'inherit' : 'ignore',
217
- windowsHide: false,
218
- });
219
- }
220
219
  const pmCommands = (0, package_manager_1.getPackageManagerCommand)(packageManager);
221
220
  let addCommand = pmCommands.addDev;
222
221
  if (packageManager === 'pnpm') {
223
222
  addCommand = 'pnpm add -D'; // we need to ensure that we are not using workspace command
224
223
  }
225
- (0, child_process_1.execSync)(`${addCommand} ${pkg}@${requiredVersion} ${pmCommands.ignoreScriptsFlag ?? ''}`, {
224
+ const installCommand = `${addCommand} ${pkg}@${requiredVersion} ${pmCommands.ignoreScriptsFlag ?? ''}`;
225
+ const execOptions = {
226
226
  cwd: tempDir,
227
227
  stdio: isVerbose ? 'inherit' : 'ignore',
228
228
  windowsHide: false,
229
- });
229
+ };
230
230
  return {
231
231
  tempDir,
232
232
  cleanup,
233
+ preInstallCommand,
234
+ installCommand,
235
+ execOptions,
233
236
  };
234
237
  }
238
+ function installPackageToTmp(pkg, requiredVersion) {
239
+ const { tempDir, cleanup, preInstallCommand, installCommand, execOptions } = preparePackageInstallation(pkg, requiredVersion);
240
+ if (preInstallCommand) {
241
+ // ensure package.json and repo in tmp folder is set to a proper package manager state
242
+ (0, child_process_1.execSync)(preInstallCommand, execOptions);
243
+ }
244
+ (0, child_process_1.execSync)(installCommand, execOptions);
245
+ return {
246
+ tempDir,
247
+ cleanup,
248
+ };
249
+ }
250
+ async function installPackageToTmpAsync(pkg, requiredVersion) {
251
+ const { tempDir, cleanup, preInstallCommand, installCommand, execOptions } = preparePackageInstallation(pkg, requiredVersion);
252
+ try {
253
+ if (preInstallCommand) {
254
+ // ensure package.json and repo in tmp folder is set to a proper package manager state
255
+ await execAsync(preInstallCommand, execOptions);
256
+ }
257
+ await execAsync(installCommand, execOptions);
258
+ return {
259
+ tempDir,
260
+ cleanup,
261
+ };
262
+ }
263
+ catch (error) {
264
+ // Clean up on error
265
+ cleanup();
266
+ throw error;
267
+ }
268
+ }
235
269
  function getDependencyVersionFromPackageJson(treeOrPackageName, packageNameOrRoot, packageJsonPathOrObjectOrRoot, dependencyLookup) {
236
270
  if (typeof treeOrPackageName !== 'string') {
237
271
  return getDependencyVersionFromPackageJsonFromTree(treeOrPackageName, packageNameOrRoot, packageJsonPathOrObjectOrRoot, dependencyLookup);