nx 21.5.0-beta.0 → 21.5.0-beta.2

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 (47) hide show
  1. package/package.json +11 -11
  2. package/src/adapter/ngcli-adapter.d.ts.map +1 -1
  3. package/src/adapter/ngcli-adapter.js +21 -8
  4. package/src/command-line/affected/affected.d.ts.map +1 -1
  5. package/src/command-line/affected/affected.js +2 -0
  6. package/src/command-line/graph/graph.d.ts +2 -2
  7. package/src/command-line/graph/graph.d.ts.map +1 -1
  8. package/src/command-line/graph/graph.js +89 -166
  9. package/src/command-line/init/implementation/utils.d.ts.map +1 -1
  10. package/src/command-line/init/implementation/utils.js +9 -2
  11. package/src/command-line/mcp/mcp.d.ts.map +1 -1
  12. package/src/command-line/mcp/mcp.js +39 -4
  13. package/src/command-line/migrate/migrate.d.ts +1 -0
  14. package/src/command-line/migrate/migrate.d.ts.map +1 -1
  15. package/src/command-line/migrate/migrate.js +20 -2
  16. package/src/command-line/run-many/run-many.js +1 -1
  17. package/src/config/misc-interfaces.d.ts +1 -0
  18. package/src/config/misc-interfaces.d.ts.map +1 -1
  19. package/src/config/workspace-json-project-json.d.ts +1 -0
  20. package/src/config/workspace-json-project-json.d.ts.map +1 -1
  21. package/src/core/graph/main.js +1 -1
  22. package/src/core/graph/styles.css +1 -1
  23. package/src/core/graph/styles.js +1 -1
  24. package/src/daemon/client/client.d.ts +1 -0
  25. package/src/daemon/client/client.d.ts.map +1 -1
  26. package/src/daemon/client/client.js +35 -4
  27. package/src/daemon/server/shutdown-utils.d.ts.map +1 -1
  28. package/src/daemon/server/shutdown-utils.js +1 -0
  29. package/src/executors/run-commands/running-tasks.d.ts +1 -0
  30. package/src/executors/run-commands/running-tasks.d.ts.map +1 -1
  31. package/src/executors/run-commands/running-tasks.js +40 -14
  32. package/src/generators/utils/project-configuration.js +7 -2
  33. package/src/native/nx.wasi-browser.js +39 -42
  34. package/src/native/nx.wasm32-wasi.wasm +0 -0
  35. package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.d.ts.map +1 -1
  36. package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +5 -4
  37. package/src/plugins/js/versions.d.ts +1 -1
  38. package/src/plugins/js/versions.js +1 -1
  39. package/src/project-graph/utils/project-configuration-utils.d.ts.map +1 -1
  40. package/src/project-graph/utils/project-configuration-utils.js +1 -0
  41. package/src/tasks-runner/task-graph-utils.d.ts.map +1 -1
  42. package/src/tasks-runner/task-graph-utils.js +27 -4
  43. package/src/utils/package-manager.d.ts.map +1 -1
  44. package/src/utils/package-manager.js +12 -1
  45. package/src/utils/promised-based-queue.d.ts +7 -0
  46. package/src/utils/promised-based-queue.d.ts.map +1 -1
  47. package/src/utils/promised-based-queue.js +9 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nx",
3
- "version": "21.5.0-beta.0",
3
+ "version": "21.5.0-beta.2",
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": {
@@ -83,16 +83,16 @@
83
83
  }
84
84
  },
85
85
  "optionalDependencies": {
86
- "@nx/nx-darwin-arm64": "21.5.0-beta.0",
87
- "@nx/nx-darwin-x64": "21.5.0-beta.0",
88
- "@nx/nx-freebsd-x64": "21.5.0-beta.0",
89
- "@nx/nx-linux-arm-gnueabihf": "21.5.0-beta.0",
90
- "@nx/nx-linux-arm64-gnu": "21.5.0-beta.0",
91
- "@nx/nx-linux-arm64-musl": "21.5.0-beta.0",
92
- "@nx/nx-linux-x64-gnu": "21.5.0-beta.0",
93
- "@nx/nx-linux-x64-musl": "21.5.0-beta.0",
94
- "@nx/nx-win32-arm64-msvc": "21.5.0-beta.0",
95
- "@nx/nx-win32-x64-msvc": "21.5.0-beta.0"
86
+ "@nx/nx-darwin-arm64": "21.5.0-beta.2",
87
+ "@nx/nx-darwin-x64": "21.5.0-beta.2",
88
+ "@nx/nx-freebsd-x64": "21.5.0-beta.2",
89
+ "@nx/nx-linux-arm-gnueabihf": "21.5.0-beta.2",
90
+ "@nx/nx-linux-arm64-gnu": "21.5.0-beta.2",
91
+ "@nx/nx-linux-arm64-musl": "21.5.0-beta.2",
92
+ "@nx/nx-linux-x64-gnu": "21.5.0-beta.2",
93
+ "@nx/nx-linux-x64-musl": "21.5.0-beta.2",
94
+ "@nx/nx-win32-arm64-msvc": "21.5.0-beta.2",
95
+ "@nx/nx-win32-x64-msvc": "21.5.0-beta.2"
96
96
  },
