@loradb/lora-wasm 0.5.6 → 0.8.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 +76 -34
- package/dist/decode.d.ts +29 -0
- package/dist/decode.d.ts.map +1 -0
- package/dist/decode.js +338 -0
- package/dist/decode.js.map +1 -0
- package/dist/index.d.ts +21 -31
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -37
- package/dist/index.js.map +1 -1
- package/dist/loader-node.d.ts +1 -1
- package/dist/snapshot.d.ts +49 -16
- package/dist/snapshot.d.ts.map +1 -1
- package/dist/snapshot.js +36 -54
- package/dist/snapshot.js.map +1 -1
- package/dist/types.d.ts +81 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +10 -2
- package/dist/types.js.map +1 -1
- package/dist/worker-client.d.ts +20 -20
- package/dist/worker-client.d.ts.map +1 -1
- package/dist/worker-client.js +32 -22
- package/dist/worker-client.js.map +1 -1
- package/dist/worker-protocol.d.ts +5 -2
- package/dist/worker-protocol.d.ts.map +1 -1
- package/dist/worker.js +18 -10
- package/dist/worker.js.map +1 -1
- package/package.json +5 -5
- package/pkg-bundler/README.md +76 -34
- package/pkg-bundler/lora_wasm.d.ts +37 -10
- package/pkg-bundler/lora_wasm_bg.js +173 -26
- package/pkg-bundler/lora_wasm_bg.wasm +0 -0
- package/pkg-bundler/lora_wasm_bg.wasm.d.ts +5 -2
- package/pkg-bundler/package.json +1 -1
- package/pkg-node/README.md +76 -34
- package/pkg-node/lora_wasm.d.ts +37 -10
- package/pkg-node/lora_wasm.js +173 -26
- package/pkg-node/lora_wasm_bg.wasm +0 -0
- package/pkg-node/lora_wasm_bg.wasm.d.ts +5 -2
- package/pkg-node/package.json +1 -1
- package/pkg-web/README.md +76 -34
- package/pkg-web/lora_wasm.d.ts +42 -12
- package/pkg-web/lora_wasm.js +156 -26
- package/pkg-web/lora_wasm_bg.wasm +0 -0
- package/pkg-web/lora_wasm_bg.wasm.d.ts +5 -2
- package/pkg-web/package.json +1 -1
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../ts/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../ts/types.ts"],"names":[],"mappings":"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"}
|
package/dist/worker-client.d.ts
CHANGED
|
@@ -6,20 +6,19 @@
|
|
|
6
6
|
* so consumers can choose the execution model without rewriting their code.
|
|
7
7
|
*/
|
|
8
8
|
import type { LoraParams, LoraValue, QueryResult } from "./types.js";
|
|
9
|
-
import type { Response } from "./worker-protocol.js";
|
|
10
|
-
import type { RowStream, SnapshotMeta, TransactionMode, TransactionStatement } from "./index.js";
|
|
11
|
-
import type { WasmSnapshotSource } from "./snapshot.js";
|
|
9
|
+
import type { Response as WorkerResponse } from "./worker-protocol.js";
|
|
10
|
+
import type { WasmSnapshotByteOptions, WasmSnapshotLoadOptions, WasmSnapshotSource, RowStream, SnapshotMeta, TransactionMode, TransactionStatement } from "./index.js";
|
|
12
11
|
export interface WorkerLike {
|
|
13
12
|
postMessage(message: unknown): void;
|
|
14
13
|
terminate(): void;
|
|
15
14
|
addEventListener(type: "message", listener: (event: {
|
|
16
|
-
data:
|
|
15
|
+
data: WorkerResponse;
|
|
17
16
|
}) => void): void;
|
|
18
17
|
addEventListener(type: "error", listener: (event: {
|
|
19
18
|
message?: string;
|
|
20
19
|
}) => void): void;
|
|
21
20
|
removeEventListener(type: "message", listener: (event: {
|
|
22
|
-
data:
|
|
21
|
+
data: WorkerResponse;
|
|
23
22
|
}) => void): void;
|
|
24
23
|
}
|
|
25
24
|
export interface WorkerDatabase {
|
|
@@ -27,29 +26,30 @@ export interface WorkerDatabase {
|
|
|
27
26
|
stream<T extends Record<string, LoraValue> = Record<string, LoraValue>>(query: string, params?: LoraParams): RowStream<T>;
|
|
28
27
|
rows<T extends Record<string, LoraValue> = Record<string, LoraValue>>(query: string, params?: LoraParams): RowStream<T>;
|
|
29
28
|
transaction<T extends Record<string, LoraValue> = Record<string, LoraValue>>(statements: TransactionStatement[], mode?: TransactionMode): Promise<Array<QueryResult<T>>>;
|
|
30
|
-
saveSnapshotToBytes(): Promise<Uint8Array>;
|
|
31
29
|
saveSnapshot(): Promise<Uint8Array>;
|
|
32
|
-
saveSnapshot(
|
|
33
|
-
saveSnapshot(format: "base64"): Promise<string>;
|
|
34
|
-
saveSnapshot(format: "blob"): Promise<Blob>;
|
|
35
|
-
saveSnapshot(format: "download"): Promise<void>;
|
|
30
|
+
saveSnapshot(options: WasmSnapshotByteOptions): Promise<Uint8Array>;
|
|
36
31
|
saveSnapshot(options: {
|
|
37
|
-
format
|
|
38
|
-
}): Promise<Uint8Array>;
|
|
32
|
+
format?: "bytes";
|
|
33
|
+
} & WasmSnapshotByteOptions): Promise<Uint8Array>;
|
|
39
34
|
saveSnapshot(options: {
|
|
40
|
-
format: "
|
|
41
|
-
}): Promise<
|
|
35
|
+
format: "arrayBuffer";
|
|
36
|
+
} & WasmSnapshotByteOptions): Promise<ArrayBuffer>;
|
|
42
37
|
saveSnapshot(options: {
|
|
43
38
|
format: "blob";
|
|
44
39
|
mimeType?: string;
|
|
45
|
-
}): Promise<Blob>;
|
|
40
|
+
} & WasmSnapshotByteOptions): Promise<Blob>;
|
|
46
41
|
saveSnapshot(options: {
|
|
47
|
-
format: "
|
|
48
|
-
filename?: string;
|
|
42
|
+
format: "response";
|
|
49
43
|
mimeType?: string;
|
|
50
|
-
}): Promise<
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
} & WasmSnapshotByteOptions): Promise<Response>;
|
|
45
|
+
saveSnapshot(options: {
|
|
46
|
+
format: "stream";
|
|
47
|
+
} & WasmSnapshotByteOptions): Promise<ReadableStream<Uint8Array>>;
|
|
48
|
+
saveSnapshot(options: {
|
|
49
|
+
format: "url";
|
|
50
|
+
mimeType?: string;
|
|
51
|
+
} & WasmSnapshotByteOptions): Promise<URL>;
|
|
52
|
+
loadSnapshot(source: WasmSnapshotSource, options?: WasmSnapshotLoadOptions): Promise<SnapshotMeta>;
|
|
53
53
|
clear(): Promise<void>;
|
|
54
54
|
nodeCount(): Promise<number>;
|
|
55
55
|
relationshipCount(): Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-client.d.ts","sourceRoot":"","sources":["../ts/worker-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAW,QAAQ,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-client.d.ts","sourceRoot":"","sources":["../ts/worker-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACZ,MAAM,YAAY,CAAC;AAEpB,OAAO,KAAK,EAAW,QAAQ,IAAI,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EAEvB,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,eAAe,EACf,oBAAoB,EACrB,MAAM,YAAY,CAAC;AAWpB,MAAM,WAAW,UAAU;IACzB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACpC,SAAS,IAAI,IAAI,CAAC;IAClB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,cAAc,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAC7F,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IACvF,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,cAAc,CAAA;KAAE,KAAK,IAAI,GAAG,IAAI,CAAC;CACjG;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EACrE,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,UAAU,GAClB,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EACpE,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,UAAU,GAClB,SAAS,CAAC,CAAC,CAAC,CAAC;IAChB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EAClE,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,UAAU,GAClB,SAAS,CAAC,CAAC,CAAC,CAAC;IAChB,WAAW,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,EACzE,UAAU,EAAE,oBAAoB,EAAE,EAClC,IAAI,CAAC,EAAE,eAAe,GACrB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,YAAY,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC;IACpC,YAAY,CAAC,OAAO,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IACpE,YAAY,CAAC,OAAO,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3F,YAAY,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,aAAa,CAAA;KAAE,GAAG,uBAAuB,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACjG,YAAY,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtG,YAAY,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,UAAU,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,uBAAuB,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC9G,YAAY,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,QAAQ,CAAA;KAAE,GAAG,uBAAuB,GAAG,OAAO,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;IAC3G,YAAY,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,KAAK,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACpG,YAAY,CAAC,MAAM,EAAE,kBAAkB,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACnG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAC7B,iBAAiB,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IACrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AA4ED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,cAAc,CAqIvE"}
|
package/dist/worker-client.js
CHANGED
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
* so consumers can choose the execution model without rewriting their code.
|
|
7
7
|
*/
|
|
8
8
|
import { LoraError } from "./types.js";
|
|
9
|
-
import {
|
|
9
|
+
import { snapshotAsArrayBuffer, snapshotAsBlob, snapshotAsObjectUrl, snapshotAsReadableStream, snapshotAsResponse, readSnapshotSource, } from "./snapshot.js";
|
|
10
|
+
import { decodeResult } from "./decode.js";
|
|
10
11
|
class WorkerRowStream {
|
|
11
12
|
#open;
|
|
12
13
|
#call;
|
|
@@ -105,23 +106,37 @@ export function createWorkerDatabase(worker) {
|
|
|
105
106
|
worker.postMessage(msg);
|
|
106
107
|
});
|
|
107
108
|
}
|
|
108
|
-
async function saveSnapshot(
|
|
109
|
-
const
|
|
110
|
-
const
|
|
111
|
-
|
|
112
|
-
|
|
109
|
+
async function saveSnapshot(options) {
|
|
110
|
+
const bytes = await call({ op: "saveSnapshot", options: options ?? null });
|
|
111
|
+
const format = options && "format" in options ? options.format ?? "bytes" : "bytes";
|
|
112
|
+
const mimeType = options && "mimeType" in options ? options.mimeType : undefined;
|
|
113
|
+
switch (format) {
|
|
114
|
+
case "bytes":
|
|
113
115
|
return bytes;
|
|
114
|
-
case "
|
|
115
|
-
return
|
|
116
|
+
case "arrayBuffer":
|
|
117
|
+
return snapshotAsArrayBuffer(bytes);
|
|
116
118
|
case "blob":
|
|
117
|
-
return
|
|
118
|
-
case "
|
|
119
|
-
return
|
|
119
|
+
return snapshotAsBlob(bytes, mimeType);
|
|
120
|
+
case "response":
|
|
121
|
+
return snapshotAsResponse(bytes, mimeType);
|
|
122
|
+
case "stream":
|
|
123
|
+
return snapshotAsReadableStream(bytes);
|
|
124
|
+
case "url":
|
|
125
|
+
return snapshotAsObjectUrl(bytes, mimeType);
|
|
120
126
|
}
|
|
121
127
|
}
|
|
122
128
|
return {
|
|
123
129
|
execute(query, params) {
|
|
124
|
-
|
|
130
|
+
// The real worker hands back the binary result buffer
|
|
131
|
+
// (transferable Uint8Array, no structured-clone tax) which we
|
|
132
|
+
// decode here on the main thread. The in-process test stub
|
|
133
|
+
// bypasses the encoder and returns the already-decoded object;
|
|
134
|
+
// the typeof check covers both.
|
|
135
|
+
return call({
|
|
136
|
+
op: "execute",
|
|
137
|
+
query,
|
|
138
|
+
params: params ?? null,
|
|
139
|
+
}).then((res) => res instanceof Uint8Array ? decodeResult(res) : res);
|
|
125
140
|
},
|
|
126
141
|
stream(query, params) {
|
|
127
142
|
return new WorkerRowStream(() => {
|
|
@@ -138,17 +153,12 @@ export function createWorkerDatabase(worker) {
|
|
|
138
153
|
transaction(statements, mode = "read_write") {
|
|
139
154
|
return call({ op: "transaction", statements, mode });
|
|
140
155
|
},
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
},
|
|
144
|
-
saveSnapshot: saveSnapshot,
|
|
145
|
-
loadSnapshotFromBytes(bytes) {
|
|
146
|
-
return call({ op: "loadSnapshotFromBytes", bytes });
|
|
147
|
-
},
|
|
148
|
-
async loadSnapshot(source) {
|
|
156
|
+
saveSnapshot,
|
|
157
|
+
async loadSnapshot(source, options) {
|
|
149
158
|
return call({
|
|
150
|
-
op: "
|
|
151
|
-
bytes: await
|
|
159
|
+
op: "loadSnapshot",
|
|
160
|
+
bytes: await readSnapshotSource(source),
|
|
161
|
+
options: options ?? null,
|
|
152
162
|
});
|
|
153
163
|
},
|
|
154
164
|
async clear() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-client.js","sourceRoot":"","sources":["../ts/worker-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-client.js","sourceRoot":"","sources":["../ts/worker-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*/
|
|
8
8
|
import type { LoraParams, QueryResult, LoraErrorCode } from "./types.js";
|
|
9
9
|
import type { TransactionMode, TransactionStatement } from "./index.js";
|
|
10
|
+
import type { WasmSnapshotByteOptions, WasmSnapshotLoadOptions } from "./snapshot.js";
|
|
10
11
|
export type RequestBody = {
|
|
11
12
|
op: "execute";
|
|
12
13
|
query: string;
|
|
@@ -26,10 +27,12 @@ export type RequestBody = {
|
|
|
26
27
|
statements: TransactionStatement[];
|
|
27
28
|
mode?: TransactionMode;
|
|
28
29
|
} | {
|
|
29
|
-
op: "
|
|
30
|
+
op: "saveSnapshot";
|
|
31
|
+
options?: WasmSnapshotByteOptions | null;
|
|
30
32
|
} | {
|
|
31
|
-
op: "
|
|
33
|
+
op: "loadSnapshot";
|
|
32
34
|
bytes: Uint8Array;
|
|
35
|
+
options?: WasmSnapshotLoadOptions | null;
|
|
33
36
|
} | {
|
|
34
37
|
op: "clear";
|
|
35
38
|
} | {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker-protocol.d.ts","sourceRoot":"","sources":["../ts/worker-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"worker-protocol.d.ts","sourceRoot":"","sources":["../ts/worker-protocol.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AACxE,OAAO,KAAK,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAEtF,MAAM,MAAM,WAAW,GACnB;IAAE,EAAE,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,GAC5D;IAAE,EAAE,EAAE,YAAY,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,UAAU,GAAG,IAAI,CAAA;CAAE,GAC/D;IAAE,EAAE,EAAE,YAAY,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACtC;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,UAAU,EAAE,oBAAoB,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,eAAe,CAAA;CAAE,GACjF;IAAE,EAAE,EAAE,cAAc,CAAC;IAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAA;CAAE,GAChE;IAAE,EAAE,EAAE,cAAc,CAAC;IAAC,KAAK,EAAE,UAAU,CAAC;IAAC,OAAO,CAAC,EAAE,uBAAuB,GAAG,IAAI,CAAA;CAAE,GACnF;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,GACf;IAAE,EAAE,EAAE,WAAW,CAAA;CAAE,GACnB;IAAE,EAAE,EAAE,mBAAmB,CAAA;CAAE,GAC3B;IAAE,EAAE,EAAE,SAAS,CAAA;CAAE,CAAC;AAEtB,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,MAAM,MAAM,YAAY,GACpB;IACE,EAAE,EAAE,IAAI,CAAC;IACT,MAAM,EACF,WAAW,GACX,WAAW,EAAE,GACb,MAAM,GACN,UAAU,GACV,IAAI,GACJ;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7B,GACD;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,aAAa,CAAA;KAAE,CAAA;CAAE,CAAC;AAEnE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;CACpB"}
|
package/dist/worker.js
CHANGED
|
@@ -26,14 +26,14 @@ function ensureReady() {
|
|
|
26
26
|
return ready;
|
|
27
27
|
}
|
|
28
28
|
function extractErrorCode(message) {
|
|
29
|
-
const match = /^(
|
|
29
|
+
const match = /^(LORA_[A-Z_]+|WORKER_ERROR):/.exec(message);
|
|
30
30
|
return match?.[1] ?? "UNKNOWN";
|
|
31
31
|
}
|
|
32
32
|
self.onmessage = async (event) => {
|
|
33
33
|
const { id, body } = event.data;
|
|
34
|
-
const respond = (payload) => {
|
|
34
|
+
const respond = (payload, transfer) => {
|
|
35
35
|
const res = { id, body: payload };
|
|
36
|
-
self.postMessage(res);
|
|
36
|
+
self.postMessage(res, transfer ?? []);
|
|
37
37
|
};
|
|
38
38
|
try {
|
|
39
39
|
await ensureReady();
|
|
@@ -41,8 +41,13 @@ self.onmessage = async (event) => {
|
|
|
41
41
|
throw new Error("WORKER_ERROR: database not initialized");
|
|
42
42
|
switch (body.op) {
|
|
43
43
|
case "execute": {
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
// executeBuffer returns the encoded result as a Uint8Array;
|
|
45
|
+
// its underlying ArrayBuffer is transferable, so postMessage
|
|
46
|
+
// skips structured-clone entirely. The client decodes on the
|
|
47
|
+
// main thread in JIT'd JavaScript.
|
|
48
|
+
const native = db;
|
|
49
|
+
const buf = native.executeBuffer(body.query, body.params ?? null);
|
|
50
|
+
respond({ ok: true, result: buf }, [buf.buffer]);
|
|
46
51
|
break;
|
|
47
52
|
}
|
|
48
53
|
case "streamOpen": {
|
|
@@ -59,7 +64,7 @@ self.onmessage = async (event) => {
|
|
|
59
64
|
case "streamNext": {
|
|
60
65
|
const stream = streams.get(body.streamId);
|
|
61
66
|
if (!stream)
|
|
62
|
-
throw new Error("
|
|
67
|
+
throw new Error("LORA_INTERNAL: query stream is closed");
|
|
63
68
|
const row = stream.next();
|
|
64
69
|
if (row === null) {
|
|
65
70
|
streams.delete(body.streamId);
|
|
@@ -82,14 +87,17 @@ self.onmessage = async (event) => {
|
|
|
82
87
|
respond({ ok: true, result: result });
|
|
83
88
|
break;
|
|
84
89
|
}
|
|
85
|
-
case "
|
|
90
|
+
case "saveSnapshot": {
|
|
86
91
|
const native = db;
|
|
87
|
-
respond({ ok: true, result: native.
|
|
92
|
+
respond({ ok: true, result: native.saveSnapshot(body.options ?? null) });
|
|
88
93
|
break;
|
|
89
94
|
}
|
|
90
|
-
case "
|
|
95
|
+
case "loadSnapshot": {
|
|
91
96
|
const native = db;
|
|
92
|
-
respond({
|
|
97
|
+
respond({
|
|
98
|
+
ok: true,
|
|
99
|
+
result: native.loadSnapshot(body.bytes, body.options ?? null),
|
|
100
|
+
});
|
|
93
101
|
break;
|
|
94
102
|
}
|
|
95
103
|
case "clear": {
|
package/dist/worker.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../ts/worker.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,iCAAiC;AAEjC,OAAO,UAAU,EAAE,EACjB,YAAY,EACZ,IAAI,IAAI,gBAAgB,GACzB,MAAM,yBAAyB,CAAC;AAMjC,IAAI,EAAE,GAAwB,IAAI,CAAC;AACnC,IAAI,KAAK,GAAyB,IAAI,CAAC;AACvC,IAAI,YAAY,GAAG,CAAC,CAAC;AACrB,MAAM,OAAO,GAAG,IAAI,GAAG,EAInB,CAAC;AAEL,SAAS,WAAW;IAClB,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE;YAClB,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACzE,MAAM,UAAU,CAAC,OAAO,CAAC,CAAC;YAC1B,gBAAgB,EAAE,CAAC;YACnB,EAAE,GAAG,IAAI,YAAY,EAAE,CAAC;QAC1B,CAAC,CAAC,EAAE,CAAC;IACP,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,gBAAgB,CAAC,OAAe;IACvC,MAAM,KAAK,GAAG,
|
|
1
|
+
{"version":3,"file":"worker.js","sourceRoot":"","sources":["../ts/worker.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@loradb/lora-wasm",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "WebAssembly bindings for the Lora in-memory graph database",
|
|
5
5
|
"license": "BUSL-1.1",
|
|
6
6
|
"author": "LoraDB, Inc.",
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "git+https://github.com/lora-db/lora.git",
|
|
11
|
-
"directory": "crates/lora-wasm"
|
|
11
|
+
"directory": "crates/bindings/lora-wasm"
|
|
12
12
|
},
|
|
13
13
|
"bugs": {
|
|
14
14
|
"url": "https://github.com/lora-db/lora/issues"
|
|
@@ -65,8 +65,8 @@
|
|
|
65
65
|
"node": ">=20"
|
|
66
66
|
},
|
|
67
67
|
"scripts": {
|
|
68
|
-
"sync:types": "node -e \"require('fs').copyFileSync('../shared-ts/
|
|
69
|
-
"verify:types": "node -e \"const fs=require('fs'); const a=fs.readFileSync('../shared-ts/
|
|
68
|
+
"sync:types": "node -e \"const fs=require('fs'); for (const f of ['types.ts','decode.ts']) fs.copyFileSync('../shared-ts/' + f, 'ts/' + f);\"",
|
|
69
|
+
"verify:types": "node -e \"const fs=require('fs'); for (const f of ['types.ts','decode.ts']) { const a=fs.readFileSync('../shared-ts/' + f,'utf8'); const b=fs.readFileSync('ts/' + f,'utf8'); if (a!==b) { console.error('ts/' + f + ' is out of sync with shared-ts/' + f + ' — run npm run sync:types'); process.exit(1);} } \"",
|
|
70
70
|
"prebuild": "npm run sync:types",
|
|
71
71
|
"pretypecheck": "npm run sync:types",
|
|
72
72
|
"pretest": "npm run sync:types",
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"test:watch": "vitest",
|
|
83
83
|
"test:browser": "playwright test",
|
|
84
84
|
"test:browser:install": "playwright install chromium",
|
|
85
|
-
"copy-license": "node -e \"const fs=require('fs'); try { fs.copyFileSync('
|
|
85
|
+
"copy-license": "node -e \"const fs=require('fs'); try { fs.copyFileSync('../../../LICENSE','LICENSE'); } catch (e) { if (e.code !== 'ENOENT') throw e; }\"",
|
|
86
86
|
"prepack": "npm run sync:types && npm run copy-license && npm run build",
|
|
87
87
|
"pack:dry": "npm pack --dry-run"
|
|
88
88
|
},
|
package/pkg-bundler/README.md
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# lora-wasm
|
|
2
2
|
|
|
3
|
-
WebAssembly bindings for the [Lora](
|
|
3
|
+
WebAssembly bindings for the [Lora](../../../README.md) in-memory graph
|
|
4
4
|
database. The package is designed for browsers and Node.js and exposes a
|
|
5
5
|
**strongly typed, async-facing API** that keeps the main thread responsive:
|
|
6
6
|
heavy query work can run inside a Web Worker while your UI code simply awaits
|
|
7
7
|
the result.
|
|
8
8
|
|
|
9
|
-
> **
|
|
9
|
+
> **Package:** `@loradb/lora-wasm`.
|
|
10
10
|
|
|
11
11
|
## Build
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
cd crates/lora-wasm
|
|
14
|
+
cd crates/bindings/lora-wasm
|
|
15
15
|
npm install
|
|
16
16
|
npm run build # wasm-pack (node + bundler) + tsc
|
|
17
17
|
npm test # vitest
|
|
@@ -52,7 +52,7 @@ fails during startup, the package emits one `console.warn` and falls back to
|
|
|
52
52
|
the in-process WASM engine so the app can still run.
|
|
53
53
|
|
|
54
54
|
```ts
|
|
55
|
-
import { createDatabase, isNode } from "lora-wasm";
|
|
55
|
+
import { createDatabase, isNode } from "@loradb/lora-wasm";
|
|
56
56
|
|
|
57
57
|
const db = await createDatabase(); // Worker-backed in browsers when possible
|
|
58
58
|
await db.execute("CREATE (:Person {name: $n})", { n: "Alice" });
|
|
@@ -63,6 +63,37 @@ for (const row of r.rows) {
|
|
|
63
63
|
}
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
+
### Explain & Profile
|
|
67
|
+
|
|
68
|
+
`db.explain()` and `db.profile()` are first-class methods alongside
|
|
69
|
+
`db.execute()`. They are intentionally *separate calls*, not a flag
|
|
70
|
+
on `execute()`, so plan inspection and runtime metrics must be
|
|
71
|
+
requested explicitly.
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
const plan = await db.explain(
|
|
75
|
+
"MATCH (p:Person) WHERE p.name = $name RETURN p",
|
|
76
|
+
{ name: "Alice" },
|
|
77
|
+
);
|
|
78
|
+
console.log(plan.shape); // "readOnly"
|
|
79
|
+
console.log(plan.tree.operator);
|
|
80
|
+
|
|
81
|
+
const profile = await db.profile(
|
|
82
|
+
"MATCH (p:Person) WHERE p.name = $name RETURN p",
|
|
83
|
+
{ name: "Alice" },
|
|
84
|
+
);
|
|
85
|
+
console.log(profile.metrics.totalElapsedNs);
|
|
86
|
+
console.log(profile.metrics.perOperator); // per-step inclusive timing
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
`explain()` never invokes the executor — calling it on a mutating
|
|
90
|
+
query (`CREATE`, `MERGE`, `SET`, `DELETE`, `REMOVE`) leaves the graph
|
|
91
|
+
untouched.
|
|
92
|
+
|
|
93
|
+
> **`profile()` executes the query for real.** Mutating queries
|
|
94
|
+
> produce the same side effects as `execute()`. Use `explain()` to
|
|
95
|
+
> inspect a mutating plan without running it.
|
|
96
|
+
|
|
66
97
|
To force the in-process engine:
|
|
67
98
|
|
|
68
99
|
```ts
|
|
@@ -84,7 +115,7 @@ const db = await createDatabase({ warnOnFallback: false });
|
|
|
84
115
|
### 2. Explicit main-thread WASM
|
|
85
116
|
|
|
86
117
|
```ts
|
|
87
|
-
import { createMainThreadDatabase } from "lora-wasm";
|
|
118
|
+
import { createMainThreadDatabase } from "@loradb/lora-wasm";
|
|
88
119
|
|
|
89
120
|
const db = await createMainThreadDatabase();
|
|
90
121
|
```
|
|
@@ -116,35 +147,36 @@ useful for tests and for swapping execution backends behind the same API.
|
|
|
116
147
|
|
|
117
148
|
## Snapshots
|
|
118
149
|
|
|
119
|
-
WASM has no filesystem access, so
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
`
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
150
|
+
WASM has no filesystem access, so snapshots never accept string paths.
|
|
151
|
+
`saveSnapshot()` defaults to `Uint8Array`, and can also return `ArrayBuffer`,
|
|
152
|
+
`Blob`, `Response`, `ReadableStream`, or an object `URL`. `loadSnapshot`
|
|
153
|
+
accepts `URL`, `Uint8Array`, `ArrayBuffer`, `Blob`, `Response`, and web
|
|
154
|
+
`ReadableStream<Uint8Array | ArrayBuffer>`. The bytes use the database
|
|
155
|
+
snapshot codec (`LORACOL1`) and can be loaded by native LoraDB. Older store
|
|
156
|
+
snapshots use the current `LORACOL1` columnar format.
|
|
157
|
+
Snapshot bytes are uncompressed by default; pass `{ compression: "gzip" }` or
|
|
158
|
+
`{ compression: { format: "gzip", level: 1 } }` to save smaller
|
|
159
|
+
WASM-portable snapshots. Gzip levels `0..9` are supported; level `1` is the
|
|
160
|
+
fast default.
|
|
127
161
|
|
|
128
162
|
```ts
|
|
129
|
-
import { createDatabase } from "lora-wasm";
|
|
163
|
+
import { createDatabase } from "@loradb/lora-wasm";
|
|
130
164
|
|
|
131
165
|
const db = await createDatabase();
|
|
132
166
|
await db.execute("CREATE (:Person {name: 'Alice'})");
|
|
133
167
|
|
|
134
|
-
const bytes = await db.
|
|
135
|
-
const
|
|
136
|
-
const blob = await db.saveSnapshot({ format: "blob" });
|
|
137
|
-
await db.saveSnapshot({ format: "
|
|
168
|
+
const bytes = await db.saveSnapshot();
|
|
169
|
+
const compressed = await db.saveSnapshot({ compression: "gzip" });
|
|
170
|
+
const blob = await db.saveSnapshot({ format: "blob", compression: "gzip" });
|
|
171
|
+
const response = await db.saveSnapshot({ format: "response" });
|
|
138
172
|
|
|
139
173
|
await db.loadSnapshot(bytes);
|
|
174
|
+
await db.loadSnapshot(compressed);
|
|
140
175
|
await db.loadSnapshot(blob);
|
|
141
|
-
await db.loadSnapshot(
|
|
176
|
+
await db.loadSnapshot(response);
|
|
142
177
|
await db.loadSnapshot(new URL("/graph.lorasnap", location.href));
|
|
143
178
|
```
|
|
144
179
|
|
|
145
|
-
`loadSnapshotFromBytes(bytes)` remains available for the narrow
|
|
146
|
-
`Uint8Array`-only path.
|
|
147
|
-
|
|
148
180
|
## Typed value model
|
|
149
181
|
|
|
150
182
|
| TS type | Runtime shape |
|
|
@@ -171,31 +203,42 @@ Helper constructors: `date`, `time`, `datetime`, `localtime`, `localdatetime`,
|
|
|
171
203
|
`isNode`, `isRelationship`, `isPath`, `isPoint`, `isTemporal`.
|
|
172
204
|
|
|
173
205
|
> `distance()` on WGS-84-3D points ignores `height`. See
|
|
174
|
-
> [functions reference](
|
|
206
|
+
> [functions reference](../../../apps/loradb.com/docs/functions/overview.md) for the spatial
|
|
175
207
|
> reference and out-of-scope operations.
|
|
176
208
|
|
|
177
209
|
## Errors
|
|
178
210
|
|
|
179
|
-
`db.execute(...)` and the worker client throw `LoraError` with a
|
|
180
|
-
`code
|
|
211
|
+
`db.execute(...)` and the worker client throw `LoraError` with a
|
|
212
|
+
narrowed `code` from the `LoraErrorCode` union — these mirror
|
|
213
|
+
`lora_database::LoraErrorCode` 1:1, plus `WORKER_ERROR` and `UNKNOWN`.
|
|
181
214
|
|
|
182
|
-
|
|
183
|
-
|
|
215
|
+
Common ones:
|
|
216
|
+
|
|
217
|
+
- `LORA_PARSE` — Cypher syntax could not be parsed
|
|
218
|
+
- `LORA_SEMANTIC` — analysis failure (unknown variable, label, type mismatch, …)
|
|
219
|
+
- `LORA_INVALID_PARAMS` — a parameter value could not be coerced to a `LoraValue`
|
|
220
|
+
- `LORA_INVALID_VECTOR` — vector value failed dimension / coordinate-type validation
|
|
221
|
+
- `LORA_TIMEOUT` — query exceeded its cooperative deadline
|
|
222
|
+
- `LORA_IO`, `LORA_SNAPSHOT_CODEC`, `LORA_SNAPSHOT_CRYPTO` — storage / snapshot failures
|
|
223
|
+
- `LORA_INTERNAL` — last-resort fallback when the engine cannot classify the failure
|
|
184
224
|
- `WORKER_ERROR` — worker transport / lifecycle failure (worker client only)
|
|
185
225
|
|
|
226
|
+
See `ts/types.ts` (`LoraErrorCode`) for the full list.
|
|
227
|
+
|
|
186
228
|
## Shared type contract
|
|
187
229
|
|
|
188
230
|
The public TypeScript value model (`LoraValue`, `LoraNode`, …,
|
|
189
231
|
`QueryResult`, `LoraError`) lives in a single canonical file at
|
|
190
|
-
`crates/shared-ts/types.ts` and is copied into each consumer package by
|
|
232
|
+
`crates/bindings/shared-ts/types.ts` and is copied into each consumer package by
|
|
191
233
|
its `sync:types` npm script. CI runs `verify:types` to fail on drift.
|
|
192
234
|
That keeps `lora-node` and `lora-wasm` locked to one identical
|
|
193
235
|
public surface — consumers can swap backends without rewriting types.
|
|
194
236
|
|
|
195
237
|
## Known limitations
|
|
196
238
|
|
|
197
|
-
- The wasm module
|
|
198
|
-
|
|
239
|
+
- The wasm module runs inside one JavaScript runtime. Auto-commit reads can
|
|
240
|
+
overlap on engine snapshots; write commits serialize. Use more Workers for
|
|
241
|
+
separate graphs or stronger UI isolation.
|
|
199
242
|
- I64 values are delivered as JS `number` and lose precision above 2^53.
|
|
200
243
|
Applications that need bigint precision should use the native
|
|
201
244
|
`lora-node` binding instead.
|
|
@@ -227,7 +270,7 @@ public surface — consumers can swap backends without rewriting types.
|
|
|
227
270
|
forms, parameter validation errors, and concurrent queries across the
|
|
228
271
|
worker message protocol.
|
|
229
272
|
- The TypeScript public contract is shared verbatim with `lora-node`
|
|
230
|
-
via `crates/shared-ts/types.ts`, enforced by `verify:types` in CI.
|
|
273
|
+
via `crates/bindings/shared-ts/types.ts`, enforced by `verify:types` in CI.
|
|
231
274
|
- `npm pack --dry-run` produces a 45-file, 6.6 MB tarball containing
|
|
232
275
|
all three wasm bundles plus the compiled TS wrapper. No `file:` deps,
|
|
233
276
|
no postinstall scripts.
|
|
@@ -244,9 +287,8 @@ public surface — consumers can swap backends without rewriting types.
|
|
|
244
287
|
- I64 precision is capped at `Number.MAX_SAFE_INTEGER`. For larger
|
|
245
288
|
integer properties we need a `bigint`-aware serializer on the wasm
|
|
246
289
|
boundary.
|
|
247
|
-
- The engine is synchronous inside wasm
|
|
248
|
-
|
|
249
|
-
possible), or an engine-level cooperative scheduler.
|
|
290
|
+
- The engine is synchronous inside wasm once a call enters the module. A slow
|
|
291
|
+
query blocks that Worker until completion.
|
|
250
292
|
- No query cancellation or progress streaming crosses the Worker
|
|
251
293
|
boundary; a slow query blocks that Worker until completion.
|
|
252
294
|
|