@nx/angular 23.0.0-rc.3 → 23.0.0

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.
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addE2e = addE2e;
4
- const internal_1 = require("@nx/devkit/internal");
5
4
  const devkit_1 = require("@nx/devkit");
6
5
  const versions_1 = require("../../../utils/versions");
7
6
  async function addE2e(tree, options) {
@@ -66,9 +65,12 @@ async function addE2e(tree, options) {
66
65
  function getAngularE2EWebServerInfo(tree, projectName, portOverride) {
67
66
  const nxJson = (0, devkit_1.readNxJson)(tree);
68
67
  let e2ePort = portOverride ?? 4200;
69
- const serveTargetOptions = (0, internal_1.readTargetDefaultsForTarget)('serve', nxJson.targetDefaults)?.options;
70
- if (serveTargetOptions?.port || serveTargetOptions?.env?.PORT) {
71
- e2ePort = serveTargetOptions.port || serveTargetOptions.env.PORT;
68
+ if (nxJson.targetDefaults?.['serve'] &&
69
+ (nxJson.targetDefaults?.['serve'].options?.port ||
70
+ nxJson.targetDefaults?.['serve'].options?.env?.PORT)) {
71
+ e2ePort =
72
+ nxJson.targetDefaults?.['serve'].options?.port ||
73
+ nxJson.targetDefaults?.['serve'].options?.env?.PORT;
72
74
  }
73
75
  const pm = (0, devkit_1.getPackageManagerCommand)();
74
76
  return {
@@ -2,7 +2,6 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Migrator = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
- const internal_1 = require("@nx/devkit/internal");
6
5
  const path_1 = require("path");
7
6
  class Migrator {
8
7
  constructor(tree, projectConfig, logger) {
@@ -67,15 +66,11 @@ class Migrator {
67
66
  if (!targetNames.length) {
68
67
  return;
69
68
  }
70
- const nxJson = (0, devkit_1.readNxJson)(this.tree) ?? {};
71
- for (const name of targetNames) {
72
- const existing = (0, internal_1.findTargetDefault)(nxJson.targetDefaults, {
73
- target: name,
74
- });
75
- (0, internal_1.upsertTargetDefault)(this.tree, nxJson, {
76
- target: name,
77
- cache: existing?.cache ?? true,
78
- });
69
+ const nxJson = (0, devkit_1.readNxJson)(this.tree);
70
+ nxJson.targetDefaults ??= {};
71
+ for (const target of targetNames) {
72
+ nxJson.targetDefaults[target] ??= {};
73
+ nxJson.targetDefaults[target].cache ??= true;
79
74
  }
80
75
  (0, devkit_1.updateNxJson)(this.tree, nxJson);
81
76
  }
@@ -3,8 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.updateProjectConfigForApplicationBuilder = updateProjectConfigForApplicationBuilder;
4
4
  exports.updateProjectConfigForBrowserBuilder = updateProjectConfigForBrowserBuilder;
5
5
  const devkit_1 = require("@nx/devkit");
6
- const internal_1 = require("@nx/devkit/internal");
7
- const internal_2 = require("@nx/js/internal");
6
+ const internal_1 = require("@nx/js/internal");
8
7
  const constants_1 = require("./constants");
9
8
  function updateProjectConfigForApplicationBuilder(tree, options) {
10
9
  const project = (0, devkit_1.readProjectConfiguration)(tree, options.project);
@@ -29,7 +28,7 @@ function updateProjectConfigForApplicationBuilder(tree, options) {
29
28
  }
30
29
  }
31
30
  }
32
- const sourceRoot = (0, internal_2.getProjectSourceRoot)(project, tree);
31
+ const sourceRoot = (0, internal_1.getProjectSourceRoot)(project, tree);
33
32
  buildTarget.options ??= {};
34
33
  buildTarget.options.outputPath = outputPath;
35
34
  buildTarget.options.server = (0, devkit_1.joinPathFragments)(sourceRoot, options.main);
@@ -56,7 +55,7 @@ function updateProjectConfigForBrowserBuilder(tree, options) {
56
55
  configurations[key] = getServerOptions(options);
57
56
  }
58
57
  }
59
- const sourceRoot = (0, internal_2.getProjectSourceRoot)(projectConfig, tree);
58
+ const sourceRoot = (0, internal_1.getProjectSourceRoot)(projectConfig, tree);
60
59
  projectConfig.targets.server = {
61
60
  dependsOn: ['build'],
62
61
  executor: buildTarget.executor.startsWith('@angular-devkit/build-angular:')
@@ -104,27 +103,16 @@ function updateProjectConfigForBrowserBuilder(tree, options) {
104
103
  defaultConfiguration: 'production',
105
104
  };
106
105
  (0, devkit_1.updateProjectConfiguration)(tree, options.project, projectConfig);
107
- const nxJson = (0, devkit_1.readNxJson)(tree) ?? {};
106
+ const nxJson = (0, devkit_1.readNxJson)(tree);
108
107
  if (nxJson.tasksRunnerOptions?.default?.options?.cacheableOperations &&
109
108
  !nxJson.tasksRunnerOptions.default.options.cacheableOperations.includes('server')) {
110
109
  nxJson.tasksRunnerOptions.default.options.cacheableOperations.push('server');
111
110
  }
112
- const existing = findServerDefault(nxJson.targetDefaults);
113
- if (!existing || existing.cache === undefined) {
114
- (0, internal_1.upsertTargetDefault)(tree, nxJson, { target: 'server', cache: true });
115
- }
111
+ nxJson.targetDefaults ??= {};
112
+ nxJson.targetDefaults.server ??= {};
113
+ nxJson.targetDefaults.server.cache ??= true;
116
114
  (0, devkit_1.updateNxJson)(tree, nxJson);
117
115
  }
118
- function findServerDefault(td) {
119
- if (!td)
120
- return undefined;
121
- if (Array.isArray(td)) {
122
- return td.find((e) => e.target === 'server' &&
123
- e.projects === undefined &&
124
- e.plugin === undefined);
125
- }
126
- return td['server'];
127
- }
128
116
  function getServerOptions(options = {}) {
129
117
  return {
130
118
  buildOptimizer: options?.buildOptimizer,
@@ -2,36 +2,29 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addMfEnvToTargetDefaultInputs = addMfEnvToTargetDefaultInputs;
4
4
  const devkit_1 = require("@nx/devkit");
5
- const internal_1 = require("@nx/devkit/internal");
6
5
  function addMfEnvToTargetDefaultInputs(tree) {
7
- const nxJson = (0, devkit_1.readNxJson)(tree) ?? {};
6
+ const nxJson = (0, devkit_1.readNxJson)(tree);
8
7
  const webpackExecutor = '@nx/angular:webpack-browser';
9
8
  const mfEnvVar = 'NX_MF_DEV_REMOTES';
10
- const defaultInputs = [
9
+ const inputs = [
11
10
  ...(nxJson.namedInputs && 'production' in nxJson.namedInputs
12
11
  ? ['production', '^production']
13
12
  : ['default', '^default']),
14
13
  ];
15
- const existing = (0, internal_1.normalizeTargetDefaults)(nxJson.targetDefaults).find((e) => e.executor === webpackExecutor &&
16
- e.target === undefined &&
17
- e.projects === undefined &&
18
- e.plugin === undefined);
19
- const inputs = [...(existing?.inputs ?? defaultInputs)];
14
+ nxJson.targetDefaults ??= {};
15
+ nxJson.targetDefaults[webpackExecutor] ??= {};
16
+ nxJson.targetDefaults[webpackExecutor].inputs ??= inputs;
17
+ nxJson.targetDefaults[webpackExecutor].dependsOn ??= ['^build'];
20
18
  let mfEnvVarExists = false;
21
- for (const input of inputs) {
19
+ for (const input of nxJson.targetDefaults[webpackExecutor].inputs) {
22
20
  if (typeof input === 'object' && input['env'] === mfEnvVar) {
23
21
  mfEnvVarExists = true;
24
22
  break;
25
23
  }
26
24
  }
27
25
  if (!mfEnvVarExists) {
28
- inputs.push({ env: mfEnvVar });
26
+ nxJson.targetDefaults[webpackExecutor].inputs.push({ env: mfEnvVar });
29
27
  }
30
- (0, internal_1.upsertTargetDefault)(tree, nxJson, {
31
- executor: webpackExecutor,
32
- cache: true,
33
- inputs,
34
- dependsOn: existing?.dependsOn ?? ['^build'],
35
- });
28
+ nxJson.targetDefaults[webpackExecutor].cache = true;
36
29
  (0, devkit_1.updateNxJson)(tree, nxJson);
37
30
  }
@@ -3,7 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addVitestAngular = addVitestAngular;
4
4
  exports.addVitestAnalog = addVitestAnalog;
5
5
  const devkit_1 = require("@nx/devkit");
6
- const internal_1 = require("@nx/devkit/internal");
7
6
  const devkit_internals_1 = require("nx/src/devkit-internals");
8
7
  const semver_1 = require("semver");
9
8
  const versions_1 = require("../../utils/versions");
@@ -17,21 +16,15 @@ async function addVitestAngular(tree, options) {
17
16
  project.targets ??= {};
18
17
  project.targets.test = { executor, options: { watch: false } };
19
18
  (0, devkit_1.updateProjectConfiguration)(tree, options.name, project);
20
- const nxJson = (0, devkit_1.readNxJson)(tree) ?? {};
21
- const existing = (0, internal_1.normalizeTargetDefaults)(nxJson.targetDefaults).find((entry) => entry.executor === executor &&
22
- entry.target === undefined &&
23
- entry.projects === undefined &&
24
- entry.plugin === undefined);
25
- if (!existing) {
26
- (0, internal_1.upsertTargetDefault)(tree, nxJson, {
27
- executor,
28
- cache: true,
29
- inputs: nxJson.namedInputs && 'production' in nxJson.namedInputs
30
- ? ['default', '^production']
31
- : ['default', '^default'],
32
- });
33
- (0, devkit_1.updateNxJson)(tree, nxJson);
34
- }
19
+ const nxJson = (0, devkit_1.readNxJson)(tree);
20
+ nxJson.targetDefaults ??= {};
21
+ nxJson.targetDefaults[executor] ??= {
22
+ cache: true,
23
+ inputs: nxJson.namedInputs && 'production' in nxJson.namedInputs
24
+ ? ['default', '^production']
25
+ : ['default', '^default'],
26
+ };
27
+ (0, devkit_1.updateNxJson)(tree, nxJson);
35
28
  configureTypeScriptForVitest(tree, options.projectRoot);
36
29
  addVitestScreenshotsToGitIgnore(tree);
37
30
  if (options.skipPackageJson) {
@@ -5,7 +5,7 @@ const devkit_1 = require("@nx/devkit");
5
5
  const internal_1 = require("@nx/devkit/internal");
6
6
  async function default_1(tree) {
7
7
  let usesModuleFederation = false;
8
- (0, internal_1.forEachExecutorOptions)(tree, '@nx/angular:webpack-browser', (options) => {
8
+ (0, internal_1.forEachExecutorOptions)(tree, '@nx/angular:webpack-browser', (options, projectName, targetName) => {
9
9
  const webpackConfig = options.webpackConfig;
10
10
  if (!webpackConfig) {
11
11
  return;
@@ -18,41 +18,34 @@ async function default_1(tree) {
18
18
  if (!usesModuleFederation) {
19
19
  return;
20
20
  }
21
- const nxJson = (0, devkit_1.readNxJson)(tree) ?? {};
21
+ const nxJson = (0, devkit_1.readNxJson)(tree);
22
22
  const nxMFDevRemotesEnvVar = 'NX_MF_DEV_REMOTES';
23
- const webpackExecutor = '@nx/angular:webpack-browser';
24
- const defaultInputs = [
23
+ const inputs = [
25
24
  ...(nxJson.namedInputs && 'production' in nxJson.namedInputs
26
25
  ? ['production', '^production']
27
26
  : ['default', '^default']),
28
27
  { env: nxMFDevRemotesEnvVar },
29
28
  ];
30
- const existing = (0, internal_1.normalizeTargetDefaults)(nxJson.targetDefaults).find((e) => e.executor === webpackExecutor &&
31
- e.target === undefined &&
32
- e.projects === undefined &&
33
- e.plugin === undefined);
34
- if (!existing) {
35
- (0, internal_1.upsertTargetDefault)(tree, nxJson, {
36
- executor: webpackExecutor,
29
+ if (!nxJson.targetDefaults ||
30
+ !nxJson.targetDefaults?.['@nx/angular:webpack-browser']) {
31
+ nxJson.targetDefaults ??= {};
32
+ nxJson.targetDefaults['@nx/angular:webpack-browser'] = {
37
33
  cache: true,
38
- inputs: defaultInputs,
34
+ inputs,
39
35
  dependsOn: ['^build'],
40
- });
36
+ };
41
37
  }
42
38
  else {
43
- const dependsOn = [...(existing.dependsOn ?? [])];
44
- if (!dependsOn.includes('^build'))
45
- dependsOn.push('^build');
46
- const inputs = [...(existing.inputs ?? [])];
47
- if (!inputs.find((i) => typeof i === 'string' ? false : i['env'] === nxMFDevRemotesEnvVar)) {
48
- inputs.push({ env: nxMFDevRemotesEnvVar });
39
+ nxJson.targetDefaults['@nx/angular:webpack-browser'].dependsOn ??= [];
40
+ if (!nxJson.targetDefaults['@nx/angular:webpack-browser'].dependsOn.includes('^build')) {
41
+ nxJson.targetDefaults['@nx/angular:webpack-browser'].dependsOn.push('^build');
42
+ }
43
+ nxJson.targetDefaults['@nx/angular:webpack-browser'].inputs ??= [];
44
+ if (!nxJson.targetDefaults['@nx/angular:webpack-browser'].inputs.find((i) => typeof i === 'string' ? false : i['env'] === nxMFDevRemotesEnvVar)) {
45
+ nxJson.targetDefaults['@nx/angular:webpack-browser'].inputs.push({
46
+ env: nxMFDevRemotesEnvVar,
47
+ });
49
48
  }
50
- (0, internal_1.upsertTargetDefault)(tree, nxJson, {
51
- executor: webpackExecutor,
52
- ...(existing.cache !== undefined ? { cache: existing.cache } : {}),
53
- inputs,
54
- dependsOn,
55
- });
56
49
  }
57
50
  (0, devkit_1.updateNxJson)(tree, nxJson);
58
51
  await (0, devkit_1.formatFiles)(tree);
@@ -39,7 +39,11 @@ async function default_1(tree) {
39
39
  if (!nxJson.targetDefaults) {
40
40
  return;
41
41
  }
42
- const cleanEntry = (targetConfig) => {
42
+ for (const [targetOrExecutor, targetConfig] of Object.entries(nxJson.targetDefaults)) {
43
+ if (!exports.executors.includes(targetOrExecutor) &&
44
+ !exports.executors.includes(targetConfig.executor)) {
45
+ continue;
46
+ }
43
47
  if (targetConfig.options) {
44
48
  delete targetConfig.options.tailwindConfig;
45
49
  if (!Object.keys(targetConfig.options).length) {
@@ -55,51 +59,14 @@ async function default_1(tree) {
55
59
  if (!Object.keys(targetConfig.configurations ?? {}).length) {
56
60
  delete targetConfig.configurations;
57
61
  }
58
- return {
59
- empty: !Object.keys(targetConfig).length ||
60
- (Object.keys(targetConfig).length === 1 &&
61
- Object.keys(targetConfig)[0] === 'executor'),
62
- };
63
- };
64
- if (Array.isArray(nxJson.targetDefaults)) {
65
- const remaining = [];
66
- for (const entry of nxJson.targetDefaults) {
67
- const matches = exports.executors.includes(entry.executor) || exports.executors.includes(entry.target);
68
- if (!matches) {
69
- remaining.push(entry);
70
- continue;
71
- }
72
- const { empty } = cleanEntry(entry);
73
- // Empty entries that only described executor/target wrappers are dropped.
74
- const onlyKeys = Object.keys(entry).filter((k) => k !== 'target' &&
75
- k !== 'executor' &&
76
- k !== 'projects' &&
77
- k !== 'plugin');
78
- if (empty && onlyKeys.length === 0)
79
- continue;
80
- remaining.push(entry);
62
+ if (!Object.keys(targetConfig).length ||
63
+ (Object.keys(targetConfig).length === 1 &&
64
+ Object.keys(targetConfig)[0] === 'executor')) {
65
+ delete nxJson.targetDefaults[targetOrExecutor];
81
66
  }
82
- if (remaining.length === 0) {
67
+ if (!Object.keys(nxJson.targetDefaults).length) {
83
68
  delete nxJson.targetDefaults;
84
69
  }
85
- else {
86
- nxJson.targetDefaults = remaining;
87
- }
88
- }
89
- else {
90
- for (const [targetOrExecutor, targetConfig] of Object.entries(nxJson.targetDefaults)) {
91
- if (!exports.executors.includes(targetOrExecutor) &&
92
- !exports.executors.includes(targetConfig.executor)) {
93
- continue;
94
- }
95
- const { empty } = cleanEntry(targetConfig);
96
- if (empty) {
97
- delete nxJson.targetDefaults[targetOrExecutor];
98
- }
99
- if (!Object.keys(nxJson.targetDefaults).length) {
100
- delete nxJson.targetDefaults;
101
- }
102
- }
103
70
  }
104
71
  (0, devkit_1.updateNxJson)(tree, nxJson);
105
72
  await (0, devkit_1.formatFiles)(tree);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/angular",
3
- "version": "23.0.0-rc.3",
3
+ "version": "23.0.0",
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": {
@@ -79,18 +79,18 @@
79
79
  "semver": "^7.6.3",
80
80
  "tslib": "^2.3.0",
81
81
  "webpack-merge": "^5.8.0",
82
- "@nx/eslint": "23.0.0-rc.3",
83
- "@nx/devkit": "23.0.0-rc.3",
84
- "@nx/js": "23.0.0-rc.3",
85
- "@nx/module-federation": "23.0.0-rc.3",
86
- "@nx/rspack": "23.0.0-rc.3",
87
- "@nx/web": "23.0.0-rc.3",
88
- "@nx/webpack": "23.0.0-rc.3"
82
+ "@nx/devkit": "23.0.0",
83
+ "@nx/js": "23.0.0",
84
+ "@nx/eslint": "23.0.0",
85
+ "@nx/rspack": "23.0.0",
86
+ "@nx/module-federation": "23.0.0",
87
+ "@nx/web": "23.0.0",
88
+ "@nx/webpack": "23.0.0"
89
89
  },
90
90
  "devDependencies": {
91
- "@nx/cypress": "23.0.0-rc.3",
92
- "@nx/vitest": "23.0.0-rc.3",
93
- "nx": "23.0.0-rc.3"
91
+ "@nx/vitest": "23.0.0",
92
+ "@nx/cypress": "23.0.0",
93
+ "nx": "23.0.0"
94
94
  },
95
95
  "peerDependencies": {
96
96
  "@angular/build": ">= 19.0.0 < 22.0.0",