@procedures/sqlite 0.14.0 → 0.15.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/dist/storage.d.ts CHANGED
@@ -22,12 +22,14 @@
22
22
  * - The storages of one file in one process share one database. Thus the storages of two tables
23
23
  * in one file keep the changes of each other.
24
24
  * - A storage that only reads does not make the file.
25
+ * - With the option `versionOf`, `set`, `delete` and `setBatch` take an expected version (roadmap
26
+ * CLI-16). The test of the versions and the write are one transaction, also for two processes.
25
27
  */
26
- import { type CollectionStorage, type Duration, type StorageChanges, type StorageMetadata, type StoragePatch, type StorageQueryOptions, type StorageQueryPolicy, type StorageSelector } from "@procedures/client";
28
+ import { type CollectionStorage, type Duration, type StorageBatchWriteOptions, type StorageChanges, type StorageItemWriteOptions, type StorageMetadata, type StoragePatch, type StorageQueryOptions, type StorageQueryPolicy, type StorageSelector } from "@procedures/client";
27
29
  import { type SqliteEngine, type SqliteEngineName } from "./engines.js";
28
30
  export { MEMORY_PATH, isNodeSqliteAvailable, type SqliteEngine, type SqliteEngineName } from "./engines.js";
29
31
  /** The options of a `SqliteStorage`. */
