nx 20.1.0-canary.20241109-77d6704 → 20.1.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nx",
3
- "version": "20.1.0-canary.20241109-77d6704",
3
+ "version": "20.1.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": {
@@ -80,16 +80,16 @@
80
80
  }
81
81
  },
82
82
  "optionalDependencies": {
83
- "@nx/nx-darwin-x64": "20.1.0-canary.20241109-77d6704",
84
- "@nx/nx-darwin-arm64": "20.1.0-canary.20241109-77d6704",
85
- "@nx/nx-linux-x64-gnu": "20.1.0-canary.20241109-77d6704",
86
- "@nx/nx-linux-x64-musl": "20.1.0-canary.20241109-77d6704",
87
- "@nx/nx-win32-x64-msvc": "20.1.0-canary.20241109-77d6704",
88
- "@nx/nx-linux-arm64-gnu": "20.1.0-canary.20241109-77d6704",
89
- "@nx/nx-linux-arm64-musl": "20.1.0-canary.20241109-77d6704",
90
- "@nx/nx-linux-arm-gnueabihf": "20.1.0-canary.20241109-77d6704",
91
- "@nx/nx-win32-arm64-msvc": "20.1.0-canary.20241109-77d6704",
92
- "@nx/nx-freebsd-x64": "20.1.0-canary.20241109-77d6704"
83
+ "@nx/nx-darwin-x64": "20.1.0",
84
+ "@nx/nx-darwin-arm64": "20.1.0",
85
+ "@nx/nx-linux-x64-gnu": "20.1.0",
86
+ "@nx/nx-linux-x64-musl": "20.1.0",
87
+ "@nx/nx-win32-x64-msvc": "20.1.0",
88
+ "@nx/nx-linux-arm64-gnu": "20.1.0",
89
+ "@nx/nx-linux-arm64-musl": "20.1.0",
90
+ "@nx/nx-linux-arm-gnueabihf": "20.1.0",
91
+ "@nx/nx-win32-arm64-msvc": "20.1.0",
92
+ "@nx/nx-freebsd-x64": "20.1.0"
93
93
  },
