@ngxs/store 3.8.2-dev.master-a836c51 → 3.8.2-dev.master-42a8ed3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (103) hide show
  1. package/esm2022/internals/custom-rxjs-subjects.mjs +92 -0
  2. package/esm2022/internals/index.mjs +9 -5
  3. package/esm2022/internals/initial-state.mjs +4 -4
  4. package/esm2022/internals/memoize.mjs +2 -2
  5. package/esm2022/internals/metadata.mjs +57 -0
  6. package/esm2022/internals/ngxs-app-bootstrapped-state.mjs +19 -0
  7. package/esm2022/internals/state-stream.mjs +32 -0
  8. package/esm2022/internals/state-token.mjs +17 -0
  9. package/esm2022/internals/symbols.mjs +1 -1
  10. package/esm2022/plugins/actions.mjs +16 -0
  11. package/esm2022/plugins/index.mjs +4 -0
  12. package/esm2022/plugins/ngxs-store-plugins.mjs +5 -0
  13. package/esm2022/plugins/symbols.mjs +6 -0
  14. package/esm2022/plugins/utils.mjs +51 -0
  15. package/esm2022/src/actions/symbols.mjs +1 -1
  16. package/esm2022/src/actions-stream.mjs +3 -3
  17. package/esm2022/src/configs/messages.config.mjs +1 -1
  18. package/esm2022/src/decorators/action.mjs +3 -3
  19. package/esm2022/src/decorators/select/symbols.mjs +1 -1
  20. package/esm2022/src/decorators/selector/symbols.mjs +1 -1
  21. package/esm2022/src/decorators/selector-options.mjs +1 -1
  22. package/esm2022/src/decorators/state.mjs +3 -4
  23. package/esm2022/src/dev-features/ngxs-development.module.mjs +8 -2
  24. package/esm2022/src/dev-features/ngxs-unhandled-actions-logger.mjs +2 -3
  25. package/esm2022/src/dev-features/symbols.mjs +3 -2
  26. package/esm2022/src/internal/dispatcher.mjs +2 -2
  27. package/esm2022/src/internal/internals.mjs +11 -68
  28. package/esm2022/src/internal/lifecycle-state-manager.mjs +8 -9
  29. package/esm2022/src/internal/state-context-factory.mjs +2 -2
  30. package/esm2022/src/internal/state-factory.mjs +21 -22
  31. package/esm2022/src/internal/state-stream.mjs +6 -23
  32. package/esm2022/src/operators/of-action.mjs +2 -2
  33. package/esm2022/src/plugin-manager.mjs +2 -2
  34. package/esm2022/src/plugin_api.mjs +2 -5
  35. package/esm2022/src/public_api.mjs +3 -3
  36. package/esm2022/src/public_to_deprecate.mjs +18 -6
  37. package/esm2022/src/selectors/selector-checks.util.mjs +3 -3
  38. package/esm2022/src/selectors/selector-metadata.mjs +3 -3
  39. package/esm2022/src/selectors/selector-models.mjs +1 -1
  40. package/esm2022/src/selectors/selector-types.util.mjs +1 -1
  41. package/esm2022/src/selectors/selector-utils.mjs +6 -7
  42. package/esm2022/src/standalone-features/initializers.mjs +1 -1
  43. package/esm2022/src/standalone-features/plugin.mjs +2 -2
  44. package/esm2022/src/standalone-features/root-providers.mjs +4 -4
  45. package/esm2022/src/store.mjs +4 -4
  46. package/esm2022/src/symbols.mjs +41 -12
  47. package/esm2022/src/utils/store-validators.mjs +3 -3
  48. package/fesm2022/ngxs-store-internals.mjs +222 -40
  49. package/fesm2022/ngxs-store-internals.mjs.map +1 -1
  50. package/fesm2022/ngxs-store-plugins.mjs +80 -0
  51. package/fesm2022/ngxs-store-plugins.mjs.map +1 -0
  52. package/fesm2022/ngxs-store.mjs +232 -470
  53. package/fesm2022/ngxs-store.mjs.map +1 -1
  54. package/{src/internal → internals}/custom-rxjs-subjects.d.ts +2 -2
  55. package/internals/index.d.ts +8 -4
  56. package/internals/initial-state.d.ts +5 -5
  57. package/internals/memoize.d.ts +1 -1
  58. package/internals/metadata.d.ts +25 -0
  59. package/internals/ngxs-app-bootstrapped-state.d.ts +8 -0
  60. package/internals/state-stream.d.ts +15 -0
  61. package/internals/state-token.d.ts +7 -0
  62. package/internals/symbols.d.ts +72 -2
  63. package/package.json +7 -1
  64. package/{src/actions → plugins}/actions.d.ts +3 -3
  65. package/plugins/index.d.ts +3 -0
  66. package/plugins/symbols.d.ts +13 -0
  67. package/{src/utils → plugins}/utils.d.ts +0 -17
  68. package/src/actions/symbols.d.ts +0 -14
  69. package/src/actions-stream.d.ts +2 -2
  70. package/src/configs/messages.config.d.ts +2 -2
  71. package/src/decorators/action.d.ts +3 -2
  72. package/src/decorators/select/symbols.d.ts +2 -3
  73. package/src/decorators/selector/symbols.d.ts +2 -3
  74. package/src/decorators/selector-options.d.ts +2 -2
  75. package/src/decorators/state.d.ts +2 -3
  76. package/src/dev-features/ngxs-development.module.d.ts +1 -0
  77. package/src/internal/internals.d.ts +8 -68
  78. package/src/internal/lifecycle-state-manager.d.ts +4 -4
  79. package/src/internal/state-factory.d.ts +5 -5
  80. package/src/internal/state-stream.d.ts +3 -9
  81. package/src/plugin-manager.d.ts +1 -1
  82. package/src/plugin_api.d.ts +1 -4
  83. package/src/public_api.d.ts +4 -3
  84. package/src/public_to_deprecate.d.ts +33 -21
  85. package/src/selectors/selector-metadata.d.ts +4 -4
  86. package/src/selectors/selector-models.d.ts +4 -4
  87. package/src/selectors/selector-types.util.d.ts +1 -2
  88. package/src/selectors/selector-utils.d.ts +3 -3
  89. package/src/standalone-features/plugin.d.ts +1 -1
  90. package/src/store.d.ts +1 -1
  91. package/src/symbols.d.ts +3 -35
  92. package/src/utils/store-validators.d.ts +4 -3
  93. package/esm2022/internals/ngxs-bootstrapper.mjs +0 -29
  94. package/esm2022/internals/src/symbols.mjs +0 -11
  95. package/esm2022/src/actions/actions.mjs +0 -16
  96. package/esm2022/src/internal/custom-rxjs-subjects.mjs +0 -92
  97. package/esm2022/src/state-token/state-token.mjs +0 -17
  98. package/esm2022/src/state-token/symbols.mjs +0 -2
  99. package/esm2022/src/utils/utils.mjs +0 -92
  100. package/internals/ngxs-bootstrapper.d.ts +0 -16
  101. package/internals/src/symbols.d.ts +0 -10
  102. package/src/state-token/state-token.d.ts +0 -7
  103. package/src/state-token/symbols.d.ts +0 -5