30
- export interface SqliteStorageOptions {
32
+ export interface SqliteStorageOptions<T = unknown> {
31
33
  /**
32
34
  * The database file, or `:memory:` for a database that lives as long as the storage. The
33
35
  * storage makes the file, and its folder, at the first write that changes an item.
@@ -72,6 +74,13 @@ export interface SqliteStorageOptions {
72
74
  * @default DEFAULT_QUERY_POLICY: no `$regex`
73
75
  */
74
76
  queryPolicy?: StorageQueryPolicy | undefined;
77
+ /**
78
+ * The version of an item, for example `(item) => item.rev` (roadmap CLI-16). With it, `set`,
79
+ * `delete` and `setBatch` take an expected version: a write whose current item has another
80
+ * version changes nothing and rejects with `VersionConflictError`. The test and the write are
81
+ * one transaction. Without it, a write with an expected version rejects with a `TypeError`.
82
+ */
83
+ versionOf?: ((item: T) => string | undefined) | undefined;
75
84
  }
76
85
  /**
77
86
  * This function gives the name when it is a permitted table name. Else it throws a `TypeError`. The name goes
@@ -101,11 +110,13 @@ export declare class SqliteStorage<T> implements CollectionStorage<T> {
101
110
  private readonly maxTombstones;
102
111
  /** The query policy of a call without a policy */
103
112
  private readonly queryPolicy;
113
+ /** The version of an item, for the preconditions of the writes (roadmap CLI-16) */
114
+ private readonly versionOf;
104
115
  /** The quoted table name, for the SQL text. */
105
116
  private readonly quoted;
106
117
  private readonly opening;
107
118
  private closed;
108
- constructor(options: SqliteStorageOptions);
119
+ constructor(options: SqliteStorageOptions<T>);
109
120
  get(id: string): Promise<T | undefined>;
110
121
  getAll(): Promise<T[]>;
111
122
  /** Every item with its id, in the order of the first write of each id. */
@@ -128,17 +139,20 @@ export declare class SqliteStorage<T> implements CollectionStorage<T> {
128
139
  query(selector: StorageSelector, options?: StorageQueryOptions, policy?: StorageQueryPolicy): Promise<Array<[string, T]>>;
129
140
  has(id: string): Promise<boolean>;
130
141
  size(): Promise<number>;
131
- set(id: string, value: T): Promise<void>;
142
+ set(id: string, value: T, options?: StorageItemWriteOptions): Promise<void>;
132
143
  /**
133
144
  * This method changes the item of the id in one transaction (a JSON Merge Patch, or the
134
145
  * operations `$set` and `$unset`), and gives a copy of the new item. A missing id stays missing,
135
146
  * and the result is undefined. A patch that cannot apply to the item changes nothing.
136
147
  */
137
148
  patch(id: string, fields: StoragePatch): Promise<T | undefined>;
138
- delete(id: string): Promise<boolean>;
149
+ delete(id: string, options?: StorageItemWriteOptions): Promise<boolean>;
139
150
  clear(): Promise<void>;
140
- /** This method sets several items in one transaction. When one value is not JSON, nothing changes. */
141
- setBatch(items: Array<[string, T]>): Promise<void>;
151
+ /**
152
+ * This method sets several items in one transaction. When one value is not JSON, or one expected
153
+ * version has a conflict, nothing changes.
154
+ */
155
+ setBatch(items: Array<[string, T]>, options?: StorageBatchWriteOptions): Promise<void>;
142
156
  /** This method deletes several items in one transaction. */
143
157
  deleteBatch(ids: string[]): Promise<number>;
144
158
  getBatch(ids: string[]): Promise<Map<string, T>>;
@@ -163,6 +177,16 @@ export declare class SqliteStorage<T> implements CollectionStorage<T> {
163
177
  private database;
164
178
  private sharedDatabase;
165
179
  private checkOpen;
180
+ /**
181
+ * The preconditions of a write, after a check of their ids. A storage without `versionOf` throws
182
+ * a `TypeError` before the write starts (roadmap CLI-16).
183
+ */
184
+ private preconditions;
185
+ /**
186
+ * This method tests the expected versions in the transaction of the write (roadmap CLI-16). A
187
+ * conflict throws `VersionConflictError`, and the transaction rolls back.
188
+ */
189
+ private checkVersions;
166
190
  private entries;
167
191
  private counter;
168
192
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
package/dist/storage.js CHANGED
@@ -22,11 +22,13 @@
22
22
  * - The storages of one file in one process share one database. Thus the storages of two tables
23
23
  * in one file keep the changes of each other.
24
24
  * - A storage that only reads does not make the file.
25
+ * - With the option `versionOf`, `set`, `delete` and `setBatch` take an expected version (roadmap
26
+ * CLI-16). The test of the versions and the write are one transaction, also for two processes.
25
27
  */
26
28
  import { randomUUID } from "node:crypto";
27
29
  import { resolve } from "node:path";
28
30
  import { optionalMs, } from "@procedures/client";
29
- import { applyPatch, patchProblems, queryEntries } from "@procedures/client/query";
31
+ import { VersionConflictError, applyPatch, patchProblems, preconditionNotSupported, queryEntries, versionConflicts } from "@procedures/client/query";
30
32
  import { MEMORY_PATH, checkEngine, openEngine, } from "./engines.js";
31
33
  export { MEMORY_PATH, isNodeSqliteAvailable } from "./engines.js";
32
34
  /** The pattern of a table name: a letter, then letters, digits and underscores. */
@@ -332,6 +334,8 @@ export class SqliteStorage {
332
334
  maxTombstones;
333
335
  /** The query policy of a call without a policy */
334
336
  queryPolicy;
337
+ /** The version of an item, for the preconditions of the writes (roadmap CLI-16) */
338
+ versionOf;
335
339
  /** The quoted table name, for the SQL text. */
336
340
  quoted;
337
341
  opening;
@@ -347,6 +351,7 @@ export class SqliteStorage {
347
351
  this.quoted = `"${this.table}"`;
348
352
  this.maxTombstones = Math.max(0, options.maxTombstones ?? 10_000);
349
353
  this.queryPolicy = options.queryPolicy;
354
+ this.versionOf = options.versionOf;
350
355
  this.opening = this.open(busyTimeoutMs);
351
356
  // An operation gives the error of the open. This handler only stops an unhandled rejection.
352
357
  this.opening.catch(() => undefined);
@@ -420,9 +425,13 @@ export class SqliteStorage {
420
425
  //
421
426
  // ═══ Write Operations ═══
422
427
  //
423
- async set(id, value) {
428
+ async set(id, value, options) {
424
429
  const text = toJson(checkId(id), value);
425
- await this.write((db, next) => this.put(db, id, text, next));
430
+ const expected = this.preconditions(options?.expectedVersion === undefined ? [] : [[id, options.expectedVersion]]);
431
+ await this.write((db, next) => {
432
+ this.checkVersions(db, expected);
433
+ this.put(db, id, text, next);
434
+ });
426
435
  }
427
436
  /**
428
437
  * This method changes the item of the id in one transaction (a JSON Merge Patch, or the
@@ -443,9 +452,13 @@ export class SqliteStorage {
443
452
  return JSON.parse(text);
444
453
  });
445
454
  }
446
- async delete(id) {
455
+ async delete(id, options) {
447
456
  checkId(id);
448
- return this.write((db, next) => this.remove(db, id, next));
457
+ const expected = this.preconditions(options?.expectedVersion === undefined ? [] : [[id, options.expectedVersion]]);
458
+ return this.write((db, next) => {
459
+ this.checkVersions(db, expected);
460
+ return this.remove(db, id, next);
461
+ });
449
462
  }
450
463
  async clear() {
451
464
  await this.write((db, next) => {
@@ -457,14 +470,19 @@ export class SqliteStorage {
457
470
  //
458
471
  // ═══ Bulk Operations ═══
459
472
  //
460
- /** This method sets several items in one transaction. When one value is not JSON, nothing changes. */
461
- async setBatch(items) {
473
+ /**
474
+ * This method sets several items in one transaction. When one value is not JSON, or one expected
475
+ * version has a conflict, nothing changes.
476
+ */
477
+ async setBatch(items, options) {
462
478
  // After close(), an empty batch rejects too
463
479
  this.checkOpen();
464
480
  const texts = items.map(([id, value]) => [checkId(id), toJson(id, value)]);
465
- if (texts.length === 0)
481
+ const expected = this.preconditions(options?.expectedVersions ?? []);
482
+ if (texts.length === 0 && expected.length === 0)
466
483
  return;
467
484
  await this.write((db, next) => {
485
+ this.checkVersions(db, expected);
468
486
  for (const [id, text] of texts)
469
487
  this.put(db, id, text, next);
470
488
  });
@@ -575,6 +593,36 @@ export class SqliteStorage {
575
593
  if (this.closed)
576
594
  throw new Error(`The SQLite storage of the table ${this.table} is closed`);
577
595
  }
596
+ /**
597
+ * The preconditions of a write, after a check of their ids. A storage without `versionOf` throws
598
+ * a `TypeError` before the write starts (roadmap CLI-16).
599
+ */
600
+ preconditions(expected) {
601
+ if (expected.length === 0)
602
+ return expected;
603
+ if (!this.versionOf)
604
+ throw preconditionNotSupported(`The SQLite storage of the table ${this.table}`);
605
+ for (const [id] of expected)
606
+ checkId(id);
607
+ return expected;
608
+ }
609
+ /**
610
+ * This method tests the expected versions in the transaction of the write (roadmap CLI-16). A
611
+ * conflict throws `VersionConflictError`, and the transaction rolls back.
612
+ */
613
+ checkVersions(db, expected) {
614
+ if (expected.length === 0 || !this.versionOf)
615
+ return;
616
+ const rows = db.firstOfEach(`SELECT value FROM ${this.quoted} WHERE id = ?`, expected.map(([id]) => [id]));
617
+ const current = new Map();
618
+ expected.forEach(([id], index) => {
619
+ const row = rows[index];
620
+ current.set(id, row === undefined ? { found: false } : { found: true, value: JSON.parse(row.value) });
621
+ });
622
+ const conflicts = versionConflicts(expected, (id) => current.get(id) ?? { found: false }, this.versionOf);
623
+ if (conflicts.length > 0)
624
+ throw new VersionConflictError(conflicts);
625
+ }
578
626
  entries(db) {
579
627
  return db.all(`SELECT id, value FROM ${this.quoted} ORDER BY rowid`).map((row) => [row.id, JSON.parse(row.value)]);
580
628
  }
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.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/sqlite",
4
- "version": "0.14.0",
4
+ "version": "0.15.0",
5
5
  "description": "SQLite procedures with sql.js and no native build: queries, tables and schemas, transactions, migrations, backups and structured logs, safe for concurrent writes, and SqliteStorage, a durable collection storage with a change log on node:sqlite or sql.js.",
6
6
  "keywords": [
7
7
  "sqlite",
@@ -66,14 +66,14 @@
66
66
  },
67
67
  "dependencies": {
68
68
  "@mark1russell7/docker-sqlite": "^0.1.0",
69
- "@procedures/client": "0.14.0",
69
+ "@procedures/client": "0.15.0",
70
70
  "zod": "^4.6.5"
71
71
  },
72
72
  "devDependencies": {
73
73
  "@mark1russell7/cue": "^1.0.0",
74
- "@procedures/collections": "0.14.0",
75
- "@procedures/fs": "0.14.0",
76
- "@procedures/store": "0.14.0",
74
+ "@procedures/collections": "0.15.0",
75
+ "@procedures/fs": "0.15.0",
76
+ "@procedures/store": "0.15.0",
77
77
  "@types/node": "^22.0.0",
78
78
  "typescript": "^7.0.2",
79
79
  "vitest": "^5.0.3"
package/src/storage.ts CHANGED
@@ -22,6 +22,8 @@
22
22
  * - The storages of one file in one process share one database. Thus the storages of two tables
23
23
  * in one file keep the changes of each other.
24
24
  * - A storage that only reads does not make the file.
25
+ * - With the option `versionOf`, `set`, `delete` and `setBatch` take an expected version (roadmap
26
+ * CLI-16). The test of the versions and the write are one transaction, also for two processes.
25
27
  */
26
28
 
27
29
  import { randomUUID } from "node:crypto";
@@ -30,14 +32,16 @@ import {
30
32
  optionalMs,
31
33
  type CollectionStorage,
32
34
  type Duration,
35
+ type StorageBatchWriteOptions,
33
36
  type StorageChanges,
37
+ type StorageItemWriteOptions,
34
38
  type StorageMetadata,
35
39
  type StoragePatch,
36
40
  type StorageQueryOptions,
37
41
  type StorageQueryPolicy,
38
42
  type StorageSelector,
39
43
  } from "@procedures/client";
40
- import { applyPatch, patchProblems, queryEntries } from "@procedures/client/query";
44
+ import { VersionConflictError, applyPatch, patchProblems, preconditionNotSupported, queryEntries, versionConflicts, type CurrentItem } from "@procedures/client/query";
41
45
  import {
42
46
  MEMORY_PATH,
43
47
  checkEngine,
@@ -53,7 +57,7 @@ import {
53
57
  export { MEMORY_PATH, isNodeSqliteAvailable, type SqliteEngine, type SqliteEngineName } from "./engines.js";
54
58
 
55
59
  /** The options of a `SqliteStorage`. */
56
- export interface SqliteStorageOptions {
60
+ export interface SqliteStorageOptions<T = unknown> {
57
61
  /**
58
62
  * The database file, or `:memory:` for a database that lives as long as the storage. The
59
63
  * storage makes the file, and its folder, at the first write that changes an item.
@@ -98,6 +102,13 @@ export interface SqliteStorageOptions {
98
102
  * @default DEFAULT_QUERY_POLICY: no `$regex`
99
103
  */
100
104
  queryPolicy?: StorageQueryPolicy | undefined;
105
+ /**
106
+ * The version of an item, for example `(item) => item.rev` (roadmap CLI-16). With it, `set`,
107
+ * `delete` and `setBatch` take an expected version: a write whose current item has another
108
+ * version changes nothing and rejects with `VersionConflictError`. The test and the write are
109
+ * one transaction. Without it, a write with an expected version rejects with a `TypeError`.
110
+ */
111
+ versionOf?: ((item: T) => string | undefined) | undefined;
101
112
  }
102
113
 
103
114
  /** The pattern of a table name: a letter, then letters, digits and underscores. */
@@ -437,12 +448,14 @@ export class SqliteStorage<T> implements CollectionStorage<T> {
437
448
  private readonly maxTombstones: number;
438
449
  /** The query policy of a call without a policy */
439
450
  private readonly queryPolicy: StorageQueryPolicy | undefined;
451
+ /** The version of an item, for the preconditions of the writes (roadmap CLI-16) */
452
+ private readonly versionOf: ((item: T) => string | undefined) | undefined;
440
453
  /** The quoted table name, for the SQL text. */
441
454
  private readonly quoted: string;
442
455
  private readonly opening: Promise<SharedDatabase>;
443
456
  private closed = false;
444
457
 
445
- constructor(options: SqliteStorageOptions) {
458
+ constructor(options: SqliteStorageOptions<T>) {
446
459
  if (typeof options?.path !== "string" || options.path === "") {
447
460
  throw new TypeError("SqliteStorage needs a path: a database file, or :memory:");
448
461
  }
@@ -453,6 +466,7 @@ export class SqliteStorage<T> implements CollectionStorage<T> {
453
466
  this.quoted = `"${this.table}"`;
454
467
  this.maxTombstones = Math.max(0, options.maxTombstones ?? 10_000);
455
468
  this.queryPolicy = options.queryPolicy;
469
+ this.versionOf = options.versionOf;
456
470
  this.opening = this.open(busyTimeoutMs);
457
471
  // An operation gives the error of the open. This handler only stops an unhandled rejection.
458
472
  this.opening.catch(() => undefined);
@@ -541,9 +555,13 @@ export class SqliteStorage<T> implements CollectionStorage<T> {
541
555
  // ═══ Write Operations ═══
542
556
  //
543
557
 
544
- async set(id: string, value: T): Promise<void> {
558
+ async set(id: string, value: T, options?: StorageItemWriteOptions): Promise<void> {
545
559
  const text = toJson(checkId(id), value);
546
- await this.write((db, next) => this.put(db, id, text, next));
560
+ const expected = this.preconditions(options?.expectedVersion === undefined ? [] : [[id, options.expectedVersion]]);
561
+ await this.write((db, next) => {
562
+ this.checkVersions(db, expected);
563
+ this.put(db, id, text, next);
564
+ });
547
565
  }
548
566
 
549
567
  /**
@@ -564,9 +582,13 @@ export class SqliteStorage<T> implements CollectionStorage<T> {
564
582
  });
565
583
  }
566
584
 
567
- async delete(id: string): Promise<boolean> {
585
+ async delete(id: string, options?: StorageItemWriteOptions): Promise<boolean> {
568
586
  checkId(id);
569
- return this.write((db, next) => this.remove(db, id, next));
587
+ const expected = this.preconditions(options?.expectedVersion === undefined ? [] : [[id, options.expectedVersion]]);
588
+ return this.write((db, next) => {
589
+ this.checkVersions(db, expected);
590
+ return this.remove(db, id, next);
591
+ });
570
592
  }
571
593
 
572
594
  async clear(): Promise<void> {
@@ -580,13 +602,18 @@ export class SqliteStorage<T> implements CollectionStorage<T> {
580
602
  // ═══ Bulk Operations ═══
581
603
  //
582
604
 
583
- /** This method sets several items in one transaction. When one value is not JSON, nothing changes. */
584
- async setBatch(items: Array<[string, T]>): Promise<void> {
605
+ /**
606
+ * This method sets several items in one transaction. When one value is not JSON, or one expected
607
+ * version has a conflict, nothing changes.
608
+ */
609
+ async setBatch(items: Array<[string, T]>, options?: StorageBatchWriteOptions): Promise<void> {
585
610
  // After close(), an empty batch rejects too
586
611
  this.checkOpen();
587
612
  const texts = items.map(([id, value]): [string, string] => [checkId(id), toJson(id, value)]);
588
- if (texts.length === 0) return;
613
+ const expected = this.preconditions(options?.expectedVersions ?? []);
614
+ if (texts.length === 0 && expected.length === 0) return;
589
615
  await this.write((db, next) => {
616
+ this.checkVersions(db, expected);
590
617
  for (const [id, text] of texts) this.put(db, id, text, next);
591
618
  });
592
619
  }
@@ -700,6 +727,33 @@ export class SqliteStorage<T> implements CollectionStorage<T> {
700
727
  if (this.closed) throw new Error(`The SQLite storage of the table ${this.table} is closed`);
701
728
  }
702
729
 
730
+ /**
731
+ * The preconditions of a write, after a check of their ids. A storage without `versionOf` throws
732
+ * a `TypeError` before the write starts (roadmap CLI-16).
733
+ */
734
+ private preconditions(expected: ReadonlyArray<readonly [string, string | null]>): ReadonlyArray<readonly [string, string | null]> {
735
+ if (expected.length === 0) return expected;
736
+ if (!this.versionOf) throw preconditionNotSupported(`The SQLite storage of the table ${this.table}`);
737
+ for (const [id] of expected) checkId(id);
738
+ return expected;
739
+ }
740
+
741
+ /**
742
+ * This method tests the expected versions in the transaction of the write (roadmap CLI-16). A
743
+ * conflict throws `VersionConflictError`, and the transaction rolls back.
744
+ */
745
+ private checkVersions(db: EngineDatabase, expected: ReadonlyArray<readonly [string, string | null]>): void {
746
+ if (expected.length === 0 || !this.versionOf) return;
747
+ const rows = db.firstOfEach<{ value: string }>(`SELECT value FROM ${this.quoted} WHERE id = ?`, expected.map(([id]) => [id]));
748
+ const current = new Map<string, CurrentItem<T>>();
749
+ expected.forEach(([id], index) => {
750
+ const row = rows[index];
751
+ current.set(id, row === undefined ? { found: false } : { found: true, value: JSON.parse(row.value) as T });
752
+ });
753
+ const conflicts = versionConflicts(expected, (id) => current.get(id) ?? { found: false }, this.versionOf);
754
+ if (conflicts.length > 0) throw new VersionConflictError(conflicts);
755
+ }
756
+
703
757
  private entries(db: EngineDatabase): Array<[string, T]> {
704
758
  return db.all<{ id: string; value: string }>(`SELECT id, value FROM ${this.quoted} ORDER BY rowid`).map(
705
759
  (row): [string, T] => [row.id, JSON.parse(row.value) as T],