@ngxs/store 18.1.5-dev.master-a6757af → 18.1.5-dev.master-6ec891b

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.
@@ -1,4 +1,4 @@
1
1
  export { InitState, UpdateState } from './actions';
2
- export { NGXS_PLUGINS } from './symbols';
2
+ export { NGXS_PLUGINS, ɵisPluginClass } from './symbols';
3
3
  export { getActionTypeFromInstance, actionMatcher, setValue, getValue } from './utils';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9wbHVnaW5zL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUE4QyxNQUFNLFdBQVcsQ0FBQztBQUNyRixPQUFPLEVBQUUseUJBQXlCLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBJbml0U3RhdGUsIFVwZGF0ZVN0YXRlIH0gZnJvbSAnLi9hY3Rpb25zJztcbmV4cG9ydCB7IE5HWFNfUExVR0lOUywgTmd4c1BsdWdpbiwgTmd4c1BsdWdpbkZuLCBOZ3hzTmV4dFBsdWdpbkZuIH0gZnJvbSAnLi9zeW1ib2xzJztcbmV4cG9ydCB7IGdldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UsIGFjdGlvbk1hdGNoZXIsIHNldFZhbHVlLCBnZXRWYWx1ZSB9IGZyb20gJy4vdXRpbHMnO1xuIl19
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9wbHVnaW5zL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsWUFBWSxFQUlaLGNBQWMsRUFDZixNQUFNLFdBQVcsQ0FBQztBQUNuQixPQUFPLEVBQUUseUJBQXlCLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBJbml0U3RhdGUsIFVwZGF0ZVN0YXRlIH0gZnJvbSAnLi9hY3Rpb25zJztcbmV4cG9ydCB7XG4gIE5HWFNfUExVR0lOUyxcbiAgTmd4c1BsdWdpbixcbiAgTmd4c1BsdWdpbkZuLFxuICBOZ3hzTmV4dFBsdWdpbkZuLFxuICDJtWlzUGx1Z2luQ2xhc3Ncbn0gZnJvbSAnLi9zeW1ib2xzJztcbmV4cG9ydCB7IGdldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UsIGFjdGlvbk1hdGNoZXIsIHNldFZhbHVlLCBnZXRWYWx1ZSB9IGZyb20gJy4vdXRpbHMnO1xuIl19
@@ -1,5 +1,15 @@
1
1
  import { InjectionToken } from '@angular/core';
2
- // The injection token is used to resolve to custom NGXS plugins provided
3
- // at the root level through either `{provide}` scheme or `withNgxsPlugin`.
4
- export const NGXS_PLUGINS = new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'NGXS_PLUGINS' : '');
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0b3JlL3BsdWdpbnMvc3JjL3N5bWJvbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUkvQyx5RUFBeUU7QUFDekUsMkVBQTJFO0FBQzNFLE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBRyxJQUFJLGNBQWMsQ0FDNUMsT0FBTyxTQUFTLEtBQUssV0FBVyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3BFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5kZWNsYXJlIGNvbnN0IG5nRGV2TW9kZTogYm9vbGVhbjtcblxuLy8gVGhlIGluamVjdGlvbiB0b2tlbiBpcyB1c2VkIHRvIHJlc29sdmUgdG8gY3VzdG9tIE5HWFMgcGx1Z2lucyBwcm92aWRlZFxuLy8gYXQgdGhlIHJvb3QgbGV2ZWwgdGhyb3VnaCBlaXRoZXIgYHtwcm92aWRlfWAgc2NoZW1lIG9yIGB3aXRoTmd4c1BsdWdpbmAuXG5leHBvcnQgY29uc3QgTkdYU19QTFVHSU5TID0gbmV3IEluamVjdGlvblRva2VuKFxuICB0eXBlb2YgbmdEZXZNb2RlICE9PSAndW5kZWZpbmVkJyAmJiBuZ0Rldk1vZGUgPyAnTkdYU19QTFVHSU5TJyA6ICcnXG4pO1xuXG5leHBvcnQgdHlwZSBOZ3hzUGx1Z2luRm4gPSAoc3RhdGU6IGFueSwgbXV0YXRpb246IGFueSwgbmV4dDogTmd4c05leHRQbHVnaW5GbikgPT4gYW55O1xuXG5leHBvcnQgdHlwZSBOZ3hzTmV4dFBsdWdpbkZuID0gKHN0YXRlOiBhbnksIG11dGF0aW9uOiBhbnkpID0+IGFueTtcblxuLyoqXG4gKiBQbHVnaW4gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmd4c1BsdWdpbiB7XG4gIC8qKlxuICAgKiBIYW5kbGUgdGhlIHN0YXRlL2FjdGlvbiBiZWZvcmUgaXRzIHN1Ym1pdHRlZCB0byB0aGUgc3RhdGUgaGFuZGxlcnMuXG4gICAqL1xuICBoYW5kbGUoc3RhdGU6IGFueSwgYWN0aW9uOiBhbnksIG5leHQ6IE5neHNOZXh0UGx1Z2luRm4pOiBhbnk7XG59XG4iXX0=
2
+ /**
3
+ * A multi-provider token used to resolve to custom NGXS plugins provided
4
+ * at the root and feature levels through the `{provide}` scheme.
5
+ *
6
+ * @deprecated from v18.0.0, use `withNgxsPlugin` instead.
7
+ */
8
+ export const NGXS_PLUGINS = /* @__PURE__ */ new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'NGXS_PLUGINS' : '');
9
+ export function ɵisPluginClass(plugin) {
10
+ // Determines whether the provided value is a class rather than a function.
11
+ // If it’s a class, its handle method should be defined on its prototype,
12
+ // as plugins can be either classes or functions.
13
+ return !!plugin.prototype.handle;
14
+ }
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltYm9scy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0b3JlL3BsdWdpbnMvc3JjL3N5bWJvbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBUSxNQUFNLGVBQWUsQ0FBQztBQWtCckQ7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsZUFBZSxDQUFDLElBQUksY0FBYyxDQUM1RCxPQUFPLFNBQVMsS0FBSyxXQUFXLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FDcEUsQ0FBQztBQUVGLE1BQU0sVUFBVSxjQUFjLENBQzVCLE1BQXVDO0lBRXZDLDJFQUEyRTtJQUMzRSx5RUFBeUU7SUFDekUsaURBQWlEO0lBQ2pELE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5kZWNsYXJlIGNvbnN0IG5nRGV2TW9kZTogYm9vbGVhbjtcblxuZXhwb3J0IHR5cGUgTmd4c05leHRQbHVnaW5GbiA9IChzdGF0ZTogYW55LCBhY3Rpb246IGFueSkgPT4gYW55O1xuXG5leHBvcnQgdHlwZSBOZ3hzUGx1Z2luRm4gPSAoc3RhdGU6IGFueSwgYWN0aW9uOiBhbnksIG5leHQ6IE5neHNOZXh0UGx1Z2luRm4pID0+IGFueTtcblxuLyoqXG4gKiBQbHVnaW4gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmd4c1BsdWdpbiB7XG4gIC8qKlxuICAgKiBIYW5kbGUgdGhlIHN0YXRlL2FjdGlvbiBiZWZvcmUgaXRzIHN1Ym1pdHRlZCB0byB0aGUgc3RhdGUgaGFuZGxlcnMuXG4gICAqL1xuICBoYW5kbGUoc3RhdGU6IGFueSwgYWN0aW9uOiBhbnksIG5leHQ6IE5neHNOZXh0UGx1Z2luRm4pOiBhbnk7XG59XG5cbi8qKlxuICogQSBtdWx0aS1wcm92aWRlciB0b2tlbiB1c2VkIHRvIHJlc29sdmUgdG8gY3VzdG9tIE5HWFMgcGx1Z2lucyBwcm92aWRlZFxuICogYXQgdGhlIHJvb3QgYW5kIGZlYXR1cmUgbGV2ZWxzIHRocm91Z2ggdGhlIGB7cHJvdmlkZX1gIHNjaGVtZS5cbiAqXG4gKiBAZGVwcmVjYXRlZCBmcm9tIHYxOC4wLjAsIHVzZSBgd2l0aE5neHNQbHVnaW5gIGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBOR1hTX1BMVUdJTlMgPSAvKiBAX19QVVJFX18gKi8gbmV3IEluamVjdGlvblRva2VuPE5neHNQbHVnaW5bXT4oXG4gIHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSA/ICdOR1hTX1BMVUdJTlMnIDogJydcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiDJtWlzUGx1Z2luQ2xhc3MoXG4gIHBsdWdpbjogVHlwZTxOZ3hzUGx1Z2luPiB8IE5neHNQbHVnaW5GblxuKTogcGx1Z2luIGlzIFR5cGU8Tmd4c1BsdWdpbj4ge1xuICAvLyBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHZhbHVlIGlzIGEgY2xhc3MgcmF0aGVyIHRoYW4gYSBmdW5jdGlvbi5cbiAgLy8gSWYgaXTigJlzIGEgY2xhc3MsIGl0cyBoYW5kbGUgbWV0aG9kIHNob3VsZCBiZSBkZWZpbmVkIG9uIGl0cyBwcm90b3R5cGUsXG4gIC8vIGFzIHBsdWdpbnMgY2FuIGJlIGVpdGhlciBjbGFzc2VzIG9yIGZ1bmN0aW9ucy5cbiAgcmV0dXJuICEhcGx1Z2luLnByb3RvdHlwZS5oYW5kbGU7XG59XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { inject, Injectable, Injector, NgZone, runInInjectionContext } from '@angular/core';
2
- import { EMPTY, forkJoin, of, Subject, throwError } from 'rxjs';
3
- import { exhaustMap, filter, map, shareReplay, take } from 'rxjs/operators';
2
+ import { forkJoin, of, Subject, throwError } from 'rxjs';
3
+ import { filter, map, mergeMap, shareReplay, take } from 'rxjs/operators';
4
4
  import { getActionTypeFromInstance } from '@ngxs/store/plugins';
5
5
  import { ɵStateStream } from '@ngxs/store/internals';
6
6
  import { InternalActions } from '../actions-stream';
@@ -77,20 +77,20 @@ export class InternalDispatcher {
77
77
  return this._actionResults.pipe(filter((ctx) => ctx.action === action && ctx.status !== "DISPATCHED" /* ActionStatus.Dispatched */), take(1), shareReplay());
78
78
  }
