@procedures/collections 0.8.0 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +41 -0
- package/README.md +104 -10
- package/dist/.tsbuildinfo +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/overlay/index.d.ts +6 -0
- package/dist/overlay/index.d.ts.map +1 -0
- package/dist/overlay/index.js +6 -0
- package/dist/overlay/index.js.map +1 -0
- package/dist/overlay/overlay.d.ts +55 -0
- package/dist/overlay/overlay.d.ts.map +1 -0
- package/dist/overlay/overlay.js +82 -0
- package/dist/overlay/overlay.js.map +1 -0
- package/dist/overlay/stacks.d.ts +44 -0
- package/dist/overlay/stacks.d.ts.map +1 -0
- package/dist/overlay/stacks.js +43 -0
- package/dist/overlay/stacks.js.map +1 -0
- package/dist/storage/index.d.ts +13 -8
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +13 -7
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/interface.d.ts +105 -13
- package/dist/storage/interface.d.ts.map +1 -1
- package/dist/storage/interface.js +10 -8
- package/dist/storage/interface.js.map +1 -1
- package/dist/storage/listeners.d.ts +39 -0
- package/dist/storage/listeners.d.ts.map +1 -0
- package/dist/storage/listeners.js +65 -0
- package/dist/storage/listeners.js.map +1 -0
- package/dist/storage/memory.d.ts +46 -6
- package/dist/storage/memory.d.ts.map +1 -1
- package/dist/storage/memory.js +81 -10
- package/dist/storage/memory.js.map +1 -1
- package/dist/testing/storage-contract.d.ts +13 -0
- package/dist/testing/storage-contract.d.ts.map +1 -1
- package/dist/testing/storage-contract.js +472 -0
- package/dist/testing/storage-contract.js.map +1 -1
- package/package.json +4 -1
- package/src/index.ts +3 -0
- package/src/overlay/index.ts +15 -0
- package/src/overlay/overlay.ts +119 -0
- package/src/overlay/stacks.ts +76 -0
- package/src/storage/index.ts +54 -8
- package/src/storage/interface.ts +117 -13
- package/src/storage/listeners.ts +72 -0
- package/src/storage/memory.ts +110 -11
- package/src/testing/storage-contract.ts +522 -2
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A set of listeners for the events of a storage: the change batches of `observe()`, or the status
|
|
3
|
+
* of a sync. A storage package uses it, so each storage treats its listeners in the same way.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* The default handler of the error of a listener. It throws the error again in a microtask, as an
|
|
7
|
+
* `EventTarget` reports the error of a listener. Thus the error is not lost, and the write that
|
|
8
|
+
* sent the event does not fail.
|
|
9
|
+
*/
|
|
10
|
+
export const reportListenerError = (error) => {
|
|
11
|
+
queueMicrotask(() => {
|
|
12
|
+
throw error;
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* The listeners of one kind of event.
|
|
17
|
+
*
|
|
18
|
+
* - `emit()` gives the event to each listener, in the order of `add()`.
|
|
19
|
+
* - A listener that `add()` gets during an `emit()` gets the next event, not this one.
|
|
20
|
+
* - The error of a listener goes to the error handler. The other listeners get the event.
|
|
21
|
+
* - The same function can be added two times. Each `add()` gives its own function that removes it.
|
|
22
|
+
*/
|
|
23
|
+
export class StorageListeners {
|
|
24
|
+
listeners = new Set();
|
|
25
|
+
onError;
|
|
26
|
+
/** @param onError - The function that gets the error of a listener. The default is `reportListenerError`. */
|
|
27
|
+
constructor(onError = reportListenerError) {
|
|
28
|
+
this.onError = onError;
|
|
29
|
+
}
|
|
30
|
+
/** The number of listeners. */
|
|
31
|
+
get size() {
|
|
32
|
+
return this.listeners.size;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* This method adds a listener.
|
|
36
|
+
*
|
|
37
|
+
* @returns The function that removes the listener. A second use of it does nothing.
|
|
38
|
+
*/
|
|
39
|
+
add(listener) {
|
|
40
|
+
const entry = { listener };
|
|
41
|
+
this.listeners.add(entry);
|
|
42
|
+
return () => {
|
|
43
|
+
this.listeners.delete(entry);
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/** This method gives the event to each listener. */
|
|
47
|
+
emit(event) {
|
|
48
|
+
for (const entry of [...this.listeners]) {
|
|
49
|
+
// A listener that a listener before it removed gets no event
|
|
50
|
+
if (!this.listeners.has(entry))
|
|
51
|
+
continue;
|
|
52
|
+
try {
|
|
53
|
+
entry.listener(event);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
this.onError(error);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
/** This method removes each listener. */
|
|
61
|
+
clear() {
|
|
62
|
+
this.listeners.clear();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=listeners.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"listeners.js","sourceRoot":"","sources":["../../src/storage/listeners.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAyB,CAAC,KAAK,EAAE,EAAE;IACjE,cAAc,CAAC,GAAG,EAAE;QAClB,MAAM,KAAK,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,OAAO,gBAAgB;IACV,SAAS,GAAG,IAAI,GAAG,EAA6C,CAAC;IACjE,OAAO,CAAuB;IAE/C,6GAA6G;IAC7G,YAAY,OAAO,GAAyB,mBAAmB;QAC7D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,+BAA+B;IAC/B,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,GAAG,CAAC,QAA4B;QAC9B,MAAM,KAAK,GAAG,EAAE,QAAQ,EAAE,CAAC;QAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC;IACJ,CAAC;IAED,oDAAoD;IACpD,IAAI,CAAC,KAAQ;QACX,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACxC,6DAA6D;YAC7D,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC;gBAAE,SAAS;YACzC,IAAI,CAAC;gBACH,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IAED,yCAAyC;IACzC,KAAK;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACF"}
|
package/dist/storage/memory.d.ts
CHANGED
|
@@ -4,9 +4,23 @@
|
|
|
4
4
|
* Fast, volatile storage using JavaScript Map.
|
|
5
5
|
* All operations return Promises for interface consistency.
|
|
6
6
|
*/
|
|
7
|
-
import type { CollectionStorage, StorageChanges, StorageMetadata } from "./interface.js";
|
|
7
|
+
import type { CollectionStorage, StorageChanges, StorageMetadata, StorageObserver, StorageWriteOptions } from "./interface.js";
|
|
8
|
+
import { type ListenerErrorHandler } from "./listeners.js";
|
|
9
|
+
import { type StoragePatch, type StorageQueryOptions, type StorageQueryPolicy, type StorageSelector } from "@procedures/client/query";
|
|
8
10
|
/** Options of an in-memory storage. */
|
|
9
11
|
export interface InMemoryStorageOptions {
|
|
12
|
+
/**
|
|
13
|
+
* The function that gets the error of an observer of `observe()`. The default throws the error
|
|
14
|
+
* again in a microtask (`reportListenerError`). The write and the other observers do not fail.
|
|
15
|
+
*/
|
|
16
|
+
onObserverError?: ListenerErrorHandler | undefined;
|
|
17
|
+
/**
|
|
18
|
+
* The query policy of `query()` for a call without a policy: the operators and the limits. The
|
|
19
|
+
* procedure `find` gives the policy of its host. A storage that gets selectors of callers that it
|
|
20
|
+
* does not trust keeps the default.
|
|
21
|
+
* @default DEFAULT_QUERY_POLICY: no `$regex`
|
|
22
|
+
*/
|
|
23
|
+
queryPolicy?: StorageQueryPolicy | undefined;
|
|
10
24
|
/**
|
|
11
25
|
* The number of deletes that the change log keeps (roadmap R28). After more deletes, the log
|
|
12
26
|
* drops the oldest ones, and `getChangesSince` of an older version gives all items.
|
|
@@ -37,6 +51,8 @@ export interface InMemoryStorageOptions {
|
|
|
37
51
|
* - Copies: a change of a written or a read value does not change the stored item (the option
|
|
38
52
|
* `copies: false` turns this off)
|
|
39
53
|
* - `getIds()` gives the ids without a copy of the values
|
|
54
|
+
* - `query()` runs a selector, `observe()` tells each change with the origin of its write, and
|
|
55
|
+
* `patch()` merges fields into an item in one step
|
|
40
56
|
* - After `close()`, each operation rejects, and a second `close()` does nothing
|
|
41
57
|
*
|
|
42
58
|
* @example
|
|
@@ -59,6 +75,10 @@ export declare class InMemoryStorage<T> implements CollectionStorage<T> {
|
|
|
59
75
|
private readonly maxTombstones;
|
|
60
76
|
private readonly copy;
|
|
61
77
|
private closed;
|
|
78
|
+
/** The observers of `observe()` */
|
|
79
|
+
private readonly observers;
|
|
80
|
+
/** The query policy of a call without a policy */
|
|
81
|
+
private readonly queryPolicy;
|
|
62
82
|
constructor(options?: InMemoryStorageOptions);
|
|
63
83
|
get(id: string): Promise<T | undefined>;
|
|
64
84
|
getAll(): Promise<T[]>;
|
|
@@ -73,14 +93,32 @@ export declare class InMemoryStorage<T> implements CollectionStorage<T> {
|
|
|
73
93
|
getChangesSince(since?: string): Promise<StorageChanges<T>>;
|
|
74
94
|
/** The items for which the predicate gives true. The predicate gets a copy of each item. */
|
|
75
95
|
find(predicate: (item: T) => boolean): Promise<T[]>;
|
|
96
|
+
/**
|
|
97
|
+
* The entries whose items match the selector, with the order, the skip and the limit of
|
|
98
|
+
* `queryEntries()`, under the policy of the call or of the options. The result has copies of the
|
|
99
|
+
* items.
|
|
100
|
+
*/
|
|
101
|
+
query(selector: StorageSelector, options?: StorageQueryOptions, policy?: StorageQueryPolicy): Promise<Array<[string, T]>>;
|
|
102
|
+
/**
|
|
103
|
+
* This method starts to send the changes of each write to the observer, before the write resolves.
|
|
104
|
+
* The values of the changes are copies, unless the option `copies` is false. The observers share
|
|
105
|
+
* each batch.
|
|
106
|
+
*/
|
|
107
|
+
observe(observer: StorageObserver<T>): () => void;
|
|
76
108
|
has(id: string): Promise<boolean>;
|
|
77
109
|
size(): Promise<number>;
|
|
78
|
-
set(id: string, value: T): Promise<void>;
|
|
79
|
-
delete(id: string): Promise<boolean>;
|
|
80
|
-
clear(): Promise<void>;
|
|
110
|
+
set(id: string, value: T, options?: StorageWriteOptions): Promise<void>;
|
|
111
|
+
delete(id: string, options?: StorageWriteOptions): Promise<boolean>;
|
|
112
|
+
clear(options?: StorageWriteOptions): Promise<void>;
|
|
113
|
+
/**
|
|
114
|
+
* This method changes the item of the id in one step (a JSON Merge Patch, or the operations
|
|
115
|
+
* `$set` and `$unset`), and gives a copy of the new item. A missing id stays missing, and the
|
|
116
|
+
* result is undefined. A patch that cannot apply to the item changes nothing.
|
|
117
|
+
*/
|
|
118
|
+
patch(id: string, fields: StoragePatch, options?: StorageWriteOptions): Promise<T | undefined>;
|
|
81
119
|
/** This method sets several items. When one value has no copy, nothing changes. */
|
|
82
|
-
setBatch(items: Array<[string, T]
|
|
83
|
-
deleteBatch(ids: string[]): Promise<number>;
|
|
120
|
+
setBatch(items: Array<[string, T]>, options?: StorageWriteOptions): Promise<void>;
|
|
121
|
+
deleteBatch(ids: string[], options?: StorageWriteOptions): Promise<number>;
|
|
84
122
|
getBatch(ids: string[]): Promise<Map<string, T>>;
|
|
85
123
|
/**
|
|
86
124
|
* This method closes the storage and drops its items. After it, each operation rejects (and
|
|
@@ -121,6 +159,8 @@ export declare class InMemoryStorage<T> implements CollectionStorage<T> {
|
|
|
121
159
|
private checkOpen;
|
|
122
160
|
/** The entries with copies of the values. */
|
|
123
161
|
private copiedEntries;
|
|
162
|
+
/** The `set` change of a stored value: a copy of it for the observers. */
|
|
163
|
+
private setChange;
|
|
124
164
|
/** A set moves the id to the end of the order of the log: the order of the last change. */
|
|
125
165
|
private noteSet;
|
|
126
166
|
private noteDelete;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/storage/memory.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/storage/memory.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/memory.js
CHANGED
|
@@ -4,12 +4,18 @@
|
|
|
4
4
|
* Fast, volatile storage using JavaScript Map.
|
|
5
5
|
* All operations return Promises for interface consistency.
|
|
6
6
|
*/
|
|
7
|
+
import { StorageListeners } from "./listeners.js";
|
|
8
|
+
import { applyPatch, patchProblems, queryEntries, } from "@procedures/client/query";
|
|
7
9
|
/** A new epoch: a version of another storage does not match it. */
|
|
8
10
|
function newEpoch() {
|
|
9
11
|
return Math.random().toString(36).slice(2, 10);
|
|
10
12
|
}
|
|
11
13
|
const same = (value) => value;
|
|
12
14
|
const clone = (value) => structuredClone(value);
|
|
15
|
+
/** A change with the origin of the write, when the write has one. */
|
|
16
|
+
function withOrigin(change, options) {
|
|
17
|
+
return options?.origin === undefined ? change : { ...change, origin: options.origin };
|
|
18
|
+
}
|
|
13
19
|
/**
|
|
14
20
|
* In-memory storage backed by JavaScript Map.
|
|
15
21
|
*
|
|
@@ -23,6 +29,8 @@ const clone = (value) => structuredClone(value);
|
|
|
23
29
|
* - Copies: a change of a written or a read value does not change the stored item (the option
|
|
24
30
|
* `copies: false` turns this off)
|
|
25
31
|
* - `getIds()` gives the ids without a copy of the values
|
|
32
|
+
* - `query()` runs a selector, `observe()` tells each change with the origin of its write, and
|
|
33
|
+
* `patch()` merges fields into an item in one step
|
|
26
34
|
* - After `close()`, each operation rejects, and a second `close()` does nothing
|
|
27
35
|
*
|
|
28
36
|
* @example
|
|
@@ -47,9 +55,15 @@ export class InMemoryStorage {
|
|
|
47
55
|
maxTombstones;
|
|
48
56
|
copy;
|
|
49
57
|
closed = false;
|
|
58
|
+
/** The observers of `observe()` */
|
|
59
|
+
observers;
|
|
60
|
+
/** The query policy of a call without a policy */
|
|
61
|
+
queryPolicy;
|
|
50
62
|
constructor(options = {}) {
|
|
51
63
|
this.maxTombstones = Math.max(0, options.maxTombstones ?? 10_000);
|
|
52
64
|
this.copy = options.copies === false ? same : clone;
|
|
65
|
+
this.observers = new StorageListeners(options.onObserverError);
|
|
66
|
+
this.queryPolicy = options.queryPolicy;
|
|
53
67
|
}
|
|
54
68
|
//
|
|
55
69
|
// ═══ Read Operations ═══
|
|
@@ -107,6 +121,24 @@ export class InMemoryStorage {
|
|
|
107
121
|
}
|
|
108
122
|
return results;
|
|
109
123
|
}
|
|
124
|
+
/**
|
|
125
|
+
* The entries whose items match the selector, with the order, the skip and the limit of
|
|
126
|
+
* `queryEntries()`, under the policy of the call or of the options. The result has copies of the
|
|
127
|
+
* items.
|
|
128
|
+
*/
|
|
129
|
+
async query(selector, options, policy) {
|
|
130
|
+
this.checkOpen();
|
|
131
|
+
return queryEntries(this.data, selector, options, policy ?? this.queryPolicy).map(([id, value]) => [id, this.copy(value)]);
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* This method starts to send the changes of each write to the observer, before the write resolves.
|
|
135
|
+
* The values of the changes are copies, unless the option `copies` is false. The observers share
|
|
136
|
+
* each batch.
|
|
137
|
+
*/
|
|
138
|
+
observe(observer) {
|
|
139
|
+
this.checkOpen();
|
|
140
|
+
return this.observers.add(observer);
|
|
141
|
+
}
|
|
110
142
|
async has(id) {
|
|
111
143
|
this.checkOpen();
|
|
112
144
|
return this.data.has(id);
|
|
@@ -118,46 +150,80 @@ export class InMemoryStorage {
|
|
|
118
150
|
//
|
|
119
151
|
// ═══ Write Operations ═══
|
|
120
152
|
//
|
|
121
|
-
async set(id, value) {
|
|
153
|
+
async set(id, value, options) {
|
|
122
154
|
this.checkOpen();
|
|
123
|
-
|
|
155
|
+
const stored = this.copy(value);
|
|
156
|
+
this.data.set(id, stored);
|
|
124
157
|
this.noteSet(id);
|
|
158
|
+
if (this.observers.size > 0)
|
|
159
|
+
this.observers.emit([this.setChange(id, stored, options)]);
|
|
125
160
|
}
|
|
126
|
-
async delete(id) {
|
|
161
|
+
async delete(id, options) {
|
|
127
162
|
this.checkOpen();
|
|
128
163
|
const existed = this.data.delete(id);
|
|
129
|
-
if (existed)
|
|
164
|
+
if (existed) {
|
|
130
165
|
this.noteDelete(id);
|
|
166
|
+
if (this.observers.size > 0)
|
|
167
|
+
this.observers.emit([withOrigin({ type: "delete", id }, options)]);
|
|
168
|
+
}
|
|
131
169
|
return existed;
|
|
132
170
|
}
|
|
133
|
-
async clear() {
|
|
171
|
+
async clear(options) {
|
|
134
172
|
this.checkOpen();
|
|
173
|
+
const had = this.data.size > 0;
|
|
135
174
|
for (const id of this.data.keys())
|
|
136
175
|
this.noteDelete(id);
|
|
137
176
|
this.data.clear();
|
|
177
|
+
if (had && this.observers.size > 0)
|
|
178
|
+
this.observers.emit([withOrigin({ type: "clear" }, options)]);
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* This method changes the item of the id in one step (a JSON Merge Patch, or the operations
|
|
182
|
+
* `$set` and `$unset`), and gives a copy of the new item. A missing id stays missing, and the
|
|
183
|
+
* result is undefined. A patch that cannot apply to the item changes nothing.
|
|
184
|
+
*/
|
|
185
|
+
async patch(id, fields, options) {
|
|
186
|
+
this.checkOpen();
|
|
187
|
+
const [problem] = patchProblems(fields);
|
|
188
|
+
if (problem !== undefined)
|
|
189
|
+
throw new TypeError(`The patch of ${id} is not correct: ${problem}`);
|
|
190
|
+
if (!this.data.has(id))
|
|
191
|
+
return undefined;
|
|
192
|
+
const stored = this.copy(applyPatch(this.data.get(id), fields));
|
|
193
|
+
this.data.set(id, stored);
|
|
194
|
+
this.noteSet(id);
|
|
195
|
+
if (this.observers.size > 0)
|
|
196
|
+
this.observers.emit([this.setChange(id, stored, options)]);
|
|
197
|
+
return this.copy(stored);
|
|
138
198
|
}
|
|
139
199
|
//
|
|
140
200
|
// ═══ Bulk Operations ═══
|
|
141
201
|
//
|
|
142
202
|
/** This method sets several items. When one value has no copy, nothing changes. */
|
|
143
|
-
async setBatch(items) {
|
|
203
|
+
async setBatch(items, options) {
|
|
144
204
|
this.checkOpen();
|
|
145
205
|
const copies = items.map(([id, value]) => [id, this.copy(value)]);
|
|
146
206
|
for (const [id, value] of copies) {
|
|
147
207
|
this.data.set(id, value);
|
|
148
208
|
this.noteSet(id);
|
|
149
209
|
}
|
|
210
|
+
if (copies.length > 0 && this.observers.size > 0) {
|
|
211
|
+
this.observers.emit(copies.map(([id, value]) => this.setChange(id, value, options)));
|
|
212
|
+
}
|
|
150
213
|
}
|
|
151
|
-
async deleteBatch(ids) {
|
|
214
|
+
async deleteBatch(ids, options) {
|
|
152
215
|
this.checkOpen();
|
|
153
|
-
|
|
216
|
+
const deleted = [];
|
|
154
217
|
for (const id of ids) {
|
|
155
218
|
if (this.data.delete(id)) {
|
|
156
219
|
this.noteDelete(id);
|
|
157
|
-
deleted
|
|
220
|
+
deleted.push(id);
|
|
158
221
|
}
|
|
159
222
|
}
|
|
160
|
-
|
|
223
|
+
if (deleted.length > 0 && this.observers.size > 0) {
|
|
224
|
+
this.observers.emit(deleted.map((id) => withOrigin({ type: "delete", id }, options)));
|
|
225
|
+
}
|
|
226
|
+
return deleted.length;
|
|
161
227
|
}
|
|
162
228
|
async getBatch(ids) {
|
|
163
229
|
this.checkOpen();
|
|
@@ -184,6 +250,7 @@ export class InMemoryStorage {
|
|
|
184
250
|
this.data.clear();
|
|
185
251
|
this.changedAt.clear();
|
|
186
252
|
this.deletedAt.clear();
|
|
253
|
+
this.observers.clear();
|
|
187
254
|
}
|
|
188
255
|
async getMetadata() {
|
|
189
256
|
this.checkOpen();
|
|
@@ -257,6 +324,10 @@ export class InMemoryStorage {
|
|
|
257
324
|
copiedEntries() {
|
|
258
325
|
return Array.from(this.data, ([id, value]) => [id, this.copy(value)]);
|
|
259
326
|
}
|
|
327
|
+
/** The `set` change of a stored value: a copy of it for the observers. */
|
|
328
|
+
setChange(id, stored, options) {
|
|
329
|
+
return withOrigin({ type: "set", id, value: this.copy(stored) }, options);
|
|
330
|
+
}
|
|
260
331
|
//
|
|
261
332
|
// ═══ The change log ═══
|
|
262
333
|
//
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/storage/memory.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/storage/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -19,8 +19,15 @@
|
|
|
19
19
|
* The suite has no option that hides a difference of a storage. Each storage keeps copies, keeps
|
|
20
20
|
* a stored `null`, gives a delta in the order of the last change of each id, and rejects each
|
|
21
21
|
* operation after `close()`.
|
|
22
|
+
*
|
|
23
|
+
* The optional `query()` gives the result of `queryEntries()` of `@procedures/client/query` for the
|
|
24
|
+
* entries of the storage: the reference of the query language. Without a policy, `$regex` is off.
|
|
25
|
+
* With `createWithQueryPolicy`, the suite also tests the opt-in of `$regex` and each limit of a
|
|
26
|
+
* policy. `observe()` gives one batch for each write that changes the storage. `patch()` changes
|
|
27
|
+
* an item in one step, in each of its two forms. A storage without them skips their cases.
|
|
22
28
|
*/
|
|
23
29
|
import type { CollectionStorage } from "../storage/interface.js";
|
|
30
|
+
import { type StorageQueryPolicy } from "@procedures/client/query";
|
|
24
31
|
/** The item of the suite. Its `id` is its key, so a `HybridStorage` can sync it. */
|
|
25
32
|
export interface ContractItem {
|
|
26
33
|
id: string;
|
|
@@ -41,6 +48,12 @@ export interface CollectionStorageContractOptions {
|
|
|
41
48
|
* the suite tests the drop of the old deletes. A storage without such a limit does not give it.
|
|
42
49
|
*/
|
|
43
50
|
createWithMaxTombstones?: ((max: number) => ContractStorage | Promise<ContractStorage>) | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* This function makes a new, empty storage whose queries follow the policy: the policy of the
|
|
53
|
+
* storage, or of the server of a remote storage. With it, the suite tests the opt-in of `$regex`
|
|
54
|
+
* and each limit of a policy.
|
|
55
|
+
*/
|
|
56
|
+
createWithQueryPolicy?: ((policy: StorageQueryPolicy) => ContractStorage | Promise<ContractStorage>) | undefined;
|
|
44
57
|
}
|
|
45
58
|
/** The context that a test framework gives to a case. Vitest gives `skip`. */
|
|
46
59
|
export interface ContractTestContext {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-contract.d.ts","sourceRoot":"","sources":["../../src/testing/storage-contract.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"storage-contract.d.ts","sourceRoot":"","sources":["../../src/testing/storage-contract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAsC,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAA2D,KAAK,kBAAkB,EAAwB,MAAM,0BAA0B,CAAC;AAGlJ,oFAAoF;AACpF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,CAAC,EAAE,MAAM,CAAC;IACV,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,8BAA8B;AAC9B,MAAM,MAAM,eAAe,GAAG,iBAAiB,CAAC,YAAY,CAAC,CAAC;AAE9D,8DAA8D;AAC9D,MAAM,WAAW,gCAAgC;IAC/C;;;OAGG;IACH,MAAM,IAAI,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACrD;;;OAGG;IACH,uBAAuB,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,MAAM,KAAK,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,SAAS,CAAC;IACpG;;;;OAIG;IACH,qBAAqB,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,kBAAkB,KAAK,eAAe,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC,GAAG,SAAS,CAAC;CAClH;AAED,8EAA8E;AAC9E,MAAM,WAAW,mBAAmB;IAClC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B;AAED,6BAA6B;AAC7B,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED,gGAAgG;AAChG,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC;IAClD,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,mBAAmB,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;CAClF;AAuMD;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,gCAAgC,GAAG,YAAY,EAAE,CAg1BnG;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gCAAgC,EAAE,GAAG,EAAE,eAAe,GAAG,IAAI,CAMrI"}
|