@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.
- package/generators.d.ts +0 -3
- package/generators.d.ts.map +1 -1
- package/generators.js +0 -3
- package/generators.json +0 -19
- package/migrations.json +19 -3
- package/package.json +10 -12
- package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.d.ts.map +1 -1
- package/src/executors/module-federation-dev-server/module-federation-dev-server.impl.js +4 -5
- package/src/executors/module-federation-ssr-dev-server/module-federation-ssr-dev-server.impl.js +4 -5
- package/src/executors/package/package.impl.js +2 -2
- package/src/executors/utilities/angular-version-utils.d.ts.map +1 -1
- package/src/executors/utilities/angular-version-utils.js +3 -8
- package/src/generators/add-linting/add-linting.d.ts.map +1 -1
- package/src/generators/add-linting/add-linting.js +7 -5
- package/src/generators/add-linting/lib/add-angular-eslint-dependencies.d.ts.map +1 -1
- package/src/generators/add-linting/lib/add-angular-eslint-dependencies.js +1 -1
- package/src/generators/application/application.d.ts.map +1 -1
- package/src/generators/application/application.js +4 -10
- package/src/generators/application/lib/add-e2e.d.ts.map +1 -1
- package/src/generators/application/lib/add-e2e.js +1 -1
- package/src/generators/application/lib/create-project.d.ts.map +1 -1
- package/src/generators/application/lib/create-project.js +3 -3
- package/src/generators/application/lib/normalize-options.js +3 -3
- package/src/generators/application/schema.d.ts +0 -1
- package/src/generators/application/schema.json +0 -5
- package/src/generators/component/component.d.ts.map +1 -1
- package/src/generators/component/component.js +2 -0
- package/src/generators/component/lib/normalize-options.js +2 -2
- package/src/generators/component-story/component-story.d.ts.map +1 -1
- package/src/generators/component-story/component-story.js +2 -0
- package/src/generators/component-test/component-test.d.ts.map +1 -1
- package/src/generators/component-test/component-test.js +2 -0
- package/src/generators/convert-to-application-executor/convert-to-application-executor.d.ts.map +1 -1
- package/src/generators/convert-to-application-executor/convert-to-application-executor.js +2 -0
- package/src/generators/convert-to-rspack/convert-to-rspack.d.ts.map +1 -1
- package/src/generators/convert-to-rspack/convert-to-rspack.js +5 -4
- package/src/generators/convert-to-rspack/lib/get-custom-webpack-config.js +2 -2
- package/src/generators/convert-to-with-mf/convert-to-with-mf.d.ts +1 -1
- package/src/generators/convert-to-with-mf/convert-to-with-mf.d.ts.map +1 -1
- package/src/generators/convert-to-with-mf/convert-to-with-mf.js +5 -0
- package/src/generators/convert-to-with-mf/lib/write-new-webpack-config.js +1 -1
- package/src/generators/cypress-component-configuration/cypress-component-configuration.d.ts.map +1 -1
- package/src/generators/cypress-component-configuration/cypress-component-configuration.js +2 -0
- package/src/generators/directive/directive.d.ts.map +1 -1
- package/src/generators/directive/directive.js +2 -0
- package/src/generators/directive/lib/normalize-options.js +2 -2
- package/src/generators/federate-module/federate-module.d.ts.map +1 -1
- package/src/generators/federate-module/federate-module.js +2 -0
- package/src/generators/federate-module/lib/add-remote.js +2 -2
- package/src/generators/host/host.d.ts.map +1 -1
- package/src/generators/host/host.js +10 -7
- package/src/generators/host/schema.d.ts +1 -1
- package/src/generators/host/schema.json +4 -5
- package/src/generators/init/init.d.ts.map +1 -1
- package/src/generators/init/init.js +4 -2
- package/src/generators/library/lib/add-project.js +2 -2
- package/src/generators/library/lib/normalize-options.js +3 -3
- package/src/generators/library/lib/normalized-schema.d.ts +0 -1
- package/src/generators/library/lib/normalized-schema.d.ts.map +1 -1
- package/src/generators/library/lib/validate-options.d.ts.map +1 -1
- package/src/generators/library/lib/validate-options.js +0 -3
- package/src/generators/library/library.d.ts.map +1 -1
- package/src/generators/library/library.js +4 -10
- package/src/generators/library/schema.d.ts +0 -1
- package/src/generators/library/schema.json +0 -5
- package/src/generators/library-secondary-entry-point/library-secondary-entry-point.d.ts.map +1 -1
- package/src/generators/library-secondary-entry-point/library-secondary-entry-point.js +2 -0
- package/src/generators/ng-add/ng-add.d.ts.map +1 -1
- package/src/generators/ng-add/ng-add.js +2 -0
- package/src/generators/ngrx-feature-store/lib/normalize-options.js +5 -5
- package/src/generators/ngrx-feature-store/ngrx-feature-store.d.ts.map +1 -1
- package/src/generators/ngrx-feature-store/ngrx-feature-store.js +2 -0
- package/src/generators/ngrx-root-store/lib/normalize-options.js +3 -3
- package/src/generators/ngrx-root-store/ngrx-root-store.d.ts.map +1 -1
- package/src/generators/ngrx-root-store/ngrx-root-store.js +2 -0
- package/src/generators/pipe/lib/normalize-options.js +2 -2
- package/src/generators/pipe/pipe.d.ts.map +1 -1
- package/src/generators/pipe/pipe.js +2 -0
- package/src/generators/remote/remote.d.ts.map +1 -1
- package/src/generators/remote/remote.js +5 -3
- package/src/generators/remote/schema.d.ts +0 -1
- package/src/generators/remote/schema.json +0 -5
- package/src/generators/scam/lib/normalize-options.js +2 -2
- package/src/generators/scam/scam.d.ts.map +1 -1
- package/src/generators/scam/scam.js +2 -0
- package/src/generators/scam-directive/lib/normalize-options.js +2 -2
- package/src/generators/scam-directive/scam-directive.d.ts.map +1 -1
- package/src/generators/scam-directive/scam-directive.js +2 -0
- package/src/generators/scam-pipe/lib/normalize-options.js +2 -2
- package/src/generators/scam-pipe/scam-pipe.d.ts.map +1 -1
- package/src/generators/scam-pipe/scam-pipe.js +2 -0
- package/src/generators/scam-to-standalone/scam-to-standalone.d.ts.map +1 -1
- package/src/generators/scam-to-standalone/scam-to-standalone.js +2 -0
- package/src/generators/setup-mf/lib/change-build-target.d.ts.map +1 -1
- package/src/generators/setup-mf/lib/change-build-target.js +2 -2
- package/src/generators/setup-mf/setup-mf.d.ts.map +1 -1
- package/src/generators/setup-mf/setup-mf.js +2 -0
- package/src/generators/setup-ssr/lib/normalize-options.d.ts.map +1 -1
- package/src/generators/setup-ssr/lib/normalize-options.js +2 -2
- package/src/generators/setup-ssr/setup-ssr.d.ts.map +1 -1
- package/src/generators/setup-ssr/setup-ssr.js +2 -0
- package/src/generators/stories/stories.d.ts.map +1 -1
- package/src/generators/stories/stories.js +2 -0
- package/src/generators/storybook-configuration/storybook-configuration.d.ts.map +1 -1
- package/src/generators/storybook-configuration/storybook-configuration.js +2 -0
- package/src/generators/utils/add-vitest.js +1 -1
- package/src/generators/utils/version-utils.d.ts.map +1 -1
- package/src/generators/utils/version-utils.js +2 -7
- package/src/generators/web-worker/web-worker.d.ts.map +1 -1
- package/src/generators/web-worker/web-worker.js +2 -0
- package/src/migrations/update-17-1-0/browser-target-to-build-target.d.ts.map +1 -1
- package/src/migrations/update-17-1-0/browser-target-to-build-target.js +2 -2
- package/src/migrations/update-19-6-1/ensure-depends-on-for-mf.js +2 -2
- package/src/migrations/update-20-2-0/migrate-with-mf-import-to-new-package.d.ts.map +1 -1
- package/src/migrations/update-20-2-0/migrate-with-mf-import-to-new-package.js +2 -2
- package/src/migrations/update-20-2-0/remove-tailwind-config-from-ng-packagr-executors.d.ts.map +1 -1
- package/src/migrations/update-20-2-0/remove-tailwind-config-from-ng-packagr-executors.js +2 -2
- package/src/migrations/update-20-3-0/ensure-nx-module-federation-package.d.ts.map +1 -1
- package/src/migrations/update-20-3-0/ensure-nx-module-federation-package.js +2 -2
- package/src/migrations/update-23-0-0/migrate-ngrx-generator-defaults.d.ts +3 -0
- package/src/migrations/update-23-0-0/migrate-ngrx-generator-defaults.d.ts.map +1 -0
- package/src/migrations/update-23-0-0/migrate-ngrx-generator-defaults.js +120 -0
- package/src/migrations/update-23-0-0/migrate-with-mf-import-to-new-package.d.ts +3 -0
- package/src/migrations/update-23-0-0/migrate-with-mf-import-to-new-package.d.ts.map +1 -0
- package/src/migrations/update-23-0-0/migrate-with-mf-import-to-new-package.js +45 -0
- package/src/plugins/plugin.d.ts.map +1 -1
- package/src/plugins/plugin.js +14 -17
- package/src/utils/assert-supported-angular-version.d.ts +3 -0
- package/src/utils/assert-supported-angular-version.d.ts.map +1 -0
- package/src/utils/assert-supported-angular-version.js +9 -0
- package/src/utils/backward-compatible-versions.d.ts.map +1 -1
- package/src/utils/backward-compatible-versions.js +2 -4
- package/src/utils/get-mf-projects.js +3 -3
- package/src/utils/index.d.ts +1 -0
- package/src/utils/index.d.ts.map +1 -1
- package/src/utils/index.js +3 -1
- package/src/utils/versions.d.ts +1 -2
- package/src/utils/versions.d.ts.map +1 -1
- package/src/utils/versions.js +2 -3
- package/tailwind.d.ts +2 -3
- package/tailwind.d.ts.map +1 -1
- package/tailwind.js +10 -4
- package/module-federation/index.d.ts +0 -6
- package/module-federation/index.d.ts.map +0 -1
- package/module-federation/index.js +0 -6
- package/src/generators/add-linting/lib/create-eslint-configuration.d.ts +0 -16
- package/src/generators/add-linting/lib/create-eslint-configuration.d.ts.map +0 -1
- package/src/generators/add-linting/lib/create-eslint-configuration.js +0 -121
- package/src/generators/move/move.d.ts +0 -7
- package/src/generators/move/move.d.ts.map +0 -1
- package/src/generators/move/move.js +0 -11
- package/src/generators/move/schema.d.ts +0 -8
- package/src/generators/move/schema.json +0 -56
- package/src/generators/ngrx/files/__directory__/__fileName__.actions.ts__tmpl__ +0 -16
- package/src/generators/ngrx/files/__directory__/__fileName__.effects.spec.ts__tmpl__ +0 -37
- package/src/generators/ngrx/files/__directory__/__fileName__.effects.ts__tmpl__ +0 -22
- package/src/generators/ngrx/files/__directory__/__fileName__.facade.spec.ts__tmpl__ +0 -103
- package/src/generators/ngrx/files/__directory__/__fileName__.facade.ts__tmpl__ +0 -27
- package/src/generators/ngrx/files/__directory__/__fileName__.models.ts__tmpl__ +0 -7
- package/src/generators/ngrx/files/__directory__/__fileName__.reducer.spec.ts__tmpl__ +0 -37
- package/src/generators/ngrx/files/__directory__/__fileName__.reducer.ts__tmpl__ +0 -41
- package/src/generators/ngrx/files/__directory__/__fileName__.selectors.spec.ts__tmpl__ +0 -58
- package/src/generators/ngrx/files/__directory__/__fileName__.selectors.ts__tmpl__ +0 -38
- package/src/generators/ngrx/lib/add-exports-barrel.d.ts +0 -7
- package/src/generators/ngrx/lib/add-exports-barrel.d.ts.map +0 -1
- package/src/generators/ngrx/lib/add-exports-barrel.js +0 -44
- package/src/generators/ngrx/lib/add-imports-to-module.d.ts +0 -4
- package/src/generators/ngrx/lib/add-imports-to-module.d.ts.map +0 -1
- package/src/generators/ngrx/lib/add-imports-to-module.js +0 -181
- package/src/generators/ngrx/lib/add-ngrx-to-package-json.d.ts +0 -4
- package/src/generators/ngrx/lib/add-ngrx-to-package-json.d.ts.map +0 -1
- package/src/generators/ngrx/lib/add-ngrx-to-package-json.js +0 -23
- package/src/generators/ngrx/lib/generate-files.d.ts +0 -7
- package/src/generators/ngrx/lib/generate-files.d.ts.map +0 -1
- package/src/generators/ngrx/lib/generate-files.js +0 -23
- package/src/generators/ngrx/lib/index.d.ts +0 -7
- package/src/generators/ngrx/lib/index.d.ts.map +0 -1
- package/src/generators/ngrx/lib/index.js +0 -15
- package/src/generators/ngrx/lib/normalize-options.d.ts +0 -9
- package/src/generators/ngrx/lib/normalize-options.d.ts.map +0 -1
- package/src/generators/ngrx/lib/normalize-options.js +0 -30
- package/src/generators/ngrx/lib/validate-options.d.ts +0 -4
- package/src/generators/ngrx/lib/validate-options.d.ts.map +0 -1
- package/src/generators/ngrx/lib/validate-options.js +0 -14
- package/src/generators/ngrx/ngrx.d.ts +0 -8
- package/src/generators/ngrx/ngrx.d.ts.map +0 -1
- package/src/generators/ngrx/ngrx.js +0 -28
- package/src/generators/ngrx/schema.d.ts +0 -14
- package/src/generators/ngrx/schema.json +0 -102
- package/src/generators/setup-tailwind/files/v2/tailwind.config.js__tmpl__ +0 -18
- package/src/generators/setup-tailwind/files/v3/tailwind.config.js__tmpl__ +0 -14
- package/src/generators/setup-tailwind/lib/add-tailwind-config.d.ts +0 -4
- package/src/generators/setup-tailwind/lib/add-tailwind-config.d.ts.map +0 -1
- package/src/generators/setup-tailwind/lib/add-tailwind-config.js +0 -17
- package/src/generators/setup-tailwind/lib/add-tailwind-required-packages.d.ts +0 -3
- package/src/generators/setup-tailwind/lib/add-tailwind-required-packages.d.ts.map +0 -1
- package/src/generators/setup-tailwind/lib/add-tailwind-required-packages.js +0 -13
- package/src/generators/setup-tailwind/lib/detect-tailwind-installed-version.d.ts +0 -3
- package/src/generators/setup-tailwind/lib/detect-tailwind-installed-version.d.ts.map +0 -1
- package/src/generators/setup-tailwind/lib/detect-tailwind-installed-version.js +0 -18
- package/src/generators/setup-tailwind/lib/index.d.ts +0 -7
- package/src/generators/setup-tailwind/lib/index.d.ts.map +0 -1
- package/src/generators/setup-tailwind/lib/index.js +0 -9
- package/src/generators/setup-tailwind/lib/normalize-options.d.ts +0 -3
- package/src/generators/setup-tailwind/lib/normalize-options.d.ts.map +0 -1
- package/src/generators/setup-tailwind/lib/normalize-options.js +0 -9
- package/src/generators/setup-tailwind/lib/update-application-styles.d.ts +0 -4
- package/src/generators/setup-tailwind/lib/update-application-styles.d.ts.map +0 -1
- package/src/generators/setup-tailwind/lib/update-application-styles.js +0 -53
- package/src/generators/setup-tailwind/lib/validate-build-target.d.ts +0 -4
- package/src/generators/setup-tailwind/lib/validate-build-target.d.ts.map +0 -1
- package/src/generators/setup-tailwind/lib/validate-build-target.js +0 -24
- package/src/generators/setup-tailwind/schema.d.ts +0 -11
- package/src/generators/setup-tailwind/schema.json +0 -42
- package/src/generators/setup-tailwind/setup-tailwind.d.ts +0 -5
- package/src/generators/setup-tailwind/setup-tailwind.d.ts.map +0 -1
- 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,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,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"}
|