@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.
- package/LICENSE +166 -0
- package/README.md +146 -2
- package/lib/index.d.ts +11 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +11 -0
- package/lib/index.js.map +1 -0
- package/lib/mock.d.ts +72 -0
- package/lib/mock.d.ts.map +1 -0
- package/lib/mock.js +83 -0
- package/lib/mock.js.map +1 -0
- package/lib/model.model.d.ts +247 -0
- package/lib/model.model.d.ts.map +1 -0
- package/lib/model.model.js +277 -0
- package/lib/model.model.js.map +1 -0
- package/lib/relations.d.ts +705 -0
- package/lib/relations.d.ts.map +1 -0
- package/lib/relations.js +938 -0
- package/lib/relations.js.map +1 -0
- package/lib/repositories/abstract.d.ts +124 -0
- package/lib/repositories/abstract.d.ts.map +1 -0
- package/lib/repositories/abstract.js +249 -0
- package/lib/repositories/abstract.js.map +1 -0
- package/lib/repositories/conformance.d.ts +40 -0
- package/lib/repositories/conformance.d.ts.map +1 -0
- package/lib/repositories/conformance.js +38 -0
- package/lib/repositories/conformance.js.map +1 -0
- package/lib/repositories/event.d.ts +100 -0
- package/lib/repositories/event.d.ts.map +1 -0
- package/lib/repositories/event.js +226 -0
- package/lib/repositories/event.js.map +1 -0
- package/lib/repositories/hooks.d.ts +88 -0
- package/lib/repositories/hooks.d.ts.map +1 -0
- package/lib/repositories/hooks.js +105 -0
- package/lib/repositories/hooks.js.map +1 -0
- package/lib/repositories/memory.d.ts +208 -0
- package/lib/repositories/memory.d.ts.map +1 -0
- package/lib/repositories/memory.js +446 -0
- package/lib/repositories/memory.js.map +1 -0
- package/lib/repositories/repository.d.ts +238 -0
- package/lib/repositories/repository.d.ts.map +1 -0
- package/lib/repositories/repository.js +19 -0
- package/lib/repositories/repository.js.map +1 -0
- package/lib/storable.d.ts +200 -0
- package/lib/storable.d.ts.map +1 -0
- package/lib/storable.js +66 -0
- package/lib/storable.js.map +1 -0
- package/lib/types.d.ts +230 -0
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +12 -0
- package/lib/types.js.map +1 -0
- 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":"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"}
|
|
@@ -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
|