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 CHANGED
@@ -1,5 +1,8 @@
1
- import { BaseClient } from "./BaseClient.js";
2
- export type Strategy = {
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
- export declare class Client extends BaseClient<Strategy> {
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
- export declare function createClient(strategy?: Strategy): Client;
22
- export * from "./schema.js";
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
- import { entities } from "./schema.js";
3
- import { SqliteWorkerDialect } from "./SqliteWorkerDialect.js";
4
- import { BaseClient, DEFAULT_URL, ETAG_KEY } from "./BaseClient.js";
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
- try {
7
- const root = await navigator.storage.getDirectory();
8
- const handle = await root.getFileHandle(".dol-etag");
9
- return (await handle.getFile()).text();
10
- }
11
- catch {
12
- return null;
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
- const root = await navigator.storage.getDirectory();
17
- const handle = await root.getFileHandle(".dol-etag", { create: true });
18
- const writable = await handle.createWritable();
19
- await writable.write(etag);
20
- await writable.close();
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
- const root = await navigator.storage.getDirectory();
24
- const handle = await root.getFileHandle(filename, { create: true });
25
- const writable = await handle.createWritable();
26
- await writable.write(buffer);
27
- await writable.close();
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
- export class Client extends BaseClient {
30
- #dialect;
31
- constructor(strategy = {}) {
32
- super(strategy);
33
- }
34
- async getStoredEtag(_key) {
35
- return localStorage.getItem(ETAG_KEY);
36
- }
37
- async storeEtag(_key, etag) {
38
- localStorage.setItem(ETAG_KEY, etag);
39
- }
40
- async load() {
41
- await this._orm?.close();
42
- this.#dialect?.createDriver().destroy();
43
- const strategy = this._strategy;
44
- const url = this._strategy.url ?? DEFAULT_URL;
45
- switch (strategy.strategy) {
46
- case "ranged": {
47
- this.#dialect = new SqliteWorkerDialect(new Worker(new URL("./workers/ranged.js", import.meta.url), { type: "module" }));
48
- await this.#dialect.loadRanged(url);
49
- break;
50
- }
51
- case "opfs": {
52
- this.#dialect = new SqliteWorkerDialect(new Worker(new URL("./workers/opfs.js", import.meta.url), { type: "module" }));
53
- const { force = false } = strategy;
54
- const remoteEtag = (await fetch(url, { method: "HEAD" })).headers.get("etag");
55
- const storedEtag = force ? null : await getOpfsEtag();
56
- if (force || storedEtag !== remoteEtag) {
57
- const buffer = await this.fetchDb(url);
58
- await writeToOpfs("dol.sqlite", buffer);
59
- if (remoteEtag)
60
- await setOpfsEtag(remoteEtag);
61
- }
62
- await this.#dialect.loadOpfs("/dol.sqlite");
63
- break;
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
- this._orm = await SqlMikroORM.init({
79
- driver: SqliteDriver,
80
- driverOptions: this.#dialect,
81
- dbName: "dol.sqlite",
82
- entities,
83
- allowGlobalContext: true,
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 function createClient(strategy = {}) {
88
- return new Client(strategy);
89
- }
90
- export * from "./schema.js";
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":[]}