@ngxs/store 3.8.2 → 18.0.0-dev.master-f4c2c19
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/README.md +1 -1
- package/{esm2015/index.js → esm2022/index.mjs} +2 -2
- package/esm2022/internals/custom-rxjs-subjects.mjs +92 -0
- package/esm2022/internals/index.mjs +10 -0
- package/esm2022/internals/initial-state.mjs +18 -0
- package/esm2022/internals/internal-tokens.mjs +6 -0
- package/esm2022/internals/memoize.mjs +45 -0
- package/esm2022/internals/metadata.mjs +57 -0
- package/esm2022/internals/ngxs-app-bootstrapped-state.mjs +19 -0
- package/esm2022/internals/state-stream.mjs +32 -0
- package/esm2022/internals/state-token.mjs +17 -0
- package/esm2022/internals/symbols.mjs +11 -0
- package/esm2022/internals/testing/fresh-platform.mjs +72 -0
- package/{esm2015/internals/testing/helpers/ngxs-test.component.js → esm2022/internals/testing/helpers/ngxs-test.component.mjs} +4 -4
- package/esm2022/internals/testing/helpers/ngxs-test.module.mjs +20 -0
- package/{esm2015/internals/testing/index.js → esm2022/internals/testing/index.mjs} +2 -2
- package/esm2022/internals/testing/ngxs.setup.mjs +48 -0
- package/{esm2015/internals/testing/skip-console-logging.js → esm2022/internals/testing/skip-console-logging.mjs} +1 -1
- package/esm2022/internals/testing/symbol.mjs +2 -0
- package/esm2022/operators/append.mjs +20 -0
- package/esm2022/operators/iif.mjs +38 -0
- package/esm2022/operators/insert-item.mjs +29 -0
- package/esm2022/operators/patch.mjs +21 -0
- package/esm2022/operators/remove-item.mjs +22 -0
- package/esm2022/operators/update-item.mjs +40 -0
- package/esm2022/plugins/actions.mjs +16 -0
- package/esm2022/plugins/index.mjs +4 -0
- package/esm2022/plugins/ngxs-store-plugins.mjs +5 -0
- package/esm2022/plugins/symbols.mjs +6 -0
- package/esm2022/plugins/utils.mjs +51 -0
- package/esm2022/src/actions/symbols.mjs +2 -0
- package/esm2022/src/actions-stream.mjs +52 -0
- package/esm2022/src/configs/messages.config.mjs +48 -0
- package/esm2022/src/decorators/action.mjs +31 -0
- package/esm2022/src/decorators/select/select-factory.mjs +29 -0
- package/esm2022/src/decorators/select/select.mjs +29 -0
- package/esm2022/src/decorators/select/symbols.mjs +29 -0
- package/esm2022/src/decorators/selector/selector.mjs +29 -0
- package/esm2022/src/decorators/selector/symbols.mjs +2 -0
- package/esm2022/src/decorators/selector-options.mjs +21 -0
- package/esm2022/src/decorators/state.mjs +35 -0
- package/esm2022/src/dev-features/ngxs-development.module.mjs +28 -0
- package/esm2022/src/dev-features/ngxs-unhandled-actions-logger.mjs +45 -0
- package/esm2022/src/dev-features/symbols.mjs +7 -0
- package/esm2022/src/execution/dispatch-outside-zone-ngxs-execution-strategy.mjs +55 -0
- package/{esm2015/src/execution/internal-ngxs-execution-strategy.js → esm2022/src/execution/internal-ngxs-execution-strategy.mjs} +6 -6
- package/{esm2015/src/execution/noop-ngxs-execution-strategy.js → esm2022/src/execution/noop-ngxs-execution-strategy.mjs} +4 -4
- package/esm2022/src/execution/symbols.mjs +29 -0
- package/esm2022/src/internal/dispatcher.mjs +106 -0
- package/esm2022/src/internal/fallback-subscriber.mjs +29 -0
- package/esm2022/src/internal/internals.mjs +206 -0
- package/esm2022/src/internal/lifecycle-state-manager.mjs +86 -0
- package/esm2022/src/internal/state-context-factory.mjs +71 -0
- package/esm2022/src/internal/state-factory.mjs +311 -0
- package/esm2022/src/internal/state-operations.mjs +63 -0
- package/esm2022/src/internal/state-operators.mjs +20 -0
- package/esm2022/src/internal/unhandled-rxjs-error-callback.mjs +39 -0
- package/esm2022/src/ivy/ivy-enabled-in-dev-mode.mjs +25 -0
- package/esm2022/src/module.mjs +27 -0
- package/esm2022/src/modules/ngxs-feature.module.mjs +18 -0
- package/esm2022/src/modules/ngxs-root.module.mjs +18 -0
- package/esm2022/src/ngxs-unhandled-error-handler.mjs +29 -0
- package/esm2022/src/operators/of-action.mjs +104 -0
- package/esm2022/src/plugin-manager.mjs +37 -0
- package/esm2022/src/plugin_api.mjs +2 -0
- package/{esm2015/src/private_api.js → esm2022/src/private_api.mjs} +2 -1
- package/esm2022/src/public_api.mjs +20 -0
- package/esm2022/src/selectors/create-model-selector.mjs +30 -0
- package/esm2022/src/selectors/create-pick-selector.mjs +16 -0
- package/esm2022/src/selectors/create-property-selectors.mjs +20 -0
- package/esm2022/src/selectors/create-selector.mjs +9 -0
- package/esm2022/src/selectors/private_api.mjs +2 -0
- package/esm2022/src/selectors/selector-checks.util.mjs +18 -0
- package/esm2022/src/selectors/selector-metadata.mjs +35 -0
- package/esm2022/src/selectors/selector-models.mjs +2 -0
- package/esm2022/src/selectors/selector-types.util.mjs +2 -0
- package/esm2022/src/selectors/selector-utils.mjs +95 -0
- package/esm2022/src/standalone-features/feature-providers.mjs +20 -0
- package/esm2022/src/standalone-features/index.mjs +5 -0
- package/esm2022/src/standalone-features/initializers.mjs +89 -0
- package/esm2022/src/standalone-features/plugin.mjs +20 -0
- package/esm2022/src/standalone-features/preboot.mjs +32 -0
- package/esm2022/src/standalone-features/provide-states.mjs +26 -0
- package/esm2022/src/standalone-features/provide-store.mjs +26 -0
- package/esm2022/src/standalone-features/root-providers.mjs +47 -0
- package/esm2022/src/store.mjs +117 -0
- package/esm2022/src/symbols.mjs +87 -0
- package/esm2022/src/utils/compose.mjs +26 -0
- package/esm2022/src/utils/create-dispatch-map.mjs +11 -0
- package/esm2022/src/utils/create-select-map.mjs +13 -0
- package/esm2022/src/utils/dispatch.mjs +7 -0
- package/{esm2015/src/utils/freeze.js → esm2022/src/utils/freeze.mjs} +1 -1
- package/esm2022/src/utils/public_api.mjs +5 -0
- package/esm2022/src/utils/select.mjs +19 -0
- package/esm2022/src/utils/store-validators.mjs +25 -0
- package/{fesm2015/ngxs-store-internals-testing.js → fesm2022/ngxs-store-internals-testing.mjs} +84 -81
- package/fesm2022/ngxs-store-internals-testing.mjs.map +1 -0
- package/fesm2022/ngxs-store-internals.mjs +296 -0
- package/fesm2022/ngxs-store-internals.mjs.map +1 -0
- package/{fesm2015/ngxs-store-operators.js → fesm2022/ngxs-store-operators.mjs} +3 -3
- package/fesm2022/ngxs-store-operators.mjs.map +1 -0
- package/fesm2022/ngxs-store-plugins.mjs +80 -0
- package/fesm2022/ngxs-store-plugins.mjs.map +1 -0
- package/{fesm2015/ngxs-store.js → fesm2022/ngxs-store.mjs} +1319 -1265
- package/fesm2022/ngxs-store.mjs.map +1 -0
- package/index.d.ts +1 -1
- package/{src/internal → internals}/custom-rxjs-subjects.d.ts +2 -2
- package/internals/index.d.ts +8 -4
- package/internals/initial-state.d.ts +5 -5
- package/internals/memoize.d.ts +1 -1
- package/internals/metadata.d.ts +25 -0
- package/internals/ngxs-app-bootstrapped-state.d.ts +8 -0
- package/internals/state-stream.d.ts +15 -0
- package/internals/state-token.d.ts +7 -0
- package/internals/symbols.d.ts +84 -3
- package/internals/testing/helpers/ngxs-test.component.d.ts +1 -1
- package/internals/testing/index.d.ts +2 -2
- package/internals/testing/symbol.d.ts +2 -2
- package/operators/patch.d.ts +2 -2
- package/operators/types.d.ts +5 -5
- package/operators/utils.d.ts +1 -1
- package/package.json +44 -13
- package/{src/actions → plugins}/actions.d.ts +3 -3
- package/plugins/index.d.ts +3 -0
- package/plugins/symbols.d.ts +13 -0
- package/{src/utils → plugins}/utils.d.ts +0 -17
- package/schematics/collection.json +36 -0
- package/schematics/src/actions/actions.factory.d.ts +3 -0
- package/schematics/src/actions/actions.factory.js +24 -0
- package/schematics/src/actions/actions.factory.js.map +1 -0
- package/schematics/src/actions/files/__name__.actions.ts__template__ +4 -0
- package/schematics/src/actions/schema.json +35 -0
- package/schematics/src/ng-add/add-declaration.d.ts +4 -0
- package/schematics/src/ng-add/add-declaration.js +109 -0
- package/schematics/src/ng-add/add-declaration.js.map +1 -0
- package/schematics/src/ng-add/ng-add.factory.d.ts +9 -0
- package/schematics/src/ng-add/ng-add.factory.js +89 -0
- package/schematics/src/ng-add/ng-add.factory.js.map +1 -0
- package/schematics/src/ng-add/schema.json +72 -0
- package/schematics/src/starter-kit/files/store/auth/auth.actions.ts__template__ +6 -0
- package/schematics/src/starter-kit/files/store/auth/auth.state.spec.ts__template__ +55 -0
- package/schematics/src/starter-kit/files/store/auth/auth.state.ts__template__ +47 -0
- package/schematics/src/starter-kit/files/store/dashboard/index.ts__template__ +4 -0
- package/schematics/src/starter-kit/files/store/dashboard/states/dictionary/dictionary.actions.ts__template__ +10 -0
- package/schematics/src/starter-kit/files/store/dashboard/states/dictionary/dictionary.state.spec.ts__template__ +92 -0
- package/schematics/src/starter-kit/files/store/dashboard/states/dictionary/dictionary.state.ts__template__ +62 -0
- package/schematics/src/starter-kit/files/store/dashboard/states/user/user.actions.ts__template__ +6 -0
- package/schematics/src/starter-kit/files/store/dashboard/states/user/user.state.spec.ts__template__ +61 -0
- package/schematics/src/starter-kit/files/store/dashboard/states/user/user.state.ts__template__ +42 -0
- package/schematics/src/starter-kit/files/store/store.config.ts__template__ +39 -0
- package/schematics/src/starter-kit/files/store/store.module.ts__template__ +22 -0
- package/schematics/src/starter-kit/schema.json +22 -0
- package/schematics/src/starter-kit/starter-kit.factory.d.ts +3 -0
- package/schematics/src/starter-kit/starter-kit.factory.js +21 -0
- package/schematics/src/starter-kit/starter-kit.factory.js.map +1 -0
- package/schematics/src/state/files/__name__.state.spec.ts__template__ +25 -0
- package/schematics/src/state/files/__name__.state.ts__template__ +22 -0
- package/schematics/src/state/schema.json +44 -0
- package/schematics/src/state/state.factory.d.ts +3 -0
- package/schematics/src/state/state.factory.js +29 -0
- package/schematics/src/state/state.factory.js.map +1 -0
- package/schematics/src/store/files/__name__.actions.ts__template__ +4 -0
- package/schematics/src/store/files/__name__.state.spec.ts__template__ +26 -0
- package/schematics/src/store/files/__name__.state.ts__template__ +29 -0
- package/schematics/src/store/schema.json +44 -0
- package/schematics/src/store/store.factory.d.ts +3 -0
- package/schematics/src/store/store.factory.js +29 -0
- package/schematics/src/store/store.factory.js.map +1 -0
- package/schematics/src/utils/common/lib.config.d.ts +10 -0
- package/schematics/src/utils/common/lib.config.js +15 -0
- package/schematics/src/utils/common/lib.config.js.map +1 -0
- package/schematics/src/utils/common/project-files.config.d.ts +3 -0
- package/schematics/src/utils/common/project-files.config.js +7 -0
- package/schematics/src/utils/common/project-files.config.js.map +1 -0
- package/schematics/src/utils/common/properties.d.ts +1 -0
- package/schematics/src/utils/common/properties.js +8 -0
- package/schematics/src/utils/common/properties.js.map +1 -0
- package/schematics/src/utils/config.d.ts +119 -0
- package/schematics/src/utils/config.js +21 -0
- package/schematics/src/utils/config.js.map +1 -0
- package/schematics/src/utils/generate-utils.d.ts +4 -0
- package/schematics/src/utils/generate-utils.js +14 -0
- package/schematics/src/utils/generate-utils.js.map +1 -0
- package/schematics/src/utils/interfaces/package.interface.d.ts +7 -0
- package/schematics/src/utils/interfaces/package.interface.js +3 -0
- package/schematics/src/utils/interfaces/package.interface.js.map +1 -0
- package/schematics/src/utils/ng-utils/README.md +1 -0
- package/schematics/src/utils/ng-utils/ast-utils.d.ts +99 -0
- package/schematics/src/utils/ng-utils/ast-utils.js +517 -0
- package/schematics/src/utils/ng-utils/ast-utils.js.map +1 -0
- package/schematics/src/utils/ng-utils/ng-ast-utils.d.ts +5 -0
- package/schematics/src/utils/ng-utils/ng-ast-utils.js +67 -0
- package/schematics/src/utils/ng-utils/ng-ast-utils.js.map +1 -0
- package/schematics/src/utils/ng-utils/project.d.ts +2 -0
- package/schematics/src/utils/ng-utils/project.js +27 -0
- package/schematics/src/utils/ng-utils/project.js.map +1 -0
- package/schematics/src/utils/ng-utils/standalone/app_config.d.ts +16 -0
- package/schematics/src/utils/ng-utils/standalone/app_config.js +84 -0
- package/schematics/src/utils/ng-utils/standalone/app_config.js.map +1 -0
- package/schematics/src/utils/ng-utils/standalone/code_block.d.ts +46 -0
- package/schematics/src/utils/ng-utils/standalone/code_block.js +73 -0
- package/schematics/src/utils/ng-utils/standalone/code_block.js.map +1 -0
- package/schematics/src/utils/ng-utils/standalone/index.d.ts +1 -0
- package/schematics/src/utils/ng-utils/standalone/index.js +7 -0
- package/schematics/src/utils/ng-utils/standalone/index.js.map +1 -0
- package/schematics/src/utils/ng-utils/standalone/rules.d.ts +38 -0
- package/schematics/src/utils/ng-utils/standalone/rules.js +195 -0
- package/schematics/src/utils/ng-utils/standalone/rules.js.map +1 -0
- package/schematics/src/utils/ng-utils/standalone/util.d.ts +28 -0
- package/schematics/src/utils/ng-utils/standalone/util.js +138 -0
- package/schematics/src/utils/ng-utils/standalone/util.js.map +1 -0
- package/schematics/src/utils/normalize-options.d.ts +11 -0
- package/schematics/src/utils/normalize-options.js +27 -0
- package/schematics/src/utils/normalize-options.js.map +1 -0
- package/schematics/src/utils/project.d.ts +19 -0
- package/schematics/src/utils/project.js +46 -0
- package/schematics/src/utils/project.js.map +1 -0
- package/schematics/src/utils/versions.json +3 -0
- package/src/actions/symbols.d.ts +3 -17
- package/src/actions-stream.d.ts +2 -2
- package/src/configs/messages.config.d.ts +3 -1
- package/src/decorators/action.d.ts +28 -3
- package/src/decorators/select/select.d.ts +3 -0
- package/src/decorators/select/symbols.d.ts +2 -3
- package/src/decorators/selector/selector.d.ts +2 -3
- package/src/decorators/selector/symbols.d.ts +73 -4
- package/src/decorators/selector-options.d.ts +2 -2
- package/src/decorators/state.d.ts +2 -3
- package/src/dev-features/ngxs-development.module.d.ts +1 -0
- package/src/execution/symbols.d.ts +8 -2
- package/src/internal/dispatcher.d.ts +5 -5
- package/src/internal/fallback-subscriber.d.ts +3 -0
- package/src/internal/internals.d.ts +13 -69
- package/src/internal/lifecycle-state-manager.d.ts +6 -6
- package/src/internal/state-factory.d.ts +8 -6
- package/src/internal/state-operations.d.ts +2 -2
- package/src/internal/unhandled-rxjs-error-callback.d.ts +2 -0
- package/src/module.d.ts +3 -14
- package/src/modules/ngxs-feature.module.d.ts +2 -9
- package/src/modules/ngxs-root.module.d.ts +2 -9
- package/src/ngxs-unhandled-error-handler.d.ts +16 -0
- package/src/operators/of-action.d.ts +3 -3
- package/src/plugin-manager.d.ts +1 -1
- package/src/plugin_api.d.ts +1 -5
- package/src/private_api.d.ts +1 -0
- package/src/public_api.d.ts +11 -8
- package/src/selectors/create-model-selector.d.ts +2 -2
- package/src/selectors/create-pick-selector.d.ts +1 -1
- package/src/selectors/create-property-selectors.d.ts +3 -3
- package/src/selectors/create-selector.d.ts +10 -10
- package/src/selectors/private_api.d.ts +7 -0
- package/src/selectors/selector-checks.util.d.ts +2 -2
- package/src/selectors/selector-metadata.d.ts +4 -4
- package/src/selectors/selector-models.d.ts +4 -4
- package/src/selectors/selector-types.util.d.ts +6 -7
- package/src/selectors/selector-utils.d.ts +3 -3
- package/src/standalone-features/feature-providers.d.ts +7 -0
- package/src/standalone-features/index.d.ts +4 -0
- package/src/standalone-features/initializers.d.ts +29 -0
- package/src/standalone-features/plugin.d.ts +17 -0
- package/src/standalone-features/preboot.d.ts +26 -0
- package/src/standalone-features/provide-states.d.ts +18 -0
- package/src/standalone-features/provide-store.d.ts +22 -0
- package/src/standalone-features/root-providers.d.ts +8 -0
- package/src/store.d.ts +13 -15
- package/src/symbols.d.ts +12 -54
- package/src/utils/compose.d.ts +1 -1
- package/src/utils/create-dispatch-map.d.ts +4 -0
- package/src/utils/create-select-map.d.ts +4 -0
- package/src/utils/dispatch.d.ts +2 -0
- package/src/utils/public_api.d.ts +4 -0
- package/src/utils/select.d.ts +16 -0
- package/src/utils/store-validators.d.ts +4 -3
- package/bundles/ngxs-store-internals-testing.umd.js +0 -684
- package/bundles/ngxs-store-internals-testing.umd.js.map +0 -1
- package/bundles/ngxs-store-internals.umd.js +0 -141
- package/bundles/ngxs-store-internals.umd.js.map +0 -1
- package/bundles/ngxs-store-operators.umd.js +0 -224
- package/bundles/ngxs-store-operators.umd.js.map +0 -1
- package/bundles/ngxs-store.umd.js +0 -3076
- package/bundles/ngxs-store.umd.js.map +0 -1
- package/esm2015/internals/index.js +0 -5
- package/esm2015/internals/initial-state.js +0 -17
- package/esm2015/internals/internal-tokens.js +0 -5
- package/esm2015/internals/memoize.js +0 -45
- package/esm2015/internals/ngxs-bootstrapper.js +0 -29
- package/esm2015/internals/src/symbols.js +0 -2
- package/esm2015/internals/symbols.js +0 -2
- package/esm2015/internals/testing/fresh-platform.js +0 -70
- package/esm2015/internals/testing/helpers/ngxs-test.module.js +0 -21
- package/esm2015/internals/testing/ngxs.setup.js +0 -46
- package/esm2015/internals/testing/symbol.js +0 -2
- package/esm2015/operators/append.js +0 -20
- package/esm2015/operators/iif.js +0 -38
- package/esm2015/operators/insert-item.js +0 -29
- package/esm2015/operators/patch.js +0 -21
- package/esm2015/operators/remove-item.js +0 -22
- package/esm2015/operators/update-item.js +0 -40
- package/esm2015/src/actions/actions.js +0 -16
- package/esm2015/src/actions/symbols.js +0 -2
- package/esm2015/src/actions-stream.js +0 -52
- package/esm2015/src/configs/messages.config.js +0 -36
- package/esm2015/src/decorators/action.js +0 -33
- package/esm2015/src/decorators/select/select-factory.js +0 -29
- package/esm2015/src/decorators/select/select.js +0 -26
- package/esm2015/src/decorators/select/symbols.js +0 -29
- package/esm2015/src/decorators/selector/selector.js +0 -32
- package/esm2015/src/decorators/selector/symbols.js +0 -2
- package/esm2015/src/decorators/selector-options.js +0 -21
- package/esm2015/src/decorators/state.js +0 -36
- package/esm2015/src/dev-features/ngxs-development.module.js +0 -22
- package/esm2015/src/dev-features/ngxs-unhandled-actions-logger.js +0 -46
- package/esm2015/src/dev-features/symbols.js +0 -6
- package/esm2015/src/execution/dispatch-outside-zone-ngxs-execution-strategy.js +0 -57
- package/esm2015/src/execution/symbols.js +0 -23
- package/esm2015/src/internal/custom-rxjs-subjects.js +0 -92
- package/esm2015/src/internal/dispatcher.js +0 -104
- package/esm2015/src/internal/error-handler.js +0 -64
- package/esm2015/src/internal/internals.js +0 -248
- package/esm2015/src/internal/lifecycle-state-manager.js +0 -79
- package/esm2015/src/internal/state-context-factory.js +0 -68
- package/esm2015/src/internal/state-factory.js +0 -288
- package/esm2015/src/internal/state-operations.js +0 -63
- package/esm2015/src/internal/state-operators.js +0 -20
- package/esm2015/src/internal/state-stream.js +0 -25
- package/esm2015/src/ivy/ivy-enabled-in-dev-mode.js +0 -25
- package/esm2015/src/module.js +0 -88
- package/esm2015/src/modules/ngxs-feature.module.js +0 -45
- package/esm2015/src/modules/ngxs-root.module.js +0 -41
- package/esm2015/src/operators/of-action.js +0 -102
- package/esm2015/src/plugin-manager.js +0 -37
- package/esm2015/src/plugin_api.js +0 -6
- package/esm2015/src/public_api.js +0 -27
- package/esm2015/src/public_to_deprecate.js +0 -14
- package/esm2015/src/selectors/create-model-selector.js +0 -30
- package/esm2015/src/selectors/create-pick-selector.js +0 -16
- package/esm2015/src/selectors/create-property-selectors.js +0 -20
- package/esm2015/src/selectors/create-selector.js +0 -9
- package/esm2015/src/selectors/selector-checks.util.js +0 -18
- package/esm2015/src/selectors/selector-metadata.js +0 -30
- package/esm2015/src/selectors/selector-models.js +0 -2
- package/esm2015/src/selectors/selector-types.util.js +0 -2
- package/esm2015/src/selectors/selector-utils.js +0 -74
- package/esm2015/src/state-token/state-token.js +0 -17
- package/esm2015/src/state-token/symbols.js +0 -2
- package/esm2015/src/store.js +0 -107
- package/esm2015/src/symbols.js +0 -58
- package/esm2015/src/utils/compose.js +0 -26
- package/esm2015/src/utils/store-validators.js +0 -25
- package/esm2015/src/utils/utils.js +0 -92
- package/fesm2015/ngxs-store-internals-testing.js.map +0 -1
- package/fesm2015/ngxs-store-internals.js +0 -101
- package/fesm2015/ngxs-store-internals.js.map +0 -1
- package/fesm2015/ngxs-store-operators.js.map +0 -1
- package/fesm2015/ngxs-store.js.map +0 -1
- package/internals/ngxs-bootstrapper.d.ts +0 -16
- package/internals/ngxs-store-internals.d.ts +0 -5
- package/internals/package.json +0 -10
- package/internals/src/symbols.d.ts +0 -7
- package/internals/testing/ngxs-store-internals-testing.d.ts +0 -5
- package/internals/testing/package.json +0 -10
- package/ngxs-store.d.ts +0 -5
- package/operators/ngxs-store-operators.d.ts +0 -5
- package/operators/package.json +0 -10
- package/src/internal/error-handler.d.ts +0 -26
- package/src/internal/state-stream.d.ts +0 -14
- package/src/public_to_deprecate.d.ts +0 -21
- package/src/state-token/state-token.d.ts +0 -7
- package/src/state-token/symbols.d.ts +0 -5
- /package/{esm2015/internals/ngxs-store-internals.js → esm2022/internals/ngxs-store-internals.mjs} +0 -0
- /package/{esm2015/internals/testing/ngxs-store-internals-testing.js → esm2022/internals/testing/ngxs-store-internals-testing.mjs} +0 -0
- /package/{esm2015/ngxs-store.js → esm2022/ngxs-store.mjs} +0 -0
- /package/{esm2015/operators/compose.js → esm2022/operators/compose.mjs} +0 -0
- /package/{esm2015/operators/index.js → esm2022/operators/index.mjs} +0 -0
- /package/{esm2015/operators/ngxs-store-operators.js → esm2022/operators/ngxs-store-operators.mjs} +0 -0
- /package/{esm2015/operators/types.js → esm2022/operators/types.mjs} +0 -0
- /package/{esm2015/operators/utils.js → esm2022/operators/utils.mjs} +0 -0
- /package/{esm2015/src/operators/leave-ngxs.js → esm2022/src/operators/leave-ngxs.mjs} +0 -0
- /package/{esm2015/src/selectors/index.js → esm2022/src/selectors/index.mjs} +0 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { inject } from '@angular/core';
|
|
2
|
+
import { Store } from '../store';
|
|
3
|
+
/**
|
|
4
|
+
* This function serves as a utility and has multiple purposes.
|
|
5
|
+
* Firstly, it allows you to select properties from the state class
|
|
6
|
+
* without having to inject the store class and use `this.store.selectSignal`,
|
|
7
|
+
* resulting in a more concise implementation. Secondly, it can be used with
|
|
8
|
+
* other solutions such as NgRx signal store with its `signalStoreFeature` or
|
|
9
|
+
* `withComputed` functionalities.
|
|
10
|
+
*
|
|
11
|
+
* Please note that it's named `select` instead of `selectSignal` because
|
|
12
|
+
* signals are evolving into first-class primitives in Angular, displacing other
|
|
13
|
+
* primitives such as observables. Observables represent a stream of events,
|
|
14
|
+
* whereas signals represent a single value changing over time.
|
|
15
|
+
*/
|
|
16
|
+
export function select(selector) {
|
|
17
|
+
return inject(Store).selectSignal(selector);
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3RvcmUvc3JjL3V0aWxzL3NlbGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQVUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFHakM7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLE1BQU0sQ0FBSSxRQUEwQjtJQUNsRCxPQUFPLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDOUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpZ25hbCwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnLi4vc3RvcmUnO1xuaW1wb3J0IHsgVHlwZWRTZWxlY3RvciB9IGZyb20gJy4uL3NlbGVjdG9ycyc7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiBzZXJ2ZXMgYXMgYSB1dGlsaXR5IGFuZCBoYXMgbXVsdGlwbGUgcHVycG9zZXMuXG4gKiBGaXJzdGx5LCBpdCBhbGxvd3MgeW91IHRvIHNlbGVjdCBwcm9wZXJ0aWVzIGZyb20gdGhlIHN0YXRlIGNsYXNzXG4gKiB3aXRob3V0IGhhdmluZyB0byBpbmplY3QgdGhlIHN0b3JlIGNsYXNzIGFuZCB1c2UgYHRoaXMuc3RvcmUuc2VsZWN0U2lnbmFsYCxcbiAqIHJlc3VsdGluZyBpbiBhIG1vcmUgY29uY2lzZSBpbXBsZW1lbnRhdGlvbi4gU2Vjb25kbHksIGl0IGNhbiBiZSB1c2VkIHdpdGhcbiAqIG90aGVyIHNvbHV0aW9ucyBzdWNoIGFzIE5nUnggc2lnbmFsIHN0b3JlIHdpdGggaXRzIGBzaWduYWxTdG9yZUZlYXR1cmVgIG9yXG4gKiBgd2l0aENvbXB1dGVkYCBmdW5jdGlvbmFsaXRpZXMuXG4gKlxuICogUGxlYXNlIG5vdGUgdGhhdCBpdCdzIG5hbWVkIGBzZWxlY3RgIGluc3RlYWQgb2YgYHNlbGVjdFNpZ25hbGAgYmVjYXVzZVxuICogc2lnbmFscyBhcmUgZXZvbHZpbmcgaW50byBmaXJzdC1jbGFzcyBwcmltaXRpdmVzIGluIEFuZ3VsYXIsIGRpc3BsYWNpbmcgb3RoZXJcbiAqIHByaW1pdGl2ZXMgc3VjaCBhcyBvYnNlcnZhYmxlcy4gT2JzZXJ2YWJsZXMgcmVwcmVzZW50IGEgc3RyZWFtIG9mIGV2ZW50cyxcbiAqIHdoZXJlYXMgc2lnbmFscyByZXByZXNlbnQgYSBzaW5nbGUgdmFsdWUgY2hhbmdpbmcgb3ZlciB0aW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VsZWN0PFQ+KHNlbGVjdG9yOiBUeXBlZFNlbGVjdG9yPFQ+KTogU2lnbmFsPFQ+IHtcbiAgcmV0dXJuIGluamVjdChTdG9yZSkuc2VsZWN0U2lnbmFsKHNlbGVjdG9yKTtcbn1cbiJdfQ==
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { ɵgetStoreMetadata } from '@ngxs/store/internals';
|
|
2
|
+
import { throwStateDecoratorError, throwStateNameError, throwStateNamePropertyError, throwStateUniqueError } from '../configs/messages.config';
|
|
3
|
+
const stateNameRegex = new RegExp('^[a-zA-Z0-9_]+$');
|
|
4
|
+
export function ensureStateNameIsValid(name) {
|
|
5
|
+
if (!name) {
|
|
6
|
+
throwStateNamePropertyError();
|
|
7
|
+
}
|
|
8
|
+
else if (!stateNameRegex.test(name)) {
|
|
9
|
+
throwStateNameError(name);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function ensureStateNameIsUnique(stateName, state, statesByName) {
|
|
13
|
+
const existingState = statesByName[stateName];
|
|
14
|
+
if (existingState && existingState !== state) {
|
|
15
|
+
throwStateUniqueError(stateName, state.name, existingState.name);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
export function ensureStatesAreDecorated(stateClasses) {
|
|
19
|
+
stateClasses.forEach((stateClass) => {
|
|
20
|
+
if (!ɵgetStoreMetadata(stateClass)) {
|
|
21
|
+
throwStateDecoratorError(stateClass.name);
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUtdmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0b3JlL3NyYy91dGlscy9zdG9yZS12YWxpZGF0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBdUIsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUcvRSxPQUFPLEVBQ0wsd0JBQXdCLEVBQ3hCLG1CQUFtQixFQUNuQiwyQkFBMkIsRUFDM0IscUJBQXFCLEVBQ3RCLE1BQU0sNEJBQTRCLENBQUM7QUFFcEMsTUFBTSxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztBQUVyRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsSUFBbUI7SUFDeEQsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ1YsMkJBQTJCLEVBQUUsQ0FBQztJQUNoQyxDQUFDO1NBQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUN0QyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0FBQ0gsQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsU0FBaUIsRUFDakIsS0FBMEIsRUFDMUIsWUFBMEI7SUFFMUIsTUFBTSxhQUFhLEdBQUcsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlDLElBQUksYUFBYSxJQUFJLGFBQWEsS0FBSyxLQUFLLEVBQUUsQ0FBQztRQUM3QyxxQkFBcUIsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbkUsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsWUFBbUM7SUFDMUUsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFVBQStCLEVBQUUsRUFBRTtRQUN2RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQztZQUNuQyx3QkFBd0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IMm1U3RhdGVDbGFzc0ludGVybmFsLCDJtWdldFN0b3JlTWV0YWRhdGEgfSBmcm9tICdAbmd4cy9zdG9yZS9pbnRlcm5hbHMnO1xuXG5pbXBvcnQgeyBTdGF0ZXNCeU5hbWUgfSBmcm9tICcuLi9pbnRlcm5hbC9pbnRlcm5hbHMnO1xuaW1wb3J0IHtcbiAgdGhyb3dTdGF0ZURlY29yYXRvckVycm9yLFxuICB0aHJvd1N0YXRlTmFtZUVycm9yLFxuICB0aHJvd1N0YXRlTmFtZVByb3BlcnR5RXJyb3IsXG4gIHRocm93U3RhdGVVbmlxdWVFcnJvclxufSBmcm9tICcuLi9jb25maWdzL21lc3NhZ2VzLmNvbmZpZyc7XG5cbmNvbnN0IHN0YXRlTmFtZVJlZ2V4ID0gbmV3IFJlZ0V4cCgnXlthLXpBLVowLTlfXSskJyk7XG5cbmV4cG9ydCBmdW5jdGlvbiBlbnN1cmVTdGF0ZU5hbWVJc1ZhbGlkKG5hbWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHwgbmV2ZXIge1xuICBpZiAoIW5hbWUpIHtcbiAgICB0aHJvd1N0YXRlTmFtZVByb3BlcnR5RXJyb3IoKTtcbiAgfSBlbHNlIGlmICghc3RhdGVOYW1lUmVnZXgudGVzdChuYW1lKSkge1xuICAgIHRocm93U3RhdGVOYW1lRXJyb3IobmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVN0YXRlTmFtZUlzVW5pcXVlKFxuICBzdGF0ZU5hbWU6IHN0cmluZyxcbiAgc3RhdGU6IMm1U3RhdGVDbGFzc0ludGVybmFsLFxuICBzdGF0ZXNCeU5hbWU6IFN0YXRlc0J5TmFtZVxuKTogdm9pZCB8IG5ldmVyIHtcbiAgY29uc3QgZXhpc3RpbmdTdGF0ZSA9IHN0YXRlc0J5TmFtZVtzdGF0ZU5hbWVdO1xuICBpZiAoZXhpc3RpbmdTdGF0ZSAmJiBleGlzdGluZ1N0YXRlICE9PSBzdGF0ZSkge1xuICAgIHRocm93U3RhdGVVbmlxdWVFcnJvcihzdGF0ZU5hbWUsIHN0YXRlLm5hbWUsIGV4aXN0aW5nU3RhdGUubmFtZSk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGVuc3VyZVN0YXRlc0FyZURlY29yYXRlZChzdGF0ZUNsYXNzZXM6IMm1U3RhdGVDbGFzc0ludGVybmFsW10pOiB2b2lkIHwgbmV2ZXIge1xuICBzdGF0ZUNsYXNzZXMuZm9yRWFjaCgoc3RhdGVDbGFzczogybVTdGF0ZUNsYXNzSW50ZXJuYWwpID0+IHtcbiAgICBpZiAoIcm1Z2V0U3RvcmVNZXRhZGF0YShzdGF0ZUNsYXNzKSkge1xuICAgICAgdGhyb3dTdGF0ZURlY29yYXRvckVycm9yKHN0YXRlQ2xhc3MubmFtZSk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
|
package/{fesm2015/ngxs-store-internals-testing.js → fesm2022/ngxs-store-internals-testing.mjs}
RENAMED
|
@@ -1,19 +1,86 @@
|
|
|
1
|
-
import * as i0 from '@angular/core';
|
|
2
|
-
import { Component, NgModule, ApplicationRef, destroyPlatform, VERSION, createPlatform } from '@angular/core';
|
|
3
1
|
import { TestBed } from '@angular/core/testing';
|
|
4
2
|
import { DOCUMENT } from '@angular/common';
|
|
5
|
-
import { BrowserModule, ɵBrowserDomAdapter
|
|
3
|
+
import { ɵgetDOM as _getDOM, BrowserModule, ɵBrowserDomAdapter as _BrowserDomAdapter } from '@angular/platform-browser';
|
|
4
|
+
import * as i0 from '@angular/core';
|
|
5
|
+
import { destroyPlatform, VERSION, createPlatform, Component, NgModule, ApplicationRef } from '@angular/core';
|
|
6
6
|
import { BrowserDynamicTestingModule, platformBrowserDynamicTesting } from '@angular/platform-browser-dynamic/testing';
|
|
7
7
|
import { NgxsModule, Store } from '@ngxs/store';
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
function createRootElement() {
|
|
10
|
+
const document = TestBed.inject(DOCUMENT);
|
|
11
|
+
const root = _getDOM().createElement('app-root', document);
|
|
12
|
+
document.body.appendChild(root);
|
|
13
|
+
}
|
|
14
|
+
function removeRootElement() {
|
|
15
|
+
const root = document.getElementsByTagName('app-root').item(0);
|
|
16
|
+
try {
|
|
17
|
+
document.body.removeChild(root);
|
|
18
|
+
}
|
|
19
|
+
catch { }
|
|
20
|
+
}
|
|
21
|
+
function destroyPlatformBeforeBootstrappingTheNewOne(freshUrl) {
|
|
22
|
+
destroyPlatform();
|
|
23
|
+
resetLocationToUrl(freshUrl);
|
|
24
|
+
createRootElement();
|
|
25
|
+
}
|
|
26
|
+
// As we create our custom platform via `bootstrapModule`
|
|
27
|
+
// we have to destroy it after assetions and revert
|
|
28
|
+
// the previous one
|
|
29
|
+
function resetPlatformAfterBootstrapping() {
|
|
30
|
+
removeRootElement();
|
|
31
|
+
destroyPlatform();
|
|
32
|
+
const version = +VERSION.major;
|
|
33
|
+
// https://github.com/angular/angular/commit/e250db4f261741b04ee4cbad4dec41a8908a12aa
|
|
34
|
+
if (version < 14) {
|
|
35
|
+
createPlatform(TestBed);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function resetLocationToUrl(freshUrl) {
|
|
39
|
+
window.history.replaceState({}, 'Test', freshUrl);
|
|
40
|
+
}
|
|
41
|
+
function freshPlatform(fn) {
|
|
42
|
+
let resolve = null;
|
|
43
|
+
let reject = null;
|
|
44
|
+
let whenDoneIsCalledPromise = null;
|
|
45
|
+
const hasDoneArgument = fn.length === 1;
|
|
46
|
+
if (hasDoneArgument) {
|
|
47
|
+
whenDoneIsCalledPromise = new Promise((_resolve, _reject) => {
|
|
48
|
+
resolve = _resolve;
|
|
49
|
+
reject = _reject;
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return async function testWithAFreshPlatform() {
|
|
53
|
+
try {
|
|
54
|
+
const freshUrl = '/';
|
|
55
|
+
destroyPlatformBeforeBootstrappingTheNewOne(freshUrl);
|
|
56
|
+
if (hasDoneArgument) {
|
|
57
|
+
await fn((error) => {
|
|
58
|
+
if (error) {
|
|
59
|
+
reject(error);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
resolve();
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
await whenDoneIsCalledPromise;
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
await fn();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
resetPlatformAfterBootstrapping();
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
9
76
|
|
|
10
77
|
class NgxsTestComponent {
|
|
11
78
|
ngOnInit() { }
|
|
12
79
|
ngAfterViewInit() { }
|
|
80
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: NgxsTestComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
81
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.3", type: NgxsTestComponent, selector: "app-root", ngImport: i0, template: '', isInline: true }); }
|
|
13
82
|
}
|
|
14
|
-
|
|
15
|
-
/** @nocollapse */ NgxsTestComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.17", type: NgxsTestComponent, selector: "app-root", ngImport: i0, template: '', isInline: true });
|
|
16
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgxsTestComponent, decorators: [{
|
|
83
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: NgxsTestComponent, decorators: [{
|
|
17
84
|
type: Component,
|
|
18
85
|
args: [{
|
|
19
86
|
selector: 'app-root',
|
|
@@ -25,16 +92,15 @@ class NgxsTestModule {
|
|
|
25
92
|
static ngDoBootstrap(app) {
|
|
26
93
|
app.bootstrap(NgxsTestComponent);
|
|
27
94
|
}
|
|
95
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: NgxsTestModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
96
|
+
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.3", ngImport: i0, type: NgxsTestModule, declarations: [NgxsTestComponent], imports: [BrowserModule] }); }
|
|
97
|
+
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: NgxsTestModule, imports: [BrowserModule] }); }
|
|
28
98
|
}
|
|
29
|
-
|
|
30
|
-
/** @nocollapse */ NgxsTestModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgxsTestModule, declarations: [NgxsTestComponent], imports: [BrowserModule] });
|
|
31
|
-
/** @nocollapse */ NgxsTestModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgxsTestModule, imports: [[BrowserModule]] });
|
|
32
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgxsTestModule, decorators: [{
|
|
99
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: NgxsTestModule, decorators: [{
|
|
33
100
|
type: NgModule,
|
|
34
101
|
args: [{
|
|
35
102
|
imports: [BrowserModule],
|
|
36
|
-
declarations: [NgxsTestComponent]
|
|
37
|
-
entryComponents: [NgxsTestComponent]
|
|
103
|
+
declarations: [NgxsTestComponent]
|
|
38
104
|
}]
|
|
39
105
|
}] });
|
|
40
106
|
|
|
@@ -67,81 +133,18 @@ class NgxsTestBed {
|
|
|
67
133
|
}
|
|
68
134
|
static resetTestBed() {
|
|
69
135
|
TestBed.resetTestEnvironment();
|
|
70
|
-
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting()
|
|
136
|
+
TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {
|
|
137
|
+
teardown: { destroyAfterEach: true }
|
|
138
|
+
});
|
|
71
139
|
}
|
|
72
140
|
static createRootNode(selector = 'app-root') {
|
|
73
141
|
const document = TestBed.inject(DOCUMENT);
|
|
74
|
-
const adapter = new
|
|
142
|
+
const adapter = new _BrowserDomAdapter();
|
|
75
143
|
const root = adapter.createElement(selector);
|
|
76
144
|
document.body.appendChild(root);
|
|
77
145
|
}
|
|
78
146
|
}
|
|
79
147
|
|
|
80
|
-
function createRootElement() {
|
|
81
|
-
const document = TestBed.inject(DOCUMENT);
|
|
82
|
-
const root = ɵgetDOM().createElement('app-root', document);
|
|
83
|
-
document.body.appendChild(root);
|
|
84
|
-
}
|
|
85
|
-
function removeRootElement() {
|
|
86
|
-
const root = document.getElementsByTagName('app-root').item(0);
|
|
87
|
-
try {
|
|
88
|
-
document.body.removeChild(root);
|
|
89
|
-
}
|
|
90
|
-
catch (_a) { }
|
|
91
|
-
}
|
|
92
|
-
function destroyPlatformBeforeBootstrappingTheNewOne() {
|
|
93
|
-
destroyPlatform();
|
|
94
|
-
createRootElement();
|
|
95
|
-
}
|
|
96
|
-
// As we create our custom platform via `bootstrapModule`
|
|
97
|
-
// we have to destroy it after assetions and revert
|
|
98
|
-
// the previous one
|
|
99
|
-
function resetPlatformAfterBootstrapping() {
|
|
100
|
-
removeRootElement();
|
|
101
|
-
destroyPlatform();
|
|
102
|
-
const version = +VERSION.major;
|
|
103
|
-
// https://github.com/angular/angular/commit/e250db4f261741b04ee4cbad4dec41a8908a12aa
|
|
104
|
-
if (version < 14) {
|
|
105
|
-
createPlatform(TestBed);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
function freshPlatform(fn) {
|
|
109
|
-
let resolve = null;
|
|
110
|
-
let reject = null;
|
|
111
|
-
let whenDoneIsCalledPromise = null;
|
|
112
|
-
const hasDoneArgument = fn.length === 1;
|
|
113
|
-
if (hasDoneArgument) {
|
|
114
|
-
whenDoneIsCalledPromise = new Promise((_resolve, _reject) => {
|
|
115
|
-
resolve = _resolve;
|
|
116
|
-
reject = _reject;
|
|
117
|
-
});
|
|
118
|
-
}
|
|
119
|
-
return function testWithAFreshPlatform() {
|
|
120
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
121
|
-
try {
|
|
122
|
-
destroyPlatformBeforeBootstrappingTheNewOne();
|
|
123
|
-
if (hasDoneArgument) {
|
|
124
|
-
yield fn((error) => {
|
|
125
|
-
if (error) {
|
|
126
|
-
reject(error);
|
|
127
|
-
}
|
|
128
|
-
else {
|
|
129
|
-
resolve();
|
|
130
|
-
}
|
|
131
|
-
});
|
|
132
|
-
yield whenDoneIsCalledPromise;
|
|
133
|
-
}
|
|
134
|
-
else {
|
|
135
|
-
yield fn();
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
finally {
|
|
139
|
-
resetPlatformAfterBootstrapping();
|
|
140
|
-
}
|
|
141
|
-
});
|
|
142
|
-
};
|
|
143
|
-
}
|
|
144
|
-
|
|
145
148
|
/// <reference types="jest" />
|
|
146
149
|
function skipConsoleLogging(fn) {
|
|
147
150
|
const consoleSpies = [
|
|
@@ -174,4 +177,4 @@ function skipConsoleLogging(fn) {
|
|
|
174
177
|
*/
|
|
175
178
|
|
|
176
179
|
export { NgxsTestBed, freshPlatform, skipConsoleLogging };
|
|
177
|
-
//# sourceMappingURL=ngxs-store-internals-testing.
|
|
180
|
+
//# sourceMappingURL=ngxs-store-internals-testing.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngxs-store-internals-testing.mjs","sources":["../../../packages/store/internals/testing/src/fresh-platform.ts","../../../packages/store/internals/testing/src/helpers/ngxs-test.component.ts","../../../packages/store/internals/testing/src/helpers/ngxs-test.module.ts","../../../packages/store/internals/testing/src/ngxs.setup.ts","../../../packages/store/internals/testing/src/skip-console-logging.ts","../../../packages/store/internals/testing/src/ngxs-store-internals-testing.ts"],"sourcesContent":["import { TestBed } from '@angular/core/testing';\nimport { DOCUMENT } from '@angular/common';\nimport { ɵgetDOM as getDOM } from '@angular/platform-browser';\nimport { VERSION, destroyPlatform, createPlatform } from '@angular/core';\n\nfunction createRootElement() {\n const document = TestBed.inject(DOCUMENT);\n const root = getDOM().createElement('app-root', document);\n document.body.appendChild(root);\n}\n\nfunction removeRootElement() {\n const root: Element = document.getElementsByTagName('app-root').item(0)!;\n try {\n document.body.removeChild(root);\n } catch {}\n}\n\nfunction destroyPlatformBeforeBootstrappingTheNewOne(freshUrl: string) {\n destroyPlatform();\n resetLocationToUrl(freshUrl);\n createRootElement();\n}\n\n// As we create our custom platform via `bootstrapModule`\n// we have to destroy it after assetions and revert\n// the previous one\nfunction resetPlatformAfterBootstrapping() {\n removeRootElement();\n destroyPlatform();\n const version = +VERSION.major;\n // https://github.com/angular/angular/commit/e250db4f261741b04ee4cbad4dec41a8908a12aa\n if (version < 14) {\n createPlatform(TestBed);\n }\n}\n\nfunction resetLocationToUrl(freshUrl: string) {\n window.history.replaceState({}, 'Test', freshUrl);\n}\n\nexport function freshPlatform(fn: (done?: VoidFunction) => Promise<void>) {\n let resolve: VoidFunction | null = null;\n let reject: ((error: Error) => void) | null = null;\n let whenDoneIsCalledPromise: Promise<void> | null = null;\n\n const hasDoneArgument = fn.length === 1;\n\n if (hasDoneArgument) {\n whenDoneIsCalledPromise = new Promise<void>((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n }\n\n return async function testWithAFreshPlatform() {\n try {\n const freshUrl = '/';\n destroyPlatformBeforeBootstrappingTheNewOne(freshUrl);\n\n if (hasDoneArgument) {\n await fn((error?: Error) => {\n if (error) {\n reject!(error);\n } else {\n resolve!();\n }\n });\n await whenDoneIsCalledPromise!;\n } else {\n await fn();\n }\n } finally {\n resetPlatformAfterBootstrapping();\n }\n };\n}\n","import { AfterViewInit, Component, OnInit } from '@angular/core';\n\n@Component({\n selector: 'app-root',\n template: ''\n})\nexport class NgxsTestComponent implements OnInit, AfterViewInit {\n public ngOnInit(): void {}\n public ngAfterViewInit(): void {}\n}\n","import { ApplicationRef, NgModule } from '@angular/core';\nimport { BrowserModule } from '@angular/platform-browser';\n\nimport { NgxsTestComponent } from './ngxs-test.component';\n\n@NgModule({\n imports: [BrowserModule],\n declarations: [NgxsTestComponent]\n})\nexport class NgxsTestModule {\n public static ngDoBootstrap(app: ApplicationRef): void {\n app.bootstrap(NgxsTestComponent);\n }\n}\n","import { ApplicationRef } from '@angular/core';\nimport { TestBed, TestBedStatic } from '@angular/core/testing';\nimport { DOCUMENT } from '@angular/common';\nimport { ɵBrowserDomAdapter as BrowserDomAdapter } from '@angular/platform-browser';\nimport {\n BrowserDynamicTestingModule,\n platformBrowserDynamicTesting\n} from '@angular/platform-browser-dynamic/testing';\nimport { NgxsModule, Store } from '@ngxs/store';\n\nimport { NgxsTestModule } from './helpers/ngxs-test.module';\nimport { NgxsOptionsTesting, NgxsTesting } from './symbol';\n\nexport class NgxsTestBed {\n public static configureTestingStates(options: NgxsOptionsTesting): NgxsTesting {\n this.resetTestBed();\n\n if (options.before) {\n options.before();\n }\n\n TestBed.configureTestingModule({\n imports: [\n NgxsTestModule,\n NgxsModule.forRoot(options.states || [], options.ngxsOptions || {}),\n ...(options.imports || [])\n ]\n }).compileComponents();\n\n NgxsTestBed.ngxsBootstrap();\n\n return {\n get store(): Store {\n return TestBed.inject(Store);\n },\n get getTestBed(): TestBedStatic {\n return TestBed;\n }\n };\n }\n\n private static ngxsBootstrap(): void {\n NgxsTestBed.createRootNode();\n NgxsTestModule.ngDoBootstrap(TestBed.inject(ApplicationRef));\n }\n\n private static resetTestBed(): void {\n TestBed.resetTestEnvironment();\n TestBed.initTestEnvironment(BrowserDynamicTestingModule, platformBrowserDynamicTesting(), {\n teardown: { destroyAfterEach: true }\n });\n }\n\n private static createRootNode(selector = 'app-root'): void {\n const document = TestBed.inject(DOCUMENT);\n const adapter = new BrowserDomAdapter();\n const root = adapter.createElement(selector);\n document.body.appendChild(root);\n }\n}\n","/// <reference types=\"jest\" />\n\nexport function skipConsoleLogging<T extends (...args: any[]) => any>(fn: T): ReturnType<T> {\n const consoleSpies = [\n jest.spyOn(console, 'log').mockImplementation(() => {}),\n jest.spyOn(console, 'warn').mockImplementation(() => {}),\n jest.spyOn(console, 'error').mockImplementation(() => {}),\n jest.spyOn(console, 'info').mockImplementation(() => {})\n ];\n function restoreSpies() {\n consoleSpies.forEach(spy => spy.mockRestore());\n }\n let restoreSpyAsync = false;\n try {\n const returnValue = fn();\n if (returnValue instanceof Promise) {\n restoreSpyAsync = true;\n return returnValue.finally(() => restoreSpies()) as ReturnType<T>;\n }\n return returnValue;\n } finally {\n if (!restoreSpyAsync) {\n restoreSpies();\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["getDOM","BrowserDomAdapter"],"mappings":"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"}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import * as i0 from '@angular/core';
|
|
2
|
+
import { InjectionToken, Injectable } from '@angular/core';
|
|
3
|
+
import { ReplaySubject, Subject, BehaviorSubject } from 'rxjs';
|
|
4
|
+
import { toSignal } from '@angular/core/rxjs-interop';
|
|
5
|
+
|
|
6
|
+
// This key is used to store metadata on state classes,
|
|
7
|
+
// such as actions and other related information.
|
|
8
|
+
const ɵMETA_KEY = 'NGXS_META';
|
|
9
|
+
// This key is used to store options on state classes
|
|
10
|
+
// provided through the `@State` decorator.
|
|
11
|
+
const ɵMETA_OPTIONS_KEY = 'NGXS_OPTIONS_META';
|
|
12
|
+
// This key is used to store selector metadata on selector functions,
|
|
13
|
+
// such as decorated with the `@Selector` or provided through the
|
|
14
|
+
// `createSelector` function.
|
|
15
|
+
const ɵSELECTOR_META_KEY = 'NGXS_SELECTOR_META';
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Ensures metadata is attached to the class and returns it.
|
|
19
|
+
*
|
|
20
|
+
* @ignore
|
|
21
|
+
*/
|
|
22
|
+
function ɵensureStoreMetadata(target) {
|
|
23
|
+
if (!target.hasOwnProperty(ɵMETA_KEY)) {
|
|
24
|
+
const defaultMetadata = {
|
|
25
|
+
name: null,
|
|
26
|
+
actions: {},
|
|
27
|
+
defaults: {},
|
|
28
|
+
path: null,
|
|
29
|
+
makeRootSelector(context) {
|
|
30
|
+
return context.getStateGetter(defaultMetadata.name);
|
|
31
|
+
},
|
|
32
|
+
children: []
|
|
33
|
+
};
|
|
34
|
+
Object.defineProperty(target, ɵMETA_KEY, { value: defaultMetadata });
|
|
35
|
+
}
|
|
36
|
+
return ɵgetStoreMetadata(target);
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get the metadata attached to the state class if it exists.
|
|
40
|
+
*
|
|
41
|
+
* @ignore
|
|
42
|
+
*/
|
|
43
|
+
function ɵgetStoreMetadata(target) {
|
|
44
|
+
return target[ɵMETA_KEY];
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Ensures metadata is attached to the selector and returns it.
|
|
48
|
+
*
|
|
49
|
+
* @ignore
|
|
50
|
+
*/
|
|
51
|
+
function ɵensureSelectorMetadata(target) {
|
|
52
|
+
if (!target.hasOwnProperty(ɵSELECTOR_META_KEY)) {
|
|
53
|
+
const defaultMetadata = {
|
|
54
|
+
makeRootSelector: null,
|
|
55
|
+
originalFn: null,
|
|
56
|
+
containerClass: null,
|
|
57
|
+
selectorName: null,
|
|
58
|
+
getSelectorOptions: () => ({})
|
|
59
|
+
};
|
|
60
|
+
Object.defineProperty(target, ɵSELECTOR_META_KEY, { value: defaultMetadata });
|
|
61
|
+
}
|
|
62
|
+
return ɵgetSelectorMetadata(target);
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Get the metadata attached to the selector if it exists.
|
|
66
|
+
*
|
|
67
|
+
* @ignore
|
|
68
|
+
*/
|
|
69
|
+
function ɵgetSelectorMetadata(target) {
|
|
70
|
+
return target[ɵSELECTOR_META_KEY];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function defaultEqualityCheck(a, b) {
|
|
74
|
+
return a === b;
|
|
75
|
+
}
|
|
76
|
+
function areArgumentsShallowlyEqual(equalityCheck, prev, next) {
|
|
77
|
+
if (prev === null || next === null || prev.length !== next.length) {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
// Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.
|
|
81
|
+
const length = prev.length;
|
|
82
|
+
for (let i = 0; i < length; i++) {
|
|
83
|
+
if (!equalityCheck(prev[i], next[i])) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Memoize a function on its last inputs only.
|
|
91
|
+
* Originally from: https://github.com/reduxjs/reselect/blob/master/src/index.js
|
|
92
|
+
*
|
|
93
|
+
* @ignore
|
|
94
|
+
*/
|
|
95
|
+
function ɵmemoize(func, equalityCheck = defaultEqualityCheck) {
|
|
96
|
+
let lastArgs = null;
|
|
97
|
+
let lastResult = null;
|
|
98
|
+
// we reference arguments instead of spreading them for performance reasons
|
|
99
|
+
function memoized() {
|
|
100
|
+
// eslint-disable-next-line prefer-rest-params
|
|
101
|
+
if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {
|
|
102
|
+
// apply arguments instead of spreading for performance.
|
|
103
|
+
// eslint-disable-next-line prefer-rest-params, prefer-spread
|
|
104
|
+
lastResult = func.apply(null, arguments);
|
|
105
|
+
}
|
|
106
|
+
// eslint-disable-next-line prefer-rest-params
|
|
107
|
+
lastArgs = arguments;
|
|
108
|
+
return lastResult;
|
|
109
|
+
}
|
|
110
|
+
memoized.reset = function () {
|
|
111
|
+
// The hidden (for now) ability to reset the memoization
|
|
112
|
+
lastArgs = null;
|
|
113
|
+
lastResult = null;
|
|
114
|
+
};
|
|
115
|
+
return memoized;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
class StateToken {
|
|
119
|
+
constructor(_name) {
|
|
120
|
+
this._name = _name;
|
|
121
|
+
const selectorMetadata = ɵensureSelectorMetadata(this);
|
|
122
|
+
selectorMetadata.makeRootSelector = (runtimeContext) => {
|
|
123
|
+
return runtimeContext.getStateGetter(this._name);
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
getName() {
|
|
127
|
+
return this._name;
|
|
128
|
+
}
|
|
129
|
+
toString() {
|
|
130
|
+
return `StateToken[${this._name}]`;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
const NG_DEV_MODE$1 = typeof ngDevMode !== 'undefined' && ngDevMode;
|
|
135
|
+
class ɵInitialState {
|
|
136
|
+
static { this._value = {}; }
|
|
137
|
+
static set(state) {
|
|
138
|
+
this._value = state;
|
|
139
|
+
}
|
|
140
|
+
static pop() {
|
|
141
|
+
const state = this._value;
|
|
142
|
+
this._value = {};
|
|
143
|
+
return state;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
const ɵINITIAL_STATE_TOKEN = new InjectionToken(NG_DEV_MODE$1 ? 'INITIAL_STATE_TOKEN' : '', {
|
|
147
|
+
providedIn: 'root',
|
|
148
|
+
factory: () => ɵInitialState.pop()
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
class ɵNgxsAppBootstrappedState extends ReplaySubject {
|
|
152
|
+
constructor() {
|
|
153
|
+
super(1);
|
|
154
|
+
}
|
|
155
|
+
bootstrap() {
|
|
156
|
+
this.next(true);
|
|
157
|
+
this.complete();
|
|
158
|
+
}
|
|
159
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ɵNgxsAppBootstrappedState, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
160
|
+
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ɵNgxsAppBootstrappedState, providedIn: 'root' }); }
|
|
161
|
+
}
|
|
162
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ɵNgxsAppBootstrappedState, decorators: [{
|
|
163
|
+
type: Injectable,
|
|
164
|
+
args: [{ providedIn: 'root' }]
|
|
165
|
+
}], ctorParameters: () => [] });
|
|
166
|
+
|
|
167
|
+
const NG_DEV_MODE = typeof ngDevMode !== 'undefined' && ngDevMode;
|
|
168
|
+
// These tokens are internal and can change at any point.
|
|
169
|
+
const ɵNGXS_STATE_FACTORY = new InjectionToken(NG_DEV_MODE ? 'ɵNGXS_STATE_FACTORY' : '');
|
|
170
|
+
const ɵNGXS_STATE_CONTEXT_FACTORY = new InjectionToken(NG_DEV_MODE ? 'ɵNGXS_STATE_CONTEXT_FACTORY' : '');
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* This wraps the provided function, and will enforce the following:
|
|
174
|
+
* - The calls will execute in the order that they are made
|
|
175
|
+
* - A call will only be initiated when the previous call has completed
|
|
176
|
+
* - If there is a call currently executing then the new call will be added
|
|
177
|
+
* to the queue and the function will return immediately
|
|
178
|
+
*
|
|
179
|
+
* NOTE: The following assumptions about the operation must hold true:
|
|
180
|
+
* - The operation is synchronous in nature
|
|
181
|
+
* - If any asynchronous side effects of the call exist, it should not
|
|
182
|
+
* have any bearing on the correctness of the next call in the queue
|
|
183
|
+
* - The operation has a void return
|
|
184
|
+
* - The caller should not assume that the call has completed upon
|
|
185
|
+
* return of the function
|
|
186
|
+
* - The caller can assume that all the queued calls will complete
|
|
187
|
+
* within the current microtask
|
|
188
|
+
* - The only way that a call will encounter another call in the queue
|
|
189
|
+
* would be if the call at the front of the queue initiated this call
|
|
190
|
+
* as part of its synchronous execution
|
|
191
|
+
*/
|
|
192
|
+
function orderedQueueOperation(operation) {
|
|
193
|
+
const callsQueue = [];
|
|
194
|
+
let busyPushingNext = false;
|
|
195
|
+
return function callOperation(...args) {
|
|
196
|
+
if (busyPushingNext) {
|
|
197
|
+
callsQueue.unshift(args);
|
|
198
|
+
return;
|
|
199
|
+
}
|
|
200
|
+
busyPushingNext = true;
|
|
201
|
+
operation(...args);
|
|
202
|
+
while (callsQueue.length > 0) {
|
|
203
|
+
const nextCallArgs = callsQueue.pop();
|
|
204
|
+
nextCallArgs && operation(...nextCallArgs);
|
|
205
|
+
}
|
|
206
|
+
busyPushingNext = false;
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Custom Subject that ensures that subscribers are notified of values in the order that they arrived.
|
|
211
|
+
* A standard Subject does not have this guarantee.
|
|
212
|
+
* For example, given the following code:
|
|
213
|
+
* ```typescript
|
|
214
|
+
* const subject = new Subject<string>();
|
|
215
|
+
subject.subscribe(value => {
|
|
216
|
+
if (value === 'start') subject.next('end');
|
|
217
|
+
});
|
|
218
|
+
subject.subscribe(value => { });
|
|
219
|
+
subject.next('start');
|
|
220
|
+
* ```
|
|
221
|
+
* When `subject` is a standard `Subject<T>` the second subscriber would recieve `end` and then `start`.
|
|
222
|
+
* When `subject` is a `OrderedSubject<T>` the second subscriber would recieve `start` and then `end`.
|
|
223
|
+
*/
|
|
224
|
+
class ɵOrderedSubject extends Subject {
|
|
225
|
+
constructor() {
|
|
226
|
+
super(...arguments);
|
|
227
|
+
this._orderedNext = orderedQueueOperation((value) => super.next(value));
|
|
228
|
+
}
|
|
229
|
+
next(value) {
|
|
230
|
+
this._orderedNext(value);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Custom BehaviorSubject that ensures that subscribers are notified of values in the order that they arrived.
|
|
235
|
+
* A standard BehaviorSubject does not have this guarantee.
|
|
236
|
+
* For example, given the following code:
|
|
237
|
+
* ```typescript
|
|
238
|
+
* const subject = new BehaviorSubject<string>();
|
|
239
|
+
subject.subscribe(value => {
|
|
240
|
+
if (value === 'start') subject.next('end');
|
|
241
|
+
});
|
|
242
|
+
subject.subscribe(value => { });
|
|
243
|
+
subject.next('start');
|
|
244
|
+
* ```
|
|
245
|
+
* When `subject` is a standard `BehaviorSubject<T>` the second subscriber would recieve `end` and then `start`.
|
|
246
|
+
* When `subject` is a `OrderedBehaviorSubject<T>` the second subscriber would recieve `start` and then `end`.
|
|
247
|
+
*/
|
|
248
|
+
class ɵOrderedBehaviorSubject extends BehaviorSubject {
|
|
249
|
+
constructor(value) {
|
|
250
|
+
super(value);
|
|
251
|
+
this._orderedNext = orderedQueueOperation((value) => super.next(value));
|
|
252
|
+
this._currentValue = value;
|
|
253
|
+
}
|
|
254
|
+
getValue() {
|
|
255
|
+
return this._currentValue;
|
|
256
|
+
}
|
|
257
|
+
next(value) {
|
|
258
|
+
this._currentValue = value;
|
|
259
|
+
this._orderedNext(value);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
/**
|
|
264
|
+
* BehaviorSubject of the entire state.
|
|
265
|
+
* @ignore
|
|
266
|
+
*/
|
|
267
|
+
class ɵStateStream extends ɵOrderedBehaviorSubject {
|
|
268
|
+
constructor() {
|
|
269
|
+
super({});
|
|
270
|
+
this.state = toSignal(this, {
|
|
271
|
+
manualCleanup: true,
|
|
272
|
+
requireSync: true
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
ngOnDestroy() {
|
|
276
|
+
// The StateStream should never emit values once the root view is removed,
|
|
277
|
+
// such as when the `NgModuleRef.destroy()` method is called. This is crucial
|
|
278
|
+
// for preventing memory leaks in server-side rendered apps, where a new StateStream
|
|
279
|
+
// is created for each HTTP request. If users forget to unsubscribe from `store.select`
|
|
280
|
+
// or `store.subscribe`, it can result in significant memory leaks in SSR apps.
|
|
281
|
+
this.complete();
|
|
282
|
+
}
|
|
283
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ɵStateStream, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
284
|
+
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ɵStateStream, providedIn: 'root' }); }
|
|
285
|
+
}
|
|
286
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.3", ngImport: i0, type: ɵStateStream, decorators: [{
|
|
287
|
+
type: Injectable,
|
|
288
|
+
args: [{ providedIn: 'root' }]
|
|
289
|
+
}], ctorParameters: () => [] });
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Generated bundle index. Do not edit.
|
|
293
|
+
*/
|
|
294
|
+
|
|
295
|
+
export { StateToken, ɵINITIAL_STATE_TOKEN, ɵInitialState, ɵMETA_KEY, ɵMETA_OPTIONS_KEY, ɵNGXS_STATE_CONTEXT_FACTORY, ɵNGXS_STATE_FACTORY, ɵNgxsAppBootstrappedState, ɵOrderedBehaviorSubject, ɵOrderedSubject, ɵSELECTOR_META_KEY, ɵStateStream, ɵensureSelectorMetadata, ɵensureStoreMetadata, ɵgetSelectorMetadata, ɵgetStoreMetadata, ɵmemoize };
|
|
296
|
+
//# sourceMappingURL=ngxs-store-internals.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngxs-store-internals.mjs","sources":["../../../packages/store/internals/src/symbols.ts","../../../packages/store/internals/src/metadata.ts","../../../packages/store/internals/src/memoize.ts","../../../packages/store/internals/src/state-token.ts","../../../packages/store/internals/src/initial-state.ts","../../../packages/store/internals/src/ngxs-app-bootstrapped-state.ts","../../../packages/store/internals/src/internal-tokens.ts","../../../packages/store/internals/src/custom-rxjs-subjects.ts","../../../packages/store/internals/src/state-stream.ts","../../../packages/store/internals/src/ngxs-store-internals.ts"],"sourcesContent":["import type { StateToken } from './state-token';\n\nexport interface ɵPlainObject {\n [key: string]: any;\n}\n\nexport interface ɵPlainObjectOf<T> {\n [key: string]: T;\n}\n\nexport type ɵStateClass<T = any> = new (...args: any[]) => T;\n\n// This key is used to store metadata on state classes,\n// such as actions and other related information.\nexport const ɵMETA_KEY = 'NGXS_META';\n// This key is used to store options on state classes\n// provided through the `@State` decorator.\nexport const ɵMETA_OPTIONS_KEY = 'NGXS_OPTIONS_META';\n// This key is used to store selector metadata on selector functions,\n// such as decorated with the `@Selector` or provided through the\n// `createSelector` function.\nexport const ɵSELECTOR_META_KEY = 'NGXS_SELECTOR_META';\n\nexport interface ɵStateToken<T, U> {\n new (name: ɵTokenName<T>): U;\n getName(): string;\n toString(): string;\n}\n\ntype RequireGeneric<T, U> = T extends void ? 'You must provide a type parameter' : U;\n\nexport type ɵTokenName<T> = string & RequireGeneric<T, string>;\n\nexport type ɵExtractTokenType<P> = P extends StateToken<infer T> ? T : never;\n\n/**\n * Options that can be provided to the store.\n */\nexport interface ɵStoreOptions<T> {\n /**\n * Name of the state. Required.\n */\n name: string | StateToken<T>;\n\n /**\n * Default values for the state. If not provided, uses empty object.\n */\n defaults?: T;\n\n /**\n * Sub states for the given state.\n *\n * @deprecated\n * Read the deprecation notice at this link: https://ngxs.io/deprecations/sub-states-deprecation.\n */\n children?: ɵStateClass[];\n}\n\n// inspired from https://stackoverflow.com/a/43674389\nexport interface ɵStateClassInternal<T = any, U = any> extends ɵStateClass<T> {\n [ɵMETA_KEY]?: ɵMetaDataModel;\n [ɵMETA_OPTIONS_KEY]?: ɵStoreOptions<U>;\n}\n\nexport interface ɵMetaDataModel {\n name: string | null;\n actions: ɵPlainObjectOf<ɵActionHandlerMetaData[]>;\n defaults: any;\n path: string | null;\n makeRootSelector: ɵSelectorFactory | null;\n /** @deprecated */\n children?: ɵStateClassInternal[];\n}\n\nexport interface ɵSelectorMetaDataModel {\n makeRootSelector: ɵSelectorFactory | null;\n originalFn: Function | null;\n containerClass: any;\n selectorName: string | null;\n getSelectorOptions: () => ɵSharedSelectorOptions;\n}\n\nexport interface ɵSharedSelectorOptions {\n /**\n * @deprecated\n * Read the deprecation notice at this link: https://ngxs.io/deprecations/inject-container-state-deprecation.md.\n */\n injectContainerState?: boolean;\n suppressErrors?: boolean;\n}\n\nexport interface ɵRuntimeSelectorContext {\n getStateGetter(key: any): (state: any) => any;\n getSelectorOptions(localOptions?: ɵSharedSelectorOptions): ɵSharedSelectorOptions;\n}\n\nexport type ɵSelectFromRootState = (rootState: any) => any;\nexport type ɵSelectorFactory = (\n runtimeContext: ɵRuntimeSelectorContext\n) => ɵSelectFromRootState;\n\n/**\n * Actions that can be provided in a action decorator.\n */\nexport interface ɵActionOptions {\n /**\n * Cancel the previous uncompleted observable(s).\n */\n cancelUncompleted?: boolean;\n}\n\nexport interface ɵActionHandlerMetaData {\n fn: string | symbol;\n options: ɵActionOptions;\n type: string;\n}\n","import {\n ɵMETA_KEY,\n ɵSELECTOR_META_KEY,\n ɵMetaDataModel,\n ɵStateClassInternal,\n ɵSelectorMetaDataModel,\n ɵRuntimeSelectorContext\n} from './symbols';\n\n/**\n * Ensures metadata is attached to the class and returns it.\n *\n * @ignore\n */\nexport function ɵensureStoreMetadata(target: ɵStateClassInternal): ɵMetaDataModel {\n if (!target.hasOwnProperty(ɵMETA_KEY)) {\n const defaultMetadata: ɵMetaDataModel = {\n name: null,\n actions: {},\n defaults: {},\n path: null,\n makeRootSelector(context: ɵRuntimeSelectorContext) {\n return context.getStateGetter(defaultMetadata.name);\n },\n children: []\n };\n\n Object.defineProperty(target, ɵMETA_KEY, { value: defaultMetadata });\n }\n return ɵgetStoreMetadata(target);\n}\n\n/**\n * Get the metadata attached to the state class if it exists.\n *\n * @ignore\n */\nexport function ɵgetStoreMetadata(target: ɵStateClassInternal): ɵMetaDataModel {\n return target[ɵMETA_KEY]!;\n}\n\n/**\n * Ensures metadata is attached to the selector and returns it.\n *\n * @ignore\n */\nexport function ɵensureSelectorMetadata(target: Function): ɵSelectorMetaDataModel {\n if (!target.hasOwnProperty(ɵSELECTOR_META_KEY)) {\n const defaultMetadata: ɵSelectorMetaDataModel = {\n makeRootSelector: null,\n originalFn: null,\n containerClass: null,\n selectorName: null,\n getSelectorOptions: () => ({})\n };\n\n Object.defineProperty(target, ɵSELECTOR_META_KEY, { value: defaultMetadata });\n }\n\n return ɵgetSelectorMetadata(target);\n}\n\n/**\n * Get the metadata attached to the selector if it exists.\n *\n * @ignore\n */\nexport function ɵgetSelectorMetadata(target: any): ɵSelectorMetaDataModel {\n return target[ɵSELECTOR_META_KEY];\n}\n","function defaultEqualityCheck(a: any, b: any) {\n return a === b;\n}\n\nfunction areArgumentsShallowlyEqual(\n equalityCheck: (a: any, b: any) => boolean,\n prev: IArguments | null,\n next: IArguments | null\n) {\n if (prev === null || next === null || prev.length !== next.length) {\n return false;\n }\n\n // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible.\n const length = prev.length;\n for (let i = 0; i < length; i++) {\n if (!equalityCheck(prev[i], next[i])) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Memoize a function on its last inputs only.\n * Originally from: https://github.com/reduxjs/reselect/blob/master/src/index.js\n *\n * @ignore\n */\nexport function ɵmemoize<T extends (...args: any[]) => any>(\n func: T,\n equalityCheck = defaultEqualityCheck\n): T {\n let lastArgs: IArguments | null = null;\n let lastResult: any = null;\n // we reference arguments instead of spreading them for performance reasons\n function memoized() {\n // eslint-disable-next-line prefer-rest-params\n if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) {\n // apply arguments instead of spreading for performance.\n // eslint-disable-next-line prefer-rest-params, prefer-spread\n lastResult = (<Function>func).apply(null, arguments);\n }\n // eslint-disable-next-line prefer-rest-params\n lastArgs = arguments;\n return lastResult;\n }\n (<any>memoized).reset = function () {\n // The hidden (for now) ability to reset the memoization\n lastArgs = null;\n lastResult = null;\n };\n return memoized as T;\n}\n","import { ɵensureSelectorMetadata } from './metadata';\nimport type { ɵTokenName, ɵSelectFromRootState, ɵRuntimeSelectorContext } from './symbols';\n\nexport class StateToken<T = void> {\n constructor(private readonly _name: ɵTokenName<T>) {\n const selectorMetadata = ɵensureSelectorMetadata(<any>this);\n selectorMetadata.makeRootSelector = (\n runtimeContext: ɵRuntimeSelectorContext\n ): ɵSelectFromRootState => {\n return runtimeContext.getStateGetter(this._name);\n };\n }\n\n getName(): string {\n return this._name;\n }\n\n toString(): string {\n return `StateToken[${this._name}]`;\n }\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { ɵPlainObject } from './symbols';\n\ndeclare const ngDevMode: boolean;\n\nconst NG_DEV_MODE = typeof ngDevMode !== 'undefined' && ngDevMode;\n\nexport class ɵInitialState {\n private static _value: ɵPlainObject = {};\n\n static set(state: ɵPlainObject) {\n this._value = state;\n }\n\n static pop(): ɵPlainObject {\n const state = this._value;\n this._value = {};\n return state;\n }\n}\n\nexport const ɵINITIAL_STATE_TOKEN = new InjectionToken<ɵPlainObject>(\n NG_DEV_MODE ? 'INITIAL_STATE_TOKEN' : '',\n {\n providedIn: 'root',\n factory: () => ɵInitialState.pop()\n }\n);\n","import { Injectable } from '@angular/core';\nimport { ReplaySubject } from 'rxjs';\n\n@Injectable({ providedIn: 'root' })\nexport class ɵNgxsAppBootstrappedState extends ReplaySubject<boolean> {\n constructor() {\n super(1);\n }\n\n bootstrap(): void {\n this.next(true);\n this.complete();\n }\n}\n","import { InjectionToken } from '@angular/core';\n\ndeclare const ngDevMode: boolean;\n\nconst NG_DEV_MODE = typeof ngDevMode !== 'undefined' && ngDevMode;\n\n// These tokens are internal and can change at any point.\n\nexport const ɵNGXS_STATE_FACTORY = new InjectionToken<any>(\n NG_DEV_MODE ? 'ɵNGXS_STATE_FACTORY' : ''\n);\n\nexport const ɵNGXS_STATE_CONTEXT_FACTORY = new InjectionToken<any>(\n NG_DEV_MODE ? 'ɵNGXS_STATE_CONTEXT_FACTORY' : ''\n);\n","import { BehaviorSubject, Subject } from 'rxjs';\n\n/**\n * This wraps the provided function, and will enforce the following:\n * - The calls will execute in the order that they are made\n * - A call will only be initiated when the previous call has completed\n * - If there is a call currently executing then the new call will be added\n * to the queue and the function will return immediately\n *\n * NOTE: The following assumptions about the operation must hold true:\n * - The operation is synchronous in nature\n * - If any asynchronous side effects of the call exist, it should not\n * have any bearing on the correctness of the next call in the queue\n * - The operation has a void return\n * - The caller should not assume that the call has completed upon\n * return of the function\n * - The caller can assume that all the queued calls will complete\n * within the current microtask\n * - The only way that a call will encounter another call in the queue\n * would be if the call at the front of the queue initiated this call\n * as part of its synchronous execution\n */\nfunction orderedQueueOperation<TArgs extends any[]>(operation: (...args: TArgs) => void) {\n const callsQueue: TArgs[] = [];\n let busyPushingNext = false;\n return function callOperation(...args: TArgs) {\n if (busyPushingNext) {\n callsQueue.unshift(args);\n return;\n }\n busyPushingNext = true;\n operation(...args);\n while (callsQueue.length > 0) {\n const nextCallArgs = callsQueue.pop();\n nextCallArgs && operation(...nextCallArgs);\n }\n busyPushingNext = false;\n };\n}\n\n/**\n * Custom Subject that ensures that subscribers are notified of values in the order that they arrived.\n * A standard Subject does not have this guarantee.\n * For example, given the following code:\n * ```typescript\n * const subject = new Subject<string>();\n subject.subscribe(value => {\n if (value === 'start') subject.next('end');\n });\n subject.subscribe(value => { });\n subject.next('start');\n * ```\n * When `subject` is a standard `Subject<T>` the second subscriber would recieve `end` and then `start`.\n * When `subject` is a `OrderedSubject<T>` the second subscriber would recieve `start` and then `end`.\n */\nexport class ɵOrderedSubject<T> extends Subject<T> {\n private _orderedNext = orderedQueueOperation((value?: T) => super.next(<T>value));\n\n next(value?: T): void {\n this._orderedNext(value);\n }\n}\n\n/**\n * Custom BehaviorSubject that ensures that subscribers are notified of values in the order that they arrived.\n * A standard BehaviorSubject does not have this guarantee.\n * For example, given the following code:\n * ```typescript\n * const subject = new BehaviorSubject<string>();\n subject.subscribe(value => {\n if (value === 'start') subject.next('end');\n });\n subject.subscribe(value => { });\n subject.next('start');\n * ```\n * When `subject` is a standard `BehaviorSubject<T>` the second subscriber would recieve `end` and then `start`.\n * When `subject` is a `OrderedBehaviorSubject<T>` the second subscriber would recieve `start` and then `end`.\n */\nexport class ɵOrderedBehaviorSubject<T> extends BehaviorSubject<T> {\n private _orderedNext = orderedQueueOperation((value: T) => super.next(value));\n private _currentValue: T;\n\n constructor(value: T) {\n super(value);\n this._currentValue = value;\n }\n\n getValue(): T {\n return this._currentValue;\n }\n\n next(value: T): void {\n this._currentValue = value;\n this._orderedNext(value);\n }\n}\n","import { Injectable, OnDestroy, Signal } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\n\nimport { ɵPlainObject } from './symbols';\nimport { ɵOrderedBehaviorSubject } from './custom-rxjs-subjects';\n\n/**\n * BehaviorSubject of the entire state.\n * @ignore\n */\n@Injectable({ providedIn: 'root' })\nexport class ɵStateStream extends ɵOrderedBehaviorSubject<ɵPlainObject> implements OnDestroy {\n readonly state: Signal<ɵPlainObject> = toSignal(this, {\n manualCleanup: true,\n requireSync: true\n });\n\n constructor() {\n super({});\n }\n\n ngOnDestroy(): void {\n // The StateStream should never emit values once the root view is removed,\n // such as when the `NgModuleRef.destroy()` method is called. This is crucial\n // for preventing memory leaks in server-side rendered apps, where a new StateStream\n // is created for each HTTP request. If users forget to unsubscribe from `store.select`\n // or `store.subscribe`, it can result in significant memory leaks in SSR apps.\n this.complete();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["NG_DEV_MODE"],"mappings":"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"}
|
|
@@ -113,13 +113,13 @@ function patch(patchObject) {
|
|
|
113
113
|
let clone = null;
|
|
114
114
|
for (const k in patchObject) {
|
|
115
115
|
const newValue = patchObject[k];
|
|
116
|
-
const existingPropValue = existing
|
|
116
|
+
const existingPropValue = existing?.[k];
|
|
117
117
|
const newPropValue = isStateOperator(newValue)
|
|
118
118
|
? newValue(existingPropValue)
|
|
119
119
|
: newValue;
|
|
120
120
|
if (newPropValue !== existingPropValue) {
|
|
121
121
|
if (!clone) {
|
|
122
|
-
clone =
|
|
122
|
+
clone = { ...existing };
|
|
123
123
|
}
|
|
124
124
|
clone[k] = newPropValue;
|
|
125
125
|
}
|
|
@@ -199,4 +199,4 @@ function removeItem(selector) {
|
|
|
199
199
|
*/
|
|
200
200
|
|
|
201
201
|
export { append, compose, iif, insertItem, isPredicate, isStateOperator, patch, removeItem, updateItem };
|
|
202
|
-
//# sourceMappingURL=ngxs-store-operators.
|
|
202
|
+
//# sourceMappingURL=ngxs-store-operators.mjs.map
|