@procedures/collections 0.4.0 → 0.6.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.
@@ -15,8 +15,12 @@
15
15
  *
16
16
  * describeCollectionStorageContract("MyStorage", { create: () => new MyStorage() }, { describe, it });
17
17
  * ```
18
+ *
19
+ * The suite has no option that hides a difference of a storage. Each storage keeps copies, keeps
20
+ * a stored `null`, gives a delta in the order of the last change of each id, and rejects each
21
+ * operation after `close()`.
18
22
  */
19
- import { byId, holds, rejects, same, show } from "./check.js";
23
+ import { holds, rejects, same, show } from "./check.js";
20
24
  const item = (id, n, tags) => (tags === undefined ? { id, n } : { id, n, tags });
21
25
  const ids = (items) => items.map((value) => value.id);
22
26
  /** True for a value with a `then` function. */
@@ -54,12 +58,11 @@ function seeded(seed) {
54
58
  }
55
59
  /**
56
60
  * This function gives the cases of the contract for a storage. Each case makes its own storage
57
- * with `options.create`. A case for an optional method (`getEntries`, `getChangesSince`, `flush`,
58
- * `getMetadata`) skips a storage without the method.
61
+ * with `options.create`. A case for an optional method (`getEntries`, `getIds`, `getChangesSince`,
62
+ * `flush`, `getMetadata`) skips a storage without the method.
59
63
  */
60
64
  export function collectionStorageContract(options) {
61
65
  const create = () => options.create();
62
- const nullValues = options.nullValues ?? true;
63
66
  const cases = [];
64
67
  const add = (name, run) => {
65
68
  cases.push({ name, run });
@@ -99,6 +102,8 @@ export function collectionStorageContract(options) {
99
102
  same(await storage.deleteBatch(["a", "b"]), 0, "deleteBatch() of missing ids");
100
103
  if (storage.getEntries)
101
104
  same(await storage.getEntries(), [], "getEntries() of an empty storage");
105
+ if (storage.getIds)
106
+ same(await storage.getIds(), [], "getIds() of an empty storage");
102
107
  }));
103
108
  add("set() stores an item, and a second set() of the id replaces it", () => withStorage(create, async (storage) => {
104
109
  await storage.set("a", item("a", 1, ["x"]));
@@ -141,6 +146,23 @@ export function collectionStorageContract(options) {
141
146
  same(ids(await storage.find(() => true)), ["a", "b", "c"], "find() keeps the order of the entries");
142
147
  if (storage.getEntries)
143
148
  same(await storage.getEntries(), expected, "getEntries() keeps the order of the entries");
149
+ if (storage.getIds)
150
+ same(await storage.getIds(), ["a", "b", "c"], "getIds() keeps the order of the entries");
151
+ }));
152
+ add("getIds() gives the ids of the entries in their order, as a new array", (context) => withStorage(create, async (storage) => {
153
+ if (lacks(storage, "getIds", context))
154
+ return;
155
+ await storage.setBatch([["c", item("c", 3)], ["a", item("a", 1)], ["b", item("b", 2)]]);
156
+ await storage.delete("a");
157
+ await storage.set("a", item("a", 10));
158
+ const first = await storage.getIds();
159
+ same(first, ["c", "b", "a"], "getIds() after a delete and a new set() of an id");
160
+ first.splice(0);
161
+ same(await storage.getIds(), ["c", "b", "a"], "getIds() after a change of an earlier result");
162
+ if (storage.getEntries)
163
+ same(await storage.getIds(), (await storage.getEntries()).map(([id]) => id), "getIds() and the ids of getEntries()");
164
+ await storage.clear();
165
+ same(await storage.getIds(), [], "getIds() after clear()");
144
166
  }));
145
167
  add("find() gives the matching items in order, and an error of the predicate rejects the promise", () => withStorage(create, async (storage) => {
146
168
  await storage.setBatch([["a", item("a", 1)], ["b", item("b", 2)], ["c", item("c", 3)], ["d", item("d", 4)]]);
@@ -177,23 +199,33 @@ export function collectionStorageContract(options) {
177
199
  same(await storage.has("z"), false, "has() of an id that only a result got");
178
200
  same(await storage.getBatch(["a"]), new Map([["a", item("a", 1)]]), "getBatch() after a change of a result");
179
201
  }));
180
- if (options.copies) {
181
- add("the storage keeps copies: a change of a written or a read value does not change the item", () => withStorage(create, async (storage) => {
182
- const value = item("a", 1, ["x"]);
183
- await storage.set("a", value);
184
- value.n = 99;
185
- value.tags.push("changed after set");
186
- const read = (await storage.get("a"));
187
- same(read, item("a", 1, ["x"]), "get() after a change of the value that set() took");
188
- read.n = 98;
189
- read.tags.push("changed after get");
190
- (await storage.getAll())[0].n = 97;
191
- (await storage.getBatch(["a"])).get("a").n = 96;
192
- (await storage.find(() => true))[0].n = 95;
193
- same(await storage.get("a"), item("a", 1, ["x"]), "get() after changes of the read values");
194
- }));
195
- }
196
- add(`the storage keeps JSON values${nullValues ? ", also null" : ""}`, () => withStorage(create, async (typed) => {
202
+ add("the storage keeps copies: a change of a written or a read value does not change the item", () => withStorage(create, async (storage) => {
203
+ const value = item("a", 1, ["x"]);
204
+ await storage.set("a", value);
205
+ value.n = 99;
206
+ value.tags.push("changed after set");
207
+ const batch = item("b", 2, ["y"]);
208
+ await storage.setBatch([["b", batch]]);
209
+ batch.tags.push("changed after setBatch");
210
+ const read = (await storage.get("a"));
211
+ same(read, item("a", 1, ["x"]), "get() after a change of the value that set() took");
212
+ same(await storage.get("b"), item("b", 2, ["y"]), "get() after a change of the value that setBatch() took");
213
+ read.n = 98;
214
+ read.tags.push("changed after get");
215
+ (await storage.getAll())[0].n = 97;
216
+ (await storage.getBatch(["a"])).get("a").n = 96;
217
+ (await storage.find((found) => {
218
+ found.tags?.push("changed in the predicate");
219
+ return true;
220
+ }))[0].n = 95;
221
+ if (storage.getEntries)
222
+ (await storage.getEntries())[0][1].n = 94;
223
+ if (storage.getChangesSince)
224
+ (await storage.getChangesSince()).changed[0][1].n = 93;
225
+ same(await storage.get("a"), item("a", 1, ["x"]), "get() after changes of the read values");
226
+ same(await storage.get("b"), item("b", 2, ["y"]), "get() of the other item after changes of the read values");
227
+ }));
228
+ add("the storage keeps JSON values, also null", () => withStorage(create, async (typed) => {
197
229
  const storage = typed;
198
230
  const values = [
199
231
  ["object", { text: "é ✓ 😀", list: [1, null, { deep: true }], n: 1.5, empty: {}, none: [] }],
@@ -203,17 +235,18 @@ export function collectionStorageContract(options) {
203
235
  ["negative", -2.25],
204
236
  ["false", false],
205
237
  ["list", [1, "two", [3]]],
238
+ ["null", null],
206
239
  ];
207
- if (nullValues)
208
- values.push(["null", null]);
209
240
  await storage.setBatch(values);
210
241
  for (const [id, value] of values)
211
242
  same(await storage.get(id), value, `get("${id}")`);
212
243
  same(await storage.getAll(), values.map(([, value]) => value), "getAll() of the JSON values");
213
244
  same(await storage.getBatch(values.map(([id]) => id)), new Map(values), "getBatch() of the JSON values");
214
245
  same(await storage.size(), values.length, "size() with the JSON values");
215
- if (nullValues)
216
- same(await storage.has("null"), true, "has() of an id whose value is null");
246
+ same(await storage.has("null"), true, "has() of an id whose value is null");
247
+ await storage.set("single", null);
248
+ same(await storage.get("single"), null, "get() of an id that set() gave the value null");
249
+ same(await storage.get("missing"), undefined, "get() of a missing id, next to a stored null");
217
250
  }));
218
251
  add("writes that run at the same time keep each write", () => withStorage(create, async (storage) => {
219
252
  const count = 20;
@@ -221,16 +254,17 @@ export function collectionStorageContract(options) {
221
254
  same(await storage.size(), count, `size() after ${count} writes at the same time`);
222
255
  same(ids(await storage.getAll()).sort(), Array.from({ length: count }, (_, n) => `k${n}`).sort(), "the ids after the writes at the same time");
223
256
  }));
224
- add("getChangesSince() without a version gives every item", (context) => withStorage(create, async (storage) => {
257
+ add("getChangesSince() without a version gives every item, in the order of the entries", (context) => withStorage(create, async (storage) => {
225
258
  if (lacks(storage, "getChangesSince", context))
226
259
  return;
227
260
  const changes = changesOf(storage);
228
- const entries = [["a", item("a", 1)], ["b", item("b", 2)], ["c", item("c", 3)]];
261
+ const entries = [["c", item("c", 3)], ["a", item("a", 1)], ["b", item("b", 2)]];
229
262
  await storage.setBatch(entries);
263
+ await storage.set("c", item("c", 30));
230
264
  const first = await changes();
231
265
  holds(typeof first.version === "string" && first.version !== "", `the version must be a text that is not empty, not ${show(first.version)}`);
232
266
  same(first.full, true, "full of the first call");
233
- same(byId(first.changed), entries, "changed of the first call: every item");
267
+ same(first.changed, [["c", item("c", 30)], ["a", item("a", 1)], ["b", item("b", 2)]], "changed of the first call: every item, in the order of the entries");
234
268
  same(first.deleted, [], "deleted of a full result");
235
269
  }));
236
270
  add("getChangesSince(version) gives the items that changed after the version and the ids that were deleted", (context) => withStorage(create, async (storage) => {
@@ -245,11 +279,32 @@ export function collectionStorageContract(options) {
245
279
  await storage.set("d", item("d", 4));
246
280
  const delta = await changes(start.version);
247
281
  same(delta.full, false, "full of a delta");
248
- same(byId(delta.changed), [["a", item("a", 10)], ["d", item("d", 4)]], "changed of a delta");
282
+ same(delta.changed, [["a", item("a", 10)], ["d", item("d", 4)]], "changed of a delta");
249
283
  same(delta.deleted, ["b"], "deleted of a delta");
250
284
  holds(delta.version !== start.version, "the version must change after a write");
251
285
  }));
252
- add("getChangesSince(): a deleted id that comes back is a change, clear() deletes each id, and no write gives no change", (context) => withStorage(create, async (storage) => {
286
+ add("getChangesSince(version) gives the changes in the order of the last change of each id", (context) => withStorage(create, async (storage) => {
287
+ if (lacks(storage, "getChangesSince", context))
288
+ return;
289
+ const changes = changesOf(storage);
290
+ await storage.setBatch([["a", item("a", 1)], ["b", item("b", 2)], ["c", item("c", 3)], ["d", item("d", 4)]]);
291
+ const start = await changes();
292
+ // b changes first, then a. Then b changes again: its last change comes after the change of a.
293
+ await storage.set("b", item("b", 20));
294
+ await storage.set("a", item("a", 10));
295
+ await storage.delete("d");
296
+ await storage.delete("c");
297
+ await storage.setBatch([["e", item("e", 5)], ["b", item("b", 21)]]);
298
+ const delta = await changes(start.version);
299
+ same({ changed: delta.changed, deleted: delta.deleted }, { changed: [["a", item("a", 10)], ["e", item("e", 5)], ["b", item("b", 21)]], deleted: ["d", "c"] }, "the order of a delta: an id written again after another id comes after it");
300
+ // A delete of d again is not a change. A new set of c moves it from deleted to changed.
301
+ await storage.delete("d");
302
+ await storage.set("c", item("c", 30));
303
+ await storage.deleteBatch(["e", "a"]);
304
+ const next = await changes(delta.version);
305
+ same({ changed: next.changed, deleted: next.deleted }, { changed: [["c", item("c", 30)]], deleted: ["e", "a"] }, "the order of the next delta");
306
+ }));
307
+ add("getChangesSince(): a deleted id that comes back is a change, clear() deletes each id in the order of the entries, and no write gives no change", (context) => withStorage(create, async (storage) => {
253
308
  if (lacks(storage, "getChangesSince", context))
254
309
  return;
255
310
  const changes = changesOf(storage);
@@ -258,10 +313,11 @@ export function collectionStorageContract(options) {
258
313
  await storage.delete("b");
259
314
  await storage.set("b", item("b", 20));
260
315
  const back = await changes(start.version);
261
- same({ full: back.full, changed: byId(back.changed), deleted: back.deleted }, { full: false, changed: [["b", item("b", 20)]], deleted: [] }, "a delete, then a set of the id");
316
+ same({ full: back.full, changed: back.changed, deleted: back.deleted }, { full: false, changed: [["b", item("b", 20)]], deleted: [] }, "a delete, then a set of the id");
317
+ // The entries are a, c, b now: b went to the end at its new set
262
318
  await storage.clear();
263
319
  const cleared = await changes(back.version);
264
- same({ full: cleared.full, changed: cleared.changed, deleted: [...cleared.deleted].sort() }, { full: false, changed: [], deleted: ["a", "b", "c"] }, "the changes of clear()");
320
+ same({ full: cleared.full, changed: cleared.changed, deleted: cleared.deleted }, { full: false, changed: [], deleted: ["a", "c", "b"] }, "the changes of clear()");
265
321
  const quiet = await changes(cleared.version);
266
322
  same({ full: quiet.full, changed: quiet.changed, deleted: quiet.deleted }, { full: false, changed: [], deleted: [] }, "the changes without a write");
267
323
  }));
@@ -273,7 +329,7 @@ export function collectionStorageContract(options) {
273
329
  await changes();
274
330
  for (const unknown of ["not a version", ""]) {
275
331
  const result = await changes(unknown);
276
- same({ full: result.full, changed: byId(result.changed), deleted: result.deleted }, { full: true, changed: [["a", item("a", 1)], ["b", item("b", 2)]], deleted: [] }, `the changes since ${show(unknown)}`);
332
+ same({ full: result.full, changed: result.changed, deleted: result.deleted }, { full: true, changed: [["a", item("a", 1)], ["b", item("b", 2)]], deleted: [] }, `the changes since ${show(unknown)}`);
277
333
  }
278
334
  await withStorage(create, async (other) => {
279
335
  await other.set("x", item("x", 9));
@@ -292,19 +348,26 @@ export function collectionStorageContract(options) {
292
348
  // Two deletes fit in the log
293
349
  await storage.deleteBatch(["a", "b"]);
294
350
  const two = await changes(start.version);
295
- same({ full: two.full, changed: two.changed, deleted: [...two.deleted].sort() }, { full: false, changed: [], deleted: ["a", "b"] }, "two deletes in a log of two");
351
+ same({ full: two.full, changed: two.changed, deleted: two.deleted }, { full: false, changed: [], deleted: ["a", "b"] }, "two deletes in a log of two");
296
352
  // The third delete drops the oldest one: the start version gives all items now
297
353
  await storage.delete("c");
298
354
  const after = await changes(start.version);
299
- same({ full: after.full, changed: byId(after.changed), deleted: after.deleted }, { full: true, changed: [["d", item("d", 4)]], deleted: [] }, "a version older than a dropped delete");
355
+ same({ full: after.full, changed: after.changed, deleted: after.deleted }, { full: true, changed: [["d", item("d", 4)]], deleted: [] }, "a version older than a dropped delete");
300
356
  same((await changes(after.version)).full, false, "a version after the dropped deletes still gives a delta");
301
357
  }));
302
358
  }
303
- add("a random sequence of writes agrees with a Map, and each version gives the right changes", () => withStorage(create, async (storage) => {
359
+ add("a random sequence of writes agrees with a Map, and each version gives the right changes in the right order", () => withStorage(create, async (storage) => {
304
360
  const random = seeded(45);
305
361
  const pool = ["a", "b", "c", "d", "e", "f", "g"];
306
362
  const pick = () => pool[random(pool.length)];
307
363
  const model = new Map();
364
+ // The model of the change log: the number of the last change of each id, oldest first
365
+ const lastChange = new Map();
366
+ let clock = 0;
367
+ const note = (id, deleted) => {
368
+ lastChange.delete(id);
369
+ lastChange.set(id, { at: ++clock, deleted });
370
+ };
308
371
  const versions = [];
309
372
  const hasChanges = typeof storage.getChangesSince === "function";
310
373
  for (let step = 0; step < 80; step++) {
@@ -316,11 +379,15 @@ export function collectionStorageContract(options) {
316
379
  label = `set(${id})`;
317
380
  await storage.set(id, value);
318
381
  model.set(id, value);
382
+ note(id, false);
319
383
  }
320
384
  else if (kind < 12) {
321
385
  const id = pick();
322
386
  label = `delete(${id})`;
323
- same(await storage.delete(id), model.delete(id), `the result of step ${step}: ${label}`);
387
+ const existed = model.delete(id);
388
+ if (existed)
389
+ note(id, true);
390
+ same(await storage.delete(id), existed, `the result of step ${step}: ${label}`);
324
391
  }
325
392
  else if (kind < 15) {
326
393
  const batch = Array.from({ length: 1 + random(3) }, (_, index) => {
@@ -329,43 +396,63 @@ export function collectionStorageContract(options) {
329
396
  });
330
397
  label = `setBatch(${batch.map(([id]) => id).join(", ")})`;
331
398
  await storage.setBatch(batch);
332
- for (const [id, value] of batch)
399
+ for (const [id, value] of batch) {
333
400
  model.set(id, value);
401
+ note(id, false);
402
+ }
334
403
  }
335
404
  else if (kind < 18) {
336
405
  const batch = Array.from({ length: 1 + random(3) }, pick);
337
406
  label = `deleteBatch(${batch.join(", ")})`;
338
- const expected = batch.filter((id) => model.delete(id)).length;
407
+ const expected = batch.filter((id) => {
408
+ const existed = model.delete(id);
409
+ if (existed)
410
+ note(id, true);
411
+ return existed;
412
+ }).length;
339
413
  same(await storage.deleteBatch(batch), expected, `the result of step ${step}: ${label}`);
340
414
  }
341
415
  else if (kind < 19) {
342
416
  label = "clear()";
343
417
  await storage.clear();
418
+ for (const id of model.keys())
419
+ note(id, true);
344
420
  model.clear();
345
421
  }
346
422
  else {
347
423
  label = "a saved version";
348
424
  if (hasChanges)
349
- versions.push({ version: (await storage.getChangesSince()).version, entries: new Map(model) });
425
+ versions.push({ version: (await storage.getChangesSince()).version, entries: new Map(model), at: clock });
350
426
  }
351
427
  same(await storage.getAll(), [...model.values()], `getAll() after step ${step}: ${label}`);
352
428
  }
353
429
  same(await storage.size(), model.size, "size() after the sequence");
354
430
  if (storage.getEntries)
355
431
  same(await storage.getEntries(), [...model.entries()], "getEntries() after the sequence");
432
+ if (storage.getIds)
433
+ same(await storage.getIds(), [...model.keys()], "getIds() after the sequence");
356
434
  if (!hasChanges)
357
435
  return;
358
436
  holds(versions.length > 0, "the sequence saved no version: change the seed");
359
437
  for (const [index, saved] of versions.entries()) {
360
438
  const result = await storage.getChangesSince(saved.version);
361
- const deleted = new Set(result.deleted);
362
- holds(result.changed.every(([id]) => !deleted.has(id)), `the changes since version ${index} have an id in changed and in deleted`);
363
- const rebuilt = result.full ? new Map() : new Map(saved.entries);
439
+ if (result.full) {
440
+ same(result.changed, [...model.entries()], `the full changes since version ${index}: every item, in the order of the entries`);
441
+ continue;
442
+ }
443
+ // A delta: the changes after the version, in the order of the last change of each id
444
+ const after = [...lastChange].filter(([, change]) => change.at > saved.at);
445
+ const expected = {
446
+ changed: after.filter(([, change]) => !change.deleted).map(([id]) => [id, model.get(id)]),
447
+ deleted: after.filter(([, change]) => change.deleted).map(([id]) => id),
448
+ };
449
+ same({ changed: result.changed, deleted: result.deleted }, expected, `the changes since version ${index}`);
450
+ const rebuilt = new Map(saved.entries);
364
451
  for (const id of result.deleted)
365
452
  rebuilt.delete(id);
366
453
  for (const [id, value] of result.changed)
367
454
  rebuilt.set(id, value);
368
- same(byId([...rebuilt.entries()]), byId([...model.entries()]), `the items of version ${index} with its changes`);
455
+ same(rebuilt, new Map(model), `the items of version ${index} with its changes`);
369
456
  }
370
457
  }));
371
458
  add("flush() resolves, and the items stay", (context) => withStorage(create, async (storage) => {
@@ -384,10 +471,45 @@ export function collectionStorageContract(options) {
384
471
  holds(["memory", "api", "hybrid", "synced", "custom"].includes(metadata.type), `getMetadata() gave the unknown type ${show(metadata.type)}`);
385
472
  same(metadata.size, 2, "the size of getMetadata()");
386
473
  }));
387
- add("close() resolves, and a second close() resolves too", () => withStorage(create, async (storage) => {
474
+ add("after close(), each operation rejects with an error that says that the storage is closed, and a second close() does nothing", () => withStorage(create, async (storage) => {
388
475
  await storage.set("a", item("a", 1));
389
476
  await storage.close();
477
+ const operations = [
478
+ ["get", () => storage.get("a")],
479
+ ["getAll", () => storage.getAll()],
480
+ ["find", () => storage.find(() => true)],
481
+ ["has", () => storage.has("a")],
482
+ ["size", () => storage.size()],
483
+ ["getBatch", () => storage.getBatch(["a"])],
484
+ ["getBatch of no id", () => storage.getBatch([])],
485
+ ["set", () => storage.set("b", item("b", 2))],
486
+ ["delete", () => storage.delete("a")],
487
+ ["clear", () => storage.clear()],
488
+ ["setBatch", () => storage.setBatch([["b", item("b", 2)]])],
489
+ ["setBatch of no item", () => storage.setBatch([])],
490
+ ["deleteBatch", () => storage.deleteBatch(["a"])],
491
+ ["deleteBatch of no id", () => storage.deleteBatch([])],
492
+ ];
493
+ if (storage.getEntries)
494
+ operations.push(["getEntries", () => storage.getEntries()]);
495
+ if (storage.getIds)
496
+ operations.push(["getIds", () => storage.getIds()]);
497
+ if (storage.getChangesSince)
498
+ operations.push(["getChangesSince", () => storage.getChangesSince()]);
499
+ if (storage.flush)
500
+ operations.push(["flush", () => storage.flush()]);
501
+ if (storage.getMetadata)
502
+ operations.push(["getMetadata", () => storage.getMetadata()]);
503
+ const check = async (when) => {
504
+ for (const [name, start] of operations) {
505
+ const error = await rejects(start, `${name}() ${when}`);
506
+ holds(error instanceof Error && /closed/i.test(error.message), `${name}() ${when} must reject with an Error whose message says "closed", not ${show(error instanceof Error ? error.message : error)}`);
507
+ }
508
+ };
509
+ await check("after close()");
510
+ // A second close() resolves, and the storage stays closed
390
511
  await storage.close();
512
+ await check("after a second close()");
391
513
  }));
392
514
  return cases;
393
515
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage-contract.js","sourceRoot":"","sources":["../../src/testing/storage-contract.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage-contract.js","sourceRoot":"","sources":["../../src/testing/storage-contract.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/package",
3
3
  "name": "@procedures/collections",
4
- "version": "0.4.0",
4
+ "version": "0.6.0",
5
5
  "description": "Collections for TypeScript: ArrayList, LinkedList, ArrayDeque, HashMap, LinkedHashMap, TreeMap (red-black), PriorityQueue, LRU and TTL maps, async queues, channels and collectors, tested with fast-check.",
6
6
  "keywords": [
7
7
  "collections",
@@ -17,6 +17,15 @@
17
17
  * All methods return Promise<T> to ensure consistent async behavior.
18
18
  * This guarantees client code remains agnostic to the storage backend,
19
19
  * enabling seamless switching between local and remote storage.
20
+ *
21
+ * The contract (the suite of `@procedures/collections/testing` tests it for each storage):
22
+ * - A storage keeps a copy of each value that a write takes, and each read gives a new copy. A
23
+ * change of a written or a read value does not change the stored item.
24
+ * - A stored `null` reads back as `null`. A missing id reads back as `undefined`.
25
+ * - The entries keep the order of the first set of each id, as a `Map` does.
26
+ * - A delta of `getChangesSince` follows the order of the last change of each id.
27
+ * - After `close()`, each operation rejects with an error whose message says "closed". A second
28
+ * `close()` does nothing.
20
29
  */
21
30
  export interface CollectionStorage<T> {
22
31
  //
@@ -27,7 +36,7 @@ export interface CollectionStorage<T> {
27
36
  * Get item by ID.
28
37
  *
29
38
  * @param id - Item identifier
30
- * @returns Promise resolving to item or undefined if not found
39
+ * @returns Promise resolving to a copy of the item, or undefined if not found. A stored null is null.
31
40
  */
32
41
  get(id: string): Promise<T | undefined>;
33
42
 
@@ -46,9 +55,19 @@ export interface CollectionStorage<T> {
46
55
  */
47
56
  getEntries?(): Promise<Array<[string, T]>>;
48
57
 
58
+ /**
59
+ * The ids of the items, in the order of the entries. The storage does not read or copy the
60
+ * values, so a sync that needs only the ids does not copy each item. A storage that cannot
61
+ * give the ids cheaply does not have this method, and a caller uses `getEntries()`.
62
+ *
63
+ * @returns Promise resolving to the ids, as a new array
64
+ */
65
+ getIds?(): Promise<string[]>;
66
+
49
67
  /**
50
68
  * The changes after a version (roadmap R28). A storage without a change log does not have
51
- * this method, and a sync uses `getEntries()`.
69
+ * this method, and a sync uses `getEntries()`. A full result follows the order of the entries.
70
+ * A delta follows the order of the last change of each id.
52
71
  *
53
72
  * @param since - A `version` that an earlier call gave. Without it, the result has all items.
54
73
  * @returns Promise resolving to the changed items, the deleted ids and the new version
@@ -147,8 +166,9 @@ export interface CollectionStorage<T> {
147
166
  flush?(): Promise<void>;
148
167
 
149
168
  /**
150
- * Close storage and cleanup resources.
151
- * Should be called when collection is no longer needed.
169
+ * This method closes the storage and releases its resources. After it, each operation rejects
170
+ * with an error whose message says "closed". A second `close()` does nothing. A durable storage
171
+ * keeps its items for a new storage of the same place.
152
172
  *
153
173
  * @returns Promise resolving when cleanup completes
154
174
  */
@@ -172,6 +192,8 @@ export interface CollectionStorage<T> {
172
192
  * the first call, a version of an older run, or a change log that dropped old deletes.
173
193
  * - When `full` is false, `changed` has the items that changed after the version, and `deleted`
174
194
  * has the ids that were deleted after it.
195
+ * - The order of a full result is the order of the entries. The order of a delta is the order of
196
+ * the last change of each id: an id that changed again comes after the ids that changed before.
175
197
  */
176
198
  export interface StorageChanges<T> {
177
199
  /** The version of the storage that includes these changes. */