79
79
  createDispatchObservable(actionResult$) {
80
- return actionResult$
81
- .pipe(exhaustMap((ctx) => {
80
+ return actionResult$.pipe(mergeMap((ctx) => {
82
81
  switch (ctx.status) {
83
82
  case "SUCCESSFUL" /* ActionStatus.Successful */:
84
83
  // The `createDispatchObservable` function should return the
85
- // state, as its result is utilized by plugins.
84
+ // state, as its result is used by plugins.
86
85
  return of(this._stateStream.getValue());
87
86
  case "ERRORED" /* ActionStatus.Errored */:
88
87
  return throwError(() => ctx.error);
89
88
  default:
90
- return EMPTY;
89
+ // Once dispatched or canceled, we complete it immediately because
90
+ // `dispatch()` should emit (or error, or complete) as soon as it succeeds or fails.
91
+ return of();
91
92
  }
92
- }))
93
- .pipe(shareReplay());
93
+ }), shareReplay());
94
94
  }
95
95
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: InternalDispatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
96
96
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: InternalDispatcher, providedIn: 'root' }); }
@@ -122,4 +122,4 @@ const compose = (injector, funcs) => (...args) => {
122
122
  const curr = funcs.shift();
123
123
  return runInInjectionContext(injector, () => curr(...args, (...nextArgs) => compose(injector, funcs)(...nextArgs)));
124
124
  };
