@procedures/store 0.7.0 → 0.8.1
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 +77 -0
- package/README.md +98 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/indexeddb/sync-state-store.d.ts +40 -0
- package/dist/indexeddb/sync-state-store.d.ts.map +1 -0
- package/dist/indexeddb/sync-state-store.js +94 -0
- package/dist/indexeddb/sync-state-store.js.map +1 -0
- package/dist/indexeddb.d.ts +7 -2
- package/dist/indexeddb.d.ts.map +1 -1
- package/dist/indexeddb.js +6 -2
- package/dist/indexeddb.js.map +1 -1
- package/dist/storage/api.d.ts +94 -11
- package/dist/storage/api.d.ts.map +1 -1
- package/dist/storage/api.js +177 -24
- package/dist/storage/api.js.map +1 -1
- package/dist/storage/feed.d.ts +133 -0
- package/dist/storage/feed.d.ts.map +1 -0
- package/dist/storage/feed.js +159 -0
- package/dist/storage/feed.js.map +1 -0
- package/dist/storage/file-queue.d.ts.map +1 -1
- package/dist/storage/file-queue.js +2 -1
- package/dist/storage/file-queue.js.map +1 -1
- package/dist/storage/hybrid.d.ts +415 -20
- package/dist/storage/hybrid.d.ts.map +1 -1
- package/dist/storage/hybrid.js +1405 -196
- package/dist/storage/hybrid.js.map +1 -1
- package/dist/storage/index.d.ts +6 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +6 -1
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/sync-state.d.ts +56 -0
- package/dist/storage/sync-state.d.ts.map +1 -0
- package/dist/storage/sync-state.js +58 -0
- package/dist/storage/sync-state.js.map +1 -0
- package/dist/storage/synced-registry.d.ts +22 -4
- package/dist/storage/synced-registry.d.ts.map +1 -1
- package/dist/storage/synced-registry.js +63 -31
- package/dist/storage/synced-registry.js.map +1 -1
- package/dist/storage/types.d.ts +22 -1
- package/dist/storage/types.d.ts.map +1 -1
- package/package.json +4 -3
- package/src/indexeddb/sync-state-store.ts +101 -0
- package/src/indexeddb.ts +7 -2
- package/src/storage/api.ts +240 -28
- package/src/storage/feed.ts +251 -0
- package/src/storage/file-queue.ts +2 -1
- package/src/storage/hybrid.ts +1526 -203
- package/src/storage/index.ts +17 -0
- package/src/storage/sync-state.ts +89 -0
- package/src/storage/synced-registry.ts +76 -31
- package/src/storage/types.ts +25 -1
package/dist/storage/api.js
CHANGED
|
@@ -6,13 +6,31 @@
|
|
|
6
6
|
*
|
|
7
7
|
* This is the KEY integration between Collections and Universal Client!
|
|
8
8
|
*/
|
|
9
|
-
import {
|
|
9
|
+
import { QUERY_OPERATORS, patchProblems, queryEntries, queryOptionsProblems, selectorProblems, } from "@procedures/client/query";
|
|
10
|
+
import { optionalMs, realClock } from "@procedures/client";
|
|
11
|
+
import { backoffDelay } from "@mark1russell7/service/backoff";
|
|
12
|
+
/**
|
|
13
|
+
* The policy of a query that only the server limits: each operator, and no limit of size. The form
|
|
14
|
+
* of the selector must still be correct.
|
|
15
|
+
*/
|
|
16
|
+
const FORM_ONLY = Object.freeze({
|
|
17
|
+
operators: QUERY_OPERATORS,
|
|
18
|
+
maxRegexLength: Number.POSITIVE_INFINITY,
|
|
19
|
+
maxClauses: Number.POSITIVE_INFINITY,
|
|
20
|
+
maxDepth: Number.POSITIVE_INFINITY,
|
|
21
|
+
maxListLength: Number.POSITIVE_INFINITY,
|
|
22
|
+
});
|
|
10
23
|
/** An error that says whether another attempt can succeed (a ClientError does). */
|
|
11
24
|
function isRetryable(error) {
|
|
12
25
|
return (typeof error === "object" &&
|
|
13
26
|
error !== null &&
|
|
14
27
|
error.retryable === true);
|
|
15
28
|
}
|
|
29
|
+
/** The wait that an error asks for before a retry, in milliseconds, or 0. */
|
|
30
|
+
function retryAfterOf(error) {
|
|
31
|
+
const value = error?.retryAfterMs;
|
|
32
|
+
return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : 0;
|
|
33
|
+
}
|
|
16
34
|
/** A promise that rejects when the signal aborts first. */
|
|
17
35
|
function untilAborted(promise, signal, describe) {
|
|
18
36
|
if (!signal)
|
|
@@ -31,6 +49,28 @@ function untilAborted(promise, signal, describe) {
|
|
|
31
49
|
});
|
|
32
50
|
});
|
|
33
51
|
}
|
|
52
|
+
/** A wait on the clock. The signal stops the wait and its timer. */
|
|
53
|
+
function wait(clock, ms, signal, describe) {
|
|
54
|
+
return new Promise((resolve, reject) => {
|
|
55
|
+
if (signal?.aborted) {
|
|
56
|
+
reject(describe());
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const onAbort = () => {
|
|
60
|
+
cancel();
|
|
61
|
+
reject(describe());
|
|
62
|
+
};
|
|
63
|
+
const cancel = clock.after(ms, () => {
|
|
64
|
+
signal?.removeEventListener("abort", onAbort);
|
|
65
|
+
resolve();
|
|
66
|
+
});
|
|
67
|
+
signal?.addEventListener("abort", onAbort, { once: true });
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/** True when the server does not know a procedure: an older server without `ids`. */
|
|
71
|
+
function isNotFound(error) {
|
|
72
|
+
return typeof error === "object" && error !== null && error.code === "NOT_FOUND";
|
|
73
|
+
}
|
|
34
74
|
/**
|
|
35
75
|
* True for the output `{ found, value }` of the core procedure `get` with `found: true`: an
|
|
36
76
|
* object with a boolean `found`, and no key other than `found` and `value`.
|
|
@@ -41,6 +81,13 @@ function isFoundOutput(value) {
|
|
|
41
81
|
const record = value;
|
|
42
82
|
return typeof record["found"] === "boolean" && Object.keys(record).every((key) => key === "found" || key === "value");
|
|
43
83
|
}
|
|
84
|
+
/** The entries of the output `[{ id, value }]` of `entries` or `find`. */
|
|
85
|
+
function entriesOf(output, label) {
|
|
86
|
+
if (!Array.isArray(output) || !output.every((entry) => typeof entry === "object" && entry !== null && typeof entry.id === "string")) {
|
|
87
|
+
throw new Error(`${label} did not return an array of { id, value }`);
|
|
88
|
+
}
|
|
89
|
+
return output.map((entry) => [entry.id, entry.value]);
|
|
90
|
+
}
|
|
44
91
|
/**
|
|
45
92
|
* API storage backed by universal client.
|
|
46
93
|
*
|
|
@@ -49,11 +96,17 @@ function isFoundOutput(value) {
|
|
|
49
96
|
* - get(id) → `collections.<collection>.get` with `{ id }`
|
|
50
97
|
* - set(id, value) → `collections.<collection>.set` with `{ id, value }`
|
|
51
98
|
* - setBatch(items) → `collections.<collection>.setBatch` with `{ items: [{ id, value }] }`
|
|
99
|
+
* - getIds() → `collections.<collection>.ids` with `{}`, or the entries of an older server
|
|
100
|
+
* - query(selector, options) → `collections.<collection>.find` with `{ selector, sort, skip, limit }`
|
|
101
|
+
* - patch(id, fields) → `collections.<collection>.patch` with `{ id, fields }`
|
|
52
102
|
* - etc.
|
|
53
103
|
*
|
|
54
104
|
* Before, the class expected a `{ data }` envelope and called `<service>.get`: no core
|
|
55
105
|
* procedure matched, and every read was undefined (deep dive CORE-9, DATA-9).
|
|
56
106
|
*
|
|
107
|
+
* The retries wait with `backoffDelay` of `@mark1russell7/service/backoff` on the clock of the
|
|
108
|
+
* options, with full jitter by default. Before, the waits had no jitter, and they used the timers of the platform directly.
|
|
109
|
+
*
|
|
57
110
|
* @example
|
|
58
111
|
* ```typescript
|
|
59
112
|
* // Create API storage
|
|
@@ -66,17 +119,28 @@ function isFoundOutput(value) {
|
|
|
66
119
|
* // Operations are automatically sent to server
|
|
67
120
|
* await storage.set("123", { name: "John" });
|
|
68
121
|
* const user = await storage.get("123"); // Fetched from server
|
|
122
|
+
* const admins = await storage.query({ role: "admin" }, { sort: { name: 1 }, limit: 50 }); // Runs on the server
|
|
69
123
|
* ```
|
|
70
124
|
*/
|
|
71
125
|
export class ApiStorage {
|
|
72
126
|
client;
|
|
73
127
|
options;
|
|
74
128
|
closed = false;
|
|
129
|
+
/** True when the server does not know the procedure `ids`: `getIds()` reads the entries */
|
|
130
|
+
idsUnsupported = false;
|
|
131
|
+
/** True when the server does not know the procedure `find`: `query()` reads the entries */
|
|
132
|
+
findUnsupported = false;
|
|
75
133
|
constructor(client, options) {
|
|
76
134
|
const service = options.service ?? (options.collection !== undefined ? `collections.${options.collection}` : undefined);
|
|
77
135
|
if (!service) {
|
|
78
136
|
throw new Error("ApiStorage requires a collection or a service");
|
|
79
137
|
}
|
|
138
|
+
const jitter = options.retryJitter ?? 1;
|
|
139
|
+
if (!(jitter >= 0 && jitter <= 1))
|
|
140
|
+
throw new RangeError(`retryJitter must be from 0 to 1, not ${jitter}`);
|
|
141
|
+
const factor = options.retryFactor ?? 2;
|
|
142
|
+
if (!(Number.isFinite(factor) && factor >= 1))
|
|
143
|
+
throw new RangeError(`retryFactor must be a number of 1 or more, not ${factor}`);
|
|
80
144
|
this.client = client;
|
|
81
145
|
this.options = {
|
|
82
146
|
service,
|
|
@@ -85,8 +149,10 @@ export class ApiStorage {
|
|
|
85
149
|
get: "get",
|
|
86
150
|
getAll: "getAll",
|
|
87
151
|
entries: "entries",
|
|
152
|
+
ids: "ids",
|
|
88
153
|
changes: "changes",
|
|
89
154
|
find: "find",
|
|
155
|
+
patch: "patch",
|
|
90
156
|
has: "has",
|
|
91
157
|
size: "size",
|
|
92
158
|
set: "set",
|
|
@@ -99,11 +165,21 @@ export class ApiStorage {
|
|
|
99
165
|
},
|
|
100
166
|
timeout: optionalMs(options.timeout, "timeout") ?? 30000,
|
|
101
167
|
attempts: options.retry === false ? 1 : options.retry === true || options.retry === undefined ? 3 : Math.max(1, options.retry),
|
|
102
|
-
|
|
168
|
+
backoff: {
|
|
169
|
+
base: optionalMs(options.retryDelay, "retryDelay") ?? 100,
|
|
170
|
+
factor,
|
|
171
|
+
cap: optionalMs(options.maxRetryDelay, "maxRetryDelay") ?? 30000,
|
|
172
|
+
jitter: jitter === 0 ? { kind: "none" } : { kind: "subtract", fraction: jitter },
|
|
173
|
+
},
|
|
174
|
+
clock: options.clock ?? realClock,
|
|
175
|
+
random: options.random ?? Math.random,
|
|
176
|
+
queryPolicy: options.queryPolicy ?? FORM_ONLY,
|
|
103
177
|
...(options.signal !== undefined && { signal: options.signal }),
|
|
104
178
|
closeClient: options.closeClient ?? false,
|
|
105
179
|
// A custom service can refuse an unknown input field: it gets the input { id }
|
|
106
180
|
askFound: options.service === undefined && (options.operations?.get ?? "get") === "get",
|
|
181
|
+
// A custom service can refuse an unknown input field: it gets no origin
|
|
182
|
+
sendOrigin: options.service === undefined,
|
|
107
183
|
};
|
|
108
184
|
}
|
|
109
185
|
//
|
|
@@ -133,11 +209,29 @@ export class ApiStorage {
|
|
|
133
209
|
}
|
|
134
210
|
/** Every item with its id, from the `entries` procedure of the collection (roadmap R2). */
|
|
135
211
|
async getEntries() {
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
212
|
+
return entriesOf(await this.call("entries", {}), `${this.options.service}.entries`);
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* The ids of the items in the order of the entries, from the `ids` procedure of the collection.
|
|
216
|
+
* The values stay on the server. An older server without the procedure answers `NOT_FOUND`.
|
|
217
|
+
* Then this call and each later call read the ids from `getEntries()`.
|
|
218
|
+
*/
|
|
219
|
+
async getIds() {
|
|
220
|
+
if (!this.idsUnsupported) {
|
|
221
|
+
try {
|
|
222
|
+
const ids = await this.call("ids", {});
|
|
223
|
+
if (!Array.isArray(ids) || !ids.every((id) => typeof id === "string")) {
|
|
224
|
+
throw new Error(`${this.options.service}.ids did not return an array of ids`);
|
|
225
|
+
}
|
|
226
|
+
return ids;
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
if (!isNotFound(error))
|
|
230
|
+
throw error;
|
|
231
|
+
this.idsUnsupported = true;
|
|
232
|
+
}
|
|
139
233
|
}
|
|
140
|
-
return
|
|
234
|
+
return (await this.getEntries()).map(([id]) => id);
|
|
141
235
|
}
|
|
142
236
|
/**
|
|
143
237
|
* The changes after a version, from the `changes` procedure of the collection (roadmap R28).
|
|
@@ -157,11 +251,47 @@ export class ApiStorage {
|
|
|
157
251
|
deleted: result.deleted,
|
|
158
252
|
};
|
|
159
253
|
}
|
|
254
|
+
/**
|
|
255
|
+
* The items for which the predicate gives true. A function cannot go over the network, so this
|
|
256
|
+
* method reads all items and filters here. `query()` sends a JSON selector to the server.
|
|
257
|
+
*/
|
|
160
258
|
async find(predicate) {
|
|
161
|
-
// A predicate cannot go over the network: read all items, then filter here
|
|
162
259
|
const all = await this.getAll();
|
|
163
260
|
return all.filter(predicate);
|
|
164
261
|
}
|
|
262
|
+
/**
|
|
263
|
+
* The entries whose items match the selector, from the `find` procedure of the collection: the
|
|
264
|
+
* server runs the selector, the order, the skip and the limit (roadmap CLI-14), under its own
|
|
265
|
+
* query policy. An older server without the procedure answers `NOT_FOUND`. Then this call and
|
|
266
|
+
* each later call read the entries and run the query here, with the same result.
|
|
267
|
+
*
|
|
268
|
+
* @param policy - The policy that the storage applies before it sends the query. The default is
|
|
269
|
+
* the option `queryPolicy`. The server applies its own policy too.
|
|
270
|
+
*/
|
|
271
|
+
async query(selector, options = {}, policy) {
|
|
272
|
+
// A selector with a problem does not go to the server: the server would refuse it
|
|
273
|
+
const limits = policy ?? this.options.queryPolicy;
|
|
274
|
+
const problems = [...selectorProblems(selector, limits), ...queryOptionsProblems(options, limits)];
|
|
275
|
+
if (problems.length > 0)
|
|
276
|
+
throw new TypeError(`The query is not correct: ${problems.join(". ")}`);
|
|
277
|
+
if (!this.findUnsupported) {
|
|
278
|
+
const input = {
|
|
279
|
+
selector,
|
|
280
|
+
...(options.sort !== undefined && { sort: options.sort }),
|
|
281
|
+
...(options.skip !== undefined && { skip: options.skip }),
|
|
282
|
+
...(options.limit !== undefined && { limit: options.limit }),
|
|
283
|
+
};
|
|
284
|
+
try {
|
|
285
|
+
return entriesOf(await this.call("find", input), `${this.options.service}.find`);
|
|
286
|
+
}
|
|
287
|
+
catch (error) {
|
|
288
|
+
if (!isNotFound(error))
|
|
289
|
+
throw error;
|
|
290
|
+
this.findUnsupported = true;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
return queryEntries(await this.getEntries(), selector, options, limits);
|
|
294
|
+
}
|
|
165
295
|
async has(id) {
|
|
166
296
|
return (await this.call("has", { id })) === true;
|
|
167
297
|
}
|
|
@@ -171,24 +301,42 @@ export class ApiStorage {
|
|
|
171
301
|
//
|
|
172
302
|
// ═══ Write Operations ═══
|
|
173
303
|
//
|
|
174
|
-
|
|
175
|
-
|
|
304
|
+
/**
|
|
305
|
+
* This method sets an item on the server. The origin of the options goes to the procedure `set`,
|
|
306
|
+
* so the storage of the server and the change event of the write have it (roadmap CLI-15).
|
|
307
|
+
*/
|
|
308
|
+
async set(id, value, options) {
|
|
309
|
+
await this.call("set", { id, value, ...this.originOf(options) });
|
|
176
310
|
}
|
|
177
|
-
async delete(id) {
|
|
178
|
-
return (await this.call("delete", { id })) === true;
|
|
311
|
+
async delete(id, options) {
|
|
312
|
+
return (await this.call("delete", { id, ...this.originOf(options) })) === true;
|
|
179
313
|
}
|
|
180
|
-
async clear() {
|
|
181
|
-
await this.call("clear", {});
|
|
314
|
+
async clear(options) {
|
|
315
|
+
await this.call("clear", { ...this.originOf(options) });
|
|
316
|
+
}
|
|
317
|
+
/**
|
|
318
|
+
* This method changes an item on the server in one step: the `patch` procedure of the collection
|
|
319
|
+
* (roadmap CLI-14). The fields are a JSON Merge Patch, or the operations `$set` and `$unset`.
|
|
320
|
+
* It gives the new item, or undefined for a missing id.
|
|
321
|
+
*/
|
|
322
|
+
async patch(id, fields, options) {
|
|
323
|
+
const [problem] = patchProblems(fields);
|
|
324
|
+
if (problem !== undefined)
|
|
325
|
+
throw new TypeError(`The patch of ${id} is not correct: ${problem}`);
|
|
326
|
+
const result = await this.call("patch", { id, fields, ...this.originOf(options) });
|
|
327
|
+
if (!isFoundOutput(result))
|
|
328
|
+
throw new Error(`${this.options.service}.patch did not return { found, value }`);
|
|
329
|
+
return result.found ? result.value : undefined;
|
|
182
330
|
}
|
|
183
331
|
//
|
|
184
332
|
// ═══ Bulk Operations ═══
|
|
185
333
|
//
|
|
186
|
-
async setBatch(items) {
|
|
334
|
+
async setBatch(items, options) {
|
|
187
335
|
// The collection procedure takes objects, not tuples
|
|
188
|
-
await this.call("setBatch", { items: items.map(([id, value]) => ({ id, value })) });
|
|
336
|
+
await this.call("setBatch", { items: items.map(([id, value]) => ({ id, value })), ...this.originOf(options) });
|
|
189
337
|
}
|
|
190
|
-
async deleteBatch(ids) {
|
|
191
|
-
return Number(await this.call("deleteBatch", { ids }));
|
|
338
|
+
async deleteBatch(ids, options) {
|
|
339
|
+
return Number(await this.call("deleteBatch", { ids, ...this.originOf(options) }));
|
|
192
340
|
}
|
|
193
341
|
async getBatch(ids) {
|
|
194
342
|
const values = (await this.call("getBatch", { ids })) ?? {};
|
|
@@ -230,8 +378,14 @@ export class ApiStorage {
|
|
|
230
378
|
//
|
|
231
379
|
// ═══ Internal Helpers ═══
|
|
232
380
|
//
|
|
381
|
+
/** The field `origin` of a write input, or no field: a custom service gets no origin. */
|
|
382
|
+
originOf(options) {
|
|
383
|
+
return this.options.sendOrigin && options?.origin !== undefined ? { origin: options.origin } : {};
|
|
384
|
+
}
|
|
233
385
|
/**
|
|
234
|
-
* Make an RPC call via the universal client, with the timeout, the signal and the retries.
|
|
386
|
+
* Make an RPC call via the universal client, with the timeout, the signal and the retries. The
|
|
387
|
+
* wait before retry `n` is `backoffDelay(backoff, n)`, or the wait that the error asks for when
|
|
388
|
+
* it is longer.
|
|
235
389
|
*/
|
|
236
390
|
async call(operation, payload) {
|
|
237
391
|
if (this.closed)
|
|
@@ -250,8 +404,8 @@ export class ApiStorage {
|
|
|
250
404
|
if (attempt >= this.options.attempts || !isRetryable(error) || this.options.signal?.aborted) {
|
|
251
405
|
throw error;
|
|
252
406
|
}
|
|
253
|
-
const delay = this.options.
|
|
254
|
-
await
|
|
407
|
+
const delay = Math.max(backoffDelay(this.options.backoff, attempt, this.options.random), retryAfterOf(error));
|
|
408
|
+
await wait(this.options.clock, delay, this.options.signal, () => error);
|
|
255
409
|
}
|
|
256
410
|
}
|
|
257
411
|
}
|
|
@@ -261,9 +415,9 @@ export class ApiStorage {
|
|
|
261
415
|
if (this.options.signal)
|
|
262
416
|
signals.push(this.options.signal);
|
|
263
417
|
const timer = this.options.timeout > 0 ? new AbortController() : undefined;
|
|
264
|
-
let
|
|
418
|
+
let cancelTimeout;
|
|
265
419
|
if (timer) {
|
|
266
|
-
|
|
420
|
+
cancelTimeout = this.options.clock.after(this.options.timeout, () => timer.abort());
|
|
267
421
|
signals.push(timer.signal);
|
|
268
422
|
}
|
|
269
423
|
const signal = signals.length === 0 ? undefined : signals.length === 1 ? signals[0] : AbortSignal.any(signals);
|
|
@@ -276,8 +430,7 @@ export class ApiStorage {
|
|
|
276
430
|
callOptions.signal = signal;
|
|
277
431
|
const call = this.client.call(method, payload, callOptions);
|
|
278
432
|
return untilAborted(call, signal, () => timer?.signal.aborted ? new Error(`${label} timed out after ${this.options.timeout} ms`) : new Error(`${label} was aborted`)).finally(() => {
|
|
279
|
-
|
|
280
|
-
clearTimeout(timeoutHandle);
|
|
433
|
+
cancelTimeout?.();
|
|
281
434
|
});
|
|
282
435
|
}
|
|
283
436
|
}
|
package/dist/storage/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/storage/api.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/storage/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The push feed of the remote changes of a `HybridStorage` (roadmap CLI-21, CLI-15).
|
|
3
|
+
*
|
|
4
|
+
* A `RemoteChangeFeed` pushes the deltas of the remote. When the `since` of a delta is the cursor
|
|
5
|
+
* of the storage, the storage applies the delta without a read. A gap, a lost event or a new
|
|
6
|
+
* subscription makes the storage read the changes since its cursor. Thus the feed replaces most
|
|
7
|
+
* of the periodic pulls, and the pulls stay correct when the feed loses an event.
|
|
8
|
+
*
|
|
9
|
+
* `EventsChangeFeed` is the feed of the change events of the core collection procedures: the topic
|
|
10
|
+
* `collections.<name>` of `events.subscribe` (`documentation/EVENTS.md`). By default, an event has
|
|
11
|
+
* only the ids and the versions: the feed gives it as a hint, and the storage reads the values
|
|
12
|
+
* with a pull, through the checks of a read. The file imports no module of Node, so it runs in a
|
|
13
|
+
* browser.
|
|
14
|
+
*/
|
|
15
|
+
import type { StorageChanges } from "@procedures/collections";
|
|
16
|
+
import { type RemoteEvent, type SubscribeOptions, type Subscription, type SubscriptionError } from "@procedures/client";
|
|
17
|
+
import type { EventTransport } from "@procedures/client/events";
|
|
18
|
+
/**
|
|
19
|
+
* A delta of the remote that a feed pushes: the changes between two versions of the remote. The
|
|
20
|
+
* changes have the form of `getChangesSince()`.
|
|
21
|
+
*/
|
|
22
|
+
export interface RemoteChanges<T> extends StorageChanges<T> {
|
|
23
|
+
/**
|
|
24
|
+
* The version of the remote before the changes. A storage applies the delta without a read only
|
|
25
|
+
* when this version is its cursor. Without it, the storage reads the changes.
|
|
26
|
+
*/
|
|
27
|
+
readonly since?: string | undefined;
|
|
28
|
+
/** The origin of the writes of the delta, when one origin made all of them. */
|
|
29
|
+
readonly origin?: string | undefined;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* A hint of the remote (roadmap CLI-15): the ids that changed between two versions, without their
|
|
33
|
+
* values. A value reaches a subscriber only through a read, with the checks of a read.
|
|
34
|
+
*/
|
|
35
|
+
export interface RemoteChangeHint {
|
|
36
|
+
/** The version of the remote before the changes, or undefined when the chain of versions starts. */
|
|
37
|
+
readonly since?: string | undefined;
|
|
38
|
+
/** The version of the remote after the changes, or undefined for a remote without a change log. */
|
|
39
|
+
readonly version?: string | undefined;
|
|
40
|
+
/** The ids of the items that changed: the listener reads their values. */
|
|
41
|
+
readonly changed: readonly string[];
|
|
42
|
+
/** The ids that were deleted. A delete needs no value. */
|
|
43
|
+
readonly deleted: readonly string[];
|
|
44
|
+
/** The origin of the writes, when one origin made all of them. */
|
|
45
|
+
readonly origin?: string | undefined;
|
|
46
|
+
}
|
|
47
|
+
/** The functions that get the pushes of a feed. */
|
|
48
|
+
export interface RemoteChangeListener<T> {
|
|
49
|
+
/** This function gets a delta of the remote with its values. The listener applies it, or reads the changes. */
|
|
50
|
+
onChanges(changes: RemoteChanges<T>): void;
|
|
51
|
+
/**
|
|
52
|
+
* This function gets a hint without values. The listener reads the changes, or applies the
|
|
53
|
+
* deletes when no value changed. Without it, a hint goes to `onGap()`.
|
|
54
|
+
*/
|
|
55
|
+
onHint?(hint: RemoteChangeHint): void;
|
|
56
|
+
/**
|
|
57
|
+
* This function tells that the feed can have lost changes: a gap of the events, a lost event, or
|
|
58
|
+
* a new subscription. The listener reads the changes since its cursor.
|
|
59
|
+
*/
|
|
60
|
+
onGap(): void;
|
|
61
|
+
/** This function gets the error that stops the feed. The listener then reads the changes only with its pulls. */
|
|
62
|
+
onError?(error: unknown): void;
|
|
63
|
+
}
|
|
64
|
+
/** A push feed of the changes of a remote storage (roadmap CLI-21). */
|
|
65
|
+
export interface RemoteChangeFeed<T> {
|
|
66
|
+
/**
|
|
67
|
+
* This method starts to push the changes to a listener. Each new subscription calls `onGap()`
|
|
68
|
+
* when it starts, so the listener reads the changes that came before it.
|
|
69
|
+
*
|
|
70
|
+
* @returns The function that stops the pushes. A second use of it does nothing.
|
|
71
|
+
*/
|
|
72
|
+
subscribe(listener: RemoteChangeListener<T>): () => void;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* An object that subscribes to the topics of the event bus of a server: a `Client`, or a
|
|
76
|
+
* `WebSocketTransport` of `@procedures/client`.
|
|
77
|
+
*/
|
|
78
|
+
export interface EventSubscriber {
|
|
79
|
+
subscribe<E = unknown>(topics: string | readonly string[], handler: (data: E, event: RemoteEvent<E>) => void | Promise<void>, options?: SubscribeOptions): Subscription;
|
|
80
|
+
}
|
|
81
|
+
/** The source of the events of an `EventsChangeFeed`: an `EventSubscriber`, or a transport. */
|
|
82
|
+
export type ChangeEventSource = EventSubscriber | EventTransport;
|
|
83
|
+
/** The options of an `EventsChangeFeed`. */
|
|
84
|
+
export interface EventsChangeFeedOptions {
|
|
85
|
+
/** The collection of the core collection procedures. The topic is `collections.<collection>`. */
|
|
86
|
+
collection?: string | undefined;
|
|
87
|
+
/** The topic of the change events, for example with a partition. It comes before `collection`. */
|
|
88
|
+
topic?: string | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* The options of the subscription: the resubscribe rules, the backoff, the clock and the
|
|
91
|
+
* metadata of the call. The feed gives `onSubscribed` and `onError` itself.
|
|
92
|
+
* @default `{ maxAttempts: Infinity }`: the feed resubscribes until it stops
|
|
93
|
+
*/
|
|
94
|
+
subscription?: Omit<SubscribeOptions, "onSubscribed" | "onError"> | undefined;
|
|
95
|
+
/** This function gets the error that ends the subscription, for example `TOPIC_NOT_FOUND`. */
|
|
96
|
+
onError?: ((error: SubscriptionError) => void) | undefined;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* The push feed of the change events of the core collection procedures (roadmap CLI-15). It
|
|
100
|
+
* subscribes to the topic `collections.<name>` with `events.subscribe`. The delivery of the events
|
|
101
|
+
* is at most once, so the feed treats them as hints:
|
|
102
|
+
*
|
|
103
|
+
* - An event without values (the default of the procedures) or with withheld values goes to
|
|
104
|
+
* `onHint()`. The storage reads the values with a pull, so each value passes the checks of a
|
|
105
|
+
* read. A hint with only deletes applies without a pull when `since` is the cursor.
|
|
106
|
+
* - An event with the values of each changed id (the option `values` of the procedures) goes to
|
|
107
|
+
* `onChanges()`. The storage applies it without a read when `since` is its cursor.
|
|
108
|
+
* - A gap of the numbers of the events, a lost event (`dropped`), an event of another form, and
|
|
109
|
+
* each confirmation of the subscription (the first one and each resubscribe) call `onGap()`.
|
|
110
|
+
* - The error that ends the subscription goes to `onError` of the options and of the listener.
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```typescript
|
|
114
|
+
* const users = new HybridStorage(new ApiStorage(client, { collection: "users" }), {
|
|
115
|
+
* versionOf: (user) => user.rev,
|
|
116
|
+
* feed: new EventsChangeFeed(client, { collection: "users" }),
|
|
117
|
+
* });
|
|
118
|
+
* ```
|
|
119
|
+
*/
|
|
120
|
+
export declare class EventsChangeFeed<T> implements RemoteChangeFeed<T> {
|
|
121
|
+
/** The topic of the change events. */
|
|
122
|
+
readonly topic: string;
|
|
123
|
+
private readonly source;
|
|
124
|
+
private readonly subscription;
|
|
125
|
+
private readonly onError;
|
|
126
|
+
/**
|
|
127
|
+
* @param source - A `Client` or a `WebSocketTransport`, or another transport of the client
|
|
128
|
+
* @param options - The collection or the topic, and the options of the subscription
|
|
129
|
+
*/
|
|
130
|
+
constructor(source: ChangeEventSource, options: EventsChangeFeedOptions);
|
|
131
|
+
subscribe(listener: RemoteChangeListener<T>): () => void;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=feed.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../src/storage/feed.ts"],"names":[],"mappings":"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"}
|