nx 19.5.1 → 19.5.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. package/bin/nx-cloud.d.ts +2 -1
  2. package/bin/nx-cloud.js +9 -17
  3. package/bin/nx.js +1 -1
  4. package/package.json +12 -12
  5. package/src/adapter/ngcli-adapter.js +7 -4
  6. package/src/command-line/connect/command-object.js +6 -0
  7. package/src/command-line/connect/connect-to-nx-cloud.d.ts +1 -1
  8. package/src/command-line/connect/connect-to-nx-cloud.js +11 -4
  9. package/src/command-line/connect/view-logs.js +1 -1
  10. package/src/command-line/list/list.js +10 -14
  11. package/src/command-line/migrate/command-object.js +1 -0
  12. package/src/command-line/release/command-object.js +5 -21
  13. package/src/command-line/reset/command-object.d.ts +1 -0
  14. package/src/command-line/reset/command-object.js +4 -0
  15. package/src/command-line/reset/reset.js +13 -0
  16. package/src/command-line/run/executor-utils.js +14 -5
  17. package/src/command-line/run/run.js +2 -14
  18. package/src/command-line/watch/watch.js +1 -1
  19. package/src/core/graph/main.js +1 -1
  20. package/src/daemon/socket-utils.js +1 -1
  21. package/src/daemon/tmp-dir.d.ts +1 -1
  22. package/src/daemon/tmp-dir.js +3 -2
  23. package/src/migrations/update-16-0-0/update-nx-cloud-runner.js +2 -0
  24. package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.d.ts +1 -1
  25. package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.js +3 -1
  26. package/src/native/nx.wasm32-wasi.wasm +0 -0
  27. package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +4 -16
  28. package/src/nx-cloud/utilities/client.d.ts +10 -0
  29. package/src/nx-cloud/utilities/client.js +35 -0
  30. package/src/nx-cloud/utilities/get-cloud-options.d.ts +2 -0
  31. package/src/nx-cloud/utilities/get-cloud-options.js +8 -0
  32. package/src/nx-cloud/utilities/url-shorten.d.ts +2 -3
  33. package/src/nx-cloud/utilities/url-shorten.js +15 -11
  34. package/src/tasks-runner/run-command.d.ts +4 -4
  35. package/src/tasks-runner/run-command.js +22 -17
  36. package/src/tasks-runner/task-graph-utils.d.ts +3 -0
  37. package/src/tasks-runner/task-graph-utils.js +34 -0
  38. package/src/tasks-runner/utils.js +9 -6
  39. package/src/utils/ab-testing.d.ts +1 -1
  40. package/src/utils/ab-testing.js +2 -1
  41. package/src/utils/chunkify.d.ts +10 -0
  42. package/src/utils/chunkify.js +19 -12
  43. package/src/utils/command-line-utils.d.ts +3 -0
  44. package/src/utils/command-line-utils.js +11 -7
  45. package/src/utils/git-utils.js +14 -4
  46. package/src/utils/plugins/core-plugins.d.ts +6 -3
  47. package/src/utils/plugins/core-plugins.js +107 -115
  48. package/src/utils/plugins/index.d.ts +4 -4
  49. package/src/utils/plugins/index.js +7 -8
  50. package/src/utils/plugins/installed-plugins.d.ts +2 -3
  51. package/src/utils/plugins/installed-plugins.js +4 -31
  52. package/src/utils/plugins/local-plugins.d.ts +2 -3
  53. package/src/utils/plugins/local-plugins.js +2 -29
  54. package/src/utils/plugins/output.d.ts +5 -0
  55. package/src/utils/plugins/output.js +104 -0
  56. package/src/utils/plugins/plugin-capabilities.d.ts +12 -2
  57. package/src/utils/plugins/plugin-capabilities.js +2 -80
  58. package/src/utils/plugins/community-plugins.d.ts +0 -2
  59. package/src/utils/plugins/community-plugins.js +0 -28
  60. package/src/utils/plugins/models.d.ts +0 -22
  61. package/src/utils/plugins/models.js +0 -2
  62. package/src/utils/plugins/shared.d.ts +0 -1
  63. 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/bin/nx.js CHANGED
