@nx/angular 17.1.0-beta.3 → 17.1.0-beta.4

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/migrations.json CHANGED
@@ -297,15 +297,6 @@
297
297
  "description": "Rename 'browserTarget' to 'buildTarget'.",
298
298
  "factory": "./src/migrations/update-17-1-0/browser-target-to-build-target"
299
299
  },
300
- "stub-performance-mark-in-jest-test-setup": {
301
- "cli": "nx",
302
- "version": "17.1.0-beta.3",
303
- "requires": {
304
- "@angular/core": ">=17.0.0-rc.3"
305
- },
306
- "description": "Stubs out 'performance.mark' in the Jest test setup file.",
307
- "factory": "./src/migrations/update-17-1-0/stub-performance-mark-in-jest-test-setup"
308
- },
309
300
  "replace-nguniversal-builders": {
310
301
  "cli": "nx",
311
302
  "version": "17.1.0-beta.3",
@@ -323,6 +314,15 @@
323
314
  },
324
315
  "description": "Replace usages of '@nguniversal/' packages with '@angular/ssr'.",
325
316
  "factory": "./src/migrations/update-17-1-0/replace-nguniversal-engines"
317
+ },
318
+ "update-zone-js-deep-import": {
319
+ "cli": "nx",
320
+ "version": "17.1.0-beta.4",
321
+ "requires": {
322
+ "@angular/core": ">=17.0.0-rc.3"
323
+ },
324
+ "description": "Replace the deep imports from 'zone.js/dist/zone' and 'zone.js/dist/zone-testing' with 'zone.js' and 'zone.js/testing'.",
325
+ "factory": "./src/migrations/update-17-1-0/update-zone-js-deep-import"
326
326
  }
327
327
  },
328
328
  "packageJsonUpdates": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/angular",
3
- "version": "17.1.0-beta.3",
3
+ "version": "17.1.0-beta.4",
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, Tailwind CSS, 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- Upgrading AngularJS applications \n\n- Single Component Application Modules (SCAMs) \n\n- NgRx helpers. \n\n- Utilities for automatic workspace refactoring.",
6
6
  "repository": {
@@ -78,15 +78,15 @@
78
78
  "tslib": "^2.3.0",
79
79
  "webpack": "^5.80.0",
80
80
  "webpack-merge": "^5.8.0",
81
- "@nx/devkit": "17.1.0-beta.3",
82
- "@nx/cypress": "17.1.0-beta.3",
83
- "@nx/jest": "17.1.0-beta.3",
84
- "@nx/js": "17.1.0-beta.3",
85
- "@nx/eslint": "17.1.0-beta.3",
86
- "@nx/webpack": "17.1.0-beta.3",
87
- "@nx/web": "17.1.0-beta.3",
88
- "@nx/workspace": "17.1.0-beta.3",
89
- "@nrwl/angular": "17.1.0-beta.3"
81
+ "@nx/devkit": "17.1.0-beta.4",
82
+ "@nx/cypress": "17.1.0-beta.4",
83
+ "@nx/jest": "17.1.0-beta.4",
84
+ "@nx/js": "17.1.0-beta.4",
85
+ "@nx/eslint": "17.1.0-beta.4",
86
+ "@nx/webpack": "17.1.0-beta.4",
87
+ "@nx/web": "17.1.0-beta.4",
88
+ "@nx/workspace": "17.1.0-beta.4",
89
+ "@nrwl/angular": "17.1.0-beta.4"
90
90
  },
