@ngrx-traits/core 20.0.0 → 21.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/ngrx-traits-core-testing.mjs.map +1 -1
- package/fesm2022/ngrx-traits-core.mjs +10 -10
- package/fesm2022/ngrx-traits-core.mjs.map +1 -1
- package/package.json +8 -8
- /package/{testing/index.d.ts → types/ngrx-traits-core-testing.d.ts} +0 -0
- /package/{index.d.ts → types/ngrx-traits-core.d.ts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngrx-traits-core-testing.mjs","sources":["
|
|
1
|
+
{"version":3,"file":"ngrx-traits-core-testing.mjs","sources":["../../../../../libs/ngrx-traits/core/testing/src/provide-mock-local-traits.ts","../../../../../libs/ngrx-traits/core/testing/src/ngrx-traits-core-testing.ts"],"sourcesContent":["import {\n EntityFeatureFactory,\n TraitsLocalStore,\n DISABLE_LOCAL_TRAIT_EFFECTS,\n} from '@ngrx-traits/core';\nimport { Injector, Provider, Type } from '@angular/core';\nimport { EffectSources } from '@ngrx/effects';\nimport { MockStore } from '@ngrx/store/testing';\n\n/*\n * NOTE: provideMockStore({initialState}) initialState will be ignored with local traits store!\n * Override selectors instead\n *\n * You still need to provideMockStore and provideMockActions\n * */\n\nexport function provideMockLocalTraits<\n T extends TraitsLocalStore<EntityFeatureFactory<any, any>>\n>({\n traitFactory,\n selectors,\n}: {\n traitFactory: Type<T>;\n selectors?: {\n [key in keyof T['localSelectors']]?: ReturnType<T['localSelectors'][key]>;\n };\n}): Provider[] {\n return [\n { provide: DISABLE_LOCAL_TRAIT_EFFECTS, useValue: true },\n {\n provide: EffectSources,\n useValue: {\n addEffects: () => {\n return;\n },\n },\n },\n {\n provide: traitFactory,\n deps: [Injector, MockStore],\n useFactory: (injector: Injector, mockStore: MockStore) => {\n const trait = new traitFactory(injector);\n if (selectors) {\n Object.keys(selectors).forEach(\n (key) =>\n trait.localSelectors?.[key] &&\n mockStore.overrideSelector(\n trait.localSelectors[key],\n selectors?.[key]\n )\n );\n }\n return trait;\n },\n },\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;AASA;;;;;AAKK;SAEW,sBAAsB,CAEpC,EACA,YAAY,EACZ,SAAS,GAMV,EAAA;IACC,OAAO;AACL,QAAA,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE;AACxD,QAAA;AACE,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,QAAQ,EAAE;gBACR,UAAU,EAAE,MAAK;oBACf;gBACF,CAAC;AACF,aAAA;AACF,SAAA;AACD,QAAA;AACE,YAAA,OAAO,EAAE,YAAY;AACrB,YAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;AAC3B,YAAA,UAAU,EAAE,CAAC,QAAkB,EAAE,SAAoB,KAAI;AACvD,gBAAA,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC;gBACxC,IAAI,SAAS,EAAE;AACb,oBAAA,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAC5B,CAAC,GAAG,KACF,KAAK,CAAC,cAAc,GAAG,GAAG,CAAC;AAC3B,wBAAA,SAAS,CAAC,gBAAgB,CACxB,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EACzB,SAAS,GAAG,GAAG,CAAC,CACjB,CACJ;gBACH;AACA,gBAAA,OAAO,KAAK;YACd,CAAC;AACF,SAAA;KACF;AACH;;ACxDA;;AAEG;;;;"}
|
|
@@ -517,10 +517,10 @@ class TraitEffect {
|
|
|
517
517
|
? resolvedEffects$.pipe(takeUntil(this.actions$.pipe(ofType(getDestroyActionName(this.componentId)))))
|
|
518
518
|
: resolvedEffects$;
|
|
519
519
|
}
|
|
520
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
521
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
520
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TraitEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
521
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TraitEffect }); }
|
|
522
522
|
}
|
|
523
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
523
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TraitEffect, decorators: [{
|
|
524
524
|
type: Injectable
|
|
525
525
|
}] });
|
|
526
526
|
function getDestroyActionName(id) {
|
|
@@ -667,10 +667,10 @@ class TraitsLocalStore extends TraitEffect {
|
|
|
667
667
|
ngOnDestroy() {
|
|
668
668
|
this.traits.destroy();
|
|
669
669
|
}
|
|
670
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
671
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
670
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TraitsLocalStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
671
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TraitsLocalStore }); }
|
|
672
672
|
}
|
|
673
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
673
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: TraitsLocalStore, decorators: [{
|
|
674
674
|
type: Injectable
|
|
675
675
|
}], ctorParameters: () => [] });
|
|
676
676
|
|
|
@@ -915,11 +915,11 @@ function invalidaSubKeys(state) {
|
|
|
915
915
|
}
|
|
916
916
|
|
|
917
917
|
class CacheModule {
|
|
918
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
919
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "
|
|
920
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "
|
|
918
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CacheModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
919
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.6", ngImport: i0, type: CacheModule, imports: [i1.StoreFeatureModule] }); }
|
|
920
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CacheModule, imports: [StoreModule.forFeature('cache', cacheReducer)] }); }
|
|
921
921
|
}
|
|
922
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
922
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.6", ngImport: i0, type: CacheModule, decorators: [{
|
|
923
923
|
type: NgModule,
|
|
924
924
|
args: [{
|
|
925
925
|
imports: [StoreModule.forFeature('cache', cacheReducer)],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngrx-traits-core.mjs","sources":["../tmp-esm2022/util.js","../tmp-esm2022/create-entity-feature.js","../tmp-esm2022/trait-effect.js","../tmp-esm2022/local-store/disable-local-trait-effects.token.js","../tmp-esm2022/local-store/traits-local-store.js","../tmp-esm2022/cache/cache.models.js","../tmp-esm2022/cache/cache.selectors.js","../tmp-esm2022/cache/cache.actions.js","../tmp-esm2022/cache/cache.service.js","../tmp-esm2022/cache/cache.reducer.js","../tmp-esm2022/cache/cache.module.js","../tmp-esm2022/cache/index.js","../tmp-esm2022/ngrx-traits-core.js"],"sourcesContent":["export function insertIf(condition, getElement) {\n return condition ? [getElement()] : [];\n}\nexport function toMap(a) {\n return a.reduce((acum, value) => {\n acum[value] = true;\n return acum;\n }, {});\n}\nexport function capitalize(name) {\n return name.charAt(0).toUpperCase() + name.slice(1);\n}\nexport function camelCaseToSentence(text) {\n const result = text.replace(/([A-Z])/g, ' $1');\n return result.charAt(0).toUpperCase() + result.slice(1);\n}\n/**\n * Set propertyReducer in sourceReducer in a property of the source state,\n * @param sourceReducer\n * @param property\n * @param propertyReducer\n *\n * @example\n *\n * const newReducer = setPropertyReducer(productsReducer, 'selectedProduct', selectedProductReducer)\n */\nexport function setPropertyReducer(sourceReducer, property, propertyReducer) {\n return function reducer(state, action) {\n const sourceState = sourceReducer(state, action);\n return {\n ...sourceState,\n [property]: propertyReducer(sourceState[property], action),\n };\n };\n}\n/**\n * Set propertyReducers in sourceReducer each in a property of the source state,\n * @param sourceReducer\n * @param property\n * @param propertyReducer\n *\n * @example\n *\n * const newReducer = setPropertyReducer(productsReducer,\n * {\n * selectedProduct: selectedProductReducer\n * favoriteProduct: favoriteProductReducer\n * })\n */\nexport function setPropertiesReducer(sourceReducer, propertiesReducers) {\n return function reducer(state, action) {\n const newState = { ...sourceReducer(state, action) };\n for (const property in propertiesReducers) {\n newState[property] = propertiesReducers[property](newState[property], action);\n }\n return newState;\n };\n}\n/**\n * joins two reducers so the work in the same state\n * @param firstReducer\n * @param secondReducer\n */\nexport function joinReducers(firstReducer, secondReducer) {\n return function reducer(state, action) {\n const sourceState = firstReducer(state, action);\n return secondReducer(sourceState, action);\n };\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10cmFpdHMvY29yZS9zcmMvbGliL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBSUEsTUFBTSxVQUFVLFFBQVEsQ0FDdEIsU0FBYyxFQUNkLFVBQXNEO0lBRXRELE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBQ0QsTUFBTSxVQUFVLEtBQUssQ0FBQyxDQUF5QjtJQUM3QyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFnQyxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzFELElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUM7UUFDbkIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDVCxDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUFZO0lBQ3JDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RELENBQUM7QUFFRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsSUFBWTtJQUM5QyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztJQUMvQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQ7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxhQUErRCxFQUMvRCxRQUFXLEVBQ1gsZUFBdUU7SUFFdkUsT0FBTyxTQUFTLE9BQU8sQ0FBQyxLQUFZLEVBQUUsTUFBdUI7UUFDM0QsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNqRCxPQUFPO1lBQ0wsR0FBRyxXQUFXO1lBQ2QsQ0FBQyxRQUFRLENBQUMsRUFBRSxlQUFlLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sQ0FBQztTQUMzRCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7O0dBYUc7QUFDSCxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLGFBQStELEVBQy9ELGtCQUVDO0lBRUQsT0FBTyxTQUFTLE9BQU8sQ0FBQyxLQUFZLEVBQUUsTUFBdUI7UUFDM0QsTUFBTSxRQUFRLEdBQUcsRUFBRSxHQUFHLGFBQWEsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUNyRCxLQUFLLE1BQU0sUUFBUSxJQUFJLGtCQUFrQixFQUFFLENBQUM7WUFDMUMsUUFBUSxDQUFDLFFBQWEsQ0FBQyxHQUFHLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxDQUNwRCxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQ2xCLE1BQU0sQ0FDUCxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsWUFBOEQsRUFDOUQsYUFBMkQ7SUFFM0QsT0FBTyxTQUFTLE9BQU8sQ0FBQyxLQUFZLEVBQUUsTUFBdUI7UUFDM0QsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNoRCxPQUFPLGFBQWEsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjdGlvbkNyZWF0b3IgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBBY3Rpb25UeXBlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgUmVkdWNlclR5cGVzIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0SWY8U3RhdGU+KFxuICBjb25kaXRpb246IGFueSxcbiAgZ2V0RWxlbWVudDogKCkgPT4gUmVkdWNlclR5cGVzPFN0YXRlLCBBY3Rpb25DcmVhdG9yW10+LFxuKTogUmVkdWNlclR5cGVzPFN0YXRlLCBBY3Rpb25DcmVhdG9yW10+W10ge1xuICByZXR1cm4gY29uZGl0aW9uID8gW2dldEVsZW1lbnQoKV0gOiBbXTtcbn1cbmV4cG9ydCBmdW5jdGlvbiB0b01hcChhOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+KSB7XG4gIHJldHVybiBhLnJlZHVjZSgoYWN1bTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0sIHZhbHVlKSA9PiB7XG4gICAgYWN1bVt2YWx1ZV0gPSB0cnVlO1xuICAgIHJldHVybiBhY3VtO1xuICB9LCB7fSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYXBpdGFsaXplKG5hbWU6IHN0cmluZykge1xuICByZXR1cm4gbmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoMSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYW1lbENhc2VUb1NlbnRlbmNlKHRleHQ6IHN0cmluZykge1xuICBjb25zdCByZXN1bHQgPSB0ZXh0LnJlcGxhY2UoLyhbQS1aXSkvZywgJyAkMScpO1xuICByZXR1cm4gcmVzdWx0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcmVzdWx0LnNsaWNlKDEpO1xufVxuXG4vKipcbiAqIFNldCBwcm9wZXJ0eVJlZHVjZXIgaW4gc291cmNlUmVkdWNlciBpbiBhIHByb3BlcnR5IG9mIHRoZSBzb3VyY2Ugc3RhdGUsXG4gKiBAcGFyYW0gc291cmNlUmVkdWNlclxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gcHJvcGVydHlSZWR1Y2VyXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjb25zdCBuZXdSZWR1Y2VyID0gc2V0UHJvcGVydHlSZWR1Y2VyKHByb2R1Y3RzUmVkdWNlciwgJ3NlbGVjdGVkUHJvZHVjdCcsIHNlbGVjdGVkUHJvZHVjdFJlZHVjZXIpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRQcm9wZXJ0eVJlZHVjZXI8U3RhdGUsIFAgZXh0ZW5kcyBrZXlvZiBTdGF0ZT4oXG4gIHNvdXJjZVJlZHVjZXI6IChzdGF0ZTogU3RhdGUsIGFjdGlvbjogQWN0aW9uVHlwZTxhbnk+KSA9PiBTdGF0ZSxcbiAgcHJvcGVydHk6IFAsXG4gIHByb3BlcnR5UmVkdWNlcjogKHN0YXRlOiBTdGF0ZVtQXSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IFN0YXRlW1BdLFxuKTogKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IFN0YXRlIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvblR5cGU8YW55Pik6IFN0YXRlIHtcbiAgICBjb25zdCBzb3VyY2VTdGF0ZSA9IHNvdXJjZVJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnNvdXJjZVN0YXRlLFxuICAgICAgW3Byb3BlcnR5XTogcHJvcGVydHlSZWR1Y2VyKHNvdXJjZVN0YXRlW3Byb3BlcnR5XSwgYWN0aW9uKSxcbiAgICB9O1xuICB9O1xufVxuXG4vKipcbiAqIFNldCBwcm9wZXJ0eVJlZHVjZXJzIGluIHNvdXJjZVJlZHVjZXIgZWFjaCBpbiBhIHByb3BlcnR5IG9mIHRoZSBzb3VyY2Ugc3RhdGUsXG4gKiBAcGFyYW0gc291cmNlUmVkdWNlclxuICogQHBhcmFtIHByb3BlcnR5XG4gKiBAcGFyYW0gcHJvcGVydHlSZWR1Y2VyXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjb25zdCBuZXdSZWR1Y2VyID0gc2V0UHJvcGVydHlSZWR1Y2VyKHByb2R1Y3RzUmVkdWNlcixcbiAqIHtcbiAqICAgIHNlbGVjdGVkUHJvZHVjdDogc2VsZWN0ZWRQcm9kdWN0UmVkdWNlclxuICogICAgZmF2b3JpdGVQcm9kdWN0OiBmYXZvcml0ZVByb2R1Y3RSZWR1Y2VyXG4gKiB9KVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcGVydGllc1JlZHVjZXI8U3RhdGUsIFAgZXh0ZW5kcyBrZXlvZiBTdGF0ZT4oXG4gIHNvdXJjZVJlZHVjZXI6IChzdGF0ZTogU3RhdGUsIGFjdGlvbjogQWN0aW9uVHlwZTxhbnk+KSA9PiBTdGF0ZSxcbiAgcHJvcGVydGllc1JlZHVjZXJzOiB7XG4gICAgW2tleSBpbiBQXTogKHN0YXRlOiBTdGF0ZVtQXSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IFN0YXRlW1BdO1xuICB9LFxuKTogKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IFN0YXRlIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHJlZHVjZXIoc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvblR5cGU8YW55Pik6IFN0YXRlIHtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IHsgLi4uc291cmNlUmVkdWNlcihzdGF0ZSwgYWN0aW9uKSB9O1xuICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gcHJvcGVydGllc1JlZHVjZXJzKSB7XG4gICAgICBuZXdTdGF0ZVtwcm9wZXJ0eSBhcyBQXSA9IHByb3BlcnRpZXNSZWR1Y2Vyc1twcm9wZXJ0eV0oXG4gICAgICAgIG5ld1N0YXRlW3Byb3BlcnR5XSxcbiAgICAgICAgYWN0aW9uLFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1N0YXRlO1xuICB9O1xufVxuXG4vKipcbiAqIGpvaW5zIHR3byByZWR1Y2VycyBzbyB0aGUgd29yayBpbiB0aGUgc2FtZSBzdGF0ZVxuICogQHBhcmFtIGZpcnN0UmVkdWNlclxuICogQHBhcmFtIHNlY29uZFJlZHVjZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW5SZWR1Y2VyczxTdGF0ZT4oXG4gIGZpcnN0UmVkdWNlcjogKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IFN0YXRlLFxuICBzZWNvbmRSZWR1Y2VyOiAoc3RhdGU6IGFueSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IGFueSxcbik6IChzdGF0ZTogU3RhdGUsIGFjdGlvbjogQWN0aW9uVHlwZTxhbnk+KSA9PiBTdGF0ZSB7XG4gIHJldHVybiBmdW5jdGlvbiByZWR1Y2VyKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pOiBTdGF0ZSB7XG4gICAgY29uc3Qgc291cmNlU3RhdGUgPSBmaXJzdFJlZHVjZXIoc3RhdGUsIGFjdGlvbik7XG4gICAgcmV0dXJuIHNlY29uZFJlZHVjZXIoc291cmNlU3RhdGUsIGFjdGlvbik7XG4gIH07XG59XG4iXX0=","import { combineReducers, createFeatureSelector, createReducer, createSelector, } from '@ngrx/store';\nimport { capitalize, setPropertiesReducer } from './util';\n/**\n * Creates a function that when execute will combine all the traits, and return a EntityFeatureFactory\n * which combines all the traits actions, selectors , reducers and effects,\n * the names param will replace any action and selector with the word Entity or Entities,\n * with the corresponding entityName and entitiesName param (entityName+'s' if entitiesName is omitted).\n * @param namesConfig - Optional Names for entities\n * @param namesConfig.entityName - singular name for entity\n * @param [namesConfig.entitiesName] - plural name for entities, defaults to entityName + 's'\n * @param traits set of traits to be combined\n *\n * @example\n *\n * const featureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * addAsyncActionTrait({\n * name: 'checkout',\n * actionSuccessProps: props<{ orderId: string }>(),\n * })\n * );\n *\n * export const productsFeature = featureFactory({\n * actionsGroupKey: '[Products]',\n * featureSelector: 'products',\n * });\n */\nexport function createEntityFeatureFactory(namesOrFactory, ...traits) {\n return ((config) => {\n const { entityName, entitiesName } = 'entityName' in namesOrFactory\n ? namesOrFactory\n : { entityName: 'Entity', entitiesName: 'Entities' };\n const singular = capitalize(entityName);\n const plural = entitiesName\n ? capitalize(entitiesName)\n : capitalize(entityName + 's');\n const sortedTraits = sortTraits('entityName' in namesOrFactory ? [...traits] : [namesOrFactory, ...traits]);\n const allConfigs = buildAllConfigs(sortedTraits);\n const allActions = buildAllActions(sortedTraits, config.actionsGroupKey, singular, plural, allConfigs);\n const allSelectors = buildAllSelectors(sortedTraits, allConfigs);\n const allMutators = buildAllMutators(sortedTraits, allSelectors, allConfigs);\n const initialState = buildInitialState(sortedTraits, allConfigs);\n const reducer = buildReducer(sortedTraits, initialState, allActions, allSelectors, allMutators, allConfigs);\n const featureSelector = typeof config.featureSelector === 'string'\n ? createFeatureSelector(config.featureSelector)\n : config.featureSelector;\n const allFeatureSelectors = allSelectors && getSelectorsForFeature(featureSelector, allSelectors);\n const allEffects = buildAllEffects(sortedTraits, allActions, allFeatureSelectors, allConfigs);\n return {\n actions: entityName\n ? renameProps(allActions, singular, plural)\n : allActions,\n selectors: entityName\n ? renameProps(allFeatureSelectors, singular, plural)\n : allSelectors,\n initialState,\n reducer: reducer ?? createReducer(initialState),\n effects: allEffects,\n };\n });\n}\nfunction renameProps(target, entityName, entitiesName) {\n const result = {};\n for (const [key, value] of Object.entries(target)) {\n const newKey = key\n .replace('Entities', entitiesName)\n .replace('Entity', entityName);\n result[newKey] = value;\n }\n return result;\n}\nfunction sortTraits(traits) {\n const sortedTraits = [];\n for (let i = 0; i < traits.length; i++) {\n const trait = traits[i];\n if (!trait.depends?.length) {\n sortedTraits.push(trait);\n continue;\n }\n if (trait.depends.length > 1)\n for (const d of trait.depends) {\n const isTraitPresent = traits.some((tr) => tr.key === d);\n if (isTraitPresent) {\n trait.depends = [d];\n break;\n }\n }\n if (trait.depends.length > 1)\n throw Error('could not find dependencies ' + trait.depends.join(' '));\n const isDependencyAlreadyAdded = sortedTraits.some((tr) => tr.key === trait?.depends?.[0]);\n if (isDependencyAlreadyAdded)\n sortedTraits.push(trait);\n else {\n // move trait to the end\n delete traits[i];\n traits.push(trait);\n }\n }\n return sortedTraits;\n}\nfunction buildAllConfigs(sortedTraits) {\n return sortedTraits.reduce((acc, factory) => {\n acc[factory.key] = factory.config;\n return acc;\n }, {});\n}\nfunction buildAllActions(sortedTraits, actionsGroupKey, entityName, entitiesName, allConfigs) {\n return sortedTraits.reduce((previousResult, factory) => {\n let result = factory?.actions?.({\n actionsGroupKey: actionsGroupKey,\n entityName,\n entitiesName,\n allConfigs,\n }) ?? {};\n result = previousResult ? { ...previousResult, ...result } : result;\n return result;\n }, {});\n}\nfunction buildAllSelectors(sortedTraits, allConfigs) {\n return sortedTraits.reduce((previousResult, factory) => {\n let result = factory?.selectors?.({\n previousSelectors: previousResult,\n allConfigs,\n }) ?? {};\n result = previousResult ? { ...previousResult, ...result } : result;\n return result;\n }, {});\n}\nfunction buildAllMutators(sortedTraits, allSelectors, allConfigs) {\n return (sortedTraits.reduce((previousResult, factory) => {\n let result = factory?.mutators?.({\n allSelectors: allSelectors,\n previousMutators: previousResult,\n allConfigs,\n }) ?? {};\n result = previousResult ? { ...previousResult, ...result } : result;\n return result;\n }, {}) || {});\n}\nfunction buildInitialState(sortedTraits, allConfigs) {\n return sortedTraits.reduce((previousResult, factory) => {\n const result = factory?.initialState?.({\n previousInitialState: previousResult,\n allConfigs,\n }) ??\n previousResult ??\n {};\n return result;\n }, {});\n}\nfunction buildReducer(sortedTraits, initialState, allActions, allSelectors, allMutators, allConfigs) {\n return sortedTraits.reduce((previousResult, factory) => {\n const result = factory?.reducer?.({\n initialState,\n allActions,\n allSelectors,\n allMutators,\n allConfigs,\n });\n return result && previousResult\n ? (state = initialState, action) => {\n const aState = previousResult(state, action);\n return result(aState, action);\n }\n : result ?? previousResult;\n }, undefined);\n}\nfunction buildAllEffects(sortedTraits, allActions, allFeatureSelectors, allConfigs) {\n return sortedTraits.reduce((previousResult, factory) => {\n let result = factory?.effects?.({\n allActions,\n allSelectors: allFeatureSelectors,\n allConfigs,\n }) ?? [];\n result = previousResult ? [...previousResult, ...result] : result;\n return result;\n }, []);\n}\nfunction getSelectorsForFeature(featureSelect, selectors) {\n const ss = {};\n for (const prop in selectors) {\n ss[prop] = createSelector(featureSelect, selectors[prop]);\n }\n return ss;\n}\n/**\n * Combine a map entityFeatureFactories into one,\n * grouping the actions and selectors by the key of the respective entityFeatureFactory\n * @param traitFactoriesMap\n *\n * @example\n *\n * const clientsFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'client', entitiesName: 'clients' },\n * addLoadEntitiesTrait<Client>(),\n * addCrudEntitiesTrait<Client>()\n * );\n *\n * const productOrderFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'productOrder' },\n * addLoadEntitiesTrait<ProductOrder>(),\n * addSelectEntitiesTrait<ProductOrder>()\n * );\n *\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntitiesTrait<Product>()\n * );\n *\n * const productCombinedFactory = combineEntityFeatures({\n * products: productFeatureFactory,\n * productOrders: productOrderFeatureFactory,\n * clients: clientsFeatureFactory,\n * });\n *\n * const combinedFeature = productCombinedFactory({\n * actionsGroupKey: '[Combined]',\n * featureSelector: 'combined',\n * });\n *\n * combinedFeature.actions.client.loadClients();\n * combinedFeature.actions.product.loadProducts();\n */\nexport function combineEntityFeatures(traitFactoriesMap) {\n return ((config) => {\n const featureSelector = typeof config.featureSelector === 'string'\n ? createFeatureSelector(config.featureSelector)\n : config.featureSelector;\n const actions = {};\n const selectors = {};\n const reducers = {};\n let effects = [];\n for (const [key, entityFeatureFactory] of Object.entries(traitFactoriesMap)) {\n const selector = createSelector(featureSelector, (state) => state[key]);\n const featureTraits = entityFeatureFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: selector,\n });\n actions[key] = featureTraits.actions;\n selectors[key] = featureTraits.selectors;\n reducers[key] = featureTraits.reducer;\n effects = [...effects, ...featureTraits.effects];\n }\n return {\n actions,\n selectors,\n reducer: combineReducers(reducers),\n effects,\n };\n });\n}\n/**\n * Mix a map entityFeatureFactories into one, different from combine the actions and selectors a mix, not group by key like in combine, the keys are still use\n * internal in the reducers and selector to separate the state\n * @param traitFactoriesMap\n *\n * @example\n *\n * const clientsFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'client', entitiesName: 'clients' },\n * addLoadEntitiesTrait<Client>(),\n * addCrudEntitiesTrait<Client>()\n * );\n *\n * const productOrderFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'productOrder' },\n * addLoadEntitiesTrait<ProductOrder>(),\n * addSelectEntitiesTrait<ProductOrder>()\n * );\n *\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntitiesTrait<Product>()\n * );\n *\n * const productMixedFactory = mixEntityFeatures({\n * products: productFeatureFactory,\n * productOrders: productOrderFeatureFactory,\n * clients: clientsFeatureFactory,\n * });\n *\n * const mixedFeature = productMixedFactory({\n * actionsGroupKey: '[Mixed]',\n * featureSelector: 'mixed',\n * });\n * mixedFeature.actions.loadClients();\n * mixedFeature.actions.loadProducts();\n *\n */\nexport function mixEntityFeatures(traitFactoriesMap) {\n return ((config) => {\n const featureSelector = typeof config.featureSelector === 'string'\n ? createFeatureSelector(config.featureSelector)\n : config.featureSelector;\n let actions = {};\n let selectors = {};\n const reducers = {};\n let effects = [];\n for (const [key, entityFeatureFactory] of Object.entries(traitFactoriesMap)) {\n const selector = createSelector(featureSelector, (state) => state[key]);\n const featureTraits = entityFeatureFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: selector,\n });\n actions = { ...actions, ...featureTraits.actions };\n selectors = { ...selectors, ...featureTraits.selectors };\n reducers[key] = featureTraits.reducer;\n effects = [...effects, ...featureTraits.effects];\n }\n return {\n actions,\n selectors,\n reducer: combineReducers(reducers),\n effects,\n };\n });\n}\n/**\n * Combines targetTraitFactory with the traitFactoriesMap using the keys as props for the targetTraitFactory state,\n * and grouping the combined actions by key\n * @param targetTraitFactory\n * @param traitFactoriesMap\n *\n * @example\n *\n * const clientsFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'client', entitiesName: 'clients' },\n * addLoadEntitiesTrait<Client>(),\n * addCrudEntitiesTrait<Client>()\n * );\n *\n * const productOrderFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'productOrder' },\n * addLoadEntitiesTrait<ProductOrder>(),\n * addSelectEntitiesTrait<ProductOrder>()\n * );\n *\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntitiesTrait<Product>()\n * );\n *\n * const productAddEntityPropertiesFactory = addEntityFeaturesProperties(\n * productFeatureFactory,\n * {\n * productOrders: productOrderFeatureFactory,\n * clients: clientsFeatureFactory,\n * }\n * );\n *\n * const combinedFeature = productAddEntityPropertiesFactory({\n * actionsGroupKey: '[addEntityFeatures]',\n * featureSelector: 'addEntityFeatures',\n * });\n *\n * combinedFeature.actions.loadProducts();\n * combinedFeature.actions.clients.loadClients();\n * combinedFeature.actions.productOrders.loadProductOrders();\n */\nexport function addEntityFeaturesProperties(targetTraitFactory, traitFactoriesMap) {\n return ((config) => {\n const featureSelector = typeof config.featureSelector === 'string'\n ? createFeatureSelector(config.featureSelector)\n : config.featureSelector;\n const targetFeatureTraits = targetTraitFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: featureSelector,\n });\n const actions = { ...targetFeatureTraits.actions };\n const selectors = { ...targetFeatureTraits.selectors };\n const reducers = {};\n let effects = [...targetFeatureTraits.effects];\n for (const [key, entityFeatureFactory] of Object.entries(traitFactoriesMap)) {\n const selector = createSelector(featureSelector, (state) => state[key]);\n const featureTraits = entityFeatureFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: selector,\n });\n actions[key] = featureTraits.actions;\n selectors[key] = featureTraits.selectors;\n reducers[key] = featureTraits.reducer;\n effects = [...effects, ...featureTraits.effects];\n }\n return {\n actions,\n selectors,\n reducer: setPropertiesReducer(targetFeatureTraits.reducer, reducers),\n effects,\n };\n });\n}\n/**\n * Helper function to create an implementation a TraitFactory\n * @param f TraitFactory implementation\n */\nexport function createTraitFactory(f) {\n return f;\n}\n/**\n * Helper function to combine selectors in components as map\n *\n * @example\n *\n * view = combineSelectors({\n * products: ProductSelectors.selectProductsCurrentPage,\n * isLoading: ProductSelectors.isLoadingProductsCurrentPage,\n * selectedProduct: ProductSelectors.selectProductSelected,\n * isLoadingCheckout: ProductSelectors.isLoadingCheckout,\n * selectedSort: ProductSelectors.selectProductsSort,\n * filters: ProductSelectors.selectProductsFilter,\n * });\n * @param t\n */\nexport function combineSelectors(t) {\n const selectors = Object.values(t);\n const keys = Object.keys(t);\n const projector = (...args) => keys.reduce((acc, key, index) => {\n acc[key] = args[index];\n return acc;\n }, {});\n return createSelector.apply(null, [...selectors, projector]);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLWVudGl0eS1mZWF0dXJlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvY3JlYXRlLWVudGl0eS1mZWF0dXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXFCQSxPQUFPLEVBR0wsZUFBZSxFQUNmLHFCQUFxQixFQUNyQixhQUFhLEVBQ2IsY0FBYyxHQUVmLE1BQU0sYUFBYSxDQUFDO0FBR3JCLE9BQU8sRUFBRSxVQUFVLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFpRjFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBCRztBQUNILE1BQU0sVUFBVSwwQkFBMEIsQ0FLeEMsY0FFZ0IsRUFDaEIsR0FBRyxNQUFTO0lBUVosT0FBTyxDQUFDLENBQUMsTUFBd0IsRUFBRSxFQUFFO1FBQ25DLE1BQU0sRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLEdBQ2hDLFlBQVksSUFBSSxjQUFjO1lBQzVCLENBQUMsQ0FBRSxjQUdDO1lBQ0osQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUM7UUFFekQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLFlBQVk7WUFDekIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUM7WUFDMUIsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLEdBQUcsR0FBRyxDQUFDLENBQUM7UUFFakMsTUFBTSxZQUFZLEdBQUcsVUFBVSxDQUM3QixZQUFZLElBQUksY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsY0FBYyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQzNFLENBQUM7UUFFRixNQUFNLFVBQVUsR0FBRyxlQUFlLENBQUMsWUFBWSxDQUFD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LENBQUM7UUFDdkIsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDLEVBQUUsRUFBUyxDQUFDLENBQUM7SUFDaEIsT0FBUSxjQUFzQixDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxHQUFHLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3hFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb25maWcsXG4gIEV4dHJhY3RBY3Rpb25zVHlwZSxcbiAgRXh0cmFjdFNlbGVjdG9yc1R5cGUsXG4gIEV4dHJhY3RTdGF0ZVR5cGUsXG4gIEVudGl0eUZlYXR1cmVGYWN0b3J5LFxuICBGZWF0dXJlU2VsZWN0b3JzLFxuICBLZXllZENvbmZpZyxcbiAgVHJhaXRBY3Rpb25zLFxuICBUcmFpdEZhY3RvcnksXG4gIFRyYWl0U2VsZWN0b3JzLFxuICBUcmFpdFN0YXRlTXV0YXRvcnMsXG4gIFVuaW9uVG9JbnRlcnNlY3Rpb24sXG4gIFRyYWl0QWN0aW9uc0ZhY3RvcnksXG4gIFRyYWl0U2VsZWN0b3JzRmFjdG9yeSxcbiAgVHJhaXRJbml0aWFsU3RhdGVGYWN0b3J5LFxuICBUcmFpdFN0YXRlTXV0YXRvcnNGYWN0b3J5LFxuICBUcmFpdFJlZHVjZXJGYWN0b3J5LFxuICBUcmFpdEVmZmVjdHNGYWN0b3J5LFxuICBBbGxUcmFpdENvbmZpZ3MsXG59IGZyb20gJy4vbW9kZWwnO1xuaW1wb3J0IHtcbiAgQWN0aW9uLFxuICBBY3Rpb25UeXBlLFxuICBjb21iaW5lUmVkdWNlcnMsXG4gIGNyZWF0ZUZlYXR1cmVTZWxlY3RvcixcbiAgY3JlYXRlUmVkdWNlcixcbiAgY3JlYXRlU2VsZWN0b3IsXG4gIE1lbW9pemVkU2VsZWN0b3IsXG59IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IFRyYWl0RWZmZWN0IH0gZnJvbSAnLi90cmFpdC1lZmZlY3QnO1xuaW1wb3J0IHsgVHlwZSB9IGZyb20gJy4vbG9jYWwtc3RvcmUnO1xuaW1wb3J0IHsgY2FwaXRhbGl6ZSwgc2V0UHJvcGVydGllc1JlZHVjZXIgfSBmcm9tICcuL3V0aWwnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdoZW4gZXhlY3V0ZSB3aWxsIGNvbWJpbmUgYWxsIHRoZSB0cmFpdHMsIGFuZCByZXR1cm4gYSBFbnRpdHlGZWF0dXJlRmFjdG9yeVxuICogd2hpY2ggY29tYmluZXMgYWxsIHRoZSB0cmFpdHMgYWN0aW9ucywgc2VsZWN0b3JzICwgcmVkdWNlcnMgYW5kIGVmZmVjdHMsXG4gKiB0aGUgbmFtZXMgcGFyYW0gd2lsbCByZXBsYWNlIGFueSBhY3Rpb24gYW5kIHNlbGVjdG9yIHdpdGggdGhlIHdvcmQgRW50aXR5IG9yIEVudGl0aWVzLFxuICogd2l0aCB0aGUgY29ycmVzcG9uZGluZyBlbnRpdHlOYW1lIGFuZCAgZW50aXRpZXNOYW1lIHBhcmFtIChlbnRpdHlOYW1lKydzJyBpZiBlbnRpdGllc05hbWUgaXMgb21pdHRlZCkuXG4gKiBAcGFyYW0gbmFtZXNDb25maWcgLSBPcHRpb25hbCBOYW1lcyBmb3IgZW50aXRpZXNcbiAqIEBwYXJhbSBuYW1lc0NvbmZpZy5lbnRpdHlOYW1lIC0gc2luZ3VsYXIgbmFtZSBmb3IgZW50aXR5XG4gKiBAcGFyYW0gW25hbWVzQ29uZmlnLmVudGl0aWVzTmFtZV0gLSBwbHVyYWwgbmFtZSBmb3IgZW50aXRpZXMsIGRlZmF1bHRzIHRvIGVudGl0eU5hbWUgKyAncydcbiAqIEBwYXJhbSB0cmFpdHMgc2V0IG9mIHRyYWl0cyB0byBiZSBjb21iaW5lZFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogY29uc3QgZmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAncHJvZHVjdCcgfSxcbiAqICAgYWRkTG9hZEVudGl0aWVzVHJhaXQ8UHJvZHVjdD4oKSxcbiAqICAgYWRkU2VsZWN0RW50aXR5VHJhaXQ8UHJvZHVjdD4oKSxcbiAqICAgYWRkQXN5bmNBY3Rpb25UcmFpdCh7XG4gKiAgICAgbmFtZTogJ2NoZWNrb3V0JyxcbiAqICAgICBhY3Rpb25TdWNjZXNzUHJvcHM6IHByb3BzPHsgb3JkZXJJZDogc3RyaW5nIH0+KCksXG4gKiAgIH0pXG4gKiApO1xuICpcbiAqIGV4cG9ydCBjb25zdCBwcm9kdWN0c0ZlYXR1cmUgPSBmZWF0dXJlRmFjdG9yeSh7XG4gKiAgIGFjdGlvbnNHcm91cEtleTogJ1tQcm9kdWN0c10nLFxuICogICBmZWF0dXJlU2VsZWN0b3I6ICdwcm9kdWN0cycsXG4gKiB9KTtcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5PFxuICBGIGV4dGVuZHMgcmVhZG9ubHkgVHJhaXRGYWN0b3J5W10sXG4gIEVudGl0eU5hbWUgZXh0ZW5kcyBzdHJpbmcsXG4gIEVudGl0aWVzTmFtZSBleHRlbmRzIHN0cmluZyA9IGAke0VudGl0eU5hbWV9c2Bcbj4oXG4gIHtcbiAgICBlbnRpdHlOYW1lLFxuICAgIGVudGl0aWVzTmFtZSxcbiAgfTogeyBlbnRpdHlOYW1lOiBFbnRpdHlOYW1lOyBlbnRpdGllc05hbWU/OiBFbnRpdGllc05hbWUgfSxcbiAgLi4udHJhaXRzOiBGXG4pOiBFbnRpdHlGZWF0dXJlRmFjdG9yeTxcbiAgRW50aXR5TmFtZSxcbiAgRW50aXRpZXNOYW1lLFxuICBFeHRyYWN0U3RhdGVUeXBlPEY+LFxuICBFeHRyYWN0QWN0aW9uc1R5cGU8Rj4sXG4gIEV4dHJhY3RTZWxlY3RvcnNUeXBlPEY+XG4+O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0aGF0IHdoZW4gZXhlY3V0ZSB3aWxsIGNvbWJpbmUgYWxsIHRoZSB0cmFpdHMsIGFuZCByZXR1cm4gYSBFbnRpdHlGZWF0dXJlRmFjdG9yeVxuICogd2hpY2ggY29tYmluZXMgYWxsIHRoZSB0cmFpdHMgYWN0aW9ucywgc2VsZWN0b3JzICwgcmVkdWNlcnMgYW5kIGVmZmVjdHMuXG4gKiBAcGFyYW0gdHJhaXRzIHNldCBvZiB0cmFpdHMgdG8gYmUgY29tYmluZWRcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGNvbnN0IGZlYXR1cmVGYWN0b3J5ID0gY3JlYXRlRW50aXR5RmVhdHVyZUZhY3RvcnkoXG4gKiAgIHsgZW50aXR5TmFtZTogJ3Byb2R1Y3QnIH0sXG4gKiAgIGFkZExvYWRFbnRpdGllc1RyYWl0PFByb2R1Y3Q+KCksXG4gKiAgIGFkZFNlbGVjdEVudGl0eVRyYWl0PFByb2R1Y3Q+KCksXG4gKiAgIGFkZEFzeW5jQWN0aW9uVHJhaXQoe1xuICogICAgIG5hbWU6ICdjaGVja291dCcsXG4gKiAgICAgYWN0aW9uU3VjY2Vzc1Byb3BzOiBwcm9wczx7IG9yZGVySWQ6IHN0cmluZyB9PigpLFxuICogICB9KVxuICogKTtcbiAqXG4gKiBleHBvcnQgY29uc3QgcHJvZHVjdHNGZWF0dXJlID0gZmVhdHVyZUZhY3Rvcnkoe1xuICogICBhY3Rpb25zR3JvdXBLZXk6ICdbUHJvZHVjdHNdJyxcbiAqICAgZmVhdHVyZVNlbGVjdG9yOiAncHJvZHVjdHMnLFxuICogfSk7XG4gKlxuICogcHJvZHVjdHNGZWF0dXJlLmFjdGlvbnMubG9hZFByb2R1Y3RzKCk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeTxGIGV4dGVuZHMgcmVhZG9ubHkgVHJhaXRGYWN0b3J5W10+KFxuICAuLi50cmFpdHM6IEZcbik6IEVudGl0eUZlYXR1cmVGYWN0b3J5PFxuICAnRW50aXR5JyxcbiAgJ0VudGl0aWVzJyxcbiAgRXh0cmFjdFN0YXRlVHlwZTxGPixcbiAgRXh0cmFjdEFjdGlvbnNUeXBlPEY+LFxuICBFeHRyYWN0U2VsZWN0b3JzVHlwZTxGPlxuPjtcblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCB3aGVuIGV4ZWN1dGUgd2lsbCBjb21iaW5lIGFsbCB0aGUgdHJhaXRzLCBhbmQgcmV0dXJuIGEgRW50aXR5RmVhdHVyZUZhY3RvcnlcbiAqIHdoaWNoIGNvbWJpbmVzIGFsbCB0aGUgdHJhaXRzIGFjdGlvbnMsIHNlbGVjdG9ycyAsIHJlZHVjZXJzIGFuZCBlZmZlY3RzLFxuICogdGhlIG5hbWVzIHBhcmFtIHdpbGwgcmVwbGFjZSBhbnkgYWN0aW9uIGFuZCBzZWxlY3RvciB3aXRoIHRoZSB3b3JkIEVudGl0eSBvciBFbnRpdGllcyxcbiAqIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZW50aXR5TmFtZSBhbmQgIGVudGl0aWVzTmFtZSBwYXJhbSAoZW50aXR5TmFtZSsncycgaWYgZW50aXRpZXNOYW1lIGlzIG9taXR0ZWQpLlxuICogQHBhcmFtIG5hbWVzQ29uZmlnIC0gT3B0aW9uYWwgTmFtZXMgZm9yIGVudGl0aWVzXG4gKiBAcGFyYW0gbmFtZXNDb25maWcuZW50aXR5TmFtZSAtIHNpbmd1bGFyIG5hbWUgZm9yIGVudGl0eVxuICogQHBhcmFtIFtuYW1lc0NvbmZpZy5lbnRpdGllc05hbWVdIC0gcGx1cmFsIG5hbWUgZm9yIGVudGl0aWVzLCBkZWZhdWx0cyB0byBlbnRpdHlOYW1lICsgJ3MnXG4gKiBAcGFyYW0gdHJhaXRzIHNldCBvZiB0cmFpdHMgdG8gYmUgY29tYmluZWRcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGNvbnN0IGZlYXR1cmVGYWN0b3J5ID0gY3JlYXRlRW50aXR5RmVhdHVyZUZhY3RvcnkoXG4gKiAgIHsgZW50aXR5TmFtZTogJ3Byb2R1Y3QnIH0sXG4gKiAgIGFkZExvYWRFbnRpdGllc1RyYWl0PFByb2R1Y3Q+KCksXG4gKiAgIGFkZFNlbGVjdEVudGl0eVRyYWl0PFByb2R1Y3Q+KCksXG4gKiAgIGFkZEFzeW5jQWN0aW9uVHJhaXQoe1xuICogICAgIG5hbWU6ICdjaGVja291dCcsXG4gKiAgICAgYWN0aW9uU3VjY2Vzc1Byb3BzOiBwcm9wczx7IG9yZGVySWQ6IHN0cmluZyB9PigpLFxuICogICB9KVxuICogKTtcbiAqXG4gKiBleHBvcnQgY29uc3QgcHJvZHVjdHNGZWF0dXJlID0gZmVhdHVyZUZhY3Rvcnkoe1xuICogICBhY3Rpb25zR3JvdXBLZXk6ICdbUHJvZHVjdHNdJyxcbiAqICAgZmVhdHVyZVNlbGVjdG9yOiAncHJvZHVjdHMnLFxuICogfSk7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeTxcbiAgRiBleHRlbmRzIHJlYWRvbmx5IFRyYWl0RmFjdG9yeVtdLFxuICBFbnRpdHlOYW1lIGV4dGVuZHMgc3RyaW5nLFxuICBFbnRpdGllc05hbWUgZXh0ZW5kcyBzdHJpbmcgPSBgJHtFbnRpdHlOYW1lfXNgXG4+KFxuICBuYW1lc09yRmFjdG9yeTpcbiAgICB8IHsgZW50aXR5TmFtZTogRW50aXR5TmFtZTsgZW50aXRpZXNOYW1lPzogRW50aXRpZXNOYW1lIH1cbiAgICB8IFRyYWl0RmFjdG9yeSxcbiAgLi4udHJhaXRzOiBGXG4pOiBFbnRpdHlGZWF0dXJlRmFjdG9yeTxcbiAgRW50aXR5TmFtZSxcbiAgRW50aXRpZXNOYW1lLFxuICBFeHRyYWN0U3RhdGVUeXBlPEY+LFxuICBFeHRyYWN0QWN0aW9uc1R5cGU8Rj4sXG4gIEV4dHJhY3RTZWxlY3RvcnNUeXBlPEY+XG4+IHtcbiAgcmV0dXJuICgoY29uZmlnOiBDb25maWc8YW55LCBhbnk+KSA9PiB7XG4gICAgY29uc3QgeyBlbnRpdHlOYW1lLCBlbnRpdGllc05hbWUgfSA9XG4gICAgICAnZW50aXR5TmFtZScgaW4gbmFtZXNPckZhY3RvcnlcbiAgICAgICAgPyAobmFtZXNPckZhY3RvcnkgYXMge1xuICAgICAgICAgICAgZW50aXR5TmFtZTogRW50aXR5TmFtZTtcbiAgICAgICAgICAgIGVudGl0aWVzTmFtZT86IEVudGl0aWVzTmFtZTtcbiAgICAgICAgICB9KVxuICAgICAgICA6IHsgZW50aXR5TmFtZTogJ0VudGl0eScsIGVudGl0aWVzTmFtZTogJ0VudGl0aWVzJyB9O1xuXG4gICAgY29uc3Qgc2luZ3VsYXIgPSBjYXBpdGFsaXplKGVudGl0eU5hbWUpO1xuICAgIGNvbnN0IHBsdXJhbCA9IGVudGl0aWVzTmFtZVxuICAgICAgPyBjYXBpdGFsaXplKGVudGl0aWVzTmFtZSlcbiAgICAgIDogY2FwaXRhbGl6ZShlbnRpdHlOYW1lICsgJ3MnKTtcblxuICAgIGNvbnN0IHNvcnRlZFRyYWl0cyA9IHNvcnRUcmFpdHMoXG4gICAgICAnZW50aXR5TmFtZScgaW4gbmFtZXNPckZhY3RvcnkgPyBbLi4udHJhaXRzXSA6IFtuYW1lc09yRmFjdG9yeSwgLi4udHJhaXRzXVxuICAgICk7XG5cbiAgICBjb25zdCBhbGxDb25maWdzID0gYnVpbGRBbGxDb25maWdzKHNvcnRlZFRyYWl0cyk7XG5cbiAgICBjb25zdCBhbGxBY3Rpb25zID0gYnVpbGRBbGxBY3Rpb25zKFxuICAgICAgc29ydGVkVHJhaXRzLFxuICAgICAgY29uZmlnLmFjdGlvbnNHcm91cEtleSxcbiAgICAgIHNpbmd1bGFyLFxuICAgICAgcGx1cmFsLFxuICAgICAgYWxsQ29uZmlnc1xuICAgICk7XG5cbiAgICBjb25zdCBhbGxTZWxlY3RvcnMgPSBidWlsZEFsbFNlbGVjdG9ycyhzb3J0ZWRUcmFpdHMsIGFsbENvbmZpZ3MpO1xuXG4gICAgY29uc3QgYWxsTXV0YXRvcnMgPSBidWlsZEFsbE11dGF0b3JzKFxuICAgICAgc29ydGVkVHJhaXRzLFxuICAgICAgYWxsU2VsZWN0b3JzLFxuICAgICAgYWxsQ29uZmlnc1xuICAgICk7XG5cbiAgICBjb25zdCBpbml0aWFsU3RhdGUgPSBidWlsZEluaXRpYWxTdGF0ZShzb3J0ZWRUcmFpdHMsIGFsbENvbmZpZ3MpO1xuXG4gICAgY29uc3QgcmVkdWNlciA9IGJ1aWxkUmVkdWNlcihcbiAgICAgIHNvcnRlZFRyYWl0cyxcbiAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgIGFsbEFjdGlvbnMsXG4gICAgICBhbGxTZWxlY3RvcnMsXG4gICAgICBhbGxNdXRhdG9ycyxcbiAgICAgIGFsbENvbmZpZ3NcbiAgICApO1xuXG4gICAgY29uc3QgZmVhdHVyZVNlbGVjdG9yID1cbiAgICAgIHR5cGVvZiBjb25maWcuZmVhdHVyZVNlbGVjdG9yID09PSAnc3RyaW5nJ1xuICAgICAgICA/IGNyZWF0ZUZlYXR1cmVTZWxlY3RvcjxFeHRyYWN0U3RhdGVUeXBlPEY+Pihjb25maWcuZmVhdHVyZVNlbGVjdG9yKVxuICAgICAgICA6IGNvbmZpZy5mZWF0dXJlU2VsZWN0b3I7XG5cbiAgICBjb25zdCBhbGxGZWF0dXJlU2VsZWN0b3JzID1cbiAgICAgIGFsbFNlbGVjdG9ycyAmJiBnZXRTZWxlY3RvcnNGb3JGZWF0dXJlKGZlYXR1cmVTZWxlY3RvciwgYWxsU2VsZWN0b3JzKTtcblxuICAgIGNvbnN0IGFsbEVmZmVjdHMgPSBidWlsZEFsbEVmZmVjdHMoXG4gICAgICBzb3J0ZWRUcmFpdHMsXG4gICAgICBhbGxBY3Rpb25zLFxuICAgICAgYWxsRmVhdHVyZVNlbGVjdG9ycyxcbiAgICAgIGFsbENvbmZpZ3NcbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGlvbnM6IGVudGl0eU5hbWVcbiAgICAgICAgPyByZW5hbWVQcm9wcyhhbGxBY3Rpb25zLCBzaW5ndWxhciwgcGx1cmFsKVxuICAgICAgICA6IGFsbEFjdGlvbnMsXG4gICAgICBzZWxlY3RvcnM6IGVudGl0eU5hbWVcbiAgICAgICAgPyByZW5hbWVQcm9wcyhhbGxGZWF0dXJlU2VsZWN0b3JzLCBzaW5ndWxhciwgcGx1cmFsKVxuICAgICAgICA6IGFsbFNlbGVjdG9ycyxcbiAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgIHJlZHVjZXI6IHJlZHVjZXIgPz8gY3JlYXRlUmVkdWNlcihpbml0aWFsU3RhdGUpLFxuICAgICAgZWZmZWN0czogYWxsRWZmZWN0cyxcbiAgICB9O1xuICB9KSBhcyBFbnRpdHlGZWF0dXJlRmFjdG9yeTxcbiAgICBFbnRpdHlOYW1lLFxuICAgIEVudGl0aWVzTmFtZSxcbiAgICBFeHRyYWN0U3RhdGVUeXBlPEY+LFxuICAgIEV4dHJhY3RBY3Rpb25zVHlwZTxGPixcbiAgICBFeHRyYWN0U2VsZWN0b3JzVHlwZTxGPlxuICA+O1xufVxuXG5mdW5jdGlvbiByZW5hbWVQcm9wcyh0YXJnZXQ6IGFueSwgZW50aXR5TmFtZTogc3RyaW5nLCBlbnRpdGllc05hbWU6IHN0cmluZykge1xuICBjb25zdCByZXN1bHQgPSB7fSBhcyBhbnk7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRhcmdldCkpIHtcbiAgICBjb25zdCBuZXdLZXkgPSBrZXlcbiAgICAgIC5yZXBsYWNlKCdFbnRpdGllcycsIGVudGl0aWVzTmFtZSlcbiAgICAgIC5yZXBsYWNlKCdFbnRpdHknLCBlbnRpdHlOYW1lKTtcbiAgICByZXN1bHRbbmV3S2V5XSA9IHZhbHVlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIHNvcnRUcmFpdHMoXG4gIHRyYWl0czogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXVxuKTogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXSB7XG4gIGNvbnN0IHNvcnRlZFRyYWl0czogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRyYWl0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHRyYWl0ID0gdHJhaXRzW2ldO1xuICAgIGlmICghdHJhaXQuZGVwZW5kcz8ubGVuZ3RoKSB7XG4gICAgICBzb3J0ZWRUcmFpdHMucHVzaCh0cmFpdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHRyYWl0LmRlcGVuZHMubGVuZ3RoID4gMSlcbiAgICAgIGZvciAoY29uc3QgZCBvZiB0cmFpdC5kZXBlbmRzKSB7XG4gICAgICAgIGNvbnN0IGlzVHJhaXRQcmVzZW50ID0gdHJhaXRzLnNvbWUoKHRyKSA9PiB0ci5rZXkgPT09IGQpO1xuICAgICAgICBpZiAoaXNUcmFpdFByZXNlbnQpIHtcbiAgICAgICAgICB0cmFpdC5kZXBlbmRzID0gW2RdO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgaWYgKHRyYWl0LmRlcGVuZHMubGVuZ3RoID4gMSlcbiAgICAgIHRocm93IEVycm9yKCdjb3VsZCBub3QgZmluZCBkZXBlbmRlbmNpZXMgJyArIHRyYWl0LmRlcGVuZHMuam9pbignICcpKTtcbiAgICBjb25zdCBpc0RlcGVuZGVuY3lBbHJlYWR5QWRkZWQgPSBzb3J0ZWRUcmFpdHMuc29tZShcbiAgICAgICh0cikgPT4gdHIua2V5ID09PSB0cmFpdD8uZGVwZW5kcz8uWzBdXG4gICAgKTtcblxuICAgIGlmIChpc0RlcGVuZGVuY3lBbHJlYWR5QWRkZWQpIHNvcnRlZFRyYWl0cy5wdXNoKHRyYWl0KTtcbiAgICBlbHNlIHtcbiAgICAgIC8vIG1vdmUgdHJhaXQgdG8gdGhlIGVuZFxuICAgICAgZGVsZXRlIHRyYWl0c1tpXTtcbiAgICAgIHRyYWl0cy5wdXNoKHRyYWl0KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNvcnRlZFRyYWl0cztcbn1cblxuZnVuY3Rpb24gYnVpbGRBbGxDb25maWdzKHNvcnRlZFRyYWl0czogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXSkge1xuICByZXR1cm4gc29ydGVkVHJhaXRzLnJlZHVjZSgoYWNjOiBLZXllZENvbmZpZzxzdHJpbmcsIGFueT4sIGZhY3RvcnkpID0+IHtcbiAgICBhY2NbZmFjdG9yeS5rZXldID0gZmFjdG9yeS5jb25maWc7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFsbEFjdGlvbnMoXG4gIHNvcnRlZFRyYWl0czogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXSxcbiAgYWN0aW9uc0dyb3VwS2V5OiBzdHJpbmcsXG4gIGVudGl0eU5hbWU6IHN0cmluZyxcbiAgZW50aXRpZXNOYW1lOiBzdHJpbmcsXG4gIGFsbENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIGFueT4gJiB7IFtwOiBzdHJpbmddOiBhbnkgfVxuKSB7XG4gIHJldHVybiBzb3J0ZWRUcmFpdHMucmVkdWNlKChwcmV2aW91c1Jlc3VsdDogVHJhaXRBY3Rpb25zLCBmYWN0b3J5KSA9PiB7XG4gICAgbGV0IHJlc3VsdCA9XG4gICAgICBmYWN0b3J5Py5hY3Rpb25zPy4oe1xuICAgICAgICBhY3Rpb25zR3JvdXBLZXk6IGFjdGlvbnNHcm91cEtleSxcbiAgICAgICAgZW50aXR5TmFtZSxcbiAgICAgICAgZW50aXRpZXNOYW1lLFxuICAgICAgICBhbGxDb25maWdzLFxuICAgICAgfSkgPz8ge307XG4gICAgcmVzdWx0ID0gcHJldmlvdXNSZXN1bHQgPyB7IC4uLnByZXZpb3VzUmVzdWx0LCAuLi5yZXN1bHQgfSA6IHJlc3VsdDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQWxsU2VsZWN0b3JzKFxuICBzb3J0ZWRUcmFpdHM6IFRyYWl0RmFjdG9yeTxhbnksIGFueSwgYW55LCBhbnk+W10sXG4gIGFsbENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIGFueT4gJiB7IFtwOiBzdHJpbmddOiBhbnkgfVxuKSB7XG4gIHJldHVybiBzb3J0ZWRUcmFpdHMucmVkdWNlKChwcmV2aW91c1Jlc3VsdDogVHJhaXRTZWxlY3RvcnM8YW55PiwgZmFjdG9yeSkgPT4ge1xuICAgIGxldCByZXN1bHQgPVxuICAgICAgZmFjdG9yeT8uc2VsZWN0b3JzPy4oe1xuICAgICAgICBwcmV2aW91c1NlbGVjdG9yczogcHJldmlvdXNSZXN1bHQsXG4gICAgICAgIGFsbENvbmZpZ3MsXG4gICAgICB9KSA/PyB7fTtcbiAgICByZXN1bHQgPSBwcmV2aW91c1Jlc3VsdCA/IHsgLi4ucHJldmlvdXNSZXN1bHQsIC4uLnJlc3VsdCB9IDogcmVzdWx0O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBbGxNdXRhdG9ycyhcbiAgc29ydGVkVHJhaXRzOiBUcmFpdEZhY3Rvcnk8YW55LCBhbnksIGFueSwgYW55PltdLFxuICBhbGxTZWxlY3RvcnM6IFRyYWl0U2VsZWN0b3JzPGFueT4sXG4gIGFsbENvbmZpZ3M6IFJlY29yZDxzdHJpbmcsIGFueT4gJiB7IFtwOiBzdHJpbmddOiBhbnkgfVxuKSB7XG4gIHJldHVybiAoXG4gICAgc29ydGVkVHJhaXRzLnJlZHVjZShcbiAgICAgIChwcmV2aW91c1Jlc3VsdDogVHJhaXRTdGF0ZU11dGF0b3JzPGFueT4gfCB1bmRlZmluZWQsIGZhY3RvcnkpID0+IHtcbiAgICAgICAgbGV0IHJlc3VsdCA9XG4gICAgICAgICAgZmFjdG9yeT8ubXV0YXRvcnM/Lih7XG4gICAgICAgICAgICBhbGxTZWxlY3RvcnM6IGFsbFNlbGVjdG9ycyxcbiAgICAgICAgICAgIHByZXZpb3VzTXV0YXRvcnM6IHByZXZpb3VzUmVzdWx0LFxuICAgICAgICAgICAgYWxsQ29uZmlncyxcbiAgICAgICAgICB9KSA/PyB7fTtcbiAgICAgICAgcmVzdWx0ID0gcHJldmlvdXNSZXN1bHQgPyB7IC4uLnByZXZpb3VzUmVzdWx0LCAuLi5yZXN1bHQgfSA6IHJlc3VsdDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0sXG4gICAgICB7fVxuICAgICkgfHwge31cbiAgKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRJbml0aWFsU3RhdGUoXG4gIHNvcnRlZFRyYWl0czogVHJhaXRGYWN0b3J5PGFueSwgYW55LCBhbnksIGFueT5bXSxcbiAgYWxsQ29uZmlnczogUmVjb3JkPHN0cmluZywgYW55PiAmIHsgW3A6IHN0cmluZ106IGFueSB9XG4pIHtcbiAgcmV0dXJuIHNvcnRlZFRyYWl0cy5yZWR1Y2UoKHByZXZpb3VzUmVzdWx0OiBhbnksIGZhY3RvcnkpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPVxuICAgICAgZmFjdG9yeT8uaW5pdGlhbFN0YXRlPy4oe1xuICAgICAgICBwcmV2aW91c0luaXRpYWxTdGF0ZTogcHJldmlvdXNSZXN1bHQsXG4gICAgICAgIGFsbENvbmZpZ3MsXG4gICAgICB9KSA/P1xuICAgICAgcHJldmlvdXNSZXN1bHQgPz9cbiAgICAgIHt9O1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH0sIHt9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRSZWR1Y2VyKFxuICBzb3J0ZWRUcmFpdHM6IFRyYWl0RmFjdG9yeTxhbnksIGFueSwgYW55LCBhbnk+W10sXG4gIGluaXRpYWxTdGF0ZTogYW55LFxuICBhbGxBY3Rpb25zOiBUcmFpdEFjdGlvbnMsXG4gIGFsbFNlbGVjdG9yczogVHJhaXRTZWxlY3RvcnM8YW55PixcbiAgYWxsTXV0YXRvcnM6IFRyYWl0U3RhdGVNdXRhdG9yczxhbnk+LFxuICBhbGxDb25maWdzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ICYgeyBbcDogc3RyaW5nXTogYW55IH1cbikge1xuICByZXR1cm4gc29ydGVkVHJhaXRzLnJlZHVjZShcbiAgICAoXG4gICAgICBwcmV2aW91c1Jlc3VsdDogKChzdGF0ZTogYW55LCBhY3Rpb246IEFjdGlvbikgPT4gYW55KSB8IHVuZGVmaW5lZCxcbiAgICAgIGZhY3RvcnlcbiAgICApID0+IHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGZhY3Rvcnk/LnJlZHVjZXI/Lih7XG4gICAgICAgIGluaXRpYWxTdGF0ZSxcbiAgICAgICAgYWxsQWN0aW9ucyxcbiAgICAgICAgYWxsU2VsZWN0b3JzLFxuICAgICAgICBhbGxNdXRhdG9ycyxcbiAgICAgICAgYWxsQ29uZmlncyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdCAmJiBwcmV2aW91c1Jlc3VsdFxuICAgICAgICA/IChzdGF0ZSA9IGluaXRpYWxTdGF0ZSwgYWN0aW9uKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhU3RhdGUgPSBwcmV2aW91c1Jlc3VsdChzdGF0ZSwgYWN0aW9uKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQoYVN0YXRlLCBhY3Rpb24pO1xuICAgICAgICAgIH1cbiAgICAgICAgOiByZXN1bHQgPz8gcHJldmlvdXNSZXN1bHQ7XG4gICAgfSxcbiAgICB1bmRlZmluZWRcbiAgKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBbGxFZmZlY3RzKFxuICBzb3J0ZWRUcmFpdHM6IFRyYWl0RmFjdG9yeTxhbnksIGFueSwgYW55LCBhbnk+W10sXG4gIGFsbEFjdGlvbnM6IFRyYWl0QWN0aW9ucyxcbiAgYWxsRmVhdHVyZVNlbGVjdG9yczogVHJhaXRTZWxlY3RvcnM8YW55PixcbiAgYWxsQ29uZmlnczogUmVjb3JkPHN0cmluZywgYW55PiAmIHsgW3A6IHN0cmluZ106IGFueSB9XG4pIHtcbiAgcmV0dXJuIHNvcnRlZFRyYWl0cy5yZWR1Y2UoXG4gICAgKHByZXZpb3VzUmVzdWx0OiBUeXBlPFRyYWl0RWZmZWN0PltdIHwgdW5kZWZpbmVkLCBmYWN0b3J5KSA9PiB7XG4gICAgICBsZXQgcmVzdWx0ID1cbiAgICAgICAgZmFjdG9yeT8uZWZmZWN0cz8uKHtcbiAgICAgICAgICBhbGxBY3Rpb25zLFxuICAgICAgICAgIGFsbFNlbGVjdG9yczogYWxsRmVhdHVyZVNlbGVjdG9ycyxcbiAgICAgICAgICBhbGxDb25maWdzLFxuICAgICAgICB9KSA/PyBbXTtcbiAgICAgIHJlc3VsdCA9IHByZXZpb3VzUmVzdWx0ID8gWy4uLnByZXZpb3VzUmVzdWx0LCAuLi5yZXN1bHRdIDogcmVzdWx0O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIFtdXG4gICk7XG59XG5cbmZ1bmN0aW9uIGdldFNlbGVjdG9yc0ZvckZlYXR1cmU8XG4gIFN0YXRlLFxuICBTIGV4dGVuZHMgVHJhaXRTZWxlY3RvcnM8U3RhdGU+LFxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuICBGIGV4dGVuZHMgTWVtb2l6ZWRTZWxlY3RvcjxvYmplY3QsIGFueT5cbj4oZmVhdHVyZVNlbGVjdDogRiwgc2VsZWN0b3JzOiBTKTogRmVhdHVyZVNlbGVjdG9yczxTdGF0ZSwgUz4ge1xuICBjb25zdCBzczogeyBba2V5IGluIGtleW9mIFNdPzogYW55IH0gPSB7fTtcbiAgZm9yIChjb25zdCBwcm9wIGluIHNlbGVjdG9ycykge1xuICAgIHNzW3Byb3BdID0gY3JlYXRlU2VsZWN0b3IoZmVhdHVyZVNlbGVjdCBhcyBhbnksIHNlbGVjdG9yc1twcm9wXSBhcyBhbnkpO1xuICB9XG4gIHJldHVybiBzcyBhcyBGZWF0dXJlU2VsZWN0b3JzPFN0YXRlLCBTPjtcbn1cblxuLyoqXG4gKiBDb21iaW5lIGEgbWFwIGVudGl0eUZlYXR1cmVGYWN0b3JpZXMgaW50byBvbmUsXG4gKiBncm91cGluZyB0aGUgYWN0aW9ucyBhbmQgc2VsZWN0b3JzIGJ5IHRoZSBrZXkgb2YgdGhlIHJlc3BlY3RpdmUgZW50aXR5RmVhdHVyZUZhY3RvcnlcbiAqIEBwYXJhbSB0cmFpdEZhY3Rvcmllc01hcFxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogY29uc3QgY2xpZW50c0ZlYXR1cmVGYWN0b3J5ID0gY3JlYXRlRW50aXR5RmVhdHVyZUZhY3RvcnkoXG4gKiAgIHsgZW50aXR5TmFtZTogJ2NsaWVudCcsIGVudGl0aWVzTmFtZTogJ2NsaWVudHMnIH0sXG4gKiAgIGFkZExvYWRFbnRpdGllc1RyYWl0PENsaWVudD4oKSxcbiAqICAgYWRkQ3J1ZEVudGl0aWVzVHJhaXQ8Q2xpZW50PigpXG4gKiApO1xuICpcbiAqIGNvbnN0IHByb2R1Y3RPcmRlckZlYXR1cmVGYWN0b3J5ID0gY3JlYXRlRW50aXR5RmVhdHVyZUZhY3RvcnkoXG4gKiAgIHsgZW50aXR5TmFtZTogJ3Byb2R1Y3RPcmRlcicgfSxcbiAqICAgYWRkTG9hZEVudGl0aWVzVHJhaXQ8UHJvZHVjdE9yZGVyPigpLFxuICogICBhZGRTZWxlY3RFbnRpdGllc1RyYWl0PFByb2R1Y3RPcmRlcj4oKVxuICogKTtcbiAqXG4gKiBjb25zdCBwcm9kdWN0RmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAncHJvZHVjdCcgfSxcbiAqICAgYWRkTG9hZEVudGl0aWVzVHJhaXQ8UHJvZHVjdD4oKSxcbiAqICAgYWRkU2VsZWN0RW50aXRpZXNUcmFpdDxQcm9kdWN0PigpXG4gKiApO1xuICpcbiAqIGNvbnN0IHByb2R1Y3RDb21iaW5lZEZhY3RvcnkgPSBjb21iaW5lRW50aXR5RmVhdHVyZXMoe1xuICogICBwcm9kdWN0czogcHJvZHVjdEZlYXR1cmVGYWN0b3J5LFxuICogICBwcm9kdWN0T3JkZXJzOiBwcm9kdWN0T3JkZXJGZWF0dXJlRmFjdG9yeSxcbiAqICAgY2xpZW50czogY2xpZW50c0ZlYXR1cmVGYWN0b3J5LFxuICogfSk7XG4gKlxuICogY29uc3QgY29tYmluZWRGZWF0dXJlID0gcHJvZHVjdENvbWJpbmVkRmFjdG9yeSh7XG4gKiAgICAgYWN0aW9uc0dyb3VwS2V5OiAnW0NvbWJpbmVkXScsXG4gKiAgICAgZmVhdHVyZVNlbGVjdG9yOiAnY29tYmluZWQnLFxuICogICB9KTtcbiAqXG4gKiAgIGNvbWJpbmVkRmVhdHVyZS5hY3Rpb25zLmNsaWVudC5sb2FkQ2xpZW50cygpO1xuICogICBjb21iaW5lZEZlYXR1cmUuYWN0aW9ucy5wcm9kdWN0LmxvYWRQcm9kdWN0cygpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZUVudGl0eUZlYXR1cmVzPFxuICBUIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBFbnRpdHlGZWF0dXJlRmFjdG9yeTxhbnksIGFueT4gfSxcbiAgSyBleHRlbmRzIGtleW9mIFQsXG4gIFN0YXRlIGV4dGVuZHMgeyBbUCBpbiBLXTogRXh0cmFjdFN0YXRlVHlwZTxSZXR1cm5UeXBlPFRbUF0+PiB9LFxuICBBIGV4dGVuZHMgeyBbUCBpbiBLXTogRXh0cmFjdEFjdGlvbnNUeXBlPFJldHVyblR5cGU8VFtQXT4+IH0sXG4gIFMgZXh0ZW5kcyB7XG4gICAgW1AgaW4gS106IEZlYXR1cmVTZWxlY3RvcnM8U3RhdGUsIEV4dHJhY3RTZWxlY3RvcnNUeXBlPFJldHVyblR5cGU8VFtQXT4+PjtcbiAgfSxcbiAgUiBleHRlbmRzIChjb25maWc6IENvbmZpZzxTdGF0ZT4pID0+IHtcbiAgICBhY3Rpb25zOiBBO1xuICAgIHNlbGVjdG9yczogUztcbiAgICByZWR1Y2VyOiAoc3RhdGU6IFN0YXRlLCBhY3Rpb246IEFjdGlvblR5cGU8YW55PikgPT4gU3RhdGU7XG4gICAgZWZmZWN0czogVHlwZTxhbnk+W107XG4gICAgaW5pdGlhbFN0YXRlOiBTdGF0ZTtcbiAgfVxuPih0cmFpdEZhY3Rvcmllc01hcDogVCk6IFIge1xuICByZXR1cm4gKChjb25maWc6IENvbmZpZzxhbnksIGFueT4pID0+IHtcbiAgICBjb25zdCBmZWF0dXJlU2VsZWN0b3IgPVxuICAgICAgdHlwZW9mIGNvbmZpZy5mZWF0dXJlU2VsZWN0b3IgPT09ICdzdHJpbmcnXG4gICAgICAgID8gY3JlYXRlRmVhdHVyZVNlbGVjdG9yPGFueT4oY29uZmlnLmZlYXR1cmVTZWxlY3RvcilcbiAgICAgICAgOiBjb25maWcuZmVhdHVyZVNlbGVjdG9yO1xuICAgIGNvbnN0IGFjdGlvbnM6IGFueSA9IHt9O1xuICAgIGNvbnN0IHNlbGVjdG9yczogYW55ID0ge307XG4gICAgY29uc3QgcmVkdWNlcnM6IGFueSA9IHt9O1xuICAgIGxldCBlZmZlY3RzOiBUeXBlPGFueT5bXSA9IFtdO1xuICAgIGZvciAoY29uc3QgW2tleSwgZW50aXR5RmVhdHVyZUZhY3RvcnldIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgdHJhaXRGYWN0b3JpZXNNYXBcbiAgICApKSB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IGNyZWF0ZVNlbGVjdG9yKFxuICAgICAgICBmZWF0dXJlU2VsZWN0b3IsXG4gICAgICAgIChzdGF0ZTogYW55KSA9PiBzdGF0ZVtrZXldXG4gICAgICApO1xuICAgICAgY29uc3QgZmVhdHVyZVRyYWl0cyA9IGVudGl0eUZlYXR1cmVGYWN0b3J5KHtcbiAgICAgICAgYWN0aW9uc0dyb3VwS2V5OiBjb25maWcuYWN0aW9uc0dyb3VwS2V5LFxuICAgICAgICBmZWF0dXJlU2VsZWN0b3I6IHNlbGVjdG9yLFxuICAgICAgfSk7XG4gICAgICBhY3Rpb25zW2tleV0gPSBmZWF0dXJlVHJhaXRzLmFjdGlvbnM7XG4gICAgICBzZWxlY3RvcnNba2V5XSA9IGZlYXR1cmVUcmFpdHMuc2VsZWN0b3JzO1xuICAgICAgcmVkdWNlcnNba2V5XSA9IGZlYXR1cmVUcmFpdHMucmVkdWNlcjtcbiAgICAgIGVmZmVjdHMgPSBbLi4uZWZmZWN0cywgLi4uZmVhdHVyZVRyYWl0cy5lZmZlY3RzXTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGFjdGlvbnMsXG4gICAgICBzZWxlY3RvcnMsXG4gICAgICByZWR1Y2VyOiBjb21iaW5lUmVkdWNlcnMocmVkdWNlcnMpLFxuICAgICAgZWZmZWN0cyxcbiAgICB9O1xuICB9KSBhcyBSO1xufVxuXG4vKipcbiAqIE1peCBhIG1hcCBlbnRpdHlGZWF0dXJlRmFjdG9yaWVzIGludG8gb25lLCBkaWZmZXJlbnQgZnJvbSBjb21iaW5lIHRoZSBhY3Rpb25zIGFuZCBzZWxlY3RvcnMgYSBtaXgsIG5vdCBncm91cCBieSBrZXkgbGlrZSBpbiBjb21iaW5lLCB0aGUga2V5cyBhcmUgc3RpbGwgdXNlXG4gKiBpbnRlcm5hbCBpbiB0aGUgcmVkdWNlcnMgYW5kIHNlbGVjdG9yIHRvIHNlcGFyYXRlIHRoZSBzdGF0ZVxuICogQHBhcmFtIHRyYWl0RmFjdG9yaWVzTWFwXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjb25zdCBjbGllbnRzRmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAnY2xpZW50JywgZW50aXRpZXNOYW1lOiAnY2xpZW50cycgfSxcbiAqICAgYWRkTG9hZEVudGl0aWVzVHJhaXQ8Q2xpZW50PigpLFxuICogICBhZGRDcnVkRW50aXRpZXNUcmFpdDxDbGllbnQ+KClcbiAqICk7XG4gKlxuICogY29uc3QgcHJvZHVjdE9yZGVyRmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAncHJvZHVjdE9yZGVyJyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxQcm9kdWN0T3JkZXI+KCksXG4gKiAgIGFkZFNlbGVjdEVudGl0aWVzVHJhaXQ8UHJvZHVjdE9yZGVyPigpXG4gKiApO1xuICpcbiAqIGNvbnN0IHByb2R1Y3RGZWF0dXJlRmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5KFxuICogICB7IGVudGl0eU5hbWU6ICdwcm9kdWN0JyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxQcm9kdWN0PigpLFxuICogICBhZGRTZWxlY3RFbnRpdGllc1RyYWl0PFByb2R1Y3Q+KClcbiAqICk7XG4gKlxuICogY29uc3QgcHJvZHVjdE1peGVkRmFjdG9yeSA9IG1peEVudGl0eUZlYXR1cmVzKHtcbiAqICAgcHJvZHVjdHM6IHByb2R1Y3RGZWF0dXJlRmFjdG9yeSxcbiAqICAgcHJvZHVjdE9yZGVyczogcHJvZHVjdE9yZGVyRmVhdHVyZUZhY3RvcnksXG4gKiAgIGNsaWVudHM6IGNsaWVudHNGZWF0dXJlRmFjdG9yeSxcbiAqIH0pO1xuICpcbiAqIGNvbnN0IG1peGVkRmVhdHVyZSA9IHByb2R1Y3RNaXhlZEZhY3Rvcnkoe1xuICogICAgIGFjdGlvbnNHcm91cEtleTogJ1tNaXhlZF0nLFxuICogICAgIGZlYXR1cmVTZWxlY3RvcjogJ21peGVkJyxcbiAqICAgfSk7XG4gKiBtaXhlZEZlYXR1cmUuYWN0aW9ucy5sb2FkQ2xpZW50cygpO1xuICogbWl4ZWRGZWF0dXJlLmFjdGlvbnMubG9hZFByb2R1Y3RzKCk7XG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWl4RW50aXR5RmVhdHVyZXM8XG4gIFQgZXh0ZW5kcyB7IFtrZXk6IHN0cmluZ106IEVudGl0eUZlYXR1cmVGYWN0b3J5PGFueSwgYW55PiB9LFxuICBLIGV4dGVuZHMga2V5b2YgVCxcbiAgU3RhdGUgZXh0ZW5kcyB7IFtQIGluIEtdOiBFeHRyYWN0U3RhdGVUeXBlPFJldHVyblR5cGU8VFtQXT4+IH0sXG4gIEEgZXh0ZW5kcyBUcmFpdEFjdGlvbnMgJlxuICAgIFVuaW9uVG9JbnRlcnNlY3Rpb248RXh0cmFjdEFjdGlvbnNUeXBlPFJldHVyblR5cGU8VFtLXT4+PixcbiAgUyBleHRlbmRzIFRyYWl0U2VsZWN0b3JzPGFueT4gJlxuICAgIFVuaW9uVG9JbnRlcnNlY3Rpb248XG4gICAgICBGZWF0dXJlU2VsZWN0b3JzPFN0YXRlLCBFeHRyYWN0U2VsZWN0b3JzVHlwZTxSZXR1cm5UeXBlPFRbS10+Pj5cbiAgICA+LFxuICBSIGV4dGVuZHMgRW50aXR5RmVhdHVyZUZhY3Rvcnk8YW55LCBhbnksIFN0YXRlLCBBLCBTPlxuPih0cmFpdEZhY3Rvcmllc01hcDogVCk6IFIge1xuICByZXR1cm4gKChjb25maWc6IENvbmZpZzxhbnksIGFueT4pID0+IHtcbiAgICBjb25zdCBmZWF0dXJlU2VsZWN0b3IgPVxuICAgICAgdHlwZW9mIGNvbmZpZy5mZWF0dXJlU2VsZWN0b3IgPT09ICdzdHJpbmcnXG4gICAgICAgID8gY3JlYXRlRmVhdHVyZVNlbGVjdG9yPGFueT4oY29uZmlnLmZlYXR1cmVTZWxlY3RvcilcbiAgICAgICAgOiBjb25maWcuZmVhdHVyZVNlbGVjdG9yO1xuICAgIGxldCBhY3Rpb25zOiBhbnkgPSB7fTtcbiAgICBsZXQgc2VsZWN0b3JzOiBhbnkgPSB7fTtcbiAgICBjb25zdCByZWR1Y2VyczogYW55ID0ge307XG4gICAgbGV0IGVmZmVjdHM6IFR5cGU8YW55PltdID0gW107XG4gICAgZm9yIChjb25zdCBba2V5LCBlbnRpdHlGZWF0dXJlRmFjdG9yeV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICB0cmFpdEZhY3Rvcmllc01hcFxuICAgICkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAgIGZlYXR1cmVTZWxlY3RvcixcbiAgICAgICAgKHN0YXRlOiBhbnkpID0+IHN0YXRlW2tleV1cbiAgICAgICk7XG4gICAgICBjb25zdCBmZWF0dXJlVHJhaXRzID0gZW50aXR5RmVhdHVyZUZhY3Rvcnkoe1xuICAgICAgICBhY3Rpb25zR3JvdXBLZXk6IGNvbmZpZy5hY3Rpb25zR3JvdXBLZXksXG4gICAgICAgIGZlYXR1cmVTZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICB9KTtcbiAgICAgIGFjdGlvbnMgPSB7IC4uLmFjdGlvbnMsIC4uLmZlYXR1cmVUcmFpdHMuYWN0aW9ucyB9O1xuICAgICAgc2VsZWN0b3JzID0geyAuLi5zZWxlY3RvcnMsIC4uLmZlYXR1cmVUcmFpdHMuc2VsZWN0b3JzIH07XG4gICAgICByZWR1Y2Vyc1trZXldID0gZmVhdHVyZVRyYWl0cy5yZWR1Y2VyO1xuICAgICAgZWZmZWN0cyA9IFsuLi5lZmZlY3RzLCAuLi5mZWF0dXJlVHJhaXRzLmVmZmVjdHNdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aW9ucyxcbiAgICAgIHNlbGVjdG9ycyxcbiAgICAgIHJlZHVjZXI6IGNvbWJpbmVSZWR1Y2VycyhyZWR1Y2VycyksXG4gICAgICBlZmZlY3RzLFxuICAgIH07XG4gIH0pIGFzIFI7XG59XG5cbi8qKlxuICogQ29tYmluZXMgdGFyZ2V0VHJhaXRGYWN0b3J5IHdpdGggdGhlIHRyYWl0RmFjdG9yaWVzTWFwIHVzaW5nIHRoZSBrZXlzIGFzIHByb3BzIGZvciB0aGUgdGFyZ2V0VHJhaXRGYWN0b3J5IHN0YXRlLFxuICogYW5kIGdyb3VwaW5nIHRoZSBjb21iaW5lZCBhY3Rpb25zIGJ5IGtleVxuICogQHBhcmFtIHRhcmdldFRyYWl0RmFjdG9yeVxuICogQHBhcmFtIHRyYWl0RmFjdG9yaWVzTWFwXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBjb25zdCBjbGllbnRzRmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAnY2xpZW50JywgZW50aXRpZXNOYW1lOiAnY2xpZW50cycgfSxcbiAqICAgYWRkTG9hZEVudGl0aWVzVHJhaXQ8Q2xpZW50PigpLFxuICogICBhZGRDcnVkRW50aXRpZXNUcmFpdDxDbGllbnQ+KClcbiAqICk7XG4gKlxuICogY29uc3QgcHJvZHVjdE9yZGVyRmVhdHVyZUZhY3RvcnkgPSBjcmVhdGVFbnRpdHlGZWF0dXJlRmFjdG9yeShcbiAqICAgeyBlbnRpdHlOYW1lOiAncHJvZHVjdE9yZGVyJyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxQcm9kdWN0T3JkZXI+KCksXG4gKiAgIGFkZFNlbGVjdEVudGl0aWVzVHJhaXQ8UHJvZHVjdE9yZGVyPigpXG4gKiApO1xuICpcbiAqIGNvbnN0IHByb2R1Y3RGZWF0dXJlRmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5KFxuICogICB7IGVudGl0eU5hbWU6ICdwcm9kdWN0JyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxQcm9kdWN0PigpLFxuICogICBhZGRTZWxlY3RFbnRpdGllc1RyYWl0PFByb2R1Y3Q+KClcbiAqICk7XG4gKlxuICogY29uc3QgcHJvZHVjdEFkZEVudGl0eVByb3BlcnRpZXNGYWN0b3J5ID0gYWRkRW50aXR5RmVhdHVyZXNQcm9wZXJ0aWVzKFxuICogICBwcm9kdWN0RmVhdHVyZUZhY3RvcnksXG4gKiAgIHtcbiAqICAgICBwcm9kdWN0T3JkZXJzOiBwcm9kdWN0T3JkZXJGZWF0dXJlRmFjdG9yeSxcbiAqICAgICBjbGllbnRzOiBjbGllbnRzRmVhdHVyZUZhY3RvcnksXG4gKiAgIH1cbiAqICk7XG4gKlxuICogY29uc3QgY29tYmluZWRGZWF0dXJlID0gcHJvZHVjdEFkZEVudGl0eVByb3BlcnRpZXNGYWN0b3J5KHtcbiAqICAgICBhY3Rpb25zR3JvdXBLZXk6ICdbYWRkRW50aXR5RmVhdHVyZXNdJyxcbiAqICAgICBmZWF0dXJlU2VsZWN0b3I6ICdhZGRFbnRpdHlGZWF0dXJlcycsXG4gKiAgIH0pO1xuICpcbiAqICAgY29tYmluZWRGZWF0dXJlLmFjdGlvbnMubG9hZFByb2R1Y3RzKCk7XG4gKiAgIGNvbWJpbmVkRmVhdHVyZS5hY3Rpb25zLmNsaWVudHMubG9hZENsaWVudHMoKTtcbiAqICAgY29tYmluZWRGZWF0dXJlLmFjdGlvbnMucHJvZHVjdE9yZGVycy5sb2FkUHJvZHVjdE9yZGVycygpO1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRW50aXR5RmVhdHVyZXNQcm9wZXJ0aWVzPFxuICBGIGV4dGVuZHMgRW50aXR5RmVhdHVyZUZhY3Rvcnk8YW55LCBhbnk+LFxuICBUIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBFbnRpdHlGZWF0dXJlRmFjdG9yeTxhbnksIGFueSwgYW55LCBhbnksIGFueT4gfSxcbiAgSyBleHRlbmRzIGtleW9mIFQsXG4gIFN0YXRlIGV4dGVuZHMgRXh0cmFjdFN0YXRlVHlwZTxSZXR1cm5UeXBlPEY+PiAmIHtcbiAgICBbUCBpbiBLXTogRXh0cmFjdFN0YXRlVHlwZTxSZXR1cm5UeXBlPFRbUF0+PjtcbiAgfSxcbiAgQSBleHRlbmRzIEV4dHJhY3RBY3Rpb25zVHlwZTxSZXR1cm5UeXBlPEY+PiAmIHtcbiAgICBbUCBpbiBLXTogRXh0cmFjdEFjdGlvbnNUeXBlPFJldHVyblR5cGU8VFtQXT4+O1xuICB9LFxuICBTIGV4dGVuZHMgRmVhdHVyZVNlbGVjdG9yczxTdGF0ZSwgRXh0cmFjdFNlbGVjdG9yc1R5cGU8UmV0dXJuVHlwZTxGPj4+ICYge1xuICAgIFtQIGluIEtdOiBGZWF0dXJlU2VsZWN0b3JzPFN0YXRlLCBFeHRyYWN0U2VsZWN0b3JzVHlwZTxSZXR1cm5UeXBlPFRbUF0+Pj47XG4gIH0sXG4gIFIgZXh0ZW5kcyAoY29uZmlnOiBDb25maWc8U3RhdGU+KSA9PiB7XG4gICAgYWN0aW9uczogQTtcbiAgICBzZWxlY3RvcnM6IFM7XG4gICAgcmVkdWNlcjogKHN0YXRlOiBTdGF0ZSwgYWN0aW9uOiBBY3Rpb25UeXBlPGFueT4pID0+IFN0YXRlO1xuICAgIGVmZmVjdHM6IFR5cGU8YW55PltdO1xuICAgIGluaXRpYWxTdGF0ZTogU3RhdGU7XG4gIH1cbj4odGFyZ2V0VHJhaXRGYWN0b3J5OiBGLCB0cmFpdEZhY3Rvcmllc01hcDogVCk6IFIge1xuICByZXR1cm4gKChjb25maWc6IENvbmZpZzxhbnksIGFueT4pID0+IHtcbiAgICBjb25zdCBmZWF0dXJlU2VsZWN0b3IgPVxuICAgICAgdHlwZW9mIGNvbmZpZy5mZWF0dXJlU2VsZWN0b3IgPT09ICdzdHJpbmcnXG4gICAgICAgID8gY3JlYXRlRmVhdHVyZVNlbGVjdG9yPGFueT4oY29uZmlnLmZlYXR1cmVTZWxlY3RvcilcbiAgICAgICAgOiBjb25maWcuZmVhdHVyZVNlbGVjdG9yO1xuICAgIGNvbnN0IHRhcmdldEZlYXR1cmVUcmFpdHMgPSB0YXJnZXRUcmFpdEZhY3Rvcnkoe1xuICAgICAgYWN0aW9uc0dyb3VwS2V5OiBjb25maWcuYWN0aW9uc0dyb3VwS2V5LFxuICAgICAgZmVhdHVyZVNlbGVjdG9yOiBmZWF0dXJlU2VsZWN0b3IsXG4gICAgfSk7XG4gICAgY29uc3QgYWN0aW9uczogYW55ID0geyAuLi50YXJnZXRGZWF0dXJlVHJhaXRzLmFjdGlvbnMgfTtcbiAgICBjb25zdCBzZWxlY3RvcnM6IGFueSA9IHsgLi4udGFyZ2V0RmVhdHVyZVRyYWl0cy5zZWxlY3RvcnMgfTtcbiAgICBjb25zdCByZWR1Y2VyczogYW55ID0ge307XG4gICAgbGV0IGVmZmVjdHM6IFR5cGU8YW55PltdID0gWy4uLnRhcmdldEZlYXR1cmVUcmFpdHMuZWZmZWN0c107XG4gICAgZm9yIChjb25zdCBba2V5LCBlbnRpdHlGZWF0dXJlRmFjdG9yeV0gb2YgT2JqZWN0LmVudHJpZXMoXG4gICAgICB0cmFpdEZhY3Rvcmllc01hcFxuICAgICkpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gY3JlYXRlU2VsZWN0b3IoXG4gICAgICAgIGZlYXR1cmVTZWxlY3RvcixcbiAgICAgICAgKHN0YXRlOiBhbnkpID0+IHN0YXRlW2tleV1cbiAgICAgICk7XG4gICAgICBjb25zdCBmZWF0dXJlVHJhaXRzID0gZW50aXR5RmVhdHVyZUZhY3Rvcnkoe1xuICAgICAgICBhY3Rpb25zR3JvdXBLZXk6IGNvbmZpZy5hY3Rpb25zR3JvdXBLZXksXG4gICAgICAgIGZlYXR1cmVTZWxlY3Rvcjogc2VsZWN0b3IsXG4gICAgICB9KTtcbiAgICAgIGFjdGlvbnNba2V5XSA9IGZlYXR1cmVUcmFpdHMuYWN0aW9ucztcbiAgICAgIHNlbGVjdG9yc1trZXldID0gZmVhdHVyZVRyYWl0cy5zZWxlY3RvcnM7XG4gICAgICByZWR1Y2Vyc1trZXldID0gZmVhdHVyZVRyYWl0cy5yZWR1Y2VyO1xuICAgICAgZWZmZWN0cyA9IFsuLi5lZmZlY3RzLCAuLi5mZWF0dXJlVHJhaXRzLmVmZmVjdHNdO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgYWN0aW9ucyxcbiAgICAgIHNlbGVjdG9ycyxcbiAgICAgIHJlZHVjZXI6IHNldFByb3BlcnRpZXNSZWR1Y2VyKHRhcmdldEZlYXR1cmVUcmFpdHMucmVkdWNlciwgcmVkdWNlcnMpLFxuICAgICAgZWZmZWN0cyxcbiAgICB9O1xuICB9KSBhcyBSO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYW4gaW1wbGVtZW50YXRpb24gIGEgVHJhaXRGYWN0b3J5XG4gKiBAcGFyYW0gZiBUcmFpdEZhY3RvcnkgaW1wbGVtZW50YXRpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyYWl0RmFjdG9yeTxcbiAgU3RhdGUgPSB7fSxcbiAgQSBleHRlbmRzIFRyYWl0QWN0aW9ucyA9IHt9LFxuICBTIGV4dGVuZHMgVHJhaXRTZWxlY3RvcnM8U3RhdGU+ID0ge30sXG4gIE0gZXh0ZW5kcyBUcmFpdFN0YXRlTXV0YXRvcnM8U3RhdGU+ID0ge30sXG4gIEtFWSBleHRlbmRzIHN0cmluZyA9IHN0cmluZyxcbiAgQyA9IHVua25vd24sXG4gIEtDIGV4dGVuZHMgQWxsVHJhaXRDb25maWdzID0gS2V5ZWRDb25maWc8S0VZLCBDPlxuPihmOiB7XG4gIGtleTogS0VZO1xuICBjb25maWc/OiBDO1xuICBkZXBlbmRzPzogc3RyaW5nW107XG4gIGFjdGlvbnM/OiBUcmFpdEFjdGlvbnNGYWN0b3J5PEEsIEtDPjtcbiAgc2VsZWN0b3JzPzogVHJhaXRTZWxlY3RvcnNGYWN0b3J5PFN0YXRlLCBTLCBLQz47XG4gIGluaXRpYWxTdGF0ZT86IFRyYWl0SW5pdGlhbFN0YXRlRmFjdG9yeTxTdGF0ZSwgS0M+O1xuICBtdXRhdG9ycz86IFRyYWl0U3RhdGVNdXRhdG9yc0ZhY3Rvcnk8U3RhdGUsIE0sIEtDPjtcbiAgcmVkdWNlcj86IFRyYWl0UmVkdWNlckZhY3Rvcnk8U3RhdGUsIEEsIFMsIE0sIEtDPjtcbiAgZWZmZWN0cz86IFRyYWl0RWZmZWN0c0ZhY3Rvcnk8U3RhdGUsIEEsIFMsIEtDPjtcbn0pOiBUcmFpdEZhY3Rvcnk8U3RhdGUsIEEsIFMsIE0sIEtFWSwgQywgS0M+IHtcbiAgcmV0dXJuIGYgYXMgVHJhaXRGYWN0b3J5PFN0YXRlLCBBLCBTLCBNLCBLRVksIEMsIEtDPjtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gY29tYmluZSBzZWxlY3RvcnMgaW4gY29tcG9uZW50cyBhcyBtYXBcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZpZXcgPSBjb21iaW5lU2VsZWN0b3JzKHtcbiAqICAgICBwcm9kdWN0czogUHJvZHVjdFNlbGVjdG9ycy5zZWxlY3RQcm9kdWN0c0N1cnJlbnRQYWdlLFxuICogICAgIGlzTG9hZGluZzogUHJvZHVjdFNlbGVjdG9ycy5pc0xvYWRpbmdQcm9kdWN0c0N1cnJlbnRQYWdlLFxuICogICAgIHNlbGVjdGVkUHJvZHVjdDogUHJvZHVjdFNlbGVjdG9ycy5zZWxlY3RQcm9kdWN0U2VsZWN0ZWQsXG4gKiAgICAgaXNMb2FkaW5nQ2hlY2tvdXQ6IFByb2R1Y3RTZWxlY3RvcnMuaXNMb2FkaW5nQ2hlY2tvdXQsXG4gKiAgICAgc2VsZWN0ZWRTb3J0OiBQcm9kdWN0U2VsZWN0b3JzLnNlbGVjdFByb2R1Y3RzU29ydCxcbiAqICAgICBmaWx0ZXJzOiBQcm9kdWN0U2VsZWN0b3JzLnNlbGVjdFByb2R1Y3RzRmlsdGVyLFxuICogICB9KTtcbiAqIEBwYXJhbSB0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lU2VsZWN0b3JzPFxuICBUIGV4dGVuZHMgeyBbazogc3RyaW5nXTogTWVtb2l6ZWRTZWxlY3RvcjxhbnksIGFueT4gfVxuPih0OiBUKTogTWVtb2l6ZWRTZWxlY3RvcjxhbnksIHsgW2ogaW4ga2V5b2YgVF06IFJldHVyblR5cGU8VFtqXT4gfT4ge1xuICBjb25zdCBzZWxlY3RvcnMgPSBPYmplY3QudmFsdWVzKHQpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModCk7XG4gIGNvbnN0IHByb2plY3RvciA9ICguLi5hcmdzOiBhbnlbXSkgPT5cbiAgICBrZXlzLnJlZHVjZSgoYWNjLCBrZXksIGluZGV4KSA9PiB7XG4gICAgICBhY2Nba2V5XSA9IGFyZ3NbaW5kZXhdO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSBhcyBhbnkpO1xuICByZXR1cm4gKGNyZWF0ZVNlbGVjdG9yIGFzIGFueSkuYXBwbHkobnVsbCwgWy4uLnNlbGVjdG9ycywgcHJvamVjdG9yXSk7XG59XG4iXX0=","import { Injectable, inject } from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport { Actions, ofType, } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport * as i0 from \"@angular/core\";\nexport class TraitEffect {\n constructor() {\n this.name = this.constructor.name;\n this.componentId = '';\n this.actions$ = inject(Actions);\n this.store = inject((Store));\n }\n ngrxOnIdentifyEffects() {\n return this.componentId ? this.name + this.componentId : '';\n }\n ngrxOnRunEffects(resolvedEffects$) {\n return this.componentId\n ? resolvedEffects$.pipe(takeUntil(this.actions$.pipe(ofType(getDestroyActionName(this.componentId)))))\n : resolvedEffects$;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: TraitEffect, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: TraitEffect }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: TraitEffect, decorators: [{\n type: Injectable\n }] });\nexport function getDestroyActionName(id) {\n return `[${id}] Destroyed`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaXQtZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvdHJhaXQtZWZmZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsT0FBTyxFQUNQLE1BQU0sR0FHUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUlwQyxNQUFNLE9BQU8sV0FBVztJQUR4QjtRQUVVLFNBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUM5QixnQkFBVyxHQUFHLEVBQUUsQ0FBQztRQUNkLGFBQVEsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsVUFBSyxHQUFHLE1BQU0sQ0FBQyxDQUFBLEtBQVUsQ0FBQSxDQUFDLENBQUM7S0FldEM7SUFiQyxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztJQUM5RCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsZ0JBQWlDO1FBQ2hELE9BQU8sSUFBSSxDQUFDLFdBQVc7WUFDckIsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FDbkIsU0FBUyxDQUNQLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUNuRSxDQUNGO1lBQ0gsQ0FBQyxDQUFDLGdCQUFnQixDQUFDO0lBQ3ZCLENBQUM7OEdBbEJVLFdBQVc7a0hBQVgsV0FBVzs7MkZBQVgsV0FBVztrQkFEdkIsVUFBVTs7QUFzQlgsTUFBTSxVQUFVLG9CQUFvQixDQUFDLEVBQVU7SUFDN0MsT0FBTyxJQUFJLEVBQUUsYUFBYSxDQUFDO0FBQzdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7XG4gIEFjdGlvbnMsXG4gIG9mVHlwZSxcbiAgT25JZGVudGlmeUVmZmVjdHMsXG4gIE9uUnVuRWZmZWN0cyxcbn0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIFRyYWl0RWZmZWN0IGltcGxlbWVudHMgT25JZGVudGlmeUVmZmVjdHMsIE9uUnVuRWZmZWN0cyB7XG4gIHByaXZhdGUgbmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgcHVibGljIGNvbXBvbmVudElkID0gJyc7XG4gIHByb3RlY3RlZCBhY3Rpb25zJCA9IGluamVjdChBY3Rpb25zKTtcbiAgcHJvdGVjdGVkIHN0b3JlID0gaW5qZWN0KFN0b3JlPGFueT4pO1xuXG4gIG5ncnhPbklkZW50aWZ5RWZmZWN0cygpIHtcbiAgICByZXR1cm4gdGhpcy5jb21wb25lbnRJZCA/IHRoaXMubmFtZSArIHRoaXMuY29tcG9uZW50SWQgOiAnJztcbiAgfVxuXG4gIG5ncnhPblJ1bkVmZmVjdHMocmVzb2x2ZWRFZmZlY3RzJDogT2JzZXJ2YWJsZTxhbnk+KSB7XG4gICAgcmV0dXJuIHRoaXMuY29tcG9uZW50SWRcbiAgICAgID8gcmVzb2x2ZWRFZmZlY3RzJC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbChcbiAgICAgICAgICAgIHRoaXMuYWN0aW9ucyQucGlwZShvZlR5cGUoZ2V0RGVzdHJveUFjdGlvbk5hbWUodGhpcy5jb21wb25lbnRJZCkpKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgOiByZXNvbHZlZEVmZmVjdHMkO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZXN0cm95QWN0aW9uTmFtZShpZDogc3RyaW5nKSB7XG4gIHJldHVybiBgWyR7aWR9XSBEZXN0cm95ZWRgO1xufVxuIl19","import { InjectionToken } from '@angular/core';\n/**\n * @ignore\n * @internal\n */\nexport const DISABLE_LOCAL_TRAIT_EFFECTS = new InjectionToken('disableLocalTraitEffects');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzYWJsZS1sb2NhbC10cmFpdC1lZmZlY3RzLnRva2VuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvbG9jYWwtc3RvcmUvZGlzYWJsZS1sb2NhbC10cmFpdC1lZmZlY3RzLnRva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0M7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxjQUFjLENBQzNELDBCQUEwQixDQUMzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBAaWdub3JlXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGNvbnN0IERJU0FCTEVfTE9DQUxfVFJBSVRfRUZGRUNUUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPihcbiAgJ2Rpc2FibGVMb2NhbFRyYWl0RWZmZWN0cydcbik7XG4iXX0=","import { inject, Injectable, Injector } from '@angular/core';\nimport { createFeatureSelector, ReducerManager, Store } from '@ngrx/store';\nimport { EffectSources } from '@ngrx/effects';\nimport { getDestroyActionName, TraitEffect } from '../trait-effect';\nimport { DISABLE_LOCAL_TRAIT_EFFECTS } from './disable-local-trait-effects.token';\nimport * as i0 from \"@angular/core\";\nlet id = 0;\nfunction uniqueComponentId() {\n return id++;\n}\n/**\n * Builds traitFactory and registers effects and reducers with\n * a generated component id, returns build actions and selectors\n * and a destroy method that will unergister the effects and reducers\n * when called, and a addEffect which can be use to register extra effects\n *\n * Used inside TraitsLocalStore, can be used to create your\n * own Component Service without extending TraitsLocalStore\n * @param injector\n * @param componentName\n * @param traitFactory\n */\nexport function buildLocalTraits(injector, componentName, traitFactory) {\n const reducers = injector.get(ReducerManager);\n const effects = injector.get(EffectSources);\n const store = injector.get(Store);\n const componentId = `${componentName}_${uniqueComponentId()}`;\n const traits = traitFactory({\n featureSelector: createFeatureSelector(componentId),\n actionsGroupKey: `[${componentId}]`,\n });\n traits.reducer && reducers.addReducer(componentId, traits.reducer);\n const providers = (traits.effects && [...traits.effects.map((e) => ({ provide: e }))]) || [];\n const disableLocalTraitsEffects = injector.get(DISABLE_LOCAL_TRAIT_EFFECTS, false);\n if (!disableLocalTraitsEffects) {\n const i = Injector.create({\n providers: providers,\n parent: injector,\n });\n traits.effects?.forEach((e) => {\n const effect = i.get(e);\n effect.componentId = componentId;\n effects.addEffects(effect);\n });\n }\n function destroy() {\n store.dispatch({ type: getDestroyActionName(componentId) });\n /**\n * A service that extends TraitsLocalStore and other component service are destroyed\n * before the component that depends on them, this causes that any subscriptions\n * to selectors of the TraitsLocalStore could fail because the store state is removed before\n * they are unsubscribe by the onDestroy of the component. Executing reducers.removeReducer\n * inside setTimeout ensures the state is remove after the component onDestroy was called,\n * avoiding the before mentioned possible issues.\n */\n setTimeout(() => reducers.removeReducer(componentId));\n }\n return {\n destroy,\n actions: traits.actions,\n selectors: traits.selectors,\n addEffects(localEffect) {\n localEffect.componentId = componentId;\n effects.addEffects(localEffect);\n },\n };\n}\n/**\n * Class used to create local traits service, receives a trait factory, which will be\n * built and its reducers and effect register using a dynamic id when the service is built\n * and get destroyed when the onDestroy lifecycle method of the service is called, if the service\n * has effects this.traits.addEffects(this) should be call in the constructor\n *\n * @example\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * );\n *\n * Injectable()\n * export class ProductsLocalTraits extends TraitsLocalStore<\n * typeof productFeatureFactory\n * > {\n * loadProducts$ = createEffect(() =>\n * this.actions$.pipe(\n * ofType(this.localActions.loadProducts),\n * switchMap(() =>\n * //call your service to get the products data\n * this.productService.getProducts().pipe(\n * map((res) =>\n * this.localActions.loadProductsSuccess({ entities: res.resultList })\n * ),\n * catchError(() => of(this.localActions.loadProductsFail()))\n * )\n * )\n * )\n * );\n *\n * constructor(injector: Injector, private productService: ProductService) {\n * super(injector);\n * this.traits.addEffects(this); // IMPORTANT! add this line if the service has effects\n * }\n *\n * setup(): LocalTraitsConfig<typeof productFeatureFactory> {\n * return {\n * componentName: 'ProductsPickerComponent',\n * traitsFactory: productFeatureFactory,\n * };\n * }\n * }\n *\n * // use in component later\n *\n * Component({\n * selector: 'some-component',\n * template: `<div> some content</div> `,\n * providers: [ProductsLocalTraits],\n * changeDetection: ChangeDetectionStrategy.OnPush,\n * })\n * export class ProductSelectDialogComponent implements OnInit {\n * constructor(private store: Store, private traits: ProductsLocalTraits) {}\n *\n * ngOnInit() {\n * this.store.dispatch(this.traits.localActions.loadProducts());\n * }\n * }\n */\nexport class TraitsLocalStore extends TraitEffect {\n constructor() {\n super();\n this.injector = inject(Injector);\n const config = this.setup();\n this.traits = buildLocalTraits(this.injector, config.componentName, config.traitsFactory);\n this.localActions = this.traits.actions;\n this.localSelectors = this.traits.selectors;\n }\n ngOnDestroy() {\n this.traits.destroy();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: TraitsLocalStore, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: TraitsLocalStore }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: TraitsLocalStore, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhaXRzLWxvY2FsLXN0b3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvbG9jYWwtc3RvcmUvdHJhaXRzLWxvY2FsLXN0b3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUV4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMzRSxPQUFPLEVBQVcsYUFBYSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7QUFFbEYsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ1gsU0FBUyxpQkFBaUI7SUFDeEIsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUNkLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FHOUIsUUFBa0IsRUFBRSxhQUFxQixFQUFFLFlBQWU7SUFDMUQsTUFBTSxRQUFRLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM5QyxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbEMsTUFBTSxXQUFXLEdBQUcsR0FBRyxhQUFhLElBQUksaUJBQWlCLEVBQUUsRUFBRSxDQUFDO0lBRTlELE1BQU0sTUFBTSxHQUFHLFlBQVksQ0FBQztRQUMxQixlQUFlLEVBQUUscUJBQXFCLENBQVEsV0FBVyxDQUFDO1FBQzFELGVBQWUsRUFBRSxJQUFJLFdBQVcsR0FBRztLQUNwQyxDQUFrQixDQUFDO0lBRXBCLE1BQU0sQ0FBQyxPQUFPLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBRW5FLE1BQU0sU0FBUyxHQUNiLENBQUMsTUFBTSxDQUFDLE9BQU8sSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFN0UsTUFBTSx5QkFBeUIsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUM1QywyQkFBMkIsRUFDM0IsS0FBSyxDQUNOLENBQUM7SUFDRixJQUFJLENBQUMseUJBQXlCLEVBQUUsQ0FBQztRQUMvQixNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1lBQ3hCLFNBQVMsRUFBRSxTQUFTO1lBQ3BCLE1BQU0sRUFBRSxRQUFRO1NBQ2pCLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7WUFDNUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQWdCLENBQUM7WUFDdkMsTUFBTSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7WUFDakMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLE9BQU87UUFDZCxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM1RDs7Ozs7OztXQU9HO1FBQ0gsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU87UUFDUCxPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87UUFDdkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO1FBQzNCLFVBQVUsQ0FBQyxXQUF3QjtZQUNqQyxXQUFXLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztZQUN0QyxPQUFPLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7S0FDRixDQUFDO0FBQ0osQ0FBQztBQWFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0REc7QUFFSCxNQUFNLE9BQWdCLGdCQUdwQixTQUFRLFdBQVc7SUFjbkI7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUhGLGFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFJbEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLEdBQUcsZ0JBQWdCLENBQzVCLElBQUksQ0FBQyxRQUFRLEVBQ2IsTUFBTSxDQUFDLGFBQWEsRUFDcEIsTUFBTSxDQUFDLGFBQWEsQ0FDckIsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDeEMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztJQUM5QyxDQUFDO0lBSUQsV0FBVztRQUNULElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDeEIsQ0FBQzs4R0FqQ21CLGdCQUFnQjtrSEFBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQURyQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBJbmplY3RvciwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCYXNlRW50aXR5RmVhdHVyZUZhY3RvcnksIEVudGl0eUZlYXR1cmVGYWN0b3J5IH0gZnJvbSAnLi4vbW9kZWwnO1xuaW1wb3J0IHsgY3JlYXRlRmVhdHVyZVNlbGVjdG9yLCBSZWR1Y2VyTWFuYWdlciwgU3RvcmUgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBBY3Rpb25zLCBFZmZlY3RTb3VyY2VzIH0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XG5pbXBvcnQgeyBnZXREZXN0cm95QWN0aW9uTmFtZSwgVHJhaXRFZmZlY3QgfSBmcm9tICcuLi90cmFpdC1lZmZlY3QnO1xuaW1wb3J0IHsgRElTQUJMRV9MT0NBTF9UUkFJVF9FRkZFQ1RTIH0gZnJvbSAnLi9kaXNhYmxlLWxvY2FsLXRyYWl0LWVmZmVjdHMudG9rZW4nO1xuXG5sZXQgaWQgPSAwO1xuZnVuY3Rpb24gdW5pcXVlQ29tcG9uZW50SWQoKSB7XG4gIHJldHVybiBpZCsrO1xufVxuXG4vKipcbiAqIEJ1aWxkcyB0cmFpdEZhY3RvcnkgYW5kIHJlZ2lzdGVycyBlZmZlY3RzIGFuZCByZWR1Y2VycyB3aXRoXG4gKiBhIGdlbmVyYXRlZCBjb21wb25lbnQgaWQsIHJldHVybnMgYnVpbGQgYWN0aW9ucyBhbmQgc2VsZWN0b3JzXG4gKiBhbmQgYSBkZXN0cm95IG1ldGhvZCB0aGF0IHdpbGwgdW5lcmdpc3RlciB0aGUgZWZmZWN0cyBhbmQgcmVkdWNlcnNcbiAqIHdoZW4gY2FsbGVkLCBhbmQgYSBhZGRFZmZlY3Qgd2hpY2ggY2FuIGJlIHVzZSB0byByZWdpc3RlciBleHRyYSBlZmZlY3RzXG4gKlxuICogVXNlZCBpbnNpZGUgVHJhaXRzTG9jYWxTdG9yZSwgY2FuIGJlIHVzZWQgdG8gY3JlYXRlIHlvdXJcbiAqIG93biBDb21wb25lbnQgU2VydmljZSB3aXRob3V0IGV4dGVuZGluZyBUcmFpdHNMb2NhbFN0b3JlXG4gKiBAcGFyYW0gaW5qZWN0b3JcbiAqIEBwYXJhbSBjb21wb25lbnROYW1lXG4gKiBAcGFyYW0gdHJhaXRGYWN0b3J5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZExvY2FsVHJhaXRzPFxuICBTdGF0ZSxcbiAgRiBleHRlbmRzIEJhc2VFbnRpdHlGZWF0dXJlRmFjdG9yeTxhbnksIGFueSwgYW55PlxuPihpbmplY3RvcjogSW5qZWN0b3IsIGNvbXBvbmVudE5hbWU6IHN0cmluZywgdHJhaXRGYWN0b3J5OiBGKSB7XG4gIGNvbnN0IHJlZHVjZXJzID0gaW5qZWN0b3IuZ2V0KFJlZHVjZXJNYW5hZ2VyKTtcbiAgY29uc3QgZWZmZWN0cyA9IGluamVjdG9yLmdldChFZmZlY3RTb3VyY2VzKTtcbiAgY29uc3Qgc3RvcmUgPSBpbmplY3Rvci5nZXQoU3RvcmUpO1xuICBjb25zdCBjb21wb25lbnRJZCA9IGAke2NvbXBvbmVudE5hbWV9XyR7dW5pcXVlQ29tcG9uZW50SWQoKX1gO1xuXG4gIGNvbnN0IHRyYWl0cyA9IHRyYWl0RmFjdG9yeSh7XG4gICAgZmVhdHVyZVNlbGVjdG9yOiBjcmVhdGVGZWF0dXJlU2VsZWN0b3I8U3RhdGU+KGNvbXBvbmVudElkKSxcbiAgICBhY3Rpb25zR3JvdXBLZXk6IGBbJHtjb21wb25lbnRJZH1dYCxcbiAgfSkgYXMgUmV0dXJuVHlwZTxGPjtcblxuICB0cmFpdHMucmVkdWNlciAmJiByZWR1Y2Vycy5hZGRSZWR1Y2VyKGNvbXBvbmVudElkLCB0cmFpdHMucmVkdWNlcik7XG5cbiAgY29uc3QgcHJvdmlkZXJzID1cbiAgICAodHJhaXRzLmVmZmVjdHMgJiYgWy4uLnRyYWl0cy5lZmZlY3RzLm1hcCgoZSkgPT4gKHsgcHJvdmlkZTogZSB9KSldKSB8fCBbXTtcblxuICBjb25zdCBkaXNhYmxlTG9jYWxUcmFpdHNFZmZlY3RzID0gaW5qZWN0b3IuZ2V0KFxuICAgIERJU0FCTEVfTE9DQUxfVFJBSVRfRUZGRUNUUyxcbiAgICBmYWxzZVxuICApO1xuICBpZiAoIWRpc2FibGVMb2NhbFRyYWl0c0VmZmVjdHMpIHtcbiAgICBjb25zdCBpID0gSW5qZWN0b3IuY3JlYXRlKHtcbiAgICAgIHByb3ZpZGVyczogcHJvdmlkZXJzLFxuICAgICAgcGFyZW50OiBpbmplY3RvcixcbiAgICB9KTtcblxuICAgIHRyYWl0cy5lZmZlY3RzPy5mb3JFYWNoKChlKSA9PiB7XG4gICAgICBjb25zdCBlZmZlY3QgPSBpLmdldChlKSBhcyBUcmFpdEVmZmVjdDtcbiAgICAgIGVmZmVjdC5jb21wb25lbnRJZCA9IGNvbXBvbmVudElkO1xuICAgICAgZWZmZWN0cy5hZGRFZmZlY3RzKGVmZmVjdCk7XG4gICAgfSk7XG4gIH1cblxuICBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgIHN0b3JlLmRpc3BhdGNoKHsgdHlwZTogZ2V0RGVzdHJveUFjdGlvbk5hbWUoY29tcG9uZW50SWQpIH0pO1xuICAgIC8qKlxuICAgICAqIEEgc2VydmljZSB0aGF0IGV4dGVuZHMgVHJhaXRzTG9jYWxTdG9yZSBhbmQgb3RoZXIgY29tcG9uZW50IHNlcnZpY2UgYXJlIGRlc3Ryb3llZFxuICAgICAqIGJlZm9yZSB0aGUgY29tcG9uZW50IHRoYXQgZGVwZW5kcyBvbiB0aGVtLCB0aGlzIGNhdXNlcyB0aGF0IGFueSBzdWJzY3JpcHRpb25zXG4gICAgICogdG8gc2VsZWN0b3JzIG9mIHRoZSBUcmFpdHNMb2NhbFN0b3JlIGNvdWxkIGZhaWwgYmVjYXVzZSB0aGUgc3RvcmUgc3RhdGUgaXMgcmVtb3ZlZCBiZWZvcmVcbiAgICAgKiB0aGV5IGFyZSB1bnN1YnNjcmliZSBieSB0aGUgb25EZXN0cm95IG9mIHRoZSBjb21wb25lbnQuIEV4ZWN1dGluZyByZWR1Y2Vycy5yZW1vdmVSZWR1Y2VyXG4gICAgICogaW5zaWRlIHNldFRpbWVvdXQgZW5zdXJlcyB0aGUgc3RhdGUgaXMgcmVtb3ZlIGFmdGVyIHRoZSBjb21wb25lbnQgb25EZXN0cm95IHdhcyBjYWxsZWQsXG4gICAgICogYXZvaWRpbmcgdGhlIGJlZm9yZSBtZW50aW9uZWQgcG9zc2libGUgaXNzdWVzLlxuICAgICAqL1xuICAgIHNldFRpbWVvdXQoKCkgPT4gcmVkdWNlcnMucmVtb3ZlUmVkdWNlcihjb21wb25lbnRJZCkpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkZXN0cm95LFxuICAgIGFjdGlvbnM6IHRyYWl0cy5hY3Rpb25zLFxuICAgIHNlbGVjdG9yczogdHJhaXRzLnNlbGVjdG9ycyxcbiAgICBhZGRFZmZlY3RzKGxvY2FsRWZmZWN0OiBUcmFpdEVmZmVjdCkge1xuICAgICAgbG9jYWxFZmZlY3QuY29tcG9uZW50SWQgPSBjb21wb25lbnRJZDtcbiAgICAgIGVmZmVjdHMuYWRkRWZmZWN0cyhsb2NhbEVmZmVjdCk7XG4gICAgfSxcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBUeXBlPFQ+IGV4dGVuZHMgRnVuY3Rpb24ge1xuICBuZXcgKC4uLmFyZ3M6IGFueVtdKTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2NhbFRyYWl0c0NvbmZpZzxcbiAgRiBleHRlbmRzIEJhc2VFbnRpdHlGZWF0dXJlRmFjdG9yeTxhbnksIGFueSwgYW55PlxuPiB7XG4gIGNvbXBvbmVudE5hbWU6IHN0cmluZztcbiAgdHJhaXRzRmFjdG9yeTogRjtcbn1cblxuLyoqXG4gKiBDbGFzcyB1c2VkIHRvIGNyZWF0ZSBsb2NhbCB0cmFpdHMgc2VydmljZSwgcmVjZWl2ZXMgYSB0cmFpdCBmYWN0b3J5LCB3aGljaCB3aWxsIGJlXG4gKiBidWlsdCBhbmQgaXRzIHJlZHVjZXJzIGFuZCBlZmZlY3QgcmVnaXN0ZXIgdXNpbmcgYSBkeW5hbWljIGlkIHdoZW4gdGhlIHNlcnZpY2UgaXMgYnVpbHRcbiAqIGFuZCBnZXQgZGVzdHJveWVkIHdoZW4gdGhlIG9uRGVzdHJveSBsaWZlY3ljbGUgbWV0aG9kIG9mIHRoZSBzZXJ2aWNlIGlzIGNhbGxlZCwgaWYgdGhlIHNlcnZpY2VcbiAqIGhhcyBlZmZlY3RzIHRoaXMudHJhaXRzLmFkZEVmZmVjdHModGhpcykgc2hvdWxkIGJlIGNhbGwgaW4gdGhlIGNvbnN0cnVjdG9yXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHByb2R1Y3RGZWF0dXJlRmFjdG9yeSA9IGNyZWF0ZUVudGl0eUZlYXR1cmVGYWN0b3J5KFxuICogICB7IGVudGl0eU5hbWU6ICdwcm9kdWN0JyB9LFxuICogICBhZGRMb2FkRW50aXRpZXNUcmFpdDxQcm9kdWN0PigpLFxuICogICBhZGRTZWxlY3RFbnRpdHlUcmFpdDxQcm9kdWN0PigpLFxuICogKTtcbiAqXG4gKiBJbmplY3RhYmxlKClcbiAqIGV4cG9ydCBjbGFzcyBQcm9kdWN0c0xvY2FsVHJhaXRzIGV4dGVuZHMgVHJhaXRzTG9jYWxTdG9yZTxcbiAqICAgdHlwZW9mIHByb2R1Y3RGZWF0dXJlRmFjdG9yeVxuICogPiB7XG4gKiAgIGxvYWRQcm9kdWN0cyQgPSBjcmVhdGVFZmZlY3QoKCkgPT5cbiAqICAgICB0aGlzLmFjdGlvbnMkLnBpcGUoXG4gKiAgICAgICBvZlR5cGUodGhpcy5sb2NhbEFjdGlvbnMubG9hZFByb2R1Y3RzKSxcbiAqICAgICAgIHN3aXRjaE1hcCgoKSA9PlxuICogICAgICAgICAvL2NhbGwgeW91ciBzZXJ2aWNlIHRvIGdldCB0aGUgcHJvZHVjdHMgZGF0YVxuICogICAgICAgICB0aGlzLnByb2R1Y3RTZXJ2aWNlLmdldFByb2R1Y3RzKCkucGlwZShcbiAqICAgICAgICAgICBtYXAoKHJlcykgPT5cbiAqICAgICAgICAgICAgIHRoaXMubG9jYWxBY3Rpb25zLmxvYWRQcm9kdWN0c1N1Y2Nlc3MoeyBlbnRpdGllczogcmVzLnJlc3VsdExpc3QgfSlcbiAqICAgICAgICAgICApLFxuICogICAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YodGhpcy5sb2NhbEFjdGlvbnMubG9hZFByb2R1Y3RzRmFpbCgpKSlcbiAqICAgICAgICAgKVxuICogICAgICAgKVxuICogICAgIClcbiAqICAgKTtcbiAqXG4gKiAgIGNvbnN0cnVjdG9yKGluamVjdG9yOiBJbmplY3RvciwgcHJpdmF0ZSBwcm9kdWN0U2VydmljZTogUHJvZHVjdFNlcnZpY2UpIHtcbiAqICAgICBzdXBlcihpbmplY3Rvcik7XG4gKiAgICAgdGhpcy50cmFpdHMuYWRkRWZmZWN0cyh0aGlzKTsgLy8gSU1QT1JUQU5UISBhZGQgdGhpcyBsaW5lIGlmIHRoZSBzZXJ2aWNlIGhhcyBlZmZlY3RzXG4gKiAgIH1cbiAqXG4gKiAgIHNldHVwKCk6IExvY2FsVHJhaXRzQ29uZmlnPHR5cGVvZiBwcm9kdWN0RmVhdHVyZUZhY3Rvcnk+IHtcbiAqICAgICByZXR1cm4ge1xuICogICAgICAgY29tcG9uZW50TmFtZTogJ1Byb2R1Y3RzUGlja2VyQ29tcG9uZW50JyxcbiAqICAgICAgIHRyYWl0c0ZhY3Rvcnk6IHByb2R1Y3RGZWF0dXJlRmFjdG9yeSxcbiAqICAgICB9O1xuICogICB9XG4gKiB9XG4gKlxuICogLy8gdXNlIGluIGNvbXBvbmVudCBsYXRlclxuICpcbiAqIENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiAnc29tZS1jb21wb25lbnQnLFxuICogICB0ZW1wbGF0ZTogYDxkaXY+IHNvbWUgY29udGVudDwvZGl2PiBgLFxuICogICBwcm92aWRlcnM6IFtQcm9kdWN0c0xvY2FsVHJhaXRzXSxcbiAqICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIFByb2R1Y3RTZWxlY3REaWFsb2dDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICogICBjb25zdHJ1Y3Rvcihwcml2YXRlIHN0b3JlOiBTdG9yZSwgcHJpdmF0ZSB0cmFpdHM6IFByb2R1Y3RzTG9jYWxUcmFpdHMpIHt9XG4gKlxuICogICBuZ09uSW5pdCgpIHtcbiAqICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKHRoaXMudHJhaXRzLmxvY2FsQWN0aW9ucy5sb2FkUHJvZHVjdHMoKSk7XG4gKiAgIH1cbiAqIH1cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFRyYWl0c0xvY2FsU3RvcmU8XG4gICAgRiBleHRlbmRzIEJhc2VFbnRpdHlGZWF0dXJlRmFjdG9yeTxhbnksIGFueSwgYW55PlxuICA+XG4gIGV4dGVuZHMgVHJhaXRFZmZlY3RcbiAgaW1wbGVtZW50cyBPbkRlc3Ryb3lcbntcbiAgdHJhaXRzOiB7XG4gICAgYWN0aW9uczogUmV0dXJuVHlwZTxGPlsnYWN0aW9ucyddO1xuICAgIHNlbGVjdG9yczogUmV0dXJuVHlwZTxGPlsnc2VsZWN0b3JzJ107XG4gICAgZGVzdHJveTogKCkgPT4gdm9pZDtcbiAgICBhZGRFZmZlY3RzOiAobG9jYWxFZmZlY3Q6IFRyYWl0RWZmZWN0KSA9PiB2b2lkO1xuICB9O1xuXG4gIGxvY2FsQWN0aW9uczogUmV0dXJuVHlwZTxGPlsnYWN0aW9ucyddO1xuICBsb2NhbFNlbGVjdG9yczogUmV0dXJuVHlwZTxGPlsnc2VsZWN0b3JzJ107XG4gIHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuc2V0dXAoKTtcbiAgICB0aGlzLnRyYWl0cyA9IGJ1aWxkTG9jYWxUcmFpdHMoXG4gICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgY29uZmlnLmNvbXBvbmVudE5hbWUsXG4gICAgICBjb25maWcudHJhaXRzRmFjdG9yeVxuICAgICk7XG4gICAgdGhpcy5sb2NhbEFjdGlvbnMgPSB0aGlzLnRyYWl0cy5hY3Rpb25zO1xuICAgIHRoaXMubG9jYWxTZWxlY3RvcnMgPSB0aGlzLnRyYWl0cy5zZWxlY3RvcnM7XG4gIH1cblxuICBhYnN0cmFjdCBzZXR1cCgpOiBMb2NhbFRyYWl0c0NvbmZpZzxGPjtcblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnRyYWl0cy5kZXN0cm95KCk7XG4gIH1cbn1cbiJdfQ==","function hash(key) {\n return JSON.stringify(key, (_, val) => typeof val == 'object'\n ? Object.keys(val)\n .sort()\n .reduce((result, k) => {\n result[k] = val[k];\n return result;\n }, {})\n : val);\n}\nexport function hashKey(key) {\n return typeof key === 'string'\n ? [key]\n : key.map((k) => {\n return typeof k === 'string' ? k : hash(k);\n });\n}\nexport function getCacheValue(keys, state) {\n let parent = state;\n for (const key of keys) {\n parent = parent?.keys?.[key];\n if (!parent)\n return undefined;\n }\n return parent?.data;\n}\nexport function isCacheValid(cache, exp) {\n return !cache.invalid && Date.now() <= cache.date + exp;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvY2FjaGUvY2FjaGUubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtCQSxTQUFTLElBQUksQ0FBQyxHQUFvQjtJQUNoQyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQ3BDLE9BQU8sR0FBRyxJQUFJLFFBQVE7UUFDcEIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO2FBQ2IsSUFBSSxFQUFFO2FBQ04sTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbkIsT0FBTyxNQUFNLENBQUM7UUFDaEIsQ0FBQyxFQUFFLEVBQVMsQ0FBQztRQUNqQixDQUFDLENBQUMsR0FBRyxDQUNSLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxHQUFhO0lBQ25DLE9BQU8sT0FBTyxHQUFHLEtBQUssUUFBUTtRQUM1QixDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDUCxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ1osT0FBTyxPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO0FBQ1QsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQzNCLElBQWMsRUFDZCxLQUFpQjtJQUVqQixJQUFJLE1BQU0sR0FBMEIsS0FBSyxDQUFDO0lBQzFDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDdkIsTUFBTSxHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU8sU0FBUyxDQUFDO0lBQ2hDLENBQUM7SUFDRCxPQUFPLE1BQU0sRUFBRSxJQUFJLENBQUM7QUFDdEIsQ0FBQztBQUVELE1BQU0sVUFBVSxZQUFZLENBQUMsS0FBZ0IsRUFBRSxHQUFXO0lBQ3hELE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgQ2FjaGVLZXkgPSBzdHJpbmcgfCAoc3RyaW5nIHwgb2JqZWN0KVtdO1xuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlRGF0YSB7XG4gIHZhbHVlOiBhbnk7XG4gIGRhdGU6IG51bWJlcjtcbiAgaW52YWxpZDogYm9vbGVhbjtcbiAgaGl0Q291bnQ6IG51bWJlcjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVLZXlzIHtcbiAga2V5cz86IHsgW2tleTogc3RyaW5nXTogQ2FjaGVLZXlzIH07XG4gIGRhdGE/OiBDYWNoZURhdGE7XG59XG5cbmV4cG9ydCB0eXBlIENhY2hlU3RhdGUgPSBDYWNoZUtleXM7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2FjaGVDb25maWcge1xuICBleHBpcmVzOiBudW1iZXI7XG59XG5mdW5jdGlvbiBoYXNoKGtleTogc3RyaW5nIHwgb2JqZWN0KTogc3RyaW5nIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGtleSwgKF8sIHZhbCkgPT5cbiAgICB0eXBlb2YgdmFsID09ICdvYmplY3QnXG4gICAgICA/IE9iamVjdC5rZXlzKHZhbClcbiAgICAgICAgICAuc29ydCgpXG4gICAgICAgICAgLnJlZHVjZSgocmVzdWx0LCBrKSA9PiB7XG4gICAgICAgICAgICByZXN1bHRba10gPSB2YWxba107XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgIH0sIHt9IGFzIGFueSlcbiAgICAgIDogdmFsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNoS2V5KGtleTogQ2FjaGVLZXkpOiBzdHJpbmdbXSB7XG4gIHJldHVybiB0eXBlb2Yga2V5ID09PSAnc3RyaW5nJ1xuICAgID8gW2tleV1cbiAgICA6IGtleS5tYXAoKGspID0+IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBrID09PSAnc3RyaW5nJyA/IGsgOiBoYXNoKGspO1xuICAgICAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZVZhbHVlKFxuICBrZXlzOiBzdHJpbmdbXSxcbiAgc3RhdGU6IENhY2hlU3RhdGVcbik6IENhY2hlRGF0YSB8IHVuZGVmaW5lZCB7XG4gIGxldCBwYXJlbnQ6IENhY2hlS2V5cyB8IHVuZGVmaW5lZCA9IHN0YXRlO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgcGFyZW50ID0gcGFyZW50Py5rZXlzPy5ba2V5XTtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGFyZW50Py5kYXRhO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDYWNoZVZhbGlkKGNhY2hlOiBDYWNoZURhdGEsIGV4cDogbnVtYmVyKSB7XG4gIHJldHVybiAhY2FjaGUuaW52YWxpZCAmJiBEYXRlLm5vdygpIDw9IGNhY2hlLmRhdGUgKyBleHA7XG59XG4iXX0=","import { createFeatureSelector, createSelector } from '@ngrx/store';\nimport { getCacheValue, hashKey } from './cache.models';\nexport const cacheStateSelector = createFeatureSelector('cache');\nexport const selectCache = (key) => createSelector(cacheStateSelector, (state) => getCacheValue(hashKey(key), state));\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuc2VsZWN0b3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvY2FjaGUvY2FjaGUuc2VsZWN0b3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDcEUsT0FBTyxFQUF3QixhQUFhLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFOUUsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcscUJBQXFCLENBQWEsT0FBTyxDQUFDLENBQUM7QUFFN0UsTUFBTSxDQUFDLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUUsQ0FDM0MsY0FBYyxDQUFDLGtCQUFrQixFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDM0MsYUFBYSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FDbkMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNyZWF0ZUZlYXR1cmVTZWxlY3RvciwgY3JlYXRlU2VsZWN0b3IgfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQgeyBDYWNoZUtleSwgQ2FjaGVTdGF0ZSwgZ2V0Q2FjaGVWYWx1ZSwgaGFzaEtleSB9IGZyb20gJy4vY2FjaGUubW9kZWxzJztcblxuZXhwb3J0IGNvbnN0IGNhY2hlU3RhdGVTZWxlY3RvciA9IGNyZWF0ZUZlYXR1cmVTZWxlY3RvcjxDYWNoZVN0YXRlPignY2FjaGUnKTtcblxuZXhwb3J0IGNvbnN0IHNlbGVjdENhY2hlID0gKGtleTogQ2FjaGVLZXkpID0+XG4gIGNyZWF0ZVNlbGVjdG9yKGNhY2hlU3RhdGVTZWxlY3RvciwgKHN0YXRlKSA9PlxuICAgIGdldENhY2hlVmFsdWUoaGFzaEtleShrZXkpLCBzdGF0ZSlcbiAgKTtcbiJdfQ==","import { createAction, props } from '@ngrx/store';\nexport const cache = createAction('[Cache] Cache', props());\nexport const hitCache = createAction('[Cache] Hit Cache', props());\nexport const invalidateCache = createAction('[Cache] Invalidate Cache', props());\nexport const deleteCache = createAction('[Cache] Delete Cache', props());\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10cmFpdHMvY29yZS9zcmMvbGliL2NhY2hlL2NhY2hlLmFjdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHbEQsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLFlBQVksQ0FDL0IsZUFBZSxFQUNmLEtBQUssRUFNRCxDQUNMLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsWUFBWSxDQUNsQyxtQkFBbUIsRUFDbkIsS0FBSyxFQUFxQixDQUMzQixDQUFDO0FBQ0YsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FDekMsMEJBQTBCLEVBQzFCLEtBQUssRUFBcUIsQ0FDM0IsQ0FBQztBQUNGLE1BQU0sQ0FBQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQ3JDLHNCQUFzQixFQUN0QixLQUFLLEVBQXFCLENBQzNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVBY3Rpb24sIHByb3BzIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgQ2FjaGVLZXkgfSBmcm9tICcuL2NhY2hlLm1vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBjYWNoZSA9IGNyZWF0ZUFjdGlvbihcbiAgJ1tDYWNoZV0gQ2FjaGUnLFxuICBwcm9wczx7XG4gICAga2V5OiBDYWNoZUtleTtcbiAgICB2YWx1ZTogYW55O1xuICAgIGRhdGU6IG51bWJlcjtcbiAgICBtYXhDYWNoZVNpemU/OiBudW1iZXI7XG4gICAgZXhwaXJlcz86IG51bWJlcjtcbiAgfT4oKVxuKTtcbmV4cG9ydCBjb25zdCBoaXRDYWNoZSA9IGNyZWF0ZUFjdGlvbihcbiAgJ1tDYWNoZV0gSGl0IENhY2hlJyxcbiAgcHJvcHM8eyBrZXk6IENhY2hlS2V5IH0+KClcbik7XG5leHBvcnQgY29uc3QgaW52YWxpZGF0ZUNhY2hlID0gY3JlYXRlQWN0aW9uKFxuICAnW0NhY2hlXSBJbnZhbGlkYXRlIENhY2hlJyxcbiAgcHJvcHM8eyBrZXk6IENhY2hlS2V5IH0+KClcbik7XG5leHBvcnQgY29uc3QgZGVsZXRlQ2FjaGUgPSBjcmVhdGVBY3Rpb24oXG4gICdbQ2FjaGVdIERlbGV0ZSBDYWNoZScsXG4gIHByb3BzPHsga2V5OiBDYWNoZUtleSB9PigpXG4pO1xuIl19","import { of } from 'rxjs';\nimport { isCacheValid } from './cache.models';\nimport { selectCache } from './cache.selectors';\nimport { concatMap, first, tap } from 'rxjs/operators';\nimport * as CacheActions from './cache.actions';\n/**\n * Cache the result of source parameter using the provided key, when call\n * again if the cache is valid (exist and is not expired or invalidated)\n * it will return the cache value without calling again source\n * @example\n * // cache for 3 min\n * loadStores$ = createEffect(() => {\n * return this.actions$.pipe(\n * ofType(ProductStoreActions.loadStores),\n * exhaustMap(() =>\n * cache({\n * key: ['stores'],\n * store: this.store,\n * source: this.storeService.getStores(),\n * expire: 1000 * 60 * 3 // optional param , cache forever if not present\n * }).pipe(\n * map((res) => ProductStoreActions.loadStoresSuccess({ entities: res })),\n * catchError(() => of(ProductStoreActions.loadStoresFail()))\n * )\n * )\n * );\n * });\n * // cache top 10, for 3 mins\n * loadDepartments$ = createEffect(() => {\n * return this.actions$.pipe(\n * ofType(this.localActions.loadDepartments),\n * concatLatestFrom(() =>\n * this.store.select(this.localSelectors.selectDepartmentsFilter)\n * ),\n * exhaustMap(([_, filters]) =>\n * cache({\n * key: ['stores','departments',{ storeId: filters!.storeId },\n * store: this.store,\n * source: this.storeService.getStoreDepartments(filters!.storeId),\n * expires: 1000 * 60 * 3,\n * maxCacheSize: 10,\n * }).pipe(\n * map((res) =>\n * this.localActions.loadDepartmentsSuccess({\n * entities: res,\n * })\n * ),\n * catchError(() => of(this.localActions.loadDepartmentsFail()))\n * )\n * )\n * );\n * });\n *\n * @param options - configuration\n * @param options.store - required ngrx store\n * @param options.key - key can be string, array of string or array of string with plain objects\n * @param options.source - called when cache is invalid\n * @param options.expires - time to expire the cache valued, if not present is infinite\n * @param options.maxCacheSize - max number of keys to store , only works if last key is variable\n */\nexport function cache({ store, key, source, expires, maxCacheSize, skip, }) {\n const exp = expires ?? Infinity;\n return store.select(selectCache(key)).pipe(first(), concatMap((cache) => cache && !skip && isCacheValid(cache, exp)\n ? of(cache.value).pipe(tap(() => store.dispatch(CacheActions.hitCache({ key }))))\n : source.pipe(tap((value) => store.dispatch(CacheActions.cache({\n key,\n date: Date.now(),\n value,\n maxCacheSize,\n }))))));\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10cmFpdHMvY29yZS9zcmMvbGliL2NhY2hlL2NhY2hlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQXVCLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN2RCxPQUFPLEtBQUssWUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRWhEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FzREc7QUFDSCxNQUFNLFVBQVUsS0FBSyxDQUFJLEVBQ3ZCLEtBQUssRUFDTCxHQUFHLEVBQ0gsTUFBTSxFQUNOLE9BQU8sRUFDUCxZQUFZLEVBQ1osSUFBSSxHQVFMO0lBQ0MsTUFBTSxHQUFHLEdBQUcsT0FBTyxJQUFJLFFBQVEsQ0FBQztJQUNoQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUN4QyxLQUFLLEVBQUUsRUFDUCxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUNsQixLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUM7UUFDeEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUNsQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQzFEO1FBQ0gsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ1QsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDWixLQUFLLENBQUMsUUFBUSxDQUNaLFlBQVksQ0FBQyxLQUFLLENBQUM7WUFDakIsR0FBRztZQUNILElBQUksRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ2hCLEtBQUs7WUFDTCxZQUFZO1NBQ2IsQ0FBQyxDQUNILENBQ0YsQ0FDRixDQUNOLENBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDYWNoZURhdGEsIENhY2hlS2V5LCBpc0NhY2hlVmFsaWQgfSBmcm9tICcuL2NhY2hlLm1vZGVscyc7XG5pbXBvcnQgeyBzZWxlY3RDYWNoZSB9IGZyb20gJy4vY2FjaGUuc2VsZWN0b3JzJztcbmltcG9ydCB7IGNvbmNhdE1hcCwgZmlyc3QsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCAqIGFzIENhY2hlQWN0aW9ucyBmcm9tICcuL2NhY2hlLmFjdGlvbnMnO1xuXG4vKipcbiAqIENhY2hlIHRoZSByZXN1bHQgb2Ygc291cmNlIHBhcmFtZXRlciB1c2luZyB0aGUgcHJvdmlkZWQga2V5LCB3aGVuIGNhbGxcbiAqIGFnYWluIGlmIHRoZSBjYWNoZSBpcyB2YWxpZCAoZXhpc3QgYW5kIGlzIG5vdCBleHBpcmVkIG9yIGludmFsaWRhdGVkKVxuICogaXQgd2lsbCByZXR1cm4gdGhlIGNhY2hlIHZhbHVlIHdpdGhvdXQgY2FsbGluZyBhZ2FpbiBzb3VyY2VcbiAqIEBleGFtcGxlXG4gKiAvLyBjYWNoZSBmb3IgMyBtaW5cbiAqIGxvYWRTdG9yZXMkID0gY3JlYXRlRWZmZWN0KCgpID0+IHtcbiAqICAgcmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShcbiAqICAgICBvZlR5cGUoUHJvZHVjdFN0b3JlQWN0aW9ucy5sb2FkU3RvcmVzKSxcbiAqICAgICBleGhhdXN0TWFwKCgpID0+XG4gKiAgICAgICBjYWNoZSh7XG4gKiAgICAgICAgIGtleTogWydzdG9yZXMnXSxcbiAqICAgICAgICAgc3RvcmU6IHRoaXMuc3RvcmUsXG4gKiAgICAgICAgIHNvdXJjZTogdGhpcy5zdG9yZVNlcnZpY2UuZ2V0U3RvcmVzKCksXG4gKiAgICAgICAgIGV4cGlyZTogMTAwMCAqIDYwICogMyAvLyBvcHRpb25hbCBwYXJhbSAsIGNhY2hlIGZvcmV2ZXIgaWYgbm90IHByZXNlbnRcbiAqICAgICAgIH0pLnBpcGUoXG4gKiAgICAgICAgIG1hcCgocmVzKSA9PiBQcm9kdWN0U3RvcmVBY3Rpb25zLmxvYWRTdG9yZXNTdWNjZXNzKHsgZW50aXRpZXM6IHJlcyB9KSksXG4gKiAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YoUHJvZHVjdFN0b3JlQWN0aW9ucy5sb2FkU3RvcmVzRmFpbCgpKSlcbiAqICAgICAgIClcbiAqICAgICApXG4gKiAgICk7XG4gKiB9KTtcbiAqIC8vIGNhY2hlIHRvcCAxMCwgZm9yIDMgbWluc1xuICogICBsb2FkRGVwYXJ0bWVudHMkID0gY3JlYXRlRWZmZWN0KCgpID0+IHtcbiAqICAgcmV0dXJuIHRoaXMuYWN0aW9ucyQucGlwZShcbiAqICAgICBvZlR5cGUodGhpcy5sb2NhbEFjdGlvbnMubG9hZERlcGFydG1lbnRzKSxcbiAqICAgICBjb25jYXRMYXRlc3RGcm9tKCgpID0+XG4gKiAgICAgICB0aGlzLnN0b3JlLnNlbGVjdCh0aGlzLmxvY2FsU2VsZWN0b3JzLnNlbGVjdERlcGFydG1lbnRzRmlsdGVyKVxuICogICAgICksXG4gKiAgICAgZXhoYXVzdE1hcCgoW18sIGZpbHRlcnNdKSA9PlxuICogICAgICAgY2FjaGUoe1xuICogICAgICAgICBrZXk6IFsnc3RvcmVzJywnZGVwYXJ0bWVudHMnLHsgc3RvcmVJZDogZmlsdGVycyEuc3RvcmVJZCB9LFxuICogICAgICAgICBzdG9yZTogdGhpcy5zdG9yZSxcbiAqICAgICAgICAgc291cmNlOiB0aGlzLnN0b3JlU2VydmljZS5nZXRTdG9yZURlcGFydG1lbnRzKGZpbHRlcnMhLnN0b3JlSWQpLFxuICogICAgICAgICBleHBpcmVzOiAxMDAwICogNjAgKiAzLFxuICogICAgICAgICBtYXhDYWNoZVNpemU6IDEwLFxuICogICAgICAgfSkucGlwZShcbiAqICAgICAgICAgbWFwKChyZXMpID0+XG4gKiAgICAgICAgICAgdGhpcy5sb2NhbEFjdGlvbnMubG9hZERlcGFydG1lbnRzU3VjY2Vzcyh7XG4gKiAgICAgICAgICAgICBlbnRpdGllczogcmVzLFxuICogICAgICAgICAgIH0pXG4gKiAgICAgICAgICksXG4gKiAgICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gb2YodGhpcy5sb2NhbEFjdGlvbnMubG9hZERlcGFydG1lbnRzRmFpbCgpKSlcbiAqICAgICAgIClcbiAqICAgICApXG4gKiAgICk7XG4gKiB9KTtcbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBvcHRpb25zLnN0b3JlIC0gcmVxdWlyZWQgbmdyeCBzdG9yZVxuICogQHBhcmFtIG9wdGlvbnMua2V5IC0ga2V5IGNhbiBiZSBzdHJpbmcsIGFycmF5IG9mIHN0cmluZyBvciBhcnJheSBvZiBzdHJpbmcgd2l0aCBwbGFpbiBvYmplY3RzXG4gKiBAcGFyYW0gb3B0aW9ucy5zb3VyY2UgLSBjYWxsZWQgd2hlbiBjYWNoZSBpcyBpbnZhbGlkXG4gKiBAcGFyYW0gb3B0aW9ucy5leHBpcmVzIC0gdGltZSB0byBleHBpcmUgdGhlIGNhY2hlIHZhbHVlZCwgaWYgbm90IHByZXNlbnQgaXMgaW5maW5pdGVcbiAqIEBwYXJhbSBvcHRpb25zLm1heENhY2hlU2l6ZSAtIG1heCBudW1iZXIgb2Yga2V5cyB0byBzdG9yZSAsIG9ubHkgd29ya3MgaWYgbGFzdCBrZXkgaXMgdmFyaWFibGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhY2hlPFQ+KHtcbiAgc3RvcmUsXG4gIGtleSxcbiAgc291cmNlLFxuICBleHBpcmVzLFxuICBtYXhDYWNoZVNpemUsXG4gIHNraXAsXG59OiB7XG4gIHN0b3JlOiBTdG9yZTtcbiAga2V5OiBDYWNoZUtleTtcbiAgc291cmNlOiBPYnNlcnZhYmxlPFQ+O1xuICBleHBpcmVzPzogbnVtYmVyO1xuICBtYXhDYWNoZVNpemU/OiBudW1iZXI7XG4gIHNraXA/OiBib29sZWFuO1xufSkge1xuICBjb25zdCBleHAgPSBleHBpcmVzID8/IEluZmluaXR5O1xuICByZXR1cm4gc3RvcmUuc2VsZWN0KHNlbGVjdENhY2hlKGtleSkpLnBpcGUoXG4gICAgZmlyc3QoKSxcbiAgICBjb25jYXRNYXAoKGNhY2hlKSA9PlxuICAgICAgY2FjaGUgJiYgIXNraXAgJiYgaXNDYWNoZVZhbGlkKGNhY2hlLCBleHApXG4gICAgICAgID8gb2YoY2FjaGUudmFsdWUpLnBpcGUoXG4gICAgICAgICAgICB0YXAoKCkgPT4gc3RvcmUuZGlzcGF0Y2goQ2FjaGVBY3Rpb25zLmhpdENhY2hlKHsga2V5IH0pKSlcbiAgICAgICAgICApXG4gICAgICAgIDogc291cmNlLnBpcGUoXG4gICAgICAgICAgICB0YXAoKHZhbHVlKSA9PlxuICAgICAgICAgICAgICBzdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICAgICAgICBDYWNoZUFjdGlvbnMuY2FjaGUoe1xuICAgICAgICAgICAgICAgICAga2V5LFxuICAgICAgICAgICAgICAgICAgZGF0ZTogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgbWF4Q2FjaGVTaXplLFxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgKVxuICApO1xufVxuIl19","import { createReducer, on } from '@ngrx/store';\nimport { hashKey, isCacheValid, } from './cache.models';\nimport * as CacheActions from './cache.actions';\nexport const initialState = {\n keys: {},\n};\nexport const cacheReducer = createReducer(initialState, on(CacheActions.cache, (state, { key, value, date, maxCacheSize }) => setCacheValue(hashKey(key), { value, date, invalid: false }, state, maxCacheSize)), on(CacheActions.invalidateCache, (state, { key }) => {\n const k = hashKey(key);\n return invalidateCache(k, state);\n}), on(CacheActions.deleteCache, (state, { key }) => {\n const k = hashKey(key);\n return deleteCacheValue(k, state);\n}), on(CacheActions.hitCache, (state, { key }) => {\n const k = hashKey(key);\n return increaseCacheHitCount(k, state);\n}));\nfunction setCacheValue(keys, value, state, maxCacheSize, expires) {\n const newState = { ...state };\n let cache = newState;\n let lastCache = undefined;\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n cache.keys = cache?.keys ? { ...cache?.keys } : {};\n let v = cache.keys[key];\n v = v ? { ...v } : {};\n cache.keys[key] = v;\n lastCache = cache;\n cache = v;\n }\n cache.data = cache.data\n ? { ...value, hitCount: cache.data.hitCount + 1 }\n : { ...value, hitCount: 1 };\n if (maxCacheSize &&\n lastCache?.keys &&\n Object.keys(lastCache.keys).length > maxCacheSize) {\n const entries = findLessHitOrOldestCacheEntries(lastCache, expires ?? Infinity, maxCacheSize);\n if (entries && entries.length) {\n for (const [key] of entries) {\n delete lastCache.keys[key];\n }\n }\n }\n return newState;\n}\nfunction findLessHitOrOldestCacheEntries(state, expires, maxCacheSize) {\n if (!state.keys)\n return undefined;\n const entries = Object.entries(state.keys);\n // find the newest key;\n const [newestKey] = entries.reduce((a, b) => {\n const aDate = a[1].data?.date ?? 0;\n const bDate = b[1].data?.date ?? 0;\n return aDate > bDate ? a : b;\n });\n const sorted = entries.sort(([aKey, aValue], [bKey, bValue]) => {\n // ensures the newest key always wins\n if (aKey === newestKey)\n return -1;\n if (bKey === newestKey)\n return 1;\n const aValid = aValue.data && isCacheValid(aValue.data, expires) ? 1 : 0;\n const bValid = bValue.data && isCacheValid(bValue.data, expires) ? 1 : 0;\n const diffValid = aValid - bValid;\n const diffHit = (aValue.data?.hitCount ?? 0) - (bValue.data?.hitCount ?? 0);\n const diffDate = (aValue.data?.date ?? 0) - (bValue.data?.date ?? 0);\n return (-1 * (diffValid === 0 ? (diffHit === 0 ? diffDate : diffHit) : diffValid));\n });\n return sorted.slice(maxCacheSize);\n}\nfunction deleteCacheValue(keys, state) {\n const newState = { ...state };\n let cache = newState;\n for (const key of keys) {\n if (!cache.keys)\n return state;\n cache.keys = { ...cache?.keys };\n let v = cache.keys[key];\n if (!v)\n return state;\n v = { ...v };\n cache.keys[key] = v;\n cache = v;\n }\n if (cache.data)\n delete cache.data;\n else if (cache.keys)\n delete cache.keys;\n return newState;\n}\nfunction invalidateCache(keys, state) {\n const newState = { ...state };\n let cache = newState;\n for (const key of keys) {\n if (!cache?.keys)\n return state;\n cache.keys = { ...cache?.keys };\n let v = cache?.keys?.[key];\n if (!v)\n return state;\n v = { ...v };\n cache.keys[key] = v;\n cache = v;\n }\n cache && invalidaSubKeys(cache);\n return newState;\n}\nfunction increaseCacheHitCount(keys, state) {\n const newState = { ...state };\n let cache = newState;\n for (const key of keys) {\n if (!cache?.keys)\n return state;\n cache.keys = { ...cache?.keys };\n let v = cache?.keys?.[key];\n if (!v)\n return state;\n v = { ...v };\n cache.keys[key] = v;\n cache = v;\n }\n if (!cache.data)\n return state;\n cache.data = { ...cache.data, hitCount: cache.data.hitCount + 1 };\n return newState;\n}\nfunction invalidaSubKeys(state) {\n if (state.data) {\n state.data = { ...state.data, invalid: true };\n }\n if (state.keys) {\n state.keys = { ...state.keys };\n for (const key in state.keys) {\n state.keys[key] = invalidaSubKeys({ ...state.keys[key] });\n }\n }\n return state;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUucmVkdWNlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10cmFpdHMvY29yZS9zcmMvbGliL2NhY2hlL2NhY2hlLnJlZHVjZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGFBQWEsRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDaEQsT0FBTyxFQUlMLE9BQU8sRUFDUCxZQUFZLEdBQ2IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEtBQUssWUFBWSxNQUFNLGlCQUFpQixDQUFDO0FBRWhELE1BQU0sQ0FBQyxNQUFNLFlBQVksR0FBZTtJQUN0QyxJQUFJLEVBQUUsRUFBRTtDQUNULENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsYUFBYSxDQUN2QyxZQUFZLEVBQ1osRUFBRSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLENBQ25FLGFBQWEsQ0FDWCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQ1osRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFDL0IsS0FBSyxFQUNMLFlBQVksQ0FDYixDQUNGLEVBQ0QsRUFBRSxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQ2xELE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QixPQUFPLGVBQWUsQ0FBQyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkMsQ0FBQyxDQUFDLEVBQ0YsRUFBRSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFO0lBQzlDLE1B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ZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlUmVkdWNlciwgb24gfSBmcm9tICdAbmdyeC9zdG9yZSc7XG5pbXBvcnQge1xuICBDYWNoZURhdGEsXG4gIENhY2hlS2V5cyxcbiAgQ2FjaGVTdGF0ZSxcbiAgaGFzaEtleSxcbiAgaXNDYWNoZVZhbGlkLFxufSBmcm9tICcuL2NhY2hlLm1vZGVscyc7XG5pbXBvcnQgKiBhcyBDYWNoZUFjdGlvbnMgZnJvbSAnLi9jYWNoZS5hY3Rpb25zJztcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxTdGF0ZTogQ2FjaGVTdGF0ZSA9IHtcbiAga2V5czoge30sXG59O1xuXG5leHBvcnQgY29uc3QgY2FjaGVSZWR1Y2VyID0gY3JlYXRlUmVkdWNlcihcbiAgaW5pdGlhbFN0YXRlLFxuICBvbihDYWNoZUFjdGlvbnMuY2FjaGUsIChzdGF0ZSwgeyBrZXksIHZhbHVlLCBkYXRlLCBtYXhDYWNoZVNpemUgfSkgPT5cbiAgICBzZXRDYWNoZVZhbHVlKFxuICAgICAgaGFzaEtleShrZXkpLFxuICAgICAgeyB2YWx1ZSwgZGF0ZSwgaW52YWxpZDogZmFsc2UgfSxcbiAgICAgIHN0YXRlLFxuICAgICAgbWF4Q2FjaGVTaXplXG4gICAgKVxuICApLFxuICBvbihDYWNoZUFjdGlvbnMuaW52YWxpZGF0ZUNhY2hlLCAoc3RhdGUsIHsga2V5IH0pID0+IHtcbiAgICBjb25zdCBrID0gaGFzaEtleShrZXkpO1xuICAgIHJldHVybiBpbnZhbGlkYXRlQ2FjaGUoaywgc3RhdGUpO1xuICB9KSxcbiAgb24oQ2FjaGVBY3Rpb25zLmRlbGV0ZUNhY2hlLCAoc3RhdGUsIHsga2V5IH0pID0+IHtcbiAgICBjb25zdCBrID0gaGFzaEtleShrZXkpO1xuICAgIHJldHVybiBkZWxldGVDYWNoZVZhbHVlKGssIHN0YXRlKTtcbiAgfSksXG4gIG9uKENhY2hlQWN0aW9ucy5oaXRDYWNoZSwgKHN0YXRlLCB7IGtleSB9KSA9PiB7XG4gICAgY29uc3QgayA9IGhhc2hLZXkoa2V5KTtcbiAgICByZXR1cm4gaW5jcmVhc2VDYWNoZUhpdENvdW50KGssIHN0YXRlKTtcbiAgfSlcbik7XG5cbmZ1bmN0aW9uIHNldENhY2hlVmFsdWUoXG4gIGtleXM6IHN0cmluZ1tdLFxuICB2YWx1ZTogT21pdDxDYWNoZURhdGEsICdoaXRDb3VudCc+LFxuICBzdGF0ZTogQ2FjaGVTdGF0ZSxcbiAgbWF4Q2FjaGVTaXplPzogbnVtYmVyLFxuICBleHBpcmVzPzogbnVtYmVyXG4pIHtcbiAgY29uc3QgbmV3U3RhdGUgPSB7IC4uLnN0YXRlIH07XG4gIGxldCBjYWNoZSA9IG5ld1N0YXRlO1xuICBsZXQgbGFzdENhY2hlOiBDYWNoZUtleXMgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgY2FjaGUua2V5cyA9IGNhY2hlPy5rZXlzID8geyAuLi5jYWNoZT8ua2V5cyB9IDoge307XG4gICAgbGV0IHYgPSBjYWNoZS5rZXlzW2tleV07XG4gICAgdiA9IHYgPyB7IC4uLnYgfSA6IHt9O1xuICAgIGNhY2hlLmtleXNba2V5XSA9IHY7XG4gICAgbGFzdENhY2hlID0gY2FjaGU7XG4gICAgY2FjaGUgPSB2O1xuICB9XG4gIGNhY2hlLmRhdGEgPSBjYWNoZS5kYXRhXG4gICAgPyB7IC4uLnZhbHVlLCBoaXRDb3VudDogY2FjaGUuZGF0YS5oaXRDb3VudCArIDEgfVxuICAgIDogeyAuLi52YWx1ZSwgaGl0Q291bnQ6IDEgfTtcblxuICBpZiAoXG4gICAgbWF4Q2FjaGVTaXplICYmXG4gICAgbGFzdENhY2hlPy5rZXlzICYmXG4gICAgT2JqZWN0LmtleXMobGFzdENhY2hlLmtleXMpLmxlbmd0aCA+IG1heENhY2hlU2l6ZVxuICApIHtcbiAgICBjb25zdCBlbnRyaWVzID0gZmluZExlc3NIaXRPck9sZGVzdENhY2hlRW50cmllcyhcbiAgICAgIGxhc3RDYWNoZSxcbiAgICAgIGV4cGlyZXMgPz8gSW5maW5pdHksXG4gICAgICBtYXhDYWNoZVNpemVcbiAgICApO1xuICAgIGlmIChlbnRyaWVzICYmIGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXldIG9mIGVudHJpZXMpIHtcbiAgICAgICAgZGVsZXRlIGxhc3RDYWNoZS5rZXlzW2tleV07XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuZXdTdGF0ZTtcbn1cblxuZnVuY3Rpb24gZmluZExlc3NIaXRPck9sZGVzdENhY2hlRW50cmllcyhcbiAgc3RhdGU6IENhY2hlS2V5cyxcbiAgZXhwaXJlczogbnVtYmVyLFxuICBtYXhDYWNoZVNpemU6IG51bWJlclxuKSB7XG4gIGlmICghc3RhdGUua2V5cykgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHN0YXRlLmtleXMpO1xuICAvLyBmaW5kIHRoZSBuZXdlc3Qga2V5O1xuICBjb25zdCBbbmV3ZXN0S2V5XSA9IGVudHJpZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgY29uc3QgYURhdGUgPSBhWzFdLmRhdGE/LmRhdGUgPz8gMDtcbiAgICBjb25zdCBiRGF0ZSA9IGJbMV0uZGF0YT8uZGF0ZSA/PyAwO1xuICAgIHJldHVybiBhRGF0ZSA+IGJEYXRlID8gYSA6IGI7XG4gIH0pO1xuICBjb25zdCBzb3J0ZWQgPSBlbnRyaWVzLnNvcnQoKFthS2V5LCBhVmFsdWVdLCBbYktleSwgYlZhbHVlXSkgPT4ge1xuICAgIC8vIGVuc3VyZXMgdGhlIG5ld2VzdCBrZXkgYWx3YXlzIHdpbnNcbiAgICBpZiAoYUtleSA9PT0gbmV3ZXN0S2V5KSByZXR1cm4gLTE7XG4gICAgaWYgKGJLZXkgPT09IG5ld2VzdEtleSkgcmV0dXJuIDE7XG4gICAgY29uc3QgYVZhbGlkID0gYVZhbHVlLmRhdGEgJiYgaXNDYWNoZVZhbGlkKGFWYWx1ZS5kYXRhLCBleHBpcmVzKSA/IDEgOiAwO1xuICAgIGNvbnN0IGJWYWxpZCA9IGJWYWx1ZS5kYXRhICYmIGlzQ2FjaGVWYWxpZChiVmFsdWUuZGF0YSwgZXhwaXJlcykgPyAxIDogMDtcbiAgICBjb25zdCBkaWZmVmFsaWQgPSBhVmFsaWQgLSBiVmFsaWQ7XG4gICAgY29uc3QgZGlmZkhpdCA9IChhVmFsdWUuZGF0YT8uaGl0Q291bnQgPz8gMCkgLSAoYlZhbHVlLmRhdGE/LmhpdENvdW50ID8/IDApO1xuICAgIGNvbnN0IGRpZmZEYXRlID0gKGFWYWx1ZS5kYXRhPy5kYXRlID8/IDApIC0gKGJWYWx1ZS5kYXRhPy5kYXRlID8/IDApO1xuICAgIHJldHVybiAoXG4gICAgICAtMSAqIChkaWZmVmFsaWQgPT09IDAgPyAoZGlmZkhpdCA9PT0gMCA/IGRpZmZEYXRlIDogZGlmZkhpdCkgOiBkaWZmVmFsaWQpXG4gICAgKTtcbiAgfSk7XG4gIHJldHVybiBzb3J0ZWQuc2xpY2UobWF4Q2FjaGVTaXplKTtcbn1cblxuZnVuY3Rpb24gZGVsZXRlQ2FjaGVWYWx1ZShrZXlzOiBzdHJpbmdbXSwgc3RhdGU6IENhY2hlU3RhdGUpIHtcbiAgY29uc3QgbmV3U3RhdGUgPSB7IC4uLnN0YXRlIH07XG4gIGxldCBjYWNoZSA9IG5ld1N0YXRlO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgaWYgKCFjYWNoZS5rZXlzKSByZXR1cm4gc3RhdGU7XG4gICAgY2FjaGUua2V5cyA9IHsgLi4uY2FjaGU/LmtleXMgfTtcbiAgICBsZXQgdiA9IGNhY2hlLmtleXNba2V5XTtcbiAgICBpZiAoIXYpIHJldHVybiBzdGF0ZTtcbiAgICB2ID0geyAuLi52IH07XG4gICAgY2FjaGUua2V5c1trZXldID0gdjtcbiAgICBjYWNoZSA9IHY7XG4gIH1cbiAgaWYgKGNhY2hlLmRhdGEpIGRlbGV0ZSBjYWNoZS5kYXRhO1xuICBlbHNlIGlmIChjYWNoZS5rZXlzKSBkZWxldGUgY2FjaGUua2V5cztcbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBpbnZhbGlkYXRlQ2FjaGUoa2V5czogc3RyaW5nW10sIHN0YXRlOiBDYWNoZVN0YXRlKSB7XG4gIGNvbnN0IG5ld1N0YXRlID0geyAuLi5zdGF0ZSB9O1xuICBsZXQgY2FjaGUgPSBuZXdTdGF0ZTtcbiAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgIGlmICghY2FjaGU/LmtleXMpIHJldHVybiBzdGF0ZTtcbiAgICBjYWNoZS5rZXlzID0geyAuLi5jYWNoZT8ua2V5cyB9O1xuICAgIGxldCB2ID0gY2FjaGU/LmtleXM/LltrZXldO1xuICAgIGlmICghdikgcmV0dXJuIHN0YXRlO1xuICAgIHYgPSB7IC4uLnYgfTtcbiAgICBjYWNoZS5rZXlzW2tleV0gPSB2O1xuICAgIGNhY2hlID0gdjtcbiAgfVxuICBjYWNoZSAmJiBpbnZhbGlkYVN1YktleXMoY2FjaGUpO1xuICByZXR1cm4gbmV3U3RhdGU7XG59XG5cbmZ1bmN0aW9uIGluY3JlYXNlQ2FjaGVIaXRDb3VudChrZXlzOiBzdHJpbmdbXSwgc3RhdGU6IENhY2hlU3RhdGUpIHtcbiAgY29uc3QgbmV3U3RhdGUgPSB7IC4uLnN0YXRlIH07XG4gIGxldCBjYWNoZSA9IG5ld1N0YXRlO1xuICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgaWYgKCFjYWNoZT8ua2V5cykgcmV0dXJuIHN0YXRlO1xuICAgIGNhY2hlLmtleXMgPSB7IC4uLmNhY2hlPy5rZXlzIH07XG4gICAgbGV0IHYgPSBjYWNoZT8ua2V5cz8uW2tleV07XG4gICAgaWYgKCF2KSByZXR1cm4gc3RhdGU7XG4gICAgdiA9IHsgLi4udiB9O1xuICAgIGNhY2hlLmtleXNba2V5XSA9IHY7XG4gICAgY2FjaGUgPSB2O1xuICB9XG4gIGlmICghY2FjaGUuZGF0YSkgcmV0dXJuIHN0YXRlO1xuICBjYWNoZS5kYXRhID0geyAuLi5jYWNoZS5kYXRhLCBoaXRDb3VudDogY2FjaGUuZGF0YS5oaXRDb3VudCArIDEgfTtcbiAgcmV0dXJuIG5ld1N0YXRlO1xufVxuXG5mdW5jdGlvbiBpbnZhbGlkYVN1YktleXMoc3RhdGU6IENhY2hlS2V5cykge1xuICBpZiAoc3RhdGUuZGF0YSkge1xuICAgIHN0YXRlLmRhdGEgPSB7IC4uLnN0YXRlLmRhdGEsIGludmFsaWQ6IHRydWUgfTtcbiAgfVxuICBpZiAoc3RhdGUua2V5cykge1xuICAgIHN0YXRlLmtleXMgPSB7IC4uLnN0YXRlLmtleXMgfTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBzdGF0ZS5rZXlzKSB7XG4gICAgICBzdGF0ZS5rZXlzW2tleV0gPSBpbnZhbGlkYVN1YktleXMoeyAuLi5zdGF0ZS5rZXlzW2tleV0gfSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzdGF0ZTtcbn1cbiJdfQ==","import { NgModule } from '@angular/core';\nimport { StoreModule } from '@ngrx/store';\nimport { cacheReducer } from './cache.reducer';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@ngrx/store\";\nexport class CacheModule {\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: CacheModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }\n static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: \"14.0.0\", version: \"20.0.0\", ngImport: i0, type: CacheModule, imports: [i1.StoreFeatureModule] }); }\n static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: CacheModule, imports: [StoreModule.forFeature('cache', cacheReducer)] }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.0\", ngImport: i0, type: CacheModule, decorators: [{\n type: NgModule,\n args: [{\n imports: [StoreModule.forFeature('cache', cacheReducer)],\n providers: [],\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FjaGUubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9uZ3J4LXRyYWl0cy9jb3JlL3NyYy9saWIvY2FjaGUvY2FjaGUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7OztBQU0vQyxNQUFNLE9BQU8sV0FBVzs4R0FBWCxXQUFXOytHQUFYLFdBQVc7K0dBQVgsV0FBVyxZQUhaLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLFlBQVksQ0FBQzs7MkZBRzVDLFdBQVc7a0JBSnZCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsWUFBWSxDQUFDLENBQUM7b0JBQ3hELFNBQVMsRUFBRSxFQUFFO2lCQUNkIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0b3JlTW9kdWxlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgY2FjaGVSZWR1Y2VyIH0gZnJvbSAnLi9jYWNoZS5yZWR1Y2VyJztcblxuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW1N0b3JlTW9kdWxlLmZvckZlYXR1cmUoJ2NhY2hlJywgY2FjaGVSZWR1Y2VyKV0sXG4gIHByb3ZpZGVyczogW10sXG59KVxuZXhwb3J0IGNsYXNzIENhY2hlTW9kdWxlIHt9XG4iXX0=","export * from './cache.service';\nexport * from './cache.module';\nimport { invalidateCache, deleteCache } from './cache.actions';\nimport { selectCache } from './cache.selectors';\nexport const CacheActions = { invalidateCache, deleteCache };\nexport const CacheSelectors = { getCache: selectCache };\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL25ncngtdHJhaXRzL2NvcmUvc3JjL2xpYi9jYWNoZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsT0FBTyxFQUFFLGVBQWUsRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDaEQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxDQUFDO0FBQzdELE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY2FjaGUuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2NhY2hlLm1vZHVsZSc7XG5pbXBvcnQgeyBpbnZhbGlkYXRlQ2FjaGUsIGRlbGV0ZUNhY2hlIH0gZnJvbSAnLi9jYWNoZS5hY3Rpb25zJztcbmltcG9ydCB7IHNlbGVjdENhY2hlIH0gZnJvbSAnLi9jYWNoZS5zZWxlY3RvcnMnO1xuZXhwb3J0IGNvbnN0IENhY2hlQWN0aW9ucyA9IHsgaW52YWxpZGF0ZUNhY2hlLCBkZWxldGVDYWNoZSB9O1xuZXhwb3J0IGNvbnN0IENhY2hlU2VsZWN0b3JzID0geyBnZXRDYWNoZTogc2VsZWN0Q2FjaGUgfTtcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdyeC10cmFpdHMtY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvbmdyeC10cmFpdHMvY29yZS9zcmMvbGliL25ncngtdHJhaXRzLWNvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":["cache","invalidateCache","CacheActions.hitCache","CacheActions.cache","CacheActions.invalidateCache","CacheActions.deleteCache"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngrx-traits-core.mjs","sources":["../../../../../libs/ngrx-traits/core/src/lib/util.ts","../../../../../libs/ngrx-traits/core/src/lib/create-entity-feature.ts","../../../../../libs/ngrx-traits/core/src/lib/trait-effect.ts","../../../../../libs/ngrx-traits/core/src/lib/local-store/disable-local-trait-effects.token.ts","../../../../../libs/ngrx-traits/core/src/lib/local-store/traits-local-store.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.models.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.selectors.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.actions.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.service.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.reducer.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/cache.module.ts","../../../../../libs/ngrx-traits/core/src/lib/cache/index.ts","../../../../../libs/ngrx-traits/core/src/lib/ngrx-traits-core.ts"],"sourcesContent":["import { ActionCreator } from '@ngrx/store';\nimport { ActionType } from '@ngrx/store';\nimport { ReducerTypes } from '@ngrx/store';\n\nexport function insertIf<State>(\n condition: any,\n getElement: () => ReducerTypes<State, ActionCreator[]>,\n): ReducerTypes<State, ActionCreator[]>[] {\n return condition ? [getElement()] : [];\n}\nexport function toMap(a: Array<string | number>) {\n return a.reduce((acum: { [key: string]: boolean }, value) => {\n acum[value] = true;\n return acum;\n }, {});\n}\n\nexport function capitalize(name: string) {\n return name.charAt(0).toUpperCase() + name.slice(1);\n}\n\nexport function camelCaseToSentence(text: string) {\n const result = text.replace(/([A-Z])/g, ' $1');\n return result.charAt(0).toUpperCase() + result.slice(1);\n}\n\n/**\n * Set propertyReducer in sourceReducer in a property of the source state,\n * @param sourceReducer\n * @param property\n * @param propertyReducer\n *\n * @example\n *\n * const newReducer = setPropertyReducer(productsReducer, 'selectedProduct', selectedProductReducer)\n */\nexport function setPropertyReducer<State, P extends keyof State>(\n sourceReducer: (state: State, action: ActionType<any>) => State,\n property: P,\n propertyReducer: (state: State[P], action: ActionType<any>) => State[P],\n): (state: State, action: ActionType<any>) => State {\n return function reducer(state: State, action: ActionType<any>): State {\n const sourceState = sourceReducer(state, action);\n return {\n ...sourceState,\n [property]: propertyReducer(sourceState[property], action),\n };\n };\n}\n\n/**\n * Set propertyReducers in sourceReducer each in a property of the source state,\n * @param sourceReducer\n * @param property\n * @param propertyReducer\n *\n * @example\n *\n * const newReducer = setPropertyReducer(productsReducer,\n * {\n * selectedProduct: selectedProductReducer\n * favoriteProduct: favoriteProductReducer\n * })\n */\nexport function setPropertiesReducer<State, P extends keyof State>(\n sourceReducer: (state: State, action: ActionType<any>) => State,\n propertiesReducers: {\n [key in P]: (state: State[P], action: ActionType<any>) => State[P];\n },\n): (state: State, action: ActionType<any>) => State {\n return function reducer(state: State, action: ActionType<any>): State {\n const newState = { ...sourceReducer(state, action) };\n for (const property in propertiesReducers) {\n newState[property as P] = propertiesReducers[property](\n newState[property],\n action,\n );\n }\n return newState;\n };\n}\n\n/**\n * joins two reducers so the work in the same state\n * @param firstReducer\n * @param secondReducer\n */\nexport function joinReducers<State>(\n firstReducer: (state: State, action: ActionType<any>) => State,\n secondReducer: (state: any, action: ActionType<any>) => any,\n): (state: State, action: ActionType<any>) => State {\n return function reducer(state: State, action: ActionType<any>): State {\n const sourceState = firstReducer(state, action);\n return secondReducer(sourceState, action);\n };\n}\n","import {\n Config,\n ExtractActionsType,\n ExtractSelectorsType,\n ExtractStateType,\n EntityFeatureFactory,\n FeatureSelectors,\n KeyedConfig,\n TraitActions,\n TraitFactory,\n TraitSelectors,\n TraitStateMutators,\n UnionToIntersection,\n TraitActionsFactory,\n TraitSelectorsFactory,\n TraitInitialStateFactory,\n TraitStateMutatorsFactory,\n TraitReducerFactory,\n TraitEffectsFactory,\n AllTraitConfigs,\n} from './model';\nimport {\n Action,\n ActionType,\n combineReducers,\n createFeatureSelector,\n createReducer,\n createSelector,\n MemoizedSelector,\n} from '@ngrx/store';\nimport { TraitEffect } from './trait-effect';\nimport { Type } from './local-store';\nimport { capitalize, setPropertiesReducer } from './util';\n\n/**\n * Creates a function that when execute will combine all the traits, and return a EntityFeatureFactory\n * which combines all the traits actions, selectors , reducers and effects,\n * the names param will replace any action and selector with the word Entity or Entities,\n * with the corresponding entityName and entitiesName param (entityName+'s' if entitiesName is omitted).\n * @param namesConfig - Optional Names for entities\n * @param namesConfig.entityName - singular name for entity\n * @param [namesConfig.entitiesName] - plural name for entities, defaults to entityName + 's'\n * @param traits set of traits to be combined\n *\n * @example\n *\n * const featureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * addAsyncActionTrait({\n * name: 'checkout',\n * actionSuccessProps: props<{ orderId: string }>(),\n * })\n * );\n *\n * export const productsFeature = featureFactory({\n * actionsGroupKey: '[Products]',\n * featureSelector: 'products',\n * });\n */\nexport function createEntityFeatureFactory<\n F extends readonly TraitFactory[],\n EntityName extends string,\n EntitiesName extends string = `${EntityName}s`\n>(\n {\n entityName,\n entitiesName,\n }: { entityName: EntityName; entitiesName?: EntitiesName },\n ...traits: F\n): EntityFeatureFactory<\n EntityName,\n EntitiesName,\n ExtractStateType<F>,\n ExtractActionsType<F>,\n ExtractSelectorsType<F>\n>;\n\n/**\n * Creates a function that when execute will combine all the traits, and return a EntityFeatureFactory\n * which combines all the traits actions, selectors , reducers and effects.\n * @param traits set of traits to be combined\n *\n * @example\n *\n * const featureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * addAsyncActionTrait({\n * name: 'checkout',\n * actionSuccessProps: props<{ orderId: string }>(),\n * })\n * );\n *\n * export const productsFeature = featureFactory({\n * actionsGroupKey: '[Products]',\n * featureSelector: 'products',\n * });\n *\n * productsFeature.actions.loadProducts();\n */\nexport function createEntityFeatureFactory<F extends readonly TraitFactory[]>(\n ...traits: F\n): EntityFeatureFactory<\n 'Entity',\n 'Entities',\n ExtractStateType<F>,\n ExtractActionsType<F>,\n ExtractSelectorsType<F>\n>;\n\n/**\n * Creates a function that when execute will combine all the traits, and return a EntityFeatureFactory\n * which combines all the traits actions, selectors , reducers and effects,\n * the names param will replace any action and selector with the word Entity or Entities,\n * with the corresponding entityName and entitiesName param (entityName+'s' if entitiesName is omitted).\n * @param namesConfig - Optional Names for entities\n * @param namesConfig.entityName - singular name for entity\n * @param [namesConfig.entitiesName] - plural name for entities, defaults to entityName + 's'\n * @param traits set of traits to be combined\n *\n * @example\n *\n * const featureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * addAsyncActionTrait({\n * name: 'checkout',\n * actionSuccessProps: props<{ orderId: string }>(),\n * })\n * );\n *\n * export const productsFeature = featureFactory({\n * actionsGroupKey: '[Products]',\n * featureSelector: 'products',\n * });\n */\nexport function createEntityFeatureFactory<\n F extends readonly TraitFactory[],\n EntityName extends string,\n EntitiesName extends string = `${EntityName}s`\n>(\n namesOrFactory:\n | { entityName: EntityName; entitiesName?: EntitiesName }\n | TraitFactory,\n ...traits: F\n): EntityFeatureFactory<\n EntityName,\n EntitiesName,\n ExtractStateType<F>,\n ExtractActionsType<F>,\n ExtractSelectorsType<F>\n> {\n return ((config: Config<any, any>) => {\n const { entityName, entitiesName } =\n 'entityName' in namesOrFactory\n ? (namesOrFactory as {\n entityName: EntityName;\n entitiesName?: EntitiesName;\n })\n : { entityName: 'Entity', entitiesName: 'Entities' };\n\n const singular = capitalize(entityName);\n const plural = entitiesName\n ? capitalize(entitiesName)\n : capitalize(entityName + 's');\n\n const sortedTraits = sortTraits(\n 'entityName' in namesOrFactory ? [...traits] : [namesOrFactory, ...traits]\n );\n\n const allConfigs = buildAllConfigs(sortedTraits);\n\n const allActions = buildAllActions(\n sortedTraits,\n config.actionsGroupKey,\n singular,\n plural,\n allConfigs\n );\n\n const allSelectors = buildAllSelectors(sortedTraits, allConfigs);\n\n const allMutators = buildAllMutators(\n sortedTraits,\n allSelectors,\n allConfigs\n );\n\n const initialState = buildInitialState(sortedTraits, allConfigs);\n\n const reducer = buildReducer(\n sortedTraits,\n initialState,\n allActions,\n allSelectors,\n allMutators,\n allConfigs\n );\n\n const featureSelector =\n typeof config.featureSelector === 'string'\n ? createFeatureSelector<ExtractStateType<F>>(config.featureSelector)\n : config.featureSelector;\n\n const allFeatureSelectors =\n allSelectors && getSelectorsForFeature(featureSelector, allSelectors);\n\n const allEffects = buildAllEffects(\n sortedTraits,\n allActions,\n allFeatureSelectors,\n allConfigs\n );\n\n return {\n actions: entityName\n ? renameProps(allActions, singular, plural)\n : allActions,\n selectors: entityName\n ? renameProps(allFeatureSelectors, singular, plural)\n : allSelectors,\n initialState,\n reducer: reducer ?? createReducer(initialState),\n effects: allEffects,\n };\n }) as EntityFeatureFactory<\n EntityName,\n EntitiesName,\n ExtractStateType<F>,\n ExtractActionsType<F>,\n ExtractSelectorsType<F>\n >;\n}\n\nfunction renameProps(target: any, entityName: string, entitiesName: string) {\n const result = {} as any;\n for (const [key, value] of Object.entries(target)) {\n const newKey = key\n .replace('Entities', entitiesName)\n .replace('Entity', entityName);\n result[newKey] = value;\n }\n return result;\n}\n\nfunction sortTraits(\n traits: TraitFactory<any, any, any, any>[]\n): TraitFactory<any, any, any, any>[] {\n const sortedTraits: TraitFactory<any, any, any, any>[] = [];\n for (let i = 0; i < traits.length; i++) {\n const trait = traits[i];\n if (!trait.depends?.length) {\n sortedTraits.push(trait);\n continue;\n }\n if (trait.depends.length > 1)\n for (const d of trait.depends) {\n const isTraitPresent = traits.some((tr) => tr.key === d);\n if (isTraitPresent) {\n trait.depends = [d];\n break;\n }\n }\n if (trait.depends.length > 1)\n throw Error('could not find dependencies ' + trait.depends.join(' '));\n const isDependencyAlreadyAdded = sortedTraits.some(\n (tr) => tr.key === trait?.depends?.[0]\n );\n\n if (isDependencyAlreadyAdded) sortedTraits.push(trait);\n else {\n // move trait to the end\n delete traits[i];\n traits.push(trait);\n }\n }\n return sortedTraits;\n}\n\nfunction buildAllConfigs(sortedTraits: TraitFactory<any, any, any, any>[]) {\n return sortedTraits.reduce((acc: KeyedConfig<string, any>, factory) => {\n acc[factory.key] = factory.config;\n return acc;\n }, {});\n}\n\nfunction buildAllActions(\n sortedTraits: TraitFactory<any, any, any, any>[],\n actionsGroupKey: string,\n entityName: string,\n entitiesName: string,\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce((previousResult: TraitActions, factory) => {\n let result =\n factory?.actions?.({\n actionsGroupKey: actionsGroupKey,\n entityName,\n entitiesName,\n allConfigs,\n }) ?? {};\n result = previousResult ? { ...previousResult, ...result } : result;\n return result;\n }, {});\n}\n\nfunction buildAllSelectors(\n sortedTraits: TraitFactory<any, any, any, any>[],\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce((previousResult: TraitSelectors<any>, factory) => {\n let result =\n factory?.selectors?.({\n previousSelectors: previousResult,\n allConfigs,\n }) ?? {};\n result = previousResult ? { ...previousResult, ...result } : result;\n return result;\n }, {});\n}\n\nfunction buildAllMutators(\n sortedTraits: TraitFactory<any, any, any, any>[],\n allSelectors: TraitSelectors<any>,\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return (\n sortedTraits.reduce(\n (previousResult: TraitStateMutators<any> | undefined, factory) => {\n let result =\n factory?.mutators?.({\n allSelectors: allSelectors,\n previousMutators: previousResult,\n allConfigs,\n }) ?? {};\n result = previousResult ? { ...previousResult, ...result } : result;\n return result;\n },\n {}\n ) || {}\n );\n}\n\nfunction buildInitialState(\n sortedTraits: TraitFactory<any, any, any, any>[],\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce((previousResult: any, factory) => {\n const result =\n factory?.initialState?.({\n previousInitialState: previousResult,\n allConfigs,\n }) ??\n previousResult ??\n {};\n return result;\n }, {});\n}\n\nfunction buildReducer(\n sortedTraits: TraitFactory<any, any, any, any>[],\n initialState: any,\n allActions: TraitActions,\n allSelectors: TraitSelectors<any>,\n allMutators: TraitStateMutators<any>,\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce(\n (\n previousResult: ((state: any, action: Action) => any) | undefined,\n factory\n ) => {\n const result = factory?.reducer?.({\n initialState,\n allActions,\n allSelectors,\n allMutators,\n allConfigs,\n });\n return result && previousResult\n ? (state = initialState, action) => {\n const aState = previousResult(state, action);\n return result(aState, action);\n }\n : result ?? previousResult;\n },\n undefined\n );\n}\n\nfunction buildAllEffects(\n sortedTraits: TraitFactory<any, any, any, any>[],\n allActions: TraitActions,\n allFeatureSelectors: TraitSelectors<any>,\n allConfigs: Record<string, any> & { [p: string]: any }\n) {\n return sortedTraits.reduce(\n (previousResult: Type<TraitEffect>[] | undefined, factory) => {\n let result =\n factory?.effects?.({\n allActions,\n allSelectors: allFeatureSelectors,\n allConfigs,\n }) ?? [];\n result = previousResult ? [...previousResult, ...result] : result;\n return result;\n },\n []\n );\n}\n\nfunction getSelectorsForFeature<\n State,\n S extends TraitSelectors<State>,\n // eslint-disable-next-line @typescript-eslint/ban-types\n F extends MemoizedSelector<object, any>\n>(featureSelect: F, selectors: S): FeatureSelectors<State, S> {\n const ss: { [key in keyof S]?: any } = {};\n for (const prop in selectors) {\n ss[prop] = createSelector(featureSelect as any, selectors[prop] as any);\n }\n return ss as FeatureSelectors<State, S>;\n}\n\n/**\n * Combine a map entityFeatureFactories into one,\n * grouping the actions and selectors by the key of the respective entityFeatureFactory\n * @param traitFactoriesMap\n *\n * @example\n *\n * const clientsFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'client', entitiesName: 'clients' },\n * addLoadEntitiesTrait<Client>(),\n * addCrudEntitiesTrait<Client>()\n * );\n *\n * const productOrderFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'productOrder' },\n * addLoadEntitiesTrait<ProductOrder>(),\n * addSelectEntitiesTrait<ProductOrder>()\n * );\n *\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntitiesTrait<Product>()\n * );\n *\n * const productCombinedFactory = combineEntityFeatures({\n * products: productFeatureFactory,\n * productOrders: productOrderFeatureFactory,\n * clients: clientsFeatureFactory,\n * });\n *\n * const combinedFeature = productCombinedFactory({\n * actionsGroupKey: '[Combined]',\n * featureSelector: 'combined',\n * });\n *\n * combinedFeature.actions.client.loadClients();\n * combinedFeature.actions.product.loadProducts();\n */\nexport function combineEntityFeatures<\n T extends { [key: string]: EntityFeatureFactory<any, any> },\n K extends keyof T,\n State extends { [P in K]: ExtractStateType<ReturnType<T[P]>> },\n A extends { [P in K]: ExtractActionsType<ReturnType<T[P]>> },\n S extends {\n [P in K]: FeatureSelectors<State, ExtractSelectorsType<ReturnType<T[P]>>>;\n },\n R extends (config: Config<State>) => {\n actions: A;\n selectors: S;\n reducer: (state: State, action: ActionType<any>) => State;\n effects: Type<any>[];\n initialState: State;\n }\n>(traitFactoriesMap: T): R {\n return ((config: Config<any, any>) => {\n const featureSelector =\n typeof config.featureSelector === 'string'\n ? createFeatureSelector<any>(config.featureSelector)\n : config.featureSelector;\n const actions: any = {};\n const selectors: any = {};\n const reducers: any = {};\n let effects: Type<any>[] = [];\n for (const [key, entityFeatureFactory] of Object.entries(\n traitFactoriesMap\n )) {\n const selector = createSelector(\n featureSelector,\n (state: any) => state[key]\n );\n const featureTraits = entityFeatureFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: selector,\n });\n actions[key] = featureTraits.actions;\n selectors[key] = featureTraits.selectors;\n reducers[key] = featureTraits.reducer;\n effects = [...effects, ...featureTraits.effects];\n }\n return {\n actions,\n selectors,\n reducer: combineReducers(reducers),\n effects,\n };\n }) as R;\n}\n\n/**\n * Mix a map entityFeatureFactories into one, different from combine the actions and selectors a mix, not group by key like in combine, the keys are still use\n * internal in the reducers and selector to separate the state\n * @param traitFactoriesMap\n *\n * @example\n *\n * const clientsFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'client', entitiesName: 'clients' },\n * addLoadEntitiesTrait<Client>(),\n * addCrudEntitiesTrait<Client>()\n * );\n *\n * const productOrderFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'productOrder' },\n * addLoadEntitiesTrait<ProductOrder>(),\n * addSelectEntitiesTrait<ProductOrder>()\n * );\n *\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntitiesTrait<Product>()\n * );\n *\n * const productMixedFactory = mixEntityFeatures({\n * products: productFeatureFactory,\n * productOrders: productOrderFeatureFactory,\n * clients: clientsFeatureFactory,\n * });\n *\n * const mixedFeature = productMixedFactory({\n * actionsGroupKey: '[Mixed]',\n * featureSelector: 'mixed',\n * });\n * mixedFeature.actions.loadClients();\n * mixedFeature.actions.loadProducts();\n *\n */\nexport function mixEntityFeatures<\n T extends { [key: string]: EntityFeatureFactory<any, any> },\n K extends keyof T,\n State extends { [P in K]: ExtractStateType<ReturnType<T[P]>> },\n A extends TraitActions &\n UnionToIntersection<ExtractActionsType<ReturnType<T[K]>>>,\n S extends TraitSelectors<any> &\n UnionToIntersection<\n FeatureSelectors<State, ExtractSelectorsType<ReturnType<T[K]>>>\n >,\n R extends EntityFeatureFactory<any, any, State, A, S>\n>(traitFactoriesMap: T): R {\n return ((config: Config<any, any>) => {\n const featureSelector =\n typeof config.featureSelector === 'string'\n ? createFeatureSelector<any>(config.featureSelector)\n : config.featureSelector;\n let actions: any = {};\n let selectors: any = {};\n const reducers: any = {};\n let effects: Type<any>[] = [];\n for (const [key, entityFeatureFactory] of Object.entries(\n traitFactoriesMap\n )) {\n const selector = createSelector(\n featureSelector,\n (state: any) => state[key]\n );\n const featureTraits = entityFeatureFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: selector,\n });\n actions = { ...actions, ...featureTraits.actions };\n selectors = { ...selectors, ...featureTraits.selectors };\n reducers[key] = featureTraits.reducer;\n effects = [...effects, ...featureTraits.effects];\n }\n return {\n actions,\n selectors,\n reducer: combineReducers(reducers),\n effects,\n };\n }) as R;\n}\n\n/**\n * Combines targetTraitFactory with the traitFactoriesMap using the keys as props for the targetTraitFactory state,\n * and grouping the combined actions by key\n * @param targetTraitFactory\n * @param traitFactoriesMap\n *\n * @example\n *\n * const clientsFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'client', entitiesName: 'clients' },\n * addLoadEntitiesTrait<Client>(),\n * addCrudEntitiesTrait<Client>()\n * );\n *\n * const productOrderFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'productOrder' },\n * addLoadEntitiesTrait<ProductOrder>(),\n * addSelectEntitiesTrait<ProductOrder>()\n * );\n *\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntitiesTrait<Product>()\n * );\n *\n * const productAddEntityPropertiesFactory = addEntityFeaturesProperties(\n * productFeatureFactory,\n * {\n * productOrders: productOrderFeatureFactory,\n * clients: clientsFeatureFactory,\n * }\n * );\n *\n * const combinedFeature = productAddEntityPropertiesFactory({\n * actionsGroupKey: '[addEntityFeatures]',\n * featureSelector: 'addEntityFeatures',\n * });\n *\n * combinedFeature.actions.loadProducts();\n * combinedFeature.actions.clients.loadClients();\n * combinedFeature.actions.productOrders.loadProductOrders();\n */\nexport function addEntityFeaturesProperties<\n F extends EntityFeatureFactory<any, any>,\n T extends { [key: string]: EntityFeatureFactory<any, any, any, any, any> },\n K extends keyof T,\n State extends ExtractStateType<ReturnType<F>> & {\n [P in K]: ExtractStateType<ReturnType<T[P]>>;\n },\n A extends ExtractActionsType<ReturnType<F>> & {\n [P in K]: ExtractActionsType<ReturnType<T[P]>>;\n },\n S extends FeatureSelectors<State, ExtractSelectorsType<ReturnType<F>>> & {\n [P in K]: FeatureSelectors<State, ExtractSelectorsType<ReturnType<T[P]>>>;\n },\n R extends (config: Config<State>) => {\n actions: A;\n selectors: S;\n reducer: (state: State, action: ActionType<any>) => State;\n effects: Type<any>[];\n initialState: State;\n }\n>(targetTraitFactory: F, traitFactoriesMap: T): R {\n return ((config: Config<any, any>) => {\n const featureSelector =\n typeof config.featureSelector === 'string'\n ? createFeatureSelector<any>(config.featureSelector)\n : config.featureSelector;\n const targetFeatureTraits = targetTraitFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: featureSelector,\n });\n const actions: any = { ...targetFeatureTraits.actions };\n const selectors: any = { ...targetFeatureTraits.selectors };\n const reducers: any = {};\n let effects: Type<any>[] = [...targetFeatureTraits.effects];\n for (const [key, entityFeatureFactory] of Object.entries(\n traitFactoriesMap\n )) {\n const selector = createSelector(\n featureSelector,\n (state: any) => state[key]\n );\n const featureTraits = entityFeatureFactory({\n actionsGroupKey: config.actionsGroupKey,\n featureSelector: selector,\n });\n actions[key] = featureTraits.actions;\n selectors[key] = featureTraits.selectors;\n reducers[key] = featureTraits.reducer;\n effects = [...effects, ...featureTraits.effects];\n }\n return {\n actions,\n selectors,\n reducer: setPropertiesReducer(targetFeatureTraits.reducer, reducers),\n effects,\n };\n }) as R;\n}\n\n/**\n * Helper function to create an implementation a TraitFactory\n * @param f TraitFactory implementation\n */\nexport function createTraitFactory<\n State = {},\n A extends TraitActions = {},\n S extends TraitSelectors<State> = {},\n M extends TraitStateMutators<State> = {},\n KEY extends string = string,\n C = unknown,\n KC extends AllTraitConfigs = KeyedConfig<KEY, C>\n>(f: {\n key: KEY;\n config?: C;\n depends?: string[];\n actions?: TraitActionsFactory<A, KC>;\n selectors?: TraitSelectorsFactory<State, S, KC>;\n initialState?: TraitInitialStateFactory<State, KC>;\n mutators?: TraitStateMutatorsFactory<State, M, KC>;\n reducer?: TraitReducerFactory<State, A, S, M, KC>;\n effects?: TraitEffectsFactory<State, A, S, KC>;\n}): TraitFactory<State, A, S, M, KEY, C, KC> {\n return f as TraitFactory<State, A, S, M, KEY, C, KC>;\n}\n\n/**\n * Helper function to combine selectors in components as map\n *\n * @example\n *\n * view = combineSelectors({\n * products: ProductSelectors.selectProductsCurrentPage,\n * isLoading: ProductSelectors.isLoadingProductsCurrentPage,\n * selectedProduct: ProductSelectors.selectProductSelected,\n * isLoadingCheckout: ProductSelectors.isLoadingCheckout,\n * selectedSort: ProductSelectors.selectProductsSort,\n * filters: ProductSelectors.selectProductsFilter,\n * });\n * @param t\n */\nexport function combineSelectors<\n T extends { [k: string]: MemoizedSelector<any, any> }\n>(t: T): MemoizedSelector<any, { [j in keyof T]: ReturnType<T[j]> }> {\n const selectors = Object.values(t);\n const keys = Object.keys(t);\n const projector = (...args: any[]) =>\n keys.reduce((acc, key, index) => {\n acc[key] = args[index];\n return acc;\n }, {} as any);\n return (createSelector as any).apply(null, [...selectors, projector]);\n}\n","import { Injectable, inject } from '@angular/core';\nimport { takeUntil } from 'rxjs/operators';\nimport {\n Actions,\n ofType,\n OnIdentifyEffects,\n OnRunEffects,\n} from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class TraitEffect implements OnIdentifyEffects, OnRunEffects {\n private name = this.constructor.name;\n public componentId = '';\n protected actions$ = inject(Actions);\n protected store = inject(Store<any>);\n\n ngrxOnIdentifyEffects() {\n return this.componentId ? this.name + this.componentId : '';\n }\n\n ngrxOnRunEffects(resolvedEffects$: Observable<any>) {\n return this.componentId\n ? resolvedEffects$.pipe(\n takeUntil(\n this.actions$.pipe(ofType(getDestroyActionName(this.componentId)))\n )\n )\n : resolvedEffects$;\n }\n}\n\nexport function getDestroyActionName(id: string) {\n return `[${id}] Destroyed`;\n}\n","import { InjectionToken } from '@angular/core';\n\n/**\n * @ignore\n * @internal\n */\nexport const DISABLE_LOCAL_TRAIT_EFFECTS = new InjectionToken<boolean>(\n 'disableLocalTraitEffects'\n);\n","import { inject, Injectable, Injector, OnDestroy } from '@angular/core';\nimport { BaseEntityFeatureFactory, EntityFeatureFactory } from '../model';\nimport { createFeatureSelector, ReducerManager, Store } from '@ngrx/store';\nimport { Actions, EffectSources } from '@ngrx/effects';\nimport { getDestroyActionName, TraitEffect } from '../trait-effect';\nimport { DISABLE_LOCAL_TRAIT_EFFECTS } from './disable-local-trait-effects.token';\n\nlet id = 0;\nfunction uniqueComponentId() {\n return id++;\n}\n\n/**\n * Builds traitFactory and registers effects and reducers with\n * a generated component id, returns build actions and selectors\n * and a destroy method that will unergister the effects and reducers\n * when called, and a addEffect which can be use to register extra effects\n *\n * Used inside TraitsLocalStore, can be used to create your\n * own Component Service without extending TraitsLocalStore\n * @param injector\n * @param componentName\n * @param traitFactory\n */\nexport function buildLocalTraits<\n State,\n F extends BaseEntityFeatureFactory<any, any, any>\n>(injector: Injector, componentName: string, traitFactory: F) {\n const reducers = injector.get(ReducerManager);\n const effects = injector.get(EffectSources);\n const store = injector.get(Store);\n const componentId = `${componentName}_${uniqueComponentId()}`;\n\n const traits = traitFactory({\n featureSelector: createFeatureSelector<State>(componentId),\n actionsGroupKey: `[${componentId}]`,\n }) as ReturnType<F>;\n\n traits.reducer && reducers.addReducer(componentId, traits.reducer);\n\n const providers =\n (traits.effects && [...traits.effects.map((e) => ({ provide: e }))]) || [];\n\n const disableLocalTraitsEffects = injector.get(\n DISABLE_LOCAL_TRAIT_EFFECTS,\n false\n );\n if (!disableLocalTraitsEffects) {\n const i = Injector.create({\n providers: providers,\n parent: injector,\n });\n\n traits.effects?.forEach((e) => {\n const effect = i.get(e) as TraitEffect;\n effect.componentId = componentId;\n effects.addEffects(effect);\n });\n }\n\n function destroy() {\n store.dispatch({ type: getDestroyActionName(componentId) });\n /**\n * A service that extends TraitsLocalStore and other component service are destroyed\n * before the component that depends on them, this causes that any subscriptions\n * to selectors of the TraitsLocalStore could fail because the store state is removed before\n * they are unsubscribe by the onDestroy of the component. Executing reducers.removeReducer\n * inside setTimeout ensures the state is remove after the component onDestroy was called,\n * avoiding the before mentioned possible issues.\n */\n setTimeout(() => reducers.removeReducer(componentId));\n }\n\n return {\n destroy,\n actions: traits.actions,\n selectors: traits.selectors,\n addEffects(localEffect: TraitEffect) {\n localEffect.componentId = componentId;\n effects.addEffects(localEffect);\n },\n };\n}\n\nexport interface Type<T> extends Function {\n new (...args: any[]): T;\n}\n\nexport interface LocalTraitsConfig<\n F extends BaseEntityFeatureFactory<any, any, any>\n> {\n componentName: string;\n traitsFactory: F;\n}\n\n/**\n * Class used to create local traits service, receives a trait factory, which will be\n * built and its reducers and effect register using a dynamic id when the service is built\n * and get destroyed when the onDestroy lifecycle method of the service is called, if the service\n * has effects this.traits.addEffects(this) should be call in the constructor\n *\n * @example\n * const productFeatureFactory = createEntityFeatureFactory(\n * { entityName: 'product' },\n * addLoadEntitiesTrait<Product>(),\n * addSelectEntityTrait<Product>(),\n * );\n *\n * Injectable()\n * export class ProductsLocalTraits extends TraitsLocalStore<\n * typeof productFeatureFactory\n * > {\n * loadProducts$ = createEffect(() =>\n * this.actions$.pipe(\n * ofType(this.localActions.loadProducts),\n * switchMap(() =>\n * //call your service to get the products data\n * this.productService.getProducts().pipe(\n * map((res) =>\n * this.localActions.loadProductsSuccess({ entities: res.resultList })\n * ),\n * catchError(() => of(this.localActions.loadProductsFail()))\n * )\n * )\n * )\n * );\n *\n * constructor(injector: Injector, private productService: ProductService) {\n * super(injector);\n * this.traits.addEffects(this); // IMPORTANT! add this line if the service has effects\n * }\n *\n * setup(): LocalTraitsConfig<typeof productFeatureFactory> {\n * return {\n * componentName: 'ProductsPickerComponent',\n * traitsFactory: productFeatureFactory,\n * };\n * }\n * }\n *\n * // use in component later\n *\n * Component({\n * selector: 'some-component',\n * template: `<div> some content</div> `,\n * providers: [ProductsLocalTraits],\n * changeDetection: ChangeDetectionStrategy.OnPush,\n * })\n * export class ProductSelectDialogComponent implements OnInit {\n * constructor(private store: Store, private traits: ProductsLocalTraits) {}\n *\n * ngOnInit() {\n * this.store.dispatch(this.traits.localActions.loadProducts());\n * }\n * }\n */\n@Injectable()\nexport abstract class TraitsLocalStore<\n F extends BaseEntityFeatureFactory<any, any, any>\n >\n extends TraitEffect\n implements OnDestroy\n{\n traits: {\n actions: ReturnType<F>['actions'];\n selectors: ReturnType<F>['selectors'];\n destroy: () => void;\n addEffects: (localEffect: TraitEffect) => void;\n };\n\n localActions: ReturnType<F>['actions'];\n localSelectors: ReturnType<F>['selectors'];\n private injector = inject(Injector);\n\n public constructor() {\n super();\n const config = this.setup();\n this.traits = buildLocalTraits(\n this.injector,\n config.componentName,\n config.traitsFactory\n );\n this.localActions = this.traits.actions;\n this.localSelectors = this.traits.selectors;\n }\n\n abstract setup(): LocalTraitsConfig<F>;\n\n ngOnDestroy() {\n this.traits.destroy();\n }\n}\n","export type CacheKey = string | (string | object)[];\n\nexport interface CacheData {\n value: any;\n date: number;\n invalid: boolean;\n hitCount: number;\n}\nexport interface CacheKeys {\n keys?: { [key: string]: CacheKeys };\n data?: CacheData;\n}\n\nexport type CacheState = CacheKeys;\n\nexport interface CacheConfig {\n expires: number;\n}\nfunction hash(key: string | object): string {\n return JSON.stringify(key, (_, val) =>\n typeof val == 'object'\n ? Object.keys(val)\n .sort()\n .reduce((result, k) => {\n result[k] = val[k];\n return result;\n }, {} as any)\n : val\n );\n}\n\nexport function hashKey(key: CacheKey): string[] {\n return typeof key === 'string'\n ? [key]\n : key.map((k) => {\n return typeof k === 'string' ? k : hash(k);\n });\n}\n\nexport function getCacheValue(\n keys: string[],\n state: CacheState\n): CacheData | undefined {\n let parent: CacheKeys | undefined = state;\n for (const key of keys) {\n parent = parent?.keys?.[key];\n if (!parent) return undefined;\n }\n return parent?.data;\n}\n\nexport function isCacheValid(cache: CacheData, exp: number) {\n return !cache.invalid && Date.now() <= cache.date + exp;\n}\n","import { createFeatureSelector, createSelector } from '@ngrx/store';\nimport { CacheKey, CacheState, getCacheValue, hashKey } from './cache.models';\n\nexport const cacheStateSelector = createFeatureSelector<CacheState>('cache');\n\nexport const selectCache = (key: CacheKey) =>\n createSelector(cacheStateSelector, (state) =>\n getCacheValue(hashKey(key), state)\n );\n","import { createAction, props } from '@ngrx/store';\nimport { CacheKey } from './cache.models';\n\nexport const cache = createAction(\n '[Cache] Cache',\n props<{\n key: CacheKey;\n value: any;\n date: number;\n maxCacheSize?: number;\n expires?: number;\n }>()\n);\nexport const hitCache = createAction(\n '[Cache] Hit Cache',\n props<{ key: CacheKey }>()\n);\nexport const invalidateCache = createAction(\n '[Cache] Invalidate Cache',\n props<{ key: CacheKey }>()\n);\nexport const deleteCache = createAction(\n '[Cache] Delete Cache',\n props<{ key: CacheKey }>()\n);\n","import { Injectable } from '@angular/core';\nimport { Store } from '@ngrx/store';\nimport { Observable, of } from 'rxjs';\nimport { CacheData, CacheKey, isCacheValid } from './cache.models';\nimport { selectCache } from './cache.selectors';\nimport { concatMap, first, tap } from 'rxjs/operators';\nimport * as CacheActions from './cache.actions';\n\n/**\n * Cache the result of source parameter using the provided key, when call\n * again if the cache is valid (exist and is not expired or invalidated)\n * it will return the cache value without calling again source\n * @example\n * // cache for 3 min\n * loadStores$ = createEffect(() => {\n * return this.actions$.pipe(\n * ofType(ProductStoreActions.loadStores),\n * exhaustMap(() =>\n * cache({\n * key: ['stores'],\n * store: this.store,\n * source: this.storeService.getStores(),\n * expire: 1000 * 60 * 3 // optional param , cache forever if not present\n * }).pipe(\n * map((res) => ProductStoreActions.loadStoresSuccess({ entities: res })),\n * catchError(() => of(ProductStoreActions.loadStoresFail()))\n * )\n * )\n * );\n * });\n * // cache top 10, for 3 mins\n * loadDepartments$ = createEffect(() => {\n * return this.actions$.pipe(\n * ofType(this.localActions.loadDepartments),\n * concatLatestFrom(() =>\n * this.store.select(this.localSelectors.selectDepartmentsFilter)\n * ),\n * exhaustMap(([_, filters]) =>\n * cache({\n * key: ['stores','departments',{ storeId: filters!.storeId },\n * store: this.store,\n * source: this.storeService.getStoreDepartments(filters!.storeId),\n * expires: 1000 * 60 * 3,\n * maxCacheSize: 10,\n * }).pipe(\n * map((res) =>\n * this.localActions.loadDepartmentsSuccess({\n * entities: res,\n * })\n * ),\n * catchError(() => of(this.localActions.loadDepartmentsFail()))\n * )\n * )\n * );\n * });\n *\n * @param options - configuration\n * @param options.store - required ngrx store\n * @param options.key - key can be string, array of string or array of string with plain objects\n * @param options.source - called when cache is invalid\n * @param options.expires - time to expire the cache valued, if not present is infinite\n * @param options.maxCacheSize - max number of keys to store , only works if last key is variable\n */\nexport function cache<T>({\n store,\n key,\n source,\n expires,\n maxCacheSize,\n skip,\n}: {\n store: Store;\n key: CacheKey;\n source: Observable<T>;\n expires?: number;\n maxCacheSize?: number;\n skip?: boolean;\n}) {\n const exp = expires ?? Infinity;\n return store.select(selectCache(key)).pipe(\n first(),\n concatMap((cache) =>\n cache && !skip && isCacheValid(cache, exp)\n ? of(cache.value).pipe(\n tap(() => store.dispatch(CacheActions.hitCache({ key })))\n )\n : source.pipe(\n tap((value) =>\n store.dispatch(\n CacheActions.cache({\n key,\n date: Date.now(),\n value,\n maxCacheSize,\n })\n )\n )\n )\n )\n );\n}\n","import { createReducer, on } from '@ngrx/store';\nimport {\n CacheData,\n CacheKeys,\n CacheState,\n hashKey,\n isCacheValid,\n} from './cache.models';\nimport * as CacheActions from './cache.actions';\n\nexport const initialState: CacheState = {\n keys: {},\n};\n\nexport const cacheReducer = createReducer(\n initialState,\n on(CacheActions.cache, (state, { key, value, date, maxCacheSize }) =>\n setCacheValue(\n hashKey(key),\n { value, date, invalid: false },\n state,\n maxCacheSize\n )\n ),\n on(CacheActions.invalidateCache, (state, { key }) => {\n const k = hashKey(key);\n return invalidateCache(k, state);\n }),\n on(CacheActions.deleteCache, (state, { key }) => {\n const k = hashKey(key);\n return deleteCacheValue(k, state);\n }),\n on(CacheActions.hitCache, (state, { key }) => {\n const k = hashKey(key);\n return increaseCacheHitCount(k, state);\n })\n);\n\nfunction setCacheValue(\n keys: string[],\n value: Omit<CacheData, 'hitCount'>,\n state: CacheState,\n maxCacheSize?: number,\n expires?: number\n) {\n const newState = { ...state };\n let cache = newState;\n let lastCache: CacheKeys | undefined = undefined;\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n cache.keys = cache?.keys ? { ...cache?.keys } : {};\n let v = cache.keys[key];\n v = v ? { ...v } : {};\n cache.keys[key] = v;\n lastCache = cache;\n cache = v;\n }\n cache.data = cache.data\n ? { ...value, hitCount: cache.data.hitCount + 1 }\n : { ...value, hitCount: 1 };\n\n if (\n maxCacheSize &&\n lastCache?.keys &&\n Object.keys(lastCache.keys).length > maxCacheSize\n ) {\n const entries = findLessHitOrOldestCacheEntries(\n lastCache,\n expires ?? Infinity,\n maxCacheSize\n );\n if (entries && entries.length) {\n for (const [key] of entries) {\n delete lastCache.keys[key];\n }\n }\n }\n return newState;\n}\n\nfunction findLessHitOrOldestCacheEntries(\n state: CacheKeys,\n expires: number,\n maxCacheSize: number\n) {\n if (!state.keys) return undefined;\n const entries = Object.entries(state.keys);\n // find the newest key;\n const [newestKey] = entries.reduce((a, b) => {\n const aDate = a[1].data?.date ?? 0;\n const bDate = b[1].data?.date ?? 0;\n return aDate > bDate ? a : b;\n });\n const sorted = entries.sort(([aKey, aValue], [bKey, bValue]) => {\n // ensures the newest key always wins\n if (aKey === newestKey) return -1;\n if (bKey === newestKey) return 1;\n const aValid = aValue.data && isCacheValid(aValue.data, expires) ? 1 : 0;\n const bValid = bValue.data && isCacheValid(bValue.data, expires) ? 1 : 0;\n const diffValid = aValid - bValid;\n const diffHit = (aValue.data?.hitCount ?? 0) - (bValue.data?.hitCount ?? 0);\n const diffDate = (aValue.data?.date ?? 0) - (bValue.data?.date ?? 0);\n return (\n -1 * (diffValid === 0 ? (diffHit === 0 ? diffDate : diffHit) : diffValid)\n );\n });\n return sorted.slice(maxCacheSize);\n}\n\nfunction deleteCacheValue(keys: string[], state: CacheState) {\n const newState = { ...state };\n let cache = newState;\n for (const key of keys) {\n if (!cache.keys) return state;\n cache.keys = { ...cache?.keys };\n let v = cache.keys[key];\n if (!v) return state;\n v = { ...v };\n cache.keys[key] = v;\n cache = v;\n }\n if (cache.data) delete cache.data;\n else if (cache.keys) delete cache.keys;\n return newState;\n}\n\nfunction invalidateCache(keys: string[], state: CacheState) {\n const newState = { ...state };\n let cache = newState;\n for (const key of keys) {\n if (!cache?.keys) return state;\n cache.keys = { ...cache?.keys };\n let v = cache?.keys?.[key];\n if (!v) return state;\n v = { ...v };\n cache.keys[key] = v;\n cache = v;\n }\n cache && invalidaSubKeys(cache);\n return newState;\n}\n\nfunction increaseCacheHitCount(keys: string[], state: CacheState) {\n const newState = { ...state };\n let cache = newState;\n for (const key of keys) {\n if (!cache?.keys) return state;\n cache.keys = { ...cache?.keys };\n let v = cache?.keys?.[key];\n if (!v) return state;\n v = { ...v };\n cache.keys[key] = v;\n cache = v;\n }\n if (!cache.data) return state;\n cache.data = { ...cache.data, hitCount: cache.data.hitCount + 1 };\n return newState;\n}\n\nfunction invalidaSubKeys(state: CacheKeys) {\n if (state.data) {\n state.data = { ...state.data, invalid: true };\n }\n if (state.keys) {\n state.keys = { ...state.keys };\n for (const key in state.keys) {\n state.keys[key] = invalidaSubKeys({ ...state.keys[key] });\n }\n }\n return state;\n}\n","import { NgModule } from '@angular/core';\nimport { StoreModule } from '@ngrx/store';\nimport { cacheReducer } from './cache.reducer';\n\n@NgModule({\n imports: [StoreModule.forFeature('cache', cacheReducer)],\n providers: [],\n})\nexport class CacheModule {}\n","export * from './cache.service';\nexport * from './cache.module';\nimport { invalidateCache, deleteCache } from './cache.actions';\nimport { selectCache } from './cache.selectors';\nexport const CacheActions = { invalidateCache, deleteCache };\nexport const CacheSelectors = { getCache: selectCache };\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["cache","invalidateCache","CacheActions.hitCache","CacheActions.cache","CacheActions.invalidateCache","CacheActions.deleteCache"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./node_modules/ng-packagr/package.schema.json",
|
|
3
3
|
"name": "@ngrx-traits/core",
|
|
4
|
-
"version": "
|
|
4
|
+
"version": "21.0.0-beta.1",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"peerDependencies": {
|
|
7
|
-
"@angular/core": "^
|
|
8
|
-
"@ngrx/effects": "^
|
|
9
|
-
"@ngrx/entity": "^
|
|
10
|
-
"@ngrx/store": "^
|
|
7
|
+
"@angular/core": "^21.0.0",
|
|
8
|
+
"@ngrx/effects": "^21.0.0",
|
|
9
|
+
"@ngrx/entity": "^21.0.0",
|
|
10
|
+
"@ngrx/store": "^21.0.0",
|
|
11
11
|
"rxjs": "^7.8.1"
|
|
12
12
|
},
|
|
13
13
|
"sideEffects": false,
|
|
@@ -16,17 +16,17 @@
|
|
|
16
16
|
"url": "git+https://github.com/gabrielguerrero/ngrx-traits.git"
|
|
17
17
|
},
|
|
18
18
|
"module": "fesm2022/ngrx-traits-core.mjs",
|
|
19
|
-
"typings": "
|
|
19
|
+
"typings": "types/ngrx-traits-core.d.ts",
|
|
20
20
|
"exports": {
|
|
21
21
|
"./package.json": {
|
|
22
22
|
"default": "./package.json"
|
|
23
23
|
},
|
|
24
24
|
".": {
|
|
25
|
-
"types": "./
|
|
25
|
+
"types": "./types/ngrx-traits-core.d.ts",
|
|
26
26
|
"default": "./fesm2022/ngrx-traits-core.mjs"
|
|
27
27
|
},
|
|
28
28
|
"./testing": {
|
|
29
|
-
"types": "./testing
|
|
29
|
+
"types": "./types/ngrx-traits-core-testing.d.ts",
|
|
30
30
|
"default": "./fesm2022/ngrx-traits-core-testing.mjs"
|
|
31
31
|
}
|
|
32
32
|
},
|
|
File without changes
|
|
File without changes
|