125
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0b3JlL3NyYy9pbnRlcm5hbC9kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDNUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU1RSxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNoRSxPQUFPLEVBQWdCLFlBQVksRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRW5FLE9BQU8sRUFBK0IsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDakYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSw2QkFBNkIsRUFBRSxNQUFNLCtDQUErQyxDQUFDO0FBQzlGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFFM0Q7Ozs7O0dBS0c7QUFFSCxNQUFNLE9BQU8sK0JBQWdDLFNBQVEsT0FBc0I7aUlBQTlELCtCQUErQjtxSUFBL0IsK0JBQStCLGNBRGxCLE1BQU07OzJGQUNuQiwrQkFBK0I7a0JBRDNDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOztBQUlsQyxNQUFNLE9BQU8sa0JBQWtCO0lBRC9CO1FBRVUsWUFBTyxHQUFHLE1BQU0sQ0FB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LEVBQUUsS0FBZ0IsRUFBRSxFQUFFLENBQ3pDLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRTtJQUNqQixNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsS0FBSyxFQUFHLENBQUM7SUFDNUIsT0FBTyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQzFDLElBQUksQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLEdBQUcsUUFBZSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FDN0UsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgSW5qZWN0b3IsIE5nWm9uZSwgcnVuSW5JbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBFTVBUWSwgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBleGhhdXN0TWFwLCBmaWx0ZXIsIG1hcCwgc2hhcmVSZXBsYXksIHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IGdldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UgfSBmcm9tICdAbmd4cy9zdG9yZS9wbHVnaW5zJztcbmltcG9ydCB7IMm1UGxhaW5PYmplY3QsIMm1U3RhdGVTdHJlYW0gfSBmcm9tICdAbmd4cy9zdG9yZS9pbnRlcm5hbHMnO1xuXG5pbXBvcnQgeyBBY3Rpb25Db250ZXh0LCBBY3Rpb25TdGF0dXMsIEludGVybmFsQWN0aW9ucyB9IGZyb20gJy4uL2FjdGlvbnMtc3RyZWFtJztcbmltcG9ydCB7IFBsdWdpbk1hbmFnZXIgfSBmcm9tICcuLi9wbHVnaW4tbWFuYWdlcic7XG5pbXBvcnQgeyBJbnRlcm5hbE5neHNFeGVjdXRpb25TdHJhdGVneSB9IGZyb20gJy4uL2V4ZWN1dGlvbi9pbnRlcm5hbC1uZ3hzLWV4ZWN1dGlvbi1zdHJhdGVneSc7XG5pbXBvcnQgeyBsZWF2ZU5neHMgfSBmcm9tICcuLi9vcGVyYXRvcnMvbGVhdmUtbmd4cyc7XG5pbXBvcnQgeyBmYWxsYmFja1N1YnNjcmliZXIgfSBmcm9tICcuL2ZhbGxiYWNrLXN1YnNjcmliZXInO1xuXG4vKipcbiAqIEludGVybmFsIEFjdGlvbiByZXN1bHQgc3RyZWFtIHRoYXQgaXMgZW1pdHRlZCB3aGVuIGFuIGFjdGlvbiBpcyBjb21wbGV0ZWQuXG4gKiBUaGlzIGlzIHVzZWQgYXMgYSBtZXRob2Qgb2YgcmV0dXJuaW5nIHRoZSBhY3Rpb24gcmVzdWx0IHRvIHRoZSBkaXNwYXRjaGVyXG4gKiBmb3IgdGhlIG9ic2VydmFibGUgcmV0dXJuZWQgYnkgdGhlIGRpc3BhdGNoKC4uLikgY2FsbC5cbiAqIFRoZSBkaXNwYXRjaGVyIHRoZW4gYXN5bmNocm9ub3VzbHkgcHVzaGVzIHRoZSByZXN1bHQgZnJvbSB0aGlzIHN0cmVhbSBvbnRvIHRoZSBtYWluIGFjdGlvbiBzdHJlYW0gYXMgYSByZXN1bHQuXG4gKi9cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgSW50ZXJuYWxEaXNwYXRjaGVkQWN0aW9uUmVzdWx0cyBleHRlbmRzIFN1YmplY3Q8QWN0aW9uQ29udGV4dD4ge31cblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBJbnRlcm5hbERpc3BhdGNoZXIge1xuICBwcml2YXRlIF9uZ1pvbmUgPSBpbmplY3QoTmdab25lKTtcbiAgcHJpdmF0ZSBfYWN0aW9ucyA9IGluamVjdChJbnRlcm5hbEFjdGlvbnMpO1xuICBwcml2YXRlIF9hY3Rpb25SZXN1bHRzID0gaW5qZWN0KEludGVybmFsRGlzcGF0Y2hlZEFjdGlvblJlc3VsdHMpO1xuICBwcml2YXRlIF9wbHVnaW5NYW5hZ2VyID0gaW5qZWN0KFBsdWdpbk1hbmFnZXIpO1xuICBwcml2YXRlIF9zdGF0ZVN0cmVhbSA9IGluamVjdCjJtVN0YXRlU3RyZWFtKTtcbiAgcHJpdmF0ZSBfbmd4c0V4ZWN1dGlvblN0cmF0ZWd5ID0gaW5qZWN0KEludGVybmFsTmd4c0V4ZWN1dGlvblN0cmF0ZWd5KTtcbiAgcHJpdmF0ZSBfaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIC8qKlxuICAgKiBEaXNwYXRjaGVzIGV2ZW50KHMpLlxuICAgKi9cbiAgZGlzcGF0Y2goYWN0aW9uT3JBY3Rpb25zOiBhbnkgfCBhbnlbXSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX25neHNFeGVjdXRpb25TdHJhdGVneS5lbnRlcigoKSA9PlxuICAgICAgdGhpcy5kaXNwYXRjaEJ5RXZlbnRzKGFjdGlvbk9yQWN0aW9ucylcbiAgICApO1xuXG4gICAgcmV0dXJuIHJlc3VsdC5waXBlKFxuICAgICAgZmFsbGJhY2tTdWJzY3JpYmVyKHRoaXMuX25nWm9uZSksXG4gICAgICBsZWF2ZU5neHModGhpcy5fbmd4c0V4ZWN1dGlvblN0cmF0ZWd5KVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoQnlFdmVudHMoYWN0aW9uT3JBY3Rpb25zOiBhbnkgfCBhbnlbXSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFjdGlvbk9yQWN0aW9ucykpIHtcbiAgICAgIGlmIChhY3Rpb25PckFjdGlvbnMubGVuZ3RoID09PSAwKSByZXR1cm4gb2YodW5kZWZpbmVkKTtcblxuICAgICAgcmV0dXJuIGZvcmtKb2luKGFjdGlvbk9yQWN0aW9ucy5tYXAoYWN0aW9uID0+IHRoaXMuZGlzcGF0Y2hTaW5nbGUoYWN0aW9uKSkpLnBpcGUoXG4gICAgICAgIG1hcCgoKSA9PiB1bmRlZmluZWQpXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5kaXNwYXRjaFNpbmdsZShhY3Rpb25PckFjdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGlzcGF0Y2hTaW5nbGUoYWN0aW9uOiBhbnkpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAodHlwZW9mIG5nRGV2TW9kZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbmdEZXZNb2RlKSB7XG4gICAgICBjb25zdCB0eXBlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlKGFjdGlvbik7XG4gICAgICBpZiAoIXR5cGUpIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICAgICAgYFRoaXMgYWN0aW9uIGRvZXNuJ3QgaGF2ZSBhIHR5cGUgcHJvcGVydHk6ICR7YWN0aW9uLmNvbnN0cnVjdG9yLm5hbWV9YFxuICAgICAgICApO1xuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJldlN0YXRlID0gdGhpcy5fc3RhdGVTdHJlYW0uZ2V0VmFsdWUoKTtcbiAgICBjb25zdCBwbHVnaW5zID0gdGhpcy5fcGx1Z2luTWFuYWdlci5wbHVnaW5zO1xuXG4gICAgcmV0dXJuIGNvbXBvc2UodGhpcy5faW5qZWN0b3IsIFtcbiAgICAgIC4uLnBsdWdpbnMsXG4gICAgICAobmV4dFN0YXRlOiBhbnksIG5leHRBY3Rpb246IGFueSkgPT4ge1xuICAgICAgICBpZiAobmV4dFN0YXRlICE9PSBwcmV2U3RhdGUpIHtcbiAgICAgICAgICB0aGlzLl9zdGF0ZVN0cmVhbS5uZXh0KG5leHRTdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYWN0aW9uUmVzdWx0JCA9IHRoaXMuZ2V0QWN0aW9uUmVzdWx0U3RyZWFtKG5leHRBY3Rpb24pO1xuICAgICAgICBhY3Rpb25SZXN1bHQkLnN1YnNjcmliZShjdHggPT4gdGhpcy5fYWN0aW9ucy5uZXh0KGN0eCkpO1xuICAgICAgICB0aGlzLl9hY3Rpb25zLm5leHQoeyBhY3Rpb246IG5leHRBY3Rpb24sIHN0YXR1czogQWN0aW9uU3RhdHVzLkRpc3BhdGNoZWQgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZURpc3BhdGNoT2JzZXJ2YWJsZShhY3Rpb25SZXN1bHQkKTtcbiAgICAgIH1cbiAgICBdKShwcmV2U3RhdGUsIGFjdGlvbikucGlwZShzaGFyZVJlcGxheSgpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aW9uUmVzdWx0U3RyZWFtKGFjdGlvbjogYW55KTogT2JzZXJ2YWJsZTxBY3Rpb25Db250ZXh0PiB7XG4gICAgcmV0dXJuIHRoaXMuX2FjdGlvblJlc3VsdHMucGlwZShcbiAgICAgIGZpbHRlcihcbiAgICAgICAgKGN0eDogQWN0aW9uQ29udGV4dCkgPT4gY3R4LmFjdGlvbiA9PT0gYWN0aW9uICYmIGN0eC5zdGF0dXMgIT09IEFjdGlvblN0YXR1cy5EaXNwYXRjaGVkXG4gICAgICApLFxuICAgICAgdGFrZSgxKSxcbiAgICAgIHNoYXJlUmVwbGF5KClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEaXNwYXRjaE9ic2VydmFibGUoXG4gICAgYWN0aW9uUmVzdWx0JDogT2JzZXJ2YWJsZTxBY3Rpb25Db250ZXh0PlxuICApOiBPYnNlcnZhYmxlPMm1UGxhaW5PYmplY3Q+IHtcbiAgICByZXR1cm4gYWN0aW9uUmVzdWx0JFxuICAgICAgLnBpcGUoXG4gICAgICAgIGV4aGF1c3RNYXAoKGN0eDogQWN0aW9uQ29udGV4dCkgPT4ge1xuICAgICAgICAgIHN3aXRjaCAoY3R4LnN0YXR1cykge1xuICAgICAgICAgICAgY2FzZSBBY3Rpb25TdGF0dXMuU3VjY2Vzc2Z1bDpcbiAgICAgICAgICAgICAgLy8gVGhlIGBjcmVhdGVEaXNwYXRjaE9ic2VydmFibGVgIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gdGhlXG4gICAgICAgICAgICAgIC8vIHN0YXRlLCBhcyBpdHMgcmVzdWx0IGlzIHV0aWxpemVkIGJ5IHBsdWdpbnMuXG4gICAgICAgICAgICAgIHJldHVybiBvZih0aGlzLl9zdGF0ZVN0cmVhbS5nZXRWYWx1ZSgpKTtcbiAgICAgICAgICAgIGNhc2UgQWN0aW9uU3RhdHVzLkVycm9yZWQ6XG4gICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IGN0eC5lcnJvcik7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gRU1QVFk7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgLnBpcGUoc2hhcmVSZXBsYXkoKSk7XG4gIH1cbn1cblxudHlwZSBTdGF0ZUZuID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG5cbi8qKlxuICogQ29tcG9zZXMgYSBhcnJheSBvZiBmdW5jdGlvbnMgZnJvbSBsZWZ0IHRvIHJpZ2h0LiBFeGFtcGxlOlxuICpcbiAqICAgICAgY29tcG9zZShbZm4sIGZpbmFsXSkoc3RhdGUsIGFjdGlvbik7XG4gKlxuICogdGhlbiB0aGUgZnVuY3MgaGF2ZSBhIHNpZ25hdHVyZSBsaWtlOlxuICpcbiAqICAgICAgZnVuY3Rpb24gZm4gKHN0YXRlLCBhY3Rpb24sIG5leHQpIHtcbiAqICAgICAgICAgIGNvbnNvbGUubG9nKCdoZXJlJywgc3RhdGUsIGFjdGlvbiwgbmV4dCk7XG4gKiAgICAgICAgICByZXR1cm4gbmV4dChzdGF0ZSwgYWN0aW9uKTtcbiAqICAgICAgfVxuICpcbiAqICAgICAgZnVuY3Rpb24gZmluYWwgKHN0YXRlLCBhY3Rpb24pIHtcbiAqICAgICAgICAgIGNvbnNvbGUubG9nKCdoZXJlJywgc3RhdGUsIGFjdGlvbik7XG4gKiAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gKiAgICAgIH1cbiAqXG4gKiB0aGUgbGFzdCBmdW5jdGlvbiBzaG91bGQgbm90IGNhbGwgYG5leHRgLlxuICovXG5jb25zdCBjb21wb3NlID1cbiAgKGluamVjdG9yOiBJbmplY3RvciwgZnVuY3M6IFN0YXRlRm5bXSkgPT5cbiAgKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgY29uc3QgY3VyciA9IGZ1bmNzLnNoaWZ0KCkhO1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+XG4gICAgICBjdXJyKC4uLmFyZ3MsICguLi5uZXh0QXJnczogYW55W10pID0+IGNvbXBvc2UoaW5qZWN0b3IsIGZ1bmNzKSguLi5uZXh0QXJncykpXG4gICAgKTtcbiAgfTtcbiJdfQ==
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzcGF0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3N0b3JlL3NyYy9pbnRlcm5hbC9kaXNwYXRjaGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFFLFFBQVEsRUFBYyxFQUFFLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNyRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTFFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hFLE9BQU8sRUFBZ0IsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFbkUsT0FBTyxFQUErQixlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDbEQsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDOUYsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOztBQUUzRDs7Ozs7R0FLRztBQUVILE1BQU0sT0FBTywrQkFBZ0MsU0FBUSxPQUFzQjtpSUFBOUQsK0JBQStCO3FJQUEvQiwrQkFBK0IsY0FEbEIsTUFBTTs7MkZBQ25CLCtCQUErQjtrQkFEM0MsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUU7O0FBSWxDLE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFVSxZQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FB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QyxRQUFrQixFQUFFLEtBQWdCLEVBQUUsRUFBRSxDQUN6QyxDQUFDLEdBQUcsSUFBVyxFQUFFLEVBQUU7SUFDakIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssRUFBRyxDQUFDO0lBQzVCLE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUMxQyxJQUFJLENBQUMsR0FBRyxJQUFJLEVBQUUsQ0FBQyxHQUFHLFFBQWUsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQzdFLENBQUM7QUFDSixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIEluamVjdG9yLCBOZ1pvbmUsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCB0aHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgbWVyZ2VNYXAsIHNoYXJlUmVwbGF5LCB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBnZXRBY3Rpb25UeXBlRnJvbUluc3RhbmNlIH0gZnJvbSAnQG5neHMvc3RvcmUvcGx1Z2lucyc7XG5pbXBvcnQgeyDJtVBsYWluT2JqZWN0LCDJtVN0YXRlU3RyZWFtIH0gZnJvbSAnQG5neHMvc3RvcmUvaW50ZXJuYWxzJztcblxuaW1wb3J0IHsgQWN0aW9uQ29udGV4dCwgQWN0aW9uU3RhdHVzLCBJbnRlcm5hbEFjdGlvbnMgfSBmcm9tICcuLi9hY3Rpb25zLXN0cmVhbSc7XG5pbXBvcnQgeyBQbHVnaW5NYW5hZ2VyIH0gZnJvbSAnLi4vcGx1Z2luLW1hbmFnZXInO1xuaW1wb3J0IHsgSW50ZXJuYWxOZ3hzRXhlY3V0aW9uU3RyYXRlZ3kgfSBmcm9tICcuLi9leGVjdXRpb24vaW50ZXJuYWwtbmd4cy1leGVjdXRpb24tc3RyYXRlZ3knO1xuaW1wb3J0IHsgbGVhdmVOZ3hzIH0gZnJvbSAnLi4vb3BlcmF0b3JzL2xlYXZlLW5neHMnO1xuaW1wb3J0IHsgZmFsbGJhY2tTdWJzY3JpYmVyIH0gZnJvbSAnLi9mYWxsYmFjay1zdWJzY3JpYmVyJztcblxuLyoqXG4gKiBJbnRlcm5hbCBBY3Rpb24gcmVzdWx0IHN0cmVhbSB0aGF0IGlzIGVtaXR0ZWQgd2hlbiBhbiBhY3Rpb24gaXMgY29tcGxldGVkLlxuICogVGhpcyBpcyB1c2VkIGFzIGEgbWV0aG9kIG9mIHJldHVybmluZyB0aGUgYWN0aW9uIHJlc3VsdCB0byB0aGUgZGlzcGF0Y2hlclxuICogZm9yIHRoZSBvYnNlcnZhYmxlIHJldHVybmVkIGJ5IHRoZSBkaXNwYXRjaCguLi4pIGNhbGwuXG4gKiBUaGUgZGlzcGF0Y2hlciB0aGVuIGFzeW5jaHJvbm91c2x5IHB1c2hlcyB0aGUgcmVzdWx0IGZyb20gdGhpcyBzdHJlYW0gb250byB0aGUgbWFpbiBhY3Rpb24gc3RyZWFtIGFzIGEgcmVzdWx0LlxuICovXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIEludGVybmFsRGlzcGF0Y2hlZEFjdGlvblJlc3VsdHMgZXh0ZW5kcyBTdWJqZWN0PEFjdGlvbkNvbnRleHQ+IHt9XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgSW50ZXJuYWxEaXNwYXRjaGVyIHtcbiAgcHJpdmF0ZSBfbmdab25lID0gaW5qZWN0KE5nWm9uZSk7XG4gIHByaXZhdGUgX2FjdGlvbnMgPSBpbmplY3QoSW50ZXJuYWxBY3Rpb25zKTtcbiAgcHJpdmF0ZSBfYWN0aW9uUmVzdWx0cyA9IGluamVjdChJbnRlcm5hbERpc3BhdGNoZWRBY3Rpb25SZXN1bHRzKTtcbiAgcHJpdmF0ZSBfcGx1Z2luTWFuYWdlciA9IGluamVjdChQbHVnaW5NYW5hZ2VyKTtcbiAgcHJpdmF0ZSBfc3RhdGVTdHJlYW0gPSBpbmplY3QoybVTdGF0ZVN0cmVhbSk7XG4gIHByaXZhdGUgX25neHNFeGVjdXRpb25TdHJhdGVneSA9IGluamVjdChJbnRlcm5hbE5neHNFeGVjdXRpb25TdHJhdGVneSk7XG4gIHByaXZhdGUgX2luamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblxuICAvKipcbiAgICogRGlzcGF0Y2hlcyBldmVudChzKS5cbiAgICovXG4gIGRpc3BhdGNoKGFjdGlvbk9yQWN0aW9uczogYW55IHwgYW55W10pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9uZ3hzRXhlY3V0aW9uU3RyYXRlZ3kuZW50ZXIoKCkgPT5cbiAgICAgIHRoaXMuZGlzcGF0Y2hCeUV2ZW50cyhhY3Rpb25PckFjdGlvbnMpXG4gICAgKTtcblxuICAgIHJldHVybiByZXN1bHQucGlwZShcbiAgICAgIGZhbGxiYWNrU3Vic2NyaWJlcih0aGlzLl9uZ1pvbmUpLFxuICAgICAgbGVhdmVOZ3hzKHRoaXMuX25neHNFeGVjdXRpb25TdHJhdGVneSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkaXNwYXRjaEJ5RXZlbnRzKGFjdGlvbk9yQWN0aW9uczogYW55IHwgYW55W10pOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhY3Rpb25PckFjdGlvbnMpKSB7XG4gICAgICBpZiAoYWN0aW9uT3JBY3Rpb25zLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG5cbiAgICAgIHJldHVybiBmb3JrSm9pbihhY3Rpb25PckFjdGlvbnMubWFwKGFjdGlvbiA9PiB0aGlzLmRpc3BhdGNoU2luZ2xlKGFjdGlvbikpKS5waXBlKFxuICAgICAgICBtYXAoKCkgPT4gdW5kZWZpbmVkKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzcGF0Y2hTaW5nbGUoYWN0aW9uT3JBY3Rpb25zKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpc3BhdGNoU2luZ2xlKGFjdGlvbjogYW55KTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgaWYgKHR5cGVvZiBuZ0Rldk1vZGUgIT09ICd1bmRlZmluZWQnICYmIG5nRGV2TW9kZSkge1xuICAgICAgY29uc3QgdHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZShhY3Rpb24pO1xuICAgICAgaWYgKCF0eXBlKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgIGBUaGlzIGFjdGlvbiBkb2Vzbid0IGhhdmUgYSB0eXBlIHByb3BlcnR5OiAke2FjdGlvbi5jb25zdHJ1Y3Rvci5uYW1lfWBcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gZXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHByZXZTdGF0ZSA9IHRoaXMuX3N0YXRlU3RyZWFtLmdldFZhbHVlKCk7XG4gICAgY29uc3QgcGx1Z2lucyA9IHRoaXMuX3BsdWdpbk1hbmFnZXIucGx1Z2lucztcblxuICAgIHJldHVybiBjb21wb3NlKHRoaXMuX2luamVjdG9yLCBbXG4gICAgICAuLi5wbHVnaW5zLFxuICAgICAgKG5leHRTdGF0ZTogYW55LCBuZXh0QWN0aW9uOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKG5leHRTdGF0ZSAhPT0gcHJldlN0YXRlKSB7XG4gICAgICAgICAgdGhpcy5fc3RhdGVTdHJlYW0ubmV4dChuZXh0U3RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFjdGlvblJlc3VsdCQgPSB0aGlzLmdldEFjdGlvblJlc3VsdFN0cmVhbShuZXh0QWN0aW9uKTtcbiAgICAgICAgYWN0aW9uUmVzdWx0JC5zdWJzY3JpYmUoY3R4ID0+IHRoaXMuX2FjdGlvbnMubmV4dChjdHgpKTtcbiAgICAgICAgdGhpcy5fYWN0aW9ucy5uZXh0KHsgYWN0aW9uOiBuZXh0QWN0aW9uLCBzdGF0dXM6IEFjdGlvblN0YXR1cy5EaXNwYXRjaGVkIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVEaXNwYXRjaE9ic2VydmFibGUoYWN0aW9uUmVzdWx0JCk7XG4gICAgICB9XG4gICAgXSkocHJldlN0YXRlLCBhY3Rpb24pLnBpcGUoc2hhcmVSZXBsYXkoKSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGlvblJlc3VsdFN0cmVhbShhY3Rpb246IGFueSk6IE9ic2VydmFibGU8QWN0aW9uQ29udGV4dD4ge1xuICAgIHJldHVybiB0aGlzLl9hY3Rpb25SZXN1bHRzLnBpcGUoXG4gICAgICBmaWx0ZXIoXG4gICAgICAgIChjdHg6IEFjdGlvbkNvbnRleHQpID0+IGN0eC5hY3Rpb24gPT09IGFjdGlvbiAmJiBjdHguc3RhdHVzICE9PSBBY3Rpb25TdGF0dXMuRGlzcGF0Y2hlZFxuICAgICAgKSxcbiAgICAgIHRha2UoMSksXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlRGlzcGF0Y2hPYnNlcnZhYmxlKFxuICAgIGFjdGlvblJlc3VsdCQ6IE9ic2VydmFibGU8QWN0aW9uQ29udGV4dD5cbiAgKTogT2JzZXJ2YWJsZTzJtVBsYWluT2JqZWN0PiB7XG4gICAgcmV0dXJuIGFjdGlvblJlc3VsdCQucGlwZShcbiAgICAgIG1lcmdlTWFwKChjdHg6IEFjdGlvbkNvbnRleHQpID0+IHtcbiAgICAgICAgc3dpdGNoIChjdHguc3RhdHVzKSB7XG4gICAgICAgICAgY2FzZSBBY3Rpb25TdGF0dXMuU3VjY2Vzc2Z1bDpcbiAgICAgICAgICAgIC8vIFRoZSBgY3JlYXRlRGlzcGF0Y2hPYnNlcnZhYmxlYCBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIHRoZVxuICAgICAgICAgICAgLy8gc3RhdGUsIGFzIGl0cyByZXN1bHQgaXMgdXNlZCBieSBwbHVnaW5zLlxuICAgICAgICAgICAgcmV0dXJuIG9mKHRoaXMuX3N0YXRlU3RyZWFtLmdldFZhbHVlKCkpO1xuICAgICAgICAgIGNhc2UgQWN0aW9uU3RhdHVzLkVycm9yZWQ6XG4gICAgICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBjdHguZXJyb3IpO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBPbmNlIGRpc3BhdGNoZWQgb3IgY2FuY2VsZWQsIHdlIGNvbXBsZXRlIGl0IGltbWVkaWF0ZWx5IGJlY2F1c2VcbiAgICAgICAgICAgIC8vIGBkaXNwYXRjaCgpYCBzaG91bGQgZW1pdCAob3IgZXJyb3IsIG9yIGNvbXBsZXRlKSBhcyBzb29uIGFzIGl0IHN1Y2NlZWRzIG9yIGZhaWxzLlxuICAgICAgICAgICAgcmV0dXJuIG9mKCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgc2hhcmVSZXBsYXkoKVxuICAgICk7XG4gIH1cbn1cblxudHlwZSBTdGF0ZUZuID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnk7XG5cbi8qKlxuICogQ29tcG9zZXMgYSBhcnJheSBvZiBmdW5jdGlvbnMgZnJvbSBsZWZ0IHRvIHJpZ2h0LiBFeGFtcGxlOlxuICpcbiAqICAgICAgY29tcG9zZShbZm4sIGZpbmFsXSkoc3RhdGUsIGFjdGlvbik7XG4gKlxuICogdGhlbiB0aGUgZnVuY3MgaGF2ZSBhIHNpZ25hdHVyZSBsaWtlOlxuICpcbiAqICAgICAgZnVuY3Rpb24gZm4gKHN0YXRlLCBhY3Rpb24sIG5leHQpIHtcbiAqICAgICAgICAgIGNvbnNvbGUubG9nKCdoZXJlJywgc3RhdGUsIGFjdGlvbiwgbmV4dCk7XG4gKiAgICAgICAgICByZXR1cm4gbmV4dChzdGF0ZSwgYWN0aW9uKTtcbiAqICAgICAgfVxuICpcbiAqICAgICAgZnVuY3Rpb24gZmluYWwgKHN0YXRlLCBhY3Rpb24pIHtcbiAqICAgICAgICAgIGNvbnNvbGUubG9nKCdoZXJlJywgc3RhdGUsIGFjdGlvbik7XG4gKiAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gKiAgICAgIH1cbiAqXG4gKiB0aGUgbGFzdCBmdW5jdGlvbiBzaG91bGQgbm90IGNhbGwgYG5leHRgLlxuICovXG5jb25zdCBjb21wb3NlID1cbiAgKGluamVjdG9yOiBJbmplY3RvciwgZnVuY3M6IFN0YXRlRm5bXSkgPT5cbiAgKC4uLmFyZ3M6IGFueVtdKSA9PiB7XG4gICAgY29uc3QgY3VyciA9IGZ1bmNzLnNoaWZ0KCkhO1xuICAgIHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+XG4gICAgICBjdXJyKC4uLmFyZ3MsICguLi5uZXh0QXJnczogYW55W10pID0+IGNvbXBvc2UoaW5qZWN0b3IsIGZ1bmNzKSguLi5uZXh0QXJncykpXG4gICAgKTtcbiAgfTtcbiJdfQ==
@@ -25,9 +25,10 @@ export class PluginManager {
25
25
  return handlers.map((plugin) => (plugin.handle ? plugin.handle.bind(plugin) : plugin));
26
26
  }
