@webda/models 0.0.0-stage → 4.0.0-beta.3

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 (51) hide show
  1. package/LICENSE +166 -0
  2. package/README.md +146 -2
  3. package/lib/index.d.ts +11 -0
  4. package/lib/index.d.ts.map +1 -0
  5. package/lib/index.js +11 -0
  6. package/lib/index.js.map +1 -0
  7. package/lib/mock.d.ts +72 -0
  8. package/lib/mock.d.ts.map +1 -0
  9. package/lib/mock.js +83 -0
  10. package/lib/mock.js.map +1 -0
  11. package/lib/model.model.d.ts +247 -0
  12. package/lib/model.model.d.ts.map +1 -0
  13. package/lib/model.model.js +277 -0
  14. package/lib/model.model.js.map +1 -0
  15. package/lib/relations.d.ts +705 -0
  16. package/lib/relations.d.ts.map +1 -0
  17. package/lib/relations.js +938 -0
  18. package/lib/relations.js.map +1 -0
  19. package/lib/repositories/abstract.d.ts +124 -0
  20. package/lib/repositories/abstract.d.ts.map +1 -0
  21. package/lib/repositories/abstract.js +249 -0
  22. package/lib/repositories/abstract.js.map +1 -0
  23. package/lib/repositories/conformance.d.ts +40 -0
  24. package/lib/repositories/conformance.d.ts.map +1 -0
  25. package/lib/repositories/conformance.js +38 -0
  26. package/lib/repositories/conformance.js.map +1 -0
  27. package/lib/repositories/event.d.ts +100 -0
  28. package/lib/repositories/event.d.ts.map +1 -0
  29. package/lib/repositories/event.js +226 -0
  30. package/lib/repositories/event.js.map +1 -0
  31. package/lib/repositories/hooks.d.ts +88 -0
  32. package/lib/repositories/hooks.d.ts.map +1 -0
  33. package/lib/repositories/hooks.js +105 -0
  34. package/lib/repositories/hooks.js.map +1 -0
  35. package/lib/repositories/memory.d.ts +208 -0
  36. package/lib/repositories/memory.d.ts.map +1 -0
  37. package/lib/repositories/memory.js +446 -0
  38. package/lib/repositories/memory.js.map +1 -0
  39. package/lib/repositories/repository.d.ts +238 -0
  40. package/lib/repositories/repository.d.ts.map +1 -0
  41. package/lib/repositories/repository.js +19 -0
  42. package/lib/repositories/repository.js.map +1 -0
  43. package/lib/storable.d.ts +200 -0
  44. package/lib/storable.d.ts.map +1 -0
  45. package/lib/storable.js +66 -0
  46. package/lib/storable.js.map +1 -0
  47. package/lib/types.d.ts +230 -0
  48. package/lib/types.d.ts.map +1 -0
  49. package/lib/types.js +12 -0
  50. package/lib/types.js.map +1 -0
  51. package/package.json +60 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relations.js","sourceRoot":"","sources":["../src/relations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,124 @@
