xt-store 0.5.5 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import { map, firstValueFrom, lastValueFrom, finalize, Subscription, of, from } from 'rxjs';
1
+ import { map, firstValueFrom, of, lastValueFrom, finalize, Subscription, from } from 'rxjs';
2
2
  import { xtTypeManager, Counters, nonTemporaryId } from 'xt-type';
3
3
  import * as i0 from '@angular/core';
4
4
  import { Injectable, inject } from '@angular/core';
@@ -8,6 +8,50 @@ import { map as map$1, mergeAll } from 'rxjs/operators';
8
8
  import * as i1 from '@angular/common/http';
9
9
  import { HttpClient, HttpHeaders } from '@angular/common/http';
10
10
 
11
+ class XtStoreCriteria {
12
+ constructor(name, value, operator) {
13
+ this.name = name;
14
+ this.value = value;
15
+ if (!operator)
16
+ this.operator = '=';
17
+ else {
18
+ this.operator = operator;
19
+ }
20
+ }
21
+ filter(toFilter) {
22
+ const testValue = toFilter[this.name];
23
+ switch (this.operator) {
24
+ case '=':
25
+ return testValue == this.value;
26
+ case '<':
27
+ return testValue < this.value;
28
+ case '<=':
29
+ return testValue < this.value;
30
+ default:
31
+ return true;
32
+ }
33
+ }
34
+ }
35
+ var XtSortByDirection;
36
+ (function (XtSortByDirection) {
37
+ XtSortByDirection["None"] = "None";
38
+ XtSortByDirection["Ascending"] = "Ascending";
39
+ XtSortByDirection["Descending"] = "Descending";
40
+ })(XtSortByDirection || (XtSortByDirection = {}));
41
+ var XtGroupByShow;
42
+ (function (XtGroupByShow) {
43
+ XtGroupByShow["OnlyLowest"] = "OnlyLowest";
44
+ XtGroupByShow["OnlyHighest"] = "OnlyHighest";
45
+ })(XtGroupByShow || (XtGroupByShow = {}));
46
+ var XtGroupByOperation;
47
+ (function (XtGroupByOperation) {
48
+ XtGroupByOperation["Count"] = "Count";
49
+ XtGroupByOperation["Sum"] = "Sum";
50
+ XtGroupByOperation["Average"] = "Average";
51
+ XtGroupByOperation["Minimum"] = "Minimum";
52
+ XtGroupByOperation["Maximum"] = "Maximum";
53
+ })(XtGroupByOperation || (XtGroupByOperation = {}));
54
+
11
55
  class XtStoreManager {
12
56
  static { this.testProvider = null; }
13
57
  constructor(provider) {
@@ -84,6 +128,9 @@ class XtStoreManager {
84
128
  removeDefaultProvider() {
85
129
  this.removeProvider();
86
130
  }
131
+ newStoreCriteria(name, value, operator) {
132
+ return new XtStoreCriteria(name, value, operator);
133
+ }
87
134
  storeEntity(name, entity) {
88
135
  return this.getProviderSafe(name).storeEntity(name, entity);
89
136
  }
@@ -116,48 +163,11 @@ class XtStoreManager {
116
163
  this.testProvider = testProvider;
117
164
  }
118
165
  }
119
- function xtStoreManager() {
166
+ function xtStoreManager$1() {
120
167
  return globalThis.XT_STORE_MGR;
121
168
  }
122
169
  globalThis.XT_STORE_MGR = new XtStoreManager();
123
- globalThis.xtStoreManager = xtStoreManager;
124
-
125
- var XtStoreCriteriaOperator;
126
- (function (XtStoreCriteriaOperator) {
127
- XtStoreCriteriaOperator["EQUALS"] = "=";
128
- XtStoreCriteriaOperator["LESS_THAN"] = "<";
129
- XtStoreCriteriaOperator["LESS_THAN_EQUAL"] = "<=";
130
- })(XtStoreCriteriaOperator || (XtStoreCriteriaOperator = {}));
131
- class XtStoreCriteria {
132
- constructor(name, value, operator) {
133
- this.name = name;
134
- this.value = value;
135
- if (!operator)
136
- this.operator = XtStoreCriteriaOperator.EQUALS;
137
- else {
138
- this.operator = operator;
139
- }
140
- }
141
- }
142
- var XtSortByDirection;
143
- (function (XtSortByDirection) {
144
- XtSortByDirection["None"] = "None";
145
- XtSortByDirection["Ascending"] = "Ascending";
146
- XtSortByDirection["Descending"] = "Descending";
147
- })(XtSortByDirection || (XtSortByDirection = {}));
148
- var XtGroupByShow;
149
- (function (XtGroupByShow) {
150
- XtGroupByShow["OnlyLowest"] = "OnlyLowest";
151
- XtGroupByShow["OnlyHighest"] = "OnlyHighest";
152
- })(XtGroupByShow || (XtGroupByShow = {}));
153
- var XtGroupByOperation;
154
- (function (XtGroupByOperation) {
155
- XtGroupByOperation["Count"] = "Count";
156
- XtGroupByOperation["Sum"] = "Sum";
157
- XtGroupByOperation["Average"] = "Average";
158
- XtGroupByOperation["Minimum"] = "Minimum";
159
- XtGroupByOperation["Maximum"] = "Maximum";
160
- })(XtGroupByOperation || (XtGroupByOperation = {}));
170
+ globalThis.xtStoreManager = xtStoreManager$1;
161
171
 
162
172
  /**
163
173
  * Helps handle metadata information about loaded items
@@ -176,11 +186,11 @@ class XtStoreProviderHelper {
176
186
  for (const criterium of criteria) {
177
187
  const toTest = element[criterium.name];
178
188
  switch (criterium.operator) {
179
- case XtStoreCriteriaOperator.EQUALS:
189
+ case '=':
180
190
  return criterium.value == toTest;
181
- case XtStoreCriteriaOperator.LESS_THAN:
191
+ case '<':
182
192
  return toTest < criterium.value;
183
- case XtStoreCriteriaOperator.LESS_THAN_EQUAL:
193
+ case '<=':
184
194
  return toTest <= criterium.value;
185
195
  default:
186
196
  throw new Error("Operator " + criterium.operator + " unknown");
@@ -569,23 +579,29 @@ class AbstractXtStoreProvider {
569
579
  }
570
580
  }
571
581
 
572
- const selectId = (data) => {
573
- if (data._id == null)
574
- throw new Error("ManagedData with no entity Id used in the store.", { cause: data });
575
- return data._id;
576
- };
577
- const xtStoreEntityConfig = entityConfig({
578
- entity: type(),
579
- selectId: selectId
580
- });
581
- function withXtStoreProvider(entityName, storeProvider) {
582
- return signalStoreFeature(withState({ entityName, loading: false }), withEntities(xtStoreEntityConfig), withProps(() => ({
583
- _storeProvider: storeProvider
582
+ function selectId() {
583
+ return (data) => {
584
+ if (data._id == null)
585
+ throw new Error("ManagedData with no entity Id used in the store.", { cause: data });
586
+ return data._id;
587
+ };
588
+ }
589
+ function xtStoreEntityConfig() {
590
+ return entityConfig({
591
+ entity: type(),
592
+ selectId: selectId()
593
+ });
594
+ }
595
+ ;
596
+ function withXtStoreProvider(entityName, storeProvider, storeMgr) {
597
+ return signalStoreFeature(withState({ entityName, loading: false }), withEntities(xtStoreEntityConfig()), withProps(() => ({
598
+ _storeProvider: storeProvider,
599
+ _entityConfig: xtStoreEntityConfig()
584
600
  })), withMethods((store) => ({
585
601
  async storeEntity(toStore) {
586
602
  patchState(store, { loading: true });
587
603
  return store._storeProvider.storeEntity(entityName, toStore).then((stored) => {
588
- patchState(store, setEntity(stored, xtStoreEntityConfig));
604
+ patchState(store, setEntity(stored, store._entityConfig));
589
605
  return stored;
590
606
  }).finally(() => {
591
607
  patchState(store, { loading: false });
@@ -594,7 +610,7 @@ function withXtStoreProvider(entityName, storeProvider) {
594
610
  fetchEntities() {
595
611
  patchState(store, { loading: true });
596
612
  return lastValueFrom(store._storeProvider.searchEntities(entityName).pipe(map((entities) => {
597
- patchState(store, setEntities(entities, xtStoreEntityConfig));
613
+ patchState(store, setEntities(entities, store._entityConfig));
598
614
  }), finalize(() => {
599
615
  patchState(store, { loading: false });
600
616
  })));
@@ -612,7 +628,7 @@ function withXtStoreProvider(entityName, storeProvider) {
612
628
  patchState(store, { loading: true });
613
629
  return store._storeProvider.loadEntity(entityName, id).then((loaded) => {
614
630
  if (loaded != null)
615
- patchState(store, setEntity(loaded, xtStoreEntityConfig));
631
+ patchState(store, setEntity(loaded, store._entityConfig));
616
632
  return loaded;
617
633
  }).finally(() => {
618
634
  patchState(store, { loading: false });
@@ -622,7 +638,7 @@ function withXtStoreProvider(entityName, storeProvider) {
622
638
  patchState(store, { loading: true });
623
639
  return store._storeProvider.loadEntity(entityName, id).then((loaded) => {
624
640
  if (loaded != null)
625
- patchState(store, setEntity(loaded, xtStoreEntityConfig));
641
+ patchState(store, setEntity(loaded, store._entityConfig));
626
642
  return loaded;
627
643
  }).then((loaded) => {
628
644
  if (loaded == null)
@@ -642,13 +658,36 @@ function withXtStoreProvider(entityName, storeProvider) {
642
658
  }).finally(() => {
643
659
  patchState(store, { loading: false });
644
660
  });
661
+ },
662
+ searchEntities(...criteria) {
663
+ patchState(store, { loading: true });
664
+ try {
665
+ const listEntities = store.entities();
666
+ let toAdd = true;
667
+ const ret = new Array();
668
+ for (const entity of listEntities) {
669
+ toAdd = true;
670
+ for (const crit of criteria) {
671
+ if (!crit.filter(entity)) {
672
+ toAdd = false;
673
+ break;
674
+ }
675
+ }
676
+ if (toAdd)
677
+ ret.push(entity);
678
+ }
679
+ return of(ret);
680
+ }
681
+ finally {
682
+ patchState(store, { loading: false });
683
+ }
645
684
  }
646
685
  })));
647
686
  }
648
687
 
649
688
  class XtStoreManagerService {
650
689
  constructor() {
651
- this.storeManager = xtStoreManager();
690
+ this.storeManager = xtStoreManager$1();
652
691
  this.entityToStoreMap = new Map();
653
692
  }
654
693
  getStoreFor(entityName) {
@@ -826,7 +865,7 @@ class XtMemoryStoreProvider extends AbstractXtStoreProvider {
826
865
 
827
866
  class StoreTestBed {
828
867
  constructor() {
829
- this.storeManager = new XtStoreManager();
868
+ this.storeManager = xtStoreManager();
830
869
  }
831
870
  static ensureMemoryProviderOnly() {
832
871
  XtStoreManager.setTestMode(new XtMemoryStoreProvider());
@@ -852,5 +891,5 @@ class StoreTestBed {
852
891
  * Generated bundle index. Do not edit.
853
892
  */
854
893
 
855
- export { AbstractXtStoreProvider, DontCodeStoreGroupedByEntities, DontCodeStoreGroupedByValues, DontCodeStorePreparedEntities, StoreTestBed, XtApiStoreProvider, XtGroupByOperation, XtGroupByShow, XtMemoryStoreProvider, XtSortByDirection, XtStoreCriteria, XtStoreCriteriaOperator, XtStoreGroupBy, XtStoreGroupByAggregate, XtStoreManager, XtStoreManagerService, XtStoreProviderHelper, XtStoreSortBy, withXtStoreProvider, xtStoreManager };
894
+ export { AbstractXtStoreProvider, DontCodeStoreGroupedByEntities, DontCodeStoreGroupedByValues, DontCodeStorePreparedEntities, StoreTestBed, XtApiStoreProvider, XtGroupByOperation, XtGroupByShow, XtMemoryStoreProvider, XtSortByDirection, XtStoreCriteria, XtStoreGroupBy, XtStoreGroupByAggregate, XtStoreManager, XtStoreManagerService, XtStoreProviderHelper, XtStoreSortBy, selectId, withXtStoreProvider, xtStoreEntityConfig, xtStoreManager$1 as xtStoreManager };
856
895
  //# sourceMappingURL=xt-store.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"xt-store.mjs","sources":["../../../projects/store/src/store-manager/xt-store-manager.ts","../../../projects/store/src/xt-store-parameters.ts","../../../projects/store/src/store-provider/xt-store-provider-helper.ts","../../../projects/store/src/xt-reporting.ts","../../../projects/store/src/store-provider/xt-store-provider.ts","../../../projects/store/src/store-entity/store-entity-feature.ts","../../../projects/store/src/store-manager-service/xt-store-manager.service.ts","../../../projects/store/src/api-provider/xt-api-store-provider.ts","../../../projects/store/src/store-provider/xt-memory-store-provider.ts","../../../projects/store/src/test/store-test-bed.ts","../../../projects/store/src/public-api.ts","../../../projects/store/src/xt-store.ts"],"sourcesContent":["import { XtStoreProvider } from '../store-provider/xt-store-provider';\nimport { Observable } from 'rxjs';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { XtStoreCriteria, XtGroupBy, XtSortBy } from '../xt-store-parameters';\nimport { DontCodeStorePreparedEntities } from '../store-provider/xt-store-provider-helper';\nimport { XtDataTransformer } from '../store-provider/xt-data-transformer';\nimport { ManagedData } from 'xt-type';\n\nexport class XtStoreManager {\n private _default?: XtStoreProvider<any>;\n private providerByPosition = new Map<string, XtStoreProvider<any>>();\n private providerByType = new Map<string, XtStoreProvider<any>>();\n\n protected static testProvider:XtStoreProvider<any>|null = null;\n\n constructor(\n provider?: XtStoreProvider<any>\n ) {\n this._default = provider;\n this.reset();\n }\n\n reset() {\n this.providerByPosition.clear();\n this.providerByType.clear();\n }\n\n getProvider<T extends ManagedData = ManagedData>(name?: string): XtStoreProvider<T> | undefined {\n // Override for testing\n if( XtStoreManager.testProvider!=null) return XtStoreManager.testProvider;\n\n if (name == null) {\n return this._default;\n } else {\n let ret = null;\n // Try to find if the entity is loaded from a defined source\n /*const srcDefinition = this.modelMgr.findTargetOfProperty(\n DontCodeModel.APP_ENTITIES_FROM_NODE,\n position\n )?.value as DontCodeSourceType;\n if (srcDefinition) {\n ret = this.providerByType.get(srcDefinition.type);\n }\n if (!ret) {*/\n ret = this.providerByPosition.get(name);\n //}\n return ret ?? this._default;\n }\n }\n\n getProviderSafe<T extends ManagedData = ManagedData>(name?: string): XtStoreProvider<T> {\n const ret = this.getProvider<T>(name);\n if (ret == null) {\n throw new Error('Trying to get an undefined or null provider');\n } else {\n return ret;\n }\n }\n\n getDefaultProvider<T extends ManagedData = ManagedData>(): XtStoreProvider<T> | undefined {\n return this.getProvider();\n }\n\n getDefaultProviderSafe<T extends ManagedData = ManagedData>(): XtStoreProvider<T> {\n return this.getProviderSafe();\n }\n\n setProvider<T extends ManagedData = ManagedData>(value: XtStoreProvider<T>, name?: string): void {\n if (name == null) this._default = value;\n else {\n this.providerByPosition.set(name, value);\n }\n }\n\n setProviderForSourceType<T extends ManagedData = ManagedData>(\n value: XtStoreProvider<T>,\n srcType: string\n ): void {\n this.providerByType.set(srcType, value);\n }\n\n setDefaultProvider<T extends ManagedData = ManagedData>(value: XtStoreProvider<T>): void {\n this.setProvider(value);\n }\n\n removeProvider(name?: string): void {\n if (name == null) this._default = undefined;\n else {\n this.providerByPosition.delete(name);\n }\n }\n\n removeProviderForSourceType(srcType: string): void {\n this.providerByType.delete(srcType);\n }\n\n removeDefaultProvider(): void {\n this.removeProvider();\n }\n\n storeEntity<T extends ManagedData = ManagedData>(name: string, entity: T): Promise<T> {\n return this.getProviderSafe<T>(name).storeEntity(name, entity);\n }\n\n loadEntity<T extends ManagedData = ManagedData>(name: string, key: any): Promise<T|undefined> {\n return this.getProviderSafe<T>(name).loadEntity(name, key);\n }\n\n safeLoadEntity<T extends ManagedData = ManagedData>(name: string, key: any): Promise<T> {\n return this.getProviderSafe<T>(name).safeLoadEntity(name, key);\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n return this.getProviderSafe(name).deleteEntity(name, key);\n }\n\n searchEntities<T extends ManagedData = ManagedData>(\n name: string,\n ...criteria: XtStoreCriteria[]\n ): Observable<Array<T>> {\n return this.getProviderSafe<T>(name).searchEntities(name, ...criteria);\n }\n\n searchAndPrepareEntities<T extends ManagedData = ManagedData>(\n name: string,\n sort?:XtSortBy,\n groupBy?:XtGroupBy,\n dataTransformer?:XtDataTransformer,\n ...criteria: XtStoreCriteria[]\n ): Observable<DontCodeStorePreparedEntities<T>> {\n return this.getProviderSafe<T>(name).searchAndPrepareEntities(name, sort, groupBy, dataTransformer, ...criteria);\n }\n\n\n canStoreDocument(name?: string): boolean {\n const res = this.getProvider(name)?.canStoreDocument();\n if (res) return res;\n else return false;\n }\n\n storeDocuments(\n toStore: File[],\n name?: string\n ): Observable<UploadedDocumentInfo> {\n return this.getProviderSafe(name).storeDocuments(toStore);\n }\n\n public static setTestMode (testProvider:XtStoreProvider<any>) {\n this.testProvider=testProvider;\n }\n\n}\n\n/**\n * The global store Mgr\n */\n\ndeclare global {\n var XT_STORE_MGR: XtStoreManager;\n var xtStoreManager: () => XtStoreManager;\n}\nexport function xtStoreManager (): XtStoreManager {\n return globalThis.XT_STORE_MGR;\n}\n\nglobalThis.XT_STORE_MGR = new XtStoreManager();\nglobalThis.xtStoreManager = xtStoreManager;\n","\nexport enum XtStoreCriteriaOperator {\n EQUALS = '=',\n LESS_THAN = '<',\n LESS_THAN_EQUAL = '<=',\n}\n\nexport class XtStoreCriteria {\n name: string;\n value: any;\n operator: XtStoreCriteriaOperator;\n\n constructor(\n name: string,\n value: any,\n operator?: XtStoreCriteriaOperator\n ) {\n this.name = name;\n this.value = value;\n if (!operator) this.operator = XtStoreCriteriaOperator.EQUALS;\n else {\n this.operator = operator;\n }\n }\n}\n\nexport type XtSortBy ={\n by:string,\n direction: XtSortByDirection\n}\n\nexport enum XtSortByDirection {\n None = \"None\",\n Ascending = \"Ascending\",\n Descending = \"Descending\"\n}\n\nexport enum XtGroupByShow {\n OnlyLowest=\"OnlyLowest\",\n OnlyHighest=\"OnlyHighest\"\n}\n\nexport enum XtGroupByOperation {\n Count= \"Count\",\n Sum=\"Sum\",\n Average=\"Average\",\n Minimum=\"Minimum\",\n Maximum=\"Maximum\"\n}\n\nexport type XtGroupBy= {\n of: string,\n display:{[key:string]:XtGroupByAggregate};\n show?:XtGroupByShow,\n label?:string\n\n atLeastOneGroupIsRequested (): boolean;\n getRequiredListOfFields(): Set<string>;\n}\n\nexport type XtGroupByAggregate = {\n operation: XtGroupByOperation;\n of:string,\n label?:string\n}\n\n\n","import { Counters, ManagedData, XtTypeHandler, xtTypeManager } from 'xt-type';\nimport {\n XtGroupBy,\n XtGroupByAggregate,\n XtGroupByOperation,\n XtSortBy,\n XtStoreCriteria,\n XtStoreCriteriaOperator\n} from '../xt-store-parameters';\n\n/**\n * Helps handle metadata information about loaded items\n */\nexport class XtStoreProviderHelper {\n\n protected static typeManager = xtTypeManager();\n /**\n * In case the provider source doesn't support search criteria, they can be applied here\n * @param list\n * @param criteria\n */\n public static applyFilters<T> (list:Array<T>, ...criteria: XtStoreCriteria[]): Array<T> {\n if ((criteria==null)||(criteria.length==0)) return list;\n return list.filter(element => {\n for (const criterium of criteria) {\n const toTest = element[criterium.name as keyof T];\n switch (criterium.operator) {\n case XtStoreCriteriaOperator.EQUALS:\n return criterium.value==toTest;\n case XtStoreCriteriaOperator.LESS_THAN:\n return toTest < criterium.value;\n case XtStoreCriteriaOperator.LESS_THAN_EQUAL:\n return toTest <= criterium.value;\n default:\n throw new Error (\"Operator \"+criterium.operator+\" unknown\");\n }\n }\n return true;\n });\n return list;\n }\n\n /** Returns any field who is a date, in order to convert it from json. Keep the result in a cache map\n *\n * @param typeName\n * @param typeResolver\n * @protected\n */\n public static findTypeHandler (typeName:string, subName?:string, value?:ManagedData): { typeName?:string | null, handler?:XtTypeHandler<any>} {\n return XtStoreProviderHelper.typeManager?.findTypeHandler(typeName, false, subName, value);\n }\n\n /**\n * Ensure _id is removed if necessary before saving the element\n * @param listToConvert\n * @param specialFields\n * @protected\n */\n public static cleanUpDataBeforeSaving (listToConvert:Array<ManagedData>, typeName:string, handler?:XtTypeHandler<any> | null) : void {\n if (handler==null) handler=XtStoreProviderHelper.findTypeHandler\n (typeName, undefined, (listToConvert.length>0)?listToConvert[0]:undefined)\n .handler;\n\n if (handler!=null) {\n for (const toConvert of listToConvert) {\n handler.toJson(toConvert)\n }\n }\n/* if ((specialFields?.idField!=null)&&(specialFields?.idField!='_id')) {\n listToConvert.forEach(value => {\n delete value._id;\n })\n }*/\n }\n\n /**\n * Converts dates and dateTimes properties of each element of the array to Typescript format\n * Ensure _id is set with the right id\n * @param listToConvert\n * @param specialFields\n * @protected\n */\n public static cleanUpLoadedData (listToConvert:Array<ManagedData>, typeName:string, handler?:XtTypeHandler<any> | null) : void {\n\n if (handler==null) handler=XtStoreProviderHelper.findTypeHandler(typeName, undefined, (listToConvert.length>0)?listToConvert[0]:undefined).handler;\n\n if (handler!=null) {\n for (const toConvert of listToConvert) {\n handler.fromJson(toConvert)\n }\n }\n /*\n if( specialFields.idField==null) {\n XtSpecialFieldsHelper.findSpecialFieldsFromData (listToConvert, specialFields);\n }\n listToConvert.forEach((val)=> {\n if ((specialFields.idField!=null)&&(specialFields.idField!=\"_id\")) // We need to copy the id to the standard _id field\n {\n val._id=val[specialFields.idField];\n }\n specialFields.dateFields?.forEach(prop => {\n const toConvert = val[prop];\n if (toConvert!=null) {\n let timeEpoch =Date.parse(toConvert);\n if( isNaN(timeEpoch)) {\n // Invalid date try to remove a possible TZ description in []\n const tzDescIndex = toConvert.lastIndexOf('[');\n if (tzDescIndex!=-1) {\n timeEpoch=Date.parse(toConvert.substring(0, tzDescIndex));\n }\n }\n if (isNaN(timeEpoch)) {\n delete val[prop];\n }\n else {\n val[prop]=new Date(timeEpoch);\n\n }\n }\n })\n })\n }*/\n }\n\n /**\n * Sort the array using the defined sort declarations across all properties.\n *\n * @param toSort\n * @param sortOptions\n */\n static multiSortArray<T>(toSort: T[], sortOptions?: XtSortBy): T[] {\n if( sortOptions==null)\n return toSort;\n return toSort;\n }\n\n /**\n * Calculates sum, avg, min or max values per group\n * @param values\n * @param groupBy\n * @param modelMgr\n * @param position\n * @param item\n */\n static calculateGroupedByValues<T>(name: string, values: T[], groupBy: XtGroupBy):DontCodeStoreGroupedByEntities|undefined {\n // We are counting per different value of the groupedBy Item\n if ((groupBy!=null) && (groupBy.display!=null)) {\n let fieldToGroupBy=groupBy.of as keyof T;\n if (groupBy.show!=null) fieldToGroupBy=groupBy.show.valueOf() as keyof T;\n\n const counters=new Map<any,Map<keyof T, Counters>> ();\n let lastGroupDelimiter:any;\n let oneGroupOfCounters=new Map<keyof T, Counters>();\n\n const fieldsRequired = groupBy.getRequiredListOfFields() as Set<keyof T>;\n for (const value of values) {\n if (value[fieldToGroupBy]!=lastGroupDelimiter) { // We change the group\n lastGroupDelimiter=value[fieldToGroupBy];\n const storedGroupOfCounters=counters.get(lastGroupDelimiter);\n if( storedGroupOfCounters==null) {\n oneGroupOfCounters = new Map<keyof T, Counters>();\n counters.set(lastGroupDelimiter, oneGroupOfCounters);\n }else {\n oneGroupOfCounters = storedGroupOfCounters;\n }\n }\n\n for (const field of fieldsRequired) {\n let counter=oneGroupOfCounters?.get(field);\n if( counter==null) {\n counter = new Counters();\n oneGroupOfCounters.set(field, counter);\n }\n\n const valSrc=value[field];\n const val=valSrc;\n if (valSrc!=null) {\n const modelMgr:any=null;\n // If it's an object, we need to set the calculated values as the object itself\n if ((typeof valSrc === 'object') && (!(valSrc instanceof Date)) && (modelMgr!=null)) {\n if( counter.sum==null) counter.sum=structuredClone(valSrc);\n else {\n counter.sum=modelMgr.modifyValues(counter.sum, valSrc, counter.metaData,\n (first: any, second: any) => {\n if ((first!=null) && (second!=null))\n return first + second;\n else if (first == null) {\n return second;\n } else if (second==null) {\n return first;\n }\n }/*,\n position, item*/);\n }\n const value=modelMgr.extractValue(valSrc, counter.metaData/*,position, item*/);\n if( counter.minimum==null) { counter.minimum=valSrc; counter.minAsValue=value}\n else {\n const minValue=counter.minAsValue;\n if ((value!=null) && ((minValue==null) || (value < minValue)) ) { counter.minimum = valSrc; counter.minAsValue=value }\n }\n\n if( counter.maximum==null) { counter.maximum=valSrc; counter.maxAsValue=value;}\n else {\n const maxValue=counter.maxAsValue;\n\n if ((value!=null) && ((maxValue==null) || (value > maxValue)))\n { counter.maximum = valSrc; counter.maxAsValue = value;}\n\n }\n\n if (value!=null) {\n counter.count++;\n }\n\n } else if (typeof val === 'number') {\n if( counter.sum==null) counter.sum=0;\n counter.sum=counter.sum+val;\n if( (counter.minimum==null) || (val < counter.minimum))\n { counter.minimum=valSrc; counter.minAsValue=valSrc as number;}\n if( (counter.maximum==null) || (val > counter.maximum))\n { counter.maximum=valSrc; counter.maxAsValue=valSrc as number;}\n counter.count++;\n } else if ((val instanceof Date) && (!isNaN(val.getTime()))) {\n counter.sum=null;\n if ((counter.minimum==null) || (val.valueOf() < counter.minimum.valueOf())) {\n counter.minimum=valSrc;\n }\n if ((counter.maximum==null) || (val.valueOf() > counter.maximum.valueOf())) {\n counter.maximum=valSrc;\n }\n counter.count++;\n } else { // strings\n counter.count++;\n }\n }\n }\n }\n\n // Now that we have all the counters, let's generate the GroupedFields\n let ret: DontCodeStoreGroupedByEntities|undefined;\n if (counters.size>0) {\n ret = new DontCodeStoreGroupedByEntities(groupBy, new Map<any,DontCodeStoreGroupedByValues[]>);\n for (const groupKey of counters.keys()) {\n const group=counters.get(groupKey)!;\n\n for (const aggregate of Object.values(groupBy.display)) {\n let value;\n const counter = group.get(aggregate.of as keyof T);\n if (counter != null) {\n switch (aggregate.operation) {\n case XtGroupByOperation.Count:\n value = counter.count;\n break;\n case XtGroupByOperation.Sum:\n value = counter.sum;\n break;\n case XtGroupByOperation.Average: {\n const modelMgr:any=null;\n if ((counter.sum==null) || (counter.count==0)) value=null;\n else if ((typeof counter.sum === 'object') && (!(counter.sum instanceof Date)) && (modelMgr!=null)) {\n value = modelMgr.applyValue(structuredClone(counter.sum),\n modelMgr.extractValue(counter.sum, counter.metaData/*, position, item*/)/counter.count,\n counter.metaData, undefined/*, position, item*/);\n } else value = counter.sum / counter.count;\n }\n break;\n case XtGroupByOperation.Minimum:\n value = counter.minimum;\n break;\n case XtGroupByOperation.Maximum:\n value = counter.maximum;\n break;\n }\n let listOfValues= ret.values?.get(groupKey);\n if (listOfValues==null) {\n listOfValues = new Array<DontCodeStoreGroupedByValues>();\n ret.values?.set(groupKey, listOfValues);\n }\n listOfValues.push(new DontCodeStoreGroupedByValues(aggregate, value));\n }\n }\n }\n return ret.values!.size>0?ret:undefined;\n }\n }\n return undefined;\n }\n}\n\n\nexport class DontCodeStorePreparedEntities<T> {\n constructor(public sortedData:T[], public sortInfo?:XtSortBy, public groupedByEntities?:DontCodeStoreGroupedByEntities) {\n }\n}\n\nexport class DontCodeStoreGroupedByEntities {\n constructor(public groupInfo:XtGroupBy, public values?:Map<any,DontCodeStoreGroupedByValues[]>) {\n if (values==null)\n this.values=new Map<any,DontCodeStoreGroupedByValues[]>();\n }\n}\n\nexport class DontCodeStoreGroupedByValues {\n constructor(public forAggregate:XtGroupByAggregate, public value:any) {\n }\n}\n\n","import {\n XtGroupBy,\n XtGroupByAggregate, XtGroupByOperation,\n XtGroupByShow,\n XtSortBy,\n XtSortByDirection\n} from './xt-store-parameters';\n\nexport interface DontCodeReportType {\n title: string;\n for: string;\n groupedBy?: {[key:string]:XtGroupBy};\n sortedBy?: {[key:string]:XtSortBy};\n as?: {[key:string]:DontCodeReportDisplayType};\n}\n\nexport interface DontCodeReportDisplayType {\n type: string;\n of: string;\n by?:string;\n title: string;\n}\n\nexport class XtStoreSortBy implements XtSortBy {\n\n direction: XtSortByDirection;\n\n constructor(public by: string, direction?:XtSortByDirection, public subSort?:XtSortBy) {\n if (direction==null) this.direction=XtSortByDirection.None;\n else this.direction=direction;\n }\n}\n\nexport class XtStoreGroupBy implements XtGroupBy {\n display:{[key:string]:XtStoreGroupByAggregate};\n\n constructor(public of:string, display?:{[key:string]:XtStoreGroupByAggregate}, public show?:XtGroupByShow) {\n if (display==null) this.display={};\n else this.display=display;\n }\n\n public atLeastOneGroupIsRequested (): boolean {\n if( (this.display!=null) && (Object.keys(this.display).length>0))\n return true;\n return false;\n }\n\n getRequiredListOfFields(): Set<string> {\n const ret = new Set<string>();\n if( this.display!=null) {\n for (const aggregate of Object.values(this.display)) {\n ret.add(aggregate.of);\n }\n }\n return ret;\n }\n}\n\nexport class XtStoreGroupByAggregate implements XtGroupByAggregate{\n constructor(public of:string, public operation:XtGroupByOperation) {\n }\n}\n\n","import { XtDataTransformer } from './xt-data-transformer';\nimport { firstValueFrom, map, Observable } from 'rxjs';\nimport { XtGroupBy, XtSortBy, XtStoreCriteria } from '../xt-store-parameters';\nimport {\n DontCodeStoreGroupedByEntities,\n DontCodeStorePreparedEntities,\n XtStoreProviderHelper\n} from './xt-store-provider-helper';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { XtStoreSortBy } from '../xt-reporting';\nimport { ManagedData } from 'xt-type';\nimport { Injectable } from '@angular/core';\n\n/**\n * The standard interface for any store provider\n */\nexport type XtStoreProvider<T extends ManagedData = ManagedData>= {\n storeEntity( name:string, entity: T): Promise<T>;\n\n /**\n * Rejects the promise if the entity is not found\n * @param name\n * @param key\n */\n safeLoadEntity( name: string, key: any): Promise<T>;\n loadEntity( name: string, key: any): Promise<T|undefined>;\n\n deleteEntity(name:string, key: any): Promise<boolean>;\n\n searchEntities(\n name: string,\n ...criteria: XtStoreCriteria[]\n ): Observable<Array<T>>;\n\n searchAndPrepareEntities(\n name: string,\n sort?:XtSortBy,\n groupBy?:XtGroupBy,\n transformer?: XtDataTransformer<T>,\n ...criteria: XtStoreCriteria[]\n ): Observable<DontCodeStorePreparedEntities<T>>;\n\n canStoreDocument(): boolean;\n\n /**\n * Upload one document to a server store and returns the url or the id needed to retrieve them.\n * @param toStore\n * @param position\n */\n storeDocument(\n toStore: File\n ): Promise<UploadedDocumentInfo>;\n\n /**\n * Upload documents to a server store and returns the url or the id needed to retrieve them.\n * @param toStore\n * @param position\n */\n storeDocuments(\n toStore: File[]\n ): Observable<UploadedDocumentInfo>;\n}\n\nexport abstract class AbstractXtStoreProvider<T extends ManagedData = ManagedData> implements XtStoreProvider<T> {\n abstract canStoreDocument(): boolean;\n\n abstract deleteEntity(name:string, key: any): Promise<boolean>;\n\n abstract loadEntity(name:string, key: any): Promise<T|undefined>;\n\n constructor () {\n }\n\n safeLoadEntity(name: string, key: any): Promise<T> {\n return this.loadEntity(name, key).then(value => {\n if (value==null)\n return Promise.reject(\"Not found\");\n else return value;\n })\n }\n\n /**\n * If the store supports queries with criteria, this function must be implemented, if not, listEntities must be implemented, and this function will apply filters\n * @param position\n * @param criteria\n */\n searchEntities(name: string, ...criteria: XtStoreCriteria[]): Observable<T[]> {\n return this.listEntities(name).pipe(\n map (value => {\n return XtStoreProviderHelper.applyFilters(value, ...criteria) as T[];\n })\n );\n }\n\n /**\n * Returns the list of entities at a given position in the model. Implements at least this function or searchEntities depending on the capability of the store\n * @param position\n * @protected\n */\n protected listEntities (name:string): Observable<T[]> {\n return this.searchEntities(name);\n }\n\n searchAndPrepareEntities(name: string, sort?: XtSortBy, groupBy?: XtGroupBy, transformer?: XtDataTransformer<T>, ...criteria: XtStoreCriteria[]): Observable<DontCodeStorePreparedEntities<T>> {\n return this.searchEntities(name, ...criteria).pipe(\n map (value => {\n // Run the transformation if any\n if (transformer!=null) return transformer.postLoadingTransformation(value);\n else return value;\n }),\n map (value => {\n let groupedByValues:DontCodeStoreGroupedByEntities|undefined;\n if((sort!=null) || (groupBy?.atLeastOneGroupIsRequested()===true)) {\n value = XtStoreProviderHelper.multiSortArray(value, this.calculateSortHierarchy(sort, groupBy)) as T[];\n if (groupBy!=null) {\n groupedByValues = XtStoreProviderHelper.calculateGroupedByValues(name, value, groupBy);\n }\n }\n return new DontCodeStorePreparedEntities<T> (value, sort, groupedByValues);\n })\n );\n }\n\n storeDocument(toStore: File):Promise<UploadedDocumentInfo> {\n return firstValueFrom(this.storeDocuments([toStore]));\n }\n\n abstract storeDocuments(toStore: File[]): Observable<UploadedDocumentInfo>;\n\n abstract storeEntity(position: string, entity: T): Promise<T>;\n\n\n protected calculateSortHierarchy(sort?: XtSortBy, groupBy?: XtGroupBy ):XtSortBy|undefined {\n // We must first sort by the groupBy, and then by the sort\n let rootSort:XtSortBy|undefined;\n if (groupBy!=null) {\n rootSort=new XtStoreSortBy(groupBy.of, undefined, sort);\n } else {\n rootSort=sort;\n }\n return rootSort;\n }\n\n}\n","import {\n entityConfig,\n EntityId,\n EntityMap,\n removeEntity,\n SelectEntityId,\n setEntities,\n setEntity,\n withEntities\n} from '@ngrx/signals/entities';\nimport { patchState, signalStoreFeature, type, withMethods, withProps, withState } from '@ngrx/signals';\nimport { XtStoreProvider } from '../store-provider/xt-store-provider';\nimport { finalize, lastValueFrom, map } from 'rxjs';\nimport { Signal } from '@angular/core';\nimport { ManagedData } from 'xt-type';\n\nconst selectId: SelectEntityId<ManagedData> = (data) => {\n if (data._id==null) throw new Error(\"ManagedData with no entity Id used in the store.\", { cause: data });\n return data._id;\n}\n\nconst xtStoreEntityConfig = entityConfig ({\n entity: type<ManagedData>(),\n selectId:selectId\n});\n\n\nexport type StoreState = {\n entityName: string,\n loading:boolean\n};\n\nexport type XtSignalStore<T> = {\n entityName: Signal<string>;\n loading: Signal<boolean>;\n entityMap: Signal<EntityMap<T>>;\n ids: Signal<EntityId[]>;\n entities: Signal<T[]>;\n\n //listEntities ():Observable<T[]>;\n fetchEntities (): Promise<void>;\n loadEntity (id:string): Promise<T|undefined>;\n safeLoadEntity (id:string): Promise<T>;\n storeEntity (toStore:T):Promise<T>;\n deleteEntity (id:string): Promise<boolean>;\n}\n\nexport function withXtStoreProvider (entityName:string, storeProvider:XtStoreProvider<ManagedData>) {\n return signalStoreFeature(\n withState ({ entityName, loading:false} as StoreState),\n withEntities(xtStoreEntityConfig),\n withProps ( () => ({\n _storeProvider:storeProvider\n })),\n withMethods ((store) => ({\n async storeEntity (toStore:ManagedData): Promise<ManagedData> {\n patchState(store, {loading:true});\n return store._storeProvider.storeEntity(entityName, toStore).then ( (stored)=> {\n patchState(store, setEntity(stored, xtStoreEntityConfig));\n return stored;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n\n fetchEntities (): Promise<void> {\n patchState(store, {loading:true});\n return lastValueFrom(store._storeProvider.searchEntities(entityName).pipe (map( (entities: ManagedData[]) => {\n patchState(store, setEntities (entities, xtStoreEntityConfig));\n }),finalize(() => {\n patchState(store, {loading:false});\n })));\n },\n\n /* listEntities (): Observable<ManagedData[]> {\n patchState(store, {loading:true});\n return store._storeProvider.searchEntities(entityName).pipe (map( (entities: ManagedData[]) => {\n patchState(store, setEntities (entities, xtStoreEntityConfig));\n return entities;\n }),finalize(() => {\n patchState(store, {loading:false});\n }));\n },*/\n\n async loadEntity (id:string): Promise<ManagedData|undefined> {\n patchState(store, {loading:true});\n return store._storeProvider.loadEntity(entityName, id).then ( (loaded)=> {\n if( loaded != null)\n patchState(store, setEntity(loaded, xtStoreEntityConfig));\n return loaded;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n async safeLoadEntity (id:string): Promise<ManagedData> {\n patchState(store, {loading:true});\n return store._storeProvider.loadEntity(entityName, id).then ( (loaded)=> {\n if( loaded != null)\n patchState(store, setEntity(loaded, xtStoreEntityConfig));\n return loaded;\n }).then((loaded)=> {\n if (loaded==null) throw new Error (\"Entity \"+entityName+\" with id \"+id+\" not found\");\n return loaded;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n async deleteEntity (id:string): Promise<boolean> {\n patchState(store, {loading:true});\n return store._storeProvider.deleteEntity(entityName, id).then((result)=> {\n if( result ) {\n patchState(store, removeEntity(id));\n }\n return result;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n }\n }))\n\n);\n}\n","import { Injectable } from '@angular/core';\nimport { signalStore } from '@ngrx/signals';\nimport { ManagedData } from 'xt-type';\nimport { xtStoreManager } from '../store-manager/xt-store-manager';\nimport { withXtStoreProvider, XtSignalStore } from '../store-entity/store-entity-feature';\nimport { XtStoreProvider } from '../store-provider/xt-store-provider';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class XtStoreManagerService {\n\n protected storeManager = xtStoreManager();\n protected entityToStoreMap = new Map<string, XtSignalStore<ManagedData>>();\n\n constructor() {\n }\n\n getStoreFor<T extends ManagedData>(entityName: string): XtSignalStore<T> {\n let store = this.entityToStoreMap.get(entityName);\n if (store == null) {\n const provider = this.storeManager.getProvider<T>(entityName);\n if (provider == null) {\n throw new Error('No provider found for entity ' + entityName);\n } else {\n const res = signalStore(\n withXtStoreProvider(entityName, provider)\n );\n store= new res();\n }\n this.entityToStoreMap.set(entityName, store);\n }\n return store as XtSignalStore<T>;\n }\n\n setDefaultStoreProvider (provider: XtStoreProvider<ManagedData>) {\n this.storeManager.setDefaultProvider(provider);\n }\n}\n","import { lastValueFrom, Observable, Subscription } from 'rxjs';\nimport { inject, Injectable, OnDestroy } from '@angular/core';\nimport { map, mergeAll } from 'rxjs/operators';\nimport { AbstractXtStoreProvider } from '../store-provider/xt-store-provider';\nimport { XtStoreProviderHelper } from '../store-provider/xt-store-provider-helper';\nimport { XtStoreCriteria } from '../xt-store-parameters';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { ManagedData, nonTemporaryId } from 'xt-type';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\n\n/**\n * A Store Provider that uses the DontCode API to store / read application data\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class XtApiStoreProvider<T extends ManagedData = ManagedData> extends AbstractXtStoreProvider<T> implements OnDestroy {\n\n protected http: HttpClient = inject (HttpClient, {optional:true}) as any;\n\n apiUrl: string;\n docUrl: string;\n subscriptions = new Subscription();\n\n constructor(http?:HttpClient/* protected configService: CommonConfigService*/) {\n super();\n if (http!=null) {\n this.http=http;\n }\n\n if (this.http==null) {\n throw new Error (\"You must provide an HttpClient, either through constructor or injection.\");\n }\n this.apiUrl = 'https://test.dont-code.net/data';\n this.docUrl = 'https://test.dont-code.net/documents';\n\n /*this.updateConfig (this.configService.getConfig());\n this.subscriptions.add (this.configService.getUpdates ().pipe (map ((updatedConfig) => {\n this.updateConfig (updatedConfig);\n })).subscribe());*/\n\n }\n\n ngOnDestroy(): void {\n this.subscriptions.unsubscribe();\n }\n\n/* updateConfig(newConfig: Readonly<CommonLibConfig>) {\n if (newConfig.storeApiUrl!=null)\n this.apiUrl = newConfig.storeApiUrl;\n if (newConfig.documentApiUrl!=null)\n this.docUrl = newConfig.documentApiUrl;\n }*/\n\n storeEntity(name: string, data: T): Promise<T> {\n\n const id=nonTemporaryId(data);\n // Reconverts dates or Ids\n XtStoreProviderHelper.cleanUpDataBeforeSaving([data],name);\n\n if( id != undefined) {\n return lastValueFrom(this.http.put<T>(this.apiUrl+'/'+name+'/'+id, data, {observe:\"body\", responseType:\"json\"})).then((ret)=> {\n XtStoreProviderHelper.cleanUpLoadedData([ret], name);\n return ret;\n });\n } else {\n return lastValueFrom(this.http.post<T>(this.apiUrl+'/'+name, data, {observe:\"body\", responseType:\"json\"})).then((ret)=> {\n XtStoreProviderHelper.cleanUpLoadedData([ret], name);\n return ret;\n });\n }\n }\n\n loadEntity(name: string, key: any): Promise<T|undefined> {\n const obs = this.http.get<T>(this.apiUrl+'/'+name+'/'+key, {observe:\"body\", responseType:\"json\"});\n\n return lastValueFrom(obs).then((value) => {\n XtStoreProviderHelper.cleanUpLoadedData([value], name);\n return value;\n });\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n return lastValueFrom(this.http.delete(this.apiUrl+'/'+name+'/'+key, {observe:\"body\", responseType:\"json\"})).then(value => {\n return true;\n });\n }\n\n override searchEntities(name: string, ...criteria: XtStoreCriteria[]): Observable<T[]> {\n\n return this.http.get(this.apiUrl+'/'+name, {observe:\"body\", responseType:\"json\"}).pipe(\n map(value => {\n XtStoreProviderHelper.cleanUpLoadedData(value as T [], name);\n return value as T[];\n }),map(value => {\n return XtStoreProviderHelper.applyFilters( value, ...criteria);\n }\n )\n );\n }\n\n canStoreDocument(): boolean {\n return true;\n }\n\n storeDocuments(toStore: File[]): Observable<UploadedDocumentInfo> {\n const myFormData = new FormData();\n const headers = new HttpHeaders();\n headers.append('Content-Type', 'multipart/form-data');\n headers.append('Accept', 'application/json');\n let count=0;\n // store files details into formdata\n toStore.forEach( file => {\n myFormData.append('document#'+count, file);\n count++;\n });\n //HTTP Angular service, which will send call to Laravel API With headers and myformdata\n return this.http.post<UploadedDocumentInfo[]>(this.docUrl, myFormData, { headers: headers }).pipe(\n mergeAll ()\n );\n }\n\n}\n","import { AbstractXtStoreProvider } from './xt-store-provider';\nimport { from, Observable, of, Subject, throwError } from 'rxjs';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { ManagedData } from 'xt-type';\n\nexport class XtMemoryStoreProvider<T extends ManagedData> extends AbstractXtStoreProvider<T> {\n protected storage=new Map<string, Map<string, T>>();\n\n /**\n * It supports storing documents in memory only, then use with care !\n */\n override canStoreDocument(): boolean {\n return true;\n }\n\n getSafeStore (name:string):Map<string,T> {\n let ret = this.storage.get(name);\n if (ret==null) {\n ret = new Map<string, T>();\n this.storage.set(name, ret);\n }\n return ret;\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n const store = this.getSafeStore (name);\n return Promise.resolve(store.delete(key));\n }\n\n loadEntity(name: string, key: any): Promise<T | undefined> {\n const store = this.getSafeStore (name);\n return Promise.resolve(store.get(key));\n }\n\n override listEntities(name: string): Observable<T[]> {\n const store = this.getSafeStore (name);\n //console.debug(\"Listing entities for \"+name+\" with \",store);\n return of (Array.from(store.values()));\n }\n\n storeEntity(name: string, entity: T): Promise<T> {\n const store = this.getSafeStore (name);\n if (entity._id==null) {\n entity._id = Math\n .random().toString(36).substring(2, 8);\n }\n store.set(entity._id, entity);\n return Promise.resolve(entity);\n }\n\n override storeDocuments(toStore: File[]): Observable<UploadedDocumentInfo> {\n const toSend = new Array<UploadedDocumentInfo>();\n for (const file of toStore) {\n const ret: UploadedDocumentInfo = { documentName:file.name, documentId: URL.createObjectURL(file), isUrl: true };\n toSend.push(ret);\n }\n return from(toSend)\n }\n\n}\n","import { XtStoreManager } from '../store-manager/xt-store-manager';\nimport { XtMemoryStoreProvider } from '../store-provider/xt-memory-store-provider';\nimport { ManagedData } from 'xt-type';\nimport { XtStoreProvider } from '../store-provider/xt-store-provider';\n\n\nexport class StoreTestBed {\n readonly storeManager = new XtStoreManager();\n\n public static ensureMemoryProviderOnly () {\n XtStoreManager.setTestMode(new XtMemoryStoreProvider<ManagedData>());\n }\n\n public async defineTestDataFor (entityName:string, testData:ManagedData[]): Promise<void> {\n for (const testEntity of testData) {\n await this.storeManager.storeEntity(entityName, testEntity);\n }\n }\n\n public getStoreManager () {\n return this.storeManager;\n }\n\n public getStoreProviderFor (entityName:string):XtStoreProvider {\n return this.storeManager.getProviderSafe(entityName);\n }\n}\n","/*\n * Public API Surface of store\n */\n\nexport * from './store-manager/xt-store-manager';\nexport * from './store-provider/xt-store-provider';\nexport * from './store-provider/xt-store-provider-helper';\nexport * from './store-manager-service/xt-store-manager.service';\n\nexport * from './store-entity/store-entity-feature';\n\nexport * from './api-provider/xt-api-store-provider';\nexport * from './store-provider/xt-memory-store-provider';\n\nexport * from './xt-store-parameters';\nexport * from './xt-document';\nexport * from './xt-reporting';\n\nexport * from './test/store-test-bed';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["map"],"mappings":"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"}
1
+ {"version":3,"file":"xt-store.mjs","sources":["../../../projects/store/src/xt-store-parameters.ts","../../../projects/store/src/store-manager/xt-store-manager.ts","../../../projects/store/src/store-provider/xt-store-provider-helper.ts","../../../projects/store/src/xt-reporting.ts","../../../projects/store/src/store-provider/xt-store-provider.ts","../../../projects/store/src/store-entity/store-entity-feature.ts","../../../projects/store/src/store-manager-service/xt-store-manager.service.ts","../../../projects/store/src/api-provider/xt-api-store-provider.ts","../../../projects/store/src/store-provider/xt-memory-store-provider.ts","../../../projects/store/src/test/store-test-bed.ts","../../../projects/store/src/public-api.ts","../../../projects/store/src/xt-store.ts"],"sourcesContent":["\nexport type XtStoreCriteriaOperator = '='|'<'|'<=';\n\nexport class XtStoreCriteria {\n name: string;\n value: any;\n operator: XtStoreCriteriaOperator;\n\n constructor(\n name: string,\n value: any,\n operator?: XtStoreCriteriaOperator\n ) {\n this.name = name;\n this.value = value;\n if (!operator) this.operator = '=';\n else {\n this.operator = operator;\n }\n }\n\n filter (toFilter:any): boolean {\n const testValue=toFilter[this.name];\n switch (this.operator) {\n case '=':\n return testValue == this.value;\n case '<':\n return (testValue as number)<(this.value as number);\n case '<=':\n return (testValue as number)<(this.value as number);\n default:\n return true;\n }\n }\n\n}\n\nexport type XtSortBy ={\n by:string,\n direction: XtSortByDirection\n}\n\nexport enum XtSortByDirection {\n None = \"None\",\n Ascending = \"Ascending\",\n Descending = \"Descending\"\n}\n\nexport enum XtGroupByShow {\n OnlyLowest=\"OnlyLowest\",\n OnlyHighest=\"OnlyHighest\"\n}\n\nexport enum XtGroupByOperation {\n Count= \"Count\",\n Sum=\"Sum\",\n Average=\"Average\",\n Minimum=\"Minimum\",\n Maximum=\"Maximum\"\n}\n\nexport type XtGroupBy= {\n of: string,\n display:{[key:string]:XtGroupByAggregate};\n show?:XtGroupByShow,\n label?:string\n\n atLeastOneGroupIsRequested (): boolean;\n getRequiredListOfFields(): Set<string>;\n}\n\nexport type XtGroupByAggregate = {\n operation: XtGroupByOperation;\n of:string,\n label?:string\n}\n\n\n","import { XtStoreProvider } from '../store-provider/xt-store-provider';\nimport { Observable } from 'rxjs';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { XtStoreCriteria, XtGroupBy, XtSortBy, XtStoreCriteriaOperator } from '../xt-store-parameters';\nimport { DontCodeStorePreparedEntities } from '../store-provider/xt-store-provider-helper';\nimport { XtDataTransformer } from '../store-provider/xt-data-transformer';\nimport { ManagedData } from 'xt-type';\n\nexport class XtStoreManager {\n private _default?: XtStoreProvider<any>;\n private providerByPosition = new Map<string, XtStoreProvider<any>>();\n private providerByType = new Map<string, XtStoreProvider<any>>();\n\n protected static testProvider:XtStoreProvider<any>|null = null;\n\n constructor(\n provider?: XtStoreProvider<any>\n ) {\n this._default = provider;\n this.reset();\n }\n\n reset() {\n this.providerByPosition.clear();\n this.providerByType.clear();\n }\n\n getProvider<T extends ManagedData = ManagedData>(name?: string): XtStoreProvider<T> | undefined {\n // Override for testing\n if( XtStoreManager.testProvider!=null) return XtStoreManager.testProvider;\n\n if (name == null) {\n return this._default;\n } else {\n let ret = null;\n // Try to find if the entity is loaded from a defined source\n /*const srcDefinition = this.modelMgr.findTargetOfProperty(\n DontCodeModel.APP_ENTITIES_FROM_NODE,\n position\n )?.value as DontCodeSourceType;\n if (srcDefinition) {\n ret = this.providerByType.get(srcDefinition.type);\n }\n if (!ret) {*/\n ret = this.providerByPosition.get(name);\n //}\n return ret ?? this._default;\n }\n }\n\n getProviderSafe<T extends ManagedData = ManagedData>(name?: string): XtStoreProvider<T> {\n const ret = this.getProvider<T>(name);\n if (ret == null) {\n throw new Error('Trying to get an undefined or null provider');\n } else {\n return ret;\n }\n }\n\n getDefaultProvider<T extends ManagedData = ManagedData>(): XtStoreProvider<T> | undefined {\n return this.getProvider();\n }\n\n getDefaultProviderSafe<T extends ManagedData = ManagedData>(): XtStoreProvider<T> {\n return this.getProviderSafe();\n }\n\n setProvider<T extends ManagedData = ManagedData>(value: XtStoreProvider<T>, name?: string): void {\n if (name == null) this._default = value;\n else {\n this.providerByPosition.set(name, value);\n }\n }\n\n setProviderForSourceType<T extends ManagedData = ManagedData>(\n value: XtStoreProvider<T>,\n srcType: string\n ): void {\n this.providerByType.set(srcType, value);\n }\n\n setDefaultProvider<T extends ManagedData = ManagedData>(value: XtStoreProvider<T>): void {\n this.setProvider(value);\n }\n\n removeProvider(name?: string): void {\n if (name == null) this._default = undefined;\n else {\n this.providerByPosition.delete(name);\n }\n }\n\n removeProviderForSourceType(srcType: string): void {\n this.providerByType.delete(srcType);\n }\n\n removeDefaultProvider(): void {\n this.removeProvider();\n }\n\n newStoreCriteria(name: string, value: any, operator: XtStoreCriteriaOperator): XtStoreCriteria {\n return new XtStoreCriteria(name, value, operator);\n }\n\n storeEntity<T extends ManagedData = ManagedData>(name: string, entity: T): Promise<T> {\n return this.getProviderSafe<T>(name).storeEntity(name, entity);\n }\n\n loadEntity<T extends ManagedData = ManagedData>(name: string, key: any): Promise<T|undefined> {\n return this.getProviderSafe<T>(name).loadEntity(name, key);\n }\n\n safeLoadEntity<T extends ManagedData = ManagedData>(name: string, key: any): Promise<T> {\n return this.getProviderSafe<T>(name).safeLoadEntity(name, key);\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n return this.getProviderSafe(name).deleteEntity(name, key);\n }\n\n searchEntities<T extends ManagedData = ManagedData>(\n name: string,\n ...criteria: XtStoreCriteria[]\n ): Observable<Array<T>> {\n return this.getProviderSafe<T>(name).searchEntities(name, ...criteria);\n }\n\n searchAndPrepareEntities<T extends ManagedData = ManagedData>(\n name: string,\n sort?:XtSortBy,\n groupBy?:XtGroupBy,\n dataTransformer?:XtDataTransformer,\n ...criteria: XtStoreCriteria[]\n ): Observable<DontCodeStorePreparedEntities<T>> {\n return this.getProviderSafe<T>(name).searchAndPrepareEntities(name, sort, groupBy, dataTransformer, ...criteria);\n }\n\n\n canStoreDocument(name?: string): boolean {\n const res = this.getProvider(name)?.canStoreDocument();\n if (res) return res;\n else return false;\n }\n\n storeDocuments(\n toStore: File[],\n name?: string\n ): Observable<UploadedDocumentInfo> {\n return this.getProviderSafe(name).storeDocuments(toStore);\n }\n\n public static setTestMode (testProvider:XtStoreProvider<any>) {\n this.testProvider=testProvider;\n }\n\n}\n\n/**\n * The global store Mgr\n */\n\ndeclare global {\n var XT_STORE_MGR: XtStoreManager;\n var xtStoreManager: () => XtStoreManager;\n}\nexport function xtStoreManager (): XtStoreManager {\n return globalThis.XT_STORE_MGR;\n}\n\nglobalThis.XT_STORE_MGR = new XtStoreManager();\nglobalThis.xtStoreManager = xtStoreManager;\n","import { Counters, ManagedData, XtTypeHandler, xtTypeManager } from 'xt-type';\nimport { XtGroupBy, XtGroupByAggregate, XtGroupByOperation, XtSortBy, XtStoreCriteria } from '../xt-store-parameters';\n\n/**\n * Helps handle metadata information about loaded items\n */\nexport class XtStoreProviderHelper {\n\n protected static typeManager = xtTypeManager();\n /**\n * In case the provider source doesn't support search criteria, they can be applied here\n * @param list\n * @param criteria\n */\n public static applyFilters<T> (list:Array<T>, ...criteria: XtStoreCriteria[]): Array<T> {\n if ((criteria==null)||(criteria.length==0)) return list;\n return list.filter(element => {\n for (const criterium of criteria) {\n const toTest = element[criterium.name as keyof T];\n switch (criterium.operator) {\n case '=':\n return criterium.value==toTest;\n case '<':\n return toTest < criterium.value;\n case '<=':\n return toTest <= criterium.value;\n default:\n throw new Error (\"Operator \"+criterium.operator+\" unknown\");\n }\n }\n return true;\n });\n return list;\n }\n\n /** Returns any field who is a date, in order to convert it from json. Keep the result in a cache map\n *\n * @param typeName\n * @param typeResolver\n * @protected\n */\n public static findTypeHandler (typeName:string, subName?:string, value?:ManagedData): { typeName?:string | null, handler?:XtTypeHandler<any>} {\n return XtStoreProviderHelper.typeManager?.findTypeHandler(typeName, false, subName, value);\n }\n\n /**\n * Ensure _id is removed if necessary before saving the element\n * @param listToConvert\n * @param specialFields\n * @protected\n */\n public static cleanUpDataBeforeSaving (listToConvert:Array<ManagedData>, typeName:string, handler?:XtTypeHandler<any> | null) : void {\n if (handler==null) handler=XtStoreProviderHelper.findTypeHandler\n (typeName, undefined, (listToConvert.length>0)?listToConvert[0]:undefined)\n .handler;\n\n if (handler!=null) {\n for (const toConvert of listToConvert) {\n handler.toJson(toConvert)\n }\n }\n/* if ((specialFields?.idField!=null)&&(specialFields?.idField!='_id')) {\n listToConvert.forEach(value => {\n delete value._id;\n })\n }*/\n }\n\n /**\n * Converts dates and dateTimes properties of each element of the array to Typescript format\n * Ensure _id is set with the right id\n * @param listToConvert\n * @param specialFields\n * @protected\n */\n public static cleanUpLoadedData (listToConvert:Array<ManagedData>, typeName:string, handler?:XtTypeHandler<any> | null) : void {\n\n if (handler==null) handler=XtStoreProviderHelper.findTypeHandler(typeName, undefined, (listToConvert.length>0)?listToConvert[0]:undefined).handler;\n\n if (handler!=null) {\n for (const toConvert of listToConvert) {\n handler.fromJson(toConvert)\n }\n }\n /*\n if( specialFields.idField==null) {\n XtSpecialFieldsHelper.findSpecialFieldsFromData (listToConvert, specialFields);\n }\n listToConvert.forEach((val)=> {\n if ((specialFields.idField!=null)&&(specialFields.idField!=\"_id\")) // We need to copy the id to the standard _id field\n {\n val._id=val[specialFields.idField];\n }\n specialFields.dateFields?.forEach(prop => {\n const toConvert = val[prop];\n if (toConvert!=null) {\n let timeEpoch =Date.parse(toConvert);\n if( isNaN(timeEpoch)) {\n // Invalid date try to remove a possible TZ description in []\n const tzDescIndex = toConvert.lastIndexOf('[');\n if (tzDescIndex!=-1) {\n timeEpoch=Date.parse(toConvert.substring(0, tzDescIndex));\n }\n }\n if (isNaN(timeEpoch)) {\n delete val[prop];\n }\n else {\n val[prop]=new Date(timeEpoch);\n\n }\n }\n })\n })\n }*/\n }\n\n /**\n * Sort the array using the defined sort declarations across all properties.\n *\n * @param toSort\n * @param sortOptions\n */\n static multiSortArray<T>(toSort: T[], sortOptions?: XtSortBy): T[] {\n if( sortOptions==null)\n return toSort;\n return toSort;\n }\n\n /**\n * Calculates sum, avg, min or max values per group\n * @param values\n * @param groupBy\n * @param modelMgr\n * @param position\n * @param item\n */\n static calculateGroupedByValues<T>(name: string, values: T[], groupBy: XtGroupBy):DontCodeStoreGroupedByEntities|undefined {\n // We are counting per different value of the groupedBy Item\n if ((groupBy!=null) && (groupBy.display!=null)) {\n let fieldToGroupBy=groupBy.of as keyof T;\n if (groupBy.show!=null) fieldToGroupBy=groupBy.show.valueOf() as keyof T;\n\n const counters=new Map<any,Map<keyof T, Counters>> ();\n let lastGroupDelimiter:any;\n let oneGroupOfCounters=new Map<keyof T, Counters>();\n\n const fieldsRequired = groupBy.getRequiredListOfFields() as Set<keyof T>;\n for (const value of values) {\n if (value[fieldToGroupBy]!=lastGroupDelimiter) { // We change the group\n lastGroupDelimiter=value[fieldToGroupBy];\n const storedGroupOfCounters=counters.get(lastGroupDelimiter);\n if( storedGroupOfCounters==null) {\n oneGroupOfCounters = new Map<keyof T, Counters>();\n counters.set(lastGroupDelimiter, oneGroupOfCounters);\n }else {\n oneGroupOfCounters = storedGroupOfCounters;\n }\n }\n\n for (const field of fieldsRequired) {\n let counter=oneGroupOfCounters?.get(field);\n if( counter==null) {\n counter = new Counters();\n oneGroupOfCounters.set(field, counter);\n }\n\n const valSrc=value[field];\n const val=valSrc;\n if (valSrc!=null) {\n const modelMgr:any=null;\n // If it's an object, we need to set the calculated values as the object itself\n if ((typeof valSrc === 'object') && (!(valSrc instanceof Date)) && (modelMgr!=null)) {\n if( counter.sum==null) counter.sum=structuredClone(valSrc);\n else {\n counter.sum=modelMgr.modifyValues(counter.sum, valSrc, counter.metaData,\n (first: any, second: any) => {\n if ((first!=null) && (second!=null))\n return first + second;\n else if (first == null) {\n return second;\n } else if (second==null) {\n return first;\n }\n }/*,\n position, item*/);\n }\n const value=modelMgr.extractValue(valSrc, counter.metaData/*,position, item*/);\n if( counter.minimum==null) { counter.minimum=valSrc; counter.minAsValue=value}\n else {\n const minValue=counter.minAsValue;\n if ((value!=null) && ((minValue==null) || (value < minValue)) ) { counter.minimum = valSrc; counter.minAsValue=value }\n }\n\n if( counter.maximum==null) { counter.maximum=valSrc; counter.maxAsValue=value;}\n else {\n const maxValue=counter.maxAsValue;\n\n if ((value!=null) && ((maxValue==null) || (value > maxValue)))\n { counter.maximum = valSrc; counter.maxAsValue = value;}\n\n }\n\n if (value!=null) {\n counter.count++;\n }\n\n } else if (typeof val === 'number') {\n if( counter.sum==null) counter.sum=0;\n counter.sum=counter.sum+val;\n if( (counter.minimum==null) || (val < counter.minimum))\n { counter.minimum=valSrc; counter.minAsValue=valSrc as number;}\n if( (counter.maximum==null) || (val > counter.maximum))\n { counter.maximum=valSrc; counter.maxAsValue=valSrc as number;}\n counter.count++;\n } else if ((val instanceof Date) && (!isNaN(val.getTime()))) {\n counter.sum=null;\n if ((counter.minimum==null) || (val.valueOf() < counter.minimum.valueOf())) {\n counter.minimum=valSrc;\n }\n if ((counter.maximum==null) || (val.valueOf() > counter.maximum.valueOf())) {\n counter.maximum=valSrc;\n }\n counter.count++;\n } else { // strings\n counter.count++;\n }\n }\n }\n }\n\n // Now that we have all the counters, let's generate the GroupedFields\n let ret: DontCodeStoreGroupedByEntities|undefined;\n if (counters.size>0) {\n ret = new DontCodeStoreGroupedByEntities(groupBy, new Map<any,DontCodeStoreGroupedByValues[]>);\n for (const groupKey of counters.keys()) {\n const group=counters.get(groupKey)!;\n\n for (const aggregate of Object.values(groupBy.display)) {\n let value;\n const counter = group.get(aggregate.of as keyof T);\n if (counter != null) {\n switch (aggregate.operation) {\n case XtGroupByOperation.Count:\n value = counter.count;\n break;\n case XtGroupByOperation.Sum:\n value = counter.sum;\n break;\n case XtGroupByOperation.Average: {\n const modelMgr:any=null;\n if ((counter.sum==null) || (counter.count==0)) value=null;\n else if ((typeof counter.sum === 'object') && (!(counter.sum instanceof Date)) && (modelMgr!=null)) {\n value = modelMgr.applyValue(structuredClone(counter.sum),\n modelMgr.extractValue(counter.sum, counter.metaData/*, position, item*/)/counter.count,\n counter.metaData, undefined/*, position, item*/);\n } else value = counter.sum / counter.count;\n }\n break;\n case XtGroupByOperation.Minimum:\n value = counter.minimum;\n break;\n case XtGroupByOperation.Maximum:\n value = counter.maximum;\n break;\n }\n let listOfValues= ret.values?.get(groupKey);\n if (listOfValues==null) {\n listOfValues = new Array<DontCodeStoreGroupedByValues>();\n ret.values?.set(groupKey, listOfValues);\n }\n listOfValues.push(new DontCodeStoreGroupedByValues(aggregate, value));\n }\n }\n }\n return ret.values!.size>0?ret:undefined;\n }\n }\n return undefined;\n }\n}\n\n\nexport class DontCodeStorePreparedEntities<T> {\n constructor(public sortedData:T[], public sortInfo?:XtSortBy, public groupedByEntities?:DontCodeStoreGroupedByEntities) {\n }\n}\n\nexport class DontCodeStoreGroupedByEntities {\n constructor(public groupInfo:XtGroupBy, public values?:Map<any,DontCodeStoreGroupedByValues[]>) {\n if (values==null)\n this.values=new Map<any,DontCodeStoreGroupedByValues[]>();\n }\n}\n\nexport class DontCodeStoreGroupedByValues {\n constructor(public forAggregate:XtGroupByAggregate, public value:any) {\n }\n}\n\n","import {\n XtGroupBy,\n XtGroupByAggregate, XtGroupByOperation,\n XtGroupByShow,\n XtSortBy,\n XtSortByDirection\n} from './xt-store-parameters';\n\nexport interface DontCodeReportType {\n title: string;\n for: string;\n groupedBy?: {[key:string]:XtGroupBy};\n sortedBy?: {[key:string]:XtSortBy};\n as?: {[key:string]:DontCodeReportDisplayType};\n}\n\nexport interface DontCodeReportDisplayType {\n type: string;\n of: string;\n by?:string;\n title: string;\n}\n\nexport class XtStoreSortBy implements XtSortBy {\n\n direction: XtSortByDirection;\n\n constructor(public by: string, direction?:XtSortByDirection, public subSort?:XtSortBy) {\n if (direction==null) this.direction=XtSortByDirection.None;\n else this.direction=direction;\n }\n}\n\nexport class XtStoreGroupBy implements XtGroupBy {\n display:{[key:string]:XtStoreGroupByAggregate};\n\n constructor(public of:string, display?:{[key:string]:XtStoreGroupByAggregate}, public show?:XtGroupByShow) {\n if (display==null) this.display={};\n else this.display=display;\n }\n\n public atLeastOneGroupIsRequested (): boolean {\n if( (this.display!=null) && (Object.keys(this.display).length>0))\n return true;\n return false;\n }\n\n getRequiredListOfFields(): Set<string> {\n const ret = new Set<string>();\n if( this.display!=null) {\n for (const aggregate of Object.values(this.display)) {\n ret.add(aggregate.of);\n }\n }\n return ret;\n }\n}\n\nexport class XtStoreGroupByAggregate implements XtGroupByAggregate{\n constructor(public of:string, public operation:XtGroupByOperation) {\n }\n}\n\n","import { XtDataTransformer } from './xt-data-transformer';\nimport { firstValueFrom, map, Observable } from 'rxjs';\nimport { XtGroupBy, XtSortBy, XtStoreCriteria } from '../xt-store-parameters';\nimport {\n DontCodeStoreGroupedByEntities,\n DontCodeStorePreparedEntities,\n XtStoreProviderHelper\n} from './xt-store-provider-helper';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { XtStoreSortBy } from '../xt-reporting';\nimport { ManagedData } from 'xt-type';\nimport { Injectable } from '@angular/core';\n\n/**\n * The standard interface for any store provider\n */\nexport type XtStoreProvider<T extends ManagedData = ManagedData>= {\n storeEntity( name:string, entity: T): Promise<T>;\n\n /**\n * Rejects the promise if the entity is not found\n * @param name\n * @param key\n */\n safeLoadEntity( name: string, key: any): Promise<T>;\n loadEntity( name: string, key: any): Promise<T|undefined>;\n\n deleteEntity(name:string, key: any): Promise<boolean>;\n\n searchEntities(\n name: string,\n ...criteria: XtStoreCriteria[]\n ): Observable<Array<T>>;\n\n searchAndPrepareEntities(\n name: string,\n sort?:XtSortBy,\n groupBy?:XtGroupBy,\n transformer?: XtDataTransformer<T>,\n ...criteria: XtStoreCriteria[]\n ): Observable<DontCodeStorePreparedEntities<T>>;\n\n canStoreDocument(): boolean;\n\n /**\n * Upload one document to a server store and returns the url or the id needed to retrieve them.\n * @param toStore\n * @param position\n */\n storeDocument(\n toStore: File\n ): Promise<UploadedDocumentInfo>;\n\n /**\n * Upload documents to a server store and returns the url or the id needed to retrieve them.\n * @param toStore\n * @param position\n */\n storeDocuments(\n toStore: File[]\n ): Observable<UploadedDocumentInfo>;\n}\n\nexport abstract class AbstractXtStoreProvider<T extends ManagedData = ManagedData> implements XtStoreProvider<T> {\n abstract canStoreDocument(): boolean;\n\n abstract deleteEntity(name:string, key: any): Promise<boolean>;\n\n abstract loadEntity(name:string, key: any): Promise<T|undefined>;\n\n constructor () {\n }\n\n safeLoadEntity(name: string, key: any): Promise<T> {\n return this.loadEntity(name, key).then(value => {\n if (value==null)\n return Promise.reject(\"Not found\");\n else return value;\n })\n }\n\n /**\n * If the store supports queries with criteria, this function must be implemented, if not, listEntities must be implemented, and this function will apply filters\n * @param position\n * @param criteria\n */\n searchEntities(name: string, ...criteria: XtStoreCriteria[]): Observable<T[]> {\n return this.listEntities(name).pipe(\n map (value => {\n return XtStoreProviderHelper.applyFilters(value, ...criteria) as T[];\n })\n );\n }\n\n /**\n * Returns the list of entities at a given position in the model. Implements at least this function or searchEntities depending on the capability of the store\n * @param position\n * @protected\n */\n protected listEntities (name:string): Observable<T[]> {\n return this.searchEntities(name);\n }\n\n searchAndPrepareEntities(name: string, sort?: XtSortBy, groupBy?: XtGroupBy, transformer?: XtDataTransformer<T>, ...criteria: XtStoreCriteria[]): Observable<DontCodeStorePreparedEntities<T>> {\n return this.searchEntities(name, ...criteria).pipe(\n map (value => {\n // Run the transformation if any\n if (transformer!=null) return transformer.postLoadingTransformation(value);\n else return value;\n }),\n map (value => {\n let groupedByValues:DontCodeStoreGroupedByEntities|undefined;\n if((sort!=null) || (groupBy?.atLeastOneGroupIsRequested()===true)) {\n value = XtStoreProviderHelper.multiSortArray(value, this.calculateSortHierarchy(sort, groupBy)) as T[];\n if (groupBy!=null) {\n groupedByValues = XtStoreProviderHelper.calculateGroupedByValues(name, value, groupBy);\n }\n }\n return new DontCodeStorePreparedEntities<T> (value, sort, groupedByValues);\n })\n );\n }\n\n storeDocument(toStore: File):Promise<UploadedDocumentInfo> {\n return firstValueFrom(this.storeDocuments([toStore]));\n }\n\n abstract storeDocuments(toStore: File[]): Observable<UploadedDocumentInfo>;\n\n abstract storeEntity(position: string, entity: T): Promise<T>;\n\n\n protected calculateSortHierarchy(sort?: XtSortBy, groupBy?: XtGroupBy ):XtSortBy|undefined {\n // We must first sort by the groupBy, and then by the sort\n let rootSort:XtSortBy|undefined;\n if (groupBy!=null) {\n rootSort=new XtStoreSortBy(groupBy.of, undefined, sort);\n } else {\n rootSort=sort;\n }\n return rootSort;\n }\n\n}\n","import {\n entityConfig,\n EntityId,\n EntityMap,\n removeEntity,\n SelectEntityId,\n setEntities,\n setEntity,\n withEntities\n} from '@ngrx/signals/entities';\nimport { patchState, signalStoreFeature, type, withMethods, withProps, withState } from '@ngrx/signals';\nimport { XtStoreProvider } from '../store-provider/xt-store-provider';\nimport { finalize, lastValueFrom, map, Observable, of } from 'rxjs';\nimport { Signal } from '@angular/core';\nimport { ManagedData } from 'xt-type';\nimport { XtStoreManager } from '../store-manager/xt-store-manager';\nimport { XtStoreCriteria } from '../xt-store-parameters';\n\nexport function selectId<T extends ManagedData=ManagedData>(): SelectEntityId<T> { return (data) => {\n if (data._id==null) throw new Error(\"ManagedData with no entity Id used in the store.\", { cause: data });\n return data._id;\n }\n}\n\nexport function xtStoreEntityConfig<T extends ManagedData=ManagedData> () {\n return entityConfig<T> ({\n entity: type<T>(),\n selectId:selectId<T>()\n });\n};\n\n\nexport type StoreState = {\n entityName: string,\n loading:boolean\n};\n\nexport type XtSignalStore<T> = {\n entityName: Signal<string>;\n loading: Signal<boolean>;\n entityMap: Signal<EntityMap<T>>;\n ids: Signal<EntityId[]>;\n entities: Signal<T[]>;\n\n //listEntities ():Observable<T[]>;\n fetchEntities (): Promise<void>;\n loadEntity (id:string): Promise<T|undefined>;\n safeLoadEntity (id:string): Promise<T>;\n storeEntity (toStore:T):Promise<T>;\n deleteEntity (id:string): Promise<boolean>;\n searchEntities(...criteria: XtStoreCriteria[]): Observable<T[]>;\n}\n\nexport function withXtStoreProvider<T extends ManagedData = ManagedData> (entityName:string, storeProvider:XtStoreProvider<T>, storeMgr?:XtStoreManager) {\n return signalStoreFeature(\n withState ({ entityName, loading:false} as StoreState),\n withEntities(xtStoreEntityConfig<T> ()),\n withProps ( () => ({\n _storeProvider:storeProvider,\n _entityConfig:xtStoreEntityConfig<T>()\n })),\n withMethods ((store) => ({\n async storeEntity (toStore:T): Promise<T> {\n patchState(store, {loading:true});\n return store._storeProvider.storeEntity(entityName, toStore).then ( (stored)=> {\n patchState(store, setEntity(stored, store._entityConfig));\n return stored;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n\n fetchEntities (): Promise<void> {\n patchState(store, {loading:true});\n return lastValueFrom(store._storeProvider.searchEntities(entityName).pipe (map( (entities: T[]) => {\n patchState(store, setEntities (entities, store._entityConfig));\n }),finalize(() => {\n patchState(store, {loading:false});\n })));\n },\n\n /* listEntities (): Observable<ManagedData[]> {\n patchState(store, {loading:true});\n return store._storeProvider.searchEntities(entityName).pipe (map( (entities: ManagedData[]) => {\n patchState(store, setEntities (entities, xtStoreEntityConfig));\n return entities;\n }),finalize(() => {\n patchState(store, {loading:false});\n }));\n },*/\n\n async loadEntity (id:string): Promise<T|undefined> {\n patchState(store, {loading:true});\n return store._storeProvider.loadEntity(entityName, id).then ( (loaded)=> {\n if( loaded != null)\n patchState(store, setEntity(loaded, store._entityConfig));\n return loaded;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n async safeLoadEntity (id:string): Promise<T> {\n patchState(store, {loading:true});\n return store._storeProvider.loadEntity(entityName, id).then ( (loaded)=> {\n if( loaded != null)\n patchState(store, setEntity(loaded, store._entityConfig));\n return loaded;\n }).then((loaded)=> {\n if (loaded==null) throw new Error (\"Entity \"+entityName+\" with id \"+id+\" not found\");\n return loaded;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n async deleteEntity (id:string): Promise<boolean> {\n patchState(store, {loading:true});\n return store._storeProvider.deleteEntity(entityName, id).then((result)=> {\n if( result ) {\n patchState(store, removeEntity(id));\n }\n return result;\n }).finally(() => {\n patchState(store, {loading:false});\n });\n },\n searchEntities(...criteria: XtStoreCriteria[]): Observable<T[]> {\n patchState(store, { loading: true });\n try {\n const listEntities = store.entities();\n let toAdd=true;\n const ret = new Array<T>();\n for (const entity of listEntities) {\n toAdd=true;\n for (const crit of criteria) {\n if (!crit.filter(entity)) {\n toAdd=false;\n break;\n }\n }\n if (toAdd) ret.push(entity);\n }\n return of(ret);\n } finally {\n patchState(store, { loading: false });\n }\n }\n\n }))\n\n);\n}\n","import { Injectable } from '@angular/core';\nimport { signalStore } from '@ngrx/signals';\nimport { ManagedData } from 'xt-type';\nimport { xtStoreManager } from '../store-manager/xt-store-manager';\nimport { withXtStoreProvider, XtSignalStore } from '../store-entity/store-entity-feature';\nimport { XtStoreProvider } from '../store-provider/xt-store-provider';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class XtStoreManagerService {\n\n protected storeManager = xtStoreManager();\n protected entityToStoreMap = new Map<string, XtSignalStore<ManagedData>>();\n\n constructor() {\n }\n\n getStoreFor<T extends ManagedData>(entityName: string): XtSignalStore<T> {\n let store = this.entityToStoreMap.get(entityName);\n if (store == null) {\n const provider = this.storeManager.getProvider<T>(entityName);\n if (provider == null) {\n throw new Error('No provider found for entity ' + entityName);\n } else {\n const res = signalStore(\n withXtStoreProvider(entityName, provider)\n );\n store= new res();\n }\n this.entityToStoreMap.set(entityName, store);\n }\n return store as XtSignalStore<T>;\n }\n\n setDefaultStoreProvider (provider: XtStoreProvider<ManagedData>) {\n this.storeManager.setDefaultProvider(provider);\n }\n}\n","import { lastValueFrom, Observable, Subscription } from 'rxjs';\nimport { inject, Injectable, OnDestroy } from '@angular/core';\nimport { map, mergeAll } from 'rxjs/operators';\nimport { AbstractXtStoreProvider } from '../store-provider/xt-store-provider';\nimport { XtStoreProviderHelper } from '../store-provider/xt-store-provider-helper';\nimport { XtStoreCriteria } from '../xt-store-parameters';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { ManagedData, nonTemporaryId } from 'xt-type';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\n\n/**\n * A Store Provider that uses the DontCode API to store / read application data\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class XtApiStoreProvider<T extends ManagedData = ManagedData> extends AbstractXtStoreProvider<T> implements OnDestroy {\n\n protected http: HttpClient = inject (HttpClient, {optional:true}) as any;\n\n apiUrl: string;\n docUrl: string;\n subscriptions = new Subscription();\n\n constructor(http?:HttpClient/* protected configService: CommonConfigService*/) {\n super();\n if (http!=null) {\n this.http=http;\n }\n\n if (this.http==null) {\n throw new Error (\"You must provide an HttpClient, either through constructor or injection.\");\n }\n this.apiUrl = 'https://test.dont-code.net/data';\n this.docUrl = 'https://test.dont-code.net/documents';\n\n /*this.updateConfig (this.configService.getConfig());\n this.subscriptions.add (this.configService.getUpdates ().pipe (map ((updatedConfig) => {\n this.updateConfig (updatedConfig);\n })).subscribe());*/\n\n }\n\n ngOnDestroy(): void {\n this.subscriptions.unsubscribe();\n }\n\n/* updateConfig(newConfig: Readonly<CommonLibConfig>) {\n if (newConfig.storeApiUrl!=null)\n this.apiUrl = newConfig.storeApiUrl;\n if (newConfig.documentApiUrl!=null)\n this.docUrl = newConfig.documentApiUrl;\n }*/\n\n storeEntity(name: string, data: T): Promise<T> {\n\n const id=nonTemporaryId(data);\n // Reconverts dates or Ids\n XtStoreProviderHelper.cleanUpDataBeforeSaving([data],name);\n\n if( id != undefined) {\n return lastValueFrom(this.http.put<T>(this.apiUrl+'/'+name+'/'+id, data, {observe:\"body\", responseType:\"json\"})).then((ret)=> {\n XtStoreProviderHelper.cleanUpLoadedData([ret], name);\n return ret;\n });\n } else {\n return lastValueFrom(this.http.post<T>(this.apiUrl+'/'+name, data, {observe:\"body\", responseType:\"json\"})).then((ret)=> {\n XtStoreProviderHelper.cleanUpLoadedData([ret], name);\n return ret;\n });\n }\n }\n\n loadEntity(name: string, key: any): Promise<T|undefined> {\n const obs = this.http.get<T>(this.apiUrl+'/'+name+'/'+key, {observe:\"body\", responseType:\"json\"});\n\n return lastValueFrom(obs).then((value) => {\n XtStoreProviderHelper.cleanUpLoadedData([value], name);\n return value;\n });\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n return lastValueFrom(this.http.delete(this.apiUrl+'/'+name+'/'+key, {observe:\"body\", responseType:\"json\"})).then(value => {\n return true;\n });\n }\n\n override searchEntities(name: string, ...criteria: XtStoreCriteria[]): Observable<T[]> {\n\n return this.http.get(this.apiUrl+'/'+name, {observe:\"body\", responseType:\"json\"}).pipe(\n map(value => {\n XtStoreProviderHelper.cleanUpLoadedData(value as T [], name);\n return value as T[];\n }),map(value => {\n return XtStoreProviderHelper.applyFilters( value, ...criteria);\n }\n )\n );\n }\n\n canStoreDocument(): boolean {\n return true;\n }\n\n storeDocuments(toStore: File[]): Observable<UploadedDocumentInfo> {\n const myFormData = new FormData();\n const headers = new HttpHeaders();\n headers.append('Content-Type', 'multipart/form-data');\n headers.append('Accept', 'application/json');\n let count=0;\n // store files details into formdata\n toStore.forEach( file => {\n myFormData.append('document#'+count, file);\n count++;\n });\n //HTTP Angular service, which will send call to Laravel API With headers and myformdata\n return this.http.post<UploadedDocumentInfo[]>(this.docUrl, myFormData, { headers: headers }).pipe(\n mergeAll ()\n );\n }\n\n}\n","import { AbstractXtStoreProvider } from './xt-store-provider';\nimport { from, Observable, of, Subject, throwError } from 'rxjs';\nimport { UploadedDocumentInfo } from '../xt-document';\nimport { ManagedData } from 'xt-type';\n\nexport class XtMemoryStoreProvider<T extends ManagedData> extends AbstractXtStoreProvider<T> {\n protected storage=new Map<string, Map<string, T>>();\n\n /**\n * It supports storing documents in memory only, then use with care !\n */\n override canStoreDocument(): boolean {\n return true;\n }\n\n getSafeStore (name:string):Map<string,T> {\n let ret = this.storage.get(name);\n if (ret==null) {\n ret = new Map<string, T>();\n this.storage.set(name, ret);\n }\n return ret;\n }\n\n deleteEntity(name: string, key: any): Promise<boolean> {\n const store = this.getSafeStore (name);\n return Promise.resolve(store.delete(key));\n }\n\n loadEntity(name: string, key: any): Promise<T | undefined> {\n const store = this.getSafeStore (name);\n return Promise.resolve(store.get(key));\n }\n\n override listEntities(name: string): Observable<T[]> {\n const store = this.getSafeStore (name);\n //console.debug(\"Listing entities for \"+name+\" with \",store);\n return of (Array.from(store.values()));\n }\n\n storeEntity(name: string, entity: T): Promise<T> {\n const store = this.getSafeStore (name);\n if (entity._id==null) {\n entity._id = Math\n .random().toString(36).substring(2, 8);\n }\n store.set(entity._id, entity);\n return Promise.resolve(entity);\n }\n\n override storeDocuments(toStore: File[]): Observable<UploadedDocumentInfo> {\n const toSend = new Array<UploadedDocumentInfo>();\n for (const file of toStore) {\n const ret: UploadedDocumentInfo = { documentName:file.name, documentId: URL.createObjectURL(file), isUrl: true };\n toSend.push(ret);\n }\n return from(toSend)\n }\n\n}\n","import { XtStoreManager } from '../store-manager/xt-store-manager';\nimport { XtMemoryStoreProvider } from '../store-provider/xt-memory-store-provider';\nimport { ManagedData } from 'xt-type';\nimport { XtStoreProvider } from '../store-provider/xt-store-provider';\n\n\nexport class StoreTestBed {\n readonly storeManager = xtStoreManager();\n\n public static ensureMemoryProviderOnly () {\n XtStoreManager.setTestMode(new XtMemoryStoreProvider<ManagedData>());\n }\n\n public async defineTestDataFor (entityName:string, testData:ManagedData[]): Promise<void> {\n for (const testEntity of testData) {\n await this.storeManager.storeEntity(entityName, testEntity);\n }\n }\n\n public getStoreManager () {\n return this.storeManager;\n }\n\n public getStoreProviderFor (entityName:string):XtStoreProvider {\n return this.storeManager.getProviderSafe(entityName);\n }\n}\n","/*\n * Public API Surface of store\n */\n\nexport * from './store-manager/xt-store-manager';\nexport * from './store-provider/xt-store-provider';\nexport * from './store-provider/xt-store-provider-helper';\nexport * from './store-manager-service/xt-store-manager.service';\n\nexport * from './store-entity/store-entity-feature';\n\nexport * from './api-provider/xt-api-store-provider';\nexport * from './store-provider/xt-memory-store-provider';\n\nexport * from './xt-store-parameters';\nexport * from './xt-document';\nexport * from './xt-reporting';\n\nexport * from './test/store-test-bed';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["xtStoreManager","map"],"mappings":";;;;;;;;;;MAGa,eAAe,CAAA;AAK1B,IAAA,WAAA,CACE,IAAY,EACZ,KAAU,EACV,QAAkC,EAAA;AAElC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAChB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK;AAClB,QAAA,IAAI,CAAC,QAAQ;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,GAAG;aAC7B;AACH,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QAC1B;IACF;AAEA,IAAA,MAAM,CAAE,QAAY,EAAA;QAClB,MAAM,SAAS,GAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACnC,QAAA,QAAQ,IAAI,CAAC,QAAQ;AACnB,YAAA,KAAK,GAAG;AACN,gBAAA,OAAO,SAAS,IAAI,IAAI,CAAC,KAAK;AAChC,YAAA,KAAK,GAAG;AACN,gBAAA,OAAQ,SAAoB,GAAE,IAAI,CAAC,KAAgB;AACrD,YAAA,KAAK,IAAI;AACP,gBAAA,OAAQ,SAAoB,GAAE,IAAI,CAAC,KAAgB;AACrD,YAAA;AACE,gBAAA,OAAO,IAAI;;IAEjB;AAED;IAOW;AAAZ,CAAA,UAAY,iBAAiB,EAAA;AAC3B,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACb,IAAA,iBAAA,CAAA,WAAA,CAAA,GAAA,WAAuB;AACvB,IAAA,iBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AAC3B,CAAC,EAJW,iBAAiB,KAAjB,iBAAiB,GAAA,EAAA,CAAA,CAAA;IAMjB;AAAZ,CAAA,UAAY,aAAa,EAAA;AACvB,IAAA,aAAA,CAAA,YAAA,CAAA,GAAA,YAAuB;AACvB,IAAA,aAAA,CAAA,aAAA,CAAA,GAAA,aAAyB;AAC3B,CAAC,EAHW,aAAa,KAAb,aAAa,GAAA,EAAA,CAAA,CAAA;IAKb;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC5B,IAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,OAAc;AACd,IAAA,kBAAA,CAAA,KAAA,CAAA,GAAA,KAAS;AACT,IAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,SAAiB;AACjB,IAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,SAAiB;AACjB,IAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,SAAiB;AACnB,CAAC,EANW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;;MC7CjB,cAAc,CAAA;aAKR,IAAA,CAAA,YAAY,GAA6B,IAA7B,CAAkC;AAE/D,IAAA,WAAA,CACE,QAA+B,EAAA;AANzB,QAAA,IAAA,CAAA,kBAAkB,GAAG,IAAI,GAAG,EAAgC;AAC5D,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,GAAG,EAAgC;AAO9D,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QACxB,IAAI,CAAC,KAAK,EAAE;IACd;IAEA,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE;AAC/B,QAAA,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE;IAC7B;AAEA,IAAA,WAAW,CAAsC,IAAa,EAAA;;AAE5D,QAAA,IAAI,cAAc,CAAC,YAAY,IAAE,IAAI;YAAE,OAAO,cAAc,CAAC,YAAY;AAEzE,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,OAAO,IAAI,CAAC,QAAQ;QACtB;aAAO;YACL,IAAI,GAAG,GAAG,IAAI;;AAEd;;;;;;;AAOa;YACX,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC;;AAEzC,YAAA,OAAO,GAAG,IAAI,IAAI,CAAC,QAAQ;QAC7B;IACF;AAEA,IAAA,eAAe,CAAsC,IAAa,EAAA;QAChE,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAI,IAAI,CAAC;AACrC,QAAA,IAAI,GAAG,IAAI,IAAI,EAAE;AACf,YAAA,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC;QAChE;aAAO;AACL,YAAA,OAAO,GAAG;QACZ;IACF;IAEA,kBAAkB,GAAA;AAChB,QAAA,OAAO,IAAI,CAAC,WAAW,EAAE;IAC3B;IAEA,sBAAsB,GAAA;AACpB,QAAA,OAAO,IAAI,CAAC,eAAe,EAAE;IAC/B;IAEA,WAAW,CAAsC,KAAyB,EAAE,IAAa,EAAA;QACvF,IAAI,IAAI,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,KAAK;aAClC;YACH,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC;QAC1C;IACF;IAEA,wBAAwB,CACtB,KAAyB,EACzB,OAAe,EAAA;QAEf,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC;IACzC;AAEA,IAAA,kBAAkB,CAAsC,KAAyB,EAAA;AAC/E,QAAA,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;IACzB;AAEA,IAAA,cAAc,CAAC,IAAa,EAAA;QAC1B,IAAI,IAAI,IAAI,IAAI;AAAE,YAAA,IAAI,CAAC,QAAQ,GAAG,SAAS;aACtC;AACH,YAAA,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC;QACtC;IACF;AAEA,IAAA,2BAA2B,CAAC,OAAe,EAAA;AACzC,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC;IACrC;IAEA,qBAAqB,GAAA;QACnB,IAAI,CAAC,cAAc,EAAE;IACvB;AAEA,IAAA,gBAAgB,CAAC,IAAY,EAAE,KAAU,EAAE,QAAiC,EAAA;QAC1E,OAAO,IAAI,eAAe,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC;IACnD;IAEA,WAAW,CAAsC,IAAY,EAAE,MAAS,EAAA;AACtE,QAAA,OAAO,IAAI,CAAC,eAAe,CAAI,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC;IAChE;IAEA,UAAU,CAAsC,IAAY,EAAE,GAAQ,EAAA;AACpE,QAAA,OAAO,IAAI,CAAC,eAAe,CAAI,IAAI,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC;IAC5D;IAEA,cAAc,CAAsC,IAAY,EAAE,GAAQ,EAAA;AACxE,QAAA,OAAO,IAAI,CAAC,eAAe,CAAI,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC;IAChE;IAEA,YAAY,CAAC,IAAY,EAAE,GAAQ,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,CAAC;IAC3D;AAEA,IAAA,cAAc,CACZ,IAAY,EACZ,GAAG,QAA2B,EAAA;AAE9B,QAAA,OAAO,IAAI,CAAC,eAAe,CAAI,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC;IACxE;IAEA,wBAAwB,CACtB,IAAY,EACZ,IAAc,EACd,OAAkB,EAClB,eAAkC,EAClC,GAAG,QAA2B,EAAA;QAE9B,OAAO,IAAI,CAAC,eAAe,CAAI,IAAI,CAAC,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,QAAQ,CAAC;IAClH;AAGA,IAAA,gBAAgB,CAAC,IAAa,EAAA;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,gBAAgB,EAAE;AACtD,QAAA,IAAI,GAAG;AAAE,YAAA,OAAO,GAAG;;AACd,YAAA,OAAO,KAAK;IACnB;IAEA,cAAc,CACZ,OAAe,EACf,IAAa,EAAA;QAEb,OAAO,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC;IAC3D;IAEO,OAAO,WAAW,CAAE,YAAiC,EAAA;AAC1D,QAAA,IAAI,CAAC,YAAY,GAAC,YAAY;IAChC;;SAYcA,gBAAc,GAAA;IAC5B,OAAO,UAAU,CAAC,YAAY;AAChC;AAEA,UAAU,CAAC,YAAY,GAAG,IAAI,cAAc,EAAE;AAC9C,UAAU,CAAC,cAAc,GAAGA,gBAAc;;ACvK1C;;AAEG;MACU,qBAAqB,CAAA;aAEf,IAAA,CAAA,WAAW,GAAG,aAAa,EAAE,CAAC;AAC/C;;;;AAIG;AACI,IAAA,OAAO,YAAY,CAAK,IAAa,EAAE,GAAG,QAA2B,EAAA;AAC1E,QAAA,IAAI,CAAC,QAAQ,IAAE,IAAI,MAAI,QAAQ,CAAC,MAAM,IAAE,CAAC,CAAC;AAAE,YAAA,OAAO,IAAI;AACvD,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,IAAG;AAC3B,YAAA,KAAK,MAAM,SAAS,IAAI,QAAQ,EAAE;gBAChC,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,IAAe,CAAC;AACjD,gBAAA,QAAQ,SAAS,CAAC,QAAQ;AACxB,oBAAA,KAAK,GAAG;AACN,wBAAA,OAAO,SAAS,CAAC,KAAK,IAAE,MAAM;AAChC,oBAAA,KAAK,GAAG;AACN,wBAAA,OAAO,MAAM,GAAG,SAAS,CAAC,KAAK;AACjC,oBAAA,KAAK,IAAI;AACP,wBAAA,OAAO,MAAM,IAAI,SAAS,CAAC,KAAK;AAClC,oBAAA;wBACE,MAAM,IAAI,KAAK,CAAE,WAAW,GAAC,SAAS,CAAC,QAAQ,GAAC,UAAU,CAAC;;YAEjE;AACA,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AACF,QAAA,OAAO,IAAI;IACb;AAEA;;;;;AAKG;AACI,IAAA,OAAO,eAAe,CAAE,QAAe,EAAE,OAAe,EAAE,KAAkB,EAAA;AACjF,QAAA,OAAO,qBAAqB,CAAC,WAAW,EAAE,eAAe,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC;IAC5F;AAEE;;;;;AAKC;AACI,IAAA,OAAO,uBAAuB,CAAE,aAAgC,EAAE,QAAe,EAAE,OAAkC,EAAA;QACxH,IAAI,OAAO,IAAE,IAAI;YAAE,OAAO,GAAC,qBAAqB,CAAC,eAAe,CAC3D,QAAQ,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,MAAM,GAAC,CAAC,IAAE,aAAa,CAAC,CAAC,CAAC,GAAC,SAAS;AAC1E,iBAAA,OAAO;AAEV,QAAA,IAAI,OAAO,IAAE,IAAI,EAAE;AACjB,YAAA,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE;AACrC,gBAAA,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;YAC3B;QACF;AACN;;;;AAIO;IACL;AAEA;;;;;;AAMG;AACI,IAAA,OAAO,iBAAiB,CAAE,aAAgC,EAAE,QAAe,EAAE,OAAkC,EAAA;QAEpH,IAAI,OAAO,IAAE,IAAI;AAAE,YAAA,OAAO,GAAC,qBAAqB,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,MAAM,GAAC,CAAC,IAAE,aAAa,CAAC,CAAC,CAAC,GAAC,SAAS,CAAC,CAAC,OAAO;AAElJ,QAAA,IAAI,OAAO,IAAE,IAAI,EAAE;AACjB,YAAA,KAAK,MAAM,SAAS,IAAI,aAAa,EAAE;AACrC,gBAAA,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC;YAC7B;QACF;AACE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BC;IACL;AAEA;;;;;AAKG;AACH,IAAA,OAAO,cAAc,CAAI,MAAW,EAAE,WAAsB,EAAA;QAC1D,IAAI,WAAW,IAAE,IAAI;AACnB,YAAA,OAAO,MAAM;AACf,QAAA,OAAO,MAAM;IACf;AAEA;;;;;;;AAOG;AACH,IAAA,OAAO,wBAAwB,CAAI,IAAY,EAAE,MAAW,EAAE,OAAkB,EAAA;;AAE9E,QAAA,IAAI,CAAC,OAAO,IAAE,IAAI,MAAM,OAAO,CAAC,OAAO,IAAE,IAAI,CAAC,EAAE;AAC9C,YAAA,IAAI,cAAc,GAAC,OAAO,CAAC,EAAa;AACxC,YAAA,IAAI,OAAO,CAAC,IAAI,IAAE,IAAI;AAAE,gBAAA,cAAc,GAAC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAa;AAExE,YAAA,MAAM,QAAQ,GAAC,IAAI,GAAG,EAA+B;AACrD,YAAA,IAAI,kBAAsB;AAC1B,YAAA,IAAI,kBAAkB,GAAC,IAAI,GAAG,EAAqB;AAEnD,YAAA,MAAM,cAAc,GAAG,OAAO,CAAC,uBAAuB,EAAkB;AACxE,YAAA,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;gBAC1B,IAAI,KAAK,CAAC,cAAc,CAAC,IAAE,kBAAkB,EAAE;AAC7C,oBAAA,kBAAkB,GAAC,KAAK,CAAC,cAAc,CAAC;oBACxC,MAAM,qBAAqB,GAAC,QAAQ,CAAC,GAAG,CAAC,kBAAkB,CAAC;AAC5D,oBAAA,IAAI,qBAAqB,IAAE,IAAI,EAAE;AAC/B,wBAAA,kBAAkB,GAAG,IAAI,GAAG,EAAqB;AACjD,wBAAA,QAAQ,CAAC,GAAG,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;oBACtD;yBAAM;wBACJ,kBAAkB,GAAG,qBAAqB;oBAC5C;gBACF;AAEA,gBAAA,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE;oBAClC,IAAI,OAAO,GAAC,kBAAkB,EAAE,GAAG,CAAC,KAAK,CAAC;AAC1C,oBAAA,IAAI,OAAO,IAAE,IAAI,EAAE;AACjB,wBAAA,OAAO,GAAG,IAAI,QAAQ,EAAE;AACxB,wBAAA,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;oBACxC;AAEA,oBAAA,MAAM,MAAM,GAAC,KAAK,CAAC,KAAK,CAAC;oBACzB,MAAM,GAAG,GAAC,MAAM;AAChB,oBAAA,IAAI,MAAM,IAAE,IAAI,EAAE;wBAChB,MAAM,QAAQ,GAAK,IAAI;;wBAEvB,IAAI,CAAC,OAAO,MAAM,KAAK,QAAQ,MAAO,EAAE,MAAM,YAAY,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAE,IAAI,CAAC,EAAE;AACpF,4BAAA,IAAI,OAAO,CAAC,GAAG,IAAE,IAAI;AAAE,gCAAA,OAAO,CAAC,GAAG,GAAC,eAAe,CAAC,MAAM,CAAC;iCACrD;gCACH,OAAO,CAAC,GAAG,GAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,EACrE,CAAC,KAAU,EAAE,MAAW,KAAI;oCAC1B,IAAI,CAAC,KAAK,IAAE,IAAI,MAAM,MAAM,IAAE,IAAI,CAAC;wCACjC,OAAO,KAAK,GAAG,MAAM;AAClB,yCAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACtB,wCAAA,OAAO,MAAM;oCACf;AAAO,yCAAA,IAAI,MAAM,IAAE,IAAI,EAAE;AACvB,wCAAA,OAAO,KAAK;oCACd;AACF,gCAAA,CAAC;AACe,iDAAC;4BACrB;AACA,4BAAA,MAAM,KAAK,GAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,qBAAoB;AAC9E,4BAAA,IAAI,OAAO,CAAC,OAAO,IAAE,IAAI,EAAG;AAAE,gCAAA,OAAO,CAAC,OAAO,GAAC,MAAM;AAAE,gCAAA,OAAO,CAAC,UAAU,GAAC,KAAK;4BAAA;iCACzE;AACH,gCAAA,MAAM,QAAQ,GAAC,OAAO,CAAC,UAAU;gCACjC,IAAI,CAAC,KAAK,IAAE,IAAI,MAAM,CAAC,QAAQ,IAAE,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,EAAG;AAAE,oCAAA,OAAO,CAAC,OAAO,GAAG,MAAM;AAAE,oCAAA,OAAO,CAAC,UAAU,GAAC,KAAK;gCAAC;4BACvH;AAEA,4BAAA,IAAI,OAAO,CAAC,OAAO,IAAE,IAAI,EAAE;AAAE,gCAAA,OAAO,CAAC,OAAO,GAAC,MAAM;AAAE,gCAAA,OAAO,CAAC,UAAU,GAAC,KAAK;4BAAC;iCACzE;AACH,gCAAA,MAAM,QAAQ,GAAC,OAAO,CAAC,UAAU;gCAEjC,IAAI,CAAC,KAAK,IAAE,IAAI,MAAM,CAAC,QAAQ,IAAE,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,EAC3D;AAAE,oCAAA,OAAO,CAAC,OAAO,GAAG,MAAM;AAAE,oCAAA,OAAO,CAAC,UAAU,GAAG,KAAK;gCAAC;4BAE3D;AAEA,4BAAA,IAAI,KAAK,IAAE,IAAI,EAAE;gCACf,OAAO,CAAC,KAAK,EAAE;4BACjB;wBAEF;AAAO,6BAAA,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAClC,4BAAA,IAAI,OAAO,CAAC,GAAG,IAAE,IAAI;AAAE,gCAAA,OAAO,CAAC,GAAG,GAAC,CAAC;4BACpC,OAAO,CAAC,GAAG,GAAC,OAAO,CAAC,GAAG,GAAC,GAAG;AAC3B,4BAAA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAE,IAAI,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,EACpD;AAAE,gCAAA,OAAO,CAAC,OAAO,GAAC,MAAM;AAAE,gCAAA,OAAO,CAAC,UAAU,GAAC,MAAgB;4BAAC;AAChE,4BAAA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAE,IAAI,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,EACpD;AAAE,gCAAA,OAAO,CAAC,OAAO,GAAC,MAAM;AAAE,gCAAA,OAAO,CAAC,UAAU,GAAC,MAAgB;4BAAC;4BAChE,OAAO,CAAC,KAAK,EAAE;wBACjB;AAAO,6BAAA,IAAI,CAAC,GAAG,YAAY,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE;AAC3D,4BAAA,OAAO,CAAC,GAAG,GAAC,IAAI;4BAChB,IAAI,CAAC,OAAO,CAAC,OAAO,IAAE,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE;AAC1E,gCAAA,OAAO,CAAC,OAAO,GAAC,MAAM;4BACxB;4BACA,IAAI,CAAC,OAAO,CAAC,OAAO,IAAE,IAAI,MAAM,GAAG,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,EAAE;AAC1E,gCAAA,OAAO,CAAC,OAAO,GAAC,MAAM;4BACxB;4BACA,OAAO,CAAC,KAAK,EAAE;wBACjB;AAAO,6BAAA;4BACL,OAAO,CAAC,KAAK,EAAE;wBACjB;oBACF;gBACF;YACF;;AAGA,YAAA,IAAI,GAA6C;AACjD,YAAA,IAAI,QAAQ,CAAC,IAAI,GAAC,CAAC,EAAE;gBACnB,GAAG,GAAG,IAAI,8BAA8B,CAAC,OAAO,EAAE,IAAI,GAAuC,CAAC;gBAC9F,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE;oBACtC,MAAM,KAAK,GAAC,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAE;AAEnC,oBAAA,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACtD,wBAAA,IAAI,KAAK;wBACT,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,EAAa,CAAC;AAClD,wBAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACnB,4BAAA,QAAQ,SAAS,CAAC,SAAS;gCACzB,KAAK,kBAAkB,CAAC,KAAK;AAC3B,oCAAA,KAAK,GAAG,OAAO,CAAC,KAAK;oCACrB;gCACF,KAAK,kBAAkB,CAAC,GAAG;AACzB,oCAAA,KAAK,GAAG,OAAO,CAAC,GAAG;oCACnB;gCACF,KAAK,kBAAkB,CAAC,OAAO;oCAAE;wCAC/B,MAAM,QAAQ,GAAK,IAAI;AACvB,wCAAA,IAAI,CAAC,OAAO,CAAC,GAAG,IAAE,IAAI,MAAM,OAAO,CAAC,KAAK,IAAE,CAAC,CAAC;4CAAE,KAAK,GAAC,IAAI;6CACpD,IAAI,CAAC,OAAO,OAAO,CAAC,GAAG,KAAK,QAAQ,MAAO,EAAE,OAAO,CAAC,GAAG,YAAY,IAAI,CAAC,CAAC,KAAK,QAAQ,IAAE,IAAI,CAAC,EAAE;AACnG,4CAAA,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,EACtD,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,sBAAqB,GAAC,OAAO,CAAC,KAAK,EACtF,OAAO,CAAC,QAAQ,EAAE,SAAS,sBAAqB;wCACpD;;4CAAO,KAAK,GAAG,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK;oCAC5C;oCACE;gCACF,KAAK,kBAAkB,CAAC,OAAO;AAC7B,oCAAA,KAAK,GAAG,OAAO,CAAC,OAAO;oCACvB;gCACF,KAAK,kBAAkB,CAAC,OAAO;AAC7B,oCAAA,KAAK,GAAG,OAAO,CAAC,OAAO;oCACvB;;4BAEJ,IAAI,YAAY,GAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC;AAC3C,4BAAA,IAAI,YAAY,IAAE,IAAI,EAAE;AACtB,gCAAA,YAAY,GAAG,IAAI,KAAK,EAAgC;gCACtD,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC;4BAC3C;4BACA,YAAY,CAAC,IAAI,CAAC,IAAI,4BAA4B,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;wBACvE;oBACF;gBACF;AACA,gBAAA,OAAO,GAAG,CAAC,MAAO,CAAC,IAAI,GAAC,CAAC,GAAC,GAAG,GAAC,SAAS;YACzC;QACF;AACA,QAAA,OAAO,SAAS;IAClB;;MAIW,6BAA6B,CAAA;AACxC,IAAA,WAAA,CAAmB,UAAc,EAAS,QAAkB,EAAS,iBAAiD,EAAA;QAAnG,IAAA,CAAA,UAAU,GAAV,UAAU;QAAa,IAAA,CAAA,QAAQ,GAAR,QAAQ;QAAmB,IAAA,CAAA,iBAAiB,GAAjB,iBAAiB;IACtF;AACD;MAEY,8BAA8B,CAAA;IACzC,WAAA,CAAmB,SAAmB,EAAS,MAA+C,EAAA;QAA3E,IAAA,CAAA,SAAS,GAAT,SAAS;QAAmB,IAAA,CAAA,MAAM,GAAN,MAAM;QACnD,IAAI,MAAM,IAAE,IAAI;AACd,YAAA,IAAI,CAAC,MAAM,GAAC,IAAI,GAAG,EAAsC;IAC7D;AACD;MAEY,4BAA4B,CAAA;IACvC,WAAA,CAAmB,YAA+B,EAAS,KAAS,EAAA;QAAjD,IAAA,CAAA,YAAY,GAAZ,YAAY;QAA4B,IAAA,CAAA,KAAK,GAAL,KAAK;IAChE;AACD;;MCnRY,aAAa,CAAA;AAIxB,IAAA,WAAA,CAAmB,EAAU,EAAE,SAA4B,EAAS,OAAiB,EAAA;QAAlE,IAAA,CAAA,EAAE,GAAF,EAAE;QAA+C,IAAA,CAAA,OAAO,GAAP,OAAO;QACzE,IAAI,SAAS,IAAE,IAAI;AAAI,YAAA,IAAI,CAAC,SAAS,GAAC,iBAAiB,CAAC,IAAI;;AACvD,YAAA,IAAI,CAAC,SAAS,GAAC,SAAS;IAC/B;AACD;MAEY,cAAc,CAAA;AAGzB,IAAA,WAAA,CAAmB,EAAS,EAAE,OAA+C,EAAS,IAAmB,EAAA;QAAtF,IAAA,CAAA,EAAE,GAAF,EAAE;QAAiE,IAAA,CAAA,IAAI,GAAJ,IAAI;QACxF,IAAI,OAAO,IAAE,IAAI;AAAE,YAAA,IAAI,CAAC,OAAO,GAAC,EAAE;;AAC7B,YAAA,IAAI,CAAC,OAAO,GAAC,OAAO;IAC3B;IAEO,0BAA0B,GAAA;QAC/B,IAAI,CAAC,IAAI,CAAC,OAAO,IAAE,IAAI,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,GAAC,CAAC,CAAC;AAC9D,YAAA,OAAO,IAAI;AACb,QAAA,OAAO,KAAK;IACd;IAEA,uBAAuB,GAAA;AACrB,QAAA,MAAM,GAAG,GAAG,IAAI,GAAG,EAAU;AAC7B,QAAA,IAAI,IAAI,CAAC,OAAO,IAAE,IAAI,EAAE;AACtB,YAAA,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;AACnD,gBAAA,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;YACvB;QACF;AACA,QAAA,OAAO,GAAG;IACZ;AACD;MAEY,uBAAuB,CAAA;IAClC,WAAA,CAAmB,EAAS,EAAS,SAA4B,EAAA;QAA9C,IAAA,CAAA,EAAE,GAAF,EAAE;QAAgB,IAAA,CAAA,SAAS,GAAT,SAAS;IAC9C;AACD;;MCEqB,uBAAuB,CAAA;AAO3C,IAAA,WAAA,GAAA;IACA;IAEA,cAAc,CAAC,IAAY,EAAE,GAAQ,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAG;YAC7C,IAAI,KAAK,IAAE,IAAI;AACb,gBAAA,OAAO,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC;;AAC/B,gBAAA,OAAO,KAAK;AACnB,QAAA,CAAC,CAAC;IACJ;AAEA;;;;AAIG;AACH,IAAA,cAAc,CAAC,IAAY,EAAE,GAAG,QAA2B,EAAA;AACzD,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,CACjC,GAAG,CAAE,KAAK,IAAG;YACX,OAAO,qBAAqB,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,QAAQ,CAAQ;QACtE,CAAC,CAAC,CACH;IACH;AAEA;;;;AAIG;AACO,IAAA,YAAY,CAAE,IAAW,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC;IAClC;IAEA,wBAAwB,CAAC,IAAY,EAAE,IAAe,EAAE,OAAmB,EAAE,WAAkC,EAAE,GAAG,QAA2B,EAAA;AAC7I,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,QAAQ,CAAC,CAAC,IAAI,CAChD,GAAG,CAAE,KAAK,IAAG;;YAEX,IAAI,WAAW,IAAE,IAAI;AAAE,gBAAA,OAAO,WAAW,CAAC,yBAAyB,CAAC,KAAK,CAAC;;AACrE,gBAAA,OAAO,KAAK;AACnB,QAAA,CAAC,CAAC,EACF,GAAG,CAAE,KAAK,IAAG;AACX,YAAA,IAAI,eAAwD;AAC5D,YAAA,IAAG,CAAC,IAAI,IAAE,IAAI,MAAM,OAAO,EAAE,0BAA0B,EAAE,KAAG,IAAI,CAAC,EAAE;AACjE,gBAAA,KAAK,GAAG,qBAAqB,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAQ;AACtG,gBAAA,IAAI,OAAO,IAAE,IAAI,EAAE;oBACjB,eAAe,GAAG,qBAAqB,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;gBACxF;YACF;YACA,OAAO,IAAI,6BAA6B,CAAK,KAAK,EAAE,IAAI,EAAE,eAAe,CAAC;QAC5E,CAAC,CAAC,CACH;IACH;AAEA,IAAA,aAAa,CAAC,OAAa,EAAA;QACzB,OAAO,cAAc,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD;IAOU,sBAAsB,CAAC,IAAe,EAAE,OAAmB,EAAA;;AAEnE,QAAA,IAAI,QAA2B;AAC/B,QAAA,IAAI,OAAO,IAAE,IAAI,EAAE;AACjB,YAAA,QAAQ,GAAC,IAAI,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC;QACzD;aAAO;YACL,QAAQ,GAAC,IAAI;QACf;AACA,QAAA,OAAO,QAAQ;IACjB;AAED;;SC7He,QAAQ,GAAA;IAA2D,OAAO,CAAC,IAAI,KAAI;AAC/F,QAAA,IAAI,IAAI,CAAC,GAAG,IAAE,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACxG,OAAO,IAAI,CAAC,GAAG;AACjB,IAAA,CAAC;AACH;SAEgB,mBAAmB,GAAA;AACjC,IAAA,OAAO,YAAY,CAAK;QACtB,MAAM,EAAE,IAAI,EAAK;QACjB,QAAQ,EAAC,QAAQ;AAClB,KAAA,CAAC;AACJ;AAAC;SAwBe,mBAAmB,CAAuC,UAAiB,EAAE,aAAgC,EAAE,QAAwB,EAAA;IACrJ,OAAO,kBAAkB,CACvB,SAAS,CAAE,EAAE,UAAU,EAAE,OAAO,EAAC,KAAK,EAAe,CAAC,EACtD,YAAY,CAAC,mBAAmB,EAAM,CAAC,EACvC,SAAS,CAAG,OAAO;AACjB,QAAA,cAAc,EAAC,aAAa;QAC5B,aAAa,EAAC,mBAAmB;KAClC,CAAC,CAAC,EACH,WAAW,CAAE,CAAC,KAAK,MAAM;QACvB,MAAM,WAAW,CAAE,OAAS,EAAA;YAC1B,UAAU,CAAC,KAAK,EAAE,EAAC,OAAO,EAAC,IAAI,EAAC,CAAC;AACjC,YAAA,OAAO,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,CAAG,CAAC,MAAM,KAAG;AAC5E,gBAAA,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;AACzD,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;gBACd,UAAU,CAAC,KAAK,EAAE,EAAC,OAAO,EAAC,KAAK,EAAC,CAAC;AACpC,YAAA,CAAC,CAAC;QACJ,CAAC;QAED,aAAa,GAAA;YACX,UAAU,CAAC,KAAK,EAAE,EAAC,OAAO,EAAC,IAAI,EAAC,CAAC;AACjC,YAAA,OAAO,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,IAAI,CAAE,GAAG,CAAE,CAAC,QAAa,KAAI;AAChG,gBAAA,UAAU,CAAC,KAAK,EAAE,WAAW,CAAE,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;AAChE,YAAA,CAAC,CAAC,EAAC,QAAQ,CAAC,MAAK;gBACf,UAAU,CAAC,KAAK,EAAE,EAAC,OAAO,EAAC,KAAK,EAAC,CAAC;YACpC,CAAC,CAAC,CAAC,CAAC;QACN,CAAC;AAEH;;;;;;;;AAQM;QAEJ,MAAM,UAAU,CAAE,EAAS,EAAA;YACzB,UAAU,CAAC,KAAK,EAAE,EAAC,OAAO,EAAC,IAAI,EAAC,CAAC;AACjC,YAAA,OAAO,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAG,CAAC,MAAM,KAAG;gBACtE,IAAI,MAAM,IAAI,IAAI;AAChB,oBAAA,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;AAC3D,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;gBACd,UAAU,CAAC,KAAK,EAAE,EAAC,OAAO,EAAC,KAAK,EAAC,CAAC;AACpC,YAAA,CAAC,CAAC;QACJ,CAAC;QACD,MAAM,cAAc,CAAE,EAAS,EAAA;YAC7B,UAAU,CAAC,KAAK,EAAE,EAAC,OAAO,EAAC,IAAI,EAAC,CAAC;AACjC,YAAA,OAAO,KAAK,CAAC,cAAc,CAAC,UAAU,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAG,CAAC,MAAM,KAAG;gBACtE,IAAI,MAAM,IAAI,IAAI;AAChB,oBAAA,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;AAC3D,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAG;gBAChB,IAAI,MAAM,IAAE,IAAI;AAAE,oBAAA,MAAM,IAAI,KAAK,CAAE,SAAS,GAAC,UAAU,GAAC,WAAW,GAAC,EAAE,GAAC,YAAY,CAAC;AACpF,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;gBACd,UAAU,CAAC,KAAK,EAAE,EAAC,OAAO,EAAC,KAAK,EAAC,CAAC;AACpC,YAAA,CAAC,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,CAAE,EAAS,EAAA;YAC3B,UAAU,CAAC,KAAK,EAAE,EAAC,OAAO,EAAC,IAAI,EAAC,CAAC;AACjC,YAAA,OAAO,KAAK,CAAC,cAAc,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAG;gBACtE,IAAI,MAAM,EAAG;oBACX,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,EAAE,CAAC,CAAC;gBACrC;AACA,gBAAA,OAAO,MAAM;AACf,YAAA,CAAC,CAAC,CAAC,OAAO,CAAC,MAAK;gBACd,UAAU,CAAC,KAAK,EAAE,EAAC,OAAO,EAAC,KAAK,EAAC,CAAC;AACpC,YAAA,CAAC,CAAC;QACJ,CAAC;QACD,cAAc,CAAC,GAAG,QAA2B,EAAA;YAC3C,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACpC,YAAA,IAAI;AACF,gBAAA,MAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,EAAE;gBACrC,IAAI,KAAK,GAAC,IAAI;AACd,gBAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAK;AAC1B,gBAAA,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE;oBACjC,KAAK,GAAC,IAAI;AACV,oBAAA,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE;wBAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;4BACxB,KAAK,GAAC,KAAK;4BACX;wBACF;oBACF;AACA,oBAAA,IAAI,KAAK;AAAE,wBAAA,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;gBAC7B;AACA,gBAAA,OAAO,EAAE,CAAC,GAAG,CAAC;YAChB;oBAAU;gBACR,UAAU,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;YACvC;QACF;KAED,CAAC,CAAC,CAEN;AACD;;MC5Ia,qBAAqB,CAAA;AAKhC,IAAA,WAAA,GAAA;QAHU,IAAA,CAAA,YAAY,GAAGA,gBAAc,EAAE;AAC/B,QAAA,IAAA,CAAA,gBAAgB,GAAG,IAAI,GAAG,EAAsC;IAG1E;AAEA,IAAA,WAAW,CAAwB,UAAkB,EAAA;QACnD,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,CAAC;AACjD,QAAA,IAAI,KAAK,IAAI,IAAI,EAAE;YACjB,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAI,UAAU,CAAC;AAC7D,YAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;AACpB,gBAAA,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,UAAU,CAAC;YAC/D;iBAAO;gBACL,MAAM,GAAG,GAAG,WAAW,CACrB,mBAAmB,CAAC,UAAU,EAAE,QAAQ,CAAC,CAC1C;AACD,gBAAA,KAAK,GAAE,IAAI,GAAG,EAAE;YAClB;YACA,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC;QAC9C;AACA,QAAA,OAAO,KAAyB;IAClC;AAEA,IAAA,uBAAuB,CAAE,QAAsC,EAAA;AAC7D,QAAA,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,QAAQ,CAAC;IAChD;8GA3BW,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAArB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,qBAAqB,cAFpB,MAAM,EAAA,CAAA,CAAA;;2FAEP,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACCD;;AAEG;AAIG,MAAO,kBAAwD,SAAQ,uBAA0B,CAAA;IAQrG,WAAA,CAAY,IAAgB,oDAAiD;AAC3E,QAAA,KAAK,EAAE;QAPC,IAAA,CAAA,IAAI,GAAe,MAAM,CAAE,UAAU,EAAE,EAAC,QAAQ,EAAC,IAAI,EAAC,CAAQ;AAIxE,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAE;AAIhC,QAAA,IAAI,IAAI,IAAE,IAAI,EAAE;AACd,YAAA,IAAI,CAAC,IAAI,GAAC,IAAI;QAChB;AAEA,QAAA,IAAI,IAAI,CAAC,IAAI,IAAE,IAAI,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAE,0EAA0E,CAAC;QAC9F;AACA,QAAA,IAAI,CAAC,MAAM,GAAG,iCAAiC;AAC/C,QAAA,IAAI,CAAC,MAAM,GAAG,sCAAsC;AAEpD;;;AAGmB;IAErB;IAEA,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;IAClC;AAEF;;;;;AAKK;IAEH,WAAW,CAAC,IAAY,EAAE,IAAO,EAAA;AAE/B,QAAA,MAAM,EAAE,GAAC,cAAc,CAAC,IAAI,CAAC;;QAE7B,qBAAqB,CAAC,uBAAuB,CAAC,CAAC,IAAI,CAAC,EAAC,IAAI,CAAC;AAE1D,QAAA,IAAI,EAAE,IAAI,SAAS,EAAE;AACnB,YAAA,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,IAAI,CAAC,MAAM,GAAC,GAAG,GAAC,IAAI,GAAC,GAAG,GAAC,EAAE,EAAE,IAAI,EAAE,EAAC,OAAO,EAAC,MAAM,EAAE,YAAY,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAG;gBAC3H,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AACpD,gBAAA,OAAO,GAAG;AACZ,YAAA,CAAC,CAAC;QACJ;aAAO;AACL,YAAA,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAI,IAAI,CAAC,MAAM,GAAC,GAAG,GAAC,IAAI,EAAE,IAAI,EAAE,EAAC,OAAO,EAAC,MAAM,EAAE,YAAY,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,KAAG;gBACrH,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC;AACpD,gBAAA,OAAO,GAAG;AACZ,YAAA,CAAC,CAAC;QACJ;IACF;IAEA,UAAU,CAAC,IAAY,EAAE,GAAQ,EAAA;AAC/B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAI,IAAI,CAAC,MAAM,GAAC,GAAG,GAAC,IAAI,GAAC,GAAG,GAAC,GAAG,EAAE,EAAC,OAAO,EAAC,MAAM,EAAE,YAAY,EAAC,MAAM,EAAC,CAAC;QAEjG,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,KAAI;YACvC,qBAAqB,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC;AACtD,YAAA,OAAO,KAAK;AACd,QAAA,CAAC,CAAC;IACJ;IAEA,YAAY,CAAC,IAAY,EAAE,GAAQ,EAAA;AACjC,QAAA,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,GAAC,GAAG,GAAC,IAAI,GAAC,GAAG,GAAC,GAAG,EAAE,EAAC,OAAO,EAAC,MAAM,EAAE,YAAY,EAAC,MAAM,EAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,IAAG;AACvH,YAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;IACF;AAEO,IAAA,cAAc,CAAC,IAAY,EAAE,GAAG,QAA2B,EAAA;AAElE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAC,GAAG,GAAC,IAAI,EAAE,EAAC,OAAO,EAAC,MAAM,EAAE,YAAY,EAAC,MAAM,EAAC,CAAC,CAAC,IAAI,CAClFC,KAAG,CAAC,KAAK,IAAG;AACV,YAAA,qBAAqB,CAAC,iBAAiB,CAAC,KAAa,EAAE,IAAI,CAAC;AAC5D,YAAA,OAAO,KAAY;AACrB,QAAA,CAAC,CAAC,EAACA,KAAG,CAAC,KAAK,IAAG;YACb,OAAO,qBAAqB,CAAC,YAAY,CAAE,KAAK,EAAE,GAAG,QAAQ,CAAC;QAChE,CAAC,CACF,CACF;IACD;IAEF,gBAAgB,GAAA;AACd,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,cAAc,CAAC,OAAe,EAAA;AAC5B,QAAA,MAAM,UAAU,GAAG,IAAI,QAAQ,EAAE;AACjC,QAAA,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;AACjC,QAAA,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,qBAAqB,CAAC;AACrD,QAAA,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,kBAAkB,CAAC;QAC5C,IAAI,KAAK,GAAC,CAAC;;AAEX,QAAA,OAAO,CAAC,OAAO,CAAE,IAAI,IAAG;YACtB,UAAU,CAAC,MAAM,CAAC,WAAW,GAAC,KAAK,EAAE,IAAI,CAAC;AAC1C,YAAA,KAAK,EAAE;AACT,QAAA,CAAC,CAAC;;QAEF,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAyB,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,IAAI,CAC/F,QAAQ,EAAG,CACZ;IACH;8GAxGW,kBAAkB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,cAFjB,MAAM,EAAA,CAAA,CAAA;;2FAEP,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAH9B,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;;ACVK,MAAO,qBAA6C,SAAQ,uBAA0B,CAAA;AAA5F,IAAA,WAAA,GAAA;;AACY,QAAA,IAAA,CAAA,OAAO,GAAC,IAAI,GAAG,EAA0B;IAqDrD;AAnDE;;AAEG;IACM,gBAAgB,GAAA;AACvB,QAAA,OAAO,IAAI;IACb;AAEA,IAAA,YAAY,CAAE,IAAW,EAAA;QACvB,IAAI,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;AAChC,QAAA,IAAI,GAAG,IAAE,IAAI,EAAE;AACb,YAAA,GAAG,GAAG,IAAI,GAAG,EAAa;YAC1B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;QAC7B;AACA,QAAA,OAAO,GAAG;IACZ;IAEA,YAAY,CAAC,IAAY,EAAE,GAAQ,EAAA;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAE,IAAI,CAAC;QACtC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3C;IAEA,UAAU,CAAC,IAAY,EAAE,GAAQ,EAAA;QAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAE,IAAI,CAAC;QACtC,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACxC;AAES,IAAA,YAAY,CAAC,IAAY,EAAA;QAChC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAE,IAAI,CAAC;;AAEtC,QAAA,OAAO,EAAE,CAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACxC;IAEA,WAAW,CAAC,IAAY,EAAE,MAAS,EAAA;QACjC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAE,IAAI,CAAC;AACtC,QAAA,IAAI,MAAM,CAAC,GAAG,IAAE,IAAI,EAAE;YACpB,MAAM,CAAC,GAAG,GAAG;AACV,iBAAA,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC;QAC1C;QACA,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC;AAC7B,QAAA,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;IAChC;AAES,IAAA,cAAc,CAAC,OAAe,EAAA;AACrC,QAAA,MAAM,MAAM,GAAG,IAAI,KAAK,EAAwB;AAChD,QAAA,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE;YAC1B,MAAM,GAAG,GAAyB,EAAE,YAAY,EAAC,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE;AAChH,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC;QAClB;AACA,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB;AAED;;MCrDY,YAAY,CAAA;AAAzB,IAAA,WAAA,GAAA;QACW,IAAA,CAAA,YAAY,GAAG,cAAc,EAAE;IAmB1C;AAjBS,IAAA,OAAO,wBAAwB,GAAA;AACpC,QAAA,cAAc,CAAC,WAAW,CAAC,IAAI,qBAAqB,EAAe,CAAC;IACtE;AAEO,IAAA,MAAM,iBAAiB,CAAE,UAAiB,EAAE,QAAsB,EAAA;AACvE,QAAA,KAAK,MAAM,UAAU,IAAI,QAAQ,EAAE;YACjC,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,UAAU,EAAE,UAAU,CAAC;QAC7D;IACF;IAEO,eAAe,GAAA;QACpB,OAAO,IAAI,CAAC,YAAY;IAC1B;AAEO,IAAA,mBAAmB,CAAE,UAAiB,EAAA;QAC3C,OAAO,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,UAAU,CAAC;IACtD;AACD;;AC1BD;;AAEG;;ACFH;;AAEG;;;;"}
package/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import * as xt_type from 'xt-type';
3
3
  import { ManagedData, XtTypeHandler } from 'xt-type';
4
4
  import * as xt_store from 'xt-store';
5
5
  import * as _ngrx_signals from '@ngrx/signals';
6
- import { EntityMap, EntityId } from '@ngrx/signals/entities';
6
+ import { EntityMap, EntityId, SelectEntityId } from '@ngrx/signals/entities';
7
7
  import * as i0 from '@angular/core';
8
8
  import { Signal, OnDestroy } from '@angular/core';
9
9
  import { HttpClient } from '@angular/common/http';
@@ -19,16 +19,13 @@ interface XtDataTransformer<T = never> {
19
19
  postLoadingTransformation(source: any[]): T[];
20
20
  }
21
21
 
22
- declare enum XtStoreCriteriaOperator {
23
- EQUALS = "=",
24
- LESS_THAN = "<",
25
- LESS_THAN_EQUAL = "<="
26
- }
22
+ type XtStoreCriteriaOperator = '=' | '<' | '<=';
27
23
  declare class XtStoreCriteria {
28
24
  name: string;
29
25
  value: any;
30
26
  operator: XtStoreCriteriaOperator;
31
27
  constructor(name: string, value: any, operator?: XtStoreCriteriaOperator);
28
+ filter(toFilter: any): boolean;
32
29
  }
33
30
  type XtSortBy = {
34
31
  by: string;
@@ -213,6 +210,7 @@ declare class XtStoreManager {
213
210
  removeProvider(name?: string): void;
214
211
  removeProviderForSourceType(srcType: string): void;
215
212
  removeDefaultProvider(): void;
213
+ newStoreCriteria(name: string, value: any, operator: XtStoreCriteriaOperator): XtStoreCriteria;
216
214
  storeEntity<T extends ManagedData = ManagedData>(name: string, entity: T): Promise<T>;
217
215
  loadEntity<T extends ManagedData = ManagedData>(name: string, key: any): Promise<T | undefined>;
218
216
  safeLoadEntity<T extends ManagedData = ManagedData>(name: string, key: any): Promise<T>;
@@ -232,6 +230,11 @@ declare global {
232
230
  }
233
231
  declare function xtStoreManager(): XtStoreManager;
234
232
 
233
+ declare function selectId<T extends ManagedData = ManagedData>(): SelectEntityId<T>;
234
+ declare function xtStoreEntityConfig<T extends ManagedData = ManagedData>(): {
235
+ entity: T;
236
+ selectId: SelectEntityId<NoInfer<T>>;
237
+ };
235
238
  type StoreState = {
236
239
  entityName: string;
237
240
  loading: boolean;
@@ -247,24 +250,30 @@ type XtSignalStore<T> = {
247
250
  safeLoadEntity(id: string): Promise<T>;
248
251
  storeEntity(toStore: T): Promise<T>;
249
252
  deleteEntity(id: string): Promise<boolean>;
253
+ searchEntities(...criteria: XtStoreCriteria[]): Observable<T[]>;
250
254
  };
251
- declare function withXtStoreProvider(entityName: string, storeProvider: XtStoreProvider<ManagedData>): _ngrx_signals.SignalStoreFeature<_ngrx_signals.EmptyFeatureResult, {
255
+ declare function withXtStoreProvider<T extends ManagedData = ManagedData>(entityName: string, storeProvider: XtStoreProvider<T>, storeMgr?: XtStoreManager): _ngrx_signals.SignalStoreFeature<_ngrx_signals.EmptyFeatureResult, {
252
256
  state: {
253
257
  entityName: string;
254
258
  loading: boolean;
255
- entityMap: EntityMap<ManagedData>;
259
+ entityMap: EntityMap<T>;
256
260
  ids: EntityId[];
257
261
  };
258
262
  props: {
259
- entities: Signal<ManagedData[]>;
260
- _storeProvider: XtStoreProvider<ManagedData>;
263
+ entities: Signal<T[]>;
264
+ _storeProvider: XtStoreProvider<T>;
265
+ _entityConfig: {
266
+ entity: T;
267
+ selectId: SelectEntityId<NoInfer<T>>;
268
+ };
261
269
  };
262
270
  methods: {
263
- storeEntity: (toStore: ManagedData) => Promise<ManagedData>;
271
+ storeEntity: (toStore: T) => Promise<T>;
264
272
  fetchEntities: () => Promise<void>;
265
- loadEntity: (id: string) => Promise<ManagedData | undefined>;
266
- safeLoadEntity: (id: string) => Promise<ManagedData>;
273
+ loadEntity: (id: string) => Promise<T | undefined>;
274
+ safeLoadEntity: (id: string) => Promise<T>;
267
275
  deleteEntity: (id: string) => Promise<boolean>;
276
+ searchEntities: (...criteria: XtStoreCriteria[]) => Observable<T[]>;
268
277
  };
269
278
  }>;
270
279
 
@@ -363,5 +372,5 @@ declare class StoreTestBed {
363
372
  getStoreProviderFor(entityName: string): XtStoreProvider;
364
373
  }
365
374
 
366
- export { AbstractXtStoreProvider, DontCodeStoreGroupedByEntities, DontCodeStoreGroupedByValues, DontCodeStorePreparedEntities, StoreTestBed, XtApiStoreProvider, XtGroupByOperation, XtGroupByShow, XtMemoryStoreProvider, XtSortByDirection, XtStoreCriteria, XtStoreCriteriaOperator, XtStoreGroupBy, XtStoreGroupByAggregate, XtStoreManager, XtStoreManagerService, XtStoreProviderHelper, XtStoreSortBy, withXtStoreProvider, xtStoreManager };
367
- export type { DontCodeReportDisplayType, DontCodeReportType, StoreState, UploadedDocumentInfo, XtGroupBy, XtGroupByAggregate, XtSignalStore, XtSortBy, XtStoreProvider };
375
+ export { AbstractXtStoreProvider, DontCodeStoreGroupedByEntities, DontCodeStoreGroupedByValues, DontCodeStorePreparedEntities, StoreTestBed, XtApiStoreProvider, XtGroupByOperation, XtGroupByShow, XtMemoryStoreProvider, XtSortByDirection, XtStoreCriteria, XtStoreGroupBy, XtStoreGroupByAggregate, XtStoreManager, XtStoreManagerService, XtStoreProviderHelper, XtStoreSortBy, selectId, withXtStoreProvider, xtStoreEntityConfig, xtStoreManager };
376
+ export type { DontCodeReportDisplayType, DontCodeReportType, StoreState, UploadedDocumentInfo, XtGroupBy, XtGroupByAggregate, XtSignalStore, XtSortBy, XtStoreCriteriaOperator, XtStoreProvider };
package/package.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "xt-store",
3
- "version": "0.5.5",
3
+ "version": "0.6.0",
4
+ "repository": {
5
+ "url": "https://github.com/dont-code/ng-xtend.git"
6
+ },
4
7
  "peerDependencies": {
5
8
  "@angular/common": "^19.1.0",
6
9
  "@angular/core": "^19.1.0"