27
27
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: PluginManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
28
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: PluginManager }); }
28
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: PluginManager, providedIn: 'root' }); }
29
29
  }
30
30
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: PluginManager, decorators: [{
31
- type: Injectable
31
+ type: Injectable,
32
+ args: [{ providedIn: 'root' }]
32
33
  }], ctorParameters: () => [] });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvcGx1Z2luLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBNEIsTUFBTSxxQkFBcUIsQ0FBQzs7QUFHN0UsTUFBTSxPQUFPLGFBQWE7SUFZeEI7UUFYUyxZQUFPLEdBQW1CLEVBQUUsQ0FBQztRQUVyQixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUU7WUFDdEQsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUVjLG9CQUFlLEdBQUcsTUFBTSxDQUFlLFlBQVksRUFBRTtZQUNwRSxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFZLFlBQVk7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RELENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsTUFBTSxjQUFjLEdBQW1CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLFFBQVEsR0FBaUIsSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7UUFDMUQsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUNqQixDQUFDLE1BQWtCLEVBQUUsRUFBRSxDQUNyQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQWlCLENBQ3hFLENBQUM7SUFDSixDQUFDO2lJQS9CVSxhQUFhO3FJQUFiLGFBQWE7OzJGQUFiLGFBQWE7a0JBRHpCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HWFNfUExVR0lOUywgTmd4c1BsdWdpbiwgTmd4c1BsdWdpbkZuIH0gZnJvbSAnQG5neHMvc3RvcmUvcGx1Z2lucyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBQbHVnaW5NYW5hZ2VyIHtcbiAgcmVhZG9ubHkgcGx1Z2luczogTmd4c1BsdWdpbkZuW10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wYXJlbnRNYW5hZ2VyID0gaW5qZWN0KFBsdWdpbk1hbmFnZXIsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICBza2lwU2VsZjogdHJ1ZVxuICB9KTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wbHVnaW5IYW5kbGVycyA9IGluamVjdDxOZ3hzUGx1Z2luW10+KE5HWFNfUExVR0lOUywge1xuICAgIG9wdGlvbmFsOiB0cnVlXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVnaXN0ZXJIYW5kbGVycygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgX3Jvb3RQbHVnaW5zKCk6IE5neHNQbHVnaW5GbltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyZW50TWFuYWdlcj8ucGx1Z2lucyB8fCB0aGlzLnBsdWdpbnM7XG4gIH1cblxuICBwcml2YXRlIHJlZ2lzdGVySGFuZGxlcnMoKTogdm9pZCB7XG4gICAgY29uc3QgcGx1Z2luSGFuZGxlcnM6IE5neHNQbHVnaW5GbltdID0gdGhpcy5nZXRQbHVnaW5IYW5kbGVycygpO1xuICAgIHRoaXMuX3Jvb3RQbHVnaW5zLnB1c2goLi4ucGx1Z2luSGFuZGxlcnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQbHVnaW5IYW5kbGVycygpOiBOZ3hzUGx1Z2luRm5bXSB7XG4gICAgY29uc3QgaGFuZGxlcnM6IE5neHNQbHVnaW5bXSA9IHRoaXMuX3BsdWdpbkhhbmRsZXJzIHx8IFtdO1xuICAgIHJldHVybiBoYW5kbGVycy5tYXAoXG4gICAgICAocGx1Z2luOiBOZ3hzUGx1Z2luKSA9PlxuICAgICAgICAocGx1Z2luLmhhbmRsZSA/IHBsdWdpbi5oYW5kbGUuYmluZChwbHVnaW4pIDogcGx1Z2luKSBhcyBOZ3hzUGx1Z2luRm5cbiAgICApO1xuICB9XG59XG4iXX0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvcGx1Z2luLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBNEIsTUFBTSxxQkFBcUIsQ0FBQzs7QUFHN0UsTUFBTSxPQUFPLGFBQWE7SUFZeEI7UUFYUyxZQUFPLEdBQW1CLEVBQUUsQ0FBQztRQUVyQixtQkFBYyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUU7WUFDdEQsUUFBUSxFQUFFLElBQUk7WUFDZCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUVjLG9CQUFlLEdBQUcsTUFBTSxDQUFlLFlBQVksRUFBRTtZQUNwRSxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUMsQ0FBQztRQUdELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFZLFlBQVk7UUFDdEIsT0FBTyxJQUFJLENBQUMsY0FBYyxFQUFFLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3RELENBQUM7SUFFTyxnQkFBZ0I7UUFDdEIsTUFBTSxjQUFjLEdBQW1CLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ2hFLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsY0FBYyxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixNQUFNLFFBQVEsR0FBaUIsSUFBSSxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7UUFDMUQsT0FBTyxRQUFRLENBQUMsR0FBRyxDQUNqQixDQUFDLE1BQWtCLEVBQUUsRUFBRSxDQUNyQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQWlCLENBQ3hFLENBQUM7SUFDSixDQUFDO2lJQS9CVSxhQUFhO3FJQUFiLGFBQWEsY0FEQSxNQUFNOzsyRkFDbkIsYUFBYTtrQkFEekIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HWFNfUExVR0lOUywgTmd4c1BsdWdpbiwgTmd4c1BsdWdpbkZuIH0gZnJvbSAnQG5neHMvc3RvcmUvcGx1Z2lucyc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgUGx1Z2luTWFuYWdlciB7XG4gIHJlYWRvbmx5IHBsdWdpbnM6IE5neHNQbHVnaW5GbltdID0gW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcGFyZW50TWFuYWdlciA9IGluamVjdChQbHVnaW5NYW5hZ2VyLCB7XG4gICAgb3B0aW9uYWw6IHRydWUsXG4gICAgc2tpcFNlbGY6IHRydWVcbiAgfSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcGx1Z2luSGFuZGxlcnMgPSBpbmplY3Q8Tmd4c1BsdWdpbltdPihOR1hTX1BMVUdJTlMsIHtcbiAgICBvcHRpb25hbDogdHJ1ZVxuICB9KTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnJlZ2lzdGVySGFuZGxlcnMoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IF9yb290UGx1Z2lucygpOiBOZ3hzUGx1Z2luRm5bXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcmVudE1hbmFnZXI/LnBsdWdpbnMgfHwgdGhpcy5wbHVnaW5zO1xuICB9XG5cbiAgcHJpdmF0ZSByZWdpc3RlckhhbmRsZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IHBsdWdpbkhhbmRsZXJzOiBOZ3hzUGx1Z2luRm5bXSA9IHRoaXMuZ2V0UGx1Z2luSGFuZGxlcnMoKTtcbiAgICB0aGlzLl9yb290UGx1Z2lucy5wdXNoKC4uLnBsdWdpbkhhbmRsZXJzKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGx1Z2luSGFuZGxlcnMoKTogTmd4c1BsdWdpbkZuW10ge1xuICAgIGNvbnN0IGhhbmRsZXJzOiBOZ3hzUGx1Z2luW10gPSB0aGlzLl9wbHVnaW5IYW5kbGVycyB8fCBbXTtcbiAgICByZXR1cm4gaGFuZGxlcnMubWFwKFxuICAgICAgKHBsdWdpbjogTmd4c1BsdWdpbikgPT5cbiAgICAgICAgKHBsdWdpbi5oYW5kbGUgPyBwbHVnaW4uaGFuZGxlLmJpbmQocGx1Z2luKSA6IHBsdWdpbikgYXMgTmd4c1BsdWdpbkZuXG4gICAgKTtcbiAgfVxufVxuIl19