@@ -1,11 +1,13 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, NgZone, PLATFORM_ID, Inject, InjectionToken, inject, INJECTOR, ɵglobal as _global, ErrorHandler, Optional, SkipSelf, ɵisPromise as _isPromise, computed, ENVIRONMENT_INITIALIZER, NgModule, APP_BOOTSTRAP_LISTENER, makeEnvironmentProviders } from '@angular/core';
3
- import { Observable, Subject, BehaviorSubject, of, forkJoin, throwError, EMPTY, from, isObservable, ReplaySubject } from 'rxjs';
3
+ import { Observable, Subject, of, forkJoin, throwError, EMPTY, from, isObservable, ReplaySubject } from 'rxjs';
4
4
  import { share, shareReplay, filter, take, exhaustMap, map, mergeMap, defaultIfEmpty, catchError, takeUntil, distinctUntilChanged, tap, startWith, pairwise } from 'rxjs/operators';
5
5
  import * as i5 from '@ngxs/store/internals';
6
- import { ɵMETA_KEY as _META_KEY, ɵSELECTOR_META_KEY as _SELECTOR_META_KEY, memoize, INITIAL_STATE_TOKEN, NgxsBootstrapper, ɵNGXS_STATE_CONTEXT_FACTORY as _NGXS_STATE_CONTEXT_FACTORY, ɵNGXS_STATE_FACTORY as _NGXS_STATE_FACTORY, ɵMETA_OPTIONS_KEY as _META_OPTIONS_KEY } from '@ngxs/store/internals';
6
+ import { ɵOrderedSubject as _OrderedSubject, ɵStateStream as _StateStream, ɵmemoize as _memoize, ɵgetStoreMetadata as _getStoreMetadata, ɵgetSelectorMetadata as _getSelectorMetadata, ɵMETA_KEY as _META_KEY, ɵINITIAL_STATE_TOKEN as _INITIAL_STATE_TOKEN, ɵNgxsAppBootstrappedState as _NgxsAppBootstrappedState, ɵNGXS_STATE_CONTEXT_FACTORY as _NGXS_STATE_CONTEXT_FACTORY, ɵNGXS_STATE_FACTORY as _NGXS_STATE_FACTORY, ɵensureStoreMetadata as _ensureStoreMetadata, ɵMETA_OPTIONS_KEY as _META_OPTIONS_KEY, ɵensureSelectorMetadata as _ensureSelectorMetadata } from '@ngxs/store/internals';
7
+ export { StateToken } from '@ngxs/store/internals';
7
8
  import { isPlatformServer } from '@angular/common';
8
- import { toSignal } from '@angular/core/rxjs-interop';
9
+ import { NGXS_PLUGINS, getActionTypeFromInstance, setValue, getValue, InitState, UpdateState } from '@ngxs/store/plugins';
10
+ export { InitState, NGXS_PLUGINS, UpdateState, actionMatcher, getActionTypeFromInstance, getValue, setValue } from '@ngxs/store/plugins';
9
11
  import { isStateOperator } from '@ngxs/store/operators';
10
12
 
11
13
  class NoopNgxsExecutionStrategy {
@@ -124,18 +126,18 @@ function verifyZoneIsNotNooped(ngZone) {
124
126
  console.warn(getZoneWarningMessage());
125
127
  }
126
128
 
127
- const NG_DEV_MODE$4 = typeof ngDevMode === 'undefined' || ngDevMode;
129
+ const NG_DEV_MODE$5 = typeof ngDevMode === 'undefined' || ngDevMode;
128
130
  /**
129
131
  * Consumers have the option to utilize the execution strategy provided by
130
132
  * `NgxsModule.forRoot({executionStrategy})` or `provideStore([], {executionStrategy})`.
131
133
  */
132
- const CUSTOM_NGXS_EXECUTION_STRATEGY = new InjectionToken(NG_DEV_MODE$4 ? 'CUSTOM_NGXS_EXECUTION_STRATEGY' : '');
134
+ const CUSTOM_NGXS_EXECUTION_STRATEGY = new InjectionToken(NG_DEV_MODE$5 ? 'CUSTOM_NGXS_EXECUTION_STRATEGY' : '');
133
135
  /**
134
136
  * The injection token is used internally to resolve an instance of the execution
135
137
  * strategy. It checks whether consumers have provided their own `executionStrategy`
136
138
  * and also verifies if we are operating in a zone-aware environment.
137
139
  */
138
- const NGXS_EXECUTION_STRATEGY = new InjectionToken(NG_DEV_MODE$4 ? 'NGXS_EXECUTION_STRATEGY' : '', {
140
+ const NGXS_EXECUTION_STRATEGY = new InjectionToken(NG_DEV_MODE$5 ? 'NGXS_EXECUTION_STRATEGY' : '', {
139
141
  providedIn: 'root',
140
142
  factory: () => {
141
143
  const injector = inject(INJECTOR);
@@ -277,101 +279,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
277
279
  args: [{ providedIn: 'root' }]
278
280
  }], ctorParameters: () => [{ type: i0.Injector }] });
279
281
 
280
- /**
281
- * This wraps the provided function, and will enforce the following:
282
- * - The calls will execute in the order that they are made
283
- * - A call will only be initiated when the previous call has completed
284
- * - If there is a call currently executing then the new call will be added
285
- * to the queue and the function will return immediately
286
- *
287
- * NOTE: The following assumptions about the operation must hold true:
288
- * - The operation is synchronous in nature
289
- * - If any asynchronous side effects of the call exist, it should not
290
- * have any bearing on the correctness of the next call in the queue
291
- * - The operation has a void return
292
- * - The caller should not assume that the call has completed upon
293
- * return of the function
294
- * - The caller can assume that all the queued calls will complete
295
- * within the current microtask
296
- * - The only way that a call will encounter another call in the queue
297
- * would be if the call at the front of the queue initiated this call
298
- * as part of its synchronous execution
299
- */
300
- function orderedQueueOperation(operation) {
301
- const callsQueue = [];
302
- let busyPushingNext = false;
303
- return function callOperation(...args) {
304
- if (busyPushingNext) {
305
- callsQueue.unshift(args);
306
- return;
307
- }
308
- busyPushingNext = true;
309
- operation(...args);
310
- while (callsQueue.length > 0) {
311
- const nextCallArgs = callsQueue.pop();
312
- nextCallArgs && operation(...nextCallArgs);
313
- }
314
- busyPushingNext = false;
315
- };
316
- }
317
- /**
318
- * Custom Subject that ensures that subscribers are notified of values in the order that they arrived.
319
- * A standard Subject does not have this guarantee.
320
- * For example, given the following code:
321
- * ```typescript
322
- * const subject = new Subject<string>();
323
- subject.subscribe(value => {
324
- if (value === 'start') subject.next('end');
325
- });
326
- subject.subscribe(value => { });
327
- subject.next('start');
328
- * ```
329
- * When `subject` is a standard `Subject<T>` the second subscriber would recieve `end` and then `start`.
330
- * When `subject` is a `OrderedSubject<T>` the second subscriber would recieve `start` and then `end`.
331
- */
332
- class OrderedSubject extends Subject {
333
- constructor() {
334
- super(...arguments);
335
- this._orderedNext = orderedQueueOperation((value) => super.next(value));
336
- }
337
- next(value) {
338
- this._orderedNext(value);
339
- }
340
- }
341
- /**
342
- * Custom BehaviorSubject that ensures that subscribers are notified of values in the order that they arrived.
343
- * A standard BehaviorSubject does not have this guarantee.
344
- * For example, given the following code:
345
- * ```typescript
346
- * const subject = new BehaviorSubject<string>();
347
- subject.subscribe(value => {
348
- if (value === 'start') subject.next('end');
349
- });
350
- subject.subscribe(value => { });
351
- subject.next('start');
352
- * ```
353
- * When `subject` is a standard `BehaviorSubject<T>` the second subscriber would recieve `end` and then `start`.
354
- * When `subject` is a `OrderedBehaviorSubject<T>` the second subscriber would recieve `start` and then `end`.
355
- */
356
- class OrderedBehaviorSubject extends BehaviorSubject {
357
- constructor(value) {
358
- super(value);
359
- this._orderedNext = orderedQueueOperation((value) => super.next(value));
360
- this._currentValue = value;
361
- }
362
- getValue() {
363
- return this._currentValue;
364
- }
365
- next(value) {
366
- this._currentValue = value;
367
- this._orderedNext(value);
368
- }
369
- }
370
-
371
282
  /**
372
283
  * Internal Action stream that is emitted anytime an action is dispatched.
373
284
  */
374
- class InternalActions extends OrderedSubject {
285
+ class InternalActions extends _OrderedSubject {
375
286
  ngOnDestroy() {
376
287
  this.complete();
377
288
  }
@@ -413,185 +324,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
413
324
  }], ctorParameters: () => [{ type: InternalActions }, { type: InternalNgxsExecutionStrategy }] });
