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.
- package/dist/src/ai/set-up-ai-agents/set-up-ai-agents.js +2 -2
- package/dist/src/command-line/format/format.js +84 -101
- package/dist/src/command-line/import/import.js +12 -0
- package/dist/src/command-line/init/configure-plugins.js +4 -1
- package/dist/src/command-line/init/implementation/add-nx-to-nest.js +9 -0
- package/dist/src/command-line/init/implementation/add-nx-to-turborepo.js +3 -17
- package/dist/src/command-line/init/implementation/angular/index.js +4 -0
- package/dist/src/command-line/init/implementation/angular/legacy-angular-versions.js +2 -0
- package/dist/src/command-line/init/implementation/angular/standalone-workspace.js +8 -2
- package/dist/src/command-line/init/implementation/check-compatible-with-plugins.js +2 -0
- package/dist/src/command-line/init/implementation/dot-nx/add-nx-scripts.js +5 -0
- package/dist/src/command-line/init/implementation/format.d.ts +18 -0
- package/dist/src/command-line/init/implementation/format.js +114 -0
- package/dist/src/command-line/init/implementation/utils.js +8 -0
- package/dist/src/command-line/init/init-v1.js +7 -0
- package/dist/src/command-line/init/init-v2.js +11 -0
- package/dist/src/command-line/migrate/migrate.d.ts +4 -0
- package/dist/src/command-line/migrate/migrate.js +64 -24
- package/dist/src/command-line/release/version.js +2 -2
- package/dist/src/daemon/client/client.js +11 -2
- package/dist/src/devkit-internals.d.ts +5 -2
- package/dist/src/devkit-internals.js +14 -6
- package/dist/src/generators/internal-utils/{format-changed-files-with-prettier-if-available.d.ts → format-changed-files.d.ts} +6 -6
- package/dist/src/generators/internal-utils/format-changed-files.js +163 -0
- package/dist/src/generators/testing-utils/create-tree-with-empty-workspace.d.ts +15 -0
- package/dist/src/generators/testing-utils/create-tree-with-empty-workspace.js +21 -3
- package/dist/src/migrations/update-15-0-0/prefix-outputs.js +2 -2
- package/dist/src/migrations/update-16-0-0/remove-nrwl-cli.js +2 -2
- package/dist/src/migrations/update-16-0-0/update-depends-on-to-tokens.js +2 -2
- package/dist/src/migrations/update-16-0-0/update-nx-cloud-runner.js +2 -2
- package/dist/src/migrations/update-16-2-0/remove-run-commands-output-path.js +2 -2
- package/dist/src/migrations/update-17-0-0/rm-default-collection-npm-scope.js +2 -2
- package/dist/src/migrations/update-17-0-0/use-minimal-config-for-tasks-runner-options.js +2 -2
- package/dist/src/migrations/update-17-2-0/move-default-base.js +2 -2
- package/dist/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.js +2 -2
- package/dist/src/migrations/update-19-2-4/set-project-name.js +2 -2
- package/dist/src/migrations/update-20-0-0/move-use-daemon-process.js +2 -2
- package/dist/src/migrations/update-20-0-1/use-legacy-cache.js +2 -2
- package/dist/src/migrations/update-21-0-0/release-changelog-config-changes.js +2 -2
- package/dist/src/migrations/update-21-0-0/release-version-config-changes.js +2 -2
- package/dist/src/migrations/update-21-0-0/remove-custom-tasks-runner.js +2 -2
- package/dist/src/migrations/update-21-0-0/remove-legacy-cache.js +2 -2
- package/dist/src/migrations/update-22-0-0/consolidate-release-tag-config.js +2 -2
- package/dist/src/migrations/update-22-0-0/release-version-config-changes.js +2 -2
- package/dist/src/migrations/update-22-2-0/add-self-healing-to-gitignore.js +2 -2
- package/dist/src/migrations/update-22-6-0/add-claude-settings-local-to-git-ignore.js +2 -2
- package/dist/src/migrations/update-22-6-0/add-claude-worktrees-to-git-ignore.js +2 -2
- package/dist/src/migrations/update-22-7-0/add-polygraph-to-git-ignore.js +2 -2
- package/dist/src/migrations/update-23-0-0/add-migrate-runs-to-git-ignore.js +2 -2
- package/dist/src/migrations/update-23-2-0/set-cache-on-executor-target-defaults.js +2 -2
- package/dist/src/native/nx.wasm32-wasi.debug.wasm +0 -0
- package/dist/src/native/nx.wasm32-wasi.wasm +0 -0
- package/dist/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.js +3 -3
- package/dist/src/utils/chunkify.d.ts +7 -1
- package/dist/src/utils/chunkify.js +10 -3
- package/dist/src/utils/formatters/index.d.ts +13 -0
- package/dist/src/utils/formatters/index.js +74 -0
- package/dist/src/utils/formatters/oxfmt.d.ts +32 -0
- package/dist/src/utils/formatters/oxfmt.js +764 -0
- package/dist/src/utils/formatters/prettier.d.ts +26 -0
- package/dist/src/utils/formatters/prettier.js +201 -0
- package/dist/src/utils/formatters/shared.d.ts +5 -0
- package/dist/src/utils/formatters/shared.js +8 -0
- package/dist/src/utils/ignore.d.ts +47 -5
- package/dist/src/utils/ignore.js +93 -11
- package/dist/src/utils/write-formatted-json-file.d.ts +3 -2
- package/dist/src/utils/write-formatted-json-file.js +5 -4
- package/package.json +11 -11
- package/dist/src/generators/internal-utils/format-changed-files-with-prettier-if-available.js +0 -88
- package/dist/src/utils/is-using-prettier.d.ts +0 -3
- 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
|
|
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
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
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.
|
|
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,
|
|
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
|
|
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,
|
|
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/
|
|
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.
|
|
4
|
-
exports.
|
|
5
|
-
exports.
|
|
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
|
|
99
|
-
Object.defineProperty(exports, "isUsingPrettierInTree", { enumerable: true, get: function () { return
|
|
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
|
|
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
|
|
8
|
-
* formatting. This is useful for repositories that
|
|
9
|
-
*
|
|
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
|
|
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
|
|
19
|
+
export declare function formatFileContents(files: {
|
|
20
20
|
path: string;
|
|
21
21
|
content: string | Buffer;
|
|
22
22
|
}[], root: string, options?: {
|