@nx/angular 23.0.0-beta.20 → 23.0.0-beta.22

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 (54) hide show
  1. package/generators.json +8 -4
  2. package/migrations.json +62 -31
  3. package/package.json +8 -8
  4. package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.d.ts.map +1 -1
  5. package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.js +2 -0
  6. package/src/executors/module-federation-dev-server/schema.json +1 -0
  7. package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.d.ts.map +1 -1
  8. package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +2 -0
  9. package/src/executors/module-federation-ssr-dev-server/schema.json +1 -0
  10. package/src/generators/add-linting/lib/add-angular-eslint-dependencies.js +1 -1
  11. package/src/generators/federate-module/federate-module.d.ts.map +1 -1
  12. package/src/generators/federate-module/federate-module.js +2 -0
  13. package/src/generators/host/host.d.ts.map +1 -1
  14. package/src/generators/host/host.js +2 -0
  15. package/src/generators/remote/remote.d.ts.map +1 -1
  16. package/src/generators/remote/remote.js +2 -0
  17. package/src/generators/setup-mf/setup-mf.d.ts.map +1 -1
  18. package/src/generators/setup-mf/setup-mf.js +2 -0
  19. package/src/migrations/update-20-2-0/add-localize-polyfill-to-targets.md +44 -0
  20. package/src/migrations/update-20-2-0/disable-angular-eslint-prefer-standalone.md +475 -0
  21. package/src/migrations/update-20-2-0/migrate-mf-imports-to-new-package.md +19 -0
  22. package/src/migrations/update-20-2-0/migrate-with-mf-import-to-new-package.md +25 -0
  23. package/src/migrations/update-20-2-0/remove-angular-eslint-rules.md +37 -0
  24. package/src/migrations/update-20-2-0/remove-tailwind-config-from-ng-packagr-executors.md +69 -0
  25. package/src/migrations/update-20-2-0/update-angular-cli.md +49 -0
  26. package/src/migrations/update-20-2-0/update-angular-ssr-imports-to-use-node-entry-point.md +27 -0
  27. package/src/migrations/update-20-3-0/ensure-nx-module-federation-package.md +23 -0
  28. package/src/migrations/update-20-4-0/update-angular-cli.md +49 -0
  29. package/src/migrations/update-20-5-0/update-angular-cli.md +23 -0
  30. package/src/migrations/update-21-0-0/change-data-persistence-operators-imports-to-ngrx-router-store-data-persistence.md +113 -0
  31. package/src/migrations/update-21-0-0/set-continuous-option.md +90 -0
  32. package/src/migrations/update-21-2-0/migrate-provide-server-rendering-import.md +56 -0
  33. package/src/migrations/update-21-2-0/replace-provide-server-routing.md +107 -0
  34. package/src/migrations/update-21-2-0/set-generator-defaults-for-previous-style-guide.md +164 -0
  35. package/src/migrations/update-21-2-0/update-angular-cli.md +23 -0
  36. package/src/migrations/update-21-2-0/update-module-resolution.md +53 -0
  37. package/src/migrations/update-21-3-0/update-angular-cli.md +23 -0
  38. package/src/migrations/update-21-5-0/remove-default-karma-configuration-files.md +122 -0
  39. package/src/migrations/update-21-5-0/set-tsconfig-option.md +114 -0
  40. package/src/migrations/update-21-5-0/update-angular-cli.md +23 -0
  41. package/src/migrations/update-21-6-1/update-angular-cli.md +23 -0
  42. package/src/migrations/update-22-3-0/set-isolated-modules.md +76 -0
  43. package/src/migrations/update-22-3-0/update-jest-preset-angular-setup.md +21 -0
  44. package/src/migrations/update-22-3-0/update-module-resolution.md +81 -0
  45. package/src/migrations/update-22-3-0/update-ssr-webpack-config.md +71 -0
  46. package/src/migrations/update-22-3-0/update-typescript-lib.md +103 -0
  47. package/src/migrations/update-22-3-0/update-unit-test-runner-option.md +33 -0
  48. package/src/migrations/update-23-0-0/migrate-ngrx-generator-defaults.md +46 -0
  49. package/src/migrations/update-23-0-0/migrate-with-mf-import-to-new-package.md +27 -0
  50. package/src/utils/module-federation-deprecation.d.ts +13 -0
  51. package/src/utils/module-federation-deprecation.d.ts.map +1 -0
  52. package/src/utils/module-federation-deprecation.js +49 -0
  53. package/src/utils/versions.d.ts +1 -1
  54. package/src/utils/versions.js +1 -1