@@ -1,5 +1,5 @@
1
1
  import { ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from '@angular/core';
2
- import { NGXS_PLUGINS } from '@ngxs/store/plugins';
2
+ import { NGXS_PLUGINS, ɵisPluginClass } from '@ngxs/store/plugins';
3
3
  import { PluginManager } from '../plugin-manager';
4
4
  /**
5
5
  * This function registers a custom global plugin for the state.
@@ -17,11 +17,17 @@ import { PluginManager } from '../plugin-manager';
17
17
  */
18
18
  export function withNgxsPlugin(plugin) {
19
19
  return makeEnvironmentProviders([
20
- { provide: NGXS_PLUGINS, useClass: plugin, multi: true },
20
+ ɵisPluginClass(plugin)
21
+ ? { provide: NGXS_PLUGINS, useClass: plugin, multi: true }
22
+ : { provide: NGXS_PLUGINS, useValue: plugin, multi: true },
21
23
  // We should inject the `PluginManager` to retrieve `NGXS_PLUGINS` and
22
24
  // register those plugins. The plugin can be added from inside the child
23
25
  // route, so the plugin manager should be re-injected.
24
- { provide: ENVIRONMENT_INITIALIZER, useValue: () => inject(PluginManager), multi: true }
26
+ {
27
+ provide: ENVIRONMENT_INITIALIZER,
28
+ useValue: () => inject(PluginManager),
29
+ multi: true
30
+ }
25
31
  ]);
26
32
  }
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3RvcmUvc3JjL3N0YW5kYWxvbmUtZmVhdHVyZXMvcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFHdkIsTUFBTSxFQUNOLHdCQUF3QixFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFjLE1BQU0scUJBQXFCLENBQUM7QUFFL0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWxEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQXdCO0lBQ3JELE9BQU8sd0JBQXdCLENBQUM7UUFDOUIsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtRQUN4RCxzRUFBc0U7UUFDdEUsd0VBQXdFO1FBQ3hFLHNEQUFzRDtRQUN0RCxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7S0FDekYsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICBFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgVHlwZSxcbiAgaW5qZWN0LFxuICBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR1hTX1BMVUdJTlMsIE5neHNQbHVnaW4gfSBmcm9tICdAbmd4cy9zdG9yZS9wbHVnaW5zJztcblxuaW1wb3J0IHsgUGx1Z2luTWFuYWdlciB9IGZyb20gJy4uL3BsdWdpbi1tYW5hZ2VyJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhIGN1c3RvbSBnbG9iYWwgcGx1Z2luIGZvciB0aGUgc3RhdGUuXG4gKlxuICogYGBgdHNcbiAqIGJvb3RzdHJhcEFwcGxpY2F0aW9uKEFwcENvbXBvbmVudCwge1xuICogICBwcm92aWRlcnM6IFtcbiAqICAgICBwcm92aWRlU3RvcmUoXG4gKiAgICAgICBbQ291bnRyaWVzU3RhdGVdLFxuICogICAgICAgd2l0aE5neHNQbHVnaW4oTG9nb3V0UGx1Z2luKVxuICogICAgIClcbiAqICAgXVxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhOZ3hzUGx1Z2luKHBsdWdpbjogVHlwZTxOZ3hzUGx1Z2luPik6IEVudmlyb25tZW50UHJvdmlkZXJzIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAgeyBwcm92aWRlOiBOR1hTX1BMVUdJTlMsIHVzZUNsYXNzOiBwbHVnaW4sIG11bHRpOiB0cnVlIH0sXG4gICAgLy8gV2Ugc2hvdWxkIGluamVjdCB0aGUgYFBsdWdpbk1hbmFnZXJgIHRvIHJldHJpZXZlIGBOR1hTX1BMVUdJTlNgIGFuZFxuICAgIC8vIHJlZ2lzdGVyIHRob3NlIHBsdWdpbnMuIFRoZSBwbHVnaW4gY2FuIGJlIGFkZGVkIGZyb20gaW5zaWRlIHRoZSBjaGlsZFxuICAgIC8vIHJvdXRlLCBzbyB0aGUgcGx1Z2luIG1hbmFnZXIgc2hvdWxkIGJlIHJlLWluamVjdGVkLlxuICAgIHsgcHJvdmlkZTogRU5WSVJPTk1FTlRfSU5JVElBTElaRVIsIHVzZVZhbHVlOiAoKSA9PiBpbmplY3QoUGx1Z2luTWFuYWdlciksIG11bHRpOiB0cnVlIH1cbiAgXSk7XG59XG4iXX0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvc3RvcmUvc3JjL3N0YW5kYWxvbmUtZmVhdHVyZXMvcGx1Z2luLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFHdkIsTUFBTSxFQUNOLHdCQUF3QixFQUN6QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUE0QixjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU3RixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFbEQ7Ozs7Ozs7Ozs7Ozs7R0FhRztBQUNILE1BQU0sVUFBVSxjQUFjLENBQUMsTUFBdUM7SUFDcEUsT0FBTyx3QkFBd0IsQ0FBQztRQUM5QixjQUFjLENBQUMsTUFBTSxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQzFELENBQUMsQ0FBQyxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1FBQzVELHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUsc0RBQXNEO1FBQ3REO1lBQ0UsT0FBTyxFQUFFLHVCQUF1QjtZQUNoQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztZQUNyQyxLQUFLLEVBQUUsSUFBSTtTQUNaO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVOVklST05NRU5UX0lOSVRJQUxJWkVSLFxuICBFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgVHlwZSxcbiAgaW5qZWN0LFxuICBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnNcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR1hTX1BMVUdJTlMsIE5neHNQbHVnaW4sIE5neHNQbHVnaW5GbiwgybVpc1BsdWdpbkNsYXNzIH0gZnJvbSAnQG5neHMvc3RvcmUvcGx1Z2lucyc7XG5cbmltcG9ydCB7IFBsdWdpbk1hbmFnZXIgfSBmcm9tICcuLi9wbHVnaW4tbWFuYWdlcic7XG5cbi8qKlxuICogVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBjdXN0b20gZ2xvYmFsIHBsdWdpbiBmb3IgdGhlIHN0YXRlLlxuICpcbiAqIGBgYHRzXG4gKiBib290c3RyYXBBcHBsaWNhdGlvbihBcHBDb21wb25lbnQsIHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgcHJvdmlkZVN0b3JlKFxuICogICAgICAgW0NvdW50cmllc1N0YXRlXSxcbiAqICAgICAgIHdpdGhOZ3hzUGx1Z2luKExvZ291dFBsdWdpbilcbiAqICAgICApXG4gKiAgIF1cbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoTmd4c1BsdWdpbihwbHVnaW46IFR5cGU8Tmd4c1BsdWdpbj4gfCBOZ3hzUGx1Z2luRm4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIMm1aXNQbHVnaW5DbGFzcyhwbHVnaW4pXG4gICAgICA/IHsgcHJvdmlkZTogTkdYU19QTFVHSU5TLCB1c2VDbGFzczogcGx1Z2luLCBtdWx0aTogdHJ1ZSB9XG4gICAgICA6IHsgcHJvdmlkZTogTkdYU19QTFVHSU5TLCB1c2VWYWx1ZTogcGx1Z2luLCBtdWx0aTogdHJ1ZSB9LFxuICAgIC8vIFdlIHNob3VsZCBpbmplY3QgdGhlIGBQbHVnaW5NYW5hZ2VyYCB0byByZXRyaWV2ZSBgTkdYU19QTFVHSU5TYCBhbmRcbiAgICAvLyByZWdpc3RlciB0aG9zZSBwbHVnaW5zLiBUaGUgcGx1Z2luIGNhbiBiZSBhZGRlZCBmcm9tIGluc2lkZSB0aGUgY2hpbGRcbiAgICAvLyByb3V0ZSwgc28gdGhlIHBsdWdpbiBtYW5hZ2VyIHNob3VsZCBiZSByZS1pbmplY3RlZC5cbiAgICB7XG4gICAgICBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUixcbiAgICAgIHVzZVZhbHVlOiAoKSA9PiBpbmplY3QoUGx1Z2luTWFuYWdlciksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH1cbiAgXSk7XG59XG4iXX0=
@@ -1,6 +1,5 @@
1
1
  import { APP_BOOTSTRAP_LISTENER, inject } from '@angular/core';
2
2
  import { ɵNgxsAppBootstrappedState } from '@ngxs/store/internals';
3
- import { PluginManager } from '../plugin-manager';
4
3
  import { StateFactory } from '../internal/state-factory';
5
4
  import { CUSTOM_NGXS_EXECUTION_STRATEGY } from '../execution/symbols';
6
5
  import { ROOT_STATE_TOKEN, NGXS_OPTIONS } from '../symbols';
@@ -11,7 +10,6 @@ import { ROOT_STATE_TOKEN, NGXS_OPTIONS } from '../symbols';
11
10
  export function getRootProviders(states, options) {
12
11
  return [
13
12
  StateFactory,
14
- PluginManager,
15
13
  ...states,
16
14
  {
17
15
  provide: ROOT_STATE_TOKEN,
@@ -35,4 +33,4 @@ export function getRootProviders(states, options) {
35
33
  }
36
34
  ];
37
35
  }
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvc3RhbmRhbG9uZS1mZWF0dXJlcy9yb290LXByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQVksTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBZSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9FLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNsRCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekQsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDdEUsT0FBTyxFQUFxQixnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFL0U7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUM5QixNQUFxQixFQUNyQixPQUEwQjtJQUUxQixPQUFPO1FBQ0wsWUFBWTtRQUNaLGFBQWE7UUFDYixHQUFHLE1BQU07UUFDVDtZQUNFLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsUUFBUSxFQUFFLE1BQU07U0FDakI7UUFDRDtZQUNFLE9BQU8sRUFBRSxzQkFBc0I7WUFDL0IsVUFBVSxFQUFFLEdBQUcsRUFBRTtnQkFDZixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO2dCQUMvRCxPQUFPLEdBQUcsRUFBRSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2hELENBQUM7WUFDRCxLQUFLLEVBQUUsSUFBSTtTQUNaO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsWUFBWTtZQUNyQixRQUFRLEVBQUUsT0FBTztTQUNsQjtRQUNEO1lBQ0UsT0FBTyxFQUFFLDhCQUE4QjtZQUN2QyxRQUFRLEVBQUUsT0FBTyxDQUFDLGlCQUFpQjtTQUNwQztLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQVBQX0JPT1RTVFJBUF9MSVNURU5FUiwgUHJvdmlkZXIsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgybVTdGF0ZUNsYXNzLCDJtU5neHNBcHBCb290c3RyYXBwZWRTdGF0ZSB9IGZyb20gJ0BuZ3hzL3N0b3JlL2ludGVybmFscyc7XG5cbmltcG9ydCB7IFBsdWdpbk1hbmFnZXIgfSBmcm9tICcuLi9wbHVnaW4tbWFuYWdlcic7XG5pbXBvcnQgeyBTdGF0ZUZhY3RvcnkgfSBmcm9tICcuLi9pbnRlcm5hbC9zdGF0ZS1mYWN0b3J5JztcbmltcG9ydCB7IENVU1RPTV9OR1hTX0VYRUNVVElPTl9TVFJBVEVHWSB9IGZyb20gJy4uL2V4ZWN1dGlvbi9zeW1ib2xzJztcbmltcG9ydCB7IE5neHNNb2R1bGVPcHRpb25zLCBST09UX1NUQVRFX1RPS0VOLCBOR1hTX09QVElPTlMgfSBmcm9tICcuLi9zeW1ib2xzJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIHRoZSByZXF1aXJlZCBwcm92aWRlcnMgd2hlbiBpbnZva2luZyBgTmd4c01vZHVsZS5mb3JSb290YFxuICogb3IgYHByb3ZpZGVTdG9yZWAuIEl0IGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBOZ01vZHVsZSBhbmQgc3RhbmRhbG9uZSBBUElzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um9vdFByb3ZpZGVycyhcbiAgc3RhdGVzOiDJtVN0YXRlQ2xhc3NbXSxcbiAgb3B0aW9uczogTmd4c01vZHVsZU9wdGlvbnNcbik6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIFN0YXRlRmFjdG9yeSxcbiAgICBQbHVnaW5NYW5hZ2VyLFxuICAgIC4uLnN0YXRlcyxcbiAgICB7XG4gICAgICBwcm92aWRlOiBST09UX1NUQVRFX1RPS0VOLFxuICAgICAgdXNlVmFsdWU6IHN0YXRlc1xuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQVBQX0JPT1RTVFJBUF9MSVNURU5FUixcbiAgICAgIHVzZUZhY3Rvcnk6ICgpID0+IHtcbiAgICAgICAgY29uc3QgYXBwQm9vdHN0cmFwcGVkU3RhdGUgPSBpbmplY3QoybVOZ3hzQXBwQm9vdHN0cmFwcGVkU3RhdGUpO1xuICAgICAgICByZXR1cm4gKCkgPT4gYXBwQm9vdHN0cmFwcGVkU3RhdGUuYm9vdHN0cmFwKCk7XG4gICAgICB9LFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HWFNfT1BUSU9OUyxcbiAgICAgIHVzZVZhbHVlOiBvcHRpb25zXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBDVVNUT01fTkdYU19FWEVDVVRJT05fU1RSQVRFR1ksXG4gICAgICB1c2VWYWx1ZTogb3B0aW9ucy5leGVjdXRpb25TdHJhdGVneVxuICAgIH1cbiAgXTtcbn1cbiJdfQ==
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdC1wcm92aWRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9zdG9yZS9zcmMvc3RhbmRhbG9uZS1mZWF0dXJlcy9yb290LXByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQVksTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pFLE9BQU8sRUFBZSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBRS9FLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RSxPQUFPLEVBQXFCLGdCQUFnQixFQUFFLFlBQVksRUFBRSxNQUFNLFlBQVksQ0FBQztBQUUvRTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQzlCLE1BQXFCLEVBQ3JCLE9BQTBCO0lBRTFCLE9BQU87UUFDTCxZQUFZO1FBQ1osR0FBRyxNQUFNO1FBQ1Q7WUFDRSxPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLFFBQVEsRUFBRSxNQUFNO1NBQ2pCO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsc0JBQXNCO1lBQy9CLFVBQVUsRUFBRSxHQUFHLEVBQUU7Z0JBQ2YsTUFBTSxvQkFBb0IsR0FBRyxNQUFNLENBQUMseUJBQXlCLENBQUMsQ0FBQztnQkFDL0QsT0FBTyxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNoRCxDQUFDO1lBQ0QsS0FBSyxFQUFFLElBQUk7U0FDWjtRQUNEO1lBQ0UsT0FBTyxFQUFFLFlBQVk7WUFDckIsUUFBUSxFQUFFLE9BQU87U0FDbEI7UUFDRDtZQUNFLE9BQU8sRUFBRSw4QkFBOEI7WUFDdkMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7U0FDcEM7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFQUF9CT09UU1RSQVBfTElTVEVORVIsIFByb3ZpZGVyLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IMm1U3RhdGVDbGFzcywgybVOZ3hzQXBwQm9vdHN0cmFwcGVkU3RhdGUgfSBmcm9tICdAbmd4cy9zdG9yZS9pbnRlcm5hbHMnO1xuXG5pbXBvcnQgeyBTdGF0ZUZhY3RvcnkgfSBmcm9tICcuLi9pbnRlcm5hbC9zdGF0ZS1mYWN0b3J5JztcbmltcG9ydCB7IENVU1RPTV9OR1hTX0VYRUNVVElPTl9TVFJBVEVHWSB9IGZyb20gJy4uL2V4ZWN1dGlvbi9zeW1ib2xzJztcbmltcG9ydCB7IE5neHNNb2R1bGVPcHRpb25zLCBST09UX1NUQVRFX1RPS0VOLCBOR1hTX09QVElPTlMgfSBmcm9tICcuLi9zeW1ib2xzJztcblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIHRoZSByZXF1aXJlZCBwcm92aWRlcnMgd2hlbiBpbnZva2luZyBgTmd4c01vZHVsZS5mb3JSb290YFxuICogb3IgYHByb3ZpZGVTdG9yZWAuIEl0IGlzIHNoYXJlZCBiZXR3ZWVuIHRoZSBOZ01vZHVsZSBhbmQgc3RhbmRhbG9uZSBBUElzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Um9vdFByb3ZpZGVycyhcbiAgc3RhdGVzOiDJtVN0YXRlQ2xhc3NbXSxcbiAgb3B0aW9uczogTmd4c01vZHVsZU9wdGlvbnNcbik6IFByb3ZpZGVyW10ge1xuICByZXR1cm4gW1xuICAgIFN0YXRlRmFjdG9yeSxcbiAgICAuLi5zdGF0ZXMsXG4gICAge1xuICAgICAgcHJvdmlkZTogUk9PVF9TVEFURV9UT0tFTixcbiAgICAgIHVzZVZhbHVlOiBzdGF0ZXNcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IEFQUF9CT09UU1RSQVBfTElTVEVORVIsXG4gICAgICB1c2VGYWN0b3J5OiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGFwcEJvb3RzdHJhcHBlZFN0YXRlID0gaW5qZWN0KMm1Tmd4c0FwcEJvb3RzdHJhcHBlZFN0YXRlKTtcbiAgICAgICAgcmV0dXJuICgpID0+IGFwcEJvb3RzdHJhcHBlZFN0YXRlLmJvb3RzdHJhcCgpO1xuICAgICAgfSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR1hTX09QVElPTlMsXG4gICAgICB1c2VWYWx1ZTogb3B0aW9uc1xuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogQ1VTVE9NX05HWFNfRVhFQ1VUSU9OX1NUUkFURUdZLFxuICAgICAgdXNlVmFsdWU6IG9wdGlvbnMuZXhlY3V0aW9uU3RyYXRlZ3lcbiAgICB9XG4gIF07XG59XG4iXX0=
@@ -16,9 +16,19 @@ class UpdateState {
16
16
  }
17
17
  }
18
18
 
19
- // The injection token is used to resolve to custom NGXS plugins provided
20
- // at the root level through either `{provide}` scheme or `withNgxsPlugin`.
21
- const NGXS_PLUGINS = new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'NGXS_PLUGINS' : '');
19
+ /**
20
+ * A multi-provider token used to resolve to custom NGXS plugins provided
21
+ * at the root and feature levels through the `{provide}` scheme.
22
+ *
23
+ * @deprecated from v18.0.0, use `withNgxsPlugin` instead.
24
+ */
25
+ const NGXS_PLUGINS = /* @__PURE__ */ new InjectionToken(typeof ngDevMode !== 'undefined' && ngDevMode ? 'NGXS_PLUGINS' : '');
26
+ function ɵisPluginClass(plugin) {
27
+ // Determines whether the provided value is a class rather than a function.
28
+ // If it’s a class, its handle method should be defined on its prototype,
29
+ // as plugins can be either classes or functions.
30
+ return !!plugin.prototype.handle;
31
+ }
22
32
 
