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.
Files changed (242) hide show
  1. package/.eslintrc.json +5 -1
  2. package/migrations.json +5 -35
  3. package/package.json +12 -12
  4. package/release/index.d.ts +1 -1
  5. package/release/index.js +2 -1
  6. package/schemas/nx-schema.json +182 -35
  7. package/schemas/project-schema.json +5 -0
  8. package/src/adapter/compat.d.ts +1 -1
  9. package/src/adapter/compat.js +3 -0
  10. package/src/command-line/add/add.js +6 -16
  11. package/src/command-line/affected/command-object.js +6 -6
  12. package/src/command-line/examples.js +0 -4
  13. package/src/command-line/exec/command-object.js +1 -1
  14. package/src/command-line/generate/generator-utils.js +8 -3
  15. package/src/command-line/import/import.js +1 -1
  16. package/src/command-line/init/command-object.js +18 -6
  17. package/src/command-line/init/configure-plugins.d.ts +6 -7
  18. package/src/command-line/init/configure-plugins.js +52 -38
  19. package/src/command-line/init/implementation/add-nx-to-turborepo.d.ts +4 -0
  20. package/src/command-line/init/implementation/add-nx-to-turborepo.js +49 -0
  21. package/src/command-line/init/implementation/check-compatible-with-plugins.js +7 -1
  22. package/src/command-line/init/implementation/deduce-default-base.d.ts +1 -0
  23. package/src/command-line/init/implementation/deduce-default-base.js +53 -0
  24. package/src/command-line/init/implementation/react/add-vite-commands-to-package-scripts.js +6 -4
  25. package/src/command-line/init/implementation/react/index.d.ts +1 -1
  26. package/src/command-line/init/implementation/react/index.js +32 -185
  27. package/src/command-line/init/implementation/react/write-vite-config.js +19 -3
  28. package/src/command-line/init/implementation/utils.d.ts +6 -2
  29. package/src/command-line/init/implementation/utils.js +110 -45
  30. package/src/command-line/init/init-v1.js +1 -1
  31. package/src/command-line/init/init-v2.d.ts +1 -0
  32. package/src/command-line/init/init-v2.js +70 -39
  33. package/src/command-line/migrate/migrate-ui-api.d.ts +58 -0
  34. package/src/command-line/migrate/migrate-ui-api.js +227 -0
  35. package/src/command-line/migrate/migrate.d.ts +16 -3
  36. package/src/command-line/migrate/migrate.js +134 -101
  37. package/src/command-line/nx-commands.js +19 -5
  38. package/src/command-line/register/command-object.d.ts +6 -0
  39. package/src/command-line/{activate-powerpack → register}/command-object.js +9 -9
  40. package/src/command-line/register/register.d.ts +2 -0
  41. package/src/command-line/register/register.js +9 -0
  42. package/src/command-line/release/changelog.js +18 -15
  43. package/src/command-line/release/command-object.d.ts +8 -0
  44. package/src/command-line/release/command-object.js +9 -0
  45. package/src/command-line/release/config/config.d.ts +8 -7
  46. package/src/command-line/release/config/config.js +139 -45
  47. package/src/command-line/release/config/use-legacy-versioning.d.ts +2 -0
  48. package/src/command-line/release/config/use-legacy-versioning.js +9 -0
  49. package/src/command-line/release/index.d.ts +4 -0
  50. package/src/command-line/release/index.js +6 -1
  51. package/src/command-line/release/plan-check.js +6 -3
  52. package/src/command-line/release/plan.js +7 -3
  53. package/src/command-line/release/publish.js +7 -3
  54. package/src/command-line/release/release.js +8 -3
  55. package/src/command-line/release/utils/batch-projects-by-generator-config.js +6 -3
  56. package/src/command-line/release/utils/git.d.ts +3 -2
  57. package/src/command-line/release/utils/git.js +65 -9
  58. package/src/command-line/release/utils/github.js +3 -1
  59. package/src/command-line/release/utils/resolve-semver-specifier.d.ts +2 -1
  60. package/src/command-line/release/utils/resolve-semver-specifier.js +2 -1
  61. package/src/command-line/release/utils/semver.d.ts +8 -0
  62. package/src/command-line/release/utils/semver.js +8 -0
  63. package/src/command-line/release/utils/shared-legacy.d.ts +25 -0
  64. package/src/command-line/release/utils/shared-legacy.js +2 -0
  65. package/src/command-line/release/utils/shared.d.ts +11 -17
  66. package/src/command-line/release/version/derive-specifier-from-conventional-commits.d.ts +7 -0
  67. package/src/command-line/release/version/derive-specifier-from-conventional-commits.js +47 -0
  68. package/src/command-line/release/version/deriver-specifier-from-version-plans.d.ts +8 -0
  69. package/src/command-line/release/version/deriver-specifier-from-version-plans.js +59 -0
  70. package/src/command-line/release/version/project-logger.d.ts +8 -0
  71. package/src/command-line/release/version/project-logger.js +45 -0
  72. package/src/command-line/release/version/release-group-processor.d.ts +252 -0
  73. package/src/command-line/release/version/release-group-processor.js +1057 -0
  74. package/src/command-line/release/version/resolve-current-version.d.ts +32 -0
  75. package/src/command-line/release/version/resolve-current-version.js +241 -0
  76. package/src/command-line/release/version/test-utils.d.ts +93 -0
  77. package/src/command-line/release/version/test-utils.js +415 -0
  78. package/src/command-line/release/version/topological-sort.d.ts +9 -0
  79. package/src/command-line/release/version/topological-sort.js +41 -0
  80. package/src/command-line/release/version/version-actions.d.ts +171 -0
  81. package/src/command-line/release/version/version-actions.js +195 -0
  82. package/src/command-line/release/version-legacy.d.ts +46 -0
  83. package/src/command-line/release/version-legacy.js +453 -0
  84. package/src/command-line/release/version.d.ts +0 -40
  85. package/src/command-line/release/version.js +84 -262
  86. package/src/command-line/repair/repair.js +0 -1
  87. package/src/command-line/report/report.d.ts +7 -3
  88. package/src/command-line/report/report.js +52 -18
  89. package/src/command-line/run/command-object.js +2 -2
  90. package/src/command-line/run/executor-utils.d.ts +6 -1
  91. package/src/command-line/run/executor-utils.js +10 -1
  92. package/src/command-line/run/run.js +2 -2
  93. package/src/command-line/run-many/command-object.js +2 -2
  94. package/src/command-line/yargs-utils/shared-options.d.ts +4 -0
  95. package/src/command-line/yargs-utils/shared-options.js +20 -0
  96. package/src/config/misc-interfaces.d.ts +11 -1
  97. package/src/config/nx-json.d.ts +160 -16
  98. package/src/config/project-graph.d.ts +4 -2
  99. package/src/config/project-graph.js +8 -0
  100. package/src/config/workspace-json-project-json.d.ts +2 -2
  101. package/src/core/graph/main.js +1 -1
  102. package/src/core/graph/runtime.js +1 -1
  103. package/src/core/graph/styles.css +2 -2
  104. package/src/core/graph/styles.js +1 -1
  105. package/src/daemon/client/client.d.ts +2 -0
  106. package/src/daemon/client/client.js +15 -0
  107. package/src/daemon/message-types/glob.d.ts +7 -0
  108. package/src/daemon/message-types/glob.js +9 -1
  109. package/src/daemon/message-types/hash-glob.d.ts +6 -0
  110. package/src/daemon/message-types/hash-glob.js +9 -1
  111. package/src/daemon/server/handle-glob.d.ts +1 -0
  112. package/src/daemon/server/handle-glob.js +8 -0
  113. package/src/daemon/server/handle-hash-glob.d.ts +1 -0
  114. package/src/daemon/server/handle-hash-glob.js +8 -0
  115. package/src/daemon/server/logger.js +2 -1
  116. package/src/daemon/server/server.js +7 -0
  117. package/src/devkit-internals.d.ts +3 -2
  118. package/src/devkit-internals.js +5 -1
  119. package/src/executors/run-commands/run-commands.impl.d.ts +2 -5
  120. package/src/executors/run-commands/run-commands.impl.js +14 -42
  121. package/src/executors/run-commands/running-tasks.d.ts +9 -4
  122. package/src/executors/run-commands/running-tasks.js +103 -30
  123. package/src/executors/run-script/run-script.impl.js +4 -3
  124. package/src/generators/internal-utils/format-changed-files-with-prettier-if-available.js +8 -0
  125. package/src/generators/testing-utils/create-tree.js +5 -1
  126. 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
  127. package/src/migrations/update-21-0-0/release-version-config-changes.js +111 -0
  128. package/src/native/index.d.ts +98 -19
  129. package/src/native/index.js +16 -2
  130. package/src/native/native-bindings.js +7 -0
  131. package/src/native/nx.wasi-browser.js +20 -19
  132. package/src/native/nx.wasi.cjs +20 -19
  133. package/src/native/nx.wasm32-wasi.wasm +0 -0
  134. package/src/nx-cloud/nx-cloud-tasks-runner-shell.js +3 -3
  135. package/src/plugins/js/lock-file/lock-file.js +28 -13
  136. package/src/plugins/js/lock-file/utils/package-json.d.ts +1 -1
  137. package/src/plugins/js/lock-file/utils/package-json.js +8 -6
  138. package/src/plugins/js/lock-file/utils/pnpm-normalizer.js +3 -3
  139. package/src/plugins/js/lock-file/yarn-parser.js +85 -39
  140. package/src/plugins/js/project-graph/affected/lock-file-changes.js +1 -0
  141. package/src/plugins/js/project-graph/build-dependencies/explicit-project-dependencies.js +1 -1
  142. package/src/plugins/js/project-graph/build-dependencies/target-project-locator.d.ts +10 -1
  143. package/src/plugins/js/project-graph/build-dependencies/target-project-locator.js +59 -6
  144. package/src/plugins/js/utils/packages.js +22 -3
  145. package/src/plugins/js/utils/register.js +1 -0
  146. package/src/plugins/js/utils/typescript.js +3 -3
  147. package/src/plugins/package-json/create-nodes.d.ts +1 -1
  148. package/src/plugins/package-json/create-nodes.js +4 -2
  149. package/src/project-graph/affected/locators/project-glob-changes.js +2 -2
  150. package/src/project-graph/error-types.js +32 -2
  151. package/src/project-graph/file-utils.d.ts +1 -10
  152. package/src/project-graph/file-utils.js +2 -77
  153. package/src/project-graph/nx-deps-cache.js +7 -2
  154. package/src/project-graph/plugins/get-plugins.js +2 -1
  155. package/src/project-graph/plugins/in-process-loader.js +1 -1
  156. package/src/project-graph/plugins/isolation/plugin-worker.js +12 -6
  157. package/src/project-graph/plugins/loaded-nx-plugin.d.ts +2 -1
  158. package/src/project-graph/plugins/loaded-nx-plugin.js +3 -7
  159. package/src/project-graph/plugins/public-api.d.ts +1 -1
  160. package/src/project-graph/plugins/utils.d.ts +2 -2
  161. package/src/project-graph/plugins/utils.js +2 -2
  162. package/src/project-graph/project-graph.js +5 -2
  163. package/src/project-graph/utils/project-configuration-utils.d.ts +3 -3
  164. package/src/project-graph/utils/project-configuration-utils.js +54 -21
  165. package/src/project-graph/utils/retrieve-workspace-files.d.ts +1 -1
  166. package/src/project-graph/utils/retrieve-workspace-files.js +14 -18
  167. package/src/tasks-runner/batch/batch-messages.d.ts +2 -0
  168. package/src/tasks-runner/batch/run-batch.js +3 -4
  169. package/src/tasks-runner/cache.d.ts +20 -6
  170. package/src/tasks-runner/cache.js +104 -20
  171. package/src/tasks-runner/create-task-graph.d.ts +0 -1
  172. package/src/tasks-runner/create-task-graph.js +11 -11
  173. package/src/tasks-runner/default-tasks-runner.js +5 -14
  174. package/src/tasks-runner/forked-process-task-runner.d.ts +8 -3
  175. package/src/tasks-runner/forked-process-task-runner.js +59 -46
  176. package/src/tasks-runner/init-tasks-runner.d.ts +15 -1
  177. package/src/tasks-runner/init-tasks-runner.js +62 -2
  178. package/src/tasks-runner/is-tui-enabled.d.ts +2 -0
  179. package/src/tasks-runner/is-tui-enabled.js +64 -0
  180. package/src/tasks-runner/life-cycle.d.ts +14 -3
  181. package/src/tasks-runner/life-cycle.js +37 -2
  182. package/src/tasks-runner/life-cycles/task-history-life-cycle-old.d.ts +2 -0
  183. package/src/tasks-runner/life-cycles/task-history-life-cycle-old.js +15 -7
  184. package/src/tasks-runner/life-cycles/task-history-life-cycle.d.ts +5 -0
  185. package/src/tasks-runner/life-cycles/task-history-life-cycle.js +35 -5
  186. package/src/tasks-runner/life-cycles/tui-summary-life-cycle.d.ts +18 -0
  187. package/src/tasks-runner/life-cycles/tui-summary-life-cycle.js +229 -0
  188. package/src/tasks-runner/pseudo-terminal.d.ts +10 -7
  189. package/src/tasks-runner/pseudo-terminal.js +37 -35
  190. package/src/tasks-runner/run-command.d.ts +4 -1
  191. package/src/tasks-runner/run-command.js +220 -42
  192. package/src/tasks-runner/running-tasks/node-child-process.js +4 -11
  193. package/src/tasks-runner/running-tasks/running-task.d.ts +3 -0
  194. package/src/tasks-runner/running-tasks/shared-running-task.d.ts +14 -0
  195. package/src/tasks-runner/running-tasks/shared-running-task.js +30 -0
  196. package/src/tasks-runner/task-env.d.ts +1 -4
  197. package/src/tasks-runner/task-env.js +2 -0
  198. package/src/tasks-runner/task-orchestrator.d.ts +26 -10
  199. package/src/tasks-runner/task-orchestrator.js +212 -57
  200. package/src/tasks-runner/tasks-runner.d.ts +1 -0
  201. package/src/tasks-runner/tasks-schedule.d.ts +1 -0
  202. package/src/tasks-runner/tasks-schedule.js +9 -0
  203. package/src/tasks-runner/utils.d.ts +2 -2
  204. package/src/tasks-runner/utils.js +18 -12
  205. package/src/utils/child-process.d.ts +4 -0
  206. package/src/utils/child-process.js +23 -30
  207. package/src/utils/command-line-utils.d.ts +1 -1
  208. package/src/utils/find-matching-projects.js +2 -2
  209. package/src/utils/git-utils.d.ts +1 -1
  210. package/src/utils/git-utils.js +8 -3
  211. package/src/utils/handle-errors.js +15 -0
  212. package/src/utils/is-ci.js +4 -1
  213. package/src/utils/is-using-prettier.d.ts +3 -0
  214. package/src/utils/is-using-prettier.js +62 -0
  215. package/src/utils/nx-key.d.ts +7 -0
  216. package/src/utils/nx-key.js +52 -0
  217. package/src/utils/package-json.d.ts +1 -1
  218. package/src/utils/package-json.js +16 -2
  219. package/src/utils/package-manager.js +2 -2
  220. package/src/utils/path.js +1 -1
  221. package/src/utils/require-nx-key.d.ts +1 -0
  222. package/src/utils/require-nx-key.js +22 -0
  223. package/src/utils/workspace-context.d.ts +2 -0
  224. package/src/utils/workspace-context.js +16 -0
  225. package/src/command-line/activate-powerpack/activate-powerpack.d.ts +0 -2
  226. package/src/command-line/activate-powerpack/activate-powerpack.js +0 -34
  227. package/src/command-line/activate-powerpack/command-object.d.ts +0 -6
  228. package/src/command-line/init/implementation/react/write-craco-config.d.ts +0 -1
  229. package/src/command-line/init/implementation/react/write-craco-config.js +0 -61
  230. package/src/migrations/update-17-0-0/move-cache-directory.d.ts +0 -2
  231. package/src/migrations/update-17-0-0/move-cache-directory.js +0 -35
  232. package/src/migrations/update-17-0-0/rm-default-collection-npm-scope.js +0 -72
  233. package/src/migrations/update-17-0-0/use-minimal-config-for-tasks-runner-options.d.ts +0 -2
  234. package/src/migrations/update-17-0-0/use-minimal-config-for-tasks-runner-options.js +0 -122
  235. package/src/migrations/update-17-2-0/move-default-base.d.ts +0 -5
  236. package/src/migrations/update-17-2-0/move-default-base.js +0 -21
  237. package/src/migrations/update-17-3-0/nx-release-path.d.ts +0 -3
  238. package/src/migrations/update-17-3-0/nx-release-path.js +0 -47
  239. package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.d.ts +0 -2
  240. package/src/migrations/update-18-0-0/disable-crystal-for-existing-workspaces.js +0 -11
  241. package/src/utils/powerpack.d.ts +0 -5
  242. 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: [], packageGroupOrder };
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.values(packageJsonUpdates)) {
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.push(packageJsonUpdate);
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
- return await (0, enquirer_1.prompt)([
326
- {
327
- name: 'shouldApply',
328
- type: 'confirm',
329
- message: packageUpdate['x-prompt'],
330
- initial: true,
331
- },
332
- ]).then(({ shouldApply }) => {
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
- logger_1.logger.warn(`Unable to fetch migrations for ${packageName}@${packageVersion}: ${e.message}`);
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
- output_1.output.log({
810
- title: 'Next steps:',
811
- bodyLines: [
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
- const pmCommands = (0, package_manager_1.getPackageManagerCommand)();
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, { stdio: [0, 1, 2], windowsHide: false });
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
- let initialDeps = getStringifiedPackageJsonDeps(root);
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 { collection, collectionPath } = readMigrationCollection(m.package, root);
921
- if (!isAngularMigration(collection, collectionPath, m.name)) {
922
- const changes = await runNxMigration(root, collectionPath, collection, m.name);
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
- // TODO (v21): Remove CLI determination of Angular Migration
1172
- function isAngularMigration(collection, collectionPath, name) {
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;