nx 19.7.1 → 19.7.3

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 (52) hide show
  1. package/package.json +12 -12
  2. package/src/command-line/add/add.js +2 -2
  3. package/src/command-line/affected/command-object.js +6 -6
  4. package/src/command-line/deprecated/command-objects.js +3 -3
  5. package/src/command-line/generate/generate.js +2 -1
  6. package/src/command-line/import/command-object.js +8 -6
  7. package/src/command-line/import/import.d.ts +1 -1
  8. package/src/command-line/import/import.js +42 -27
  9. package/src/command-line/login/login.js +2 -2
  10. package/src/command-line/logout/logout.js +2 -2
  11. package/src/command-line/migrate/migrate.js +2 -2
  12. package/src/command-line/new/new.js +2 -1
  13. package/src/command-line/release/changelog.js +2 -2
  14. package/src/command-line/release/plan-check.js +2 -2
  15. package/src/command-line/release/plan.js +2 -2
  16. package/src/command-line/release/publish.js +2 -2
  17. package/src/command-line/release/release.js +2 -2
  18. package/src/command-line/release/utils/git.js +4 -2
  19. package/src/command-line/release/version.js +2 -1
  20. package/src/command-line/repair/repair.js +2 -2
  21. package/src/command-line/run/command-object.js +3 -3
  22. package/src/command-line/run/run.js +3 -2
  23. package/src/command-line/run-many/command-object.js +2 -2
  24. package/src/command-line/show/command-object.js +3 -3
  25. package/src/command-line/sync/sync.js +69 -11
  26. package/src/daemon/client/client.d.ts +3 -3
  27. package/src/daemon/server/handle-flush-sync-generator-changes-to-disk.js +2 -2
  28. package/src/daemon/server/handle-get-sync-generator-changes.js +8 -6
  29. package/src/daemon/server/sync-generators.d.ts +4 -4
  30. package/src/daemon/server/sync-generators.js +11 -2
  31. package/src/native/nx.wasm32-wasi.wasm +0 -0
  32. package/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +0 -1
  33. package/src/nx-cloud/utilities/get-cloud-options.d.ts +1 -0
  34. package/src/nx-cloud/utilities/get-cloud-options.js +4 -0
  35. package/src/nx-cloud/utilities/is-workspace-claimed.d.ts +1 -1
  36. package/src/nx-cloud/utilities/is-workspace-claimed.js +6 -5
  37. package/src/nx-cloud/utilities/onboarding.js +2 -2
  38. package/src/plugins/package-json/create-nodes.js +1 -1
  39. package/src/project-graph/error-types.d.ts +1 -1
  40. package/src/project-graph/error-types.js +19 -5
  41. package/src/tasks-runner/run-command.js +139 -29
  42. package/src/utils/handle-errors.d.ts +1 -0
  43. package/src/utils/handle-errors.js +71 -0
  44. package/src/utils/nx-cloud-utils.d.ts +0 -1
  45. package/src/utils/nx-cloud-utils.js +0 -10
  46. package/src/utils/package-json.d.ts +2 -1
  47. package/src/utils/package-json.js +14 -3
  48. package/src/utils/params.d.ts +0 -1
  49. package/src/utils/params.js +0 -50
  50. package/src/utils/plugins/plugin-capabilities.js +4 -1
  51. package/src/utils/sync-generators.d.ts +35 -6
  52. package/src/utils/sync-generators.js +144 -47
@@ -7,7 +7,10 @@ exports.runSyncGenerator = runSyncGenerator;
7
7
  exports.collectEnabledTaskSyncGeneratorsFromProjectGraph = collectEnabledTaskSyncGeneratorsFromProjectGraph;
8
8
  exports.collectEnabledTaskSyncGeneratorsFromTaskGraph = collectEnabledTaskSyncGeneratorsFromTaskGraph;
9
9
  exports.collectRegisteredGlobalSyncGenerators = collectRegisteredGlobalSyncGenerators;
10
- exports.syncGeneratorResultsToMessageLines = syncGeneratorResultsToMessageLines;
10
+ exports.getSyncGeneratorSuccessResultsMessageLines = getSyncGeneratorSuccessResultsMessageLines;
11
+ exports.getFailedSyncGeneratorsFixMessageLines = getFailedSyncGeneratorsFixMessageLines;
12
+ exports.getFlushFailureMessageLines = getFlushFailureMessageLines;
13
+ exports.processSyncGeneratorResultErrors = processSyncGeneratorResultErrors;
11
14
  const perf_hooks_1 = require("perf_hooks");