414
325
 
415
326
  /**
416
- * BehaviorSubject of the entire state.
417
- * @ignore
327
+ * @deprecated use `ɵStateStream` from `@ngxs/store/internals`.
418
328
  */
419
- class StateStream extends OrderedBehaviorSubject {
420
- constructor() {
421
- super({});
422
- this.state = toSignal(this, {
423
- manualCleanup: true,
424
- requireSync: true
425
- });
426
- }
427
- ngOnDestroy() {
428
- // The StateStream should never emit values once the root view is removed,
429
- // such as when the `NgModuleRef.destroy()` method is called. This is crucial
430
- // for preventing memory leaks in server-side rendered apps, where a new StateStream
431
- // is created for each HTTP request. If users forget to unsubscribe from `store.select`
432
- // or `store.subscribe`, it can result in significant memory leaks in SSR apps.
433
- this.complete();
434
- }
435
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: StateStream, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
329
+ class StateStream extends _StateStream {
330
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: StateStream, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
436
331
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: StateStream, providedIn: 'root' }); }
437
332
  }
438
333
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: StateStream, decorators: [{
439
334
  type: Injectable,
440
335
  args: [{ providedIn: 'root' }]
441
- }], ctorParameters: () => [] });
442
-
443
- /**
444
- * Returns the type from an action instance/class.
445
- * @ignore
446
- */
447
- function getActionTypeFromInstance(action) {
448
- if (action.constructor && action.constructor.type) {
449
- return action.constructor.type;
450
- }
451
- else {
452
- return action.type;
453
- }
454
- }
455
- /**
456
- * Matches a action
457
- * @ignore
458
- */
459
- function actionMatcher(action1) {
460
- const type1 = getActionTypeFromInstance(action1);
461
- return function (action2) {
462
- return type1 === getActionTypeFromInstance(action2);
463
- };
464
- }
465
- /**
466
- * Set a deeply nested value. Example:
467
- *
468
- * setValue({ foo: { bar: { eat: false } } },
469
- * 'foo.bar.eat', true) //=> { foo: { bar: { eat: true } } }
470
- *
471
- * While it traverses it also creates new objects from top down.
472
- *
473
- * @ignore
474
- */
475
- const setValue = (obj, prop, val) => {
476
- obj = { ...obj };
477
- const split = prop.split('.');
478
- const lastIndex = split.length - 1;
479
- split.reduce((acc, part, index) => {
480
- if (index === lastIndex) {
481
- acc[part] = val;
482
- }
483
- else {
484
- acc[part] = Array.isArray(acc[part]) ? acc[part].slice() : { ...acc[part] };
485
- }
486
- return acc && acc[part];
487
- }, obj);
488
- return obj;
489
- };
490
- /**
491
- * Get a deeply nested value. Example:
492
- *
493
- * getValue({ foo: bar: [] }, 'foo.bar') //=> []
494
- *
495
- * @ignore
496
- */
497
- const getValue = (obj, prop) => prop.split('.').reduce((acc, part) => acc && acc[part], obj);
498
- /**
499
- * Simple object check.
500
- *
501
- * isObject({a:1}) //=> true
502
- * isObject(1) //=> false
503
- *
504
- * @ignore
505
- */
506
- const isObject$1 = (item) => {
507
- return item && typeof item === 'object' && !Array.isArray(item);
508
- };
509
- /**
510
- * Deep merge two objects.
511
- *
512
- * mergeDeep({a:1, b:{x: 1, y:2}}, {b:{x: 3}, c:4}) //=> {a:1, b:{x:3, y:2}, c:4}
513
- *
514
- * @param base base object onto which `sources` will be applied
515
- */
516
- const mergeDeep = (base, ...sources) => {
517
- if (!sources.length)
518
- return base;
519
- const source = sources.shift();
520
- if (isObject$1(base) && isObject$1(source)) {
521
- for (const key in source) {
522
- if (isObject$1(source[key])) {
523
- if (!base[key])
524
- Object.assign(base, { [key]: {} });
525
- mergeDeep(base[key], source[key]);
526
- }
527
- else {
528
- Object.assign(base, { [key]: source[key] });
529
- }
530
- }
531
- }
532
- return mergeDeep(base, ...sources);
533
- };
534
-
535
- const NG_DEV_MODE$3 = typeof ngDevMode === 'undefined' || ngDevMode;
536
- // The injection token is used to resolve a list of states provided at
537
- // the root level through either `NgxsModule.forRoot` or `provideStore`.
538
- const ROOT_STATE_TOKEN = new InjectionToken(NG_DEV_MODE$3 ? 'ROOT_STATE_TOKEN' : '');
539
- // The injection token is used to resolve a list of states provided at
540
- // the feature level through either `NgxsModule.forFeature` or `provideStates`.
541
- // The Array<Array> is used to overload the resolved value of the token because
542
- // it is a multi-provider token.
543
- const FEATURE_STATE_TOKEN = new InjectionToken(NG_DEV_MODE$3 ? 'FEATURE_STATE_TOKEN' : '');
544
- // The injection token is used to resolve to custom NGXS plugins provided
545
- // at the root level through either `{provide}` scheme or `withNgxsPlugin`.
546
- const NGXS_PLUGINS = new InjectionToken(NG_DEV_MODE$3 ? 'NGXS_PLUGINS' : '');
547
- // The injection token is used to resolve to options provided at the root
548
- // level through either `NgxsModule.forRoot` or `provideStore`.
549
- const NGXS_OPTIONS = new InjectionToken(NG_DEV_MODE$3 ? 'NGXS_OPTIONS' : '');
550
- /**
551
- * The NGXS config settings.
552
- */
553
- class NgxsConfig {
554
- constructor() {
555
- /**
556
- * Defining the default state before module initialization
557
- * This is convenient if we need to create a define our own set of states.
558
- * @deprecated will be removed after v4
559
- * (default: {})
560
- */
561
- this.defaultsState = {};
562
- /**
563
- * Defining shared selector options
564
- */
565
- this.selectorOptions = {
566
- injectContainerState: true,
567
- suppressErrors: true // TODO: default is true in v3, will change in v4
568
- };
569
- this.compatibility = {
570
- strictContentSecurityPolicy: false
571
- };
572
- this.executionStrategy = DispatchOutsideZoneNgxsExecutionStrategy;
573
- }
574
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: NgxsConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
575
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: NgxsConfig, providedIn: 'root', useFactory: () => mergeDeep(new NgxsConfig(), inject(NGXS_OPTIONS)) }); }
576
- }
577
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: NgxsConfig, decorators: [{
578
- type: Injectable,
579
- args: [{
580
- providedIn: 'root',
581
- useFactory: () => mergeDeep(new NgxsConfig(), inject(NGXS_OPTIONS))
582
- }]
583
- }], ctorParameters: () => [] });
584
- /**
585
- * Represents a basic change from a previous to a new value for a single state instance.
586
- * Passed as a value in a NgxsSimpleChanges object to the ngxsOnChanges hook.
587
- */
588
- class NgxsSimpleChange {
589
- constructor(previousValue, currentValue, firstChange) {
590
- this.previousValue = previousValue;
591
- this.currentValue = currentValue;
592
- this.firstChange = firstChange;
593
- }
594
- }
336
+ }] });
595
337
 
