nx 23.2.0-beta.8 → 23.2.0-beta.9

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 (71) hide show
  1. package/dist/src/ai/set-up-ai-agents/set-up-ai-agents.js +2 -2
  2. package/dist/src/command-line/format/format.js +84 -101
  3. package/dist/src/command-line/import/import.js +12 -0
  4. package/dist/src/command-line/init/configure-plugins.js +4 -1
  5. package/dist/src/command-line/init/implementation/add-nx-to-nest.js +9 -0
  6. package/dist/src/command-line/init/implementation/add-nx-to-turborepo.js +3 -17
  7. package/dist/src/command-line/init/implementation/angular/index.js +4 -0
  8. package/dist/src/command-line/init/implementation/angular/legacy-angular-versions.js +2 -0
  9. package/dist/src/command-line/init/implementation/angular/standalone-workspace.js +8 -2
  10. package/dist/src/command-line/init/implementation/check-compatible-with-plugins.js +2 -0
  11. package/dist/src/command-line/init/implementation/dot-nx/add-nx-scripts.js +5 -0
  12. package/dist/src/command-line/init/implementation/format.d.ts +18 -0
  13. package/dist/src/command-line/init/implementation/format.js +114 -0
  14. package/dist/src/command-line/init/implementation/utils.js +8 -0
  15. package/dist/src/command-line/init/init-v1.js +7 -0
  16. package/dist/src/command-line/init/init-v2.js +11 -0
  17. package/dist/src/command-line/migrate/migrate.d.ts +4 -0
  18. package/dist/src/command-line/migrate/migrate.js +64 -24
  19. package/dist/src/command-line/release/version.js +2 -2
  20. package/dist/src/daemon/client/client.js +11 -2
  21. package/dist/src/devkit-internals.d.ts +5 -2
  22. package/dist/src/devkit-internals.js +14 -6
  23. package/dist/src/generators/internal-utils/{format-changed-files-with-prettier-if-available.d.ts → format-changed-files.d.ts} +6 -6
  24. package/dist/src/generators/internal-utils/format-changed-files.js +163 -0
  25. package/dist/src/generators/testing-utils/create-tree-with-empty-workspace.d.ts +15 -0
  26. package/dist/src/generators/testing-utils/create-tree-with-empty-workspace.js +21 -3
  27. package/dist/src/migrations/update-15-0-0/prefix-outputs.js +2 -2
  28. package/dist/src/migrations/update-16-0-0/remove-nrwl-cli.js +2 -2
  29. package/dist/src/migrations/update-16-0-0/update-depends-on-to-tokens.js +2 -2
  30. package/dist/src/migrations/update-16-0-0/update-nx-cloud-runner.js +2 -2
  31. package/dist/src/migrations/update-16-2-0/remove-run-commands-output-path.js +2 -2
  32. package/dist/src/migrations/update-17-0-0/rm-default-collection-npm-scope.js +2 -2
  33. package/dist/src/migrations/update-17-0-0/use-minimal-config-for-tasks-runner-options.js +2 -2
  34. package/dist/src/migrations/update-17-2-0/move-default-base.js +2 -2
  35. package/dist/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.js +2 -2
  36. package/dist/src/migrations/update-19-2-4/set-project-name.js +2 -2
  37. package/dist/src/migrations/update-20-0-0/move-use-daemon-process.js +2 -2
  38. package/dist/src/migrations/update-20-0-1/use-legacy-cache.js +2 -2
  39. package/dist/src/migrations/update-21-0-0/release-changelog-config-changes.js +2 -2
  40. package/dist/src/migrations/update-21-0-0/release-version-config-changes.js +2 -2
  41. package/dist/src/migrations/update-21-0-0/remove-custom-tasks-runner.js +2 -2
  42. package/dist/src/migrations/update-21-0-0/remove-legacy-cache.js +2 -2
  43. package/dist/src/migrations/update-22-0-0/consolidate-release-tag-config.js +2 -2
  44. package/dist/src/migrations/update-22-0-0/release-version-config-changes.js +2 -2
  45. package/dist/src/migrations/update-22-2-0/add-self-healing-to-gitignore.js +2 -2
  46. package/dist/src/migrations/update-22-6-0/add-claude-settings-local-to-git-ignore.js +2 -2
  47. package/dist/src/migrations/update-22-6-0/add-claude-worktrees-to-git-ignore.js +2 -2
  48. package/dist/src/migrations/update-22-7-0/add-polygraph-to-git-ignore.js +2 -2
  49. package/dist/src/migrations/update-23-0-0/add-migrate-runs-to-git-ignore.js +2 -2
  50. package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.js +2 -2
  51. package/dist/src/native/nx.wasm32-wasi.debug.wasm +0 -0
  52. package/dist/src/native/nx.wasm32-wasi.wasm +0 -0
  53. package/dist/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +3 -3
  54. package/dist/src/utils/chunkify.d.ts +7 -1
  55. package/dist/src/utils/chunkify.js +10 -3
  56. package/dist/src/utils/formatters/index.d.ts +13 -0
  57. package/dist/src/utils/formatters/index.js +74 -0
  58. package/dist/src/utils/formatters/oxfmt.d.ts +32 -0
  59. package/dist/src/utils/formatters/oxfmt.js +764 -0
  60. package/dist/src/utils/formatters/prettier.d.ts +26 -0
  61. package/dist/src/utils/formatters/prettier.js +201 -0
  62. package/dist/src/utils/formatters/shared.d.ts +5 -0
  63. package/dist/src/utils/formatters/shared.js +8 -0
  64. package/dist/src/utils/ignore.d.ts +47 -5
  65. package/dist/src/utils/ignore.js +93 -11
  66. package/dist/src/utils/write-formatted-json-file.d.ts +3 -2
  67. package/dist/src/utils/write-formatted-json-file.js +5 -4
  68. package/package.json +11 -11
  69. package/dist/src/generators/internal-utils/format-changed-files-with-prettier-if-available.js +0 -88
  70. package/dist/src/utils/is-using-prettier.d.ts +0 -3
  71. package/dist/src/utils/is-using-prettier.js +0 -62