91
91
  "peerDependencies": {
92
92
  "@angular-devkit/build-angular": "^17.0.0-rc.4",
@@ -9,9 +9,9 @@
9
9
  */
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
11
  exports.parseRemappedTsConfigAndMergeDefaults = void 0;
12
- const ng_compiler_cli_1 = require("ng-packagr/lib/utils/ng-compiler-cli");
13
12
  const path_1 = require("path");
14
13
  const ts = require("typescript");
14
+ const ng_compiler_cli_1 = require("./ng-compiler-cli");
15
15
  async function readDefaultTsConfig(fileName) {
16
16
  // these options are mandatory
17
17
  const extraOptions = {
@@ -4,7 +4,6 @@ exports.addUnitTestRunner = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const jest_1 = require("@nx/jest");
6
6
  const test_runners_1 = require("../../../utils/test-runners");
7
- const version_utils_1 = require("../../utils/version-utils");
8
7
  async function addUnitTestRunner(host, options) {
9
8
  if (options.unitTestRunner === test_runners_1.UnitTestRunner.Jest) {
10
9
  await (0, jest_1.configurationGenerator)(host, {
@@ -16,7 +15,6 @@ async function addUnitTestRunner(host, options) {
16
15
  skipFormat: true,
17
16
  });
18
17
  const setupFile = (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'src', 'test-setup.ts');
19
- const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(host);
20
18
  if (options.strict && host.exists(setupFile)) {
21
19
  const contents = host.read(setupFile, 'utf-8');
22
20
  host.write(setupFile, `// @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment
@@ -26,15 +24,7 @@ globalThis.ngJest = {
26
24
  errorOnUnknownProperties: true,
27
25
  },
28
26
  };
29
- ${contents}${angularMajorVersion >= 17
30
- ? `
31
- /**
32
- * Angular uses performance.mark() which is not supported by jsdom. Stub it out
33
- * to avoid errors.
34
- */
35
- global.performance.mark = jest.fn();
36
- `
37
- : ''}`);
27
+ ${contents}`);
38
28
  }
39
29
  }
40
30
  }
@@ -94,7 +94,6 @@ async function addUnitTestRunner(host, options) {
94
94
  skipPackageJson: options.skipPackageJson,
95
95
  });
96
96
  const setupFile = (0, devkit_1.joinPathFragments)(options.projectRoot, 'src', 'test-setup.ts');
97
- const { major: angularMajorVersion } = (0, version_utils_1.getInstalledAngularVersionInfo)(host);
98
97
  if (options.strict && host.exists(setupFile)) {
99
98
  const contents = host.read(setupFile, 'utf-8');
100
99
  host.write(setupFile, `// @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment
@@ -104,15 +103,7 @@ globalThis.ngJest = {
104
103
  errorOnUnknownProperties: true,
105
104
  },
106
105
  };
107
- ${contents}${angularMajorVersion >= 17
108
- ? `
109
- /**
110
- * Angular uses performance.mark() which is not supported by jsdom. Stub it out
111
- * to avoid errors.
112
- */
113
- global.performance.mark = jest.fn();
114
- `
115
- : ''}`);
106
+ ${contents}`);
116
107
  }
117
108
  }
118
109
  }
@@ -1,5 +1,5 @@
1
1
  import type { GeneratorCallback, Tree } from '@nx/devkit';
2
- import * as latestVersions from '../../utils/versions';
2
+ import { type PackageCompatVersions, type PackageLatestVersions } from '../../utils/backward-compatible-versions';
3
3
  export declare function getInstalledAngularVersion(tree: Tree): string;
4
4
  export declare function getInstalledAngularMajorVersion(tree: Tree): number;
5
5
  export declare function getInstalledAngularVersionInfo(tree: Tree): {
@@ -12,4 +12,4 @@ export declare function getInstalledPackageVersionInfo(tree: Tree, pkgName: stri
12
12
  version: string;
13
13
  };
14
14
  export declare function addDependenciesToPackageJsonIfDontExist(tree: Tree, dependencies: Record<string, string>, devDependencies: Record<string, string>, packageJsonPath?: string): GeneratorCallback;
15
- export declare function versions(tree: Tree): typeof latestVersions | import("../../utils/backward-compatible-versions").PackageVersions;
15
+ export declare function versions(tree: Tree): PackageLatestVersions | PackageCompatVersions;
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.versions = exports.addDependenciesToPackageJsonIfDontExist = exports.getInstalledPackageVersionInfo = exports.getInstalledPackageVersion = exports.getInstalledAngularVersionInfo = exports.getInstalledAngularMajorVersion = exports.getInstalledAngularVersion = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const semver_1 = require("semver");
6
+ const backward_compatible_versions_1 = require("../../utils/backward-compatible-versions");
6
7
  const latestVersions = require("../../utils/versions");
7
8
  const versions_1 = require("../../utils/versions");
8
- const backward_compatible_versions_1 = require("../../utils/backward-compatible-versions");
9
9
  function getInstalledAngularVersion(tree) {
10
10
  const pkgJson = (0, devkit_1.readJson)(tree, 'package.json');
11
11
  const installedAngularVersion = pkgJson.dependencies && pkgJson.dependencies['@angular/core'];
@@ -0,0 +1,37 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const devkit_1 = require("@nx/devkit");
4
+ const projects_1 = require("../utils/projects");
5
+ async function default_1(tree) {
6
+ const angularProjects = await (0, projects_1.getProjectsFilteredByDependencies)(tree, [
7
+ 'npm:@angular/core',
8
+ ]);
9
+ if (!angularProjects.length) {
10
+ return;
11
+ }
12
+ const zoneJsImportRegex = /(['"`])zone\.js\/dist\/zone(['"`])/g;
13
+ const zoneJsTestingImportRegex = /(['"`])zone\.js\/dist\/zone-testing(['"`])/g;
14
+ for (const { project } of angularProjects) {
15
+ (0, devkit_1.visitNotIgnoredFiles)(tree, project.root, (file) => {
16
+ // we are only interested in .ts files
17
+ if (!file.endsWith('.ts')) {
18
+ return;
19
+ }
20
+ let content = tree.read(file, 'utf-8');
21
+ let wasUpdated = false;
22
+ if (zoneJsImportRegex.test(content)) {
23
+ content = content.replace(zoneJsImportRegex, '$1zone.js$2');
24
+ wasUpdated = true;
25
+ }
26
+ if (zoneJsTestingImportRegex.test(content)) {
27
+ content = content.replace(zoneJsTestingImportRegex, '$1zone.js/testing$2');
28
+ wasUpdated = true;
29
+ }
30
+ if (wasUpdated) {
31
+ tree.write(file, content);
32
+ }
33
+ });
34
+ }
35
+ await (0, devkit_1.formatFiles)(tree);
36
+ }
37
+ exports.default = default_1;
@@ -1,6 +1,8 @@
1
1
  import * as latestVersions from './versions';
2
2
  type SupportedVersions = 'angularV15' | 'angularV16';
3
- export type PackageVersionNames = Exclude<keyof typeof latestVersions, 'nxVersion'>;
4
- export type PackageVersions = Record<PackageVersionNames, string>;
5
- export declare const backwardCompatibleVersions: Record<SupportedVersions, PackageVersions>;
3
+ export type LatestPackageVersionNames = Exclude<keyof typeof latestVersions, 'nxVersion'>;
4
+ export type CompatPackageVersionNames = LatestPackageVersionNames | 'ngUniversalVersion';
5
+ export type PackageLatestVersions = Record<LatestPackageVersionNames, string>;
6
+ export type PackageCompatVersions = Record<CompatPackageVersionNames, string>;
7
+ export declare const backwardCompatibleVersions: Record<SupportedVersions, PackageCompatVersions>;
6
8
  export {};
@@ -1,3 +1,3 @@
1
- import type { PackageVersionNames, PackageVersions } from './backward-compatible-versions';
2
- export declare function getPkgVersionForAngularMajorVersion(pkgVersionName: PackageVersionNames, angularMajorVersion: number): string;
3
- export declare function getPkgVersionsForAngularMajorVersion(angularMajorVersion: number): PackageVersions;
1
+ import type { CompatPackageVersionNames, LatestPackageVersionNames, PackageCompatVersions, PackageLatestVersions } from './backward-compatible-versions';
2
+ export declare function getPkgVersionForAngularMajorVersion(pkgVersionName: LatestPackageVersionNames | CompatPackageVersionNames, angularMajorVersion: number): string;
3
+ export declare function getPkgVersionsForAngularMajorVersion(angularMajorVersion: number): PackageLatestVersions | PackageCompatVersions;
@@ -7,7 +7,6 @@ export declare const rxjsVersion = "~7.8.0";
7
7
  export declare const zoneJsVersion = "~0.14.0";
8
8
  export declare const angularJsVersion = "1.7.9";
9
9
  export declare const tsLibVersion = "^2.3.0";
10
- export declare const ngUniversalVersion = "~16.2.0";
11
10
  export declare const corsVersion = "~2.8.5";
12
11
  export declare const typesCorsVersion = "~2.8.5";
13
12
  export declare const expressVersion = "~4.18.2";
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.jsoncEslintParserVersion = exports.jasmineMarblesVersion = exports.typesNodeVersion = exports.jestPresetAngularVersion = exports.tsNodeVersion = exports.autoprefixerVersion = exports.postcssUrlVersion = exports.postcssPresetEnvVersion = exports.postcssImportVersion = exports.postcssVersion = exports.tailwindVersion = exports.angularEslintVersion = exports.moduleFederationNodeVersion = exports.typesExpressVersion = exports.expressVersion = exports.typesCorsVersion = exports.corsVersion = exports.ngUniversalVersion = exports.tsLibVersion = exports.angularJsVersion = exports.zoneJsVersion = exports.rxjsVersion = exports.ngrxVersion = exports.ngPackagrVersion = exports.angularDevkitVersion = exports.angularVersion = exports.nxVersion = void 0;
3
+ exports.jsoncEslintParserVersion = exports.jasmineMarblesVersion = exports.typesNodeVersion = exports.jestPresetAngularVersion = exports.tsNodeVersion = exports.autoprefixerVersion = exports.postcssUrlVersion = exports.postcssPresetEnvVersion = exports.postcssImportVersion = exports.postcssVersion = exports.tailwindVersion = exports.angularEslintVersion = exports.moduleFederationNodeVersion = exports.typesExpressVersion = exports.expressVersion = exports.typesCorsVersion = exports.corsVersion = exports.tsLibVersion = exports.angularJsVersion = exports.zoneJsVersion = exports.rxjsVersion = exports.ngrxVersion = exports.ngPackagrVersion = exports.angularDevkitVersion = exports.angularVersion = exports.nxVersion = void 0;
4
4
  exports.nxVersion = require('../../package.json').version;
5
5
  exports.angularVersion = '~17.0.0-rc.3';
6
6
  exports.angularDevkitVersion = '~17.0.0-rc.4';
@@ -10,7 +10,6 @@ exports.rxjsVersion = '~7.8.0';
10
10
  exports.zoneJsVersion = '~0.14.0';
11
11
  exports.angularJsVersion = '1.7.9';
12
12
  exports.tsLibVersion = '^2.3.0';
13
- exports.ngUniversalVersion = '~16.2.0';
14
13
  exports.corsVersion = '~2.8.5';
15
14
  exports.typesCorsVersion = '~2.8.5';
16
15
  exports.expressVersion = '~4.18.2';
@@ -1,63 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const devkit_1 = require("@nx/devkit");
4
- const executor_options_utils_1 = require("@nx/devkit/src/generators/executor-options-utils");
5
- const tsquery_1 = require("@phenomnomnominal/tsquery");
6
- const path_1 = require("path");
7
- const ts = require("typescript");
8
- const projects_1 = require("../utils/projects");
9
- async function default_1(tree) {
10
- const angularProjects = await (0, projects_1.getProjectsFilteredByDependencies)(tree, [
11
- 'npm:@angular/core',
12
- ]);
13
- const jestConfigFiles = new Set();
14
- const projectGraph = await (0, devkit_1.createProjectGraphAsync)();
15
- (0, executor_options_utils_1.forEachExecutorOptionsInGraph)(projectGraph, '@nx/jest:jest', (options, projectName) => {
16
- const projectConfig = angularProjects.find(({ project }) => projectName === project.name);
17
- if (!projectConfig) {
18
- return;
19
- }
20
- if (options.jestConfig && tree.exists(options.jestConfig)) {
21
- jestConfigFiles.add(options.jestConfig);
22
- }
23
- });
24
- const setupFilePaths = [];
25
- for (const jestConfigFile of jestConfigFiles) {
26
- const projectSetupFilePaths = getSetupFilePaths(tree, jestConfigFile);
27
- setupFilePaths.push(...projectSetupFilePaths);
28
- }
29
- for (const setupFilePath of setupFilePaths) {
30
- if (!tree.exists(setupFilePath)) {
31
- continue;
32
- }
33
- updateSetupFileWithPerformanceMarkStub(tree, setupFilePath);
34
- }
35
- await (0, devkit_1.formatFiles)(tree);
36
- }
37
- exports.default = default_1;
38
- function getSetupFilePaths(tree, jestConfigFile) {
39
- const config = tree.read(jestConfigFile, 'utf-8');
40
- const TS_QUERY_JEST_CONFIG_PREFIX = ':matches(ExportAssignment, BinaryExpression:has(Identifier[name="module"]):has(Identifier[name="exports"]))';
41
- const setupFilePathNodes = tsquery_1.tsquery.query(config, `${TS_QUERY_JEST_CONFIG_PREFIX} > ObjectLiteralExpression PropertyAssignment:has(Identifier[name="setupFilesAfterEnv"]) > ArrayLiteralExpression StringLiteral`);
42
- const rootDir = (0, path_1.dirname)(jestConfigFile);
43
- const setupFilePaths = setupFilePathNodes.map((node) => node.text.replace('<rootDir>', rootDir));
44
- return setupFilePaths;
45
- }
46
- function updateSetupFileWithPerformanceMarkStub(tree, setupFilePath) {
47
- const setupFile = tree.read(setupFilePath, 'utf-8');
48
- const setupFileSource = ts.createSourceFile(setupFilePath, setupFile, ts.ScriptTarget.Latest);
49
- const TS_QUERY_PERFORMANCE_MARK_ACCESS = 'PropertyAccessExpression:has(Identifier[name=performance]):has(Identifier[name=mark])';
50
- const TS_QUERY_PERFORMANCE_MARK_ASSIGNMENT = 'PropertyAccessExpression:has(Identifier[name=performance]) + EqualsToken + ObjectLiteralExpression:has(PropertyAssignment Identifier[name=mark])';
51
- const performanceMarkNodes = tsquery_1.tsquery.query(setupFileSource, `:matches(${TS_QUERY_PERFORMANCE_MARK_ACCESS}, ${TS_QUERY_PERFORMANCE_MARK_ASSIGNMENT})`);
52
- // there is already some access to performance.mark, so we assume it was handled already
53
- if (performanceMarkNodes.length) {
54
- return;
55
- }
56
- tree.write(setupFilePath, `${setupFile}
57
- /**
58
- * Angular uses performance.mark() which is not supported by jsdom. Stub it out
59
- * to avoid errors.
60
- */
61
- global.performance.mark = jest.fn();
62
- `);
63
- }