nx 19.6.0-canary.20240724-684d2a9 → 19.6.0-canary.20240725-3890edc

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/bin/nx-cloud.d.ts +2 -1
  2. package/bin/nx-cloud.js +9 -17
  3. package/package.json +12 -12
  4. package/src/command-line/list/list.js +10 -14
  5. package/src/command-line/release/command-object.js +5 -21
  6. package/src/command-line/reset/command-object.d.ts +1 -0
  7. package/src/command-line/reset/command-object.js +4 -0
  8. package/src/command-line/reset/reset.js +13 -0
  9. package/src/command-line/run/run.js +2 -14
  10. package/src/daemon/socket-utils.js +1 -1
  11. package/src/daemon/tmp-dir.d.ts +1 -1
  12. package/src/daemon/tmp-dir.js +3 -2
  13. package/src/migrations/update-16-0-0/update-nx-cloud-runner.js +2 -0
  14. package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.d.ts +1 -1
  15. package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.js +3 -1
  16. package/src/native/nx.wasm32-wasi.wasm +0 -0
  17. package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +2 -10
  18. package/src/nx-cloud/utilities/client.d.ts +10 -0
  19. package/src/nx-cloud/utilities/client.js +35 -0
  20. package/src/nx-cloud/utilities/url-shorten.d.ts +2 -2
  21. package/src/nx-cloud/utilities/url-shorten.js +13 -6
  22. package/src/tasks-runner/utils.js +9 -5
  23. package/src/utils/chunkify.d.ts +10 -0
  24. package/src/utils/chunkify.js +19 -12
  25. package/src/utils/command-line-utils.d.ts +3 -0
  26. package/src/utils/command-line-utils.js +11 -7
  27. package/src/utils/git-utils.js +14 -4
  28. package/src/utils/plugins/core-plugins.d.ts +6 -3
  29. package/src/utils/plugins/core-plugins.js +107 -115
  30. package/src/utils/plugins/index.d.ts +4 -4
  31. package/src/utils/plugins/index.js +7 -8
  32. package/src/utils/plugins/installed-plugins.d.ts +2 -3
  33. package/src/utils/plugins/installed-plugins.js +4 -31
  34. package/src/utils/plugins/local-plugins.d.ts +2 -3
  35. package/src/utils/plugins/local-plugins.js +2 -29
  36. package/src/utils/plugins/output.d.ts +5 -0
  37. package/src/utils/plugins/output.js +104 -0
  38. package/src/utils/plugins/plugin-capabilities.d.ts +12 -2
  39. package/src/utils/plugins/plugin-capabilities.js +2 -87
  40. package/src/utils/plugins/community-plugins.d.ts +0 -2
  41. package/src/utils/plugins/community-plugins.js +0 -28
  42. package/src/utils/plugins/models.d.ts +0 -22
  43. package/src/utils/plugins/models.js +0 -2
  44. package/src/utils/plugins/shared.d.ts +0 -1
  45. package/src/utils/plugins/shared.js +0 -7
package/bin/nx-cloud.d.ts CHANGED
@@ -1,2 +1,3 @@
1
1
  #!/usr/bin/env node
2
- export {};
2
+ import type { CloudTaskRunnerOptions } from '../src/nx-cloud/nx-cloud-tasks-runner-shell';
3
+ export declare function invokeCommandWithNxCloudClient(options: CloudTaskRunnerOptions): Promise<any>;
package/bin/nx-cloud.js CHANGED
@@ -1,38 +1,30 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- const resolution_helpers_1 = require("../src/nx-cloud/resolution-helpers");
4
+ exports.invokeCommandWithNxCloudClient = invokeCommandWithNxCloudClient;
5
5
  const get_cloud_options_1 = require("../src/nx-cloud/utilities/get-cloud-options");
6
6
  const update_manager_1 = require("../src/nx-cloud/update-manager");
7
7
  const output_1 = require("../src/utils/output");
8
+ const client_1 = require("../src/nx-cloud/utilities/client");
8
9
  const command = process.argv[2];
9
10
  const options = (0, get_cloud_options_1.getCloudOptions)();
10
11
  Promise.resolve().then(async () => invokeCommandWithNxCloudClient(options));
