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

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 +286 -0
  12. package/lib/model.model.d.ts.map +1 -0
  13. package/lib/model.model.js +336 -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 +138 -0
  20. package/lib/repositories/abstract.d.ts.map +1 -0
  21. package/lib/repositories/abstract.js +280 -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 +101 -0
  28. package/lib/repositories/event.d.ts.map +1 -0
  29. package/lib/repositories/event.js +228 -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 +262 -0
  36. package/lib/repositories/memory.d.ts.map +1 -0
  37. package/lib/repositories/memory.js +574 -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 +210 -0
  44. package/lib/storable.d.ts.map +1 -0
  45. package/lib/storable.js +76 -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,138 @@
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
+ /**
49
+ * Parse a serialized primary key
50
+ *
51
+ * A composite key that does not split into the primary key fields is offered to the model's optional
52
+ * `static parseLegacyUID(uid)` hook (see `WEBDA_LEGACY_UID`): the returned key keeps the raw uid as its
53
+ * string form so it addresses the legacy storage entry. Without a hook, or when the hook declines, the
54
+ * uid is rejected.
55
+ * @override
56
+ */
57
+ parseUID(uid: string, forceObject?: boolean): PrimaryKeyType<InstanceType<T>> | PrimaryKey<InstanceType<T>>;
58
+ /**
59
+ * Parse a uid through the model's `parseLegacyUID` hook
60
+ * @param uid - the raw storage key
61
+ * @returns a key whose string form is the raw uid, or undefined when the model does not recognise it
62
+ */
63
+ protected parseLegacyUID(uid: string): PrimaryKey<InstanceType<T>> | undefined;
64
+ /** @override */
65
+ excludePrimaryKey(object: any): any;
66
+ /** Get the primary key value for an object as a scalar or string. */
67
+ getPrimaryKey(object: any, forceObject?: false): PrimaryKeyType<InstanceType<T>>;
68
+ /** Get the primary key value for an object as a structured key object. */
69
+ getPrimaryKey(object: any, forceObject: true): PrimaryKey<InstanceType<T>>;
70
+ /** @override */
71
+ getUID(object: any): string;
72
+ /** @override */
73
+ upsert(data: Helpers<InstanceType<T>>): Promise<InstanceType<T>>;
74
+ /** @override */
75
+ 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>;
76
+ /** @override */
77
+ ref(key: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>): ModelRefWithCreate<InstanceType<T>>;
78
+ /** @override */
79
+ incrementAttribute<K extends PropertyPaths<InstanceType<T>>, L extends NumericPropertyPaths<InstanceType<T>>>(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>, info: L | {
80
+ property: L;
81
+ value?: number;
82
+ }, _conditionField?: K | null, _condition?: any): Promise<void>;
83
+ 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 | {
84
+ property: L;
85
+ value?: number;
86
+ })[] | Record<L, number>, _conditionField?: K | null, _condition?: any): Promise<void | Record<string, number>>;
87
+ abstract query(query: string, params?: QueryParameters): Promise<{
88
+ results: InstanceType<T>[];
89
+ continuationToken?: string;
90
+ }>;
91
+ abstract iterate(query: string, params?: QueryParameters): AsyncGenerator<InstanceType<T>, any, any>;
92
+ 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>;
93
+ 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>;
94
+ 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>;
95
+ abstract get(primaryKey: PrimaryKeyType<InstanceType<T>>): Promise<Helpers<InstanceType<T>>>;
96
+ abstract create(data: Helpers<InstanceType<T>>, save?: boolean): Promise<InstanceType<T>>;
97
+ 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>;
98
+ abstract update<K extends PropertyPaths<InstanceType<T>>>(data: Helpers<InstanceType<T>>, conditionField?: K | null, condition?: PropertyPathType<InstanceType<T>, K>): Promise<void>;
99
+ 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>;
100
+ abstract exists(uuid: PrimaryKeyType<InstanceType<T>>): Promise<boolean>;
101
+ /** @override */
102
+ on<K extends keyof InstanceType<T>[typeof WEBDA_EVENTS]>(event: K, listener: (data: InstanceType<T>[typeof WEBDA_EVENTS][K]) => void): void;
103
+ /** @override */
104
+ once<K extends keyof InstanceType<T>[typeof WEBDA_EVENTS]>(event: K, listener: (data: InstanceType<T>[typeof WEBDA_EVENTS][K]) => void): void;
105
+ /** @override */
106
+ off<K extends keyof InstanceType<T>[typeof WEBDA_EVENTS]>(event: K, listener: (data: InstanceType<T>[typeof WEBDA_EVENTS][K]) => void): void;
107
+ /**
108
+ * Max-listeners hint kept for Node `EventEmitter` API compatibility. Not
109
+ * enforced — repositories use an unbounded `Set` per event.
110
+ */
111
+ protected maxListeners: number;
112
+ /**
113
+ * EventEmitter-compatibility alias for {@link off}. Consumers that treat a
114
+ * repository as a Node `EventEmitter` (e.g. `@webda/runtime` `EventIterator`)
115
+ * call `removeListener`.
116
+ * @param event - the event name
117
+ * @param listener - the listener to remove
118
+ */
119
+ removeListener<K extends keyof InstanceType<T>[typeof WEBDA_EVENTS]>(event: K, listener: (data: InstanceType<T>[typeof WEBDA_EVENTS][K]) => void): void;
120
+ /**
121
+ * EventEmitter-compatibility shim. Returns the max-listeners hint.
122
+ * @returns the current max-listeners hint
123
+ */
124
+ getMaxListeners(): number;
125
+ /**
126
+ * EventEmitter-compatibility shim. Records the max-listeners hint (no enforcement).
127
+ * @param n - the new hint value
128
+ * @returns this for chaining
129
+ */
130
+ setMaxListeners(n: number): this;
131
+ /**
132
+ * Emit an event to all registered listeners and await their completion.
133
+ * @param event - The event name to emit
134
+ * @param data - The event payload
135
+ */
136
+ emit<K extends keyof InstanceType<T>[typeof WEBDA_EVENTS]>(event: K, data: InstanceType<T>[typeof WEBDA_EVENTS][K]): Promise<void>;
137
+ }
138
+ //# 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,280 @@
1
+ import { WEBDA_PRIMARY_KEY, WEBDA_LEGACY_UID } 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
+ /**
77
+ * Parse a serialized primary key
78
+ *
79
+ * A composite key that does not split into the primary key fields is offered to the model's optional
80
+ * `static parseLegacyUID(uid)` hook (see `WEBDA_LEGACY_UID`): the returned key keeps the raw uid as its
81
+ * string form so it addresses the legacy storage entry. Without a hook, or when the hook declines, the
82
+ * uid is rejected.
83
+ * @override
84
+ */
85
+ parseUID(uid, forceObject) {
86
+ if (this.pks.length === 1) {
87
+ return forceObject
88
+ ? { [this.pks[0]]: uid }
89
+ : uid;
90
+ }
91
+ const parts = uid.split(this.separator);
92
+ if (parts.length !== this.pks.length) {
93
+ const legacy = this.parseLegacyUID(uid);
94
+ if (legacy) {
95
+ return legacy;
96
+ }
97
+ throw new Error(`Invalid UID: ${uid}`);
98
+ }
99
+ const result = {};
100
+ for (let i = 0; i < this.pks.length; i++) {
101
+ result[this.pks[i]] = parts[i];
102
+ }
103
+ return result;
104
+ }
105
+ /**
106
+ * Parse a uid through the model's `parseLegacyUID` hook
107
+ * @param uid - the raw storage key
108
+ * @returns a key whose string form is the raw uid, or undefined when the model does not recognise it
109
+ */
110
+ parseLegacyUID(uid) {
111
+ const parsed = this.model?.parseLegacyUID?.(uid);
112
+ if (!parsed || typeof parsed !== "object") {
113
+ return undefined;
114
+ }
115
+ const key = { ...parsed };
116
+ Object.defineProperty(key, WEBDA_LEGACY_UID, { value: uid, enumerable: false });
117
+ Object.defineProperty(key, "toString", { value: () => uid, enumerable: false });
118
+ return key;
119
+ }
120
+ /** @override */
121
+ excludePrimaryKey(object) {
122
+ const pkFields = (object.PrimaryKey || this.pks || []);
123
+ const result = { ...object };
124
+ for (const field of pkFields) {
125
+ delete result[field];
126
+ }
127
+ return result;
128
+ }
129
+ /** @override */
130
+ getPrimaryKey(object, forceObject) {
131
+ if (object === undefined || object === null) {
132
+ throw new Error("Cannot get primary key of undefined/null");
133
+ }
134
+ const pkFields = (object[WEBDA_PRIMARY_KEY] || this.pks || []);
135
+ if (pkFields.length === 0) {
136
+ throw new Error("No primary key defined on model " + this.model?.name);
137
+ }
138
+ // Scalar value (string or number) — treat as the PK value directly
139
+ if (typeof object === "string" || typeof object === "number") {
140
+ if (pkFields.length === 1) {
141
+ if (forceObject) {
142
+ return { [pkFields[0]]: object, toString: () => object.toString() };
143
+ }
144
+ return object;
145
+ }
146
+ // Composite key passed as string — parse it
147
+ object = this.parseUID(object);
148
+ }
149
+ // A key parsed from a legacy uid already addresses its raw storage entry
150
+ if (object[WEBDA_LEGACY_UID] !== undefined) {
151
+ return object;
152
+ }
153
+ // Single PK field
154
+ if (pkFields.length === 1) {
155
+ const field = pkFields[0];
156
+ const value = object[field];
157
+ if (value !== undefined) {
158
+ if (forceObject) {
159
+ return { [field]: value, toString: () => value.toString() };
160
+ }
161
+ return value;
162
+ }
163
+ // Value not found — try constructing the model to extract it
164
+ if (this.model) {
165
+ const instance = new this.model(object);
166
+ instance.load?.(object);
167
+ const extracted = instance[field];
168
+ if (extracted !== undefined) {
169
+ if (forceObject) {
170
+ return { [field]: extracted, toString: () => extracted.toString() };
171
+ }
172
+ return extracted;
173
+ }
174
+ }
175
+ throw new Error(`Missing primary key field '${String(field)}' on object`);
176
+ }
177
+ // Composite key — extract each field
178
+ if (pkFields.some(f => object[f] === undefined) && this.model) {
179
+ const instance = new this.model(object);
180
+ instance.load?.(object);
181
+ object = instance;
182
+ }
183
+ if (pkFields.some(f => object[f] === undefined)) {
184
+ throw new Error(`Missing primary key fields: ${pkFields.filter(f => object[f] === undefined).join(", ")}`);
185
+ }
186
+ // Build composite key object
187
+ const key = pkFields.reduce((acc, field) => {
188
+ acc[field] = object[field];
189
+ return acc;
190
+ }, {});
191
+ key.toString = () => {
192
+ return Object.values(key)
193
+ .filter(v => typeof v !== "function")
194
+ .join(this.separator);
195
+ };
196
+ return key;
197
+ }
198
+ /** @override */
199
+ getUID(object) {
200
+ return this.getPrimaryKey(object).toString();
201
+ }
202
+ /** @override */
203
+ async upsert(data) {
204
+ const key = this.getPrimaryKey(data);
205
+ if (await this.exists(key)) {
206
+ await this.patch(key, data);
207
+ return this.get(key);
208
+ }
209
+ return this.create(data);
210
+ }
211
+ /** @override */
212
+ async setAttribute(primaryKey, attribute, value, conditionField, condition) {
213
+ return this.patch(this.getPrimaryKey(primaryKey), { [attribute]: value }, conditionField, condition);
214
+ }
215
+ /** @override */
216
+ ref(key) {
217
+ return new ModelRefWithCreate(key, this);
218
+ }
219
+ /** @override */
220
+ async incrementAttribute(primaryKey, info, _conditionField, _condition) {
221
+ await this.incrementAttributes(primaryKey, [info]);
222
+ }
223
+ /** @override */
224
+ on(event, listener) {
225
+ if (!this.events.has(event)) {
226
+ this.events.set(event, new Set());
227
+ }
228
+ this.events.get(event).add(listener);
229
+ }
230
+ /** @override */
231
+ once(event, listener) {
232
+ const wrapper = (d) => {
233
+ listener(d);
234
+ this.off(event, wrapper);
235
+ };
236
+ this.on(event, wrapper);
237
+ }
238
+ /** @override */
239
+ off(event, listener) {
240
+ this.events.get(event)?.delete(listener);
241
+ }
242
+ /**
243
+ * EventEmitter-compatibility alias for {@link off}. Consumers that treat a
244
+ * repository as a Node `EventEmitter` (e.g. `@webda/runtime` `EventIterator`)
245
+ * call `removeListener`.
246
+ * @param event - the event name
247
+ * @param listener - the listener to remove
248
+ */
249
+ removeListener(event, listener) {
250
+ this.off(event, listener);
251
+ }
252
+ /**
253
+ * EventEmitter-compatibility shim. Returns the max-listeners hint.
254
+ * @returns the current max-listeners hint
255
+ */
256
+ getMaxListeners() {
257
+ return this.maxListeners;
258
+ }
259
+ /**
260
+ * EventEmitter-compatibility shim. Records the max-listeners hint (no enforcement).
261
+ * @param n - the new hint value
262
+ * @returns this for chaining
263
+ */
264
+ setMaxListeners(n) {
265
+ this.maxListeners = n;
266
+ return this;
267
+ }
268
+ /**
269
+ * Emit an event to all registered listeners and await their completion.
270
+ * @param event - The event name to emit
271
+ * @param data - The event payload
272
+ */
273
+ async emit(event, data) {
274
+ if (!this.events.has(event)) {
275
+ return;
276
+ }
277
+ await Promise.all([...this.events.get(event)].map(fn => fn(data)));
278
+ }
279
+ }
280
+ //# 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,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACnF,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;QAyUxG;;;WAGG;QACO,iBAAY,GAAG,GAAG,CAAC;IAlU1B,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;;;;;;;;OAQG;IACH,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,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,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;;;;OAIG;IACO,cAAc,CAAC,GAAW;QAClC,MAAM,MAAM,GAAI,IAAI,CAAC,KAAa,EAAE,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC;QAC1D,IAAI,CAAC,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;YAC1C,OAAO,SAAS,CAAC;QACnB,CAAC;QACD,MAAM,GAAG,GAAQ,EAAE,GAAG,MAAM,EAAE,CAAC;QAC/B,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,gBAAgB,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC;QAChF,OAAO,GAAG,CAAC;IACb,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,yEAAyE;QACzE,IAAI,MAAM,CAAC,gBAAgB,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3C,OAAO,MAAM,CAAC;QAChB,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"}