nx 19.2.0-canary.20240601-6f22300 → 19.2.0-canary.20240605-5a06daa

Sign up to get free protection for your applications and to get access to all the features.
Files changed (71) hide show
  1. package/bin/post-install.js +8 -8
  2. package/migrations.json +6 -0
  3. package/package.json +13 -12
  4. package/release/changelog-renderer/index.d.ts +6 -3
  5. package/release/changelog-renderer/index.js +53 -50
  6. package/schemas/nx-schema.json +8 -0
  7. package/src/command-line/add/add.d.ts +1 -1
  8. package/src/command-line/add/command-object.js +3 -1
  9. package/src/command-line/affected/command-object.js +10 -5
  10. package/src/command-line/deprecated/command-objects.js +12 -6
  11. package/src/command-line/examples.js +18 -0
  12. package/src/command-line/generate/generate.d.ts +1 -1
  13. package/src/command-line/migrate/migrate.d.ts +1 -1
  14. package/src/command-line/new/new.d.ts +1 -1
  15. package/src/command-line/release/changelog.d.ts +17 -1
  16. package/src/command-line/release/changelog.js +305 -76
  17. package/src/command-line/release/command-object.d.ts +14 -5
  18. package/src/command-line/release/command-object.js +52 -24
  19. package/src/command-line/release/config/config.js +38 -6
  20. package/src/command-line/release/config/filter-release-groups.d.ts +3 -1
  21. package/src/command-line/release/config/filter-release-groups.js +1 -0
  22. package/src/command-line/release/config/version-plans.d.ts +24 -0
  23. package/src/command-line/release/config/version-plans.js +184 -0
  24. package/src/command-line/release/plan.d.ts +3 -0
  25. package/src/command-line/release/plan.js +184 -0
  26. package/src/command-line/release/publish.d.ts +1 -1
  27. package/src/command-line/release/release.d.ts +1 -1
  28. package/src/command-line/release/release.js +40 -0
  29. package/src/command-line/release/utils/git.d.ts +10 -2
  30. package/src/command-line/release/utils/git.js +45 -10
  31. package/src/command-line/release/utils/shared.d.ts +12 -2
  32. package/src/command-line/release/utils/shared.js +3 -2
  33. package/src/command-line/release/version.d.ts +3 -2
  34. package/src/command-line/release/version.js +43 -5
  35. package/src/command-line/repair/repair.d.ts +1 -1
  36. package/src/command-line/reset/command-object.d.ts +6 -1
  37. package/src/command-line/reset/command-object.js +15 -2
  38. package/src/command-line/reset/reset.d.ts +2 -1
  39. package/src/command-line/reset/reset.js +98 -16
  40. package/src/command-line/run/command-object.js +6 -3
  41. package/src/command-line/run/run.d.ts +2 -2
  42. package/src/command-line/run-many/command-object.js +6 -3
  43. package/src/command-line/show/command-object.js +6 -6
  44. package/src/config/misc-interfaces.d.ts +15 -3
  45. package/src/config/nx-json.d.ts +11 -0
  46. package/src/core/graph/main.js +1 -1
  47. package/src/daemon/server/plugins.js +1 -0
  48. package/src/daemon/tmp-dir.js +1 -1
  49. package/src/devkit-exports.d.ts +1 -1
  50. package/src/migrations/update-19-2-0/move-workspace-data-directory.d.ts +4 -0
  51. package/src/migrations/update-19-2-0/move-workspace-data-directory.js +34 -0
  52. package/src/plugins/js/index.js +2 -2
  53. package/src/plugins/js/project-graph/affected/lock-file-changes.js +11 -0
  54. package/src/plugins/js/project-graph/affected/npm-packages.js +12 -0
  55. package/src/plugins/js/project-graph/build-dependencies/target-project-locator.js +3 -11
  56. package/src/plugins/js/utils/config.js +4 -0
  57. package/src/plugins/js/utils/register.d.ts +4 -3
  58. package/src/plugins/js/utils/register.js +47 -4
  59. package/src/project-graph/affected/affected-project-graph.js +6 -6
  60. package/src/project-graph/nx-deps-cache.js +6 -6
  61. package/src/project-graph/plugins/loader.js +1 -1
  62. package/src/project-graph/utils/retrieve-workspace-files.d.ts +3 -3
  63. package/src/tasks-runner/task-env.js +12 -0
  64. package/src/utils/cache-directory.d.ts +1 -1
  65. package/src/utils/cache-directory.js +13 -6
  66. package/src/utils/get-package-name-from-import-path.d.ts +1 -0
  67. package/src/utils/get-package-name-from-import-path.js +18 -0
  68. package/src/utils/package-json.d.ts +1 -0
  69. package/src/utils/package-manager.js +42 -9
  70. package/src/utils/params.d.ts +1 -1
  71. package/src/utils/params.js +5 -1
