@ngrx-traits/core 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +24 -0
- package/bundles/ngrx-traits-core-testing.umd.js +52 -0
- package/bundles/ngrx-traits-core-testing.umd.js.map +1 -0
- package/bundles/ngrx-traits-core.umd.js +1212 -0
- package/bundles/ngrx-traits-core.umd.js.map +1 -0
- package/cache/cache.actions.d.ts +29 -0
- package/cache/cache.models.d.ts +20 -0
- package/cache/cache.module.d.ts +7 -0
- package/cache/cache.reducer.d.ts +3 -0
- package/cache/cache.selectors.d.ts +3 -0
- package/cache/cache.service.d.ts +65 -0
- package/cache/index.d.ts +17 -0
- package/create-entity-feature.d.ts +59 -0
- package/esm2015/cache/cache.actions.js +6 -0
- package/esm2015/cache/cache.actions.js.map +1 -0
- package/esm2015/cache/cache.models.js +31 -0
- package/esm2015/cache/cache.models.js.map +1 -0
- package/esm2015/cache/cache.module.js +18 -0
- package/esm2015/cache/cache.module.js.map +1 -0
- package/esm2015/cache/cache.reducer.js +141 -0
- package/esm2015/cache/cache.reducer.js.map +1 -0
- package/esm2015/cache/cache.selectors.js +5 -0
- package/esm2015/cache/cache.selectors.js.map +1 -0
- package/esm2015/cache/cache.service.js +72 -0
- package/esm2015/cache/cache.service.js.map +1 -0
- package/esm2015/cache/index.js +7 -0
- package/esm2015/cache/index.js.map +1 -0
- package/esm2015/create-entity-feature.js +283 -0
- package/esm2015/create-entity-feature.js.map +1 -0
- package/esm2015/index.js +7 -0
- package/esm2015/index.js.map +1 -0
- package/esm2015/local-store/disable-local-trait-effects.token.js +6 -0
- package/esm2015/local-store/disable-local-trait-effects.token.js.map +1 -0
- package/esm2015/local-store/index.js +3 -0
- package/esm2015/local-store/index.js.map +1 -0
- package/esm2015/local-store/traits-local-store.js +75 -0
- package/esm2015/local-store/traits-local-store.js.map +1 -0
- package/esm2015/model.js +28 -0
- package/esm2015/model.js.map +1 -0
- package/esm2015/ngrx-traits-core.js +5 -0
- package/esm2015/ngrx-traits-core.js.map +1 -0
- package/esm2015/public_api.js +2 -0
- package/esm2015/public_api.js.map +1 -0
- package/esm2015/testing/index.js +2 -0
- package/esm2015/testing/index.js.map +1 -0
- package/esm2015/testing/ngrx-traits-core-testing.js +5 -0
- package/esm2015/testing/ngrx-traits-core-testing.js.map +1 -0
- package/esm2015/testing/provide-mock-local-traits.js +39 -0
- package/esm2015/testing/provide-mock-local-traits.js.map +1 -0
- package/esm2015/testing/public_api.js +2 -0
- package/esm2015/testing/public_api.js.map +1 -0
- package/esm2015/trait-effect.js +32 -0
- package/esm2015/trait-effect.js.map +1 -0
- package/esm2015/util.js +17 -0
- package/esm2015/util.js.map +1 -0
- package/fesm2015/ngrx-traits-core-testing.js +46 -0
- package/fesm2015/ngrx-traits-core-testing.js.map +1 -0
- package/fesm2015/ngrx-traits-core.js +699 -0
- package/fesm2015/ngrx-traits-core.js.map +1 -0
- package/index.d.ts +6 -0
- package/local-store/disable-local-trait-effects.token.d.ts +5 -0
- package/local-store/index.d.ts +2 -0
- package/local-store/traits-local-store.d.ts +33 -0
- package/model.d.ts +103 -0
- package/ngrx-traits-core.d.ts +5 -0
- package/package.json +29 -0
- package/public_api.d.ts +1 -0
- package/testing/index.d.ts +1 -0
- package/testing/ngrx-traits-core-testing.d.ts +5 -0
- package/testing/package.json +10 -0
- package/testing/provide-mock-local-traits.d.ts +8 -0
- package/testing/public_api.d.ts +1 -0
- package/trait-effect.d.ts +16 -0
- package/util.d.ts +8 -0
|
@@ -0,0 +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/model.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';\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","import {\n Config,\n ExtractActionsType,\n ExtractMutatorsType,\n ExtractSelectorsType,\n ExtractStateType,\n EntityFeatureFactory,\n FeatureSelectors,\n KeyedConfig,\n TraitActions,\n TraitActionsFactoryConfig,\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 } from './util';\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}\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>;\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>;\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}\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\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}\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\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\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\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\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// export\n\n/// products:{actions, selectors, }, orders: {actions,slectors}\n/// { actions: {ProductActions, OrderActions}, selectors: {ProductSelectors, OrderSelectors}\n// TODO finish implementing combineTrais and addPropertiesTraits\n// TODO finish renaming traits\n","/* eslint-disable @typescript-eslint/consistent-type-definitions */\nimport {\n ActionCreator,\n Selector,\n SelectorWithProps,\n TypedAction,\n} from '@ngrx/store/src/models';\nimport { Action, ActionType, MemoizedSelector } from '@ngrx/store';\nimport { Type } from '@angular/core';\nimport { TraitEffect } from './trait-effect';\n\nexport type TraitActions = {\n [key: string]: ActionCreator<string, (...args: any[]) => TypedAction<string>>;\n};\n\nexport type TraitSelectors<State> = {\n [key: string]:\n | Selector<State, any>\n | SelectorWithProps<State, any, any>\n | MemoizedSelector<State, any>;\n};\n\nexport type TraitStateMutators<State> = {\n [key: string]: <S extends State>(...arg: any[]) => S;\n};\n\nexport interface BaseFeatureTraits<State = any, A = any, S = any> {\n actions: A;\n selectors: S;\n reducer: (state: State, action: ActionType<any>) => State;\n effects: Type<any>[];\n initialState: State;\n}\n\nexport type FeatureTraits<\n State,\n A extends TraitActions = TraitActions,\n S extends TraitSelectors<State> = TraitSelectors<State>\n> = BaseFeatureTraits<State, A, FeatureSelectors<State, S>>;\n\nexport type BaseEntityFeatureFactory<State, A, S> = (\n config: Config<State>\n) => BaseFeatureTraits<State, A, S>;\n\nexport type EntityFeatureFactory<\n EntityName extends string | undefined,\n EntitiesName extends string = `${EntityName}s`,\n State = any,\n A extends TraitActions = TraitActions,\n S extends TraitSelectors<State> = TraitSelectors<State>\n> = (\n config: Config<State>\n) => FeatureTraits<\n State,\n EntityName extends string\n ? ReplaceEntityNames<A, EntityName, EntitiesName>\n : A,\n EntityName extends string\n ? ReplaceEntityNames<S, EntityName, EntitiesName>\n : S\n>;\n\nexport type Config<\n State,\n F extends MemoizedSelector<object, State> = MemoizedSelector<object, State>\n> = {\n actionsGroupKey: string;\n featureSelector: F | string;\n};\n\nexport type FeatureSelectors<State, S extends TraitSelectors<State>> = {\n [key in keyof S]: MemoizedSelector<object, ReturnType<S[key]>, S[key]>;\n};\n\n// TODO see if we can make AllTraitConfigs extends or use KeyedConfig\nexport type AllTraitConfigs = {\n [id: string]: any;\n};\n\nexport type TraitActionsFactory<\n A extends TraitActions = TraitActions,\n C extends AllTraitConfigs = AllTraitConfigs\n> = (options: TraitActionsFactoryConfig<C>) => A;\n\nexport type TraitActionsFactoryConfig<\n C extends AllTraitConfigs = AllTraitConfigs\n> = {\n actionsGroupKey: string;\n entityName: string;\n entitiesName: string;\n allConfigs: C;\n};\nexport type TraitSelectorsFactory<\n State = unknown,\n S extends TraitSelectors<State> = TraitSelectors<State>,\n C extends AllTraitConfigs = AllTraitConfigs\n> = (options: TraitSelectorsFactoryConfig<C>) => S;\n\nexport type TraitSelectorsFactoryConfig<\n C extends AllTraitConfigs = AllTraitConfigs\n> = {\n previousSelectors: TraitSelectors<unknown> | undefined;\n allConfigs: C;\n};\nexport type TraitInitialStateFactory<\n State = unknown,\n C extends AllTraitConfigs = AllTraitConfigs\n> = (options: TraitInitialStateFactoryConfig<C>) => State;\n\nexport type TraitInitialStateFactoryConfig<\n C extends AllTraitConfigs = AllTraitConfigs\n> = {\n previousInitialState: any;\n allConfigs: C;\n};\n\nexport type TraitStateMutatorsFactory<\n State = unknown,\n M extends TraitStateMutators<State> = TraitStateMutators<State>,\n C extends AllTraitConfigs = AllTraitConfigs\n> = (options: TraitStateMutatorsFactoryConfig<C>) => M;\n\nexport type TraitStateMutatorsFactoryConfig<\n C extends AllTraitConfigs = AllTraitConfigs\n> = {\n allSelectors: TraitSelectors<any>;\n previousMutators: TraitStateMutators<unknown> | undefined;\n allConfigs: C;\n};\n\nexport type TraitReducerFactory<\n State = unknown,\n A extends TraitActions = TraitActions,\n S extends TraitSelectors<State> = TraitSelectors<State>,\n M extends TraitStateMutators<State> = TraitStateMutators<State>,\n C extends AllTraitConfigs = AllTraitConfigs\n> = (\n options: TraitReducerFactoryConfig<State, A, S, M, C>\n) => (initialState: State, action: Action) => State;\n\nexport type TraitReducerFactoryConfig<\n State = unknown,\n A extends TraitActions = TraitActions,\n S extends TraitSelectors<State> = TraitSelectors<State>,\n M extends TraitStateMutators<State> = TraitStateMutators<State>,\n C extends AllTraitConfigs = AllTraitConfigs\n> = {\n initialState: State;\n allActions: A;\n allSelectors: S;\n allMutators: M;\n allConfigs: C;\n};\n\nexport type TraitEffectsFactory<\n State = unknown,\n A extends TraitActions = TraitActions,\n S extends TraitSelectors<State> = TraitSelectors<State>,\n C extends AllTraitConfigs = AllTraitConfigs\n> = (options: TraitEffectsFactoryConfig<State, A, S, C>) => Type<TraitEffect>[];\n\nexport type TraitEffectsFactoryConfig<\n State = unknown,\n A extends TraitActions = TraitActions,\n S extends TraitSelectors<State> = TraitSelectors<State>,\n C extends AllTraitConfigs = AllTraitConfigs\n> = {\n allActions: A;\n allSelectors: S;\n allConfigs: C;\n};\n\nexport type KeyedConfig<KEY extends string, C> = Record<string, any> &\n {\n [K in KEY]?: C;\n };\n\nexport interface TraitFactory<\n State = any,\n A extends TraitActions = any,\n S extends TraitSelectors<State> = any,\n M extends TraitStateMutators<State> = any,\n KEY extends string = string,\n C = any,\n KC = KeyedConfig<KEY, C>\n> {\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}\ntype ExtractArrayElementTypes<X> = X extends ReadonlyArray<infer T> ? T : never;\n\nexport type UnionToIntersection<T> = (\n T extends any ? (x: T) => any : never\n) extends (x: infer R) => any\n ? R\n : never;\n\nexport type ExtractStateType<T> = T extends TraitFactory<infer State>\n ? State\n : T extends ReadonlyArray<TraitFactory>\n ? UnionToIntersection<ExtractStateType<ExtractArrayElementTypes<T>>>\n : T extends BaseFeatureTraits<infer State>\n ? State\n : never;\n\nexport type ExtractActionsType<T> = T extends TraitFactory<any, infer A>\n ? A\n : T extends ReadonlyArray<TraitFactory>\n ? UnionToIntersection<ExtractActionsType<ExtractArrayElementTypes<T>>>\n : T extends BaseFeatureTraits<any, infer A>\n ? A\n : never;\n\nexport type ExtractSelectorsType<T> = T extends TraitFactory<any, any, infer S>\n ? S\n : T extends ReadonlyArray<TraitFactory>\n ? UnionToIntersection<ExtractSelectorsType<ExtractArrayElementTypes<T>>>\n : T extends BaseFeatureTraits<any, any, infer S>\n ? S\n : never;\n\nexport type ExtractMutatorsType<T> = T extends TraitFactory<\n any,\n any,\n any,\n infer M\n>\n ? M\n : T extends ReadonlyArray<TraitFactory>\n ? UnionToIntersection<ExtractMutatorsType<ExtractArrayElementTypes<T>>>\n : never;\n\nexport type ExtractKeyedConfigType<T> = T extends TraitFactory<\n any,\n any,\n any,\n any,\n infer KEY,\n infer C\n>\n ? KeyedConfig<KEY, C>\n : T extends ReadonlyArray<TraitFactory>\n ? UnionToIntersection<ExtractKeyedConfigType<ExtractArrayElementTypes<T>>>\n : never;\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport type PrefixProps<T, P extends string> = {\n [K in keyof T as `${P}${Capitalize<string & K>}`]: T[K];\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport type PostfixProps<T, P extends string> = {\n [K in keyof T as `${Uncapitalize<string & K>}${Capitalize<P>}`]: T[K];\n};\n\ntype Replace<\n Target extends string,\n FindKey extends string,\n ReplaceKey extends string\n> = Target extends `${infer Prefix}${FindKey}${infer Postfix}`\n ? `${Prefix}${Capitalize<ReplaceKey>}${Postfix}`\n : Target;\n\nexport type ReplaceProps<\n Target,\n FindKey extends string,\n ReplaceKey extends string\n> = {\n [Prop in keyof Target as Replace<\n string & Prop,\n FindKey,\n ReplaceKey\n >]: Target[Prop];\n};\nexport type ReplaceEntityNames<\n T,\n EntityName extends string,\n EntitiesName extends string\n> = ReplaceProps<\n ReplaceProps<T, 'Entities', EntitiesName>,\n 'Entity',\n EntityName\n>;\n// type G = ReplaceProps<\n// ReplaceProps<\n// {\n// loadEntities: 1;\n// loadEntitiesSuccess: 2;\n// selectEntities: 3;\n// selectEntity: 4;\n// },\n// 'Entities',\n// 'products'\n// >,\n// 'Entity',\n// 'product'\n// >;\n//\n// const g: G = {};\n// // g.\n// type F= ReplaceEntityNames<{\n// loadEntities: 1;\n// loadEntitiesSuccess: 2;\n// selectEntities: 3;\n// selectEntity: 4;\n// }, 'product','products'>;\n// const f: F = {};\n// f.\n// TODO clean up file\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 * @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\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@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"],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Injector, OnDestroy } from '@angular/core';
|
|
2
|
+
import { BaseEntityFeatureFactory } from '../model';
|
|
3
|
+
import { TraitEffect } from '../trait-effect';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare function buildLocalTraits<State, F extends BaseEntityFeatureFactory<any, any, any>>(injector: Injector, componentName: string, traitFactory: F): {
|
|
6
|
+
destroy: () => void;
|
|
7
|
+
actions: any;
|
|
8
|
+
selectors: any;
|
|
9
|
+
addEffects(localEffect: TraitEffect): void;
|
|
10
|
+
};
|
|
11
|
+
export interface Type<T> extends Function {
|
|
12
|
+
new (...args: any[]): T;
|
|
13
|
+
}
|
|
14
|
+
export interface LocalTraitsConfig<F extends BaseEntityFeatureFactory<any, any, any>> {
|
|
15
|
+
componentName: string;
|
|
16
|
+
traitsFactory: F;
|
|
17
|
+
}
|
|
18
|
+
export declare abstract class TraitsLocalStore<F extends BaseEntityFeatureFactory<any, any, any>> extends TraitEffect implements OnDestroy {
|
|
19
|
+
injector: Injector;
|
|
20
|
+
traits: {
|
|
21
|
+
actions: ReturnType<F>['actions'];
|
|
22
|
+
selectors: ReturnType<F>['selectors'];
|
|
23
|
+
destroy: () => void;
|
|
24
|
+
addEffects: (localEffect: TraitEffect) => void;
|
|
25
|
+
};
|
|
26
|
+
localActions: ReturnType<F>['actions'];
|
|
27
|
+
localSelectors: ReturnType<F>['selectors'];
|
|
28
|
+
constructor(injector: Injector);
|
|
29
|
+
abstract setup(): LocalTraitsConfig<F>;
|
|
30
|
+
ngOnDestroy(): void;
|
|
31
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TraitsLocalStore<any>, never>;
|
|
32
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<TraitsLocalStore<any>>;
|
|
33
|
+
}
|
package/model.d.ts
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { ActionCreator, Selector, SelectorWithProps, TypedAction } from '@ngrx/store/src/models';
|
|
2
|
+
import { Action, ActionType, MemoizedSelector } from '@ngrx/store';
|
|
3
|
+
import { Type } from '@angular/core';
|
|
4
|
+
import { TraitEffect } from './trait-effect';
|
|
5
|
+
export declare type TraitActions = {
|
|
6
|
+
[key: string]: ActionCreator<string, (...args: any[]) => TypedAction<string>>;
|
|
7
|
+
};
|
|
8
|
+
export declare type TraitSelectors<State> = {
|
|
9
|
+
[key: string]: Selector<State, any> | SelectorWithProps<State, any, any> | MemoizedSelector<State, any>;
|
|
10
|
+
};
|
|
11
|
+
export declare type TraitStateMutators<State> = {
|
|
12
|
+
[key: string]: <S extends State>(...arg: any[]) => S;
|
|
13
|
+
};
|
|
14
|
+
export interface BaseFeatureTraits<State = any, A = any, S = any> {
|
|
15
|
+
actions: A;
|
|
16
|
+
selectors: S;
|
|
17
|
+
reducer: (state: State, action: ActionType<any>) => State;
|
|
18
|
+
effects: Type<any>[];
|
|
19
|
+
initialState: State;
|
|
20
|
+
}
|
|
21
|
+
export declare type FeatureTraits<State, A extends TraitActions = TraitActions, S extends TraitSelectors<State> = TraitSelectors<State>> = BaseFeatureTraits<State, A, FeatureSelectors<State, S>>;
|
|
22
|
+
export declare type BaseEntityFeatureFactory<State, A, S> = (config: Config<State>) => BaseFeatureTraits<State, A, S>;
|
|
23
|
+
export declare type EntityFeatureFactory<EntityName extends string | undefined, EntitiesName extends string = `${EntityName}s`, State = any, A extends TraitActions = TraitActions, S extends TraitSelectors<State> = TraitSelectors<State>> = (config: Config<State>) => FeatureTraits<State, EntityName extends string ? ReplaceEntityNames<A, EntityName, EntitiesName> : A, EntityName extends string ? ReplaceEntityNames<S, EntityName, EntitiesName> : S>;
|
|
24
|
+
export declare type Config<State, F extends MemoizedSelector<object, State> = MemoizedSelector<object, State>> = {
|
|
25
|
+
actionsGroupKey: string;
|
|
26
|
+
featureSelector: F | string;
|
|
27
|
+
};
|
|
28
|
+
export declare type FeatureSelectors<State, S extends TraitSelectors<State>> = {
|
|
29
|
+
[key in keyof S]: MemoizedSelector<object, ReturnType<S[key]>, S[key]>;
|
|
30
|
+
};
|
|
31
|
+
export declare type AllTraitConfigs = {
|
|
32
|
+
[id: string]: any;
|
|
33
|
+
};
|
|
34
|
+
export declare type TraitActionsFactory<A extends TraitActions = TraitActions, C extends AllTraitConfigs = AllTraitConfigs> = (options: TraitActionsFactoryConfig<C>) => A;
|
|
35
|
+
export declare type TraitActionsFactoryConfig<C extends AllTraitConfigs = AllTraitConfigs> = {
|
|
36
|
+
actionsGroupKey: string;
|
|
37
|
+
entityName: string;
|
|
38
|
+
entitiesName: string;
|
|
39
|
+
allConfigs: C;
|
|
40
|
+
};
|
|
41
|
+
export declare type TraitSelectorsFactory<State = unknown, S extends TraitSelectors<State> = TraitSelectors<State>, C extends AllTraitConfigs = AllTraitConfigs> = (options: TraitSelectorsFactoryConfig<C>) => S;
|
|
42
|
+
export declare type TraitSelectorsFactoryConfig<C extends AllTraitConfigs = AllTraitConfigs> = {
|
|
43
|
+
previousSelectors: TraitSelectors<unknown> | undefined;
|
|
44
|
+
allConfigs: C;
|
|
45
|
+
};
|
|
46
|
+
export declare type TraitInitialStateFactory<State = unknown, C extends AllTraitConfigs = AllTraitConfigs> = (options: TraitInitialStateFactoryConfig<C>) => State;
|
|
47
|
+
export declare type TraitInitialStateFactoryConfig<C extends AllTraitConfigs = AllTraitConfigs> = {
|
|
48
|
+
previousInitialState: any;
|
|
49
|
+
allConfigs: C;
|
|
50
|
+
};
|
|
51
|
+
export declare type TraitStateMutatorsFactory<State = unknown, M extends TraitStateMutators<State> = TraitStateMutators<State>, C extends AllTraitConfigs = AllTraitConfigs> = (options: TraitStateMutatorsFactoryConfig<C>) => M;
|
|
52
|
+
export declare type TraitStateMutatorsFactoryConfig<C extends AllTraitConfigs = AllTraitConfigs> = {
|
|
53
|
+
allSelectors: TraitSelectors<any>;
|
|
54
|
+
previousMutators: TraitStateMutators<unknown> | undefined;
|
|
55
|
+
allConfigs: C;
|
|
56
|
+
};
|
|
57
|
+
export declare type TraitReducerFactory<State = unknown, A extends TraitActions = TraitActions, S extends TraitSelectors<State> = TraitSelectors<State>, M extends TraitStateMutators<State> = TraitStateMutators<State>, C extends AllTraitConfigs = AllTraitConfigs> = (options: TraitReducerFactoryConfig<State, A, S, M, C>) => (initialState: State, action: Action) => State;
|
|
58
|
+
export declare type TraitReducerFactoryConfig<State = unknown, A extends TraitActions = TraitActions, S extends TraitSelectors<State> = TraitSelectors<State>, M extends TraitStateMutators<State> = TraitStateMutators<State>, C extends AllTraitConfigs = AllTraitConfigs> = {
|
|
59
|
+
initialState: State;
|
|
60
|
+
allActions: A;
|
|
61
|
+
allSelectors: S;
|
|
62
|
+
allMutators: M;
|
|
63
|
+
allConfigs: C;
|
|
64
|
+
};
|
|
65
|
+
export declare type TraitEffectsFactory<State = unknown, A extends TraitActions = TraitActions, S extends TraitSelectors<State> = TraitSelectors<State>, C extends AllTraitConfigs = AllTraitConfigs> = (options: TraitEffectsFactoryConfig<State, A, S, C>) => Type<TraitEffect>[];
|
|
66
|
+
export declare type TraitEffectsFactoryConfig<State = unknown, A extends TraitActions = TraitActions, S extends TraitSelectors<State> = TraitSelectors<State>, C extends AllTraitConfigs = AllTraitConfigs> = {
|
|
67
|
+
allActions: A;
|
|
68
|
+
allSelectors: S;
|
|
69
|
+
allConfigs: C;
|
|
70
|
+
};
|
|
71
|
+
export declare type KeyedConfig<KEY extends string, C> = Record<string, any> & {
|
|
72
|
+
[K in KEY]?: C;
|
|
73
|
+
};
|
|
74
|
+
export interface TraitFactory<State = any, A extends TraitActions = any, S extends TraitSelectors<State> = any, M extends TraitStateMutators<State> = any, KEY extends string = string, C = any, KC = KeyedConfig<KEY, C>> {
|
|
75
|
+
key: KEY;
|
|
76
|
+
config?: C;
|
|
77
|
+
depends?: string[];
|
|
78
|
+
actions: TraitActionsFactory<A, KC>;
|
|
79
|
+
selectors: TraitSelectorsFactory<State, S, KC>;
|
|
80
|
+
initialState: TraitInitialStateFactory<State, KC>;
|
|
81
|
+
mutators: TraitStateMutatorsFactory<State, M, KC>;
|
|
82
|
+
reducer?: TraitReducerFactory<State, A, S, M, KC>;
|
|
83
|
+
effects?: TraitEffectsFactory<State, A, S, KC>;
|
|
84
|
+
}
|
|
85
|
+
declare type ExtractArrayElementTypes<X> = X extends ReadonlyArray<infer T> ? T : never;
|
|
86
|
+
export declare type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R : never;
|
|
87
|
+
export declare type ExtractStateType<T> = T extends TraitFactory<infer State> ? State : T extends ReadonlyArray<TraitFactory> ? UnionToIntersection<ExtractStateType<ExtractArrayElementTypes<T>>> : T extends BaseFeatureTraits<infer State> ? State : never;
|
|
88
|
+
export declare type ExtractActionsType<T> = T extends TraitFactory<any, infer A> ? A : T extends ReadonlyArray<TraitFactory> ? UnionToIntersection<ExtractActionsType<ExtractArrayElementTypes<T>>> : T extends BaseFeatureTraits<any, infer A> ? A : never;
|
|
89
|
+
export declare type ExtractSelectorsType<T> = T extends TraitFactory<any, any, infer S> ? S : T extends ReadonlyArray<TraitFactory> ? UnionToIntersection<ExtractSelectorsType<ExtractArrayElementTypes<T>>> : T extends BaseFeatureTraits<any, any, infer S> ? S : never;
|
|
90
|
+
export declare type ExtractMutatorsType<T> = T extends TraitFactory<any, any, any, infer M> ? M : T extends ReadonlyArray<TraitFactory> ? UnionToIntersection<ExtractMutatorsType<ExtractArrayElementTypes<T>>> : never;
|
|
91
|
+
export declare type ExtractKeyedConfigType<T> = T extends TraitFactory<any, any, any, any, infer KEY, infer C> ? KeyedConfig<KEY, C> : T extends ReadonlyArray<TraitFactory> ? UnionToIntersection<ExtractKeyedConfigType<ExtractArrayElementTypes<T>>> : never;
|
|
92
|
+
export declare type PrefixProps<T, P extends string> = {
|
|
93
|
+
[K in keyof T as `${P}${Capitalize<string & K>}`]: T[K];
|
|
94
|
+
};
|
|
95
|
+
export declare type PostfixProps<T, P extends string> = {
|
|
96
|
+
[K in keyof T as `${Uncapitalize<string & K>}${Capitalize<P>}`]: T[K];
|
|
97
|
+
};
|
|
98
|
+
declare type Replace<Target extends string, FindKey extends string, ReplaceKey extends string> = Target extends `${infer Prefix}${FindKey}${infer Postfix}` ? `${Prefix}${Capitalize<ReplaceKey>}${Postfix}` : Target;
|
|
99
|
+
export declare type ReplaceProps<Target, FindKey extends string, ReplaceKey extends string> = {
|
|
100
|
+
[Prop in keyof Target as Replace<string & Prop, FindKey, ReplaceKey>]: Target[Prop];
|
|
101
|
+
};
|
|
102
|
+
export declare type ReplaceEntityNames<T, EntityName extends string, EntitiesName extends string> = ReplaceProps<ReplaceProps<T, 'Entities', EntitiesName>, 'Entity', EntityName>;
|
|
103
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "./node_modules/ng-packagr/package.schema.json",
|
|
3
|
+
"name": "@ngrx-traits/core",
|
|
4
|
+
"version": "0.0.1",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"peerDependencies": {
|
|
7
|
+
"@angular/common": "^12.0.0",
|
|
8
|
+
"@angular/compiler": "^12.0.0",
|
|
9
|
+
"@angular/core": "^12.0.0",
|
|
10
|
+
"@ngrx/effects": "^12.2.0",
|
|
11
|
+
"@ngrx/entity": "^12.2.0",
|
|
12
|
+
"@ngrx/store": "^12.2.0",
|
|
13
|
+
"rxjs": "~6.6.0"
|
|
14
|
+
},
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/gabrielguerrero/ngrx-traits.git"
|
|
18
|
+
},
|
|
19
|
+
"main": "bundles/ngrx-traits-core.umd.js",
|
|
20
|
+
"module": "fesm2015/ngrx-traits-core.js",
|
|
21
|
+
"es2015": "fesm2015/ngrx-traits-core.js",
|
|
22
|
+
"esm2015": "esm2015/ngrx-traits-core.js",
|
|
23
|
+
"fesm2015": "fesm2015/ngrx-traits-core.js",
|
|
24
|
+
"typings": "ngrx-traits-core.d.ts",
|
|
25
|
+
"sideEffects": false,
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"tslib": "^2.2.0"
|
|
28
|
+
}
|
|
29
|
+
}
|
package/public_api.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './index';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './provide-mock-local-traits';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"main": "../bundles/ngrx-traits-core-testing.umd.js",
|
|
3
|
+
"module": "../fesm2015/ngrx-traits-core-testing.js",
|
|
4
|
+
"es2015": "../fesm2015/ngrx-traits-core-testing.js",
|
|
5
|
+
"esm2015": "../esm2015/testing/ngrx-traits-core-testing.js",
|
|
6
|
+
"fesm2015": "../fesm2015/ngrx-traits-core-testing.js",
|
|
7
|
+
"typings": "ngrx-traits-core-testing.d.ts",
|
|
8
|
+
"sideEffects": false,
|
|
9
|
+
"name": "@ngrx-traits/core/testing"
|
|
10
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { EntityFeatureFactory, TraitsLocalStore } from '@ngrx-traits/core';
|
|
2
|
+
import { Provider, Type } from '@angular/core';
|
|
3
|
+
export declare function provideMockLocalTraits<T extends TraitsLocalStore<EntityFeatureFactory<any, any>>>({ traitFactory, selectors, }: {
|
|
4
|
+
traitFactory: Type<T>;
|
|
5
|
+
selectors?: {
|
|
6
|
+
[key in keyof T['localSelectors']]?: ReturnType<T['localSelectors'][key]>;
|
|
7
|
+
};
|
|
8
|
+
}): Provider[];
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './index';
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Actions, OnIdentifyEffects, OnRunEffects } from '@ngrx/effects';
|
|
2
|
+
import { Store } from '@ngrx/store';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export declare class TraitEffect implements OnIdentifyEffects, OnRunEffects {
|
|
6
|
+
protected actions$: Actions;
|
|
7
|
+
protected store: Store<any>;
|
|
8
|
+
private name;
|
|
9
|
+
componentId: string;
|
|
10
|
+
constructor(actions$: Actions, store: Store<any>);
|
|
11
|
+
ngrxOnIdentifyEffects(): string;
|
|
12
|
+
ngrxOnRunEffects(resolvedEffects$: Observable<any>): Observable<any>;
|
|
13
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<TraitEffect, never>;
|
|
14
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<TraitEffect>;
|
|
15
|
+
}
|
|
16
|
+
export declare function getDestroyActionName(id: string): string;
|
package/util.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ReducerTypes } from '@ngrx/store/src/reducer_creator';
|
|
2
|
+
import { ActionCreator } from '@ngrx/store/src/models';
|
|
3
|
+
export declare function insertIf<State>(condition: any, getElement: () => ReducerTypes<State, ActionCreator[]>): ReducerTypes<State, ActionCreator[]>[];
|
|
4
|
+
export declare function toMap(a: Array<string | number>): {
|
|
5
|
+
[key: string]: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare function capitalize(name: string): string;
|
|
8
|
+
export declare function camelCaseToSentence(text: string): string;
|