@delta-comic/db 0.0.0-semantically-released

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/index.js ADDED
@@ -0,0 +1,785 @@
1
+ import { Pn as SelectQueryNode, Wr as IdentifierNode, c as SqliteQueryCompiler, lr as RawNode, n as SqliteAdapter, r as SqliteIntrospector, s as Migrator, sn as OperationNodeTransformer, t as CamelCasePlugin, u as CompiledQuery, y as Kysely } from "./esm-CT_qsGIx.js";
2
+ import { SourcedValue, Struct, uni } from "@delta-comic/model";
3
+ import { useGlobalVar } from "@delta-comic/utils";
4
+ import { computed, ref, shallowRef, toRef, toValue, triggerRef, unref, watch } from "vue";
5
+ var __defProp = Object.defineProperty, __exportAll = (e, t) => {
6
+ let n = {};
7
+ for (var r in e) __defProp(n, r, {
8
+ get: e[r],
9
+ enumerable: !0
10
+ });
11
+ return t || __defProp(n, Symbol.toStringTag, { value: "Module" }), n;
12
+ };
13
+ async function up$2(e) {
14
+ await e.schema.createTable("itemStore").addColumn("key", "text", (e) => e.primaryKey().notNull()).addColumn("item", "text", (e) => e.notNull()).execute(), await e.schema.createIndex("item_store_key").on("itemStore").column("key").execute(), await e.schema.createTable("history").addColumn("ep", "text", (e) => e.notNull()).addColumn("timestamp", "datetime", (e) => e.notNull().primaryKey()).addColumn("itemKey", "text", (e) => e.notNull().unique()).addForeignKeyConstraint("itemKeyForeign", ["itemKey"], "itemStore", ["key"], (e) => e.onDelete("cascade")).execute(), await e.schema.createIndex("history_timestamp").on("history").column("timestamp desc").execute(), await e.schema.createTable("recentView").addColumn("timestamp", "datetime", (e) => e.notNull().primaryKey()).addColumn("itemKey", "text", (e) => e.notNull().unique()).addForeignKeyConstraint("itemKeyForeign", ["itemKey"], "itemStore", ["key"], (e) => e.onDelete("cascade")).addColumn("isViewed", "boolean", (e) => e.notNull()).execute(), await e.schema.createIndex("recent_timestamp").on("recentView").column("timestamp desc").execute(), await e.schema.createTable("favouriteCard").addColumn("createAt", "datetime", (e) => e.notNull().primaryKey()).addColumn("title", "text", (e) => e.notNull()).addColumn("private", "boolean", (e) => e.notNull()).addColumn("description", "text", (e) => e.notNull()).execute(), await e.insertInto("favouriteCard").values({
15
+ createAt: 0,
16
+ title: "默认收藏夹",
17
+ private: !1,
18
+ description: ""
19
+ }).execute(), await e.schema.createIndex("favourite_card_title_createAt").on("favouriteCard").column("createAt desc").column("title").execute(), await e.schema.createTable("favouriteItem").addColumn("addTime", "datetime", (e) => e.notNull()).addColumn("belongTo", "integer", (e) => e.notNull()).addColumn("itemKey", "text", (e) => e.notNull()).addPrimaryKeyConstraint("primary_key", [
20
+ "addTime",
21
+ "belongTo",
22
+ "itemKey"
23
+ ]).addUniqueConstraint("uniqueKey", ["belongTo", "itemKey"]).addForeignKeyConstraint("itemKeyForeign", ["itemKey"], "itemStore", ["createAt"], (e) => e.onDelete("cascade")).addForeignKeyConstraint("belongToForeign", ["belongTo"], "favouriteCard", ["key"], (e) => e.onDelete("cascade")).execute(), await e.schema.createIndex("favourite_item_belongTo_addTime").on("favouriteItem").column("addTime desc").column("belongTo").execute(), await e.schema.createTable("subscribe").addColumn("itemKey", "text").addForeignKeyConstraint("itemKeyForeign", ["itemKey"], "itemStore", ["key"], (e) => e.onDelete("cascade")).addColumn("author", "text").addColumn("type", "text", (e) => e.notNull()).addColumn("key", "text", (e) => e.notNull()).addColumn("plugin", "text", (e) => e.notNull()).addPrimaryKeyConstraint("primary_key", ["plugin", "key"]).execute(), await e.schema.createIndex("subscribe_key_plugin").on("subscribe").column("key").column("plugin").execute(), await e.schema.createTable("plugin").addColumn("installerName", "text", (e) => e.notNull()).addColumn("loaderName", "text", (e) => e.notNull()).addColumn("pluginName", "text", (e) => e.notNull().primaryKey()).addColumn("meta", "json", (e) => e.notNull()).addColumn("enable", "text", (e) => e.notNull()).addColumn("installInput", "text", (e) => e.notNull()).execute(), await e.schema.createIndex("plugin_enable").on("plugin").column("enable").execute(), await e.schema.createIndex("plugin_pluginName").on("plugin").column("pluginName").execute();
24
+ }
25
+ async function down$2(e) {
26
+ await e.schema.dropTable("itemStore").ifExists().execute(), await e.schema.dropTable("history").ifExists().execute(), await e.schema.dropTable("recentView").ifExists().execute(), await e.schema.dropTable("favouriteCard").ifExists().execute(), await e.schema.dropTable("favouriteItem").ifExists().execute(), await e.schema.dropTable("subscribe").ifExists().execute(), await e.schema.dropTable("plugin").ifExists().execute();
27
+ }
28
+ var _1_initial_default = {
29
+ up: up$2,
30
+ down: down$2
31
+ };
32
+ async function up$1(e) {
33
+ await e.schema.alterTable("plugin").addColumn("displayName", "text").execute();
34
+ }
35
+ async function down$1(e) {
36
+ await e.schema.alterTable("plugin").dropColumn("displayName").execute();
37
+ }
38
+ var _2_fix_display_name_default = {
39
+ up: up$1,
40
+ down: down$1
41
+ };
42
+ async function up(e) {
43
+ await e.schema.alterTable("favouriteItem").renameTo("favouriteItem_old").execute(), await e.schema.createTable("favouriteItem").addColumn("addTime", "datetime", (e) => e.notNull()).addColumn("belongTo", "integer", (e) => e.notNull()).addColumn("itemKey", "text", (e) => e.notNull()).addPrimaryKeyConstraint("primary_key", [
44
+ "addTime",
45
+ "belongTo",
46
+ "itemKey"
47
+ ]).addUniqueConstraint("uniqueKey", ["belongTo", "itemKey"]).addForeignKeyConstraint("itemKeyForeign", ["itemKey"], "itemStore", ["key"], (e) => e.onDelete("cascade")).addForeignKeyConstraint("belongToForeign", ["belongTo"], "favouriteCard", ["createAt"], (e) => e.onDelete("cascade")).execute(), await e.insertInto("favouriteItem").columns([
48
+ "addTime",
49
+ "belongTo",
50
+ "itemKey"
51
+ ]).expression((e) => e.selectFrom("favouriteItem_old").select([
52
+ "addTime",
53
+ "belongTo",
54
+ "itemKey"
55
+ ])).execute(), await e.schema.dropTable("favouriteItem_old").execute(), await e.schema.createIndex("favourite_item_belongTo_addTime").on("favouriteItem").column("addTime desc").column("belongTo").execute();
56
+ }
57
+ async function down(e) {
58
+ await e.schema.alterTable("favouriteItem").renameTo("favouriteItem_new").execute(), await e.schema.createTable("favouriteItem").addColumn("addTime", "datetime", (e) => e.notNull()).addColumn("belongTo", "integer", (e) => e.notNull()).addColumn("itemKey", "text", (e) => e.notNull()).addPrimaryKeyConstraint("primary_key", [
59
+ "addTime",
60
+ "belongTo",
61
+ "itemKey"
62
+ ]).addUniqueConstraint("uniqueKey", ["belongTo", "itemKey"]).addForeignKeyConstraint("itemKeyForeign", ["itemKey"], "itemStore", ["createAt"], (e) => e.onDelete("cascade")).addForeignKeyConstraint("belongToForeign", ["belongTo"], "favouriteCard", ["key"], (e) => e.onDelete("cascade")).execute(), await e.insertInto("favouriteItem").columns([
63
+ "addTime",
64
+ "belongTo",
65
+ "itemKey"
66
+ ]).expression((e) => e.selectFrom("favouriteItem_new").select([
67
+ "addTime",
68
+ "belongTo",
69
+ "itemKey"
70
+ ])).execute(), await e.schema.dropTable("favouriteItem_new").execute(), await e.schema.createIndex("favourite_item_belongTo_addTime").on("favouriteItem").column("addTime desc").column("belongTo").execute();
71
+ }
72
+ var _3_fix_fvi_foreign_key_default = {
73
+ up,
74
+ down
75
+ };
76
+ function __classPrivateFieldGet(e, t, n, r) {
77
+ if (n === "a" && !r) throw TypeError("Private accessor was defined without a getter");
78
+ if (typeof t == "function" ? e !== t || !r : !t.has(e)) throw TypeError("Cannot read private member from an object whose class did not declare it");
79
+ return n === "m" ? r : n === "a" ? r.call(e) : r ? r.value : t.get(e);
80
+ }
81
+ function __classPrivateFieldSet(e, t, n, r, i) {
82
+ if (r === "m") throw TypeError("Private method is not writable");
83
+ if (r === "a" && !i) throw TypeError("Private accessor was defined without a setter");
84
+ if (typeof t == "function" ? e !== t || !i : !t.has(e)) throw TypeError("Cannot write private member to an object whose class did not declare it");
85
+ return r === "a" ? i.call(e, n) : i ? i.value = n : t.set(e, n), n;
86
+ }
87
+ var _Resource_rid;
88
+ function transformCallback(e, t = !1) {
89
+ return window.__TAURI_INTERNALS__.transformCallback(e, t);
90
+ }
91
+ async function invoke(e, t = {}, n) {
92
+ return window.__TAURI_INTERNALS__.invoke(e, t, n);
93
+ }
94
+ var Resource = class {
95
+ get rid() {
96
+ return __classPrivateFieldGet(this, _Resource_rid, "f");
97
+ }
98
+ constructor(e) {
99
+ _Resource_rid.set(this, void 0), __classPrivateFieldSet(this, _Resource_rid, e, "f");
100
+ }
101
+ async close() {
102
+ return invoke("plugin:resources|close", { rid: this.rid });
103
+ }
104
+ };
105
+ _Resource_rid = /* @__PURE__ */ new WeakMap();
106
+ var Database = class e {
107
+ constructor(e) {
108
+ this.path = e;
109
+ }
110
+ static async load(t) {
111
+ return new e(await invoke("plugin:sql|load", { db: t }));
112
+ }
113
+ static get(t) {
114
+ return new e(t);
115
+ }
116
+ async execute(e, t) {
117
+ let [n, r] = await invoke("plugin:sql|execute", {
118
+ db: this.path,
119
+ query: e,
120
+ values: t ?? []
121
+ });
122
+ return {
123
+ lastInsertId: r,
124
+ rowsAffected: n
125
+ };
126
+ }
127
+ async select(e, t) {
128
+ return await invoke("plugin:sql|select", {
129
+ db: this.path,
130
+ query: e,
131
+ values: t ?? []
132
+ });
133
+ }
134
+ async close(e) {
135
+ return await invoke("plugin:sql|close", { db: e });
136
+ }
137
+ }, TauriEvent;
138
+ (function(e) {
139
+ e.WINDOW_RESIZED = "tauri://resize", e.WINDOW_MOVED = "tauri://move", e.WINDOW_CLOSE_REQUESTED = "tauri://close-requested", e.WINDOW_DESTROYED = "tauri://destroyed", e.WINDOW_FOCUS = "tauri://focus", e.WINDOW_BLUR = "tauri://blur", e.WINDOW_SCALE_FACTOR_CHANGED = "tauri://scale-change", e.WINDOW_THEME_CHANGED = "tauri://theme-changed", e.WINDOW_CREATED = "tauri://window-created", e.WEBVIEW_CREATED = "tauri://webview-created", e.DRAG_ENTER = "tauri://drag-enter", e.DRAG_OVER = "tauri://drag-over", e.DRAG_DROP = "tauri://drag-drop", e.DRAG_LEAVE = "tauri://drag-leave";
140
+ })(TauriEvent ||= {});
141
+ async function _unlisten(e, t) {
142
+ window.__TAURI_EVENT_PLUGIN_INTERNALS__.unregisterListener(e, t), await invoke("plugin:event|unlisten", {
143
+ event: e,
144
+ eventId: t
145
+ });
146
+ }
147
+ async function listen(e, t, n) {
148
+ return invoke("plugin:event|listen", {
149
+ event: e,
150
+ target: typeof n?.target == "string" ? {
151
+ kind: "AnyLabel",
152
+ label: n.target
153
+ } : n?.target ?? { kind: "Any" },
154
+ handler: transformCallback(t)
155
+ }).then((t) => async () => _unlisten(e, t));
156
+ }
157
+ var Store = class e extends Resource {
158
+ constructor(e) {
159
+ super(e);
160
+ }
161
+ static async load(t, n) {
162
+ return new e(await invoke("plugin:store|load", {
163
+ path: t,
164
+ options: n
165
+ }));
166
+ }
167
+ static async get(t) {
168
+ return await invoke("plugin:store|get_store", { path: t }).then((t) => t ? new e(t) : null);
169
+ }
170
+ async set(e, t) {
171
+ await invoke("plugin:store|set", {
172
+ rid: this.rid,
173
+ key: e,
174
+ value: t
175
+ });
176
+ }
177
+ async get(e) {
178
+ let [t, n] = await invoke("plugin:store|get", {
179
+ rid: this.rid,
180
+ key: e
181
+ });
182
+ return n ? t : void 0;
183
+ }
184
+ async has(e) {
185
+ return await invoke("plugin:store|has", {
186
+ rid: this.rid,
187
+ key: e
188
+ });
189
+ }
190
+ async delete(e) {
191
+ return await invoke("plugin:store|delete", {
192
+ rid: this.rid,
193
+ key: e
194
+ });
195
+ }
196
+ async clear() {
197
+ await invoke("plugin:store|clear", { rid: this.rid });
198
+ }
199
+ async reset() {
200
+ await invoke("plugin:store|reset", { rid: this.rid });
201
+ }
202
+ async keys() {
203
+ return await invoke("plugin:store|keys", { rid: this.rid });
204
+ }
205
+ async values() {
206
+ return await invoke("plugin:store|values", { rid: this.rid });
207
+ }
208
+ async entries() {
209
+ return await invoke("plugin:store|entries", { rid: this.rid });
210
+ }
211
+ async length() {
212
+ return await invoke("plugin:store|length", { rid: this.rid });
213
+ }
214
+ async reload(e) {
215
+ await invoke("plugin:store|reload", {
216
+ rid: this.rid,
217
+ ...e
218
+ });
219
+ }
220
+ async save() {
221
+ await invoke("plugin:store|save", { rid: this.rid });
222
+ }
223
+ async onKeyChange(e, t) {
224
+ return await listen("store://change", (n) => {
225
+ n.payload.resourceId === this.rid && n.payload.key === e && t(n.payload.exists ? n.payload.value : void 0);
226
+ });
227
+ }
228
+ async onChange(e) {
229
+ return await listen("store://change", (t) => {
230
+ t.payload.resourceId === this.rid && e(t.payload.key, t.payload.exists ? t.payload.value : void 0);
231
+ });
232
+ }
233
+ }, isClient = typeof window < "u" && typeof document < "u";
234
+ typeof WorkerGlobalScope < "u" && globalThis instanceof WorkerGlobalScope;
235
+ var toString = Object.prototype.toString, isObject = (e) => toString.call(e) === "[object Object]";
236
+ function createFilterWrapper(e, t) {
237
+ function n(...n) {
238
+ return new Promise((r, i) => {
239
+ Promise.resolve(e(() => t.apply(this, n), {
240
+ fn: t,
241
+ thisArg: this,
242
+ args: n
243
+ })).then(r).catch(i);
244
+ });
245
+ }
246
+ return n;
247
+ }
248
+ var bypassFilter = (e) => e();
249
+ function toArray(e) {
250
+ return Array.isArray(e) ? e : [e];
251
+ }
252
+ function watchWithFilter(e, t, n = {}) {
253
+ let { eventFilter: r = bypassFilter, ...i } = n;
254
+ return watch(e, createFilterWrapper(r, t), i);
255
+ }
256
+ function watchImmediate(e, t, n) {
257
+ return watch(e, t, {
258
+ ...n,
259
+ immediate: !0
260
+ });
261
+ }
262
+ var defaultWindow = isClient ? window : void 0;
263
+ isClient && window.document, isClient && window.navigator, isClient && window.location;
264
+ function unrefElement(e) {
265
+ let t = toValue(e);
266
+ return t?.$el ?? t;
267
+ }
268
+ function useEventListener(...e) {
269
+ let t = (e, t, n, r) => (e.addEventListener(t, n, r), () => e.removeEventListener(t, n, r)), n = computed(() => {
270
+ let t = toArray(toValue(e[0])).filter((e) => e != null);
271
+ return t.every((e) => typeof e != "string") ? t : void 0;
272
+ });
273
+ return watchImmediate(() => [
274
+ n.value?.map((e) => unrefElement(e)) ?? [defaultWindow].filter((e) => e != null),
275
+ toArray(toValue(n.value ? e[1] : e[0])),
276
+ toArray(unref(n.value ? e[2] : e[1])),
277
+ toValue(n.value ? e[3] : e[2])
278
+ ], ([e, n, r, i], a, o) => {
279
+ if (!e?.length || !n?.length || !r?.length) return;
280
+ let s = isObject(i) ? { ...i } : i, c = e.flatMap((e) => n.flatMap((n) => r.map((r) => t(e, n, r, s))));
281
+ o(() => {
282
+ c.forEach((e) => e());
283
+ });
284
+ }, { flush: "post" });
285
+ }
286
+ var _global = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {}, globalKey = "__vueuse_ssr_handlers__", handlers = /* @__PURE__ */ getHandlers();
287
+ function getHandlers() {
288
+ return globalKey in _global || (_global[globalKey] = _global[globalKey] || {}), _global[globalKey];
289
+ }
290
+ function getSSRHandler(e, t) {
291
+ return handlers[e] || t;
292
+ }
293
+ function guessSerializerType(e) {
294
+ return e == null ? "any" : e instanceof Set ? "set" : e instanceof Map ? "map" : e instanceof Date ? "date" : typeof e == "boolean" ? "boolean" : typeof e == "string" ? "string" : typeof e == "object" ? "object" : Number.isNaN(e) ? "any" : "number";
295
+ }
296
+ var StorageSerializers = {
297
+ boolean: {
298
+ read: (e) => e === "true",
299
+ write: (e) => String(e)
300
+ },
301
+ object: {
302
+ read: (e) => JSON.parse(e),
303
+ write: (e) => JSON.stringify(e)
304
+ },
305
+ number: {
306
+ read: (e) => Number.parseFloat(e),
307
+ write: (e) => String(e)
308
+ },
309
+ any: {
310
+ read: (e) => e,
311
+ write: (e) => String(e)
312
+ },
313
+ string: {
314
+ read: (e) => e,
315
+ write: (e) => String(e)
316
+ },
317
+ map: {
318
+ read: (e) => new Map(JSON.parse(e)),
319
+ write: (e) => JSON.stringify(Array.from(e.entries()))
320
+ },
321
+ set: {
322
+ read: (e) => new Set(JSON.parse(e)),
323
+ write: (e) => JSON.stringify(Array.from(e))
324
+ },
325
+ date: {
326
+ read: (e) => new Date(e),
327
+ write: (e) => e.toISOString()
328
+ }
329
+ };
330
+ function useStorageAsync(e, t, n, r = {}) {
331
+ let { flush: i = "pre", deep: a = !0, listenToStorageChanges: o = !0, writeDefaults: s = !0, mergeDefaults: c = !1, shallow: l, window: u = defaultWindow, eventFilter: d, onError: f = (e) => {
332
+ console.error(e);
333
+ }, onReady: p } = r, m = toValue(t), h = guessSerializerType(m), g = (l ? shallowRef : ref)(toValue(t)), _ = r.serializer ?? StorageSerializers[h];
334
+ if (!n) try {
335
+ n = getSSRHandler("getDefaultStorageAsync", () => defaultWindow?.localStorage)();
336
+ } catch (e) {
337
+ f(e);
338
+ }
339
+ async function v(t) {
340
+ if (!(!n || t && t.key !== e)) try {
341
+ let r = t ? t.newValue : await n.getItem(e);
342
+ if (r == null) g.value = m, s && m !== null && await n.setItem(e, await _.write(m));
343
+ else if (c) {
344
+ let e = await _.read(r);
345
+ typeof c == "function" ? g.value = c(e, m) : h === "object" && !Array.isArray(e) ? g.value = {
346
+ ...m,
347
+ ...e
348
+ } : g.value = e;
349
+ } else g.value = await _.read(r);
350
+ } catch (e) {
351
+ f(e);
352
+ }
353
+ }
354
+ let y = new Promise((e) => {
355
+ v().then(() => {
356
+ p?.(g.value), e(g);
357
+ });
358
+ });
359
+ return u && o && useEventListener(u, "storage", (e) => Promise.resolve().then(() => v(e)), { passive: !0 }), n && watchWithFilter(g, async () => {
360
+ try {
361
+ g.value == null ? await n.removeItem(e) : await n.setItem(e, await _.write(g.value));
362
+ } catch (e) {
363
+ f(e);
364
+ }
365
+ }, {
366
+ flush: i,
367
+ deep: a,
368
+ eventFilter: d
369
+ }), Object.assign(g, {
370
+ then: y.then.bind(y),
371
+ catch: y.catch.bind(y)
372
+ }), g;
373
+ }
374
+ function debounce(e, t, { signal: n, edges: r } = {}) {
375
+ let i, a = null, o = r != null && r.includes("leading"), s = r == null || r.includes("trailing"), c = () => {
376
+ a !== null && (e.apply(i, a), i = void 0, a = null);
377
+ }, l = () => {
378
+ s && c(), p();
379
+ }, u = null, d = () => {
380
+ u != null && clearTimeout(u), u = setTimeout(() => {
381
+ u = null, l();
382
+ }, t);
383
+ }, f = () => {
384
+ u !== null && (clearTimeout(u), u = null);
385
+ }, p = () => {
386
+ f(), i = void 0, a = null;
387
+ }, m = () => {
388
+ c();
389
+ }, h = function(...e) {
390
+ if (n?.aborted) return;
391
+ i = this, a = e;
392
+ let t = u == null;
393
+ d(), o && t && c();
394
+ };
395
+ return h.schedule = d, h.cancel = p, h.flush = m, n?.addEventListener("abort", p, { once: !0 }), h;
396
+ }
397
+ function isString(e) {
398
+ return typeof e == "string";
399
+ }
400
+ function isUndefined(e) {
401
+ return e === void 0;
402
+ }
403
+ var BaseSqliteDialect = class {
404
+ constructor(e) {
405
+ this.createDriver = e;
406
+ }
407
+ createDriver;
408
+ createQueryCompiler() {
409
+ return new SqliteQueryCompiler();
410
+ }
411
+ createAdapter() {
412
+ return new SqliteAdapter();
413
+ }
414
+ createIntrospector(e) {
415
+ return new SqliteIntrospector(e);
416
+ }
417
+ }, ConnectionMutex = class {
418
+ promise;
419
+ resolve;
420
+ async lock() {
421
+ for (; this.promise;) await this.promise;
422
+ this.promise = new Promise((e) => {
423
+ this.resolve = e;
424
+ });
425
+ }
426
+ unlock() {
427
+ let e = this.resolve;
428
+ this.promise = void 0, this.resolve = void 0, e?.();
429
+ }
430
+ };
431
+ async function runSavepoint(e, n, i, a, o) {
432
+ await i.executeQuery(o(RawNode.createWithChildren([RawNode.createWithSql(`${e} `), IdentifierNode.create(a)]), n()));
433
+ }
434
+ var BaseSqliteDriver = class {
435
+ mutex = new ConnectionMutex();
436
+ conn;
437
+ savepoint;
438
+ releaseSavepoint;
439
+ rollbackToSavepoint;
440
+ init;
441
+ constructor(e) {
442
+ this.init = () => import("./esm-EM3zjw1B.js").then(({ createQueryId: e }) => {
443
+ e && (this.savepoint = runSavepoint.bind(null, "savepoint", e), this.releaseSavepoint = runSavepoint.bind(null, "release", e), this.rollbackToSavepoint = runSavepoint.bind(null, "rollback to", e));
444
+ }).then(e);
445
+ }
446
+ async acquireConnection() {
447
+ return await this.mutex.lock(), this.conn;
448
+ }
449
+ async beginTransaction(e) {
450
+ await e.executeQuery(CompiledQuery.raw("begin"));
451
+ }
452
+ async commitTransaction(e) {
453
+ await e.executeQuery(CompiledQuery.raw("commit"));
454
+ }
455
+ async rollbackTransaction(e) {
456
+ await e.executeQuery(CompiledQuery.raw("rollback"));
457
+ }
458
+ async releaseConnection() {
459
+ this.mutex.unlock();
460
+ }
461
+ };
462
+ function buildQueryFn(e) {
463
+ return async (t, n, r) => {
464
+ let i = await e.all(n, r);
465
+ return t || i.length ? { rows: i } : {
466
+ rows: [],
467
+ ...await e.run("select 1")
468
+ };
469
+ };
470
+ }
471
+ function parseBigInt(e) {
472
+ return e == null ? void 0 : BigInt(e);
473
+ }
474
+ var GenericSqliteDriver = class extends BaseSqliteDriver {
475
+ db;
476
+ constructor(e, t) {
477
+ super(async () => {
478
+ this.db = await e(), this.conn = new GenericSqliteConnection(this.db), await t?.(this.conn);
479
+ });
480
+ }
481
+ async destroy() {
482
+ await this.db?.close();
483
+ }
484
+ }, GenericSqliteConnection = class {
485
+ constructor(e) {
486
+ this.db = e;
487
+ }
488
+ async *streamQuery({ parameters: t, query: n, sql: r }) {
489
+ if (!this.db.iterator) throw Error("streamQuery() is not supported.");
490
+ let i = this.db.iterator(SelectQueryNode.is(n), r, t);
491
+ for await (let e of i) yield { rows: [e] };
492
+ }
493
+ async executeQuery({ parameters: t, query: n, sql: r }) {
494
+ return await this.db.query(SelectQueryNode.is(n), r, t);
495
+ }
496
+ }, GenericSqliteDialect = class extends BaseSqliteDialect {
497
+ constructor(e, t) {
498
+ super(() => new GenericSqliteDriver(e, t));
499
+ }
500
+ }, TauriSqliteDialect = class extends GenericSqliteDialect {
501
+ constructor(e) {
502
+ let { database: t, onCreateConnection: n } = e;
503
+ super(async () => {
504
+ let e = typeof t == "function" ? await t("sqlite:") : t;
505
+ return {
506
+ db: e,
507
+ query: buildQueryFn({
508
+ all: async (t, n) => await e.select(t, n),
509
+ run: async (t, n) => {
510
+ let { rowsAffected: r, lastInsertId: i } = await e.execute(t, n);
511
+ return {
512
+ numAffectedRows: parseBigInt(r),
513
+ insertId: parseBigInt(i)
514
+ };
515
+ }
516
+ }),
517
+ close: async () => await e.close()
518
+ };
519
+ }, n);
520
+ }
521
+ }, SerializeParametersTransformer = class extends OperationNodeTransformer {
522
+ serializer;
523
+ constructor(e) {
524
+ super(), this.serializer = e;
525
+ }
526
+ transformPrimitiveValueList(e) {
527
+ return {
528
+ ...e,
529
+ values: e.values.map(this.serializer)
530
+ };
531
+ }
532
+ transformColumnUpdate(e) {
533
+ let { value: t } = e;
534
+ if (t.kind !== "ValueNode") return super.transformColumnUpdate(e);
535
+ let { value: n, ...r } = t, i = this.serializer(n);
536
+ return n === i ? super.transformColumnUpdate(e) : super.transformColumnUpdate({
537
+ ...e,
538
+ value: {
539
+ ...r,
540
+ value: i
541
+ }
542
+ });
543
+ }
544
+ transformValue(e) {
545
+ return {
546
+ ...e,
547
+ value: this.serializer(e.value)
548
+ };
549
+ }
550
+ }, defaultSerializer = (e) => {
551
+ if (skipTransform(e) || typeof e == "string") return e;
552
+ if (typeof e == "boolean") return "" + e;
553
+ if (e instanceof Date) return e.toISOString();
554
+ try {
555
+ return JSON.stringify(e);
556
+ } catch {
557
+ return e;
558
+ }
559
+ }, dateRegex = /^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(?:\.\d+)?Z?$/, defaultDeserializer = (e) => {
560
+ if (skipTransform(e)) return e;
561
+ if (typeof e == "string") {
562
+ if (e === "true") return !0;
563
+ if (e === "false") return !1;
564
+ if (dateRegex.test(e)) return new Date(e);
565
+ if (maybeJson(e)) try {
566
+ return JSON.parse(e);
567
+ } catch {}
568
+ return e;
569
+ }
570
+ };
571
+ function maybeJson(e) {
572
+ return e.startsWith("{") && e.endsWith("}") || e.startsWith("[") && e.endsWith("]");
573
+ }
574
+ function skipTransform(e) {
575
+ return e == null || typeof e == "bigint" || typeof e == "number" || typeof e == "object" && "buffer" in e;
576
+ }
577
+ var BaseSerializePlugin = class {
578
+ transformer;
579
+ deserializer;
580
+ skipNodeSet;
581
+ ctx;
582
+ constructor(e, t, n) {
583
+ this.transformer = new SerializeParametersTransformer(e), this.deserializer = t, n.length && (this.skipNodeSet = new Set(n), this.ctx = /* @__PURE__ */ new WeakSet());
584
+ }
585
+ transformQuery({ node: e, queryId: t }) {
586
+ return this.skipNodeSet?.has(e.kind) ? (this.ctx?.add(t), e) : this.transformer.transformNode(e);
587
+ }
588
+ async transformResult({ result: e, queryId: t }) {
589
+ return this.ctx?.has(t) ? e : {
590
+ ...e,
591
+ rows: this.parseRows(e.rows)
592
+ };
593
+ }
594
+ parseRows(e) {
595
+ let t = [];
596
+ for (let n of e) {
597
+ if (!n) continue;
598
+ let e = {};
599
+ for (let [t, r] of Object.entries(n)) e[t] = this.deserializer(r);
600
+ t.push(e);
601
+ }
602
+ return t;
603
+ }
604
+ }, SerializePlugin = class extends BaseSerializePlugin {
605
+ constructor(e = {}) {
606
+ let { deserializer: t = defaultDeserializer, serializer: n = defaultSerializer, skipNodeKind: r = [] } = e;
607
+ super(n, t, r);
608
+ }
609
+ };
610
+ function mitt_default(e) {
611
+ return {
612
+ all: e ||= /* @__PURE__ */ new Map(),
613
+ on: function(t, n) {
614
+ var r = e.get(t);
615
+ r ? r.push(n) : e.set(t, [n]);
616
+ },
617
+ off: function(t, n) {
618
+ var r = e.get(t);
619
+ r && (n ? r.splice(r.indexOf(n) >>> 0, 1) : e.set(t, []));
620
+ },
621
+ emit: function(t, n) {
622
+ var r = e.get(t);
623
+ r && r.slice().map(function(e) {
624
+ e(n);
625
+ }), (r = e.get("*")) && r.slice().map(function(e) {
626
+ e(t, n);
627
+ });
628
+ }
629
+ };
630
+ }
631
+ var plugin_exports = /* @__PURE__ */ __exportAll({
632
+ get: () => get,
633
+ getByEnabled: () => getByEnabled,
634
+ toggleEnable: () => toggleEnable
635
+ });
636
+ async function getByEnabled(e) {
637
+ let { db: t } = await import("./index.js");
638
+ return t.value.selectFrom("plugin").where("enable", "=", e).selectAll().execute();
639
+ }
640
+ async function get(e) {
641
+ let { db: t } = await import("./index.js");
642
+ return t.value.selectFrom("plugin").where("pluginName", "=", e).selectAll().executeTakeFirstOrThrow();
643
+ }
644
+ async function toggleEnable(e) {
645
+ let { db: t } = await import("./index.js"), n = await t.value.selectFrom("plugin").where("pluginName", "=", e).select("enable").executeTakeFirstOrThrow();
646
+ return t.value.updateTable("plugin").where("pluginName", "=", e).set({ enable: !n.enable }).execute();
647
+ }
648
+ var itemStore_exports = /* @__PURE__ */ __exportAll({
649
+ key: () => key$1,
650
+ upsert: () => upsert$3
651
+ });
652
+ const key$1 = new SourcedValue("*");
653
+ async function upsert$3(e) {
654
+ let { db: t } = await import("./index.js"), n = key$1.toString([uni.content.ContentPage.contentPage.toString(e.contentType), e.id]);
655
+ return await t.value.replaceInto("itemStore").values({
656
+ item: Struct.toRaw(e),
657
+ key: n
658
+ }).execute(), n;
659
+ }
660
+ var favourite_exports = /* @__PURE__ */ __exportAll({
661
+ moveItem: () => moveItem,
662
+ upsertItem: () => upsertItem
663
+ });
664
+ async function upsertItem(e, ...t) {
665
+ let { db: n } = await import("./index.js"), r = await upsert$3(e);
666
+ for (let e of t) await n.value.replaceInto("favouriteItem").values({
667
+ addTime: Date.now(),
668
+ itemKey: r,
669
+ belongTo: e
670
+ }).execute();
671
+ }
672
+ async function moveItem(e, t, ...n) {
673
+ let { db: r } = await import("./index.js");
674
+ await r.value.deleteFrom("favouriteItem").where("itemKey", "=", e.id).where("belongTo", "=", t).execute();
675
+ for (let t of n) await r.value.replaceInto("favouriteItem").values({
676
+ addTime: Date.now(),
677
+ itemKey: e.id,
678
+ belongTo: t
679
+ }).execute();
680
+ }
681
+ var history_exports = /* @__PURE__ */ __exportAll({ upsert: () => upsert$2 });
682
+ async function upsert$2(e) {
683
+ let { db: t } = await import("./index.js"), n = await upsert$3(e);
684
+ await t.value.replaceInto("history").values({
685
+ itemKey: n,
686
+ timestamp: Date.now(),
687
+ ep: Struct.toRaw(e)
688
+ }).execute();
689
+ }
690
+ var subscribe_exports = /* @__PURE__ */ __exportAll({
691
+ getAll: () => getAll,
692
+ key: () => key,
693
+ upsert: () => upsert$1
694
+ });
695
+ const key = new SourcedValue();
696
+ async function getAll() {
697
+ let { db: e } = await import("./index.js");
698
+ return e.value.selectFrom("subscribe").selectAll().execute();
699
+ }
700
+ async function upsert$1(e) {
701
+ let { db: t } = await import("./index.js");
702
+ return t.value.replaceInto("subscribe").values({
703
+ type: e.type,
704
+ itemKey: e.itemKey,
705
+ key: e.key,
706
+ plugin: e.plugin,
707
+ author: JSON.stringify(e.author)
708
+ }).execute();
709
+ }
710
+ var recentView_exports = /* @__PURE__ */ __exportAll({ upsert: () => upsert });
711
+ async function upsert(e) {
712
+ let { db: t } = await import("./index.js"), n = await upsert$3(e);
713
+ await t.value.replaceInto("recentView").values({
714
+ isViewed: !1,
715
+ itemKey: n,
716
+ timestamp: Date.now()
717
+ }).execute();
718
+ }
719
+ var migrations = /* @__PURE__ */ Object.assign({
720
+ "./migrations/1_initial.ts": _1_initial_default,
721
+ "./migrations/2_fix-display_name.ts": _2_fix_display_name_default,
722
+ "./migrations/3_fix_fvi_foreign_key.ts": _3_fix_fvi_foreign_key_default
723
+ }), database = useGlobalVar(await Database.load("sqlite:app.db"), "core/db/raw"), emitter = mitt_default(), MUTATION_KEYWORDS = /\b(INSERT|UPDATE|DELETE|REPLACE|CREATE|DROP|ALTER)\b/i, triggerUpdate = debounce(() => {
724
+ console.debug("[db sync] db changed"), emitter.emit("onChange"), triggerRef(db);
725
+ }, 300);
726
+ const db = useGlobalVar(await (async () => {
727
+ let e = shallowRef(new Kysely({
728
+ dialect: new TauriSqliteDialect({ database: {
729
+ close(e) {
730
+ return database.close(e);
731
+ },
732
+ path: database.path,
733
+ async select(e, t) {
734
+ console.debug("sql!", e, t);
735
+ let n = await database.select(e, t);
736
+ return MUTATION_KEYWORDS.test(e) && triggerUpdate(), n;
737
+ },
738
+ async execute(e, t) {
739
+ console.debug("sql!", e, t);
740
+ let n = await database.execute(e, t);
741
+ return MUTATION_KEYWORDS.test(e) && triggerUpdate(), n;
742
+ }
743
+ } }),
744
+ plugins: [new CamelCasePlugin(), new SerializePlugin()]
745
+ }));
746
+ return await new Migrator({
747
+ db: e.value,
748
+ provider: { async getMigrations() {
749
+ return migrations;
750
+ } }
751
+ }).migrateToLatest(), e;
752
+ })(), "core/db/ins");
753
+ let DBUtils;
754
+ (function(e) {
755
+ async function t(e) {
756
+ return (await e.select((e) => e.fn.countAll().as("count")).executeTakeFirstOrThrow()).count;
757
+ }
758
+ e.countDb = t;
759
+ })(DBUtils ||= {});
760
+ var saveKey = new SourcedValue();
761
+ const useNativeStore = (e, t, n) => {
762
+ let r = Store.load(e, { defaults: {} }), i = async () => {
763
+ let e = await r;
764
+ return await e.reload(), Object.assign(e, { async [Symbol.asyncDispose]() {
765
+ await e.save();
766
+ } });
767
+ };
768
+ return useStorageAsync(saveKey.toString([e, toRef(t).value]), n, {
769
+ async removeItem(e) {
770
+ let [, t] = saveKey.toJSON(e), n = await i();
771
+ await n.delete(t), await n[Symbol.asyncDispose]();
772
+ },
773
+ async getItem(e) {
774
+ let [, t] = saveKey.toJSON(e);
775
+ return (await i()).get(t).then((e) => isString(e) ? e : isUndefined(e) ? null : JSON.stringify(e));
776
+ },
777
+ async setItem(e, t) {
778
+ let [, n] = saveKey.toJSON(e), r = await i();
779
+ await r.set(n, t), await r[Symbol.asyncDispose]();
780
+ }
781
+ });
782
+ };
783
+ export { DBUtils, favourite_exports as FavouriteDB, history_exports as HistoryDB, itemStore_exports as ItemStoreDB, plugin_exports as PluginArchiveDB, recentView_exports as RecentDB, subscribe_exports as SubscribeDB, db, useNativeStore };
784
+
785
+ //# sourceMappingURL=index.js.map