@@ -0,0 +1,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.recordInitWrite = recordInitWrite;
4
+ exports.formatInitWrites = formatInitWrites;
5
+ const tslib_1 = require("tslib");
6
+ const node_fs_1 = require("node:fs");
7
+ const path = tslib_1.__importStar(require("node:path"));
8
+ const chunkify_1 = require("../../../utils/chunkify");
9
+ const formatters_1 = require("../../../utils/formatters");
10
+ const oxfmt_1 = require("../../../utils/formatters/oxfmt");
11
+ const prettier_1 = require("../../../utils/formatters/prettier");
12
+ const output_1 = require("../../../utils/output");
13
+ /**
14
+ * Paths `nx init` has created or modified.
15
+ *
16
+ * Module state because init's flows write from many call sites across
17
+ * several files, a number behind early returns; the alternative is threading
18
+ * a collector through every one.
19
+ */
20
+ const writtenFiles = new Set();
21
+ /**
22
+ * Records a file for `formatInitWrites`. Only for files a formatter handles -
23
+ * `.gitignore` and the vendored `.nx` scripts are left out rather than
24
+ * filtered later.
25
+ *
26
+ * Two recording helpers are shared with `nx import`, which drains before each
27
+ * commit amend; draining after one would leave the formatting uncommitted.
28
+ * The drain is a no-op when empty.
29
+ */
30
+ function recordInitWrite(filePath) {
31
+ writtenFiles.add(filePath);
32
+ }
33
+ /**
34
+ * Formats what init just wrote and nothing else: an existing repo's other
35
+ * files are not init's to reformat.
36
+ *
37
+ * Never fatal - the repo is already initialised, so a formatter that cannot
38
+ * run costs a `nx format` the user can run themselves, not their setup.
39
+ */
40
+ async function formatInitWrites(repoRoot,
41
+ // `nx import` drains this set too, and a user who never ran `nx init` should
42
+ // not be told `nx init` failed.
43
+ command = 'nx init') {
44
+ const recorded = [...writtenFiles];
45
+ // Cleared unconditionally: a second init in the same process must not
46
+ // reformat the first one's files.
47
+ writtenFiles.clear();
48
+ if (process.env.NX_SKIP_FORMAT === 'true' || recorded.length === 0) {
49
+ return;
50
+ }
51
+ // Repo-relative with `repoRoot` as cwd, so paths stay short and resolve
52
+ // against the repo. That also pins oxfmt's `.editorconfig` lookup, which it
53
+ // does once from the working directory; it does not pin config discovery.
54
+ //
55
+ // De-duplicated *after* normalising: the same file is routinely recorded
56
+ // both as `'nx.json'` and as `join(repoRoot, 'nx.json')`, which are two Set
57
+ // keys for one file.
58
+ const files = [
59
+ ...new Set(recorded.map((file) => path
60
+ .relative(repoRoot, path.resolve(repoRoot, file))
61
+ .split(path.sep)
62
+ .join('/'))),
63
+ ].filter((file) => file &&
64
+ !file.startsWith('../') &&
65
+ !path.isAbsolute(file) &&
66
+ (0, node_fs_1.existsSync)(path.join(repoRoot, file)));
67
+ if (files.length === 0) {
68
+ return;
69
+ }
70
+ // `detectFormatter` reads package.json, so it belongs inside the try - a
71
+ // workspace whose package.json cannot be parsed must not fail an init that
72
+ // already finished.
73
+ //
74
+ // Chunked as `nx format` chunks: the Angular flow records a `project.json`
75
+ // per project. The prettier path is sized against its quoted length; oxfmt
76
+ // goes through execFile and gets raw paths.
77
+ let formatter = null;
78
+ try {
79
+ formatter = (0, formatters_1.detectFormatter)(repoRoot);
80
+ if (!formatter) {
81
+ return;
82
+ }
83
+ if (formatter === 'oxfmt') {
84
+ for (const chunk of (0, chunkify_1.chunkify)(files)) {
85
+ if (chunk.length) {
86
+ (0, oxfmt_1.writeWithOxfmt)(chunk, repoRoot);
87
+ }
88
+ }
89
+ }
90
+ else {
91
+ // oxfmt needs no equivalent filter - it silently skips file types it
92
+ // does not handle and exits 0. prettier still formats the rest of the
93
+ // batch, but exits 2 on one unsupported file, which would end a
94
+ // successful init with a spurious warning and prettier's own stderr.
95
+ const supported = await (0, prettier_1.filterToPrettierSupportedFiles)(files);
96
+ for (const chunk of (0, chunkify_1.chunkify)(supported, undefined, (pattern) => (0, prettier_1.quoteForShell)(pattern).length)) {
97
+ if (chunk.length) {
98
+ (0, prettier_1.writeWithPrettier)(chunk, repoRoot);
99
+ }
100
+ }
101
+ }
102
+ }
103
+ catch (e) {
104
+ output_1.output.warn({
105
+ title: formatter
106
+ ? `Could not format the files ${command} wrote with ${formatter}.`
107
+ : `Could not work out which formatter to use for the files ${command} wrote.`,
108
+ bodyLines: [
109
+ ...(e?.message ? [e.message] : []),
110
+ 'Run "nx format:write" to format them.',
111
+ ],
112
+ });
113
+ }
114
+ }
@@ -26,6 +26,7 @@ const acknowledge_build_scripts_1 = require("../../../utils/acknowledge-build-sc
26
26
  const path_2 = require("../../../utils/path");
27
27
  const versions_1 = require("../../../utils/versions");
28
28
  const fs_1 = require("fs");
29
+ const format_1 = require("./format");
29
30
  const connect_to_nx_cloud_1 = require("../../../nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud");
30
31
  const connect_to_nx_cloud_2 = require("../../nx-cloud/connect/connect-to-nx-cloud");
31
32
  const deduce_default_base_1 = require("./deduce-default-base");
@@ -71,6 +72,7 @@ function createNxJsonFile(repoRoot, topologicalTargets, cacheableOperations, scr
71
72
  nxJson.defaultBase ??= defaultBase;
72
73
  }
73
74
  (0, fileutils_1.writeJsonFile)(nxJsonPath, nxJson);
75
+ (0, format_1.recordInitWrite)(nxJsonPath);
74
76
  }
