nx 21.0.0-beta.0 → 21.0.0-beta.10
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/.eslintrc.json +5 -1
- package/migrations.json +5 -35
- package/package.json +12 -12
- package/release/index.d.ts +1 -1
- package/release/index.js +2 -1
- package/schemas/nx-schema.json +182 -35
- package/schemas/project-schema.json +5 -0
- package/src/adapter/compat.d.ts +1 -1
- package/src/adapter/compat.js +3 -0
- package/src/command-line/add/add.js +6 -16
- package/src/command-line/affected/command-object.js +6 -6
- package/src/command-line/examples.js +0 -4
- package/src/command-line/exec/command-object.js +1 -1
- package/src/command-line/generate/generator-utils.js +8 -3
- package/src/command-line/import/import.js +1 -1
- package/src/command-line/init/command-object.js +18 -6
- package/src/command-line/init/configure-plugins.d.ts +6 -7
- package/src/command-line/init/configure-plugins.js +52 -38
- package/src/command-line/init/implementation/add-nx-to-turborepo.d.ts +4 -0
- package/src/command-line/init/implementation/add-nx-to-turborepo.js +49 -0
- package/src/command-line/init/implementation/check-compatible-with-plugins.js +7 -1
- package/src/command-line/init/implementation/deduce-default-base.d.ts +1 -0
- package/src/command-line/init/implementation/deduce-default-base.js +53 -0
- package/src/command-line/init/implementation/react/add-vite-commands-to-package-scripts.js +6 -4
- package/src/command-line/init/implementation/react/index.d.ts +1 -1
- package/src/command-line/init/implementation/react/index.js +32 -185
- package/src/command-line/init/implementation/react/write-vite-config.js +19 -3
- package/src/command-line/init/implementation/utils.d.ts +6 -2
- package/src/command-line/init/implementation/utils.js +110 -45
- package/src/command-line/init/init-v1.js +1 -1
- package/src/command-line/init/init-v2.d.ts +1 -0
- package/src/command-line/init/init-v2.js +70 -39
- package/src/command-line/migrate/migrate-ui-api.d.ts +58 -0
- package/src/command-line/migrate/migrate-ui-api.js +227 -0
- package/src/command-line/migrate/migrate.d.ts +16 -3
- package/src/command-line/migrate/migrate.js +134 -101
- package/src/command-line/nx-commands.js +19 -5
- package/src/command-line/register/command-object.d.ts +6 -0
- package/src/command-line/{activate-powerpack → register}/command-object.js +9 -9
- package/src/command-line/register/register.d.ts +2 -0
- package/src/command-line/register/register.js +9 -0
- package/src/command-line/release/changelog.js +18 -15
- package/src/command-line/release/command-object.d.ts +8 -0
- package/src/command-line/release/command-object.js +9 -0
- package/src/command-line/release/config/config.d.ts +8 -7
- package/src/command-line/release/config/config.js +139 -45
- package/src/command-line/release/config/use-legacy-versioning.d.ts +2 -0
- package/src/command-line/release/config/use-legacy-versioning.js +9 -0
- package/src/command-line/release/index.d.ts +4 -0
- package/src/command-line/release/index.js +6 -1
- package/src/command-line/release/plan-check.js +6 -3
- package/src/command-line/release/plan.js +7 -3
- package/src/command-line/release/publish.js +7 -3
- package/src/command-line/release/release.js +8 -3
- package/src/command-line/release/utils/batch-projects-by-generator-config.js +6 -3
- package/src/command-line/release/utils/git.d.ts +3 -2
- package/src/command-line/release/utils/git.js +65 -9
- package/src/command-line/release/utils/github.js +3 -1
- package/src/command-line/release/utils/resolve-semver-specifier.d.ts +2 -1
- package/src/command-line/release/utils/resolve-semver-specifier.js +2 -1
- package/src/command-line/release/utils/semver.d.ts +8 -0
- package/src/command-line/release/utils/semver.js +8 -0
- package/src/command-line/release/utils/shared-legacy.d.ts +25 -0
- package/src/command-line/release/utils/shared-legacy.js +2 -0
- package/src/command-line/release/utils/shared.d.ts +11 -17
- package/src/command-line/release/version/derive-specifier-from-conventional-commits.d.ts +7 -0
- package/src/command-line/release/version/derive-specifier-from-conventional-commits.js +47 -0
- package/src/command-line/release/version/deriver-specifier-from-version-plans.d.ts +8 -0
- package/src/command-line/release/version/deriver-specifier-from-version-plans.js +59 -0
- package/src/command-line/release/version/project-logger.d.ts +8 -0
- package/src/command-line/release/version/project-logger.js +45 -0
- package/src/command-line/release/version/release-group-processor.d.ts +252 -0
- package/src/command-line/release/version/release-group-processor.js +1057 -0
- package/src/command-line/release/version/resolve-current-version.d.ts +32 -0
- package/src/command-line/release/version/resolve-current-version.js +241 -0
- package/src/command-line/release/version/test-utils.d.ts +93 -0
- package/src/command-line/release/version/test-utils.js +415 -0
- package/src/command-line/release/version/topological-sort.d.ts +9 -0
- package/src/command-line/release/version/topological-sort.js +41 -0
- package/src/command-line/release/version/version-actions.d.ts +171 -0
- package/src/command-line/release/version/version-actions.js +195 -0
- package/src/command-line/release/version-legacy.d.ts +46 -0
- package/src/command-line/release/version-legacy.js +453 -0
- package/src/command-line/release/version.d.ts +0 -40
- package/src/command-line/release/version.js +84 -262
- package/src/command-line/repair/repair.js +0 -1
- package/src/command-line/report/report.d.ts +7 -3
- package/src/command-line/report/report.js +52 -18
- package/src/command-line/run/command-object.js +2 -2
- package/src/command-line/run/executor-utils.d.ts +6 -1
- package/src/command-line/run/executor-utils.js +10 -1
- package/src/command-line/run/run.js +2 -2
- package/src/command-line/run-many/command-object.js +2 -2
- package/src/command-line/yargs-utils/shared-options.d.ts +4 -0
- package/src/command-line/yargs-utils/shared-options.js +20 -0
- package/src/config/misc-interfaces.d.ts +11 -1
- package/src/config/nx-json.d.ts +160 -16
- package/src/config/project-graph.d.ts +4 -2
- package/src/config/project-graph.js +8 -0
- package/src/config/workspace-json-project-json.d.ts +2 -2
- package/src/core/graph/main.js +1 -1
- package/src/core/graph/runtime.js +1 -1
- package/src/core/graph/styles.css +2 -2
- package/src/core/graph/styles.js +1 -1
- package/src/daemon/client/client.d.ts +2 -0
- package/src/daemon/client/client.js +15 -0
- package/src/daemon/message-types/glob.d.ts +7 -0
- package/src/daemon/message-types/glob.js +9 -1
- package/src/daemon/message-types/hash-glob.d.ts +6 -0
- package/src/daemon/message-types/hash-glob.js +9 -1
- package/src/daemon/server/handle-glob.d.ts +1 -0
- package/src/daemon/server/handle-glob.js +8 -0
- package/src/daemon/server/handle-hash-glob.d.ts +1 -0
- package/src/daemon/server/handle-hash-glob.js +8 -0
- package/src/daemon/server/logger.js +2 -1
- package/src/daemon/server/server.js +7 -0
- package/src/devkit-internals.d.ts +3 -2
- package/src/devkit-internals.js +5 -1
- package/src/executors/run-commands/run-commands.impl.d.ts +2 -5
- package/src/executors/run-commands/run-commands.impl.js +14 -42
- package/src/executors/run-commands/running-tasks.d.ts +9 -4
- package/src/executors/run-commands/running-tasks.js +103 -30
- package/src/executors/run-script/run-script.impl.js +4 -3
- package/src/generators/internal-utils/format-changed-files-with-prettier-if-available.js +8 -0
- package/src/generators/testing-utils/create-tree.js +5 -1
- package/src/migrations/{update-17-0-0/rm-default-collection-npm-scope.d.ts → update-21-0-0/release-version-config-changes.d.ts} +1 -1
- package/src/migrations/update-21-0-0/release-version-config-changes.js +111 -0
- package/src/native/index.d.ts +98 -19
- package/src/native/index.js +16 -2
- package/src/native/native-bindings.js +7 -0
- package/src/native/nx.wasi-browser.js +20 -19
- package/src/native/nx.wasi.cjs +20 -19
- package/src/native/nx.wasm32-wasi.wasm +0 -0
- package/src/nx-cloud/nx-cloud-tasks-runner-shell.js +3 -3
- package/src/plugins/js/lock-file/lock-file.js +28 -13
- package/src/plugins/js/lock-file/utils/package-json.d.ts +1 -1
- package/src/plugins/js/lock-file/utils/package-json.js +8 -6
- package/src/plugins/js/lock-file/utils/pnpm-normalizer.js +3 -3
- package/src/plugins/js/lock-file/yarn-parser.js +85 -39
- package/src/plugins/js/project-graph/affected/lock-file-changes.js +1 -0
- package/src/plugins/js/project-graph/build-dependencies/explicit-project-dependencies.js +1 -1
- package/src/plugins/js/project-graph/build-dependencies/target-project-locator.d.ts +10 -1
- package/src/plugins/js/project-graph/build-dependencies/target-project-locator.js +59 -6
- package/src/plugins/js/utils/packages.js +22 -3
- package/src/plugins/js/utils/register.js +1 -0
- package/src/plugins/js/utils/typescript.js +3 -3
- package/src/plugins/package-json/create-nodes.d.ts +1 -1
- package/src/plugins/package-json/create-nodes.js +4 -2
- package/src/project-graph/affected/locators/project-glob-changes.js +2 -2
- package/src/project-graph/error-types.js +32 -2
- package/src/project-graph/file-utils.d.ts +1 -10
- package/src/project-graph/file-utils.js +2 -77
- package/src/project-graph/nx-deps-cache.js +7 -2
- package/src/project-graph/plugins/get-plugins.js +2 -1
- package/src/project-graph/plugins/in-process-loader.js +1 -1
- package/src/project-graph/plugins/isolation/plugin-worker.js +12 -6
- package/src/project-graph/plugins/loaded-nx-plugin.d.ts +2 -1
- package/src/project-graph/plugins/loaded-nx-plugin.js +3 -7
- package/src/project-graph/plugins/public-api.d.ts +1 -1
- package/src/project-graph/plugins/utils.d.ts +2 -2
- package/src/project-graph/plugins/utils.js +2 -2
- package/src/project-graph/project-graph.js +5 -2
- package/src/project-graph/utils/project-configuration-utils.d.ts +3 -3
- package/src/project-graph/utils/project-configuration-utils.js +54 -21
- package/src/project-graph/utils/retrieve-workspace-files.d.ts +1 -1
- package/src/project-graph/utils/retrieve-workspace-files.js +14 -18
- package/src/tasks-runner/batch/batch-messages.d.ts +2 -0
- package/src/tasks-runner/batch/run-batch.js +3 -4
- package/src/tasks-runner/cache.d.ts +20 -6
- package/src/tasks-runner/cache.js +104 -20
- package/src/tasks-runner/create-task-graph.d.ts +0 -1
- package/src/tasks-runner/create-task-graph.js +11 -11
- package/src/tasks-runner/default-tasks-runner.js +5 -14
- package/src/tasks-runner/forked-process-task-runner.d.ts +8 -3
- package/src/tasks-runner/forked-process-task-runner.js +59 -46
- package/src/tasks-runner/init-tasks-runner.d.ts +15 -1
- package/src/tasks-runner/init-tasks-runner.js +62 -2
- package/src/tasks-runner/is-tui-enabled.d.ts +2 -0
- package/src/tasks-runner/is-tui-enabled.js +64 -0
- package/src/tasks-runner/life-cycle.d.ts +14 -3
- package/src/tasks-runner/life-cycle.js +37 -2
- package/src/tasks-runner/life-cycles/task-history-life-cycle-old.d.ts +2 -0
- package/src/tasks-runner/life-cycles/task-history-life-cycle-old.js +15 -7
- package/src/tasks-runner/life-cycles/task-history-life-cycle.d.ts +5 -0
- package/src/tasks-runner/life-cycles/task-history-life-cycle.js +35 -5
- package/src/tasks-runner/life-cycles/tui-summary-life-cycle.d.ts +18 -0
- package/src/tasks-runner/life-cycles/tui-summary-life-cycle.js +229 -0
- package/src/tasks-runner/pseudo-terminal.d.ts +10 -7
- package/src/tasks-runner/pseudo-terminal.js +37 -35
- package/src/tasks-runner/run-command.d.ts +4 -1
- package/src/tasks-runner/run-command.js +220 -42
- package/src/tasks-runner/running-tasks/node-child-process.js +4 -11
- package/src/tasks-runner/running-tasks/running-task.d.ts +3 -0
- package/src/tasks-runner/running-tasks/shared-running-task.d.ts +14 -0
- package/src/tasks-runner/running-tasks/shared-running-task.js +30 -0
- package/src/tasks-runner/task-env.d.ts +1 -4
- package/src/tasks-runner/task-env.js +2 -0
- package/src/tasks-runner/task-orchestrator.d.ts +26 -10
- package/src/tasks-runner/task-orchestrator.js +212 -57
- package/src/tasks-runner/tasks-runner.d.ts +1 -0
- package/src/tasks-runner/tasks-schedule.d.ts +1 -0
- package/src/tasks-runner/tasks-schedule.js +9 -0
- package/src/tasks-runner/utils.d.ts +2 -2
- package/src/tasks-runner/utils.js +18 -12
- package/src/utils/child-process.d.ts +4 -0
- package/src/utils/child-process.js +23 -30
- package/src/utils/command-line-utils.d.ts +1 -1
- package/src/utils/find-matching-projects.js +2 -2
- package/src/utils/git-utils.d.ts +1 -1
- package/src/utils/git-utils.js +8 -3
- package/src/utils/handle-errors.js +15 -0
- package/src/utils/is-ci.js +4 -1
- package/src/utils/is-using-prettier.d.ts +3 -0
- package/src/utils/is-using-prettier.js +62 -0
- package/src/utils/nx-key.d.ts +7 -0
- package/src/utils/nx-key.js +52 -0
- package/src/utils/package-json.d.ts +1 -1
- package/src/utils/package-json.js +16 -2
- package/src/utils/package-manager.js +2 -2
- package/src/utils/path.js +1 -1
- package/src/utils/require-nx-key.d.ts +1 -0
- package/src/utils/require-nx-key.js +22 -0
- package/src/utils/workspace-context.d.ts +2 -0
- package/src/utils/workspace-context.js +16 -0
- package/src/command-line/activate-powerpack/activate-powerpack.d.ts +0 -2
- package/src/command-line/activate-powerpack/activate-powerpack.js +0 -34
- package/src/command-line/activate-powerpack/command-object.d.ts +0 -6
- package/src/command-line/init/implementation/react/write-craco-config.d.ts +0 -1
- package/src/command-line/init/implementation/react/write-craco-config.js +0 -61
- package/src/migrations/update-17-0-0/move-cache-directory.d.ts +0 -2
- package/src/migrations/update-17-0-0/move-cache-directory.js +0 -35
- package/src/migrations/update-17-0-0/rm-default-collection-npm-scope.js +0 -72
- package/src/migrations/update-17-0-0/use-minimal-config-for-tasks-runner-options.d.ts +0 -2
- package/src/migrations/update-17-0-0/use-minimal-config-for-tasks-runner-options.js +0 -122
- package/src/migrations/update-17-2-0/move-default-base.d.ts +0 -5
- package/src/migrations/update-17-2-0/move-default-base.js +0 -21
- package/src/migrations/update-17-3-0/nx-release-path.d.ts +0 -3
- package/src/migrations/update-17-3-0/nx-release-path.js +0 -47
- package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.d.ts +0 -2
- package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.js +0 -11
- package/src/utils/powerpack.d.ts +0 -5
- package/src/utils/powerpack.js +0 -33
@@ -0,0 +1,227 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.recordInitialMigrationMetadata = recordInitialMigrationMetadata;
|
4
|
+
exports.finishMigrationProcess = finishMigrationProcess;
|
5
|
+
exports.runSingleMigration = runSingleMigration;
|
6
|
+
exports.getImplementationPath = getImplementationPath;
|
7
|
+
exports.modifyMigrationsJsonMetadata = modifyMigrationsJsonMetadata;
|
8
|
+
exports.addSuccessfulMigration = addSuccessfulMigration;
|
9
|
+
exports.updateRefForSuccessfulMigration = updateRefForSuccessfulMigration;
|
10
|
+
exports.addFailedMigration = addFailedMigration;
|
11
|
+
exports.addSkippedMigration = addSkippedMigration;
|
12
|
+
exports.readMigrationsJsonMetadata = readMigrationsJsonMetadata;
|
13
|
+
exports.undoMigration = undoMigration;
|
14
|
+
const child_process_1 = require("child_process");
|
15
|
+
const fs_1 = require("fs");
|
16
|
+
const path_1 = require("path");
|
17
|
+
const migrate_1 = require("./migrate");
|
18
|
+
function recordInitialMigrationMetadata(workspacePath, versionToMigrateTo) {
|
19
|
+
const migrationsJsonPath = (0, path_1.join)(workspacePath, 'migrations.json');
|
20
|
+
const parsedMigrationsJson = JSON.parse((0, fs_1.readFileSync)(migrationsJsonPath, 'utf-8'));
|
21
|
+
const gitRef = (0, child_process_1.execSync)('git rev-parse HEAD', {
|
22
|
+
cwd: workspacePath,
|
23
|
+
encoding: 'utf-8',
|
24
|
+
}).trim();
|
25
|
+
const gitSubject = (0, child_process_1.execSync)('git log -1 --pretty=%s', {
|
26
|
+
cwd: workspacePath,
|
27
|
+
encoding: 'utf-8',
|
28
|
+
}).trim();
|
29
|
+
parsedMigrationsJson['nx-console'] = {
|
30
|
+
initialGitRef: {
|
31
|
+
ref: gitRef,
|
32
|
+
subject: gitSubject,
|
33
|
+
},
|
34
|
+
targetVersion: versionToMigrateTo,
|
35
|
+
};
|
36
|
+
(0, fs_1.writeFileSync)(migrationsJsonPath, JSON.stringify(parsedMigrationsJson, null, 2));
|
37
|
+
}
|
38
|
+
function finishMigrationProcess(workspacePath, squashCommits, commitMessage) {
|
39
|
+
const migrationsJsonPath = (0, path_1.join)(workspacePath, 'migrations.json');
|
40
|
+
const parsedMigrationsJson = JSON.parse((0, fs_1.readFileSync)(migrationsJsonPath, 'utf-8'));
|
41
|
+
const initialGitRef = parsedMigrationsJson['nx-console'].initialGitRef;
|
42
|
+
if ((0, fs_1.existsSync)(migrationsJsonPath)) {
|
43
|
+
(0, fs_1.rmSync)(migrationsJsonPath);
|
44
|
+
}
|
45
|
+
(0, child_process_1.execSync)('git add .', {
|
46
|
+
cwd: workspacePath,
|
47
|
+
encoding: 'utf-8',
|
48
|
+
});
|
49
|
+
(0, child_process_1.execSync)(`git commit -m "${commitMessage}" --no-verify`, {
|
50
|
+
cwd: workspacePath,
|
51
|
+
encoding: 'utf-8',
|
52
|
+
});
|
53
|
+
if (squashCommits && initialGitRef) {
|
54
|
+
(0, child_process_1.execSync)(`git reset --soft ${initialGitRef.ref}`, {
|
55
|
+
cwd: workspacePath,
|
56
|
+
encoding: 'utf-8',
|
57
|
+
});
|
58
|
+
(0, child_process_1.execSync)(`git commit -m "${commitMessage}" --no-verify`, {
|
59
|
+
cwd: workspacePath,
|
60
|
+
encoding: 'utf-8',
|
61
|
+
});
|
62
|
+
}
|
63
|
+
}
|
64
|
+
async function runSingleMigration(workspacePath, migration, configuration) {
|
65
|
+
try {
|
66
|
+
modifyMigrationsJsonMetadata(workspacePath, addRunningMigration(migration.id));
|
67
|
+
const gitRefBefore = (0, child_process_1.execSync)('git rev-parse HEAD', {
|
68
|
+
cwd: workspacePath,
|
69
|
+
encoding: 'utf-8',
|
70
|
+
}).trim();
|
71
|
+
// For Migrate UI, this current module is loaded either from:
|
72
|
+
// 1. The CLI path to the migrated modules. The version of Nx is of the user's choosing. This may or may not have the new migrate API, so Console will check that `runSingleMigration` exists before using it.
|
73
|
+
// 2. Bundled into Console, so the version is fixed to what we build Console with.
|
74
|
+
const updatedMigrateModule = await Promise.resolve().then(() => require('./migrate.js'));
|
75
|
+
const fileChanges = await updatedMigrateModule.runNxOrAngularMigration(workspacePath, migration, false, configuration.createCommits, configuration.commitPrefix || 'chore: [nx migration] ', undefined, true);
|
76
|
+
const gitRefAfter = (0, child_process_1.execSync)('git rev-parse HEAD', {
|
77
|
+
cwd: workspacePath,
|
78
|
+
encoding: 'utf-8',
|
79
|
+
}).trim();
|
80
|
+
modifyMigrationsJsonMetadata(workspacePath, addSuccessfulMigration(migration.id, fileChanges.map((change) => ({
|
81
|
+
path: change.path,
|
82
|
+
type: change.type,
|
83
|
+
})), gitRefAfter));
|
84
|
+
if (gitRefBefore !== gitRefAfter) {
|
85
|
+
(0, child_process_1.execSync)('git add migrations.json', {
|
86
|
+
cwd: workspacePath,
|
87
|
+
encoding: 'utf-8',
|
88
|
+
});
|
89
|
+
(0, child_process_1.execSync)('git commit --amend --no-verify --no-edit', {
|
90
|
+
cwd: workspacePath,
|
91
|
+
encoding: 'utf-8',
|
92
|
+
});
|
93
|
+
// The revision changes after the amend, so we need to update it
|
94
|
+
const amendedGitRef = (0, child_process_1.execSync)('git rev-parse HEAD', {
|
95
|
+
cwd: workspacePath,
|
96
|
+
encoding: 'utf-8',
|
97
|
+
}).trim();
|
98
|
+
modifyMigrationsJsonMetadata(workspacePath, updateRefForSuccessfulMigration(migration.id, amendedGitRef));
|
99
|
+
}
|
100
|
+
}
|
101
|
+
catch (e) {
|
102
|
+
modifyMigrationsJsonMetadata(workspacePath, addFailedMigration(migration.id, e.message));
|
103
|
+
}
|
104
|
+
finally {
|
105
|
+
modifyMigrationsJsonMetadata(workspacePath, removeRunningMigration(migration.id));
|
106
|
+
(0, child_process_1.execSync)('git add migrations.json', {
|
107
|
+
cwd: workspacePath,
|
108
|
+
encoding: 'utf-8',
|
109
|
+
});
|
110
|
+
}
|
111
|
+
}
|
112
|
+
async function getImplementationPath(workspacePath, migration) {
|
113
|
+
const { collection, collectionPath } = (0, migrate_1.readMigrationCollection)(migration.package, workspacePath);
|
114
|
+
const { path } = (0, migrate_1.getImplementationPath)(collection, collectionPath, migration.name);
|
115
|
+
return path;
|
116
|
+
}
|
117
|
+
function modifyMigrationsJsonMetadata(workspacePath, modify) {
|
118
|
+
const migrationsJsonPath = (0, path_1.join)(workspacePath, 'migrations.json');
|
119
|
+
const migrationsJson = JSON.parse((0, fs_1.readFileSync)(migrationsJsonPath, 'utf-8'));
|
120
|
+
migrationsJson['nx-console'] = modify(migrationsJson['nx-console']);
|
121
|
+
(0, fs_1.writeFileSync)(migrationsJsonPath, JSON.stringify(migrationsJson, null, 2));
|
122
|
+
}
|
123
|
+
function addSuccessfulMigration(id, fileChanges, ref) {
|
124
|
+
return (migrationsJsonMetadata) => {
|
125
|
+
const copied = { ...migrationsJsonMetadata };
|
126
|
+
if (!copied.completedMigrations) {
|
127
|
+
copied.completedMigrations = {};
|
128
|
+
}
|
129
|
+
copied.completedMigrations = {
|
130
|
+
...copied.completedMigrations,
|
131
|
+
[id]: {
|
132
|
+
type: 'successful',
|
133
|
+
name: id,
|
134
|
+
changedFiles: fileChanges,
|
135
|
+
ref,
|
136
|
+
},
|
137
|
+
};
|
138
|
+
return copied;
|
139
|
+
};
|
140
|
+
}
|
141
|
+
function updateRefForSuccessfulMigration(id, ref) {
|
142
|
+
return (migrationsJsonMetadata) => {
|
143
|
+
const copied = { ...migrationsJsonMetadata };
|
144
|
+
if (!copied.completedMigrations) {
|
145
|
+
copied.completedMigrations = {};
|
146
|
+
}
|
147
|
+
const existing = copied.completedMigrations[id];
|
148
|
+
if (existing && existing.type === 'successful') {
|
149
|
+
existing.ref = ref;
|
150
|
+
}
|
151
|
+
else {
|
152
|
+
throw new Error(`Attempted to update ref for unsuccessful migration`);
|
153
|
+
}
|
154
|
+
return copied;
|
155
|
+
};
|
156
|
+
}
|
157
|
+
function addFailedMigration(id, error) {
|
158
|
+
return (migrationsJsonMetadata) => {
|
159
|
+
const copied = { ...migrationsJsonMetadata };
|
160
|
+
if (!copied.completedMigrations) {
|
161
|
+
copied.completedMigrations = {};
|
162
|
+
}
|
163
|
+
copied.completedMigrations = {
|
164
|
+
...copied.completedMigrations,
|
165
|
+
[id]: {
|
166
|
+
type: 'failed',
|
167
|
+
name: id,
|
168
|
+
error,
|
169
|
+
},
|
170
|
+
};
|
171
|
+
return copied;
|
172
|
+
};
|
173
|
+
}
|
174
|
+
function addSkippedMigration(id) {
|
175
|
+
return (migrationsJsonMetadata) => {
|
176
|
+
const copied = { ...migrationsJsonMetadata };
|
177
|
+
if (!copied.completedMigrations) {
|
178
|
+
copied.completedMigrations = {};
|
179
|
+
}
|
180
|
+
copied.completedMigrations = {
|
181
|
+
...copied.completedMigrations,
|
182
|
+
[id]: {
|
183
|
+
type: 'skipped',
|
184
|
+
},
|
185
|
+
};
|
186
|
+
return copied;
|
187
|
+
};
|
188
|
+
}
|
189
|
+
function addRunningMigration(id) {
|
190
|
+
return (migrationsJsonMetadata) => {
|
191
|
+
migrationsJsonMetadata.runningMigrations = [
|
192
|
+
...(migrationsJsonMetadata.runningMigrations ?? []),
|
193
|
+
id,
|
194
|
+
];
|
195
|
+
return migrationsJsonMetadata;
|
196
|
+
};
|
197
|
+
}
|
198
|
+
function removeRunningMigration(id) {
|
199
|
+
return (migrationsJsonMetadata) => {
|
200
|
+
migrationsJsonMetadata.runningMigrations =
|
201
|
+
migrationsJsonMetadata.runningMigrations?.filter((n) => n !== id);
|
202
|
+
if (migrationsJsonMetadata.runningMigrations?.length === 0) {
|
203
|
+
delete migrationsJsonMetadata.runningMigrations;
|
204
|
+
}
|
205
|
+
return migrationsJsonMetadata;
|
206
|
+
};
|
207
|
+
}
|
208
|
+
function readMigrationsJsonMetadata(workspacePath) {
|
209
|
+
const migrationsJsonPath = (0, path_1.join)(workspacePath, 'migrations.json');
|
210
|
+
const migrationsJson = JSON.parse((0, fs_1.readFileSync)(migrationsJsonPath, 'utf-8'));
|
211
|
+
return migrationsJson['nx-console'];
|
212
|
+
}
|
213
|
+
function undoMigration(workspacePath, id) {
|
214
|
+
return (migrationsJsonMetadata) => {
|
215
|
+
const existing = migrationsJsonMetadata.completedMigrations[id];
|
216
|
+
if (existing.type !== 'successful')
|
217
|
+
throw new Error(`undoMigration called on unsuccessful migration: ${id}`);
|
218
|
+
(0, child_process_1.execSync)(`git reset --hard ${existing.ref}^`, {
|
219
|
+
cwd: workspacePath,
|
220
|
+
encoding: 'utf-8',
|
221
|
+
});
|
222
|
+
migrationsJsonMetadata.completedMigrations[id] = {
|
223
|
+
type: 'skipped',
|
224
|
+
};
|
225
|
+
return migrationsJsonMetadata;
|
226
|
+
};
|
227
|
+
}
|
@@ -1,5 +1,6 @@
|
|
1
1
|
import { MigrationsJson, PackageJsonUpdateForPackage as PackageUpdate } from '../../config/misc-interfaces';
|
2
2
|
import { NxJsonConfiguration } from '../../config/nx-json';
|
3
|
+
import { FileChange } from '../../generators/tree';
|
3
4
|
import { ArrayPackageGroup, PackageJson } from '../../utils/package-json';
|
4
5
|
export interface ResolvedMigrationConfiguration extends MigrationsJson {
|
5
6
|
packageGroup?: ArrayPackageGroup;
|
@@ -40,7 +41,6 @@ export declare class Migrator {
|
|
40
41
|
name: string;
|
41
42
|
version: string;
|
42
43
|
description?: string;
|
43
|
-
cli?: string;
|
44
44
|
implementation?: string;
|
45
45
|
factory?: string;
|
46
46
|
requires?: Record<string, string>;
|
@@ -100,16 +100,29 @@ export declare function executeMigrations(root: string, migrations: {
|
|
100
100
|
name: string;
|
101
101
|
description?: string;
|
102
102
|
version: string;
|
103
|
-
cli?: 'nx' | 'angular';
|
104
103
|
}[], isVerbose: boolean, shouldCreateCommits: boolean, commitPrefix: string): Promise<{
|
105
104
|
package: string;
|
106
105
|
name: string;
|
107
106
|
description?: string;
|
108
107
|
version: string;
|
109
|
-
cli?: "nx" | "angular";
|
110
108
|
}[]>;
|
109
|
+
export declare function runNxOrAngularMigration(root: string, migration: {
|
110
|
+
package: string;
|
111
|
+
name: string;
|
112
|
+
description?: string;
|
113
|
+
version: string;
|
114
|
+
}, isVerbose: boolean, shouldCreateCommits: boolean, commitPrefix: string, installDepsIfChanged?: () => void, handleInstallDeps?: boolean): Promise<FileChange[]>;
|
111
115
|
export declare function migrate(root: string, args: {
|
112
116
|
[k: string]: any;
|
113
117
|
}, rawArgs: string[]): Promise<number>;
|
114
118
|
export declare function runMigration(): void;
|
119
|
+
export declare function readMigrationCollection(packageName: string, root: string): {
|
120
|
+
collection: MigrationsJson;
|
121
|
+
collectionPath: string;
|
122
|
+
};
|
123
|
+
export declare function getImplementationPath(collection: MigrationsJson, collectionPath: string, name: string): {
|
124
|
+
path: string;
|
125
|
+
fnSymbol: string;
|
126
|
+
};
|
127
|
+
export declare function nxCliPath(nxWorkspaceRoot?: string): string;
|
115
128
|
export {};
|
@@ -4,8 +4,12 @@ exports.Migrator = void 0;
|
|
4
4
|
exports.normalizeVersion = normalizeVersion;
|
5
5
|
exports.parseMigrationsOptions = parseMigrationsOptions;
|
6
6
|
exports.executeMigrations = executeMigrations;
|
7
|
+
exports.runNxOrAngularMigration = runNxOrAngularMigration;
|
7
8
|
exports.migrate = migrate;
|
8
9
|
exports.runMigration = runMigration;
|
10
|
+
exports.readMigrationCollection = readMigrationCollection;
|
11
|
+
exports.getImplementationPath = getImplementationPath;
|
12
|
+
exports.nxCliPath = nxCliPath;
|
9
13
|
const chalk = require("chalk");
|
10
14
|
const child_process_1 = require("child_process");
|
11
15
|
const enquirer_1 = require("enquirer");
|
@@ -118,10 +122,10 @@ class Migrator {
|
|
118
122
|
const packagesToCheck = await this.populatePackageJsonUpdatesAndGetPackagesToCheck(targetPackage, target);
|
119
123
|
for (const packageToCheck of packagesToCheck) {
|
120
124
|
const filteredUpdates = {};
|
121
|
-
for (const packageUpdate of packageToCheck.updates) {
|
125
|
+
for (const [packageUpdateKey, packageUpdate] of Object.entries(packageToCheck.updates)) {
|
122
126
|
if (this.areRequirementsMet(packageUpdate.requires) &&
|
123
127
|
(!this.interactive ||
|
124
|
-
(await this.runPackageJsonUpdatesConfirmationPrompt(packageUpdate)))) {
|
128
|
+
(await this.runPackageJsonUpdatesConfirmationPrompt(packageUpdate, packageUpdateKey, packageToCheck.package)))) {
|
125
129
|
Object.entries(packageUpdate.packages).forEach(([name, update]) => {
|
126
130
|
filteredUpdates[name] = update;
|
127
131
|
this.packageUpdates[name] = update;
|
@@ -166,15 +170,15 @@ class Migrator {
|
|
166
170
|
addToPackageJson: target.addToPackageJson || false,
|
167
171
|
});
|
168
172
|
const { packageJsonUpdates, packageGroupOrder } = this.getPackageJsonUpdatesFromMigrationConfig(targetPackage, targetVersion, migrationConfig);
|
169
|
-
if (!packageJsonUpdates.length) {
|
173
|
+
if (!Object.keys(packageJsonUpdates).length) {
|
170
174
|
return [];
|
171
175
|
}
|
172
|
-
const shouldCheckUpdates = packageJsonUpdates.some((packageJsonUpdate) => (this.interactive && packageJsonUpdate['x-prompt']) ||
|
176
|
+
const shouldCheckUpdates = Object.values(packageJsonUpdates).some((packageJsonUpdate) => (this.interactive && packageJsonUpdate['x-prompt']) ||
|
173
177
|
Object.keys(packageJsonUpdate.requires ?? {}).length);
|
174
178
|
if (shouldCheckUpdates) {
|
175
179
|
return [{ package: targetPackage, updates: packageJsonUpdates }];
|
176
180
|
}
|
177
|
-
const packageUpdatesToApply = packageJsonUpdates.reduce((m, c) => ({ ...m, ...c.packages }), {});
|
181
|
+
const packageUpdatesToApply = Object.values(packageJsonUpdates).reduce((m, c) => ({ ...m, ...c.packages }), {});
|
178
182
|
return (await Promise.all(Object.entries(packageUpdatesToApply).map(([packageName, packageUpdate]) => this.populatePackageJsonUpdatesAndGetPackagesToCheck(packageName, packageUpdate))))
|
179
183
|
.filter((pkgs) => pkgs.length)
|
180
184
|
.flat()
|
@@ -185,7 +189,7 @@ class Migrator {
|
|
185
189
|
const packageGroupOrder = this.getPackageJsonUpdatesFromPackageGroup(packageName, targetVersion, migrationConfig);
|
186
190
|
if (!migrationConfig.packageJsonUpdates ||
|
187
191
|
!this.getPkgVersion(packageName)) {
|
188
|
-
return { packageJsonUpdates:
|
192
|
+
return { packageJsonUpdates: {}, packageGroupOrder };
|
189
193
|
}
|
190
194
|
const packageJsonUpdates = this.filterPackageJsonUpdates(migrationConfig.packageJsonUpdates, packageName, targetVersion);
|
191
195
|
return { packageJsonUpdates, packageGroupOrder };
|
@@ -228,8 +232,8 @@ class Migrator {
|
|
228
232
|
return packageGroupOrder;
|
229
233
|
}
|
230
234
|
filterPackageJsonUpdates(packageJsonUpdates, packageName, targetVersion) {
|
231
|
-
const filteredPackageJsonUpdates =
|
232
|
-
for (const packageJsonUpdate of Object.
|
235
|
+
const filteredPackageJsonUpdates = {};
|
236
|
+
for (const [packageJsonUpdateKey, packageJsonUpdate] of Object.entries(packageJsonUpdates)) {
|
233
237
|
if (!packageJsonUpdate.packages ||
|
234
238
|
this.lt(packageJsonUpdate.version, this.getPkgVersion(packageName)) ||
|
235
239
|
this.gt(packageJsonUpdate.version, targetVersion)) {
|
@@ -254,7 +258,7 @@ class Migrator {
|
|
254
258
|
}
|
255
259
|
if (Object.keys(filtered).length) {
|
256
260
|
packageJsonUpdate.packages = filtered;
|
257
|
-
filteredPackageJsonUpdates
|
261
|
+
filteredPackageJsonUpdates[packageJsonUpdateKey] = packageJsonUpdate;
|
258
262
|
}
|
259
263
|
}
|
260
264
|
return filteredPackageJsonUpdates;
|
@@ -313,7 +317,7 @@ class Migrator {
|
|
313
317
|
includePrerelease: true,
|
314
318
|
}));
|
315
319
|
}
|
316
|
-
async runPackageJsonUpdatesConfirmationPrompt(packageUpdate) {
|
320
|
+
async runPackageJsonUpdatesConfirmationPrompt(packageUpdate, packageUpdateKey, packageName) {
|
317
321
|
if (!packageUpdate['x-prompt']) {
|
318
322
|
return Promise.resolve(true);
|
319
323
|
}
|
@@ -322,14 +326,17 @@ class Migrator {
|
|
322
326
|
// a same prompt was already answered, skip
|
323
327
|
return Promise.resolve(false);
|
324
328
|
}
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
329
|
+
const promptConfig = {
|
330
|
+
name: 'shouldApply',
|
331
|
+
type: 'confirm',
|
332
|
+
message: packageUpdate['x-prompt'],
|
333
|
+
initial: true,
|
334
|
+
};
|
335
|
+
if (packageName.startsWith('@nx/')) {
|
336
|
+
// @ts-expect-error -- enquirer types aren't correct, footer does exist
|
337
|
+
promptConfig.footer = () => chalk.dim(` View migration details at https://nx.dev/nx-api/${packageName.replace('@nx/', '')}#${packageUpdateKey.replace(/[-\.]/g, '')}packageupdates`);
|
338
|
+
}
|
339
|
+
return await (0, enquirer_1.prompt)([promptConfig]).then(({ shouldApply }) => {
|
333
340
|
this.promptAnswers[promptKey] = shouldApply;
|
334
341
|
if (!shouldApply &&
|
335
342
|
(!this.minVersionWithSkippedUpdates ||
|
@@ -640,7 +647,11 @@ async function getPackageMigrationsUsingInstall(packageName, packageVersion) {
|
|
640
647
|
result = { ...migrations, packageGroup, version: packageJson.version };
|
641
648
|
}
|
642
649
|
catch (e) {
|
643
|
-
|
650
|
+
output_1.output.warn({
|
651
|
+
title: `Failed to fetch migrations for ${packageName}@${packageVersion}`,
|
652
|
+
bodyLines: [e.message],
|
653
|
+
});
|
654
|
+
return {};
|
644
655
|
}
|
645
656
|
finally {
|
646
657
|
await cleanup();
|
@@ -806,9 +817,12 @@ async function generateMigrationsJsonAndUpdatePackageJson(root, opts) {
|
|
806
817
|
// The above code is to remind folks when updating to a new major and not currently using Nx cloud.
|
807
818
|
// If for some reason it fails, it shouldn't affect the overall migration process
|
808
819
|
}
|
809
|
-
|
810
|
-
|
811
|
-
|
820
|
+
const bodyLines = process.env['NX_CONSOLE']
|
821
|
+
? [
|
822
|
+
'- Inspect the package.json changes in the built-in diff editor [Click to open]',
|
823
|
+
'- Confirm the changes to install the new dependencies and continue the migration',
|
824
|
+
]
|
825
|
+
: [
|
812
826
|
`- Make sure package.json changes make sense and then run '${pmc.install}',`,
|
813
827
|
...(migrations.length > 0
|
814
828
|
? [`- Run '${pmc.exec} nx migrate --run-migrations'`]
|
@@ -827,7 +841,10 @@ async function generateMigrationsJsonAndUpdatePackageJson(root, opts) {
|
|
827
841
|
`- You may run '${pmc.run('nx', 'connect-to-nx-cloud')}' to get faster builds, GitHub integration, and more. Check out https://nx.app`,
|
828
842
|
]
|
829
843
|
: []),
|
830
|
-
]
|
844
|
+
];
|
845
|
+
output_1.output.log({
|
846
|
+
title: 'Next steps:',
|
847
|
+
bodyLines,
|
831
848
|
});
|
832
849
|
}
|
833
850
|
catch (e) {
|
@@ -857,7 +874,6 @@ function addSplitConfigurationMigrationIfAvailable(from, packageJson) {
|
|
857
874
|
{
|
858
875
|
version: '15.7.0-beta.0',
|
859
876
|
description: 'Split global configuration files into individual project.json files. This migration has been added automatically to the beginning of your migration set to retroactively make them work with the new version of Nx.',
|
860
|
-
cli: 'nx',
|
861
877
|
implementation: './src/migrations/update-15-7-0/split-configuration-into-project-json-files',
|
862
878
|
package: '@nrwl/workspace',
|
863
879
|
name: '15-7-0-split-configuration-into-project-json-files',
|
@@ -878,26 +894,31 @@ function showConnectToCloudMessage() {
|
|
878
894
|
return false;
|
879
895
|
}
|
880
896
|
}
|
881
|
-
function runInstall() {
|
882
|
-
|
897
|
+
function runInstall(nxWorkspaceRoot) {
|
898
|
+
let packageManager;
|
899
|
+
let pmCommands;
|
900
|
+
if (nxWorkspaceRoot) {
|
901
|
+
packageManager = (0, package_manager_1.detectPackageManager)(nxWorkspaceRoot);
|
902
|
+
pmCommands = (0, package_manager_1.getPackageManagerCommand)(packageManager, nxWorkspaceRoot);
|
903
|
+
}
|
904
|
+
else {
|
905
|
+
pmCommands = (0, package_manager_1.getPackageManagerCommand)();
|
906
|
+
}
|
883
907
|
// TODO: remove this
|
884
|
-
if ((0, package_manager_1.detectPackageManager)() === 'npm') {
|
908
|
+
if (packageManager ?? (0, package_manager_1.detectPackageManager)() === 'npm') {
|
885
909
|
process.env.npm_config_legacy_peer_deps ??= 'true';
|
886
910
|
}
|
887
911
|
output_1.output.log({
|
888
912
|
title: `Running '${pmCommands.install}' to make sure necessary packages are installed`,
|
889
913
|
});
|
890
|
-
(0, child_process_1.execSync)(pmCommands.install, {
|
914
|
+
(0, child_process_1.execSync)(pmCommands.install, {
|
915
|
+
stdio: [0, 1, 2],
|
916
|
+
windowsHide: false,
|
917
|
+
cwd: nxWorkspaceRoot ?? process.cwd(),
|
918
|
+
});
|
891
919
|
}
|
892
920
|
async function executeMigrations(root, migrations, isVerbose, shouldCreateCommits, commitPrefix) {
|
893
|
-
|
894
|
-
const installDepsIfChanged = () => {
|
895
|
-
const currentDeps = getStringifiedPackageJsonDeps(root);
|
896
|
-
if (initialDeps !== currentDeps) {
|
897
|
-
runInstall();
|
898
|
-
}
|
899
|
-
initialDeps = currentDeps;
|
900
|
-
};
|
921
|
+
const changedDepInstaller = new ChangedDepInstaller(root);
|
901
922
|
const migrationsWithNoChanges = [];
|
902
923
|
const sortedMigrations = migrations.sort((a, b) => {
|
903
924
|
// special case for the split configuration migration to run first
|
@@ -917,49 +938,9 @@ async function executeMigrations(root, migrations, isVerbose, shouldCreateCommit
|
|
917
938
|
for (const m of sortedMigrations) {
|
918
939
|
logger_1.logger.info(`Running migration ${m.package}: ${m.name}`);
|
919
940
|
try {
|
920
|
-
const
|
921
|
-
if (
|
922
|
-
|
923
|
-
logger_1.logger.info(`Ran ${m.name} from ${m.package}`);
|
924
|
-
logger_1.logger.info(` ${m.description}\n`);
|
925
|
-
if (changes.length < 1) {
|
926
|
-
logger_1.logger.info(`No changes were made\n`);
|
927
|
-
migrationsWithNoChanges.push(m);
|
928
|
-
continue;
|
929
|
-
}
|
930
|
-
logger_1.logger.info('Changes:');
|
931
|
-
(0, tree_1.printChanges)(changes, ' ');
|
932
|
-
logger_1.logger.info('');
|
933
|
-
}
|
934
|
-
else {
|
935
|
-
const ngCliAdapter = await getNgCompatLayer();
|
936
|
-
const { madeChanges, loggingQueue } = await ngCliAdapter.runMigration(root, m.package, m.name, (0, project_graph_1.readProjectsConfigurationFromProjectGraph)(await (0, project_graph_1.createProjectGraphAsync)()).projects, isVerbose);
|
937
|
-
logger_1.logger.info(`Ran ${m.name} from ${m.package}`);
|
938
|
-
logger_1.logger.info(` ${m.description}\n`);
|
939
|
-
if (!madeChanges) {
|
940
|
-
logger_1.logger.info(`No changes were made\n`);
|
941
|
-
migrationsWithNoChanges.push(m);
|
942
|
-
continue;
|
943
|
-
}
|
944
|
-
logger_1.logger.info('Changes:');
|
945
|
-
loggingQueue.forEach((log) => logger_1.logger.info(' ' + log));
|
946
|
-
logger_1.logger.info('');
|
947
|
-
}
|
948
|
-
if (shouldCreateCommits) {
|
949
|
-
installDepsIfChanged();
|
950
|
-
const commitMessage = `${commitPrefix}${m.name}`;
|
951
|
-
try {
|
952
|
-
const committedSha = (0, git_utils_1.commitChanges)(commitMessage);
|
953
|
-
if (committedSha) {
|
954
|
-
logger_1.logger.info(chalk.dim(`- Commit created for changes: ${committedSha}`));
|
955
|
-
}
|
956
|
-
else {
|
957
|
-
logger_1.logger.info(chalk.red(`- A commit could not be created/retrieved for an unknown reason`));
|
958
|
-
}
|
959
|
-
}
|
960
|
-
catch (e) {
|
961
|
-
logger_1.logger.info(chalk.red(`- ${e.message}`));
|
962
|
-
}
|
941
|
+
const changes = await runNxOrAngularMigration(root, m, isVerbose, shouldCreateCommits, commitPrefix, () => changedDepInstaller.installDepsIfChanged());
|
942
|
+
if (changes.length === 0) {
|
943
|
+
migrationsWithNoChanges.push(m);
|
963
944
|
}
|
964
945
|
logger_1.logger.info(`---------------------------------------------------------`);
|
965
946
|
}
|
@@ -971,10 +952,78 @@ async function executeMigrations(root, migrations, isVerbose, shouldCreateCommit
|
|
971
952
|
}
|
972
953
|
}
|
973
954
|
if (!shouldCreateCommits) {
|
974
|
-
installDepsIfChanged();
|
955
|
+
changedDepInstaller.installDepsIfChanged();
|
975
956
|
}
|
976
957
|
return migrationsWithNoChanges;
|
977
958
|
}
|
959
|
+
class ChangedDepInstaller {
|
960
|
+
constructor(root) {
|
961
|
+
this.root = root;
|
962
|
+
this.initialDeps = getStringifiedPackageJsonDeps(root);
|
963
|
+
}
|
964
|
+
installDepsIfChanged() {
|
965
|
+
const currentDeps = getStringifiedPackageJsonDeps(this.root);
|
966
|
+
if (this.initialDeps !== currentDeps) {
|
967
|
+
runInstall(this.root);
|
968
|
+
}
|
969
|
+
this.initialDeps = currentDeps;
|
970
|
+
}
|
971
|
+
}
|
972
|
+
async function runNxOrAngularMigration(root, migration, isVerbose, shouldCreateCommits, commitPrefix, installDepsIfChanged, handleInstallDeps = false) {
|
973
|
+
if (!installDepsIfChanged) {
|
974
|
+
const changedDepInstaller = new ChangedDepInstaller(root);
|
975
|
+
installDepsIfChanged = () => changedDepInstaller.installDepsIfChanged();
|
976
|
+
}
|
977
|
+
const { collection, collectionPath } = readMigrationCollection(migration.package, root);
|
978
|
+
let changes = [];
|
979
|
+
if (!isAngularMigration(collection, migration.name)) {
|
980
|
+
changes = await runNxMigration(root, collectionPath, collection, migration.name);
|
981
|
+
logger_1.logger.info(`Ran ${migration.name} from ${migration.package}`);
|
982
|
+
logger_1.logger.info(` ${migration.description}\n`);
|
983
|
+
if (changes.length < 1) {
|
984
|
+
logger_1.logger.info(`No changes were made\n`);
|
985
|
+
return [];
|
986
|
+
}
|
987
|
+
logger_1.logger.info('Changes:');
|
988
|
+
(0, tree_1.printChanges)(changes, ' ');
|
989
|
+
logger_1.logger.info('');
|
990
|
+
}
|
991
|
+
else {
|
992
|
+
const ngCliAdapter = await getNgCompatLayer();
|
993
|
+
const { madeChanges, loggingQueue } = await ngCliAdapter.runMigration(root, migration.package, migration.name, (0, project_graph_1.readProjectsConfigurationFromProjectGraph)(await (0, project_graph_1.createProjectGraphAsync)())
|
994
|
+
.projects, isVerbose);
|
995
|
+
logger_1.logger.info(`Ran ${migration.name} from ${migration.package}`);
|
996
|
+
logger_1.logger.info(` ${migration.description}\n`);
|
997
|
+
if (!madeChanges) {
|
998
|
+
logger_1.logger.info(`No changes were made\n`);
|
999
|
+
return [];
|
1000
|
+
}
|
1001
|
+
logger_1.logger.info('Changes:');
|
1002
|
+
loggingQueue.forEach((log) => logger_1.logger.info(' ' + log));
|
1003
|
+
logger_1.logger.info('');
|
1004
|
+
}
|
1005
|
+
if (shouldCreateCommits) {
|
1006
|
+
installDepsIfChanged();
|
1007
|
+
const commitMessage = `${commitPrefix}${migration.name}`;
|
1008
|
+
try {
|
1009
|
+
const committedSha = (0, git_utils_1.commitChanges)(commitMessage, root);
|
1010
|
+
if (committedSha) {
|
1011
|
+
logger_1.logger.info(chalk.dim(`- Commit created for changes: ${committedSha}`));
|
1012
|
+
}
|
1013
|
+
else {
|
1014
|
+
logger_1.logger.info(chalk.red(`- A commit could not be created/retrieved for an unknown reason`));
|
1015
|
+
}
|
1016
|
+
}
|
1017
|
+
catch (e) {
|
1018
|
+
logger_1.logger.info(chalk.red(`- ${e.message}`));
|
1019
|
+
}
|
1020
|
+
// if we are running this function alone, we need to install deps internally
|
1021
|
+
}
|
1022
|
+
else if (handleInstallDeps) {
|
1023
|
+
installDepsIfChanged();
|
1024
|
+
}
|
1025
|
+
return changes;
|
1026
|
+
}
|
978
1027
|
async function runMigrations(root, opts, args, isVerbose, shouldCreateCommits = false, commitPrefix) {
|
979
1028
|
if (!process.env.NX_MIGRATE_SKIP_INSTALL) {
|
980
1029
|
runInstall();
|
@@ -1108,7 +1157,7 @@ function getImplementationPath(collection, collectionPath, name) {
|
|
1108
1157
|
}
|
1109
1158
|
return { path: implPath, fnSymbol };
|
1110
1159
|
}
|
1111
|
-
function nxCliPath() {
|
1160
|
+
function nxCliPath(nxWorkspaceRoot) {
|
1112
1161
|
const version = process.env.NX_MIGRATE_CLI_VERSION || 'latest';
|
1113
1162
|
try {
|
1114
1163
|
const packageManager = (0, package_manager_1.detectPackageManager)();
|
@@ -1121,7 +1170,7 @@ function nxCliPath() {
|
|
1121
1170
|
},
|
1122
1171
|
license: 'MIT',
|
1123
1172
|
});
|
1124
|
-
(0, package_manager_1.copyPackageManagerConfigurationFiles)(workspace_root_1.workspaceRoot, tmpDir);
|
1173
|
+
(0, package_manager_1.copyPackageManagerConfigurationFiles)(nxWorkspaceRoot ?? workspace_root_1.workspaceRoot, tmpDir);
|
1125
1174
|
if (pmc.preInstall) {
|
1126
1175
|
// ensure package.json and repo in tmp folder is set to a proper package manager state
|
1127
1176
|
(0, child_process_1.execSync)(pmc.preInstall, {
|
@@ -1145,7 +1194,7 @@ function nxCliPath() {
|
|
1145
1194
|
});
|
1146
1195
|
// Set NODE_PATH so that these modules can be used for module resolution
|
1147
1196
|
addToNodePath((0, path_1.join)(tmpDir, 'node_modules'));
|
1148
|
-
addToNodePath((0, path_1.join)(workspace_root_1.workspaceRoot, 'node_modules'));
|
1197
|
+
addToNodePath((0, path_1.join)(nxWorkspaceRoot ?? workspace_root_1.workspaceRoot, 'node_modules'));
|
1149
1198
|
return (0, path_1.join)(tmpDir, `node_modules`, '.bin', 'nx');
|
1150
1199
|
}
|
1151
1200
|
catch (e) {
|
@@ -1168,24 +1217,8 @@ function addToNodePath(dir) {
|
|
1168
1217
|
// Update the env variable.
|
1169
1218
|
process.env.NODE_PATH = paths.join(delimiter);
|
1170
1219
|
}
|
1171
|
-
|
1172
|
-
|
1173
|
-
const entry = collection.generators?.[name] || collection.schematics?.[name];
|
1174
|
-
const shouldBeNx = !!collection.generators?.[name];
|
1175
|
-
const shouldBeNg = !!collection.schematics?.[name];
|
1176
|
-
if (entry.cli && entry.cli !== 'nx' && collection.generators?.[name]) {
|
1177
|
-
output_1.output.warn({
|
1178
|
-
title: `The migration '${collection.name}:${name}' appears to be an Angular CLI migration, but is located in the 'generators' section of migrations.json.`,
|
1179
|
-
bodyLines: [
|
1180
|
-
'In Nx 21, migrations inside `generators` will be treated as Nx Devkit migrations and therefore may not run correctly if they are using Angular Devkit.',
|
1181
|
-
'If the migration should be run with Angular Devkit, please place the migration inside `schematics` instead.',
|
1182
|
-
"Please open an issue on the plugin's repository if you believe this is an error.",
|
1183
|
-
],
|
1184
|
-
});
|
1185
|
-
}
|
1186
|
-
// Currently, if the cli property exists we listen to it. If its nx, its not an ng cli migration.
|
1187
|
-
// If the property is not set, we will fall back to our intuition.
|
1188
|
-
return entry.cli ? entry.cli !== 'nx' : !shouldBeNx && shouldBeNg;
|
1220
|
+
function isAngularMigration(collection, name) {
|
1221
|
+
return !collection.generators?.[name] && collection.schematics?.[name];
|
1189
1222
|
}
|
1190
1223
|
const getNgCompatLayer = (() => {
|
1191
1224
|
let _ngCliAdapter;
|