nx 21.0.0-canary.20250206-8bd0bcd → 21.0.0-canary.20250418-8619c1d

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 (219) hide show
  1. package/.eslintrc.json +5 -1
  2. package/package.json +13 -12
  3. package/release/index.d.ts +1 -1
  4. package/release/index.js +2 -1
  5. package/schemas/nx-schema.json +186 -35
  6. package/src/adapter/compat.d.ts +1 -1
  7. package/src/adapter/compat.js +3 -0
  8. package/src/command-line/add/add.js +6 -16
  9. package/src/command-line/affected/command-object.js +6 -6
  10. package/src/command-line/examples.js +0 -4
  11. package/src/command-line/exec/command-object.js +1 -1
  12. package/src/command-line/generate/generator-utils.js +8 -3
  13. package/src/command-line/graph/graph.js +2 -0
  14. package/src/command-line/import/import.js +1 -1
  15. package/src/command-line/init/command-object.js +18 -6
  16. package/src/command-line/init/configure-plugins.d.ts +6 -7
  17. package/src/command-line/init/configure-plugins.js +47 -35
  18. package/src/command-line/init/implementation/add-nx-to-turborepo.d.ts +4 -0
  19. package/src/command-line/init/implementation/add-nx-to-turborepo.js +49 -0
  20. package/src/command-line/init/implementation/check-compatible-with-plugins.js +7 -1
  21. package/src/command-line/init/implementation/deduce-default-base.d.ts +1 -0
  22. package/src/command-line/init/implementation/deduce-default-base.js +53 -0
  23. package/src/command-line/init/implementation/react/add-vite-commands-to-package-scripts.js +6 -4
  24. package/src/command-line/init/implementation/react/index.d.ts +1 -1
  25. package/src/command-line/init/implementation/react/index.js +32 -185
  26. package/src/command-line/init/implementation/react/write-vite-config.js +19 -3
  27. package/src/command-line/init/implementation/utils.d.ts +4 -1
  28. package/src/command-line/init/implementation/utils.js +108 -44
  29. package/src/command-line/init/init-v1.js +1 -1
  30. package/src/command-line/init/init-v2.d.ts +1 -0
  31. package/src/command-line/init/init-v2.js +68 -38
  32. package/src/command-line/migrate/migrate-ui-api.d.ts +56 -0
  33. package/src/command-line/migrate/migrate-ui-api.js +188 -0
  34. package/src/command-line/migrate/migrate.d.ts +17 -0
  35. package/src/command-line/migrate/migrate.js +106 -63
  36. package/src/command-line/nx-commands.js +19 -5
  37. package/src/command-line/register/command-object.d.ts +6 -0
  38. package/src/command-line/{activate-powerpack → register}/command-object.js +9 -9
  39. package/src/command-line/register/register.d.ts +2 -0
  40. package/src/command-line/register/register.js +9 -0
  41. package/src/command-line/release/changelog.js +18 -15
  42. package/src/command-line/release/command-object.d.ts +2 -0
  43. package/src/command-line/release/command-object.js +9 -0
  44. package/src/command-line/release/config/config.d.ts +8 -7
  45. package/src/command-line/release/config/config.js +129 -42
  46. package/src/command-line/release/config/use-legacy-versioning.d.ts +2 -0
  47. package/src/command-line/release/config/use-legacy-versioning.js +9 -0
  48. package/src/command-line/release/index.d.ts +4 -0
  49. package/src/command-line/release/index.js +6 -1
  50. package/src/command-line/release/plan-check.js +6 -3
  51. package/src/command-line/release/plan.js +7 -3
  52. package/src/command-line/release/publish.js +7 -3
  53. package/src/command-line/release/release.js +8 -3
  54. package/src/command-line/release/utils/batch-projects-by-generator-config.js +6 -3
  55. package/src/command-line/release/utils/git.d.ts +3 -2
  56. package/src/command-line/release/utils/git.js +65 -9
  57. package/src/command-line/release/utils/github.js +3 -1
  58. package/src/command-line/release/utils/resolve-semver-specifier.d.ts +2 -1
  59. package/src/command-line/release/utils/resolve-semver-specifier.js +2 -1
  60. package/src/command-line/release/utils/semver.d.ts +8 -0
  61. package/src/command-line/release/utils/semver.js +8 -0
  62. package/src/command-line/release/utils/shared-legacy.d.ts +25 -0
  63. package/src/command-line/release/utils/shared-legacy.js +2 -0
  64. package/src/command-line/release/utils/shared.d.ts +11 -17
  65. package/src/command-line/release/version/derive-specifier-from-conventional-commits.d.ts +7 -0
  66. package/src/command-line/release/version/derive-specifier-from-conventional-commits.js +47 -0
  67. package/src/command-line/release/version/deriver-specifier-from-version-plans.d.ts +8 -0
  68. package/src/command-line/release/version/deriver-specifier-from-version-plans.js +59 -0
  69. package/src/command-line/release/version/project-logger.d.ts +8 -0
  70. package/src/command-line/release/version/project-logger.js +45 -0
  71. package/src/command-line/release/version/release-group-processor.d.ts +251 -0
  72. package/src/command-line/release/version/release-group-processor.js +1040 -0
  73. package/src/command-line/release/version/resolve-current-version.d.ts +32 -0
  74. package/src/command-line/release/version/resolve-current-version.js +241 -0
  75. package/src/command-line/release/version/test-utils.d.ts +95 -0
  76. package/src/command-line/release/version/test-utils.js +416 -0
  77. package/src/command-line/release/version/topological-sort.d.ts +9 -0
  78. package/src/command-line/release/version/topological-sort.js +41 -0
  79. package/src/command-line/release/version/version-actions.d.ts +170 -0
  80. package/src/command-line/release/version/version-actions.js +183 -0
  81. package/src/command-line/release/version-legacy.d.ts +46 -0
  82. package/src/command-line/release/version-legacy.js +453 -0
  83. package/src/command-line/release/version.d.ts +0 -40
  84. package/src/command-line/release/version.js +80 -262
  85. package/src/command-line/report/report.d.ts +7 -3
  86. package/src/command-line/report/report.js +52 -18
  87. package/src/command-line/run/command-object.js +2 -2
  88. package/src/command-line/run/run.js +1 -1
  89. package/src/command-line/run-many/command-object.js +2 -2
  90. package/src/command-line/yargs-utils/shared-options.d.ts +4 -0
  91. package/src/command-line/yargs-utils/shared-options.js +20 -0
  92. package/src/commands-runner/get-command-projects.js +17 -2
  93. package/src/config/misc-interfaces.d.ts +10 -0
  94. package/src/config/nx-json.d.ts +153 -15
  95. package/src/config/project-graph.d.ts +4 -2
  96. package/src/config/project-graph.js +8 -0
  97. package/src/config/task-graph.d.ts +5 -0
  98. package/src/config/workspace-json-project-json.d.ts +6 -2
  99. package/src/core/graph/main.js +1 -1
  100. package/src/core/graph/runtime.js +1 -1
  101. package/src/core/graph/styles.css +2 -2
  102. package/src/core/graph/styles.js +1 -1
  103. package/src/daemon/client/client.d.ts +2 -0
  104. package/src/daemon/client/client.js +15 -0
  105. package/src/daemon/message-types/glob.d.ts +7 -0
  106. package/src/daemon/message-types/glob.js +9 -1
  107. package/src/daemon/message-types/hash-glob.d.ts +6 -0
  108. package/src/daemon/message-types/hash-glob.js +9 -1
  109. package/src/daemon/server/handle-glob.d.ts +1 -0
  110. package/src/daemon/server/handle-glob.js +8 -0
  111. package/src/daemon/server/handle-hash-glob.d.ts +1 -0
  112. package/src/daemon/server/handle-hash-glob.js +8 -0
  113. package/src/daemon/server/logger.js +2 -1
  114. package/src/daemon/server/server.js +7 -0
  115. package/src/devkit-internals.d.ts +2 -1
  116. package/src/devkit-internals.js +4 -1
  117. package/src/executors/run-commands/run-commands.impl.d.ts +18 -17
  118. package/src/executors/run-commands/run-commands.impl.js +25 -292
  119. package/src/executors/run-commands/running-tasks.d.ts +40 -0
  120. package/src/executors/run-commands/running-tasks.js +386 -0
  121. package/src/executors/run-script/run-script.impl.js +4 -3
  122. package/src/generators/internal-utils/format-changed-files-with-prettier-if-available.js +8 -0
  123. package/src/generators/testing-utils/create-tree.js +5 -1
  124. package/src/native/index.d.ts +94 -19
  125. package/src/native/index.js +16 -2
  126. package/src/native/native-bindings.js +6 -0
  127. package/src/native/nx.wasi-browser.js +20 -19
  128. package/src/native/nx.wasi.cjs +20 -19
  129. package/src/native/nx.wasm32-wasi.wasm +0 -0
  130. package/src/nx-cloud/nx-cloud-tasks-runner-shell.js +3 -3
  131. package/src/plugins/js/lock-file/lock-file.js +28 -13
  132. package/src/plugins/js/lock-file/utils/package-json.d.ts +1 -1
  133. package/src/plugins/js/lock-file/utils/package-json.js +2 -1
  134. package/src/plugins/js/lock-file/yarn-parser.js +85 -39
  135. package/src/plugins/js/project-graph/affected/lock-file-changes.js +1 -0
  136. package/src/plugins/js/project-graph/build-dependencies/explicit-project-dependencies.js +1 -1
  137. package/src/plugins/js/project-graph/build-dependencies/target-project-locator.d.ts +10 -1
  138. package/src/plugins/js/project-graph/build-dependencies/target-project-locator.js +59 -6
  139. package/src/plugins/js/utils/packages.js +22 -3
  140. package/src/plugins/js/utils/register.js +1 -0
  141. package/src/plugins/js/utils/typescript.js +3 -3
  142. package/src/plugins/package-json/create-nodes.d.ts +1 -1
  143. package/src/plugins/package-json/create-nodes.js +3 -1
  144. package/src/project-graph/affected/locators/project-glob-changes.js +2 -2
  145. package/src/project-graph/error-types.js +32 -2
  146. package/src/project-graph/plugins/get-plugins.js +2 -1
  147. package/src/project-graph/plugins/in-process-loader.js +1 -1
  148. package/src/project-graph/plugins/isolation/plugin-worker.js +12 -6
  149. package/src/project-graph/plugins/loaded-nx-plugin.d.ts +2 -1
  150. package/src/project-graph/plugins/utils.d.ts +2 -2
  151. package/src/project-graph/plugins/utils.js +2 -2
  152. package/src/project-graph/project-graph.js +1 -1
  153. package/src/project-graph/utils/project-configuration-utils.d.ts +1 -1
  154. package/src/project-graph/utils/project-configuration-utils.js +25 -11
  155. package/src/project-graph/utils/retrieve-workspace-files.d.ts +1 -1
  156. package/src/project-graph/utils/retrieve-workspace-files.js +14 -18
  157. package/src/tasks-runner/batch/batch-messages.d.ts +2 -0
  158. package/src/tasks-runner/batch/run-batch.js +2 -3
  159. package/src/tasks-runner/cache.d.ts +20 -6
  160. package/src/tasks-runner/cache.js +104 -20
  161. package/src/tasks-runner/create-task-graph.d.ts +4 -1
  162. package/src/tasks-runner/create-task-graph.js +48 -16
  163. package/src/tasks-runner/default-tasks-runner.js +4 -13
  164. package/src/tasks-runner/forked-process-task-runner.d.ts +13 -14
  165. package/src/tasks-runner/forked-process-task-runner.js +160 -303
  166. package/src/tasks-runner/init-tasks-runner.d.ts +15 -1
  167. package/src/tasks-runner/init-tasks-runner.js +59 -2
  168. package/src/tasks-runner/is-tui-enabled.d.ts +2 -0
  169. package/src/tasks-runner/is-tui-enabled.js +64 -0
  170. package/src/tasks-runner/life-cycle.d.ts +10 -3
  171. package/src/tasks-runner/life-cycle.js +23 -2
  172. package/src/tasks-runner/life-cycles/task-history-life-cycle-old.js +7 -2
  173. package/src/tasks-runner/life-cycles/task-history-life-cycle.js +6 -1
  174. package/src/tasks-runner/life-cycles/tui-summary-life-cycle.d.ts +17 -0
  175. package/src/tasks-runner/life-cycles/tui-summary-life-cycle.js +221 -0
  176. package/src/tasks-runner/pseudo-terminal.d.ts +17 -8
  177. package/src/tasks-runner/pseudo-terminal.js +63 -47
  178. package/src/tasks-runner/run-command.d.ts +1 -0
  179. package/src/tasks-runner/run-command.js +180 -23
  180. package/src/tasks-runner/running-tasks/batch-process.d.ts +14 -0
  181. package/src/tasks-runner/running-tasks/batch-process.js +70 -0
  182. package/src/tasks-runner/running-tasks/node-child-process.d.ts +36 -0
  183. package/src/tasks-runner/running-tasks/node-child-process.js +184 -0
  184. package/src/tasks-runner/running-tasks/noop-child-process.d.ts +15 -0
  185. package/src/tasks-runner/running-tasks/noop-child-process.js +19 -0
  186. package/src/tasks-runner/running-tasks/running-task.d.ts +8 -0
  187. package/src/tasks-runner/running-tasks/running-task.js +6 -0
  188. package/src/tasks-runner/task-env.d.ts +1 -4
  189. package/src/tasks-runner/task-env.js +2 -0
  190. package/src/tasks-runner/task-orchestrator.d.ts +25 -7
  191. package/src/tasks-runner/task-orchestrator.js +237 -95
  192. package/src/tasks-runner/tasks-schedule.js +5 -1
  193. package/src/tasks-runner/utils.d.ts +2 -10
  194. package/src/tasks-runner/utils.js +27 -15
  195. package/src/utils/child-process.d.ts +4 -0
  196. package/src/utils/child-process.js +23 -30
  197. package/src/utils/command-line-utils.d.ts +1 -1
  198. package/src/utils/find-matching-projects.js +2 -2
  199. package/src/utils/git-utils.d.ts +1 -1
  200. package/src/utils/git-utils.js +8 -3
  201. package/src/utils/handle-errors.js +15 -0
  202. package/src/utils/is-ci.js +4 -1
  203. package/src/utils/is-using-prettier.d.ts +3 -0
  204. package/src/utils/is-using-prettier.js +62 -0
  205. package/src/utils/nx-key.d.ts +7 -0
  206. package/src/utils/nx-key.js +52 -0
  207. package/src/utils/package-manager.js +2 -2
  208. package/src/utils/path.js +1 -1
  209. package/src/utils/require-nx-key.d.ts +1 -0
  210. package/src/utils/require-nx-key.js +22 -0
  211. package/src/utils/workspace-context.d.ts +2 -0
  212. package/src/utils/workspace-context.js +16 -0
  213. package/src/command-line/activate-powerpack/activate-powerpack.d.ts +0 -2
  214. package/src/command-line/activate-powerpack/activate-powerpack.js +0 -34
  215. package/src/command-line/activate-powerpack/command-object.d.ts +0 -6
  216. package/src/command-line/init/implementation/react/write-craco-config.d.ts +0 -1
  217. package/src/command-line/init/implementation/react/write-craco-config.js +0 -61
  218. package/src/utils/powerpack.d.ts +0 -5
  219. package/src/utils/powerpack.js +0 -33
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.createNxJsonFile = createNxJsonFile;
4
+ exports.createNxJsonFromTurboJson = createNxJsonFromTurboJson;
4
5
  exports.addDepsToPackageJson = addDepsToPackageJson;
