nx 22.4.1 → 22.5.0-beta.0

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 (48) hide show
  1. package/package.json +11 -11
  2. package/project.json +4 -0
  3. package/src/command-line/nx-cloud/complete-run/stop-all-agents.d.ts.map +1 -1
  4. package/src/command-line/nx-cloud/complete-run/stop-all-agents.js +6 -0
  5. package/src/command-line/nx-cloud/fix-ci/fix-ci.d.ts.map +1 -1
  6. package/src/command-line/nx-cloud/fix-ci/fix-ci.js +6 -0
  7. package/src/command-line/nx-cloud/login/login.d.ts.map +1 -1
  8. package/src/command-line/nx-cloud/login/login.js +6 -0
  9. package/src/command-line/nx-cloud/logout/logout.d.ts.map +1 -1
  10. package/src/command-line/nx-cloud/logout/logout.js +6 -0
  11. package/src/command-line/nx-cloud/record/command-object.d.ts.map +1 -1
  12. package/src/command-line/nx-cloud/record/command-object.js +3 -0
  13. package/src/command-line/nx-cloud/record/record.d.ts +1 -0
  14. package/src/command-line/nx-cloud/record/record.d.ts.map +1 -1
  15. package/src/command-line/nx-cloud/record/record.js +26 -0
  16. package/src/command-line/nx-cloud/start-agent/start-agent.d.ts.map +1 -1
  17. package/src/command-line/nx-cloud/start-agent/start-agent.js +6 -0
  18. package/src/command-line/nx-cloud/start-ci-run/start-ci-run.d.ts.map +1 -1
  19. package/src/command-line/nx-cloud/start-ci-run/start-ci-run.js +6 -0
  20. package/src/command-line/nx-cloud/utils.d.ts +1 -0
  21. package/src/command-line/nx-cloud/utils.d.ts.map +1 -1
  22. package/src/command-line/nx-cloud/utils.js +11 -0
  23. package/src/native/index.d.ts +14 -0
  24. package/src/native/native-bindings.js +1 -0
  25. package/src/native/nx.wasm32-wasi.wasm +0 -0
  26. package/src/plugins/js/utils/register.d.ts.map +1 -1
  27. package/src/plugins/js/utils/register.js +23 -0
  28. package/src/tasks-runner/create-task-graph.d.ts.map +1 -1
  29. package/src/tasks-runner/create-task-graph.js +5 -1
  30. package/src/tasks-runner/forked-process-task-runner.js +1 -1
  31. package/src/tasks-runner/life-cycle.d.ts +7 -1
  32. package/src/tasks-runner/life-cycle.d.ts.map +1 -1
  33. package/src/tasks-runner/life-cycle.js +21 -0
  34. package/src/tasks-runner/life-cycles/tui-summary-life-cycle.d.ts.map +1 -1
  35. package/src/tasks-runner/life-cycles/tui-summary-life-cycle.js +9 -1
  36. package/src/tasks-runner/run-command.d.ts.map +1 -1
  37. package/src/tasks-runner/run-command.js +7 -12
  38. package/src/tasks-runner/running-tasks/batch-process.d.ts +10 -3
  39. package/src/tasks-runner/running-tasks/batch-process.d.ts.map +1 -1
  40. package/src/tasks-runner/running-tasks/batch-process.js +50 -6
  41. package/src/tasks-runner/task-orchestrator.d.ts +1 -0
  42. package/src/tasks-runner/task-orchestrator.d.ts.map +1 -1
  43. package/src/tasks-runner/task-orchestrator.js +77 -23
  44. package/src/tasks-runner/tasks-schedule.d.ts +2 -0
  45. package/src/tasks-runner/tasks-schedule.d.ts.map +1 -1
  46. package/src/tasks-runner/tasks-schedule.js +10 -3
  47. package/src/utils/params.d.ts.map +1 -1
  48. package/src/utils/params.js +12 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nx",
3
- "version": "22.4.1",
3
+ "version": "22.5.0-beta.0",
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": "22.4.1",
87
- "@nx/nx-darwin-x64": "22.4.1",
88
- "@nx/nx-freebsd-x64": "22.4.1",
89
- "@nx/nx-linux-arm-gnueabihf": "22.4.1",
90
- "@nx/nx-linux-arm64-gnu": "22.4.1",
91
- "@nx/nx-linux-arm64-musl": "22.4.1",
92
- "@nx/nx-linux-x64-gnu": "22.4.1",
93
- "@nx/nx-linux-x64-musl": "22.4.1",
94
- "@nx/nx-win32-arm64-msvc": "22.4.1",
95
- "@nx/nx-win32-x64-msvc": "22.4.1"
86
+ "@nx/nx-darwin-arm64": "22.5.0-beta.0",
87
+ "@nx/nx-darwin-x64": "22.5.0-beta.0",
88
+ "@nx/nx-freebsd-x64": "22.5.0-beta.0",
89
+ "@nx/nx-linux-arm-gnueabihf": "22.5.0-beta.0",
90
+ "@nx/nx-linux-arm64-gnu": "22.5.0-beta.0",
91
+ "@nx/nx-linux-arm64-musl": "22.5.0-beta.0",
92
+ "@nx/nx-linux-x64-gnu": "22.5.0-beta.0",
93
+ "@nx/nx-linux-x64-musl": "22.5.0-beta.0",
94
+ "@nx/nx-win32-arm64-msvc": "22.5.0-beta.0",
95
+ "@nx/nx-win32-x64-msvc": "22.5.0-beta.0"
96
96
  },
