@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,262 @@
1
+ import type { ArrayElement } from "@webda/tsc-esm";
2
+ import type { QueryParameters } from "@webda/ql";
3
+ import type { PK, WEBDA_PRIMARY_KEY, ModelClass } from "../storable.js";
4
+ import type { Helpers, JSONed, PropertyPaths, NumericPropertyPaths } from "../types.js";
5
+ import { AbstractRepository } from "./abstract.js";
6
+ import { Repository, WEBDA_TEST } from "./repository.js";
7
+ /**
8
+ * Parsed query structure expected from the WebdaQL parser.
9
+ *
10
+ * Includes pagination (limit, continuationToken), ordering, and a filter
11
+ * with an `eval` function for in-memory evaluation.
12
+ */
13
+ export type Query = {
14
+ limit: number;
15
+ orderBy?: {
16
+ field: string;
17
+ direction: "ASC" | "DESC";
18
+ }[];
19
+ continuationToken?: string;
20
+ filter: {
21
+ eval: (item: any) => boolean;
22
+ };
23
+ };
24
+ /** Result of a simulated find operation, including whether filtering was applied. */
25
+ export type FindResult<T> = {
26
+ results: T[];
27
+ continuationToken?: string;
28
+ filter: boolean;
29
+ };
30
+ /**
31
+ * This is a simple in-memory repository implementation
32
+ * It is used for testing purposes only
33
+ */
34
+ export declare class MemoryRepository<T extends ModelClass, K extends Map<string, string> = Map<string, string>> extends AbstractRepository<T> {
35
+ protected storage: K;
36
+ /**
37
+ * @param model - The model class constructor
38
+ * @param pks - Primary key field names
39
+ * @param separator - Composite key separator (default: "_")
40
+ * @param map - Optional pre-existing Map to use as storage backend
41
+ */
42
+ constructor(model: T, pks: string[], separator?: string, map?: K);
43
+ /** @override */
44
+ get(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]> | string): Promise<Helpers<InstanceType<T>>>;
45
+ /**
46
+ * Synchronous read used by conditional writes to keep check-and-set atomic
47
+ * @param primaryKey - key of the item
48
+ * @returns the deserialized item
49
+ */
50
+ protected getSync(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]> | string): InstanceType<T>;
51
+ /** @override */
52
+ create(data: Helpers<InstanceType<T>>, save?: boolean): Promise<InstanceType<T>>;
53
+ /** @override */
54
+ update<K extends PropertyPaths<InstanceType<T>>>(data: Helpers<InstanceType<T>>, conditionField?: K | null, condition?: any): Promise<void>;
55
+ /**
56
+ * Verify an optimistic locking condition on an item
57
+ * @param item - The item to check
58
+ * @param conditionField - Field to validate
59
+ * @param condition - Expected value
60
+ * @throws Error if the condition does not match
61
+ */
62
+ protected checkCondition<K extends PropertyPaths<InstanceType<T>>>(item: InstanceType<T>, conditionField?: K | null, condition?: any): void;
63
+ /** @override */
64
+ patch<K extends PropertyPaths<InstanceType<T>>>(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]> | string, data: Partial<InstanceType<T>>, conditionField?: K | null, condition?: any): Promise<void>;
65
+ /**
66
+ * Serialize the object to a string
67
+ *
68
+ * This method is used to allow switching between different serialization methods
69
+ *
70
+ * The serialized payload is also stamped with a top-level `__type` field
71
+ * carrying the concrete model identifier when available
72
+ * (`item.constructor.Metadata?.Identifier`). This lets `query()` and external
73
+ * storage backends filter results by class without re-instantiating every
74
+ * item — important when a single underlying storage map is shared across a
75
+ * model and its subclasses (the common case in production where each
76
+ * registered model owns its own MemoryRepository pointing at the same Map).
77
+ *
78
+ * The stamp lives on the serializer envelope (sibling of `value` /
79
+ * `$serializer`), not inside `value`. `deserialize()` re-surfaces it on the
80
+ * reconstructed instance as a non-enumerable `__type` property so WebdaQL's
81
+ * filter eval can read it without it ever leaking into `JSON.stringify` or
82
+ * `Object.keys` output — keeping API responses and re-serialize cycles
83
+ * byte-identical for the model's own fields.
84
+ *
85
+ * Models that don't carry Metadata (plain unit-test classes that don't go
86
+ * through Application.setModelMetadata) simply skip the stamp; the resulting
87
+ * payload is byte-identical to the previous implementation.
88
+ *
89
+ * @param item to serialize
90
+ * @returns serialized object
91
+ */
92
+ serialize(item: InstanceType<T>): string;
93
+ /**
94
+ * Unserialize the object from a string
95
+ *
96
+ * Beyond restoring the concrete type via `@webda/serialize`'s
97
+ * `$serializer.type` typeKey, this also surfaces the storage envelope's
98
+ * `__type` stamp on the in-memory instance as a NON-ENUMERABLE property. The
99
+ * non-enumerable bit keeps `__type` invisible to `JSON.stringify` and
100
+ * `Object.keys` (so API responses and re-serialize cycles are byte-identical
101
+ * for the model's own fields), while still being readable via direct
102
+ * property access — which is exactly how WebdaQL's filter eval reads it
103
+ * (`ComparisonExpression.getAttributeValue` walks `obj[name]`).
104
+ *
105
+ * Backward-compat: legacy rows written before the envelope-stamping was
106
+ * introduced won't carry `__type`. In that case we backfill from the
107
+ * repository's own `model.Metadata.Identifier` so they look like records of
108
+ * the parent class — which is exactly what `query()`'s prepended class
109
+ * filter expects (parent + descendants). Plain unit-test classes without
110
+ * Metadata get no stamp at all; their repos opt out of class filtering on
111
+ * the query side too (see `query`).
112
+ *
113
+ * @param item - the serialized string
114
+ * @returns the deserialized model instance
115
+ */
116
+ deserialize(item: string): InstanceType<T>;
117
+ /**
118
+ * Whether a stored row is a plain JSON object without a serializer envelope
119
+ *
120
+ * Rows written by earlier versions (e.g. a v3 FileStore folder or MemoryStore persistence file) store the
121
+ * object itself, its type in a top-level `__type`.
122
+ * @param raw - the parsed row
123
+ * @returns true for a plain object row
124
+ */
125
+ protected isPlainRow(raw: any): boolean;
126
+ /**
127
+ * Find the class to hydrate a row typed `identifier`: the repository model, one of its transitive subclasses,
128
+ * or the repository model for one of its ancestors
129
+ * @param identifier - model identifier
130
+ * @returns the class, `this.model` when it carries no Metadata, or undefined when unrelated
131
+ */
132
+ protected findModelClass(identifier: string): any;
133
+ /**
134
+ * Hydrate a plain JSON row as an instance of the repository model (or of the transitive subclass named by its
135
+ * `__type`; an ancestor type hydrates as the repository model), the same way document stores hydrate their rows;
136
+ * a row typed as an unrelated model is refused
137
+ * @param raw - the parsed row
138
+ * @returns the model instance
139
+ */
140
+ protected hydratePlainRow(raw: any): InstanceType<T>;
141
+ /**
142
+ * Collect the WebdaQL class-filter identifier list — `this.model`'s
143
+ * identifier and every transitive descendant carried in `Metadata.Subclasses`.
144
+ *
145
+ * Returns `undefined` when the model carries no `Metadata` (plain unit-test
146
+ * classes that didn't go through `Application.setModelMetadata`). In that
147
+ * case `query()` skips the prepend and returns everything in storage,
148
+ * preserving the pre-fix behavior for those bare classes.
149
+ *
150
+ * @returns the list of identifiers to match, or `undefined` when no Metadata
151
+ */
152
+ protected buildClassFilterIdentifiers(): string[] | undefined;
153
+ /**
154
+ * Build the WebdaQL class-filter clause `__type IN ['A', 'B', ...]` covering
155
+ * `this.model`'s identifier and every transitive descendant.
156
+ *
157
+ * Returns `undefined` when the model carries no `Metadata`.
158
+ *
159
+ * @returns the class-filter WebdaQL clause, or `undefined` when no Metadata
160
+ */
161
+ protected buildClassFilter(): string | undefined;
162
+ /**
163
+ * Add query support
164
+ *
165
+ * Class filtering: when several model classes share the same underlying
166
+ * storage Map (e.g. a model and its subclasses each registering their own
167
+ * repository pointing at the same `Map` via `MemoryStore.getRepository`),
168
+ * results are restricted to instances of `this.model` and its transitive
169
+ * descendants. The filter is applied as a real WebdaQL clause —
170
+ * `__type IN ['Webda/Post', 'Webda/BlogPost', ...]` — prepended to the
171
+ * caller's query via `WebdaQL.PrependCondition` (string path) or merged
172
+ * directly into the AST (parsed-Query path used by `iterate`). Each stored
173
+ * item carries its `__type` as a non-enumerable property courtesy of
174
+ * `deserialize`, so the WebdaQL filter eval reads it directly without
175
+ * leaking it to JSON serialization. There is no post-filter step.
176
+ *
177
+ * Models without `Metadata` (plain unit-test classes) opt out of the
178
+ * prepend — `buildClassFilterIdentifiers` returns `undefined` and the query
179
+ * runs as given. External storage backends that adopt the same `__type`
180
+ * stamping convention can use `buildClassFilter` to produce the equivalent
181
+ * server-side WHERE clause.
182
+ *
183
+ * @param query - the query string or parsed query
184
+ * @param params - values for the `?` or `:name` placeholders of a query string
185
+ * @returns the query results with optional continuation token
186
+ */
187
+ query(query: string | Query, params?: QueryParameters): Promise<{
188
+ results: InstanceType<T>[];
189
+ continuationToken?: string;
190
+ }>;
191
+ /**
192
+ * List the storage keys that may belong to this model
193
+ *
194
+ * A storage shared by several models holds foreign entries whose key shape can be invalid for this
195
+ * repository: they are skipped from the stored envelope `__type` before any parsing. Entries without a
196
+ * readable stamp (legacy rows, corrupted payloads) are kept so any error on them still surfaces.
197
+ * @param ids - class identifiers (model and subclasses), undefined to keep everything
198
+ * @returns the keys to evaluate
199
+ */
200
+ protected listKeysOfModel(ids?: string[]): string[];
201
+ /**
202
+ * Allow to simulate a find on a list of uuids
203
+ * It is static to be reusable by other repository like FileRepository
204
+ * @param query - the parsed query
205
+ * @param uuids - the list of UIDs to search
206
+ * @param repository - the repository to fetch objects from
207
+ * @returns the query results with optional continuation token
208
+ */
209
+ static simulateFind<T extends ModelClass>(query: Query, uuids: any[], repository: Repository<T>): Promise<{
210
+ results: InstanceType<T>[];
211
+ continuationToken?: string;
212
+ }>;
213
+ /**
214
+ * Add iterator support
215
+ * @param query - the query string
216
+ * @param params - values for the `?` or `:name` placeholders
217
+ */
218
+ iterate(query: string, params?: QueryParameters): AsyncGenerator<InstanceType<T>, any, any>;
219
+ /** @override */
220
+ delete<K extends PropertyPaths<InstanceType<T>>>(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>, _conditionField?: K | null, _condition?: any): Promise<void>;
221
+ /** @override */
222
+ exists(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]> | string): Promise<boolean>;
223
+ /**
224
+ * Resolve the parent object and last key of a dotted path, creating intermediate objects
225
+ * @param item - root object
226
+ * @param path - dotted path
227
+ * @returns the holder and the last key
228
+ */
229
+ protected resolvePath(item: any, path: string): {
230
+ holder: any;
231
+ key: string;
232
+ };
233
+ /**
234
+ * Increment attributes atomically: the read-modify-write never yields, so concurrent calls all count
235
+ * @override
236
+ * @returns the new value of each incremented attribute, by path
237
+ */
238
+ incrementAttributes<K extends PropertyPaths<InstanceType<T>>, L extends NumericPropertyPaths<InstanceType<T>>>(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]> | string, info: (L | {
239
+ property: L;
240
+ value?: number;
241
+ })[] | Record<L, number>, _conditionField?: K | null, _condition?: any): Promise<void | Record<string, number>>;
242
+ /**
243
+ * Verify a write condition on a collection item
244
+ * @param item - The array to check
245
+ * @param index - Index of the item in the array
246
+ * @param itemWriteConditionField - Field name to check on the item
247
+ * @param itemWriteCondition - Expected value for the field
248
+ * @throws Error if the condition does not match
249
+ */
250
+ protected checkItemWriteCondition(item: any[], index: number, itemWriteConditionField: string, itemWriteCondition: any): void;
251
+ /** @override */
252
+ upsertItemToCollection<K extends Extract<PropertyPaths<InstanceType<T>, any[]>, keyof InstanceType<T>>, L extends keyof ArrayElement<InstanceType<T>[K]>>(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>, collection: K, item: ArrayElement<InstanceType<T>[K]> | JSONed<ArrayElement<InstanceType<T>[K]>>, index?: number, itemWriteConditionField?: any, itemWriteCondition?: any): Promise<void>;
253
+ /** @override */
254
+ deleteItemFromCollection<K extends Extract<PropertyPaths<InstanceType<T>, any[]>, keyof InstanceType<T>>, L extends keyof ArrayElement<InstanceType<T>[K]>>(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>, collection: K, index: number, itemWriteConditionField?: any, itemWriteCondition?: any): Promise<void>;
255
+ /** @override */
256
+ removeAttribute<L extends PropertyPaths<InstanceType<T>>, K extends PropertyPaths<InstanceType<T>>>(primaryKey: PK<InstanceType<T>, InstanceType<T>[typeof WEBDA_PRIMARY_KEY][number]>, attribute: K, _conditionField?: L | null, _condition?: any): Promise<void>;
257
+ /** Test utilities - clears all stored data */
258
+ [WEBDA_TEST]: {
259
+ clear: () => Promise<void>;
260
+ };
261
+ }
262
+ //# sourceMappingURL=memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/repositories/memory.ts"],"names":[],"mappings":"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"}