@webda/core 3.6.0 → 3.8.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.
Files changed (109) hide show
  1. package/lib/application.d.ts +7 -1
  2. package/lib/application.js.map +1 -1
  3. package/lib/core.d.ts +9 -0
  4. package/lib/core.js +44 -1
  5. package/lib/core.js.map +1 -1
  6. package/lib/core.spec.js +5 -4
  7. package/lib/core.spec.js.map +1 -1
  8. package/lib/index.d.ts +5 -4
  9. package/lib/index.js +5 -4
  10. package/lib/index.js.map +1 -1
  11. package/lib/models/coremodel.d.ts +103 -12
  12. package/lib/models/coremodel.js +230 -33
  13. package/lib/models/coremodel.js.map +1 -1
  14. package/lib/models/coremodel.spec.js +21 -4
  15. package/lib/models/coremodel.spec.js.map +1 -1
  16. package/lib/models/ident.d.ts +2 -6
  17. package/lib/models/ident.js.map +1 -1
  18. package/lib/models/ident.spec.js.map +1 -1
  19. package/lib/models/relations.d.ts +24 -14
  20. package/lib/models/relations.js +36 -8
  21. package/lib/models/relations.js.map +1 -1
  22. package/lib/models/relations.spec.d.ts +12 -0
  23. package/lib/models/relations.spec.js +223 -0
  24. package/lib/models/relations.spec.js.map +1 -0
  25. package/lib/models/user.d.ts +2 -2
  26. package/lib/models/user.js.map +1 -1
  27. package/lib/services/asyncevents.d.ts +4 -3
  28. package/lib/services/asyncevents.js +17 -4
  29. package/lib/services/asyncevents.js.map +1 -1
  30. package/lib/services/authentication.js +1 -1
  31. package/lib/services/authentication.js.map +1 -1
  32. package/lib/services/binary.d.ts +26 -2
  33. package/lib/services/binary.js +160 -63
  34. package/lib/services/binary.js.map +1 -1
  35. package/lib/services/binary.spec.js +3 -1
  36. package/lib/services/binary.spec.js.map +1 -1
  37. package/lib/services/cloudbinary.d.ts +0 -18
  38. package/lib/services/cloudbinary.js +0 -94
  39. package/lib/services/cloudbinary.js.map +1 -1
  40. package/lib/services/cloudbinary.spec.js +18 -11
  41. package/lib/services/cloudbinary.spec.js.map +1 -1
  42. package/lib/services/domainservice.d.ts +2 -1
  43. package/lib/services/domainservice.js +13 -22
  44. package/lib/services/domainservice.js.map +1 -1
  45. package/lib/services/filebinary.js +1 -1
  46. package/lib/services/filebinary.js.map +1 -1
  47. package/lib/services/filebinary.spec.d.ts +1 -0
  48. package/lib/services/filebinary.spec.js +24 -2
  49. package/lib/services/filebinary.spec.js.map +1 -1
  50. package/lib/services/invitationservice.spec.js +3 -1
  51. package/lib/services/invitationservice.spec.js.map +1 -1
  52. package/lib/services/prometheus.js +1 -0
  53. package/lib/services/prometheus.js.map +1 -1
  54. package/lib/services/service.d.ts +0 -5
  55. package/lib/services/service.js +3 -34
  56. package/lib/services/service.js.map +1 -1
  57. package/lib/services/service.spec.js +2 -2
  58. package/lib/services/service.spec.js.map +1 -1
  59. package/lib/stores/aliasstore.js +5 -1
  60. package/lib/stores/aliasstore.js.map +1 -1
  61. package/lib/stores/file.js.map +1 -1
  62. package/lib/stores/mapper.d.ts +4 -4
  63. package/lib/stores/mapper.spec.js +1 -1
  64. package/lib/stores/mapper.spec.js.map +1 -1
  65. package/lib/stores/memory.spec.d.ts +1 -0
  66. package/lib/stores/memory.spec.js +28 -1
  67. package/lib/stores/memory.spec.js.map +1 -1
  68. package/lib/stores/modelmapper.d.ts +61 -0
  69. package/lib/stores/modelmapper.js +199 -0
  70. package/lib/stores/modelmapper.js.map +1 -0
  71. package/lib/stores/store.d.ts +33 -11
  72. package/lib/stores/store.js +155 -95
  73. package/lib/stores/store.js.map +1 -1
  74. package/lib/stores/store.spec.js +2 -2
  75. package/lib/stores/store.spec.js.map +1 -1
  76. package/lib/test.js +1 -1
  77. package/lib/test.js.map +1 -1
  78. package/lib/utils/case.d.ts +7 -0
  79. package/lib/utils/case.js +43 -0
  80. package/lib/utils/case.js.map +1 -0
  81. package/lib/utils/case.spec.d.ts +1 -0
  82. package/lib/utils/case.spec.js +50 -0
  83. package/lib/utils/case.spec.js.map +1 -0
  84. package/lib/utils/context.d.ts +3 -2
  85. package/lib/utils/context.js +6 -2
  86. package/lib/utils/context.js.map +1 -1
  87. package/lib/utils/cookie.spec.js +2 -2
  88. package/lib/utils/cookie.spec.js.map +1 -1
  89. package/lib/utils/esm.d.ts +9 -0
  90. package/lib/utils/esm.js +9 -0
  91. package/lib/utils/esm.js.map +1 -1
  92. package/lib/utils/httpcontext.d.ts +1 -1
  93. package/lib/utils/httpcontext.js +1 -0
  94. package/lib/utils/httpcontext.js.map +1 -1
  95. package/lib/utils/logger.spec.js +5 -2
  96. package/lib/utils/logger.spec.js.map +1 -1
  97. package/lib/utils/serializers.js +8 -1
  98. package/lib/utils/serializers.js.map +1 -1
  99. package/lib/utils/serializers.spec.js +6 -0
  100. package/lib/utils/serializers.spec.js.map +1 -1
  101. package/lib/utils/session.spec.js +1 -1
  102. package/lib/utils/session.spec.js.map +1 -1
  103. package/lib/utils/throttler.d.ts +22 -2
  104. package/lib/utils/throttler.js +35 -3
  105. package/lib/utils/throttler.js.map +1 -1
  106. package/lib/utils/throttler.spec.js +10 -2
  107. package/lib/utils/throttler.spec.js.map +1 -1
  108. package/package.json +10 -10
  109. package/webda.module.json +60 -26
