@nx/angular 23.0.0-beta.0 → 23.0.0-beta.10

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 (217) hide show
  1. package/generators.d.ts +0 -3
  2. package/generators.d.ts.map +1 -1
  3. package/generators.js +0 -3
  4. package/generators.json +0 -19
  5. package/migrations.json +19 -3
  6. package/package.json +10 -12
  7. package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.d.ts.map +1 -1
  8. package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.js +4 -5
  9. package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +4 -5
  10. package/src/executors/package/package.impl.js +2 -2
  11. package/src/executors/utilities/angular-version-utils.d.ts.map +1 -1
  12. package/src/executors/utilities/angular-version-utils.js +3 -8
  13. package/src/generators/add-linting/add-linting.d.ts.map +1 -1
  14. package/src/generators/add-linting/add-linting.js +7 -5
  15. package/src/generators/add-linting/lib/add-angular-eslint-dependencies.d.ts.map +1 -1
  16. package/src/generators/add-linting/lib/add-angular-eslint-dependencies.js +1 -1
  17. package/src/generators/application/application.d.ts.map +1 -1
  18. package/src/generators/application/application.js +4 -10
  19. package/src/generators/application/lib/add-e2e.d.ts.map +1 -1
  20. package/src/generators/application/lib/add-e2e.js +1 -1
  21. package/src/generators/application/lib/create-project.d.ts.map +1 -1
  22. package/src/generators/application/lib/create-project.js +3 -3
  23. package/src/generators/application/lib/normalize-options.js +3 -3
  24. package/src/generators/application/schema.d.ts +0 -1
  25. package/src/generators/application/schema.json +0 -5
  26. package/src/generators/component/component.d.ts.map +1 -1
  27. package/src/generators/component/component.js +2 -0
  28. package/src/generators/component/lib/normalize-options.js +2 -2
  29. package/src/generators/component-story/component-story.d.ts.map +1 -1
  30. package/src/generators/component-story/component-story.js +2 -0
  31. package/src/generators/component-test/component-test.d.ts.map +1 -1
  32. package/src/generators/component-test/component-test.js +2 -0
  33. package/src/generators/convert-to-application-executor/convert-to-application-executor.d.ts.map +1 -1
  34. package/src/generators/convert-to-application-executor/convert-to-application-executor.js +2 -0
  35. package/src/generators/convert-to-rspack/convert-to-rspack.d.ts.map +1 -1
  36. package/src/generators/convert-to-rspack/convert-to-rspack.js +5 -4
  37. package/src/generators/convert-to-rspack/lib/get-custom-webpack-config.js +2 -2
  38. package/src/generators/convert-to-with-mf/convert-to-with-mf.d.ts +1 -1
  39. package/src/generators/convert-to-with-mf/convert-to-with-mf.d.ts.map +1 -1
  40. package/src/generators/convert-to-with-mf/convert-to-with-mf.js +5 -0
  41. package/src/generators/convert-to-with-mf/lib/write-new-webpack-config.js +1 -1
  42. package/src/generators/cypress-component-configuration/cypress-component-configuration.d.ts.map +1 -1
  43. package/src/generators/cypress-component-configuration/cypress-component-configuration.js +2 -0
  44. package/src/generators/directive/directive.d.ts.map +1 -1
  45. package/src/generators/directive/directive.js +2 -0
  46. package/src/generators/directive/lib/normalize-options.js +2 -2
  47. package/src/generators/federate-module/federate-module.d.ts.map +1 -1
  48. package/src/generators/federate-module/federate-module.js +2 -0
  49. package/src/generators/federate-module/lib/add-remote.js +2 -2
  50. package/src/generators/host/host.d.ts.map +1 -1
  51. package/src/generators/host/host.js +10 -7
  52. package/src/generators/host/schema.d.ts +1 -1
  53. package/src/generators/host/schema.json +4 -5
  54. package/src/generators/init/init.d.ts.map +1 -1
  55. package/src/generators/init/init.js +4 -2
  56. package/src/generators/library/lib/add-project.js +2 -2
  57. package/src/generators/library/lib/normalize-options.js +3 -3
  58. package/src/generators/library/lib/normalized-schema.d.ts +0 -1
  59. package/src/generators/library/lib/normalized-schema.d.ts.map +1 -1
  60. package/src/generators/library/lib/validate-options.d.ts.map +1 -1
  61. package/src/generators/library/lib/validate-options.js +0 -3
  62. package/src/generators/library/library.d.ts.map +1 -1
  63. package/src/generators/library/library.js +4 -10
  64. package/src/generators/library/schema.d.ts +0 -1
  65. package/src/generators/library/schema.json +0 -5
  66. package/src/generators/library-secondary-entry-point/library-secondary-entry-point.d.ts.map +1 -1
  67. package/src/generators/library-secondary-entry-point/library-secondary-entry-point.js +2 -0
  68. package/src/generators/ng-add/ng-add.d.ts.map +1 -1
  69. package/src/generators/ng-add/ng-add.js +2 -0
  70. package/src/generators/ngrx-feature-store/lib/normalize-options.js +5 -5
  71. package/src/generators/ngrx-feature-store/ngrx-feature-store.d.ts.map +1 -1
  72. package/src/generators/ngrx-feature-store/ngrx-feature-store.js +2 -0
  73. package/src/generators/ngrx-root-store/lib/normalize-options.js +3 -3
  74. package/src/generators/ngrx-root-store/ngrx-root-store.d.ts.map +1 -1
  75. package/src/generators/ngrx-root-store/ngrx-root-store.js +2 -0
  76. package/src/generators/pipe/lib/normalize-options.js +2 -2
  77. package/src/generators/pipe/pipe.d.ts.map +1 -1
  78. package/src/generators/pipe/pipe.js +2 -0
  79. package/src/generators/remote/remote.d.ts.map +1 -1
  80. package/src/generators/remote/remote.js +5 -3
  81. package/src/generators/remote/schema.d.ts +0 -1
  82. package/src/generators/remote/schema.json +0 -5
  83. package/src/generators/scam/lib/normalize-options.js +2 -2
  84. package/src/generators/scam/scam.d.ts.map +1 -1
  85. package/src/generators/scam/scam.js +2 -0
  86. package/src/generators/scam-directive/lib/normalize-options.js +2 -2
  87. package/src/generators/scam-directive/scam-directive.d.ts.map +1 -1
  88. package/src/generators/scam-directive/scam-directive.js +2 -0
  89. package/src/generators/scam-pipe/lib/normalize-options.js +2 -2
  90. package/src/generators/scam-pipe/scam-pipe.d.ts.map +1 -1
  91. package/src/generators/scam-pipe/scam-pipe.js +2 -0
  92. package/src/generators/scam-to-standalone/scam-to-standalone.d.ts.map +1 -1
  93. package/src/generators/scam-to-standalone/scam-to-standalone.js +2 -0
  94. package/src/generators/setup-mf/lib/change-build-target.d.ts.map +1 -1
  95. package/src/generators/setup-mf/lib/change-build-target.js +2 -2
  96. package/src/generators/setup-mf/setup-mf.d.ts.map +1 -1
  97. package/src/generators/setup-mf/setup-mf.js +2 -0
  98. package/src/generators/setup-ssr/lib/normalize-options.d.ts.map +1 -1
  99. package/src/generators/setup-ssr/lib/normalize-options.js +2 -2
  100. package/src/generators/setup-ssr/setup-ssr.d.ts.map +1 -1
  101. package/src/generators/setup-ssr/setup-ssr.js +2 -0
  102. package/src/generators/stories/stories.d.ts.map +1 -1
  103. package/src/generators/stories/stories.js +2 -0
  104. package/src/generators/storybook-configuration/storybook-configuration.d.ts.map +1 -1
  105. package/src/generators/storybook-configuration/storybook-configuration.js +2 -0
  106. package/src/generators/utils/add-vitest.js +1 -1
  107. package/src/generators/utils/version-utils.d.ts.map +1 -1
  108. package/src/generators/utils/version-utils.js +2 -7
  109. package/src/generators/web-worker/web-worker.d.ts.map +1 -1
  110. package/src/generators/web-worker/web-worker.js +2 -0
  111. package/src/migrations/update-17-1-0/browser-target-to-build-target.d.ts.map +1 -1
  112. package/src/migrations/update-17-1-0/browser-target-to-build-target.js +2 -2
  113. package/src/migrations/update-19-6-1/ensure-depends-on-for-mf.js +2 -2
  114. package/src/migrations/update-20-2-0/migrate-with-mf-import-to-new-package.d.ts.map +1 -1
  115. package/src/migrations/update-20-2-0/migrate-with-mf-import-to-new-package.js +2 -2
  116. package/src/migrations/update-20-2-0/remove-tailwind-config-from-ng-packagr-executors.d.ts.map +1 -1
  117. package/src/migrations/update-20-2-0/remove-tailwind-config-from-ng-packagr-executors.js +2 -2
  118. package/src/migrations/update-20-3-0/ensure-nx-module-federation-package.d.ts.map +1 -1
  119. package/src/migrations/update-20-3-0/ensure-nx-module-federation-package.js +2 -2
  120. package/src/migrations/update-23-0-0/migrate-ngrx-generator-defaults.d.ts +3 -0
  121. package/src/migrations/update-23-0-0/migrate-ngrx-generator-defaults.d.ts.map +1 -0
  122. package/src/migrations/update-23-0-0/migrate-ngrx-generator-defaults.js +120 -0
  123. package/src/migrations/update-23-0-0/migrate-with-mf-import-to-new-package.d.ts +3 -0
  124. package/src/migrations/update-23-0-0/migrate-with-mf-import-to-new-package.d.ts.map +1 -0
  125. package/src/migrations/update-23-0-0/migrate-with-mf-import-to-new-package.js +45 -0
  126. package/src/plugins/plugin.d.ts.map +1 -1
  127. package/src/plugins/plugin.js +14 -17
  128. package/src/utils/assert-supported-angular-version.d.ts +3 -0
  129. package/src/utils/assert-supported-angular-version.d.ts.map +1 -0
  130. package/src/utils/assert-supported-angular-version.js +9 -0
  131. package/src/utils/backward-compatible-versions.d.ts.map +1 -1
  132. package/src/utils/backward-compatible-versions.js +2 -4
  133. package/src/utils/get-mf-projects.js +3 -3
  134. package/src/utils/index.d.ts +1 -0
  135. package/src/utils/index.d.ts.map +1 -1
  136. package/src/utils/index.js +3 -1
  137. package/src/utils/versions.d.ts +1 -2
  138. package/src/utils/versions.d.ts.map +1 -1
  139. package/src/utils/versions.js +2 -3
  140. package/tailwind.d.ts +2 -3
  141. package/tailwind.d.ts.map +1 -1
  142. package/tailwind.js +10 -4
  143. package/module-federation/index.d.ts +0 -6
  144. package/module-federation/index.d.ts.map +0 -1
  145. package/module-federation/index.js +0 -6
  146. package/src/generators/add-linting/lib/create-eslint-configuration.d.ts +0 -16
  147. package/src/generators/add-linting/lib/create-eslint-configuration.d.ts.map +0 -1
  148. package/src/generators/add-linting/lib/create-eslint-configuration.js +0 -121
  149. package/src/generators/move/move.d.ts +0 -7
  150. package/src/generators/move/move.d.ts.map +0 -1
  151. package/src/generators/move/move.js +0 -11
  152. package/src/generators/move/schema.d.ts +0 -8
  153. package/src/generators/move/schema.json +0 -56
  154. package/src/generators/ngrx/files/__directory__/__fileName__.actions.ts__tmpl__ +0 -16
  155. package/src/generators/ngrx/files/__directory__/__fileName__.effects.spec.ts__tmpl__ +0 -37
  156. package/src/generators/ngrx/files/__directory__/__fileName__.effects.ts__tmpl__ +0 -22
  157. package/src/generators/ngrx/files/__directory__/__fileName__.facade.spec.ts__tmpl__ +0 -103
  158. package/src/generators/ngrx/files/__directory__/__fileName__.facade.ts__tmpl__ +0 -27
  159. package/src/generators/ngrx/files/__directory__/__fileName__.models.ts__tmpl__ +0 -7
  160. package/src/generators/ngrx/files/__directory__/__fileName__.reducer.spec.ts__tmpl__ +0 -37
  161. package/src/generators/ngrx/files/__directory__/__fileName__.reducer.ts__tmpl__ +0 -41
  162. package/src/generators/ngrx/files/__directory__/__fileName__.selectors.spec.ts__tmpl__ +0 -58
  163. package/src/generators/ngrx/files/__directory__/__fileName__.selectors.ts__tmpl__ +0 -38
  164. package/src/generators/ngrx/lib/add-exports-barrel.d.ts +0 -7
  165. package/src/generators/ngrx/lib/add-exports-barrel.d.ts.map +0 -1
  166. package/src/generators/ngrx/lib/add-exports-barrel.js +0 -44
  167. package/src/generators/ngrx/lib/add-imports-to-module.d.ts +0 -4
  168. package/src/generators/ngrx/lib/add-imports-to-module.d.ts.map +0 -1
  169. package/src/generators/ngrx/lib/add-imports-to-module.js +0 -181
  170. package/src/generators/ngrx/lib/add-ngrx-to-package-json.d.ts +0 -4
  171. package/src/generators/ngrx/lib/add-ngrx-to-package-json.d.ts.map +0 -1
  172. package/src/generators/ngrx/lib/add-ngrx-to-package-json.js +0 -23
  173. package/src/generators/ngrx/lib/generate-files.d.ts +0 -7
  174. package/src/generators/ngrx/lib/generate-files.d.ts.map +0 -1
  175. package/src/generators/ngrx/lib/generate-files.js +0 -23
  176. package/src/generators/ngrx/lib/index.d.ts +0 -7
  177. package/src/generators/ngrx/lib/index.d.ts.map +0 -1
  178. package/src/generators/ngrx/lib/index.js +0 -15
  179. package/src/generators/ngrx/lib/normalize-options.d.ts +0 -9
  180. package/src/generators/ngrx/lib/normalize-options.d.ts.map +0 -1
  181. package/src/generators/ngrx/lib/normalize-options.js +0 -30
  182. package/src/generators/ngrx/lib/validate-options.d.ts +0 -4
  183. package/src/generators/ngrx/lib/validate-options.d.ts.map +0 -1
  184. package/src/generators/ngrx/lib/validate-options.js +0 -14
  185. package/src/generators/ngrx/ngrx.d.ts +0 -8
  186. package/src/generators/ngrx/ngrx.d.ts.map +0 -1
  187. package/src/generators/ngrx/ngrx.js +0 -28
  188. package/src/generators/ngrx/schema.d.ts +0 -14
  189. package/src/generators/ngrx/schema.json +0 -102
  190. package/src/generators/setup-tailwind/files/v2/tailwind.config.js__tmpl__ +0 -18
  191. package/src/generators/setup-tailwind/files/v3/tailwind.config.js__tmpl__ +0 -14
  192. package/src/generators/setup-tailwind/lib/add-tailwind-config.d.ts +0 -4
  193. package/src/generators/setup-tailwind/lib/add-tailwind-config.d.ts.map +0 -1
  194. package/src/generators/setup-tailwind/lib/add-tailwind-config.js +0 -17
  195. package/src/generators/setup-tailwind/lib/add-tailwind-required-packages.d.ts +0 -3
  196. package/src/generators/setup-tailwind/lib/add-tailwind-required-packages.d.ts.map +0 -1
  197. package/src/generators/setup-tailwind/lib/add-tailwind-required-packages.js +0 -13
  198. package/src/generators/setup-tailwind/lib/detect-tailwind-installed-version.d.ts +0 -3
  199. package/src/generators/setup-tailwind/lib/detect-tailwind-installed-version.d.ts.map +0 -1
  200. package/src/generators/setup-tailwind/lib/detect-tailwind-installed-version.js +0 -18
  201. package/src/generators/setup-tailwind/lib/index.d.ts +0 -7
  202. package/src/generators/setup-tailwind/lib/index.d.ts.map +0 -1
  203. package/src/generators/setup-tailwind/lib/index.js +0 -9
  204. package/src/generators/setup-tailwind/lib/normalize-options.d.ts +0 -3
  205. package/src/generators/setup-tailwind/lib/normalize-options.d.ts.map +0 -1
  206. package/src/generators/setup-tailwind/lib/normalize-options.js +0 -9
  207. package/src/generators/setup-tailwind/lib/update-application-styles.d.ts +0 -4
  208. package/src/generators/setup-tailwind/lib/update-application-styles.d.ts.map +0 -1
  209. package/src/generators/setup-tailwind/lib/update-application-styles.js +0 -53
  210. package/src/generators/setup-tailwind/lib/validate-build-target.d.ts +0 -4
  211. package/src/generators/setup-tailwind/lib/validate-build-target.d.ts.map +0 -1
  212. package/src/generators/setup-tailwind/lib/validate-build-target.js +0 -24
  213. package/src/generators/setup-tailwind/schema.d.ts +0 -11
  214. package/src/generators/setup-tailwind/schema.json +0 -42
  215. package/src/generators/setup-tailwind/setup-tailwind.d.ts +0 -5
  216. package/src/generators/setup-tailwind/setup-tailwind.d.ts.map +0 -1
  217. package/src/generators/setup-tailwind/setup-tailwind.js +0 -32