94
94
  "nx-migrations": {
95
95
  "migrations": "./migrations.json",
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.yargsGenerateCommand = void 0;
4
- const path_1 = require("../../utils/path");
5
4
  const shared_options_1 = require("../yargs-utils/shared-options");
6
5
  exports.yargsGenerateCommand = {
7
6
  command: 'generate <generator> [_..]',
@@ -11,7 +10,7 @@ exports.yargsGenerateCommand = {
11
10
  handler: async (args) => {
12
11
  // Remove the command from the args
13
12
  args._ = args._.slice(1);
14
- process.exit(await (await Promise.resolve().then(() => require('./generate'))).generate((0, path_1.getCwd)(), args));
13
+ process.exit(await (await Promise.resolve().then(() => require('./generate'))).generate(args));
15
14
  },
16
15
  };
17
16
  function withGenerateOptions(yargs) {
@@ -16,6 +16,6 @@ export declare function parseGeneratorString(value: string): {
16
16
  generator: string;
17
17
  };
18
18
  export declare function printGenHelp(opts: GenerateOptions, schema: Schema, normalizedGeneratorName: string, aliases: string[]): void;
19
- export declare function generate(cwd: string, args: {
19
+ export declare function generate(args: {
20
20
  [k: string]: any;
21
21
  }): Promise<number>;
@@ -19,6 +19,7 @@ const workspace_root_1 = require("../../utils/workspace-root");
19
19
  const calculate_default_project_name_1 = require("../../config/calculate-default-project-name");
20
20
  const installed_plugins_1 = require("../../utils/plugins/installed-plugins");
21
21
  const generator_utils_1 = require("./generator-utils");
22
+ const path_2 = require("../../utils/path");
22
23
  function printChanges(fileChanges) {
23
24
  fileChanges.forEach((f) => {
24
25
  if (f.type === 'CREATE') {
@@ -206,7 +207,7 @@ function printGenHelp(opts, schema, normalizedGeneratorName, aliases) {
206
207
  aliases,
207
208
  });
208
209
  }
209
- async function generate(cwd, args) {
210
+ async function generate(args) {
210
211
  return (0, handle_errors_1.handleErrors)(args.verbose, async () => {
211
212
  const nxJsonConfiguration = (0, configuration_1.readNxJson)();
212
213
  const projectGraph = await (0, project_graph_1.createProjectGraphAsync)();
@@ -226,6 +227,7 @@ async function generate(cwd, args) {
226
227
  printGenHelp(opts, schema, normalizedGeneratorName, aliases);
227
228
  return 0;
228
229
  }
230
+ const cwd = (0, path_2.getCwd)();
229
231
  const combinedOpts = await (0, params_1.combineOptionsForGenerator)(opts.generatorOptions, opts.collectionName, normalizedGeneratorName, projectsConfigurations, nxJsonConfiguration, schema, opts.interactive, (0, calculate_default_project_name_1.calculateDefaultProjectName)(cwd, workspace_root_1.workspaceRoot, projectsConfigurations, nxJsonConfiguration), (0, path_1.relative)(workspace_root_1.workspaceRoot, cwd), args.verbose);
230
232
  if ((0, generator_utils_1.getGeneratorInformation)(opts.collectionName, normalizedGeneratorName, workspace_root_1.workspaceRoot, projectsConfigurations.projects).isNxGenerator) {
231
233
  const host = new tree_1.FsTree(workspace_root_1.workspaceRoot, args.verbose, `generating (${opts.collectionName}:${normalizedGeneratorName})`);
@@ -2,14 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.yargsInitCommand = void 0;
4
4
  const shared_options_1 = require("../yargs-utils/shared-options");
5
- const nx_json_1 = require("../../config/nx-json");
6
- const useV2 = process.env['NX_ADD_PLUGINS'] !== 'false' &&
7
- (0, nx_json_1.readNxJson)().useInferencePlugins !== false;
8
5
  exports.yargsInitCommand = {
9
6
  command: 'init',
10
7
  describe: 'Adds Nx to any type of workspace. It installs nx, creates an nx.json configuration file and optionally sets up remote caching. For more info, check https://nx.dev/recipes/adopting-nx.',
11
8
  builder: (yargs) => withInitOptions(yargs),
12
9
  handler: async (args) => {
10
+ const useV2 = await isInitV2();
13
11
  if (useV2) {
14
12
  await require('./init-v2').initHandler(args);
15
13
  }
@@ -19,7 +17,13 @@ exports.yargsInitCommand = {
19
17
  process.exit(0);
20
18
  },
21
19
  };
22
- function withInitOptions(yargs) {
20
+ async function isInitV2() {
21
+ return (process.env['NX_ADD_PLUGINS'] !== 'false' &&
22
+ (await Promise.resolve().then(() => require('../../config/nx-json'))).readNxJson().useInferencePlugins !==
23
+ false);
24
+ }
25
+ async function withInitOptions(yargs) {
26
+ const useV2 = await isInitV2();
23
27
  if (useV2) {
24
28
  return yargs
25
29
  .option('nxCloud', {
@@ -1,13 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.yargsInternalMigrateCommand = exports.yargsMigrateCommand = void 0;
4
- const path = require("path");
5
- const child_process_1 = require("../../utils/child-process");
6
4
  const documentation_1 = require("../yargs-utils/documentation");
7
- const child_process_2 = require("child_process");
8
- const package_manager_1 = require("../../utils/package-manager");
9
- const fileutils_1 = require("../../utils/fileutils");
10
- const workspace_root_1 = require("../../utils/workspace-root");
11
5
  const shared_options_1 = require("../yargs-utils/shared-options");
12
6
  exports.yargsMigrateCommand = {
13
7
  command: 'migrate [packageAndVersion]',
@@ -15,8 +9,8 @@ exports.yargsMigrateCommand = {
15
9
  - Migrate packages and create migrations.json (e.g., nx migrate @nx/workspace@latest)
16
10
  - Run migrations (e.g., nx migrate --run-migrations=migrations.json). Use flag --if-exists to run migrations only if the migrations file exists.`,
17
11
  builder: (yargs) => (0, documentation_1.linkToNxDevAndExamples)(withMigrationOptions(yargs), 'migrate'),
18
- handler: () => {
19
- runMigration();
12
+ handler: async () => {
13
+ (await Promise.resolve().then(() => require('./migrate'))).runMigration();
20
14
  process.exit(0);
21
15
  },
22
16
  };
@@ -81,91 +75,3 @@ function withMigrationOptions(yargs) {
81
75
  return true;
82
76
  });
83
77
  }
84
- function runMigration() {
85
- const runLocalMigrate = () => {
86
- (0, child_process_1.runNxSync)(`_migrate ${process.argv.slice(3).join(' ')}`, {
87
- stdio: ['inherit', 'inherit', 'inherit'],
88
- });
89
- };
90
- if (process.env.NX_MIGRATE_USE_LOCAL === undefined) {
91
- const p = nxCliPath();
92
- if (p === null) {
93
- runLocalMigrate();
94
- }
95
- else {
96
- // ensure local registry from process is not interfering with the install
97
- // when we start the process from temp folder the local registry would override the custom registry
98
- if (process.env.npm_config_registry &&
99
- process.env.npm_config_registry.match(/^https:\/\/registry\.(npmjs\.org|yarnpkg\.com)/)) {
100
- delete process.env.npm_config_registry;
101
- }
102
- (0, child_process_2.execSync)(`${p} _migrate ${process.argv.slice(3).join(' ')}`, {
103
- stdio: ['inherit', 'inherit', 'inherit'],
104
- windowsHide: false,
105
- });
106
- }
107
- }
108
- else {
109
- runLocalMigrate();
110
- }
111
- }
112
- function nxCliPath() {
113
- const version = process.env.NX_MIGRATE_CLI_VERSION || 'latest';
114
- try {
115
- const packageManager = (0, package_manager_1.detectPackageManager)();
116
- const pmc = (0, package_manager_1.getPackageManagerCommand)(packageManager);
117
- const { dirSync } = require('tmp');
118
- const tmpDir = dirSync().name;
119
- (0, fileutils_1.writeJsonFile)(path.join(tmpDir, 'package.json'), {
120
- dependencies: {
121
- nx: version,
122
- },
123
- license: 'MIT',
124
- });
125
- (0, package_manager_1.copyPackageManagerConfigurationFiles)(workspace_root_1.workspaceRoot, tmpDir);
126
- if (pmc.preInstall) {
127
- // ensure package.json and repo in tmp folder is set to a proper package manager state
128
- (0, child_process_2.execSync)(pmc.preInstall, {
129
- cwd: tmpDir,
130
- stdio: ['ignore', 'ignore', 'ignore'],
131
- windowsHide: false,
132
- });
133
- // if it's berry ensure we set the node_linker to node-modules
134
- if (packageManager === 'yarn' && pmc.ciInstall.includes('immutable')) {
135
- (0, child_process_2.execSync)('yarn config set nodeLinker node-modules', {
136
- cwd: tmpDir,
137
- stdio: ['ignore', 'ignore', 'ignore'],
138
- windowsHide: false,
139
- });
140
- }
141
- }
142
- (0, child_process_2.execSync)(pmc.install, {
143
- cwd: tmpDir,
144
- stdio: ['ignore', 'ignore', 'ignore'],
145
- windowsHide: false,
146
- });
147
- // Set NODE_PATH so that these modules can be used for module resolution
148
- addToNodePath(path.join(tmpDir, 'node_modules'));
149
- addToNodePath(path.join(workspace_root_1.workspaceRoot, 'node_modules'));
150
- return path.join(tmpDir, `node_modules`, '.bin', 'nx');
151
- }
152
- catch (e) {
153
- console.error(`Failed to install the ${version} version of the migration script. Using the current version.`);
154
- if (process.env.NX_VERBOSE_LOGGING === 'true') {
155
- console.error(e);
156
- }
157
- return null;
158
- }
159
- }
160
- function addToNodePath(dir) {
161
- // NODE_PATH is a delimited list of paths.
162
- // The delimiter is different for windows.
163
- const delimiter = require('os').platform() === 'win32' ? ';' : ':';
164
- const paths = process.env.NODE_PATH
165
- ? process.env.NODE_PATH.split(delimiter)
166
- : [];
167
- // Add the tmp path
168
- paths.push(dir);
169
- // Update the env variable.
170
- process.env.NODE_PATH = paths.join(delimiter);
171
- }
@@ -111,4 +111,5 @@ export declare function executeMigrations(root: string, migrations: {
111
111
  export declare function migrate(root: string, args: {
112
112
  [k: string]: any;
113
113
  }, rawArgs: string[]): Promise<number>;
114
+ export declare function runMigration(): void;
114
115
  export {};
@@ -5,6 +5,7 @@ exports.normalizeVersion = normalizeVersion;
5
5
  exports.parseMigrationsOptions = parseMigrationsOptions;
6
6
  exports.executeMigrations = executeMigrations;
7
7
  exports.migrate = migrate;
8
+ exports.runMigration = runMigration;
8
9
  const chalk = require("chalk");
9
10
  const child_process_1 = require("child_process");
10
11
  const enquirer_1 = require("enquirer");
@@ -1051,6 +1052,34 @@ async function migrate(root, args, rawArgs) {
1051
1052
  }
1052
1053
  });
1053
1054
  }
1055
+ function runMigration() {
1056
+ const runLocalMigrate = () => {
1057
+ (0, child_process_2.runNxSync)(`_migrate ${process.argv.slice(3).join(' ')}`, {
1058
+ stdio: ['inherit', 'inherit', 'inherit'],
1059
+ });
1060
+ };
1061
+ if (process.env.NX_MIGRATE_USE_LOCAL === undefined) {
1062
+ const p = nxCliPath();
1063
+ if (p === null) {
1064
+ runLocalMigrate();
1065
+ }
1066
+ else {
1067
+ // ensure local registry from process is not interfering with the install
1068
+ // when we start the process from temp folder the local registry would override the custom registry
1069
+ if (process.env.npm_config_registry &&
1070
+ process.env.npm_config_registry.match(/^https:\/\/registry\.(npmjs\.org|yarnpkg\.com)/)) {
1071
+ delete process.env.npm_config_registry;
1072
+ }
1073
+ (0, child_process_1.execSync)(`${p} _migrate ${process.argv.slice(3).join(' ')}`, {
1074
+ stdio: ['inherit', 'inherit', 'inherit'],
1075
+ windowsHide: false,
1076
+ });
1077
+ }
1078
+ }
1079
+ else {
1080
+ runLocalMigrate();
1081
+ }
1082
+ }
1054
1083
  function readMigrationCollection(packageName, root) {
1055
1084
  const collectionPath = readPackageMigrationConfig(packageName, root).migrations;
1056
1085
  const collection = (0, fileutils_1.readJsonFile)(collectionPath);
@@ -1079,6 +1108,66 @@ function getImplementationPath(collection, collectionPath, name) {
1079
1108
  }
1080
1109
  return { path: implPath, fnSymbol };
1081
1110
  }
1111
+ function nxCliPath() {
1112
+ const version = process.env.NX_MIGRATE_CLI_VERSION || 'latest';
1113
+ try {
1114
+ const packageManager = (0, package_manager_1.detectPackageManager)();
1115
+ const pmc = (0, package_manager_1.getPackageManagerCommand)(packageManager);
1116
+ const { dirSync } = require('tmp');
1117
+ const tmpDir = dirSync().name;
1118
+ (0, fileutils_1.writeJsonFile)((0, path_1.join)(tmpDir, 'package.json'), {
1119
+ dependencies: {
1120
+ nx: version,
1121
+ },
1122
+ license: 'MIT',
1123
+ });
1124
+ (0, package_manager_1.copyPackageManagerConfigurationFiles)(workspace_root_1.workspaceRoot, tmpDir);
1125
+ if (pmc.preInstall) {
1126
+ // ensure package.json and repo in tmp folder is set to a proper package manager state
1127
+ (0, child_process_1.execSync)(pmc.preInstall, {
1128
+ cwd: tmpDir,
1129
+ stdio: ['ignore', 'ignore', 'ignore'],
1130
+ windowsHide: false,
1131
+ });
1132
+ // if it's berry ensure we set the node_linker to node-modules
1133
+ if (packageManager === 'yarn' && pmc.ciInstall.includes('immutable')) {
1134
+ (0, child_process_1.execSync)('yarn config set nodeLinker node-modules', {
1135
+ cwd: tmpDir,
1136
+ stdio: ['ignore', 'ignore', 'ignore'],
1137
+ windowsHide: false,
1138
+ });
1139
+ }
1140
+ }
1141
+ (0, child_process_1.execSync)(pmc.install, {
1142
+ cwd: tmpDir,
1143
+ stdio: ['ignore', 'ignore', 'ignore'],
1144
+ windowsHide: false,
1145
+ });
1146
+ // Set NODE_PATH so that these modules can be used for module resolution
1147
+ addToNodePath((0, path_1.join)(tmpDir, 'node_modules'));
1148
+ addToNodePath((0, path_1.join)(workspace_root_1.workspaceRoot, 'node_modules'));
1149
+ return (0, path_1.join)(tmpDir, `node_modules`, '.bin', 'nx');
1150
+ }
1151
+ catch (e) {
1152
+ console.error(`Failed to install the ${version} version of the migration script. Using the current version.`);
1153
+ if (process.env.NX_VERBOSE_LOGGING === 'true') {
1154
+ console.error(e);
1155
+ }
1156
+ return null;
1157
+ }
1158
+ }
1159
+ function addToNodePath(dir) {
1160
+ // NODE_PATH is a delimited list of paths.
1161
+ // The delimiter is different for windows.
1162
+ const delimiter = require('os').platform() === 'win32' ? ';' : ':';
1163
+ const paths = process.env.NODE_PATH
1164
+ ? process.env.NODE_PATH.split(delimiter)
1165
+ : [];
1166
+ // Add the tmp path
1167
+ paths.push(dir);
1168
+ // Update the env variable.
1169
+ process.env.NODE_PATH = paths.join(delimiter);
1170
+ }
1082
1171
  // TODO (v21): Remove CLI determination of Angular Migration
1083
1172
  function isAngularMigration(collection, collectionPath, name) {
1084
1173
  const entry = collection.generators?.[name] || collection.schematics?.[name];
@@ -2,8 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.yargsReleaseCommand = void 0;
4
4
  const yargs_1 = require("yargs");
5
- const nx_json_1 = require("../../config/nx-json");
6
- const command_line_utils_1 = require("../../utils/command-line-utils");
7
5
  const logger_1 = require("../../utils/logger");
8
6
  const shared_options_1 = require("../yargs-utils/shared-options");
9
7
  exports.yargsReleaseCommand = {
@@ -51,11 +49,11 @@ exports.yargsReleaseCommand = {
51
49
  return val;
52
50
  },
53
51
  })
54
- .check((argv) => {
52
+ .check(async (argv) => {
55
53
  if (argv.groups && argv.projects) {
56
54
  throw new Error('The --projects and --groups options are mutually exclusive, please use one or the other.');
57
55
  }
58
- const nxJson = (0, nx_json_1.readNxJson)();
56
+ const nxJson = (await Promise.resolve().then(() => require('../../config/nx-json'))).readNxJson();
59
57
  if (argv.groups?.length) {
60
58
  for (const group of argv.groups) {
61
59
  if (!nxJson.release?.groups?.[group]) {
@@ -255,7 +253,7 @@ const planCheckCommand = {
255
253
  function coerceParallelOption(args) {
256
254
  return {
257
255
  ...args,
258
- parallel: (0, command_line_utils_1.readParallelFromArgsAndEnv)(args),
256
+ parallel: (0, shared_options_1.readParallelFromArgsAndEnv)(args),
259
257
  };
260
258
  }
261
259
  function withGitCommitAndGitTagOptions(yargs) {
@@ -15,6 +15,7 @@ exports.getFirstGitCommit = getFirstGitCommit;
15
15
  * Special thanks to changelogen for the original inspiration for many of these utilities:
16
16
  * https://github.com/unjs/changelogen
17
17
  */
18
+ const node_path_1 = require("node:path");
18
19
  const utils_1 = require("../../../tasks-runner/utils");
19
20
  const workspace_root_1 = require("../../../utils/workspace-root");
20
21
  const exec_command_1 = require("./exec-command");
@@ -86,13 +87,19 @@ async function getGitDiff(from, to = 'HEAD') {
86
87
  // Use a unique enough separator that we can be relatively certain will not occur within the commit message itself
87
88
  const separator = '§§§';
88
89
  // https://git-scm.com/docs/pretty-formats
89
- const r = await (0, exec_command_1.execCommand)('git', [
90
+ const args = [
90
91
  '--no-pager',
91
92
  'log',
92
93
  range,
93
94
  `--pretty="----%n%s${separator}%h${separator}%an${separator}%ae%n%b"`,
94
95
  '--name-status',
95
- ]);
96
+ ];
97
+ // Support cases where the nx workspace root is located at a nested path within the git repo
98
+ const relativePath = await getGitRootRelativePath();
99
+ if (relativePath) {
100
+ args.push(`--relative=${relativePath}`);
101
+ }
102
+ const r = await (0, exec_command_1.execCommand)('git', args);
96
103
  return r
97
104
  .split('----\n')
98
105
  .splice(1)
@@ -405,3 +412,19 @@ async function getFirstGitCommit() {
405
412
  throw new Error(`Unable to find first commit in git history`);
406
413
  }
407
414
  }
415
+ async function getGitRoot() {
416
+ try {
417
+ return (await (0, exec_command_1.execCommand)('git', ['rev-parse', '--show-toplevel'])).trim();
418
+ }
419
+ catch (e) {
420
+ throw new Error('Unable to find git root');
421
+ }
422
+ }
423
+ let gitRootRelativePath;
424
+ async function getGitRootRelativePath() {
425
+ if (!gitRootRelativePath) {
426
+ const gitRoot = await getGitRoot();
427
+ gitRootRelativePath = (0, node_path_1.relative)(gitRoot, workspace_root_1.workspaceRoot);
428
+ }
429
+ return gitRootRelativePath;
430
+ }
@@ -72,4 +72,7 @@ export declare function withRunOneOptions(yargs: Argv): Argv<{
72
72
  help: boolean;
73
73
  }>;
74
74
  export declare function parseCSV(args: string[] | string): string[];
75
+ export declare function readParallelFromArgsAndEnv(args: {
76
+ [k: string]: any;
77
+ }): number;
75
78
  export {};
@@ -13,6 +13,7 @@ exports.withOverrides = withOverrides;
13
13
  exports.withOutputStyleOption = withOutputStyleOption;
14
14
  exports.withRunOneOptions = withRunOneOptions;
15
15
  exports.parseCSV = parseCSV;
16
+ exports.readParallelFromArgsAndEnv = readParallelFromArgsAndEnv;
16
17
  exports.defaultYargsParserConfiguration = {
17
18
  'strip-dashed': true,
18
19
  'unknown-options-as-args': true,
@@ -251,3 +252,21 @@ function parseCSV(args) {
251
252
  const items = args.split(',');
252
253
  return items.map((i) => i.startsWith('"') && i.endsWith('"') ? i.slice(1, -1) : i);
253
254
  }
255
+ function readParallelFromArgsAndEnv(args) {
256
+ if (args['parallel'] === 'false' || args['parallel'] === false) {
257
+ return 1;
258
+ }
259
+ else if (args['parallel'] === 'true' ||
260
+ args['parallel'] === true ||
261
+ args['parallel'] === '' ||
262
+ // dont require passing --parallel if NX_PARALLEL is set, but allow overriding it
263
+ (process.env.NX_PARALLEL && args['parallel'] === undefined)) {
264
+ return Number(args['maxParallel'] ||
265
+ args['max-parallel'] ||
266
+ process.env.NX_PARALLEL ||
267
+ 3);
268
+ }
269
+ else if (args['parallel'] !== undefined) {
270
+ return Number(args['parallel']);
271
+ }
272
+ }