5
6
  exports.updateGitIgnore = updateGitIgnore;
6
7
  exports.runInstall = runInstall;
@@ -10,6 +11,7 @@ exports.markRootPackageJsonAsNxProjectLegacy = markRootPackageJsonAsNxProjectLeg
10
11
  exports.markPackageJsonAsNxProject = markPackageJsonAsNxProject;
11
12
  exports.printFinalMessage = printFinalMessage;
12
13
  exports.isMonorepo = isMonorepo;
14
+ exports.isCRA = isCRA;
13
15
  const child_process_1 = require("child_process");
14
16
  const path_1 = require("path");
15
17
  const fileutils_1 = require("../../../utils/fileutils");
@@ -21,7 +23,8 @@ const fs_1 = require("fs");
21
23
  const connect_to_nx_cloud_1 = require("../../../nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud");
22
24
  const url_shorten_1 = require("../../../nx-cloud/utilities/url-shorten");
23
25
  const connect_to_nx_cloud_2 = require("../../connect/connect-to-nx-cloud");
24
- const default_base_1 = require("../../../utils/default-base");
26
+ const deduce_default_base_1 = require("./deduce-default-base");
27
+ const child_process_2 = require("../../../utils/child-process");
25
28
  function createNxJsonFile(repoRoot, topologicalTargets, cacheableOperations, scriptOutputs) {
26
29
  const nxJsonPath = (0, path_2.joinPathFragments)(repoRoot, 'nx.json');
27
30
  let nxJson = {};
@@ -53,56 +56,104 @@ function createNxJsonFile(repoRoot, topologicalTargets, cacheableOperations, scr
53
56
  if (Object.keys(nxJson.targetDefaults).length === 0) {
54
57
  delete nxJson.targetDefaults;
55
58
  }
56
- nxJson.defaultBase ??= deduceDefaultBase();
59
+ const defaultBase = (0, deduce_default_base_1.deduceDefaultBase)();
60
+ // Do not add defaultBase if it is inferred to be the Nx default value of main
61
+ if (defaultBase !== 'main') {
62
+ nxJson.defaultBase ??= defaultBase;
63
+ }
57
64
  (0, fileutils_1.writeJsonFile)(nxJsonPath, nxJson);
58
65
  }
59
- function deduceDefaultBase() {
60
- try {
61
- (0, child_process_1.execSync)(`git rev-parse --verify main`, {
62
- stdio: ['ignore', 'ignore', 'ignore'],
63
- windowsHide: false,
64
- });
65
- return 'main';
66
- }
67
- catch {
68
- try {
69
- (0, child_process_1.execSync)(`git rev-parse --verify dev`, {
70
- stdio: ['ignore', 'ignore', 'ignore'],
71
- windowsHide: false,
72
- });
73
- return 'dev';
66
+ function createNxJsonFromTurboJson(turboJson) {
67
+ const nxJson = {
68
+ $schema: './node_modules/nx/schemas/nx-schema.json',
69
+ };
70
+ // Handle global dependencies
71
+ if (turboJson.globalDependencies?.length > 0) {
72
+ nxJson.namedInputs = {
73
+ sharedGlobals: turboJson.globalDependencies.map((dep) => `{workspaceRoot}/${dep}`),
74
+ default: ['{projectRoot}/**/*', 'sharedGlobals'],
75
+ };
76
+ }
77
+ // Handle global env vars
78
+ if (turboJson.globalEnv?.length > 0) {
79
+ nxJson.namedInputs = nxJson.namedInputs || {};
80
+ nxJson.namedInputs.sharedGlobals = nxJson.namedInputs.sharedGlobals || [];
81
+ nxJson.namedInputs.sharedGlobals.push(...turboJson.globalEnv.map((env) => ({ env })));
82
+ nxJson.namedInputs.default = nxJson.namedInputs.default || [];
83
+ if (!nxJson.namedInputs.default.includes('{projectRoot}/**/*')) {
84
+ nxJson.namedInputs.default.push('{projectRoot}/**/*');
74
85
  }
75
- catch {
76
- try {
77
- (0, child_process_1.execSync)(`git rev-parse --verify develop`, {
78
- stdio: ['ignore', 'ignore', 'ignore'],
79
- windowsHide: false,
80
- });
81
- return 'develop';
86
+ if (!nxJson.namedInputs.default.includes('sharedGlobals')) {
87
+ nxJson.namedInputs.default.push('sharedGlobals');
88
+ }
89
+ }
90
+ // Handle task configurations
91
+ if (turboJson.tasks) {
92
+ nxJson.targetDefaults = {};
93
+ for (const [taskName, taskConfig] of Object.entries(turboJson.tasks)) {
94
+ // Skip project-specific tasks (containing #)
95
+ if (taskName.includes('#'))
96
+ continue;
97
+ const config = taskConfig;
98
+ nxJson.targetDefaults[taskName] = {};
99
+ // Handle dependsOn
100
+ if (config.dependsOn?.length > 0) {
101
+ nxJson.targetDefaults[taskName].dependsOn = config.dependsOn;
82
102
  }
83
- catch {
84
- try {
85
- (0, child_process_1.execSync)(`git rev-parse --verify next`, {
86
- stdio: ['ignore', 'ignore', 'ignore'],
87
- windowsHide: false,
88
- });
89
- return 'next';
90
- }
91
- catch {
92
- try {
93
- (0, child_process_1.execSync)(`git rev-parse --verify master`, {
94
- stdio: ['ignore', 'ignore', 'ignore'],
95
- windowsHide: false,
96
- });
97
- return 'master';
103
+ // Handle inputs
104
+ if (config.inputs?.length > 0) {
105
+ nxJson.targetDefaults[taskName].inputs = config.inputs
106
+ .map((input) => {
107
+ if (input === '$TURBO_DEFAULT$') {
108
+ return '{projectRoot}/**/*';
98
109
  }
99
- catch {
100
- return (0, default_base_1.deduceDefaultBase)();
110
+ // Don't add projectRoot if it's already there or if it's an env var
111
+ if (input.startsWith('{projectRoot}/') ||
112
+ input.startsWith('{env.') ||
113
+ input.startsWith('$'))
114
+ return input;
115
+ return `{projectRoot}/${input}`;
116
+ })
117
+ .map((input) => {
118
+ // Don't add projectRoot if it's already there or if it's an env var
119
+ if (input.startsWith('{projectRoot}/') ||
120
+ input.startsWith('{env.') ||
121
+ input.startsWith('$'))
122
+ return input;
123
+ return `{projectRoot}/${input}`;
124
+ });
125
+ }
126
+ // Handle outputs
127
+ if (config.outputs?.length > 0) {
128
+ nxJson.targetDefaults[taskName].outputs = config.outputs.map((output) => {
129
+ // Don't add projectRoot if it's already there
130
+ if (output.startsWith('{projectRoot}/'))
131
+ return output;
132
+ // Handle negated patterns by adding projectRoot after the !
133
+ if (output.startsWith('!')) {
134
+ return `!{projectRoot}/${output.slice(1)}`;
101
135
  }
102
- }
136
+ return `{projectRoot}/${output}`;
137
+ });
103
138
  }
139
+ // Handle cache setting - true by default in Turbo
140
+ nxJson.targetDefaults[taskName].cache = config.cache !== false;
104
141
  }
105
142
  }
143
+ /**
144
+ * The fact that cacheDir was in use suggests the user had a reason for deviating from the default.
145
+ * We can't know what that reason was, nor if it would still be applicable in Nx, but we can at least
146
+ * improve discoverability of the relevant Nx option by explicitly including it with its default value.
147
+ */
148
+ if (turboJson.cacheDir) {
149
+ nxJson.cacheDirectory = '.nx/cache';
150
+ }
151
+ const defaultBase = (0, deduce_default_base_1.deduceDefaultBase)();
152
+ // Do not add defaultBase if it is inferred to be the Nx default value of main
153
+ if (defaultBase !== 'main') {
154
+ nxJson.defaultBase ??= defaultBase;
155
+ }
156
+ return nxJson;
106
157
  }
107
158
  function addDepsToPackageJson(repoRoot, additionalPackages) {
108
159
  const path = (0, path_2.joinPathFragments)(repoRoot, `package.json`);
@@ -202,8 +253,8 @@ function printFinalMessage({ learnMoreLink, }) {
202
253
  output_1.output.success({
203
254
  title: '🎉 Done!',
204
255
  bodyLines: [
205
- `- Run "${pmc.exec} nx run-many -t build" to run the build target for every project in the workspace. Run it again to replay the cached computation. https://nx.dev/features/cache-task-results`,
206
- `- Run "${pmc.exec} nx graph" to see the graph of projects and tasks in your workspace. https://nx.dev/core-features/explore-graph`,
256
+ `- Run "${(0, child_process_2.getRunNxBaseCommand)(pmc)} run-many -t build" to run the build target for every project in the workspace. Run it again to replay the cached computation. https://nx.dev/features/cache-task-results`,
257
+ `- Run "${(0, child_process_2.getRunNxBaseCommand)(pmc)} graph" to see the graph of projects and tasks in your workspace. https://nx.dev/core-features/explore-graph`,
207
258
  learnMoreLink ? `- Learn more at ${learnMoreLink}.` : undefined,
208
259
  ].filter(Boolean),
209
260
  });
@@ -217,3 +268,16 @@ function isMonorepo(packageJson) {
217
268
  return true;
218
269
  return false;
219
270
  }
271
+ function isCRA(packageJson) {
272
+ const combinedDependencies = {
273
+ ...packageJson.dependencies,
274
+ ...packageJson.devDependencies,
275
+ };
276
+ return (
277
+ // Required dependencies for CRA projects
278
+ combinedDependencies['react'] &&
279
+ combinedDependencies['react-dom'] &&
280
+ combinedDependencies['react-scripts'] &&
281
+ (0, fileutils_1.directoryExists)('src') &&
282
+ (0, fileutils_1.directoryExists)('public'));
283
+ }
@@ -18,7 +18,7 @@ const utils_1 = require("./implementation/utils");
18
18
  async function initHandler(options) {
19
19
  // strip the 'init' command itself so we don't forward it
20
20
  const args = process.argv.slice(3).join(' ');
21
- const version = process.env.NX_VERSION ?? ((0, semver_1.prerelease)(versions_1.nxVersion) ? 'next' : 'latest');
21
+ const version = process.env.NX_VERSION ?? ((0, semver_1.prerelease)(versions_1.nxVersion) ? versions_1.nxVersion : 'latest');
22
22
  if (process.env.NX_VERSION) {
23
23
  console.log(`Using version ${process.env.NX_VERSION}`);
24
24
  }
@@ -5,6 +5,7 @@ export interface InitArgs {
5
5
  useDotNxInstallation?: boolean;
6
6
  integrated?: boolean;
7
7
  verbose?: boolean;
8
+ force?: boolean;
8
9
  }
9
10
  export declare function initHandler(options: InitArgs): Promise<void>;
10
11
  export declare function detectPlugins(nxJson: NxJsonConfiguration, interactive: boolean, includeAngularCli?: boolean): Promise<{
@@ -3,48 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.initHandler = initHandler;
4
4
  exports.detectPlugins = detectPlugins;
5
5
  const fs_1 = require("fs");
6
+ const enquirer_1 = require("enquirer");
6
7
  const semver_1 = require("semver");
8
+ const nx_json_1 = require("../../config/nx-json");
9
+ const fileutils_1 = require("../../utils/fileutils");
10
+ const get_package_name_from_import_path_1 = require("../../utils/get-package-name-from-import-path");
7
11
  const output_1 = require("../../utils/output");
8
12
  const package_manager_1 = require("../../utils/package-manager");
9
- const add_nx_scripts_1 = require("./implementation/dot-nx/add-nx-scripts");
10
- const child_process_1 = require("../../utils/child-process");
11
- const fileutils_1 = require("../../utils/fileutils");
12
13
  const versions_1 = require("../../utils/versions");
13
- const utils_1 = require("./implementation/utils");
14
- const enquirer_1 = require("enquirer");
15
- const angular_1 = require("./implementation/angular");
16
14
  const workspace_context_1 = require("../../utils/workspace-context");
17
15
  const connect_to_nx_cloud_1 = require("../connect/connect-to-nx-cloud");
18
- const add_nx_to_npm_repo_1 = require("./implementation/add-nx-to-npm-repo");
19
- const add_nx_to_monorepo_1 = require("./implementation/add-nx-to-monorepo");
20
- const nx_json_1 = require("../../config/nx-json");
21
- const get_package_name_from_import_path_1 = require("../../utils/get-package-name-from-import-path");
22
16
  const configure_plugins_1 = require("./configure-plugins");
17
+ const add_nx_to_monorepo_1 = require("./implementation/add-nx-to-monorepo");
18
+ const add_nx_to_npm_repo_1 = require("./implementation/add-nx-to-npm-repo");
19
+ const add_nx_to_turborepo_1 = require("./implementation/add-nx-to-turborepo");
20
+ const angular_1 = require("./implementation/angular");
21
+ const add_nx_scripts_1 = require("./implementation/dot-nx/add-nx-scripts");
22
+ const utils_1 = require("./implementation/utils");
23
+ const react_1 = require("./implementation/react");
23
24
  async function initHandler(options) {
24
25
  process.env.NX_RUNNING_NX_INIT = 'true';
25
- const version = process.env.NX_VERSION ?? ((0, semver_1.prerelease)(versions_1.nxVersion) ? 'next' : 'latest');
26
+ const version = process.env.NX_VERSION ?? ((0, semver_1.prerelease)(versions_1.nxVersion) ? versions_1.nxVersion : 'latest');
26
27
  if (process.env.NX_VERSION) {
27
28
  output_1.output.log({ title: `Using version ${process.env.NX_VERSION}` });
28
29
  }
29
- if (!(0, fs_1.existsSync)('package.json') || options.useDotNxInstallation) {
30
- if (process.platform !== 'win32') {
31
- console.log('Setting Nx up installation in `.nx`. You can run Nx commands like: `./nx --help`');
32
- }
33
- else {
34
- console.log('Setting Nx up installation in `.nx`. You can run Nx commands like: `./nx.bat --help`');
35
- }
36
- (0, add_nx_scripts_1.generateDotNxSetup)(version);
37
- const nxJson = (0, nx_json_1.readNxJson)(process.cwd());
38
- const { plugins } = await detectPlugins(nxJson, options.interactive);
39
- plugins.forEach((plugin) => {
40
- (0, child_process_1.runNxSync)(`add ${plugin}`, {
41
- stdio: 'inherit',
42
- });
43
- });
44
- // invokes the wrapper, thus invoking the initial installation process
45
- (0, child_process_1.runNxSync)('--version', { stdio: 'ignore' });
46
- return;
47
- }
48
30
  // TODO(jack): Remove this Angular logic once `@nx/angular` is compatible with inferred targets.
49
31
  if ((0, fs_1.existsSync)('angular.json')) {
50
32
  await (0, angular_1.addNxToAngularCliRepo)({
@@ -56,33 +38,80 @@ async function initHandler(options) {
56
38
  });
57
39
  return;
58
40
  }
59
- const packageJson = (0, fileutils_1.readJsonFile)('package.json');
60
- if ((0, utils_1.isMonorepo)(packageJson)) {
41
+ const _isNonJs = !(0, fs_1.existsSync)('package.json') || options.useDotNxInstallation;
42
+ const packageJson = _isNonJs
43
+ ? null
44
+ : (0, fileutils_1.readJsonFile)('package.json');
45
+ const _isTurborepo = (0, fs_1.existsSync)('turbo.json');
46
+ const _isMonorepo = _isNonJs ? false : (0, utils_1.isMonorepo)(packageJson);
47
+ const _isCRA = _isNonJs ? false : (0, utils_1.isCRA)(packageJson);
48
+ const learnMoreLink = _isTurborepo
49
+ ? 'https://nx.dev/recipes/adopting-nx/from-turborepo'
50
+ : _isMonorepo
51
+ ? 'https://nx.dev/getting-started/tutorials/npm-workspaces-tutorial'
52
+ : 'https://nx.dev/recipes/adopting-nx/adding-to-existing-project';
53
+ /**
54
+ * Turborepo users must have set up individual scripts already, and we keep the transition as minimal as possible.
55
+ * We log a message during the conversion process in addNxToTurborepo about how they can learn more about the power
56
+ * of Nx plugins and how it would allow them to infer all the relevant scripts automatically, including all cache
57
+ * inputs and outputs.
58
+ */
59
+ if (_isTurborepo) {
60
+ await (0, add_nx_to_turborepo_1.addNxToTurborepo)({
61
+ interactive: options.interactive,
62
+ });
63
+ (0, utils_1.printFinalMessage)({
64
+ learnMoreLink,
65
+ });
66
+ return;
67
+ }
68
+ const pmc = (0, package_manager_1.getPackageManagerCommand)();
69
+ if (_isCRA) {
70
+ await (0, react_1.addNxToCraRepo)({
71
+ addE2e: false,
72
+ force: options.force,
73
+ vite: true,
74
+ integrated: false,
75
+ interactive: options.interactive,
76
+ nxCloud: false,
77
+ });
78
+ }
79
+ else if (_isMonorepo) {
61
80
  await (0, add_nx_to_monorepo_1.addNxToMonorepo)({
62
81
  interactive: options.interactive,
63
82
  nxCloud: false,
64
83
  });
65
84
  }
85
+ else if (_isNonJs) {
86
+ (0, add_nx_scripts_1.generateDotNxSetup)(version);
87
+ console.log('');
88
+ }
66
89
  else {
67
90
  await (0, add_nx_to_npm_repo_1.addNxToNpmRepo)({
68
91
  interactive: options.interactive,
69
92
  nxCloud: false,
70
93
  });
71
94
  }
72
- const learnMoreLink = (0, utils_1.isMonorepo)(packageJson)
73
- ? 'https://nx.dev/getting-started/tutorials/npm-workspaces-tutorial'
74
- : 'https://nx.dev/recipes/adopting-nx/adding-to-existing-project';
75
95
  const useNxCloud = options.nxCloud ??
76
96
  (options.interactive ? await (0, connect_to_nx_cloud_1.connectExistingRepoToNxCloudPrompt)() : false);
77
97
  const repoRoot = process.cwd();
78
- const pmc = (0, package_manager_1.getPackageManagerCommand)();
79
98
  (0, utils_1.createNxJsonFile)(repoRoot, [], [], {});
80
99
  (0, utils_1.updateGitIgnore)(repoRoot);
81
100
  const nxJson = (0, nx_json_1.readNxJson)(repoRoot);
82
101
  output_1.output.log({ title: '🧐 Checking dependencies' });
83
- const { plugins, updatePackageScripts } = await detectPlugins(nxJson, options.interactive);
102
+ let plugins;
103
+ let updatePackageScripts;
104
+ if (_isCRA) {
105
+ plugins = ['@nx/vite'];
106
+ updatePackageScripts = true;
107
+ }
108
+ else {
109
+ const { plugins: _plugins, updatePackageScripts: _updatePackageScripts } = await detectPlugins(nxJson, options.interactive);
110
+ plugins = _plugins;
111
+ updatePackageScripts = _updatePackageScripts;
112
+ }
84
113
  output_1.output.log({ title: '📦 Installing Nx' });
85
- (0, configure_plugins_1.runPackageManagerInstallPlugins)(repoRoot, pmc, plugins);
114
+ (0, configure_plugins_1.installPluginPackages)(repoRoot, pmc, plugins);
86
115
  await (0, configure_plugins_1.configurePlugins)(plugins, updatePackageScripts, pmc, repoRoot, options.verbose);
87
116
  if (useNxCloud) {
88
117
  output_1.output.log({ title: '🛠️ Setting up Nx Cloud' });
@@ -114,6 +143,7 @@ const npmPackageToPluginMap = {
114
143
  'react-native': '@nx/react-native',
115
144
  '@remix-run/dev': '@nx/remix',
116
145
  '@rsbuild/core': '@nx/rsbuild',
146
+ '@react-router/dev': '@nx/react',
117
147
  };
118
148
  async function detectPlugins(nxJson, interactive, includeAngularCli) {
119
149
  let files = ['package.json'].concat((0, workspace_context_1.globWithWorkspaceContextSync)(process.cwd(), ['**/*/package.json']));
@@ -0,0 +1,56 @@
1
+ import type { MigrationDetailsWithId } from '../../config/misc-interfaces';
2
+ import type { FileChange } from '../../generators/tree';
3
+ export type MigrationsJsonMetadata = {
4
+ completedMigrations?: Record<string, SuccessfulMigration | FailedMigration | SkippedMigration>;
5
+ runningMigrations?: string[];
6
+ initialGitRef?: {
7
+ ref: string;
8
+ subject: string;
9
+ };
10
+ confirmedPackageUpdates?: boolean;
11
+ targetVersion?: string;
12
+ };
13
+ export type SuccessfulMigration = {
14
+ type: 'successful';
15
+ name: string;
16
+ changedFiles: Omit<FileChange, 'content'>[];
17
+ ref: string;
18
+ };
19
+ export type FailedMigration = {
20
+ type: 'failed';
21
+ name: string;
22
+ error: string;
23
+ };
24
+ export type SkippedMigration = {
25
+ type: 'skipped';
26
+ };
27
+ export declare function recordInitialMigrationMetadata(workspacePath: string, versionToMigrateTo: string): void;
28
+ export declare function finishMigrationProcess(workspacePath: string, squashCommits: boolean, commitMessage: string): void;
29
+ export declare function runSingleMigration(workspacePath: string, migration: MigrationDetailsWithId, configuration: {
30
+ createCommits: boolean;
31
+ commitPrefix?: string;
32
+ }): Promise<void>;
33
+ export declare function getImplementationPath(workspacePath: string, migration: MigrationDetailsWithId): Promise<string>;
34
+ export declare function modifyMigrationsJsonMetadata(workspacePath: string, modify: (migrationsJsonMetadata: MigrationsJsonMetadata) => MigrationsJsonMetadata): void;
35
+ export declare function addSuccessfulMigration(id: string, fileChanges: Omit<FileChange, 'content'>[], ref: string): (migrationsJsonMetadata: MigrationsJsonMetadata) => MigrationsJsonMetadata;
36
+ export declare function addFailedMigration(id: string, error: string): (migrationsJsonMetadata: MigrationsJsonMetadata) => {
37
+ completedMigrations?: Record<string, SuccessfulMigration | FailedMigration | SkippedMigration>;
38
+ runningMigrations?: string[];
39
+ initialGitRef?: {
40
+ ref: string;
41
+ subject: string;
42
+ };
43
+ confirmedPackageUpdates?: boolean;
44
+ targetVersion?: string;
45
+ };
46
+ export declare function addSkippedMigration(id: string): (migrationsJsonMetadata: MigrationsJsonMetadata) => {
47
+ completedMigrations?: Record<string, SuccessfulMigration | FailedMigration | SkippedMigration>;
48
+ runningMigrations?: string[];
49
+ initialGitRef?: {
50
+ ref: string;
51
+ subject: string;
52
+ };
53
+ confirmedPackageUpdates?: boolean;
54
+ targetVersion?: string;
55
+ };
56
+ export declare function readMigrationsJsonMetadata(workspacePath: string): MigrationsJsonMetadata;
@@ -0,0 +1,188 @@
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.addFailedMigration = addFailedMigration;
10
+ exports.addSkippedMigration = addSkippedMigration;
11
+ exports.readMigrationsJsonMetadata = readMigrationsJsonMetadata;
12
+ const child_process_1 = require("child_process");
13
+ const fs_1 = require("fs");
14
+ const path_1 = require("path");
15
+ const migrate_1 = require("./migrate");
16
+ function recordInitialMigrationMetadata(workspacePath, versionToMigrateTo) {
17
+ const migrationsJsonPath = (0, path_1.join)(workspacePath, 'migrations.json');
18
+ const parsedMigrationsJson = JSON.parse((0, fs_1.readFileSync)(migrationsJsonPath, 'utf-8'));
19
+ const gitRef = (0, child_process_1.execSync)('git rev-parse HEAD', {
20
+ cwd: workspacePath,
21
+ encoding: 'utf-8',
22
+ }).trim();
23
+ const gitSubject = (0, child_process_1.execSync)('git log -1 --pretty=%s', {
24
+ cwd: workspacePath,
25
+ encoding: 'utf-8',
26
+ }).trim();
27
+ parsedMigrationsJson['nx-console'] = {
28
+ initialGitRef: {
29
+ ref: gitRef,
30
+ subject: gitSubject,
31
+ },
32
+ targetVersion: versionToMigrateTo,
33
+ };
34
+ (0, fs_1.writeFileSync)(migrationsJsonPath, JSON.stringify(parsedMigrationsJson, null, 2));
35
+ }
36
+ function finishMigrationProcess(workspacePath, squashCommits, commitMessage) {
37
+ const migrationsJsonPath = (0, path_1.join)(workspacePath, 'migrations.json');
38
+ const parsedMigrationsJson = JSON.parse((0, fs_1.readFileSync)(migrationsJsonPath, 'utf-8'));
39
+ const initialGitRef = parsedMigrationsJson['nx-console'].initialGitRef;
40
+ if ((0, fs_1.existsSync)(migrationsJsonPath)) {
41
+ (0, fs_1.rmSync)(migrationsJsonPath);
42
+ }
43
+ (0, child_process_1.execSync)('git add .', {
44
+ cwd: workspacePath,
45
+ encoding: 'utf-8',
46
+ });
47
+ (0, child_process_1.execSync)(`git commit -m "${commitMessage}" --no-verify`, {
48
+ cwd: workspacePath,
49
+ encoding: 'utf-8',
50
+ });
51
+ if (squashCommits && initialGitRef) {
52
+ (0, child_process_1.execSync)(`git reset --soft ${initialGitRef.ref}`, {
53
+ cwd: workspacePath,
54
+ encoding: 'utf-8',
55
+ });
56
+ (0, child_process_1.execSync)(`git commit -m "${commitMessage}" --no-verify`, {
57
+ cwd: workspacePath,
58
+ encoding: 'utf-8',
59
+ });
60
+ }
61
+ }
62
+ async function runSingleMigration(workspacePath, migration, configuration) {
63
+ try {
64
+ modifyMigrationsJsonMetadata(workspacePath, addRunningMigration(migration.id));
65
+ const gitRefBefore = (0, child_process_1.execSync)('git rev-parse HEAD', {
66
+ cwd: workspacePath,
67
+ encoding: 'utf-8',
68
+ }).trim();
69
+ // For Migrate UI, this current module is loaded either from:
70
+ // 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.
71
+ // 2. Bundled into Console, so the version is fixed to what we build Console with.
72
+ const updatedMigrateModule = await Promise.resolve().then(() => require('./migrate.js'));
73
+ const fileChanges = await updatedMigrateModule.runNxOrAngularMigration(workspacePath, migration, false, configuration.createCommits, configuration.commitPrefix || 'chore: [nx migration] ', undefined, true);
74
+ const gitRefAfter = (0, child_process_1.execSync)('git rev-parse HEAD', {
75
+ cwd: workspacePath,
76
+ encoding: 'utf-8',
77
+ }).trim();
78
+ modifyMigrationsJsonMetadata(workspacePath, addSuccessfulMigration(migration.id, fileChanges.map((change) => ({
79
+ path: change.path,
80
+ type: change.type,
81
+ })), gitRefAfter));
82
+ if (gitRefBefore !== gitRefAfter) {
83
+ (0, child_process_1.execSync)('git add migrations.json', {
84
+ cwd: workspacePath,
85
+ encoding: 'utf-8',
86
+ });
87
+ (0, child_process_1.execSync)('git commit --amend --no-verify --no-edit', {
88
+ cwd: workspacePath,
89
+ encoding: 'utf-8',
90
+ });
91
+ }
92
+ }
93
+ catch (e) {
94
+ modifyMigrationsJsonMetadata(workspacePath, addFailedMigration(migration.id, e.message));
95
+ }
96
+ finally {
97
+ modifyMigrationsJsonMetadata(workspacePath, removeRunningMigration(migration.id));
98
+ (0, child_process_1.execSync)('git add migrations.json', {
99
+ cwd: workspacePath,
100
+ encoding: 'utf-8',
101
+ });
102
+ }
103
+ }
104
+ async function getImplementationPath(workspacePath, migration) {
105
+ const { collection, collectionPath } = (0, migrate_1.readMigrationCollection)(migration.package, workspacePath);
106
+ const { path } = (0, migrate_1.getImplementationPath)(collection, collectionPath, migration.name);
107
+ return path;
108
+ }
109
+ function modifyMigrationsJsonMetadata(workspacePath, modify) {
110
+ const migrationsJsonPath = (0, path_1.join)(workspacePath, 'migrations.json');
111
+ const migrationsJson = JSON.parse((0, fs_1.readFileSync)(migrationsJsonPath, 'utf-8'));
112
+ migrationsJson['nx-console'] = modify(migrationsJson['nx-console']);
113
+ (0, fs_1.writeFileSync)(migrationsJsonPath, JSON.stringify(migrationsJson, null, 2));
114
+ }
115
+ function addSuccessfulMigration(id, fileChanges, ref) {
116
+ return (migrationsJsonMetadata) => {
117
+ const copied = { ...migrationsJsonMetadata };
118
+ if (!copied.completedMigrations) {
119
+ copied.completedMigrations = {};
120
+ }
121
+ copied.completedMigrations = {
122
+ ...copied.completedMigrations,
123
+ [id]: {
124
+ type: 'successful',
125
+ name: id,
126
+ changedFiles: fileChanges,
127
+ ref,
128
+ },
129
+ };
130
+ return copied;
131
+ };
132
+ }
133
+ function addFailedMigration(id, error) {
134
+ return (migrationsJsonMetadata) => {
135
+ const copied = { ...migrationsJsonMetadata };
136
+ if (!copied.completedMigrations) {
137
+ copied.completedMigrations = {};
138
+ }
139
+ copied.completedMigrations = {
140
+ ...copied.completedMigrations,
141
+ [id]: {
142
+ type: 'failed',
143
+ name: id,
144
+ error,
145
+ },
146
+ };
147
+ return copied;
148
+ };
149
+ }
150
+ function addSkippedMigration(id) {
151
+ return (migrationsJsonMetadata) => {
152
+ const copied = { ...migrationsJsonMetadata };
153
+ if (!copied.completedMigrations) {
154
+ copied.completedMigrations = {};
155
+ }
156
+ copied.completedMigrations = {
157
+ ...copied.completedMigrations,
158
+ [id]: {
159
+ type: 'skipped',
160
+ },
161
+ };
162
+ return copied;
163
+ };
164
+ }
165
+ function addRunningMigration(id) {
166
+ return (migrationsJsonMetadata) => {
167
+ migrationsJsonMetadata.runningMigrations = [
168
+ ...(migrationsJsonMetadata.runningMigrations ?? []),
169
+ id,
170
+ ];
171
+ return migrationsJsonMetadata;
172
+ };
173
+ }
174
+ function removeRunningMigration(id) {
175
+ return (migrationsJsonMetadata) => {
176
+ migrationsJsonMetadata.runningMigrations =
177
+ migrationsJsonMetadata.runningMigrations?.filter((n) => n !== id);
178
+ if (migrationsJsonMetadata.runningMigrations?.length === 0) {
179
+ delete migrationsJsonMetadata.runningMigrations;
180
+ }
181
+ return migrationsJsonMetadata;
182
+ };
183
+ }
184
+ function readMigrationsJsonMetadata(workspacePath) {
185
+ const migrationsJsonPath = (0, path_1.join)(workspacePath, 'migrations.json');
186
+ const migrationsJson = JSON.parse((0, fs_1.readFileSync)(migrationsJsonPath, 'utf-8'));
187
+ return migrationsJson['nx-console'];
188
+ }
@@ -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;
@@ -108,8 +109,24 @@ export declare function executeMigrations(root: string, migrations: {
108
109
  version: string;
109
110
  cli?: "nx" | "angular";
110
111
  }[]>;
112
+ export declare function runNxOrAngularMigration(root: string, migration: {
113
+ package: string;
114
+ name: string;
115
+ description?: string;
116
+ version: string;
117
+ cli?: 'nx' | 'angular';
118
+ }, isVerbose: boolean, shouldCreateCommits: boolean, commitPrefix: string, installDepsIfChanged?: () => void, handleInstallDeps?: boolean): Promise<FileChange[]>;
111
119
  export declare function migrate(root: string, args: {
112
120
  [k: string]: any;
113
121
  }, rawArgs: string[]): Promise<number>;
114
122
  export declare function runMigration(): void;
123
+ export declare function readMigrationCollection(packageName: string, root: string): {
124
+ collection: MigrationsJson;
125
+ collectionPath: string;
126
+ };
127
+ export declare function getImplementationPath(collection: MigrationsJson, collectionPath: string, name: string): {
128
+ path: string;
129
+ fnSymbol: string;
130
+ };
131
+ export declare function nxCliPath(nxWorkspaceRoot?: string): string;
115
132
  export {};