11
12
  async function invokeCommandWithNxCloudClient(options) {
12
13
  try {
13
- const { nxCloudClient } = await (0, update_manager_1.verifyOrUpdateNxCloudClient)(options);
14
- const paths = (0, resolution_helpers_1.findAncestorNodeModules)(__dirname, []);
15
- nxCloudClient.configureLightClientRequire()(paths);
16
- if (command in nxCloudClient.commands) {
17
- nxCloudClient.commands[command]()
18
- .then(() => process.exit(0))
19
- .catch((e) => {
20
- console.error(e);
21
- process.exit(1);
22
- });
23
- }
24
- else {
14
+ const client = await (0, client_1.getCloudClient)(options);
15
+ client.invoke(command);
16
+ }
17
+ catch (e) {
18
+ if (e instanceof client_1.UnknownCommandError) {
25
19
  output_1.output.error({
26
- title: `Unknown Command "${command}"`,
20
+ title: `Unknown Command "${e.command}"`,
27
21
  });
28
22
  output_1.output.log({
29
23
  title: 'Available Commands:',
30
- bodyLines: Object.keys(nxCloudClient.commands).map((c) => `- ${c}`),
24
+ bodyLines: e.availableCommands.map((c) => `- ${c}`),
31
25
  });
32
26
  process.exit(1);
33
27
  }
34
- }
35
- catch (e) {
36
28
  const body = ['Cannot run commands from the `nx-cloud` CLI.'];
37
29
  if (e instanceof update_manager_1.NxCloudEnterpriseOutdatedError) {
38
30
  try {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nx",
3
- "version": "19.6.0-canary.20240724-684d2a9",
3
+ "version": "19.6.0-canary.20240725-3890edc",
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": {
@@ -71,7 +71,7 @@
71
71
  "yargs-parser": "21.1.1",
72
72
  "node-machine-id": "1.1.12",
73
73
  "ora": "5.3.0",
74
- "@nrwl/tao": "19.6.0-canary.20240724-684d2a9"
74
+ "@nrwl/tao": "19.6.0-canary.20240725-3890edc"
75
75
  },
76
76
  "peerDependencies": {
77
77
  "@swc-node/register": "^1.8.0",
@@ -86,16 +86,16 @@
86
86
  }
87
87
  },
88
88
  "optionalDependencies": {
89
- "@nx/nx-darwin-x64": "19.6.0-canary.20240724-684d2a9",
90
- "@nx/nx-darwin-arm64": "19.6.0-canary.20240724-684d2a9",
91
- "@nx/nx-linux-x64-gnu": "19.6.0-canary.20240724-684d2a9",
92
- "@nx/nx-linux-x64-musl": "19.6.0-canary.20240724-684d2a9",
93
- "@nx/nx-win32-x64-msvc": "19.6.0-canary.20240724-684d2a9",
94
- "@nx/nx-linux-arm64-gnu": "19.6.0-canary.20240724-684d2a9",
95
- "@nx/nx-linux-arm64-musl": "19.6.0-canary.20240724-684d2a9",
96
- "@nx/nx-linux-arm-gnueabihf": "19.6.0-canary.20240724-684d2a9",
97
- "@nx/nx-win32-arm64-msvc": "19.6.0-canary.20240724-684d2a9",
98
- "@nx/nx-freebsd-x64": "19.6.0-canary.20240724-684d2a9"
89
+ "@nx/nx-darwin-x64": "19.6.0-canary.20240725-3890edc",
90
+ "@nx/nx-darwin-arm64": "19.6.0-canary.20240725-3890edc",
91
+ "@nx/nx-linux-x64-gnu": "19.6.0-canary.20240725-3890edc",
92
+ "@nx/nx-linux-x64-musl": "19.6.0-canary.20240725-3890edc",
93
+ "@nx/nx-win32-x64-msvc": "19.6.0-canary.20240725-3890edc",
94
+ "@nx/nx-linux-arm64-gnu": "19.6.0-canary.20240725-3890edc",
95
+ "@nx/nx-linux-arm64-musl": "19.6.0-canary.20240725-3890edc",
96
+ "@nx/nx-linux-arm-gnueabihf": "19.6.0-canary.20240725-3890edc",
97
+ "@nx/nx-win32-arm64-msvc": "19.6.0-canary.20240725-3890edc",
98
+ "@nx/nx-freebsd-x64": "19.6.0-canary.20240725-3890edc"
99
99
  },
100
100
  "nx-migrations": {
101
101
  "migrations": "./migrations.json",
@@ -1,12 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.listHandler = listHandler;
4
- const workspace_root_1 = require("../../utils/workspace-root");
4
+ const nx_json_1 = require("../../config/nx-json");
5
+ const project_graph_1 = require("../../project-graph/project-graph");
5
6
  const output_1 = require("../../utils/output");
6
7
  const plugins_1 = require("../../utils/plugins");
7
- const local_plugins_1 = require("../../utils/plugins/local-plugins");
8
- const project_graph_1 = require("../../project-graph/project-graph");
9
- const nx_json_1 = require("../../config/nx-json");
8
+ const workspace_root_1 = require("../../utils/workspace-root");
10
9
  /**
11
10
  * List available plugins or capabilities within a specific plugin
12
11
  *
@@ -16,31 +15,28 @@ const nx_json_1 = require("../../config/nx-json");
16
15
  *
17
16
  */
18
17
  async function listHandler(args) {
19
- const nxJson = (0, nx_json_1.readNxJson)();
20
18
  const projectGraph = await (0, project_graph_1.createProjectGraphAsync)({ exitOnError: true });
21
19
  const projects = (0, project_graph_1.readProjectsConfigurationFromProjectGraph)(projectGraph);
22
20
  if (args.plugin) {
23
21
  await (0, plugins_1.listPluginCapabilities)(args.plugin, projects.projects);
24
22
  }
25
23
  else {
26
- const corePlugins = (0, plugins_1.fetchCorePlugins)();
27
- const localPlugins = await (0, local_plugins_1.getLocalWorkspacePlugins)(projects, nxJson);
24
+ const nxJson = (0, nx_json_1.readNxJson)();
25
+ const localPlugins = await (0, plugins_1.getLocalWorkspacePlugins)(projects, nxJson);
28
26
  const installedPlugins = await (0, plugins_1.getInstalledPluginsAndCapabilities)(workspace_root_1.workspaceRoot, projects.projects);
29
27
  if (localPlugins.size) {
30
- (0, local_plugins_1.listLocalWorkspacePlugins)(localPlugins);
28
+ (0, plugins_1.listPlugins)(localPlugins, 'Local workspace plugins:');
31
29
  }
32
- (0, plugins_1.listInstalledPlugins)(installedPlugins);
33
- (0, plugins_1.listCorePlugins)(installedPlugins, corePlugins);
30
+ (0, plugins_1.listPlugins)(installedPlugins, 'Installed plugins:');
31
+ (0, plugins_1.listAlsoAvailableCorePlugins)(installedPlugins);
34
32
  output_1.output.note({
35
33
  title: 'Community Plugins',
36
34
  bodyLines: [
37
35
  'Looking for a technology / framework not listed above?',
38
36
  'There are many excellent plugins maintained by the Nx community.',
39
- 'Search for the one you need here: https://nx.dev/plugins/registry.',
37
+ 'Search for the one you need here: https://nx.dev/plugin-registry.',
40
38
  ],
41
39
  });
42
- output_1.output.note({
43
- title: `Use "nx list [plugin]" to find out more`,
44
- });
40
+ output_1.output.note({ title: `Use "nx list [plugin]" to find out more` });
45
41
  }
46
42
  }
@@ -5,6 +5,7 @@ const yargs_1 = require("yargs");
5
5
  const nx_json_1 = require("../../config/nx-json");
6
6
  const logger_1 = require("../../utils/logger");
7
7
  const shared_options_1 = require("../yargs-utils/shared-options");
8
+ const command_line_utils_1 = require("../../utils/command-line-utils");
8
9
  exports.yargsReleaseCommand = {
9
10
  command: 'release',
10
11
  describe: 'Orchestrate versioning and publishing of applications and libraries',
@@ -223,27 +224,10 @@ const planCommand = {
223
224
  },
224
225
  };
225
226
  function coerceParallelOption(args) {
226
- if (args['parallel'] === 'false' || args['parallel'] === false) {
227
- return {
228
- ...args,
229
- parallel: 1,
230
- };
231
- }
232
- else if (args['parallel'] === 'true' ||
233
- args['parallel'] === true ||
234
- args['parallel'] === '') {
235
- return {
236
- ...args,
237
- parallel: Number(args['maxParallel'] || args['max-parallel'] || 3),
238
- };
239
- }
240
- else if (args['parallel'] !== undefined) {
241
- return {
242
- ...args,
243
- parallel: Number(args['parallel']),
244
- };
245
- }
246
- return args;
227
+ return {
228
+ ...args,
229
+ parallel: (0, command_line_utils_1.readParallelFromArgsAndEnv)(args),
230
+ };
247
231
  }
248
232
  function withGitCommitAndGitTagOptions(yargs) {
249
233
  return yargs
@@ -3,5 +3,6 @@ export type ResetCommandOptions = {
3
3
  onlyCache?: boolean;
4
4
  onlyDaemon?: boolean;
5
5
  onlyWorkspaceData?: boolean;
6
+ onlyCloud?: boolean;
6
7
  };
7
8
  export declare const yargsResetCommand: CommandModule<Record<string, unknown>, ResetCommandOptions>;
@@ -13,6 +13,10 @@ exports.yargsResetCommand = {
13
13
  .option('onlyDaemon', {
14
14
  description: 'Stops the Nx Daemon, it will be restarted fresh when the next Nx command is run.',
15
15
  type: 'boolean',
16
+ })
17
+ .option('onlyCloud', {
18
+ description: 'Resets the Nx Cloud client. NOTE: Does not clear the remote cache.',
19
+ type: 'boolean',
16
20
  })
17
21
  .option('onlyWorkspaceData', {
18
22
  description: 'Clears the workspace data directory. Used by Nx to store cached data about the current workspace (e.g. partial results, incremental data, etc)',
@@ -6,6 +6,8 @@ const client_1 = require("../../daemon/client/client");
6
6
  const cache_directory_1 = require("../../utils/cache-directory");
7
7
  const output_1 = require("../../utils/output");
8
8
  const native_file_cache_location_1 = require("../../native/native-file-cache-location");
9
+ const client_2 = require("../../nx-cloud/utilities/client");
10
+ const get_cloud_options_1 = require("../../nx-cloud/utilities/get-cloud-options");
9
11
  // Wait at max 5 seconds before giving up on a failing operation.
10
12
  const INCREMENTAL_BACKOFF_MAX_DURATION = 5000;
11
13
  // If an operation fails, wait 100ms before first retry.
@@ -61,6 +63,9 @@ async function resetHandler(args) {
61
63
  errors.push('Failed to clean up the workspace data directory.');
62
64
  }
63
65
  }
66
+ if (all || args.onlyCloud) {
67
+ await resetCloudClient();
68
+ }
64
69
  if (errors.length > 0) {
65
70
  output_1.output.error({
66
71
  title: 'Failed to reset the Nx workspace.',
@@ -77,6 +82,14 @@ async function resetHandler(args) {
77
82
  function killDaemon() {
78
83
  return client_1.daemonClient.stop();
79
84
  }
85
+ async function resetCloudClient() {
86
+ // Remove nx cloud marker files. This helps if the use happens to run `nx-cloud start-ci-run` or
87
+ // similar commands on their local machine.
88
+ try {
89
+ (await (0, client_2.getCloudClient)((0, get_cloud_options_1.getCloudOptions)())).invoke('cleanup');
90
+ }
91
+ catch { }
92
+ }
80
93
  function cleanupCacheEntries() {
81
94
  return incrementalBackoff(INCREMENTAL_BACKOFF_FIRST_DELAY, INCREMENTAL_BACKOFF_MAX_DURATION, () => {
82
95
  (0, fs_extra_1.rmSync)(cache_directory_1.cacheDir, { recursive: true, force: true });
@@ -35,20 +35,8 @@ async function* promiseToIterator(v) {
35
35
  yield await v;
36
36
  }
37
37
  async function iteratorToProcessStatusCode(i) {
38
- // This is a workaround to fix an issue that only happens with
39
- // the @angular-devkit/build-angular:browser builder. Starting
40
- // on version 12.0.1, a SASS compilation implementation was
41
- // introduced making use of workers and it's unref()-ing the worker
42
- // too early, causing the process to exit early in environments
43
- // like CI or when running Docker builds.
44
- const keepProcessAliveInterval = setInterval(() => { }, 1000);
45
- try {
46
- const { success } = await (0, async_iterator_1.getLastValueFromAsyncIterableIterator)(i);
47
- return success ? 0 : 1;
48
- }
49
- finally {
50
- clearInterval(keepProcessAliveInterval);
51
- }
38
+ const { success } = await (0, async_iterator_1.getLastValueFromAsyncIterableIterator)(i);
39
+ return success ? 0 : 1;
52
40
  }
53
41
  async function parseExecutorAndTarget({ project, target }, root, projectsConfigurations) {
54
42
  const proj = projectsConfigurations.projects[project];
@@ -25,7 +25,7 @@ const getForkedProcessOsSocketPath = (id) => {
25
25
  };
26
26
  exports.getForkedProcessOsSocketPath = getForkedProcessOsSocketPath;
27
27
  const getPluginOsSocketPath = (id) => {
28
- let path = (0, path_1.resolve)((0, path_1.join)((0, tmp_dir_1.getSocketDir)(), 'plugin' + id + '.sock'));
28
+ let path = (0, path_1.resolve)((0, path_1.join)((0, tmp_dir_1.getSocketDir)(true), 'plugin' + id + '.sock'));
29
29
  return exports.isWindows ? '\\\\.\\pipe\\nx\\' + (0, path_1.resolve)(path) : (0, path_1.resolve)(path);
30
30
  };
31
31
  exports.getPluginOsSocketPath = getPluginOsSocketPath;
@@ -8,5 +8,5 @@ export declare function isDaemonDisabled(): boolean;
8
8
  * We try to create a socket file in a tmp dir, but if it doesn't work because
9
9
  * for instance we don't have permissions, we create it in DAEMON_DIR_FOR_CURRENT_WORKSPACE
10
10
  */
11
- export declare function getSocketDir(): string;
11
+ export declare function getSocketDir(alreadyUnique?: boolean): string;
12
12
  export declare function removeSocketDir(): void;
@@ -51,9 +51,10 @@ function socketDirName() {
51
51
  * We try to create a socket file in a tmp dir, but if it doesn't work because
52
52
  * for instance we don't have permissions, we create it in DAEMON_DIR_FOR_CURRENT_WORKSPACE
53
53
  */
54
- function getSocketDir() {
54
+ function getSocketDir(alreadyUnique = false) {
55
55
  try {
56
- const dir = process.env.NX_DAEMON_SOCKET_DIR ?? socketDirName();
56
+ const dir = process.env.NX_DAEMON_SOCKET_DIR ??
57
+ (alreadyUnique ? tmp_1.tmpdir : socketDirName());
57
58
  (0, fs_extra_1.ensureDirSync)(dir);
58
59
  return dir;
59
60
  }
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = default_1;
4
4
  const project_configuration_1 = require("../../generators/utils/project-configuration");
5
5
  const json_1 = require("../../generators/utils/json");
6
+ const format_changed_files_with_prettier_if_available_1 = require("../../generators/internal-utils/format-changed-files-with-prettier-if-available");
6
7
  async function default_1(tree) {
7
8
  (0, json_1.updateJson)(tree, 'package.json', (json) => {
8
9
  if (json.dependencies && json.dependencies['@nrwl/nx-cloud']) {
@@ -24,4 +25,5 @@ async function default_1(tree) {
24
25
  }
25
26
  }
26
27
  (0, project_configuration_1.updateNxJson)(tree, nxJson);
28
+ await (0, format_changed_files_with_prettier_if_available_1.formatChangedFilesWithPrettierIfAvailable)(tree);
27
29
  }
@@ -1,2 +1,2 @@
1
1
  import { Tree } from '../../generators/tree';
2
- export default function migrate(tree: Tree): void;
2
+ export default function migrate(tree: Tree): Promise<void>;
@@ -2,8 +2,10 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.default = migrate;
4
4
  const nx_json_1 = require("../../generators/utils/nx-json");
5
- function migrate(tree) {
5
+ const format_changed_files_with_prettier_if_available_1 = require("../../generators/internal-utils/format-changed-files-with-prettier-if-available");
6
+ async function migrate(tree) {
6
7
  const nxJson = (0, nx_json_1.readNxJson)(tree);
7
8
  nxJson.useInferencePlugins = false;
8
9
  (0, nx_json_1.updateNxJson)(tree, nxJson);
10
+ await (0, format_changed_files_with_prettier_if_available_1.formatChangedFilesWithPrettierIfAvailable)(tree);
9
11
  }
Binary file
@@ -8,7 +8,6 @@ const nx_json_1 = require("../../../generators/utils/nx-json");
8
8
  const format_changed_files_with_prettier_if_available_1 = require("../../../generators/internal-utils/format-changed-files-with-prettier-if-available");
9
9
  const url_shorten_1 = require("../../utilities/url-shorten");
10
10
  const get_cloud_options_1 = require("../../utilities/get-cloud-options");
11
- const git_utils_1 = require("../../../utils/git-utils");
12
11
  const ora = require("ora");
13
12
  const open = require("open");
14
13
  function printCloudConnectionDisabledMessage() {
@@ -55,7 +54,7 @@ async function createNxCloudWorkspace(workspaceName, installationSource, nxInitD
55
54
  }
56
55
  return response.data;
57
56
  }
58
- async function printSuccessMessage(url, token, installationSource, usesGithub, directory) {
57
+ async function printSuccessMessage(token, installationSource, usesGithub) {
59
58
  const connectCloudUrl = await (0, url_shorten_1.shortenedCloudUrl)(installationSource, token, usesGithub);
60
59
  if (installationSource === 'nx-connect' && usesGithub) {
61
60
  try {
@@ -88,12 +87,6 @@ async function printSuccessMessage(url, token, installationSource, usesGithub, d
88
87
  `${connectCloudUrl}`,
89
88
  ],
90
89
  });
91
- (0, git_utils_1.commitChanges)(`feat(nx): Added Nx Cloud token to your nx.json
92
-
93
- To connect your workspace to Nx Cloud, push your repository
94
- to your git hosting provider and go to the following URL:
95
-
96
- ${connectCloudUrl}`, directory);
97
90
  }
98
91
  else {
99
92
  output_1.output.note({
@@ -141,8 +134,7 @@ async function connectToNxCloud(tree, schema) {
141
134
  silent: schema.hideFormatLogs,
142
135
  });
143
136
  }
144
- const apiUrl = (0, get_cloud_options_1.getCloudUrl)();
145
- return async () => await printSuccessMessage(responseFromCreateNxCloudWorkspace?.url ?? apiUrl, responseFromCreateNxCloudWorkspace?.token, schema.installationSource, usesGithub, schema.directory);
137
+ return async () => await printSuccessMessage(responseFromCreateNxCloudWorkspace?.token, schema.installationSource, usesGithub);
146
138
  }
147
139
  }
148
140
  function sleep(ms) {
@@ -0,0 +1,10 @@
1
+ import { CloudTaskRunnerOptions } from '../nx-cloud-tasks-runner-shell';
2
+ export declare class UnknownCommandError extends Error {
3
+ command: string;
4
+ availableCommands: string[];
5
+ constructor(command: string, availableCommands: string[]);
6
+ }
7
+ export declare function getCloudClient(options: CloudTaskRunnerOptions): Promise<{
8
+ invoke: (command: string) => void;
9
+ availableCommands: string[];
10
+ }>;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnknownCommandError = void 0;
4
+ exports.getCloudClient = getCloudClient;
5
+ const resolution_helpers_1 = require("../resolution-helpers");
6
+ const update_manager_1 = require("../update-manager");
7
+ class UnknownCommandError extends Error {
8
+ constructor(command, availableCommands) {
9
+ super(`Unknown Command "${command}"`);
10
+ this.command = command;
11
+ this.availableCommands = availableCommands;
12
+ }
13
+ }
14
+ exports.UnknownCommandError = UnknownCommandError;
15
+ async function getCloudClient(options) {
16
+ const { nxCloudClient } = await (0, update_manager_1.verifyOrUpdateNxCloudClient)(options);
17
+ const paths = (0, resolution_helpers_1.findAncestorNodeModules)(__dirname, []);
18
+ nxCloudClient.configureLightClientRequire()(paths);
19
+ return {
20
+ invoke: (command) => {
21
+ if (command in nxCloudClient.commands) {
22
+ nxCloudClient.commands[command]()
23
+ .then(() => process.exit(0))
24
+ .catch((e) => {
25
+ console.error(e);
26
+ process.exit(1);
27
+ });
28
+ }
29
+ else {
30
+ throw new UnknownCommandError(command, Object.keys(nxCloudClient.commands));
31
+ }
32
+ },
33
+ availableCommands: Object.keys(nxCloudClient.commands),
34
+ };
35
+ }
@@ -1,6 +1,6 @@
1
1
  export declare function shortenedCloudUrl(installationSource: string, accessToken?: string, usesGithub?: boolean): Promise<string>;
2
- export declare function repoUsesGithub(github?: boolean): Promise<boolean>;
3
- export declare function getURLifShortenFailed(usesGithub: boolean, githubSlug: string, apiUrl: string, source: string, accessToken?: string): string;
2
+ export declare function repoUsesGithub(github?: boolean, githubSlug?: string, apiUrl?: string): Promise<boolean>;
3
+ export declare function getURLifShortenFailed(usesGithub: boolean, githubSlug: string | null, apiUrl: string, source: string, accessToken?: string): string;
4
4
  export declare function getNxCloudVersion(apiUrl: string): Promise<string | null>;
5
5
  export declare function removeVersionModifier(versionString: string): string;
6
6
  export declare function versionIsValid(version: string): boolean;
@@ -13,6 +13,9 @@ const get_cloud_options_1 = require("./get-cloud-options");
13
13
  async function shortenedCloudUrl(installationSource, accessToken, usesGithub) {
14
14
  const githubSlug = (0, git_utils_1.getGithubSlugOrNull)();
15
15
  const apiUrl = (0, get_cloud_options_1.getCloudUrl)();
16
+ if (usesGithub === undefined || usesGithub === null) {
17
+ usesGithub = await repoUsesGithub(undefined, githubSlug, apiUrl);
18
+ }
16
19
  try {
17
20
  const version = await getNxCloudVersion(apiUrl);
18
21
  if ((version && compareCleanCloudVersions(version, '2406.11.5') < 0) ||
@@ -31,7 +34,7 @@ async function shortenedCloudUrl(installationSource, accessToken, usesGithub) {
31
34
  type: usesGithub ? 'GITHUB' : 'MANUAL',
32
35
  source,
33
36
  accessToken: usesGithub ? null : accessToken,
34
- selectedRepositoryName: githubSlug,
37
+ selectedRepositoryName: githubSlug === 'github' ? null : githubSlug,
35
38
  });
36
39
  if (!response?.data || response.data.message) {
37
40
  throw new Error(response?.data?.message ?? 'Failed to shorten Nx Cloud URL');
@@ -41,14 +44,18 @@ async function shortenedCloudUrl(installationSource, accessToken, usesGithub) {
41
44
  catch (e) {
42
45
  devkit_exports_1.logger.verbose(`Failed to shorten Nx Cloud URL.
43
46
  ${e}`);
44
- return getURLifShortenFailed(usesGithub, githubSlug, apiUrl, source, accessToken);
47
+ return getURLifShortenFailed(usesGithub, githubSlug === 'github' ? null : githubSlug, apiUrl, source, accessToken);
45
48
  }
46
49
  }
47
- async function repoUsesGithub(github) {
48
- const githubSlug = (0, git_utils_1.getGithubSlugOrNull)();
49
- const apiUrl = (0, get_cloud_options_1.getCloudUrl)();
50
+ async function repoUsesGithub(github, githubSlug, apiUrl) {
51
+ if (!apiUrl) {
52
+ apiUrl = (0, get_cloud_options_1.getCloudUrl)();
53
+ }
54
+ if (!githubSlug) {
55
+ githubSlug = (0, git_utils_1.getGithubSlugOrNull)();
56
+ }
50
57
  const installationSupportsGitHub = await getInstallationSupportsGitHub(apiUrl);
51
- return ((githubSlug || github) &&
58
+ return ((!!githubSlug || !!github) &&
52
59
  (apiUrl.includes('cloud.nx.app') ||
53
60
  apiUrl.includes('eu.nx.app') ||
54
61
  installationSupportsGitHub));
@@ -215,16 +215,20 @@ function getOutputsForTargetAndConfiguration(taskTargetOrTask, overridesOrNode,
215
215
  };
216
216
  if (targetConfiguration?.outputs) {
217
217
  validateOutputs(targetConfiguration.outputs);
218
- return targetConfiguration.outputs
219
- .map((output) => {
220
- return interpolate(output, {
218
+ const result = new Set();
219
+ for (const output of targetConfiguration.outputs) {
220
+ const interpolatedOutput = interpolate(output, {
221
221
  projectRoot: node.data.root,
222
222
  projectName: node.name,
223
223
  project: { ...node.data, name: node.name }, // this is legacy
224
224
  options,
225
225
  });
226
- })
227
- .filter((output) => !!output && !output.match(/{(projectRoot|workspaceRoot|(options.*))}/));
226
+ if (!!interpolatedOutput &&
227
+ !interpolatedOutput.match(/{(projectRoot|workspaceRoot|(options.*))}/)) {
228
+ result.add(interpolatedOutput);
229
+ }
230
+ }
231
+ return Array.from(result);
228
232
  }
229
233
  // Keep backwards compatibility in case `outputs` doesn't exist
230
234
  if (options.outputPath) {
@@ -1 +1,11 @@
1
1
  export declare function chunkify(target: string[], maxChunkLength?: number): string[][];
2
+ /**
3
+ * Get the maximum length of a command-line argument string based on current platform
4
+ *
5
+ * https://serverfault.com/questions/69430/what-is-the-maximum-length-of-a-command-line-in-mac-os-x
6
+ * https://support.microsoft.com/en-us/help/830473/command-prompt-cmd-exe-command-line-string-limitation
7
+ * https://unix.stackexchange.com/a/120652
8
+ *
9
+ * Taken from: https://github.com/lint-staged/lint-staged/blob/adf50b00669f6aac2eeca25dd28ff86a9a3c2a48/lib/index.js#L21-L37
10
+ */
11
+ export declare function getMaxArgLength(): 262144 | 8191 | 131072;
@@ -1,8 +1,8 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.chunkify = chunkify;
4
- const child_process_1 = require("child_process");
5
- const TERMINAL_SIZE = process.platform === 'win32' ? 8192 : getUnixTerminalSize();
4
+ exports.getMaxArgLength = getMaxArgLength;
5
+ const TERMINAL_SIZE = getMaxArgLength();
6
6
  function chunkify(target, maxChunkLength = TERMINAL_SIZE - 500) {
7
7
  const chunks = [];
8
8
  let currentChunk = [];
@@ -23,15 +23,22 @@ function chunkify(target, maxChunkLength = TERMINAL_SIZE - 500) {
23
23
  chunks.push(currentChunk);
24
24
  return chunks;
25
25
  }
26
- function getUnixTerminalSize() {
27
- try {
28
- const argMax = (0, child_process_1.execSync)('getconf ARG_MAX').toString().trim();
29
- return Number.parseInt(argMax);
30
- }
31
- catch {
32
- // This number varies by system, but 100k seems like a safe
33
- // number from some research...
34
- // https://stackoverflow.com/questions/19354870/bash-command-line-and-input-limit
35
- return 100000;
26
+ /**
27
+ * Get the maximum length of a command-line argument string based on current platform
28
+ *
29
+ * https://serverfault.com/questions/69430/what-is-the-maximum-length-of-a-command-line-in-mac-os-x
30
+ * https://support.microsoft.com/en-us/help/830473/command-prompt-cmd-exe-command-line-string-limitation
31
+ * https://unix.stackexchange.com/a/120652
32
+ *
33
+ * Taken from: https://github.com/lint-staged/lint-staged/blob/adf50b00669f6aac2eeca25dd28ff86a9a3c2a48/lib/index.js#L21-L37
34
+ */
35
+ function getMaxArgLength() {
36
+ switch (process.platform) {
37
+ case 'darwin':
38
+ return 262144;
39
+ case 'win32':
40
+ return 8191;
41
+ default:
42
+ return 131072;
36
43
  }
37
44
  }
@@ -41,6 +41,9 @@ export declare function splitArgsIntoNxArgsAndOverrides(args: {
41
41
  __overrides_unparsed__: string[];
42
42
  };
43
43
  };
44
+ export declare function readParallelFromArgsAndEnv(args: {
45
+ [k: string]: any;
46
+ }): number;
44
47
  export declare function parseFiles(options: NxArgs): {
45
48
  files: string[];
46
49
  };
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createOverrides = createOverrides;
4
4
  exports.splitArgsIntoNxArgsAndOverrides = splitArgsIntoNxArgsAndOverrides;
5
+ exports.readParallelFromArgsAndEnv = readParallelFromArgsAndEnv;
5
6
  exports.parseFiles = parseFiles;
6
7
  exports.getProjectRoots = getProjectRoots;
7
8
  exports.readGraphFileFromGraphArg = readGraphFileFromGraphArg;
@@ -112,23 +113,26 @@ function splitArgsIntoNxArgsAndOverrides(args, mode, options = { printWarnings:
112
113
  nxArgs.skipNxCache = process.env.NX_SKIP_NX_CACHE === 'true';
113
114
  }
114
115
  normalizeNxArgsRunner(nxArgs, nxJson, options);
116
+ nxArgs['parallel'] = readParallelFromArgsAndEnv(args);
117
+ return { nxArgs, overrides };
118
+ }
119
+ function readParallelFromArgsAndEnv(args) {
115
120
  if (args['parallel'] === 'false' || args['parallel'] === false) {
116
- nxArgs['parallel'] = 1;
121
+ return 1;
117
122
  }
118
123
  else if (args['parallel'] === 'true' ||
119
124
  args['parallel'] === true ||
120
125
  args['parallel'] === '' ||
121
- process.env.NX_PARALLEL // dont require passing --parallel if NX_PARALLEL is set
122
- ) {
123
- nxArgs['parallel'] = Number(nxArgs['maxParallel'] ||
124
- nxArgs['max-parallel'] ||
126
+ // dont require passing --parallel if NX_PARALLEL is set, but allow overriding it
127
+ (process.env.NX_PARALLEL && args['parallel'] === undefined)) {
128
+ return Number(args['maxParallel'] ||
129
+ args['max-parallel'] ||
125
130
  process.env.NX_PARALLEL ||
126
131
  3);
127
132
  }
128
133
  else if (args['parallel'] !== undefined) {
129
- nxArgs['parallel'] = Number(args['parallel']);
134
+ return Number(args['parallel']);
130
135
  }
131
- return { nxArgs, overrides };
132
136
  }
133
137
  function normalizeNxArgsRunner(nxArgs, nxJson, options) {
134
138
  if (!nxArgs.runner) {