@nx/devkit 23.0.0-pr.35465.2bc2643 → 23.0.0-rc.1

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 (195) hide show
  1. package/{index.d.ts → dist/index.d.ts} +0 -1
  2. package/dist/internal.d.ts +24 -0
  3. package/dist/internal.js +85 -0
  4. package/{ngcli-adapter.d.ts → dist/ngcli-adapter.d.ts} +0 -1
  5. package/{public-api.d.ts → dist/public-api.d.ts} +0 -1
  6. package/{src → dist/src}/executors/parse-target-string.d.ts +0 -1
  7. package/{src → dist/src}/executors/read-target-options.d.ts +0 -1
  8. package/{src → dist/src}/generators/artifact-name-and-directory-utils.d.ts +0 -1
  9. package/{src → dist/src}/generators/e2e-web-server-info-utils.d.ts +0 -1
  10. package/{src → dist/src}/generators/e2e-web-server-info-utils.js +8 -12
  11. package/{src → dist/src}/generators/executor-options-utils.d.ts +0 -1
  12. package/{src → dist/src}/generators/format-files.d.ts +0 -1
  13. package/{src → dist/src}/generators/format-files.js +1 -1
  14. package/{src → dist/src}/generators/generate-files.d.ts +0 -1
  15. package/{src → dist/src}/generators/plugin-migrations/aggregate-log-util.d.ts +0 -1
  16. package/{src → dist/src}/generators/plugin-migrations/executor-to-plugin-migrator.d.ts +4 -4
  17. package/{src → dist/src}/generators/plugin-migrations/executor-to-plugin-migrator.js +19 -1
  18. package/{src → dist/src}/generators/plugin-migrations/plugin-migration-utils.d.ts +0 -1
  19. package/{src → dist/src}/generators/project-name-and-root-utils.d.ts +0 -1
  20. package/{src → dist/src}/generators/prompt.d.ts +0 -1
  21. package/{src → dist/src}/generators/run-tasks-in-serial.d.ts +0 -1
  22. package/dist/src/generators/target-defaults-utils.d.ts +31 -0
  23. package/dist/src/generators/target-defaults-utils.js +224 -0
  24. package/{src → dist/src}/generators/to-js.d.ts +0 -1
  25. package/{src → dist/src}/generators/to-js.js +9 -4
  26. package/{src → dist/src}/generators/typescript/insert-import.d.ts +0 -1
  27. package/{src → dist/src}/generators/typescript/insert-statement.d.ts +0 -1
  28. package/{src → dist/src}/generators/update-ts-configs-to-js.d.ts +0 -1
  29. package/{src → dist/src}/generators/visit-not-ignored-files.d.ts +0 -1
  30. package/dist/src/migrations/update-23-0-0/rename-create-nodes-v2-types.d.ts +10 -0
  31. package/dist/src/migrations/update-23-0-0/rename-create-nodes-v2-types.js +199 -0
  32. package/dist/src/migrations/update-23-0-0/rename-create-nodes-v2-types.md +29 -0
  33. package/dist/src/migrations/update-23-0-0/update-deep-imports.d.ts +4 -0
  34. package/dist/src/migrations/update-23-0-0/update-deep-imports.js +323 -0
  35. package/dist/src/migrations/update-23-0-0/update-deep-imports.md +43 -0
  36. package/{src → dist/src}/tasks/install-packages-task.d.ts +0 -1
  37. package/{src → dist/src}/utils/add-plugin.d.ts +3 -4
  38. package/{src → dist/src}/utils/add-plugin.js +1 -1
  39. package/{src → dist/src}/utils/async-iterable/combine-async-iterables.d.ts +0 -1
  40. package/{src → dist/src}/utils/async-iterable/create-async-iterable.d.ts +0 -1
  41. package/{src → dist/src}/utils/async-iterable/index.d.ts +0 -1
  42. package/{src → dist/src}/utils/async-iterable/map-async-iteratable.d.ts +0 -1
  43. package/{src → dist/src}/utils/async-iterable/tap-async-iteratable.d.ts +0 -1
  44. package/{src → dist/src}/utils/binary-extensions.d.ts +0 -1
  45. package/dist/src/utils/calculate-hash-for-create-nodes.d.ts +8 -0
  46. package/{src → dist/src}/utils/calculate-hash-for-create-nodes.js +12 -5
  47. package/{src → dist/src}/utils/catalog/index.d.ts +0 -1
  48. package/{src → dist/src}/utils/catalog/manager-factory.d.ts +0 -1
  49. package/{src → dist/src}/utils/catalog/manager.d.ts +0 -1
  50. package/{src → dist/src}/utils/catalog/pnpm-manager.d.ts +0 -1
  51. package/{src → dist/src}/utils/catalog/types.d.ts +0 -1
  52. package/{src → dist/src}/utils/catalog/yarn-manager.d.ts +0 -1
  53. package/{src → dist/src}/utils/config-utils.d.ts +0 -1
  54. package/{src → dist/src}/utils/config-utils.js +59 -4
  55. package/{src → dist/src}/utils/convert-nx-executor.d.ts +0 -1
  56. package/{src → dist/src}/utils/find-plugin-for-config-file.d.ts +0 -1
  57. package/dist/src/utils/find-plugin-for-config-file.js +34 -0
  58. package/{src → dist/src}/utils/get-named-inputs.d.ts +2 -3
  59. package/{src → dist/src}/utils/get-workspace-layout.d.ts +0 -1
  60. package/dist/src/utils/installed-version.d.ts +29 -0
  61. package/dist/src/utils/installed-version.js +57 -0
  62. package/{src → dist/src}/utils/invoke-nx-generator.d.ts +0 -1
  63. package/{src → dist/src}/utils/log-show-project-command.d.ts +0 -1
  64. package/{src → dist/src}/utils/move-dir.d.ts +0 -1
  65. package/{src → dist/src}/utils/names.d.ts +0 -1
  66. package/dist/src/utils/normalize-target-defaults.d.ts +32 -0
  67. package/dist/src/utils/normalize-target-defaults.js +84 -0
  68. package/{src → dist/src}/utils/offset-from-root.d.ts +0 -1
  69. package/{src → dist/src}/utils/package-json.d.ts +0 -1
  70. package/{src → dist/src}/utils/package-json.js +1 -1
  71. package/dist/src/utils/replace-project-configuration-with-plugin.d.ts +2 -0
  72. package/{src → dist/src}/utils/rxjs-for-await.d.ts +0 -1
  73. package/{src → dist/src}/utils/semver.d.ts +0 -1
  74. package/{src → dist/src}/utils/string-change.d.ts +0 -1
  75. package/{src → dist/src}/utils/string-utils.d.ts +0 -1
  76. package/dist/src/utils/version-floor.d.ts +37 -0
  77. package/dist/src/utils/version-floor.js +71 -0
  78. package/{src → dist/src}/utils/versions.d.ts +0 -1
  79. package/{testing.d.ts → dist/testing.d.ts} +0 -1
  80. package/migrations.json +16 -3
  81. package/package.json +59 -8
  82. package/assets.json +0 -15
  83. package/index.d.ts.map +0 -1
  84. package/internal.d.ts +0 -2
  85. package/internal.d.ts.map +0 -1
  86. package/internal.js +0 -8
  87. package/ngcli-adapter.d.ts.map +0 -1
  88. package/project.json +0 -14
  89. package/public-api.d.ts.map +0 -1
  90. package/src/executors/parse-target-string.d.ts.map +0 -1
  91. package/src/executors/read-target-options.d.ts.map +0 -1
  92. package/src/generators/artifact-name-and-directory-utils.d.ts.map +0 -1
  93. package/src/generators/e2e-web-server-info-utils.d.ts.map +0 -1
  94. package/src/generators/executor-options-utils.d.ts.map +0 -1
  95. package/src/generators/format-files.d.ts.map +0 -1
  96. package/src/generators/generate-files.d.ts.map +0 -1
  97. package/src/generators/plugin-migrations/aggregate-log-util.d.ts.map +0 -1
  98. package/src/generators/plugin-migrations/executor-to-plugin-migrator.d.ts.map +0 -1
  99. package/src/generators/plugin-migrations/plugin-migration-utils.d.ts.map +0 -1
  100. package/src/generators/project-name-and-root-utils.d.ts.map +0 -1
  101. package/src/generators/prompt.d.ts.map +0 -1
  102. package/src/generators/run-tasks-in-serial.d.ts.map +0 -1
  103. package/src/generators/target-defaults-utils.d.ts +0 -4
  104. package/src/generators/target-defaults-utils.d.ts.map +0 -1
  105. package/src/generators/target-defaults-utils.js +0 -100
  106. package/src/generators/to-js.d.ts.map +0 -1
  107. package/src/generators/typescript/insert-import.d.ts.map +0 -1
  108. package/src/generators/typescript/insert-statement.d.ts.map +0 -1
  109. package/src/generators/update-ts-configs-to-js.d.ts.map +0 -1
  110. package/src/generators/visit-not-ignored-files.d.ts.map +0 -1
  111. package/src/tasks/install-packages-task.d.ts.map +0 -1
  112. package/src/utils/add-plugin.d.ts.map +0 -1
  113. package/src/utils/async-iterable/combine-async-iterables.d.ts.map +0 -1
  114. package/src/utils/async-iterable/create-async-iterable.d.ts.map +0 -1
  115. package/src/utils/async-iterable/index.d.ts.map +0 -1
  116. package/src/utils/async-iterable/map-async-iteratable.d.ts.map +0 -1
  117. package/src/utils/async-iterable/tap-async-iteratable.d.ts.map +0 -1
  118. package/src/utils/binary-extensions.d.ts.map +0 -1
  119. package/src/utils/calculate-hash-for-create-nodes.d.ts +0 -4
  120. package/src/utils/calculate-hash-for-create-nodes.d.ts.map +0 -1
  121. package/src/utils/catalog/index.d.ts.map +0 -1
  122. package/src/utils/catalog/manager-factory.d.ts.map +0 -1
  123. package/src/utils/catalog/manager.d.ts.map +0 -1
  124. package/src/utils/catalog/pnpm-manager.d.ts.map +0 -1
  125. package/src/utils/catalog/types.d.ts.map +0 -1
  126. package/src/utils/catalog/yarn-manager.d.ts.map +0 -1
  127. package/src/utils/config-utils.d.ts.map +0 -1
  128. package/src/utils/convert-nx-executor.d.ts.map +0 -1
  129. package/src/utils/find-plugin-for-config-file.d.ts.map +0 -1
  130. package/src/utils/find-plugin-for-config-file.js +0 -61
  131. package/src/utils/get-named-inputs.d.ts.map +0 -1
  132. package/src/utils/get-workspace-layout.d.ts.map +0 -1
  133. package/src/utils/invoke-nx-generator.d.ts.map +0 -1
  134. package/src/utils/log-show-project-command.d.ts.map +0 -1
  135. package/src/utils/move-dir.d.ts.map +0 -1
  136. package/src/utils/names.d.ts.map +0 -1
  137. package/src/utils/offset-from-root.d.ts.map +0 -1
  138. package/src/utils/package-json.d.ts.map +0 -1
  139. package/src/utils/replace-package.d.ts +0 -3
  140. package/src/utils/replace-package.d.ts.map +0 -1
  141. package/src/utils/replace-package.js +0 -124
  142. package/src/utils/replace-project-configuration-with-plugin.d.ts +0 -3
  143. package/src/utils/replace-project-configuration-with-plugin.d.ts.map +0 -1
  144. package/src/utils/rxjs-for-await.d.ts.map +0 -1
  145. package/src/utils/semver.d.ts.map +0 -1
  146. package/src/utils/string-change.d.ts.map +0 -1
  147. package/src/utils/string-utils.d.ts.map +0 -1
  148. package/src/utils/versions.d.ts.map +0 -1
  149. package/testing.d.ts.map +0 -1
  150. /package/{LICENSE → dist/LICENSE} +0 -0
  151. /package/{index.js → dist/index.js} +0 -0
  152. /package/{ngcli-adapter.js → dist/ngcli-adapter.js} +0 -0
  153. /package/{public-api.js → dist/public-api.js} +0 -0
  154. /package/{src → dist/src}/executors/parse-target-string.js +0 -0
  155. /package/{src → dist/src}/executors/read-target-options.js +0 -0
  156. /package/{src → dist/src}/generators/artifact-name-and-directory-utils.js +0 -0
  157. /package/{src → dist/src}/generators/executor-options-utils.js +0 -0
  158. /package/{src → dist/src}/generators/generate-files.js +0 -0
  159. /package/{src → dist/src}/generators/plugin-migrations/aggregate-log-util.js +0 -0
  160. /package/{src → dist/src}/generators/plugin-migrations/plugin-migration-utils.js +0 -0
  161. /package/{src → dist/src}/generators/project-name-and-root-utils.js +0 -0
  162. /package/{src → dist/src}/generators/prompt.js +0 -0
  163. /package/{src → dist/src}/generators/run-tasks-in-serial.js +0 -0
  164. /package/{src → dist/src}/generators/typescript/insert-import.js +0 -0
  165. /package/{src → dist/src}/generators/typescript/insert-statement.js +0 -0
  166. /package/{src → dist/src}/generators/update-ts-configs-to-js.js +0 -0
  167. /package/{src → dist/src}/generators/visit-not-ignored-files.js +0 -0
  168. /package/{src → dist/src}/tasks/install-packages-task.js +0 -0
  169. /package/{src → dist/src}/utils/async-iterable/combine-async-iterables.js +0 -0
  170. /package/{src → dist/src}/utils/async-iterable/create-async-iterable.js +0 -0
  171. /package/{src → dist/src}/utils/async-iterable/index.js +0 -0
  172. /package/{src → dist/src}/utils/async-iterable/map-async-iteratable.js +0 -0
  173. /package/{src → dist/src}/utils/async-iterable/tap-async-iteratable.js +0 -0
  174. /package/{src → dist/src}/utils/binary-extensions.js +0 -0
  175. /package/{src → dist/src}/utils/catalog/index.js +0 -0
  176. /package/{src → dist/src}/utils/catalog/manager-factory.js +0 -0
  177. /package/{src → dist/src}/utils/catalog/manager.js +0 -0
  178. /package/{src → dist/src}/utils/catalog/pnpm-manager.js +0 -0
  179. /package/{src → dist/src}/utils/catalog/types.js +0 -0
  180. /package/{src → dist/src}/utils/catalog/yarn-manager.js +0 -0
  181. /package/{src → dist/src}/utils/convert-nx-executor.js +0 -0
  182. /package/{src → dist/src}/utils/get-named-inputs.js +0 -0
  183. /package/{src → dist/src}/utils/get-workspace-layout.js +0 -0
  184. /package/{src → dist/src}/utils/invoke-nx-generator.js +0 -0
  185. /package/{src → dist/src}/utils/log-show-project-command.js +0 -0
  186. /package/{src → dist/src}/utils/move-dir.js +0 -0
  187. /package/{src → dist/src}/utils/names.js +0 -0
  188. /package/{src → dist/src}/utils/offset-from-root.js +0 -0
  189. /package/{src → dist/src}/utils/replace-project-configuration-with-plugin.js +0 -0
  190. /package/{src → dist/src}/utils/rxjs-for-await.js +0 -0
  191. /package/{src → dist/src}/utils/semver.js +0 -0
  192. /package/{src → dist/src}/utils/string-change.js +0 -0
  193. /package/{src → dist/src}/utils/string-utils.js +0 -0
  194. /package/{src → dist/src}/utils/versions.js +0 -0
  195. /package/{testing.js → dist/testing.js} +0 -0
