@ngrx-traits/core 12.1.2 → 12.2.0
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/bundles/ngrx-traits-core.umd.js +2 -2
- package/bundles/ngrx-traits-core.umd.js.map +1 -1
- package/cache/cache.service.d.ts +2 -1
- package/esm2015/cache/cache.service.js +2 -2
- package/esm2015/cache/cache.service.js.map +1 -1
- package/fesm2015/ngrx-traits-core.js +2 -2
- package/fesm2015/ngrx-traits-core.js.map +1 -1
- package/package.json +1 -1
|
@@ -1189,9 +1189,9 @@
|
|
|
1189
1189
|
* @param options.maxCacheSize - max number of keys to store , only works if last key is variable
|
|
1190
1190
|
*/
|
|
1191
1191
|
function cache(_a) {
|
|
1192
|
-
var store = _a.store, key = _a.key, source = _a.source, expires = _a.expires, maxCacheSize = _a.maxCacheSize;
|
|
1192
|
+
var store = _a.store, key = _a.key, source = _a.source, expires = _a.expires, maxCacheSize = _a.maxCacheSize, skip = _a.skip;
|
|
1193
1193
|
var exp = expires !== null && expires !== void 0 ? expires : Infinity;
|
|
1194
|
-
return store.select(selectCache(key)).pipe(operators.first(), operators.concatMap(function (cache) { return cache && isCacheValid(cache, exp)
|
|
1194
|
+
return store.select(selectCache(key)).pipe(operators.first(), operators.concatMap(function (cache) { return cache && !skip && isCacheValid(cache, exp)
|
|
1195
1195
|
? rxjs.of(cache.value).pipe(operators.tap(function () { return store.dispatch(hitCache({ key: key })); }))
|
|
1196
1196
|
: source.pipe(operators.tap(function (value) { return store.dispatch(cache$1({
|
|
1197
1197
|
key: key,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngrx-traits-core.umd.js","sources":["../../../../../node_modules/tslib/tslib.es6.js","../../../../../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":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { ReducerTypes } from '@ngrx/store/src/reducer_creator';\nimport { ActionCreator } from '@ngrx/store/src/models';\nimport { ActionType } 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} 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 {\n [P in K]: ExtractStateType<ReturnType<T[P]>>;\n },\n A extends ExtractActionsType<ReturnType<F>> &\n { [P in K]: ExtractActionsType<ReturnType<T[P]>> },\n S extends FeatureSelectors<State, ExtractSelectorsType<ReturnType<F>>> &\n {\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 = 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","import { Injectable } 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 public constructor(\n protected actions$: Actions,\n protected store: Store<any>\n ) {}\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 { 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\n public constructor(public injector: Injector) {\n super(injector.get(Actions), injector.get(Store));\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}: {\n store: Store;\n key: CacheKey;\n source: Observable<T>;\n expires?: number;\n maxCacheSize?: number;\n}) {\n const exp = expires ?? Infinity;\n return store.select(selectCache(key)).pipe(\n first(),\n concatMap((cache) =>\n cache && 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 './public_api';\n"],"names":["createFeatureSelector","createReducer","createSelector","combineReducers","takeUntil","ofType","i1","i2","i0","Injectable","InjectionToken","ReducerManager","EffectSources","Store","Injector","Actions","cache","createAction","props","invalidateCache","first","concatMap","of","tap","CacheActions.hitCache","CacheActions.cache","on","CacheActions.invalidateCache","CacheActions.deleteCache","StoreModule","NgModule"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngrx-traits-core.umd.js","sources":["../../../../../node_modules/tslib/tslib.es6.js","../../../../../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":["/******************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n var desc = Object.getOwnPropertyDescriptor(m, k);\r\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\r\n desc = { enumerable: true, get: function() { return m[k]; } };\r\n }\r\n Object.defineProperty(o, k2, desc);\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n\r\nexport function __classPrivateFieldIn(state, receiver) {\r\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\r\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\r\n}\r\n","import { ReducerTypes } from '@ngrx/store/src/reducer_creator';\nimport { ActionCreator } from '@ngrx/store/src/models';\nimport { ActionType } 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} 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 {\n [P in K]: ExtractStateType<ReturnType<T[P]>>;\n },\n A extends ExtractActionsType<ReturnType<F>> &\n { [P in K]: ExtractActionsType<ReturnType<T[P]>> },\n S extends FeatureSelectors<State, ExtractSelectorsType<ReturnType<F>>> &\n {\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 = 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","import { Injectable } 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 public constructor(\n protected actions$: Actions,\n protected store: Store<any>\n ) {}\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 { 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\n public constructor(public injector: Injector) {\n super(injector.get(Actions), injector.get(Store));\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 './public_api';\n"],"names":["createFeatureSelector","createReducer","createSelector","combineReducers","takeUntil","ofType","i1","i2","i0","Injectable","InjectionToken","ReducerManager","EffectSources","Store","Injector","Actions","cache","createAction","props","invalidateCache","first","concatMap","of","tap","CacheActions.hitCache","CacheActions.cache","on","CacheActions.invalidateCache","CacheActions.deleteCache","StoreModule","NgModule"],"mappings":"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"}
|
package/cache/cache.service.d.ts
CHANGED
|
@@ -56,10 +56,11 @@ import { CacheKey } from './cache.models';
|
|
|
56
56
|
* @param options.expires - time to expire the cache valued, if not present is infinite
|
|
57
57
|
* @param options.maxCacheSize - max number of keys to store , only works if last key is variable
|
|
58
58
|
*/
|
|
59
|
-
export declare function cache<T>({ store, key, source, expires, maxCacheSize, }: {
|
|
59
|
+
export declare function cache<T>({ store, key, source, expires, maxCacheSize, skip, }: {
|
|
60
60
|
store: Store;
|
|
61
61
|
key: CacheKey;
|
|
62
62
|
source: Observable<T>;
|
|
63
63
|
expires?: number;
|
|
64
64
|
maxCacheSize?: number;
|
|
65
|
+
skip?: boolean;
|
|
65
66
|
}): Observable<any>;
|
|
@@ -58,9 +58,9 @@ import * as CacheActions from './cache.actions';
|
|
|
58
58
|
* @param options.expires - time to expire the cache valued, if not present is infinite
|
|
59
59
|
* @param options.maxCacheSize - max number of keys to store , only works if last key is variable
|
|
60
60
|
*/
|
|
61
|
-
export function cache({ store, key, source, expires, maxCacheSize, }) {
|
|
61
|
+
export function cache({ store, key, source, expires, maxCacheSize, skip, }) {
|
|
62
62
|
const exp = expires !== null && expires !== void 0 ? expires : Infinity;
|
|
63
|
-
return store.select(selectCache(key)).pipe(first(), concatMap((cache) => cache && isCacheValid(cache, exp)
|
|
63
|
+
return store.select(selectCache(key)).pipe(first(), concatMap((cache) => cache && !skip && isCacheValid(cache, exp)
|
|
64
64
|
? of(cache.value).pipe(tap(() => store.dispatch(CacheActions.hitCache({ key }))))
|
|
65
65
|
: source.pipe(tap((value) => store.dispatch(CacheActions.cache({
|
|
66
66
|
key,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache.service.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/core/src/lib/cache/cache.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,EAAE,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAuB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,MAAM,UAAU,KAAK,CAAI,EACvB,KAAK,EACL,GAAG,EACH,MAAM,EACN,OAAO,EACP,YAAY,
|
|
1
|
+
{"version":3,"file":"cache.service.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/core/src/lib/cache/cache.service.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,EAAE,EAAE,MAAM,MAAM,CAAC;AACtC,OAAO,EAAuB,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,KAAK,YAAY,MAAM,iBAAiB,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AACH,MAAM,UAAU,KAAK,CAAI,EACvB,KAAK,EACL,GAAG,EACH,MAAM,EACN,OAAO,EACP,YAAY,EACZ,IAAI,GAQL;IACC,MAAM,GAAG,GAAG,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,QAAQ,CAAC;IAChC,OAAO,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CACxC,KAAK,EAAE,EACP,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,CAClB,KAAK,IAAI,CAAC,IAAI,IAAI,YAAY,CAAC,KAAK,EAAE,GAAG,CAAC;QACxC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAClB,GAAG,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAC1D;QACH,CAAC,CAAC,MAAM,CAAC,IAAI,CACT,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACZ,KAAK,CAAC,QAAQ,CACZ,YAAY,CAAC,KAAK,CAAC;YACjB,GAAG;YACH,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE;YAChB,KAAK;YACL,YAAY;SACb,CAAC,CACH,CACF,CACF,CACN,CACF,CAAC;AACJ,CAAC","sourcesContent":["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"]}
|
|
@@ -748,9 +748,9 @@ const deleteCache = createAction('[Cache] Delete Cache', props());
|
|
|
748
748
|
* @param options.expires - time to expire the cache valued, if not present is infinite
|
|
749
749
|
* @param options.maxCacheSize - max number of keys to store , only works if last key is variable
|
|
750
750
|
*/
|
|
751
|
-
function cache({ store, key, source, expires, maxCacheSize, }) {
|
|
751
|
+
function cache({ store, key, source, expires, maxCacheSize, skip, }) {
|
|
752
752
|
const exp = expires !== null && expires !== void 0 ? expires : Infinity;
|
|
753
|
-
return store.select(selectCache(key)).pipe(first(), concatMap((cache) => cache && isCacheValid(cache, exp)
|
|
753
|
+
return store.select(selectCache(key)).pipe(first(), concatMap((cache) => cache && !skip && isCacheValid(cache, exp)
|
|
754
754
|
? of(cache.value).pipe(tap(() => store.dispatch(hitCache({ key }))))
|
|
755
755
|
: source.pipe(tap((value) => store.dispatch(cache$1({
|
|
756
756
|
key,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ngrx-traits-core.js","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 { ReducerTypes } from '@ngrx/store/src/reducer_creator';\nimport { ActionCreator } from '@ngrx/store/src/models';\nimport { ActionType } 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} 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 {\n [P in K]: ExtractStateType<ReturnType<T[P]>>;\n },\n A extends ExtractActionsType<ReturnType<F>> &\n { [P in K]: ExtractActionsType<ReturnType<T[P]>> },\n S extends FeatureSelectors<State, ExtractSelectorsType<ReturnType<F>>> &\n {\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 = 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","import { Injectable } 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 public constructor(\n protected actions$: Actions,\n protected store: Store<any>\n ) {}\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 { 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\n public constructor(public injector: Injector) {\n super(injector.get(Actions), injector.get(Store));\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}: {\n store: Store;\n key: CacheKey;\n source: Observable<T>;\n expires?: number;\n maxCacheSize?: number;\n}) {\n const exp = expires ?? Infinity;\n return store.select(selectCache(key)).pipe(\n first(),\n concatMap((cache) =>\n cache && 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 './public_api';\n"],"names":["cache","invalidateCache","CacheActions.hitCache","CacheActions.cache","CacheActions.invalidateCache","CacheActions.deleteCache","i1"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ngrx-traits-core.js","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 { ReducerTypes } from '@ngrx/store/src/reducer_creator';\nimport { ActionCreator } from '@ngrx/store/src/models';\nimport { ActionType } 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} 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 {\n [P in K]: ExtractStateType<ReturnType<T[P]>>;\n },\n A extends ExtractActionsType<ReturnType<F>> &\n { [P in K]: ExtractActionsType<ReturnType<T[P]>> },\n S extends FeatureSelectors<State, ExtractSelectorsType<ReturnType<F>>> &\n {\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 = 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","import { Injectable } 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 public constructor(\n protected actions$: Actions,\n protected store: Store<any>\n ) {}\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 { 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\n public constructor(public injector: Injector) {\n super(injector.get(Actions), injector.get(Store));\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 './public_api';\n"],"names":["cache","invalidateCache","CacheActions.hitCache","CacheActions.cache","CacheActions.invalidateCache","CacheActions.deleteCache","i1"],"mappings":"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"}
|