@@ -0,0 +1,61 @@
1
+ import { CoreModel, CoreModelDefinition } from "../models/coremodel.js";
2
+ import { Service } from "../services/service.js";
3
+ export interface Mapper {
4
+ modelAttribute: string;
5
+ model: CoreModelDefinition<CoreModel>;
6
+ attributes: string[];
7
+ attribute: string;
8
+ }
9
+ interface ModelMapperInfo {
10
+ modelAttribute: string;
11
+ model: CoreModelDefinition<CoreModel>;
12
+ attributes: string[];
13
+ attribute: string;
14
+ type: "LINK" | "LINKS_MAP" | "LINKS_ARRAY" | "LINKS_SIMPLE_ARRAY";
15
+ }
16
+ /**
17
+ * Mapper service
18
+ *
19
+ * Ensure each ModelMapped properties is in-sync with their respective model
20
+ */
21
+ export declare class ModelMapper extends Service {
22
+ mappers: {
23
+ [key: string]: ModelMapperInfo[];
24
+ };
25
+ resolve(): this;
26
+ /**
27
+ * Get uuids from a ModelLinker
28
+ * @param object
29
+ * @param mapper
30
+ * @returns
31
+ */
32
+ getUuidsFromMapper(object: CoreModel, mapper: ModelMapperInfo): any[];
33
+ /**
34
+ * Handle event
35
+ * @param modelName
36
+ * @param evt
37
+ * @param type
38
+ * @returns
39
+ */
40
+ handleEvent(modelName: string, evt: any, type: "Store.Saved" | "Store.Deleted" | "Store.Updated" | "Store.PatchUpdated" | "Store.PartialUpdated"): Promise<any[]>;
41
+ /**
42
+ * Handle partial event to update a mapper
43
+ *
44
+ * @param modelName
45
+ * @param evt
46
+ * @param type
47
+ * @returns
48
+ */
49
+ handlePartialEvent(modelName: string, evt: any, type: "Store.Saved" | "Store.Deleted" | "Store.Updated" | "Store.PatchUpdated" | "Store.PartialUpdated"): Promise<any[]>;
50
+ /**
51
+ * Get a mapped object based on Mapper
52
+ *
53
+ * Copy attributes that are supposed to be copied
54
+ *
55
+ * @param model
56
+ * @param mapper
57
+ * @returns
58
+ */
59
+ getMapped(model: any, mapper: Mapper): any;
60
+ }
61
+ export {};
@@ -0,0 +1,199 @@
1
+ import { Service } from "../services/service.js";
2
+ /**
3
+ * Mapper service
4
+ *
5
+ * Ensure each ModelMapped properties is in-sync with their respective model
6
+ */
7
+ export class ModelMapper extends Service {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.mappers = {};
11
+ }
12
+ resolve() {
13
+ var _a, _b;
14
+ super.resolve();
15
+ const app = this.getWebda().getApplication();
16
+ const graph = app.getGraph();
17
+ for (let i in graph) {
18
+ if (!graph[i].maps)
19
+ continue;
20
+ this.log("INFO", i, graph[i].maps);
21
+ const targetModel = app.getModel(i);
22
+ for (let j in graph[i].maps) {
23
+ const mapper = graph[i].maps[j];
24
+ (_a = this.mappers)[_b = mapper.model] ?? (_a[_b] = []);
25
+ // Search for links
26
+ this.mappers[mapper.model].push({
27
+ attribute: mapper.targetLink,
28
+ attributes: mapper.targetAttributes,
29
+ model: targetModel,
30
+ modelAttribute: mapper.attribute,
31
+ type: graph[mapper.model].links?.find(p => p.attribute === mapper.targetLink)?.type || "LINK"
32
+ });
33
+ }
34
+ }
35
+ this.log("INFO", "Add listeners for", this.mappers);
36
+ for (let modelName in this.mappers) {
37
+ const model = app.getModel(modelName);
38
+ model.on("Store.Deleted", async (evt) => {
39
+ return this.handleEvent(modelName, evt, "Store.Deleted");
40
+ });
41
+ model.on("Store.Saved", async (evt) => {
42
+ return this.handleEvent(modelName, evt, "Store.Saved");
43
+ });
44
+ model.on("Store.Updated", async (evt) => {
45
+ return this.handleEvent(modelName, evt, "Store.Updated");
46
+ });
47
+ model.on("Store.PatchUpdated", async (evt) => {
48
+ return this.handlePartialEvent(modelName, evt, "Store.PatchUpdated");
49
+ });
50
+ model.on("Store.PartialUpdated", async (evt) => {
51
+ return this.handlePartialEvent(modelName, evt, "Store.PartialUpdated");
52
+ });
53
+ }
54
+ return this;
55
+ }
56
+ /**
57
+ * Get uuids from a ModelLinker
58
+ * @param object
59
+ * @param mapper
60
+ * @returns
61
+ */
62
+ getUuidsFromMapper(object, mapper) {
63
+ const targetUuids = [];
64
+ if (mapper.type === "LINK") {
65
+ targetUuids.push(object[mapper.attribute]?.getUuid());
66
+ }
67
+ else if (mapper.type === "LINKS_MAP") {
68
+ targetUuids.push(...Object.values(object[mapper.attribute]).map((p) => p.getUuid()));
69
+ }
70
+ else {
71
+ targetUuids.push(...object[mapper.attribute].map(p => (typeof p === "string" ? p : p.getUuid())));
72
+ }
73
+ return targetUuids.filter(p => p);
74
+ }
75
+ /**
76
+ * Handle event
77
+ * @param modelName
78
+ * @param evt
79
+ * @param type
80
+ * @returns
81
+ */
82
+ async handleEvent(modelName, evt, type) {
83
+ let p = [];
84
+ for (let mapper of this.mappers[modelName]) {
85
+ // For each mapper we identify uuid to add mapper to, uuid to remove mapper from and uuid to update
86
+ const toAdds = [];
87
+ const toRemoves = [];
88
+ const toUpdates = [];
89
+ if (type === "Store.Saved") {
90
+ toAdds.push(...this.getUuidsFromMapper(evt.object, mapper));
91
+ }
92
+ else if (type === "Store.Deleted") {
93
+ toRemoves.push(...this.getUuidsFromMapper(evt.object, mapper));
94
+ }
95
+ else if (type === "Store.Updated") {
96
+ const oldUuids = this.getUuidsFromMapper(evt.previous, mapper);
97
+ const newUuids = this.getUuidsFromMapper(evt.object, mapper);
98
+ oldUuids.forEach(u => {
99
+ if (newUuids.includes(u)) {
100
+ toUpdates.push(u);
101
+ }
102
+ else {
103
+ toRemoves.push(u);
104
+ }
105
+ });
106
+ newUuids.forEach(u => {
107
+ if (!oldUuids.includes(u)) {
108
+ toAdds.push(u);
109
+ }
110
+ });
111
+ }
112
+ const mapped = this.getMapped(evt.object, mapper);
113
+ // Add all promise
114
+ toAdds.forEach(u => {
115
+ p.push(mapper.model.ref(u).upsertItemToCollection(mapper.modelAttribute, mapped));
116
+ });
117
+ // Remove all promise
118
+ toRemoves.forEach(u => {
119
+ p.push((async () => {
120
+ const targetModel = await mapper.model.ref(u).get();
121
+ if (!targetModel)
122
+ return;
123
+ const ind = targetModel[mapper.modelAttribute].findIndex(p => p.uuid === evt.object.getUuid());
124
+ if (ind >= 0) {
125
+ await mapper.model.ref(u).deleteItemFromCollection(mapper.modelAttribute, ind, evt.object.getUuid());
126
+ }
127
+ })());
128
+ });
129
+ // Update all promise
130
+ toUpdates.forEach(u => {
131
+ p.push((async () => {
132
+ const targetModel = await mapper.model.ref(u).get();
133
+ if (!targetModel)
134
+ return;
135
+ const ind = targetModel[mapper.modelAttribute].findIndex(p => p.uuid === evt.object.getUuid());
136
+ if (ind >= 0) {
137
+ await mapper.model
138
+ .ref(u)
139
+ .upsertItemToCollection(mapper.modelAttribute, mapped, ind, evt.object.getUuid());
140
+ }
141
+ })());
142
+ });
143
+ }
144
+ return Promise.all(p);
145
+ }
146
+ /**
147
+ * Handle partial event to update a mapper
148
+ *
149
+ * @param modelName
150
+ * @param evt
151
+ * @param type
152
+ * @returns
153
+ */
154
+ async handlePartialEvent(modelName, evt, type) {
155
+ let uuid = evt.object?.getUuid();
156
+ // Only use in Store.PartialUpdated
157
+ const attributes = [];
158
+ if (type === "Store.PartialUpdated") {
159
+ const partial = evt;
160
+ if (partial.partial_update.increments) {
161
+ attributes.push(...partial.partial_update.increments.map(p => p.property));
162
+ }
163
+ if (partial.partial_update.deleteAttribute) {
164
+ attributes.push(partial.partial_update.deleteAttribute);
165
+ }
166
+ uuid = partial.object_id;
167
+ }
168
+ else if (type === "Store.PatchUpdated") {
169
+ attributes.push(...Object.keys(evt.object));
170
+ }
171
+ for (let mapper of this.mappers[modelName]) {
172
+ this.log("TRACE", "Should update a mapper based on Store.PartialUpdated", evt);
173
+ const partial = evt;
174
+ // Search if one property is mapped then redirect to Store.Updated
175
+ if (mapper.attributes.find(p => attributes.find(i => i === p))) {
176
+ const object = await partial.store.get(uuid);
177
+ return await this.handleEvent(modelName, { object, previous: object }, "Store.Updated");
178
+ }
179
+ }
180
+ }
181
+ /**
182
+ * Get a mapped object based on Mapper
183
+ *
184
+ * Copy attributes that are supposed to be copied
185
+ *
186
+ * @param model
187
+ * @param mapper
188
+ * @returns
189
+ */
190
+ getMapped(model, mapper) {
191
+ let obj = {};
192
+ for (let attr of mapper.attributes) {
193
+ obj[attr] = model[attr];
194
+ }
195
+ obj["uuid"] = model.getUuid();
196
+ return obj;
197
+ }
198
+ }
199
+ //# sourceMappingURL=modelmapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"modelmapper.js","sourceRoot":"","sources":["../../src/stores/modelmapper.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Counter, EventWithContext, Histogram } from "../core.js";
2
2
  import { ConfigurationProvider, WebdaError } from "../index.js";
