nx 21.3.0-canary.20250705-666da3e → 21.3.0-canary.20250710-13551c9
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/release/changelog-renderer/index.js +10 -2
- package/src/command-line/affected/affected.js +1 -1
- package/src/command-line/init/implementation/add-nx-to-monorepo.js +1 -1
- package/src/command-line/init/implementation/add-nx-to-nest.js +1 -1
- package/src/command-line/init/implementation/add-nx-to-npm-repo.js +1 -1
- package/src/command-line/init/implementation/angular/index.js +1 -1
- package/src/command-line/init/implementation/angular/legacy-angular-versions.js +1 -1
- package/src/command-line/init/implementation/utils.js +1 -1
- package/src/command-line/init/init-v2.js +1 -1
- package/src/command-line/migrate/migrate.js +1 -1
- package/src/command-line/{connect → nx-cloud/connect}/command-object.js +4 -4
- package/src/command-line/{connect → nx-cloud/connect}/connect-to-nx-cloud.d.ts +4 -4
- package/src/command-line/{connect → nx-cloud/connect}/connect-to-nx-cloud.js +10 -10
- package/src/command-line/{connect → nx-cloud/connect}/view-logs.js +6 -6
- package/src/command-line/nx-cloud/fix-ci/command-object.d.ts +2 -0
- package/src/command-line/nx-cloud/fix-ci/command-object.js +12 -0
- package/src/command-line/nx-cloud/fix-ci/fix-ci.d.ts +4 -0
- package/src/command-line/nx-cloud/fix-ci/fix-ci.js +7 -0
- package/src/command-line/{login → nx-cloud/login}/command-object.js +1 -1
- package/src/command-line/nx-cloud/login/login.js +10 -0
- package/src/command-line/{logout → nx-cloud/logout}/command-object.js +1 -1
- package/src/command-line/nx-cloud/logout/logout.js +7 -0
- package/src/command-line/nx-cloud/record/command-object.d.ts +2 -0
- package/src/command-line/nx-cloud/record/command-object.js +12 -0
- package/src/command-line/nx-cloud/record/record.d.ts +4 -0
- package/src/command-line/nx-cloud/record/record.js +7 -0
- package/src/command-line/nx-cloud/start-ci-run/command-object.d.ts +2 -0
- package/src/command-line/nx-cloud/start-ci-run/command-object.js +12 -0
- package/src/command-line/nx-cloud/start-ci-run/start-ci-run.d.ts +4 -0
- package/src/command-line/nx-cloud/start-ci-run/start-ci-run.js +7 -0
- package/src/command-line/nx-cloud/utils.d.ts +1 -0
- package/src/command-line/{logout/logout.js → nx-cloud/utils.js} +4 -4
- package/src/command-line/nx-commands.js +12 -6
- package/src/command-line/release/changelog.js +3 -13
- package/src/command-line/release/config/config.js +12 -0
- package/src/command-line/release/utils/git.d.ts +1 -1
- package/src/command-line/release/utils/git.js +18 -10
- package/src/command-line/release/utils/shared.js +7 -1
- package/src/command-line/release/version/release-group-processor.js +1 -1
- package/src/command-line/run/run-one.js +1 -1
- package/src/command-line/run-many/run-many.js +1 -1
- package/src/config/nx-json.d.ts +14 -0
- package/src/daemon/client/client.js +15 -7
- package/src/daemon/client/daemon-socket-messenger.js +9 -2
- package/src/daemon/server/file-watching/file-watcher-sockets.js +1 -1
- package/src/daemon/server/handle-context-file-data.js +1 -1
- package/src/daemon/server/handle-flush-sync-generator-changes-to-disk.js +1 -1
- package/src/daemon/server/handle-get-files-in-directory.js +1 -1
- package/src/daemon/server/handle-get-registered-sync-generators.js +1 -1
- package/src/daemon/server/handle-get-sync-generator-changes.js +1 -1
- package/src/daemon/server/handle-glob.js +2 -2
- package/src/daemon/server/handle-hash-tasks.d.ts +1 -1
- package/src/daemon/server/handle-hash-tasks.js +1 -1
- package/src/daemon/server/handle-nx-workspace-files.js +1 -1
- package/src/daemon/server/handle-outputs-tracking.js +1 -1
- package/src/daemon/server/handle-task-history.d.ts +2 -2
- package/src/daemon/server/handle-task-history.js +2 -2
- package/src/daemon/server/handle-tasks-execution-hooks.d.ts +1 -1
- package/src/daemon/server/handle-tasks-execution-hooks.js +1 -1
- package/src/daemon/server/server.d.ts +2 -2
- package/src/daemon/server/server.js +49 -28
- package/src/daemon/server/shutdown-utils.js +2 -1
- package/src/native/nx.wasm32-wasi.wasm +0 -0
- package/src/plugins/package-json/create-nodes.js +4 -1
- package/src/project-graph/plugins/isolation/messaging.js +2 -1
- package/src/project-graph/plugins/isolation/plugin-pool.js +19 -5
- package/src/project-graph/plugins/loaded-nx-plugin.js +2 -0
- package/src/tasks-runner/pseudo-ipc.js +4 -4
- package/src/tasks-runner/run-command.js +0 -2
- package/src/utils/consume-messages-from-socket.d.ts +2 -0
- package/src/utils/consume-messages-from-socket.js +18 -3
- package/src/utils/workspace-context.js +1 -1
- package/src/command-line/login/login.js +0 -19
- package/src/tasks-runner/life-cycles/nx-cloud-ci-message-life-cycle.d.ts +0 -7
- package/src/tasks-runner/life-cycles/nx-cloud-ci-message-life-cycle.js +0 -49
- /package/src/command-line/{connect → nx-cloud/connect}/command-object.d.ts +0 -0
- /package/src/command-line/{connect → nx-cloud/connect}/view-logs.d.ts +0 -0
- /package/src/command-line/{login → nx-cloud/login}/command-object.d.ts +0 -0
- /package/src/command-line/{login → nx-cloud/login}/login.d.ts +0 -0
- /package/src/command-line/{logout → nx-cloud/logout}/command-object.d.ts +0 -0
- /package/src/command-line/{logout → nx-cloud/logout}/logout.d.ts +0 -0
@@ -15,7 +15,13 @@ const git_1 = require("./git");
|
|
15
15
|
exports.noDiffInChangelogMessage = chalk.yellow(`NOTE: There was no diff detected for the changelog entry. Maybe you intended to pass alternative git references via --from and --to?`);
|
16
16
|
function isPrerelease(version) {
|
17
17
|
// prerelease returns an array of matching prerelease "components", or null if the version is not a prerelease
|
18
|
-
|
18
|
+
try {
|
19
|
+
return (0, semver_1.prerelease)(version) !== null;
|
20
|
+
}
|
21
|
+
catch {
|
22
|
+
// If non-semver, prerelease will error. Prevent this from erroring the command
|
23
|
+
return false;
|
24
|
+
}
|
19
25
|
}
|
20
26
|
class ReleaseVersion {
|
21
27
|
constructor({ version, // short form version string with no prefixes or patterns, e.g. 1.0.0
|
@@ -198,7 +198,7 @@ class ReleaseGroupProcessor {
|
|
198
198
|
if (finalConfigForProject.currentVersionResolver === 'git-tag') {
|
199
199
|
latestMatchingGitTag = await (0, git_1.getLatestGitTagForPattern)(releaseTagPattern, {
|
200
200
|
projectName: projectGraphNode.name,
|
201
|
-
}, releaseGroupNode.group.releaseTagPatternCheckAllBranchesWhen);
|
201
|
+
}, releaseGroupNode.group.releaseTagPatternCheckAllBranchesWhen, releaseGroupNode.group.releaseTagPatternRequireSemver);
|
202
202
|
this.cachedLatestMatchingGitTag.set(projectName, latestMatchingGitTag);
|
203
203
|
}
|
204
204
|
// Cache the current version for the project
|
@@ -4,7 +4,7 @@ exports.runOne = runOne;
|
|
4
4
|
exports.parseRunOneOptions = parseRunOneOptions;
|
5
5
|
const run_command_1 = require("../../tasks-runner/run-command");
|
6
6
|
const command_line_utils_1 = require("../../utils/command-line-utils");
|
7
|
-
const connect_to_nx_cloud_1 = require("../connect/connect-to-nx-cloud");
|
7
|
+
const connect_to_nx_cloud_1 = require("../nx-cloud/connect/connect-to-nx-cloud");
|
8
8
|
const project_graph_1 = require("../../project-graph/project-graph");
|
9
9
|
const workspace_root_1 = require("../../utils/workspace-root");
|
10
10
|
const split_target_1 = require("../../utils/split-target");
|
@@ -5,7 +5,7 @@ exports.projectsToRun = projectsToRun;
|
|
5
5
|
const run_command_1 = require("../../tasks-runner/run-command");
|
6
6
|
const command_line_utils_1 = require("../../utils/command-line-utils");
|
7
7
|
const project_graph_utils_1 = require("../../utils/project-graph-utils");
|
8
|
-
const connect_to_nx_cloud_1 = require("../connect/connect-to-nx-cloud");
|
8
|
+
const connect_to_nx_cloud_1 = require("../nx-cloud/connect/connect-to-nx-cloud");
|
9
9
|
const perf_hooks_1 = require("perf_hooks");
|
10
10
|
const project_graph_1 = require("../../project-graph/project-graph");
|
11
11
|
const configuration_1 = require("../../config/configuration");
|
package/src/config/nx-json.d.ts
CHANGED
@@ -342,6 +342,13 @@ export interface NxReleaseConfiguration {
|
|
342
342
|
* - Setting it to an array of strings will cause us to check all branches WHEN the current branch matches one of the strings in the array. Glob patterns are supported.
|
343
343
|
*/
|
344
344
|
releaseTagPatternCheckAllBranchesWhen?: boolean | string[];
|
345
|
+
/**
|
346
|
+
* By default, we will use semver when searching through the tags to find the latest matching tag.
|
347
|
+
*
|
348
|
+
* - Setting this to true will cause us to use semver to match the version
|
349
|
+
* - Setting this to false will cause us to not use semver to match the version allowing for non-semver versions
|
350
|
+
*/
|
351
|
+
releaseTagPatternRequireSemver?: boolean;
|
345
352
|
/**
|
346
353
|
* Enables using version plans as a specifier source for versioning and
|
347
354
|
* to determine changes for changelog generation.
|
@@ -410,6 +417,13 @@ export interface NxReleaseConfiguration {
|
|
410
417
|
* - Setting it to an array of strings will cause us to check all branches WHEN the current branch matches one of the strings in the array. Glob patterns are supported.
|
411
418
|
*/
|
412
419
|
releaseTagPatternCheckAllBranchesWhen?: boolean | string[];
|
420
|
+
/**
|
421
|
+
* By default, we will use semver when searching through the tags to find the latest matching tag.
|
422
|
+
*
|
423
|
+
* - Setting this to true will cause us to use semver to match the version
|
424
|
+
* - Setting this to false will cause us to not use semver to match the version allowing for non-semver versions
|
425
|
+
*/
|
426
|
+
releaseTagPatternRequireSemver?: boolean;
|
413
427
|
/**
|
414
428
|
* Enable and configure automatic git operations as part of the release
|
415
429
|
*/
|
@@ -32,6 +32,8 @@ const update_workspace_context_1 = require("../message-types/update-workspace-co
|
|
32
32
|
const flush_sync_generator_changes_to_disk_1 = require("../message-types/flush-sync-generator-changes-to-disk");
|
33
33
|
const delayed_spinner_1 = require("../../utils/delayed-spinner");
|
34
34
|
const run_tasks_execution_hooks_1 = require("../message-types/run-tasks-execution-hooks");
|
35
|
+
const node_v8_1 = require("node:v8");
|
36
|
+
const consume_messages_from_socket_1 = require("../../utils/consume-messages-from-socket");
|
35
37
|
const DAEMON_ENV_SETTINGS = {
|
36
38
|
NX_PROJECT_GLOB_CACHE: 'false',
|
37
39
|
NX_CACHE_PROJECTS_CONFIG: 'false',
|
@@ -146,7 +148,9 @@ class DaemonClient {
|
|
146
148
|
return this.sendToDaemonViaQueue({
|
147
149
|
type: 'HASH_TASKS',
|
148
150
|
runnerOptions,
|
149
|
-
env
|
151
|
+
env: process.env.NX_USE_V8_SERIALIZER !== 'false'
|
152
|
+
? structuredClone(process.env)
|
153
|
+
: env,
|
150
154
|
tasks,
|
151
155
|
taskGraph,
|
152
156
|
});
|
@@ -167,7 +171,9 @@ class DaemonClient {
|
|
167
171
|
await this.queue.sendToQueue(() => {
|
168
172
|
messenger = new daemon_socket_messenger_1.DaemonSocketMessenger((0, net_1.connect)((0, socket_utils_1.getFullOsSocketPath)())).listen((message) => {
|
169
173
|
try {
|
170
|
-
const parsedMessage =
|
174
|
+
const parsedMessage = (0, consume_messages_from_socket_1.isJsonMessage)(message)
|
175
|
+
? JSON.parse(message)
|
176
|
+
: (0, node_v8_1.deserialize)(Buffer.from(message, 'binary'));
|
171
177
|
callback(null, parsedMessage);
|
172
178
|
}
|
173
179
|
catch (e) {
|
@@ -416,15 +422,17 @@ class DaemonClient {
|
|
416
422
|
}
|
417
423
|
handleMessage(serializedResult) {
|
418
424
|
try {
|
419
|
-
perf_hooks_1.performance.mark('
|
420
|
-
const parsedResult =
|
421
|
-
|
422
|
-
|
425
|
+
perf_hooks_1.performance.mark('result-parse-start');
|
426
|
+
const parsedResult = (0, consume_messages_from_socket_1.isJsonMessage)(serializedResult)
|
427
|
+
? JSON.parse(serializedResult)
|
428
|
+
: (0, node_v8_1.deserialize)(Buffer.from(serializedResult, 'binary'));
|
429
|
+
perf_hooks_1.performance.mark('result-parse-end');
|
430
|
+
perf_hooks_1.performance.measure('deserialize daemon response', 'result-parse-start', 'result-parse-end');
|
423
431
|
if (parsedResult.error) {
|
424
432
|
this.currentReject(parsedResult.error);
|
425
433
|
}
|
426
434
|
else {
|
427
|
-
perf_hooks_1.performance.measure('total for sendMessageToDaemon()', 'sendMessageToDaemon-start', '
|
435
|
+
perf_hooks_1.performance.measure('total for sendMessageToDaemon()', 'sendMessageToDaemon-start', 'result-parse-end');
|
428
436
|
return this.currentResolve(parsedResult);
|
429
437
|
}
|
430
438
|
}
|
@@ -1,15 +1,22 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.DaemonSocketMessenger = void 0;
|
4
|
+
const v8_1 = require("v8");
|
4
5
|
const consume_messages_from_socket_1 = require("../../utils/consume-messages-from-socket");
|
5
6
|
class DaemonSocketMessenger {
|
6
7
|
constructor(socket) {
|
7
8
|
this.socket = socket;
|
8
9
|
}
|
9
10
|
async sendMessage(messageToDaemon) {
|
10
|
-
|
11
|
+
if (process.env.NX_USE_V8_SERIALIZER !== 'false') {
|
12
|
+
const serialized = (0, v8_1.serialize)(messageToDaemon);
|
13
|
+
this.socket.write(serialized.toString('binary'));
|
14
|
+
}
|
15
|
+
else {
|
16
|
+
this.socket.write(JSON.stringify(messageToDaemon));
|
17
|
+
}
|
11
18
|
// send EOT to indicate that the message has been fully written
|
12
|
-
this.socket.write(
|
19
|
+
this.socket.write(consume_messages_from_socket_1.MESSAGE_END_SEQ);
|
13
20
|
}
|
14
21
|
listen(onData, onClose = () => { }, onError = (err) => { }) {
|
15
22
|
this.socket.on('data', (0, consume_messages_from_socket_1.consumeMessagesFromSocket)(async (message) => {
|
@@ -6,7 +6,7 @@ const workspace_root_1 = require("../../utils/workspace-root");
|
|
6
6
|
async function handleContextFileData() {
|
7
7
|
const files = await (0, workspace_context_1.getAllFileDataInContext)(workspace_root_1.workspaceRoot);
|
8
8
|
return {
|
9
|
-
response:
|
9
|
+
response: files,
|
10
10
|
description: 'handleContextFileData',
|
11
11
|
};
|
12
12
|
}
|
@@ -5,7 +5,7 @@ const sync_generators_1 = require("./sync-generators");
|
|
5
5
|
async function handleFlushSyncGeneratorChangesToDisk(generators) {
|
6
6
|
const result = await (0, sync_generators_1.flushSyncGeneratorChangesToDisk)(generators);
|
7
7
|
return {
|
8
|
-
response:
|
8
|
+
response: result,
|
9
9
|
description: 'handleFlushSyncGeneratorChangesToDisk',
|
10
10
|
};
|
11
11
|
}
|
@@ -6,7 +6,7 @@ const workspace_root_1 = require("../../utils/workspace-root");
|
|
6
6
|
async function handleGetFilesInDirectory(dir) {
|
7
7
|
const files = await (0, workspace_context_1.getFilesInDirectoryUsingContext)(workspace_root_1.workspaceRoot, dir);
|
8
8
|
return {
|
9
|
-
response:
|
9
|
+
response: files,
|
10
10
|
description: 'handleNxWorkspaceFiles',
|
11
11
|
};
|
12
12
|
}
|
@@ -5,7 +5,7 @@ const sync_generators_1 = require("./sync-generators");
|
|
5
5
|
async function handleGetRegisteredSyncGenerators() {
|
6
6
|
const syncGenerators = await (0, sync_generators_1.getCachedRegisteredSyncGenerators)();
|
7
7
|
return {
|
8
|
-
response:
|
8
|
+
response: syncGenerators,
|
9
9
|
description: 'handleGetSyncGeneratorChanges',
|
10
10
|
};
|
11
11
|
}
|
@@ -7,14 +7,14 @@ const workspace_context_1 = require("../../utils/workspace-context");
|
|
7
7
|
async function handleGlob(globs, exclude) {
|
8
8
|
const files = await (0, workspace_context_1.globWithWorkspaceContext)(workspace_root_1.workspaceRoot, globs, exclude);
|
9
9
|
return {
|
10
|
-
response:
|
10
|
+
response: files,
|
11
11
|
description: 'handleGlob',
|
12
12
|
};
|
13
13
|
}
|
14
14
|
async function handleMultiGlob(globs, exclude) {
|
15
15
|
const files = await (0, workspace_context_1.multiGlobWithWorkspaceContext)(workspace_root_1.workspaceRoot, globs, exclude);
|
16
16
|
return {
|
17
|
-
response:
|
17
|
+
response: files,
|
18
18
|
description: 'handleMultiGlob',
|
19
19
|
};
|
20
20
|
}
|
@@ -27,7 +27,7 @@ async function handleHashTasks(payload) {
|
|
27
27
|
storedProjectGraph = projectGraph;
|
28
28
|
storedHasher = new task_hasher_1.InProcessTaskHasher(projectGraph, nxJson, rustReferences, payload.runnerOptions);
|
29
29
|
}
|
30
|
-
const response =
|
30
|
+
const response = await storedHasher.hashTasks(payload.tasks, payload.taskGraph, payload.env);
|
31
31
|
return {
|
32
32
|
response,
|
33
33
|
description: 'handleHashTasks',
|
@@ -6,7 +6,7 @@ const workspace_root_1 = require("../../utils/workspace-root");
|
|
6
6
|
async function handleNxWorkspaceFiles(projectRootMap) {
|
7
7
|
const files = await (0, workspace_context_1.getNxWorkspaceFilesFromContext)(workspace_root_1.workspaceRoot, projectRootMap);
|
8
8
|
return {
|
9
|
-
response:
|
9
|
+
response: files,
|
10
10
|
description: 'handleNxWorkspaceFiles',
|
11
11
|
};
|
12
12
|
}
|
@@ -22,7 +22,7 @@ async function handleOutputsHashesMatch(payload) {
|
|
22
22
|
try {
|
23
23
|
const res = await (0, outputs_tracking_1.outputsHashesMatch)(payload.data.outputs, payload.data.hash);
|
24
24
|
return {
|
25
|
-
response:
|
25
|
+
response: res,
|
26
26
|
description: 'outputsHashesMatch',
|
27
27
|
};
|
28
28
|
}
|
@@ -4,10 +4,10 @@ export declare function handleRecordTaskRuns(taskRuns: TaskRun[]): Promise<{
|
|
4
4
|
description: string;
|
5
5
|
}>;
|
6
6
|
export declare function handleGetFlakyTasks(hashes: string[]): Promise<{
|
7
|
-
response: string;
|
7
|
+
response: string[];
|
8
8
|
description: string;
|
9
9
|
}>;
|
10
10
|
export declare function handleGetEstimatedTaskTimings(targets: TaskTarget[]): Promise<{
|
11
|
-
response: string
|
11
|
+
response: Record<string, number>;
|
12
12
|
description: string;
|
13
13
|
}>;
|
@@ -16,7 +16,7 @@ async function handleGetFlakyTasks(hashes) {
|
|
16
16
|
const taskHistory = (0, task_history_1.getTaskHistory)();
|
17
17
|
const history = await taskHistory.getFlakyTasks(hashes);
|
18
18
|
return {
|
19
|
-
response:
|
19
|
+
response: history,
|
20
20
|
description: 'handleGetFlakyTasks',
|
21
21
|
};
|
22
22
|
}
|
@@ -24,7 +24,7 @@ async function handleGetEstimatedTaskTimings(targets) {
|
|
24
24
|
const taskHistory = (0, task_history_1.getTaskHistory)();
|
25
25
|
const history = await taskHistory.getEstimatedTaskTimings(targets);
|
26
26
|
return {
|
27
|
-
response:
|
27
|
+
response: history,
|
28
28
|
description: 'handleGetEstimatedTaskTimings',
|
29
29
|
};
|
30
30
|
}
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import type { PostTasksExecutionContext, PreTasksExecutionContext } from '../../project-graph/plugins/public-api';
|
2
2
|
export declare function handleRunPreTasksExecution(context: PreTasksExecutionContext): Promise<{
|
3
|
-
response:
|
3
|
+
response: NodeJS.ProcessEnv[];
|
4
4
|
description: string;
|
5
5
|
error?: undefined;
|
6
6
|
} | {
|
@@ -2,8 +2,8 @@ import { Server, Socket } from 'net';
|
|
2
2
|
export type HandlerResult = {
|
3
3
|
description: string;
|
4
4
|
error?: any;
|
5
|
-
response?: string;
|
5
|
+
response?: string | object | boolean;
|
6
6
|
};
|
7
7
|
export declare const openSockets: Set<Socket>;
|
8
|
-
export declare function handleResult(socket: Socket, type: string, hrFn: () => Promise<HandlerResult
|
8
|
+
export declare function handleResult(socket: Socket, type: string, hrFn: () => Promise<HandlerResult>, mode: 'json' | 'v8'): Promise<void>;
|
9
9
|
export declare function startServer(): Promise<Server>;
|
@@ -52,6 +52,7 @@ const flush_sync_generator_changes_to_disk_1 = require("../message-types/flush-s
|
|
52
52
|
const handle_flush_sync_generator_changes_to_disk_1 = require("./handle-flush-sync-generator-changes-to-disk");
|
53
53
|
const run_tasks_execution_hooks_1 = require("../message-types/run-tasks-execution-hooks");
|
54
54
|
const handle_tasks_execution_hooks_1 = require("./handle-tasks-execution-hooks");
|
55
|
+
const v8_1 = require("v8");
|
55
56
|
let performanceObserver;
|
56
57
|
let workspaceWatcherError;
|
57
58
|
let outputsWatcherError;
|
@@ -96,92 +97,101 @@ async function handleMessage(socket, data) {
|
|
96
97
|
(0, shutdown_utils_1.resetInactivityTimeout)(handleInactivityTimeout);
|
97
98
|
const unparsedPayload = data;
|
98
99
|
let payload;
|
100
|
+
let mode = 'json';
|
99
101
|
try {
|
100
|
-
|
102
|
+
// JSON Message
|
103
|
+
if ((0, consume_messages_from_socket_1.isJsonMessage)(unparsedPayload)) {
|
104
|
+
payload = JSON.parse(unparsedPayload);
|
105
|
+
}
|
106
|
+
else {
|
107
|
+
// V8 Serialized Message
|
108
|
+
payload = (0, v8_1.deserialize)(Buffer.from(unparsedPayload, 'binary'));
|
109
|
+
mode = 'v8';
|
110
|
+
}
|
101
111
|
}
|
102
112
|
catch (e) {
|
103
113
|
await (0, shutdown_utils_1.respondWithErrorAndExit)(socket, `Invalid payload from the client`, new Error(`Unsupported payload sent to daemon server: ${unparsedPayload}`));
|
104
114
|
}
|
105
115
|
if (payload.type === 'PING') {
|
106
|
-
await handleResult(socket, 'PING', () => Promise.resolve({ response:
|
116
|
+
await handleResult(socket, 'PING', () => Promise.resolve({ response: true, description: 'ping' }), mode);
|
107
117
|
}
|
108
118
|
else if (payload.type === 'REQUEST_PROJECT_GRAPH') {
|
109
|
-
await handleResult(socket, 'REQUEST_PROJECT_GRAPH', () => (0, handle_request_project_graph_1.handleRequestProjectGraph)());
|
119
|
+
await handleResult(socket, 'REQUEST_PROJECT_GRAPH', () => (0, handle_request_project_graph_1.handleRequestProjectGraph)(), mode);
|
110
120
|
}
|
111
121
|
else if (payload.type === 'HASH_TASKS') {
|
112
|
-
await handleResult(socket, 'HASH_TASKS', () => (0, handle_hash_tasks_1.handleHashTasks)(payload));
|
122
|
+
await handleResult(socket, 'HASH_TASKS', () => (0, handle_hash_tasks_1.handleHashTasks)(payload), mode);
|
113
123
|
}
|
114
124
|
else if (payload.type === 'PROCESS_IN_BACKGROUND') {
|
115
|
-
await handleResult(socket, 'PROCESS_IN_BACKGROUND', () => (0, handle_process_in_background_1.handleProcessInBackground)(payload));
|
125
|
+
await handleResult(socket, 'PROCESS_IN_BACKGROUND', () => (0, handle_process_in_background_1.handleProcessInBackground)(payload), mode);
|
116
126
|
}
|
117
127
|
else if (payload.type === 'RECORD_OUTPUTS_HASH') {
|
118
|
-
await handleResult(socket, 'RECORD_OUTPUTS_HASH', () => (0, handle_outputs_tracking_1.handleRecordOutputsHash)(payload));
|
128
|
+
await handleResult(socket, 'RECORD_OUTPUTS_HASH', () => (0, handle_outputs_tracking_1.handleRecordOutputsHash)(payload), mode);
|
119
129
|
}
|
120
130
|
else if (payload.type === 'OUTPUTS_HASHES_MATCH') {
|
121
|
-
await handleResult(socket, 'OUTPUTS_HASHES_MATCH', () => (0, handle_outputs_tracking_1.handleOutputsHashesMatch)(payload));
|
131
|
+
await handleResult(socket, 'OUTPUTS_HASHES_MATCH', () => (0, handle_outputs_tracking_1.handleOutputsHashesMatch)(payload), mode);
|
122
132
|
}
|
123
133
|
else if (payload.type === 'REQUEST_SHUTDOWN') {
|
124
|
-
await handleResult(socket, 'REQUEST_SHUTDOWN', () => (0, handle_request_shutdown_1.handleRequestShutdown)(server, numberOfOpenConnections));
|
134
|
+
await handleResult(socket, 'REQUEST_SHUTDOWN', () => (0, handle_request_shutdown_1.handleRequestShutdown)(server, numberOfOpenConnections), mode);
|
125
135
|
}
|
126
136
|
else if (payload.type === 'REGISTER_FILE_WATCHER') {
|
127
137
|
file_watcher_sockets_1.registeredFileWatcherSockets.push({ socket, config: payload.config });
|
128
138
|
}
|
129
139
|
else if ((0, glob_1.isHandleGlobMessage)(payload)) {
|
130
|
-
await handleResult(socket, glob_1.GLOB, () => (0, handle_glob_1.handleGlob)(payload.globs, payload.exclude));
|
140
|
+
await handleResult(socket, glob_1.GLOB, () => (0, handle_glob_1.handleGlob)(payload.globs, payload.exclude), mode);
|
131
141
|
}
|
132
142
|
else if ((0, glob_1.isHandleMultiGlobMessage)(payload)) {
|
133
|
-
await handleResult(socket, glob_1.MULTI_GLOB, () => (0, handle_glob_1.handleMultiGlob)(payload.globs, payload.exclude));
|
143
|
+
await handleResult(socket, glob_1.MULTI_GLOB, () => (0, handle_glob_1.handleMultiGlob)(payload.globs, payload.exclude), mode);
|
134
144
|
}
|
135
145
|
else if ((0, get_nx_workspace_files_1.isHandleNxWorkspaceFilesMessage)(payload)) {
|
136
|
-
await handleResult(socket, get_nx_workspace_files_1.GET_NX_WORKSPACE_FILES, () => (0, handle_nx_workspace_files_1.handleNxWorkspaceFiles)(payload.projectRootMap));
|
146
|
+
await handleResult(socket, get_nx_workspace_files_1.GET_NX_WORKSPACE_FILES, () => (0, handle_nx_workspace_files_1.handleNxWorkspaceFiles)(payload.projectRootMap), mode);
|
137
147
|
}
|
138
148
|
else if ((0, get_files_in_directory_1.isHandleGetFilesInDirectoryMessage)(payload)) {
|
139
|
-
await handleResult(socket, get_files_in_directory_1.GET_FILES_IN_DIRECTORY, () => (0, handle_get_files_in_directory_1.handleGetFilesInDirectory)(payload.dir));
|
149
|
+
await handleResult(socket, get_files_in_directory_1.GET_FILES_IN_DIRECTORY, () => (0, handle_get_files_in_directory_1.handleGetFilesInDirectory)(payload.dir), mode);
|
140
150
|
}
|
141
151
|
else if ((0, get_context_file_data_1.isHandleContextFileDataMessage)(payload)) {
|
142
|
-
await handleResult(socket, get_context_file_data_1.GET_CONTEXT_FILE_DATA, () => (0, handle_context_file_data_1.handleContextFileData)());
|
152
|
+
await handleResult(socket, get_context_file_data_1.GET_CONTEXT_FILE_DATA, () => (0, handle_context_file_data_1.handleContextFileData)(), mode);
|
143
153
|
}
|
144
154
|
else if ((0, hash_glob_1.isHandleHashGlobMessage)(payload)) {
|
145
|
-
await handleResult(socket, hash_glob_1.HASH_GLOB, () => (0, handle_hash_glob_1.handleHashGlob)(payload.globs, payload.exclude));
|
155
|
+
await handleResult(socket, hash_glob_1.HASH_GLOB, () => (0, handle_hash_glob_1.handleHashGlob)(payload.globs, payload.exclude), mode);
|
146
156
|
}
|
147
157
|
else if ((0, hash_glob_1.isHandleHashMultiGlobMessage)(payload)) {
|
148
|
-
await handleResult(socket, hash_glob_1.HASH_GLOB, () => (0, handle_hash_glob_1.handleHashMultiGlob)(payload.globGroups));
|
158
|
+
await handleResult(socket, hash_glob_1.HASH_GLOB, () => (0, handle_hash_glob_1.handleHashMultiGlob)(payload.globGroups), mode);
|
149
159
|
}
|
150
160
|
else if ((0, task_history_1.isHandleGetFlakyTasksMessage)(payload)) {
|
151
|
-
await handleResult(socket, task_history_1.GET_FLAKY_TASKS, () => (0, handle_task_history_1.handleGetFlakyTasks)(payload.hashes));
|
161
|
+
await handleResult(socket, task_history_1.GET_FLAKY_TASKS, () => (0, handle_task_history_1.handleGetFlakyTasks)(payload.hashes), mode);
|
152
162
|
}
|
153
163
|
else if ((0, task_history_1.isHandleGetEstimatedTaskTimings)(payload)) {
|
154
|
-
await handleResult(socket, task_history_1.GET_ESTIMATED_TASK_TIMINGS, () => (0, handle_task_history_1.handleGetEstimatedTaskTimings)(payload.targets));
|
164
|
+
await handleResult(socket, task_history_1.GET_ESTIMATED_TASK_TIMINGS, () => (0, handle_task_history_1.handleGetEstimatedTaskTimings)(payload.targets), mode);
|
155
165
|
}
|
156
166
|
else if ((0, task_history_1.isHandleWriteTaskRunsToHistoryMessage)(payload)) {
|
157
|
-
await handleResult(socket, task_history_1.RECORD_TASK_RUNS, () => (0, handle_task_history_1.handleRecordTaskRuns)(payload.taskRuns));
|
167
|
+
await handleResult(socket, task_history_1.RECORD_TASK_RUNS, () => (0, handle_task_history_1.handleRecordTaskRuns)(payload.taskRuns), mode);
|
158
168
|
}
|
159
169
|
else if ((0, force_shutdown_1.isHandleForceShutdownMessage)(payload)) {
|
160
|
-
await handleResult(socket, 'FORCE_SHUTDOWN', () => (0, handle_force_shutdown_1.handleForceShutdown)(server));
|
170
|
+
await handleResult(socket, 'FORCE_SHUTDOWN', () => (0, handle_force_shutdown_1.handleForceShutdown)(server), mode);
|
161
171
|
}
|
162
172
|
else if ((0, get_sync_generator_changes_1.isHandleGetSyncGeneratorChangesMessage)(payload)) {
|
163
|
-
await handleResult(socket, get_sync_generator_changes_1.GET_SYNC_GENERATOR_CHANGES, () => (0, handle_get_sync_generator_changes_1.handleGetSyncGeneratorChanges)(payload.generators));
|
173
|
+
await handleResult(socket, get_sync_generator_changes_1.GET_SYNC_GENERATOR_CHANGES, () => (0, handle_get_sync_generator_changes_1.handleGetSyncGeneratorChanges)(payload.generators), mode);
|
164
174
|
}
|
165
175
|
else if ((0, flush_sync_generator_changes_to_disk_1.isHandleFlushSyncGeneratorChangesToDiskMessage)(payload)) {
|
166
|
-
await handleResult(socket, flush_sync_generator_changes_to_disk_1.FLUSH_SYNC_GENERATOR_CHANGES_TO_DISK, () => (0, handle_flush_sync_generator_changes_to_disk_1.handleFlushSyncGeneratorChangesToDisk)(payload.generators));
|
176
|
+
await handleResult(socket, flush_sync_generator_changes_to_disk_1.FLUSH_SYNC_GENERATOR_CHANGES_TO_DISK, () => (0, handle_flush_sync_generator_changes_to_disk_1.handleFlushSyncGeneratorChangesToDisk)(payload.generators), mode);
|
167
177
|
}
|
168
178
|
else if ((0, get_registered_sync_generators_1.isHandleGetRegisteredSyncGeneratorsMessage)(payload)) {
|
169
|
-
await handleResult(socket, get_registered_sync_generators_1.GET_REGISTERED_SYNC_GENERATORS, () => (0, handle_get_registered_sync_generators_1.handleGetRegisteredSyncGenerators)());
|
179
|
+
await handleResult(socket, get_registered_sync_generators_1.GET_REGISTERED_SYNC_GENERATORS, () => (0, handle_get_registered_sync_generators_1.handleGetRegisteredSyncGenerators)(), mode);
|
170
180
|
}
|
171
181
|
else if ((0, update_workspace_context_1.isHandleUpdateWorkspaceContextMessage)(payload)) {
|
172
|
-
await handleResult(socket, update_workspace_context_1.UPDATE_WORKSPACE_CONTEXT, () => (0, handle_update_workspace_context_1.handleUpdateWorkspaceContext)(payload.createdFiles, payload.updatedFiles, payload.deletedFiles));
|
182
|
+
await handleResult(socket, update_workspace_context_1.UPDATE_WORKSPACE_CONTEXT, () => (0, handle_update_workspace_context_1.handleUpdateWorkspaceContext)(payload.createdFiles, payload.updatedFiles, payload.deletedFiles), mode);
|
173
183
|
}
|
174
184
|
else if ((0, run_tasks_execution_hooks_1.isHandlePreTasksExecutionMessage)(payload)) {
|
175
|
-
await handleResult(socket, run_tasks_execution_hooks_1.PRE_TASKS_EXECUTION, () => (0, handle_tasks_execution_hooks_1.handleRunPreTasksExecution)(payload.context));
|
185
|
+
await handleResult(socket, run_tasks_execution_hooks_1.PRE_TASKS_EXECUTION, () => (0, handle_tasks_execution_hooks_1.handleRunPreTasksExecution)(payload.context), mode);
|
176
186
|
}
|
177
187
|
else if ((0, run_tasks_execution_hooks_1.isHandlePostTasksExecutionMessage)(payload)) {
|
178
|
-
await handleResult(socket, run_tasks_execution_hooks_1.POST_TASKS_EXECUTION, () => (0, handle_tasks_execution_hooks_1.handleRunPostTasksExecution)(payload.context));
|
188
|
+
await handleResult(socket, run_tasks_execution_hooks_1.POST_TASKS_EXECUTION, () => (0, handle_tasks_execution_hooks_1.handleRunPostTasksExecution)(payload.context), mode);
|
179
189
|
}
|
180
190
|
else {
|
181
191
|
await (0, shutdown_utils_1.respondWithErrorAndExit)(socket, `Invalid payload from the client`, new Error(`Unsupported payload sent to daemon server: ${unparsedPayload}`));
|
182
192
|
}
|
183
193
|
}
|
184
|
-
async function handleResult(socket, type, hrFn) {
|
194
|
+
async function handleResult(socket, type, hrFn, mode) {
|
185
195
|
let hr;
|
186
196
|
const startMark = new Date();
|
187
197
|
try {
|
@@ -195,10 +205,13 @@ async function handleResult(socket, type, hrFn) {
|
|
195
205
|
await (0, shutdown_utils_1.respondWithErrorAndExit)(socket, hr.description, hr.error);
|
196
206
|
}
|
197
207
|
else {
|
198
|
-
|
208
|
+
const response = typeof hr.response === 'string'
|
209
|
+
? hr.response
|
210
|
+
: serializeUnserializedResult(hr.response, mode);
|
211
|
+
await (0, shutdown_utils_1.respondToClient)(socket, response, hr.description);
|
199
212
|
}
|
200
213
|
const endMark = new Date();
|
201
|
-
logger_1.serverLogger.log(`Handled ${type}. Handling time: ${doneHandlingMark.getTime() - startMark.getTime()}. Response time: ${endMark.getTime() - doneHandlingMark.getTime()}.`);
|
214
|
+
logger_1.serverLogger.log(`Handled ${mode} message ${type}. Handling time: ${doneHandlingMark.getTime() - startMark.getTime()}. Response time: ${endMark.getTime() - doneHandlingMark.getTime()}.`);
|
202
215
|
}
|
203
216
|
function handleInactivityTimeout() {
|
204
217
|
if ((0, file_watcher_sockets_1.hasRegisteredFileWatcherSockets)()) {
|
@@ -408,3 +421,11 @@ async function startServer() {
|
|
408
421
|
}
|
409
422
|
});
|
410
423
|
}
|
424
|
+
function serializeUnserializedResult(response, mode) {
|
425
|
+
if (mode === 'json') {
|
426
|
+
return JSON.stringify(response);
|
427
|
+
}
|
428
|
+
else {
|
429
|
+
return (0, v8_1.serialize)(response).toString('binary');
|
430
|
+
}
|
431
|
+
}
|
@@ -16,6 +16,7 @@ const cache_1 = require("../cache");
|
|
16
16
|
const error_types_1 = require("../../project-graph/error-types");
|
17
17
|
const db_connection_1 = require("../../utils/db-connection");
|
18
18
|
const get_plugins_1 = require("../../project-graph/plugins/get-plugins");
|
19
|
+
const consume_messages_from_socket_1 = require("../../utils/consume-messages-from-socket");
|
19
20
|
exports.SERVER_INACTIVITY_TIMEOUT_MS = 10800000; // 10800000 ms = 3 hours
|
20
21
|
let watcherInstance;
|
21
22
|
function storeWatcherInstance(instance) {
|
@@ -70,7 +71,7 @@ function respondToClient(socket, response, description) {
|
|
70
71
|
if (description) {
|
71
72
|
logger_1.serverLogger.requestLog(`Responding to the client.`, description);
|
72
73
|
}
|
73
|
-
socket.write(
|
74
|
+
socket.write(response + consume_messages_from_socket_1.MESSAGE_END_SEQ, (err) => {
|
74
75
|
if (err) {
|
75
76
|
console.error(err);
|
76
77
|
}
|
Binary file
|
@@ -25,7 +25,10 @@ exports.createNodesV2 = [
|
|
25
25
|
(configFiles, _, context) => {
|
26
26
|
const { packageJsons, projectJsonRoots } = splitConfigFiles(configFiles);
|
27
27
|
const readJson = (f) => (0, fileutils_1.readJsonFile)((0, node_path_1.join)(context.workspaceRoot, f));
|
28
|
-
const isInPackageJsonWorkspaces =
|
28
|
+
const isInPackageJsonWorkspaces = process.env.NX_INFER_ALL_PACKAGE_JSONS === 'true' &&
|
29
|
+
!configFiles.includes('package.json')
|
30
|
+
? () => true
|
31
|
+
: buildPackageJsonWorkspacesMatcher(context.workspaceRoot, readJson);
|
29
32
|
const isNextToProjectJson = (packageJsonPath) => {
|
30
33
|
return projectJsonRoots.has((0, node_path_1.dirname)(packageJsonPath));
|
31
34
|
};
|
@@ -4,6 +4,7 @@ exports.isPluginWorkerMessage = isPluginWorkerMessage;
|
|
4
4
|
exports.isPluginWorkerResult = isPluginWorkerResult;
|
5
5
|
exports.consumeMessage = consumeMessage;
|
6
6
|
exports.sendMessageOverSocket = sendMessageOverSocket;
|
7
|
+
const consume_messages_from_socket_1 = require("../../../utils/consume-messages-from-socket");
|
7
8
|
function isPluginWorkerMessage(message) {
|
8
9
|
return (typeof message === 'object' &&
|
9
10
|
'type' in message &&
|
@@ -46,5 +47,5 @@ async function consumeMessage(socket, raw, handlers) {
|
|
46
47
|
}
|
47
48
|
}
|
48
49
|
function sendMessageOverSocket(socket, message) {
|
49
|
-
socket.write(JSON.stringify(message) +
|
50
|
+
socket.write(JSON.stringify(message) + consume_messages_from_socket_1.MESSAGE_END_SEQ);
|
50
51
|
}
|
@@ -166,7 +166,7 @@ function createWorkerHandler(worker, pending, onload, onloadError, socket) {
|
|
166
166
|
}
|
167
167
|
},
|
168
168
|
createDependenciesResult: ({ tx, ...result }) => {
|
169
|
-
const { resolver, rejector } =
|
169
|
+
const { resolver, rejector } = getPendingPromise(tx, pending);
|
170
170
|
if (result.success) {
|
171
171
|
resolver(result.dependencies);
|
172
172
|
}
|
@@ -175,7 +175,7 @@ function createWorkerHandler(worker, pending, onload, onloadError, socket) {
|
|
175
175
|
}
|
176
176
|
},
|
177
177
|
createNodesResult: ({ tx, ...result }) => {
|
178
|
-
const { resolver, rejector } =
|
178
|
+
const { resolver, rejector } = getPendingPromise(tx, pending);
|
179
179
|
if (result.success) {
|
180
180
|
resolver(result.result);
|
181
181
|
}
|
@@ -184,7 +184,7 @@ function createWorkerHandler(worker, pending, onload, onloadError, socket) {
|
|
184
184
|
}
|
185
185
|
},
|
186
186
|
createMetadataResult: ({ tx, ...result }) => {
|
187
|
-
const { resolver, rejector } =
|
187
|
+
const { resolver, rejector } = getPendingPromise(tx, pending);
|
188
188
|
if (result.success) {
|
189
189
|
resolver(result.metadata);
|
190
190
|
}
|
@@ -193,7 +193,7 @@ function createWorkerHandler(worker, pending, onload, onloadError, socket) {
|
|
193
193
|
}
|
194
194
|
},
|
195
195
|
preTasksExecutionResult: ({ tx, ...result }) => {
|
196
|
-
const { resolver, rejector } =
|
196
|
+
const { resolver, rejector } = getPendingPromise(tx, pending);
|
197
197
|
if (result.success) {
|
198
198
|
resolver(result.mutations);
|
199
199
|
}
|
@@ -202,7 +202,7 @@ function createWorkerHandler(worker, pending, onload, onloadError, socket) {
|
|
202
202
|
}
|
203
203
|
},
|
204
204
|
postTasksExecutionResult: ({ tx, ...result }) => {
|
205
|
-
const { resolver, rejector } =
|
205
|
+
const { resolver, rejector } = getPendingPromise(tx, pending);
|
206
206
|
if (result.success) {
|
207
207
|
resolver();
|
208
208
|
}
|
@@ -220,6 +220,20 @@ function createWorkerExitHandler(worker, pendingPromises) {
|
|
220
220
|
}
|
221
221
|
};
|
222
222
|
}
|
223
|
+
function getPendingPromise(tx, pending) {
|
224
|
+
const pendingPromise = pending.get(tx);
|
225
|
+
if (!pendingPromise) {
|
226
|
+
throw new Error(`No pending promise found for transaction "${tx}". This may indicate a bug in the plugin pool. Currently pending promises:\n` +
|
227
|
+
Array.from(pending.keys())
|
228
|
+
.map((t) => ` - ${t}`)
|
229
|
+
.join('\n'));
|
230
|
+
}
|
231
|
+
const { rejector, resolver } = pendingPromise;
|
232
|
+
return {
|
233
|
+
rejector,
|
234
|
+
resolver,
|
235
|
+
};
|
236
|
+
}
|
223
237
|
function registerPendingPromise(tx, pending, callback, context) {
|
224
238
|
let resolver, rejector, timeout;
|
225
239
|
const promise = new Promise((res, rej) => {
|
@@ -64,6 +64,8 @@ class LoadedNxPlugin {
|
|
64
64
|
});
|
65
65
|
}
|
66
66
|
await plugin.preTasksExecution(this.options, context);
|
67
|
+
// This doesn't revert env changes, as the proxy still updates
|
68
|
+
// originalEnv, rather it removes the proxy.
|
67
69
|
process.env = originalEnv;
|
68
70
|
return updates;
|
69
71
|
};
|