@rotorsoft/act-sqlite 1.22.8 → 2.0.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/README.md +4 -2
- package/dist/.tsbuildinfo +1 -1
- package/dist/@types/sqlite-store.d.ts +2 -2
- package/dist/@types/sqlite-store.d.ts.map +1 -1
- package/dist/index.cjs +53 -43
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +54 -43
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BlockedLease, Committed, EventMeta, Lease,
|
|
1
|
+
import type { Append, BlockedLease, Committed, EventMeta, Lease, Query, QueryStatsOptions, QueryStreams, QueryStreamsResult, Schemas, Store, StreamFilter, StreamPosition, StreamStats, SubscribeInput, SubscribeResult } from "@rotorsoft/act";
|
|
2
2
|
import { type Encryption } from "@rotorsoft/act-crypto";
|
|
3
3
|
/**
|
|
4
4
|
* SQLite store configuration
|
|
@@ -141,7 +141,7 @@ export declare class SqliteStore implements Store {
|
|
|
141
141
|
private _begin;
|
|
142
142
|
private _tx;
|
|
143
143
|
dispose(): Promise<void>;
|
|
144
|
-
commit<E extends Schemas>(
|
|
144
|
+
commit<E extends Schemas>(appends: readonly Append<E>[], meta: EventMeta): Promise<Committed<E, keyof E>[]>;
|
|
145
145
|
query<E extends Schemas>(callback: (event: Committed<E, keyof E>) => void, query?: Query): Promise<number>;
|
|
146
146
|
subscribe(streams: SubscribeInput[], correlated_at?: number, correlator?: {
|
|
147
147
|
key: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../../src/sqlite-store.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,SAAS,EACT,KAAK,
|
|
1
|
+
{"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../../src/sqlite-store.ts"],"names":[],"mappings":"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"}
|
package/dist/index.cjs
CHANGED
|
@@ -293,53 +293,63 @@ var SqliteStore = class {
|
|
|
293
293
|
async dispose() {
|
|
294
294
|
await this._serial(async () => this.client.close());
|
|
295
295
|
}
|
|
296
|
-
// --- commit: transaction
|
|
297
|
-
async commit(
|
|
296
|
+
// --- commit: one transaction across every append ---
|
|
297
|
+
async commit(appends, meta) {
|
|
298
|
+
(0, import_act.check_appends)(appends);
|
|
299
|
+
if (!appends.length) return [];
|
|
298
300
|
return this._serial(async () => {
|
|
299
301
|
const tx = await this._begin("commit");
|
|
300
|
-
let
|
|
302
|
+
let appending = appends[0];
|
|
303
|
+
let head = -1;
|
|
301
304
|
try {
|
|
302
|
-
const
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
305
|
+
const heads = /* @__PURE__ */ new Map();
|
|
306
|
+
for (const { stream, msgs, expectedVersion } of appends) {
|
|
307
|
+
const row = await tx.execute({
|
|
308
|
+
sql: "SELECT COALESCE(MAX(version), -1) as v FROM events WHERE stream = ?",
|
|
309
|
+
args: [stream]
|
|
310
|
+
});
|
|
311
|
+
const current = Number(row.rows[0].v);
|
|
312
|
+
if (typeof expectedVersion === "number" && current !== expectedVersion)
|
|
313
|
+
throw new import_act.ConcurrencyError(
|
|
314
|
+
stream,
|
|
315
|
+
current,
|
|
316
|
+
msgs,
|
|
317
|
+
expectedVersion
|
|
318
|
+
);
|
|
319
|
+
heads.set(stream, current);
|
|
314
320
|
}
|
|
315
321
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
316
322
|
const committed = [];
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
323
|
+
for (const append of appends) {
|
|
324
|
+
appending = append;
|
|
325
|
+
head = heads.get(append.stream);
|
|
326
|
+
let version = head + 1;
|
|
327
|
+
for (const { name, data, pii } of append.msgs) {
|
|
328
|
+
const pii_for_write = await this._stringify_pii_for_write(pii);
|
|
329
|
+
const result = await tx.execute({
|
|
330
|
+
sql: "INSERT INTO events (stream, version, name, data, meta, created, pii) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
|
331
|
+
args: [
|
|
332
|
+
append.stream,
|
|
333
|
+
version,
|
|
334
|
+
name,
|
|
335
|
+
JSON.stringify(data),
|
|
336
|
+
JSON.stringify(meta),
|
|
337
|
+
now,
|
|
338
|
+
pii_for_write
|
|
339
|
+
]
|
|
340
|
+
});
|
|
341
|
+
committed.push({
|
|
342
|
+
id: Number(result.lastInsertRowid),
|
|
343
|
+
stream: append.stream,
|
|
324
344
|
version,
|
|
345
|
+
created: new Date(now),
|
|
325
346
|
name,
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
}
|
|
332
|
-
committed.push({
|
|
333
|
-
id: Number(result.lastInsertRowid),
|
|
334
|
-
stream,
|
|
335
|
-
version,
|
|
336
|
-
created: new Date(now),
|
|
337
|
-
name,
|
|
338
|
-
data,
|
|
339
|
-
meta,
|
|
340
|
-
...pii == null ? {} : { pii }
|
|
341
|
-
});
|
|
342
|
-
version++;
|
|
347
|
+
data,
|
|
348
|
+
meta,
|
|
349
|
+
...pii == null ? {} : { pii }
|
|
350
|
+
});
|
|
351
|
+
version++;
|
|
352
|
+
}
|
|
343
353
|
}
|
|
344
354
|
await tx.commit();
|
|
345
355
|
return committed;
|
|
@@ -348,10 +358,10 @@ var SqliteStore = class {
|
|
|
348
358
|
if (e instanceof import_act.ConcurrencyError) throw e;
|
|
349
359
|
if (is_unique_violation(e))
|
|
350
360
|
throw new import_act.ConcurrencyError(
|
|
351
|
-
stream,
|
|
352
|
-
|
|
353
|
-
msgs,
|
|
354
|
-
expectedVersion ?? -1
|
|
361
|
+
appending.stream,
|
|
362
|
+
head,
|
|
363
|
+
appending.msgs,
|
|
364
|
+
appending.expectedVersion ?? -1
|
|
355
365
|
);
|
|
356
366
|
throw new import_act.StoreError("commit", { cause: e });
|
|
357
367
|
}
|