@@ -167,7 +167,7 @@ function warnIfUsingOutdatedGlobalInstall(globalNxVersion, localNxVersion) {
167
167
  : [];
168
168
  bodyLines.push('For more information, see https://nx.dev/more-concepts/global-nx');
169
169
  output_1.output.warn({
170
- title: `Its time to update Nx 🎉`,
170
+ title: `It's time to update Nx 🎉`,
171
171
  bodyLines,
172
172
  });
173
173
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nx",
3
- "version": "19.5.1",
3
+ "version": "19.5.3",
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.5.1"
74
+ "@nrwl/tao": "19.5.3"
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.5.1",
90
- "@nx/nx-darwin-arm64": "19.5.1",
91
- "@nx/nx-linux-x64-gnu": "19.5.1",
92
- "@nx/nx-linux-x64-musl": "19.5.1",
93
- "@nx/nx-win32-x64-msvc": "19.5.1",
94
- "@nx/nx-linux-arm64-gnu": "19.5.1",
95
- "@nx/nx-linux-arm64-musl": "19.5.1",
96
- "@nx/nx-linux-arm-gnueabihf": "19.5.1",
97
- "@nx/nx-win32-arm64-msvc": "19.5.1",
98
- "@nx/nx-freebsd-x64": "19.5.1"
89
+ "@nx/nx-darwin-x64": "19.5.3",
90
+ "@nx/nx-darwin-arm64": "19.5.3",
91
+ "@nx/nx-linux-x64-gnu": "19.5.3",
92
+ "@nx/nx-linux-x64-musl": "19.5.3",
93
+ "@nx/nx-win32-x64-msvc": "19.5.3",
94
+ "@nx/nx-linux-arm64-gnu": "19.5.3",
95
+ "@nx/nx-linux-arm64-musl": "19.5.3",
96
+ "@nx/nx-linux-arm-gnueabihf": "19.5.3",
97
+ "@nx/nx-win32-arm64-msvc": "19.5.3",
98
+ "@nx/nx-freebsd-x64": "19.5.3"
99
99
  },
100
100
  "nx-migrations": {
101
101
  "migrations": "./migrations.json",
@@ -799,13 +799,16 @@ async function getWrappedWorkspaceNodeModulesArchitectHost(workspace, root, proj
799
799
  import: (0, schema_utils_1.resolveImplementation)(executorConfig.implementation, (0, path_1.dirname)(executorsFilePath)),
800
800
  };
801
801
  }
