@procedures/store 0.47.1 → 0.48.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.
Files changed (44) hide show
  1. package/CHANGELOG.md +41 -13
  2. package/README.md +7 -4
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/browser.d.ts +1 -1
  5. package/dist/browser.d.ts.map +1 -1
  6. package/dist/browser.js +1 -1
  7. package/dist/browser.js.map +1 -1
  8. package/dist/indexeddb/document-storage.d.ts.map +1 -1
  9. package/dist/indexeddb/document-storage.js.map +1 -1
  10. package/dist/indexeddb/idb.d.ts +2 -12
  11. package/dist/indexeddb/idb.d.ts.map +1 -1
  12. package/dist/indexeddb/idb.js +7 -12
  13. package/dist/indexeddb/idb.js.map +1 -1
  14. package/dist/program-store/collection.d.ts.map +1 -1
  15. package/dist/program-store/collection.js.map +1 -1
  16. package/dist/program-store/file.d.ts.map +1 -1
  17. package/dist/program-store/file.js.map +1 -1
  18. package/dist/storage/factory.d.ts +1 -1
  19. package/dist/storage/feed.d.ts +3 -3
  20. package/dist/storage/feed.js +1 -1
  21. package/dist/storage/file-queue.d.ts.map +1 -1
  22. package/dist/storage/file-queue.js.map +1 -1
  23. package/dist/storage/hybrid.d.ts +36 -20
  24. package/dist/storage/hybrid.d.ts.map +1 -1
  25. package/dist/storage/hybrid.js +49 -27
  26. package/dist/storage/hybrid.js.map +1 -1
  27. package/dist/storage/index.d.ts +1 -1
  28. package/dist/storage/index.d.ts.map +1 -1
  29. package/dist/storage/index.js +1 -1
  30. package/dist/storage/index.js.map +1 -1
  31. package/dist/storage/types.d.ts +1 -1
  32. package/dist/storage/types.d.ts.map +1 -1
  33. package/package.json +5 -5
  34. package/src/browser.ts +1 -0
  35. package/src/indexeddb/document-storage.ts +18 -6
  36. package/src/indexeddb/idb.ts +27 -12
  37. package/src/program-store/collection.ts +5 -1
  38. package/src/program-store/file.ts +5 -1
  39. package/src/storage/factory.ts +1 -1
  40. package/src/storage/feed.ts +3 -3
  41. package/src/storage/file-queue.ts +5 -1
  42. package/src/storage/hybrid.ts +96 -43
  43. package/src/storage/index.ts +1 -0
  44. package/src/storage/types.ts +1 -1
@@ -2,7 +2,7 @@
2
2
  * Hybrid Storage Implementation
3
3
  *
4
4
  * A local copy (an `InMemoryStorage`, or the `local` storage that the application gives) in
5
- * front of a remote `CollectionStorage` (often an `ApiStorage`). The storage has four modes, and
5
+ * front of a remote `CollectionStorage` (often an `ApiStorage`). The storage has five modes, and
6
6
  * `setMode()` changes the mode while the storage operates (roadmap R28):
7
7
  *
8
8
  * | Mode | Reads | Writes | Remote calls |
@@ -11,6 +11,7 @@
11
11
  * | `write-through` | the local copy, the remote on a miss | the local copy, then the remote | yes |
12
12
  * | `write-back` | the local copy, the remote on a miss | the local copy and the queue, a timer sends it | yes |
13
13
  * | `remote-only` | the remote | the remote | yes, and no local copy |
14
+ * | `read-only` | the local copy, the remote on a miss | refused with `ReadOnlyError` | reads and pulls only |
14
15
  *
15
16
  * - The queue is durable through the `queueStore` that the application gives.
16
17
  * - A sync asks for the changes since a version when the remote has `getChangesSince`.
@@ -40,9 +41,9 @@
40
41
  * writes over a newer local write.
41
42
  * - The syncs of one storage run one at a time, in their order: the deltas and the hints of the
42
43
  * feed, the pulls, the pushes, the reads after an own write, and the mode switches. Thus a
43
- * remote delta and a full sync never run at the same time (Graph R18).
44
+ * remote delta and a full sync never run at the same time.
44
45
  * - `aroundRemoteApply` runs each apply of the remote changes inside a hook, for example inside a
45
- * span of a trace (graph W8).
46
+ * span of a trace.
46
47
  */
