data-of-loathing 3.1.0 → 3.1.2
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/browser.d.ts +9 -5
- package/dist/browser.js +286 -79
- package/dist/browser.js.map +1 -0
- package/dist/chunk-7W3YGJW5.js +998 -0
- package/dist/chunk-7W3YGJW5.js.map +1 -0
- package/dist/node.d.ts +9 -5
- package/dist/node.js +169 -49
- package/dist/node.js.map +1 -0
- package/dist/{schema.d.ts → schema-BIjWJRph.d.ts} +73 -57
- package/dist/vite.d.ts +5 -2
- package/dist/vite.js +25 -20
- package/dist/vite.js.map +1 -0
- package/dist/workers/memory.js +32 -24
- package/dist/workers/memory.js.map +1 -0
- package/dist/workers/opfs.js +22 -21
- package/dist/workers/opfs.js.map +1 -0
- package/dist/workers/ranged.js +193 -190
- package/dist/workers/ranged.js.map +1 -0
- package/package.json +5 -3
- package/dist/BaseClient.d.ts +0 -14
- package/dist/BaseClient.js +0 -30
- package/dist/SqliteWorkerDialect.d.ts +0 -12
- package/dist/SqliteWorkerDialect.js +0 -72
- package/dist/schema.js +0 -910
- package/dist/workers/memory.d.ts +0 -1
- package/dist/workers/opfs.d.ts +0 -1
- package/dist/workers/ranged.d.ts +0 -1
package/dist/browser.d.ts
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
import { BaseClient } from
|
|
2
|
-
export
|
|
1
|
+
import { B as BaseClient } from './schema-BIjWJRph.js';
|
|
2
|
+
export { A as AscensionClass, a as AscensionClassSchema, C as Concoction, b as ConcoctionSchema, c as Consumable, d as ConsumableQuality, e as ConsumableSchema, E as Effect, f as EffectModifiers, g as EffectModifiersSchema, h as EffectQuality, i as EffectSchema, j as Equipment, k as EquipmentSchema, F as Familiar, l as FamiliarCategory, m as FamiliarModifiers, n as FamiliarModifiersSchema, o as FamiliarSchema, p as FoldGroup, q as FoldGroupSchema, I as Ingredient, r as IngredientSchema, s as Item, t as ItemModifiers, u as ItemModifiersSchema, v as ItemSchema, w as ItemUse, L as Location, x as LocationDifficulty, y as LocationEnvironment, z as LocationSchema, M as Meta, D as MetaSchema, G as Monster, H as MonsterDrop, J as MonsterDropCategory, K as MonsterDropSchema, N as MonsterElement, O as MonsterSchema, P as NativeMonster, Q as NativeMonsterSchema, R as Outfit, S as OutfitSchema, T as OutfitTreat, U as OutfitTreatSchema, V as Path, W as PathSchema, X as Skill, Y as SkillModifiers, Z as SkillModifiersSchema, _ as SkillSchema, $ as SkillTag, a0 as ZapGroup, a1 as ZapGroupSchema, a2 as entities } from './schema-BIjWJRph.js';
|
|
3
|
+
import '@mikro-orm/core';
|
|
4
|
+
|
|
5
|
+
type Strategy = {
|
|
3
6
|
strategy?: "memory";
|
|
4
7
|
url?: string;
|
|
5
8
|
force?: boolean;
|
|
@@ -11,12 +14,13 @@ export type Strategy = {
|
|
|
11
14
|
strategy: "ranged";
|
|
12
15
|
url?: string;
|
|
13
16
|
};
|
|
14
|
-
|
|
17
|
+
declare class Client extends BaseClient<Strategy> {
|
|
15
18
|
#private;
|
|
16
19
|
constructor(strategy?: Strategy);
|
|
17
20
|
protected getStoredEtag(_key: string): Promise<string | null>;
|
|
18
21
|
protected storeEtag(_key: string, etag: string): Promise<void>;
|
|
19
22
|
load(): Promise<void>;
|
|
20
23
|
}
|
|
21
|
-
|
|
22
|
-
|
|
24
|
+
declare function createClient(strategy?: Strategy): Client;
|
|
25
|
+
|
|
26
|
+
export { Client, type Strategy, createClient };
|
package/dist/browser.js
CHANGED
|
@@ -1,90 +1,297 @@
|
|
|
1
|
+
import {
|
|
2
|
+
AscensionClass,
|
|
3
|
+
AscensionClassSchema,
|
|
4
|
+
BaseClient,
|
|
5
|
+
Concoction,
|
|
6
|
+
ConcoctionSchema,
|
|
7
|
+
Consumable,
|
|
8
|
+
ConsumableQuality,
|
|
9
|
+
ConsumableSchema,
|
|
10
|
+
DEFAULT_URL,
|
|
11
|
+
ETAG_KEY,
|
|
12
|
+
Effect,
|
|
13
|
+
EffectModifiers,
|
|
14
|
+
EffectModifiersSchema,
|
|
15
|
+
EffectQuality,
|
|
16
|
+
EffectSchema,
|
|
17
|
+
Equipment,
|
|
18
|
+
EquipmentSchema,
|
|
19
|
+
Familiar,
|
|
20
|
+
FamiliarCategory,
|
|
21
|
+
FamiliarModifiers,
|
|
22
|
+
FamiliarModifiersSchema,
|
|
23
|
+
FamiliarSchema,
|
|
24
|
+
FoldGroup,
|
|
25
|
+
FoldGroupSchema,
|
|
26
|
+
Ingredient,
|
|
27
|
+
IngredientSchema,
|
|
28
|
+
Item,
|
|
29
|
+
ItemModifiers,
|
|
30
|
+
ItemModifiersSchema,
|
|
31
|
+
ItemSchema,
|
|
32
|
+
ItemUse,
|
|
33
|
+
Location,
|
|
34
|
+
LocationDifficulty,
|
|
35
|
+
LocationEnvironment,
|
|
36
|
+
LocationSchema,
|
|
37
|
+
Meta,
|
|
38
|
+
MetaSchema,
|
|
39
|
+
Monster,
|
|
40
|
+
MonsterDrop,
|
|
41
|
+
MonsterDropCategory,
|
|
42
|
+
MonsterDropSchema,
|
|
43
|
+
MonsterElement,
|
|
44
|
+
MonsterSchema,
|
|
45
|
+
NativeMonster,
|
|
46
|
+
NativeMonsterSchema,
|
|
47
|
+
Outfit,
|
|
48
|
+
OutfitSchema,
|
|
49
|
+
OutfitTreat,
|
|
50
|
+
OutfitTreatSchema,
|
|
51
|
+
Path,
|
|
52
|
+
PathSchema,
|
|
53
|
+
Skill,
|
|
54
|
+
SkillModifiers,
|
|
55
|
+
SkillModifiersSchema,
|
|
56
|
+
SkillSchema,
|
|
57
|
+
SkillTag,
|
|
58
|
+
ZapGroup,
|
|
59
|
+
ZapGroupSchema,
|
|
60
|
+
entities
|
|
61
|
+
} from "./chunk-7W3YGJW5.js";
|
|
62
|
+
|
|
63
|
+
// src/browser.ts
|
|
1
64
|
import { SqlMikroORM, SqliteDriver } from "@mikro-orm/sql";
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import {
|
|
65
|
+
|
|
66
|
+
// src/SqliteWorkerDialect.ts
|
|
67
|
+
import {
|
|
68
|
+
SqliteAdapter,
|
|
69
|
+
SqliteIntrospector,
|
|
70
|
+
SqliteQueryCompiler
|
|
71
|
+
} from "kysely";
|
|
72
|
+
var SqliteWorkerDialect = class {
|
|
73
|
+
#worker;
|
|
74
|
+
#pending = /* @__PURE__ */ new Map();
|
|
75
|
+
#nextId = 0;
|
|
76
|
+
constructor(worker) {
|
|
77
|
+
this.#worker = worker;
|
|
78
|
+
this.#worker.onmessage = (event) => {
|
|
79
|
+
const pending = this.#pending.get(event.data.id);
|
|
80
|
+
if (!pending) return;
|
|
81
|
+
this.#pending.delete(event.data.id);
|
|
82
|
+
if (event.data.type === "error") {
|
|
83
|
+
pending.reject(new Error(event.data.error));
|
|
84
|
+
} else if (event.data.type === "exec") {
|
|
85
|
+
pending.resolve(event.data.rows);
|
|
86
|
+
} else {
|
|
87
|
+
pending.resolve(void 0);
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
#send(message, transfer) {
|
|
92
|
+
const id = String(++this.#nextId);
|
|
93
|
+
const promise = new Promise((resolve, reject) => {
|
|
94
|
+
this.#pending.set(id, { resolve: (v) => resolve(v), reject });
|
|
95
|
+
});
|
|
96
|
+
this.#worker.postMessage({ ...message, id }, transfer ?? []);
|
|
97
|
+
return promise;
|
|
98
|
+
}
|
|
99
|
+
loadMemory(buffer) {
|
|
100
|
+
return this.#send({ type: "load", buffer }, [buffer]);
|
|
101
|
+
}
|
|
102
|
+
loadOpfs(filename) {
|
|
103
|
+
return this.#send({ type: "load", filename });
|
|
104
|
+
}
|
|
105
|
+
loadRanged(url) {
|
|
106
|
+
return this.#send({ type: "load", url });
|
|
107
|
+
}
|
|
108
|
+
createDriver() {
|
|
109
|
+
const dialect = this;
|
|
110
|
+
const connection = {
|
|
111
|
+
executeQuery(query) {
|
|
112
|
+
return dialect.#send({ type: "exec", sql: query.sql, bind: [...query.parameters] }).then((rows) => ({ rows }));
|
|
113
|
+
},
|
|
114
|
+
async *streamQuery() {
|
|
115
|
+
throw new Error("Streaming not supported");
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
return {
|
|
119
|
+
async init() {
|
|
120
|
+
},
|
|
121
|
+
async acquireConnection() {
|
|
122
|
+
return connection;
|
|
123
|
+
},
|
|
124
|
+
async beginTransaction() {
|
|
125
|
+
},
|
|
126
|
+
async commitTransaction() {
|
|
127
|
+
},
|
|
128
|
+
async rollbackTransaction() {
|
|
129
|
+
},
|
|
130
|
+
async releaseConnection() {
|
|
131
|
+
},
|
|
132
|
+
async destroy() {
|
|
133
|
+
dialect.#worker.terminate();
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
createQueryCompiler() {
|
|
138
|
+
return new SqliteQueryCompiler();
|
|
139
|
+
}
|
|
140
|
+
createAdapter() {
|
|
141
|
+
return new SqliteAdapter();
|
|
142
|
+
}
|
|
143
|
+
createIntrospector(db) {
|
|
144
|
+
return new SqliteIntrospector(db);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
// src/browser.ts
|
|
5
149
|
async function getOpfsEtag() {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
150
|
+
try {
|
|
151
|
+
const root = await navigator.storage.getDirectory();
|
|
152
|
+
const handle = await root.getFileHandle(".dol-etag");
|
|
153
|
+
return (await handle.getFile()).text();
|
|
154
|
+
} catch {
|
|
155
|
+
return null;
|
|
156
|
+
}
|
|
14
157
|
}
|
|
15
158
|
async function setOpfsEtag(etag) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
159
|
+
const root = await navigator.storage.getDirectory();
|
|
160
|
+
const handle = await root.getFileHandle(".dol-etag", { create: true });
|
|
161
|
+
const writable = await handle.createWritable();
|
|
162
|
+
await writable.write(etag);
|
|
163
|
+
await writable.close();
|
|
21
164
|
}
|
|
22
165
|
async function writeToOpfs(filename, buffer) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
166
|
+
const root = await navigator.storage.getDirectory();
|
|
167
|
+
const handle = await root.getFileHandle(filename, { create: true });
|
|
168
|
+
const writable = await handle.createWritable();
|
|
169
|
+
await writable.write(buffer);
|
|
170
|
+
await writable.close();
|
|
28
171
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
65
|
-
case "memory":
|
|
66
|
-
default: {
|
|
67
|
-
this.#dialect = new SqliteWorkerDialect(new Worker(new URL("./workers/memory.js", import.meta.url), { type: "module" }));
|
|
68
|
-
const { force = false } = strategy;
|
|
69
|
-
const response = await fetch(url, {
|
|
70
|
-
cache: force ? "reload" : "default",
|
|
71
|
-
});
|
|
72
|
-
if (!response.ok)
|
|
73
|
-
throw new Error(`Failed to fetch database: ${response.status}`);
|
|
74
|
-
const buffer = await response.arrayBuffer();
|
|
75
|
-
await this.#dialect.loadMemory(buffer);
|
|
76
|
-
}
|
|
172
|
+
var Client = class extends BaseClient {
|
|
173
|
+
#dialect;
|
|
174
|
+
constructor(strategy = {}) {
|
|
175
|
+
super(strategy);
|
|
176
|
+
}
|
|
177
|
+
async getStoredEtag(_key) {
|
|
178
|
+
return localStorage.getItem(ETAG_KEY);
|
|
179
|
+
}
|
|
180
|
+
async storeEtag(_key, etag) {
|
|
181
|
+
localStorage.setItem(ETAG_KEY, etag);
|
|
182
|
+
}
|
|
183
|
+
async load() {
|
|
184
|
+
await this._orm?.close();
|
|
185
|
+
this.#dialect?.createDriver().destroy();
|
|
186
|
+
const strategy = this._strategy;
|
|
187
|
+
const url = this._strategy.url ?? DEFAULT_URL;
|
|
188
|
+
switch (strategy.strategy) {
|
|
189
|
+
case "ranged": {
|
|
190
|
+
this.#dialect = new SqliteWorkerDialect(
|
|
191
|
+
new Worker(new URL("./workers/ranged.js", import.meta.url), { type: "module" })
|
|
192
|
+
);
|
|
193
|
+
await this.#dialect.loadRanged(url);
|
|
194
|
+
break;
|
|
195
|
+
}
|
|
196
|
+
case "opfs": {
|
|
197
|
+
this.#dialect = new SqliteWorkerDialect(
|
|
198
|
+
new Worker(new URL("./workers/opfs.js", import.meta.url), { type: "module" })
|
|
199
|
+
);
|
|
200
|
+
const { force = false } = strategy;
|
|
201
|
+
const remoteEtag = (await fetch(url, { method: "HEAD" })).headers.get("etag");
|
|
202
|
+
const storedEtag = force ? null : await getOpfsEtag();
|
|
203
|
+
if (force || storedEtag !== remoteEtag) {
|
|
204
|
+
const buffer = await this.fetchDb(url);
|
|
205
|
+
await writeToOpfs("dol.sqlite", buffer);
|
|
206
|
+
if (remoteEtag) await setOpfsEtag(remoteEtag);
|
|
77
207
|
}
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
208
|
+
await this.#dialect.loadOpfs("/dol.sqlite");
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
case "memory":
|
|
212
|
+
default: {
|
|
213
|
+
this.#dialect = new SqliteWorkerDialect(
|
|
214
|
+
new Worker(new URL("./workers/memory.js", import.meta.url), { type: "module" })
|
|
215
|
+
);
|
|
216
|
+
const { force = false } = strategy;
|
|
217
|
+
const response = await fetch(url, {
|
|
218
|
+
cache: force ? "reload" : "default"
|
|
84
219
|
});
|
|
220
|
+
if (!response.ok) throw new Error(`Failed to fetch database: ${response.status}`);
|
|
221
|
+
const buffer = await response.arrayBuffer();
|
|
222
|
+
await this.#dialect.loadMemory(buffer);
|
|
223
|
+
}
|
|
85
224
|
}
|
|
225
|
+
this._orm = await SqlMikroORM.init({
|
|
226
|
+
driver: SqliteDriver,
|
|
227
|
+
driverOptions: this.#dialect,
|
|
228
|
+
dbName: "dol.sqlite",
|
|
229
|
+
entities,
|
|
230
|
+
allowGlobalContext: true
|
|
231
|
+
});
|
|
232
|
+
}
|
|
233
|
+
};
|
|
234
|
+
function createClient(strategy = {}) {
|
|
235
|
+
return new Client(strategy);
|
|
86
236
|
}
|
|
87
|
-
export
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
237
|
+
export {
|
|
238
|
+
AscensionClass,
|
|
239
|
+
AscensionClassSchema,
|
|
240
|
+
Client,
|
|
241
|
+
Concoction,
|
|
242
|
+
ConcoctionSchema,
|
|
243
|
+
Consumable,
|
|
244
|
+
ConsumableQuality,
|
|
245
|
+
ConsumableSchema,
|
|
246
|
+
Effect,
|
|
247
|
+
EffectModifiers,
|
|
248
|
+
EffectModifiersSchema,
|
|
249
|
+
EffectQuality,
|
|
250
|
+
EffectSchema,
|
|
251
|
+
Equipment,
|
|
252
|
+
EquipmentSchema,
|
|
253
|
+
Familiar,
|
|
254
|
+
FamiliarCategory,
|
|
255
|
+
FamiliarModifiers,
|
|
256
|
+
FamiliarModifiersSchema,
|
|
257
|
+
FamiliarSchema,
|
|
258
|
+
FoldGroup,
|
|
259
|
+
FoldGroupSchema,
|
|
260
|
+
Ingredient,
|
|
261
|
+
IngredientSchema,
|
|
262
|
+
Item,
|
|
263
|
+
ItemModifiers,
|
|
264
|
+
ItemModifiersSchema,
|
|
265
|
+
ItemSchema,
|
|
266
|
+
ItemUse,
|
|
267
|
+
Location,
|
|
268
|
+
LocationDifficulty,
|
|
269
|
+
LocationEnvironment,
|
|
270
|
+
LocationSchema,
|
|
271
|
+
Meta,
|
|
272
|
+
MetaSchema,
|
|
273
|
+
Monster,
|
|
274
|
+
MonsterDrop,
|
|
275
|
+
MonsterDropCategory,
|
|
276
|
+
MonsterDropSchema,
|
|
277
|
+
MonsterElement,
|
|
278
|
+
MonsterSchema,
|
|
279
|
+
NativeMonster,
|
|
280
|
+
NativeMonsterSchema,
|
|
281
|
+
Outfit,
|
|
282
|
+
OutfitSchema,
|
|
283
|
+
OutfitTreat,
|
|
284
|
+
OutfitTreatSchema,
|
|
285
|
+
Path,
|
|
286
|
+
PathSchema,
|
|
287
|
+
Skill,
|
|
288
|
+
SkillModifiers,
|
|
289
|
+
SkillModifiersSchema,
|
|
290
|
+
SkillSchema,
|
|
291
|
+
SkillTag,
|
|
292
|
+
ZapGroup,
|
|
293
|
+
ZapGroupSchema,
|
|
294
|
+
createClient,
|
|
295
|
+
entities
|
|
296
|
+
};
|
|
297
|
+
//# sourceMappingURL=browser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/browser.ts","../src/SqliteWorkerDialect.ts"],"sourcesContent":["import { SqlMikroORM, SqliteDriver } from \"@mikro-orm/sql\";\nimport { entities } from \"./schema.js\";\nimport { SqliteWorkerDialect } from \"./SqliteWorkerDialect.js\";\nimport { BaseClient, DEFAULT_URL, ETAG_KEY } from \"./BaseClient.js\";\n\nexport type Strategy =\n | { strategy?: \"memory\"; url?: string; force?: boolean }\n | { strategy: \"opfs\"; url?: string; force?: boolean }\n | { strategy: \"ranged\"; url?: string };\n\nasync function getOpfsEtag(): Promise<string | null> {\n try {\n const root = await navigator.storage.getDirectory();\n const handle = await root.getFileHandle(\".dol-etag\");\n return (await handle.getFile()).text();\n } catch {\n return null;\n }\n}\n\nasync function setOpfsEtag(etag: string): Promise<void> {\n const root = await navigator.storage.getDirectory();\n const handle = await root.getFileHandle(\".dol-etag\", { create: true });\n const writable = await handle.createWritable();\n await writable.write(etag);\n await writable.close();\n}\n\nasync function writeToOpfs(filename: string, buffer: ArrayBuffer): Promise<void> {\n const root = await navigator.storage.getDirectory();\n const handle = await root.getFileHandle(filename, { create: true });\n const writable = await handle.createWritable();\n await writable.write(buffer);\n await writable.close();\n}\n\nexport class Client extends BaseClient<Strategy> {\n #dialect?: SqliteWorkerDialect;\n\n constructor(strategy: Strategy = {}) {\n super(strategy);\n }\n\n protected async getStoredEtag(_key: string): Promise<string | null> {\n return localStorage.getItem(ETAG_KEY);\n }\n\n protected async storeEtag(_key: string, etag: string): Promise<void> {\n localStorage.setItem(ETAG_KEY, etag);\n }\n\n async load(): Promise<void> {\n await this._orm?.close();\n this.#dialect?.createDriver().destroy();\n\n const strategy = this._strategy;\n const url = this._strategy.url ?? DEFAULT_URL;\n\n switch (strategy.strategy) {\n case \"ranged\": {\n this.#dialect = new SqliteWorkerDialect(\n new Worker(new URL(\"./workers/ranged.js\", import.meta.url), { type: \"module\" }),\n );\n await this.#dialect.loadRanged(url);\n break;\n }\n case \"opfs\": {\n this.#dialect = new SqliteWorkerDialect(\n new Worker(new URL(\"./workers/opfs.js\", import.meta.url), { type: \"module\" }),\n );\n const { force = false } = strategy;\n const remoteEtag = (await fetch(url, { method: \"HEAD\" })).headers.get(\"etag\");\n const storedEtag = force ? null : await getOpfsEtag();\n\n if (force || storedEtag !== remoteEtag) {\n const buffer = await this.fetchDb(url);\n await writeToOpfs(\"dol.sqlite\", buffer);\n if (remoteEtag) await setOpfsEtag(remoteEtag);\n }\n\n await this.#dialect.loadOpfs(\"/dol.sqlite\");\n break;\n }\n case \"memory\":\n default: {\n this.#dialect = new SqliteWorkerDialect(\n new Worker(new URL(\"./workers/memory.js\", import.meta.url), { type: \"module\" }),\n );\n const { force = false } = strategy;\n const response = await fetch(url, {\n cache: force ? \"reload\" : \"default\",\n });\n if (!response.ok) throw new Error(`Failed to fetch database: ${response.status}`);\n const buffer = await response.arrayBuffer();\n await this.#dialect.loadMemory(buffer);\n }\n }\n\n this._orm = await SqlMikroORM.init({\n driver: SqliteDriver,\n driverOptions: this.#dialect,\n dbName: \"dol.sqlite\",\n entities,\n allowGlobalContext: true,\n });\n }\n}\n\nexport function createClient(strategy: Strategy = {}): Client {\n return new Client(strategy);\n}\n\nexport * from \"./schema.js\";\n","import { type SqlValue } from \"@sqlite.org/sqlite-wasm\";\nimport {\n SqliteAdapter,\n SqliteIntrospector,\n SqliteQueryCompiler,\n type CompiledQuery,\n type DatabaseConnection,\n type DatabaseIntrospector,\n type Dialect,\n type DialectAdapter,\n type Driver,\n type Kysely,\n type QueryCompiler,\n type QueryResult,\n} from \"kysely\";\n\ntype WorkerResponse =\n | { id: string; type: \"loaded\" }\n | { id: string; type: \"exec\"; rows: Record<string, SqlValue>[] }\n | { id: string; type: \"error\"; error: string };\n\nexport class SqliteWorkerDialect implements Dialect {\n readonly #worker: Worker;\n readonly #pending = new Map<string, { resolve: (value: Record<string, SqlValue>[] | undefined) => void; reject: (err: Error) => void }>();\n #nextId = 0;\n\n constructor(worker: Worker) {\n this.#worker = worker;\n this.#worker.onmessage = (event: MessageEvent<WorkerResponse>) => {\n const pending = this.#pending.get(event.data.id);\n if (!pending) return;\n this.#pending.delete(event.data.id);\n if (event.data.type === \"error\") {\n pending.reject(new Error(event.data.error));\n } else if (event.data.type === \"exec\") {\n pending.resolve(event.data.rows);\n } else {\n pending.resolve(undefined);\n }\n };\n }\n\n #send<T>(message: object, transfer?: Transferable[]): Promise<T> {\n const id = String(++this.#nextId);\n const promise = new Promise<T>((resolve, reject) => {\n this.#pending.set(id, { resolve: (v) => resolve(v as T), reject });\n });\n this.#worker.postMessage({ ...message, id }, transfer ?? []);\n return promise;\n }\n\n loadMemory(buffer: ArrayBuffer): Promise<void> {\n return this.#send<void>({ type: \"load\", buffer }, [buffer]);\n }\n\n loadOpfs(filename: string): Promise<void> {\n return this.#send<void>({ type: \"load\", filename });\n }\n\n loadRanged(url: string): Promise<void> {\n return this.#send<void>({ type: \"load\", url });\n }\n\n createDriver(): Driver {\n const dialect = this;\n const connection: DatabaseConnection = {\n executeQuery<O>(query: CompiledQuery): Promise<QueryResult<O>> {\n return dialect\n .#send<O[]>({ type: \"exec\", sql: query.sql, bind: [...query.parameters] })\n .then((rows) => ({ rows }));\n },\n async *streamQuery() {\n throw new Error(\"Streaming not supported\");\n },\n };\n return {\n async init() {},\n async acquireConnection() { return connection; },\n async beginTransaction() {},\n async commitTransaction() {},\n async rollbackTransaction() {},\n async releaseConnection() {},\n async destroy() { dialect.#worker.terminate(); },\n };\n }\n\n createQueryCompiler(): QueryCompiler {\n return new SqliteQueryCompiler();\n }\n\n createAdapter(): DialectAdapter {\n return new SqliteAdapter();\n }\n\n createIntrospector(db: Kysely<any>): DatabaseIntrospector {\n return new SqliteIntrospector(db);\n }\n}\n"],"mappings":"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","names":[]}
|