@nx/angular 17.3.0-beta.3 → 17.3.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.
Files changed (26) hide show
  1. package/package.json +10 -10
  2. package/src/generators/application/application.js +10 -0
  3. package/src/generators/application/lib/add-unit-test-runner.js +5 -21
  4. package/src/generators/application/lib/index.d.ts +1 -0
  5. package/src/generators/application/lib/index.js +1 -0
  6. package/src/generators/application/lib/set-generator-defaults.d.ts +3 -0
  7. package/src/generators/application/lib/set-generator-defaults.js +17 -0
  8. package/src/generators/component/component.js +1 -0
  9. package/src/generators/component/lib/index.d.ts +1 -0
  10. package/src/generators/component/lib/index.js +1 -0
  11. package/src/generators/component/lib/set-generator-defaults.d.ts +3 -0
  12. package/src/generators/component/lib/set-generator-defaults.js +14 -0
  13. package/src/generators/init/init.d.ts +2 -2
  14. package/src/generators/init/init.js +19 -137
  15. package/src/generators/init/schema.d.ts +0 -9
  16. package/src/generators/init/schema.json +0 -56
  17. package/src/generators/library/lib/set-generator-defaults.d.ts +3 -0
  18. package/src/generators/library/lib/set-generator-defaults.js +15 -0
  19. package/src/generators/library/library.js +11 -25
  20. package/src/generators/ng-add/ng-add.js +1 -8
  21. package/src/generators/ng-add/utilities/workspace.js +5 -12
  22. package/src/generators/storybook-configuration/storybook-configuration.js +1 -3
  23. package/src/generators/utils/add-jest.d.ts +8 -0
  24. package/src/generators/utils/add-jest.js +34 -0
  25. package/src/generators/utils/ensure-angular-dependencies.d.ts +2 -0
  26. package/src/generators/utils/ensure-angular-dependencies.js +35 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nx/angular",
3
- "version": "17.3.0-beta.3",
3
+ "version": "17.3.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.3.0-beta.3",
82
- "@nx/cypress": "17.3.0-beta.3",
83
- "@nx/jest": "17.3.0-beta.3",
84
- "@nx/js": "17.3.0-beta.3",
85
- "@nx/eslint": "17.3.0-beta.3",
86
- "@nx/webpack": "17.3.0-beta.3",
87
- "@nx/web": "17.3.0-beta.3",
88
- "@nx/workspace": "17.3.0-beta.3",
89
- "@nrwl/angular": "17.3.0-beta.3"
81
+ "@nx/devkit": "17.3.0-beta.4",
82
+ "@nx/cypress": "17.3.0-beta.4",
83
+ "@nx/jest": "17.3.0-beta.4",
84
+ "@nx/js": "17.3.0-beta.4",
85
+ "@nx/eslint": "17.3.0-beta.4",
86
+ "@nx/webpack": "17.3.0-beta.4",
87
+ "@nx/web": "17.3.0-beta.4",
88
+ "@nx/workspace": "17.3.0-beta.4",
89
+ "@nrwl/angular": "17.3.0-beta.4"
90
90
  },