23
33
  /**
24
34
  * Returns the type from an action instance/class.
@@ -75,5 +85,5 @@ const getValue = (obj, prop) => prop.split('.').reduce((acc, part) => acc && acc
75
85
  * Generated bundle index. Do not edit.
76
86
  */
77
87
 
78
- export { InitState, NGXS_PLUGINS, UpdateState, actionMatcher, getActionTypeFromInstance, getValue, setValue };
88
+ export { InitState, NGXS_PLUGINS, UpdateState, actionMatcher, getActionTypeFromInstance, getValue, setValue, ɵisPluginClass };
79
89
  //# sourceMappingURL=ngxs-store-plugins.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ngxs-store-plugins.mjs","sources":["../../../packages/store/plugins/src/actions.ts","../../../packages/store/plugins/src/symbols.ts","../../../packages/store/plugins/src/utils.ts","../../../packages/store/plugins/src/ngxs-store-plugins.ts"],"sourcesContent":["import { ɵPlainObject } from '@ngxs/store/internals';\n\n/**\n * Init action\n */\nexport class InitState {\n static readonly type = '@@INIT';\n}\n\n/**\n * Update action\n */\nexport class UpdateState {\n static readonly type = '@@UPDATE_STATE';\n\n constructor(readonly addedStates?: ɵPlainObject) {}\n}\n","import { InjectionToken } from '@angular/core';\n\ndeclare const ngDevMode: boolean;\n\n// The injection token is used to resolve to custom NGXS plugins provided\n// at the root level through either `{provide}` scheme or `withNgxsPlugin`.\nexport const NGXS_PLUGINS = new InjectionToken(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'NGXS_PLUGINS' : ''\n);\n\nexport type NgxsPluginFn = (state: any, mutation: any, next: NgxsNextPluginFn) => any;\n\nexport type NgxsNextPluginFn = (state: any, mutation: any) => any;\n\n/**\n * Plugin interface\n */\nexport interface NgxsPlugin {\n /**\n * Handle the state/action before its submitted to the state handlers.\n */\n handle(state: any, action: any, next: NgxsNextPluginFn): any;\n}\n","/**\n * Returns the type from an action instance/class.\n * @ignore\n */\nexport function getActionTypeFromInstance(action: any): string | undefined {\n return action.constructor?.type || action.type;\n}\n\n/**\n * Matches a action\n * @ignore\n */\nexport function actionMatcher(action1: any) {\n const type1 = getActionTypeFromInstance(action1);\n\n return function (action2: any) {\n return type1 === getActionTypeFromInstance(action2);\n };\n}\n\n/**\n * Set a deeply nested value. Example:\n *\n * setValue({ foo: { bar: { eat: false } } },\n * 'foo.bar.eat', true) //=> { foo: { bar: { eat: true } } }\n *\n * While it traverses it also creates new objects from top down.\n *\n * @ignore\n */\nexport const setValue = (obj: any, prop: string, val: any) => {\n obj = { ...obj };\n\n const split = prop.split('.');\n const lastIndex = split.length - 1;\n\n split.reduce((acc, part, index) => {\n if (index === lastIndex) {\n acc[part] = val;\n } else {\n acc[part] = Array.isArray(acc[part]) ? acc[part].slice() : { ...acc[part] };\n }\n\n return acc && acc[part];\n }, obj);\n\n return obj;\n};\n\n/**\n * Get a deeply nested value. Example:\n *\n * getValue({ foo: bar: [] }, 'foo.bar') //=> []\n *\n * @ignore\n */\nexport const getValue = (obj: any, prop: string): any =>\n prop.split('.').reduce((acc: any, part: string) => acc && acc[part], obj);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAEA;;AAEG;MACU,SAAS,CAAA;aACJ,IAAI,CAAA,IAAA,GAAG,QAAQ,CAAC,EAAA;;AAGlC;;AAEG;MACU,WAAW,CAAA;aACN,IAAI,CAAA,IAAA,GAAG,gBAAgB,CAAC,EAAA;AAExC,IAAA,WAAA,CAAqB,WAA0B,EAAA;QAA1B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAe;KAAI;;;ACXrD;AACA;MACa,YAAY,GAAG,IAAI,cAAc,CAC5C,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,GAAG,cAAc,GAAG,EAAE;;ACPrE;;;AAGG;AACG,SAAU,yBAAyB,CAAC,MAAW,EAAA;IACnD,OAAO,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;AACjD,CAAC;AAED;;;AAGG;AACG,SAAU,aAAa,CAAC,OAAY,EAAA;AACxC,IAAA,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAEjD,IAAA,OAAO,UAAU,OAAY,EAAA;AAC3B,QAAA,OAAO,KAAK,KAAK,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACtD,KAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;AASG;AACU,MAAA,QAAQ,GAAG,CAAC,GAAQ,EAAE,IAAY,EAAE,GAAQ,KAAI;AAC3D,IAAA,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAEjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9B,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEnC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,KAAI;AAChC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;SACjB;aAAM;AACL,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC7E;AAED,QAAA,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;KACzB,EAAE,GAAG,CAAC,CAAC;AAER,IAAA,OAAO,GAAG,CAAC;AACb,EAAE;AAEF;;;;;;AAMG;AACU,MAAA,QAAQ,GAAG,CAAC,GAAQ,EAAE,IAAY,KAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,IAAY,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG;;ACzD1E;;AAEG;;;;"}
