@welshman/store 0.14.0 → 0.14.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/dist/store/src/repository/adapters/sqlite/protocol.d.ts +9 -2
- package/dist/store/src/repository/adapters/sqlite/protocol.d.ts.map +1 -1
- package/dist/store/src/repository/adapters/sqlite/protocol.js.map +1 -1
- package/dist/store/src/repository/adapters/sqlite/serve.d.ts.map +1 -1
- package/dist/store/src/repository/adapters/sqlite/serve.js +22 -5
- package/dist/store/src/repository/adapters/sqlite/serve.js.map +1 -1
- package/dist/store/src/repository/adapters/sqlite/wasm.d.ts +6 -1
- package/dist/store/src/repository/adapters/sqlite/wasm.d.ts.map +1 -1
- package/dist/store/src/repository/adapters/sqlite/wasm.js +27 -3
- package/dist/store/src/repository/adapters/sqlite/wasm.js.map +1 -1
- package/package.json +5 -5
|
@@ -7,8 +7,13 @@ export type SqliteMethods = Pick<SqliteEngine, (typeof SQLITE_ENGINE_METHODS)[nu
|
|
|
7
7
|
export type SqliteExtension = Record<string, (...args: any[]) => unknown>;
|
|
8
8
|
/** Builds an app's methods after the engine migrates, so its schema can refer to the engine's. */
|
|
9
9
|
export type ExtendSqlite<M extends SqliteExtension> = (db: SqliteDatabase, engine: SqliteEngine) => M;
|
|
10
|
+
/** Methods the worker answers itself, over the file the events are kept in. */
|
|
11
|
+
export type SqliteWorkerMethods = {
|
|
12
|
+
/** Discard the database file, leaving an empty one in its place. */
|
|
13
|
+
wipe: () => void;
|
|
14
|
+
};
|
|
10
15
|
/** The engine's methods and an extension's, which can't shadow them. */
|
|
11
|
-
export type SqliteServed<M extends SqliteExtension> = SqliteMethods & Omit<M, keyof SqliteMethods>;
|
|
16
|
+
export type SqliteServed<M extends SqliteExtension> = SqliteWorkerMethods & SqliteMethods & Omit<M, keyof SqliteMethods | keyof SqliteWorkerMethods>;
|
|
12
17
|
/** Calls a method wherever the database lives, in the order calls are made. */
|
|
13
18
|
export type SqliteRpc<M extends SqliteExtension = Record<never, never>> = <K extends keyof SqliteServed<M> & string>(method: K, ...args: Parameters<SqliteServed<M>[K]>) => Promise<ReturnType<SqliteServed<M>[K]>>;
|
|
14
19
|
/** A change a call committed to the database's events, which other connections hear about. */
|
|
@@ -47,6 +52,8 @@ export type SqliteOpen = {
|
|
|
47
52
|
type: "open";
|
|
48
53
|
name: string;
|
|
49
54
|
};
|
|
55
|
+
/** Answers one request, with the change it committed if it made one. */
|
|
56
|
+
export type SqliteResponder = (request: SqliteRequest) => SqliteReply;
|
|
50
57
|
/** Migrates the engine, then answers requests for its methods and the extension's. */
|
|
51
|
-
export declare const createSqliteHandler: <M extends SqliteExtension>(engine: SqliteEngine, extend?: ExtendSqlite<M>) =>
|
|
58
|
+
export declare const createSqliteHandler: <M extends SqliteExtension>(engine: SqliteEngine, extend?: ExtendSqlite<M>) => SqliteResponder;
|
|
52
59
|
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../../../../src/repository/adapters/sqlite/protocol.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,oBAAoB,CAAA;AACpD,OAAO,KAAK,EAAC,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAC,MAAM,aAAa,CAAA;AAEnF,gGAAgG;AAChG,eAAO,MAAM,qBAAqB,wGAUxB,CAAA;AAEV,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC,OAAO,qBAAqB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAEtF,4FAA4F;AAC5F,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,CAAA;AAEzE,kGAAkG;AAClG,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,eAAe,IAAI,CACpD,EAAE,EAAE,cAAc,EAClB,MAAM,EAAE,YAAY,KACjB,CAAC,CAAA;AAEN,wEAAwE;AACxE,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,eAAe,IAAI,aAAa,
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../../../../src/repository/adapters/sqlite/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../../../../src/repository/adapters/sqlite/protocol.ts"],"names":[],"mappings":"AAIA,gGAAgG;AAChG,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,OAAO;IACP,OAAO;IACP,WAAW;IACX,UAAU;IACV,YAAY;IACZ,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;CACC,CAAA;
|
|
1
|
+
{"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../../../../src/repository/adapters/sqlite/protocol.ts"],"names":[],"mappings":"AAIA,gGAAgG;AAChG,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,OAAO;IACP,OAAO;IACP,WAAW;IACX,UAAU;IACV,YAAY;IACZ,OAAO;IACP,OAAO;IACP,OAAO;IACP,OAAO;CACC,CAAA;AA8DV,2EAA2E;AAC3E,MAAM,SAAS,GAAG,CAAC,MAAc,EAAE,IAAe,EAAE,MAAe,EAAE,EAAE;IACrE,IAAI,MAA2B,CAAA;IAE/B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,OAAO;YACV,MAAM,GAAG,EAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAc,EAAE,MAAM,EAAE,MAAqB,EAAC,CAAA;YAClF,MAAK;QACP,KAAK,OAAO,CAAC;QACb,KAAK,OAAO;YACV,MAAM,GAAG,EAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,MAAqB,EAAC,CAAA;YAChE,MAAK;QACP,KAAK,OAAO;YACV,MAAM,GAAG,EAAC,IAAI,EAAE,OAAO,EAAC,CAAA;YACxB,MAAK;IACT,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA;AAKD,sFAAsF;AACtF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CACjC,MAAoB,EACpB,MAAwB,EACP,EAAE;IACnB,MAAM,CAAC,OAAO,EAAE,CAAA;IAEhB,MAAM,OAAO,GAAG,IAAI,GAAG,CACrB,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC,CAClD,CAAA;IAED,KAAK,MAAM,MAAM,IAAI,qBAAqB,EAAE,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAoC,CAAC,CAAA;IACxE,CAAC;IAED,OAAO,CAAC,EAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAgB,EAAe,EAAE;QACxD,MAAM,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC7B,IAAI,KAAkB,CAAA;QAEtB,IAAI,CAAC;YACH,IAAI,CAAC,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,EAAE,CAAC,CAAA;YAE1D,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,CAAA;YAEzB,KAAK,GAAG,EAAC,QAAQ,EAAE,EAAC,EAAE,EAAE,MAAM,EAAC,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,EAAC,CAAA;QAC3E,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,KAAK,GAAG,EAAC,QAAQ,EAAE,EAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAC,EAAC,CAAA;QAC5C,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../../../../src/repository/adapters/sqlite/serve.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAIhB,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../../../../src/repository/adapters/sqlite/serve.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,YAAY,EACZ,eAAe,EAIhB,MAAM,eAAe,CAAA;AAuBtB,iGAAiG;AACjG,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,eAAe,EAAE,SAAS,YAAY,CAAC,CAAC,CAAC,SAoC9E,CAAA"}
|
|
@@ -21,15 +21,32 @@ const open = async (name) => {
|
|
|
21
21
|
};
|
|
22
22
|
/** Serves `connectSqlite` from a dedicated worker, with `extend`'s methods over the database. */
|
|
23
23
|
export const serveSqlite = (extend) => {
|
|
24
|
-
|
|
24
|
+
const start = ({ db, wipe }) => ({
|
|
25
|
+
respond: createSqliteHandler(new SqliteEngine(db), extend),
|
|
26
|
+
wipe,
|
|
27
|
+
});
|
|
28
|
+
// A wipe replaces the file, so the engine and the handler over it go with it
|
|
29
|
+
let serving;
|
|
25
30
|
self.onmessage = async ({ data }) => {
|
|
26
31
|
if ("type" in data) {
|
|
27
|
-
|
|
32
|
+
serving = open(data.name).then(start);
|
|
28
33
|
}
|
|
29
|
-
else if (
|
|
34
|
+
else if (serving) {
|
|
30
35
|
try {
|
|
31
|
-
const respond = await
|
|
32
|
-
|
|
36
|
+
const { respond, wipe } = await serving;
|
|
37
|
+
if (data.method === "wipe") {
|
|
38
|
+
serving = wipe().then(db => start({ db, wipe }));
|
|
39
|
+
await serving;
|
|
40
|
+
// The file is gone, so every connection drops what it held
|
|
41
|
+
const change = { type: "clear" };
|
|
42
|
+
self.postMessage({
|
|
43
|
+
response: { id: data.id, result: undefined },
|
|
44
|
+
change,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
self.postMessage(respond(data));
|
|
49
|
+
}
|
|
33
50
|
}
|
|
34
51
|
catch (e) {
|
|
35
52
|
self.postMessage({ response: { id: data.id, error: String(e) } });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../../../../src/repository/adapters/sqlite/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,eAAe,CAAA;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAA;AACxC,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAA;AAQjD,OAAO,EAAC,gBAAgB,EAAC,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../../../../src/repository/adapters/sqlite/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,KAAK,EAAC,MAAM,eAAe,CAAA;AACnC,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAA;AACxC,OAAO,EAAC,mBAAmB,EAAC,MAAM,eAAe,CAAA;AAQjD,OAAO,EAAC,gBAAgB,EAAC,MAAM,WAAW,CAAA;AAG1C,uGAAuG;AACvG,MAAM,OAAO,GAAG,CAAC,KAAc,EAAE,EAAE,CACjC,OAAO,oBAAoB,KAAK,WAAW;IAC3C,wBAAwB,IAAI,oBAAoB,CAAC,SAAS;IAC1D,CAAC,CAAC,KAAK,YAAY,YAAY,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,CAAA;AAEpE,kEAAkE;AAClE,MAAM,IAAI,GAAG,KAAK,EAAE,IAAY,EAAE,EAAE;IAClC,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAA;QACrC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,OAAO,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;gBAAE,MAAM,CAAC,CAAA;YAEzC,MAAM,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAA;QAC9C,CAAC;IACH,CAAC;AACH,CAAC,CAAA;AAED,iGAAiG;AACjG,MAAM,CAAC,MAAM,WAAW,GAAG,CAA4B,MAAwB,EAAE,EAAE;IACjF,MAAM,KAAK,GAAG,CAAC,EAAC,EAAE,EAAE,IAAI,EAAiB,EAAE,EAAE,CAAC,CAAC;QAC7C,OAAO,EAAE,mBAAmB,CAAC,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC;QAC1D,IAAI;KACL,CAAC,CAAA;IAEF,6EAA6E;IAC7E,IAAI,OAAsD,CAAA;IAE1D,IAAI,CAAC,SAAS,GAAG,KAAK,EAAE,EAAC,IAAI,EAA2C,EAAE,EAAE;QAC1E,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;YACnB,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACvC,CAAC;aAAM,IAAI,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC;gBACH,MAAM,EAAC,OAAO,EAAE,IAAI,EAAC,GAAG,MAAM,OAAO,CAAA;gBAErC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;oBAC3B,OAAO,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,EAAC,EAAE,EAAE,IAAI,EAAC,CAAC,CAAC,CAAA;oBAE9C,MAAM,OAAO,CAAA;oBAEb,2DAA2D;oBAC3D,MAAM,MAAM,GAAG,EAAC,IAAI,EAAE,OAAO,EAAU,CAAA;oBAEvC,IAAI,CAAC,WAAW,CAAC;wBACf,QAAQ,EAAE,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAC;wBAC1C,MAAM;qBACe,CAAC,CAAA;gBAC1B,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;gBACjC,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,IAAI,CAAC,WAAW,CAAC,EAAC,QAAQ,EAAE,EAAC,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,EAAC,EAAuB,CAAC,CAAA;YACrF,CAAC;QACH,CAAC;IACH,CAAC,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -2,6 +2,11 @@ import type { Database } from "@sqlite.org/sqlite-wasm";
|
|
|
2
2
|
import type { SqliteDatabase } from "./engine.js";
|
|
3
3
|
/** Adapt a sqlite-wasm database to the engine, preparing each statement once. */
|
|
4
4
|
export declare const wasmDatabase: (db: Database) => SqliteDatabase;
|
|
5
|
+
export type WasmConnection = {
|
|
6
|
+
db: SqliteDatabase;
|
|
7
|
+
/** Discard the file, and serve an empty one in its place. */
|
|
8
|
+
wipe: () => Promise<SqliteDatabase>;
|
|
9
|
+
};
|
|
5
10
|
/** Open `name` in OPFS through its own SAH pool, so tabs can lead different databases at once. */
|
|
6
|
-
export declare const openWasmDatabase: (name: string) => Promise<
|
|
11
|
+
export declare const openWasmDatabase: (name: string) => Promise<WasmConnection>;
|
|
7
12
|
//# sourceMappingURL=wasm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../../../../../src/repository/adapters/sqlite/wasm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,QAAQ,EAAoB,MAAM,yBAAyB,CAAA;AACxE,OAAO,KAAK,EAAW,cAAc,EAAC,MAAM,aAAa,CAAA;AAEzD,iFAAiF;AACjF,eAAO,MAAM,YAAY,GAAI,IAAI,QAAQ,KAAG,cAuD3C,CAAA;AAED,kGAAkG;AAClG,eAAO,MAAM,gBAAgB,GAAU,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"wasm.d.ts","sourceRoot":"","sources":["../../../../../../src/repository/adapters/sqlite/wasm.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,QAAQ,EAAoB,MAAM,yBAAyB,CAAA;AACxE,OAAO,KAAK,EAAW,cAAc,EAAC,MAAM,aAAa,CAAA;AAEzD,iFAAiF;AACjF,eAAO,MAAM,YAAY,GAAI,IAAI,QAAQ,KAAG,cAuD3C,CAAA;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,cAAc,CAAA;IAClB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAA;CACpC,CAAA;AAWD,kGAAkG;AAClG,eAAO,MAAM,gBAAgB,GAAU,MAAM,MAAM,KAAG,OAAO,CAAC,cAAc,CAgC3E,CAAA"}
|
|
@@ -50,12 +50,36 @@ export const wasmDatabase = (db) => {
|
|
|
50
50
|
},
|
|
51
51
|
};
|
|
52
52
|
};
|
|
53
|
+
// A file sqlite refuses to even read is as unusable as a malformed one
|
|
54
|
+
const isReadable = (db) => {
|
|
55
|
+
try {
|
|
56
|
+
return db.selectValue("PRAGMA quick_check") === "ok";
|
|
57
|
+
}
|
|
58
|
+
catch (e) {
|
|
59
|
+
return false;
|
|
60
|
+
}
|
|
61
|
+
};
|
|
53
62
|
/** Open `name` in OPFS through its own SAH pool, so tabs can lead different databases at once. */
|
|
54
63
|
export const openWasmDatabase = async (name) => {
|
|
55
64
|
const sqlite3 = await sqlite3InitModule();
|
|
56
65
|
const pool = await sqlite3.installOpfsSAHPoolVfs({ name: `welshman-${name}` });
|
|
57
|
-
const
|
|
58
|
-
|
|
59
|
-
|
|
66
|
+
const connect = () => {
|
|
67
|
+
const db = new pool.OpfsSAHPoolDb(`/${name}.sqlite3`);
|
|
68
|
+
db.exec("PRAGMA journal_mode = TRUNCATE; PRAGMA synchronous = NORMAL; PRAGMA temp_store = MEMORY");
|
|
69
|
+
return db;
|
|
70
|
+
};
|
|
71
|
+
let db = connect();
|
|
72
|
+
const wipe = async () => {
|
|
73
|
+
// Prepared statements belong to the file they were built against, so the wrapper goes too
|
|
74
|
+
db.close();
|
|
75
|
+
await pool.wipeFiles();
|
|
76
|
+
db = connect();
|
|
77
|
+
return wasmDatabase(db);
|
|
78
|
+
};
|
|
79
|
+
// A malformed image fails every read for as long as it's kept, and the cache rebuilds from relays
|
|
80
|
+
if (!isReadable(db)) {
|
|
81
|
+
await wipe();
|
|
82
|
+
}
|
|
83
|
+
return { db: wasmDatabase(db), wipe };
|
|
60
84
|
};
|
|
61
85
|
//# sourceMappingURL=wasm.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../../../../../src/repository/adapters/sqlite/wasm.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,yBAAyB,CAAA;AAIvD,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAY,EAAkB,EAAE;IAC3D,MAAM,UAAU,GAAG,IAAI,GAAG,EAA6B,CAAA;IAEvD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,MAAkB,EAAE,EAAE;QAClD,IAAI,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAEnC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC3B,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QAChC,CAAC;QAED,0EAA0E;QAC1E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC,CAAA;IAED,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,EAAE;YACV,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACd,CAAC;QACD,sFAAsF;QACtF,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE;YACxB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;YAEtC,IAAI,CAAC;gBACH,SAAS,CAAC,IAAI,EAAE,CAAA;YAClB,CAAC;oBAAS,CAAC;gBACT,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;QACD,GAAG,EAAE,CAAI,GAAW,EAAE,SAAqB,EAAE,EAAE,EAAE;YAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;YACtC,MAAM,IAAI,GAAQ,EAAE,CAAA;YAEpB,IAAI,CAAC;gBACH,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;oBACxB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAM,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACvB,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAClB,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE;gBACtB,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAiB,CAAC;gBAChD,KAAK,EAAE,CAAC;gBACR,aAAa,EAAE,IAAI;aACpB,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAED,kGAAkG;AAClG,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAY,
|
|
1
|
+
{"version":3,"file":"wasm.js","sourceRoot":"","sources":["../../../../../../src/repository/adapters/sqlite/wasm.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,MAAM,yBAAyB,CAAA;AAIvD,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,EAAY,EAAkB,EAAE;IAC3D,MAAM,UAAU,GAAG,IAAI,GAAG,EAA6B,CAAA;IAEvD,MAAM,OAAO,GAAG,CAAC,GAAW,EAAE,MAAkB,EAAE,EAAE;QAClD,IAAI,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAEnC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YAC3B,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC,CAAA;QAChC,CAAC;QAED,0EAA0E;QAC1E,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACxB,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC,CAAA;IAED,OAAO;QACL,IAAI,EAAE,GAAG,CAAC,EAAE;YACV,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;QACd,CAAC;QACD,sFAAsF;QACtF,GAAG,EAAE,CAAC,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,EAAE;YACxB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;YAEtC,IAAI,CAAC;gBACH,SAAS,CAAC,IAAI,EAAE,CAAA;YAClB,CAAC;oBAAS,CAAC;gBACT,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACvB,CAAC;QACH,CAAC;QACD,GAAG,EAAE,CAAI,GAAW,EAAE,SAAqB,EAAE,EAAE,EAAE;YAC/C,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;YACtC,MAAM,IAAI,GAAQ,EAAE,CAAA;YAEpB,IAAI,CAAC;gBACH,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;oBACxB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAM,CAAC,CAAA;gBACnC,CAAC;YACH,CAAC;oBAAS,CAAC;gBACT,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YACvB,CAAC;YAED,OAAO,IAAI,CAAA;QACb,CAAC;QACD,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;YAClB,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE;gBACtB,KAAK,EAAE,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,KAAiB,CAAC;gBAChD,KAAK,EAAE,CAAC;gBACR,aAAa,EAAE,IAAI;aACpB,CAAC,CAAA;QACJ,CAAC;KACF,CAAA;AACH,CAAC,CAAA;AAQD,uEAAuE;AACvE,MAAM,UAAU,GAAG,CAAC,EAAY,EAAE,EAAE;IAClC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAA;IACtD,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC,CAAA;AAED,kGAAkG;AAClG,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,IAAY,EAA2B,EAAE;IAC9E,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAA;IACzC,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,qBAAqB,CAAC,EAAC,IAAI,EAAE,YAAY,IAAI,EAAE,EAAC,CAAC,CAAA;IAE5E,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,UAAU,CAAC,CAAA;QAErD,EAAE,CAAC,IAAI,CACL,yFAAyF,CAC1F,CAAA;QAED,OAAO,EAAE,CAAA;IACX,CAAC,CAAA;IAED,IAAI,EAAE,GAAG,OAAO,EAAE,CAAA;IAElB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;QACtB,0FAA0F;QAC1F,EAAE,CAAC,KAAK,EAAE,CAAA;QACV,MAAM,IAAI,CAAC,SAAS,EAAE,CAAA;QAEtB,EAAE,GAAG,OAAO,EAAE,CAAA;QAEd,OAAO,YAAY,CAAC,EAAE,CAAC,CAAA;IACzB,CAAC,CAAA;IAED,kGAAkG;IAClG,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,EAAE,CAAA;IACd,CAAC;IAED,OAAO,EAAC,EAAE,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,IAAI,EAAC,CAAA;AACrC,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@welshman/store",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.1",
|
|
4
4
|
"author": "hodlbod",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"description": "Event storage and reactive stores for welshman",
|
|
@@ -32,8 +32,8 @@
|
|
|
32
32
|
],
|
|
33
33
|
"peerDependencies": {
|
|
34
34
|
"@sqlite.org/sqlite-wasm": "^3.53.4-build1",
|
|
35
|
-
"@welshman/lib": "0.14.
|
|
36
|
-
"@welshman/util": "0.14.
|
|
35
|
+
"@welshman/lib": "0.14.1",
|
|
36
|
+
"@welshman/util": "0.14.1"
|
|
37
37
|
},
|
|
38
38
|
"peerDependenciesMeta": {
|
|
39
39
|
"@sqlite.org/sqlite-wasm": {
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
44
|
"@sqlite.org/sqlite-wasm": "3.53.4-build1",
|
|
45
|
-
"@welshman/lib": "0.14.
|
|
46
|
-
"@welshman/util": "0.14.
|
|
45
|
+
"@welshman/lib": "0.14.1",
|
|
46
|
+
"@welshman/util": "0.14.1",
|
|
47
47
|
"rimraf": "~6.0.0",
|
|
48
48
|
"typescript": "~5.8.0"
|
|
49
49
|
},
|