97
97
  "nx-migrations": {
98
98
  "migrations": "./migrations.json",
package/project.json CHANGED
@@ -56,6 +56,10 @@
56
56
  "echo": {
57
57
  "command": "echo hi"
58
58
  },
59
+ "long-task": {
60
+ "command": "node -e \"let i = 0; let interval = setInterval(() => { console.log('Long task running ' + i++ + '---------------------------------------------------------------'); }, 200); setTimeout(() => { clearInterval(interval); console.log('Long task finished'); }, 62_000);\"",
61
+ "dependsOn": ["echo"]
62
+ },
59
63
  "build": {
60
64
  "dependsOn": [
61
65
  "^build-client",
@@ -1 +1 @@
1
- {"version":3,"file":"stop-all-agents.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/complete-run/stop-all-agents.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAE7E"}
1
+ {"version":3,"file":"stop-all-agents.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/complete-run/stop-all-agents.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,iBAAiB;IAChC,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAM7E"}
@@ -1,7 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.stopAllAgentsHandler = stopAllAgentsHandler;
4
+ const nx_json_1 = require("../../../config/nx-json");
5
+ const nx_cloud_utils_1 = require("../../../utils/nx-cloud-utils");
4
6
  const utils_1 = require("../utils");
5
7
  function stopAllAgentsHandler(args) {
8
+ if (!(0, nx_cloud_utils_1.isNxCloudUsed)((0, nx_json_1.readNxJson)())) {
9
+ (0, utils_1.warnNotConnectedToCloud)();
10
+ return Promise.resolve(0);
11
+ }
6
12
  return (0, utils_1.executeNxCloudCommand)('stop-all-agents', args.verbose);
7
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"fix-ci.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/fix-ci/fix-ci.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAE7D"}
1
+ {"version":3,"file":"fix-ci.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/fix-ci/fix-ci.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAM7D"}
@@ -1,7 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.fixCiHandler = fixCiHandler;
4
+ const nx_json_1 = require("../../../config/nx-json");
5
+ const nx_cloud_utils_1 = require("../../../utils/nx-cloud-utils");
4
6
  const utils_1 = require("../utils");
5
7
  function fixCiHandler(args) {
8
+ if (!(0, nx_cloud_utils_1.isNxCloudUsed)((0, nx_json_1.readNxJson)())) {
9
+ (0, utils_1.warnNotConnectedToCloud)();
10
+ return Promise.resolve(0);
11
+ }
6
12
  return (0, utils_1.executeNxCloudCommand)('fix-ci', args.verbose);
7
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/login/login.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAM7D"}
1
+ {"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/login/login.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,SAAS;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAW7D"}
@@ -1,8 +1,14 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.loginHandler = loginHandler;
4
+ const nx_json_1 = require("../../../config/nx-json");
5
+ const nx_cloud_utils_1 = require("../../../utils/nx-cloud-utils");
4
6
  const utils_1 = require("../utils");
5
7
  function loginHandler(args) {
8
+ if (!(0, nx_cloud_utils_1.isNxCloudUsed)((0, nx_json_1.readNxJson)())) {
9
+ (0, utils_1.warnNotConnectedToCloud)();
10
+ return Promise.resolve(0);
11
+ }
6
12
  if (args.nxCloudUrl) {
7
13
  process.env.NX_CLOUD_API = args.nxCloudUrl;
8
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/logout/logout.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/D"}
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/logout/logout.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAM/D"}
@@ -1,7 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.logoutHandler = logoutHandler;
4
+ const nx_json_1 = require("../../../config/nx-json");
5
+ const nx_cloud_utils_1 = require("../../../utils/nx-cloud-utils");
4
6
  const utils_1 = require("../utils");
5
7
  function logoutHandler(args) {
8
+ if (!(0, nx_cloud_utils_1.isNxCloudUsed)((0, nx_json_1.readNxJson)())) {
9
+ (0, utils_1.warnNotConnectedToCloud)();
10
+ return Promise.resolve(0);
11
+ }
6
12
  return (0, utils_1.executeNxCloudCommand)('logout', args.verbose);
7
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"command-object.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/record/command-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,eAAO,MAAM,kBAAkB,EAAE,aAYhC,CAAC"}
1
+ {"version":3,"file":"command-object.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/record/command-object.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAGtC,eAAO,MAAM,kBAAkB,EAAE,aAehC,CAAC"}
@@ -6,6 +6,9 @@ exports.yargsRecordCommand = {
6
6
  command: 'record [options]',
7
7
  describe: 'Records a command execution for distributed task execution. This command is an alias for [`nx-cloud record`](/ci/reference/nx-cloud-cli#npx-nxcloud-record).',
8
8
  builder: (yargs) => (0, shared_options_1.withVerbose)(yargs)
9
+ .parserConfiguration({
10
+ 'populate--': true,
11
+ })
9
12
  .help(false)
10
13
  .showHelpOnFail(false)
11
14
  .option('help', { describe: 'Show help.', type: 'boolean' }),
@@ -1,5 +1,6 @@
1
1
  export interface RecordArgs {
2
2
  verbose?: boolean;
3
+ '--'?: string[];
3
4
  }
4
5
  export declare function recordHandler(args: RecordArgs): Promise<number>;
5
6
  //# sourceMappingURL=record.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/record/record.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAE/D"}
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/record/record.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,UAAU;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAwB/D"}
@@ -1,7 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.recordHandler = recordHandler;
4
+ const child_process_1 = require("child_process");
5
+ const nx_json_1 = require("../../../config/nx-json");
6
+ const output_1 = require("../../../utils/output");
7
+ const nx_cloud_utils_1 = require("../../../utils/nx-cloud-utils");
4
8
  const utils_1 = require("../utils");
5
9
  function recordHandler(args) {
10
+ if (!(0, nx_cloud_utils_1.isNxCloudUsed)((0, nx_json_1.readNxJson)())) {
11
+ let exitCode = 0;
12
+ const commandArgs = args['--'];
13
+ if (commandArgs && commandArgs.length > 0) {
14
+ const [cmd, ...cmdArgs] = commandArgs;
15
+ const result = (0, child_process_1.spawnSync)(cmd, cmdArgs, {
16
+ stdio: 'inherit',
17
+ shell: true,
18
+ encoding: 'utf-8',
19
+ maxBuffer: 10 * 1024 * 1024, // 10MB buffer
20
+ windowsHide: true,
21
+ });
22
+ exitCode = result.status ?? 1;
23
+ }
24
+ output_1.output.warn({
25
+ title: 'Nx Cloud is not enabled',
26
+ bodyLines: [
27
+ 'To record command using Nx Cloud, connect your workspace with `nx connect`.',
28
+ ],
29
+ });
30
+ return Promise.resolve(exitCode);
31
+ }
6
32
  return (0, utils_1.executeNxCloudCommand)('record', args.verbose);
7
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"start-agent.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/start-agent/start-agent.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAEvE"}
1
+ {"version":3,"file":"start-agent.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/start-agent/start-agent.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAMvE"}
@@ -1,7 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.startAgentHandler = startAgentHandler;
4
+ const nx_json_1 = require("../../../config/nx-json");
5
+ const nx_cloud_utils_1 = require("../../../utils/nx-cloud-utils");
4
6
  const utils_1 = require("../utils");
5
7
  function startAgentHandler(args) {
8
+ if (!(0, nx_cloud_utils_1.isNxCloudUsed)((0, nx_json_1.readNxJson)())) {
9
+ (0, utils_1.warnNotConnectedToCloud)();
10
+ return Promise.resolve(0);
11
+ }
6
12
  return (0, utils_1.executeNxCloudCommand)('start-agent', args.verbose);
7
13
  }
@@ -1 +1 @@
1
- {"version":3,"file":"start-ci-run.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/start-ci-run/start-ci-run.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAEvE"}
1
+ {"version":3,"file":"start-ci-run.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/start-ci-run/start-ci-run.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAMvE"}
@@ -1,7 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.startCiRunHandler = startCiRunHandler;
4
+ const nx_json_1 = require("../../../config/nx-json");
5
+ const nx_cloud_utils_1 = require("../../../utils/nx-cloud-utils");
4
6
  const utils_1 = require("../utils");
5
7
  function startCiRunHandler(args) {
8
+ if (!(0, nx_cloud_utils_1.isNxCloudUsed)((0, nx_json_1.readNxJson)())) {
9
+ (0, utils_1.warnNotConnectedToCloud)();
10
+ return Promise.resolve(0);
11
+ }
6
12
  return (0, utils_1.executeNxCloudCommand)('start-ci-run', args.verbose);
7
13
  }
@@ -1,2 +1,3 @@
1
+ export declare function warnNotConnectedToCloud(): void;
1
2
  export declare function executeNxCloudCommand(commandName: string, verbose?: boolean): Promise<number>;
2
3
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/command-line/nx-cloud/utils.ts"],"names":[],"mappings":"AAKA,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,CAAC,CAUjB"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/command-line/nx-cloud/utils.ts"],"names":[],"mappings":"AAMA,wBAAgB,uBAAuB,IAAI,IAAI,CAQ9C;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,MAAM,CAAC,CAUjB"}
@@ -1,10 +1,21 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.warnNotConnectedToCloud = warnNotConnectedToCloud;
3
4
  exports.executeNxCloudCommand = executeNxCloudCommand;
4
5
  const update_manager_1 = require("../../nx-cloud/update-manager");
5
6
  const get_cloud_options_1 = require("../../nx-cloud/utilities/get-cloud-options");
6
7
  const handle_errors_1 = require("../../utils/handle-errors");
7
8
  const resolution_helpers_1 = require("../../nx-cloud/resolution-helpers");
9
+ const output_1 = require("../../utils/output");
10
+ function warnNotConnectedToCloud() {
11
+ output_1.output.warn({
12
+ title: 'Nx Cloud is not enabled',
13
+ bodyLines: [
14
+ 'This command requires a connection to the full Nx platform.',
15
+ 'Run `nx connect` to connect your workspace.',
16
+ ],
17
+ });
18
+ }
8
19
  async function executeNxCloudCommand(commandName, verbose) {
9
20
  return (0, handle_errors_1.handleErrors)(verbose, async () => {
10
21
  const nxCloudClient = (await (0, update_manager_1.verifyOrUpdateNxCloudClient)((0, get_cloud_options_1.getCloudOptions)()))
@@ -23,6 +23,9 @@ export declare class AppLifeCycle {
23
23
  registerForcedShutdownCallback(forcedShutdownCallback: () => any): void
24
24
  __setCloudMessage(message: string): Promise<void>
25
25
  setEstimatedTaskTimings(timings: Record<string, number>): void
26
+ registerRunningBatch(batchId: string, batchInfo: BatchInfo): void
27
+ appendBatchOutput(batchId: string, output: string): void
28
+ setBatchStatus(batchId: string, status: BatchStatus): void
26
29
  }
27
30
 
28
31
  export declare class ChildProcess {
@@ -193,6 +196,17 @@ export declare class WorkspaceContext {
193
196
  getFilesInDirectory(directory: string): Array<string>
194
197
  }
195
198
 
199
+ export interface BatchInfo {
200
+ executorName: string
201
+ taskIds: Array<string>
202
+ }
203
+
204
+ export declare const enum BatchStatus {
205
+ Running = 'Running',
206
+ Success = 'Success',
207
+ Failure = 'Failure'
208
+ }
209
+
196
210
  export interface CachedResult {
197
211
  code: number
198
212
  terminalOutput?: string
@@ -378,6 +378,7 @@ module.exports.TaskDetails = nativeBinding.TaskDetails
378
378
  module.exports.TaskHasher = nativeBinding.TaskHasher
379
379
  module.exports.Watcher = nativeBinding.Watcher
380
380
  module.exports.WorkspaceContext = nativeBinding.WorkspaceContext
381
+ module.exports.BatchStatus = nativeBinding.BatchStatus
381
382
  module.exports.canInstallNxConsole = nativeBinding.canInstallNxConsole
382
383
  module.exports.canInstallNxConsoleForEditor = nativeBinding.canInstallNxConsoleForEditor
383
384
  module.exports.closeDbConnection = nativeBinding.closeDbConnection
Binary file
@@ -1 +1 @@
1
- {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/plugins/js/utils/register.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AA+ClD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;AACpE;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,OAAE;AA6CxE,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,eAAe,GAC/B,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAcjC;AAED,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,eAAe,EAChC,aAAa,CAAC,EAAE,eAAe,EAC/B,YAAY,CAAC,EAAE,OAAO,GACrB,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAwBjC;AAiFD,wBAAgB,aAAa,CAC3B,eAAe,EAAE,eAAe,EAChC,WAAW,CAAC,EAAE,OAAO,SALc,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAiFnE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,eAAe,EAChC,WAAW,CAAC,EAAE,OAAO,GACpB,MAAM,IAAI,CAUZ;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,KAAA,GAAG,MAAM,IAAI,CAuB9D;AA+ED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CxE"}
1
+ {"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/plugins/js/utils/register.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAiElD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,IAAI,CAAC;AACpE;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,OAAE;AAoDxE,wBAAgB,gBAAgB,CAC9B,eAAe,EAAE,eAAe,GAC/B,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAcjC;AAED,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,eAAe,EAChC,aAAa,CAAC,EAAE,eAAe,EAC/B,YAAY,CAAC,EAAE,OAAO,GACrB,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAwBjC;AAiFD,wBAAgB,aAAa,CAC3B,eAAe,EAAE,eAAe,EAChC,WAAW,CAAC,EAAE,OAAO,SALc,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAiFnE;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,eAAe,EAAE,eAAe,EAChC,WAAW,CAAC,EAAE,OAAO,GACpB,MAAM,IAAI,CAUZ;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,YAAY,KAAA,GAAG,MAAM,IAAI,CAuB9D;AA+ED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA6CxE"}
@@ -48,12 +48,35 @@ const isInvokedByTsx = (() => {
48
48
  return (requireArgs.some((a) => isTsxPath(a)) ||
49
49
  importArgs.some((a) => isTsxPath(a)));
50
50
  })();
51
+ /**
52
+ * When process.features.typescript is truthy and the user has opted in via
53
+ * NX_PREFER_NODE_STRIP_TYPES=true, we can skip registering swc-node or ts-node
54
+ * transpilers since Node.js will handle TypeScript natively.
55
+ *
56
+ * This can significantly improve performance when loading TypeScript config files, but there are some things
57
+ * that won't work. See: https://nodejs.org/api/typescript.html#full-typescript-support
58
+ *
59
+ * TODO(v23): We should turn this on by default, but look at if need to fallback to SWC/ts-node if it fails.
60
+ */
61
+ const preferNodeStripTypes = (() => {
62
+ if (process.env.NX_PREFER_NODE_STRIP_TYPES !== 'true') {
63
+ return false;
64
+ }
65
+ // process.features.typescript is 'strip' | 'transform' | false in Node 22.6+
66
+ return !!process.features?.typescript;
67
+ })();
51
68
  function registerTsProject(path, configFilename) {
52
69
  // See explanation alongside isInvokedByTsx declaration
53
70
  if (isInvokedByTsx) {
54
71
  return () => { };
55
72
  }
56
73
  const tsConfigPath = configFilename ? (0, path_1.join)(path, configFilename) : path;
74
+ // See explanation alongside preferNodeStripTypes declaration
75
+ // When using Node.js native type stripping, skip transpiler registration
76
+ // but still register tsconfig-paths for path mapping support
77
+ if (preferNodeStripTypes) {
78
+ return registerTsConfigPaths(tsConfigPath);
79
+ }
57
80
  const { compilerOptions, tsConfigRaw } = readCompilerOptions(tsConfigPath);
58
81
  const cleanupFunctions = [
59
82
  registerTsConfigPaths(tsConfigPath),
@@ -1 +1 @@
1
- {"version":3,"file":"create-task-graph.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/create-task-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAWhF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAOvE,qBAAa,YAAY;IAQrB,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAR/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,QAAQ,CAAC,KAAK,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAM;IAC5C,QAAQ,CAAC,YAAY,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAM;IACtD,QAAQ,CAAC,sBAAsB,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAM;IAChE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAW;gBAGvB,uBAAuB,EAAE,kBAAkB,EAC3C,YAAY,EAAE,YAAY;IAY7C,YAAY,CACV,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,MAAM,EAAE,EACjB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,uBAAuB,EAAE,OAAO,GAC/B,MAAM,EAAE;IAoFX,WAAW,CACT,IAAI,EAAE,IAAI,EACV,+BAA+B,EAAE,MAAM,EACvC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,IAAI;IAkDP,OAAO,CAAC,+BAA+B;IA2BvC,OAAO,CAAC,4BAA4B;IAmDpC,OAAO,CAAC,2BAA2B;IAyFnC,OAAO,CAAC,eAAe;IAOvB,UAAU,CACR,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,MAAM,EACd,qBAAqB,EAAE,MAAM,GAAG,SAAS,EACzC,SAAS,EAAE,MAAM,GAChB,IAAI;IAyCP,oBAAoB,CAClB,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GAAG,SAAS;CASpC;AAED,wBAAgB,eAAe,CAC7B,YAAY,EAAE,YAAY,EAC1B,uBAAuB,EAAE,kBAAkB,EAC3C,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,MAAM,EAAE,EACjB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,SAAS,EAAE,MAAM,EACjB,uBAAuB,GAAE,OAAe,GACvC,SAAS,CAgBX;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,cAAc,GAAG,SAAS,GACnC,kBAAkB,CAOpB;AAsBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,QAoBvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,EACvC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,IAAI,GAAE,GAAG,CAAC,MAAM,CAAa,GAC5B,MAAM,EAAE,CAkBV"}
1
+ {"version":3,"file":"create-task-graph.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/create-task-graph.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAWhF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAOvE,qBAAa,YAAY;IAQrB,OAAO,CAAC,QAAQ,CAAC,uBAAuB;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY;IAR/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAqB;IAC1C,QAAQ,CAAC,KAAK,EAAE;QAAE,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAM;IAC5C,QAAQ,CAAC,YAAY,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAM;IACtD,QAAQ,CAAC,sBAAsB,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,CAAM;IAChE,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAW;gBAGvB,uBAAuB,EAAE,kBAAkB,EAC3C,YAAY,EAAE,YAAY;IAY7C,YAAY,CACV,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,MAAM,EAAE,EACjB,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,uBAAuB,EAAE,OAAO,GAC/B,MAAM,EAAE;IAoFX,WAAW,CACT,IAAI,EAAE,IAAI,EACV,+BAA+B,EAAE,MAAM,EACvC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,GAChB,IAAI;IAkDP,OAAO,CAAC,+BAA+B;IA2BvC,OAAO,CAAC,4BAA4B;IAmDpC,OAAO,CAAC,2BAA2B;IAyFnC,OAAO,CAAC,eAAe;IAOvB,UAAU,CACR,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,MAAM,EACd,qBAAqB,EAAE,MAAM,GAAG,SAAS,EACzC,SAAS,EAAE,MAAM,GAChB,IAAI;IAyCP,oBAAoB,CAClB,OAAO,EAAE,uBAAuB,EAChC,MAAM,EAAE,MAAM,EACd,aAAa,EAAE,MAAM,GAAG,SAAS;CASpC;AAED,wBAAgB,eAAe,CAC7B,YAAY,EAAE,YAAY,EAC1B,uBAAuB,EAAE,kBAAkB,EAC3C,YAAY,EAAE,MAAM,EAAE,EACtB,OAAO,EAAE,MAAM,EAAE,EACjB,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,SAAS,EAAE,MAAM,EACjB,uBAAuB,GAAE,OAAe,GACvC,SAAS,CAgBX;AAED,wBAAgB,+BAA+B,CAC7C,QAAQ,EAAE,cAAc,GAAG,SAAS,GACnC,kBAAkB,CAOpB;AAsBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,YAAY,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,QAoBvE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CAAE,EACvC,MAAM,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EACpB,IAAI,GAAE,GAAG,CAAC,MAAM,CAAa,GAC5B,MAAM,EAAE,CAsBV"}
@@ -284,8 +284,12 @@ function getNonDummyDeps(currentTask, dependencies, cycles, seen = new Set()) {
284
284
  if (cycles?.has(currentTask)) {
285
285
  return [];
286
286
  }
287
+ const deps = dependencies[currentTask] ?? [];
288
+ if (!Array.isArray(deps)) {
289
+ throw new Error(`Expected dependencies of task ${currentTask} to be an array, but got ${typeof deps}`);
290
+ }
287
291
  // if not a cycle, recursively get the non dummy dependencies
288
- return (dependencies[currentTask]?.flatMap((dep) => getNonDummyDeps(dep, dependencies, cycles, seen)) ?? []);
292
+ return deps.flatMap((dep) => getNonDummyDeps(dep, dependencies, cycles, seen));
289
293
  }
290
294
  else {
291
295
  return [currentTask];
@@ -40,7 +40,7 @@ class ForkedProcessTaskRunner {
40
40
  output_1.output.logCommand(args.join(' '));
41
41
  }
42
42
  const p = (0, child_process_1.fork)(workerPath, {
43
- stdio: ['inherit', 'inherit', 'inherit', 'ipc'],
43
+ stdio: ['inherit', 'pipe', 'pipe', 'ipc'],
44
44
  env: {
45
45
  ...env,
46
46
  NX_FORKED_TASK_EXECUTOR: 'true',
@@ -1,5 +1,5 @@
1
1
  import { Task } from '../config/task-graph';
2
- import { ExternalObject, TaskStatus as NativeTaskStatus } from '../native';
2
+ import { BatchInfo, BatchStatus, ExternalObject, TaskStatus as NativeTaskStatus } from '../native';
3
3
  import { TaskStatus } from './tasks-runner';
4
4
  /**
5
5
  * The result of a completed {@link Task}
@@ -42,6 +42,9 @@ export interface LifeCycle {
42
42
  setTaskStatus?(taskId: string, status: NativeTaskStatus): void;
43
43
  registerForcedShutdownCallback?(callback: () => void): void;
44
44
  setEstimatedTaskTimings?(timings: Record<string, number>): void;
45
+ registerRunningBatch?(batchId: string, batchInfo: BatchInfo): void;
46
+ appendBatchOutput?(batchId: string, output: string): void;
47
+ setBatchStatus?(batchId: string, status: BatchStatus): void;
45
48
  }
46
49
  export declare class CompositeLifeCycle implements LifeCycle {
47
50
  private readonly lifeCycles;
@@ -60,5 +63,8 @@ export declare class CompositeLifeCycle implements LifeCycle {
60
63
  setTaskStatus(taskId: string, status: NativeTaskStatus): void;
61
64
  registerForcedShutdownCallback(callback: () => void): void;
62
65
  setEstimatedTaskTimings(timings: Record<string, number>): void;
66
+ registerRunningBatch(batchId: string, batchInfo: BatchInfo): void;
67
+ appendBatchOutput(batchId: string, output: string): void;
68
+ setBatchStatus(batchId: string, status: BatchStatus): void;
63
69
  }
64
70
  //# sourceMappingURL=life-cycle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"life-cycle.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/life-cycle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"life-cycle.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/life-cycle.ts"],"names":[],"mappings":"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"}
@@ -109,5 +109,26 @@ class CompositeLifeCycle {
109
109
  }
110
110
  }
111
111
  }
112
+ registerRunningBatch(batchId, batchInfo) {
113
+ for (let l of this.lifeCycles) {
114
+ if (l.registerRunningBatch) {
115
+ l.registerRunningBatch(batchId, batchInfo);
116
+ }
117
+ }
118
+ }
119
+ appendBatchOutput(batchId, output) {
120
+ for (let l of this.lifeCycles) {
121
+ if (l.appendBatchOutput) {
122
+ l.appendBatchOutput(batchId, output);
123
+ }
124
+ }
125
+ }
126
+ setBatchStatus(batchId, status) {
127
+ for (let l of this.lifeCycles) {
128
+ if (l.setBatchStatus) {
129
+ l.setBatchStatus(batchId, status);
130
+ }
131
+ }
132
+ }
112
133
  }
113
134
  exports.CompositeLifeCycle = CompositeLifeCycle;
@@ -1 +1 @@
1
- {"version":3,"file":"tui-summary-life-cycle.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/tasks-runner/life-cycles/tui-summary-life-cycle.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAa/C,wBAAgB,8BAA8B,CAAC,EAC7C,YAAY,EACZ,KAAK,EACL,SAAS,EACT,IAAI,EACJ,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,0BAA0B,GAC3B,EAAE;IACD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,IAAI,EAAE,CAAC;IACxB,0BAA0B,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;CACnD;eAyekC,SAAS;;EAC3C"}
1
+ {"version":3,"file":"tui-summary-life-cycle.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/tasks-runner/life-cycles/tui-summary-life-cycle.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAa/C,wBAAgB,8BAA8B,CAAC,EAC7C,YAAY,EACZ,KAAK,EACL,SAAS,EACT,IAAI,EACJ,SAAS,EACT,iBAAiB,EACjB,eAAe,EACf,0BAA0B,GAC3B,EAAE;IACD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACxE,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,IAAI,EAAE,CAAC;IACxB,0BAA0B,EAAE,CAAC,KAAK,EAAE,IAAI,KAAK,IAAI,CAAC;CACnD;eAkfkC,SAAS;;EAC3C"}
@@ -184,8 +184,16 @@ function getTuiTerminalSummaryLifeCycle({ projectNames, tasks, taskGraph, args,
184
184
  console.log('');
185
185
  // Collect checklist lines to print after task outputs
186
186
  const checklistLines = [];
187
+ // Sort tasks by status: successful tasks first, failed tasks at the end
188
+ const sortedTaskIds = [...taskIdsInTheOrderTheyStart].sort((a, b) => {
189
+ const statusA = tasksToTaskStatus[a];
190
+ const statusB = tasksToTaskStatus[b];
191
+ const isFailureA = statusA === 'failure' || !statusA ? 1 : 0;
192
+ const isFailureB = statusB === 'failure' || !statusB ? 1 : 0;
193
+ return isFailureA - isFailureB;
194
+ });
187
195
  // First pass: Print task outputs and collect checklist lines
188
- for (const taskId of taskIdsInTheOrderTheyStart) {
196
+ for (const taskId of sortedTaskIds) {
189
197
  const taskStatus = tasksToTaskStatus[taskId];
190
198
  const terminalOutput = tasksToTerminalOutputs[taskId];
191
199
  // Task Status is null?
@@ -1 +1 @@
1
- {"version":3,"file":"run-command.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/run-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run-command.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/run-command.ts"],"names":[],"mappings":"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"}
@@ -161,6 +161,7 @@ async function getTerminalOutputLifeCycle(initiatingProject, initiatingTasks, pr
161
161
  const trimmedChunk = chunk.toString().trim();
162
162
  if (trimmedChunk.length) {
163
163
  // Remove ANSI escape codes, the TUI will control the formatting
164
+ // NOTE: this shows any message from the Nx Cloud client, including errors
164
165
  appLifeCycle?.__setCloudMessage((0, node_util_1.stripVTControlCharacters)(trimmedChunk));
165
166
  }
166
167
  }
@@ -208,13 +209,6 @@ async function getTerminalOutputLifeCycle(initiatingProject, initiatingTasks, pr
208
209
  appLifeCycle.__init(() => {
209
210
  resolve();
210
211
  });
211
- }).finally(() => {
212
- restoreTerminal();
213
- // Revert the patched methods
214
- process.stdout.write = originalStdoutWrite;
215
- process.stderr.write = originalStderrWrite;
216
- console.log = originalConsoleLog;
217
- console.error = originalConsoleError;
218
212
  });
219
213
  }
220
214
  return {
@@ -226,7 +220,7 @@ async function getTerminalOutputLifeCycle(initiatingProject, initiatingTasks, pr
226
220
  console.error = originalConsoleError;
227
221
  restoreTerminal();
228
222
  },
229
- printSummary,
223
+ printSummary: () => printSummary(),
230
224
  renderIsDone,
231
225
  };
232
226
  }
@@ -346,7 +340,7 @@ async function runCommandForTasks(projectsToRun, currentProjectGraph, { nxJson }
346
340
  initiatingProject,
347
341
  initiatingTasks,
348
342
  });
349
- await renderIsDone;
343
+ await renderIsDone.finally(() => restoreTerminal?.());
350
344
  if (printSummary) {
351
345
  printSummary();
352
346
  }
@@ -357,9 +351,7 @@ async function runCommandForTasks(projectsToRun, currentProjectGraph, { nxJson }
357
351
  };
358
352
  }
359
353
  catch (e) {
360
- if (restoreTerminal) {
361
- restoreTerminal();
362
- }
354
+ restoreTerminal?.();
363
355
  throw e;
364
356
  }
365
357
  }
@@ -617,6 +609,9 @@ function setEnvVarsBasedOnArgs(nxArgs, loadDotEnvFiles) {
617
609
  process.env.NX_STREAM_OUTPUT = 'true';
618
610
  process.env.NX_PREFIX_OUTPUT = 'false';
619
611
  }
612
+ if (nxArgs.outputStyle === 'dynamic' || nxArgs.outputStyle === 'tui') {
613
+ process.env.NX_STREAM_OUTPUT = 'true';
614
+ }
620
615
  if (loadDotEnvFiles) {
621
616
  process.env.NX_LOAD_DOT_ENV_FILES = 'true';
622
617
  }
@@ -1,15 +1,22 @@
1
+ import type { ChildProcess, Serializable } from 'child_process';
2
+ import type { TaskResult } from '../../config/misc-interfaces';
1
3
  import { BatchResults } from '../batch/batch-messages';
2
- import { ChildProcess, Serializable } from 'child_process';
3
4
  export declare class BatchProcess {
4
5
  private childProcess;
5
6
  private executorName;
6
7
  private exitCallbacks;
7
- private resultsCallbacks;
8
+ private batchResultsCallbacks;
9
+ private taskResultsCallbacks;
10
+ private outputCallbacks;
11
+ private terminalOutput;
8
12
  constructor(childProcess: ChildProcess, executorName: string);
9
13
  onExit(cb: (code: number) => void): void;
10
- onResults(cb: (results: BatchResults) => void): void;
14
+ onBatchResults(cb: (results: BatchResults) => void): void;
15
+ onTaskResults(cb: (task: string, result: TaskResult) => void): void;
16
+ onOutput(cb: (output: string) => void): void;
11
17
  getResults(): Promise<BatchResults>;
12
18
  send(message: Serializable): void;
13
19
  kill(signal?: NodeJS.Signals): void;
20
+ getTerminalOutput(): string;
14
21
  }
15
22
  //# sourceMappingURL=batch-process.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"batch-process.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/tasks-runner/running-tasks/batch-process.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,YAAY,EACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG3D,qBAAa,YAAY;IAKrB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IALtB,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,gBAAgB,CAA8C;gBAG5D,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM;IA+B9B,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAIjC,SAAS,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI;IAIvC,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC;IAmBzC,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAMjC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;CAKpC"}
1
+ {"version":3,"file":"batch-process.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/tasks-runner/running-tasks/batch-process.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAE/D,OAAO,EAGL,YAAY,EACb,MAAM,yBAAyB,CAAC;AAEjC,qBAAa,YAAY;IAUrB,OAAO,CAAC,YAAY;IACpB,OAAO,CAAC,YAAY;IAVtB,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,qBAAqB,CAA8C;IAC3E,OAAO,CAAC,oBAAoB,CAErB;IACP,OAAO,CAAC,eAAe,CAAuC;IAC9D,OAAO,CAAC,cAAc,CAAc;gBAG1B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,MAAM;IAqE9B,MAAM,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAIjC,cAAc,CAAC,EAAE,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,IAAI;IAIlD,aAAa,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,KAAK,IAAI;IAI5D,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;IAI/B,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC;IAmBzC,IAAI,CAAC,OAAO,EAAE,YAAY,GAAG,IAAI;IAMjC,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI;IAMnC,iBAAiB,IAAI,MAAM;CAG5B"}
@@ -1,18 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.BatchProcess = void 0;
4
- const batch_messages_1 = require("../batch/batch-messages");
5
4
  const exit_codes_1 = require("../../utils/exit-codes");
5
+ const batch_messages_1 = require("../batch/batch-messages");
6
6
  class BatchProcess {
7
7
  constructor(childProcess, executorName) {
8
8
  this.childProcess = childProcess;
9
9
  this.executorName = executorName;
10
10
  this.exitCallbacks = [];
11
- this.resultsCallbacks = [];
11
+ this.batchResultsCallbacks = [];
12
+ this.taskResultsCallbacks = [];
13
+ this.outputCallbacks = [];
14
+ this.terminalOutput = '';
12
15
  this.childProcess.on('message', (message) => {
13
16
  switch (message.type) {
17
+ case batch_messages_1.BatchMessageType.CompleteTask: {
18
+ for (const cb of this.taskResultsCallbacks) {
19
+ cb(message.task, message.result);
20
+ }
21
+ break;
22
+ }
14
23
  case batch_messages_1.BatchMessageType.CompleteBatchExecution: {
15
- for (const cb of this.resultsCallbacks) {
24
+ for (const cb of this.batchResultsCallbacks) {
16
25
  cb(message.results);
17
26
  }
18
27
  break;
@@ -35,12 +44,44 @@ class BatchProcess {
35
44
  cb(code);
36
45
  }
37
46
  });
47
+ // Capture stdout output
48
+ if (this.childProcess.stdout) {
49
+ this.childProcess.stdout.on('data', (chunk) => {
50
+ const output = chunk.toString();
51
+ this.terminalOutput += output;
52
+ // Maintain current terminal output behavior
53
+ process.stdout.write(chunk);
54
+ // Notify callbacks for TUI
55
+ for (const cb of this.outputCallbacks) {
56
+ cb(output);
57
+ }
58
+ });
59
+ }
60
+ // Capture stderr output
61
+ if (this.childProcess.stderr) {
62
+ this.childProcess.stderr.on('data', (chunk) => {
63
+ const output = chunk.toString();
64
+ this.terminalOutput += output;
65
+ // Maintain current terminal output behavior
66
+ process.stderr.write(chunk);
67
+ // Notify callbacks for TUI
68
+ for (const cb of this.outputCallbacks) {
69
+ cb(output);
70
+ }
71
+ });
72
+ }
38
73
  }
39
74
  onExit(cb) {
40
75
  this.exitCallbacks.push(cb);
41
76
  }
42
- onResults(cb) {
43
- this.resultsCallbacks.push(cb);
77
+ onBatchResults(cb) {
78
+ this.batchResultsCallbacks.push(cb);
79
+ }
80
+ onTaskResults(cb) {
81
+ this.taskResultsCallbacks.push(cb);
82
+ }
83
+ onOutput(cb) {
84
+ this.outputCallbacks.push(cb);
44
85
  }
45
86
  async getResults() {
46
87
  return Promise.race([
@@ -52,7 +93,7 @@ class BatchProcess {
52
93
  });
53
94
  }),
54
95
  new Promise((res) => {
55
- this.onResults(res);
96
+ this.onBatchResults(res);
56
97
  }),
57
98
  ]);
58
99
  }
@@ -66,5 +107,8 @@ class BatchProcess {
66
107
  this.childProcess.kill(signal);
67
108
  }
68
109
  }
110
+ getTerminalOutput() {
111
+ return this.terminalOutput;
112
+ }
69
113
  }
70
114
  exports.BatchProcess = BatchProcess;
@@ -40,6 +40,7 @@ export declare class TaskOrchestrator {
40
40
  private cleaningUp;
41
41
  private runningContinuousTasks;
42
42
  private runningRunCommandsTasks;
43
+ private batchTaskResultsStreamed;
43
44
  constructor(hasher: TaskHasher, initiatingProject: string | undefined, initiatingTasks: Task[], projectGraph: ProjectGraph, taskGraph: TaskGraph, nxJson: NxJsonConfiguration, options: NxArgs & DefaultTasksRunnerOptions, bail: boolean, daemon: DaemonClient, outputStyle: string, taskGraphForHashing?: TaskGraph);
44
45
  init(): Promise<void>;
45
46
  run(): Promise<{
@@ -1 +1 @@
1
- {"version":3,"file":"task-orchestrator.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/task-orchestrator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"task-orchestrator.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/task-orchestrator.ts"],"names":[],"mappings":"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"}
@@ -57,6 +57,7 @@ class TaskOrchestrator {
57
57
  this.cleaningUp = false;
58
58
  this.runningContinuousTasks = new Map();
59
59
  this.runningRunCommandsTasks = new Map();
60
+ this.batchTaskResultsStreamed = new Set();
60
61
  }
61
62
  async init() {
62
63
  // Init the ForkedProcessTaskRunner, TasksSchedule, and Cache
@@ -220,25 +221,37 @@ class TaskOrchestrator {
220
221
  const tasks = taskEntries.map(([, task]) => task);
221
222
  // Wait for batch to be processed
222
223
  await this.processedBatches.get(batch);
224
+ this.options.lifeCycle.registerRunningBatch?.(batch.id, {
225
+ executorName: batch.executorName,
226
+ taskIds: Object.keys(batch.taskGraph.tasks),
227
+ });
223
228
  await this.preRunSteps(tasks, { groupId });
224
229
  let results = doNotSkipCache
225
230
  ? await this.applyCachedResults(tasks)
226
231
  : [];
227
232
  // Run tasks that were not cached
228
233
  if (results.length !== taskEntries.length) {
234
+ await this.postRunSteps(results, doNotSkipCache, { groupId });
229
235
  const unrunTaskGraph = (0, utils_1.removeTasksFromTaskGraph)(batch.taskGraph, results.map(({ task }) => task.id));
230
- const batchResults = await this.runBatch({
236
+ results = await this.runBatch({
237
+ id: batch.id,
231
238
  executorName: batch.executorName,
232
239
  taskGraph: unrunTaskGraph,
233
- }, this.batchEnv);
234
- results.push(...batchResults);
240
+ }, this.batchEnv, groupId);
235
241
  }
236
- await this.postRunSteps(tasks, results, doNotSkipCache, { groupId });
242
+ await this.postRunSteps(results, doNotSkipCache, { groupId });
243
+ // Update batch status based on all task results
244
+ const hasFailures = taskEntries.some(([taskId]) => {
245
+ const status = this.completedTasks[taskId];
246
+ return status === 'failure' || status === 'skipped';
247
+ });
248
+ this.options.lifeCycle.setBatchStatus?.(batch.id, hasFailures ? "Failure" /* BatchStatus.Failure */ : "Success" /* BatchStatus.Success */);
237
249
  this.forkedProcessTaskRunner.cleanUpBatchProcesses();
238
250
  const tasksCompleted = taskEntries.filter(([taskId]) => this.completedTasks[taskId]);
239
251
  // Batch is still not done, run it again
240
252
  if (tasksCompleted.length !== taskEntries.length) {
241
253
  await this.applyFromCacheOrRunBatch(doNotSkipCache, {
254
+ id: batch.id,
242
255
  executorName: batch.executorName,
243
256
  taskGraph: (0, utils_1.removeTasksFromTaskGraph)(batch.taskGraph, tasksCompleted.map(([taskId]) => taskId)),
244
257
  }, groupId);
@@ -248,10 +261,38 @@ class TaskOrchestrator {
248
261
  perf_hooks_1.performance.measure('TaskOrchestrator-apply-from-cache-or-run-batch', applyFromCacheOrRunBatchStart.name, applyFromCacheOrRunBatchEnd.name);
249
262
  return results;
250
263
  }
251
- async runBatch(batch, env) {
264
+ async runBatch(batch, env, groupId) {
252
265
  const runBatchStart = perf_hooks_1.performance.mark('TaskOrchestrator-run-batch:start');
253
266
  try {
254
267
  const batchProcess = await this.forkedProcessTaskRunner.forkProcessForBatch(batch, this.projectGraph, this.taskGraph, env);
268
+ // Stream output from batch process to the batch
269
+ batchProcess.onOutput((output) => {
270
+ this.options.lifeCycle.appendBatchOutput?.(batch.id, output);
271
+ });
272
+ // Stream task results as they complete
273
+ // Heavy operations (caching, scheduling, complete) happen at batch-end in postRunSteps
274
+ batchProcess.onTaskResults((taskId, result) => {
275
+ const task = this.taskGraph.tasks[taskId];
276
+ const status = result.success ? 'success' : 'failure';
277
+ this.options.lifeCycle.printTaskTerminalOutput(task, status, result.terminalOutput ?? '');
278
+ if (result.terminalOutput) {
279
+ this.options.lifeCycle.appendTaskOutput(taskId, result.terminalOutput, false);
280
+ }
281
+ this.options.lifeCycle.endTasks([
282
+ {
283
+ task: {
284
+ ...task,
285
+ startTime: result.startTime,
286
+ endTime: result.endTime,
287
+ },
288
+ status,
289
+ code: result.success ? 0 : 1,
290
+ terminalOutput: result.terminalOutput,
291
+ },
292
+ ], { groupId });
293
+ this.batchTaskResultsStreamed.add(taskId);
294
+ this.options.lifeCycle.setTaskStatus(taskId, (0, native_1.parseTaskStatus)(status));
295
+ });
255
296
  const results = await batchProcess.getResults();
256
297
  const batchResultEntries = Object.entries(results);
257
298
  return batchResultEntries.map(([taskId, result]) => ({
@@ -308,7 +349,7 @@ class TaskOrchestrator {
308
349
  terminalOutput,
309
350
  });
310
351
  }
311
- await this.postRunSteps([task], results, doNotSkipCache, { groupId });
352
+ await this.postRunSteps(results, doNotSkipCache, { groupId });
312
353
  return results[0];
313
354
  }
314
355
  async runTask(task, streamOutput, env, temporaryOutputPath, pipeOutput) {
@@ -531,10 +572,11 @@ class TaskOrchestrator {
531
572
  }
532
573
  await this.options.lifeCycle.startTasks(tasks, metadata);
533
574
  }
534
- async postRunSteps(tasks, results, doNotSkipCache, { groupId }) {
575
+ async postRunSteps(results, doNotSkipCache, { groupId }) {
535
576
  const now = Date.now();
536
- for (const task of tasks) {
537
- task.endTime = now;
577
+ for (const { task } of results) {
578
+ // Only set endTime as fallback (batch provides timing via result.task)
579
+ task.endTime ??= now;
538
580
  await this.recordOutputsHash(task);
539
581
  }
540
582
  if (doNotSkipCache) {
@@ -561,20 +603,32 @@ class TaskOrchestrator {
561
603
  perf_hooks_1.performance.mark('cache-results-end');
562
604
  perf_hooks_1.performance.measure('cache-results', 'cache-results-start', 'cache-results-end');
563
605
  }
564
- await this.options.lifeCycle.endTasks(results.map((result) => {
565
- const code = result.status === 'success' ||
566
- result.status === 'local-cache' ||
567
- result.status === 'local-cache-kept-existing' ||
568
- result.status === 'remote-cache'
569
- ? 0
570
- : 1;
571
- return {
572
- ...result,
573
- task: result.task,
574
- status: result.status,
575
- code,
576
- };
577
- }), { groupId });
606
+ const resultsToReportEndTasks = [];
607
+ for (const result of results) {
608
+ if (!this.batchTaskResultsStreamed.has(result.task.id)) {
609
+ const code = result.status === 'success' ||
610
+ result.status === 'local-cache' ||
611
+ result.status === 'local-cache-kept-existing' ||
612
+ result.status === 'remote-cache'
613
+ ? 0
614
+ : 1;
615
+ resultsToReportEndTasks.push({
616
+ code,
617
+ status: result.status,
618
+ task: result.task,
619
+ terminalOutput: result.terminalOutput,
620
+ });
621
+ }
622
+ else {
623
+ // clean up the task id from the set since we've already verified it
624
+ this.batchTaskResultsStreamed.delete(result.task.id);
625
+ }
626
+ }
627
+ if (resultsToReportEndTasks.length > 0) {
628
+ await this.options.lifeCycle.endTasks(resultsToReportEndTasks, {
629
+ groupId,
630
+ });
631
+ }
578
632
  this.complete(results.map(({ task, status }) => {
579
633
  return {
580
634
  taskId: task.id,
@@ -2,6 +2,7 @@ import { DefaultTasksRunnerOptions } from './default-tasks-runner';
2
2
  import { Task, TaskGraph } from '../config/task-graph';
3
3
  import { ProjectGraph } from '../config/project-graph';
4
4
  export interface Batch {
5
+ id: string;
5
6
  executorName: string;
6
7
  taskGraph: TaskGraph;
7
8
  }
@@ -20,6 +21,7 @@ export declare class TasksSchedule {
20
21
  private scheduleRequestsExecutionChain;
21
22
  private estimatedTaskTimings;
22
23
  private projectDependencies;
24
+ private batchCounters;
23
25
  constructor(projectGraph: ProjectGraph, taskGraph: TaskGraph, options: DefaultTasksRunnerOptions);
24
26
  init(): Promise<void>;
25
27
  scheduleNextTasks(): Promise<void>;
@@ -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;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"}
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,EAAE,EAAE,MAAM,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;CACtB;AAED,qBAAa,aAAa;IAgBtB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAjB1B,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;IACzD,OAAO,CAAC,aAAa,CAA8B;gBAGhC,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;YAiBP,qBAAqB;IA+DnC,OAAO,CAAC,uBAAuB;IAc/B,OAAO,CAAC,cAAc;IAiCf,uBAAuB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAGzD"}
@@ -21,6 +21,7 @@ class TasksSchedule {
21
21
  this.scheduleRequestsExecutionChain = Promise.resolve();
22
22
  this.estimatedTaskTimings = {};
23
23
  this.projectDependencies = {};
24
+ this.batchCounters = {};
24
25
  }
25
26
  async init() {
26
27
  if (this.taskHistory) {
@@ -131,13 +132,19 @@ class TasksSchedule {
131
132
  await this.processTaskForBatches(batchMap, rootTask, executorName, true, new Set());
132
133
  }
133
134
  for (const [executorName, taskGraph] of Object.entries(batchMap)) {
134
- this.scheduleBatch({ executorName, taskGraph });
135
+ this.scheduleBatch(executorName, taskGraph);
135
136
  }
136
137
  }
137
- scheduleBatch({ executorName, taskGraph }) {
138
+ scheduleBatch(executorName, taskGraph) {
139
+ // Generate batch ID with incrementing counter
140
+ if (!this.batchCounters[executorName]) {
141
+ this.batchCounters[executorName] = 0;
142
+ }
143
+ this.batchCounters[executorName]++;
144
+ const batchId = `${executorName} ${this.batchCounters[executorName]}`;
138
145
  // Create a new task graph without the tasks that are being scheduled as part of this batch
139
146
  this.notScheduledTaskGraph = (0, utils_1.removeTasksFromTaskGraph)(this.notScheduledTaskGraph, Object.keys(taskGraph.tasks));
140
- this.scheduledBatches.push({ executorName, taskGraph });
147
+ this.scheduledBatches.push({ id: batchId, executorName, taskGraph });
141
148
  }
142
149
  async processTaskForBatches(batches, task, rootExecutorName, isRoot, visitedInBatch) {
143
150
  // Skip if already processed in this batch - prevents redundant traversals
@@ -1 +1 @@
1
- {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/utils/params.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/utils/params.ts"],"names":[],"mappings":"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"}
@@ -321,6 +321,18 @@ function validateProperty(propName, value, schema, definitions) {
321
321
  throwInvalidSchema(propName, schema);
322
322
  value.forEach((valueInArray) => validateProperty(propName, valueInArray, schema.items || {}, definitions));
323
323
  }
324
+ else if (value === null) {
325
+ // Special handling for null since typeof null === 'object' in JavaScript
326
+ // null is valid if schema.type is 'null' or if it's an array containing 'null'
327
+ if (Array.isArray(schema.type)) {
328
+ if (!schema.type.includes('null')) {
329
+ throwInvalidSchema(propName, schema);
330
+ }
331
+ }
332
+ else if (schema.type !== 'null') {
333
+ throwInvalidSchema(propName, schema);
334
+ }
335
+ }
324
336
  else {
325
337
  if (schema.type !== 'object')
326
338
  throwInvalidSchema(propName, schema);