@procedures/store 0.26.1 → 0.26.2
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 +17 -0
- package/README.md +36 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/browser.d.ts +2 -2
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +1 -1
- package/dist/browser.js.map +1 -1
- package/dist/storage/feed.d.ts +16 -0
- package/dist/storage/feed.d.ts.map +1 -1
- package/dist/storage/feed.js +25 -3
- package/dist/storage/feed.js.map +1 -1
- package/dist/storage/hybrid.d.ts +102 -2
- package/dist/storage/hybrid.d.ts.map +1 -1
- package/dist/storage/hybrid.js +117 -10
- package/dist/storage/hybrid.js.map +1 -1
- package/dist/storage/index.d.ts +2 -2
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +1 -1
- package/dist/storage/index.js.map +1 -1
- package/package.json +4 -4
- package/src/browser.ts +9 -1
- package/src/storage/feed.ts +39 -3
- package/src/storage/hybrid.ts +183 -10
- package/src/storage/index.ts +9 -1
package/dist/browser.d.ts
CHANGED
|
@@ -19,8 +19,8 @@
|
|
|
19
19
|
* An import of this entry registers nothing.
|
|
20
20
|
*/
|
|
21
21
|
export * from "./indexeddb.js";
|
|
22
|
-
export { HybridStorage, PendingWriteError, QueueFullError, MissingKeysError, QueueStoreError, ConflictError, ModeSwitchError, SyncStateError, } from "./storage/hybrid.js";
|
|
23
|
-
export type { HybridStorageOptions, HybridMode, LocalCopyStorage } from "./storage/hybrid.js";
|
|
22
|
+
export { HybridStorage, PendingWriteError, QueueFullError, MissingKeysError, QueueStoreError, ConflictError, ModeSwitchError, SyncStateError, RemoteApplyHookError, } from "./storage/hybrid.js";
|
|
23
|
+
export type { HybridStorageOptions, HybridMode, LocalCopyStorage, RemoteApplyCause, RemoteApplyContext, RemoteApplyHook, } from "./storage/hybrid.js";
|
|
24
24
|
export { TabCoordinator, TabGroup } from "./storage/tab-coordinator.js";
|
|
25
25
|
export type { TabAbortSignalLike, TabChannelFactory, TabChannelLike, TabCollection, TabCollectionOptions, TabCoordinatorOptions, TabGroupOptions, TabLockManagerLike, TabRetryOptions, TabRole, TabSnapshotOptions, } from "./storage/tab-coordinator.js";
|
|
26
26
|
export type { ConflictResolution, SyncError, SyncStatus } from "./storage/types.js";
|
package/dist/browser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,
|
|
1
|
+
{"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,EACd,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,oBAAoB,EACpB,UAAU,EACV,gBAAgB,EAChB,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AACxE,YAAY,EACV,kBAAkB,EAClB,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,OAAO,EACP,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EAAE,kBAAkB,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,YAAY,EACV,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,gBAAgB,EAChB,gBAAgB,EAChB,oBAAoB,EACpB,aAAa,GACd,MAAM,mBAAmB,CAAC"}
|
package/dist/browser.js
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* An import of this entry registers nothing.
|
|
20
20
|
*/
|
|
21
21
|
export * from "./indexeddb.js";
|
|
22
|
-
export { HybridStorage, PendingWriteError, QueueFullError, MissingKeysError, QueueStoreError, ConflictError, ModeSwitchError, SyncStateError, } from "./storage/hybrid.js";
|
|
22
|
+
export { HybridStorage, PendingWriteError, QueueFullError, MissingKeysError, QueueStoreError, ConflictError, ModeSwitchError, SyncStateError, RemoteApplyHookError, } from "./storage/hybrid.js";
|
|
23
23
|
export { TabCoordinator, TabGroup } from "./storage/tab-coordinator.js";
|
|
24
24
|
export { ApiStorage } from "./storage/api.js";
|
|
25
25
|
export { EventsChangeFeed } from "./storage/feed.js";
|
package/dist/browser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,
|
|
1
|
+
{"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,cAAc,EACd,oBAAoB,GACrB,MAAM,qBAAqB,CAAC;AAS7B,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAC;AAexE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/storage/feed.d.ts
CHANGED
|
@@ -27,6 +27,11 @@ export interface RemoteChanges<T> extends StorageChanges<T> {
|
|
|
27
27
|
readonly since?: string | undefined;
|
|
28
28
|
/** The origin of the writes of the delta, when one origin made all of them. */
|
|
29
29
|
readonly origin?: string | undefined;
|
|
30
|
+
/**
|
|
31
|
+
* The other fields of the change event of the delta, for example a `traceparent` (graph W8).
|
|
32
|
+
* `RemoteChangeHint.extra` gives the rules.
|
|
33
|
+
*/
|
|
34
|
+
readonly extra?: Readonly<Record<string, unknown>> | undefined;
|
|
30
35
|
}
|
|
31
36
|
/**
|
|
32
37
|
* A hint of the remote (roadmap CLI-15): the ids that changed between two versions, without their
|
|
@@ -43,6 +48,15 @@ export interface RemoteChangeHint {
|
|
|
43
48
|
readonly deleted: readonly string[];
|
|
44
49
|
/** The origin of the writes, when one origin made all of them. */
|
|
45
50
|
readonly origin?: string | undefined;
|
|
51
|
+
/**
|
|
52
|
+
* The other fields of the change event, for example the `traceparent` of a trace (graph W8).
|
|
53
|
+
*
|
|
54
|
+
* - It has each field that the feed does not read, with its value from the wire.
|
|
55
|
+
* - The fields that the feed reads stay out: `since`, `version`, `changed`, `deleted`, `values`,
|
|
56
|
+
* `withheld` and `origin`. Thus a hint never has a value of an item.
|
|
57
|
+
* - A field without a value stays out. An event without other fields gives no `extra`.
|
|
58
|
+
*/
|
|
59
|
+
readonly extra?: Readonly<Record<string, unknown>> | undefined;
|
|
46
60
|
}
|
|
47
61
|
/** The functions that get the pushes of a feed. */
|
|
48
62
|
export interface RemoteChangeListener<T> {
|
|
@@ -108,6 +122,8 @@ export interface EventsChangeFeedOptions {
|
|
|
108
122
|
* - A gap of the numbers of the events, a lost event (`dropped`), an event of another form, and
|
|
109
123
|
* each confirmation of the subscription (the first one and each resubscribe) call `onGap()`.
|
|
110
124
|
* - The error that ends the subscription goes to `onError` of the options and of the listener.
|
|
125
|
+
* - The other fields of an event, for example a `traceparent`, go to `extra` of the hint or of the
|
|
126
|
+
* delta (graph W8).
|
|
111
127
|
*
|
|
112
128
|
* @example
|
|
113
129
|
* ```typescript
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../src/storage/feed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAEhE;;;GAGG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;IACzD;;;OAGG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"feed.d.ts","sourceRoot":"","sources":["../../src/storage/feed.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/feed.js
CHANGED
|
@@ -21,6 +21,24 @@ function isSubscriber(source) {
|
|
|
21
21
|
const optionalString = (value) => value === undefined || typeof value === "string";
|
|
22
22
|
/** True for a list of ids. */
|
|
23
23
|
const isIds = (value) => Array.isArray(value) && value.every((id) => typeof id === "string");
|
|
24
|
+
/** The fields of a change event that the feed reads. The other fields go to `extra`. */
|
|
25
|
+
const EVENT_FIELDS = new Set(["since", "version", "changed", "deleted", "values", "withheld", "origin"]);
|
|
26
|
+
/**
|
|
27
|
+
* The other fields of an event, or undefined for an event without them. A field without a value
|
|
28
|
+
* stays out. `Object.fromEntries()` makes each field an own field, also a field `__proto__`. An
|
|
29
|
+
* event without other fields makes no array.
|
|
30
|
+
*/
|
|
31
|
+
function extraOf(event) {
|
|
32
|
+
let fields;
|
|
33
|
+
for (const key in event) {
|
|
34
|
+
if (EVENT_FIELDS.has(key) || !Object.hasOwn(event, key))
|
|
35
|
+
continue;
|
|
36
|
+
const value = event[key];
|
|
37
|
+
if (value !== undefined)
|
|
38
|
+
(fields ??= []).push([key, value]);
|
|
39
|
+
}
|
|
40
|
+
return fields && Object.fromEntries(fields);
|
|
41
|
+
}
|
|
24
42
|
/**
|
|
25
43
|
* The delta or the hint of a change event of the collection procedures, or undefined for an
|
|
26
44
|
* event of another form. The event comes over the wire: the function examines each field.
|
|
@@ -28,6 +46,7 @@ const isIds = (value) => Array.isArray(value) && value.every((id) => typeof id =
|
|
|
28
46
|
* - An event with `since`, `version` and a value for each changed id is a delta: `changes`.
|
|
29
47
|
* - Each other event is a hint: an event without values, an event with withheld values (the
|
|
30
48
|
* filter of the host refused them), or a hint of a storage without a change log.
|
|
49
|
+
* - The other fields of the event go to `extra` of the delta or of the hint.
|
|
31
50
|
*/
|
|
32
51
|
function eventOf(data) {
|
|
33
52
|
if (typeof data !== "object" || data === null)
|
|
@@ -50,12 +69,13 @@ function eventOf(data) {
|
|
|
50
69
|
values.push([entry.id, entry.value]);
|
|
51
70
|
}
|
|
52
71
|
}
|
|
53
|
-
const
|
|
72
|
+
const extra = extraOf(event);
|
|
73
|
+
const others = { ...(origin !== undefined && { origin }), ...(extra !== undefined && { extra }) };
|
|
54
74
|
const valued = new Set(values?.map(([id]) => id));
|
|
55
75
|
const withheld = event.withheld ?? [];
|
|
56
76
|
const complete = values !== undefined && withheld.length === 0 && event.changed.every((id) => valued.has(id));
|
|
57
77
|
if (since !== undefined && version !== undefined && complete) {
|
|
58
|
-
return { changes: { since, version, full: false, changed: values, deleted: event.deleted, ...
|
|
78
|
+
return { changes: { since, version, full: false, changed: values, deleted: event.deleted, ...others } };
|
|
59
79
|
}
|
|
60
80
|
return {
|
|
61
81
|
hint: {
|
|
@@ -63,7 +83,7 @@ function eventOf(data) {
|
|
|
63
83
|
...(version !== undefined && { version }),
|
|
64
84
|
changed: event.changed,
|
|
65
85
|
deleted: event.deleted,
|
|
66
|
-
...
|
|
86
|
+
...others,
|
|
67
87
|
},
|
|
68
88
|
};
|
|
69
89
|
}
|
|
@@ -80,6 +100,8 @@ function eventOf(data) {
|
|
|
80
100
|
* - A gap of the numbers of the events, a lost event (`dropped`), an event of another form, and
|
|
81
101
|
* each confirmation of the subscription (the first one and each resubscribe) call `onGap()`.
|
|
82
102
|
* - The error that ends the subscription goes to `onError` of the options and of the listener.
|
|
103
|
+
* - The other fields of an event, for example a `traceparent`, go to `extra` of the hint or of the
|
|
104
|
+
* delta (graph W8).
|
|
83
105
|
*
|
|
84
106
|
* @example
|
|
85
107
|
* ```typescript
|
package/dist/storage/feed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.js","sourceRoot":"","sources":["../../src/storage/feed.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EACL,qBAAqB,EACrB,eAAe,GAKhB,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"feed.js","sourceRoot":"","sources":["../../src/storage/feed.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/hybrid.d.ts
CHANGED
|
@@ -41,6 +41,8 @@
|
|
|
41
41
|
* - The syncs of one storage run one at a time, in their order: the deltas and the hints of the
|
|
42
42
|
* feed, the pulls, the pushes, the reads after an own write, and the mode switches. Thus a
|
|
43
43
|
* remote delta and a full sync never run at the same time (Graph R18).
|
|
44
|
+
* - `aroundRemoteApply` runs each apply of the remote changes inside a hook, for example inside a
|
|
45
|
+
* span of a trace (graph W8).
|
|
44
46
|
*/
|
|
45
47
|
import type { CollectionStorage, StorageBatchWriteOptions, StorageItemWriteOptions, StorageMetadata, StorageObserver, StorageWriteOptions } from "@procedures/collections";
|
|
46
48
|
import { type ListenerErrorHandler } from "@procedures/collections";
|
|
@@ -48,7 +50,7 @@ import { type StorageQueryOptions, type StorageQueryPolicy, type StorageSelector
|
|
|
48
50
|
import { type Clock, type Duration } from "@procedures/client/browser";
|
|
49
51
|
import { type QueueStore } from "./queue.js";
|
|
50
52
|
import type { SyncStatus } from "./types.js";
|
|
51
|
-
import type { RemoteChangeFeed } from "./feed.js";
|
|
53
|
+
import type { RemoteChangeFeed, RemoteChangeHint } from "./feed.js";
|
|
52
54
|
import { type SyncStateStore } from "./sync-state.js";
|
|
53
55
|
/**
|
|
54
56
|
* Conflict resolution strategy.
|
|
@@ -230,6 +232,26 @@ export interface HybridStorageOptions {
|
|
|
230
232
|
* remote delta and a full sync never run at the same time.
|
|
231
233
|
*/
|
|
232
234
|
feed?: RemoteChangeFeed<any>;
|
|
235
|
+
/**
|
|
236
|
+
* The hook around each apply of the remote changes (graph W8), for example a span of a trace.
|
|
237
|
+
* `RemoteApplyHook` gives the arguments.
|
|
238
|
+
*
|
|
239
|
+
* - The hook wraps the apply of each delta of the feed, each hint of the feed that applies, and
|
|
240
|
+
* each pull that the feed or a pull of the storage causes.
|
|
241
|
+
* - A pull of the storage is the timer of `pullInterval`, `syncFromRemote()`, `sync()` and the
|
|
242
|
+
* first sync. The hint of a pull is undefined.
|
|
243
|
+
* - A pull that many hints asked for runs one time. Its hint is the last hint, and
|
|
244
|
+
* `context.hints` has the last 128 of them.
|
|
245
|
+
* - The hook runs inside the chain of the syncs, so it measures the apply, not the wait.
|
|
246
|
+
* - The sync of a mode switch, the reads of the remote and the new reads of the values that an
|
|
247
|
+
* own write deferred are not in the hook.
|
|
248
|
+
* - An error of `apply` or of the hook makes the pull fail, and the status keeps it. The next
|
|
249
|
+
* pull that succeeds clears it.
|
|
250
|
+
* - Only the leader of a `TabCoordinator` or of a `TabGroup` makes a `HybridStorage`, so only
|
|
251
|
+
* the leader runs the hook.
|
|
252
|
+
* - Without the hook, the applies run as before, with the same timing and no other allocation.
|
|
253
|
+
*/
|
|
254
|
+
aroundRemoteApply?: RemoteApplyHook | undefined;
|
|
233
255
|
/**
|
|
234
256
|
* The store of the sync state: the cursor and the base versions (roadmap CLI-21). A new storage
|
|
235
257
|
* with the same store asks the remote only for the changes since the cursor, and it finds the
|
|
@@ -286,6 +308,51 @@ export interface HybridStorageOptions {
|
|
|
286
308
|
*/
|
|
287
309
|
queryPolicy?: StorageQueryPolicy;
|
|
288
310
|
}
|
|
311
|
+
/**
|
|
312
|
+
* The cause of an apply of the remote changes (graph W8).
|
|
313
|
+
*
|
|
314
|
+
* - `"delta"`: a delta of the feed.
|
|
315
|
+
* - `"hint"`: one or more hints of the feed.
|
|
316
|
+
* - `"gap"`: a gap of the feed: a lost event, an event of another form, or a new subscription.
|
|
317
|
+
* - `"pull"`: a pull of the storage: the timer, `syncFromRemote()`, `sync()` or the first sync.
|
|
318
|
+
*/
|
|
319
|
+
export type RemoteApplyCause = "delta" | "hint" | "gap" | "pull";
|
|
320
|
+
/** The context of an apply of the remote changes, the third argument of `aroundRemoteApply` (graph W8). */
|
|
321
|
+
export interface RemoteApplyContext {
|
|
322
|
+
/** The cause of the apply. A pull that hints and gaps asked for has the cause `"hint"`. */
|
|
323
|
+
readonly cause: RemoteApplyCause;
|
|
324
|
+
/**
|
|
325
|
+
* The hints of the apply, in their order of arrival. A delta gives one hint with its ids and no
|
|
326
|
+
* values. A gap and a pull of the storage give no hint. A pull keeps the last 128 hints.
|
|
327
|
+
*/
|
|
328
|
+
readonly hints: readonly RemoteChangeHint[];
|
|
329
|
+
}
|
|
330
|
+
/**
|
|
331
|
+
* The hook around an apply of the remote changes (graph W8). The hook calls `apply` one time and
|
|
332
|
+
* gives its promise back, for example from inside a span of a trace.
|
|
333
|
+
*
|
|
334
|
+
* - The storage waits for the hook and for the apply. A hook that does not settle stops the syncs.
|
|
335
|
+
* - The changes apply one time. A second call of `apply` gets the promise of the first call.
|
|
336
|
+
* - When the hook does not call `apply`, the storage applies the changes after the hook. Thus a
|
|
337
|
+
* hook that fails does not stop the sync.
|
|
338
|
+
* - The sync fails with the error of `apply` first. A hook cannot hide or change it.
|
|
339
|
+
* - Then the sync fails with the error of the hook, and then with `RemoteApplyHookError` when the
|
|
340
|
+
* hook did not call `apply` one time.
|
|
341
|
+
* - The status of the storage keeps the error of the sync, with the operation `"pull"`.
|
|
342
|
+
*
|
|
343
|
+
* @param hint - The last hint of `context.hints`, or undefined when the apply has no hint
|
|
344
|
+
* @param apply - The function that reads the changes and applies them to the local copy
|
|
345
|
+
* @param context - The cause of the apply and its hints
|
|
346
|
+
*
|
|
347
|
+
* @example
|
|
348
|
+
* ```typescript
|
|
349
|
+
* aroundRemoteApply: (hint, apply) => {
|
|
350
|
+
* const traceparent = hint?.extra?.["traceparent"];
|
|
351
|
+
* return runInRemoteTrace(typeof traceparent === "string" ? traceparent : undefined, apply, { name: "realtime.echo" });
|
|
352
|
+
* },
|
|
353
|
+
* ```
|
|
354
|
+
*/
|
|
355
|
+
export type RemoteApplyHook = (hint: RemoteChangeHint | undefined, apply: () => Promise<void>, context: RemoteApplyContext) => Promise<unknown>;
|
|
289
356
|
/**
|
|
290
357
|
* The remote did not take a write of the write-through mode. The write is in the local cache and
|
|
291
358
|
* in the queue, and the storage sends it later (roadmap R2). `cause` is the error of the remote.
|
|
@@ -347,6 +414,17 @@ export declare class SyncStateError extends Error {
|
|
|
347
414
|
readonly code = "SYNC_STATE";
|
|
348
415
|
constructor(action: "load" | "write", cause: unknown);
|
|
349
416
|
}
|
|
417
|
+
/**
|
|
418
|
+
* The hook `aroundRemoteApply` did not call `apply` one time (graph W8). The storage applied the
|
|
419
|
+
* changes one time all the same, and the apply succeeded. `calls` is the number of calls of
|
|
420
|
+
* `apply` before the hook settled.
|
|
421
|
+
*/
|
|
422
|
+
export declare class RemoteApplyHookError extends Error {
|
|
423
|
+
readonly calls: number;
|
|
424
|
+
readonly name = "RemoteApplyHookError";
|
|
425
|
+
readonly code = "REMOTE_APPLY_HOOK";
|
|
426
|
+
constructor(calls: number);
|
|
427
|
+
}
|
|
350
428
|
/**
|
|
351
429
|
* A storage for the local copy of a `HybridStorage` (roadmap R45): a collection storage that gives
|
|
352
430
|
* its entries. A durable one, for example `SqliteStorage` of `@procedures/sqlite`, keeps the local
|
|
@@ -464,6 +542,10 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
|
|
|
464
542
|
private readonly feed;
|
|
465
543
|
private feedStop;
|
|
466
544
|
private feedToken;
|
|
545
|
+
/** The hook around each apply of the remote changes (graph W8) */
|
|
546
|
+
private readonly aroundRemoteApply;
|
|
547
|
+
/** With the hook: the hints that asked for the pull that waits */
|
|
548
|
+
private readonly joinedHints;
|
|
467
549
|
/** True while a pull that a gap asked for waits to start */
|
|
468
550
|
private gapPull;
|
|
469
551
|
/** The stop of the capture of the local copy */
|
|
@@ -591,8 +673,26 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
|
|
|
591
673
|
* hints that come while the pull waits join it.
|
|
592
674
|
*/
|
|
593
675
|
private applyHint;
|
|
594
|
-
/** This method
|
|
676
|
+
/** This method applies the deletes of a hint whose `since` is the cursor and that changed no value. */
|
|
677
|
+
private applyDeletes;
|
|
678
|
+
/**
|
|
679
|
+
* This method asks for a pull after the syncs that run. A request while a pull waits joins it.
|
|
680
|
+
* With `aroundRemoteApply`, the pull keeps the last hints of the requests for the hook.
|
|
681
|
+
*/
|
|
595
682
|
private requestPull;
|
|
683
|
+
/**
|
|
684
|
+
* This method pulls the changes since the cursor, through the hook `aroundRemoteApply` when the
|
|
685
|
+
* options give it (graph W8). Without the hook, it is `pullRemote(false)`, with no other step.
|
|
686
|
+
*/
|
|
687
|
+
private pullThrough;
|
|
688
|
+
/**
|
|
689
|
+
* This method runs an apply of the remote changes through the hook (graph W8).
|
|
690
|
+
*
|
|
691
|
+
* - The apply runs one time. A second call of `apply` gets the promise of the first call.
|
|
692
|
+
* - When the hook does not call `apply`, the apply runs after the hook. Thus no change is lost.
|
|
693
|
+
* - The error of the apply comes first, then the error of the hook, then the misuse of the hook.
|
|
694
|
+
*/
|
|
695
|
+
private hookedApply;
|
|
596
696
|
/** This method loads the sync state: the bases, and the cursor that the load then examines. */
|
|
597
697
|
private loadState;
|
|
598
698
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../src/storage/hybrid.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../src/storage/hybrid.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/hybrid.js
CHANGED
|
@@ -41,6 +41,8 @@
|
|
|
41
41
|
* - The syncs of one storage run one at a time, in their order: the deltas and the hints of the
|
|
42
42
|
* feed, the pulls, the pushes, the reads after an own write, and the mode switches. Thus a
|
|
43
43
|
* remote delta and a full sync never run at the same time (Graph R18).
|
|
44
|
+
* - `aroundRemoteApply` runs each apply of the remote changes inside a hook, for example inside a
|
|
45
|
+
* span of a trace (graph W8).
|
|
44
46
|
*/
|
|
45
47
|
import { InMemoryStorage, StorageListeners } from "@procedures/collections";
|
|
46
48
|
import { queryEntries, queryOptionsProblems, selectorProblems, versionConflictsOf, } from "@procedures/client/query";
|
|
@@ -49,6 +51,21 @@ import { backoffDelay } from "@mark1russell7/service/backoff";
|
|
|
49
51
|
import { MemoryQueueStore, idsOf, withoutId } from "./queue.js";
|
|
50
52
|
import { isSyncState } from "./sync-state.js";
|
|
51
53
|
const MODES = new Set(["local-only", "write-through", "write-back", "remote-only"]);
|
|
54
|
+
/** The hints of an apply without hints. */
|
|
55
|
+
const NO_HINTS = Object.freeze([]);
|
|
56
|
+
/** The most hints that a pull keeps for the hook. A pull drops the older ones. */
|
|
57
|
+
const MAX_JOINED_HINTS = 128;
|
|
58
|
+
/** The hint of a delta of the feed: its versions, its ids, its origin and its other fields, without the values (graph W8). */
|
|
59
|
+
function hintOfDelta(changes) {
|
|
60
|
+
return {
|
|
61
|
+
...(changes.since !== undefined && { since: changes.since }),
|
|
62
|
+
...(changes.version !== undefined && { version: changes.version }),
|
|
63
|
+
changed: changes.changed.map(([id]) => id),
|
|
64
|
+
deleted: [...changes.deleted],
|
|
65
|
+
...(changes.origin !== undefined && { origin: changes.origin }),
|
|
66
|
+
...(changes.extra !== undefined && { extra: changes.extra }),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
52
69
|
/**
|
|
53
70
|
* A timer of a `HybridStorage` on a clock. It runs `work` after its interval. After a failed run,
|
|
54
71
|
* the next delay grows with `backoffDelay` (roadmap CLI-13). The timer does not keep a Node
|
|
@@ -218,6 +235,20 @@ export class SyncStateError extends Error {
|
|
|
218
235
|
super(`The sync state store could not ${action === "load" ? "load the state" : "keep the state"}`, { cause });
|
|
219
236
|
}
|
|
220
237
|
}
|
|
238
|
+
/**
|
|
239
|
+
* The hook `aroundRemoteApply` did not call `apply` one time (graph W8). The storage applied the
|
|
240
|
+
* changes one time all the same, and the apply succeeded. `calls` is the number of calls of
|
|
241
|
+
* `apply` before the hook settled.
|
|
242
|
+
*/
|
|
243
|
+
export class RemoteApplyHookError extends Error {
|
|
244
|
+
calls;
|
|
245
|
+
name = "RemoteApplyHookError";
|
|
246
|
+
code = "REMOTE_APPLY_HOOK";
|
|
247
|
+
constructor(calls) {
|
|
248
|
+
super(`The hook aroundRemoteApply called apply ${calls} times, not 1 time: the storage applied the changes 1 time`);
|
|
249
|
+
this.calls = calls;
|
|
250
|
+
}
|
|
251
|
+
}
|
|
221
252
|
const defaultIsUnavailable = (error) => {
|
|
222
253
|
if (typeof error !== "object" || error === null)
|
|
223
254
|
return true;
|
|
@@ -531,6 +562,10 @@ export class HybridStorage {
|
|
|
531
562
|
feed;
|
|
532
563
|
feedStop;
|
|
533
564
|
feedToken = 0;
|
|
565
|
+
/** The hook around each apply of the remote changes (graph W8) */
|
|
566
|
+
aroundRemoteApply;
|
|
567
|
+
/** With the hook: the hints that asked for the pull that waits */
|
|
568
|
+
joinedHints = [];
|
|
534
569
|
/** True while a pull that a gap asked for waits to start */
|
|
535
570
|
gapPull = false;
|
|
536
571
|
/** The stop of the capture of the local copy */
|
|
@@ -594,6 +629,10 @@ export class HybridStorage {
|
|
|
594
629
|
this.syncOrigin = options.syncOrigin ?? "sync";
|
|
595
630
|
this.observers = new StorageListeners(options.onListenerError);
|
|
596
631
|
this.feed = options.feed;
|
|
632
|
+
if (options.aroundRemoteApply !== undefined && typeof options.aroundRemoteApply !== "function") {
|
|
633
|
+
throw new TypeError("aroundRemoteApply must be a function");
|
|
634
|
+
}
|
|
635
|
+
this.aroundRemoteApply = options.aroundRemoteApply;
|
|
597
636
|
this.stateStore = options.syncState;
|
|
598
637
|
this.bases.tracked = this.stateStore !== undefined;
|
|
599
638
|
this.localGiven = options.local !== undefined;
|
|
@@ -899,7 +938,7 @@ export class HybridStorage {
|
|
|
899
938
|
},
|
|
900
939
|
onGap: () => {
|
|
901
940
|
if (live())
|
|
902
|
-
this.requestPull();
|
|
941
|
+
this.requestPull(undefined);
|
|
903
942
|
},
|
|
904
943
|
onError: (error) => {
|
|
905
944
|
if (live())
|
|
@@ -939,11 +978,18 @@ export class HybridStorage {
|
|
|
939
978
|
return;
|
|
940
979
|
if (changes.version === this.cursor)
|
|
941
980
|
return;
|
|
942
|
-
|
|
981
|
+
const follows = changes.since !== undefined && changes.since === this.cursor;
|
|
982
|
+
const hook = this.aroundRemoteApply;
|
|
983
|
+
if (hook) {
|
|
984
|
+
const apply = follows ? () => this.applyChanges(changes, (id) => this.changedSince(mark, id)) : () => this.pullRemote(false);
|
|
985
|
+
await this.hookedApply(hook, "delta", [hintOfDelta(changes)], apply);
|
|
986
|
+
}
|
|
987
|
+
else if (follows) {
|
|
988
|
+
await this.applyChanges(changes, (id) => this.changedSince(mark, id));
|
|
989
|
+
}
|
|
990
|
+
else {
|
|
943
991
|
await this.pullRemote(false);
|
|
944
|
-
return;
|
|
945
992
|
}
|
|
946
|
-
await this.applyChanges(changes, (id) => this.changedSince(mark, id));
|
|
947
993
|
}
|
|
948
994
|
/**
|
|
949
995
|
* This method takes a hint of the feed: the ids that changed, without their values (roadmap
|
|
@@ -970,30 +1016,91 @@ export class HybridStorage {
|
|
|
970
1016
|
if (hint.version !== undefined && hint.version === this.cursor)
|
|
971
1017
|
return;
|
|
972
1018
|
if (hint.since !== undefined && hint.since === this.cursor && hint.version !== undefined && hint.changed.length === 0) {
|
|
973
|
-
|
|
1019
|
+
const version = hint.version;
|
|
1020
|
+
const hook = this.aroundRemoteApply;
|
|
1021
|
+
if (hook)
|
|
1022
|
+
await this.hookedApply(hook, "hint", [hint], () => this.applyDeletes(version, hint.deleted, mark));
|
|
1023
|
+
else
|
|
1024
|
+
await this.applyDeletes(version, hint.deleted, mark);
|
|
974
1025
|
return;
|
|
975
1026
|
}
|
|
976
|
-
this.requestPull();
|
|
1027
|
+
this.requestPull(hint);
|
|
1028
|
+
}
|
|
1029
|
+
/** This method applies the deletes of a hint whose `since` is the cursor and that changed no value. */
|
|
1030
|
+
applyDeletes(version, deleted, mark) {
|
|
1031
|
+
return this.applyChanges({ version, full: false, changed: [], deleted: [...deleted] }, (id) => this.changedSince(mark, id));
|
|
977
1032
|
}
|
|
978
|
-
/**
|
|
979
|
-
|
|
1033
|
+
/**
|
|
1034
|
+
* This method asks for a pull after the syncs that run. A request while a pull waits joins it.
|
|
1035
|
+
* With `aroundRemoteApply`, the pull keeps the last hints of the requests for the hook.
|
|
1036
|
+
*/
|
|
1037
|
+
requestPull(hint) {
|
|
1038
|
+
if (hint !== undefined && this.aroundRemoteApply) {
|
|
1039
|
+
this.joinedHints.push(hint);
|
|
1040
|
+
if (this.joinedHints.length > MAX_JOINED_HINTS)
|
|
1041
|
+
this.joinedHints.shift();
|
|
1042
|
+
}
|
|
980
1043
|
if (this.gapPull)
|
|
981
1044
|
return;
|
|
982
1045
|
this.gapPull = true;
|
|
983
1046
|
void this.loaded
|
|
984
1047
|
.then(() => this.serialize(() => {
|
|
985
1048
|
this.gapPull = false;
|
|
1049
|
+
const hints = this.joinedHints.length > 0 ? this.joinedHints.splice(0) : NO_HINTS;
|
|
986
1050
|
if (this.closed)
|
|
987
1051
|
return Promise.resolve();
|
|
988
1052
|
return this.track("pull", async () => {
|
|
989
1053
|
if (this.loadError)
|
|
990
1054
|
throw this.loadError;
|
|
991
1055
|
if (this.mode === "write-through" || this.mode === "write-back")
|
|
992
|
-
await this.
|
|
1056
|
+
await this.pullThrough(hints.length > 0 ? "hint" : "gap", hints);
|
|
993
1057
|
});
|
|
994
1058
|
}))
|
|
995
1059
|
.catch(() => undefined);
|
|
996
1060
|
}
|
|
1061
|
+
/**
|
|
1062
|
+
* This method pulls the changes since the cursor, through the hook `aroundRemoteApply` when the
|
|
1063
|
+
* options give it (graph W8). Without the hook, it is `pullRemote(false)`, with no other step.
|
|
1064
|
+
*/
|
|
1065
|
+
pullThrough(cause, hints) {
|
|
1066
|
+
const hook = this.aroundRemoteApply;
|
|
1067
|
+
return hook ? this.hookedApply(hook, cause, hints, () => this.pullRemote(false)) : this.pullRemote(false);
|
|
1068
|
+
}
|
|
1069
|
+
/**
|
|
1070
|
+
* This method runs an apply of the remote changes through the hook (graph W8).
|
|
1071
|
+
*
|
|
1072
|
+
* - The apply runs one time. A second call of `apply` gets the promise of the first call.
|
|
1073
|
+
* - When the hook does not call `apply`, the apply runs after the hook. Thus no change is lost.
|
|
1074
|
+
* - The error of the apply comes first, then the error of the hook, then the misuse of the hook.
|
|
1075
|
+
*/
|
|
1076
|
+
async hookedApply(hook, cause, hints, apply) {
|
|
1077
|
+
let run;
|
|
1078
|
+
let calls = 0;
|
|
1079
|
+
const once = () => {
|
|
1080
|
+
calls++;
|
|
1081
|
+
if (run === undefined) {
|
|
1082
|
+
run = apply();
|
|
1083
|
+
// The method reads the result after the hook: this handler only stops a report of an unhandled rejection
|
|
1084
|
+
run.catch(() => undefined);
|
|
1085
|
+
}
|
|
1086
|
+
return run;
|
|
1087
|
+
};
|
|
1088
|
+
let failure;
|
|
1089
|
+
try {
|
|
1090
|
+
await hook(hints.at(-1), once, { cause, hints });
|
|
1091
|
+
}
|
|
1092
|
+
catch (error) {
|
|
1093
|
+
failure = { error };
|
|
1094
|
+
}
|
|
1095
|
+
// The count of the hook. A call of apply after the hook settled gets the promise of the first call.
|
|
1096
|
+
const called = calls;
|
|
1097
|
+
// A hook that did not call apply: the storage applies the changes itself
|
|
1098
|
+
await (run ?? once());
|
|
1099
|
+
if (failure)
|
|
1100
|
+
throw failure.error;
|
|
1101
|
+
if (called !== 1)
|
|
1102
|
+
throw new RemoteApplyHookError(called);
|
|
1103
|
+
}
|
|
997
1104
|
//
|
|
998
1105
|
// ═══ The sync state (roadmap CLI-21) ═══
|
|
999
1106
|
//
|
|
@@ -1697,7 +1804,7 @@ export class HybridStorage {
|
|
|
1697
1804
|
if (this.loadError)
|
|
1698
1805
|
throw this.loadError;
|
|
1699
1806
|
if (this.mode === "write-through" || this.mode === "write-back")
|
|
1700
|
-
await this.
|
|
1807
|
+
await this.pullThrough("pull", NO_HINTS);
|
|
1701
1808
|
}));
|
|
1702
1809
|
}
|
|
1703
1810
|
/** The push of `syncToRemote()`, after the syncs that run. The status keeps its failure. */
|