@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.
Files changed (74) hide show
  1. package/README.md +24 -0
  2. package/bundles/ngrx-traits-core-testing.umd.js +52 -0
  3. package/bundles/ngrx-traits-core-testing.umd.js.map +1 -0
  4. package/bundles/ngrx-traits-core.umd.js +1212 -0
  5. package/bundles/ngrx-traits-core.umd.js.map +1 -0
  6. package/cache/cache.actions.d.ts +29 -0
  7. package/cache/cache.models.d.ts +20 -0
  8. package/cache/cache.module.d.ts +7 -0
  9. package/cache/cache.reducer.d.ts +3 -0
  10. package/cache/cache.selectors.d.ts +3 -0
  11. package/cache/cache.service.d.ts +65 -0
  12. package/cache/index.d.ts +17 -0
  13. package/create-entity-feature.d.ts +59 -0
  14. package/esm2015/cache/cache.actions.js +6 -0
  15. package/esm2015/cache/cache.actions.js.map +1 -0
  16. package/esm2015/cache/cache.models.js +31 -0
  17. package/esm2015/cache/cache.models.js.map +1 -0
  18. package/esm2015/cache/cache.module.js +18 -0
  19. package/esm2015/cache/cache.module.js.map +1 -0
  20. package/esm2015/cache/cache.reducer.js +141 -0
  21. package/esm2015/cache/cache.reducer.js.map +1 -0
  22. package/esm2015/cache/cache.selectors.js +5 -0
  23. package/esm2015/cache/cache.selectors.js.map +1 -0
  24. package/esm2015/cache/cache.service.js +72 -0
  25. package/esm2015/cache/cache.service.js.map +1 -0
  26. package/esm2015/cache/index.js +7 -0
  27. package/esm2015/cache/index.js.map +1 -0
  28. package/esm2015/create-entity-feature.js +283 -0
  29. package/esm2015/create-entity-feature.js.map +1 -0
  30. package/esm2015/index.js +7 -0
  31. package/esm2015/index.js.map +1 -0
  32. package/esm2015/local-store/disable-local-trait-effects.token.js +6 -0
  33. package/esm2015/local-store/disable-local-trait-effects.token.js.map +1 -0
  34. package/esm2015/local-store/index.js +3 -0
  35. package/esm2015/local-store/index.js.map +1 -0
  36. package/esm2015/local-store/traits-local-store.js +75 -0
  37. package/esm2015/local-store/traits-local-store.js.map +1 -0
  38. package/esm2015/model.js +28 -0
  39. package/esm2015/model.js.map +1 -0
  40. package/esm2015/ngrx-traits-core.js +5 -0
  41. package/esm2015/ngrx-traits-core.js.map +1 -0
  42. package/esm2015/public_api.js +2 -0
  43. package/esm2015/public_api.js.map +1 -0
  44. package/esm2015/testing/index.js +2 -0
  45. package/esm2015/testing/index.js.map +1 -0
  46. package/esm2015/testing/ngrx-traits-core-testing.js +5 -0
  47. package/esm2015/testing/ngrx-traits-core-testing.js.map +1 -0
  48. package/esm2015/testing/provide-mock-local-traits.js +39 -0
  49. package/esm2015/testing/provide-mock-local-traits.js.map +1 -0
  50. package/esm2015/testing/public_api.js +2 -0
  51. package/esm2015/testing/public_api.js.map +1 -0
  52. package/esm2015/trait-effect.js +32 -0
  53. package/esm2015/trait-effect.js.map +1 -0
  54. package/esm2015/util.js +17 -0
  55. package/esm2015/util.js.map +1 -0
  56. package/fesm2015/ngrx-traits-core-testing.js +46 -0
  57. package/fesm2015/ngrx-traits-core-testing.js.map +1 -0
  58. package/fesm2015/ngrx-traits-core.js +699 -0
  59. package/fesm2015/ngrx-traits-core.js.map +1 -0
  60. package/index.d.ts +6 -0
  61. package/local-store/disable-local-trait-effects.token.d.ts +5 -0
  62. package/local-store/index.d.ts +2 -0
  63. package/local-store/traits-local-store.d.ts +33 -0
  64. package/model.d.ts +103 -0
  65. package/ngrx-traits-core.d.ts +5 -0
  66. package/package.json +29 -0
  67. package/public_api.d.ts +1 -0
  68. package/testing/index.d.ts +1 -0
  69. package/testing/ngrx-traits-core-testing.d.ts +5 -0
  70. package/testing/package.json +10 -0
  71. package/testing/provide-mock-local-traits.d.ts +8 -0
  72. package/testing/public_api.d.ts +1 -0
  73. package/trait-effect.d.ts +16 -0
  74. package/util.d.ts +8 -0
