@nx/angular 23.0.0-beta.23 → 23.0.0-beta.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/generators.json +8 -4
- package/migrations.json +6 -0
- package/package.json +8 -8
- package/plugin.d.ts +1 -1
- package/plugin.d.ts.map +1 -1
- package/plugin.js +2 -1
- package/src/builders/dev-server/dev-server.impl.js +2 -2
- package/src/builders/webpack-browser/webpack-browser.impl.js +2 -2
- package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.d.ts.map +1 -1
- package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.js +5 -7
- package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +4 -4
- package/src/generators/ng-add/migrators/projects/e2e.migrator.d.ts.map +1 -1
- package/src/generators/ng-add/migrators/projects/e2e.migrator.js +1 -1
- package/src/generators/scam/scam.d.ts +3 -0
- package/src/generators/scam/scam.d.ts.map +1 -1
- package/src/generators/scam/scam.js +3 -0
- package/src/generators/scam-directive/scam-directive.d.ts +3 -0
- package/src/generators/scam-directive/scam-directive.d.ts.map +1 -1
- package/src/generators/scam-directive/scam-directive.js +3 -0
- package/src/generators/scam-pipe/scam-pipe.d.ts +3 -0
- package/src/generators/scam-pipe/scam-pipe.d.ts.map +1 -1
- package/src/generators/scam-pipe/scam-pipe.js +3 -0
- package/src/generators/scam-to-standalone/scam-to-standalone.d.ts +3 -0
- package/src/generators/scam-to-standalone/scam-to-standalone.d.ts.map +1 -1
- package/src/generators/scam-to-standalone/scam-to-standalone.js +3 -0
- package/src/migrations/update-23-0-0/migrate-create-nodes-v2-to-create-nodes.d.ts +10 -0
- package/src/migrations/update-23-0-0/migrate-create-nodes-v2-to-create-nodes.d.ts.map +1 -0
- package/src/migrations/update-23-0-0/migrate-create-nodes-v2-to-create-nodes.js +134 -0
- package/src/migrations/update-23-0-0/migrate-create-nodes-v2-to-create-nodes.md +25 -0
package/generators.json
CHANGED
|
@@ -122,22 +122,26 @@
|
|
|
122
122
|
"scam-to-standalone": {
|
|
123
123
|
"factory": "./src/generators/scam-to-standalone/scam-to-standalone",
|
|
124
124
|
"schema": "./src/generators/scam-to-standalone/schema.json",
|
|
125
|
-
"description": "Convert an existing Single Component Angular Module (SCAM) to a Standalone Component."
|
|
125
|
+
"description": "Convert an existing Single Component Angular Module (SCAM) to a Standalone Component.",
|
|
126
|
+
"x-deprecated": "SCAMs are superseded by Angular standalone components. Convert any remaining SCAMs before upgrading. It will be removed in Nx v24."
|
|
126
127
|
},
|
|
127
128
|
"scam": {
|
|
128
129
|
"factory": "./src/generators/scam/scam",
|
|
129
130
|
"schema": "./src/generators/scam/schema.json",
|
|
130
|
-
"description": "Generate a component with an accompanying Single Component Angular Module (SCAM)."
|
|
131
|
+
"description": "Generate a component with an accompanying Single Component Angular Module (SCAM).",
|
|
132
|
+
"x-deprecated": "SCAMs are superseded by Angular standalone components. Use the `@nx/angular:component` generator instead. It will be removed in Nx v24."
|
|
131
133
|
},
|
|
132
134
|
"scam-directive": {
|
|
133
135
|
"factory": "./src/generators/scam-directive/scam-directive",
|
|
134
136
|
"schema": "./src/generators/scam-directive/schema.json",
|
|
135
|
-
"description": "Generate a directive with an accompanying Single Component Angular Module (SCAM)."
|
|
137
|
+
"description": "Generate a directive with an accompanying Single Component Angular Module (SCAM).",
|
|
138
|
+
"x-deprecated": "SCAMs are superseded by Angular standalone components. Use the `@nx/angular:directive` generator instead. It will be removed in Nx v24."
|
|
136
139
|
},
|
|
137
140
|
"scam-pipe": {
|
|
138
141
|
"factory": "./src/generators/scam-pipe/scam-pipe",
|
|
139
142
|
"schema": "./src/generators/scam-pipe/schema.json",
|
|
140
|
-
"description": "Generate a pipe with an accompanying Single Component Angular Module (SCAM)."
|
|
143
|
+
"description": "Generate a pipe with an accompanying Single Component Angular Module (SCAM).",
|
|
144
|
+
"x-deprecated": "SCAMs are superseded by Angular standalone components. Use the `@nx/angular:pipe` generator instead. It will be removed in Nx v24."
|
|
141
145
|
},
|
|
142
146
|
"setup-mf": {
|
|
143
147
|
"factory": "./src/generators/setup-mf/setup-mf",
|
package/migrations.json
CHANGED
|
@@ -310,6 +310,12 @@
|
|
|
310
310
|
"description": "Split @nx/angular:ngrx generator defaults in nx.json across the @nx/angular:ngrx-root-store and @nx/angular:ngrx-feature-store generators.",
|
|
311
311
|
"factory": "./src/migrations/update-23-0-0/migrate-ngrx-generator-defaults",
|
|
312
312
|
"documentation": "./src/migrations/update-23-0-0/migrate-ngrx-generator-defaults.md"
|
|
313
|
+
},
|
|
314
|
+
"update-23-0-0-migrate-create-nodes-v2-import": {
|
|
315
|
+
"version": "23.0.0-beta.24",
|
|
316
|
+
"description": "Rename imports of `createNodesV2` from `@nx/angular/plugin` to the canonical `createNodes` export.",
|
|
317
|
+
"implementation": "./src/migrations/update-23-0-0/migrate-create-nodes-v2-to-create-nodes",
|
|
318
|
+
"documentation": "./src/migrations/update-23-0-0/migrate-create-nodes-v2-to-create-nodes.md"
|
|
313
319
|
}
|
|
314
320
|
},
|
|
315
321
|
"packageJsonUpdates": {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nx/angular",
|
|
3
|
-
"version": "23.0.0-beta.
|
|
3
|
+
"version": "23.0.0-beta.24",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "The Nx Plugin for Angular contains executors, generators, and utilities for managing Angular applications and libraries within an Nx workspace. It provides: \n\n- Integration with libraries such as Storybook, Jest, ESLint, Playwright and Cypress. \n\n- Generators to help scaffold code quickly (like: Micro Frontends, Libraries, both internal to your codebase and publishable to npm) \n\n- Single Component Application Modules (SCAMs) \n\n- NgRx helpers. \n\n- Utilities for automatic workspace refactoring.",
|
|
6
6
|
"repository": {
|
|
@@ -61,13 +61,13 @@
|
|
|
61
61
|
"migrations": "./migrations.json"
|
|
62
62
|
},
|
|
63
63
|
"dependencies": {
|
|
64
|
-
"@nx/devkit": "23.0.0-beta.
|
|
65
|
-
"@nx/eslint": "23.0.0-beta.
|
|
66
|
-
"@nx/js": "23.0.0-beta.
|
|
67
|
-
"@nx/module-federation": "23.0.0-beta.
|
|
68
|
-
"@nx/rspack": "23.0.0-beta.
|
|
69
|
-
"@nx/web": "23.0.0-beta.
|
|
70
|
-
"@nx/webpack": "23.0.0-beta.
|
|
64
|
+
"@nx/devkit": "23.0.0-beta.24",
|
|
65
|
+
"@nx/eslint": "23.0.0-beta.24",
|
|
66
|
+
"@nx/js": "23.0.0-beta.24",
|
|
67
|
+
"@nx/module-federation": "23.0.0-beta.24",
|
|
68
|
+
"@nx/rspack": "23.0.0-beta.24",
|
|
69
|
+
"@nx/web": "23.0.0-beta.24",
|
|
70
|
+
"@nx/webpack": "23.0.0-beta.24",
|
|
71
71
|
"@phenomnomnominal/tsquery": "~6.2.0",
|
|
72
72
|
"@typescript-eslint/type-utils": "^8.0.0",
|
|
73
73
|
"enquirer": "~2.3.6",
|
package/plugin.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { createNodesV2 } from './src/plugins/plugin';
|
|
1
|
+
export { createNodes, createNodesV2 } from './src/plugins/plugin';
|
|
2
2
|
//# sourceMappingURL=plugin.d.ts.map
|
package/plugin.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../packages/angular/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../packages/angular/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
package/plugin.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.createNodesV2 = void 0;
|
|
3
|
+
exports.createNodesV2 = exports.createNodes = void 0;
|
|
4
4
|
var plugin_1 = require("./src/plugins/plugin");
|
|
5
|
+
Object.defineProperty(exports, "createNodes", { enumerable: true, get: function () { return plugin_1.createNodes; } });
|
|
5
6
|
Object.defineProperty(exports, "createNodesV2", { enumerable: true, get: function () { return plugin_1.createNodesV2; } });
|
|
@@ -36,7 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.executeDevServerBuilder = executeDevServerBuilder;
|
|
37
37
|
const devkit_1 = require("@nx/devkit");
|
|
38
38
|
const js_1 = require("@nx/js");
|
|
39
|
-
const
|
|
39
|
+
const internal_1 = require("@nx/webpack/internal");
|
|
40
40
|
const fs_1 = require("fs");
|
|
41
41
|
const configuration_1 = require("nx/src/config/configuration");
|
|
42
42
|
const operators_1 = require("nx/src/project-graph/operators");
|
|
@@ -153,7 +153,7 @@ function executeDevServerBuilder(rawOptions, context) {
|
|
|
153
153
|
// run the target for all projects.
|
|
154
154
|
// This will occur when workspaceDependencies = []
|
|
155
155
|
if (workspaceDependencies.length > 0) {
|
|
156
|
-
baseWebpackConfig.plugins.push(new
|
|
156
|
+
baseWebpackConfig.plugins.push(new internal_1.WebpackNxBuildCoordinationPlugin(`nx run-many --target=${parsedBuildTarget.target} --projects=${workspaceDependencies.join(',')}`, { skipWatchingDeps: !options.watchDependencies }) // TODO(Colum): this can be removed when angular 20.2 is merged
|
|
157
157
|
);
|
|
158
158
|
}
|
|
159
159
|
}
|
|
@@ -35,7 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.executeWebpackBrowserBuilder = executeWebpackBrowserBuilder;
|
|
37
37
|
const devkit_1 = require("@nx/devkit");
|
|
38
|
-
const
|
|
38
|
+
const internal_1 = require("@nx/webpack/internal");
|
|
39
39
|
const fs_1 = require("fs");
|
|
40
40
|
const operators_1 = require("nx/src/project-graph/operators");
|
|
41
41
|
const utils_1 = require("nx/src/tasks-runner/utils");
|
|
@@ -112,7 +112,7 @@ function executeWebpackBrowserBuilder(options, context) {
|
|
|
112
112
|
const skipInitialRun = shouldSkipInitialTargetRun(projectGraph, context.target.project, context.target.target);
|
|
113
113
|
baseWebpackConfig.plugins.push(
|
|
114
114
|
// @ts-expect-error - difference between angular and webpack plugin definitions bc of webpack versions
|
|
115
|
-
new
|
|
115
|
+
new internal_1.WebpackNxBuildCoordinationPlugin(`nx run-many --target=${context.target.target} --projects=${workspaceDependencies.join(',')}`, { skipInitialRun, skipWatchingDeps: !watchDependencies }));
|
|
116
116
|
}
|
|
117
117
|
}
|
|
118
118
|
if (!pathToWebpackConfig) {
|
package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-federation-dev-server.impl.d.ts","sourceRoot":"","sources":["../../../../../../packages/angular/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"module-federation-dev-server.impl.d.ts","sourceRoot":"","sources":["../../../../../../packages/angular/src/executors/module-federation-dev-server/module-federation-dev-server.impl.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,eAAe,EAGrB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,UAAU,CAAC;AAkCvC,wBAAuB,iCAAiC,CACtD,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,iCAiIzB;AAED,eAAe,iCAAiC,CAAC"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.moduleFederationDevServerExecutor = moduleFederationDevServerExecutor;
|
|
4
|
-
const tslib_1 = require("tslib");
|
|
5
4
|
const internal_1 = require("@nx/devkit/internal");
|
|
6
5
|
const devkit_1 = require("@nx/devkit");
|
|
7
6
|
const lib_1 = require("./lib");
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
const file_server_impl_1 = tslib_1.__importDefault(require("@nx/web/src/executors/file-server/file-server.impl"));
|
|
7
|
+
const internal_2 = require("@nx/module-federation/internal");
|
|
8
|
+
const internal_3 = require("@nx/web/internal");
|
|
11
9
|
const ngcli_adapter_1 = require("nx/src/adapter/ngcli-adapter");
|
|
12
10
|
const dev_server_impl_1 = require("../../builders/dev-server/dev-server.impl");
|
|
13
11
|
const module_federation_1 = require("../../builders/utilities/module-federation");
|
|
@@ -36,7 +34,7 @@ async function* moduleFederationDevServerExecutor(schema, context) {
|
|
|
36
34
|
const { projects: workspaceProjects } = (0, devkit_1.readProjectsConfigurationFromProjectGraph)(context.projectGraph);
|
|
37
35
|
const project = workspaceProjects[context.projectName];
|
|
38
36
|
const currIter = options.static
|
|
39
|
-
? (0,
|
|
37
|
+
? (0, internal_3.fileServerExecutor)({
|
|
40
38
|
port: options.port,
|
|
41
39
|
host: options.host,
|
|
42
40
|
ssl: options.ssl,
|
|
@@ -70,7 +68,7 @@ async function* moduleFederationDevServerExecutor(schema, context) {
|
|
|
70
68
|
pathToManifestFile = userPathToManifestFile;
|
|
71
69
|
}
|
|
72
70
|
(0, module_federation_1.validateDevRemotes)(options, workspaceProjects);
|
|
73
|
-
const { remotes, staticRemotesIter, devRemoteIters } = await (0,
|
|
71
|
+
const { remotes, staticRemotesIter, devRemoteIters } = await (0, internal_2.startRemoteIterators)(options, context, lib_1.startRemotes, pathToManifestFile, 'angular');
|
|
74
72
|
const removeBaseUrlEmission = (iter) => (0, internal_1.mapAsyncIterable)(iter, (v) => ({
|
|
75
73
|
...v,
|
|
76
74
|
baseUrl: undefined,
|
|
@@ -90,7 +88,7 @@ async function* moduleFederationDevServerExecutor(schema, context) {
|
|
|
90
88
|
const portsToWaitFor = staticRemotesIter
|
|
91
89
|
? [options.staticRemotesPort, ...remotes.remotePorts]
|
|
92
90
|
: [...remotes.remotePorts];
|
|
93
|
-
await Promise.all(portsToWaitFor.map((port) => (0,
|
|
91
|
+
await Promise.all(portsToWaitFor.map((port) => (0, internal_3.waitForPortOpen)(port, {
|
|
94
92
|
retries: 480,
|
|
95
93
|
retryDelay: 2500,
|
|
96
94
|
host: 'localhost',
|
package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js
CHANGED
|
@@ -36,8 +36,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
exports.moduleFederationSsrDevServerExecutor = moduleFederationSsrDevServerExecutor;
|
|
37
37
|
const devkit_1 = require("@nx/devkit");
|
|
38
38
|
const internal_1 = require("@nx/devkit/internal");
|
|
39
|
-
const
|
|
40
|
-
const
|
|
39
|
+
const internal_2 = require("@nx/module-federation/internal");
|
|
40
|
+
const internal_3 = require("@nx/web/internal");
|
|
41
41
|
const fs_1 = require("fs");
|
|
42
42
|
const ngcli_adapter_1 = require("nx/src/adapter/ngcli-adapter");
|
|
43
43
|
const project_graph_1 = require("nx/src/project-graph/project-graph");
|
|
@@ -93,7 +93,7 @@ async function* moduleFederationSsrDevServerExecutor(schema, context) {
|
|
|
93
93
|
pathToManifestFile = (0, module_federation_1.getDynamicMfManifestFile)(project, context.root);
|
|
94
94
|
}
|
|
95
95
|
(0, module_federation_1.validateDevRemotes)({ devRemotes: options.devRemotes }, workspaceProjects);
|
|
96
|
-
const { remotes, staticRemotesIter, devRemoteIters } = await (0,
|
|
96
|
+
const { remotes, staticRemotesIter, devRemoteIters } = await (0, internal_2.startRemoteIterators)(options, context, start_dev_remotes_1.startRemotes, pathToManifestFile, 'angular', true);
|
|
97
97
|
const removeBaseUrlEmission = (iter) => (0, internal_1.mapAsyncIterable)(iter, (v) => ({
|
|
98
98
|
...v,
|
|
99
99
|
baseUrl: undefined,
|
|
@@ -113,7 +113,7 @@ async function* moduleFederationSsrDevServerExecutor(schema, context) {
|
|
|
113
113
|
const portsToWaitFor = staticRemotesIter && options.staticRemotesPort
|
|
114
114
|
? [options.staticRemotesPort, ...remotes.remotePorts]
|
|
115
115
|
: [...remotes.remotePorts];
|
|
116
|
-
await Promise.all(portsToWaitFor.map((port) => (0,
|
|
116
|
+
await Promise.all(portsToWaitFor.map((port) => (0, internal_3.waitForPortOpen)(port, {
|
|
117
117
|
retries: 480,
|
|
118
118
|
retryDelay: 2500,
|
|
119
119
|
host: 'localhost',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"e2e.migrator.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/angular/src/generators/ng-add/migrators/projects/e2e.migrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,IAAI,EACL,MAAM,YAAY,CAAC;AAuBpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EACV,MAAM,EACN,6BAA6B,EAE7B,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,KAAK,gBAAgB,GAAG,KAAK,CAAC;AAwB9B,qBAAa,WAAY,SAAQ,eAAe,CAAC,gBAAgB,CAAC;IAU9D,OAAO,CAAC,cAAc;IATxB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,oBAAoB,CAAU;IACtC,OAAO,CAAC,aAAa,CAAsB;gBAGzC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,6BAA6B,EAC9B,cAAc,EAAE,MAAM,GAAG,SAAS,EAC1C,MAAM,CAAC,EAAE,MAAM;IAeF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC9B,QAAQ,IAAI,gBAAgB;IAiGrC,OAAO,CAAC,UAAU;YAqCJ,2BAA2B;
|
|
1
|
+
{"version":3,"file":"e2e.migrator.d.ts","sourceRoot":"","sources":["../../../../../../../../packages/angular/src/generators/ng-add/migrators/projects/e2e.migrator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,IAAI,EACL,MAAM,YAAY,CAAC;AAuBpB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,KAAK,EACV,MAAM,EACN,6BAA6B,EAE7B,gBAAgB,EACjB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,KAAK,gBAAgB,GAAG,KAAK,CAAC;AAwB9B,qBAAa,WAAY,SAAQ,eAAe,CAAC,gBAAgB,CAAC;IAU9D,OAAO,CAAC,cAAc;IATxB,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,oBAAoB,CAAU;IACtC,OAAO,CAAC,aAAa,CAAsB;gBAGzC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,6BAA6B,EAC9B,cAAc,EAAE,MAAM,GAAG,SAAS,EAC1C,MAAM,CAAC,EAAE,MAAM;IAeF,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAwC9B,QAAQ,IAAI,gBAAgB;IAiGrC,OAAO,CAAC,UAAU;YAqCJ,2BAA2B;YA+C3B,wBAAwB;IAsDtC,OAAO,CAAC,+BAA+B;IAgBvC,OAAO,CAAC,iCAAiC;IAiCzC,OAAO,CAAC,sBAAsB;IAyB9B,OAAO,CAAC,0BAA0B;IAgBlC,OAAO,CAAC,6BAA6B;IAcrC,OAAO,CAAC,8BAA8B;IAetC,OAAO,CAAC,uBAAuB;IAoD/B,OAAO,CAAC,4BAA4B;IA0BpC,OAAO,CAAC,sBAAsB;IA0I9B,OAAO,CAAC,4BAA4B;IAwCpC,OAAO,CAAC,6CAA6C;IAiDrD,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,2BAA2B;IAcnC,OAAO,CAAC,+BAA+B;IAIvC,OAAO,CAAC,yBAAyB;IAiBjC,OAAO,CAAC,mBAAmB;IAO3B,OAAO,CAAC,sBAAsB;CAM/B"}
|
|
@@ -200,7 +200,7 @@ class E2eMigrator extends project_migrator_1.ProjectMigrator {
|
|
|
200
200
|
// add e2e project config
|
|
201
201
|
(0, devkit_1.addProjectConfiguration)(this.tree, this.project.name, {
|
|
202
202
|
...this.projectConfig,
|
|
203
|
-
}
|
|
203
|
+
});
|
|
204
204
|
if (this.isProjectUsingEsLint) {
|
|
205
205
|
await (0, eslint_1.lintProjectGenerator)(this.tree, {
|
|
206
206
|
project: this.project.name,
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
|
2
2
|
import type { Schema } from './schema';
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated SCAMs are superseded by Angular standalone components. Use the `componentGenerator` instead. It will be removed in Nx v24.
|
|
5
|
+
*/
|
|
3
6
|
export declare function scamGenerator(tree: Tree, rawOptions: Schema): Promise<void>;
|
|
4
7
|
export default scamGenerator;
|
|
5
8
|
//# sourceMappingURL=scam.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scam.d.ts","sourceRoot":"","sources":["../../../../../../packages/angular/src/generators/scam/scam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAMvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iBAiBjE;AAED,eAAe,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"scam.d.ts","sourceRoot":"","sources":["../../../../../../packages/angular/src/generators/scam/scam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAMvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iBAiBjE;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -6,6 +6,9 @@ const assert_supported_angular_version_1 = require("../../utils/assert-supported
|
|
|
6
6
|
const component_1 = require("../component/component");
|
|
7
7
|
const export_scam_1 = require("../utils/export-scam");
|
|
8
8
|
const lib_1 = require("./lib");
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated SCAMs are superseded by Angular standalone components. Use the `componentGenerator` instead. It will be removed in Nx v24.
|
|
11
|
+
*/
|
|
9
12
|
async function scamGenerator(tree, rawOptions) {
|
|
10
13
|
(0, assert_supported_angular_version_1.assertSupportedAngularVersion)(tree);
|
|
11
14
|
const options = await (0, lib_1.normalizeOptions)(tree, rawOptions);
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
|
2
2
|
import type { Schema } from './schema';
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated SCAMs are superseded by Angular standalone components. Use the `directiveGenerator` instead. It will be removed in Nx v24.
|
|
5
|
+
*/
|
|
3
6
|
export declare function scamDirectiveGenerator(tree: Tree, rawOptions: Schema): Promise<void>;
|
|
4
7
|
export default scamDirectiveGenerator;
|
|
5
8
|
//# sourceMappingURL=scam-directive.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scam-directive.d.ts","sourceRoot":"","sources":["../../../../../../packages/angular/src/generators/scam-directive/scam-directive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAMvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iBAiB1E;AAED,eAAe,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"scam-directive.d.ts","sourceRoot":"","sources":["../../../../../../packages/angular/src/generators/scam-directive/scam-directive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAMvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iBAiB1E;AAED,eAAe,sBAAsB,CAAC"}
|
|
@@ -6,6 +6,9 @@ const assert_supported_angular_version_1 = require("../../utils/assert-supported
|
|
|
6
6
|
const directive_1 = require("../directive/directive");
|
|
7
7
|
const export_scam_1 = require("../utils/export-scam");
|
|
8
8
|
const lib_1 = require("./lib");
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated SCAMs are superseded by Angular standalone components. Use the `directiveGenerator` instead. It will be removed in Nx v24.
|
|
11
|
+
*/
|
|
9
12
|
async function scamDirectiveGenerator(tree, rawOptions) {
|
|
10
13
|
(0, assert_supported_angular_version_1.assertSupportedAngularVersion)(tree);
|
|
11
14
|
const options = await (0, lib_1.normalizeOptions)(tree, rawOptions);
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
|
2
2
|
import type { Schema } from './schema';
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated SCAMs are superseded by Angular standalone components. Use the `pipeGenerator` instead. It will be removed in Nx v24.
|
|
5
|
+
*/
|
|
3
6
|
export declare function scamPipeGenerator(tree: Tree, rawOptions: Schema): Promise<void>;
|
|
4
7
|
export default scamPipeGenerator;
|
|
5
8
|
//# sourceMappingURL=scam-pipe.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scam-pipe.d.ts","sourceRoot":"","sources":["../../../../../../packages/angular/src/generators/scam-pipe/scam-pipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAMvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iBAiBrE;AAED,eAAe,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"scam-pipe.d.ts","sourceRoot":"","sources":["../../../../../../packages/angular/src/generators/scam-pipe/scam-pipe.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAMvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,iBAiBrE;AAED,eAAe,iBAAiB,CAAC"}
|
|
@@ -6,6 +6,9 @@ const assert_supported_angular_version_1 = require("../../utils/assert-supported
|
|
|
6
6
|
const pipe_1 = require("../pipe/pipe");
|
|
7
7
|
const export_scam_1 = require("../utils/export-scam");
|
|
8
8
|
const lib_1 = require("./lib");
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated SCAMs are superseded by Angular standalone components. Use the `pipeGenerator` instead. It will be removed in Nx v24.
|
|
11
|
+
*/
|
|
9
12
|
async function scamPipeGenerator(tree, rawOptions) {
|
|
10
13
|
(0, assert_supported_angular_version_1.assertSupportedAngularVersion)(tree);
|
|
11
14
|
const options = await (0, lib_1.normalizeOptions)(tree, rawOptions);
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import type { Tree } from '@nx/devkit';
|
|
2
2
|
import type { Schema } from './schema';
|
|
3
|
+
/**
|
|
4
|
+
* @deprecated SCAMs are superseded by Angular standalone components. Convert any remaining SCAMs before upgrading. It will be removed in Nx v24.
|
|
5
|
+
*/
|
|
3
6
|
export declare function scamToStandalone(tree: Tree, { component, project: projectName, skipFormat }: Schema): Promise<void>;
|
|
4
7
|
export default scamToStandalone;
|
|
5
8
|
//# sourceMappingURL=scam-to-standalone.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scam-to-standalone.d.ts","sourceRoot":"","sources":["../../../../../../packages/angular/src/generators/scam-to-standalone/scam-to-standalone.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAWvC,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,EACV,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,MAAM,iBAmDxD;AAED,eAAe,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"scam-to-standalone.d.ts","sourceRoot":"","sources":["../../../../../../packages/angular/src/generators/scam-to-standalone/scam-to-standalone.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAWvC;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,IAAI,EACV,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,EAAE,MAAM,iBAmDxD;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -4,6 +4,9 @@ exports.scamToStandalone = scamToStandalone;
|
|
|
4
4
|
const devkit_1 = require("@nx/devkit");
|
|
5
5
|
const assert_supported_angular_version_1 = require("../../utils/assert-supported-angular-version");
|
|
6
6
|
const lib_1 = require("./lib");
|
|
7
|
+
/**
|
|
8
|
+
* @deprecated SCAMs are superseded by Angular standalone components. Convert any remaining SCAMs before upgrading. It will be removed in Nx v24.
|
|
9
|
+
*/
|
|
7
10
|
async function scamToStandalone(tree, { component, project: projectName, skipFormat }) {
|
|
8
11
|
(0, assert_supported_angular_version_1.assertSupportedAngularVersion)(tree);
|
|
9
12
|
const projects = (0, devkit_1.getProjects)(tree);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Tree } from '@nx/devkit';
|
|
2
|
+
export default function migrateCreateNodesV2ToCreateNodes(tree: Tree): Promise<void>;
|
|
3
|
+
/**
|
|
4
|
+
* Rewrites named imports and re-exports of `createNodesV2` to `createNodes`
|
|
5
|
+
* when they come from one of the given module specifiers. Only the named
|
|
6
|
+
* bindings are touched — the module specifier, the `import`/`export` keyword,
|
|
7
|
+
* any `type` modifier, and any default import are left untouched.
|
|
8
|
+
*/
|
|
9
|
+
export declare function rewriteCreateNodesV2Imports(source: string, specifiers: ReadonlySet<string>): string;
|
|
10
|
+
//# sourceMappingURL=migrate-create-nodes-v2-to-create-nodes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-create-nodes-v2-to-create-nodes.d.ts","sourceRoot":"","sources":["../../../../../../packages/angular/src/migrations/update-23-0-0/migrate-create-nodes-v2-to-create-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,EAOL,KAAK,IAAI,EAEV,MAAM,YAAY,CAAC;AAsBpB,wBAA8B,iCAAiC,CAC7D,IAAI,EAAE,IAAI,GACT,OAAO,CAAC,IAAI,CAAC,CAyBf;AAED;;;;;GAKG;AACH,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,WAAW,CAAC,MAAM,CAAC,GAC9B,MAAM,CAoBR"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.default = migrateCreateNodesV2ToCreateNodes;
|
|
4
|
+
exports.rewriteCreateNodesV2Imports = rewriteCreateNodesV2Imports;
|
|
5
|
+
const devkit_1 = require("@nx/devkit");
|
|
6
|
+
const TS_EXTENSIONS = ['.ts', '.tsx', '.cts', '.mts'];
|
|
7
|
+
const DEPRECATED_NAME = 'createNodesV2';
|
|
8
|
+
const CANONICAL_NAME = 'createNodes';
|
|
9
|
+
// Module specifiers from which `@nx/angular` publicly exposes `createNodesV2`.
|
|
10
|
+
// A named import or re-export of `createNodesV2` from one of these is rewritten
|
|
11
|
+
// to the canonical `createNodes` export.
|
|
12
|
+
const TARGET_SPECIFIERS = new Set(['@nx/angular/plugin']);
|
|
13
|
+
let ts;
|
|
14
|
+
async function migrateCreateNodesV2ToCreateNodes(tree) {
|
|
15
|
+
let touchedCount = 0;
|
|
16
|
+
(0, devkit_1.visitNotIgnoredFiles)(tree, '.', (filePath) => {
|
|
17
|
+
if (!TS_EXTENSIONS.some((ext) => filePath.endsWith(ext))) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const original = tree.read(filePath, 'utf-8');
|
|
21
|
+
if (!original || !original.includes(DEPRECATED_NAME)) {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
const updated = rewriteCreateNodesV2Imports(original, TARGET_SPECIFIERS);
|
|
25
|
+
if (updated !== original) {
|
|
26
|
+
tree.write(filePath, updated);
|
|
27
|
+
touchedCount += 1;
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
if (touchedCount > 0) {
|
|
31
|
+
devkit_1.logger.info(`Renamed \`${DEPRECATED_NAME}\` imports to \`${CANONICAL_NAME}\` in ${touchedCount} file(s).`);
|
|
32
|
+
}
|
|
33
|
+
await (0, devkit_1.formatFiles)(tree);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Rewrites named imports and re-exports of `createNodesV2` to `createNodes`
|
|
37
|
+
* when they come from one of the given module specifiers. Only the named
|
|
38
|
+
* bindings are touched — the module specifier, the `import`/`export` keyword,
|
|
39
|
+
* any `type` modifier, and any default import are left untouched.
|
|
40
|
+
*/
|
|
41
|
+
function rewriteCreateNodesV2Imports(source, specifiers) {
|
|
42
|
+
ts ??= (0, devkit_1.ensurePackage)('typescript', '*');
|
|
43
|
+
const sourceFile = ts.createSourceFile('tmp.ts', source, ts.ScriptTarget.Latest,
|
|
44
|
+
/* setParentNodes */ true, ts.ScriptKind.TSX);
|
|
45
|
+
const changes = [];
|
|
46
|
+
for (const stmt of sourceFile.statements) {
|
|
47
|
+
if (ts.isImportDeclaration(stmt)) {
|
|
48
|
+
collectImportRewrite(sourceFile, stmt, specifiers, changes);
|
|
49
|
+
}
|
|
50
|
+
else if (ts.isExportDeclaration(stmt)) {
|
|
51
|
+
collectExportRewrite(sourceFile, stmt, specifiers, changes);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return changes.length > 0 ? (0, devkit_1.applyChangesToString)(source, changes) : source;
|
|
55
|
+
}
|
|
56
|
+
function isTargetSpecifier(node, specifiers) {
|
|
57
|
+
return ts.isStringLiteral(node) && specifiers.has(node.text);
|
|
58
|
+
}
|
|
59
|
+
function collectImportRewrite(sourceFile, stmt, specifiers, changes) {
|
|
60
|
+
if (!isTargetSpecifier(stmt.moduleSpecifier, specifiers)) {
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
const namedBindings = stmt.importClause?.namedBindings;
|
|
64
|
+
// Only `import { ... }` carries renameable named bindings. `import x`,
|
|
65
|
+
// `import * as ns`, and side-effect imports reference the module wholesale
|
|
66
|
+
// and keep working through the `createNodesV2` runtime alias, so we leave
|
|
67
|
+
// them be. A mixed `import def, { createNodesV2 }` still has its named
|
|
68
|
+
// bindings rewritten below — the default binding is untouched.
|
|
69
|
+
if (!namedBindings || !ts.isNamedImports(namedBindings)) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
rewriteNamedBindings(sourceFile, namedBindings, changes);
|
|
73
|
+
}
|
|
74
|
+
function collectExportRewrite(sourceFile, stmt, specifiers, changes) {
|
|
75
|
+
if (!stmt.moduleSpecifier ||
|
|
76
|
+
!isTargetSpecifier(stmt.moduleSpecifier, specifiers)) {
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// `export { ... } from '...'` can be rewritten; `export * from '...'` has no
|
|
80
|
+
// named bindings to rename.
|
|
81
|
+
if (!stmt.exportClause || !ts.isNamedExports(stmt.exportClause)) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
rewriteNamedBindings(sourceFile, stmt.exportClause, changes);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Re-renders the `{ ... }` of a named import/export, renaming any
|
|
88
|
+
* `createNodesV2` specifier to `createNodes`. If renaming would collide with a
|
|
89
|
+
* `createNodes` that is already present (e.g. `{ createNodes, createNodesV2 }`),
|
|
90
|
+
* the duplicate is dropped. Returns without recording a change when the binding
|
|
91
|
+
* list contains no `createNodesV2`.
|
|
92
|
+
*/
|
|
93
|
+
function rewriteNamedBindings(sourceFile, namedBindings, changes) {
|
|
94
|
+
const elements = namedBindings.elements;
|
|
95
|
+
const hasDeprecated = elements.some((el) => (el.propertyName ?? el.name).text === DEPRECATED_NAME);
|
|
96
|
+
if (!hasDeprecated) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const seen = new Set();
|
|
100
|
+
const rendered = [];
|
|
101
|
+
for (const el of elements) {
|
|
102
|
+
const text = renderSpecifier(el);
|
|
103
|
+
if (!seen.has(text)) {
|
|
104
|
+
seen.add(text);
|
|
105
|
+
rendered.push(text);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
const start = namedBindings.getStart(sourceFile);
|
|
109
|
+
changes.push({
|
|
110
|
+
type: devkit_1.ChangeType.Delete,
|
|
111
|
+
start,
|
|
112
|
+
length: namedBindings.getEnd() - start,
|
|
113
|
+
}, {
|
|
114
|
+
type: devkit_1.ChangeType.Insert,
|
|
115
|
+
index: start,
|
|
116
|
+
text: `{ ${rendered.join(', ')} }`,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
function renderSpecifier(el) {
|
|
120
|
+
const typePrefix = el.isTypeOnly ? 'type ' : '';
|
|
121
|
+
const rename = (name) => name === DEPRECATED_NAME ? CANONICAL_NAME : name;
|
|
122
|
+
// `{ name }` — no alias, so the local binding follows the rename.
|
|
123
|
+
if (!el.propertyName) {
|
|
124
|
+
return `${typePrefix}${rename(el.name.text)}`;
|
|
125
|
+
}
|
|
126
|
+
// `{ propertyName as name }` — only the imported (left) side is renamed; the
|
|
127
|
+
// local alias is preserved. A now-redundant alias such as
|
|
128
|
+
// `createNodesV2 as createNodes` collapses to `createNodes`.
|
|
129
|
+
const canonicalImported = rename(el.propertyName.text);
|
|
130
|
+
const localName = el.name.text;
|
|
131
|
+
return canonicalImported === localName
|
|
132
|
+
? `${typePrefix}${localName}`
|
|
133
|
+
: `${typePrefix}${canonicalImported} as ${localName}`;
|
|
134
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#### Rename `createNodesV2` imports to `createNodes`
|
|
2
|
+
|
|
3
|
+
`@nx/angular` renamed its primary inferred-plugin export from `createNodesV2` to `createNodes`. The `createNodesV2` name is preserved as a deprecated alias for now, but new code should use `createNodes`.
|
|
4
|
+
|
|
5
|
+
This migration scans every `.ts`, `.tsx`, `.cts`, and `.mts` file in your workspace and rewrites named imports and re-exports of `createNodesV2` from `@nx/angular/plugin` to `createNodes`.
|
|
6
|
+
|
|
7
|
+
#### Sample Code Changes
|
|
8
|
+
|
|
9
|
+
##### Before
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { createNodesV2 } from '@nx/angular/plugin';
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
##### After
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { createNodes } from '@nx/angular/plugin';
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
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.
|
|
22
|
+
|
|
23
|
+
#### What is not rewritten
|
|
24
|
+
|
|
25
|
+
Only static `import`/`export` named bindings from `@nx/angular/plugin` are rewritten. Namespace imports, dynamic `import(...)`, `require(...)` destructuring, and property access such as `plugin.createNodesV2` are left untouched — they keep working through the `createNodesV2` runtime alias. Update those by hand if you want to drop the deprecated name everywhere.
|