@rotorsoft/act-sqlite 1.22.8 → 2.0.1
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 +49 -54
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +53 -54
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -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,EACL,
|
|
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,66 +293,64 @@ 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
|
-
msgs,
|
|
312
|
-
expectedVersion
|
|
313
|
-
);
|
|
305
|
+
const heads = /* @__PURE__ */ new Map();
|
|
306
|
+
for (const append of appends) {
|
|
307
|
+
const row = await tx.execute({
|
|
308
|
+
sql: "SELECT COALESCE(MAX(version), -1) as v FROM events WHERE stream = ?",
|
|
309
|
+
args: [append.stream]
|
|
310
|
+
});
|
|
311
|
+
const current = Number(row.rows[0].v);
|
|
312
|
+
(0, import_act.throw_if_stale)(append, current);
|
|
313
|
+
heads.set(append.stream, current);
|
|
314
314
|
}
|
|
315
315
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
316
316
|
const committed = [];
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
317
|
+
for (const append of appends) {
|
|
318
|
+
appending = append;
|
|
319
|
+
head = heads.get(append.stream);
|
|
320
|
+
let version = head + 1;
|
|
321
|
+
for (const { name, data, pii } of append.msgs) {
|
|
322
|
+
const pii_for_write = await this._stringify_pii_for_write(pii);
|
|
323
|
+
const result = await tx.execute({
|
|
324
|
+
sql: "INSERT INTO events (stream, version, name, data, meta, created, pii) VALUES (?, ?, ?, ?, ?, ?, ?)",
|
|
325
|
+
args: [
|
|
326
|
+
append.stream,
|
|
327
|
+
version,
|
|
328
|
+
name,
|
|
329
|
+
JSON.stringify(data),
|
|
330
|
+
JSON.stringify(meta),
|
|
331
|
+
now,
|
|
332
|
+
pii_for_write
|
|
333
|
+
]
|
|
334
|
+
});
|
|
335
|
+
committed.push({
|
|
336
|
+
id: Number(result.lastInsertRowid),
|
|
337
|
+
stream: append.stream,
|
|
324
338
|
version,
|
|
339
|
+
created: new Date(now),
|
|
325
340
|
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++;
|
|
341
|
+
data,
|
|
342
|
+
meta,
|
|
343
|
+
...pii == null ? {} : { pii }
|
|
344
|
+
});
|
|
345
|
+
version++;
|
|
346
|
+
}
|
|
343
347
|
}
|
|
344
348
|
await tx.commit();
|
|
345
349
|
return committed;
|
|
346
350
|
} catch (e) {
|
|
347
351
|
await tx.rollback();
|
|
348
352
|
if (e instanceof import_act.ConcurrencyError) throw e;
|
|
349
|
-
if (is_unique_violation(e))
|
|
350
|
-
throw new import_act.ConcurrencyError(
|
|
351
|
-
stream,
|
|
352
|
-
current_version,
|
|
353
|
-
msgs,
|
|
354
|
-
expectedVersion ?? -1
|
|
355
|
-
);
|
|
353
|
+
if (is_unique_violation(e)) throw (0, import_act.concurrency_error)(appending, head);
|
|
356
354
|
throw new import_act.StoreError("commit", { cause: e });
|
|
357
355
|
}
|
|
358
356
|
});
|
|
@@ -1041,16 +1039,15 @@ var SqliteStore = class {
|
|
|
1041
1039
|
sql: "DELETE FROM events WHERE stream = ?",
|
|
1042
1040
|
args: [stream]
|
|
1043
1041
|
});
|
|
1044
|
-
const
|
|
1045
|
-
const event_meta = meta ?? { correlation: "", causation: {} };
|
|
1042
|
+
const seed = (0, import_act.seed_event)(snapshot, meta);
|
|
1046
1043
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
1047
1044
|
const ins = await tx.execute({
|
|
1048
1045
|
sql: "INSERT INTO events (stream, version, name, data, meta, created) VALUES (?, 0, ?, ?, ?, ?)",
|
|
1049
1046
|
args: [
|
|
1050
1047
|
stream,
|
|
1051
|
-
|
|
1052
|
-
JSON.stringify(
|
|
1053
|
-
JSON.stringify(
|
|
1048
|
+
seed.name,
|
|
1049
|
+
JSON.stringify(seed.data),
|
|
1050
|
+
JSON.stringify(seed.meta),
|
|
1054
1051
|
now
|
|
1055
1052
|
]
|
|
1056
1053
|
});
|
|
@@ -1061,9 +1058,7 @@ var SqliteStore = class {
|
|
|
1061
1058
|
stream,
|
|
1062
1059
|
version: 0,
|
|
1063
1060
|
created: new Date(now),
|
|
1064
|
-
|
|
1065
|
-
data: snapshot ?? {},
|
|
1066
|
-
meta: event_meta
|
|
1061
|
+
...seed
|
|
1067
1062
|
}
|
|
1068
1063
|
});
|
|
1069
1064
|
}
|