@@ -0,0 +1,475 @@
1
+ #### Disable Angular ESLint Prefer Standalone
2
+
3
+ Disable the Angular ESLint prefer-standalone rule if not set.
4
+
5
+ #### Sample Code Changes
6
+
7
+ Update import paths for `withModuleFederation` and `withModuleFederationForSSR`.
8
+
9
+ ##### Before
10
+
11
+ ```json title="apps/app1/.eslintrc.json"
12
+ {
13
+ "overrides": [
14
+ {
15
+ "files": ["*.html"],
16
+ "rules": {
17
+ "some-rule-for-html": "error"
18
+ }
19
+ }
20
+ ]
21
+ }
22
+ ```
23
+
24
+ ##### After
25
+
26
+ ```json title="apps/app1/.eslintrc.json"
27
+ {
28
+ "overrides": [
29
+ {
30
+ "files": ["*.html"],
31
+ "rules": {
32
+ "some-rule-for-html": "error"
33
+ }
34
+ },
35
+ {
36
+ "files": ["*.ts"],
37
+ "rules": {
38
+ "@angular-eslint/prefer-standalone": "off"
39
+ }
40
+ }
41
+ ]
42
+ }
43
+ ```
44
+
45
+ import {
46
+ addProjectConfiguration,
47
+ writeJson,
48
+ type ProjectConfiguration,
49
+ type ProjectGraph,
50
+ type Tree,
51
+ } from '@nx/devkit';
52
+ import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing';
53
+ import migration from './disable-angular-eslint-prefer-standalone';
54
+
55
+ let projectGraph: ProjectGraph;
56
+ jest.mock('@nx/devkit', () => ({
57
+ ...jest.requireActual('@nx/devkit'),
58
+ createProjectGraphAsync: () => Promise.resolve(projectGraph),
59
+ }));
60
+
61
+ describe('disable-angular-eslint-prefer-standalone', () => {
62
+ let tree: Tree;
63
+
64
+ beforeEach(() => {
65
+ tree = createTreeWithEmptyWorkspace();
66
+
67
+ const projectConfig: ProjectConfiguration = {
68
+ name: 'app1',
69
+ root: 'apps/app1',
70
+ };
71
+ projectGraph = {
72
+ dependencies: {
73
+ app1: [
74
+ {
75
+ source: 'app1',
76
+ target: 'npm:@angular/core',
77
+ type: 'static',
78
+ },
79
+ ],
80
+ },
81
+ nodes: {
82
+ app1: {
83
+ data: projectConfig,
84
+ name: 'app1',
85
+ type: 'app',
86
+ },
87
+ },
88
+ };
89
+ addProjectConfiguration(tree, projectConfig.name, projectConfig);
90
+
91
+ });
92
+
93
+ describe('.eslintrc.json', () => {
94
+ it('should not disable @angular-eslint/prefer-standalone when it is set', async () => {
95
+ writeJson(tree, 'apps/app1/.eslintrc.json', {
96
+ overrides: [
97
+ {
98
+ files: ['*.ts'],
99
+ rules: { '@angular-eslint/prefer-standalone': ['error'] },
100
+ },
101
+ ],
102
+ });
103
+
104
+ await migration(tree);
105
+
106
+ expect(tree.read('apps/app1/.eslintrc.json', 'utf8'))
107
+ .toMatchInlineSnapshot(`
108
+ "{
109
+ "overrides": [
110
+ {
111
+ "files": ["*.ts"],
112
+ "rules": {
113
+ "@angular-eslint/prefer-standalone": ["error"]
114
+ }
115
+ }
116
+ ]
117
+ }
118
+ "
119
+ `);
120
+ });
121
+
122
+ it('should not disable @angular-eslint/prefer-standalone when there are multiple overrides for angular eslint and the rule is set in one of them', async () => {
123
+ writeJson(tree, 'apps/app1/.eslintrc.json', {
124
+ overrides: [
125
+ {
126
+ files: ['*.ts'],
127
+ rules: {
128
+ '@angular-eslint/directive-selector': [
129
+ 'error',
130
+ { type: 'attribute', prefix: 'app', style: 'camelCase' },
131
+ ],
132
+ },
133
+ },
134
+ {
135
+ files: ['*.ts'],
136
+ rules: { '@angular-eslint/prefer-standalone': ['error'] },
137
+ },
138
+ ],
139
+ });
140
+
141
+ await migration(tree);
142
+
143
+ expect(tree.read('apps/app1/.eslintrc.json', 'utf8'))
144
+ .toMatchInlineSnapshot(`
145
+ "{
146
+ "overrides": [
147
+ {
148
+ "files": ["*.ts"],
149
+ "rules": {
150
+ "@angular-eslint/directive-selector": [
151
+ "error",
152
+ {
153
+ "type": "attribute",
154
+ "prefix": "app",
155
+ "style": "camelCase"
156
+ }
157
+ ]
158
+ }
159
+ },
160
+ {
161
+ "files": ["*.ts"],
162
+ "rules": {
163
+ "@angular-eslint/prefer-standalone": ["error"]
164
+ }
165
+ }
166
+ ]
167
+ }
168
+ "
169
+ `);
170
+ });
171
+
172
+ it('should disable @angular-eslint/prefer-standalone in an existing override for angular eslint', async () => {
173
+ writeJson(tree, 'apps/app1/.eslintrc.json', {
174
+ overrides: [
175
+ {
176
+ files: ['*.ts'],
177
+ rules: { 'no-unused-vars': 'error' },
178
+ },
179
+ {
180
+ files: ['*.ts'],
181
+ rules: {
182
+ '@angular-eslint/directive-selector': [
183
+ 'error',
184
+ { type: 'attribute', prefix: 'app', style: 'camelCase' },
185
+ ],
186
+ },
187
+ },
188
+ ],
189
+ });
190
+
191
+ await migration(tree);
192
+
193
+ expect(tree.read('apps/app1/.eslintrc.json', 'utf8'))
194
+ .toMatchInlineSnapshot(`
195
+ "{
196
+ "overrides": [
197
+ {
198
+ "files": ["*.ts"],
199
+ "rules": {
200
+ "no-unused-vars": "error"
201
+ }
202
+ },
203
+ {
204
+ "files": ["*.ts"],
205
+ "rules": {
206
+ "@angular-eslint/directive-selector": [
207
+ "error",
208
+ {
209
+ "type": "attribute",
210
+ "prefix": "app",
211
+ "style": "camelCase"
212
+ }
213
+ ],
214
+ "@angular-eslint/prefer-standalone": "off"
215
+ }
216
+ }
217
+ ]
218
+ }
219
+ "
220
+ `);
221
+ });
222
+
223
+ it('should disable @angular-eslint/prefer-standalone in an existing override for ts files', async () => {
224
+ writeJson(tree, 'apps/app1/.eslintrc.json', {
225
+ overrides: [
226
+ {
227
+ files: ['*.ts'],
228
+ rules: { 'no-unused-vars': 'error' },
229
+ },
230
+ ],
231
+ });
232
+
233
+ await migration(tree);
234
+
235
+ expect(tree.read('apps/app1/.eslintrc.json', 'utf8'))
236
+ .toMatchInlineSnapshot(`
237
+ "{
238
+ "overrides": [
239
+ {
240
+ "files": ["*.ts"],
241
+ "rules": {
242
+ "no-unused-vars": "error",
243
+ "@angular-eslint/prefer-standalone": "off"
244
+ }
245
+ }
246
+ ]
247
+ }
248
+ "
249
+ `);
250
+ });
251
+
252
+ it('should disable @angular-eslint/prefer-standalone in a new override', async () => {
253
+ writeJson(tree, 'apps/app1/.eslintrc.json', {
254
+ overrides: [
255
+ {
256
+ files: ['*.html'],
257
+ rules: { 'some-rule-for-html': 'error' },
258
+ },
259
+ ],
260
+ });
261
+
262
+ await migration(tree);
263
+
264
+ expect(tree.read('apps/app1/.eslintrc.json', 'utf8'))
265
+ .toMatchInlineSnapshot(`
266
+ "{
267
+ "overrides": [
268
+ {
269
+ "files": ["*.html"],
270
+ "rules": {
271
+ "some-rule-for-html": "error"
272
+ }
273
+ },
274
+ {
275
+ "files": ["*.ts"],
276
+ "rules": {
277
+ "@angular-eslint/prefer-standalone": "off"
278
+ }
279
+ }
280
+ ]
281
+ }
282
+ "
283
+ `);
284
+ });
285
+
286
+ });
287
+
288
+ describe('flat config', () => {
289
+ it('should not disable @angular-eslint/prefer-standalone when it is set', async () => {
290
+ tree.write('eslint.config.js', 'module.exports = [];');
291
+ tree.write(
292
+ 'apps/app1/eslint.config.js',
293
+ `module.exports = [
294
+ {
295
+ files: ['*.ts'],
296
+ rules: { '@angular-eslint/prefer-standalone': ['error'] },
297
+ },
298
+ ];
299
+ `
300
+ );
301
+
302
+ await migration(tree);
303
+
304
+ expect(tree.read('apps/app1/eslint.config.js', 'utf8'))
305
+ .toMatchInlineSnapshot(`
306
+ "module.exports = [
307
+ {
308
+ files: ['*.ts'],
309
+ rules: { '@angular-eslint/prefer-standalone': ['error'] },
310
+ },
311
+ ];
312
+ "
313
+ `);
314
+ });
315
+
316
+ it('should not disable @angular-eslint/prefer-standalone when there are multiple overrides for angular eslint and the rule is set in one of them', async () => {
317
+ tree.write('eslint.config.js', 'module.exports = [];');
318
+ tree.write(
319
+ 'apps/app1/eslint.config.js',
320
+ `module.exports = [
321
+ {
322
+ files: ['*.ts'],
323
+ rules: {
324
+ '@angular-eslint/directive-selector': [
325
+ 'error',
326
+ { type: 'attribute', prefix: 'app', style: 'camelCase' },
327
+ ],
328
+ },
329
+ },
330
+ {
331
+ files: ['*.ts'],
332
+ rules: { '@angular-eslint/prefer-standalone': ['error'] },
333
+ },
334
+ ];
335
+ `
336
+ );
337
+
338
+ await migration(tree);
339
+
340
+ expect(tree.read('apps/app1/eslint.config.js', 'utf8'))
341
+ .toMatchInlineSnapshot(`
342
+ "module.exports = [
343
+ {
344
+ files: ['*.ts'],
345
+ rules: {
346
+ '@angular-eslint/directive-selector': [
347
+ 'error',
348
+ { type: 'attribute', prefix: 'app', style: 'camelCase' },
349
+ ],
350
+ },
351
+ },
352
+ {
353
+ files: ['*.ts'],
354
+ rules: { '@angular-eslint/prefer-standalone': ['error'] },
355
+ },
356
+ ];
357
+ "
358
+ `);
359
+ });
360
+
361
+ it('should disable @angular-eslint/prefer-standalone in an existing override for angular eslint', async () => {
362
+ tree.write('eslint.config.js', 'module.exports = [];');
363
+ tree.write(
364
+ 'apps/app1/eslint.config.js',
365
+ `module.exports = [
366
+ {
367
+ files: ['*.ts'],
368
+ rules: { 'no-unused-vars': 'error' },
369
+ },
370
+ {
371
+ files: ['*.ts'],
372
+ rules: {
373
+ '@angular-eslint/directive-selector': [
374
+ 'error',
375
+ { type: 'attribute', prefix: 'app', style: 'camelCase' },
376
+ ],
377
+ },
378
+ },
379
+ ];
380
+ `
381
+ );
382
+
383
+ await migration(tree);
384
+
385
+ expect(tree.read('apps/app1/eslint.config.js', 'utf8'))
386
+ .toMatchInlineSnapshot(`
387
+ "module.exports = [
388
+ {
389
+ files: ['*.ts'],
390
+ rules: { 'no-unused-vars': 'error' },
391
+ },
392
+ {
393
+ files: ['**/*.ts'],
394
+ rules: {
395
+ '@angular-eslint/directive-selector': [
396
+ 'error',
397
+ {
398
+ type: 'attribute',
399
+ prefix: 'app',
400
+ style: 'camelCase',
401
+ },
402
+ ],
403
+ '@angular-eslint/prefer-standalone': 'off',
404
+ },
405
+ },
406
+ ];
407
+ "
408
+ `);
409
+ });
410
+
411
+ it('should disable @angular-eslint/prefer-standalone in an existing override for ts files', async () => {
412
+ tree.write('eslint.config.js', 'module.exports = [];');
413
+ tree.write(
414
+ 'apps/app1/eslint.config.js',
415
+ `module.exports = [
416
+ {
417
+ files: ['*.ts'],
418
+ rules: { 'no-unused-vars': 'error' },
419
+ },
420
+ ];
421
+ `
422
+ );
423
+
424
+ await migration(tree);
425
+
426
+ expect(tree.read('apps/app1/eslint.config.js', 'utf8'))
427
+ .toMatchInlineSnapshot(`
428
+ "module.exports = [
429
+ {
430
+ files: ['**/*.ts'],
431
+ rules: {
432
+ 'no-unused-vars': 'error',
433
+ '@angular-eslint/prefer-standalone': 'off',
434
+ },
435
+ },
436
+ ];
437
+ "
438
+ `);
439
+ });
440
+
441
+ it('should disable @angular-eslint/prefer-standalone in a new override', async () => {
442
+ tree.write('eslint.config.js', 'module.exports = [];');
443
+ tree.write(
444
+ 'apps/app1/eslint.config.js',
445
+ `module.exports = [
446
+ {
447
+ files: ['*.html'],
448
+ rules: { 'some-rule-for-html': 'error' },
449
+ },
450
+ ];
451
+ `
452
+ );
453
+
454
+ await migration(tree);
455
+
456
+ expect(tree.read('apps/app1/eslint.config.js', 'utf8'))
457
+ .toMatchInlineSnapshot(`
458
+ "module.exports = [
459
+ {
460
+ files: ['*.html'],
461
+ rules: { 'some-rule-for-html': 'error' },
462
+ },
463
+ {
464
+ files: ['**/*.ts'],
465
+ rules: {
466
+ '@angular-eslint/prefer-standalone': 'off',
467
+ },
468
+ },
469
+ ];
470
+ "
471
+ `);
472
+ });
473
+
474
+ });
475
+ });
@@ -0,0 +1,19 @@
1
+ #### Migrate Module Federation Imports to New Package
2
+
3
+ Update the ModuleFederationConfig imports to use @nx/module-federation.
4
+
5
+ #### Sample Code Changes
6
+
7
+ Update import paths for ModuleFederationConfig.
8
+
9
+ ##### Before
10
+
11
+ ```js title="apps/shell/webpack.config.js"
12
+ import { ModuleFederationConfig } from '@nx/webpack';
13
+ ```
14
+
15
+ ##### After
16
+
17
+ ```js title="apps/shell/webpack.config.js"
18
+ import { ModuleFederationConfig } from '@nx/module-federation';
19
+ ```
@@ -0,0 +1,25 @@
1
+ #### Migrate withModuleFederation Import to New Package
2
+
3
+ Update the withModuleFederation import to use @nx/module-federation/webpack.
4
+
5
+ #### Sample Code Changes
6
+
7
+ Update import paths for `withModuleFederation` and `withModuleFederationForSSR`.
8
+
9
+ ##### Before
10
+
11
+ ```ts title="apps/shell/webpack.config.ts"
12
+ import {
13
+ withModuleFederation,
14
+ withModuleFederationForSSR,
15
+ } from '@nx/angular/module-federation';
16
+ ```
17
+
18
+ ##### After
19
+
20
+ ```ts title="apps/shell/webpack.config.ts"
21
+ import {
22
+ withModuleFederation,
23
+ withModuleFederationForSSR,
24
+ } from '@nx/module-federation/angular';
25
+ ```
@@ -0,0 +1,37 @@
1
+ #### Remove Angular ESLint Rules
2
+
3
+ Remove Angular ESLint rules that were removed in v19.0.0.
4
+
5
+ #### Sample Code Changes
6
+
7
+ Removes `@angular-eslint/no-host-metadata-property`, `@angular-eslint/sort-ngmodule-metadata-arrays` and `@angular-eslint/prefer-standalone-component` from any ESLint config file. Files to be searched include `.eslintrc.json`, `.eslintrc.base.json`, `.eslint.config.js` and `.eslint.config.base.js`.
8
+
9
+ ##### Before
10
+
11
+ ```json title="apps/app1/.eslintrc.json"
12
+ {
13
+ "overrides": [
14
+ {
15
+ "files": ["*.ts"],
16
+ "rules": {
17
+ "@angular-eslint/no-host-metadata-property": ["error"],
18
+ "@angular-eslint/sort-ngmodule-metadata-arrays": ["error"],
19
+ "@angular-eslint/prefer-standalone-component": ["error"]
20
+ }
21
+ }
22
+ ]
23
+ }
24
+ ```
25
+
26
+ ##### After
27
+
28
+ ```json title="apps/app1/.eslintrc.json"
29
+ {
30
+ "overrides": [
31
+ {
32
+ "files": ["*.ts"],
33
+ "rules": {}
34
+ }
35
+ ]
36
+ }
37
+ ```
@@ -0,0 +1,69 @@
1
+ #### Remove tailwindConfig from ng-packagr Executors
2
+
3
+ Remove the deprecated 'tailwindConfig' option from ng-packagr executors. Tailwind CSS configurations located at the project or workspace root will be picked up automatically.
4
+
5
+ #### Sample Code Changes
6
+
7
+ Remove `tailwindConfig` from the `@nx/angular:ng-packagr-lite` or `@nx/angular:package` executor options in project configuration.
8
+
9
+ ##### Before
10
+
11
+ ```json title="libs/my-lib/project.json"
12
+ {
13
+ "targets": {
14
+ "build": {
15
+ "executor": "@nx/angular:ng-packagr-lite",
16
+ "options": {
17
+ "project": "libs/lib1/ng-package.json",
18
+ "tailwindConfig": "libs/lib1/tailwind.config.js"
19
+ }
20
+ }
21
+ }
22
+ }
23
+ ```
24
+
25
+ ##### After
26
+
27
+ ```json title="libs/my-lib/project.json"
28
+ {
29
+ "targets": {
30
+ "build": {
31
+ "executor": "@nx/angular:ng-packagr-lite",
32
+ "options": {
33
+ "project": "libs/lib1/ng-package.json"
34
+ }
35
+ }
36
+ }
37
+ }
38
+ ```
39
+
40
+ Remove `tailwindConfig` from the `@nx/angular:ng-packagr-lite` or `@nx/angular:package` executor target defaults in `nx.json`.
41
+
42
+ ##### Before
43
+
44
+ ```json title="nx.json"
45
+ {
46
+ "targetDefaults": {
47
+ "@nx/angular:ng-packagr-lite": {
48
+ "options": {
49
+ "project": "{projectRoot}/ng-package.json",
50
+ "tailwindConfig": "{projectRoot}/tailwind.config.js"
51
+ }
52
+ }
53
+ }
54
+ }
55
+ ```
56
+
57
+ ##### After
58
+
59
+ ```json title="nx.json"
60
+ {
61
+ "targetDefaults": {
62
+ "@nx/angular:ng-packagr-lite": {
63
+ "options": {
64
+ "project": "{projectRoot}/ng-package.json"
65
+ }
66
+ }
67
+ }
68
+ }
69
+ ```
@@ -0,0 +1,49 @@
1
+ #### Update `@angular/cli` to `~19.0.0`
2
+
3
+ Update the version of the Angular CLI if it is specified in `package.json`
4
+
5
+ #### Sample Code Changes
6
+
7
+ Update in `devDependencies`:
8
+
9
+ ##### Before
10
+
11
+ ```json title="package.json"
12
+ {
13
+ "devDependencies": {
14
+ "@angular/cli": "~13.3.0"
15
+ }
16
+ }
17
+ ```
18
+
19
+ ##### After
20
+
21
+ ```json title="package.json"
22
+ {
23
+ "devDependencies": {
24
+ "@angular/cli": "~19.0.0"
25
+ }
26
+ }
27
+ ```
28
+
29
+ Update in `dependencies`:
30
+
31
+ ##### Before
32
+
33
+ ```json title="package.json"
34
+ {
35
+ "dependencies": {
36
+ "@angular/cli": "~13.3.0"
37
+ }
38
+ }
39
+ ```
40
+
41
+ ##### After
42
+
43
+ ```json title="package.json"
44
+ {
45
+ "dependencies": {
46
+ "@angular/cli": "~19.0.0"
47
+ }
48
+ }
49
+ ```
@@ -0,0 +1,27 @@
1
+ #### Update Angular SSR Imports to Use Node Entry Point
2
+
3
+ Update '@angular/ssr' import paths to use the new '/node' entry point when 'CommonEngine' is detected.
4
+
5
+ #### Sample Code Changes
6
+
7
+ Update import paths for SSR CommonEngine properties to use `@angular/ssr/node`.
8
+
9
+ ##### Before
10
+
11
+ ```ts title="apps/app1/server.ts"
12
+ import { CommonEngine } from '@angular/ssr';
13
+ import type {
14
+ CommonEngineOptions,
15
+ CommonEngineRenderOptions,
16
+ } from '@angular/ssr';
17
+ ```
18
+
19
+ ##### After
20
+
21
+ ```ts title="apps/app1/server.ts"
22
+ import { CommonEngine } from '@angular/ssr/node';
23
+ import type {
24
+ CommonEngineOptions,
25
+ CommonEngineRenderOptions,
26
+ } from '@angular/ssr/node';
27
+ ```