@@ -0,0 +1,3 @@
1
+ export * from './traits-local-store';
2
+ export * from './disable-local-trait-effects.token';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/core/src/lib/local-store/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC","sourcesContent":["export * from './traits-local-store';\nexport * from './disable-local-trait-effects.token';\n"]}
@@ -0,0 +1,75 @@
1
+ import { Injectable, Injector } from '@angular/core';
2
+ import { createFeatureSelector, ReducerManager, Store } from '@ngrx/store';
3
+ import { Actions, EffectSources } from '@ngrx/effects';
4
+ import { getDestroyActionName, TraitEffect } from '../trait-effect';
5
+ import { DISABLE_LOCAL_TRAIT_EFFECTS } from './disable-local-trait-effects.token';
6
+ import * as i0 from "@angular/core";
7
+ let id = 0;
8
+ function uniqueComponentId() {
9
+ return id++;
10
+ }
11
+ export function buildLocalTraits(injector, componentName, traitFactory) {
12
+ var _a;
13
+ const reducers = injector.get(ReducerManager);
14
+ const effects = injector.get(EffectSources);
15
+ const store = injector.get(Store);
16
+ const componentId = `${componentName}_${uniqueComponentId()}`;
17
+ const traits = traitFactory({
18
+ featureSelector: createFeatureSelector(componentId),
19
+ actionsGroupKey: `[${componentId}]`,
20
+ });
21
+ traits.reducer && reducers.addReducer(componentId, traits.reducer);
22
+ const providers = (traits.effects && [...traits.effects.map((e) => ({ provide: e }))]) || [];
23
+ const disableLocalTraitsEffects = injector.get(DISABLE_LOCAL_TRAIT_EFFECTS, false);
24
+ if (!disableLocalTraitsEffects) {
25
+ const i = Injector.create({
26
+ providers: providers,
27
+ parent: injector,
28
+ });
29
+ (_a = traits.effects) === null || _a === void 0 ? void 0 : _a.forEach((e) => {
30
+ const effect = i.get(e);
31
+ effect.componentId = componentId;
32
+ effects.addEffects(effect);
33
+ });
34
+ }
35
+ function destroy() {
36
+ store.dispatch({ type: getDestroyActionName(componentId) });
37
+ /**
38
+ * A service that extends TraitsLocalStore and other component service are destroyed
39
+ * before the component that depends on them, this causes that any subscriptions
40
+ * to selectors of the TraitsLocalStore could fail because the store state is removed before
41
+ * they are unsubscribe by the onDestroy of the component. Executing reducers.removeReducer
42
+ * inside setTimeout ensures the state is remove after the component onDestroy was called,
43
+ * avoiding the before mentioned possible issues.
44
+ */
45
+ setTimeout(() => reducers.removeReducer(componentId));
46
+ }
47
+ return {
48
+ destroy,
49
+ actions: traits.actions,
50
+ selectors: traits.selectors,
51
+ addEffects(localEffect) {
52
+ localEffect.componentId = componentId;
53
+ effects.addEffects(localEffect);
54
+ },
55
+ };
56
+ }
57
+ export class TraitsLocalStore extends TraitEffect {
58
+ constructor(injector) {
59
+ super(injector.get(Actions), injector.get(Store));
60
+ this.injector = injector;
61
+ const config = this.setup();
62
+ this.traits = buildLocalTraits(this.injector, config.componentName, config.traitsFactory);
63
+ this.localActions = this.traits.actions;
64
+ this.localSelectors = this.traits.selectors;
65
+ }
66
+ ngOnDestroy() {
67
+ this.traits.destroy();
68
+ }
69
+ }
70
+ TraitsLocalStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: TraitsLocalStore, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable });
71
+ TraitsLocalStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: TraitsLocalStore });
72
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: TraitsLocalStore, decorators: [{
73
+ type: Injectable
74
+ }], ctorParameters: function () { return [{ type: i0.Injector }]; } });
75
+ //# sourceMappingURL=traits-local-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"traits-local-store.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/core/src/lib/local-store/traits-local-store.ts"],"names":[],"mappings":"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","sourcesContent":["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"]}
@@ -0,0 +1,28 @@
1
+ export {};
2
+ // type G = ReplaceProps<
3
+ // ReplaceProps<
4
+ // {
5
+ // loadEntities: 1;
6
+ // loadEntitiesSuccess: 2;
7
+ // selectEntities: 3;
8
+ // selectEntity: 4;
9
+ // },
10
+ // 'Entities',
11
+ // 'products'
12
+ // >,
13
+ // 'Entity',
14
+ // 'product'
15
+ // >;
16
+ //
17
+ // const g: G = {};
18
+ // // g.
19
+ // type F= ReplaceEntityNames<{
20
+ // loadEntities: 1;
21
+ // loadEntitiesSuccess: 2;
22
+ // selectEntities: 3;
23
+ // selectEntity: 4;
24
+ // }, 'product','products'>;
25
+ // const f: F = {};
26
+ // f.
27
+ // TODO clean up file
28
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../../../libs/ngrx-traits/core/src/lib/model.ts"],"names":[],"mappings":";AAkSA,yBAAyB;AACzB,kBAAkB;AAClB,QAAQ;AACR,yBAAyB;AACzB,gCAAgC;AAChC,2BAA2B;AAC3B,yBAAyB;AACzB,SAAS;AACT,kBAAkB;AAClB,iBAAiB;AACjB,OAAO;AACP,cAAc;AACd,cAAc;AACd,KAAK;AACL,EAAE;AACF,mBAAmB;AACnB,QAAQ;AACR,iCAAiC;AACjC,qBAAqB;AACrB,4BAA4B;AAC5B,uBAAuB;AACvB,qBAAqB;AACrB,4BAA4B;AAC5B,mBAAmB;AACnB,KAAK;AACL,qBAAqB","sourcesContent":["/* 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"]}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=ngrx-traits-core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngrx-traits-core.js","sourceRoot":"","sources":["../../../../../libs/ngrx-traits/core/src/lib/ngrx-traits-core.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC","sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './index';
2
+ //# sourceMappingURL=public_api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_api.js","sourceRoot":"","sources":["../../../../../libs/ngrx-traits/core/src/lib/public_api.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC","sourcesContent":["export * from './index';\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './provide-mock-local-traits';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/core/testing/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,6BAA6B,CAAC","sourcesContent":["export * from './provide-mock-local-traits';\n"]}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=ngrx-traits-core-testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngrx-traits-core-testing.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/core/testing/src/ngrx-traits-core-testing.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC","sourcesContent":["/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"]}
@@ -0,0 +1,39 @@
1
+ import { DISABLE_LOCAL_TRAIT_EFFECTS, } from '@ngrx-traits/core';
2
+ import { Injector } from '@angular/core';
3
+ import { EffectSources } from '@ngrx/effects';
4
+ import { MockStore } from '@ngrx/store/testing';
5
+ /*
6
+ * NOTE: provideMockStore({initialState}) initialState will be ignored with local traits store!
7
+ * Override selectors instead
8
+ *
9
+ * You still need to provideMockStore and provideMockActions
10
+ * */
11
+ export function provideMockLocalTraits({ traitFactory, selectors, }) {
12
+ return [
13
+ { provide: DISABLE_LOCAL_TRAIT_EFFECTS, useValue: true },
14
+ {
15
+ provide: EffectSources,
16
+ useValue: {
17
+ addEffects: () => {
18
+ return;
19
+ },
20
+ },
21
+ },
22
+ {
23
+ provide: traitFactory,
24
+ deps: [Injector, MockStore],
25
+ useFactory: (injector, mockStore) => {
26
+ const trait = new traitFactory(injector);
27
+ if (selectors) {
28
+ Object.keys(selectors).forEach((key) => {
29
+ var _a;
30
+ return ((_a = trait.localSelectors) === null || _a === void 0 ? void 0 : _a[key]) &&
31
+ mockStore.overrideSelector(trait.localSelectors[key], selectors === null || selectors === void 0 ? void 0 : selectors[key]);
32
+ });
33
+ }
34
+ return trait;
35
+ },
36
+ },
37
+ ];
38
+ }
39
+ //# sourceMappingURL=provide-mock-local-traits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provide-mock-local-traits.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/core/testing/src/provide-mock-local-traits.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,2BAA2B,GAC5B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAkB,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD;;;;;KAKK;AACL,MAAM,UAAU,sBAAsB,CAEpC,EACA,YAAY,EACZ,SAAS,GAMV;IACC,OAAO;QACL,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE;QACxD;YACE,OAAO,EAAE,aAAa;YACtB,QAAQ,EAAE;gBACR,UAAU,EAAE,GAAG,EAAE;oBACf,OAAO;gBACT,CAAC;aACF;SACF;QACD;YACE,OAAO,EAAE,YAAY;YACrB,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC3B,UAAU,EAAE,CAAC,QAAkB,EAAE,SAAoB,EAAE,EAAE;gBACvD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACzC,IAAI,SAAS,EAAE;oBACb,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAC5B,CAAC,GAAG,EAAE,EAAE;;wBACN,OAAA,CAAA,MAAA,KAAK,CAAC,cAAc,0CAAG,GAAG,CAAC;4BAC3B,SAAS,CAAC,gBAAgB,CACxB,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EACzB,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAG,GAAG,CAAC,CACjB,CAAA;qBAAA,CACJ,CAAC;iBACH;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;SACF;KACF,CAAC;AACJ,CAAC","sourcesContent":["import {\n EntityFeatureFactory,\n TraitsLocalStore,\n DISABLE_LOCAL_TRAIT_EFFECTS,\n} from '@ngrx-traits/core';\nimport { Injector, Provider, Type } from '@angular/core';\nimport { EffectSources } from '@ngrx/effects';\nimport { MockStore } from '@ngrx/store/testing';\n\n/*\n * NOTE: provideMockStore({initialState}) initialState will be ignored with local traits store!\n * Override selectors instead\n *\n * You still need to provideMockStore and provideMockActions\n * */\nexport function provideMockLocalTraits<\n T extends TraitsLocalStore<EntityFeatureFactory<any, any>>\n>({\n traitFactory,\n selectors,\n}: {\n traitFactory: Type<T>;\n selectors?: {\n [key in keyof T['localSelectors']]?: ReturnType<T['localSelectors'][key]>;\n };\n}): Provider[] {\n return [\n { provide: DISABLE_LOCAL_TRAIT_EFFECTS, useValue: true },\n {\n provide: EffectSources,\n useValue: {\n addEffects: () => {\n return;\n },\n },\n },\n {\n provide: traitFactory,\n deps: [Injector, MockStore],\n useFactory: (injector: Injector, mockStore: MockStore) => {\n const trait = new traitFactory(injector);\n if (selectors) {\n Object.keys(selectors).forEach(\n (key) =>\n trait.localSelectors?.[key] &&\n mockStore.overrideSelector(\n trait.localSelectors[key],\n selectors?.[key]\n )\n );\n }\n return trait;\n },\n },\n ];\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export * from './index';
2
+ //# sourceMappingURL=public_api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"public_api.js","sourceRoot":"","sources":["../../../../../../libs/ngrx-traits/core/testing/src/public_api.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC","sourcesContent":["export * from './index';\n"]}
@@ -0,0 +1,32 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { takeUntil } from 'rxjs/operators';
3
+ import { Actions, ofType, } from '@ngrx/effects';
4
+ import { Store } from '@ngrx/store';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@ngrx/effects";
7
+ import * as i2 from "@ngrx/store";
8
+ export class TraitEffect {
9
+ constructor(actions$, store) {
10
+ this.actions$ = actions$;
11
+ this.store = store;
12
+ this.name = this.constructor.name;
13
+ this.componentId = '';
14
+ }
15
+ ngrxOnIdentifyEffects() {
16
+ return this.componentId ? this.name + this.componentId : '';
17
+ }
18
+ ngrxOnRunEffects(resolvedEffects$) {
19
+ return this.componentId
20
+ ? resolvedEffects$.pipe(takeUntil(this.actions$.pipe(ofType(getDestroyActionName(this.componentId)))))
21
+ : resolvedEffects$;
22
+ }
23
+ }
24
+ TraitEffect.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: TraitEffect, deps: [{ token: i1.Actions }, { token: i2.Store }], target: i0.ɵɵFactoryTarget.Injectable });
25
+ TraitEffect.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: TraitEffect });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.1.2", ngImport: i0, type: TraitEffect, decorators: [{
27
+ type: Injectable
28
+ }], ctorParameters: function () { return [{ type: i1.Actions }, { type: i2.Store }]; } });
29
+ export function getDestroyActionName(id) {
30
+ return `[${id}] Destroyed`;
31
+ }
32
+ //# sourceMappingURL=trait-effect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trait-effect.js","sourceRoot":"","sources":["../../../../../libs/ngrx-traits/core/src/lib/trait-effect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EACL,OAAO,EACP,MAAM,GAGP,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;;;;AAIpC,MAAM,OAAO,WAAW;IAGtB,YACY,QAAiB,EACjB,KAAiB;QADjB,aAAQ,GAAR,QAAQ,CAAS;QACjB,UAAK,GAAL,KAAK,CAAY;QAJrB,SAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAC9B,gBAAW,GAAG,EAAE,CAAC;IAIrB,CAAC;IAEJ,qBAAqB;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,CAAC;IAED,gBAAgB,CAAC,gBAAiC;QAChD,OAAO,IAAI,CAAC,WAAW;YACrB,CAAC,CAAC,gBAAgB,CAAC,IAAI,CACnB,SAAS,CACP,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CACnE,CACF;YACH,CAAC,CAAC,gBAAgB,CAAC;IACvB,CAAC;;wGApBU,WAAW;4GAAX,WAAW;2FAAX,WAAW;kBADvB,UAAU;;AAwBX,MAAM,UAAU,oBAAoB,CAAC,EAAU;IAC7C,OAAO,IAAI,EAAE,aAAa,CAAC;AAC7B,CAAC","sourcesContent":["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"]}
@@ -0,0 +1,17 @@
1
+ export function insertIf(condition, getElement) {
2
+ return condition ? [getElement()] : [];
3
+ }
4
+ export function toMap(a) {
5
+ return a.reduce((acum, value) => {
6
+ acum[value] = true;
7
+ return acum;
8
+ }, {});
9
+ }
10
+ export function capitalize(name) {
11
+ return name.charAt(0).toUpperCase() + name.slice(1);
12
+ }
13
+ export function camelCaseToSentence(text) {
14
+ const result = text.replace(/([A-Z])/g, ' $1');
15
+ return result.charAt(0).toUpperCase() + result.slice(1);
16
+ }
17
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../../libs/ngrx-traits/core/src/lib/util.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,QAAQ,CACtB,SAAc,EACd,UAAsD;IAEtD,OAAO,SAAS,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AACzC,CAAC;AACD,MAAM,UAAU,KAAK,CAAC,CAAyB;IAC7C,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,IAAgC,EAAE,KAAK,EAAE,EAAE;QAC1D,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,IAAY;IACrC,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC","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"]}
@@ -0,0 +1,46 @@
1
+ import { DISABLE_LOCAL_TRAIT_EFFECTS } from '@ngrx-traits/core';
2
+ import { Injector } from '@angular/core';
3
+ import { EffectSources } from '@ngrx/effects';
4
+ import { MockStore } from '@ngrx/store/testing';
5
+
6
+ /*
7
+ * NOTE: provideMockStore({initialState}) initialState will be ignored with local traits store!
8
+ * Override selectors instead
9
+ *
10
+ * You still need to provideMockStore and provideMockActions
11
+ * */
12
+ function provideMockLocalTraits({ traitFactory, selectors, }) {
13
+ return [
14
+ { provide: DISABLE_LOCAL_TRAIT_EFFECTS, useValue: true },
15
+ {
16
+ provide: EffectSources,
17
+ useValue: {
18
+ addEffects: () => {
19
+ return;
20
+ },
21
+ },
22
+ },
23
+ {
24
+ provide: traitFactory,
25
+ deps: [Injector, MockStore],
26
+ useFactory: (injector, mockStore) => {
27
+ const trait = new traitFactory(injector);
28
+ if (selectors) {
29
+ Object.keys(selectors).forEach((key) => {
30
+ var _a;
31
+ return ((_a = trait.localSelectors) === null || _a === void 0 ? void 0 : _a[key]) &&
32
+ mockStore.overrideSelector(trait.localSelectors[key], selectors === null || selectors === void 0 ? void 0 : selectors[key]);
33
+ });
34
+ }
35
+ return trait;
36
+ },
37
+ },
38
+ ];
39
+ }
40
+
41
+ /**
42
+ * Generated bundle index. Do not edit.
43
+ */
44
+
45
+ export { provideMockLocalTraits };
46
+ //# sourceMappingURL=ngrx-traits-core-testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ngrx-traits-core-testing.js","sources":["../../../../../libs/ngrx-traits/core/testing/src/provide-mock-local-traits.ts","../../../../../libs/ngrx-traits/core/testing/src/ngrx-traits-core-testing.ts"],"sourcesContent":["import {\n EntityFeatureFactory,\n TraitsLocalStore,\n DISABLE_LOCAL_TRAIT_EFFECTS,\n} from '@ngrx-traits/core';\nimport { Injector, Provider, Type } from '@angular/core';\nimport { EffectSources } from '@ngrx/effects';\nimport { MockStore } from '@ngrx/store/testing';\n\n/*\n * NOTE: provideMockStore({initialState}) initialState will be ignored with local traits store!\n * Override selectors instead\n *\n * You still need to provideMockStore and provideMockActions\n * */\nexport function provideMockLocalTraits<\n T extends TraitsLocalStore<EntityFeatureFactory<any, any>>\n>({\n traitFactory,\n selectors,\n}: {\n traitFactory: Type<T>;\n selectors?: {\n [key in keyof T['localSelectors']]?: ReturnType<T['localSelectors'][key]>;\n };\n}): Provider[] {\n return [\n { provide: DISABLE_LOCAL_TRAIT_EFFECTS, useValue: true },\n {\n provide: EffectSources,\n useValue: {\n addEffects: () => {\n return;\n },\n },\n },\n {\n provide: traitFactory,\n deps: [Injector, MockStore],\n useFactory: (injector: Injector, mockStore: MockStore) => {\n const trait = new traitFactory(injector);\n if (selectors) {\n Object.keys(selectors).forEach(\n (key) =>\n trait.localSelectors?.[key] &&\n mockStore.overrideSelector(\n trait.localSelectors[key],\n selectors?.[key]\n )\n );\n }\n return trait;\n },\n },\n ];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":";;;;;AASA;;;;;;SAMgB,sBAAsB,CAEpC,EACA,YAAY,EACZ,SAAS,GAMV;IACC,OAAO;QACL,EAAE,OAAO,EAAE,2BAA2B,EAAE,QAAQ,EAAE,IAAI,EAAE;QACxD;YACE,OAAO,EAAE,aAAa;YACtB,QAAQ,EAAE;gBACR,UAAU,EAAE;oBACV,OAAO;iBACR;aACF;SACF;QACD;YACE,OAAO,EAAE,YAAY;YACrB,IAAI,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC;YAC3B,UAAU,EAAE,CAAC,QAAkB,EAAE,SAAoB;gBACnD,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACzC,IAAI,SAAS,EAAE;oBACb,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAC5B,CAAC,GAAG;;wBACF,OAAA,CAAA,MAAA,KAAK,CAAC,cAAc,0CAAG,GAAG,CAAC;4BAC3B,SAAS,CAAC,gBAAgB,CACxB,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,EACzB,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAG,GAAG,CAAC,CACjB,CAAA;qBAAA,CACJ,CAAC;iBACH;gBACD,OAAO,KAAK,CAAC;aACd;SACF;KACF,CAAC;AACJ;;ACvDA;;;;;;"}