596
338
  class PluginManager {
597
339
  constructor(_parentManager, _pluginHandlers) {
@@ -715,6 +457,97 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
715
457
  args: [{ providedIn: 'root' }]
716
458
  }], ctorParameters: () => [{ type: InternalActions }, { type: InternalDispatchedActionResults }, { type: PluginManager }, { type: StateStream }, { type: InternalNgxsExecutionStrategy }, { type: InternalErrorReporter }] });
717
459
 
460
+ const NG_DEV_MODE$4 = typeof ngDevMode === 'undefined' || ngDevMode;
461
+ // The injection token is used to resolve a list of states provided at
462
+ // the root level through either `NgxsModule.forRoot` or `provideStore`.
463
+ const ROOT_STATE_TOKEN = new InjectionToken(NG_DEV_MODE$4 ? 'ROOT_STATE_TOKEN' : '');
464
+ // The injection token is used to resolve a list of states provided at
465
+ // the feature level through either `NgxsModule.forFeature` or `provideStates`.
466
+ // The Array<Array> is used to overload the resolved value of the token because
467
+ // it is a multi-provider token.
468
+ const FEATURE_STATE_TOKEN = new InjectionToken(NG_DEV_MODE$4 ? 'FEATURE_STATE_TOKEN' : '');
469
+ // The injection token is used to resolve to options provided at the root
470
+ // level through either `NgxsModule.forRoot` or `provideStore`.
471
+ const NGXS_OPTIONS = new InjectionToken(NG_DEV_MODE$4 ? 'NGXS_OPTIONS' : '');
472
+ /**
473
+ * The NGXS config settings.
474
+ */
475
+ class NgxsConfig {
476
+ constructor() {
477
+ this.compatibility = {
478
+ strictContentSecurityPolicy: false
479
+ };
480
+ /**
481
+ * Determines the execution context to perform async operations inside. An implementation can be
482
+ * provided to override the default behaviour where the async operations are run
483
+ * outside Angular's zone but all observable behaviours of NGXS are run back inside Angular's zone.
484
+ * These observable behaviours are from:
485
+ * `@Select(...)`, `store.select(...)`, `actions.subscribe(...)` or `store.dispatch(...).subscribe(...)`
486
+ * Every `zone.run` causes Angular to run change detection on the whole tree (`app.tick()`) so of your
487
+ * application doesn't rely on zone.js running change detection then you can switch to the
488
+ * `NoopNgxsExecutionStrategy` that doesn't interact with zones.
489
+ * (default: null)
490
+ */
491
+ this.executionStrategy = DispatchOutsideZoneNgxsExecutionStrategy;
492
+ /**
493
+ * Defining the default state before module initialization
494
+ * This is convenient if we need to create a define our own set of states.
495
+ * @deprecated will be removed after v4
496
+ * (default: {})
497
+ */
498
+ this.defaultsState = {};
499
+ /**
500
+ * Defining shared selector options
501
+ */
502
+ this.selectorOptions = {
503
+ injectContainerState: true,
504
+ suppressErrors: true // TODO: default is true in v3, will change in v4
505
+ };
506
+ }
507
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: NgxsConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
508
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: NgxsConfig, providedIn: 'root', useFactory: () => {
509
+ const defaultConfig = new NgxsConfig();
510
+ const config = inject(NGXS_OPTIONS);
511
+ return {
512
+ ...defaultConfig,
513
+ ...config,
514
+ selectorOptions: {
515
+ ...defaultConfig.selectorOptions,
516
+ ...config.selectorOptions
517
+ }
518
+ };
519
+ } }); }
520
+ }
521
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: NgxsConfig, decorators: [{
522
+ type: Injectable,
523
+ args: [{
524
+ providedIn: 'root',
525
+ useFactory: () => {
526
+ const defaultConfig = new NgxsConfig();
527
+ const config = inject(NGXS_OPTIONS);
528
+ return {
529
+ ...defaultConfig,
530
+ ...config,
531
+ selectorOptions: {
532
+ ...defaultConfig.selectorOptions,
533
+ ...config.selectorOptions
534
+ }
535
+ };
536
+ }
537
+ }]
538
+ }] });
539
+ /**
540
+ * Represents a basic change from a previous to a new value for a single state instance.
541
+ * Passed as a value in a NgxsSimpleChanges object to the ngxsOnChanges hook.
542
+ */
543
+ class NgxsSimpleChange {
544
+ constructor(previousValue, currentValue, firstChange) {
545
+ this.previousValue = previousValue;
546
+ this.currentValue = currentValue;
547
+ this.firstChange = firstChange;
548
+ }
549
+ }
550
+
718
551
  /**
719
552
  * Object freeze code
720
553
  * https://github.com/jsdf/deep-freeze
@@ -789,61 +622,78 @@ function ensureStateAndActionsAreImmutable(root) {
789
622
  };
790
623
  }
791
624
 
792
- /**
793
- * Ensures metadata is attached to the class and returns it.
794
- *
795
- * @ignore
796
- */
797
- function ensureStoreMetadata$1(target) {
798
- if (!target.hasOwnProperty(_META_KEY)) {
799
- const defaultMetadata = {
800
- name: null,
801
- actions: {},
802
- defaults: {},
803
- path: null,
804
- makeRootSelector(context) {
805
- return context.getStateGetter(defaultMetadata.name);
806
- },
807
- children: []
625
+ function createRootSelectorFactory(selectorMetaData, selectors, memoizedSelectorFn) {
626
+ return (context) => {
627
+ const { argumentSelectorFunctions, selectorOptions } = getRuntimeSelectorInfo(context, selectorMetaData, selectors);
628
+ return function selectFromRoot(rootState) {
629
+ // Determine arguments from the app state using the selectors
630
+ const results = argumentSelectorFunctions.map(argFn => argFn(rootState));
631
+ // if the lambda tries to access a something on the
632
+ // state that doesn't exist, it will throw a TypeError.
633
+ // since this is quite usual behaviour, we simply return undefined if so.
634
+ try {
635
+ return memoizedSelectorFn(...results);
636
+ }
637
+ catch (ex) {
638
+ if (ex instanceof TypeError && selectorOptions.suppressErrors) {
639
+ return undefined;
640
+ }
641
+ throw ex;
642
+ }
808
643
  };
809
- Object.defineProperty(target, _META_KEY, { value: defaultMetadata });
810
- }
811
- return getStoreMetadata$1(target);
644
+ };
812
645
  }
813
- /**
814
- * Get the metadata attached to the state class if it exists.
815
- *
816
- * @ignore
817
- */
818
- function getStoreMetadata$1(target) {
819
- return target[_META_KEY];
646
+ function createMemoizedSelectorFn(originalFn, creationMetadata) {
647
+ const containerClass = creationMetadata && creationMetadata.containerClass;
648
+ const wrappedFn = function wrappedSelectorFn(...args) {
649
+ const returnValue = originalFn.apply(containerClass, args);
650
+ if (returnValue instanceof Function) {
651
+ const innerMemoizedFn = _memoize.apply(null, [returnValue]);
652
+ return innerMemoizedFn;
653
+ }
654
+ return returnValue;
655
+ };
656
+ const memoizedFn = _memoize(wrappedFn);
657
+ Object.setPrototypeOf(memoizedFn, originalFn);
658
+ return memoizedFn;
820
659
  }
821
- /**
822
- * Ensures metadata is attached to the selector and returns it.
823
- *
824
- * @ignore
825
- */
826
- function ensureSelectorMetadata$1(target) {
827
- if (!target.hasOwnProperty(_SELECTOR_META_KEY)) {
828
- const defaultMetadata = {
829
- makeRootSelector: null,
830
- originalFn: null,
831
- containerClass: null,
832
- selectorName: null,
833
- getSelectorOptions: () => ({})
834
- };
835
- Object.defineProperty(target, _SELECTOR_META_KEY, { value: defaultMetadata });
660
+ function getRuntimeSelectorInfo(context, selectorMetaData, selectors = []) {
661
+ const localSelectorOptions = selectorMetaData.getSelectorOptions();
662
+ const selectorOptions = context.getSelectorOptions(localSelectorOptions);
663
+ const selectorsToApply = getSelectorsToApply(selectors, selectorOptions, selectorMetaData.containerClass);
664
+ const argumentSelectorFunctions = selectorsToApply.map(selector => {
665
+ const factory = getRootSelectorFactory(selector);
666
+ return factory(context);
667
+ });
668
+ return {
669
+ selectorOptions,
670
+ argumentSelectorFunctions
671
+ };
672
+ }
673
+ function getSelectorsToApply(selectors = [], selectorOptions, containerClass) {
674
+ const selectorsToApply = [];
675
+ const canInjectContainerState = selectors.length === 0 || selectorOptions.injectContainerState;
676
+ if (containerClass && canInjectContainerState) {
677
+ // If we are on a state class, add it as the first selector parameter
678
+ const metadata = _getStoreMetadata(containerClass);
679
+ if (metadata) {
680
+ selectorsToApply.push(containerClass);
681
+ }
682
+ }
683
+ if (selectors) {
684
+ selectorsToApply.push(...selectors);
836
685
  }
837
- return getSelectorMetadata$1(target);
686
+ return selectorsToApply;
838
687
  }
839
688
  /**
840
- * Get the metadata attached to the selector if it exists.
841
- *
689
+ * This function gets the factory function to create the selector to get the selected slice from the app state
842
690
  * @ignore
843
691
  */
844
- function getSelectorMetadata$1(target) {
845
- return target[_SELECTOR_META_KEY];
692
+ function getRootSelectorFactory(selector) {
693
+ const metadata = _getSelectorMetadata(selector) || _getStoreMetadata(selector);
694
+ return (metadata && metadata.makeRootSelector) || (() => selector);
846
695
  }
696
+
847
697
  /**
848
698
  * Get a deeply nested value. Example:
849
699
  *
@@ -855,8 +705,14 @@ function getSelectorMetadata$1(target) {
855
705
  * @ignore
856
706
  */
857
707
  function compliantPropGetter(paths) {
858
- const copyOfPaths = paths.slice();
859
- return obj => copyOfPaths.reduce((acc, part) => acc && acc[part], obj);
708
+ return obj => {
709
+ for (let i = 0; i < paths.length; i++) {
710
+ if (!obj)
711
+ return undefined;
712
+ obj = obj[paths[i]];
713
+ }
714
+ return obj;
715
+ };
860
716
  }
861
717
  /**
862
718
  * The generated function is faster than:
@@ -885,7 +741,7 @@ function fastPropGetter(paths) {
885
741
  * @ignore
886
742
  */
887
743
  function propGetter(paths, config) {
888
- if (config && config.compatibility && config.compatibility.strictContentSecurityPolicy) {
744
+ if (config?.compatibility?.strictContentSecurityPolicy) {
889
745
  return compliantPropGetter(paths);
890
746
  }
891
747
  else {
@@ -1027,86 +883,6 @@ function topologicalSort(graph) {
1027
883
  Object.keys(graph).forEach(k => visit(k));
1028
884
  return sorted.reverse();
1029
885
  }
1030
- /**
1031
- * Returns if the parameter is a object or not.
1032
- *
1033
- * @ignore
1034
- */
1035
- function isObject(obj) {
1036
- return (typeof obj === 'object' && obj !== null) || typeof obj === 'function';
1037
- }
1038
-
1039
- function createRootSelectorFactory(selectorMetaData, selectors, memoizedSelectorFn) {
1040
- return (context) => {
1041
- const { argumentSelectorFunctions, selectorOptions } = getRuntimeSelectorInfo(context, selectorMetaData, selectors);
1042
- return function selectFromRoot(rootState) {
1043
- // Determine arguments from the app state using the selectors
1044
- const results = argumentSelectorFunctions.map(argFn => argFn(rootState));
1045
- // if the lambda tries to access a something on the
1046
- // state that doesn't exist, it will throw a TypeError.
1047
- // since this is quite usual behaviour, we simply return undefined if so.
1048
- try {
1049
- return memoizedSelectorFn(...results);
1050
- }
1051
- catch (ex) {
1052
- if (ex instanceof TypeError && selectorOptions.suppressErrors) {
1053
- return undefined;
1054
- }
1055
- throw ex;
1056
- }
1057
- };
1058
- };
1059
- }
1060
- function createMemoizedSelectorFn(originalFn, creationMetadata) {
1061
- const containerClass = creationMetadata && creationMetadata.containerClass;
1062
- const wrappedFn = function wrappedSelectorFn(...args) {
1063
- const returnValue = originalFn.apply(containerClass, args);
1064
- if (returnValue instanceof Function) {
1065
- const innerMemoizedFn = memoize.apply(null, [returnValue]);
1066
- return innerMemoizedFn;
1067
- }
1068
- return returnValue;
1069
- };
1070
- const memoizedFn = memoize(wrappedFn);
1071
- Object.setPrototypeOf(memoizedFn, originalFn);
1072
- return memoizedFn;
1073
- }
1074
- function getRuntimeSelectorInfo(context, selectorMetaData, selectors = []) {
1075
- const localSelectorOptions = selectorMetaData.getSelectorOptions();
1076
- const selectorOptions = context.getSelectorOptions(localSelectorOptions);
1077
- const selectorsToApply = getSelectorsToApply(selectors, selectorOptions, selectorMetaData.containerClass);
1078
- const argumentSelectorFunctions = selectorsToApply.map(selector => {
1079
- const factory = getRootSelectorFactory(selector);
1080
- return factory(context);
1081
- });
1082
- return {
1083
- selectorOptions,
1084
- argumentSelectorFunctions
1085
- };
1086
- }
1087
- function getSelectorsToApply(selectors = [], selectorOptions, containerClass) {
1088
- const selectorsToApply = [];
1089
- const canInjectContainerState = selectors.length === 0 || selectorOptions.injectContainerState;
1090
- if (containerClass && canInjectContainerState) {
1091
- // If we are on a state class, add it as the first selector parameter
1092
- const metadata = getStoreMetadata$1(containerClass);
1093
- if (metadata) {
1094
- selectorsToApply.push(containerClass);
1095
- }
1096
- }
1097
- if (selectors) {
1098
- selectorsToApply.push(...selectors);
1099
- }
1100
- return selectorsToApply;
1101
- }
1102
- /**
1103
- * This function gets the factory function to create the selector to get the selected slice from the app state
1104
- * @ignore
1105
- */
1106
- function getRootSelectorFactory(selector) {
1107
- const metadata = getSelectorMetadata$1(selector) || getStoreMetadata$1(selector);
1108
- return (metadata && metadata.makeRootSelector) || (() => selector);
1109
- }
1110
886
 
1111
887
  /**
1112
888
  * RxJS operator for selecting out specific actions.
@@ -1305,7 +1081,7 @@ function ensureStateNameIsUnique(stateName, state, statesByName) {
1305
1081
  }
1306
1082
  function ensureStatesAreDecorated(stateClasses) {
1307
1083
  stateClasses.forEach((stateClass) => {
1308
- if (!getStoreMetadata$1(stateClass)) {
1084
+ if (!_getStoreMetadata(stateClass)) {
1309
1085
  throwStateDecoratorError(stateClass.name);
1310
1086
  }
1311
1087
  });
@@ -1335,23 +1111,8 @@ function jit_hasInjectableAnnotation(stateClass) {
1335
1111
  return annotations.some((annotation) => annotation?.ngMetadataName === 'Injectable');
1336
1112
  }
1337
1113
 
1338
- /**
1339
- * Init action
1340
- */
1341
- class InitState {
1342
- static { this.type = '@@INIT'; }
1343
- }
1344
- /**
1345
- * Update action
1346
- */
1347
- class UpdateState {
1348
- static { this.type = '@@UPDATE_STATE'; }
1349
- constructor(addedStates) {
1350
- this.addedStates = addedStates;
1351
- }
1352
- }
1353
-
1354
- const NGXS_DEVELOPMENT_OPTIONS = new InjectionToken('NGXS_DEVELOPMENT_OPTIONS', {
1114
+ const NG_DEV_MODE$3 = typeof ngDevMode === 'undefined' || ngDevMode;
1115
+ const NGXS_DEVELOPMENT_OPTIONS = new InjectionToken(NG_DEV_MODE$3 ? 'NGXS_DEVELOPMENT_OPTIONS' : '', {
1355
1116
  providedIn: 'root',
1356
1117
  factory: () => ({ warnOnUnhandledActions: true })
1357
1118
  });
@@ -1398,6 +1159,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
1398
1159
  }] }] });
1399
1160
 
1400
1161
  const NG_DEV_MODE$2 = typeof ngDevMode === 'undefined' || ngDevMode;
1162
+ function cloneDefaults(defaults) {
1163
+ let value = defaults === undefined ? {} : defaults;
1164
+ if (defaults) {
1165
+ if (Array.isArray(defaults)) {
1166
+ value = defaults.slice();
1167
+ }
1168
+ else if (typeof defaults === 'object') {
1169
+ value = { ...defaults };
1170
+ }
1171
+ }
1172
+ return value;
1173
+ }
1401
1174
  /**
1402
1175
  * The `StateFactory` class adds root and feature states to the graph.
1403
1176
  * This extracts state names from state classes, checks if they already
@@ -1424,7 +1197,7 @@ class StateFactory {
1424
1197
  this._states = [];
1425
1198
  this._statesByName = {};
1426
1199
  this._statePaths = {};
1427
- this.getRuntimeSelectorContext = memoize(() => {
1200
+ this.getRuntimeSelectorContext = _memoize(() => {
1428
1201
  // eslint-disable-next-line @typescript-eslint/no-this-alias
1429
1202
  const stateFactory = this;
1430
1203
  function resolveGetter(key) {
@@ -1469,19 +1242,6 @@ class StateFactory {
1469
1242
  get statePaths() {
1470
1243
  return this._parentFactory ? this._parentFactory.statePaths : this._statePaths;
1471
1244
  }
1472
- static _cloneDefaults(defaults) {
1473
- let value = defaults;
1474
- if (Array.isArray(defaults)) {
1475
- value = defaults.slice();
1476
- }
1477
- else if (isObject(defaults)) {
1478
- value = { ...defaults };
1479
- }
1480
- else if (defaults === undefined) {
1481
- value = {};
1482
- }
1483
- return value;
1484
- }
1485
1245
  ngOnDestroy() {
1486
1246
  this._actionsSubscription?.unsubscribe();
1487
1247
  }
@@ -1518,7 +1278,7 @@ class StateFactory {
1518
1278
  isInitialised: false,
1519
1279
  actions: meta.actions,
1520
1280
  instance: this._injector.get(stateClass),
1521
- defaults: StateFactory._cloneDefaults(meta.defaults)
1281
+ defaults: cloneDefaults(meta.defaults)
1522
1282
  };
1523
1283
  // ensure our store hasn't already been added
1524
1284
  // but don't throw since it could be lazy
@@ -1635,7 +1395,7 @@ class StateFactory {
1635
1395
  const newStates = [];
1636
1396
  const statesMap = this.statesByName;
1637
1397
  for (const stateClass of stateClasses) {
1638
- const stateName = getStoreMetadata$1(stateClass).name;
1398
+ const stateName = _getStoreMetadata(stateClass).name;
1639
1399
  if (NG_DEV_MODE$2) {
1640
1400
  ensureStateNameIsUnique(stateName, stateClass, statesMap);
1641
1401
  }
@@ -1660,7 +1420,7 @@ class StateFactory {
1660
1420
  // its lifecycle is in 'bootstrapped' state.
1661
1421
  return this.statesByName[name] && valueIsBootstrappedInInitialState;
1662
1422
  }
1663
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: StateFactory, deps: [{ token: i0.Injector }, { token: NgxsConfig }, { token: StateFactory, optional: true, skipSelf: true }, { token: InternalActions }, { token: InternalDispatchedActionResults }, { token: StateContextFactory }, { token: INITIAL_STATE_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
1423
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: StateFactory, deps: [{ token: i0.Injector }, { token: NgxsConfig }, { token: StateFactory, optional: true, skipSelf: true }, { token: InternalActions }, { token: InternalDispatchedActionResults }, { token: StateContextFactory }, { token: _INITIAL_STATE_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
1664
1424
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: StateFactory }); }
1665
1425
  }
1666
1426
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: StateFactory, decorators: [{
@@ -1673,7 +1433,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
1673
1433
  type: Optional
1674
1434
  }, {
1675
1435
  type: Inject,
1676
- args: [INITIAL_STATE_TOKEN]
1436
+ args: [_INITIAL_STATE_TOKEN]
1677
1437
  }] }] });
1678
1438
 
1679
1439
  // tslint:disable:unified-signatures
@@ -1761,7 +1521,7 @@ class Store {
1761
1521
  this._stateStream.next(storeValues);
1762
1522
  }
1763
1523
  }
1764
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: Store, deps: [{ token: StateStream }, { token: InternalStateOperations }, { token: NgxsConfig }, { token: InternalNgxsExecutionStrategy }, { token: StateFactory }, { token: INITIAL_STATE_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
1524
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: Store, deps: [{ token: StateStream }, { token: InternalStateOperations }, { token: NgxsConfig }, { token: InternalNgxsExecutionStrategy }, { token: StateFactory }, { token: _INITIAL_STATE_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
1765
1525
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: Store, providedIn: 'root' }); }
1766
1526
  }
1767
1527
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: Store, decorators: [{
@@ -1771,7 +1531,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
1771
1531
  type: Optional
1772
1532
  }, {
1773
1533
  type: Inject,
1774
- args: [INITIAL_STATE_TOKEN]
1534
+ args: [_INITIAL_STATE_TOKEN]
1775
1535
  }] }] });
1776
1536
 
1777
1537
  /**
@@ -1799,12 +1559,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImpor
1799
1559
 
1800
1560
  const NG_DEV_MODE$1 = typeof ngDevMode === 'undefined' || ngDevMode;
1801
1561
  class LifecycleStateManager {
1802
- constructor(_store, _internalErrorReporter, _internalStateOperations, _stateContextFactory, _bootstrapper) {
1562
+ constructor(_store, _internalErrorReporter, _internalStateOperations, _stateContextFactory, _appBootstrappedState) {
1803
1563
  this._store = _store;
1804
1564
  this._internalErrorReporter = _internalErrorReporter;
1805
1565
  this._internalStateOperations = _internalStateOperations;
1806
1566
  this._stateContextFactory = _stateContextFactory;
1807
- this._bootstrapper = _bootstrapper;
1567
+ this._appBootstrappedState = _appBootstrappedState;
1808
1568
  this._destroy$ = new ReplaySubject(1);
1809
1569
  }
1810
1570
  ngOnDestroy() {
@@ -1829,7 +1589,7 @@ class LifecycleStateManager {
1829
1589
  this._internalStateOperations
1830
1590
  .getRootStateOperations()
1831
1591
  .dispatch(action)
1832
- .pipe(filter(() => !!results), tap(() => this._invokeInitOnStates(results.states)), mergeMap(() => this._bootstrapper.appBootstrapped$), filter(appBootstrapped => !!appBootstrapped), catchError(error => {
1592
+ .pipe(filter(() => !!results), tap(() => this._invokeInitOnStates(results.states)), mergeMap(() => this._appBootstrappedState), filter(appBootstrapped => !!appBootstrapped), catchError(error => {
1833
1593
  // The `SafeSubscriber` (which is used by most RxJS operators) re-throws
1834
1594
  // errors asynchronously (`setTimeout(() => { throw error })`). This might
1835
1595
  // break existing user's code or unit tests. We catch the error manually to
@@ -1868,13 +1628,13 @@ class LifecycleStateManager {
1868
1628
  _getStateContext(mappedStore) {
1869
1629
  return this._stateContextFactory.createStateContext(mappedStore);
1870
1630
  }
1871
- /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: LifecycleStateManager, deps: [{ token: Store }, { token: InternalErrorReporter }, { token: InternalStateOperations }, { token: StateContextFactory }, { token: i5.NgxsBootstrapper }], target: i0.ɵɵFactoryTarget.Injectable }); }
1631
+ /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: LifecycleStateManager, deps: [{ token: Store }, { token: InternalErrorReporter }, { token: InternalStateOperations }, { token: StateContextFactory }, { token: i5.ɵNgxsAppBootstrappedState }], target: i0.ɵɵFactoryTarget.Injectable }); }
1872
1632
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: LifecycleStateManager, providedIn: 'root' }); }
1873
1633
  }
1874
1634
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: LifecycleStateManager, decorators: [{
1875
1635
  type: Injectable,
1876
1636
  args: [{ providedIn: 'root' }]
1877
- }], ctorParameters: () => [{ type: Store }, { type: InternalErrorReporter }, { type: InternalStateOperations }, { type: StateContextFactory }, { type: i5.NgxsBootstrapper }] });
1637
+ }], ctorParameters: () => [{ type: Store }, { type: InternalErrorReporter }, { type: InternalStateOperations }, { type: StateContextFactory }, { type: i5.ɵNgxsAppBootstrappedState }] });
1878
1638
 
1879
1639
  const NG_DEV_MODE = typeof ngDevMode === 'undefined' || ngDevMode;
1880
1640
  /**
@@ -2000,8 +1760,8 @@ function getRootProviders(states, options) {
2000
1760
  {
2001
1761
  provide: APP_BOOTSTRAP_LISTENER,
2002
1762
  useFactory: () => {
2003
- const bootstrapper = inject(NgxsBootstrapper);
2004
- return () => bootstrapper.bootstrap();
1763
+ const appBootstrappedState = inject(_NgxsAppBootstrappedState);
1764
+ return () => appBootstrappedState.bootstrap();
2005
1765
  },
2006
1766
  multi: true
2007
1767
  },
@@ -2075,7 +1835,7 @@ function Action(actions, options) {
2075
1835
  throwActionDecoratorError();
2076
1836
  }
2077
1837
  }
2078
- const meta = ensureStoreMetadata$1(target.constructor);
1838
+ const meta = _ensureStoreMetadata(target.constructor);
2079
1839
  if (!Array.isArray(actions)) {
2080
1840
  actions = [actions];
2081
1841
  }
@@ -2099,7 +1859,7 @@ function Action(actions, options) {
2099
1859
  function State(options) {
2100
1860
  return (target) => {
2101
1861
  const stateClass = target;
2102
- const meta = ensureStoreMetadata$1(stateClass);
1862
+ const meta = _ensureStoreMetadata(stateClass);
2103
1863
  const inheritedStateClass = Object.getPrototypeOf(stateClass);
2104
1864
  const optionsWithInheritance = getStateOptions(inheritedStateClass, options);
2105
1865
  mutateMetaData({ meta, inheritedStateClass, optionsWithInheritance });
@@ -2189,7 +1949,7 @@ const selectorOptionsMetaAccessor = {
2189
1949
  }
2190
1950
  };
2191
1951
  function setupSelectorMetadata(originalFn, creationMetadata) {
2192
- const selectorMetaData = ensureSelectorMetadata$1(originalFn);
1952
+ const selectorMetaData = _ensureSelectorMetadata(originalFn);
2193
1953
  selectorMetaData.originalFn = originalFn;
2194
1954
  let getExplicitSelectorOptions = () => ({});
2195
1955
  if (creationMetadata) {
@@ -2231,17 +1991,29 @@ function SelectorOptions(options) {
2231
1991
  });
2232
1992
  }
2233
1993
 
1994
+ /**
1995
+ * @deprecated will be removed after v4
1996
+ */
2234
1997
  function ensureStoreMetadata(target) {
2235
- return ensureStoreMetadata$1(target);
1998
+ return _ensureStoreMetadata(target);
2236
1999
  }
2000
+ /**
2001
+ * @deprecated will be removed after v4
2002
+ */
2237
2003
  function getStoreMetadata(target) {
2238
- return getStoreMetadata$1(target);
2004
+ return _getStoreMetadata(target);
2239
2005
  }
2006
+ /**
2007
+ * @deprecated will be removed after v4
2008
+ */
2240
2009
  function ensureSelectorMetadata(target) {
2241
- return ensureSelectorMetadata$1(target);
2010
+ return _ensureSelectorMetadata(target);
2242
2011
  }
2012
+ /**
2013
+ * @deprecated will be removed after v4
2014
+ */
2243
2015
  function getSelectorMetadata(target) {
2244
- return getSelectorMetadata$1(target);
2016
+ return _getSelectorMetadata(target);
2245
2017
  }
2246
2018
 
2247
2019
  function createSelector(selectors, projector, creationMetadata) {
@@ -2281,22 +2053,6 @@ function Selector(selectors) {
2281
2053
  };
2282
2054
  }
2283
2055
 
2284
- class StateToken {
2285
- constructor(name) {
2286
- this.name = name;
2287
- const selectorMetadata = ensureSelectorMetadata$1(this);
2288
- selectorMetadata.makeRootSelector = (runtimeContext) => {
2289
- return runtimeContext.getStateGetter(this.name);
2290
- };
2291
- }
2292
- getName() {
2293
- return this.name;
2294
- }
2295
- toString() {
2296
- return `StateToken[${this.name}]`;
2297
- }
2298
- }
2299
-
2300
2056
  class NgxsDevelopmentModule {
2301
2057
  static forRoot(options) {
2302
2058
  return {
@@ -2314,12 +2070,18 @@ class NgxsDevelopmentModule {
2314
2070
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.5", ngImport: i0, type: NgxsDevelopmentModule, decorators: [{
2315
2071
  type: NgModule
2316
2072
  }] });
2073
+ function provideNgxsDevelopmentOptions(options) {
2074
+ return makeEnvironmentProviders([
2075
+ NgxsUnhandledActionsLogger,
2076
+ { provide: NGXS_DEVELOPMENT_OPTIONS, useValue: options }
2077
+ ]);
2078
+ }
2317
2079
 
2318
2080
  function ensureValidSelector(selector, context = {}) {
2319
2081
  const noun = context.noun || 'selector';
2320
2082
  const prefix = context.prefix ? context.prefix + ': ' : '';
2321
2083
  ensureValueProvided(selector, { noun, prefix: context.prefix });
2322
- const metadata = getSelectorMetadata$1(selector) || getStoreMetadata$1(selector);
2084
+ const metadata = _getSelectorMetadata(selector) || _getStoreMetadata(selector);
2323
2085
  if (!metadata) {
2324
2086
  throw new Error(`${prefix}The value provided as the ${noun} is not a valid selector.`);
2325
2087
  }
@@ -2464,5 +2226,5 @@ function withNgxsPlugin(plugin) {
2464
2226
  * Generated bundle index. Do not edit.
2465
2227
  */
2466
2228
 
2467
- export { Action, Actions, InitState, NGXS_PLUGINS, NgxsDevelopmentModule, NgxsModule, NgxsSimpleChange, NgxsUnhandledActionsLogger, NoopNgxsExecutionStrategy, Select, Selector, SelectorOptions, State, StateStream, StateToken, Store, UpdateState, actionMatcher, createModelSelector, createPickSelector, createPropertySelectors, createSelector, ensureSelectorMetadata, ensureStoreMetadata, getActionTypeFromInstance, getSelectorMetadata, getStoreMetadata, getValue, ofAction, ofActionCanceled, ofActionCompleted, ofActionDispatched, ofActionErrored, ofActionSuccessful, provideStates, provideStore, setValue, withNgxsPlugin, NgxsFeatureModule as ɵNgxsFeatureModule, NgxsRootModule as ɵNgxsRootModule };
2229
+ export { Action, Actions, NgxsDevelopmentModule, NgxsModule, NgxsSimpleChange, NgxsUnhandledActionsLogger, NoopNgxsExecutionStrategy, Select, Selector, SelectorOptions, State, StateStream, Store, createModelSelector, createPickSelector, createPropertySelectors, createSelector, ensureSelectorMetadata, ensureStoreMetadata, getSelectorMetadata, getStoreMetadata, ofAction, ofActionCanceled, ofActionCompleted, ofActionDispatched, ofActionErrored, ofActionSuccessful, provideStates, provideStore, withNgxsPlugin, NgxsFeatureModule as ɵNgxsFeatureModule, NgxsRootModule as ɵNgxsRootModule };
2468
2230
  //# sourceMappingURL=ngxs-store.mjs.map