97
97
  "nx-migrations": {
98
98
  "migrations": "./migrations.json",
@@ -1 +1 @@
1
- {"version":3,"file":"ngcli-adapter.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/adapter/ngcli-adapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ngcli-adapter.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/adapter/ngcli-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,OAAO,EAEP,IAAI,EACJ,YAAY,EAGZ,SAAS,EAEV,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,UAAU,EAAE,MAAM,oDAAoD,CAAC;AAWhF,OAAO,EAAgB,UAAU,EAAW,MAAM,MAAM,CAAC;AAUzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,uCAAuC,CAAC;AAC7E,OAAO,EAAU,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAuBlD,OAAO,EAIL,eAAe,EAGf,iBAAiB,EAElB,MAAM,2BAA2B,CAAC;AASnC,wBAAsB,oBAAoB,CACxC,WAAW,EAAE;IACX,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,GAAG,CAAC;CACnB,EACD,OAAO,EAAE,eAAe,+DA+GzB;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IACJ,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,GAAG,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;CAChD,EACD,OAAO,EAAE,OAAO,GACf,OAAO,CAAC,UAAU,CAAC,OAAO,2BAA2B,EAAE,aAAa,CAAC,CAAC,CA4CxE;AA2KD,KAAK,2BAA2B,GAAG,oBAAoB,GAAG;IAAE,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAE9E,qBAAa,YAAa,SAAQ,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC;IAC7C,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,MAAM;IAIhC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC;IAaxC,SAAS,CAAC,gCAAgC;IA+C1C,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC;IAyGxD,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;IAQvC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;IAQvC,yBAAyB,CACvB,QAAQ,EAAE,2BAA2B,EACrC,OAAO,EAAE,2BAA2B,EACpC,WAAW,EAAE,MAAM;IAoCrB,uBAAuB;IAIvB,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC;CAazD;AAED;;;GAGG;AACH,qBAAa,uBAAwB,SAAQ,YAAY;IACvD,SAAS,CAAC,gCAAgC;CA0B3C;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,GAAG,UAa9C;AAED;;;GAGG;AACH,qBAAa,mCAAoC,SAAQ,YAAY;IACzC,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAnC,IAAI,EAAE,MAAM,EAAmB,IAAI,EAAE,IAAI;IAIrD,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC;IA2DxC,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;IAUvC,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;IAU5C,MAAM,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC;IAUvC,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;CAI7C;AAWD,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC9C,OAAO,EAAE,OAAO,mBAwBjB;AAiED,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,EAC9C,SAAS,EAAE,OAAO;;;GA+BnB;AA4CD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE;IACnD,CAAC,IAAI,EAAE,MAAM,GAAG,CACd,IAAI,EAAE,IAAI,EACV,gBAAgB,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,KACnC,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,QAEA;AAED,wBAAgB,0BAA0B,CACxC,cAAc,EAAE,MAAM,EACtB,aAAa,EAAE,MAAM,IAcnB,MAAM,IAAI,EACV,kBAAkB;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,KACrC,OAAO,CAAC,iBAAiB,CAAC,CAoG9B;AAID,eAAO,MAAM,SAAS,GAAI,mBAAiB,KAAG,OAAO,CAAC,MAqBrD,CAAC;AA2MF;;;;;;;;;GASG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,SAAS,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,EACxE,UAAU,EAAE,CAAC,EACb,eAAe,EAAE,CAAC,EAClB,OAAO,EAAE,oBAAoB,GAC5B,CAAC,CAkDH"}
@@ -251,7 +251,7 @@ class NxScopedHost extends core_1.virtualFs.ScopedHost {
251
251
  read(path) {
252
252
  if ((path === 'angular.json' || path === '/angular.json') &&
253
253
  (0, angular_json_1.isAngularPluginInstalled)()) {
254
- return this.readMergedWorkspaceConfiguration().pipe((0, operators_1.map)((r) => Buffer.from(JSON.stringify((0, angular_json_1.toOldFormat)(r)))));
254
+ return this.readMergedWorkspaceConfiguration().pipe((0, operators_1.map)((r) => stringToArrayBuffer(JSON.stringify((0, angular_json_1.toOldFormat)(r)))));
255
255
  }
256
256
  else {
257
257
  return super.read(path);
@@ -332,11 +332,11 @@ class NxScopedHost extends core_1.virtualFs.ScopedHost {
332
332
  const updatedContent = this.mergeProjectConfiguration(existingConfig.projects[projectName], projects[projectName], projectName);
333
333
  if (updatedContent) {
334
334
  delete updatedContent.root;
335
- allObservables.push(super.write(path, Buffer.from(JSON.stringify(updatedContent, null, 2))));
335
+ allObservables.push(super.write(path, stringToArrayBuffer(JSON.stringify(updatedContent, null, 2))));
336
336
  }
337
337
  }
338
338
  else {
339
- allObservables.push(super.write(path, Buffer.from(content)));
339
+ allObservables.push(super.write(path, stringToArrayBuffer(content)));
340
340
  }
341
341
  },
342
342
  }, projectName, projects[projectName]);
@@ -473,7 +473,7 @@ class NxScopeHostUsedForWrappedSchematics extends NxScopedHost {
473
473
  const projectJsonConfig = (0, angular_json_1.toOldFormat)({ projects });
474
474
  return super.readExistingAngularJson().pipe((0, operators_1.map)((angularJson) => {
475
475
  if (angularJson) {
476
- return Buffer.from(JSON.stringify({
476
+ return stringToArrayBuffer(JSON.stringify({
477
477
  version: 1,
478
478
  projects: {
479
479
  ...projectJsonConfig.projects,
@@ -482,14 +482,14 @@ class NxScopeHostUsedForWrappedSchematics extends NxScopedHost {
482
482
  }));
483
483
  }
484
484
  else {
485
- return Buffer.from(JSON.stringify(projectJsonConfig));
485
+ return stringToArrayBuffer(JSON.stringify(projectJsonConfig));
486
486
  }
487
487
  }));
488
488
  }
489
489
  else {
490
490
  const match = findMatchingFileChange(this.host, path);
491
491
  if (match) {
492
- return (0, rxjs_1.of)(Buffer.from(match.content));
492
+ return (0, rxjs_1.of)(bufferToArrayBuffer(Buffer.from(match.content)));
493
493
  }
494
494
  else {
495
495
  return super.read(path);
@@ -706,11 +706,11 @@ function wrapAngularDevkitSchematic(collectionName, generatorName) {
706
706
  saveProjectsConfigurationsInWrappedSchematic(host, event.content.toString());
707
707
  }
708
708
  else {
709
- host.write(eventPath, event.content);
709
+ host.write(eventPath, toBufferOrString(event.content));
710
710
  }
711
711
  }
712
712
  else if (event.kind === 'create') {
713
- host.write(eventPath, event.content);
713
+ host.write(eventPath, toBufferOrString(event.content));
714
714
  }
715
715
  else if (event.kind === 'delete') {
716
716
  host.delete(eventPath);
@@ -946,3 +946,16 @@ function restoreNxTokensInOptions(newOptions, previousOptions, project) {
946
946
  }
947
947
  return result;
948
948
  }
949
+ function toBufferOrString(content) {
950
+ if (Buffer.isBuffer(content) || typeof content === 'string') {
951
+ return content;
952
+ }
953
+ // it's an ArrayBuffer
954
+ return Buffer.from(content);
955
+ }
956
+ function stringToArrayBuffer(str) {
957
+ return new TextEncoder().encode(str).buffer;
958
+ }
959
+ function bufferToArrayBuffer(buffer) {
960
+ return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
961
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"affected.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/command-line/affected/affected.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAQ7D,OAAO,EACL,YAAY,EACZ,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAMlF,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,OAAO,GAAG,gBAAgB,GAAG,UAAU,EAChD,IAAI,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC1B,uBAAuB,GAAE,MAAM,CAC7B,MAAM,EACN,CAAC,sBAAsB,GAAG,MAAM,CAAC,EAAE,CAC/B,EACN,YAAY,GAGP;IACH,uBAAuB,EAAE,OAAO,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;CAC1B,GACA,OAAO,CAAC,IAAI,CAAC,CA8Df;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAuBpC"}
1
+ {"version":3,"file":"affected.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/command-line/affected/affected.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAQ7D,OAAO,EACL,YAAY,EACZ,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EAAE,sBAAsB,EAAE,MAAM,0CAA0C,CAAC;AAMlF,wBAAsB,QAAQ,CAC5B,OAAO,EAAE,OAAO,GAAG,gBAAgB,GAAG,UAAU,EAChD,IAAI,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC1B,uBAAuB,GAAE,MAAM,CAC7B,MAAM,EACN,CAAC,sBAAsB,GAAG,MAAM,CAAC,EAAE,CAC/B,EACN,YAAY,GAGP;IACH,uBAAuB,EAAE,OAAO,CAAC;IACjC,eAAe,EAAE,OAAO,CAAC;CAC1B,GACA,OAAO,CAAC,IAAI,CAAC,CAiEf;AAED,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,YAAY,GACzB,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAuBpC"}
@@ -42,6 +42,8 @@ async function affected(command, args, extraTargetDependencies = {}, extraOption
42
42
  open: true,
43
43
  view: 'tasks',
44
44
  targets: nxArgs.targets,
45
+ all: nxArgs.all &&
46
+ (!nxArgs.projects || nxArgs.projects.length === 0),
45
47
  projects: projectNames,
46
48
  file,
47
49
  }, projectNames);
@@ -27,9 +27,9 @@ export interface ProjectGraphClientResponse {
27
27
  disabledTaskSyncGenerators?: string[];
28
28
  }
29
29
  export interface TaskGraphClientResponse {
30
- taskGraphs: Record<string, TaskGraph>;
30
+ taskGraph: TaskGraph;
31
31
  plans?: Record<string, string[]>;
32
- errors: Record<string, string>;
32
+ error?: string | null;
33
33
  }
34
34
  export interface ExpandedTaskInputsReponse {
35
35
  [taskId: string]: Record<string, string[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/command-line/graph/graph.ts"],"names":[],"mappings":"AA0BA,OAAO,EAEL,cAAc,EACd,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAuBpD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0BAA0B,CAAC,EAAE,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,yBAAyB;IACxC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC5C;AAiJD,wBAAsB,aAAa,CACjC,IAAI,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,EACD,gBAAgB,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAuSf;AA4zBD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACrC;;OAEG;IACH,KAAK,EAAE,YAAY,CAAC;CACrB"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/command-line/graph/graph.ts"],"names":[],"mappings":"AA0BA,OAAO,EAEL,cAAc,EACd,YAAY,EACZ,sBAAsB,EACtB,uBAAuB,EACxB,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAuBpD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,uBAAuB,EAAE,CAAC;IACpC,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0BAA0B,CAAC,EAAE,MAAM,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,MAAM,WAAW,yBAAyB;IACxC,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CAC5C;AAiJD,wBAAsB,aAAa,CACjC,IAAI,EAAE;IACJ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,iBAAiB,CAAC;IAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,EACD,gBAAgB,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CA+Rf;AAyuBD;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IACrC;;OAEG;IACH,KAAK,EAAE,YAAY,CAAC;CACrB"}
@@ -129,17 +129,6 @@ function filterGraph(graph, focus, exclude) {
129
129
  return filteredGraph;
130
130
  }
131
131
  async function generateGraph(args, affectedProjects) {
132
- if (Array.isArray(args.targets) &&
133
- args.targets.length > 1 &&
134
- args.file &&
135
- !(args.file === 'stdout' || args.file.endsWith('.json'))) {
136
- output_1.output.warn({
137
- title: 'Showing Multiple Targets is not supported yet',
138
- bodyLines: [
139
- `Only the task graph for "${args.targets[0]}" tasks will be shown`,
140
- ],
141
- });
142
- }
143
132
  if (args.view === 'project-details' && !args.focus) {
144
133
  output_1.output.error({
145
134
  title: `The project details view requires the --focus option.`,
@@ -155,10 +144,6 @@ async function generateGraph(args, affectedProjects) {
155
144
  });
156
145
  process.exit(1);
157
146
  }
158
- // TODO: Graph Client should support multiple targets
159
- const target = Array.isArray(args.targets && args.targets.length >= 1)
160
- ? args.targets[0]
161
- : args.targets;
162
147
  let rawGraph;
163
148
  let sourceMaps;
164
149
  let isPartial = false;
@@ -253,7 +238,9 @@ async function generateGraph(args, affectedProjects) {
253
238
  recursive: true,
254
239
  });
255
240
  const { projectGraphClientResponse } = await createProjectGraphAndSourceMapClientResponse(affectedProjects);
256
- const taskGraphClientResponse = await createTaskGraphClientResponse();
241
+ const taskGraphClientResponse = args.targets
242
+ ? await createTaskGraphForTargetsAndProjects(args.targets, args.projects)
243
+ : await createTaskGraphClientResponse();
257
244
  const taskInputsReponse = await createExpandedTaskInputResponse(taskGraphClientResponse, projectGraphClientResponse);
258
245
  const environmentJs = buildEnvironmentJs(args.exclude || [], args.watch, !!args.file && args.file.endsWith('html') ? 'build' : 'serve', projectGraphClientResponse, taskGraphClientResponse, taskInputsReponse, sourceMaps);
259
246
  html = html.replace(/src="/g, 'src="static/');
@@ -305,15 +292,19 @@ async function generateGraph(args, affectedProjects) {
305
292
  if (args.focus) {
306
293
  url.pathname += '/' + encodeURIComponent(args.focus);
307
294
  }
308
- if (target) {
309
- url.pathname += '/' + target;
310
- }
311
- if (args.projects) {
312
- url.searchParams.append('projects', args.projects.map((projectName) => projectName).join(' '));
295
+ // Add targets as query parameters for tasks view
296
+ if (args.view === 'tasks' && args.targets && args.targets.length > 0) {
297
+ const targets = Array.isArray(args.targets)
298
+ ? args.targets
299
+ : [args.targets];
300
+ url.searchParams.append('targets', targets.join(' '));
313
301
  }
314
- else if (args.all) {
302
+ if (args.all) {
315
303
  url.pathname += '/all';
316
304
  }
305
+ else if (args.projects) {
306
+ url.searchParams.append('projects', args.projects.map((projectName) => projectName).join(' '));
307
+ }
317
308
  else if (args.affected) {
318
309
  url.pathname += '/affected';
319
310
  }
@@ -384,20 +375,18 @@ async function startServer(html, environmentJs, host, port = 4211, watchForChang
384
375
  return;
385
376
  }
386
377
  if (sanitizePath === 'task-graph.json') {
387
- const projectsParam = parsedUrl.searchParams.get('projects'); // Multiple projects
388
- const targetName = parsedUrl.searchParams.get('target');
378
+ const projectsParam = parsedUrl.searchParams.get('projects');
379
+ const targetsParam = parsedUrl.searchParams.get('targets');
389
380
  const configuration = parsedUrl.searchParams.get('configuration');
390
381
  res.writeHead(200, { 'Content-Type': 'application/json' });
391
- if (projectsParam && targetName) {
392
- // Multiple projects + target (UI: selected specific projects)
393
- const projectNames = projectsParam.split(' ').filter(Boolean);
394
- return res.end(JSON.stringify(await createTaskGraphsForTargetAndProjects(targetName, projectNames, configuration)));
395
- }
396
- if (targetName) {
397
- // Target only (UI: all projects with this target)
398
- return res.end(JSON.stringify(await createTaskGraphsForTargetAndProjects(targetName)));
382
+ if (targetsParam) {
383
+ const targetNames = targetsParam.split(' ').filter(Boolean);
384
+ const projectNames = projectsParam
385
+ ? projectsParam.split(' ').filter(Boolean)
386
+ : undefined;
387
+ return res.end(JSON.stringify(await createTaskGraphForTargetsAndProjects(targetNames, projectNames, configuration)));
399
388
  }
400
- // Legacy - load all task graphs
389
+ // load all task graphs if there's no targets specified
401
390
  return res.end(JSON.stringify(await createTaskGraphClientResponse()));
402
391
  }
403
392
  if (sanitizePath === 'task-inputs.json') {
@@ -638,26 +627,41 @@ async function createTaskGraphClientResponse(pruneExternal = false) {
638
627
  }
639
628
  const nxJson = (0, configuration_1.readNxJson)();
640
629
  node_perf_hooks_1.performance.mark('task graph generation:start');
641
- const taskGraphs = getAllTaskGraphsForWorkspace(graph);
642
- node_perf_hooks_1.performance.mark('task graph generation:end');
643
- const planner = new native_1.HashPlanner(nxJson, (0, native_1.transferProjectGraph)((0, transform_objects_1.transformProjectGraphForRust)(graph)));
644
- node_perf_hooks_1.performance.mark('task hash plan generation:start');
645
- const plans = {};
646
- for (const individualTaskGraph of Object.values(taskGraphs.taskGraphs)) {
647
- for (const task of Object.values(individualTaskGraph.tasks)) {
648
- if (plans[task.id]) {
649
- continue;
650
- }
651
- plans[task.id] = planner.getPlans([task.id], individualTaskGraph)[task.id];
652
- }
630
+ const projects = Object.keys(graph.nodes);
631
+ const allTargets = new Set();
632
+ for (const projectName in graph.nodes) {
633
+ const project = graph.nodes[projectName];
634
+ Object.keys(project.data.targets ?? {}).forEach((target) => {
635
+ allTargets.add(target);
636
+ });
637
+ }
638
+ const targets = Array.from(allTargets);
639
+ try {
640
+ const taskGraph = (0, create_task_graph_1.createTaskGraph)(graph, {}, projects, targets, undefined, {});
641
+ node_perf_hooks_1.performance.mark('task graph generation:end');
642
+ const planner = new native_1.HashPlanner(nxJson, (0, native_1.transferProjectGraph)((0, transform_objects_1.transformProjectGraphForRust)(graph)));
643
+ node_perf_hooks_1.performance.mark('task hash plan generation:start');
644
+ const taskIds = Object.keys(taskGraph.tasks);
645
+ const plans = taskIds.length > 0 ? planner.getPlans(taskIds, taskGraph) : {};
646
+ node_perf_hooks_1.performance.mark('task hash plan generation:end');
647
+ node_perf_hooks_1.performance.measure('task graph generation', 'task graph generation:start', 'task graph generation:end');
648
+ node_perf_hooks_1.performance.measure('task hash plan generation', 'task hash plan generation:start', 'task hash plan generation:end');
649
+ return { taskGraph, plans, error: null };
650
+ }
651
+ catch (err) {
652
+ node_perf_hooks_1.performance.mark('task graph generation:end');
653
+ node_perf_hooks_1.performance.measure('task graph generation (failed)', 'task graph generation:start', 'task graph generation:end');
654
+ return {
655
+ taskGraph: {
656
+ tasks: {},
657
+ dependencies: {},
658
+ continuousDependencies: {},
659
+ roots: [],
660
+ },
661
+ plans: {},
662
+ error: err.message,
663
+ };
653
664
  }
654
- node_perf_hooks_1.performance.mark('task hash plan generation:end');
655
- node_perf_hooks_1.performance.measure('task graph generation', 'task graph generation:start', 'task graph generation:end');
656
- node_perf_hooks_1.performance.measure('task hash plan generation', 'task hash plan generation:start', 'task hash plan generation:end');
657
- return {
658
- ...taskGraphs,
659
- plans,
660
- };
661
665
  }
662
666
  async function createExpandedTaskInputResponse(taskGraphClientResponse, depGraphClientResponse) {
663
667
  node_perf_hooks_1.performance.mark('task input static generation:start');
@@ -672,57 +676,6 @@ async function createExpandedTaskInputResponse(taskGraphClientResponse, depGraph
672
676
  node_perf_hooks_1.performance.measure('task input static generation', 'task input static generation:start', 'task input static generation:end');
673
677
  return response;
674
678
  }
675
- function getAllTaskGraphsForWorkspace(projectGraph) {
676
- const taskGraphs = {};
677
- const taskGraphErrors = {};
678
- // TODO(cammisuli): improve performance here. Cache results or something.
679
- for (const projectName in projectGraph.nodes) {
680
- const project = projectGraph.nodes[projectName];
681
- const targets = Object.keys(project.data.targets ?? {});
682
- targets.forEach((target) => {
683
- const taskId = createTaskId(projectName, target);
684
- try {
685
- taskGraphs[taskId] = (0, create_task_graph_1.createTaskGraph)(projectGraph, {}, [projectName], [target], undefined, {});
686
- }
687
- catch (err) {
688
- taskGraphs[taskId] = {
689
- tasks: {},
690
- dependencies: {},
691
- continuousDependencies: {},
692
- roots: [],
693
- };
694
- taskGraphErrors[taskId] = err.message;
695
- }
696
- const configurations = Object.keys(project.data.targets[target]?.configurations || {});
697
- if (configurations.length > 0) {
698
- configurations.forEach((configuration) => {
699
- const taskId = createTaskId(projectName, target, configuration);
700
- try {
701
- taskGraphs[taskId] = (0, create_task_graph_1.createTaskGraph)(projectGraph, {}, [projectName], [target], configuration, {});
702
- }
703
- catch (err) {
704
- taskGraphs[taskId] = {
705
- tasks: {},
706
- dependencies: {},
707
- continuousDependencies: {},
708
- roots: [],
709
- };
710
- taskGraphErrors[taskId] = err.message;
711
- }
712
- });
713
- }
714
- });
715
- }
716
- return { taskGraphs, errors: taskGraphErrors };
717
- }
718
- function createTaskId(projectId, targetId, configurationId) {
719
- if (configurationId) {
720
- return `${projectId}:${targetId}:${configurationId}`;
721
- }
722
- else {
723
- return `${projectId}:${targetId}`;
724
- }
725
- }
726
679
  // Performance optimized functions for lazy loading task graphs
727
680
  // In-memory cache for task graphs to avoid regeneration
728
681
  const taskGraphCache = new Map();
@@ -734,10 +687,10 @@ function clearTaskGraphCache() {
734
687
  expandedTaskInputsCache.clear();
735
688
  }
736
689
  /**
737
- * Creates task graphs for multiple projects with a specific target
738
- * If no projects specified, returns graphs for all projects with the target
690
+ * Creates a single task graph for multiple projects with multiple targets
691
+ * If no projects specified, returns graph for all projects with the targets
739
692
  */
740
- async function createTaskGraphsForTargetAndProjects(targetName, projectNames, configuration) {
693
+ async function createTaskGraphForTargetsAndProjects(targetNames, projectNames, configuration) {
741
694
  // Get project graph
742
695
  let graph;
743
696
  try {
@@ -749,74 +702,44 @@ async function createTaskGraphsForTargetAndProjects(targetName, projectNames, co
749
702
  }
750
703
  }
751
704
  const nxJson = (0, configuration_1.readNxJson)();
752
- // Determine which projects to process
753
- let projectsToProcess;
705
+ node_perf_hooks_1.performance.mark(`task graph generation:start`);
706
+ let projectsToUse;
754
707
  if (projectNames && projectNames.length > 0) {
755
- // Use specified projects (filter to only those that have the target)
756
- projectsToProcess = projectNames.filter((projectName) => graph.nodes[projectName]?.data.targets?.[targetName]);
708
+ projectsToUse = projectNames;
757
709
  }
758
710
  else {
759
- // Get all projects with the target
760
- projectsToProcess = Object.entries(graph.nodes)
761
- .filter(([_, project]) => project.data.targets?.[targetName])
711
+ // Get all projects that have at least one of the targets
712
+ projectsToUse = Object.entries(graph.nodes)
713
+ .filter(([_, project]) => targetNames.some((targetName) => project.data.targets?.[targetName]))
762
714
  .map(([projectName]) => projectName);
763
715
  }
764
- node_perf_hooks_1.performance.mark(`target task graphs generation:start`);
765
- // Create task graphs for each project
766
- const taskGraphs = {};
767
- const taskGraphErrors = {};
768
- for (const projectName of projectsToProcess) {
769
- const taskId = createTaskId(projectName, targetName, configuration);
770
- // Check cache first
771
- const cached = taskGraphCache.get(taskId);
772
- if (cached) {
773
- Object.assign(taskGraphs, cached.taskGraphs);
774
- Object.assign(taskGraphErrors, cached.errors);
775
- continue;
776
- }
777
- // Create task graph
778
- try {
779
- taskGraphs[taskId] = (0, create_task_graph_1.createTaskGraph)(graph, {}, [projectName], [targetName], configuration, {});
780
- }
781
- catch (err) {
782
- taskGraphs[taskId] = {
716
+ try {
717
+ // Create single task graph
718
+ const taskGraph = (0, create_task_graph_1.createTaskGraph)(graph, {}, projectsToUse, targetNames, configuration, {});
719
+ node_perf_hooks_1.performance.mark(`task graph generation:end`);
720
+ const planner = new native_1.HashPlanner(nxJson, (0, native_1.transferProjectGraph)((0, transform_objects_1.transformProjectGraphForRust)(graph)));
721
+ node_perf_hooks_1.performance.mark('task hash plan generation:start');
722
+ const taskIds = Object.keys(taskGraph.tasks);
723
+ const plans = taskIds.length > 0 ? planner.getPlans(taskIds, taskGraph) : {};
724
+ node_perf_hooks_1.performance.mark('task hash plan generation:end');
725
+ node_perf_hooks_1.performance.measure(`task graph generation for ${targetNames.join(', ')}`, `task graph generation:start`, `task graph generation:end`);
726
+ node_perf_hooks_1.performance.measure('task hash plan generation', 'task hash plan generation:start', 'task hash plan generation:end');
727
+ return { taskGraph, plans, error: null };
728
+ }
729
+ catch (err) {
730
+ node_perf_hooks_1.performance.mark(`task graph generation:end`);
731
+ node_perf_hooks_1.performance.measure(`task graph generation for ${targetNames.join(', ')} (failed)`, `task graph generation:start`, `task graph generation:end`);
732
+ return {
733
+ taskGraph: {
783
734
  tasks: {},
784
735
  dependencies: {},
785
736
  continuousDependencies: {},
786
737
  roots: [],
787
- };
788
- taskGraphErrors[taskId] = err.message;
789
- }
790
- }
791
- node_perf_hooks_1.performance.mark(`target task graphs generation:end`);
792
- // Generate hash plans
793
- const planner = new native_1.HashPlanner(nxJson, (0, native_1.transferProjectGraph)((0, transform_objects_1.transformProjectGraphForRust)(graph)));
794
- node_perf_hooks_1.performance.mark('target task hash plan generation:start');
795
- const plans = {};
796
- for (const taskGraph of Object.values(taskGraphs)) {
797
- const taskIds = Object.keys(taskGraph.tasks);
798
- if (taskIds.length > 0) {
799
- const taskPlans = planner.getPlans(taskIds, taskGraph);
800
- Object.assign(plans, taskPlans);
801
- }
802
- }
803
- node_perf_hooks_1.performance.mark('target task hash plan generation:end');
804
- // Cache individual results for future requests
805
- for (const projectName of projectsToProcess) {
806
- const taskId = createTaskId(projectName, targetName, configuration);
807
- if (!taskGraphCache.has(taskId)) {
808
- taskGraphCache.set(taskId, {
809
- taskGraphs: { [taskId]: taskGraphs[taskId] },
810
- plans: Object.fromEntries(Object.entries(plans).filter(([key]) => key.startsWith(projectName))),
811
- errors: taskGraphErrors[taskId]
812
- ? { [taskId]: taskGraphErrors[taskId] }
813
- : {},
814
- });
815
- }
738
+ },
739
+ plans: {},
740
+ error: err.message,
741
+ };
816
742
  }
817
- node_perf_hooks_1.performance.measure(`target task graphs generation for ${targetName}`, `target task graphs generation:start`, `target task graphs generation:end`);
818
- node_perf_hooks_1.performance.measure('target task hash plan generation', 'target task hash plan generation:start', 'target task hash plan generation:end');
819
- return { taskGraphs, plans, errors: taskGraphErrors };
820
743
  }
821
744
  async function getExpandedTaskInputs(taskId) {
822
745
  // Check cache first
@@ -825,9 +748,9 @@ async function getExpandedTaskInputs(taskId) {
825
748
  }
826
749
  // Use the optimized version that only creates the specific task graph needed
827
750
  const [projectName, targetName, configuration] = taskId.split(':');
828
- const taskGraphResponse = await createTaskGraphsForTargetAndProjects(targetName, [projectName], configuration);
751
+ const taskGraphResponse = await createTaskGraphForTargetsAndProjects([targetName], [projectName], configuration);
829
752
  const allWorkspaceFiles = await (0, all_file_data_1.allFileData)();
830
- const inputs = taskGraphResponse.plans[taskId];
753
+ const inputs = taskGraphResponse.plans?.[taskId];
831
754
  let result = {};
832
755
  if (inputs) {
833
756
  result = expandInputs(inputs, currentProjectGraphClientResponse.projects.find((p) => p.name === projectName), allWorkspaceFiles, currentProjectGraphClientResponse);
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/init/implementation/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAQ9D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAEL,sBAAsB,EACvB,MAAM,gCAAgC,CAAC;AASxC,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,MAAM,EAAE,EAC5B,mBAAmB,EAAE,MAAM,EAAE,EAC7B,aAAa,EAAE;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,QA0C1C;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,mBAAmB,CA+GrB;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAY9B;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,QAqC3C;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,sBAAmD,QAOzD;AAED,wBAAsB,SAAS,CAC7B,kBAAkB,EACd,SAAS,GACT,iBAAiB,GACjB,aAAa,GACb,kBAAkB,GAClB,cAAc,GACd,kBAAkB,GAClB,mBAAmB,iBAMxB;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAAE,GACnB,IAAI,CAiBN;AAED,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EAAE,EAC1B,GAAG,EAAE,sBAAsB,QAqB5B;AAED,wBAAgB,0BAA0B,CAAC,eAAe,EAAE,MAAM,QAQjE;AAED,wBAAgB,iBAAiB,CAAC,EAChC,aAAa,EACb,WAAW,GACZ,EAAE;IACD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,GAAG,IAAI,CAUP;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,WAAW,WASlD;AAED,wBAAgB,KAAK,CAAC,WAAW,EAAE,WAAW,WAa7C"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/init/implementation/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAQ9D,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAC1D,OAAO,EAEL,sBAAsB,EACvB,MAAM,gCAAgC,CAAC;AASxC,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,MAAM,EAAE,EAC5B,mBAAmB,EAAE,MAAM,EAAE,EAC7B,aAAa,EAAE;IAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;CAAE,QA0C1C;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC7B,mBAAmB,CA+GrB;AAED,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,kBAAkB,CAAC,EAAE,MAAM,EAAE,QAY9B;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,QAqC3C;AAED,wBAAgB,UAAU,CACxB,QAAQ,EAAE,MAAM,EAChB,GAAG,GAAE,sBAAmD,QAOzD;AAED,wBAAsB,SAAS,CAC7B,kBAAkB,EACd,SAAS,GACT,iBAAiB,GACjB,aAAa,GACb,kBAAkB,GAClB,cAAc,GACd,kBAAkB,GAClB,mBAAmB,iBAMxB;AAED,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,EAAE,GACnB,IAAI,CAiBN;AAED,wBAAgB,oCAAoC,CAClD,QAAQ,EAAE,MAAM,EAChB,gBAAgB,EAAE,MAAM,EAAE,EAC1B,GAAG,EAAE,sBAAsB,QAqB5B;AAED,wBAAgB,0BAA0B,CAAC,eAAe,EAAE,MAAM,QAQjE;AAED,wBAAgB,iBAAiB,CAAC,EAChC,aAAa,EACb,WAAW,GACZ,EAAE;IACD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,GAAG,IAAI,CAUP;AAED,wBAAgB,UAAU,CAAC,WAAW,EAAE,WAAW,WAgBlD;AAED,wBAAgB,KAAK,CAAC,WAAW,EAAE,WAAW,WAa7C"}
@@ -272,8 +272,15 @@ function printFinalMessage({ learnMoreLink, appendLines, }) {
272
272
  function isMonorepo(packageJson) {
273
273
  if (!!packageJson.workspaces)
274
274
  return true;
275
- if ((0, fs_1.existsSync)('pnpm-workspace.yaml') || (0, fs_1.existsSync)('pnpm-workspace.yml'))
276
- return true;
275
+ try {
276
+ const content = (0, fs_1.readFileSync)('pnpm-workspace.yaml', 'utf-8');
277
+ const { load } = require('@zkochan/js-yaml');
278
+ const { packages } = load(content) ?? {};
279
+ if (packages) {
280
+ return true;
281
+ }
282
+ }
283
+ catch { }
277
284
  if ((0, fs_1.existsSync)('lerna.json'))
278
285
  return true;
279
286
  return false;
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/command-line/mcp/mcp.ts"],"names":[],"mappings":"AAIA,wBAAsB,UAAU,CAAC,IAAI,EAAE,GAAG,iBAazC;AAED,wBAAsB,QAAQ,kBAa7B"}
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/command-line/mcp/mcp.ts"],"names":[],"mappings":"AAOA,wBAAsB,UAAU,CAAC,IAAI,EAAE,GAAG,iBA4BzC;AAED,wBAAsB,QAAQ,kBAyB7B"}
@@ -6,16 +6,51 @@ const child_process_1 = require("child_process");
6
6
  const package_manager_1 = require("../../utils/package-manager");
7
7
  const workspace_root_1 = require("../../utils/workspace-root");
8
8
  async function mcpHandler(args) {
9
- const packageManagerCommands = (0, package_manager_1.getPackageManagerCommand)();
9
+ const packageManager = (0, package_manager_1.detectPackageManager)();
10
+ const packageManagerCommands = (0, package_manager_1.getPackageManagerCommand)(packageManager);
10
11
  const passthroughArgs = args['_'][0] === 'mcp' ? args['_'].slice(1) : args['_'];
11
- (0, child_process_1.spawnSync)(packageManagerCommands.dlx, ['-y', 'nx-mcp@latest', ...passthroughArgs], {
12
+ let dlxArgs;
13
+ if (packageManager === 'npm') {
14
+ dlxArgs = ['-y', 'nx-mcp@latest', ...passthroughArgs];
15
+ }
16
+ else if (packageManager === 'yarn') {
17
+ dlxArgs = ['--quiet', 'nx-mcp@latest', ...passthroughArgs];
18
+ }
19
+ else if (packageManager === 'bun') {
20
+ dlxArgs = ['--silent', 'nx-mcp@latest', ...passthroughArgs];
21
+ }
22
+ else {
23
+ dlxArgs = ['nx-mcp@latest', ...passthroughArgs];
24
+ }
25
+ // For commands that might contain spaces like "pnpm dlx"
26
+ const dlxCommand = packageManagerCommands.dlx.split(' ');
27
+ const executable = dlxCommand[0];
28
+ const execArgs = [...dlxCommand.slice(1), ...dlxArgs];
29
+ (0, child_process_1.spawnSync)(executable, execArgs, {
12
30
  stdio: 'inherit',
13
31
  cwd: workspace_root_1.workspaceRoot,
14
32
  });
15
33
  }
16
34
  async function showHelp() {
17
- const packageManagerCommands = (0, package_manager_1.getPackageManagerCommand)();
18
- const helpOutput = (0, child_process_1.spawnSync)(packageManagerCommands.dlx, ['-y', 'nx-mcp@latest', '--help'], {
35
+ const packageManager = (0, package_manager_1.detectPackageManager)();
36
+ const packageManagerCommands = (0, package_manager_1.getPackageManagerCommand)(packageManager);
37
+ let dlxArgs;
38
+ if (packageManager === 'npm') {
39
+ dlxArgs = ['-y', 'nx-mcp@latest', '--help'];
40
+ }
41
+ else if (packageManager === 'yarn') {
42
+ dlxArgs = ['--quiet', 'nx-mcp@latest', '--help'];
43
+ }
44
+ else if (packageManager === 'bun') {
45
+ dlxArgs = ['--silent', 'nx-mcp@latest', '--help'];
46
+ }
47
+ else {
48
+ dlxArgs = ['nx-mcp@latest', '--help'];
49
+ }
50
+ const dlxCommand = packageManagerCommands.dlx.split(' ');
51
+ const executable = dlxCommand[0];
52
+ const execArgs = [...dlxCommand.slice(1), ...dlxArgs];
53
+ const helpOutput = (0, child_process_1.spawnSync)(executable, execArgs, {
19
54
  cwd: workspace_root_1.workspaceRoot,
20
55
  encoding: 'utf-8',
21
56
  });
@@ -64,6 +64,7 @@ export declare class Migrator {
64
64
  private shouldApplyPackageUpdate;
65
65
  private addPackageUpdate;
66
66
  private areRequirementsMet;
67
+ private areIncompatiblePackagesPresent;
67
68
  private areMigrationRequirementsMet;
68
69
  private isMigrationForHigherVersionThanWhatIsInstalled;
69
70
  private wasMigrationSkipped;