@procedures/store 0.48.2 → 0.49.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 +26 -0
- package/README.md +41 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/storage/hybrid.d.ts +49 -4
- package/dist/storage/hybrid.d.ts.map +1 -1
- package/dist/storage/hybrid.js +162 -20
- package/dist/storage/hybrid.js.map +1 -1
- package/dist/storage/queue.d.ts +11 -0
- package/dist/storage/queue.d.ts.map +1 -1
- package/dist/storage/queue.js +20 -0
- package/dist/storage/queue.js.map +1 -1
- package/package.json +4 -4
- package/src/storage/hybrid.ts +178 -27
- package/src/storage/queue.ts +27 -0
package/dist/storage/hybrid.d.ts
CHANGED
|
@@ -110,9 +110,13 @@ export interface HybridStorageOptions {
|
|
|
110
110
|
*
|
|
111
111
|
* @param local - Local version
|
|
112
112
|
* @param remote - Remote version
|
|
113
|
+
* @param base - The remote value that the queued writes of the id changed (roadmap CLI-109). A
|
|
114
|
+
* three-way merge uses it. `null`: the remote had no item. The value is undefined when the
|
|
115
|
+
* storage does not know it. Examples are a storage with no `versionOf`, an operation of an
|
|
116
|
+
* older version, and a write after a restart, before a sync.
|
|
113
117
|
* @returns Merged value
|
|
114
118
|
*/
|
|
115
|
-
mergeFn?: <T>(local: T, remote: T) => T;
|
|
119
|
+
mergeFn?: <T>(local: T, remote: T, base: T | null | undefined) => T;
|
|
116
120
|
/**
|
|
117
121
|
* The key of a remote item, for the local cache. The default reads a string `id` field. Give
|
|
118
122
|
* a function for items with another key, for example `getSerializedKey` for procedure records.
|
|
@@ -197,6 +201,13 @@ export interface HybridStorageOptions {
|
|
|
197
201
|
* `UNAUTHORIZED` is not a refusal by default, because a new token can let the write through.
|
|
198
202
|
*/
|
|
199
203
|
isRefusal?: (error: unknown) => boolean;
|
|
204
|
+
/**
|
|
205
|
+
* True when an error of the remote tells that a write is larger than its limit (roadmap CLI-108). A batch with this
|
|
206
|
+
* error, or with a refusal, goes again as one write for each id. So only the bad write leaves the queue. A write of one
|
|
207
|
+
* id with this error leaves the queue with the reason `too-large`, and the writes behind it go on. The default: the
|
|
208
|
+
* code `PAYLOAD_TOO_LARGE`.
|
|
209
|
+
*/
|
|
210
|
+
isTooLarge?: (error: unknown) => boolean;
|
|
200
211
|
/**
|
|
201
212
|
* This hook gets each queued write that the remote refused (roadmap O67). The local copy of its
|
|
202
213
|
* ids gets the remote values again, except for an id that a later queued write changes. An
|
|
@@ -410,13 +421,16 @@ export interface DroppedWrite {
|
|
|
410
421
|
* The last queued write gives the value when an id has more than one.
|
|
411
422
|
*/
|
|
412
423
|
value: unknown;
|
|
413
|
-
/**
|
|
414
|
-
|
|
424
|
+
/**
|
|
425
|
+
* The cause: the policy took the remote value, the remote deleted the item, or the remote refused the write. The
|
|
426
|
+
* cause `too-large` tells that the write was larger than the limit of the remote (roadmap CLI-108).
|
|
427
|
+
*/
|
|
428
|
+
reason: "conflict" | "remote-delete" | "refused" | "too-large";
|
|
415
429
|
/** The sync that dropped the write. */
|
|
416
430
|
during: "pull" | "push";
|
|
417
431
|
/** The remote value that replaced the write, for the reason `conflict`. */
|
|
418
432
|
remote?: unknown;
|
|
419
|
-
/** The error of the remote, for the
|
|
433
|
+
/** The error of the remote, for the reasons `refused` and `too-large`. */
|
|
420
434
|
error?: unknown;
|
|
421
435
|
}
|
|
422
436
|
/**
|
|
@@ -597,6 +611,13 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
|
|
|
597
611
|
private changesUnsupported;
|
|
598
612
|
/** With `versionOf`: the last known remote version of each id. `null`: the remote has no item. */
|
|
599
613
|
private readonly bases;
|
|
614
|
+
/**
|
|
615
|
+
* With `versionOf`, the policy `merge` and `capture: "observe"`, this map holds the remote value at the known remote
|
|
616
|
+
* version of each id (roadmap CLI-109). A captured change has no value before it, so its base value comes from here.
|
|
617
|
+
* A write of the storage reads its base value from the local copy, and needs no map. A new version of an id drops
|
|
618
|
+
* its value. A sync or a send gives the value of the new version.
|
|
619
|
+
*/
|
|
620
|
+
private readonly baseValues;
|
|
600
621
|
/**
|
|
601
622
|
* With `versionOf`: the version of each local item that the storage wrote or read. A pull does
|
|
602
623
|
* not read an item whose version it knows. The version of an id that is not here is unknown.
|
|
@@ -628,6 +649,10 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
|
|
|
628
649
|
private resetPull;
|
|
629
650
|
/** The stop of the capture of the local copy */
|
|
630
651
|
private readonly stopCapture;
|
|
652
|
+
/** True with `capture: "observe"`. */
|
|
653
|
+
private readonly capturing;
|
|
654
|
+
/** True when a queued write keeps its base value: with `versionOf` and the policy `merge` (roadmap CLI-109). */
|
|
655
|
+
private readonly keepsBaseValues;
|
|
631
656
|
/** The captured changes that came before the end of the load. Undefined after the load. */
|
|
632
657
|
private captured;
|
|
633
658
|
/** With `versionOf`: the versions of the own writes that wait for their echo */
|
|
@@ -1106,6 +1131,21 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
|
|
|
1106
1131
|
private versionOfItem;
|
|
1107
1132
|
/** This method records the remote version of an id that the storage read. */
|
|
1108
1133
|
private noteBase;
|
|
1134
|
+
/** This method keeps the remote value of the remote version of an id, for a captured change (roadmap CLI-109). */
|
|
1135
|
+
private noteBaseValue;
|
|
1136
|
+
/**
|
|
1137
|
+
* This method gives a write of the storage the base value of each id that has no queued write (roadmap CLI-109).
|
|
1138
|
+
* The value is the local item before the write, when that item has the base version. The local copy then holds the
|
|
1139
|
+
* remote value of a sync or a send.
|
|
1140
|
+
*/
|
|
1141
|
+
private fillBaseValues;
|
|
1142
|
+
/** The remote value at a remote version of an id: `null` for no item, and undefined when the storage does not know it. */
|
|
1143
|
+
private baseValueAt;
|
|
1144
|
+
/**
|
|
1145
|
+
* The remote value that the queued writes of an id changed: the base value of the first queued operation of the id.
|
|
1146
|
+
* The value is undefined when that operation has none, or when it is a clear.
|
|
1147
|
+
*/
|
|
1148
|
+
private queuedBaseValue;
|
|
1109
1149
|
/** This method records the remote versions after a write reached the remote. */
|
|
1110
1150
|
private noteRemoteWrite;
|
|
1111
1151
|
/**
|
|
@@ -1114,6 +1154,11 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
|
|
|
1114
1154
|
* loads the queue after a restart takes the version of the first operation of each id.
|
|
1115
1155
|
*/
|
|
1116
1156
|
private attachBase;
|
|
1157
|
+
/**
|
|
1158
|
+
* This method gives the remote value at the version of `expectedBase`, for the policy `merge` (roadmap CLI-109). It
|
|
1159
|
+
* is the value of an older queued operation of the id. Without one, it is the kept value of the known remote version.
|
|
1160
|
+
*/
|
|
1161
|
+
private expectedBaseValue;
|
|
1117
1162
|
/** The remote version of an id after the queued operations, or undefined when it is not known. */
|
|
1118
1163
|
private expectedBase;
|
|
1119
1164
|
private hasPendingOp;
|
|
@@ -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
|
@@ -49,7 +49,7 @@ import { InMemoryStorage, StorageListeners } from "@procedures/collections";
|
|
|
49
49
|
import { queryEntries, queryOptionsProblems, selectorProblems, versionConflictsOf, } from "@procedures/client/query";
|
|
50
50
|
import { optionalMs, realClock } from "@procedures/client/browser";
|
|
51
51
|
import { backoffDelay } from "@mark1russell7/service/backoff";
|
|
52
|
-
import { MemoryQueueStore, idsOf, withoutId } from "./queue.js";
|
|
52
|
+
import { MemoryQueueStore, idsOf, singlesOf, withoutId } from "./queue.js";
|
|
53
53
|
import { isSyncState } from "./sync-state.js";
|
|
54
54
|
const MODES = new Set(["local-only", "write-through", "write-back", "remote-only", "read-only"]);
|
|
55
55
|
/** True for the modes that keep a local copy and read the remote changes into it. */
|
|
@@ -283,6 +283,8 @@ const defaultIsRefusal = (error) => {
|
|
|
283
283
|
const code = error?.code;
|
|
284
284
|
return typeof code === "string" && REFUSAL_CODES.has(code);
|
|
285
285
|
};
|
|
286
|
+
/** The default of `isTooLarge`: an error with the code `PAYLOAD_TOO_LARGE` (roadmap CLI-108). */
|
|
287
|
+
const defaultIsTooLarge = (error) => error?.code === "PAYLOAD_TOO_LARGE";
|
|
286
288
|
/** True when a remote does not know a procedure: an older server without `changes`. */
|
|
287
289
|
const isNotFound = (error) => typeof error === "object" && error !== null && error.code === "NOT_FOUND";
|
|
288
290
|
const defaultKeyOf = (item) => {
|
|
@@ -469,16 +471,20 @@ class BaseVersions extends Map {
|
|
|
469
471
|
changed = new Set();
|
|
470
472
|
/** True when the storage has a sync state store */
|
|
471
473
|
tracked = false;
|
|
474
|
+
/** This function gets each change of a version, after the change. */
|
|
475
|
+
onChange;
|
|
472
476
|
set(id, version) {
|
|
473
477
|
super.set(id, version);
|
|
474
478
|
if (this.tracked)
|
|
475
479
|
this.changed.add(id);
|
|
480
|
+
this.onChange?.(id, version);
|
|
476
481
|
return this;
|
|
477
482
|
}
|
|
478
483
|
delete(id) {
|
|
479
484
|
const had = super.delete(id);
|
|
480
485
|
if (had && this.tracked)
|
|
481
486
|
this.changed.add(id);
|
|
487
|
+
this.onChange?.(id, undefined);
|
|
482
488
|
return had;
|
|
483
489
|
}
|
|
484
490
|
}
|
|
@@ -569,6 +575,13 @@ export class HybridStorage {
|
|
|
569
575
|
changesUnsupported = false;
|
|
570
576
|
/** With `versionOf`: the last known remote version of each id. `null`: the remote has no item. */
|
|
571
577
|
bases = new BaseVersions();
|
|
578
|
+
/**
|
|
579
|
+
* With `versionOf`, the policy `merge` and `capture: "observe"`, this map holds the remote value at the known remote
|
|
580
|
+
* version of each id (roadmap CLI-109). A captured change has no value before it, so its base value comes from here.
|
|
581
|
+
* A write of the storage reads its base value from the local copy, and needs no map. A new version of an id drops
|
|
582
|
+
* its value. A sync or a send gives the value of the new version.
|
|
583
|
+
*/
|
|
584
|
+
baseValues = new Map();
|
|
572
585
|
/**
|
|
573
586
|
* With `versionOf`: the version of each local item that the storage wrote or read. A pull does
|
|
574
587
|
* not read an item whose version it knows. The version of an id that is not here is unknown.
|
|
@@ -600,6 +613,10 @@ export class HybridStorage {
|
|
|
600
613
|
resetPull = false;
|
|
601
614
|
/** The stop of the capture of the local copy */
|
|
602
615
|
stopCapture;
|
|
616
|
+
/** True with `capture: "observe"`. */
|
|
617
|
+
capturing;
|
|
618
|
+
/** True when a queued write keeps its base value: with `versionOf` and the policy `merge` (roadmap CLI-109). */
|
|
619
|
+
keepsBaseValues;
|
|
603
620
|
/** The captured changes that came before the end of the load. Undefined after the load. */
|
|
604
621
|
captured = [];
|
|
605
622
|
/** With `versionOf`: the versions of the own writes that wait for their echo */
|
|
@@ -653,6 +670,7 @@ export class HybridStorage {
|
|
|
653
670
|
offlineQueue: options.offlineQueue ?? true,
|
|
654
671
|
isUnavailable: options.isUnavailable ?? defaultIsUnavailable,
|
|
655
672
|
isRefusal: options.isRefusal ?? defaultIsRefusal,
|
|
673
|
+
isTooLarge: options.isTooLarge ?? defaultIsTooLarge,
|
|
656
674
|
...(options.onRefused !== undefined && { onRefused: options.onRefused }),
|
|
657
675
|
...(options.onDropped !== undefined && { onDropped: options.onDropped }),
|
|
658
676
|
};
|
|
@@ -669,6 +687,10 @@ export class HybridStorage {
|
|
|
669
687
|
this.aroundRemoteApply = options.aroundRemoteApply;
|
|
670
688
|
this.stateStore = options.syncState;
|
|
671
689
|
this.bases.tracked = this.stateStore !== undefined;
|
|
690
|
+
this.bases.onChange = (id, version) => {
|
|
691
|
+
if (this.baseValues.get(id)?.version !== version)
|
|
692
|
+
this.baseValues.delete(id);
|
|
693
|
+
};
|
|
672
694
|
this.localGiven = options.local !== undefined;
|
|
673
695
|
// The timers on the clock, with the backoff after a failure (roadmap CLI-13)
|
|
674
696
|
const factor = options.backoff?.factor ?? 2;
|
|
@@ -705,6 +727,8 @@ export class HybridStorage {
|
|
|
705
727
|
const capture = options.capture ?? "none";
|
|
706
728
|
if (capture !== "none" && capture !== "observe")
|
|
707
729
|
throw new TypeError(`Unknown capture ${JSON.stringify(capture)}: use none or observe`);
|
|
730
|
+
this.capturing = capture === "observe";
|
|
731
|
+
this.keepsBaseValues = this.options.conflictResolution === "merge" && this.options.versionOf !== undefined;
|
|
708
732
|
if (capture === "observe") {
|
|
709
733
|
if (!this.local.observe)
|
|
710
734
|
throw new TypeError('capture: "observe" needs a local copy with observe()');
|
|
@@ -857,6 +881,10 @@ export class HybridStorage {
|
|
|
857
881
|
op.base = previous.base;
|
|
858
882
|
else
|
|
859
883
|
delete op.base;
|
|
884
|
+
if (previous.baseValues)
|
|
885
|
+
op.baseValues = previous.baseValues;
|
|
886
|
+
else
|
|
887
|
+
delete op.baseValues;
|
|
860
888
|
this.offlineOps[index] = op;
|
|
861
889
|
}
|
|
862
890
|
else {
|
|
@@ -1581,6 +1609,7 @@ export class HybridStorage {
|
|
|
1581
1609
|
this.ensureQueueRoom(op);
|
|
1582
1610
|
this.attachBase(op);
|
|
1583
1611
|
const undo = await this.snapshot(ids, origin);
|
|
1612
|
+
this.fillBaseValues(op, undo.before);
|
|
1584
1613
|
const result = await applyLocal();
|
|
1585
1614
|
this.noteOwnWrite(op);
|
|
1586
1615
|
await this.enqueue(op, undo);
|
|
@@ -1620,6 +1649,7 @@ export class HybridStorage {
|
|
|
1620
1649
|
// The status shows the queue and the connection. The caller gets PendingWriteError.
|
|
1621
1650
|
this.isOnline = false;
|
|
1622
1651
|
this.attachBase(op);
|
|
1652
|
+
this.fillBaseValues(op, undo.before);
|
|
1623
1653
|
await this.enqueue(op, undo);
|
|
1624
1654
|
this.scheduleDrain();
|
|
1625
1655
|
throw new PendingWriteError(type, error);
|
|
@@ -1767,7 +1797,7 @@ export class HybridStorage {
|
|
|
1767
1797
|
// The versions after the write: this write adds one to each id (clear adds to clearVersion)
|
|
1768
1798
|
const versions = new Map(touched.map((id) => [id, (this.writeVersions.get(id) ?? 0) + (ids === "*" ? 0 : 1)]));
|
|
1769
1799
|
const clearVersion = this.clearVersion + (ids === "*" ? 1 : 0);
|
|
1770
|
-
|
|
1800
|
+
const undo = async () => {
|
|
1771
1801
|
if (this.clearVersion !== clearVersion)
|
|
1772
1802
|
return;
|
|
1773
1803
|
for (const id of touched) {
|
|
@@ -1780,6 +1810,7 @@ export class HybridStorage {
|
|
|
1780
1810
|
await this.localSet(id, value, origin);
|
|
1781
1811
|
}
|
|
1782
1812
|
};
|
|
1813
|
+
return Object.assign(undo, { before });
|
|
1783
1814
|
}
|
|
1784
1815
|
//
|
|
1785
1816
|
// ═══ Sync Operations ═══
|
|
@@ -2297,6 +2328,7 @@ export class HybridStorage {
|
|
|
2297
2328
|
return false;
|
|
2298
2329
|
if (knownVersion === remoteVersion) {
|
|
2299
2330
|
this.bases.set(id, remoteVersion);
|
|
2331
|
+
this.noteBaseValue(id, remoteVersion, item);
|
|
2300
2332
|
return false;
|
|
2301
2333
|
}
|
|
2302
2334
|
const localItem = await this.readLocal(id);
|
|
@@ -2304,6 +2336,7 @@ export class HybridStorage {
|
|
|
2304
2336
|
return false;
|
|
2305
2337
|
if (localItem !== undefined && this.versionOfItem(localItem) === remoteVersion) {
|
|
2306
2338
|
this.bases.set(id, remoteVersion);
|
|
2339
|
+
this.noteBaseValue(id, remoteVersion, item);
|
|
2307
2340
|
return false;
|
|
2308
2341
|
}
|
|
2309
2342
|
return this.resolvePending(id, localItem, item, remoteVersion, conflicts, "pull");
|
|
@@ -2313,6 +2346,7 @@ export class HybridStorage {
|
|
|
2313
2346
|
if (knownVersion !== remoteVersion)
|
|
2314
2347
|
await this.localSet(id, item, this.syncOrigin);
|
|
2315
2348
|
this.bases.set(id, remoteVersion);
|
|
2349
|
+
this.noteBaseValue(id, remoteVersion, item);
|
|
2316
2350
|
return false;
|
|
2317
2351
|
}
|
|
2318
2352
|
const localItem = await this.readLocal(id);
|
|
@@ -2338,8 +2372,10 @@ export class HybridStorage {
|
|
|
2338
2372
|
await this.localSet(id, resolved, this.syncOrigin);
|
|
2339
2373
|
this.stats.conflicts++;
|
|
2340
2374
|
}
|
|
2341
|
-
if (remoteVersion !== undefined)
|
|
2375
|
+
if (remoteVersion !== undefined) {
|
|
2342
2376
|
this.bases.set(id, remoteVersion);
|
|
2377
|
+
this.noteBaseValue(id, remoteVersion, item);
|
|
2378
|
+
}
|
|
2343
2379
|
return false;
|
|
2344
2380
|
}
|
|
2345
2381
|
/** This method applies one remote delete. It gives true when the queue changed. */
|
|
@@ -2403,17 +2439,20 @@ export class HybridStorage {
|
|
|
2403
2439
|
break;
|
|
2404
2440
|
await this.localSet(id, remoteItem, this.syncOrigin);
|
|
2405
2441
|
this.bases.set(id, remoteVersion);
|
|
2442
|
+
this.noteBaseValue(id, remoteVersion, remoteItem);
|
|
2406
2443
|
await this.reportDropped({ id, value: localItem, reason: "conflict", during, remote: remoteItem });
|
|
2407
2444
|
return true;
|
|
2408
2445
|
case "merge": {
|
|
2409
2446
|
if (localItem === undefined)
|
|
2410
2447
|
break;
|
|
2411
|
-
const merged = this.resolveConflict(localItem, remoteItem);
|
|
2448
|
+
const merged = this.resolveConflict(localItem, remoteItem, this.queuedBaseValue(id));
|
|
2412
2449
|
if (!this.dropQueued(id))
|
|
2413
2450
|
break;
|
|
2414
2451
|
await this.localSet(id, merged, this.syncOrigin);
|
|
2415
2452
|
this.bases.set(id, remoteVersion);
|
|
2416
|
-
this.
|
|
2453
|
+
this.noteBaseValue(id, remoteVersion, remoteItem);
|
|
2454
|
+
// The merged write changes the remote item of this conflict: that item is its base
|
|
2455
|
+
this.offlineOps.push({ type: "set", data: { id, value: merged }, timestamp: Date.now(), base: [[id, remoteVersion]], baseValues: [[id, remoteItem]] });
|
|
2417
2456
|
return true;
|
|
2418
2457
|
}
|
|
2419
2458
|
case "error":
|
|
@@ -2494,6 +2533,8 @@ export class HybridStorage {
|
|
|
2494
2533
|
async pushQueue() {
|
|
2495
2534
|
this.pushing = true;
|
|
2496
2535
|
let sent = 0;
|
|
2536
|
+
// True when a batch went again as one write for each id: the queue store gets the new operations
|
|
2537
|
+
let split = false;
|
|
2497
2538
|
// The operations whose conflicts this push resolved once (roadmap CLI-16)
|
|
2498
2539
|
const resolved = new Set();
|
|
2499
2540
|
try {
|
|
@@ -2524,18 +2565,25 @@ export class HybridStorage {
|
|
|
2524
2565
|
}
|
|
2525
2566
|
continue;
|
|
2526
2567
|
}
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
this.options.isRefusal(error)) {
|
|
2531
|
-
// The remote refused the write: it leaves the queue, and the push goes on (roadmap O67)
|
|
2568
|
+
const tooLarge = conflicts === undefined && !(error instanceof QueueStoreError) && this.options.isTooLarge(error);
|
|
2569
|
+
const refused = tooLarge || (conflicts === undefined && !(error instanceof QueueStoreError) && !this.options.isUnavailable(error) && this.options.isRefusal(error));
|
|
2570
|
+
if (refused) {
|
|
2532
2571
|
this.isOnline = true;
|
|
2572
|
+
const singles = singlesOf(op);
|
|
2573
|
+
if (singles.length > 1 && this.offlineOps[0] === op) {
|
|
2574
|
+
// A batch goes again as one write for each id, so only the bad write leaves the queue (roadmap CLI-108)
|
|
2575
|
+
this.offlineOps.splice(0, 1, ...singles);
|
|
2576
|
+
split = true;
|
|
2577
|
+
this.storeDirty = true;
|
|
2578
|
+
continue;
|
|
2579
|
+
}
|
|
2580
|
+
// The remote refused the write: it leaves the queue, and the push goes on (roadmap O67)
|
|
2533
2581
|
if (this.offlineOps[0] === op) {
|
|
2534
2582
|
this.offlineOps.shift();
|
|
2535
2583
|
sent++;
|
|
2536
2584
|
this.storeDirty = true;
|
|
2537
2585
|
}
|
|
2538
|
-
await this.refuseQueued(op, error);
|
|
2586
|
+
await this.refuseQueued(op, error, tooLarge ? "too-large" : "refused");
|
|
2539
2587
|
continue;
|
|
2540
2588
|
}
|
|
2541
2589
|
// This operation and the later ones stay queued
|
|
@@ -2555,7 +2603,7 @@ export class HybridStorage {
|
|
|
2555
2603
|
}
|
|
2556
2604
|
finally {
|
|
2557
2605
|
this.pushing = false;
|
|
2558
|
-
if (sent > 0) {
|
|
2606
|
+
if (sent > 0 || split) {
|
|
2559
2607
|
// The store keeps sent operations, and the status gets the failure. A later direct write
|
|
2560
2608
|
// repairs the store first.
|
|
2561
2609
|
await this.persistAll().catch(() => undefined);
|
|
@@ -2567,7 +2615,7 @@ export class HybridStorage {
|
|
|
2567
2615
|
* gets the remote values, and the hook `onRefused` gets the refusal. A refused clear asks for a
|
|
2568
2616
|
* full pull.
|
|
2569
2617
|
*/
|
|
2570
|
-
async refuseQueued(op, error) {
|
|
2618
|
+
async refuseQueued(op, error, reason) {
|
|
2571
2619
|
const ids = idsOf(op);
|
|
2572
2620
|
const all = ids.includes("*");
|
|
2573
2621
|
let restored = false;
|
|
@@ -2585,7 +2633,7 @@ export class HybridStorage {
|
|
|
2585
2633
|
}
|
|
2586
2634
|
for (const id of all ? ["*"] : ids) {
|
|
2587
2635
|
const written = this.writtenValue(op, id);
|
|
2588
|
-
await this.reportDropped({ id, value: written ? written.value : undefined, reason
|
|
2636
|
+
await this.reportDropped({ id, value: written ? written.value : undefined, reason, during: "push", error });
|
|
2589
2637
|
}
|
|
2590
2638
|
}
|
|
2591
2639
|
/**
|
|
@@ -2649,10 +2697,57 @@ export class HybridStorage {
|
|
|
2649
2697
|
return;
|
|
2650
2698
|
}
|
|
2651
2699
|
const version = this.versionOfItem(item);
|
|
2652
|
-
if (version === undefined)
|
|
2700
|
+
if (version === undefined) {
|
|
2653
2701
|
this.bases.delete(id);
|
|
2654
|
-
|
|
2655
|
-
|
|
2702
|
+
return;
|
|
2703
|
+
}
|
|
2704
|
+
this.bases.set(id, version);
|
|
2705
|
+
this.noteBaseValue(id, version, item);
|
|
2706
|
+
}
|
|
2707
|
+
/** This method keeps the remote value of the remote version of an id, for a captured change (roadmap CLI-109). */
|
|
2708
|
+
noteBaseValue(id, version, value) {
|
|
2709
|
+
if (!this.keepsBaseValues || !this.capturing)
|
|
2710
|
+
return;
|
|
2711
|
+
if (this.bases.get(id) === version)
|
|
2712
|
+
this.baseValues.set(id, { version, value });
|
|
2713
|
+
}
|
|
2714
|
+
/**
|
|
2715
|
+
* This method gives a write of the storage the base value of each id that has no queued write (roadmap CLI-109).
|
|
2716
|
+
* The value is the local item before the write, when that item has the base version. The local copy then holds the
|
|
2717
|
+
* remote value of a sync or a send.
|
|
2718
|
+
*/
|
|
2719
|
+
fillBaseValues(op, before) {
|
|
2720
|
+
if (!this.keepsBaseValues || !op.base)
|
|
2721
|
+
return;
|
|
2722
|
+
const values = op.baseValues ? [...op.baseValues] : [];
|
|
2723
|
+
const known = new Set(values.map(([id]) => id));
|
|
2724
|
+
for (const [id, version] of op.base) {
|
|
2725
|
+
if (known.has(id) || version === null)
|
|
2726
|
+
continue;
|
|
2727
|
+
const value = before.get(id);
|
|
2728
|
+
if (value !== undefined && this.versionOfItem(value) === version)
|
|
2729
|
+
values.push([id, value]);
|
|
2730
|
+
}
|
|
2731
|
+
if (values.length > 0)
|
|
2732
|
+
op.baseValues = values;
|
|
2733
|
+
}
|
|
2734
|
+
/** The remote value at a remote version of an id: `null` for no item, and undefined when the storage does not know it. */
|
|
2735
|
+
baseValueAt(id, version) {
|
|
2736
|
+
if (version === null)
|
|
2737
|
+
return null;
|
|
2738
|
+
const known = this.baseValues.get(id);
|
|
2739
|
+
return known !== undefined && known.version === version ? known.value : undefined;
|
|
2740
|
+
}
|
|
2741
|
+
/**
|
|
2742
|
+
* The remote value that the queued writes of an id changed: the base value of the first queued operation of the id.
|
|
2743
|
+
* The value is undefined when that operation has none, or when it is a clear.
|
|
2744
|
+
*/
|
|
2745
|
+
queuedBaseValue(id) {
|
|
2746
|
+
const op = this.offlineOps.find((queued) => {
|
|
2747
|
+
const ids = idsOf(queued);
|
|
2748
|
+
return ids.includes(id) || ids.includes("*");
|
|
2749
|
+
});
|
|
2750
|
+
return op?.baseValues?.find(([valueId]) => valueId === id)?.[1];
|
|
2656
2751
|
}
|
|
2657
2752
|
/** This method records the remote versions after a write reached the remote. */
|
|
2658
2753
|
noteRemoteWrite(op) {
|
|
@@ -2689,15 +2784,56 @@ export class HybridStorage {
|
|
|
2689
2784
|
if (!this.options.versionOf)
|
|
2690
2785
|
return;
|
|
2691
2786
|
const base = [];
|
|
2787
|
+
const values = [];
|
|
2692
2788
|
for (const id of idsOf(op)) {
|
|
2693
2789
|
if (id === "*")
|
|
2694
2790
|
continue;
|
|
2695
2791
|
const version = this.expectedBase(id);
|
|
2696
2792
|
if (version !== undefined)
|
|
2697
2793
|
base.push([id, version]);
|
|
2794
|
+
const value = this.expectedBaseValue(id, version);
|
|
2795
|
+
if (value !== undefined)
|
|
2796
|
+
values.push([id, value]);
|
|
2698
2797
|
}
|
|
2699
2798
|
if (base.length > 0)
|
|
2700
2799
|
op.base = base;
|
|
2800
|
+
if (values.length > 0)
|
|
2801
|
+
op.baseValues = values;
|
|
2802
|
+
}
|
|
2803
|
+
/**
|
|
2804
|
+
* This method gives the remote value at the version of `expectedBase`, for the policy `merge` (roadmap CLI-109). It
|
|
2805
|
+
* is the value of an older queued operation of the id. Without one, it is the kept value of the known remote version.
|
|
2806
|
+
*/
|
|
2807
|
+
expectedBaseValue(id, version) {
|
|
2808
|
+
if (!this.keepsBaseValues || version === undefined)
|
|
2809
|
+
return undefined;
|
|
2810
|
+
for (let index = this.offlineOps.length - 1; index >= 0; index--) {
|
|
2811
|
+
const op = this.offlineOps[index];
|
|
2812
|
+
const data = op.data;
|
|
2813
|
+
switch (op.type) {
|
|
2814
|
+
case "set":
|
|
2815
|
+
if (data.id === id)
|
|
2816
|
+
return data.value;
|
|
2817
|
+
break;
|
|
2818
|
+
case "delete":
|
|
2819
|
+
if (data.id === id)
|
|
2820
|
+
return null;
|
|
2821
|
+
break;
|
|
2822
|
+
case "setBatch": {
|
|
2823
|
+
const item = (data.items ?? []).findLast(([itemId]) => itemId === id);
|
|
2824
|
+
if (item)
|
|
2825
|
+
return item[1];
|
|
2826
|
+
break;
|
|
2827
|
+
}
|
|
2828
|
+
case "deleteBatch":
|
|
2829
|
+
if ((data.ids ?? []).includes(id))
|
|
2830
|
+
return null;
|
|
2831
|
+
break;
|
|
2832
|
+
case "clear":
|
|
2833
|
+
return null;
|
|
2834
|
+
}
|
|
2835
|
+
}
|
|
2836
|
+
return this.baseValueAt(id, version);
|
|
2701
2837
|
}
|
|
2702
2838
|
/** The remote version of an id after the queued operations, or undefined when it is not known. */
|
|
2703
2839
|
expectedBase(id) {
|
|
@@ -2738,7 +2874,7 @@ export class HybridStorage {
|
|
|
2738
2874
|
/**
|
|
2739
2875
|
* Resolve conflict between local and remote versions.
|
|
2740
2876
|
*/
|
|
2741
|
-
resolveConflict(local, remote) {
|
|
2877
|
+
resolveConflict(local, remote, base) {
|
|
2742
2878
|
switch (this.options.conflictResolution) {
|
|
2743
2879
|
case "local":
|
|
2744
2880
|
return local;
|
|
@@ -2748,7 +2884,7 @@ export class HybridStorage {
|
|
|
2748
2884
|
if (!this.options.mergeFn) {
|
|
2749
2885
|
throw new Error("Merge function required for conflict resolution strategy 'merge'");
|
|
2750
2886
|
}
|
|
2751
|
-
return this.options.mergeFn(local, remote);
|
|
2887
|
+
return this.options.mergeFn(local, remote, base);
|
|
2752
2888
|
case "error":
|
|
2753
2889
|
throw new Error(`Conflict detected between local and remote versions`);
|
|
2754
2890
|
default:
|
|
@@ -2776,6 +2912,10 @@ export class HybridStorage {
|
|
|
2776
2912
|
op.base = previous.base;
|
|
2777
2913
|
else
|
|
2778
2914
|
delete op.base;
|
|
2915
|
+
if (previous.baseValues)
|
|
2916
|
+
op.baseValues = previous.baseValues;
|
|
2917
|
+
else
|
|
2918
|
+
delete op.baseValues;
|
|
2779
2919
|
this.offlineOps[index] = op;
|
|
2780
2920
|
rollback = () => {
|
|
2781
2921
|
const at = this.offlineOps.indexOf(op);
|
|
@@ -3021,8 +3161,10 @@ export class HybridStorage {
|
|
|
3021
3161
|
if (remoteVersion === undefined || echo) {
|
|
3022
3162
|
if (remoteVersion === undefined)
|
|
3023
3163
|
this.bases.delete(id);
|
|
3024
|
-
else
|
|
3164
|
+
else {
|
|
3025
3165
|
this.bases.set(id, remoteVersion);
|
|
3166
|
+
this.noteBaseValue(id, remoteVersion, remoteItem);
|
|
3167
|
+
}
|
|
3026
3168
|
if (echo)
|
|
3027
3169
|
echoes.add(id);
|
|
3028
3170
|
continue;
|