12
15
  const generate_1 = require("../command-line/generate/generate");
13
16
  const generator_utils_1 = require("../command-line/generate/generator-utils");
@@ -30,15 +33,13 @@ async function getSyncGeneratorChanges(generators) {
30
33
  }
31
34
  perf_hooks_1.performance.mark('get-sync-generators-changes:end');
32
35
  perf_hooks_1.performance.measure('get-sync-generators-changes', 'get-sync-generators-changes:start', 'get-sync-generators-changes:end');
33
- return results.filter((r) => r.changes.length > 0);
36
+ return results.filter((r) => ('error' in r ? true : r.changes.length > 0));
34
37
  }
35
38
  async function flushSyncGeneratorChanges(results) {
36
39
  if ((0, is_on_daemon_1.isOnDaemon)() || !client_1.daemonClient.enabled()) {
37
- await flushSyncGeneratorChangesToDisk(results);
38
- }
39
- else {
40
- await client_1.daemonClient.flushSyncGeneratorChangesToDisk(results.map((r) => r.generatorName));
40
+ return await flushSyncGeneratorChangesToDisk(results);
41
41
  }
42
+ return await client_1.daemonClient.flushSyncGeneratorChangesToDisk(results.map((r) => r.generatorName));
42
43
  }
43
44
  async function collectAllRegisteredSyncGenerators(projectGraph, nxJson) {
44
45
  if (!client_1.daemonClient.enabled()) {
@@ -50,25 +51,33 @@ async function collectAllRegisteredSyncGenerators(projectGraph, nxJson) {
50
51
  return await client_1.daemonClient.getRegisteredSyncGenerators();
51
52
  }
52
53
  async function runSyncGenerator(tree, generatorSpecifier, projects) {
53
- perf_hooks_1.performance.mark(`run-sync-generator:${generatorSpecifier}:start`);
54
- const { collection, generator } = (0, generate_1.parseGeneratorString)(generatorSpecifier);
55
- const { implementationFactory } = (0, generator_utils_1.getGeneratorInformation)(collection, generator, workspace_root_1.workspaceRoot, projects);
56
- const implementation = implementationFactory();
57
- const result = await implementation(tree);
58
- let callback;
59
- let outOfSyncMessage;
60
- if (result && typeof result === 'object') {
61
- callback = result.callback;
62
- outOfSyncMessage = result.outOfSyncMessage;
63
- }
64
- perf_hooks_1.performance.mark(`run-sync-generator:${generatorSpecifier}:end`);
65
- perf_hooks_1.performance.measure(`run-sync-generator:${generatorSpecifier}`, `run-sync-generator:${generatorSpecifier}:start`, `run-sync-generator:${generatorSpecifier}:end`);
66
- return {
67
- changes: tree.listChanges(),
68
- generatorName: generatorSpecifier,
69
- callback,
70
- outOfSyncMessage,
71
- };
54
+ try {
55
+ perf_hooks_1.performance.mark(`run-sync-generator:${generatorSpecifier}:start`);
56
+ const { collection, generator } = (0, generate_1.parseGeneratorString)(generatorSpecifier);
57
+ const { implementationFactory } = (0, generator_utils_1.getGeneratorInformation)(collection, generator, workspace_root_1.workspaceRoot, projects);
58
+ const implementation = implementationFactory();
59
+ const result = await implementation(tree);
60
+ let callback;
61
+ let outOfSyncMessage;
62
+ if (result && typeof result === 'object') {
63
+ callback = result.callback;
64
+ outOfSyncMessage = result.outOfSyncMessage;
65
+ }
66
+ perf_hooks_1.performance.mark(`run-sync-generator:${generatorSpecifier}:end`);
67
+ perf_hooks_1.performance.measure(`run-sync-generator:${generatorSpecifier}`, `run-sync-generator:${generatorSpecifier}:start`, `run-sync-generator:${generatorSpecifier}:end`);
68
+ return {
69
+ changes: tree.listChanges(),
70
+ generatorName: generatorSpecifier,
71
+ callback,
72
+ outOfSyncMessage,
73
+ };
74
+ }
75
+ catch (e) {
76
+ return {
77
+ generatorName: generatorSpecifier,
78
+ error: { message: e.message, stack: e.stack },
79
+ };
80
+ }
72
81
  }
73
82
  function collectEnabledTaskSyncGeneratorsFromProjectGraph(projectGraph, nxJson) {
74
83
  const taskSyncGenerators = new Set();
@@ -118,9 +127,12 @@ function collectRegisteredGlobalSyncGenerators(nxJson = (0, nx_json_1.readNxJson
118
127
  }
119
128
  return globalSyncGenerators;
120
129
  }
121
- function syncGeneratorResultsToMessageLines(results) {
130
+ function getSyncGeneratorSuccessResultsMessageLines(results) {
122
131
  const messageLines = [];
123
132
  for (const result of results) {
133
+ if ('error' in result) {
134
+ continue;
135
+ }
124
136
  messageLines.push(`The ${chalk.bold(result.generatorName)} sync generator identified ${chalk.bold(result.changes.length)} file${result.changes.length === 1 ? '' : 's'} in the workspace that ${result.changes.length === 1 ? 'is' : 'are'} out of sync${result.outOfSyncMessage ? ':' : '.'}`);
125
137
  if (result.outOfSyncMessage) {
126
138
  messageLines.push(result.outOfSyncMessage);
@@ -128,6 +140,65 @@ function syncGeneratorResultsToMessageLines(results) {
128
140
  }
129
141
  return messageLines;
130
142
  }
143
+ function getFailedSyncGeneratorsFixMessageLines(results, verbose) {
144
+ const messageLines = [];
145
+ const generators = [];
146
+ for (const result of results) {
147
+ if ('error' in result) {
148
+ messageLines.push(`The ${chalk.bold(result.generatorName)} sync generator reported the following error:
149
+ ${chalk.bold(result.error.message)}${verbose && result.error.stack ? '\n' + result.error.stack : ''}`);
150
+ generators.push(result.generatorName);
151
+ }
152
+ }
153
+ messageLines.push(...getFailedSyncGeneratorsMessageLines(generators, verbose));
154
+ return messageLines;
155
+ }
156
+ function getFlushFailureMessageLines(result, verbose) {
157
+ const messageLines = [];
158
+ const generators = [];
159
+ for (const failure of result.generatorFailures) {
160
+ messageLines.push(`The ${chalk.bold(failure.generator)} sync generator failed to apply its changes with the following error:
161
+ ${chalk.bold(failure.error.message)}${verbose && failure.error.stack ? '\n' + failure.error.stack : ''}`);
162
+ generators.push(failure.generator);
163
+ }
164
+ messageLines.push(...getFailedSyncGeneratorsMessageLines(generators, verbose));
165
+ if (result.generalFailure) {
166
+ if (messageLines.length > 0) {
167
+ messageLines.push('');
168
+ messageLines.push('Additionally, an unexpected error occurred:');
169
+ }
170
+ else {
171
+ messageLines.push('An unexpected error occurred:');
172
+ }
173
+ messageLines.push(...[
174
+ '',
175
+ result.generalFailure.message,
176
+ ...(verbose && !!result.generalFailure.stack
177
+ ? [`\n${result.generalFailure.stack}`]
178
+ : []),
179
+ '',
180
+ verbose
181
+ ? 'Please report the error at: https://github.com/nrwl/nx/issues/new/choose'
182
+ : 'Please run with `--verbose` and report the error at: https://github.com/nrwl/nx/issues/new/choose',
183
+ ]);
184
+ }
185
+ return messageLines;
186
+ }
187
+ function processSyncGeneratorResultErrors(results) {
188
+ let failedGeneratorsCount = 0;
189
+ for (const result of results) {
190
+ if ('error' in result) {
191
+ failedGeneratorsCount++;
192
+ }
193
+ }
194
+ const areAllResultsFailures = failedGeneratorsCount === results.length;
195
+ const anySyncGeneratorsFailed = failedGeneratorsCount > 0;
196
+ return {
197
+ failedGeneratorsCount,
198
+ areAllResultsFailures,
199
+ anySyncGeneratorsFailed,
200
+ };
201
+ }
131
202
  async function runSyncGenerators(generators) {
132
203
  const tree = new tree_1.FsTree(workspace_root_1.workspaceRoot, false, 'running sync generators');
133
204
  const projectGraph = await (0, project_graph_1.createProjectGraphAsync)();
@@ -141,32 +212,15 @@ async function runSyncGenerators(generators) {
141
212
  }
142
213
  async function flushSyncGeneratorChangesToDisk(results) {
143
214
  perf_hooks_1.performance.mark('flush-sync-generator-changes-to-disk:start');
144
- const { changes, createdFiles, updatedFiles, deletedFiles, callbacks } = processSyncGeneratorResults(results);
145
- // Write changes to disk
146
- (0, tree_1.flushChanges)(workspace_root_1.workspaceRoot, changes);
147
- // Run the callbacks
148
- if (callbacks.length) {
149
- for (const callback of callbacks) {
150
- await callback();
151
- }
152
- }
153
- // Update the context files
154
- await (0, workspace_context_1.updateContextWithChangedFiles)(workspace_root_1.workspaceRoot, createdFiles, updatedFiles, deletedFiles);
155
- perf_hooks_1.performance.mark('flush-sync-generator-changes-to-disk:end');
156
- perf_hooks_1.performance.measure('flush sync generator changes to disk', 'flush-sync-generator-changes-to-disk:start', 'flush-sync-generator-changes-to-disk:end');
157
- }
158
- function processSyncGeneratorResults(results) {
159
- const changes = [];
160
215
  const createdFiles = [];
161
216
  const updatedFiles = [];
162
217
  const deletedFiles = [];
163
- const callbacks = [];
218
+ const generatorFailures = [];
164
219
  for (const result of results) {
165
- if (result.callback) {
166
- callbacks.push(result.callback);
220
+ if ('error' in result) {
221
+ continue;
167
222
  }
168
223
  for (const change of result.changes) {
169
- changes.push(change);
170
224
  if (change.type === 'CREATE') {
171
225
  createdFiles.push(change.path);
172
226
  }
@@ -177,6 +231,49 @@ function processSyncGeneratorResults(results) {
177
231
  deletedFiles.push(change.path);
178
232
  }
179
233
  }
234
+ try {
235
+ // Write changes to disk
236
+ (0, tree_1.flushChanges)(workspace_root_1.workspaceRoot, result.changes);
237
+ // Run the callback
238
+ if (result.callback) {
239
+ await result.callback();
240
+ }
241
+ }
242
+ catch (e) {
243
+ generatorFailures.push({
244
+ generator: result.generatorName,
245
+ error: { message: e.message, stack: e.stack },
246
+ });
247
+ }
248
+ }
249
+ try {
250
+ // Update the context files
251
+ await (0, workspace_context_1.updateContextWithChangedFiles)(workspace_root_1.workspaceRoot, createdFiles, updatedFiles, deletedFiles);
252
+ perf_hooks_1.performance.mark('flush-sync-generator-changes-to-disk:end');
253
+ perf_hooks_1.performance.measure('flush sync generator changes to disk', 'flush-sync-generator-changes-to-disk:start', 'flush-sync-generator-changes-to-disk:end');
254
+ }
255
+ catch (e) {
256
+ return {
257
+ generatorFailures,
258
+ generalFailure: { message: e.message, stack: e.stack },
259
+ };
180
260
  }
181
- return { changes, createdFiles, updatedFiles, deletedFiles, callbacks };
261
+ return generatorFailures.length > 0
262
+ ? { generatorFailures }
263
+ : { success: true };
264
+ }
265
+ function getFailedSyncGeneratorsMessageLines(generators, verbose) {
266
+ const messageLines = [];
267
+ if (generators.length === 1) {
268
+ messageLines.push('', verbose
269
+ ? 'Please check the error above and address the issue.'
270
+ : 'Please check the error above and address the issue. You can provide the `--verbose` flag to get more details.', `If needed, you can disable the failing sync generator by setting \`sync.disabledTaskSyncGenerators: ["${generators[0]}"]\` in your \`nx.json\`.`);
271
+ }
272
+ else if (generators.length > 1) {
273
+ const generatorsString = generators.map((g) => `"${g}"`).join(', ');
274
+ messageLines.push('', verbose
275
+ ? 'Please check the errors above and address the issues.'
276
+ : 'Please check the errors above and address the issues. You can provide the `--verbose` flag to get more details.', `If needed, you can disable the failing sync generators by setting \`sync.disabledTaskSyncGenerators: [${generatorsString}]\` in your \`nx.json\`.`);
277
+ }
278
+ return messageLines;
182
279
  }