47
48
  import type { CollectionStorage, StorageBatchWriteOptions, StorageItemWriteOptions, StorageMetadata, StorageObserver, StorageWriteOptions } from "@procedures/collections";
48
49
  import { type ListenerErrorHandler } from "@procedures/collections";
@@ -69,8 +70,11 @@ export type WriteStrategy = "write-through" | "write-back";
69
70
  * - `write-through`: each write goes to the local copy, then to the remote.
70
71
  * - `write-back`: each write goes to the local copy and to the queue. A timer sends the queue.
71
72
  * - `remote-only`: each read and each write goes to the remote. The storage keeps no local copy.
73
+ * - `read-only`: the storage refuses each write with `ReadOnlyError` at once, with no change of
74
+ * the local copy, the queue or the remote. Reads, pulls and the feed work as in `write-through`
75
+ * (roadmap CLI-89). This mode sends no write: a queue that it holds waits for a mode that writes.
72
76
  */
73
- export type HybridMode = "local-only" | "write-through" | "write-back" | "remote-only";
77
+ export type HybridMode = "local-only" | "write-through" | "write-back" | "remote-only" | "read-only";
74
78
  /**
75
79
  * Hybrid storage configuration options.
76
80
  */
@@ -144,13 +148,13 @@ export interface HybridStorageOptions {
144
148
  syncInterval?: Duration;
145
149
  /**
146
150
  * The interval of the periodic pull, for example `minutes(1)` (roadmap R28). A pull reads the
147
- * remote changes into the local copy in the modes `write-through` and `write-back`.
151
+ * remote changes into the local copy in the modes `write-through`, `write-back` and `read-only`.
148
152
  * @default no periodic pull
149
153
  */
150
154
  pullInterval?: Duration;
151
155
  /**
152
156
  * Initialize by syncing from remote on construction: send the loaded queue, then read the
153
- * remote. The mode `local-only` makes no remote call.
157
+ * remote. The mode `local-only` makes no remote call. The mode `read-only` sends no queue.
154
158
  * @default true
155
159
  */
156
160
  syncOnInit?: boolean;
@@ -251,7 +255,7 @@ export interface HybridStorageOptions {
251
255
  */
252
256
  feed?: RemoteChangeFeed<any>;
253
257
  /**
254
- * The hook around each apply of the remote changes (graph W8), for example a span of a trace.
258
+ * The hook around each apply of the remote changes, for example a span of a trace.
255
259
  * `RemoteApplyHook` gives the arguments.
256
260
  *
257
261
  * - The hook wraps the apply of each delta of the feed, each hint of the feed that applies, and
@@ -327,7 +331,7 @@ export interface HybridStorageOptions {
327
331
  queryPolicy?: StorageQueryPolicy;
328
332
  }
329
333
  /**
330
- * The cause of an apply of the remote changes (graph W8).
334
+ * The cause of an apply of the remote changes.
331
335
  *
332
336
  * - `"delta"`: a delta of the feed.
333
337
  * - `"hint"`: one or more hints of the feed.
@@ -335,7 +339,7 @@ export interface HybridStorageOptions {
335
339
  * - `"pull"`: a pull of the storage: the timer, `syncFromRemote()`, `sync()` or the first sync.
336
340
  */
337
341
  export type RemoteApplyCause = "delta" | "hint" | "gap" | "pull";
338
- /** The context of an apply of the remote changes, the third argument of `aroundRemoteApply` (graph W8). */
342
+ /** The context of an apply of the remote changes, the third argument of `aroundRemoteApply`. */
339
343
  export interface RemoteApplyContext {
340
344
  /** The cause of the apply. A pull that hints and gaps asked for has the cause `"hint"`. */
341
345
  readonly cause: RemoteApplyCause;
@@ -346,7 +350,7 @@ export interface RemoteApplyContext {
346
350
  readonly hints: readonly RemoteChangeHint[];
347
351
  }
348
352
  /**
349
- * The hook around an apply of the remote changes (graph W8). The hook calls `apply` one time and
353
+ * The hook around an apply of the remote changes. The hook calls `apply` one time and
350
354
  * gives its promise back, for example from inside a span of a trace.
351
355
  *
352
356
  * - The storage waits for the hook and for the apply. A hook that does not settle stops the syncs.
@@ -401,6 +405,16 @@ export declare class QueueFullError extends Error {
401
405
  readonly code = "QUEUE_FULL";
402
406
  constructor(max: number);
403
407
  }
408
+ /**
409
+ * The storage is in `read-only` mode, so it refuses the write (roadmap CLI-89). The local copy, the
410
+ * queue and the remote did not change. `operation` is the name of the refused operation.
411
+ */
412
+ export declare class ReadOnlyError extends Error {
413
+ readonly operation: string;
414
+ readonly name = "ReadOnlyError";
415
+ readonly code = "READ_ONLY";
416
+ constructor(operation: string);
417
+ }
404
418
  /** The remote gave items without a key, so a sync cannot know which local items to keep. */
405
419
  export declare class MissingKeysError extends Error {
406
420
  readonly name = "MissingKeysError";
@@ -447,7 +461,7 @@ export declare class SyncStateError extends Error {
447
461
  constructor(action: "load" | "write", cause: unknown);
448
462
  }
449
463
  /**
450
- * The hook `aroundRemoteApply` did not call `apply` one time (graph W8). The storage applied the
464
+ * The hook `aroundRemoteApply` did not call `apply` one time. The storage applied the
451
465
  * changes one time all the same, and the apply succeeded. `calls` is the number of calls of
452
466
  * `apply` before the hook settled.
453
467
  */
@@ -574,7 +588,7 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
574
588
  private readonly feed;
575
589
  private feedStop;
576
590
  private feedToken;
577
- /** The hook around each apply of the remote changes (graph W8) */
591
+ /** The hook around each apply of the remote changes */
578
592
  private readonly aroundRemoteApply;
579
593
  /** With the hook: the hints that asked for the pull that waits */
580
594
  private readonly joinedHints;
@@ -716,11 +730,11 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
716
730
  private requestPull;
717
731
  /**
718
732
  * This method pulls the changes since the cursor, through the hook `aroundRemoteApply` when the
719
- * options give it (graph W8). Without the hook, it is `pullRemote(false)`, with no other step.
733
+ * options give it. Without the hook, it is `pullRemote(false)`, with no other step.
720
734
  */
721
735
  private pullThrough;
722
736
  /**
723
- * This method runs an apply of the remote changes through the hook (graph W8).
737
+ * This method runs an apply of the remote changes through the hook.
724
738
  *
725
739
  * - The apply runs one time. A second call of `apply` gets the promise of the first call.
726
740
  * - When the hook does not call `apply`, the apply runs after the hook. Thus no change is lost.
@@ -752,7 +766,8 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
752
766
  * - The switch waits for the operations that run. The operations that start later wait for
753
767
  * the switch. Switches and syncs run one at a time.
754
768
  * - A switch to a remote mode sends the queue first. A switch to `local-only` makes no remote
755
- * call: the queue stays until the next remote mode.
769
+ * call: the queue stays until the next remote mode. A switch to `read-only` also sends the
770
+ * queue first, so this mode starts with an empty queue, or the switch fails.
756
771
  * - A switch to `remote-only` drops the local copy, after the queue reached the remote.
757
772
  * - A switch from `local-only` or `remote-only` to a mode with a local copy syncs the local
758
773
  * copy. The reads wait for the sync.
@@ -767,7 +782,7 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
767
782
  private rebuildLocal;
768
783
  /**
769
784
  * This method starts and stops the timers for the mode. The push timer runs in `write-back`, the
770
- * pull timer in `write-through` and `write-back`, and the send of the queue after a failure only
785
+ * pull timer in `write-through`, `write-back` and `read-only`, and the send of the queue after a failure only
771
786
  * in `write-through`. A failed run reports its error in the status, and the next delay grows.
772
787
  */
773
788
  private updateTimers;
@@ -824,6 +839,7 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
824
839
  * One write, in the mode of the storage. The result is the result of the local copy, or of the
825
840
  * remote in `remote-only` mode.
826
841
  *
842
+ * - `read-only`: the write throws `ReadOnlyError`, and nothing changes.
827
843
  * - `remote-only`: the remote only. Its error passes through.
828
844
  * - `write-back` and `local-only`: the local copy and the queue. A full queue refuses the write
829
845
  * before the local change. The queue store keeps the operation before the write ends.
@@ -889,13 +905,13 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
889
905
  /**
890
906
  * Sync all pending offline operations to remote.
891
907
  * Processes queued operations in order. When one fails, it and the later operations stay in
892
- * the queue: the operations that reached the remote are not sent again. In `local-only` mode,
893
- * the call does nothing.
908
+ * the queue: the operations that reached the remote are not sent again. In the modes `local-only`
909
+ * and `read-only`, the call does nothing.
894
910
  */
895
911
  syncToRemote(): Promise<void>;
896
912
  /**
897
913
  * This method sends the queue to the remote (roadmap R28). `ProcedureServer.useStorage` uses it. In
898
- * `local-only` mode, it sends nothing: the queue waits for a remote mode.
914
+ * the modes `local-only` and `read-only`, it sends nothing: the queue waits for a mode that writes.
899
915
  */
900
916
  flush(): Promise<void>;
901
917
  /**
@@ -921,7 +937,7 @@ export declare class HybridStorage<T> implements CollectionStorage<T> {
921
937
  * This method closes the storage.
922
938
  *
923
939
  * - It stops the timers, and waits for the operations, the mode switch and the syncs that run.
924
- * - It sends the queue (not in `local-only` mode). The queue store keeps the operations that
940
+ * - It sends the queue (not in the modes `local-only` and `read-only`). The queue store keeps the operations that
925
941
  * the remote did not take.
926
942
  * - It closes the remote and the local copy. A durable local copy keeps its items.
927
943
  * - After it, each operation rejects. A second `close()` does nothing: it gives the promise of
@@ -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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"}
@@ -2,7 +2,7 @@
2
2
  * Hybrid Storage Implementation
3
3
  *
4
4
  * A local copy (an `InMemoryStorage`, or the `local` storage that the application gives) in
5
- * front of a remote `CollectionStorage` (often an `ApiStorage`). The storage has four modes, and
5
+ * front of a remote `CollectionStorage` (often an `ApiStorage`). The storage has five modes, and
6
6
  * `setMode()` changes the mode while the storage operates (roadmap R28):
7
7
  *
8
8
  * | Mode | Reads | Writes | Remote calls |
@@ -11,6 +11,7 @@
11
11
  * | `write-through` | the local copy, the remote on a miss | the local copy, then the remote | yes |
12
12
  * | `write-back` | the local copy, the remote on a miss | the local copy and the queue, a timer sends it | yes |
13
13
  * | `remote-only` | the remote | the remote | yes, and no local copy |
14
+ * | `read-only` | the local copy, the remote on a miss | refused with `ReadOnlyError` | reads and pulls only |
14
15
  *
15
16
  * - The queue is durable through the `queueStore` that the application gives.
16
17
  * - A sync asks for the changes since a version when the remote has `getChangesSince`.
@@ -40,9 +41,9 @@
40
41
  * writes over a newer local write.
41
42
  * - The syncs of one storage run one at a time, in their order: the deltas and the hints of the
42
43
  * feed, the pulls, the pushes, the reads after an own write, and the mode switches. Thus a
43
- * remote delta and a full sync never run at the same time (Graph R18).
44
+ * remote delta and a full sync never run at the same time.
44
45
  * - `aroundRemoteApply` runs each apply of the remote changes inside a hook, for example inside a
45
- * span of a trace (graph W8).
46
+ * span of a trace.
46
47
  */
47
48
  import { InMemoryStorage, StorageListeners } from "@procedures/collections";
48
49
  import { queryEntries, queryOptionsProblems, selectorProblems, versionConflictsOf, } from "@procedures/client/query";
@@ -50,12 +51,16 @@ import { optionalMs, realClock } from "@procedures/client/browser";
50
51
  import { backoffDelay } from "@mark1russell7/service/backoff";
51
52
  import { MemoryQueueStore, idsOf, withoutId } from "./queue.js";
52
53
  import { isSyncState } from "./sync-state.js";
53
- const MODES = new Set(["local-only", "write-through", "write-back", "remote-only"]);
54
+ const MODES = new Set(["local-only", "write-through", "write-back", "remote-only", "read-only"]);
55
+ /** True for the modes that keep a local copy and read the remote changes into it. */
56
+ const pullsRemote = (mode) => mode === "write-through" || mode === "write-back" || mode === "read-only";
57
+ /** True for the modes that send writes to the remote. */
58
+ const pushesRemote = (mode) => mode !== "local-only" && mode !== "read-only";
54
59
  /** The hints of an apply without hints. */
55
60
  const NO_HINTS = Object.freeze([]);
56
61
  /** The most hints that a pull keeps for the hook. A pull drops the older ones. */
57
62
  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). */
63
+ /** The hint of a delta of the feed: its versions, its ids, its origin and its other fields, without the values. */
59
64
  function hintOfDelta(changes) {
60
65
  return {
61
66
  ...(changes.since !== undefined && { since: changes.since }),
@@ -178,6 +183,19 @@ export class QueueFullError extends Error {
178
183
  super(`The queue of operations is full (${max} operations): the storage refuses the write`);
179
184
  }
180
185
  }
186
+ /**
187
+ * The storage is in `read-only` mode, so it refuses the write (roadmap CLI-89). The local copy, the
188
+ * queue and the remote did not change. `operation` is the name of the refused operation.
189
+ */
190
+ export class ReadOnlyError extends Error {
191
+ operation;
192
+ name = "ReadOnlyError";
193
+ code = "READ_ONLY";
194
+ constructor(operation) {
195
+ super(`The storage is in read-only mode: it refuses the operation ${operation}`);
196
+ this.operation = operation;
197
+ }
198
+ }
181
199
  /** The remote gave items without a key, so a sync cannot know which local items to keep. */
182
200
  export class MissingKeysError extends Error {
183
201
  name = "MissingKeysError";
@@ -237,7 +255,7 @@ export class SyncStateError extends Error {
237
255
  }
238
256
  }
239
257
  /**
240
- * The hook `aroundRemoteApply` did not call `apply` one time (graph W8). The storage applied the
258
+ * The hook `aroundRemoteApply` did not call `apply` one time. The storage applied the
241
259
  * changes one time all the same, and the apply succeeded. `calls` is the number of calls of
242
260
  * `apply` before the hook settled.
243
261
  */
@@ -273,7 +291,7 @@ const defaultKeyOf = (item) => {
273
291
  };
274
292
  function checkMode(mode) {
275
293
  if (typeof mode !== "string" || !MODES.has(mode)) {
276
- throw new TypeError(`Unknown mode ${JSON.stringify(mode)}: use local-only, write-through, write-back or remote-only`);
294
+ throw new TypeError(`Unknown mode ${JSON.stringify(mode)}: use local-only, write-through, write-back, remote-only or read-only`);
277
295
  }
278
296
  return mode;
279
297
  }
@@ -355,7 +373,7 @@ function remoteChangesOf(op, result, existing, origin) {
355
373
  }
356
374
  /**
357
375
  * The versions of the own writes of a `HybridStorage` that no remote change echoed yet (roadmap
358
- * CLI-21, after the EchoLedger of Graph).
376
+ * CLI-21).
359
377
  *
360
378
  * - The ledger keeps the versions of each id in the order of the writes. It records a write when
361
379
  * the local copy takes it, because a stale echo can come before the push.
@@ -572,7 +590,7 @@ export class HybridStorage {
572
590
  feed;
573
591
  feedStop;
574
592
  feedToken = 0;
575
- /** The hook around each apply of the remote changes (graph W8) */
593
+ /** The hook around each apply of the remote changes */
576
594
  aroundRemoteApply;
577
595
  /** With the hook: the hints that asked for the pull that waits */
578
596
  joinedHints = [];
@@ -924,7 +942,7 @@ export class HybridStorage {
924
942
  const feed = this.feed;
925
943
  if (!feed)
926
944
  return;
927
- const wanted = !this.closed && (this.mode === "write-through" || this.mode === "write-back");
945
+ const wanted = !this.closed && pullsRemote(this.mode);
928
946
  if (wanted === (this.feedStop !== undefined))
929
947
  return;
930
948
  const token = ++this.feedToken;
@@ -988,7 +1006,7 @@ export class HybridStorage {
988
1006
  async applyFeed(changes, mark) {
989
1007
  if (this.loadError)
990
1008
  throw this.loadError;
991
- if (this.closed || (this.mode !== "write-through" && this.mode !== "write-back"))
1009
+ if (this.closed || !pullsRemote(this.mode))
992
1010
  return;
993
1011
  if (changes.version === this.cursor)
994
1012
  return;
@@ -1025,7 +1043,7 @@ export class HybridStorage {
1025
1043
  async applyHint(hint, mark) {
1026
1044
  if (this.loadError)
1027
1045
  throw this.loadError;
1028
- if (this.closed || (this.mode !== "write-through" && this.mode !== "write-back"))
1046
+ if (this.closed || !pullsRemote(this.mode))
1029
1047
  return;
1030
1048
  // The remote cannot tell what changed: a full pull
1031
1049
  if (hint.reset === true)
@@ -1073,7 +1091,7 @@ export class HybridStorage {
1073
1091
  return this.track("pull", async () => {
1074
1092
  if (this.loadError)
1075
1093
  throw this.loadError;
1076
- if (this.mode === "write-through" || this.mode === "write-back")
1094
+ if (pullsRemote(this.mode))
1077
1095
  await this.pullThrough(hints.length > 0 ? "hint" : "gap", hints, full);
1078
1096
  });
1079
1097
  }))
@@ -1081,14 +1099,14 @@ export class HybridStorage {
1081
1099
  }
1082
1100
  /**
1083
1101
  * This method pulls the changes since the cursor, through the hook `aroundRemoteApply` when the
1084
- * options give it (graph W8). Without the hook, it is `pullRemote(false)`, with no other step.
1102
+ * options give it. Without the hook, it is `pullRemote(false)`, with no other step.
1085
1103
  */
1086
1104
  pullThrough(cause, hints, full = false) {
1087
1105
  const hook = this.aroundRemoteApply;
1088
1106
  return hook ? this.hookedApply(hook, cause, hints, () => this.pullRemote(full)) : this.pullRemote(full);
1089
1107
  }
1090
1108
  /**
1091
- * This method runs an apply of the remote changes through the hook (graph W8).
1109
+ * This method runs an apply of the remote changes through the hook.
1092
1110
  *
1093
1111
  * - The apply runs one time. A second call of `apply` gets the promise of the first call.
1094
1112
  * - When the hook does not call `apply`, the apply runs after the hook. Thus no change is lost.
@@ -1254,7 +1272,8 @@ export class HybridStorage {
1254
1272
  * - The switch waits for the operations that run. The operations that start later wait for
1255
1273
  * the switch. Switches and syncs run one at a time.
1256
1274
  * - A switch to a remote mode sends the queue first. A switch to `local-only` makes no remote
1257
- * call: the queue stays until the next remote mode.
1275
+ * call: the queue stays until the next remote mode. A switch to `read-only` also sends the
1276
+ * queue first, so this mode starts with an empty queue, or the switch fails.
1258
1277
  * - A switch to `remote-only` drops the local copy, after the queue reached the remote.
1259
1278
  * - A switch from `local-only` or `remote-only` to a mode with a local copy syncs the local
1260
1279
  * copy. The reads wait for the sync.
@@ -1321,7 +1340,7 @@ export class HybridStorage {
1321
1340
  }
1322
1341
  /**
1323
1342
  * This method starts and stops the timers for the mode. The push timer runs in `write-back`, the
1324
- * pull timer in `write-through` and `write-back`, and the send of the queue after a failure only
1343
+ * pull timer in `write-through`, `write-back` and `read-only`, and the send of the queue after a failure only
1325
1344
  * in `write-through`. A failed run reports its error in the status, and the next delay grows.
1326
1345
  */
1327
1346
  updateTimers() {
@@ -1331,7 +1350,7 @@ export class HybridStorage {
1331
1350
  this.pushTimer?.start();
1332
1351
  else
1333
1352
  this.pushTimer?.stop();
1334
- if (this.mode === "write-through" || this.mode === "write-back")
1353
+ if (pullsRemote(this.mode))
1335
1354
  this.pullTimer?.start();
1336
1355
  else
1337
1356
  this.pullTimer?.stop();
@@ -1510,6 +1529,7 @@ export class HybridStorage {
1510
1529
  * One write, in the mode of the storage. The result is the result of the local copy, or of the
1511
1530
  * remote in `remote-only` mode.
1512
1531
  *
1532
+ * - `read-only`: the write throws `ReadOnlyError`, and nothing changes.
1513
1533
  * - `remote-only`: the remote only. Its error passes through.
1514
1534
  * - `write-back` and `local-only`: the local copy and the queue. A full queue refuses the write
1515
1535
  * before the local change. The queue store keeps the operation before the write ends.
@@ -1525,6 +1545,8 @@ export class HybridStorage {
1525
1545
  */
1526
1546
  write(type, data, ids, origin, applyLocal, applyRemote) {
1527
1547
  return this.run(false, async () => {
1548
+ if (this.mode === "read-only")
1549
+ throw new ReadOnlyError(type);
1528
1550
  const op = { type, data, timestamp: Date.now() };
1529
1551
  if (this.mode === "remote-only") {
1530
1552
  const send = async () => {
@@ -1709,7 +1731,7 @@ export class HybridStorage {
1709
1731
  this.deferred.delete(id);
1710
1732
  const mark = this.writeSeq;
1711
1733
  let item = deferred.item;
1712
- if (this.mode === "write-through" || this.mode === "write-back") {
1734
+ if (pullsRemote(this.mode)) {
1713
1735
  try {
1714
1736
  item = await this.remote.get(id);
1715
1737
  this.isOnline = true;
@@ -1782,8 +1804,8 @@ export class HybridStorage {
1782
1804
  /**
1783
1805
  * Sync all pending offline operations to remote.
1784
1806
  * Processes queued operations in order. When one fails, it and the later operations stay in
1785
- * the queue: the operations that reached the remote are not sent again. In `local-only` mode,
1786
- * the call does nothing.
1807
+ * the queue: the operations that reached the remote are not sent again. In the modes `local-only`
1808
+ * and `read-only`, the call does nothing.
1787
1809
  */
1788
1810
  syncToRemote() {
1789
1811
  if (this.closed)
@@ -1792,7 +1814,7 @@ export class HybridStorage {
1792
1814
  }
1793
1815
  /**
1794
1816
  * This method sends the queue to the remote (roadmap R28). `ProcedureServer.useStorage` uses it. In
1795
- * `local-only` mode, it sends nothing: the queue waits for a remote mode.
1817
+ * the modes `local-only` and `read-only`, it sends nothing: the queue waits for a mode that writes.
1796
1818
  */
1797
1819
  flush() {
1798
1820
  return this.syncToRemote();
@@ -1824,7 +1846,7 @@ export class HybridStorage {
1824
1846
  await this.loaded;
1825
1847
  if (this.loadError)
1826
1848
  throw this.loadError;
1827
- if (this.mode === "write-through" || this.mode === "write-back")
1849
+ if (pullsRemote(this.mode))
1828
1850
  await this.pullThrough("pull", NO_HINTS);
1829
1851
  }));
1830
1852
  }
@@ -1834,7 +1856,7 @@ export class HybridStorage {
1834
1856
  await this.loaded;
1835
1857
  if (this.loadError)
1836
1858
  throw this.loadError;
1837
- if (this.mode !== "local-only")
1859
+ if (pushesRemote(this.mode))
1838
1860
  await this.pushQueue();
1839
1861
  }));
1840
1862
  }
@@ -1849,7 +1871,7 @@ export class HybridStorage {
1849
1871
  * This method closes the storage.
1850
1872
  *
1851
1873
  * - It stops the timers, and waits for the operations, the mode switch and the syncs that run.
1852
- * - It sends the queue (not in `local-only` mode). The queue store keeps the operations that
1874
+ * - It sends the queue (not in the modes `local-only` and `read-only`). The queue store keeps the operations that
1853
1875
  * the remote did not take.
1854
1876
  * - It closes the remote and the local copy. A durable local copy keeps its items.
1855
1877
  * - After it, each operation rejects. A second `close()` does nothing: it gives the promise of
@@ -1877,7 +1899,7 @@ export class HybridStorage {
1877
1899
  // After the syncs that run: send the pending operations. The queue store keeps the ones that
1878
1900
  // the remote did not take, and the status gets the failure.
1879
1901
  await this.serialize(async () => {
1880
- if (this.loadError || this.offlineOps.length === 0 || this.mode === "local-only")
1902
+ if (this.loadError || this.offlineOps.length === 0 || !pushesRemote(this.mode))
1881
1903
  return;
1882
1904
  await this.track("push", () => this.pushQueue()).catch(() => undefined);
1883
1905
  });
@@ -2018,7 +2040,7 @@ export class HybridStorage {
2018
2040
  // A failure goes to the status: the reads go on with the local copy
2019
2041
  if (this.offlineOps.length > 0)
2020
2042
  await this.push().catch(() => undefined);
2021
- if (!this.closed && (this.mode === "write-through" || this.mode === "write-back")) {
2043
+ if (!this.closed && pullsRemote(this.mode)) {
2022
2044
  await this.pull().catch(() => undefined);
2023
2045
  }
2024
2046
  }