75
77
  /**
76
78
  * Locate-by-target upsert against an in-memory `targetDefaults` map. Merges
@@ -221,6 +223,7 @@ function addDepsToPackageJson(repoRoot, packageManager, additionalPackages) {
221
223
  }
222
224
  }
223
225
  (0, fileutils_1.writeJsonFile)(path, json);
226
+ (0, format_1.recordInitWrite)(path);
224
227
  // nx has a postinstall script, which pnpm 11+ refuses to install
225
228
  // unacknowledged.
226
229
  (0, acknowledge_build_scripts_1.acknowledgeBuildScripts)(repoRoot, packageManager, { nx: true });
@@ -351,6 +354,7 @@ function setNeverConnectToCloud(repoRoot) {
351
354
  const nxJson = (0, fileutils_1.readJsonFile)(nxJsonPath);
352
355
  nxJson.neverConnectToCloud = true;
353
356
  (0, fileutils_1.writeJsonFile)(nxJsonPath, nxJson);
357
+ (0, format_1.recordInitWrite)(nxJsonPath);
354
358
  }
355
359
  function addVsCodeRecommendedExtensions(repoRoot, extensions) {
356
360
  const vsCodeExtensionsPath = (0, path_1.join)(repoRoot, '.vscode/extensions.json');
@@ -363,9 +367,11 @@ function addVsCodeRecommendedExtensions(repoRoot, extensions) {
363
367
  }
364
368
  });
365
369
  (0, fileutils_1.writeJsonFile)(vsCodeExtensionsPath, vsCodeExtensionsJson);
370
+ (0, format_1.recordInitWrite)(vsCodeExtensionsPath);
366
371
  }
367
372
  else {
368
373
  (0, fileutils_1.writeJsonFile)(vsCodeExtensionsPath, { recommendations: extensions });
374
+ (0, format_1.recordInitWrite)(vsCodeExtensionsPath);
369
375
  }
370
376
  }
371
377
  function markRootPackageJsonAsNxProjectLegacy(repoRoot, cacheableScripts, pmc) {
@@ -386,6 +392,7 @@ function markRootPackageJsonAsNxProjectLegacy(repoRoot, cacheableScripts, pmc) {
386
392
  }
387
393
  }
388
394
  (0, fileutils_1.writeJsonFile)(`package.json`, json);
395
+ (0, format_1.recordInitWrite)('package.json');
389
396
  }
390
397
  function markPackageJsonAsNxProject(packageJsonPath) {
391
398
  const json = (0, fileutils_1.readJsonFile)(packageJsonPath);
@@ -394,6 +401,7 @@ function markPackageJsonAsNxProject(packageJsonPath) {
394
401
  }
395
402
  json.nx = {};
396
403
  (0, fileutils_1.writeJsonFile)(packageJsonPath, json);
404
+ (0, format_1.recordInitWrite)(packageJsonPath);
397
405
  }
398
406
  function printFinalMessage({ learnMoreLink, appendLines, }) {
399
407
  output_1.output.success({
@@ -14,6 +14,7 @@ const child_process_2 = require("../../utils/child-process");
14
14
  const fileutils_1 = require("../../utils/fileutils");
15
15
  const versions_1 = require("../../utils/versions");
16
16
  const utils_1 = require("./implementation/utils");
17
+ const format_1 = require("./implementation/format");
17
18
  async function initHandler(options) {
18
19
  // strip the 'init' command itself so we don't forward it
19
20
  const args = process.argv.slice(3).join(' ');
@@ -23,11 +24,13 @@ async function initHandler(options) {
23
24
  }
24
25
  if (options.useDotNxInstallation === true) {
25
26
  setupDotNxInstallation(version);
27
+ await (0, format_1.formatInitWrites)(process.cwd());
26
28
  }
27
29
  else if ((0, fs_1.existsSync)('package.json')) {
28
30
  const packageJson = (0, fileutils_1.readJsonFile)('package.json');
29
31
  if ((0, fs_1.existsSync)('angular.json')) {
30
32
  await (0, angular_1.addNxToAngularCliRepo)(options);
33
+ await (0, format_1.formatInitWrites)(process.cwd());
31
34
  (0, utils_1.printFinalMessage)({
32
35
  learnMoreLink: 'https://nx.dev/recipes/angular/migration/angular',
33
36
  });
@@ -35,6 +38,7 @@ async function initHandler(options) {
35
38
  }
36
39
  else if (isNestCLI(packageJson)) {
37
40
  await (0, add_nx_to_nest_1.addNxToNest)(options, packageJson);
41
+ await (0, format_1.formatInitWrites)(process.cwd());
38
42
  (0, utils_1.printFinalMessage)({
39
43
  learnMoreLink: 'https://nx.dev/recipes/adopting-nx/adding-to-monorepo',
40
44
  });
@@ -42,12 +46,14 @@ async function initHandler(options) {
42
46
  }
43
47
  else if ((0, utils_1.isMonorepo)(packageJson)) {
44
48
  await (0, add_nx_to_monorepo_1.addNxToMonorepo)({ ...options, legacy: true });
49
+ await (0, format_1.formatInitWrites)(process.cwd());
45
50
  (0, utils_1.printFinalMessage)({
46
51
  learnMoreLink: 'https://nx.dev/recipes/adopting-nx/adding-to-monorepo',
47
52
  });
48
53
  }
49
54
  else {
50
55
  await (0, add_nx_to_npm_repo_1.addNxToNpmRepo)({ ...options, legacy: true });
56
+ await (0, format_1.formatInitWrites)(process.cwd());
51
57
  (0, utils_1.printFinalMessage)({
52
58
  learnMoreLink: 'https://nx.dev/recipes/adopting-nx/adding-to-existing-project',
53
59
  });
@@ -63,6 +69,7 @@ async function initHandler(options) {
63
69
  })) === 'true';
64
70
  if (useDotNxFolder) {
65
71
  setupDotNxInstallation(version);
72
+ await (0, format_1.formatInitWrites)(process.cwd());
66
73
  }
67
74
  else {
68
75
  (0, child_process_1.execSync)(`npx --yes create-nx-workspace@${version} ${args}`, {
@@ -20,6 +20,7 @@ const configure_plugins_1 = require("./configure-plugins");
20
20
  const ai_agent_prompts_1 = require("./ai-agent-prompts");
21
21
  const set_up_ai_agents_1 = require("../../ai/set-up-ai-agents/set-up-ai-agents");
22
22
  const tree_1 = require("../../generators/tree");
23
+ const format_1 = require("./implementation/format");
23
24
  const add_nx_to_monorepo_1 = require("./implementation/add-nx-to-monorepo");
24
25
  const add_nx_to_npm_repo_1 = require("./implementation/add-nx-to-npm-repo");
25
26
  const add_nx_to_turborepo_1 = require("./implementation/add-nx-to-turborepo");
@@ -148,6 +149,7 @@ async function runInit(options, baseMeta) {
148
149
  ...options,
149
150
  integrated: !!options.integrated,
150
151
  });
152
+ await (0, format_1.formatInitWrites)(process.cwd());
151
153
  (0, utils_1.printFinalMessage)({
152
154
  learnMoreLink: 'https://nx.dev/technologies/angular/migration/angular',
153
155
  });
@@ -180,6 +182,7 @@ async function runInit(options, baseMeta) {
180
182
  version: '0.0.0',
181
183
  private: true,
182
184
  });
185
+ (0, format_1.recordInitWrite)('package.json');
183
186
  }
184
187
  else {
185
188
  options.useDotNxInstallation = true;
@@ -213,6 +216,7 @@ async function runInit(options, baseMeta) {
213
216
  await (0, add_nx_to_turborepo_1.addNxToTurborepo)({
214
217
  interactive: options.interactive,
215
218
  });
219
+ await (0, format_1.formatInitWrites)(process.cwd());
216
220
  (0, utils_1.printFinalMessage)({
217
221
  learnMoreLink: 'https://nx.dev/recipes/adopting-nx/from-turborepo',
218
222
  });
@@ -287,6 +291,9 @@ async function runInit(options, baseMeta) {
287
291
  reason: getPluginReason(name),
288
292
  }));
289
293
  (0, ai_output_1.logProgress)('detecting', `Detected ${detectedPluginNames.length} plugin(s): ${detectedPluginNames.join(', ')}`);
294
+ // This path exits without reaching the drain below, and `nx.json` has
295
+ // already been written by now.
296
+ await (0, format_1.formatInitWrites)(repoRoot);
290
297
  (0, ai_output_1.writeAiOutput)((0, ai_output_1.buildNeedsInputResult)(detectedPlugins));
291
298
  process.exit(0);
292
299
  }
@@ -365,6 +372,10 @@ async function runInit(options, baseMeta) {
365
372
  pluginsInstalled: pluginsToInstall.join(','),
366
373
  },
367
374
  });
375
+ // Before the AI record, not after: the formatters write to stdout
376
+ // (`--list-different`, oxfmt's summary), which would otherwise land after the
377
+ // NDJSON result and corrupt the tail an agent parses.
378
+ await (0, format_1.formatInitWrites)(repoRoot);
368
379
  // Output success result for AI agents
369
380
  if (aiMode) {
370
381
  (0, ai_output_1.writeAiOutput)((0, ai_output_1.buildSuccessResult)({
@@ -65,6 +65,8 @@ export declare class Migrator {
65
65
  private readonly packageUpdates;
66
66
  private readonly collectedVersions;
67
67
  private readonly promptAnswers;
68
+ private readonly pendingPackageJsonUpdates;
69
+ private readonly appliedPackageJsonUpdates;
68
70
  private readonly nxInstallation;
69
71
  private minVersionWithSkippedUpdates;
70
72
  constructor(opts: MigratorOptions);
@@ -87,6 +89,8 @@ export declare class Migrator {
87
89
  }>;
88
90
  private createMigrateJson;
89
91
  private buildPackageJsonUpdates;
92
+ private applyPackageJsonUpdate;
93
+ private applyPendingPackageJsonUpdates;
90
94
  private resolveVersionForCascade;
91
95
  private populatePackageJsonUpdatesAndGetPackagesToCheck;
92
96
  private getPackageJsonUpdatesFromMigrationConfig;
@@ -47,7 +47,7 @@ const configuration_1 = require("../../config/configuration");
47
47
  const child_process_2 = require("../../utils/child-process");
48
48
  const client_1 = require("../../daemon/client/client");
49
49
  const nx_cloud_utils_1 = require("../../utils/nx-cloud-utils");
50
- const format_changed_files_with_prettier_if_available_1 = require("../../generators/internal-utils/format-changed-files-with-prettier-if-available");
50
+ const format_changed_files_1 = require("../../generators/internal-utils/format-changed-files");
51
51
  const provenance_1 = require("../../utils/provenance");
52
52
  const catalog_1 = require("../../utils/catalog");
53
53
  const migrate_analytics_1 = require("./migrate-analytics");
@@ -113,6 +113,8 @@ class Migrator {
113
113
  this.packageUpdates = {};
114
114
  this.collectedVersions = {};
115
115
  this.promptAnswers = {};
116
+ this.pendingPackageJsonUpdates = new Map();
117
+ this.appliedPackageJsonUpdates = new Set();
116
118
  if ((opts.include === 'required' || opts.include === 'optional') &&
117
119
  !opts.requiredPackages) {
118
120
  throw new Error(`Error: 'requiredPackages' is required when 'include' is '${opts.include}'.`);
@@ -140,6 +142,7 @@ class Migrator {
140
142
  version: targetVersion,
141
143
  addToPackageJson: false,
142
144
  });
145
+ await this.applyPendingPackageJsonUpdates();
143
146
  this.applyIncludeFilter();
144
147
  const { migrations, promptContents } = await this.createMigrateJson();
145
148
  return {
@@ -185,29 +188,66 @@ class Migrator {
185
188
  for (const packageToCheck of packagesToCheck) {
186
189
  const filteredUpdates = {};
187
190
  for (const [packageUpdateKey, packageUpdate] of Object.entries(packageToCheck.updates)) {
188
- if (this.areRequirementsMet(packageUpdate.requires) &&
189
- !this.areIncompatiblePackagesPresent(packageUpdate.incompatibleWith) &&
190
- (!this.interactive ||
191
- (await this.runPackageJsonUpdatesConfirmationPrompt(packageUpdate, packageUpdateKey, packageToCheck.package)))) {
192
- const updateEntries = Object.entries(packageUpdate.packages);
193
- // Validate all up front so invalid metadata fails fast, before any
194
- // resolution does I/O.
195
- for (const [name, update] of updateEntries) {
196
- this.validatePackageUpdateVersion(packageToCheck.package, name, update);
197
- }
198
- // Resolve serially: resolution can prompt (pnpm strict cooldown) and
199
- // append to minimumReleaseAgeExclude, so a serial loop avoids
200
- // overlapping prompts and keeps packageUpdates ordering stable.
201
- for (const [name, update] of updateEntries) {
202
- const resolvedUpdate = {
203
- ...update,
204
- version: await this.resolveVersionForCascade(name, update.version),
205
- };
206
- filteredUpdates[name] = resolvedUpdate;
207
- this.packageUpdates[name] = resolvedUpdate;
208
- }
191
+ Object.assign(filteredUpdates, await this.applyPackageJsonUpdate(packageToCheck.package, packageUpdateKey, packageUpdate));
192
+ }
193
+ await Promise.all(Object.entries(filteredUpdates).map(([name, update]) => this.buildPackageJsonUpdates(name, update)));
194
+ }
195
+ }
196
+ async applyPackageJsonUpdate(sourcePackage, packageUpdateKey, packageUpdate) {
197
+ const appliedKey = JSON.stringify([sourcePackage, packageUpdateKey]);
198
+ if (this.appliedPackageJsonUpdates.has(appliedKey)) {
199
+ this.pendingPackageJsonUpdates.delete(appliedKey);
200
+ return {};
201
+ }
202
+ if (!this.areRequirementsMet(packageUpdate.requires) ||
203
+ this.areIncompatiblePackagesPresent(packageUpdate.incompatibleWith)) {
204
+ this.pendingPackageJsonUpdates.set(appliedKey, {
205
+ package: sourcePackage,
206
+ key: packageUpdateKey,
207
+ update: packageUpdate,
208
+ });
209
+ return {};
210
+ }
211
+ this.pendingPackageJsonUpdates.delete(appliedKey);
212
+ if (this.interactive &&
213
+ !(await this.runPackageJsonUpdatesConfirmationPrompt(packageUpdate, packageUpdateKey, sourcePackage))) {
214
+ return {};
215
+ }
216
+ this.appliedPackageJsonUpdates.add(appliedKey);
217
+ const updateEntries = Object.entries(packageUpdate.packages);
218
+ // Validate all up front so invalid metadata fails fast, before any
219
+ // resolution does I/O.
220
+ for (const [name, update] of updateEntries) {
221
+ this.validatePackageUpdateVersion(sourcePackage, name, update);
222
+ }
223
+ const filteredUpdates = {};
224
+ // Resolve serially: resolution can prompt (pnpm strict cooldown) and append
225
+ // to minimumReleaseAgeExclude, so a serial loop avoids overlapping prompts
226
+ // and keeps packageUpdates ordering stable.
227
+ for (const [name, update] of updateEntries) {
228
+ const resolvedUpdate = {
229
+ ...update,
230
+ version: await this.resolveVersionForCascade(name, update.version),
231
+ };
232
+ this.addPackageUpdate(name, resolvedUpdate);
233
+ filteredUpdates[name] = this.packageUpdates[name];
234
+ }
235
+ return filteredUpdates;
236
+ }
237
+ async applyPendingPackageJsonUpdates() {
238
+ while (this.pendingPackageJsonUpdates.size) {
239
+ let applied = false;
240
+ const filteredUpdates = {};
241
+ for (const pending of [...this.pendingPackageJsonUpdates.values()]) {
242
+ const updates = await this.applyPackageJsonUpdate(pending.package, pending.key, pending.update);
243
+ if (Object.keys(updates).length) {
244
+ applied = true;
245
+ Object.assign(filteredUpdates, updates);
209
246
  }
210
247
  }
248
+ if (!applied) {
249
+ return;
250
+ }
211
251
  await Promise.all(Object.entries(filteredUpdates).map(([name, update]) => this.buildPackageJsonUpdates(name, update)));
212
252
  }
213
253
  }
@@ -411,7 +451,7 @@ class Migrator {
411
451
  }
412
452
  addPackageUpdate(name, packageUpdate) {
413
453
  if (!this.packageUpdates[name] ||
414
- this.gt(packageUpdate.version, this.packageUpdates[name].version)) {
454
+ !this.lt(packageUpdate.version, this.packageUpdates[name].version)) {
415
455
  this.packageUpdates[name] = packageUpdate;
416
456
  }
417
457
  }
@@ -1387,7 +1427,7 @@ async function formatCatalogDefinitionFiles(manager, root) {
1387
1427
  content: (0, fs_1.readFileSync)(absolutePath, 'utf-8'),
1388
1428
  };
1389
1429
  });
1390
- const results = await (0, format_changed_files_with_prettier_if_available_1.formatFilesWithPrettierIfAvailable)(catalogDefinitionFiles.map(({ path, content }) => ({ path, content })), root, { silent: true });
1430
+ const results = await (0, format_changed_files_1.formatFileContents)(catalogDefinitionFiles.map(({ path, content }) => ({ path, content })), root, { silent: true });
1391
1431
  for (const { path, absolutePath, content } of catalogDefinitionFiles) {
1392
1432
  (0, fs_1.writeFileSync)(absolutePath, results.has(path) ? results.get(path) : content, { encoding: 'utf-8' });
1393
1433
  }
@@ -9,7 +9,7 @@ const node_child_process_1 = require("node:child_process");
9
9
  const node_fs_1 = require("node:fs");
10
10
  const nx_json_1 = require("../../config/nx-json");
11
11
  const run_commands_impl_1 = require("../../executors/run-commands/run-commands.impl");
12
- const format_changed_files_with_prettier_if_available_1 = require("../../generators/internal-utils/format-changed-files-with-prettier-if-available");
12
+ const format_changed_files_1 = require("../../generators/internal-utils/format-changed-files");
13
13
  const tree_1 = require("../../generators/tree");
14
14
  const file_map_utils_1 = require("../../project-graph/file-map-utils");
15
15
  const project_graph_1 = require("../../project-graph/project-graph");
@@ -178,7 +178,7 @@ function createAPI(overrideReleaseConfig, ignoreNxJsonConfig) {
178
178
  const manifestsToExcludeFromFormatting = new Set(Array.from(releaseGraph.projectsToVersionActions.values()).flatMap((versionActions) => versionActions.excludeManifestsFromFormatting
179
179
  ? versionActions.manifestsToUpdate.map(({ manifestPath }) => manifestPath)
180
180
  : []));
181
- await (0, format_changed_files_with_prettier_if_available_1.formatChangedFilesWithPrettierIfAvailable)(tree, {
181
+ await (0, format_changed_files_1.formatChangedFiles)(tree, {
182
182
  silent: true,
183
183
  excludePaths: manifestsToExcludeFromFormatting,
184
184
  });
@@ -180,12 +180,21 @@ class DaemonClient {
180
180
  return await this.sendToDaemonViaQueue({ type: 'REQUEST_FILE_DATA' });
181
181
  }
182
182
  hashTasks(runnerOptions, tasks, taskGraph, perTaskEnvs, cwd, collectInputs) {
183
+ // Task results get written back onto these task objects as the run
184
+ // progresses — hash/hashDetails/timestamps by hashing and the
185
+ // orchestrator, terminalOutput by the Nx Cloud life cycle (untyped) —
186
+ // so a later message would otherwise re-ship every earlier result.
187
+ const trimmedTasks = {};
188
+ for (const [id, t] of Object.entries(taskGraph.tasks)) {
189
+ const { hash, hashDetails, startTime, endTime, terminalOutput, ...strippedTask } = t;
190
+ trimmedTasks[id] = strippedTask;
191
+ }
183
192
  return this.sendToDaemonViaQueue({
184
193
  type: 'HASH_TASKS',
185
194
  runnerOptions,
186
195
  perTaskEnvs,
187
- tasks,
188
- taskGraph,
196
+ tasks: tasks.map((t) => trimmedTasks[t.id]),
197
+ taskGraph: { ...taskGraph, tasks: trimmedTasks },
189
198
  cwd,
190
199
  collectInputs,
191
200
  });
@@ -27,7 +27,7 @@ export { readProjectConfigurationsFromRootMap } from './project-graph/utils/proj
27
27
  export { findMatchingConfigFiles } from './project-graph/utils/project-configuration-utils';
28
28
  export { findMatchingProjects } from './utils/find-matching-projects';
29
29
  export { readTargetDefaultsForTarget } from './project-graph/utils/project-configuration/target-defaults';
30
- export { createGitIgnoreChecker, createPrettierIgnoreChecker, type TreeIgnoreChecker, } from './utils/ignore';
30
+ export { createGitIgnoreChecker, createOxfmtIgnoreChecker, createPrettierIgnoreChecker, type TreeIgnoreChecker, } from './utils/ignore';
31
31
  export { splitTarget } from './utils/split-target';
32
32
  export { selectPrompt, multiselectPrompt, textPrompt, confirmationPrompt, type Choice as PromptChoice, } from './utils/prompt-helpers';
33
33
  export { combineOptionsForExecutor } from './utils/params';
@@ -44,7 +44,10 @@ export * from './project-graph/error-types';
44
44
  export { registerTsProject, loadTsFile, forceRegisterEsmLoader, requireWithTsconfigFallback, } from './plugins/js/utils/register';
45
45
  export { interpolate } from './tasks-runner/utils';
46
46
  export { isCI } from './utils/is-ci';
47
- export { isUsingPrettierInTree } from './utils/is-using-prettier';
47
+ export { isUsingPrettierInTree, prettierConfigFiles, } from './utils/formatters/prettier';
48
+ export { detectFormatter, detectFormatterInTree } from './utils/formatters';
49
+ export type { FormatterType } from './utils/formatters';
50
+ export { formatFilesWithOxfmt, oxfmtConfigFiles, } from './utils/formatters/oxfmt';
48
51
  export { readYamlFile } from './utils/fileutils';
49
52
  export { globalSpinner } from './utils/spinner';
50
53
  export { signalToCode } from './utils/exit-codes';
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ImplementationResolutionError = exports.resolveSchema = exports.resolveImplementation = exports.emitPluginWorkerLog = exports.safeWriteFileCache = exports.PluginCache = exports.handleImport = exports.signalToCode = exports.globalSpinner = exports.readYamlFile = exports.isUsingPrettierInTree = exports.isCI = exports.interpolate = exports.requireWithTsconfigFallback = exports.forceRegisterEsmLoader = exports.loadTsFile = exports.registerTsProject = exports.LoadedNxPlugin = exports.retrieveProjectConfigurations = exports.findProjectForPath = exports.createProjectRootMappings = exports.createProjectRootMappingsFromProjectConfigurations = exports.hashMultiGlobWithWorkspaceContext = exports.hashWithWorkspaceContext = exports.hashObject = exports.splitByColons = exports.installPackageToTmpAsync = exports.installPackageToTmp = exports.readModulePackageJson = exports.stripIndent = exports.sortObjectByKeys = exports.combineOptionsForExecutor = exports.confirmationPrompt = exports.textPrompt = exports.multiselectPrompt = exports.selectPrompt = exports.splitTarget = exports.createPrettierIgnoreChecker = exports.createGitIgnoreChecker = exports.readTargetDefaultsForTarget = exports.findMatchingProjects = exports.findMatchingConfigFiles = exports.readProjectConfigurationsFromRootMap = exports.mergeTargetConfigurations = exports.retrieveProjectConfigurationsWithAngularProjects = exports.calculateDefaultProjectName = exports.readNxJsonFromDisk = exports.parseExecutor = exports.getExecutorInformation = exports.createTempNpmDirectory = void 0;
4
- exports.isWholeFileChange = exports.isLockFileChange = exports.isDeletedFileChange = exports.defaultFileRead = exports.calculateFileChanges = exports.WholeFileChange = exports.TEN_MEGABYTES = exports.LockFileChange = exports.DeletedFileChange = exports.buildPackageJsonWorkspacesMatcher = exports.buildPackageJsonPatterns = exports.getGlobPatternsFromPackageManagerWorkspaces = exports.registerTsConfigPaths = exports.getWorkspacePackagesFromGraph = exports.isBuiltinModuleImport = exports.TargetProjectLocator = exports.findProjectsNpmDependencies = exports.createPackageJson = exports.getLockFileName = exports.createLockFile = exports.createNxCloudOnboardingURL = exports.getNxCloudAppOnBoardingUrl = exports.createNxCloudOnboardingURLForWelcomeApp = exports.connectToNxCloud = exports.killProcessTreeGraceful = exports.getTargetInputs = exports.filterUsingGlobPatterns = exports.hashFile = exports.getRelativeProjectJsonSchemaPath = exports.FsTree = exports.LARGE_BUFFER = exports.daemonClient = exports.isProjectGraphProjectNode = exports.isProjectGraphExternalNode = exports.fileDataDepType = exports.fileDataDepTarget = exports.BatchFunctionRunner = exports.getGeneratorInformation = exports.setupAiAgentsGenerator = exports.toOldFormat = exports.toNewFormat = exports.runCommandsExecutor = exports.acknowledgeBuildScripts = exports.getCatalogDependenciesFromPackageJson = exports.getCatalogManager = exports.checkFilesAreOutputs = exports.checkFilesAreInputs = exports.PromptResolutionError = exports.resolvePrompt = exports.SchemaResolutionError = void 0;
5
- exports.getNxRequirePaths = exports.combineGlobPatterns = exports.getLatestCommitSha = exports.readFileIfExisting = exports.isRelativePath = exports.fileExists = exports.directoryExists = exports.createDirectory = exports.deduceDefaultBase = exports.codeFrameColumns = exports.runNxSync = exports.workspaceDataDirectory = exports.getLastValueFromAsyncIterableIterator = exports.validateOutputs = exports.unparse = exports.transformLegacyOutputs = exports.shouldStreamOutput = exports.removeTasksFromTaskGraph = exports.readProjectAndTargetFromTargetString = exports.normalizeTargetDependencyWithStringProjects = exports.normalizeDependencyConfigProjects = exports.normalizeDependencyConfigDefinition = exports.isCacheableTask = exports.getUnparsedOverrideArgs = exports.getTargetConfigurationForTask = exports.getSerializedArgsForTask = exports.getPrintableCommandArgsForTask = exports.getOutputs = exports.getExecutorNameForTask = exports.getExecutorForTask = exports.getDependencyConfigs = exports.getCustomHasher = exports.getCliPath = exports.expandWildcardTargetConfiguration = exports.expandInitiatingTasksThroughNoop = exports.expandDependencyConfigSyntaxSugar = exports.createTaskId = exports.calculateReverseDeps = exports.createRunManyDynamicOutputRenderer = exports.CompositeLifeCycle = exports.RemoteCacheV2 = exports.Cache = exports.readCachedProjectConfiguration = exports.preventRecursionInGraphConstruction = exports.handleProjectGraphError = exports.createProjectGraphAndSourceMapsAsync = exports.buildProjectGraphAndSourceMapsWithoutDaemon = exports.isNpmProject = exports.readFileMapCache = exports.readPackageJson = void 0;
6
- exports.safeSpawn = exports.safeExecFileSync = exports.workspaceRootInner = exports.setWorkspaceRoot = exports.setupWorkspaceContext = exports.resetWorkspaceContext = exports.globWithWorkspaceContext = exports.getFilesInDirectoryUsingContext = exports.nxVersion = exports.SyncError = exports.getSourceDirOfDependentProjects = exports.findAllProjectNodeDependencies = exports.findInstalledPlugins = exports.deriveGroupNameFromTarget = exports.readNxMigrateConfig = exports.isNxCloudUsed = exports.getNxCloudUrl = exports.orange = exports.NX_PREFIX = void 0;
3
+ exports.handleImport = exports.signalToCode = exports.globalSpinner = exports.readYamlFile = exports.oxfmtConfigFiles = exports.formatFilesWithOxfmt = exports.detectFormatterInTree = exports.detectFormatter = exports.prettierConfigFiles = exports.isUsingPrettierInTree = exports.isCI = exports.interpolate = exports.requireWithTsconfigFallback = exports.forceRegisterEsmLoader = exports.loadTsFile = exports.registerTsProject = exports.LoadedNxPlugin = exports.retrieveProjectConfigurations = exports.findProjectForPath = exports.createProjectRootMappings = exports.createProjectRootMappingsFromProjectConfigurations = exports.hashMultiGlobWithWorkspaceContext = exports.hashWithWorkspaceContext = exports.hashObject = exports.splitByColons = exports.installPackageToTmpAsync = exports.installPackageToTmp = exports.readModulePackageJson = exports.stripIndent = exports.sortObjectByKeys = exports.combineOptionsForExecutor = exports.confirmationPrompt = exports.textPrompt = exports.multiselectPrompt = exports.selectPrompt = exports.splitTarget = exports.createPrettierIgnoreChecker = exports.createOxfmtIgnoreChecker = exports.createGitIgnoreChecker = exports.readTargetDefaultsForTarget = exports.findMatchingProjects = exports.findMatchingConfigFiles = exports.readProjectConfigurationsFromRootMap = exports.mergeTargetConfigurations = exports.retrieveProjectConfigurationsWithAngularProjects = exports.calculateDefaultProjectName = exports.readNxJsonFromDisk = exports.parseExecutor = exports.getExecutorInformation = exports.createTempNpmDirectory = void 0;
4
+ exports.TEN_MEGABYTES = exports.LockFileChange = exports.DeletedFileChange = exports.buildPackageJsonWorkspacesMatcher = exports.buildPackageJsonPatterns = exports.getGlobPatternsFromPackageManagerWorkspaces = exports.registerTsConfigPaths = exports.getWorkspacePackagesFromGraph = exports.isBuiltinModuleImport = exports.TargetProjectLocator = exports.findProjectsNpmDependencies = exports.createPackageJson = exports.getLockFileName = exports.createLockFile = exports.createNxCloudOnboardingURL = exports.getNxCloudAppOnBoardingUrl = exports.createNxCloudOnboardingURLForWelcomeApp = exports.connectToNxCloud = exports.killProcessTreeGraceful = exports.getTargetInputs = exports.filterUsingGlobPatterns = exports.hashFile = exports.getRelativeProjectJsonSchemaPath = exports.FsTree = exports.LARGE_BUFFER = exports.daemonClient = exports.isProjectGraphProjectNode = exports.isProjectGraphExternalNode = exports.fileDataDepType = exports.fileDataDepTarget = exports.BatchFunctionRunner = exports.getGeneratorInformation = exports.setupAiAgentsGenerator = exports.toOldFormat = exports.toNewFormat = exports.runCommandsExecutor = exports.acknowledgeBuildScripts = exports.getCatalogDependenciesFromPackageJson = exports.getCatalogManager = exports.checkFilesAreOutputs = exports.checkFilesAreInputs = exports.PromptResolutionError = exports.resolvePrompt = exports.SchemaResolutionError = exports.ImplementationResolutionError = exports.resolveSchema = exports.resolveImplementation = exports.emitPluginWorkerLog = exports.safeWriteFileCache = exports.PluginCache = void 0;
5
+ exports.directoryExists = exports.createDirectory = exports.deduceDefaultBase = exports.codeFrameColumns = exports.runNxSync = exports.workspaceDataDirectory = exports.getLastValueFromAsyncIterableIterator = exports.validateOutputs = exports.unparse = exports.transformLegacyOutputs = exports.shouldStreamOutput = exports.removeTasksFromTaskGraph = exports.readProjectAndTargetFromTargetString = exports.normalizeTargetDependencyWithStringProjects = exports.normalizeDependencyConfigProjects = exports.normalizeDependencyConfigDefinition = exports.isCacheableTask = exports.getUnparsedOverrideArgs = exports.getTargetConfigurationForTask = exports.getSerializedArgsForTask = exports.getPrintableCommandArgsForTask = exports.getOutputs = exports.getExecutorNameForTask = exports.getExecutorForTask = exports.getDependencyConfigs = exports.getCustomHasher = exports.getCliPath = exports.expandWildcardTargetConfiguration = exports.expandInitiatingTasksThroughNoop = exports.expandDependencyConfigSyntaxSugar = exports.createTaskId = exports.calculateReverseDeps = exports.createRunManyDynamicOutputRenderer = exports.CompositeLifeCycle = exports.RemoteCacheV2 = exports.Cache = exports.readCachedProjectConfiguration = exports.preventRecursionInGraphConstruction = exports.handleProjectGraphError = exports.createProjectGraphAndSourceMapsAsync = exports.buildProjectGraphAndSourceMapsWithoutDaemon = exports.isNpmProject = exports.readFileMapCache = exports.readPackageJson = exports.isWholeFileChange = exports.isLockFileChange = exports.isDeletedFileChange = exports.defaultFileRead = exports.calculateFileChanges = exports.WholeFileChange = void 0;
6
+ exports.safeSpawn = exports.safeExecFileSync = exports.workspaceRootInner = exports.setWorkspaceRoot = exports.setupWorkspaceContext = exports.resetWorkspaceContext = exports.globWithWorkspaceContext = exports.getFilesInDirectoryUsingContext = exports.nxVersion = exports.SyncError = exports.getSourceDirOfDependentProjects = exports.findAllProjectNodeDependencies = exports.findInstalledPlugins = exports.deriveGroupNameFromTarget = exports.readNxMigrateConfig = exports.isNxCloudUsed = exports.getNxCloudUrl = exports.orange = exports.NX_PREFIX = exports.getNxRequirePaths = exports.combineGlobPatterns = exports.getLatestCommitSha = exports.readFileIfExisting = exports.isRelativePath = exports.fileExists = void 0;
7
7
  const tslib_1 = require("tslib");
8
8
  /**
9
9
  * Note to developers: STOP! These are nx internals, not part of the public
@@ -52,6 +52,7 @@ Object.defineProperty(exports, "readTargetDefaultsForTarget", { enumerable: true
52
52
  // them.
53
53
  var ignore_1 = require("./utils/ignore");
54
54
  Object.defineProperty(exports, "createGitIgnoreChecker", { enumerable: true, get: function () { return ignore_1.createGitIgnoreChecker; } });
55
+ Object.defineProperty(exports, "createOxfmtIgnoreChecker", { enumerable: true, get: function () { return ignore_1.createOxfmtIgnoreChecker; } });
55
56
  Object.defineProperty(exports, "createPrettierIgnoreChecker", { enumerable: true, get: function () { return ignore_1.createPrettierIgnoreChecker; } });
56
57
  var split_target_1 = require("./utils/split-target");
57
58
  Object.defineProperty(exports, "splitTarget", { enumerable: true, get: function () { return split_target_1.splitTarget; } });
@@ -95,8 +96,15 @@ var utils_1 = require("./tasks-runner/utils");
95
96
  Object.defineProperty(exports, "interpolate", { enumerable: true, get: function () { return utils_1.interpolate; } });
96
97
  var is_ci_1 = require("./utils/is-ci");
97
98
  Object.defineProperty(exports, "isCI", { enumerable: true, get: function () { return is_ci_1.isCI; } });
98
- var is_using_prettier_1 = require("./utils/is-using-prettier");
99
- Object.defineProperty(exports, "isUsingPrettierInTree", { enumerable: true, get: function () { return is_using_prettier_1.isUsingPrettierInTree; } });
99
+ var prettier_1 = require("./utils/formatters/prettier");
100
+ Object.defineProperty(exports, "isUsingPrettierInTree", { enumerable: true, get: function () { return prettier_1.isUsingPrettierInTree; } });
101
+ Object.defineProperty(exports, "prettierConfigFiles", { enumerable: true, get: function () { return prettier_1.prettierConfigFiles; } });
102
+ var formatters_1 = require("./utils/formatters");
103
+ Object.defineProperty(exports, "detectFormatter", { enumerable: true, get: function () { return formatters_1.detectFormatter; } });
104
+ Object.defineProperty(exports, "detectFormatterInTree", { enumerable: true, get: function () { return formatters_1.detectFormatterInTree; } });
105
+ var oxfmt_1 = require("./utils/formatters/oxfmt");
106
+ Object.defineProperty(exports, "formatFilesWithOxfmt", { enumerable: true, get: function () { return oxfmt_1.formatFilesWithOxfmt; } });
107
+ Object.defineProperty(exports, "oxfmtConfigFiles", { enumerable: true, get: function () { return oxfmt_1.oxfmtConfigFiles; } });
100
108
  var fileutils_1 = require("./utils/fileutils");
101
109
  Object.defineProperty(exports, "readYamlFile", { enumerable: true, get: function () { return fileutils_1.readYamlFile; } });
102
110
  var spinner_1 = require("./utils/spinner");
@@ -1,14 +1,14 @@
1
1
  import type { Tree } from '../tree';
2
2
  /**
3
- * Formats all the created or updated files using Prettier
3
+ * Formats all the created or updated files using the configured formatter
4
4
  * @param tree - the file system tree
5
5
  *
6
6
  * @remarks
7
- * Set the environment variable `NX_SKIP_FORMAT` to `true` to skip Prettier
8
- * formatting. This is useful for repositories that use alternative formatters
9
- * like Biome, dprint, or have custom formatting requirements.
7
+ * Set the environment variable `NX_SKIP_FORMAT` to `true` to skip
8
+ * formatting. This is useful for repositories that format with a tool Nx does
9
+ * not drive (Biome, dprint) or that have custom formatting requirements.
10
10
  */
11
- export declare function formatChangedFilesWithPrettierIfAvailable(tree: Tree, options?: {
11
+ export declare function formatChangedFiles(tree: Tree, options?: {
12
12
  silent?: boolean;
13
13
  /**
14
14
  * Tree-relative paths to leave untouched. Both platform-native and
@@ -16,7 +16,7 @@ export declare function formatChangedFilesWithPrettierIfAvailable(tree: Tree, op
16
16
  */
17
17
  excludePaths?: Set<string>;
18
18
  }): Promise<void>;
19
- export declare function formatFilesWithPrettierIfAvailable(files: {
19
+ export declare function formatFileContents(files: {
20
20
  path: string;
21
21
  content: string | Buffer;
22
22
  }[], root: string, options?: {