1
+ {"version":3,"file":"ngxs-store-plugins.mjs","sources":["../../../packages/store/plugins/src/actions.ts","../../../packages/store/plugins/src/symbols.ts","../../../packages/store/plugins/src/utils.ts","../../../packages/store/plugins/src/ngxs-store-plugins.ts"],"sourcesContent":["import { ɵPlainObject } from '@ngxs/store/internals';\n\n/**\n * Init action\n */\nexport class InitState {\n static readonly type = '@@INIT';\n}\n\n/**\n * Update action\n */\nexport class UpdateState {\n static readonly type = '@@UPDATE_STATE';\n\n constructor(readonly addedStates?: ɵPlainObject) {}\n}\n","import { InjectionToken, Type } from '@angular/core';\n\ndeclare const ngDevMode: boolean;\n\nexport type NgxsNextPluginFn = (state: any, action: any) => any;\n\nexport type NgxsPluginFn = (state: any, action: any, next: NgxsNextPluginFn) => any;\n\n/**\n * Plugin interface\n */\nexport interface NgxsPlugin {\n /**\n * Handle the state/action before its submitted to the state handlers.\n */\n handle(state: any, action: any, next: NgxsNextPluginFn): any;\n}\n\n/**\n * A multi-provider token used to resolve to custom NGXS plugins provided\n * at the root and feature levels through the `{provide}` scheme.\n *\n * @deprecated from v18.0.0, use `withNgxsPlugin` instead.\n */\nexport const NGXS_PLUGINS = /* @__PURE__ */ new InjectionToken<NgxsPlugin[]>(\n typeof ngDevMode !== 'undefined' && ngDevMode ? 'NGXS_PLUGINS' : ''\n);\n\nexport function ɵisPluginClass(\n plugin: Type<NgxsPlugin> | NgxsPluginFn\n): plugin is Type<NgxsPlugin> {\n // Determines whether the provided value is a class rather than a function.\n // If it’s a class, its handle method should be defined on its prototype,\n // as plugins can be either classes or functions.\n return !!plugin.prototype.handle;\n}\n","/**\n * Returns the type from an action instance/class.\n * @ignore\n */\nexport function getActionTypeFromInstance(action: any): string | undefined {\n return action.constructor?.type || action.type;\n}\n\n/**\n * Matches a action\n * @ignore\n */\nexport function actionMatcher(action1: any) {\n const type1 = getActionTypeFromInstance(action1);\n\n return function (action2: any) {\n return type1 === getActionTypeFromInstance(action2);\n };\n}\n\n/**\n * Set a deeply nested value. Example:\n *\n * setValue({ foo: { bar: { eat: false } } },\n * 'foo.bar.eat', true) //=> { foo: { bar: { eat: true } } }\n *\n * While it traverses it also creates new objects from top down.\n *\n * @ignore\n */\nexport const setValue = (obj: any, prop: string, val: any) => {\n obj = { ...obj };\n\n const split = prop.split('.');\n const lastIndex = split.length - 1;\n\n split.reduce((acc, part, index) => {\n if (index === lastIndex) {\n acc[part] = val;\n } else {\n acc[part] = Array.isArray(acc[part]) ? acc[part].slice() : { ...acc[part] };\n }\n\n return acc && acc[part];\n }, obj);\n\n return obj;\n};\n\n/**\n * Get a deeply nested value. Example:\n *\n * getValue({ foo: bar: [] }, 'foo.bar') //=> []\n *\n * @ignore\n */\nexport const getValue = (obj: any, prop: string): any =>\n prop.split('.').reduce((acc: any, part: string) => acc && acc[part], obj);\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;AAEA;;AAEG;MACU,SAAS,CAAA;aACJ,IAAI,CAAA,IAAA,GAAG,QAAQ,CAAC,EAAA;;AAGlC;;AAEG;MACU,WAAW,CAAA;aACN,IAAI,CAAA,IAAA,GAAG,gBAAgB,CAAC,EAAA;AAExC,IAAA,WAAA,CAAqB,WAA0B,EAAA;QAA1B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAe;KAAI;;;ACGrD;;;;;AAKG;AACU,MAAA,YAAY,mBAAmB,IAAI,cAAc,CAC5D,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,GAAG,cAAc,GAAG,EAAE,EACnE;AAEI,SAAU,cAAc,CAC5B,MAAuC,EAAA;;;;AAKvC,IAAA,OAAO,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;AACnC;;ACnCA;;;AAGG;AACG,SAAU,yBAAyB,CAAC,MAAW,EAAA;IACnD,OAAO,MAAM,CAAC,WAAW,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC;AACjD,CAAC;AAED;;;AAGG;AACG,SAAU,aAAa,CAAC,OAAY,EAAA;AACxC,IAAA,MAAM,KAAK,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC;AAEjD,IAAA,OAAO,UAAU,OAAY,EAAA;AAC3B,QAAA,OAAO,KAAK,KAAK,yBAAyB,CAAC,OAAO,CAAC,CAAC;AACtD,KAAC,CAAC;AACJ,CAAC;AAED;;;;;;;;;AASG;AACU,MAAA,QAAQ,GAAG,CAAC,GAAQ,EAAE,IAAY,EAAE,GAAQ,KAAI;AAC3D,IAAA,GAAG,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IAEjB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC9B,IAAA,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEnC,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,KAAI;AAChC,QAAA,IAAI,KAAK,KAAK,SAAS,EAAE;AACvB,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;SACjB;aAAM;AACL,YAAA,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;SAC7E;AAED,QAAA,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC;KACzB,EAAE,GAAG,CAAC,CAAC;AAER,IAAA,OAAO,GAAG,CAAC;AACb,EAAE;AAEF;;;;;;AAMG;AACU,MAAA,QAAQ,GAAG,CAAC,GAAQ,EAAE,IAAY,KAC7C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,GAAQ,EAAE,IAAY,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG;;ACzD1E;;AAEG;;;;"}
@@ -1,11 +1,11 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, inject, NgZone, PLATFORM_ID, InjectionToken, INJECTOR, Injector, runInInjectionContext, ErrorHandler, ɵisPromise as _isPromise, computed, makeEnvironmentProviders, ENVIRONMENT_INITIALIZER, NgModule, APP_BOOTSTRAP_LISTENER } from '@angular/core';
3
- import { Subject, filter, Observable, share, config, of, forkJoin, throwError, EMPTY, mergeMap, map as map$1, defaultIfEmpty, catchError, from, isObservable, takeUntil, finalize, shareReplay as shareReplay$1, distinctUntilChanged, take as take$1, ReplaySubject } from 'rxjs';
3
+ import { Subject, filter, Observable, share, config, of, forkJoin, throwError, mergeMap as mergeMap$1, map as map$1, defaultIfEmpty, catchError, from, isObservable, takeUntil, finalize, shareReplay as shareReplay$1, distinctUntilChanged, take as take$1, ReplaySubject } from 'rxjs';
4
4
  import { ɵwrapObserverCalls as _wrapObserverCalls, ɵ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, ɵensureStoreMetadata as _ensureStoreMetadata, ɵMETA_OPTIONS_KEY as _META_OPTIONS_KEY, ɵensureSelectorMetadata as _ensureSelectorMetadata, ɵNGXS_STATE_CONTEXT_FACTORY as _NGXS_STATE_CONTEXT_FACTORY, ɵNGXS_STATE_FACTORY as _NGXS_STATE_FACTORY } from '@ngxs/store/internals';