@@ -8,21 +8,26 @@ const package_json_1 = require("../utils/package-json");
8
8
  */
9
9
  function toJS(tree, options) {
10
10
  const { JsxEmit, ScriptTarget, transpile, ModuleKind } = (0, package_json_1.ensurePackage)('typescript', versions_1.typescriptVersion);
11
+ // Match `.ts`, `.mts`, `.cts`, `.tsx`. The optional `[cm]` keeps native
12
+ // ESM (`.mts`) and CommonJS (`.cts`) TypeScript extensions in the rename
13
+ // path so `--js` generators that emit `.mts`/`.cts` templates get
14
+ // converted instead of silently left as TypeScript on disk.
15
+ const tsExtRegex = /\.([cm]?ts|tsx)$/;
11
16
  for (const c of tree.listChanges()) {
12
- if ((c.path.endsWith('.ts') || c.path.endsWith('tsx')) &&
13
- c.type === 'CREATE') {
17
+ if (tsExtRegex.test(c.path) && c.type === 'CREATE') {
14
18
  tree.write(c.path, transpile(c.content.toString('utf-8'), {
15
19
  allowJs: true,
16
20
  jsx: JsxEmit.Preserve,
17
21
  target: options?.target ?? ScriptTarget.ESNext,
18
22
  module: options?.module ?? ModuleKind.ESNext,
19
23
  }));
20
- tree.rename(c.path, c.path.replace(/\.ts$/, options?.extension ?? '.js'));
24
+ const targetExt = options?.extension ?? '.js';
25
+ tree.rename(c.path, c.path.replace(/\.([cm]?ts)$/, targetExt));
21
26
  if (options?.useJsx) {
22
27
  tree.rename(c.path, c.path.replace(/\.tsx$/, '.jsx'));
23
28
  }
24
29
  else {
25
- tree.rename(c.path, c.path.replace(/\.tsx$/, options?.extension ?? '.js'));
30
+ tree.rename(c.path, c.path.replace(/\.tsx$/, targetExt));
26
31
  }
27
32
  }
28
33
  }
@@ -1,2 +1 @@
1
1
  export declare function insertImport(): void;
2
- //# sourceMappingURL=insert-import.d.ts.map
@@ -1,2 +1 @@
1
1
  export declare function insertImport(): void;
2
- //# sourceMappingURL=insert-statement.d.ts.map
@@ -2,4 +2,3 @@ import { Tree } from 'nx/src/devkit-exports';
2
2
  export declare function updateTsConfigsToJs(tree: Tree, options: {
3
3
  projectRoot: string;
4
4
  }): void;
5
- //# sourceMappingURL=update-ts-configs-to-js.d.ts.map
@@ -3,4 +3,3 @@ import type { Tree } from 'nx/src/devkit-exports';
3
3
  * Utility to act on all files in a tree that are not ignored by git.
4
4
  */
5
5
  export declare function visitNotIgnoredFiles(tree: Tree, dirPath: string, visitor: (path: string) => void): void;
6
- //# sourceMappingURL=visit-not-ignored-files.d.ts.map
@@ -0,0 +1,10 @@
1
+ import { type Tree } from 'nx/src/devkit-exports';
2
+ export declare const CREATE_NODES_V2_TYPE_RENAMES: ReadonlyMap<string, string>;
3
+ export default function renameCreateNodesV2Types(tree: Tree): Promise<void>;
4
+ /**
5
+ * Rewrites named imports and re-exports of the deprecated `*V2` plugin types
6
+ * from `@nx/devkit` to their canonical names. Only the named bindings are
7
+ * touched — the module specifier, the `import`/`export` keyword, any `type`
8
+ * modifier, and any default import are left untouched.
9
+ */
10
+ export declare function rewriteCreateNodesV2Types(source: string): string;
@@ -0,0 +1,199 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CREATE_NODES_V2_TYPE_RENAMES = void 0;
4
+ exports.default = renameCreateNodesV2Types;
5
+ exports.rewriteCreateNodesV2Types = rewriteCreateNodesV2Types;
6
+ const devkit_exports_1 = require("nx/src/devkit-exports");
7
+ const format_files_1 = require("../../generators/format-files");
8
+ const visit_not_ignored_files_1 = require("../../generators/visit-not-ignored-files");
9
+ const package_json_1 = require("../../utils/package-json");
10
+ const string_change_1 = require("../../utils/string-change");
11
+ const versions_1 = require("../../utils/versions");
12
+ const TS_EXTENSIONS = ['.ts', '.tsx', '.cts', '.mts'];
13
+ const DEVKIT_SPECIFIER = '@nx/devkit';
14
+ // The `*V2` plugin types were renamed to their canonical un-suffixed names in
15
+ // Nx 23. The `V2` names remain as `@deprecated` aliases, so this migration only
16
+ // moves callers onto the canonical names. (`CreateNodesResultV2` is renamed to
17
+ // `CreateNodesResultArray`, not `CreateNodesResult`, which is an unrelated type.)
18
+ exports.CREATE_NODES_V2_TYPE_RENAMES = new Map([
19
+ ['CreateNodesV2', 'CreateNodes'],
20
+ ['CreateNodesContextV2', 'CreateNodesContext'],
21
+ ['CreateNodesResultV2', 'CreateNodesResultArray'],
22
+ ['CreateNodesFunctionV2', 'CreateNodesFunction'],
23
+ ['NxPluginV2', 'NxPlugin'],
24
+ ]);
25
+ let ts;
26
+ async function renameCreateNodesV2Types(tree) {
27
+ let touchedCount = 0;
28
+ (0, visit_not_ignored_files_1.visitNotIgnoredFiles)(tree, '.', (filePath) => {
29
+ if (!TS_EXTENSIONS.some((ext) => filePath.endsWith(ext))) {
30
+ return;
31
+ }
32
+ const original = tree.read(filePath, 'utf-8');
33
+ if (!original || !original.includes('V2')) {
34
+ return;
35
+ }
36
+ const updated = rewriteCreateNodesV2Types(original);
37
+ if (updated !== original) {
38
+ tree.write(filePath, updated);
39
+ touchedCount += 1;
40
+ }
41
+ });
42
+ if (touchedCount > 0) {
43
+ devkit_exports_1.logger.info(`Renamed deprecated CreateNodes V2 type imports from @nx/devkit in ${touchedCount} file(s).`);
44
+ }
45
+ await (0, format_files_1.formatFiles)(tree);
46
+ }
47
+ /**
48
+ * Rewrites named imports and re-exports of the deprecated `*V2` plugin types
49
+ * from `@nx/devkit` to their canonical names. Only the named bindings are
50
+ * touched — the module specifier, the `import`/`export` keyword, any `type`
51
+ * modifier, and any default import are left untouched.
52
+ */
53
+ function rewriteCreateNodesV2Types(source) {
54
+ ts ??= (0, package_json_1.ensurePackage)('typescript', versions_1.typescriptVersion);
55
+ const sourceFile = ts.createSourceFile('tmp.ts', source, ts.ScriptTarget.Latest,
56
+ /* setParentNodes */ true, ts.ScriptKind.TSX);
57
+ const changes = [];
58
+ // Local bindings whose name changes as a result of rewriting a non-aliased
59
+ // import specifier (e.g. `import { CreateNodesV2 }` -> `import { CreateNodes }`).
60
+ // Every in-body reference to such a binding must be renamed too, otherwise the
61
+ // rewritten import leaves a dangling reference to the old name.
62
+ const localRenames = new Map();
63
+ for (const stmt of sourceFile.statements) {
64
+ if (ts.isImportDeclaration(stmt)) {
65
+ collectImportRewrite(sourceFile, stmt, changes, localRenames);
66
+ }
67
+ else if (ts.isExportDeclaration(stmt)) {
68
+ collectExportRewrite(sourceFile, stmt, changes);
69
+ }
70
+ }
71
+ if (localRenames.size > 0) {
72
+ collectUsageRewrites(sourceFile, localRenames, changes);
73
+ }
74
+ return changes.length > 0 ? (0, string_change_1.applyChangesToString)(source, changes) : source;
75
+ }
76
+ function isDevkitSpecifier(node) {
77
+ return ts.isStringLiteral(node) && node.text === DEVKIT_SPECIFIER;
78
+ }
79
+ function collectImportRewrite(sourceFile, stmt, changes, localRenames) {
80
+ if (!isDevkitSpecifier(stmt.moduleSpecifier)) {
81
+ return;
82
+ }
83
+ const namedBindings = stmt.importClause?.namedBindings;
84
+ if (!namedBindings || !ts.isNamedImports(namedBindings)) {
85
+ return;
86
+ }
87
+ // A non-aliased specifier (`{ CreateNodesV2 }`) renames the local binding, so
88
+ // its in-body references must be rewritten as well. An aliased specifier
89
+ // (`{ CreateNodesV2 as Foo }`) keeps the local name `Foo`, so it does not.
90
+ for (const el of namedBindings.elements) {
91
+ if (el.propertyName) {
92
+ continue;
93
+ }
94
+ const canonical = exports.CREATE_NODES_V2_TYPE_RENAMES.get(el.name.text);
95
+ if (canonical) {
96
+ localRenames.set(el.name.text, canonical);
97
+ }
98
+ }
99
+ rewriteNamedBindings(sourceFile, namedBindings, changes);
100
+ }
101
+ /**
102
+ * Renames in-body references (type annotations, value usages) of bindings that
103
+ * were renamed by an import rewrite. References inside import/export
104
+ * declarations are left to the binding rewrite, and member positions
105
+ * (`foo.CreateNodesV2`, `NS.CreateNodesV2`) are not standalone references to the
106
+ * imported binding, so they are skipped.
107
+ */
108
+ function collectUsageRewrites(sourceFile, localRenames, changes) {
109
+ const visit = (node) => {
110
+ if (ts.isIdentifier(node) &&
111
+ localRenames.has(node.text) &&
112
+ isRenameableReference(node)) {
113
+ const start = node.getStart(sourceFile);
114
+ changes.push({ type: string_change_1.ChangeType.Delete, start, length: node.getEnd() - start }, {
115
+ type: string_change_1.ChangeType.Insert,
116
+ index: start,
117
+ text: localRenames.get(node.text),
118
+ });
119
+ }
120
+ ts.forEachChild(node, visit);
121
+ };
122
+ ts.forEachChild(sourceFile, visit);
123
+ }
124
+ function isRenameableReference(id) {
125
+ const parent = id.parent;
126
+ // `foo.CreateNodesV2` — the member name is not the imported binding.
127
+ if (ts.isPropertyAccessExpression(parent) && parent.name === id) {
128
+ return false;
129
+ }
130
+ // `NS.CreateNodesV2` in a type position — same reasoning.
131
+ if (ts.isQualifiedName(parent) && parent.right === id) {
132
+ return false;
133
+ }
134
+ // Anything inside an import/export declaration is handled by the binding
135
+ // rewrite; skip it here to avoid touching the specifier twice.
136
+ for (let n = id; n; n = n.parent) {
137
+ if (ts.isImportDeclaration(n) || ts.isExportDeclaration(n)) {
138
+ return false;
139
+ }
140
+ }
141
+ return true;
142
+ }
143
+ function collectExportRewrite(sourceFile, stmt, changes) {
144
+ if (!stmt.moduleSpecifier || !isDevkitSpecifier(stmt.moduleSpecifier)) {
145
+ return;
146
+ }
147
+ if (!stmt.exportClause || !ts.isNamedExports(stmt.exportClause)) {
148
+ return;
149
+ }
150
+ rewriteNamedBindings(sourceFile, stmt.exportClause, changes);
151
+ }
152
+ /**
153
+ * Re-renders the `{ ... }` of a named import/export, renaming any deprecated
154
+ * `*V2` type to its canonical name. If renaming would collide with a canonical
155
+ * name that is already present, the duplicate is dropped. Returns without
156
+ * recording a change when the binding list contains none of the renamed types.
157
+ */
158
+ function rewriteNamedBindings(sourceFile, namedBindings, changes) {
159
+ const elements = namedBindings.elements;
160
+ const hasRenamed = elements.some((el) => exports.CREATE_NODES_V2_TYPE_RENAMES.has((el.propertyName ?? el.name).text));
161
+ if (!hasRenamed) {
162
+ return;
163
+ }
164
+ const seen = new Set();
165
+ const rendered = [];
166
+ for (const el of elements) {
167
+ const text = renderSpecifier(el);
168
+ if (!seen.has(text)) {
169
+ seen.add(text);
170
+ rendered.push(text);
171
+ }
172
+ }
173
+ const start = namedBindings.getStart(sourceFile);
174
+ changes.push({
175
+ type: string_change_1.ChangeType.Delete,
176
+ start,
177
+ length: namedBindings.getEnd() - start,
178
+ }, {
179
+ type: string_change_1.ChangeType.Insert,
180
+ index: start,
181
+ text: `{ ${rendered.join(', ')} }`,
182
+ });
183
+ }
184
+ function renderSpecifier(el) {
185
+ const typePrefix = el.isTypeOnly ? 'type ' : '';
186
+ const rename = (name) => exports.CREATE_NODES_V2_TYPE_RENAMES.get(name) ?? name;
187
+ // `{ name }` — no alias, so the local binding follows the rename.
188
+ if (!el.propertyName) {
189
+ return `${typePrefix}${rename(el.name.text)}`;
190
+ }
191
+ // `{ propertyName as name }` — only the imported (left) side is renamed; the
192
+ // local alias is preserved. A now-redundant alias such as
193
+ // `CreateNodesV2 as CreateNodes` collapses to `CreateNodes`.
194
+ const canonicalImported = rename(el.propertyName.text);
195
+ const localName = el.name.text;
196
+ return canonicalImported === localName
197
+ ? `${typePrefix}${localName}`
198
+ : `${typePrefix}${canonicalImported} as ${localName}`;
199
+ }
@@ -0,0 +1,29 @@
1
+ #### Rename deprecated CreateNodes `V2` types from `@nx/devkit`
2
+
3
+ The canonical plugin API types lost their `V2` suffix in Nx 23. The `V2` names are kept as `@deprecated` aliases, but new code should use the canonical names:
4
+
5
+ | Deprecated (`@nx/devkit`) | Canonical |
6
+ | ------------------------- | ------------------------ |
7
+ | `CreateNodesV2` | `CreateNodes` |
8
+ | `CreateNodesContextV2` | `CreateNodesContext` |
9
+ | `CreateNodesResultV2` | `CreateNodesResultArray` |
10
+ | `CreateNodesFunctionV2` | `CreateNodesFunction` |
11
+ | `NxPluginV2` | `NxPlugin` |
12
+
13
+ This migration scans every `.ts`, `.tsx`, `.cts`, and `.mts` file in your workspace and rewrites named imports and re-exports of these types from `@nx/devkit` to their canonical names.
14
+
15
+ #### Sample Code Changes
16
+
17
+ ##### Before
18
+
19
+ ```ts
20
+ import type { CreateNodesV2, CreateNodesContextV2 } from '@nx/devkit';
21
+ ```
22
+
23
+ ##### After
24
+
25
+ ```ts
26
+ import type { CreateNodes, CreateNodesContext } from '@nx/devkit';
27
+ ```
28
+
29
+ Aliases are preserved (`CreateNodesV2 as CN` becomes `CreateNodes as CN`), and if a file already imports both names (`{ CreateNodes, CreateNodesV2 }`) the redundant binding is dropped. The unrelated `CreateNodesResult` type is left untouched.
@@ -0,0 +1,4 @@
1
+ import { type Tree } from 'nx/src/devkit-exports';
2
+ export declare const DEVKIT_INTERNAL_SYMBOLS: ReadonlySet<string>;
3
+ export default function updateDevkitDeepImports(tree: Tree): Promise<void>;
4
+ export declare function rewriteDevkitDeepImports(source: string): string;
@@ -0,0 +1,323 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEVKIT_INTERNAL_SYMBOLS = void 0;
4
+ exports.default = updateDevkitDeepImports;
5
+ exports.rewriteDevkitDeepImports = rewriteDevkitDeepImports;
6
+ const devkit_exports_1 = require("nx/src/devkit-exports");
7
+ const format_files_1 = require("../../generators/format-files");
8
+ const visit_not_ignored_files_1 = require("../../generators/visit-not-ignored-files");
9
+ const package_json_1 = require("../../utils/package-json");
10
+ const string_change_1 = require("../../utils/string-change");
11
+ const versions_1 = require("../../utils/versions");
12
+ const TS_EXTENSIONS = ['.ts', '.tsx', '.cts', '.mts'];
13
+ const DEEP_IMPORT_PREFIX = '@nx/devkit/src/';
14
+ const PUBLIC_SPECIFIER = '@nx/devkit';
15
+ const INTERNAL_SPECIFIER = '@nx/devkit/internal';
16
+ // Names re-exported from `@nx/devkit/internal` (see packages/devkit/internal.ts
17
+ // at the time this migration was authored). Anything imported from a
18
+ // `@nx/devkit/src/...` path whose name is NOT in this set is assumed to be
19
+ // part of the stable public `@nx/devkit` API.
20
+ exports.DEVKIT_INTERNAL_SYMBOLS = new Set([
21
+ 'signalToCode',
22
+ 'createProjectRootMappingsFromProjectConfigurations',
23
+ 'PluginCache',
24
+ 'safeWriteFileCache',
25
+ 'determineArtifactNameAndDirectoryOptions',
26
+ 'getRelativeCwd',
27
+ 'FileExtensionType',
28
+ 'getE2EWebServerInfo',
29
+ 'E2EWebServerDetails',
30
+ 'forEachExecutorOptions',
31
+ 'AggregatedLog',
32
+ 'migrateProjectExecutorsToPlugin',
33
+ 'migrateProjectExecutorsToPluginV1',
34
+ 'NoTargetsToMigrateError',
35
+ 'InferredTargetConfiguration',
36
+ 'processTargetOutputs',
37
+ 'deleteMatchingProperties',
38
+ 'toProjectRelativePath',
39
+ 'determineProjectNameAndRootOptions',
40
+ 'ensureRootProjectName',
41
+ 'resolveImportPath',
42
+ 'promptWhenInteractive',
43
+ 'addBuildTargetDefaults',
44
+ 'addE2eCiTargetDefaults',
45
+ 'addPlugin',
46
+ 'createAsyncIterable',
47
+ 'combineAsyncIterables',
48
+ 'mapAsyncIterable',
49
+ 'calculateHashForCreateNodes',
50
+ 'calculateHashesForCreateNodes',
51
+ 'getCatalogManager',
52
+ 'loadConfigFile',
53
+ 'clearRequireCache',
54
+ 'findPluginForConfigFile',
55
+ 'getNamedInputs',
56
+ 'logShowProjectCommand',
57
+ 'eachValueFrom',
58
+ 'checkAndCleanWithSemver',
59
+ 'camelize',
60
+ 'capitalize',
61
+ 'classify',
62
+ 'dasherize',
63
+ 'emitPluginWorkerLog',
64
+ 'throwForUnsupportedVersion',
65
+ ]);
66
+ // Methods on `jest` and `vi` that take a module specifier as their first
67
+ // argument. Calls like `jest.mock('@nx/devkit/src/...')` are rewritten so the
68
+ // mock target lines up with the rewritten import.
69
+ const MOCK_HELPER_METHODS = new Set([
70
+ 'mock',
71
+ 'unmock',
72
+ 'doMock',
73
+ 'dontMock',
74
+ 'requireActual',
75
+ 'requireMock',
76
+ 'importActual',
77
+ 'importMock',
78
+ ]);
79
+ let ts;
80
+ async function updateDevkitDeepImports(tree) {
81
+ let touchedCount = 0;
82
+ (0, visit_not_ignored_files_1.visitNotIgnoredFiles)(tree, '.', (filePath) => {
83
+ if (!TS_EXTENSIONS.some((ext) => filePath.endsWith(ext))) {
84
+ return;
85
+ }
86
+ const original = tree.read(filePath, 'utf-8');
87
+ if (!original || !original.includes(DEEP_IMPORT_PREFIX)) {
88
+ return;
89
+ }
90
+ const updated = rewriteDevkitDeepImports(original);
91
+ if (updated !== original) {
92
+ tree.write(filePath, updated);
93
+ touchedCount += 1;
94
+ }
95
+ });
96
+ if (touchedCount > 0) {
97
+ devkit_exports_1.logger.info(`Rewrote @nx/devkit deep imports in ${touchedCount} file(s).`);
98
+ }
99
+ await (0, format_files_1.formatFiles)(tree);
100
+ }
101
+ function rewriteDevkitDeepImports(source) {
102
+ ts ??= (0, package_json_1.ensurePackage)('typescript', versions_1.typescriptVersion);
103
+ const sourceFile = ts.createSourceFile('tmp.ts', source, ts.ScriptTarget.Latest,
104
+ /* setParentNodes */ true, ts.ScriptKind.TSX);
105
+ const changes = [];
106
+ for (const stmt of sourceFile.statements) {
107
+ if (!ts.isImportDeclaration(stmt))
108
+ continue;
109
+ if (!ts.isStringLiteral(stmt.moduleSpecifier))
110
+ continue;
111
+ if (!stmt.moduleSpecifier.text.startsWith(DEEP_IMPORT_PREFIX))
112
+ continue;
113
+ const replacement = buildReplacement(stmt, sourceFile);
114
+ changes.push({
115
+ type: string_change_1.ChangeType.Delete,
116
+ start: stmt.getStart(sourceFile),
117
+ length: stmt.getEnd() - stmt.getStart(sourceFile),
118
+ }, {
119
+ type: string_change_1.ChangeType.Insert,
120
+ index: stmt.getStart(sourceFile),
121
+ text: replacement,
122
+ });
123
+ }
124
+ // Pass 2: rewrite `require('@nx/devkit/src/...')`, dynamic
125
+ // `import('@nx/devkit/src/...')`, and `jest.mock(...)` / `vi.mock(...)`-style
126
+ // calls. We can't bucket these by symbol (no named binding to inspect), so
127
+ // we route them at `/internal` as a best guess. Walking the AST instead of
128
+ // string-replacing keeps us out of unrelated string literals — template
129
+ // strings, `typeof import('...')` type queries, comments, etc.
130
+ collectCallExpressionRewrites(sourceFile, changes);
131
+ let updated = changes.length > 0 ? (0, string_change_1.applyChangesToString)(source, changes) : source;
132
+ // Final pass: collapse any duplicate `@nx/devkit` and `@nx/devkit/internal`
133
+ // named-only imports into a single declaration. This handles both the
134
+ // imports we just emitted AND any that the user already had, so we never
135
+ // leave the file with two `from '@nx/devkit'` lines.
136
+ updated = collapseDevkitImports(updated);
137
+ return updated;
138
+ }
139
+ function collapseDevkitImports(source) {
140
+ const sourceFile = ts.createSourceFile('tmp.ts', source, ts.ScriptTarget.Latest,
141
+ /* setParentNodes */ true, ts.ScriptKind.TSX);
142
+ const groups = new Map();
143
+ for (const stmt of sourceFile.statements) {
144
+ if (!ts.isImportDeclaration(stmt))
145
+ continue;
146
+ if (!ts.isStringLiteral(stmt.moduleSpecifier))
147
+ continue;
148
+ const specifier = stmt.moduleSpecifier.text;
149
+ if (specifier !== PUBLIC_SPECIFIER && specifier !== INTERNAL_SPECIFIER) {
150
+ continue;
151
+ }
152
+ const importClause = stmt.importClause;
153
+ if (!importClause)
154
+ continue; // skip side-effect imports
155
+ if (importClause.name)
156
+ continue; // skip default imports
157
+ const namedBindings = importClause.namedBindings;
158
+ if (!namedBindings || !ts.isNamedImports(namedBindings))
159
+ continue;
160
+ const typeOnly = !!importClause.isTypeOnly;
161
+ const key = `${specifier}\x00${typeOnly ? 'type' : 'value'}`;
162
+ if (!groups.has(key)) {
163
+ groups.set(key, { decls: [], specifier, typeOnly });
164
+ }
165
+ groups.get(key).decls.push(stmt);
166
+ }
167
+ const changes = [];
168
+ for (const { decls, specifier, typeOnly } of groups.values()) {
169
+ if (decls.length < 2)
170
+ continue;
171
+ const seen = new Set();
172
+ const merged = [];
173
+ for (const decl of decls) {
174
+ const named = decl.importClause.namedBindings;
175
+ for (const el of named.elements) {
176
+ const text = renderSpecifierFromNode(el, typeOnly);
177
+ if (!seen.has(text)) {
178
+ seen.add(text);
179
+ merged.push(text);
180
+ }
181
+ }
182
+ }
183
+ // Replace the first declaration with the merged one in place.
184
+ const first = decls[0];
185
+ changes.push({
186
+ type: string_change_1.ChangeType.Delete,
187
+ start: first.getStart(sourceFile),
188
+ length: first.getEnd() - first.getStart(sourceFile),
189
+ }, {
190
+ type: string_change_1.ChangeType.Insert,
191
+ index: first.getStart(sourceFile),
192
+ text: renderImport(merged, specifier, typeOnly),
193
+ });
194
+ // Delete every other declaration in this group (and consume one trailing
195
+ // newline so we don't leave behind a blank line that prettier has to clean
196
+ // up later).
197
+ for (let i = 1; i < decls.length; i++) {
198
+ const decl = decls[i];
199
+ const start = decl.getStart(sourceFile);
200
+ let end = decl.getEnd();
201
+ if (source[end] === '\n') {
202
+ end += 1;
203
+ }
204
+ else if (source[end] === '\r' && source[end + 1] === '\n') {
205
+ end += 2;
206
+ }
207
+ changes.push({
208
+ type: string_change_1.ChangeType.Delete,
209
+ start,
210
+ length: end - start,
211
+ });
212
+ }
213
+ }
214
+ return changes.length > 0 ? (0, string_change_1.applyChangesToString)(source, changes) : source;
215
+ }
216
+ function renderSpecifierFromNode(el, parentIsTypeOnly) {
217
+ const aliasText = el.propertyName ? ` as ${el.name.text}` : '';
218
+ const typePrefix = !parentIsTypeOnly && el.isTypeOnly ? 'type ' : '';
219
+ return `${typePrefix}${(el.propertyName ?? el.name).text}${aliasText}`;
220
+ }
221
+ function buildReplacement(decl, sourceFile) {
222
+ const importClause = decl.importClause;
223
+ // `import '@nx/devkit/src/...';` (side-effect) — no clause to bucket.
224
+ if (!importClause) {
225
+ return `import '${INTERNAL_SPECIFIER}';`;
226
+ }
227
+ const namedBindings = importClause.namedBindings;
228
+ const isNamedImport = namedBindings && ts.isNamedImports(namedBindings) && !importClause.name;
229
+ // Default / namespace / mixed-default-and-named — can't bucket reliably.
230
+ // Preserve the import shape, swap the specifier.
231
+ if (!isNamedImport) {
232
+ const before = source(decl, sourceFile).slice(0, decl.moduleSpecifier.getStart(sourceFile) - decl.getStart(sourceFile));
233
+ const after = source(decl, sourceFile).slice(decl.moduleSpecifier.getEnd() - decl.getStart(sourceFile));
234
+ return `${before}'${INTERNAL_SPECIFIER}'${after}`;
235
+ }
236
+ const isTypeOnlyImport = importClause.isTypeOnly;
237
+ const elements = namedBindings.elements;
238
+ const publik = [];
239
+ const internal = [];
240
+ for (const el of elements) {
241
+ bucketSpecifier(el, isTypeOnlyImport, publik, internal);
242
+ }
243
+ const lines = [];
244
+ if (publik.length > 0) {
245
+ lines.push(renderImport(publik, PUBLIC_SPECIFIER, isTypeOnlyImport));
246
+ }
247
+ if (internal.length > 0) {
248
+ lines.push(renderImport(internal, INTERNAL_SPECIFIER, isTypeOnlyImport));
249
+ }
250
+ if (lines.length === 0) {
251
+ // Defensive: empty `import {} from '...'` — point at /internal.
252
+ lines.push(`import {} from '${INTERNAL_SPECIFIER}';`);
253
+ }
254
+ return lines.join('\n');
255
+ }
256
+ function bucketSpecifier(el, parentIsTypeOnly, publik, internal) {
257
+ const lookupName = (el.propertyName ?? el.name).text;
258
+ const elementIsTypeOnly = el.isTypeOnly;
259
+ const aliasText = el.propertyName ? ` as ${el.name.text}` : '';
260
+ // Inline `type` is illegal when the parent import is already `import type`.
261
+ const typePrefix = !parentIsTypeOnly && elementIsTypeOnly ? 'type ' : '';
262
+ const text = `${typePrefix}${(el.propertyName ?? el.name).text}${aliasText}`;
263
+ if (exports.DEVKIT_INTERNAL_SYMBOLS.has(lookupName)) {
264
+ internal.push(text);
265
+ }
266
+ else {
267
+ publik.push(text);
268
+ }
269
+ }
270
+ function renderImport(specifiers, from, typeOnly) {
271
+ const prefix = typeOnly ? 'import type' : 'import';
272
+ return `${prefix} { ${specifiers.join(', ')} } from '${from}';`;
273
+ }
274
+ function source(decl, sourceFile) {
275
+ return sourceFile.text.slice(decl.getStart(sourceFile), decl.getEnd());
276
+ }
277
+ function collectCallExpressionRewrites(sourceFile, changes) {
278
+ const visit = (node) => {
279
+ if (ts.isCallExpression(node) &&
280
+ shouldRewriteCallExpression(node) &&
281
+ node.arguments.length >= 1 &&
282
+ ts.isStringLiteral(node.arguments[0]) &&
283
+ node.arguments[0].text.startsWith(DEEP_IMPORT_PREFIX)) {
284
+ const arg = node.arguments[0];
285
+ const start = arg.getStart(sourceFile);
286
+ const end = arg.getEnd();
287
+ const quote = sourceFile.text.charAt(start);
288
+ changes.push({
289
+ type: string_change_1.ChangeType.Delete,
290
+ start,
291
+ length: end - start,
292
+ }, {
293
+ type: string_change_1.ChangeType.Insert,
294
+ index: start,
295
+ text: `${quote}${INTERNAL_SPECIFIER}${quote}`,
296
+ });
297
+ }
298
+ ts.forEachChild(node, visit);
299
+ };
300
+ visit(sourceFile);
301
+ }
302
+ function shouldRewriteCallExpression(call) {
303
+ const callee = call.expression;
304
+ // `require('...')`
305
+ if (ts.isIdentifier(callee) && callee.text === 'require')
306
+ return true;
307
+ // dynamic `import('...')` — the runtime form parses as a CallExpression
308
+ // whose callee is the `import` keyword. The type-position form
309
+ // (`typeof import('...')`) parses as `ImportTypeNode`, not a CallExpression,
310
+ // so we don't touch it.
311
+ if (callee.kind === ts.SyntaxKind.ImportKeyword)
312
+ return true;
313
+ // `jest.mock(...)` / `vi.mock(...)` and friends.
314
+ if (ts.isPropertyAccessExpression(callee)) {
315
+ const obj = callee.expression;
316
+ if (ts.isIdentifier(obj) &&
317
+ (obj.text === 'jest' || obj.text === 'vi') &&
318
+ MOCK_HELPER_METHODS.has(callee.name.text)) {
319
+ return true;
320
+ }
321
+ }
322
+ return false;
323
+ }
@@ -0,0 +1,43 @@
1
+ #### Update `@nx/devkit` deep imports
2
+
3
+ `@nx/devkit` now ships a strict `exports` map, so deep imports like `@nx/devkit/src/utils/...` and `@nx/devkit/src/generators/...` are no longer reachable through Node module resolution.
4
+
5
+ This migration scans every `.ts`, `.tsx`, `.cts`, and `.mts` file in your workspace and rewrites those deep imports to one of the supported entry points:
6
+
7
+ - Symbols that are part of the stable `@nx/devkit` public API are routed to `@nx/devkit`.
8
+ - Symbols that were previously only reachable through deep imports are routed to `@nx/devkit/internal`.
9
+
10
+ After rewriting, the migration **collapses duplicate imports** so a file never ends up with two `import ... from '@nx/devkit'` (or `@nx/devkit/internal`) lines — including merging into any matching import you already had.
11
+
12
+ #### Sample Code Changes
13
+
14
+ ##### Before
15
+
16
+ ```ts
17
+ import { Tree } from '@nx/devkit';
18
+ import { dasherize, names } from '@nx/devkit/src/utils/string-utils';
19
+ import { addPlugin } from '@nx/devkit/src/utils/add-plugin';
20
+ ```
21
+
22
+ ##### After
23
+
24
+ ```ts
25
+ import { Tree, names } from '@nx/devkit';
26
+ import { dasherize, addPlugin } from '@nx/devkit/internal';
27
+ ```
28
+
29
+ `names` was already in the public API, so it joins the existing `@nx/devkit` import. `dasherize` and `addPlugin` move to `@nx/devkit/internal`, and the two `/internal` imports are collapsed into one.
30
+
31
+ #### Fallback for non-named imports
32
+
33
+ For deep-import shapes that can't be split by symbol — default imports, namespace imports, side-effect imports, `require(...)` calls, dynamic `import(...)`, and `jest.mock(...)` / `vi.mock(...)`-style mock-helper calls — the migration rewrites the specifier to `@nx/devkit/internal` as a best guess, since most symbols that previously lived under `@nx/devkit/src/...` ended up there.
34
+
35
+ ```ts
36
+ // Before
37
+ const { dasherize } = require('@nx/devkit/src/utils/string-utils');
38
+
39
+ // After
40
+ const { dasherize } = require('@nx/devkit/internal');
41
+ ```
42
+
43
+ If the symbol you're after is part of the stable public API instead, the rewritten import will fail to resolve against `@nx/devkit/internal` — switch it to `@nx/devkit` by hand. The migration also leaves `typeof import('@nx/devkit/src/...')` type queries and any deep-import strings inside template literals or comments untouched, so you'll need to update those by hand.
@@ -8,4 +8,3 @@ import { PackageManager, Tree } from 'nx/src/devkit-exports';
8
8
  * unless install already ran this generator cycle.
9
9
  */
10
10
  export declare function installPackagesTask(tree: Tree, ensureInstall?: boolean, cwd?: string, packageManager?: PackageManager): void;
11
- //# sourceMappingURL=install-packages-task.d.ts.map