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.
- package/package.json +11 -11
- package/project.json +4 -0
- package/src/command-line/nx-cloud/complete-run/stop-all-agents.d.ts.map +1 -1
- package/src/command-line/nx-cloud/complete-run/stop-all-agents.js +6 -0
- package/src/command-line/nx-cloud/fix-ci/fix-ci.d.ts.map +1 -1
- package/src/command-line/nx-cloud/fix-ci/fix-ci.js +6 -0
- package/src/command-line/nx-cloud/login/login.d.ts.map +1 -1
- package/src/command-line/nx-cloud/login/login.js +6 -0
- package/src/command-line/nx-cloud/logout/logout.d.ts.map +1 -1
- package/src/command-line/nx-cloud/logout/logout.js +6 -0
- package/src/command-line/nx-cloud/record/command-object.d.ts.map +1 -1
- package/src/command-line/nx-cloud/record/command-object.js +3 -0
- package/src/command-line/nx-cloud/record/record.d.ts +1 -0
- package/src/command-line/nx-cloud/record/record.d.ts.map +1 -1
- package/src/command-line/nx-cloud/record/record.js +26 -0
- package/src/command-line/nx-cloud/start-agent/start-agent.d.ts.map +1 -1
- package/src/command-line/nx-cloud/start-agent/start-agent.js +6 -0
- package/src/command-line/nx-cloud/start-ci-run/start-ci-run.d.ts.map +1 -1
- package/src/command-line/nx-cloud/start-ci-run/start-ci-run.js +6 -0
- package/src/command-line/nx-cloud/utils.d.ts +1 -0
- package/src/command-line/nx-cloud/utils.d.ts.map +1 -1
- package/src/command-line/nx-cloud/utils.js +11 -0
- package/src/native/index.d.ts +14 -0
- package/src/native/native-bindings.js +1 -0
- package/src/native/nx.wasm32-wasi.wasm +0 -0
- package/src/plugins/js/utils/register.d.ts.map +1 -1
- package/src/plugins/js/utils/register.js +23 -0
- package/src/tasks-runner/create-task-graph.d.ts.map +1 -1
- package/src/tasks-runner/create-task-graph.js +5 -1
- package/src/tasks-runner/forked-process-task-runner.js +1 -1
- package/src/tasks-runner/life-cycle.d.ts +7 -1
- package/src/tasks-runner/life-cycle.d.ts.map +1 -1
- package/src/tasks-runner/life-cycle.js +21 -0
- package/src/tasks-runner/life-cycles/tui-summary-life-cycle.d.ts.map +1 -1
- package/src/tasks-runner/life-cycles/tui-summary-life-cycle.js +9 -1
- package/src/tasks-runner/run-command.d.ts.map +1 -1
- package/src/tasks-runner/run-command.js +7 -12
- package/src/tasks-runner/running-tasks/batch-process.d.ts +10 -3
- package/src/tasks-runner/running-tasks/batch-process.d.ts.map +1 -1
- package/src/tasks-runner/running-tasks/batch-process.js +50 -6
- package/src/tasks-runner/task-orchestrator.d.ts +1 -0
- package/src/tasks-runner/task-orchestrator.d.ts.map +1 -1
- package/src/tasks-runner/task-orchestrator.js +77 -23
- package/src/tasks-runner/tasks-schedule.d.ts +2 -0
- package/src/tasks-runner/tasks-schedule.d.ts.map +1 -1
- package/src/tasks-runner/tasks-schedule.js +10 -3
- package/src/utils/params.d.ts.map +1 -1
- package/src/utils/params.js +12 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nx",
|
|
3
|
-
"version": "22.
|
|
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.
|
|
87
|
-
"@nx/nx-darwin-x64": "22.
|
|
88
|
-
"@nx/nx-freebsd-x64": "22.
|
|
89
|
-
"@nx/nx-linux-arm-gnueabihf": "22.
|
|
90
|
-
"@nx/nx-linux-arm64-gnu": "22.
|
|
91
|
-
"@nx/nx-linux-arm64-musl": "22.
|
|
92
|
-
"@nx/nx-linux-x64-gnu": "22.
|
|
93
|
-
"@nx/nx-linux-x64-musl": "22.
|
|
94
|
-
"@nx/nx-win32-arm64-msvc": "22.
|
|
95
|
-
"@nx/nx-win32-x64-msvc": "22.
|
|
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":"
|
|
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":"
|
|
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":"
|
|
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":"
|
|
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,
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../../../../../../packages/nx/src/command-line/nx-cloud/record/record.ts"],"names":[],"mappings":"
|
|
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":"
|
|
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":"
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../../packages/nx/src/command-line/nx-cloud/utils.ts"],"names":[],"mappings":"
|
|
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)()))
|
package/src/native/index.d.ts
CHANGED
|
@@ -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;
|
|
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,
|
|
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
|
|
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', '
|
|
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":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,
|
|
1
|
+
{"version":3,"file":"life-cycle.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/tasks-runner/life-cycle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EACL,SAAS,EACT,WAAW,EACX,cAAc,EACd,UAAU,IAAI,gBAAgB,EAC/B,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAErD,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvD,UAAU,CAAC,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC,YAAY,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhD;;;;OAIG;IACH,SAAS,CAAC,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAE7B;;;;OAIG;IACH,OAAO,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAEzC,UAAU,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExE,QAAQ,CAAC,CACP,WAAW,EAAE,UAAU,EAAE,EACzB,QAAQ,EAAE,YAAY,GACrB,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAExB,uBAAuB,CAAC,CACtB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,GACb,IAAI,CAAC;IAER,mBAAmB,CAAC,CAClB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,cAAc,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAC1C,IAAI,CAAC;IAER,kCAAkC,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1D,gBAAgB,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAAC;IAE5E,aAAa,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAE/D,8BAA8B,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC;IAE5D,uBAAuB,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAGhE,oBAAoB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;IAEnE,iBAAiB,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAE1D,cAAc,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;CAC7D;AAED,qBAAa,kBAAmB,YAAW,SAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU;gBAAV,UAAU,EAAE,SAAS,EAAE;IAE9C,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ9C,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQ3B,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAQjC,UAAU,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAUhE,QAAQ,CACZ,WAAW,EAAE,UAAU,EAAE,EACzB,QAAQ,EAAE,YAAY,GACrB,OAAO,CAAC,IAAI,CAAC;IAUhB,uBAAuB,CACrB,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,GACb,IAAI;IAQP,mBAAmB,CACjB,MAAM,EAAE,MAAM,EACd,eAAe,EAAE,cAAc,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,GAC1C,IAAI;IAQP,kCAAkC,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAQxD,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI;IAQ1E,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI;IAQ7D,8BAA8B,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAQ1D,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI;IAQ9D,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,IAAI;IAQjE,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAQxD,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI;CAO3D"}
|
|
@@ -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;
|
|
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
|
|
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":"AAKA,OAAO,EACL,mBAAmB,EAGpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAa/E,OAAO,EAAE,MAAM,EAAE,MAAM,6BAA6B,CAAC;AAkBrD,OAAO,EAEL,SAAS,EACT,UAAU,EACV,WAAW,EACZ,MAAM,cAAc,CAAC;AAkBtB,OAAO,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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.
|
|
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.
|
|
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
|
-
|
|
43
|
-
this.
|
|
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.
|
|
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":"AAIA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;
|
|
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
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
575
|
+
async postRunSteps(results, doNotSkipCache, { groupId }) {
|
|
535
576
|
const now = Date.now();
|
|
536
|
-
for (const task of
|
|
537
|
-
|
|
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
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
result.status === '
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
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;
|
|
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(
|
|
135
|
+
this.scheduleBatch(executorName, taskGraph);
|
|
135
136
|
}
|
|
136
137
|
}
|
|
137
|
-
scheduleBatch(
|
|
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":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACpB,MAAM,uCAAuC,CAAC;AAE/C,KAAK,mBAAmB,GAAG;IACzB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC9B,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EACJ,MAAM,GACN,MAAM,GACN,OAAO,GACP,MAAM,EAAE,GACR;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,CAAA;KAAE,CAAC;IAC5D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EACL;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAClC;QAAE,OAAO,EAAE,aAAa,CAAA;KAAE,GAC1B;QAAE,OAAO,EAAE,UAAU,CAAA;KAAE,GACvB;QAAE,OAAO,EAAE,kBAAkB,CAAA;KAAE,CAAC;IACpC,oBAAoB,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IACrD,KAAK,CAAC,EAAE,GAAG,CAAC;IACZ,UAAU,CAAC,EACP,MAAM,GACN;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;QAAC,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAC5E,cAAc,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,YAAY,CAAC,EAAE,WAAW,GAAG,UAAU,CAAC;IAGxC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAGnB,iBAAiB,CAAC,EAAE;QAClB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAAC;KACxC,CAAC;CACH,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,CAAC,CAAC,EAAE,MAAM,GAAG,mBAAmB,CAAC;CAClC,CAAC;AACF,MAAM,MAAM,MAAM,GAAG;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,oBAAoB,CAAC,EAAE,OAAO,GAAG,mBAAmB,CAAC;IACrD,QAAQ,CAAC,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvD,iBAAiB,CAAC,EAAE;QAClB,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,CAAC;KACxC,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,OAAO,GAAG;IACpB,IAAI,CAAC,EAAE,SAAS,EAAE,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,EAAE,GAAG,SAAS,EAAE,GAAG,SAAS,CAAC;CAC7E,CAAC;AAYF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC5B,MAAM,EAAE,MAAM,GACb,OAAO,CAQT;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAO3E;AAuCD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,OAAO,GACxB,OAAO,CAkBT;AAED,qBAAa,WAAW;aACM,OAAO,EAAE,MAAM;gBAAf,OAAO,EAAE,MAAM;CAC5C;AAED,wBAAgB,yBAAyB,CACvC,IAAI,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC1B,MAAM,EAAE,MAAM,QAGf;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAA;CAAE,EAC1B,MAAM,EAAE,MAAM,GAAG,mBAAmB,EACpC,WAAW,EAAE,UAAU,QA4GxB;
|
|
1
|
+
{"version":3,"file":"params.d.ts","sourceRoot":"","sources":["../../../../../packages/nx/src/utils/params.ts"],"names":[],"mappings":"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"}
|
package/src/utils/params.js
CHANGED
|
@@ -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);
|