3
- import { Constructor, CoreModel, CoreModelDefinition, FilterKeys } from "../models/coremodel.js";
3
+ import { Constructor, CoreModel, CoreModelDefinition, FilterAttributes } from "../models/coremodel.js";
4
4
  import { Service, ServiceParameters } from "../services/service.js";
5
5
  import { OperationContext, WebContext } from "../utils/context.js";
6
6
  import { HttpMethodType } from "../utils/httpcontext.js";
@@ -83,7 +83,7 @@ export interface EventStoreActioned extends EventStoreAction {
83
83
  /**
84
84
  * Event called before update of an object
85
85
  */
86
- export interface EventStoreUpdate extends EventStoreUpdated {
86
+ export interface EventStoreUpdate extends EventStore {
87
87
  /**
88
88
  * Update content
89
89
  */
@@ -92,7 +92,11 @@ export interface EventStoreUpdate extends EventStoreUpdated {
92
92
  /**
93
93
  * Event called after update of an object
94
94
  */
95
- export interface EventStoreUpdated extends EventStore {
95
+ export interface EventStoreUpdated extends EventStoreUpdate {
96
+ /**
97
+ * Object before update
98
+ */
99
+ previous: any;
96
100
  }
97
101
  /**
98
102
  * Event called before patch update of an object
@@ -358,6 +362,14 @@ export declare class StoreParameters extends ServiceParameters {
358
362
  * @default "Webda/CoreModel"
359
363
  */
360
364
  model?: string;
365
+ /**
366
+ * Additional models
367
+ *
368
+ * Allow this store to manage other models
369
+ *
370
+ * @default []
371
+ */
372
+ additionalModels?: string[];
361
373
  /**
362
374
  * async delete
363
375
  */
@@ -594,10 +606,10 @@ declare abstract class Store<T extends CoreModel = CoreModel, K extends StorePar
594
606
  * @param info
595
607
  * @returns
596
608
  */
597
- incrementAttributes<FK extends FilterKeys<T, number>>(uid: string, info: {
609
+ incrementAttributes<FK extends FilterAttributes<T, number>>(uid: string, info: {
598
610
  property: FK;
599
611
  value: number;
600
- }[]): Promise<any[]>;
612
+ }[]): Promise<Date>;
601
613
  /**
602
614
  * Helper function that call incrementAttributes
603
615
  * @param uid
@@ -605,7 +617,7 @@ declare abstract class Store<T extends CoreModel = CoreModel, K extends StorePar
605
617
  * @param value
606
618
  * @returns
607
619
  */
608
- incrementAttribute<FK extends FilterKeys<T, number>>(uid: string, prop: FK, value: number): Promise<any[]>;
620
+ incrementAttribute<FK extends FilterAttributes<T, number>>(uid: string, prop: FK, value: number): Promise<Date>;
609
621
  /**
610
622
  * Add or update an item to an array in the model
611
623
  *
@@ -616,7 +628,7 @@ declare abstract class Store<T extends CoreModel = CoreModel, K extends StorePar
616
628
  * @param itemWriteCondition value of the condition to test (in case of update)
617
629
  * @param itemWriteConditionField field to read the condition from (in case of update)
618
630
  */
619
- upsertItemToCollection<FK extends FilterKeys<T, Array<any>>>(uid: string, prop: FK, item: any, index?: number, itemWriteCondition?: any, itemWriteConditionField?: string): Promise<void>;
631
+ upsertItemToCollection<FK extends FilterAttributes<T, Array<any>>>(uid: string, prop: FK, item: any, index?: number, itemWriteCondition?: any, itemWriteConditionField?: string): Promise<Date>;
620
632
  /**
621
633
  * Remove an item from an array in the model
622
634
  *
@@ -626,15 +638,25 @@ declare abstract class Store<T extends CoreModel = CoreModel, K extends StorePar
626
638
  * @param itemWriteCondition value of the condition
627
639
  * @param itemWriteConditionField field to read the condition from
628
640
  */
629
- deleteItemFromCollection<FK extends FilterKeys<T, Array<any>>>(uid: string, prop: FK, index: number, itemWriteCondition: any, itemWriteConditionField?: string): Promise<void>;
641
+ deleteItemFromCollection<FK extends FilterAttributes<T, Array<any>>>(uid: string, prop: FK, index: number, itemWriteCondition: any, itemWriteConditionField?: string): Promise<Date>;
630
642
  /**
631
- * Get all results without pagination
643
+ * Iterate through the results
632
644
  *
633
645
  * This can be resource consuming
634
646
  *
635
647
  * @param query
636
648
  * @param context
637
649
  */
650
+ iterate(query?: string, context?: OperationContext): AsyncGenerator<T>;
651
+ /**
652
+ * Query all the results
653
+ *
654
+ *
655
+ * @param query
656
+ * @param context
657
+ * @returns
658
+ * @deprecated use iterate instead
659
+ */
638
660
  queryAll(query: string, context?: OperationContext): Promise<T[]>;
639
661
  /**
640
662
  * Check that __type Comparison is only used with = and CONTAINS
@@ -695,7 +717,7 @@ declare abstract class Store<T extends CoreModel = CoreModel, K extends StorePar
695
717
  * @param condition
696
718
  * @param uid
697
719
  */
698
- checkCollectionUpdateCondition<FK extends FilterKeys<T, Array<any>>, CK extends keyof T>(model: T, collection: FK, conditionField?: CK, condition?: any, index?: number): void;
720
+ checkCollectionUpdateCondition<FK extends FilterAttributes<T, Array<any>>, CK extends keyof T>(model: T, collection: FK, conditionField?: CK, condition?: any, index?: number): void;
699
721
  /**
700
722
  * Update conditionally
701
723
  * @param uuid
@@ -714,7 +736,7 @@ declare abstract class Store<T extends CoreModel = CoreModel, K extends StorePar
714
736
  * @param itemWriteConditionField
715
737
  * @param updateDate
716
738
  */
717
- simulateUpsertItemToCollection<FK extends FilterKeys<T, Array<any>>>(model: T, prop: FK, item: any, updateDate: Date, index?: number, itemWriteCondition?: any, itemWriteConditionField?: string): Promise<void>;
739
+ simulateUpsertItemToCollection<FK extends FilterAttributes<T, Array<any>>>(model: T, prop: FK, item: any, updateDate: Date, index?: number, itemWriteCondition?: any, itemWriteConditionField?: string): Promise<void>;
718
740
  /**
719
741
  * Update an object
720
742
  *