802
- readExecutorsJson(nodeModule, builder) {
803
- const { json: packageJson, path: packageJsonPath } = (0, plugins_1.readPluginPackageJson)(nodeModule, this.projects, this.root ? [this.root, __dirname] : [__dirname]);
802
+ readExecutorsJson(nodeModule, builder, extraRequirePaths = []) {
803
+ const { json: packageJson, path: packageJsonPath } = (0, plugins_1.readPluginPackageJson)(nodeModule, this.projects, this.root
804
+ ? [this.root, __dirname, ...extraRequirePaths]
805
+ : [__dirname, ...extraRequirePaths]);
804
806
  const executorsFile = packageJson.executors ?? packageJson.builders;
805
807
  if (!executorsFile) {
806
808
  throw new Error(`The "${nodeModule}" package does not support Nx executors or Angular Devkit Builders.`);
807
809
  }
808
- const executorsFilePath = require.resolve((0, path_1.join)((0, path_1.dirname)(packageJsonPath), executorsFile));
810
+ const basePath = (0, path_1.dirname)(packageJsonPath);
811
+ const executorsFilePath = require.resolve((0, path_1.join)(basePath, executorsFile));
809
812
  const executorsJson = (0, fileutils_1.readJsonFile)(executorsFilePath);
810
813
  const executorConfig = executorsJson.builders?.[builder] ?? executorsJson.executors?.[builder];
811
814
  if (!executorConfig) {
@@ -814,7 +817,7 @@ async function getWrappedWorkspaceNodeModulesArchitectHost(workspace, root, proj
814
817
  if (typeof executorConfig === 'string') {
815
818
  // Angular CLI can have a builder pointing to another package:builder
816
819
  const [packageName, executorName] = executorConfig.split(':');
817
- return this.readExecutorsJson(packageName, executorName);
820
+ return this.readExecutorsJson(packageName, executorName, [basePath]);
818
821
  }
819
822
  return { executorsFilePath, executorConfig, isNgCompat: true };
820
823
  }
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.yargsViewLogsCommand = exports.yargsConnectCommand = void 0;
4
4
  const documentation_1 = require("../yargs-utils/documentation");
5
+ const versions_1 = require("../../utils/versions");
5
6
  exports.yargsConnectCommand = {
6
7
  command: 'connect',
7
8
  aliases: ['connect-to-nx-cloud'],
@@ -9,6 +10,11 @@ exports.yargsConnectCommand = {
9
10
  builder: (yargs) => (0, documentation_1.linkToNxDevAndExamples)(yargs, 'connect-to-nx-cloud'),
10
11
  handler: async () => {
11
12
  await (await Promise.resolve().then(() => require('./connect-to-nx-cloud'))).connectToNxCloudCommand();
13
+ await (await Promise.resolve().then(() => require('../../utils/ab-testing'))).recordStat({
14
+ command: 'connect',
15
+ nxVersion: versions_1.nxVersion,
16
+ useCloud: true,
17
+ });
12
18
  process.exit(0);
13
19
  },
14
20
  };
@@ -4,5 +4,5 @@ import { MessageKey } from '../../utils/ab-testing';
4
4
  export declare function onlyDefaultRunnerIsUsed(nxJson: NxJsonConfiguration): boolean;
5
5
  export declare function connectToNxCloudIfExplicitlyAsked(opts: NxArgs): Promise<void>;
6
6
  export declare function connectToNxCloudCommand(command?: string): Promise<boolean>;
7
+ export declare function connectExistingRepoToNxCloudPrompt(command?: string, key?: MessageKey): Promise<boolean>;
7
8
  export declare function connectToNxCloudWithPrompt(command: string): Promise<void>;
8
- export declare function connectExistingRepoToNxCloudPrompt(key?: MessageKey): Promise<boolean>;
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.onlyDefaultRunnerIsUsed = onlyDefaultRunnerIsUsed;
4
4
  exports.connectToNxCloudIfExplicitlyAsked = connectToNxCloudIfExplicitlyAsked;
5
5
  exports.connectToNxCloudCommand = connectToNxCloudCommand;
6
- exports.connectToNxCloudWithPrompt = connectToNxCloudWithPrompt;
7
6
  exports.connectExistingRepoToNxCloudPrompt = connectExistingRepoToNxCloudPrompt;
7
+ exports.connectToNxCloudWithPrompt = connectToNxCloudWithPrompt;
8
8
  const output_1 = require("../../utils/output");
9
9
  const configuration_1 = require("../../config/configuration");
10
10
  const tree_1 = require("../../generators/tree");
@@ -71,6 +71,16 @@ async function connectToNxCloudCommand(command) {
71
71
  await callback();
72
72
  return true;
73
73
  }
74
+ async function connectExistingRepoToNxCloudPrompt(command = 'init', key = 'setupNxCloud') {
75
+ const res = await nxCloudPrompt(key).then((value) => value === 'yes');
76
+ await (0, ab_testing_1.recordStat)({
77
+ command,
78
+ nxVersion: versions_1.nxVersion,
79
+ useCloud: res,
80
+ meta: ab_testing_1.messages.codeOfSelectedPromptMessage(key),
81
+ });
82
+ return res;
83
+ }
74
84
  async function connectToNxCloudWithPrompt(command) {
75
85
  const setNxCloud = await nxCloudPrompt('setupNxCloud');
76
86
  const useCloud = setNxCloud === 'yes' ? await connectToNxCloudCommand(command) : false;
@@ -81,9 +91,6 @@ async function connectToNxCloudWithPrompt(command) {
81
91
  meta: ab_testing_1.messages.codeOfSelectedPromptMessage('setupNxCloud'),
82
92
  });
83
93
  }
84
- async function connectExistingRepoToNxCloudPrompt(key = 'setupNxCloud') {
85
- return nxCloudPrompt(key).then((value) => value === 'yes');
86
- }
87
94
  async function nxCloudPrompt(key) {
88
95
  const { message, choices, initial, footer, hint } = ab_testing_1.messages.getPrompt(key);
89
96
  const promptConfig = {
@@ -19,7 +19,7 @@ async function viewLogs() {
19
19
  });
20
20
  return 1;
21
21
  }
22
- const setupNxCloud = await (0, connect_to_nx_cloud_1.connectExistingRepoToNxCloudPrompt)('setupViewLogs');
22
+ const setupNxCloud = await (0, connect_to_nx_cloud_1.connectExistingRepoToNxCloudPrompt)('view-logs', 'setupViewLogs');
23
23
  if (!setupNxCloud) {
24
24
  return;
25
25
  }
@@ -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
  }
@@ -120,6 +120,7 @@ function nxCliPath() {
120
120
  },
121
121
  license: 'MIT',
122
122
  });