91
91
  "peerDependencies": {
92
92
  "@angular-devkit/build-angular": ">= 15.0.0 < 18.0.0",
@@ -2,9 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.applicationGeneratorInternal = exports.applicationGenerator = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
+ const js_1 = require("@nx/js");
5
6
  const init_1 = require("../init/init");
6
7
  const setup_ssr_1 = require("../setup-ssr/setup-ssr");
7
8
  const setup_tailwind_1 = require("../setup-tailwind/setup-tailwind");
9
+ const ensure_angular_dependencies_1 = require("../utils/ensure-angular-dependencies");
8
10
  const lib_1 = require("./lib");
9
11
  async function applicationGenerator(tree, schema) {
10
12
  return await applicationGeneratorInternal(tree, {
@@ -16,10 +18,17 @@ exports.applicationGenerator = applicationGenerator;
16
18
  async function applicationGeneratorInternal(tree, schema) {
17
19
  const options = await (0, lib_1.normalizeOptions)(tree, schema);
18
20
  const rootOffset = (0, devkit_1.offsetFromRoot)(options.appProjectRoot);
21
+ await (0, js_1.initGenerator)(tree, {
22
+ ...options,
23
+ tsConfigName: options.rootProject ? 'tsconfig.json' : 'tsconfig.base.json',
24
+ js: false,
25
+ skipFormat: true,
26
+ });
19
27
  await (0, init_1.angularInitGenerator)(tree, {
20
28
  ...options,
21
29
  skipFormat: true,
22
30
  });
31
+ (0, ensure_angular_dependencies_1.ensureAngularDependencies)(tree);
23
32
  (0, lib_1.createProject)(tree, options);
24
33
  await (0, lib_1.createFiles)(tree, options, rootOffset);
25
34
  if (options.addTailwind) {
@@ -33,6 +42,7 @@ async function applicationGeneratorInternal(tree, schema) {
33
42
  await (0, lib_1.addUnitTestRunner)(tree, options);
34
43
  await (0, lib_1.addE2e)(tree, options);
35
44
  (0, lib_1.updateEditorTsConfig)(tree, options);
45
+ (0, lib_1.setGeneratorDefaults)(tree, options);
36
46
  if (options.rootProject) {
37
47
  const nxJson = (0, devkit_1.readNxJson)(tree);
38
48
  nxJson.defaultProject = options.name;
@@ -1,32 +1,16 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.addUnitTestRunner = void 0;
4
- const devkit_1 = require("@nx/devkit");
5
- const jest_1 = require("@nx/jest");
6
4
  const test_runners_1 = require("../../../utils/test-runners");
5
+ const add_jest_1 = require("../../utils/add-jest");
7
6
  async function addUnitTestRunner(host, options) {
8
7
  if (options.unitTestRunner === test_runners_1.UnitTestRunner.Jest) {
9
- await (0, jest_1.configurationGenerator)(host, {
10
- ...options,
11
- project: options.name,
12
- setupFile: 'angular',
13
- supportTsx: false,
14
- skipSerializers: false,
8
+ await (0, add_jest_1.addJest)(host, {
9
+ name: options.name,
10
+ projectRoot: options.appProjectRoot,
15
11
  skipPackageJson: options.skipPackageJson,
16
- skipFormat: true,
12
+ strict: options.strict,
17
13
  });
18
- const setupFile = (0, devkit_1.joinPathFragments)(options.appProjectRoot, 'src', 'test-setup.ts');
19
- if (options.strict && host.exists(setupFile)) {
20
- const contents = host.read(setupFile, 'utf-8');
21
- host.write(setupFile, `// @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment
22
- globalThis.ngJest = {
23
- testEnvironmentOptions: {
24
- errorOnUnknownElements: true,
25
- errorOnUnknownProperties: true,
26
- },
27
- };
28
- ${contents}`);
29
- }
30
14
  }
31
15
  }
32
16
  exports.addUnitTestRunner = addUnitTestRunner;
@@ -8,4 +8,5 @@ export * from './enable-strict-type-checking';
8
8
  export * from './normalize-options';
9
9
  export * from './normalized-schema';
10
10
  export * from './set-app-strict-default';
11
+ export * from './set-generator-defaults';
11
12
  export * from './update-editor-tsconfig';
@@ -11,4 +11,5 @@ tslib_1.__exportStar(require("./enable-strict-type-checking"), exports);
11
11
  tslib_1.__exportStar(require("./normalize-options"), exports);
12
12
  tslib_1.__exportStar(require("./normalized-schema"), exports);
13
13
  tslib_1.__exportStar(require("./set-app-strict-default"), exports);
14
+ tslib_1.__exportStar(require("./set-generator-defaults"), exports);
14
15
  tslib_1.__exportStar(require("./update-editor-tsconfig"), exports);
@@ -0,0 +1,3 @@
1
+ import { type Tree } from '@nx/devkit';
2
+ import type { NormalizedSchema } from './normalized-schema';
3
+ export declare function setGeneratorDefaults(tree: Tree, options: NormalizedSchema): void;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setGeneratorDefaults = void 0;
4
+ const devkit_1 = require("@nx/devkit");
5
+ function setGeneratorDefaults(tree, options) {
6
+ const nxJson = (0, devkit_1.readNxJson)(tree);
7
+ nxJson.generators = nxJson.generators ?? {};
8
+ nxJson.generators['@nx/angular:application'] = {
9
+ e2eTestRunner: options.e2eTestRunner,
10
+ linter: options.linter,
11
+ style: options.style,
12
+ unitTestRunner: options.unitTestRunner,
13
+ ...(nxJson.generators['@nx/angular:application'] || {}),
14
+ };
15
+ (0, devkit_1.updateNxJson)(tree, nxJson);
16
+ }
17
+ exports.setGeneratorDefaults = setGeneratorDefaults;
@@ -48,6 +48,7 @@ async function componentGeneratorInternal(tree, rawOptions) {
48
48
  (0, utils_1.addToNgModule)(tree, options.directory, modulePath, options.name, options.symbolName, options.fileName, 'declarations', true, options.export);
49
49
  }
50
50
  (0, lib_1.exportComponentInEntryPoint)(tree, options);
51
+ (0, lib_1.setGeneratorDefaults)(tree, options);
51
52
  if (!options.skipFormat) {
52
53
  await (0, devkit_1.formatFiles)(tree);
53
54
  }
@@ -1,3 +1,4 @@
1
1
  export * from './component';
2
2
  export * from './module';
3
3
  export * from './normalize-options';
4
+ export * from './set-generator-defaults';
@@ -4,3 +4,4 @@ const tslib_1 = require("tslib");
4
4
  tslib_1.__exportStar(require("./component"), exports);
5
5
  tslib_1.__exportStar(require("./module"), exports);
6
6
  tslib_1.__exportStar(require("./normalize-options"), exports);
7
+ tslib_1.__exportStar(require("./set-generator-defaults"), exports);
@@ -0,0 +1,3 @@
1
+ import { type Tree } from '@nx/devkit';
2
+ import type { NormalizedSchema } from '../schema';
3
+ export declare function setGeneratorDefaults(tree: Tree, options: NormalizedSchema): void;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setGeneratorDefaults = void 0;
4
+ const devkit_1 = require("@nx/devkit");
5
+ function setGeneratorDefaults(tree, options) {
6
+ const nxJson = (0, devkit_1.readNxJson)(tree);
7
+ nxJson.generators = nxJson.generators ?? {};
8
+ nxJson.generators['@nx/angular:component'] = {
9
+ style: options.style,
10
+ ...(nxJson.generators['@nx/angular:component'] || {}),
11
+ };
12
+ (0, devkit_1.updateNxJson)(tree, nxJson);
13
+ }
14
+ exports.setGeneratorDefaults = setGeneratorDefaults;
@@ -1,4 +1,4 @@
1
- import { GeneratorCallback, Tree } from '@nx/devkit';
1
+ import { type GeneratorCallback, type Tree } from '@nx/devkit';
2
2
  import { Schema } from './schema';
3
- export declare function angularInitGenerator(tree: Tree, rawOptions: Schema): Promise<GeneratorCallback>;
3
+ export declare function angularInitGenerator(tree: Tree, options: Schema): Promise<GeneratorCallback>;
4
4
  export default angularInitGenerator;
@@ -2,151 +2,33 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.angularInitGenerator = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
- const jest_1 = require("@nx/jest");
6
- const eslint_1 = require("@nx/eslint");
7
- const js_1 = require("@nx/js");
8
- const test_runners_1 = require("../../utils/test-runners");
9
5
  const version_utils_1 = require("../utils/version-utils");
10
- const versions_1 = require("../../utils/versions");
11
- async function angularInitGenerator(tree, rawOptions) {
12
- const tasks = [];
13
- const options = normalizeOptions(rawOptions);
14
- const pkgVersions = (0, version_utils_1.versions)(tree);
15
- const peerDepsToInstall = ['@angular-devkit/core'];
16
- let devkitVersion;
17
- peerDepsToInstall.forEach((pkg) => {
18
- const packageVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, pkg);
19
- if (!packageVersion) {
20
- devkitVersion ??=
21
- (0, version_utils_1.getInstalledPackageVersion)(tree, '@angular-devkit/build-angular') ??
22
- pkgVersions.angularDevkitVersion;
23
- try {
24
- (0, devkit_1.ensurePackage)(pkg, devkitVersion);
25
- }
26
- catch {
27
- // @schematics/angular cannot be required so this fails but this will still allow wrapping the schematic later on
28
- }
29
- if (!options.skipPackageJson) {
30
- tasks.push((0, devkit_1.addDependenciesToPackageJson)(tree, {}, { [pkg]: devkitVersion }));
31
- }
32
- }
33
- });
34
- setDefaults(tree, options);
35
- const jsTask = await (0, js_1.initGenerator)(tree, {
36
- ...options,
37
- tsConfigName: options.rootProject ? 'tsconfig.json' : 'tsconfig.base.json',
38
- js: false,
39
- skipFormat: true,
40
- });
41
- tasks.push(jsTask);
42
- if (!options.skipPackageJson) {
43
- tasks.push(updateDependencies(tree, pkgVersions));
44
- }
45
- const unitTestTask = await addUnitTestRunner(tree, options, pkgVersions.jestPresetAngularVersion);
46
- tasks.push(unitTestTask);
47
- const e2eTask = await addE2ETestRunner(tree, options);
48
- tasks.push(e2eTask);
6
+ async function angularInitGenerator(tree, options) {
49
7
  ignoreAngularCacheDirectory(tree);
8
+ const installTask = installAngularDevkitCoreIfMissing(tree, options);
50
9
  if (!options.skipFormat) {
51
10
  await (0, devkit_1.formatFiles)(tree);
52
11
  }
53
- return (0, devkit_1.runTasksInSerial)(...tasks);
12
+ return installTask;
54
13
  }
55
14
  exports.angularInitGenerator = angularInitGenerator;
56
- function normalizeOptions(options) {
57
- return {
58
- e2eTestRunner: options.e2eTestRunner ?? test_runners_1.E2eTestRunner.Cypress,
59
- linter: options.linter ?? eslint_1.Linter.EsLint,
60
- skipFormat: options.skipFormat ?? false,
61
- skipInstall: options.skipInstall ?? false,
62
- skipPackageJson: options.skipPackageJson ?? false,
63
- style: options.style ?? 'css',
64
- unitTestRunner: options.unitTestRunner ?? test_runners_1.UnitTestRunner.Jest,
65
- rootProject: options.rootProject,
66
- };
67
- }
68
- function setDefaults(host, options) {
69
- const nxJson = (0, devkit_1.readNxJson)(host);
70
- nxJson.generators = nxJson.generators || {};
71
- nxJson.generators['@nx/angular:application'] = {
72
- style: options.style,
73
- linter: options.linter,
74
- unitTestRunner: options.unitTestRunner,
75
- e2eTestRunner: options.e2eTestRunner,
76
- ...(nxJson.generators['@nx/angular:application'] || {}),
77
- };
78
- nxJson.generators['@nx/angular:library'] = {
79
- linter: options.linter,
80
- unitTestRunner: options.unitTestRunner,
81
- ...(nxJson.generators['@nx/angular:library'] || {}),
82
- };
83
- nxJson.generators['@nx/angular:component'] = {
84
- style: options.style,
85
- ...(nxJson.generators['@nx/angular:component'] || {}),
86
- };
87
- (0, devkit_1.updateNxJson)(host, nxJson);
88
- }
89
- function updateDependencies(tree, versions) {
90
- const angularVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, '@angular/core') ??
91
- versions.angularVersion;
92
- const angularDevkitVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, '@angular-devkit/build-angular') ??
93
- versions.angularDevkitVersion;
94
- const rxjsVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, 'rxjs') ?? versions.rxjsVersion;
95
- const tsLibVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, 'tslib') ?? versions.tsLibVersion;
96
- const zoneJsVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, 'zone.js') ?? versions.zoneJsVersion;
97
- return (0, version_utils_1.addDependenciesToPackageJsonIfDontExist)(tree, {
98
- '@angular/animations': angularVersion,
99
- '@angular/common': angularVersion,
100
- '@angular/compiler': angularVersion,
101
- '@angular/core': angularVersion,
102
- '@angular/forms': angularVersion,
103
- '@angular/platform-browser': angularVersion,
104
- '@angular/platform-browser-dynamic': angularVersion,
105
- '@angular/router': angularVersion,
106
- rxjs: rxjsVersion,
107
- tslib: tsLibVersion,
108
- 'zone.js': zoneJsVersion,
109
- }, {
110
- '@angular/cli': angularDevkitVersion,
111
- '@angular/compiler-cli': angularVersion,
112
- '@angular/language-service': angularVersion,
113
- '@angular-devkit/build-angular': angularDevkitVersion,
114
- '@angular-devkit/schematics': angularDevkitVersion,
115
- '@schematics/angular': angularDevkitVersion,
116
- });
117
- }
118
- async function addUnitTestRunner(tree, options, jestPresetAngularVersion) {
119
- switch (options.unitTestRunner) {
120
- case test_runners_1.UnitTestRunner.Jest:
121
- if (!options.skipPackageJson) {
122
- process.env.npm_config_legacy_peer_deps ??= 'true';
123
- (0, version_utils_1.addDependenciesToPackageJsonIfDontExist)(tree, {}, {
124
- 'jest-preset-angular': jestPresetAngularVersion,
125
- });
126
- }
127
- return (0, jest_1.jestInitGenerator)(tree, {
128
- skipPackageJson: options.skipPackageJson,
129
- });
130
- default:
131
- return () => { };
132
- }
133
- }
134
- async function addE2ETestRunner(tree, options) {
135
- switch (options.e2eTestRunner) {
136
- case test_runners_1.E2eTestRunner.Cypress:
137
- const { cypressInitGenerator } = (0, devkit_1.ensurePackage)('@nx/cypress', versions_1.nxVersion);
138
- return cypressInitGenerator(tree, {
139
- skipPackageJson: options.skipPackageJson,
140
- });
141
- case test_runners_1.E2eTestRunner.Playwright:
142
- const { initGenerator: playwrightInitGenerator } = (0, devkit_1.ensurePackage)('@nx/playwright', versions_1.nxVersion);
143
- return playwrightInitGenerator(tree, {
144
- skipFormat: true,
145
- skipPackageJson: options.skipPackageJson,
146
- });
147
- default:
148
- return () => { };
15
+ function installAngularDevkitCoreIfMissing(tree, options) {
16
+ const packageVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, '@angular-devkit/core');
17
+ if (!packageVersion) {
18
+ const pkgVersions = (0, version_utils_1.versions)(tree);
19
+ const devkitVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, '@angular-devkit/build-angular') ??
20
+ pkgVersions.angularDevkitVersion;
21
+ try {
22
+ (0, devkit_1.ensurePackage)('@angular-devkit/core', devkitVersion);
23
+ }
24
+ catch {
25
+ // @schematics/angular cannot be required so this fails but this will still allow wrapping the schematic later on
26
+ }
27
+ if (!options.skipPackageJson) {
28
+ return (0, devkit_1.addDependenciesToPackageJson)(tree, {}, { ['@angular-devkit/core']: devkitVersion });
29
+ }
149
30
  }
31
+ return () => { };
150
32
  }
151
33
  function ignoreAngularCacheDirectory(tree) {
152
34
  const { cli } = (0, devkit_1.readNxJson)(tree);
@@ -1,14 +1,5 @@
1
- import { Linter } from '@nx/eslint';
2
- import { E2eTestRunner, UnitTestRunner } from '../../utils/test-runners';
3
- import type { Styles } from '../utils/types';
4
-
5
1
  export interface Schema {
6
- unitTestRunner?: UnitTestRunner;
7
- e2eTestRunner?: E2eTestRunner;
8
2
  skipFormat?: boolean;
9
3
  skipInstall?: boolean;
10
- style?: Styles;
11
- linter?: Linter;
12
4
  skipPackageJson?: boolean;
13
- rootProject?: boolean;
14
5
  }
@@ -5,28 +5,7 @@
5
5
  "title": "Init Angular Plugin",
6
6
  "description": "Initializes the `@nx/angular` plugin. NOTE: Does not work in the `--dry-run` mode.",
7
7
  "type": "object",
8
- "examples": [
9
- {
10
- "command": "nx g @nx/angular:init --style=scss",
11
- "description": "Installs angular dependencies and initializes the `@nx/angular` plugin with the `scss` stylesheet format."
12
- }
13
- ],
14
8
  "properties": {
15
- "unitTestRunner": {
16
- "type": "string",
17
- "enum": ["jest", "none"],
18
- "description": "Test runner to use for unit tests.",
19
- "default": "jest",
20
- "x-priority": "important"
21
- },
22
- "e2eTestRunner": {
23
- "type": "string",
24
- "enum": ["cypress", "playwright", "none"],
25
- "x-prompt": "Which E2E test runner would you like to use?",
26
- "description": "Test runner to use for end to end (e2e) tests.",
27
- "default": "cypress",
28
- "x-priority": "important"
29
- },
30
9
  "skipInstall": {
31
10
  "type": "boolean",
32
11
  "description": "Skip installing after adding `@nx/workspace`.",
@@ -39,41 +18,6 @@
39
18
  "default": false,
40
19
  "x-priority": "internal"
41
20
  },
42
- "linter": {
43
- "description": "The tool to use for running lint checks.",
44
- "type": "string",
45
- "enum": ["eslint", "none"],
46
- "default": "eslint",
47
- "x-priority": "important"
48
- },
49
- "style": {
50
- "description": "The file extension to be used for style files.",
51
- "type": "string",
52
- "default": "css",
53
- "enum": ["css", "scss", "sass", "less"],
54
- "x-prompt": {
55
- "message": "Which stylesheet format would you like to use?",
56
- "type": "list",
57
- "items": [
58
- {
59
- "value": "css",
60
- "label": "CSS"
61
- },
62
- {
63
- "value": "scss",
64
- "label": "SASS(.scss) [ http://sass-lang.com ]"
65
- },
66
- {
67
- "value": "sass",
68
- "label": "SASS(.sass) [ http://sass-lang.com ]"
69
- },
70
- {
71
- "value": "less",
72
- "label": "LESS [ http://lesscss.org ]"
73
- }
74
- ]
75
- }
76
- },
77
21
  "skipPackageJson": {
78
22
  "type": "boolean",
79
23
  "default": false,
@@ -0,0 +1,3 @@
1
+ import { type Tree } from '@nx/devkit';
2
+ import type { NormalizedSchema } from './normalized-schema';
3
+ export declare function setGeneratorDefaults(tree: Tree, options: NormalizedSchema): void;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setGeneratorDefaults = void 0;
4
+ const devkit_1 = require("@nx/devkit");
5
+ function setGeneratorDefaults(tree, options) {
6
+ const nxJson = (0, devkit_1.readNxJson)(tree);
7
+ nxJson.generators = nxJson.generators ?? {};
8
+ nxJson.generators['@nx/angular:library'] = {
9
+ linter: options.libraryOptions.linter,
10
+ unitTestRunner: options.libraryOptions.unitTestRunner,
11
+ ...(nxJson.generators['@nx/angular:library'] || {}),
12
+ };
13
+ (0, devkit_1.updateNxJson)(tree, nxJson);
14
+ }
15
+ exports.setGeneratorDefaults = setGeneratorDefaults;
@@ -2,11 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.libraryGeneratorInternal = exports.libraryGenerator = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
- const jest_1 = require("@nx/jest");
6
5
  const eslint_1 = require("@nx/eslint");
7
6
  const js_1 = require("@nx/js");
8
7
  const init_1 = require("../../generators/init/init");
9
- const test_runners_1 = require("../../utils/test-runners");
10
8
  const add_linting_1 = require("../add-linting/add-linting");
11
9
  const setup_tailwind_1 = require("../setup-tailwind/setup-tailwind");
12
10
  const version_utils_1 = require("../utils/version-utils");
@@ -19,6 +17,9 @@ const update_lib_package_npm_scope_1 = require("./lib/update-lib-package-npm-sco
19
17
  const update_tsconfig_1 = require("./lib/update-tsconfig");
20
18
  const create_files_1 = require("./lib/create-files");
21
19
  const add_project_1 = require("./lib/add-project");
20
+ const add_jest_1 = require("../utils/add-jest");
21
+ const set_generator_defaults_1 = require("./lib/set-generator-defaults");
22
+ const ensure_angular_dependencies_1 = require("../utils/ensure-angular-dependencies");
22
23
  async function libraryGenerator(tree, schema) {
23
24
  return await libraryGeneratorInternal(tree, {
24
25
  // provide a default projectNameAndRootFormat to avoid breaking changes
@@ -42,16 +43,15 @@ async function libraryGeneratorInternal(tree, schema) {
42
43
  const options = await (0, normalize_options_1.normalizeOptions)(tree, schema);
43
44
  const { libraryOptions } = options;
44
45
  const pkgVersions = (0, version_utils_1.versions)(tree);
45
- await (0, init_1.default)(tree, {
46
- ...libraryOptions,
47
- skipFormat: true,
48
- e2eTestRunner: test_runners_1.E2eTestRunner.None,
49
- });
46
+ await (0, js_1.initGenerator)(tree, { ...options, js: false, skipFormat: true });
47
+ await (0, init_1.default)(tree, { ...libraryOptions, skipFormat: true });
48
+ (0, ensure_angular_dependencies_1.ensureAngularDependencies)(tree);
50
49
  const project = (0, add_project_1.addProject)(tree, libraryOptions);
51
50
  (0, create_files_1.createFiles)(tree, options, project);
52
51
  (0, update_tsconfig_1.updateTsConfig)(tree, libraryOptions);
53
52
  await addUnitTestRunner(tree, libraryOptions);
54
53
  updateNpmScopeIfBuildableOrPublishable(tree, libraryOptions);
54
+ (0, set_generator_defaults_1.setGeneratorDefaults)(tree, options);
55
55
  if (!libraryOptions.standalone) {
56
56
  (0, add_module_1.addModule)(tree, libraryOptions);
57
57
  }
@@ -85,26 +85,12 @@ async function libraryGeneratorInternal(tree, schema) {
85
85
  exports.libraryGeneratorInternal = libraryGeneratorInternal;
86
86
  async function addUnitTestRunner(host, options) {
87
87
  if (options.unitTestRunner === 'jest') {
88
- await (0, jest_1.configurationGenerator)(host, {
89
- project: options.name,
90
- setupFile: 'angular',
91
- supportTsx: false,
92
- skipSerializers: false,
93
- skipFormat: true,
88
+ await (0, add_jest_1.addJest)(host, {
89
+ name: options.name,
90
+ projectRoot: options.projectRoot,
94
91
  skipPackageJson: options.skipPackageJson,
92
+ strict: options.strict,
95
93
  });
96
- const setupFile = (0, devkit_1.joinPathFragments)(options.projectRoot, 'src', 'test-setup.ts');
97
- if (options.strict && host.exists(setupFile)) {
98
- const contents = host.read(setupFile, 'utf-8');
99
- host.write(setupFile, `// @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment
100
- globalThis.ngJest = {
101
- testEnvironmentOptions: {
102
- errorOnUnknownElements: true,
103
- errorOnUnknownProperties: true,
104
- },
105
- };
106
- ${contents}`);
107
- }
108
94
  }
109
95
  }
110
96
  function updateNpmScopeIfBuildableOrPublishable(host, options) {
@@ -1,16 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ngAddGenerator = void 0;
4
- const init_1 = require("../init/init");
5
4
  const migrate_from_angular_cli_1 = require("./migrate-from-angular-cli");
6
- function getWorkspaceType(tree) {
7
- return tree.exists('nx.json') ? 'nx' : 'angular';
8
- }
9
5
  async function ngAddGenerator(tree, options) {
10
- if (getWorkspaceType(tree) === 'angular') {
11
- return await (0, migrate_from_angular_cli_1.migrateFromAngularCli)(tree, options);
12
- }
13
- return await (0, init_1.angularInitGenerator)(tree, options);
6
+ return await (0, migrate_from_angular_cli_1.migrateFromAngularCli)(tree, options);
14
7
  }
15
8
  exports.ngAddGenerator = ngAddGenerator;
16
9
  exports.default = ngAddGenerator;
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.deleteGitKeepFilesIfNotNeeded = exports.deleteAngularJson = exports.updateVsCodeRecommendedExtensions = exports.getWorkspaceRootFileTypesInfo = exports.createRootKarmaConfig = exports.createWorkspaceFiles = exports.cleanupEsLintPackages = exports.updateRootEsLintConfig = exports.updatePackageJson = exports.updateRootTsConfig = exports.updateWorkspaceConfigDefaults = exports.createNxJson = exports.validateWorkspace = void 0;
4
4
  const devkit_1 = require("@nx/devkit");
5
5
  const eslint_1 = require("@nx/eslint");
6
+ const setup_root_eslint_1 = require("@nx/eslint/src/generators/lint-project/setup-root-eslint");
6
7
  const js_1 = require("@nx/js");
7
8
  const default_base_1 = require("nx/src/utils/default-base");
8
9
  const versions_1 = require("@nx/js/src/utils/versions");
@@ -149,22 +150,14 @@ function updatePackageJson(tree) {
149
150
  }
150
151
  exports.updatePackageJson = updatePackageJson;
151
152
  function updateRootEsLintConfig(tree, existingEsLintConfig, unitTestRunner) {
152
- if (tree.exists('.eslintrc.json')) {
153
- /**
154
- * If it still exists it means that there was no project at the root of the
155
- * workspace, so it was not moved. In that case, we remove the file so the
156
- * init generator do its work. We still receive the content of the file,
157
- * so we update it after the init generator has run.
158
- */
159
- tree.delete('.eslintrc.json');
160
- }
161
- (0, eslint_1.lintInitGenerator)(tree, { linter: eslint_1.Linter.EsLint, unitTestRunner });
153
+ (0, eslint_1.lintInitGenerator)(tree, {});
162
154
  if (!existingEsLintConfig) {
163
- // There was no eslint config in the root, so we keep the generated one as-is.
155
+ // There was no eslint config in the root, so we set it up and use it as-is
156
+ (0, setup_root_eslint_1.setupRootEsLint)(tree, { unitTestRunner });
164
157
  return;
165
158
  }
166
159
  existingEsLintConfig.ignorePatterns = ['**/*'];
167
- if (!(existingEsLintConfig.plugins ?? []).includes('@nrwl/nx')) {
160
+ if (!(existingEsLintConfig.plugins ?? []).includes('@nx')) {
168
161
  existingEsLintConfig.plugins = Array.from(new Set([...(existingEsLintConfig.plugins ?? []), '@nx']));
169
162
  }
170
163
  existingEsLintConfig.overrides?.forEach((override) => {
@@ -25,9 +25,7 @@ async function storybookConfigurationGenerator(tree, options) {
25
25
  if (!options.skipFormat) {
26
26
  await (0, devkit_1.formatFiles)(tree);
27
27
  }
28
- return () => {
29
- storybookGeneratorInstallTask();
30
- };
28
+ return storybookGeneratorInstallTask;
31
29
  }
32
30
  exports.storybookConfigurationGenerator = storybookConfigurationGenerator;
33
31
  exports.default = storybookConfigurationGenerator;
@@ -0,0 +1,8 @@
1
+ import { type Tree } from '@nx/devkit';
2
+ export type AddJestOptions = {
3
+ name: string;
4
+ projectRoot: string;
5
+ skipPackageJson: boolean;
6
+ strict: boolean;
7
+ };
8
+ export declare function addJest(tree: Tree, options: AddJestOptions): Promise<void>;
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.addJest = void 0;
4
+ const devkit_1 = require("@nx/devkit");
5
+ const jest_1 = require("@nx/jest");
6
+ const versions_1 = require("../../utils/versions");
7
+ const version_utils_1 = require("./version-utils");
8
+ async function addJest(tree, options) {
9
+ if (!options.skipPackageJson) {
10
+ process.env.npm_config_legacy_peer_deps ??= 'true';
11
+ (0, version_utils_1.addDependenciesToPackageJsonIfDontExist)(tree, {}, { 'jest-preset-angular': versions_1.jestPresetAngularVersion });
12
+ }
13
+ await (0, jest_1.configurationGenerator)(tree, {
14
+ project: options.name,
15
+ setupFile: 'angular',
16
+ supportTsx: false,
17
+ skipSerializers: false,
18
+ skipPackageJson: options.skipPackageJson,
19
+ skipFormat: true,
20
+ });
21
+ const setupFile = (0, devkit_1.joinPathFragments)(options.projectRoot, 'src', 'test-setup.ts');
22
+ if (options.strict && tree.exists(setupFile)) {
23
+ const contents = tree.read(setupFile, 'utf-8');
24
+ tree.write(setupFile, `// @ts-expect-error https://thymikee.github.io/jest-preset-angular/docs/getting-started/test-environment
25
+ globalThis.ngJest = {
26
+ testEnvironmentOptions: {
27
+ errorOnUnknownElements: true,
28
+ errorOnUnknownProperties: true,
29
+ },
30
+ };
31
+ ${contents}`);
32
+ }
33
+ }
34
+ exports.addJest = addJest;
@@ -0,0 +1,2 @@
1
+ import type { GeneratorCallback, Tree } from '@nx/devkit';
2
+ export declare function ensureAngularDependencies(tree: Tree): GeneratorCallback;
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureAngularDependencies = void 0;
4
+ const version_utils_1 = require("./version-utils");
5
+ function ensureAngularDependencies(tree) {
6
+ const pkgVersions = (0, version_utils_1.versions)(tree);
7
+ const angularVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, '@angular/core') ??
8
+ pkgVersions.angularVersion;
9
+ const angularDevkitVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, '@angular-devkit/build-angular') ??
10
+ pkgVersions.angularDevkitVersion;
11
+ const rxjsVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, 'rxjs') ?? pkgVersions.rxjsVersion;
12
+ const tsLibVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, 'tslib') ?? pkgVersions.tsLibVersion;
13
+ const zoneJsVersion = (0, version_utils_1.getInstalledPackageVersion)(tree, 'zone.js') ?? pkgVersions.zoneJsVersion;
14
+ return (0, version_utils_1.addDependenciesToPackageJsonIfDontExist)(tree, {
15
+ '@angular/animations': angularVersion,
16
+ '@angular/common': angularVersion,
17
+ '@angular/compiler': angularVersion,
18
+ '@angular/core': angularVersion,
19
+ '@angular/forms': angularVersion,
20
+ '@angular/platform-browser': angularVersion,
21
+ '@angular/platform-browser-dynamic': angularVersion,
22
+ '@angular/router': angularVersion,
23
+ rxjs: rxjsVersion,
24
+ tslib: tsLibVersion,
25
+ 'zone.js': zoneJsVersion,
26
+ }, {
27
+ '@angular/cli': angularDevkitVersion,
28
+ '@angular/compiler-cli': angularVersion,
29
+ '@angular/language-service': angularVersion,
30
+ '@angular-devkit/build-angular': angularDevkitVersion,
31
+ '@angular-devkit/schematics': angularDevkitVersion,
32
+ '@schematics/angular': angularDevkitVersion,
33
+ });
34
+ }
35
+ exports.ensureAngularDependencies = ensureAngularDependencies;