@procedures/store 0.7.0 → 0.8.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 +30 -0
- package/README.md +10 -1
- package/dist/.tsbuildinfo +1 -1
- package/dist/storage/api.d.ts +10 -0
- package/dist/storage/api.d.ts.map +1 -1
- package/dist/storage/api.js +30 -0
- package/dist/storage/api.js.map +1 -1
- 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 +50 -2
- package/dist/storage/hybrid.d.ts.map +1 -1
- package/dist/storage/hybrid.js +146 -26
- package/dist/storage/hybrid.js.map +1 -1
- package/package.json +3 -3
- package/src/storage/api.ts +31 -0
- package/src/storage/file-queue.ts +2 -1
- package/src/storage/hybrid.ts +156 -26
package/dist/storage/api.d.ts
CHANGED
|
@@ -37,6 +37,7 @@ export interface ApiStorageOptions {
|
|
|
37
37
|
get?: string;
|
|
38
38
|
getAll?: string;
|
|
39
39
|
entries?: string;
|
|
40
|
+
ids?: string;
|
|
40
41
|
changes?: string;
|
|
41
42
|
find?: string;
|
|
42
43
|
has?: string;
|
|
@@ -82,6 +83,7 @@ export interface ApiStorageOptions {
|
|
|
82
83
|
* - get(id) → `collections.<collection>.get` with `{ id }`
|
|
83
84
|
* - set(id, value) → `collections.<collection>.set` with `{ id, value }`
|
|
84
85
|
* - setBatch(items) → `collections.<collection>.setBatch` with `{ items: [{ id, value }] }`
|
|
86
|
+
* - getIds() → `collections.<collection>.ids` with `{}`, or the entries of an older server
|
|
85
87
|
* - etc.
|
|
86
88
|
*
|
|
87
89
|
* Before, the class expected a `{ data }` envelope and called `<service>.get`: no core
|
|
@@ -105,6 +107,8 @@ export declare class ApiStorage<T> implements CollectionStorage<T> {
|
|
|
105
107
|
private client;
|
|
106
108
|
private options;
|
|
107
109
|
private closed;
|
|
110
|
+
/** True when the server does not know the procedure `ids`: `getIds()` reads the entries */
|
|
111
|
+
private idsUnsupported;
|
|
108
112
|
constructor(client: Client, options: ApiStorageOptions);
|
|
109
113
|
/**
|
|
110
114
|
* The item of an id. For the core collection procedures, the call asks for `{ found, value }`,
|
|
@@ -115,6 +119,12 @@ export declare class ApiStorage<T> implements CollectionStorage<T> {
|
|
|
115
119
|
getAll(): Promise<T[]>;
|
|
116
120
|
/** Every item with its id, from the `entries` procedure of the collection (roadmap R2). */
|
|
117
121
|
getEntries(): Promise<Array<[string, T]>>;
|
|
122
|
+
/**
|
|
123
|
+
* The ids of the items in the order of the entries, from the `ids` procedure of the collection.
|
|
124
|
+
* The values stay on the server. An older server without the procedure answers `NOT_FOUND`.
|
|
125
|
+
* Then this call and each later call read the ids from `getEntries()`.
|
|
126
|
+
*/
|
|
127
|
+
getIds(): Promise<string[]>;
|
|
118
128
|
/**
|
|
119
129
|
* The changes after a version, from the `changes` procedure of the collection (roadmap R28).
|
|
120
130
|
* A server without the procedure answers `NOT_FOUND`, and `HybridStorage` then uses
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/storage/api.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IAEjB;;OAEG;IACH,UAAU,CAAC,EAAE;QACX,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;IAEF;;;OAGG;IACH,OAAO,CAAC,EAAE,QAAQ,CAAC;IAEnB;;;;OAIG;IACH,KAAK,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC;IAEzB;;;OAGG;IACH,UAAU,CAAC,EAAE,QAAQ,CAAC;IAEtB;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC;IAErB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/storage/api.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/api.js
CHANGED
|
@@ -31,6 +31,10 @@ function untilAborted(promise, signal, describe) {
|
|
|
31
31
|
});
|
|
32
32
|
});
|
|
33
33
|
}
|
|
34
|
+
/** True when the server does not know a procedure: an older server without `ids`. */
|
|
35
|
+
function isNotFound(error) {
|
|
36
|
+
return typeof error === "object" && error !== null && error.code === "NOT_FOUND";
|
|
37
|
+
}
|
|
34
38
|
/**
|
|
35
39
|
* True for the output `{ found, value }` of the core procedure `get` with `found: true`: an
|
|
36
40
|
* object with a boolean `found`, and no key other than `found` and `value`.
|
|
@@ -49,6 +53,7 @@ function isFoundOutput(value) {
|
|
|
49
53
|
* - get(id) → `collections.<collection>.get` with `{ id }`
|
|
50
54
|
* - set(id, value) → `collections.<collection>.set` with `{ id, value }`
|
|
51
55
|
* - setBatch(items) → `collections.<collection>.setBatch` with `{ items: [{ id, value }] }`
|
|
56
|
+
* - getIds() → `collections.<collection>.ids` with `{}`, or the entries of an older server
|
|
52
57
|
* - etc.
|
|
53
58
|
*
|
|
54
59
|
* Before, the class expected a `{ data }` envelope and called `<service>.get`: no core
|
|
@@ -72,6 +77,8 @@ export class ApiStorage {
|
|
|
72
77
|
client;
|
|
73
78
|
options;
|
|
74
79
|
closed = false;
|
|
80
|
+
/** True when the server does not know the procedure `ids`: `getIds()` reads the entries */
|
|
81
|
+
idsUnsupported = false;
|
|
75
82
|
constructor(client, options) {
|
|
76
83
|
const service = options.service ?? (options.collection !== undefined ? `collections.${options.collection}` : undefined);
|
|
77
84
|
if (!service) {
|
|
@@ -85,6 +92,7 @@ export class ApiStorage {
|
|
|
85
92
|
get: "get",
|
|
86
93
|
getAll: "getAll",
|
|
87
94
|
entries: "entries",
|
|
95
|
+
ids: "ids",
|
|
88
96
|
changes: "changes",
|
|
89
97
|
find: "find",
|
|
90
98
|
has: "has",
|
|
@@ -139,6 +147,28 @@ export class ApiStorage {
|
|
|
139
147
|
}
|
|
140
148
|
return entries.map((entry) => [entry.id, entry.value]);
|
|
141
149
|
}
|
|
150
|
+
/**
|
|
151
|
+
* The ids of the items in the order of the entries, from the `ids` procedure of the collection.
|
|
152
|
+
* The values stay on the server. An older server without the procedure answers `NOT_FOUND`.
|
|
153
|
+
* Then this call and each later call read the ids from `getEntries()`.
|
|
154
|
+
*/
|
|
155
|
+
async getIds() {
|
|
156
|
+
if (!this.idsUnsupported) {
|
|
157
|
+
try {
|
|
158
|
+
const ids = await this.call("ids", {});
|
|
159
|
+
if (!Array.isArray(ids) || !ids.every((id) => typeof id === "string")) {
|
|
160
|
+
throw new Error(`${this.options.service}.ids did not return an array of ids`);
|
|
161
|
+
}
|
|
162
|
+
return ids;
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
if (!isNotFound(error))
|
|
166
|
+
throw error;
|
|
167
|
+
this.idsUnsupported = true;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
return (await this.getEntries()).map(([id]) => id);
|
|
171
|
+
}
|
|
142
172
|
/**
|
|
143
173
|
* The changes after a version, from the `changes` procedure of the collection (roadmap R28).
|
|
144
174
|
* A server without the procedure answers `NOT_FOUND`, and `HybridStorage` then uses
|
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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-queue.d.ts","sourceRoot":"","sources":["../../src/storage/file-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAqB,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEtF,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE9D,0CAA0C;AAC1C,qBAAa,cAAe,YAAW,UAAU;IAKnC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAJjC,gDAAgD;IAChD,OAAO,CAAC,KAAK,CAAuC;IAEpD,sFAAsF;IACtF,YAAqB,IAAI,EAAE,MAAM,EAAI;IAErC,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"file-queue.d.ts","sourceRoot":"","sources":["../../src/storage/file-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,EAAqB,KAAK,eAAe,EAAE,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AAEtF,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE9D,0CAA0C;AAC1C,qBAAa,cAAe,YAAW,UAAU;IAKnC,QAAQ,CAAC,IAAI,EAAE,MAAM;IAJjC,gDAAgD;IAChD,OAAO,CAAC,KAAK,CAAuC;IAEpD,sFAAsF;IACtF,YAAqB,IAAI,EAAE,MAAM,EAAI;IAErC,IAAI,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC,CA0BjC;IAED,MAAM,CAAC,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAKhD;IAED,OAAO,CAAC,UAAU,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAEpD;IAED,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAErB;IAED,OAAO,CAAC,KAAK;IAab,4DAA4D;YAC9C,KAAK;IAYnB,OAAO,CAAC,MAAM;CAKf"}
|
|
@@ -38,7 +38,8 @@ export class FileQueueStore {
|
|
|
38
38
|
const lines = text.split("\n");
|
|
39
39
|
// The text after the last newline is a part of a line, or empty
|
|
40
40
|
const tail = lines.pop() ?? "";
|
|
41
|
-
|
|
41
|
+
// Each line keeps its number in the file, so an error names the right line after blank lines
|
|
42
|
+
const operations = lines.flatMap((line, index) => (line.trim() === "" ? [] : [this.parse(line, index + 1)]));
|
|
42
43
|
if (tail.trim() !== "") {
|
|
43
44
|
let last;
|
|
44
45
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-queue.js","sourceRoot":"","sources":["../../src/storage/file-queue.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAyC,MAAM,YAAY,CAAC;AAItF,0CAA0C;AAC1C,MAAM,OAAO,cAAc;IAKJ,IAAI;IAJzB,gDAAgD;IACxC,KAAK,GAAqB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEpD,sFAAsF;IACtF,YAAqB,IAAY;oBAAZ,IAAI;IAAW,CAAC;IAErC,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE;YAC5B,IAAI,IAAY,CAAC;YACjB,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,iBAAiB,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YACpE,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;oBAAE,OAAO,EAAE,CAAC;gBAClE,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC/B,gEAAgE;YAChE,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;YAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"file-queue.js","sourceRoot":"","sources":["../../src/storage/file-queue.ts"],"names":[],"mappings":"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"}
|
package/dist/storage/hybrid.d.ts
CHANGED
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
* - Each write takes a copy of the value (`structuredClone`), for the local copy, the queue and the
|
|
20
20
|
* remote. The reads give the copies of the local copy, or of the remote in `remote-only` mode.
|
|
21
21
|
* - A full sync reads the local ids with `getIds()`, so it does not copy each local item.
|
|
22
|
+
* - A pull reads a local item only when the result depends on it. With `versionOf`, the storage
|
|
23
|
+
* knows the version of each local item that it wrote or read.
|
|
22
24
|
* - After `close()`, each operation rejects, and a second `close()` does nothing.
|
|
23
25
|
*/
|
|
24
26
|
import type { CollectionStorage, StorageMetadata } from "@procedures/collections";
|
|
@@ -90,6 +92,9 @@ export interface HybridStorageOptions {
|
|
|
90
92
|
* The version of an item, for example its ETag or a revision field (roadmap R28). The sync
|
|
91
93
|
* compares the versions, not the JSON of the values. A remote change of an id with a queued
|
|
92
94
|
* local write is a conflict.
|
|
95
|
+
*
|
|
96
|
+
* The storage keeps the version of each local item that it wrote or read. A pull then reads a
|
|
97
|
+
* local item only for a conflict, or when it does not know the version of the item.
|
|
93
98
|
*/
|
|
94
99
|
versionOf?: (item: any) => string | undefined;
|
|
95
100
|
/**
|
|
@@ -142,7 +147,8 @@ export interface HybridStorageOptions {
|
|
|
142
147
|
* The storage of the local copy (roadmap R45). A durable storage, for example `SqliteStorage`
|
|
143
148
|
* of `@procedures/sqlite`, keeps the local copy after a restart. Then a new storage in
|
|
144
149
|
* `local-only` mode reads the items of the last run. Give it with a durable `queueStore`.
|
|
145
|
-
* `close()` closes it.
|
|
150
|
+
* `close()` closes it. Only the storage writes to the local copy: with `versionOf`, a pull does
|
|
151
|
+
* not see a write from outside.
|
|
146
152
|
* @default a new `InMemoryStorage`
|
|
147
153
|
*/
|
|
148
154
|
local?: LocalCopyStorage<any>;
|
|
@@ -284,6 +290,16 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
|
|
|
284
290
|
private changesUnsupported;
|
|
285
291
|
/** With `versionOf`: the last known remote version of each id. `null`: the remote has no item. */
|
|
286
292
|
private readonly bases;
|
|
293
|
+
/**
|
|
294
|
+
* With `versionOf`: the version of each local item that the storage wrote or read. A pull does
|
|
295
|
+
* not read an item whose version it knows. The version of an id that is not here is unknown.
|
|
296
|
+
*/
|
|
297
|
+
private readonly localVersions;
|
|
298
|
+
/** The number of the last local write of each id that runs: only that write records a version */
|
|
299
|
+
private readonly localWrites;
|
|
300
|
+
private localWriteCount;
|
|
301
|
+
/** The number of clears of the local copy: a clear cancels the records of the writes that run */
|
|
302
|
+
private localClears;
|
|
287
303
|
private stats;
|
|
288
304
|
constructor(remote: CollectionStorage<T>, options?: HybridStorageOptions);
|
|
289
305
|
/** The mode of the storage now. */
|
|
@@ -433,6 +449,29 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
|
|
|
433
449
|
private initialSync;
|
|
434
450
|
/** This method applies a queued operation to the local copy. */
|
|
435
451
|
private applyToLocal;
|
|
452
|
+
/**
|
|
453
|
+
* This method writes to the local copy. With `versionOf`, it records the version of each item
|
|
454
|
+
* that the write gives, so a pull does not read the item to know its version.
|
|
455
|
+
*
|
|
456
|
+
* - During the write, the versions of its ids are unknown. A failed write keeps them unknown.
|
|
457
|
+
* - Only the last write of an id that started records its version, and a clear that started
|
|
458
|
+
* after the write cancels the record.
|
|
459
|
+
*/
|
|
460
|
+
private writeLocal;
|
|
461
|
+
/** The write of `writeLocal` with `versionOf`. */
|
|
462
|
+
private recordedWrite;
|
|
463
|
+
/**
|
|
464
|
+
* This method reads a local item for a pull. With `versionOf`, it records the version of the item
|
|
465
|
+
* when no local write started or ran during the read.
|
|
466
|
+
*/
|
|
467
|
+
private readLocal;
|
|
468
|
+
/** The version of an item for the record of the local copy, or undefined when `versionOf` fails. */
|
|
469
|
+
private recordedVersion;
|
|
470
|
+
private localSet;
|
|
471
|
+
private localDelete;
|
|
472
|
+
private localSetBatch;
|
|
473
|
+
private localDeleteBatch;
|
|
474
|
+
private localClear;
|
|
436
475
|
/**
|
|
437
476
|
* One pull. `full`: ask for all items (after the local copy was dropped).
|
|
438
477
|
*
|
|
@@ -446,7 +485,16 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
|
|
|
446
485
|
* all entries.
|
|
447
486
|
*/
|
|
448
487
|
private fetchChanges;
|
|
449
|
-
/**
|
|
488
|
+
/**
|
|
489
|
+
* This method applies one remote item. It gives true when the queue changed.
|
|
490
|
+
*
|
|
491
|
+
* The pull reads the local item only when the result depends on it (roadmap R28):
|
|
492
|
+
* - An id with a queued write: only when the remote version changed after the last known remote
|
|
493
|
+
* version. Without versions, the queued write wins, and the pull reads nothing.
|
|
494
|
+
* - An id without a queued write: not when the storage knows the version of the local item.
|
|
495
|
+
* Without versions, the pull compares the JSON of the two items, so it reads the local item.
|
|
496
|
+
* Before, the pull read each local item.
|
|
497
|
+
*/
|
|
450
498
|
private pullItem;
|
|
451
499
|
/** This method applies one remote delete. It gives true when the queue changed. */
|
|
452
500
|
private pullDelete;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hybrid.d.ts","sourceRoot":"","sources":["../../src/storage/hybrid.ts"],"names":[],"mappings":"AAAA
|
|
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
|
@@ -19,6 +19,8 @@
|
|
|
19
19
|
* - Each write takes a copy of the value (`structuredClone`), for the local copy, the queue and the
|
|
20
20
|
* remote. The reads give the copies of the local copy, or of the remote in `remote-only` mode.
|
|
21
21
|
* - A full sync reads the local ids with `getIds()`, so it does not copy each local item.
|
|
22
|
+
* - A pull reads a local item only when the result depends on it. With `versionOf`, the storage
|
|
23
|
+
* knows the version of each local item that it wrote or read.
|
|
22
24
|
* - After `close()`, each operation rejects, and a second `close()` does nothing.
|
|
23
25
|
*/
|
|
24
26
|
import { InMemoryStorage } from "@procedures/collections";
|
|
@@ -186,6 +188,16 @@ export class HybridStorage {
|
|
|
186
188
|
changesUnsupported = false;
|
|
187
189
|
/** With `versionOf`: the last known remote version of each id. `null`: the remote has no item. */
|
|
188
190
|
bases = new Map();
|
|
191
|
+
/**
|
|
192
|
+
* With `versionOf`: the version of each local item that the storage wrote or read. A pull does
|
|
193
|
+
* not read an item whose version it knows. The version of an id that is not here is unknown.
|
|
194
|
+
*/
|
|
195
|
+
localVersions = new Map();
|
|
196
|
+
/** The number of the last local write of each id that runs: only that write records a version */
|
|
197
|
+
localWrites = new Map();
|
|
198
|
+
localWriteCount = 0;
|
|
199
|
+
/** The number of clears of the local copy: a clear cancels the records of the writes that run */
|
|
200
|
+
localClears = 0;
|
|
189
201
|
stats = {
|
|
190
202
|
cacheHits: 0,
|
|
191
203
|
cacheMisses: 0,
|
|
@@ -282,7 +294,7 @@ export class HybridStorage {
|
|
|
282
294
|
async dropLocal() {
|
|
283
295
|
this.clearVersion++;
|
|
284
296
|
this.cursor = undefined;
|
|
285
|
-
await this.
|
|
297
|
+
await this.localClear();
|
|
286
298
|
}
|
|
287
299
|
/** This method makes the local copy from the queue only, before a full sync. */
|
|
288
300
|
async rebuildLocal() {
|
|
@@ -359,7 +371,7 @@ export class HybridStorage {
|
|
|
359
371
|
this.isOnline = true;
|
|
360
372
|
if (this.writeKey(id) === version && !this.hasPendingOp(id)) {
|
|
361
373
|
if (remote !== undefined)
|
|
362
|
-
await this.
|
|
374
|
+
await this.localSet(id, remote);
|
|
363
375
|
this.noteBase(id, remote);
|
|
364
376
|
}
|
|
365
377
|
return remote;
|
|
@@ -423,19 +435,19 @@ export class HybridStorage {
|
|
|
423
435
|
const value = structuredClone(written);
|
|
424
436
|
await this.write("set", { id, value }, [id], async () => {
|
|
425
437
|
this.bump(id);
|
|
426
|
-
await this.
|
|
438
|
+
await this.localSet(id, value);
|
|
427
439
|
}, () => this.remote.set(id, value));
|
|
428
440
|
}
|
|
429
441
|
async delete(id) {
|
|
430
442
|
return this.write("delete", { id }, [id], async () => {
|
|
431
443
|
this.bump(id);
|
|
432
|
-
return this.
|
|
444
|
+
return this.localDelete(id);
|
|
433
445
|
}, () => this.remote.delete(id));
|
|
434
446
|
}
|
|
435
447
|
async clear() {
|
|
436
448
|
await this.write("clear", {}, "*", async () => {
|
|
437
449
|
this.clearVersion++;
|
|
438
|
-
await this.
|
|
450
|
+
await this.localClear();
|
|
439
451
|
}, () => this.remote.clear());
|
|
440
452
|
}
|
|
441
453
|
//
|
|
@@ -447,14 +459,14 @@ export class HybridStorage {
|
|
|
447
459
|
await this.write("setBatch", { items }, items.map(([id]) => id), async () => {
|
|
448
460
|
for (const [id] of items)
|
|
449
461
|
this.bump(id);
|
|
450
|
-
await this.
|
|
462
|
+
await this.localSetBatch(items);
|
|
451
463
|
}, () => this.remote.setBatch(items));
|
|
452
464
|
}
|
|
453
465
|
async deleteBatch(ids) {
|
|
454
466
|
return this.write("deleteBatch", { ids }, ids, async () => {
|
|
455
467
|
for (const id of ids)
|
|
456
468
|
this.bump(id);
|
|
457
|
-
return this.
|
|
469
|
+
return this.localDeleteBatch(ids);
|
|
458
470
|
}, () => this.remote.deleteBatch(ids));
|
|
459
471
|
}
|
|
460
472
|
/**
|
|
@@ -563,9 +575,9 @@ export class HybridStorage {
|
|
|
563
575
|
continue;
|
|
564
576
|
const value = before.get(id);
|
|
565
577
|
if (value === undefined)
|
|
566
|
-
await this.
|
|
578
|
+
await this.localDelete(id);
|
|
567
579
|
else
|
|
568
|
-
await this.
|
|
580
|
+
await this.localSet(id, value);
|
|
569
581
|
}
|
|
570
582
|
};
|
|
571
583
|
}
|
|
@@ -818,22 +830,106 @@ export class HybridStorage {
|
|
|
818
830
|
const data = op.data;
|
|
819
831
|
switch (op.type) {
|
|
820
832
|
case "set":
|
|
821
|
-
await this.
|
|
833
|
+
await this.localSet(data.id, data.value);
|
|
822
834
|
break;
|
|
823
835
|
case "delete":
|
|
824
|
-
await this.
|
|
836
|
+
await this.localDelete(data.id);
|
|
825
837
|
break;
|
|
826
838
|
case "setBatch":
|
|
827
|
-
await this.
|
|
839
|
+
await this.localSetBatch(data.items);
|
|
828
840
|
break;
|
|
829
841
|
case "deleteBatch":
|
|
830
|
-
await this.
|
|
842
|
+
await this.localDeleteBatch(data.ids);
|
|
831
843
|
break;
|
|
832
844
|
case "clear":
|
|
833
|
-
await this.
|
|
845
|
+
await this.localClear();
|
|
834
846
|
break;
|
|
835
847
|
}
|
|
836
848
|
}
|
|
849
|
+
//
|
|
850
|
+
// ═══ The writes of the local copy ═══
|
|
851
|
+
//
|
|
852
|
+
/**
|
|
853
|
+
* This method writes to the local copy. With `versionOf`, it records the version of each item
|
|
854
|
+
* that the write gives, so a pull does not read the item to know its version.
|
|
855
|
+
*
|
|
856
|
+
* - During the write, the versions of its ids are unknown. A failed write keeps them unknown.
|
|
857
|
+
* - Only the last write of an id that started records its version, and a clear that started
|
|
858
|
+
* after the write cancels the record.
|
|
859
|
+
*/
|
|
860
|
+
writeLocal(versionsOf, write) {
|
|
861
|
+
return this.options.versionOf ? this.recordedWrite(versionsOf(), write) : write();
|
|
862
|
+
}
|
|
863
|
+
/** The write of `writeLocal` with `versionOf`. */
|
|
864
|
+
async recordedWrite(versions, write) {
|
|
865
|
+
const clears = this.localClears;
|
|
866
|
+
const numbers = versions.map(([id]) => {
|
|
867
|
+
this.localVersions.delete(id);
|
|
868
|
+
const number = ++this.localWriteCount;
|
|
869
|
+
this.localWrites.set(id, number);
|
|
870
|
+
return number;
|
|
871
|
+
});
|
|
872
|
+
let written = false;
|
|
873
|
+
try {
|
|
874
|
+
const result = await write();
|
|
875
|
+
written = true;
|
|
876
|
+
return result;
|
|
877
|
+
}
|
|
878
|
+
finally {
|
|
879
|
+
versions.forEach(([id, version], index) => {
|
|
880
|
+
if (this.localWrites.get(id) !== numbers[index])
|
|
881
|
+
return;
|
|
882
|
+
this.localWrites.delete(id);
|
|
883
|
+
if (written && version !== undefined && clears === this.localClears)
|
|
884
|
+
this.localVersions.set(id, version);
|
|
885
|
+
});
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
/**
|
|
889
|
+
* This method reads a local item for a pull. With `versionOf`, it records the version of the item
|
|
890
|
+
* when no local write started or ran during the read.
|
|
891
|
+
*/
|
|
892
|
+
async readLocal(id) {
|
|
893
|
+
const writes = this.localWriteCount;
|
|
894
|
+
const clears = this.localClears;
|
|
895
|
+
const item = await this.local.get(id);
|
|
896
|
+
if (item !== undefined &&
|
|
897
|
+
this.options.versionOf &&
|
|
898
|
+
writes === this.localWriteCount &&
|
|
899
|
+
clears === this.localClears &&
|
|
900
|
+
!this.localWrites.has(id)) {
|
|
901
|
+
const version = this.recordedVersion(item);
|
|
902
|
+
if (version !== undefined)
|
|
903
|
+
this.localVersions.set(id, version);
|
|
904
|
+
}
|
|
905
|
+
return item;
|
|
906
|
+
}
|
|
907
|
+
/** The version of an item for the record of the local copy, or undefined when `versionOf` fails. */
|
|
908
|
+
recordedVersion(item) {
|
|
909
|
+
try {
|
|
910
|
+
return this.versionOfItem(item);
|
|
911
|
+
}
|
|
912
|
+
catch {
|
|
913
|
+
return undefined;
|
|
914
|
+
}
|
|
915
|
+
}
|
|
916
|
+
localSet(id, value) {
|
|
917
|
+
return this.writeLocal(() => [[id, this.recordedVersion(value)]], () => this.local.set(id, value));
|
|
918
|
+
}
|
|
919
|
+
localDelete(id) {
|
|
920
|
+
return this.writeLocal(() => [[id, undefined]], () => this.local.delete(id));
|
|
921
|
+
}
|
|
922
|
+
localSetBatch(items) {
|
|
923
|
+
return this.writeLocal(() => items.map(([id, value]) => [id, this.recordedVersion(value)]), () => this.local.setBatch(items));
|
|
924
|
+
}
|
|
925
|
+
localDeleteBatch(ids) {
|
|
926
|
+
return this.writeLocal(() => ids.map((id) => [id, undefined]), () => this.local.deleteBatch(ids));
|
|
927
|
+
}
|
|
928
|
+
localClear() {
|
|
929
|
+
this.localClears++;
|
|
930
|
+
this.localVersions.clear();
|
|
931
|
+
return this.local.clear();
|
|
932
|
+
}
|
|
837
933
|
/**
|
|
838
934
|
* One pull. `full`: ask for all items (after the local copy was dropped).
|
|
839
935
|
*
|
|
@@ -901,14 +997,21 @@ export class HybridStorage {
|
|
|
901
997
|
}
|
|
902
998
|
return { full: true, changed: await this.remoteEntries(), deleted: [] };
|
|
903
999
|
}
|
|
904
|
-
/**
|
|
1000
|
+
/**
|
|
1001
|
+
* This method applies one remote item. It gives true when the queue changed.
|
|
1002
|
+
*
|
|
1003
|
+
* The pull reads the local item only when the result depends on it (roadmap R28):
|
|
1004
|
+
* - An id with a queued write: only when the remote version changed after the last known remote
|
|
1005
|
+
* version. Without versions, the queued write wins, and the pull reads nothing.
|
|
1006
|
+
* - An id without a queued write: not when the storage knows the version of the local item.
|
|
1007
|
+
* Without versions, the pull compares the JSON of the two items, so it reads the local item.
|
|
1008
|
+
* Before, the pull read each local item.
|
|
1009
|
+
*/
|
|
905
1010
|
async pullItem(id, item, changedLocally, conflicts) {
|
|
906
|
-
if (changedLocally(id))
|
|
907
|
-
return false;
|
|
908
|
-
const localItem = await this.local.get(id);
|
|
909
1011
|
if (changedLocally(id))
|
|
910
1012
|
return false;
|
|
911
1013
|
const remoteVersion = this.versionOfItem(item);
|
|
1014
|
+
const knownVersion = remoteVersion === undefined ? undefined : this.localVersions.get(id);
|
|
912
1015
|
if (this.hasPendingOp(id)) {
|
|
913
1016
|
// Without versions, the queued write wins, as before
|
|
914
1017
|
if (remoteVersion === undefined)
|
|
@@ -918,20 +1021,37 @@ export class HybridStorage {
|
|
|
918
1021
|
const base = this.bases.get(id);
|
|
919
1022
|
if (base === undefined || base === remoteVersion)
|
|
920
1023
|
return false;
|
|
1024
|
+
if (knownVersion === remoteVersion) {
|
|
1025
|
+
this.bases.set(id, remoteVersion);
|
|
1026
|
+
return false;
|
|
1027
|
+
}
|
|
1028
|
+
const localItem = await this.readLocal(id);
|
|
1029
|
+
if (changedLocally(id))
|
|
1030
|
+
return false;
|
|
921
1031
|
if (localItem !== undefined && this.versionOfItem(localItem) === remoteVersion) {
|
|
922
1032
|
this.bases.set(id, remoteVersion);
|
|
923
1033
|
return false;
|
|
924
1034
|
}
|
|
925
1035
|
return this.resolvePending(id, localItem, item, remoteVersion, conflicts);
|
|
926
1036
|
}
|
|
1037
|
+
if (knownVersion !== undefined) {
|
|
1038
|
+
// Only the remote changed: it is not a conflict. The version of the local item is known.
|
|
1039
|
+
if (knownVersion !== remoteVersion)
|
|
1040
|
+
await this.localSet(id, item);
|
|
1041
|
+
this.bases.set(id, remoteVersion);
|
|
1042
|
+
return false;
|
|
1043
|
+
}
|
|
1044
|
+
const localItem = await this.readLocal(id);
|
|
1045
|
+
if (changedLocally(id))
|
|
1046
|
+
return false;
|
|
927
1047
|
const localVersion = localItem === undefined ? undefined : this.versionOfItem(localItem);
|
|
928
1048
|
if (localItem === undefined) {
|
|
929
|
-
await this.
|
|
1049
|
+
await this.localSet(id, item);
|
|
930
1050
|
}
|
|
931
1051
|
else if (remoteVersion !== undefined && localVersion !== undefined) {
|
|
932
1052
|
// Only the remote changed: it is not a conflict
|
|
933
1053
|
if (localVersion !== remoteVersion)
|
|
934
|
-
await this.
|
|
1054
|
+
await this.localSet(id, item);
|
|
935
1055
|
}
|
|
936
1056
|
else if (JSON.stringify(localItem) !== JSON.stringify(item)) {
|
|
937
1057
|
// Conflict - resolve according to strategy
|
|
@@ -941,7 +1061,7 @@ export class HybridStorage {
|
|
|
941
1061
|
return false;
|
|
942
1062
|
}
|
|
943
1063
|
const resolved = this.resolveConflict(localItem, item);
|
|
944
|
-
await this.
|
|
1064
|
+
await this.localSet(id, resolved);
|
|
945
1065
|
this.stats.conflicts++;
|
|
946
1066
|
}
|
|
947
1067
|
if (remoteVersion !== undefined)
|
|
@@ -953,7 +1073,7 @@ export class HybridStorage {
|
|
|
953
1073
|
if (changedLocally(id))
|
|
954
1074
|
return false;
|
|
955
1075
|
if (!this.hasPendingOp(id)) {
|
|
956
|
-
await this.
|
|
1076
|
+
await this.localDelete(id);
|
|
957
1077
|
if (this.options.versionOf)
|
|
958
1078
|
this.bases.set(id, null);
|
|
959
1079
|
return false;
|
|
@@ -963,7 +1083,7 @@ export class HybridStorage {
|
|
|
963
1083
|
const base = this.bases.get(id);
|
|
964
1084
|
if (!this.options.versionOf || base === undefined || base === null)
|
|
965
1085
|
return false;
|
|
966
|
-
const localItem = await this.
|
|
1086
|
+
const localItem = await this.readLocal(id);
|
|
967
1087
|
if (changedLocally(id))
|
|
968
1088
|
return false;
|
|
969
1089
|
if (localItem === undefined) {
|
|
@@ -976,7 +1096,7 @@ export class HybridStorage {
|
|
|
976
1096
|
case "remote":
|
|
977
1097
|
if (!this.dropQueued(id))
|
|
978
1098
|
break;
|
|
979
|
-
await this.
|
|
1099
|
+
await this.localDelete(id);
|
|
980
1100
|
this.bases.set(id, null);
|
|
981
1101
|
return true;
|
|
982
1102
|
case "error":
|
|
@@ -1000,7 +1120,7 @@ export class HybridStorage {
|
|
|
1000
1120
|
// The remote value replaces the queued write. A queued clear cannot lose one id.
|
|
1001
1121
|
if (!this.dropQueued(id))
|
|
1002
1122
|
break;
|
|
1003
|
-
await this.
|
|
1123
|
+
await this.localSet(id, remoteItem);
|
|
1004
1124
|
this.bases.set(id, remoteVersion);
|
|
1005
1125
|
return true;
|
|
1006
1126
|
case "merge": {
|
|
@@ -1009,7 +1129,7 @@ export class HybridStorage {
|
|
|
1009
1129
|
const merged = this.resolveConflict(localItem, remoteItem);
|
|
1010
1130
|
if (!this.dropQueued(id))
|
|
1011
1131
|
break;
|
|
1012
|
-
await this.
|
|
1132
|
+
await this.localSet(id, merged);
|
|
1013
1133
|
this.bases.set(id, remoteVersion);
|
|
1014
1134
|
this.offlineOps.push({ type: "set", data: { id, value: merged }, timestamp: Date.now(), base: [[id, remoteVersion]] });
|
|
1015
1135
|
return true;
|