123
+ (0, package_manager_1.copyPackageManagerConfigurationFiles)(workspace_root_1.workspaceRoot, tmpDir);
123
124
  if (pmc.preInstall) {
124
125
  // ensure package.json and repo in tmp folder is set to a proper package manager state
125
126
  (0, child_process_2.execSync)(pmc.preInstall, {
@@ -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 });
@@ -53,15 +53,22 @@ function getExecutorInformation(nodeModule, executor, root, projects) {
53
53
  throw new Error(`Unable to resolve ${nodeModule}:${executor}.\n${e.message}`);
54
54
  }
55
55
  }
56
- function readExecutorJson(nodeModule, executor, root, projects) {
56
+ function readExecutorJson(nodeModule, executor, root, projects, extraRequirePaths = []) {
57
57
  const { json: packageJson, path: packageJsonPath } = (0, plugins_1.readPluginPackageJson)(nodeModule, projects, root
58
- ? [root, __dirname, process.cwd(), ...(0, installation_directory_1.getNxRequirePaths)()]
59
- : [__dirname, process.cwd(), ...(0, installation_directory_1.getNxRequirePaths)()]);
58
+ ? [
59
+ root,
60
+ __dirname,
61
+ process.cwd(),
62
+ ...(0, installation_directory_1.getNxRequirePaths)(),
63
+ ...extraRequirePaths,
64
+ ]
65
+ : [__dirname, process.cwd(), ...(0, installation_directory_1.getNxRequirePaths)(), ...extraRequirePaths]);
60
66
  const executorsFile = packageJson.executors ?? packageJson.builders;
61
67
  if (!executorsFile) {
62
68
  throw new Error(`The "${nodeModule}" package does not support Nx executors.`);
63
69
  }
64
- const executorsFilePath = require.resolve((0, path_1.join)((0, path_1.dirname)(packageJsonPath), executorsFile));
70
+ const basePath = (0, path_1.dirname)(packageJsonPath);
71
+ const executorsFilePath = require.resolve((0, path_1.join)(basePath, executorsFile));
65
72
  const executorsJson = (0, fileutils_1.readJsonFile)(executorsFilePath);
66
73
  const executorConfig = executorsJson.executors?.[executor] || executorsJson.builders?.[executor];
67
74
  if (!executorConfig) {
@@ -70,7 +77,9 @@ function readExecutorJson(nodeModule, executor, root, projects) {
70
77
  if (typeof executorConfig === 'string') {
71
78
  // Angular CLI can have a builder pointing to another package:builder
72
79
  const [packageName, executorName] = executorConfig.split(':');
73
- return readExecutorJson(packageName, executorName, root, projects);
80
+ return readExecutorJson(packageName, executorName, root, projects, [
81
+ basePath,
82
+ ]);
74
83
  }
75
84
  const isNgCompat = !executorsJson.executors?.[executor];
76
85
  return { executorsFilePath, executorConfig, isNgCompat };
@@ -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];
@@ -117,7 +117,7 @@ async function watch(args) {
117
117
  if (args.verbose) {
118
118
  process.env.NX_VERBOSE_LOGGING = 'true';
119
119
  }
120
- if (client_1.daemonClient.enabled()) {
120
+ if (!client_1.daemonClient.enabled()) {
121
121
  output_1.output.error({
122
122
  title: 'Daemon is not running. The watch command is not supported without the Nx Daemon.',
123
123
  });