1
+ import type { PK, PrimaryKey, PrimaryKeyType, ModelClass } from "../storable.js";
2
+ import type { Helpers, JSONed, NumericPropertyPaths, PropertyPaths, PropertyPathType } from "../types.js";
3
+ import { WEBDA_PRIMARY_KEY, WEBDA_EVENTS } from "../storable.js";
4
+ import { ModelRefWithCreate } from "../relations.js";
5
+ import { Repository } from "./repository.js";
6
+ import type { ArrayElement } from "@webda/tsc-esm";
7
+ import type { QueryParameters } from "@webda/ql";
8
+ /**
9
+ * Base repository implementation providing shared logic for key management,
10
+ * event handling, and default method implementations.
11
+ *
12
+ * Concrete repositories (MemoryRepository, etc.) extend this class and
13
+ * implement the abstract storage methods.
14
+ *
15
+ * @typeParam T - The ModelClass this repository manages
16
+ */
17
+ export declare abstract class AbstractRepository<T extends ModelClass> implements Repository<T> {
18
+ protected model: T;
19
+ protected pks: string[];
20
+ protected separator: string;
21
+ /** Registered event listeners keyed by event name */
22
+ protected events: Map<keyof InstanceType<T>[typeof WEBDA_EVENTS], Set<(data: any) => void>>;
23
+ /**
24
+ * @param model - The model class constructor
25
+ * @param pks - Array of primary key field names
26
+ * @param separator - Separator used when joining composite key fields into a string (default: "_")
27
+ */
28
+ constructor(model: T, pks: string[], separator?: string);
29
+ /** @override */
30
+ getRootModel(): T;
31
+ /**
32
+ * Build the model instance to create from the incoming data
33
+ *
34
+ * Primary key fields that are undefined or null are dropped from the data so a
35
+ * key generated by the model constructor (e.g. UuidModel) is not overwritten.
36
+ * Repositories must read the storage key from the returned instance.
37
+ *
38
+ * @param data - the incoming data
39
+ * @returns the model instance
40
+ */
41
+ protected buildItem(data: Helpers<InstanceType<T>>): InstanceType<T>;
42
+ /**
43
+ * Return a ref from the uuid
44
+ * @param uid - the serialized primary key
45
+ * @returns a model reference with create capability
46
+ */
47
+ fromUID(uid: string): ModelRefWithCreate<InstanceType<T>>;
48
+ /** @override */
49
+ parseUID(uid: string, forceObject?: boolean): PrimaryKeyType<InstanceType<T>> | PrimaryKey<InstanceType<T>>;
50
+ /** @override */
51
+ excludePrimaryKey(object: any): any;
52
+ /** Get the primary key value for an object as a scalar or string. */
53
+ getPrimaryKey(object: any, forceObject?: false): PrimaryKeyType<InstanceType<T>>;
54
+ /** Get the primary key value for an object as a structured key object. */
55
+ getPrimaryKey(object: any, forceObject: true): PrimaryKey<InstanceType<T>>;
56
+ /** @override */
57
+ getUID(object: any): string;
58
+ /** @override */
59
+ upsert(data: Helpers<InstanceType<T>>): Promise<InstanceType<T>>;
60
+ /** @override */
61
+ setAttribute<K extends PropertyPaths<InstanceType<T>>, L extends PropertyPaths<InstanceType<T>>>(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]> | string, attribute: K, value: PropertyPathType<InstanceType<T>, K>, conditionField?: L | null, condition?: PropertyPathType<InstanceType<T>, L> | JSONed<PropertyPathType<InstanceType<T>, L>>): Promise<void>;
62
+ /** @override */
63
+ ref(key: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>): ModelRefWithCreate<InstanceType<T>>;
64
+ /** @override */
65
+ incrementAttribute<K extends PropertyPaths<InstanceType<T>>, L extends NumericPropertyPaths<InstanceType<T>>>(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>, info: L | {
66
+ property: L;
67
+ value?: number;
68
+ }, _conditionField?: K | null, _condition?: any): Promise<void>;
69
+ abstract incrementAttributes<K extends PropertyPaths<InstanceType<T>>, L extends NumericPropertyPaths<InstanceType<T>>>(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>, info: (L | {
70
+ property: L;
71
+ value?: number;
72
+ })[] | Record<L, number>, _conditionField?: K | null, _condition?: any): Promise<void>;
73
+ abstract query(query: string, params?: QueryParameters): Promise<{
74
+ results: InstanceType<T>[];
75
+ continuationToken?: string;
76
+ }>;
77
+ abstract iterate(query: string, params?: QueryParameters): AsyncGenerator<InstanceType<T>, any, any>;
78
+ abstract deleteItemFromCollection<K extends Extract<PropertyPaths<InstanceType<T>, any[]>, keyof InstanceType<T>>, L extends keyof ArrayElement<InstanceType<T>[K]>>(uuid: PrimaryKeyType<InstanceType<T>>, collection: K, index: number, itemWriteConditionField?: L, itemWriteCondition?: ArrayElement<InstanceType<T>[K]>[L]): Promise<void>;
79
+ abstract upsertItemToCollection<K extends Extract<PropertyPaths<InstanceType<T>, any[]>, keyof InstanceType<T>>, L extends keyof ArrayElement<InstanceType<T>[K]>>(uuid: PrimaryKeyType<InstanceType<T>>, collection: K, item: ArrayElement<InstanceType<T>[K]> | JSONed<ArrayElement<InstanceType<T>[K]>>, index?: number, itemWriteConditionField?: ArrayElement<InstanceType<T>[K]> extends object ? L : never, itemWriteCondition?: ArrayElement<InstanceType<T>[K]> extends object ? (object & ArrayElement<InstanceType<T>[K]>)[L] : ArrayElement<InstanceType<T>[K]>): Promise<void>;
80
+ abstract removeAttribute<L extends PropertyPaths<InstanceType<T>>, K extends PropertyPaths<InstanceType<T>>>(uuid: PrimaryKeyType<InstanceType<T>>, attribute: K, conditionField?: L | null, condition?: PropertyPathType<InstanceType<T>, L> | JSONed<PropertyPathType<InstanceType<T>, L>>): Promise<void>;
81
+ abstract get(primaryKey: PrimaryKeyType<InstanceType<T>>): Promise<Helpers<InstanceType<T>>>;
82
+ abstract create(data: Helpers<InstanceType<T>>, save?: boolean): Promise<InstanceType<T>>;
83
+ abstract patch<K extends PropertyPaths<InstanceType<T>>>(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>, data: Partial<InstanceType<T>>, _conditionField?: K | null, _condition?: any): Promise<void>;
84
+ abstract update<K extends PropertyPaths<InstanceType<T>>>(data: Helpers<InstanceType<T>>, conditionField?: K | null, condition?: PropertyPathType<InstanceType<T>, K>): Promise<void>;
85
+ abstract delete<K extends PropertyPaths<InstanceType<T>>>(uuid: PrimaryKeyType<InstanceType<T>>, conditionField?: K | null, condition?: PropertyPathType<InstanceType<T>, K> | JSONed<PropertyPathType<InstanceType<T>, K>>): Promise<void>;
86
+ abstract exists(uuid: PrimaryKeyType<InstanceType<T>>): Promise<boolean>;
87
+ /** @override */
88
+ on<K extends keyof InstanceType<T>[typeof WEBDA_EVENTS]>(event: K, listener: (data: InstanceType<T>[typeof WEBDA_EVENTS][K]) => void): void;
89
+ /** @override */
90
+ once<K extends keyof InstanceType<T>[typeof WEBDA_EVENTS]>(event: K, listener: (data: InstanceType<T>[typeof WEBDA_EVENTS][K]) => void): void;
91
+ /** @override */
92
+ off<K extends keyof InstanceType<T>[typeof WEBDA_EVENTS]>(event: K, listener: (data: InstanceType<T>[typeof WEBDA_EVENTS][K]) => void): void;
93
+ /**
94
+ * Max-listeners hint kept for Node `EventEmitter` API compatibility. Not
95
+ * enforced — repositories use an unbounded `Set` per event.
96
+ */
97
+ protected maxListeners: number;
98
+ /**
99
+ * EventEmitter-compatibility alias for {@link off}. Consumers that treat a
100
+ * repository as a Node `EventEmitter` (e.g. `@webda/runtime` `EventIterator`)
101
+ * call `removeListener`.
102
+ * @param event - the event name
103
+ * @param listener - the listener to remove
104
+ */
105
+ removeListener<K extends keyof InstanceType<T>[typeof WEBDA_EVENTS]>(event: K, listener: (data: InstanceType<T>[typeof WEBDA_EVENTS][K]) => void): void;
106
+ /**
107
+ * EventEmitter-compatibility shim. Returns the max-listeners hint.
108
+ * @returns the current max-listeners hint
109
+ */
110
+ getMaxListeners(): number;
111
+ /**
112
+ * EventEmitter-compatibility shim. Records the max-listeners hint (no enforcement).
113
+ * @param n - the new hint value
114
+ * @returns this for chaining
115
+ */
116
+ setMaxListeners(n: number): this;
117
+ /**
118
+ * Emit an event to all registered listeners and await their completion.
119
+ * @param event - The event name to emit
120
+ * @param data - The event payload
121
+ */
122
+ emit<K extends keyof InstanceType<T>[typeof WEBDA_EVENTS]>(event: K, data: InstanceType<T>[typeof WEBDA_EVENTS][K]): Promise<void>;
123
+ }
124
+ //# sourceMappingURL=abstract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract.d.ts","sourceRoot":"","sources":["../../src/repositories/abstract.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,249 @@
1
+ import { WEBDA_PRIMARY_KEY } from "../storable.js";
2
+ import { ModelRefWithCreate } from "../relations.js";
3
+ /**
4
+ * Base repository implementation providing shared logic for key management,
5
+ * event handling, and default method implementations.
6
+ *
7
+ * Concrete repositories (MemoryRepository, etc.) extend this class and
8
+ * implement the abstract storage methods.
9
+ *
10
+ * @typeParam T - The ModelClass this repository manages
11
+ */
12
+ export class AbstractRepository {
13
+ /**
14
+ * @param model - The model class constructor
15
+ * @param pks - Array of primary key field names
16
+ * @param separator - Separator used when joining composite key fields into a string (default: "_")
17
+ */
18
+ constructor(model, pks, separator = "_") {
19
+ this.model = model;
20
+ this.pks = pks;
21
+ this.separator = separator;
22
+ /** Registered event listeners keyed by event name */
23
+ this.events = new Map();
24
+ /**
25
+ * Max-listeners hint kept for Node `EventEmitter` API compatibility. Not
26
+ * enforced — repositories use an unbounded `Set` per event.
27
+ */
28
+ this.maxListeners = 100;
29
+ }
30
+ /** @override */
31
+ getRootModel() {
32
+ return this.model;
33
+ }
34
+ /**
35
+ * Build the model instance to create from the incoming data
36
+ *
37
+ * Primary key fields that are undefined or null are dropped from the data so a
38
+ * key generated by the model constructor (e.g. UuidModel) is not overwritten.
39
+ * Repositories must read the storage key from the returned instance.
40
+ *
41
+ * @param data - the incoming data
42
+ * @returns the model instance
43
+ */
44
+ buildItem(data) {
45
+ let input = data;
46
+ if (input && this.pks.some(k => k in input && (input[k] === undefined || input[k] === null))) {
47
+ input = { ...input };
48
+ for (const k of this.pks) {
49
+ if (input[k] === undefined || input[k] === null) {
50
+ delete input[k];
51
+ }
52
+ }
53
+ }
54
+ // Build a fresh instance and copy the incoming fields onto it. Most model
55
+ // constructors ignore their arguments (only RegistryEntry and a few others
56
+ // assign them), so `new this.model(data)` alone would drop the fields.
57
+ const item = new this.model(input);
58
+ if (input && input !== item) {
59
+ if (typeof item.load === "function") {
60
+ item.load(input);
61
+ }
62
+ else {
63
+ Object.assign(item, input);
64
+ }
65
+ }
66
+ return item;
67
+ }
68
+ /**
69
+ * Return a ref from the uuid
70
+ * @param uid - the serialized primary key
71
+ * @returns a model reference with create capability
72
+ */
73
+ fromUID(uid) {
74
+ return this.ref(this.parseUID(uid));
75
+ }
76
+ /** @override */
77
+ parseUID(uid, forceObject) {
78
+ if (this.pks.length === 1) {
79
+ return forceObject
80
+ ? { [this.pks[0]]: uid }
81
+ : uid;
82
+ }
83
+ const parts = uid.split(this.separator);
84
+ if (parts.length !== this.pks.length) {
85
+ throw new Error(`Invalid UID: ${uid}`);
86
+ }
87
+ const result = {};
88
+ for (let i = 0; i < this.pks.length; i++) {
89
+ result[this.pks[i]] = parts[i];
90
+ }
91
+ return result;
92
+ }
93
+ /** @override */
94
+ excludePrimaryKey(object) {
95
+ const pkFields = (object.PrimaryKey || this.pks || []);
96
+ const result = { ...object };
97
+ for (const field of pkFields) {
98
+ delete result[field];
99
+ }
100
+ return result;
101
+ }
102
+ /** @override */
103
+ getPrimaryKey(object, forceObject) {
104
+ if (object === undefined || object === null) {
105
+ throw new Error("Cannot get primary key of undefined/null");
106
+ }
107
+ const pkFields = (object[WEBDA_PRIMARY_KEY] || this.pks || []);
108
+ if (pkFields.length === 0) {
109
+ throw new Error("No primary key defined on model " + this.model?.name);
110
+ }
111
+ // Scalar value (string or number) — treat as the PK value directly
112
+ if (typeof object === "string" || typeof object === "number") {
113
+ if (pkFields.length === 1) {
114
+ if (forceObject) {
115
+ return { [pkFields[0]]: object, toString: () => object.toString() };
116
+ }
117
+ return object;
118
+ }
119
+ // Composite key passed as string — parse it
120
+ object = this.parseUID(object);
121
+ }
122
+ // Single PK field
123
+ if (pkFields.length === 1) {
124
+ const field = pkFields[0];
125
+ const value = object[field];
126
+ if (value !== undefined) {
127
+ if (forceObject) {
128
+ return { [field]: value, toString: () => value.toString() };
129
+ }
130
+ return value;
131
+ }
132
+ // Value not found — try constructing the model to extract it
133
+ if (this.model) {
134
+ const instance = new this.model(object);
135
+ instance.load?.(object);
136
+ const extracted = instance[field];
137
+ if (extracted !== undefined) {
138
+ if (forceObject) {
139
+ return { [field]: extracted, toString: () => extracted.toString() };
140
+ }
141
+ return extracted;
142
+ }
143
+ }
144
+ throw new Error(`Missing primary key field '${String(field)}' on object`);
145
+ }
146
+ // Composite key — extract each field
147
+ if (pkFields.some(f => object[f] === undefined) && this.model) {
148
+ const instance = new this.model(object);
149
+ instance.load?.(object);
150
+ object = instance;
151
+ }
152
+ if (pkFields.some(f => object[f] === undefined)) {
153
+ throw new Error(`Missing primary key fields: ${pkFields.filter(f => object[f] === undefined).join(", ")}`);
154
+ }
155
+ // Build composite key object
156
+ const key = pkFields.reduce((acc, field) => {
157
+ acc[field] = object[field];
158
+ return acc;
159
+ }, {});
160
+ key.toString = () => {
161
+ return Object.values(key)
162
+ .filter(v => typeof v !== "function")
163
+ .join(this.separator);
164
+ };
165
+ return key;
166
+ }
167
+ /** @override */
168
+ getUID(object) {
169
+ return this.getPrimaryKey(object).toString();
170
+ }
171
+ /** @override */
172
+ async upsert(data) {
173
+ const key = this.getPrimaryKey(data);
174
+ if (await this.exists(key)) {
175
+ await this.patch(key, data);
176
+ return this.get(key);
177
+ }
178
+ return this.create(data);
179
+ }
180
+ /** @override */
181
+ async setAttribute(primaryKey, attribute, value, conditionField, condition) {
182
+ return this.patch(this.getPrimaryKey(primaryKey), { [attribute]: value }, conditionField, condition);
183
+ }
184
+ /** @override */
185
+ ref(key) {
186
+ return new ModelRefWithCreate(key, this);
187
+ }
188
+ /** @override */
189
+ async incrementAttribute(primaryKey, info, _conditionField, _condition) {
190
+ await this.incrementAttributes(primaryKey, [info]);
191
+ }
192
+ /** @override */
193
+ on(event, listener) {
194
+ if (!this.events.has(event)) {
195
+ this.events.set(event, new Set());
196
+ }
197
+ this.events.get(event).add(listener);
198
+ }
199
+ /** @override */
200
+ once(event, listener) {
201
+ const wrapper = (d) => {
202
+ listener(d);
203
+ this.off(event, wrapper);
204
+ };
205
+ this.on(event, wrapper);
206
+ }
207
+ /** @override */
208
+ off(event, listener) {
209
+ this.events.get(event)?.delete(listener);
210
+ }
211
+ /**
212
+ * EventEmitter-compatibility alias for {@link off}. Consumers that treat a
213
+ * repository as a Node `EventEmitter` (e.g. `@webda/runtime` `EventIterator`)
214
+ * call `removeListener`.
215
+ * @param event - the event name
216
+ * @param listener - the listener to remove
217
+ */
218
+ removeListener(event, listener) {
219
+ this.off(event, listener);
220
+ }
221
+ /**
222
+ * EventEmitter-compatibility shim. Returns the max-listeners hint.
223
+ * @returns the current max-listeners hint
224
+ */
225
+ getMaxListeners() {
226
+ return this.maxListeners;
227
+ }
228
+ /**
229
+ * EventEmitter-compatibility shim. Records the max-listeners hint (no enforcement).
230
+ * @param n - the new hint value
231
+ * @returns this for chaining
232
+ */
233
+ setMaxListeners(n) {
234
+ this.maxListeners = n;
235
+ return this;
236
+ }
237
+ /**
238
+ * Emit an event to all registered listeners and await their completion.
239
+ * @param event - The event name to emit
240
+ * @param data - The event payload
241
+ */
242
+ async emit(event, data) {
243
+ if (!this.events.has(event)) {
244
+ return;
245
+ }
246
+ await Promise.all([...this.events.get(event)].map(fn => fn(data)));
247
+ }
248
+ }
249
+ //# sourceMappingURL=abstract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abstract.js","sourceRoot":"","sources":["../../src/repositories/abstract.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAgB,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAKrD;;;;;;;;GAQG;AACH,MAAM,OAAgB,kBAAkB;IAItC;;;;OAIG;IACH,YACY,KAAQ,EACR,GAAa,EACb,SAAS,GAAW,GAAG;QAFvB,UAAK,GAAL,KAAK,CAAG;QACR,QAAG,GAAH,GAAG,CAAU;QACb,cAAS,GAAT,SAAS,CAAc;QAXnC,qDAAqD;QAC3C,WAAM,GAA8E,IAAI,GAAG,EAAE,CAAC;QAySxG;;;WAGG;QACO,iBAAY,GAAG,GAAG,CAAC;IAlS1B,CAAC;IACJ,gBAAgB;IAChB,YAAY;QACV,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED;;;;;;;;;OASG;IACO,SAAS,CAAC,IAA8B;QAChD,IAAI,KAAK,GAAQ,IAAI,CAAC;QACtB,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;YAC7F,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,CAAC;YACrB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;gBACzB,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;oBAChD,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;gBAClB,CAAC;YACH,CAAC;QACH,CAAC;QACD,0EAA0E;QAC1E,2EAA2E;QAC3E,uEAAuE;QACvE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAoB,CAAC;QACtD,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC5B,IAAI,OAAQ,IAAY,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAC5C,IAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,MAAM,CAAC,IAAW,EAAE,KAAK,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,OAAO,CAAC,GAAW;QACjB,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IACtC,CAAC;IAED,gBAAgB;IAChB,QAAQ,CAAC,GAAW,EAAE,WAAqB;QACzC,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,WAAW;gBAChB,CAAC,CAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAkC;gBACzD,CAAC,CAAE,GAA8E,CAAC;QACtF,CAAC;QACD,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,gBAAgB,GAAG,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,MAAM,MAAM,GAAG,EAAiC,CAAC;QACjD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAA0B,CAAC,GAAG,KAAK,CAAC,CAAC,CAAQ,CAAC;QACjE,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,gBAAgB;IAChB,iBAAiB,CAAC,MAAW;QAC3B,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,CAAmB,CAAC;QACzE,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAMD,gBAAgB;IAChB,aAAa,CAAC,MAAW,EAAE,WAAqB;QAC9C,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YAC5C,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC9D,CAAC;QACD,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,IAAI,CAAC,GAAG,IAAI,EAAE,CAAiC,CAAC;QAC/F,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzE,CAAC;QACD,mEAAmE;QACnE,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC7D,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAgB,CAAC;gBACpF,CAAC;gBACD,OAAO,MAAa,CAAC;YACvB,CAAC;YACD,4CAA4C;YAC5C,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAgB,CAAC,CAAC;QAC3C,CAAC;QACD,kBAAkB;QAClB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,IAAI,WAAW,EAAE,CAAC;oBAChB,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAgB,CAAC;gBAC5E,CAAC;gBACD,OAAO,KAAY,CAAC;YACtB,CAAC;YACD,6DAA6D;YAC7D,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAQ,CAAC;gBAC/C,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;gBACxB,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;oBAC5B,IAAI,WAAW,EAAE,CAAC;wBAChB,OAAO,EAAE,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAgB,CAAC;oBACpF,CAAC;oBACD,OAAO,SAAgB,CAAC;gBAC1B,CAAC;YACH,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,8BAA8B,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC5E,CAAC;QACD,qCAAqC;QACrC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9D,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAoB,CAAC;YAC1D,QAAgB,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,GAAG,QAAQ,CAAC;QACpB,CAAC;QACD,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,+BAA+B,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7G,CAAC;QAED,6BAA6B;QAC7B,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACxC,GAAW,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YACpC,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAS,CAAC,CAAC;QACd,GAAG,CAAC,QAAQ,GAAG,GAAG,EAAE;YAClB,OAAO,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;iBACtB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,UAAU,CAAC;iBACpC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1B,CAAC,CAAC;QACF,OAAO,GAAG,CAAC;IACb,CAAC;IAED,gBAAgB;IAChB,MAAM,CAAC,MAAW;QAChB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC;IAC/C,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,MAAM,CAAC,IAA8B;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,IAAuB,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,CAAoB,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC3B,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,YAAY,CAChB,UAA2F,EAC3F,SAAY,EACZ,KAA2C,EAC3C,cAAyB,EACzB,SAA+F;QAE/F,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,KAAK,EAAS,EAAE,cAAc,EAAE,SAAS,CAAC,CAAC;IAC9G,CAAC;IAED,gBAAgB;IACT,GAAG,CACR,GAA2E;QAE3E,OAAO,IAAI,kBAAkB,CAAkB,GAAG,EAAE,IAAW,CAAC,CAAC;IACnE,CAAC;IAED,gBAAgB;IAChB,KAAK,CAAC,kBAAkB,CACtB,UAAkF,EAClF,IAAyC,EACzC,eAA0B,EAC1B,UAAgB;QAEhB,MAAM,IAAI,CAAC,mBAAmB,CAAC,UAAU,EAAE,CAAC,IAAW,CAAC,CAAC,CAAC;IAC5D,CAAC;IAkED,gBAAgB;IAChB,EAAE,CACA,KAAQ,EACR,QAAiE;QAEjE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,GAAG,CAAC,QAAe,CAAC,CAAC;IAC/C,CAAC;IAED,gBAAgB;IAChB,IAAI,CACF,KAAQ,EACR,QAAiE;QAEjE,MAAM,OAAO,GAAG,CAAC,CAAM,EAAE,EAAE;YACzB,QAAQ,CAAC,CAAC,CAAC,CAAC;YACZ,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,OAAc,CAAC,CAAC;QAClC,CAAC,CAAC;QACF,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAc,CAAC,CAAC;IACjC,CAAC;IAED,gBAAgB;IAChB,GAAG,CACD,KAAQ,EACR,QAAiE;QAEjE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,QAAe,CAAC,CAAC;IAClD,CAAC;IAQD;;;;;;OAMG;IACH,cAAc,CACZ,KAAQ,EACR,QAAiE;QAEjE,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,CAAS;QACvB,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI,CACR,KAAQ,EACR,IAA6C;QAE7C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,OAAO;QACT,CAAC;QACD,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;CACF"}
@@ -0,0 +1,40 @@
1
+ import type { Repository } from "./repository.js";
2
+ /**
3
+ * Options of {@link checkCreateWithoutPrimaryKey}
4
+ */
5
+ export interface CreateWithoutPrimaryKeyOptions {
6
+ /**
7
+ * Data of the item to create, without its primary key
8
+ *
9
+ * @param index - unique index of the creation, to build unique values
10
+ */
11
+ data: (index: number) => any;
12
+ /**
13
+ * Read the raw record stored by the backend under a key
14
+ *
15
+ * @param key - storage key
16
+ * @returns the raw record, or undefined when nothing is stored under the key
17
+ */
18
+ readStored: (key: string) => Promise<any | undefined>;
19
+ /**
20
+ * Primary key field generated by the model
21
+ *
22
+ * @default "uuid"
23
+ */
24
+ keyField?: string;
25
+ }
26
+ /**
27
+ * Check that creating an item without its primary key persists the key generated by the model
28
+ *
29
+ * For each repository, creates an item without the key, with the key `undefined` and with the key `null`,
30
+ * then checks the key is generated, the backend stored the record under it with the key inside,
31
+ * the item can be read back with the same key and nothing was stored under "undefined" or "null".
32
+ *
33
+ * It is a plain function rather than a test suite so store packages can share it without
34
+ * duplicating test classes across module resolutions.
35
+ *
36
+ * @param repos - repositories to check, e.g. the store EventRepository and the raw backend repository
37
+ * @param options - data factory and raw backend reader
38
+ */
39
+ export declare function checkCreateWithoutPrimaryKey(repos: Repository<any>[], options: CreateWithoutPrimaryKeyOptions): Promise<void>;
40
+ //# sourceMappingURL=conformance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformance.d.ts","sourceRoot":"","sources":["../../src/repositories/conformance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C;;;;OAIG;IACH,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAAC;IAC7B;;;;;OAKG;IACH,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IACtD;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,4BAA4B,CAChD,KAAK,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE,EACxB,OAAO,EAAE,8BAA8B,GACtC,OAAO,CAAC,IAAI,CAAC,CAsBf"}
@@ -0,0 +1,38 @@
1
+ import * as assert from "node:assert";
2
+ /**
3
+ * Check that creating an item without its primary key persists the key generated by the model
4
+ *
5
+ * For each repository, creates an item without the key, with the key `undefined` and with the key `null`,
6
+ * then checks the key is generated, the backend stored the record under it with the key inside,
7
+ * the item can be read back with the same key and nothing was stored under "undefined" or "null".
8
+ *
9
+ * It is a plain function rather than a test suite so store packages can share it without
10
+ * duplicating test classes across module resolutions.
11
+ *
12
+ * @param repos - repositories to check, e.g. the store EventRepository and the raw backend repository
13
+ * @param options - data factory and raw backend reader
14
+ */
15
+ export async function checkCreateWithoutPrimaryKey(repos, options) {
16
+ const keyField = options.keyField ?? "uuid";
17
+ const keys = new Set();
18
+ let index = 0;
19
+ for (const repo of repos) {
20
+ for (const variant of [{}, { [keyField]: undefined }, { [keyField]: null }]) {
21
+ const item = await repo.create({ ...options.data(index++), ...variant });
22
+ const key = item[keyField];
23
+ assert.ok(key, `a ${keyField} should be generated`);
24
+ assert.ok(!["undefined", "null"].includes(String(key)), `the generated ${keyField} should not be '${key}'`);
25
+ assert.ok(!keys.has(key), `the generated ${keyField} should be unique`);
26
+ keys.add(key);
27
+ // The backend stored the record under the generated key, with the key inside
28
+ const stored = await options.readStored(key);
29
+ assert.ok(stored, `the record should be stored under the generated ${keyField}`);
30
+ assert.strictEqual(stored[keyField], key);
31
+ // Reading it back keeps the key
32
+ assert.strictEqual((await repo.get(key))[keyField], key);
33
+ }
34
+ }
35
+ assert.strictEqual(await options.readStored("undefined"), undefined, "nothing should be stored under 'undefined'");
36
+ assert.strictEqual(await options.readStored("null"), undefined, "nothing should be stored under 'null'");
37
+ }
38
+ //# sourceMappingURL=conformance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conformance.js","sourceRoot":"","sources":["../../src/repositories/conformance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AA4BtC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,4BAA4B,CAChD,KAAwB,EACxB,OAAuC;IAEvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,MAAM,OAAO,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;YAC5E,MAAM,IAAI,GAAQ,MAAM,IAAI,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;YAC9E,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC3B,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,QAAQ,sBAAsB,CAAC,CAAC;YACpD,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,iBAAiB,QAAQ,mBAAmB,GAAG,GAAG,CAAC,CAAC;YAC5G,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,iBAAiB,QAAQ,mBAAmB,CAAC,CAAC;YACxE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,6EAA6E;YAC7E,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC7C,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,mDAAmD,QAAQ,EAAE,CAAC,CAAC;YACjF,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;YAC1C,gCAAgC;YAChC,MAAM,CAAC,WAAW,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC;QAC3D,CAAC;IACH,CAAC;IACD,MAAM,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,4CAA4C,CAAC,CAAC;IACnH,MAAM,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,uCAAuC,CAAC,CAAC;AAC3G,CAAC"}
@@ -0,0 +1,100 @@
1
+ import { PK, PrimaryKeyType, ModelClass, WEBDA_PRIMARY_KEY } from "../storable.js";
2
+ import type { JSONed, Helpers, PropertyPaths, NumericPropertyPaths, PropertyPathType } from "../types.js";
3
+ import { AbstractRepository } from "./abstract.js";
4
+ import { ArrayElement } from "@webda/tsc-esm";
5
+ import type { QueryParameters } from "@webda/ql";
6
+ import { WEBDA_TEST } from "./repository.js";
7
+ /**
8
+ * Repository decorator that wraps another repository with event emission.
9
+ *
10
+ * Emits "before" events (Create, Update, Patch, Delete, PartialUpdate, Query)
11
+ * before delegating to the underlying repository, then emits "after" events
12
+ * (Created, Updated, Patched, Deleted, PartialUpdated, Queried) on success.
13
+ *
14
+ * @typeParam T - The ModelClass this repository manages
15
+ */
16
+ export declare class EventRepository<T extends ModelClass = any> extends AbstractRepository<T> {
17
+ protected repository: AbstractRepository<T>;
18
+ /**
19
+ * @param model - The model class constructor
20
+ * @param pks - Array of primary key field names
21
+ * @param repository - The underlying repository to delegate storage operations to
22
+ */
23
+ constructor(model: T, pks: string[], repository: AbstractRepository<T>);
24
+ /**
25
+ * Increment numeric attributes with event emission
26
+ * @override
27
+ */
28
+ incrementAttributes<K extends PropertyPaths<InstanceType<T>>, L extends NumericPropertyPaths<InstanceType<T>>>(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>, info: (L | {
29
+ property: L;
30
+ value?: number;
31
+ })[] | Record<L, number>, _conditionField?: K | null, _condition?: any): Promise<void>;
32
+ /**
33
+ * Query with event emission
34
+ *
35
+ * Parameters are bound here, so the events carry the bound query and the underlying
36
+ * repository (often a store one) only ever receives a plain query.
37
+ * @param query - the query to execute
38
+ * @param params - values for the `?` or `:name` placeholders
39
+ * @returns the query results with optional continuation token
40
+ */
41
+ query(query: string, params?: QueryParameters): Promise<{
42
+ results: InstanceType<T>[];
43
+ continuationToken?: string;
44
+ }>;
45
+ /**
46
+ * Iterate through all objects
47
+ * @param query - the query filter
48
+ * @param params - values for the `?` or `:name` placeholders, bound before reaching the underlying repository
49
+ * @returns an async generator of objects
50
+ */
51
+ iterate(query: string, params?: QueryParameters): AsyncGenerator<InstanceType<T>, any, any>;
52
+ /**
53
+ * Delete an item from a collection
54
+ * @param uuid The UUID of the item
55
+ * @param collection The collection to delete from
56
+ * @param index The index of the item to delete
57
+ * @param itemWriteConditionField The field to use for the write condition
58
+ * @param itemWriteCondition The value to use for the write condition
59
+ */
60
+ deleteItemFromCollection<K extends Extract<PropertyPaths<InstanceType<T>, any[]>, keyof InstanceType<T>>, L extends keyof ArrayElement<InstanceType<T>[K]>>(uuid: PrimaryKeyType<InstanceType<T>>, collection: K, index: number, itemWriteConditionField?: L, itemWriteCondition?: ArrayElement<InstanceType<T>[K]>[L]): Promise<void>;
61
+ /**
62
+ * Upsert item to collection with event emission
63
+ * @override
64
+ */
65
+ upsertItemToCollection<K extends Extract<PropertyPaths<InstanceType<T>, any[]>, keyof InstanceType<T>>, L extends keyof ArrayElement<InstanceType<T>[K]>>(uuid: PrimaryKeyType<InstanceType<T>>, collection: K, item: ArrayElement<InstanceType<T>[K]> | JSONed<ArrayElement<InstanceType<T>[K]>>, index?: number, itemWriteConditionField?: ArrayElement<InstanceType<T>[K]> extends object ? L : never, itemWriteCondition?: ArrayElement<InstanceType<T>[K]> extends object ? (object & ArrayElement<InstanceType<T>[K]>)[L] : ArrayElement<InstanceType<T>[K]>): Promise<void>;
66
+ /**
67
+ * Remove attribute with event emission
68
+ * @override
69
+ */
70
+ removeAttribute<L extends PropertyPaths<InstanceType<T>>, K extends PropertyPaths<InstanceType<T>>>(uuid: PrimaryKeyType<InstanceType<T>>, attribute: K, conditionField?: L | null, condition?: PropertyPathType<InstanceType<T>, L> | JSONed<PropertyPathType<InstanceType<T>, L>>): Promise<void>;
71
+ /** @override */
72
+ get(primaryKey: PrimaryKeyType<InstanceType<T>>): Promise<Helpers<InstanceType<T>>>;
73
+ /**
74
+ * Create with event emission (emits Create before and Created after)
75
+ * @override
76
+ */
77
+ create(data: Helpers<InstanceType<T>>, save?: boolean): Promise<InstanceType<T>>;
78
+ /**
79
+ * Patch with event emission (emits Patch before and Patched after)
80
+ * @override
81
+ */
82
+ patch<K extends PropertyPaths<InstanceType<T>>>(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>, data: Partial<InstanceType<T>>, _conditionField?: K | null, _condition?: any): Promise<void>;
83
+ /**
84
+ * Update with event emission (emits Update before and Updated after)
85
+ * @override
86
+ */
87
+ update<K extends PropertyPaths<InstanceType<T>>>(data: Helpers<InstanceType<T>>, conditionField?: K | null, condition?: PropertyPathType<InstanceType<T>, K>): Promise<void>;
88
+ /**
89
+ * Delete with event emission (emits Delete before and Deleted after)
90
+ * @override
91
+ */
92
+ delete<K extends PropertyPaths<InstanceType<T>>>(uuid: PrimaryKeyType<InstanceType<T>>, conditionField?: K | null, condition?: PropertyPathType<InstanceType<T>, K> | JSONed<PropertyPathType<InstanceType<T>, K>>): Promise<void>;
93
+ /** @override */
94
+ exists(uuid: PrimaryKeyType<InstanceType<T>>): Promise<boolean>;
95
+ /** Test utilities - clears events and delegates to underlying repository */
96
+ [WEBDA_TEST]: {
97
+ clear: (excludeListeners?: boolean) => Promise<void>;
98
+ };
99
+ }
100
+ //# sourceMappingURL=event.d.ts.map