nx 21.1.2 → 21.2.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +1 -0
- package/README.md +4 -4
- package/package.json +11 -11
- package/src/adapter/compat.js +4 -0
- package/src/command-line/affected/command-object.js +1 -1
- package/src/command-line/graph/graph.d.ts +1 -0
- package/src/command-line/graph/graph.js +56 -11
- package/src/command-line/init/implementation/angular/index.js +3 -1
- package/src/command-line/init/implementation/angular/legacy-angular-versions.js +23 -4
- package/src/command-line/init/implementation/angular/standalone-workspace.js +51 -25
- package/src/command-line/migrate/migrate.js +10 -4
- package/src/command-line/nx-commands.js +1 -1
- package/src/core/graph/main.js +1 -1
- package/src/core/graph/styles.js +1 -1
- package/src/executors/run-commands/run-commands.impl.d.ts +2 -1
- package/src/executors/run-commands/run-commands.impl.js +5 -0
- package/src/executors/run-commands/running-tasks.js +7 -15
- package/src/native/nx.wasm32-wasi.wasm +0 -0
- package/src/nx-cloud/utilities/url-shorten.d.ts +1 -1
- package/src/nx-cloud/utilities/url-shorten.js +27 -26
- package/src/plugins/js/project-graph/affected/lock-file-changes.js +6 -3
- package/src/plugins/js/utils/register.d.ts +2 -0
- package/src/plugins/js/versions.d.ts +1 -1
- package/src/plugins/js/versions.js +1 -1
- package/src/project-graph/project-graph.js +1 -1
- package/src/tasks-runner/run-command.js +11 -0
- package/src/tasks-runner/running-tasks/noop-child-process.d.ts +2 -1
- package/src/tasks-runner/running-tasks/noop-child-process.js +4 -1
package/src/core/graph/styles.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[869],{
|
1
|
+
"use strict";(self.webpackChunk=self.webpackChunk||[]).push([[869],{932:()=>{}},s=>{var e;e=932,s(s.s=e)}]);
|
@@ -1,4 +1,5 @@
|
|
1
1
|
import { ExecutorContext } from '../../config/misc-interfaces';
|
2
|
+
import { NoopChildProcess } from '../../tasks-runner/running-tasks/noop-child-process';
|
2
3
|
import { ParallelRunningTasks, SeriallyRunningTasks } from './running-tasks';
|
3
4
|
export declare const LARGE_BUFFER: number;
|
4
5
|
export type Json = {
|
@@ -54,5 +55,5 @@ export default function (options: RunCommandsOptions, context: ExecutorContext):
|
|
54
55
|
success: boolean;
|
55
56
|
terminalOutput: string;
|
56
57
|
}>;
|
57
|
-
export declare function runCommands(options: RunCommandsOptions, context: ExecutorContext): Promise<import("../../tasks-runner/pseudo-terminal").PseudoTtyProcess | ParallelRunningTasks | SeriallyRunningTasks>;
|
58
|
+
export declare function runCommands(options: RunCommandsOptions, context: ExecutorContext): Promise<import("../../tasks-runner/pseudo-terminal").PseudoTtyProcess | NoopChildProcess | ParallelRunningTasks | SeriallyRunningTasks>;
|
58
59
|
export declare function interpolateArgsIntoCommand(command: string, opts: Pick<NormalizedRunCommandsOptions, 'args' | 'parsedArgs' | '__unparsed__' | 'unknownOptions' | 'unparsedCommandArgs'>, forwardAllArgs: boolean): string;
|
@@ -7,6 +7,7 @@ exports.interpolateArgsIntoCommand = interpolateArgsIntoCommand;
|
|
7
7
|
const yargsParser = require("yargs-parser");
|
8
8
|
const is_tui_enabled_1 = require("../../tasks-runner/is-tui-enabled");
|
9
9
|
const pseudo_terminal_1 = require("../../tasks-runner/pseudo-terminal");
|
10
|
+
const noop_child_process_1 = require("../../tasks-runner/running-tasks/noop-child-process");
|
10
11
|
const running_tasks_1 = require("./running-tasks");
|
11
12
|
exports.LARGE_BUFFER = 1024 * 1000000;
|
12
13
|
const propKeys = [
|
@@ -45,6 +46,10 @@ async function runCommands(options, context) {
|
|
45
46
|
!options.parallel) {
|
46
47
|
throw new Error('ERROR: Bad executor config for run-commands - "prefix", "prefixColor", "color" and "bgColor" can only be set when "parallel=true".');
|
47
48
|
}
|
49
|
+
// Handle empty commands array - return immediately with success
|
50
|
+
if (normalized.commands.length === 0) {
|
51
|
+
return new noop_child_process_1.NoopChildProcess({ code: 0, terminalOutput: '' });
|
52
|
+
}
|
48
53
|
const isSingleCommand = normalized.commands.length === 1;
|
49
54
|
const usePseudoTerminal = (isSingleCommand || !options.parallel) && pseudo_terminal_1.PseudoTerminal.isSupported();
|
50
55
|
const isSingleCommandAndCanUsePseudoTerminal = isSingleCommand &&
|
@@ -231,24 +231,16 @@ class RunningNodeProcess {
|
|
231
231
|
}
|
232
232
|
kill(signal) {
|
233
233
|
return new Promise((res, rej) => {
|
234
|
-
|
235
|
-
|
236
|
-
|
234
|
+
treeKill(this.childProcess.pid, signal, (err) => {
|
235
|
+
// On Windows, tree-kill (which uses taskkill) may fail when the process or its child process is already terminated.
|
236
|
+
// Ignore the errors, otherwise we will log them unnecessarily.
|
237
|
+
if (err && process.platform !== 'win32') {
|
238
|
+
rej(err);
|
237
239
|
}
|
238
240
|
else {
|
239
|
-
|
241
|
+
res();
|
240
242
|
}
|
241
|
-
}
|
242
|
-
else {
|
243
|
-
treeKill(this.childProcess.pid, signal, (err) => {
|
244
|
-
if (err) {
|
245
|
-
rej(err);
|
246
|
-
}
|
247
|
-
else {
|
248
|
-
res();
|
249
|
-
}
|
250
|
-
});
|
251
|
-
}
|
243
|
+
});
|
252
244
|
});
|
253
245
|
}
|
254
246
|
triggerOutputListeners(output) {
|
Binary file
|
@@ -7,4 +7,4 @@ export declare function getURLifShortenFailed(usesGithub: boolean, githubSlug: s
|
|
7
7
|
export declare function getNxCloudVersion(apiUrl: string): Promise<string | null>;
|
8
8
|
export declare function removeVersionModifier(versionString: string): string;
|
9
9
|
export declare function versionIsValid(version: string): boolean;
|
10
|
-
export declare function
|
10
|
+
export declare function isOldNxCloudVersion(version: string): boolean;
|
@@ -6,7 +6,7 @@ exports.getURLifShortenFailed = getURLifShortenFailed;
|
|
6
6
|
exports.getNxCloudVersion = getNxCloudVersion;
|
7
7
|
exports.removeVersionModifier = removeVersionModifier;
|
8
8
|
exports.versionIsValid = versionIsValid;
|
9
|
-
exports.
|
9
|
+
exports.isOldNxCloudVersion = isOldNxCloudVersion;
|
10
10
|
const logger_1 = require("../../utils/logger");
|
11
11
|
const git_utils_1 = require("../../utils/git-utils");
|
12
12
|
const get_cloud_options_1 = require("./get-cloud-options");
|
@@ -21,8 +21,7 @@ async function createNxCloudOnboardingURL(onboardingSource, accessToken, usesGit
|
|
21
21
|
}
|
22
22
|
try {
|
23
23
|
const version = await getNxCloudVersion(apiUrl);
|
24
|
-
if (
|
25
|
-
!version) {
|
24
|
+
if (!version || isOldNxCloudVersion(version)) {
|
26
25
|
return apiUrl;
|
27
26
|
}
|
28
27
|
}
|
@@ -96,7 +95,7 @@ async function getInstallationSupportsGitHub(apiUrl) {
|
|
96
95
|
}
|
97
96
|
catch (e) {
|
98
97
|
if (process.env.NX_VERBOSE_LOGGING === 'true') {
|
99
|
-
logger_1.logger.warn(`Failed to access system features. GitHub integration assumed to be disabled.
|
98
|
+
logger_1.logger.warn(`Failed to access system features. GitHub integration assumed to be disabled.
|
100
99
|
${e}`);
|
101
100
|
}
|
102
101
|
return false;
|
@@ -131,26 +130,28 @@ function versionIsValid(version) {
|
|
131
130
|
const pattern = /^\d{4}\.\d{2}\.\d+$/;
|
132
131
|
return pattern.test(version);
|
133
132
|
}
|
134
|
-
function
|
135
|
-
const
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
const
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
133
|
+
function isOldNxCloudVersion(version) {
|
134
|
+
const [major, minor, buildNumber] = version
|
135
|
+
.split('.')
|
136
|
+
.map((part) => parseInt(part, 10));
|
137
|
+
// for on-prem images we are using YYYY.MM.BuildNumber format
|
138
|
+
// the first year is 2025
|
139
|
+
if (major >= 2025 && major < 2300) {
|
140
|
+
return false;
|
141
|
+
}
|
142
|
+
// Previously we used YYMM.DD.BuildNumber
|
143
|
+
// All versions before '2406.11.5' had different URL shortening logic
|
144
|
+
const newVersionMajor = 2406;
|
145
|
+
const newVersionMinor = 11;
|
146
|
+
const newVersionBuildNumber = 5;
|
147
|
+
if (major !== newVersionMajor) {
|
148
|
+
return major < newVersionMajor;
|
149
|
+
}
|
150
|
+
if (minor !== newVersionMinor) {
|
151
|
+
return minor < newVersionMinor;
|
152
|
+
}
|
153
|
+
if (buildNumber !== newVersionBuildNumber) {
|
154
|
+
return buildNumber < newVersionBuildNumber;
|
155
|
+
}
|
156
|
+
return false;
|
156
157
|
}
|
@@ -51,10 +51,13 @@ const getProjectPathsAffectedByDependencyUpdates = (changedLockFile) => {
|
|
51
51
|
return Array.from(changedProjectPaths);
|
52
52
|
};
|
53
53
|
const getProjectsNamesFromPaths = (projectGraphNodes, projectPaths) => {
|
54
|
+
if (!projectPaths.length) {
|
55
|
+
return [];
|
56
|
+
}
|
54
57
|
const lookup = new RootPathLookup(projectGraphNodes);
|
55
|
-
return projectPaths
|
56
|
-
|
57
|
-
|
58
|
+
return projectPaths
|
59
|
+
.map((path) => lookup.findNodeNameByRoot(path))
|
60
|
+
.filter(Boolean);
|
58
61
|
};
|
59
62
|
class RootPathLookup {
|
60
63
|
constructor(nodes) {
|
@@ -82,6 +82,7 @@ export declare function getTsNodeCompilerOptions(compilerOptions: CompilerOption
|
|
82
82
|
jsx?: any;
|
83
83
|
keyofStringsOnly?: any;
|
84
84
|
lib?: any;
|
85
|
+
libReplacement?: any;
|
85
86
|
locale?: any;
|
86
87
|
mapRoot?: any;
|
87
88
|
maxNodeModuleJsDepth?: any;
|
@@ -151,6 +152,7 @@ export declare function getTsNodeCompilerOptions(compilerOptions: CompilerOption
|
|
151
152
|
types?: any;
|
152
153
|
typeRoots?: any;
|
153
154
|
verbatimModuleSyntax?: any;
|
155
|
+
erasableSyntaxOnly?: any;
|
154
156
|
esModuleInterop?: any;
|
155
157
|
useDefineForClassFields?: any;
|
156
158
|
};
|
@@ -1 +1 @@
|
|
1
|
-
export declare const typescriptVersion = "~5.
|
1
|
+
export declare const typescriptVersion = "~5.8.2";
|
@@ -38,7 +38,7 @@ function readCachedProjectGraph(minimumComputedAt) {
|
|
38
38
|
? (0, strip_indents_1.stripIndents) `
|
39
39
|
Make sure invoke 'node ./decorate-angular-cli.js' in your postinstall script.
|
40
40
|
The decorated CLI will compute the project graph.
|
41
|
-
'ng --help' should say 'Smart
|
41
|
+
'ng --help' should say 'Smart Repos · Fast Builds'.
|
42
42
|
`
|
43
43
|
: '';
|
44
44
|
throw new Error((0, strip_indents_1.stripIndents) `
|
@@ -772,6 +772,17 @@ function getRunner(nxArgs, nxJson) {
|
|
772
772
|
}
|
773
773
|
const defaultTasksRunnerPath = require.resolve('./default-tasks-runner');
|
774
774
|
function getTasksRunnerPath(runner, nxJson) {
|
775
|
+
// If running inside of Codex, there will be no internet access, so we cannot use the cloud runner, regardless of other config.
|
776
|
+
// We can infer this scenario by checking for certain environment variables defined in their base image: https://github.com/openai/codex-universal
|
777
|
+
if (process.env.CODEX_ENV_NODE_VERSION) {
|
778
|
+
output_1.output.warn({
|
779
|
+
title: 'Codex environment detected, using default tasks runner',
|
780
|
+
bodyLines: [
|
781
|
+
'Codex does not have internet access when it runs tasks, so Nx will use the default tasks runner and only leverage local caching.',
|
782
|
+
],
|
783
|
+
});
|
784
|
+
return defaultTasksRunnerPath;
|
785
|
+
}
|
775
786
|
const isCloudRunner =
|
776
787
|
// No tasksRunnerOptions for given --runner
|
777
788
|
nxJson.nxCloudAccessToken ||
|
@@ -11,5 +11,6 @@ export declare class NoopChildProcess implements RunningTask {
|
|
11
11
|
terminalOutput: string;
|
12
12
|
}>;
|
13
13
|
kill(): void;
|
14
|
-
onExit(cb: (code: number) => void): void;
|
14
|
+
onExit(cb: (code: number, terminalOutput: string) => void): void;
|
15
|
+
onOutput(cb: (terminalOutput: string) => void): void;
|
15
16
|
}
|
@@ -13,7 +13,10 @@ class NoopChildProcess {
|
|
13
13
|
return;
|
14
14
|
}
|
15
15
|
onExit(cb) {
|
16
|
-
cb(this.results.code);
|
16
|
+
cb(this.results.code, this.results.terminalOutput);
|
17
|
+
}
|
18
|
+
onOutput(cb) {
|
19
|
+
cb(this.results.terminalOutput);
|
17
20
|
}
|
18
21
|
}
|
19
22
|
exports.NoopChildProcess = NoopChildProcess;
|