@@ -1 +0,0 @@
1
- {"version":3,"file":"move.d.ts","sourceRoot":"","sources":["../../../../../../packages/angular/src/generators/move/move.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAGf"}
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.angularMoveGenerator = angularMoveGenerator;
4
- const move_1 = require("@nx/workspace/src/generators/move/move");
5
- /**
6
- * @deprecated Use the `@nx/workspace:move` generator instead. It will be removed in Nx v22.
7
- */
8
- async function angularMoveGenerator(tree, schema) {
9
- process.env.NX_ANGULAR_MOVE_INVOKED = 'true';
10
- await (0, move_1.moveGenerator)(tree, schema);
11
- }
@@ -1,8 +0,0 @@
1
- export interface Schema {
2
- projectName: string;
3
- destination: string;
4
- updateImportPath: boolean;
5
- importPath?: string;
6
- skipFormat?: boolean;
7
- newProjectName?: string;
8
- }
@@ -1,56 +0,0 @@
1
- {
2
- "$schema": "https://json-schema.org/schema",
3
- "$id": "NxAngularMove",
4
- "cli": "nx",
5
- "title": "Nx Angular Move",
6
- "description": "Move an Angular project to another folder in the workspace.",
7
- "type": "object",
8
- "examples": [
9
- {
10
- "command": "nx g @nx/angular:move --project my-feature-lib --destination shared/my-feature-lib",
11
- "description": "Move libs/my-feature-lib to libs/shared/my-feature-lib."
12
- }
13
- ],
14
- "properties": {
15
- "projectName": {
16
- "type": "string",
17
- "alias": "project",
18
- "description": "The name of the Angular project to move.",
19
- "x-dropdown": "projects",
20
- "x-priority": "important"
21
- },
22
- "newProjectName": {
23
- "type": "string",
24
- "alias": "project",
25
- "description": "The new name of the project after the move.",
26
- "pattern": "(?:^@[a-zA-Z0-9-*~][a-zA-Z0-9-*._~]*\\/[a-zA-Z0-9-~][a-zA-Z0-9-._~]*|^[a-zA-Z][^:]*)$",
27
- "x-priority": "important"
28
- },
29
- "destination": {
30
- "type": "string",
31
- "description": "The folder to move the Angular project into.",
32
- "$default": {
33
- "$source": "argv",
34
- "index": 0
35
- },
36
- "x-priority": "important"
37
- },
38
- "importPath": {
39
- "type": "string",
40
- "description": "The new import path to use in the `tsconfig.base.json`."
41
- },
42
- "updateImportPath": {
43
- "type": "boolean",
44
- "description": "Update the import path to reflect the new location.",
45
- "default": true
46
- },
47
- "skipFormat": {
48
- "type": "boolean",
49
- "aliases": ["skip-format"],
50
- "description": "Skip formatting files.",
51
- "default": false,
52
- "x-priority": "internal"
53
- }
54
- },
55
- "required": ["projectName", "destination"]
56
- }
@@ -1,16 +0,0 @@
1
- import { createAction, props } from '@ngrx/store';
2
- import { <%= className %>Entity } from './<%= fileName %>.models';
3
-
4
- export const init<%= className %> = createAction(
5
- '[<%= className %> Page] Init'
6
- );
7
-
8
- export const load<%= className %>Success = createAction(
9
- '[<%= className %>/API] Load <%= className %> Success',
10
- props<{ <%= propertyName %>: <%= className %>Entity[] }>()
11
- );
12
-
13
- export const load<%= className %>Failure = createAction(
14
- '[<%= className %>/API] Load <%= className %> Failure',
15
- props<{ error: any }>()
16
- );
@@ -1,37 +0,0 @@
1
- import { TestBed } from '@angular/core/testing';
2
- import { provideMockActions } from '@ngrx/effects/testing';
3
- import { Action } from '@ngrx/store';
4
- import { provideMockStore } from '@ngrx/store/testing';
5
- import { hot } from 'jasmine-marbles';
6
- import { Observable } from 'rxjs';
7
-
8
- import * as <%= className %>Actions from './<%= fileName %>.actions';
9
- import { <%= className %>Effects } from './<%= fileName %>.effects';
10
-
11
- describe('<%= className %>Effects', () => {
12
- let actions: Observable<Action>;
13
- let effects: <%= className %>Effects;
14
-
15
- beforeEach(() => {
16
- TestBed.configureTestingModule({
17
- imports: [],
18
- providers: [
19
- <%= className %>Effects,
20
- provideMockActions(() => actions),
21
- provideMockStore()
22
- ],
23
- });
24
-
25
- effects = TestBed.inject(<%= className %>Effects);
26
- });
27
-
28
- describe('init$', () => {
29
- it('should work', () => {
30
- actions = hot('-a-|', { a: <%= className %>Actions.init<%= className %>() });
31
-
32
- const expected = hot('-a-|', { a: <%= className %>Actions.load<%= className %>Success({ <%= propertyName %>: [] }) });
33
-
34
- expect(effects.init$).toBeObservable(expected);
35
- });
36
- });
37
- });
@@ -1,22 +0,0 @@
1
- import { Injectable, inject } from '@angular/core';
2
- import { createEffect, Actions, ofType } from '@ngrx/effects';<% if (!importFromOperators) { %>
3
- import { switchMap, catchError, of } from 'rxjs';<% } else { %>
4
- import { of } from 'rxjs';
5
- import { switchMap, catchError } from 'rxjs/operators';<% } %>
6
- import * as <%= className %>Actions from './<%= fileName %>.actions';
7
- import * as <%= className %>Feature from './<%= fileName %>.reducer';
8
-
9
- @Injectable()
10
- export class <%= className %>Effects {
11
- private actions$ = inject(Actions);
12
-
13
- init$ = createEffect(() => this.actions$.pipe(
14
- ofType(<%= className %>Actions.init<%= className %>),
15
- switchMap(() => of(<%= className %>Actions.load<%= className %>Success({ <%= propertyName %>: [] }))),
16
- catchError((error) => {
17
- console.error('Error', error);
18
- return of(<%= className %>Actions.load<%= className %>Failure({ error }));
19
- }
20
- )
21
- ));
22
- }
@@ -1,103 +0,0 @@
1
- import { NgModule } from '@angular/core';
2
- import { TestBed } from '@angular/core/testing';
3
- import { EffectsModule } from '@ngrx/effects';
4
- import { StoreModule, Store } from '@ngrx/store';
5
- <%_ if (isRxJs7) { _%>
6
- import { firstValueFrom } from 'rxjs';
7
- <%_ } else { _%>
8
- import { first } from 'rxjs/operators';
9
- <%_ } _%>
10
-
11
- import * as <%= className %>Actions from './<%= fileName %>.actions';
12
- import { <%= className %>Effects } from './<%= fileName %>.effects';
13
- import { <%= className %>Facade } from './<%= fileName %>.facade';
14
- import { <%= className %>Entity } from './<%= fileName %>.models';
15
- import {
16
- <%= constantName %>_FEATURE_KEY,
17
- <%= className %>State,
18
- initial<%= className %>State,
19
- <%= propertyName %>Reducer
20
- } from './<%= fileName %>.reducer';
21
- import * as <%= className %>Selectors from './<%= fileName %>.selectors';
22
-
23
- interface TestSchema {
24
- <%= propertyName %>: <%= className %>State;
25
- }
26
-
27
- describe('<%= className %>Facade', () => {
28
- let facade: <%= className %>Facade;
29
- let store: Store<TestSchema>;
30
- const create<%= className %>Entity = (id: string, name = ''): <%= className %>Entity => ({
31
- id,
32
- name: name || `name-${id}`
33
- });
34
-
35
- describe('used in NgModule', () => {
36
- beforeEach(() => {
37
- @NgModule({
38
- imports: [
39
- StoreModule.forFeature(<%= constantName %>_FEATURE_KEY, <%= propertyName %>Reducer),
40
- EffectsModule.forFeature([<%= className %>Effects])
41
- ],
42
- providers: [<%= className %>Facade]
43
- })
44
- class CustomFeatureModule {}
45
-
46
- @NgModule({
47
- imports: [
48
- StoreModule.forRoot({}),
49
- EffectsModule.forRoot([]),
50
- CustomFeatureModule,
51
- ]
52
- })
53
- class RootModule {}
54
- TestBed.configureTestingModule({ imports: [RootModule] });
55
-
56
- store = TestBed.inject(Store);
57
- facade = TestBed.inject(<%= className %>Facade);
58
- });
59
-
60
- /**
61
- * The initially generated facade::loadAll() returns empty array
62
- */
63
- it('loadAll() should return empty list with loaded == true', async () => {
64
- let list = await <% if (isRxJs7) { %>firstValueFrom(facade.all<%= className %>$)<% } else { %>facade.all<%= className %>$.pipe(first()).toPromise()<% } %>;
65
- let isLoaded = await <% if (isRxJs7) { %>firstValueFrom(facade.loaded$)<% } else { %>facade.loaded$.pipe(first()).toPromise()<% } %>;
66
-
67
- expect(list.length).toBe(0);
68
- expect(isLoaded).toBe(false);
69
-
70
- facade.init();
71
-
72
- list = await <% if (isRxJs7) { %>firstValueFrom(facade.all<%= className %>$)<% } else { %>facade.all<%= className %>$.pipe(first()).toPromise()<% } %>;
73
- isLoaded = await <% if (isRxJs7) { %>firstValueFrom(facade.loaded$)<% } else { %>facade.loaded$.pipe(first()).toPromise()<% } %>;
74
-
75
- expect(list.length).toBe(0);
76
- expect(isLoaded).toBe(true);
77
- });
78
-
79
- /**
80
- * Use `load<%= className %>Success` to manually update list
81
- */
82
- it('all<%= className %>$ should return the loaded list; and loaded flag == true', async () => {
83
- let list = await <% if (isRxJs7) { %>firstValueFrom(facade.all<%= className %>$)<% } else { %>facade.all<%= className %>$.pipe(first()).toPromise()<% } %>;
84
- let isLoaded = await <% if (isRxJs7) { %>firstValueFrom(facade.loaded$)<% } else { %>facade.loaded$.pipe(first()).toPromise()<% } %>;
85
-
86
- expect(list.length).toBe(0);
87
- expect(isLoaded).toBe(false);
88
-
89
- store.dispatch(<%= className %>Actions.load<%= className %>Success({
90
- <%= propertyName %>: [
91
- create<%= className %>Entity('AAA'),
92
- create<%= className %>Entity('BBB')
93
- ]})
94
- );
95
-
96
- list = await <% if (isRxJs7) { %>firstValueFrom(facade.all<%= className %>$)<% } else { %>facade.all<%= className %>$.pipe(first()).toPromise()<% } %>;
97
- isLoaded = await <% if (isRxJs7) { %>firstValueFrom(facade.loaded$)<% } else { %>facade.loaded$.pipe(first()).toPromise()<% } %>;
98
-
99
- expect(list.length).toBe(2);
100
- expect(isLoaded).toBe(true);
101
- });
102
- });
103
- });
@@ -1,27 +0,0 @@
1
- import { Injectable, inject } from '@angular/core';
2
- import { select, Store, Action } from '@ngrx/store';
3
-
4
- import * as <%= className %>Actions from './<%= fileName %>.actions';
5
- import * as <%= className %>Feature from './<%= fileName %>.reducer';
6
- import * as <%= className %>Selectors from './<%= fileName %>.selectors';
7
-
8
- @Injectable()
9
- export class <%= className %>Facade {
10
- private readonly store = inject(Store);
11
-
12
- /**
13
- * Combine pieces of state using createSelector,
14
- * and expose them as observables through the facade.
15
- */
16
- loaded$ = this.store.pipe(select(<%= className %>Selectors.select<%= className %>Loaded));
17
- all<%= className %>$ = this.store.pipe(select(<%= className %>Selectors.selectAll<%= className %>));
18
- selected<%= className %>$ = this.store.pipe(select(<%= className %>Selectors.selectEntity));
19
-
20
- /**
21
- * Use the initialization action to perform one
22
- * or more tasks in your Effects.
23
- */
24
- init() {
25
- this.store.dispatch(<%= className %>Actions.init<%= className %>());
26
- }
27
- }
@@ -1,7 +0,0 @@
1
- /**
2
- * Interface for the '<%= className %>' data
3
- */
4
- export interface <%= className %>Entity {
5
- id: string | number; // Primary ID
6
- name: string;
7
- }
@@ -1,37 +0,0 @@
1
- import { Action } from '@ngrx/store';
2
-
3
- import * as <%= className %>Actions from './<%= fileName %>.actions';
4
- import { <%= className %>Entity } from './<%= fileName %>.models';
5
- import { <%= className %>State, initial<%= className %>State, <%= propertyName %>Reducer } from './<%= fileName %>.reducer';
6
-
7
- describe('<%= className %> Reducer', () => {
8
- const create<%= className %>Entity = (id: string, name = ''): <%= className %>Entity => ({
9
- id,
10
- name: name || `name-${id}`
11
- });
12
-
13
- describe('valid <%= className %> actions', () => {
14
- it('load<%= className %>Success should return the list of known <%= className %>', () => {
15
- const <%= propertyName %> = [
16
- create<%= className %>Entity('PRODUCT-AAA'),
17
- create<%= className %>Entity('PRODUCT-zzz')
18
- ];
19
- const action = <%= className %>Actions.load<%= className %>Success({ <%= propertyName %> });
20
-
21
- const result: <%= className %>State = <%= propertyName %>Reducer(initial<%= className %>State, action);
22
-
23
- expect(result.loaded).toBe(true);
24
- expect(result.ids.length).toBe(2);
25
- });
26
- });
27
-
28
- describe('unknown action', () => {
29
- it('should return the previous state', () => {
30
- const action = {} as Action;
31
-
32
- const result = <%= propertyName %>Reducer(initial<%= className %>State, action);
33
-
34
- expect(result).toBe(initial<%= className %>State);
35
- });
36
- });
37
- });
@@ -1,41 +0,0 @@
1
- import { EntityState, EntityAdapter, createEntityAdapter } from '@ngrx/entity';
2
- import { createReducer, on, Action } from '@ngrx/store';
3
-
4
- import * as <%= className %>Actions from './<%= fileName %>.actions';
5
- import { <%= className %>Entity } from './<%= fileName %>.models';
6
-
7
- export const <%= constantName %>_FEATURE_KEY = '<%= propertyName %>';
8
-
9
- export interface <%= className %>State extends EntityState<<%= className %>Entity> {
10
- selectedId?: string | number; // which <%= className %> record has been selected
11
- loaded: boolean; // has the <%= className %> list been loaded
12
- error?: string | null; // last known error (if any)
13
- }
14
-
15
- export interface <%= className %>PartialState {
16
- readonly [<%= constantName %>_FEATURE_KEY]: <%= className %>State;
17
- }
18
-
19
- export const <%= propertyName %>Adapter: EntityAdapter<<%= className %>Entity> = createEntityAdapter<<%= className %>Entity>();
20
-
21
- export const initial<%= className %>State: <%= className %>State = <%= propertyName %>Adapter.getInitialState({
22
- // set initial required properties
23
- loaded: false
24
- });
25
-
26
- const reducer = createReducer(
27
- initial<%= className %>State,
28
- on(<%= className %>Actions.init<%= className %>,
29
- state => ({ ...state, loaded: false, error: null })
30
- ),
31
- on(<%= className %>Actions.load<%= className %>Success,
32
- (state, { <%= propertyName %> }) => <%= propertyName %>Adapter.setAll(<%= propertyName %>, { ...state, loaded: true })
33
- ),
34
- on(<%= className %>Actions.load<%= className %>Failure,
35
- (state, { error }) => ({ ...state, error })
36
- ),
37
- );
38
-
39
- export function <%= propertyName %>Reducer(state: <%= className %>State | undefined, action: Action) {
40
- return reducer(state, action);
41
- }
@@ -1,58 +0,0 @@
1
- import { <%= className %>Entity } from './<%= fileName %>.models';
2
- import { <%= propertyName %>Adapter, <%= className %>PartialState, initial<%= className %>State } from './<%= fileName %>.reducer';
3
- import * as <%= className %>Selectors from './<%= fileName %>.selectors';
4
-
5
- describe('<%= className %> Selectors', () => {
6
- const ERROR_MSG = 'No Error Available';
7
- const get<%= className %>Id = (it: <%= className %>Entity) => it.id;
8
- const create<%= className %>Entity = (id: string, name = '') => ({
9
- id,
10
- name: name || `name-${id}`
11
- }) as <%= className %>Entity;
12
-
13
- let state: <%= className %>PartialState;
14
-
15
- beforeEach(() => {
16
- state = {
17
- <%= propertyName %>: <%= propertyName %>Adapter.setAll([
18
- create<%= className %>Entity('PRODUCT-AAA'),
19
- create<%= className %>Entity('PRODUCT-BBB'),
20
- create<%= className %>Entity('PRODUCT-CCC')
21
- ], {
22
- ...initial<%= className %>State,
23
- selectedId: 'PRODUCT-BBB',
24
- error: ERROR_MSG,
25
- loaded: true
26
- })
27
- };
28
- });
29
-
30
- describe('<%= className %> Selectors', () => {
31
- it('selectAll<%= className %>() should return the list of <%= className %>', () => {
32
- const results = <%= className %>Selectors.selectAll<%= className %>(state);
33
- const selId = get<%= className %>Id(results[1]);
34
-
35
- expect(results.length).toBe(3);
36
- expect(selId).toBe('PRODUCT-BBB');
37
- });
38
-
39
- it('selectEntity() should return the selected Entity', () => {
40
- const result = <%= className %>Selectors.selectEntity(state) as <%= className %>Entity;
41
- const selId = get<%= className %>Id(result);
42
-
43
- expect(selId).toBe('PRODUCT-BBB');
44
- });
45
-
46
- it('select<%= className %>Loaded() should return the current "loaded" status', () => {
47
- const result = <%= className %>Selectors.select<%= className %>Loaded(state);
48
-
49
- expect(result).toBe(true);
50
- });
51
-
52
- it('select<%= className %>Error() should return the current "error" state', () => {
53
- const result = <%= className %>Selectors.select<%= className %>Error(state);
54
-
55
- expect(result).toBe(ERROR_MSG);
56
- });
57
- });
58
- });
@@ -1,38 +0,0 @@
1
- import { createFeatureSelector, createSelector } from '@ngrx/store';
2
- import { <%= constantName %>_FEATURE_KEY, <%= className %>State, <%= propertyName %>Adapter } from './<%= fileName %>.reducer';
3
-
4
- // Lookup the '<%= className %>' feature state managed by NgRx
5
- export const select<%= className %>State = createFeatureSelector<<%= className %>State>(<%= constantName %>_FEATURE_KEY);
6
-
7
- const { selectAll, selectEntities } = <%= propertyName %>Adapter.getSelectors();
8
-
9
- export const select<%= className %>Loaded = createSelector(
10
- select<%= className %>State,
11
- (state: <%= className %>State) => state.loaded
12
- );
13
-
14
- export const select<%= className %>Error = createSelector(
15
- select<%= className %>State,
16
- (state: <%= className %>State) => state.error
17
- );
18
-
19
- export const selectAll<%= className %> = createSelector(
20
- select<%= className %>State,
21
- (state: <%= className %>State) => selectAll(state)
22
- );
23
-
24
- export const select<%= className %>Entities = createSelector(
25
- select<%= className %>State,
26
- (state: <%= className %>State) => selectEntities(state)
27
- );
28
-
29
- export const selectSelectedId = createSelector(
30
- select<%= className %>State,
31
- (state: <%= className %>State) => state.selectedId
32
- );
33
-
34
- export const selectEntity = createSelector(
35
- select<%= className %>Entities,
36
- selectSelectedId,
37
- (entities, selectedId) => (selectedId ? entities[selectedId] : undefined)
38
- );
@@ -1,7 +0,0 @@
1
- import type { Tree } from '@nx/devkit';
2
- import type { NormalizedNgRxGeneratorOptions } from './normalize-options';
3
- /**
4
- * Add ngrx feature exports to the public barrel in the feature library
5
- */
6
- export declare function addExportsToBarrel(tree: Tree, options: NormalizedNgRxGeneratorOptions): void;
7
- //# sourceMappingURL=add-exports-barrel.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-exports-barrel.d.ts","sourceRoot":"","sources":["../../../../../../../packages/angular/src/generators/ngrx/lib/add-exports-barrel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAIvC,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAI1E;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,8BAA8B,GACtC,IAAI,CA+EN"}
@@ -1,44 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.addExportsToBarrel = addExportsToBarrel;
4
- const devkit_1 = require("@nx/devkit");
5
- const ensure_typescript_1 = require("@nx/js/src/utils/typescript/ensure-typescript");
6
- const js_1 = require("@nx/js");
7
- let tsModule;
8
- /**
9
- * Add ngrx feature exports to the public barrel in the feature library
10
- */
11
- function addExportsToBarrel(tree, options) {
12
- // Don't update the public barrel for the root state, only for feature states
13
- if (options.root) {
14
- return;
15
- }
16
- const indexFilePath = (0, devkit_1.joinPathFragments)(options.parentDirectory, '..', 'index.ts');
17
- if (!tree.exists(indexFilePath)) {
18
- return;
19
- }
20
- if (!tsModule) {
21
- tsModule = (0, ensure_typescript_1.ensureTypescript)();
22
- }
23
- const indexSourceText = tree.read(indexFilePath, 'utf-8');
24
- let sourceFile = tsModule.createSourceFile(indexFilePath, indexSourceText, tsModule.ScriptTarget.Latest, true);
25
- // Public API for the feature interfaces, selectors, and facade
26
- const { className, fileName } = (0, devkit_1.names)(options.name);
27
- const statePath = `./lib/${options.directory}/${fileName}`;
28
- sourceFile = (0, js_1.addGlobal)(tree, sourceFile, indexFilePath, options.barrels
29
- ? `import * as ${className}Actions from '${statePath}.actions';`
30
- : `export * from '${statePath}.actions';`);
31
- sourceFile = (0, js_1.addGlobal)(tree, sourceFile, indexFilePath, options.barrels
32
- ? `import * as ${className}Feature from '${statePath}.reducer';`
33
- : `export * from '${statePath}.reducer';`);
34
- sourceFile = (0, js_1.addGlobal)(tree, sourceFile, indexFilePath, options.barrels
35
- ? `import * as ${className}Selectors from '${statePath}.selectors';`
36
- : `export * from '${statePath}.selectors';`);
37
- if (options.barrels) {
38
- sourceFile = (0, js_1.addGlobal)(tree, sourceFile, indexFilePath, `export { ${className}Actions, ${className}Feature, ${className}Selectors };`);
39
- }
40
- sourceFile = (0, js_1.addGlobal)(tree, sourceFile, indexFilePath, `export * from '${statePath}.models';`);
41
- if (options.facade) {
42
- sourceFile = (0, js_1.addGlobal)(tree, sourceFile, indexFilePath, `export * from '${statePath}.facade';`);
43
- }
44
- }
@@ -1,4 +0,0 @@
1
- import type { Tree } from '@nx/devkit';
2
- import type { NormalizedNgRxGeneratorOptions } from './normalize-options';
3
- export declare function addImportsToModule(tree: Tree, options: NormalizedNgRxGeneratorOptions): void;
4
- //# sourceMappingURL=add-imports-to-module.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-imports-to-module.d.ts","sourceRoot":"","sources":["../../../../../../../packages/angular/src/generators/ngrx/lib/add-imports-to-module.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAWvC,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,qBAAqB,CAAC;AAiJ1E,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,8BAA8B,GACtC,IAAI,CAgNN"}