@@ -6,25 +6,107 @@ 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
- async function resetHandler() {
10
- output_1.output.note({
11
- title: 'Resetting the Nx workspace cache and stopping the Nx Daemon.',
12
- bodyLines: [`This might take a few minutes.`],
9
+ // Wait at max 5 seconds before giving up on a failing operation.
10
+ const INCREMENTAL_BACKOFF_MAX_DURATION = 5000;
11
+ // If an operation fails, wait 100ms before first retry.
12
+ const INCREMENTAL_BACKOFF_FIRST_DELAY = 100;
13
+ async function resetHandler(args) {
14
+ let errors = [];
15
+ const all = args.onlyDaemon === undefined &&
16
+ args.onlyCache === undefined &&
17
+ args.onlyWorkspaceData === undefined;
18
+ const startupMessage = all
19
+ ? 'Resetting the Nx cache and stopping the daemon.'
20
+ : 'Resetting:';
21
+ const bodyLines = [];
22
+ if (!all) {
23
+ if (args.onlyDaemon) {
24
+ bodyLines.push('- Nx Daemon');
25
+ }
26
+ if (args.onlyCache) {
27
+ bodyLines.push('- Cache directory');
28
+ }
29
+ if (args.onlyWorkspaceData) {
30
+ bodyLines.push('- Workspace data directory');
31
+ }
32
+ }
33
+ output_1.output.note({ title: startupMessage, bodyLines });
34
+ if (all || args.onlyDaemon) {
35
+ try {
36
+ await killDaemon();
37
+ }
38
+ catch {
39
+ errors.push('Failed to stop the Nx Daemon.');
40
+ }
41
+ }
42
+ if (all || args.onlyCache) {
43
+ try {
44
+ await cleanupCacheEntries();
45
+ }
46
+ catch {
47
+ errors.push('Failed to clean up the cache directory.');
48
+ }
49
+ }
50
+ if (all || args.onlyWorkspaceData) {
51
+ try {
52
+ await cleanupNativeFileCache();
53
+ }
54
+ catch {
55
+ errors.push('Failed to clean up the native file cache.');
56
+ }
57
+ try {
58
+ await cleanupWorkspaceData();
59
+ }
60
+ catch {
61
+ errors.push('Failed to clean up the workspace data directory.');
62
+ }
63
+ }
64
+ if (errors.length > 0) {
65
+ output_1.output.error({
66
+ title: 'Failed to reset the Nx workspace.',
67
+ bodyLines: errors,
68
+ });
69
+ process.exit(1);
70
+ }
71
+ else {
72
+ output_1.output.success({
73
+ title: 'Successfully reset the Nx workspace.',
74
+ });
75
+ }
76
+ }
77
+ exports.resetHandler = resetHandler;
78
+ function killDaemon() {
79
+ return client_1.daemonClient.stop();
80
+ }
81
+ function cleanupCacheEntries() {
82
+ return incrementalBackoff(INCREMENTAL_BACKOFF_FIRST_DELAY, INCREMENTAL_BACKOFF_MAX_DURATION, () => {
83
+ (0, fs_extra_1.rmSync)(cache_directory_1.cacheDir, { recursive: true, force: true });
13
84
  });
14
- await client_1.daemonClient.stop();
15
- output_1.output.log({ title: 'Daemon Server - Stopped' });
16
- try {
85
+ }
86
+ function cleanupNativeFileCache() {
87
+ return incrementalBackoff(INCREMENTAL_BACKOFF_FIRST_DELAY, INCREMENTAL_BACKOFF_MAX_DURATION, () => {
17
88
  (0, fs_extra_1.rmSync)((0, native_file_cache_location_1.getNativeFileCacheLocation)(), { recursive: true, force: true });
89
+ });
90
+ }
91
+ function cleanupWorkspaceData() {
92
+ return incrementalBackoff(INCREMENTAL_BACKOFF_FIRST_DELAY, INCREMENTAL_BACKOFF_MAX_DURATION, () => {
93
+ (0, fs_extra_1.rmSync)(cache_directory_1.workspaceDataDirectory, { recursive: true, force: true });
94
+ });
95
+ }
96
+ async function incrementalBackoff(ms, maxDuration, callback) {
97
+ try {
98
+ callback();
18
99
  }
19
100
  catch (e) {
20
- // ignore, deleting the native file cache is not critical and can fail if another process is locking the file
21
- }
22
- (0, fs_extra_1.rmSync)(cache_directory_1.cacheDir, { recursive: true, force: true });
23
- if (cache_directory_1.projectGraphCacheDirectory !== cache_directory_1.cacheDir) {
24
- (0, fs_extra_1.rmSync)(cache_directory_1.projectGraphCacheDirectory, { recursive: true, force: true });
101
+ if (ms < maxDuration) {
102
+ await sleep(ms);
103
+ await incrementalBackoff(ms * 2, maxDuration, callback);
104
+ }
105
+ else {
106
+ throw e;
107
+ }
25
108
  }
26
- output_1.output.success({
27
- title: 'Successfully reset the Nx workspace.',
28
- });
29
109
  }
30
- exports.resetHandler = resetHandler;
110
+ function sleep(ms) {
111
+ return new Promise((resolve) => setTimeout(resolve, ms));
112
+ }
@@ -13,9 +13,12 @@ exports.yargsRunCommand = {
13
13
 
14
14
  You can skip the use of Nx cache by using the --skip-nx-cache option.`,
15
15
  builder: (yargs) => (0, shared_options_1.withRunOneOptions)((0, shared_options_1.withBatch)(yargs)),
16
- handler: async (args) => await (0, params_1.handleErrors)(args.verbose ?? process.env.NX_VERBOSE_LOGGING === 'true', async () => {
17
- (await Promise.resolve().then(() => require('./run-one'))).runOne(process.cwd(), (0, shared_options_1.withOverrides)(args));
18
- }),
16
+ handler: async (args) => {
17
+ const exitCode = await (0, params_1.handleErrors)(args.verbose ?? process.env.NX_VERBOSE_LOGGING === 'true', async () => {
18
+ await Promise.resolve().then(() => require('./run-one')).then((m) => m.runOne(process.cwd(), (0, shared_options_1.withOverrides)(args)));
19
+ });
20
+ process.exit(exitCode);
21
+ },
19
22
  };
20
23
  /**
21
24
  * Handles the infix notation for running a target.
@@ -45,7 +45,7 @@ export declare function runExecutor<T extends {
45
45
  }>(targetDescription: Target, overrides: {
46
46
  [k: string]: any;
47
47
  }, context: ExecutorContext): Promise<AsyncIterableIterator<T>>;
48
- export declare function printTargetRunHelp(targetDescription: Target, root: string): Promise<any>;
48
+ export declare function printTargetRunHelp(targetDescription: Target, root: string): Promise<number>;
49
49
  export declare function run(cwd: string, root: string, targetDescription: Target, overrides: {
50
50
  [k: string]: any;
51
- }, isVerbose: boolean, taskGraph: TaskGraph): Promise<any>;
51
+ }, isVerbose: boolean, taskGraph: TaskGraph): Promise<number>;
@@ -8,7 +8,10 @@ exports.yargsRunManyCommand = {
8
8
  command: 'run-many',
9
9
  describe: 'Run target for multiple listed projects',
10
10
  builder: (yargs) => (0, documentation_1.linkToNxDevAndExamples)((0, shared_options_1.withRunManyOptions)((0, shared_options_1.withOutputStyleOption)((0, shared_options_1.withTargetAndConfigurationOption)((0, shared_options_1.withBatch)(yargs)))), 'run-many'),
11
- handler: async (args) => await (0, params_1.handleErrors)(args.verbose ?? process.env.NX_VERBOSE_LOGGING === 'true', async () => {
12
- (await Promise.resolve().then(() => require('./run-many'))).runMany((0, shared_options_1.withOverrides)(args));
13
- }),
11
+ handler: async (args) => {
12
+ const exitCode = await (0, params_1.handleErrors)(args.verbose ?? process.env.NX_VERBOSE_LOGGING === 'true', async () => {
13
+ await Promise.resolve().then(() => require('./run-many')).then((m) => m.runMany((0, shared_options_1.withOverrides)(args)));
14
+ });
15
+ process.exit(exitCode);
16
+ },
14
17
  };
@@ -64,12 +64,12 @@ const showProjectsCommand = {
64
64
  .example('$0 show projects --affected', 'Show affected projects in the workspace')
65
65
  .example('$0 show projects --type app --affected', 'Show affected apps in the workspace')
66
66
  .example('$0 show projects --affected --exclude=*-e2e', 'Show affected projects in the workspace, excluding end-to-end projects'),
67
- handler: (args) => {
68
- return (0, params_1.handleErrors)(args.verbose ?? process.env.NX_VERBOSE_LOGGING === 'true', async () => {
67
+ handler: async (args) => {
68
+ const exitCode = await (0, params_1.handleErrors)(args.verbose ?? process.env.NX_VERBOSE_LOGGING === 'true', async () => {
69
69
  const { showProjectsHandler } = await Promise.resolve().then(() => require('./projects'));
70
70
  await showProjectsHandler(args);
71
- process.exit(0);
72
71
  });
72
+ process.exit(exitCode);
73
73
  },
74
74
  };
75
75
  const showProjectCommand = {
@@ -105,11 +105,11 @@ const showProjectCommand = {
105
105
  })
106
106
  .example('$0 show project my-app', 'View project information for my-app in JSON format')
107
107
  .example('$0 show project my-app --web', 'View project information for my-app in the browser'),
108
- handler: (args) => {
109
- return (0, params_1.handleErrors)(args.verbose ?? process.env.NX_VERBOSE_LOGGING === 'true', async () => {
108
+ handler: async (args) => {
109
+ const exitCode = await (0, params_1.handleErrors)(args.verbose ?? process.env.NX_VERBOSE_LOGGING === 'true', async () => {
110
110
  const { showProjectHandler } = await Promise.resolve().then(() => require('./project'));
111
111
  await showProjectHandler(args);
112
- process.exit(0);
113
112
  });
113
+ process.exit(exitCode);
114
114
  },
115
115
  };
@@ -89,17 +89,29 @@ export interface ExecutorConfig {
89
89
  batchImplementationFactory?: () => TaskGraphExecutor;
90
90
  }
91
91
  /**
92
- * Implementation of a target of a project
92
+ * An executor implementation that returns a promise
93
93
  */
94
- export type Executor<T = any> = (
94
+ export type PromiseExecutor<T = any> = (
95
95
  /**
96
96
  * Options that users configure or pass via the command line
97
97
  */
98
98
  options: T, context: ExecutorContext) => Promise<{
99
99
  success: boolean;
100
- }> | AsyncIterableIterator<{
100
+ }>;
101
+ /**
102
+ * An executor implementation that returns an async iterator
103
+ */
104
+ export type AsyncIteratorExecutor<T = any> = (
105
+ /**
106
+ * Options that users configure or pass via the command line
107
+ */
108
+ options: T, context: ExecutorContext) => AsyncIterableIterator<{
101
109
  success: boolean;
102
110
  }>;
111
+ /**
112
+ * Implementation of a target of a project
113
+ */
114
+ export type Executor<T = any> = PromiseExecutor<T> | AsyncIteratorExecutor<T>;
103
115
  export interface HasherContext {
104
116
  hasher: TaskHasher;
105
117
  projectGraph: ProjectGraph;
@@ -22,6 +22,7 @@ export interface NrwlJsPluginConfig {
22
22
  analyzeSourceFiles?: boolean;
23
23
  analyzePackageJson?: boolean;
24
24
  analyzeLockfile?: boolean;
25
+ projectsAffectedByDependencyUpdates?: 'all' | 'auto' | string[];
25
26
  }
26
27
  interface NxInstallationConfiguration {
27
28
  /**
@@ -188,6 +189,11 @@ interface NxReleaseConfiguration {
188
189
  * Optionally override the git/release tag pattern to use for this group.
189
190
  */
190
191
  releaseTagPattern?: string;
192
+ /**
193
+ * Enables using version plans as a specifier source for versioning and
194
+ * to determine changes for changelog generation.
195
+ */
196
+ versionPlans?: boolean;
191
197
  }>;
192
198
  /**
193
199
  * Configures the default value for all groups that don't explicitly state their own projectsRelationship.
@@ -254,6 +260,11 @@ interface NxReleaseConfiguration {
254
260
  */
255
261
  git?: NxReleaseGitConfiguration;
256
262
  conventionalCommits?: NxReleaseConventionalCommitsConfiguration;
263
+ /**
264
+ * Enables using version plans as a specifier source for versioning and
265
+ * to determine changes for changelog generation.
266
+ */
267
+ versionPlans?: boolean;
257
268
  }
258
269
  /**
259
270
  * Nx.json configuration