5
5
  export { StateToken } from '@ngxs/store/internals';
6
6
  import { isPlatformServer } from '@angular/common';
7
- import { map, shareReplay, filter as filter$1, take, exhaustMap, tap, mergeMap as mergeMap$1, takeUntil as takeUntil$1, startWith, pairwise } from 'rxjs/operators';
8
- import { NGXS_PLUGINS, getActionTypeFromInstance, InitState, UpdateState, setValue, getValue } from '@ngxs/store/plugins';
7
+ import { map, shareReplay, filter as filter$1, take, mergeMap, tap, takeUntil as takeUntil$1, startWith, pairwise } from 'rxjs/operators';
8
+ import { NGXS_PLUGINS, getActionTypeFromInstance, InitState, UpdateState, setValue, getValue, ɵisPluginClass as _isPluginClass } from '@ngxs/store/plugins';
9
9
  export { InitState, NGXS_PLUGINS, UpdateState, actionMatcher, getActionTypeFromInstance, getValue, setValue } from '@ngxs/store/plugins';
10
10
  import { isStateOperator } from '@ngxs/store/operators';
11
11
 
@@ -250,10 +250,11 @@ class PluginManager {
250
250
  return handlers.map((plugin) => (plugin.handle ? plugin.handle.bind(plugin) : plugin));
251
251
  }
252
252
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: PluginManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
253
- /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: PluginManager }); }
253
+ /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: PluginManager, providedIn: 'root' }); }
254
254
  }
255
255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: PluginManager, decorators: [{
256
- type: Injectable
256
+ type: Injectable,
257
+ args: [{ providedIn: 'root' }]
257
258
  }], ctorParameters: () => [] });
258
259
 
259
260
  const ɵɵunhandledRxjsErrorCallbacks = new WeakMap();
@@ -389,20 +390,20 @@ class InternalDispatcher {
389
390
  return this._actionResults.pipe(filter$1((ctx) => ctx.action === action && ctx.status !== "DISPATCHED" /* ActionStatus.Dispatched */), take(1), shareReplay());
390
391
  }
391
392
  createDispatchObservable(actionResult$) {
392
- return actionResult$
393
- .pipe(exhaustMap((ctx) => {
393
+ return actionResult$.pipe(mergeMap((ctx) => {
394
394
  switch (ctx.status) {
395
395
  case "SUCCESSFUL" /* ActionStatus.Successful */:
396
396
  // The `createDispatchObservable` function should return the
397
- // state, as its result is utilized by plugins.
397
+ // state, as its result is used by plugins.
398
398
  return of(this._stateStream.getValue());
399
399
  case "ERRORED" /* ActionStatus.Errored */:
400
400
  return throwError(() => ctx.error);
401
401
  default:
402
- return EMPTY;
402
+ // Once dispatched or canceled, we complete it immediately because
403
+ // `dispatch()` should emit (or error, or complete) as soon as it succeeds or fails.
404
+ return of();
403
405
  }
404
- }))
405
- .pipe(shareReplay());
406
+ }), shareReplay());
406
407
  }
407
408
  /** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: InternalDispatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
408
409
  /** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.0.6", ngImport: i0, type: InternalDispatcher, providedIn: 'root' }); }
@@ -1377,7 +1378,7 @@ class StateFactory {
1377
1378
  return;
1378
1379
  }
1379
1380
  this._actionsSubscription = this._actions
1380
- .pipe(filter((ctx) => ctx.status === "DISPATCHED" /* ActionStatus.Dispatched */), mergeMap(ctx => {
1381
+ .pipe(filter((ctx) => ctx.status === "DISPATCHED" /* ActionStatus.Dispatched */), mergeMap$1(ctx => {
1381
1382
  const action = ctx.action;
1382
1383
  return this.invokeActions(action).pipe(map$1(() => ({ action, status: "SUCCESSFUL" /* ActionStatus.Successful */ })), defaultIfEmpty({ action, status: "CANCELED" /* ActionStatus.Canceled */ }), catchError(error => {
1383
1384
  const ngxsUnhandledErrorHandler = (this._ngxsUnhandledErrorHandler ||=
@@ -1476,7 +1477,7 @@ class StateFactory {
1476
1477
  result = from(result);
1477
1478
  }
1478
1479
  if (isObservable(result)) {
1479
- result = result.pipe(mergeMap((value) => {
1480
+ result = result.pipe(mergeMap$1((value) => {
1480
1481
  if (_isPromise(value)) {
1481
1482
  return from(value);
1482
1483
  }
@@ -1727,7 +1728,7 @@ class LifecycleStateManager {
1727
1728
  this._internalStateOperations
1728
1729
  .getRootStateOperations()
1729
1730
  .dispatch(action)
1730
- .pipe(filter$1(() => !!results), tap(() => this._invokeInitOnStates(results.states)), mergeMap$1(() => this._appBootstrappedState), filter$1(appBootstrapped => !!appBootstrapped), takeUntil$1(this._destroy$))
1731
+ .pipe(filter$1(() => !!results), tap(() => this._invokeInitOnStates(results.states)), mergeMap(() => this._appBootstrappedState), filter$1(appBootstrapped => !!appBootstrapped), takeUntil$1(this._destroy$))
1731
1732
  .subscribe(() => this._invokeBootstrapOnStates(results.states));
1732
1733
  }
1733
1734
  _invokeInitOnStates(mappedStores) {
@@ -1883,7 +1884,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.6", ngImpor
1883
1884
  function getRootProviders(states, options) {
1884
1885
  return [
1885
1886
  StateFactory,
1886
- PluginManager,
1887
1887
  ...states,
1888
1888
  {
1889
1889
  provide: ROOT_STATE_TOKEN,
@@ -2337,11 +2337,17 @@ function provideStates(states, ...features) {
2337
2337
  */
2338
2338
  function withNgxsPlugin(plugin) {
2339
2339
  return makeEnvironmentProviders([
2340
- { provide: NGXS_PLUGINS, useClass: plugin, multi: true },
2340
+ _isPluginClass(plugin)
2341
+ ? { provide: NGXS_PLUGINS, useClass: plugin, multi: true }
2342
+ : { provide: NGXS_PLUGINS, useValue: plugin, multi: true },
2341
2343
  // We should inject the `PluginManager` to retrieve `NGXS_PLUGINS` and
2342
2344
  // register those plugins. The plugin can be added from inside the child
2343
2345
  // route, so the plugin manager should be re-injected.
2344
- { provide: ENVIRONMENT_INITIALIZER, useValue: () => inject(PluginManager), multi: true }
2346
+ {
2347
+ provide: ENVIRONMENT_INITIALIZER,
2348
+ useValue: () => inject(PluginManager),
2349
+ multi: true
2350
+ }
2345
2351
  ]);
2346
2352
  }
2347
2353