@delta-comic/db 3.0.0-next.7 → 3.0.0-next.9
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.d.mts +96 -124
- package/dist/index.mjs.map +1 -1
- package/package.json +13 -13
package/dist/index.d.mts
CHANGED
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import { isTauri } from "@tauri-apps/api/core";
|
|
2
2
|
import { JSONColumnType, Kysely, SelectQueryBuilder, Selectable } from "kysely";
|
|
3
|
-
import { FormResult, FormSingleConfigure, SourcedKeyType, SourcedValue, UniEpRaw, UniItem, UniItemAuthor, UniItemRaw } from "@delta-comic/model";
|
|
3
|
+
import { FormResult, FormSingleConfigure, PluginManifest, SourcedKeyType, SourcedValue, UniEpRaw, UniItem, UniItemAuthor, UniItemRaw } from "@delta-comic/model";
|
|
4
4
|
import { MaybeRefOrGetter, Ref } from "vue";
|
|
5
|
-
|
|
6
|
-
//#region lib/utils.d.ts
|
|
7
5
|
declare namespace utils_d_exports {
|
|
8
6
|
export { CommonQueryKey, countDb, withTransition };
|
|
9
7
|
}
|
|
@@ -27,6 +25,11 @@ declare enum QueryKey$5 {
|
|
|
27
25
|
item = "db:itemStore:"
|
|
28
26
|
}
|
|
29
27
|
declare const useUpsert$4: () => {
|
|
28
|
+
upsert: (vars: {
|
|
29
|
+
item: StorableItem;
|
|
30
|
+
trx?: Kysely<DB>;
|
|
31
|
+
}) => Promise<string>;
|
|
32
|
+
key: (CommonQueryKey | QueryKey$5)[];
|
|
30
33
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<string, Error, undefined>>;
|
|
31
34
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
32
35
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -42,11 +45,6 @@ declare const useUpsert$4: () => {
|
|
|
42
45
|
trx?: Kysely<DB>;
|
|
43
46
|
}) => void;
|
|
44
47
|
reset: () => void;
|
|
45
|
-
upsert: (vars: {
|
|
46
|
-
item: StorableItem;
|
|
47
|
-
trx?: Kysely<DB>;
|
|
48
|
-
}) => Promise<string>;
|
|
49
|
-
key: (CommonQueryKey | QueryKey$5)[];
|
|
50
48
|
};
|
|
51
49
|
declare namespace favourite_d_exports {
|
|
52
50
|
export { Card, CardTable, Item$3 as Item, ItemTable, QueryKey$4 as QueryKey, useCreateCard, useMoveItem, useQueryCard, useQueryItem, useUpsertItem };
|
|
@@ -71,6 +69,12 @@ declare enum QueryKey$4 {
|
|
|
71
69
|
card = "db:favouriteCard:"
|
|
72
70
|
}
|
|
73
71
|
declare const useUpsertItem: () => {
|
|
72
|
+
upsert: (vars: {
|
|
73
|
+
item: StorableItem;
|
|
74
|
+
belongTos: Item$3["belongTo"][];
|
|
75
|
+
trx?: Kysely<DB>;
|
|
76
|
+
}) => Promise<void>;
|
|
77
|
+
key: (CommonQueryKey | QueryKey$5 | QueryKey$4)[];
|
|
74
78
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<void, Error, undefined>>;
|
|
75
79
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
76
80
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -79,23 +83,24 @@ declare const useUpsertItem: () => {
|
|
|
79
83
|
isLoading: import("vue").ComputedRef<boolean>;
|
|
80
84
|
variables: import("vue").ShallowRef<{
|
|
81
85
|
item: StorableItem;
|
|
82
|
-
belongTos: Item$3[
|
|
86
|
+
belongTos: Item$3["belongTo"][];
|
|
83
87
|
trx?: Kysely<DB>;
|
|
84
88
|
} | undefined>;
|
|
85
89
|
mutate: (vars: {
|
|
86
90
|
item: StorableItem;
|
|
87
|
-
belongTos: Item$3[
|
|
91
|
+
belongTos: Item$3["belongTo"][];
|
|
88
92
|
trx?: Kysely<DB>;
|
|
89
93
|
}) => void;
|
|
90
94
|
reset: () => void;
|
|
91
|
-
|
|
95
|
+
};
|
|
96
|
+
declare const useMoveItem: () => {
|
|
97
|
+
move: (vars: {
|
|
92
98
|
item: StorableItem;
|
|
93
|
-
|
|
99
|
+
from: Item$3["belongTo"];
|
|
100
|
+
aims: Item$3["belongTo"][];
|
|
94
101
|
trx?: Kysely<DB>;
|
|
95
102
|
}) => Promise<void>;
|
|
96
|
-
key:
|
|
97
|
-
};
|
|
98
|
-
declare const useMoveItem: () => {
|
|
103
|
+
key: QueryKey$4[];
|
|
99
104
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<void, Error, undefined>>;
|
|
100
105
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
101
106
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -104,26 +109,24 @@ declare const useMoveItem: () => {
|
|
|
104
109
|
isLoading: import("vue").ComputedRef<boolean>;
|
|
105
110
|
variables: import("vue").ShallowRef<{
|
|
106
111
|
item: StorableItem;
|
|
107
|
-
from: Item$3[
|
|
108
|
-
aims: Item$3[
|
|
112
|
+
from: Item$3["belongTo"];
|
|
113
|
+
aims: Item$3["belongTo"][];
|
|
109
114
|
trx?: Kysely<DB>;
|
|
110
115
|
} | undefined>;
|
|
111
116
|
mutate: (vars: {
|
|
112
117
|
item: StorableItem;
|
|
113
|
-
from: Item$3[
|
|
114
|
-
aims: Item$3[
|
|
118
|
+
from: Item$3["belongTo"];
|
|
119
|
+
aims: Item$3["belongTo"][];
|
|
115
120
|
trx?: Kysely<DB>;
|
|
116
121
|
}) => void;
|
|
117
122
|
reset: () => void;
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
123
|
+
};
|
|
124
|
+
declare const useCreateCard: () => {
|
|
125
|
+
createCard: (vars: {
|
|
126
|
+
card: Card;
|
|
122
127
|
trx?: Kysely<DB>;
|
|
123
128
|
}) => Promise<void>;
|
|
124
129
|
key: QueryKey$4[];
|
|
125
|
-
};
|
|
126
|
-
declare const useCreateCard: () => {
|
|
127
130
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<void, Error, undefined>>;
|
|
128
131
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
129
132
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -139,44 +142,13 @@ declare const useCreateCard: () => {
|
|
|
139
142
|
trx?: Kysely<DB>;
|
|
140
143
|
}) => void;
|
|
141
144
|
reset: () => void;
|
|
142
|
-
createCard: (vars: {
|
|
143
|
-
card: Card;
|
|
144
|
-
trx?: Kysely<DB>;
|
|
145
|
-
}) => Promise<void>;
|
|
146
|
-
key: QueryKey$4[];
|
|
147
145
|
};
|
|
148
|
-
declare const useQueryItem: <T>(query: (db: SelectQueryBuilder<DB,
|
|
149
|
-
declare const useQueryCard: <T>(query: (db: SelectQueryBuilder<DB,
|
|
146
|
+
declare const useQueryItem: <T>(query: (db: SelectQueryBuilder<DB, "favouriteItem", {}>) => Promise<T>, otherKeys?: any[], initialData?: () => T) => import("@pinia/colada").UseQueryReturn<T, Error, T>;
|
|
147
|
+
declare const useQueryCard: <T>(query: (db: SelectQueryBuilder<DB, "favouriteCard", {}>) => Promise<T>, otherKeys?: any[], initialData?: () => T) => import("@pinia/colada").UseQueryReturn<T, Error, T>;
|
|
150
148
|
declare namespace plugin_d_exports {
|
|
151
149
|
export { Archive, Meta, QueryKey$3 as QueryKey, Table$5 as Table, removeByNames, useQuery$3 as useQuery, useRemove$3 as useRemove, useSetKind, useToggleEnable, useUpsert$3 as useUpsert };
|
|
152
150
|
}
|
|
153
|
-
|
|
154
|
-
name: {
|
|
155
|
-
display: string;
|
|
156
|
-
id: string;
|
|
157
|
-
};
|
|
158
|
-
version: {
|
|
159
|
-
plugin: string;
|
|
160
|
-
supportCore: string;
|
|
161
|
-
};
|
|
162
|
-
author: string;
|
|
163
|
-
description: string;
|
|
164
|
-
/** An HTTP(S) URL or a path relative to the installed plugin root. */
|
|
165
|
-
icon?: string;
|
|
166
|
-
require: {
|
|
167
|
-
id: string;
|
|
168
|
-
download?: string | undefined;
|
|
169
|
-
}[];
|
|
170
|
-
entry?: {
|
|
171
|
-
jsPath: string;
|
|
172
|
-
cssPath?: string;
|
|
173
|
-
};
|
|
174
|
-
kind?: 'normal' | 'preboot';
|
|
175
|
-
integrity?: {
|
|
176
|
-
algorithm: 'blake3' | 'sha256';
|
|
177
|
-
digest: string;
|
|
178
|
-
};
|
|
179
|
-
}
|
|
151
|
+
type Meta = PluginManifest;
|
|
180
152
|
interface Table$5 {
|
|
181
153
|
installerName: string;
|
|
182
154
|
loaderName: string;
|
|
@@ -192,8 +164,13 @@ type Archive = Selectable<Table$5>;
|
|
|
192
164
|
declare enum QueryKey$3 {
|
|
193
165
|
item = "db:plugin:"
|
|
194
166
|
}
|
|
195
|
-
declare const removeByNames: (keys: Archive[
|
|
167
|
+
declare const removeByNames: (keys: Archive["pluginName"][], trx: Kysely<DB>) => Promise<void>;
|
|
196
168
|
declare const useUpsert$3: () => {
|
|
169
|
+
upsert: (vars: {
|
|
170
|
+
archives: Archive[];
|
|
171
|
+
trx?: Kysely<DB>;
|
|
172
|
+
}) => Promise<void>;
|
|
173
|
+
key: (CommonQueryKey | QueryKey$3)[];
|
|
197
174
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<void, Error, undefined>>;
|
|
198
175
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
199
176
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -209,13 +186,13 @@ declare const useUpsert$3: () => {
|
|
|
209
186
|
trx?: Kysely<DB>;
|
|
210
187
|
}) => void;
|
|
211
188
|
reset: () => void;
|
|
212
|
-
|
|
213
|
-
|
|
189
|
+
};
|
|
190
|
+
declare const useRemove$3: () => {
|
|
191
|
+
remove: (vars: {
|
|
192
|
+
keys: Archive["pluginName"][];
|
|
214
193
|
trx?: Kysely<DB>;
|
|
215
194
|
}) => Promise<void>;
|
|
216
195
|
key: (CommonQueryKey | QueryKey$3)[];
|
|
217
|
-
};
|
|
218
|
-
declare const useRemove$3: () => {
|
|
219
196
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<void, Error, undefined>>;
|
|
220
197
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
221
198
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -223,21 +200,21 @@ declare const useRemove$3: () => {
|
|
|
223
200
|
error: import("vue").ShallowRef<Error | null>;
|
|
224
201
|
isLoading: import("vue").ComputedRef<boolean>;
|
|
225
202
|
variables: import("vue").ShallowRef<{
|
|
226
|
-
keys: Archive[
|
|
203
|
+
keys: Archive["pluginName"][];
|
|
227
204
|
trx?: Kysely<DB>;
|
|
228
205
|
} | undefined>;
|
|
229
206
|
mutate: (vars: {
|
|
230
|
-
keys: Archive[
|
|
207
|
+
keys: Archive["pluginName"][];
|
|
231
208
|
trx?: Kysely<DB>;
|
|
232
209
|
}) => void;
|
|
233
210
|
reset: () => void;
|
|
234
|
-
remove: (vars: {
|
|
235
|
-
keys: Archive['pluginName'][];
|
|
236
|
-
trx?: Kysely<DB>;
|
|
237
|
-
}) => Promise<void>;
|
|
238
|
-
key: (CommonQueryKey | QueryKey$3)[];
|
|
239
211
|
};
|
|
240
212
|
declare const useToggleEnable: () => {
|
|
213
|
+
toggle: (vars: {
|
|
214
|
+
keys: Archive["pluginName"][];
|
|
215
|
+
trx?: Kysely<DB>;
|
|
216
|
+
}) => Promise<import("kysely").UpdateResult[] | undefined>;
|
|
217
|
+
key: (CommonQueryKey | QueryKey$3)[];
|
|
241
218
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<import("kysely").UpdateResult[] | undefined, Error, undefined>>;
|
|
242
219
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
243
220
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -245,21 +222,21 @@ declare const useToggleEnable: () => {
|
|
|
245
222
|
error: import("vue").ShallowRef<Error | null>;
|
|
246
223
|
isLoading: import("vue").ComputedRef<boolean>;
|
|
247
224
|
variables: import("vue").ShallowRef<{
|
|
248
|
-
keys: Archive[
|
|
225
|
+
keys: Archive["pluginName"][];
|
|
249
226
|
trx?: Kysely<DB>;
|
|
250
227
|
} | undefined>;
|
|
251
228
|
mutate: (vars: {
|
|
252
|
-
keys: Archive[
|
|
229
|
+
keys: Archive["pluginName"][];
|
|
253
230
|
trx?: Kysely<DB>;
|
|
254
231
|
}) => void;
|
|
255
232
|
reset: () => void;
|
|
256
|
-
toggle: (vars: {
|
|
257
|
-
keys: Archive['pluginName'][];
|
|
258
|
-
trx?: Kysely<DB>;
|
|
259
|
-
}) => Promise<import("kysely").UpdateResult[] | undefined>;
|
|
260
|
-
key: (CommonQueryKey | QueryKey$3)[];
|
|
261
233
|
};
|
|
262
234
|
declare const useSetKind: () => {
|
|
235
|
+
setKind: (vars: {
|
|
236
|
+
pluginName: string;
|
|
237
|
+
kind: NonNullable<Meta["kind"]>;
|
|
238
|
+
}) => Promise<void>;
|
|
239
|
+
key: (CommonQueryKey | QueryKey$3)[];
|
|
263
240
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<void, Error, undefined>>;
|
|
264
241
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
265
242
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -268,20 +245,15 @@ declare const useSetKind: () => {
|
|
|
268
245
|
isLoading: import("vue").ComputedRef<boolean>;
|
|
269
246
|
variables: import("vue").ShallowRef<{
|
|
270
247
|
pluginName: string;
|
|
271
|
-
kind: NonNullable<Meta[
|
|
248
|
+
kind: NonNullable<Meta["kind"]>;
|
|
272
249
|
} | undefined>;
|
|
273
250
|
mutate: (vars: {
|
|
274
251
|
pluginName: string;
|
|
275
|
-
kind: NonNullable<Meta[
|
|
252
|
+
kind: NonNullable<Meta["kind"]>;
|
|
276
253
|
}) => void;
|
|
277
254
|
reset: () => void;
|
|
278
|
-
setKind: (vars: {
|
|
279
|
-
pluginName: string;
|
|
280
|
-
kind: NonNullable<Meta['kind']>;
|
|
281
|
-
}) => Promise<void>;
|
|
282
|
-
key: (CommonQueryKey | QueryKey$3)[];
|
|
283
255
|
};
|
|
284
|
-
declare const useQuery$3: <T>(query: (db: SelectQueryBuilder<DB,
|
|
256
|
+
declare const useQuery$3: <T>(query: (db: SelectQueryBuilder<DB, "plugin", {}>) => Promise<T>, otherKeys?: any[], initialData?: () => T) => import("@pinia/colada").UseQueryReturn<T, Error, T>;
|
|
285
257
|
declare namespace history_d_exports {
|
|
286
258
|
export { Item$2 as Item, QueryKey$2 as QueryKey, Table$4 as Table, useQuery$2 as useQuery, useRemove$2 as useRemove, useUpsert$2 as useUpsert };
|
|
287
259
|
}
|
|
@@ -296,6 +268,11 @@ declare enum QueryKey$2 {
|
|
|
296
268
|
item = "db:history:"
|
|
297
269
|
}
|
|
298
270
|
declare const useUpsert$2: () => {
|
|
271
|
+
upsert: (vars: {
|
|
272
|
+
item: StorableItem;
|
|
273
|
+
trx?: Kysely<DB>;
|
|
274
|
+
}) => Promise<void>;
|
|
275
|
+
key: (CommonQueryKey | QueryKey$2 | QueryKey$5)[];
|
|
299
276
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<void, Error, undefined>>;
|
|
300
277
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
301
278
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -311,13 +288,13 @@ declare const useUpsert$2: () => {
|
|
|
311
288
|
trx?: Kysely<DB>;
|
|
312
289
|
}) => void;
|
|
313
290
|
reset: () => void;
|
|
314
|
-
upsert: (vars: {
|
|
315
|
-
item: StorableItem;
|
|
316
|
-
trx?: Kysely<DB>;
|
|
317
|
-
}) => Promise<void>;
|
|
318
|
-
key: (CommonQueryKey | QueryKey$5 | QueryKey$2)[];
|
|
319
291
|
};
|
|
320
292
|
declare const useRemove$2: () => {
|
|
293
|
+
remove: (vars: {
|
|
294
|
+
keys: Item$2["timestamp"][];
|
|
295
|
+
trx?: Kysely<DB>;
|
|
296
|
+
}) => Promise<void>;
|
|
297
|
+
key: (CommonQueryKey | QueryKey$2)[];
|
|
321
298
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<void, Error, undefined>>;
|
|
322
299
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
323
300
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -325,21 +302,16 @@ declare const useRemove$2: () => {
|
|
|
325
302
|
error: import("vue").ShallowRef<Error | null>;
|
|
326
303
|
isLoading: import("vue").ComputedRef<boolean>;
|
|
327
304
|
variables: import("vue").ShallowRef<{
|
|
328
|
-
keys: Item$2[
|
|
305
|
+
keys: Item$2["timestamp"][];
|
|
329
306
|
trx?: Kysely<DB>;
|
|
330
307
|
} | undefined>;
|
|
331
308
|
mutate: (vars: {
|
|
332
|
-
keys: Item$2[
|
|
309
|
+
keys: Item$2["timestamp"][];
|
|
333
310
|
trx?: Kysely<DB>;
|
|
334
311
|
}) => void;
|
|
335
312
|
reset: () => void;
|
|
336
|
-
remove: (vars: {
|
|
337
|
-
keys: Item$2['timestamp'][];
|
|
338
|
-
trx?: Kysely<DB>;
|
|
339
|
-
}) => Promise<void>;
|
|
340
|
-
key: (CommonQueryKey | QueryKey$2)[];
|
|
341
313
|
};
|
|
342
|
-
declare const useQuery$2: <T>(query: (db: SelectQueryBuilder<DB,
|
|
314
|
+
declare const useQuery$2: <T>(query: (db: SelectQueryBuilder<DB, "history", {}>) => Promise<T>, otherKeys?: any[], initialData?: () => T) => import("@pinia/colada").UseQueryReturn<T, Error, T>;
|
|
343
315
|
declare namespace config_d_exports {
|
|
344
316
|
export { ConfigDescription, ConfigRef, Table$3 as Table, useConfig };
|
|
345
317
|
}
|
|
@@ -378,6 +350,11 @@ declare enum QueryKey$1 {
|
|
|
378
350
|
item = "db:recentView:"
|
|
379
351
|
}
|
|
380
352
|
declare const useUpsert$1: () => {
|
|
353
|
+
upsert: (vars: {
|
|
354
|
+
item: StorableItem;
|
|
355
|
+
trx?: Kysely<DB>;
|
|
356
|
+
}) => Promise<void>;
|
|
357
|
+
key: (CommonQueryKey | QueryKey$5 | QueryKey$1)[];
|
|
381
358
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<void, Error, undefined>>;
|
|
382
359
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
383
360
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -393,13 +370,13 @@ declare const useUpsert$1: () => {
|
|
|
393
370
|
trx?: Kysely<DB>;
|
|
394
371
|
}) => void;
|
|
395
372
|
reset: () => void;
|
|
396
|
-
upsert: (vars: {
|
|
397
|
-
item: StorableItem;
|
|
398
|
-
trx?: Kysely<DB>;
|
|
399
|
-
}) => Promise<void>;
|
|
400
|
-
key: (CommonQueryKey | QueryKey$5 | QueryKey$1)[];
|
|
401
373
|
};
|
|
402
374
|
declare const useRemove$1: () => {
|
|
375
|
+
remove: (vars: {
|
|
376
|
+
items: Item$1["timestamp"][];
|
|
377
|
+
trx?: Kysely<DB>;
|
|
378
|
+
}) => Promise<void>;
|
|
379
|
+
key: (CommonQueryKey | QueryKey$1)[];
|
|
403
380
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<void, Error, undefined>>;
|
|
404
381
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
405
382
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -407,21 +384,16 @@ declare const useRemove$1: () => {
|
|
|
407
384
|
error: import("vue").ShallowRef<Error | null>;
|
|
408
385
|
isLoading: import("vue").ComputedRef<boolean>;
|
|
409
386
|
variables: import("vue").ShallowRef<{
|
|
410
|
-
items: Item$1[
|
|
387
|
+
items: Item$1["timestamp"][];
|
|
411
388
|
trx?: Kysely<DB>;
|
|
412
389
|
} | undefined>;
|
|
413
390
|
mutate: (vars: {
|
|
414
|
-
items: Item$1[
|
|
391
|
+
items: Item$1["timestamp"][];
|
|
415
392
|
trx?: Kysely<DB>;
|
|
416
393
|
}) => void;
|
|
417
394
|
reset: () => void;
|
|
418
|
-
remove: (vars: {
|
|
419
|
-
items: Item$1['timestamp'][];
|
|
420
|
-
trx?: Kysely<DB>;
|
|
421
|
-
}) => Promise<void>;
|
|
422
|
-
key: (CommonQueryKey | QueryKey$1)[];
|
|
423
395
|
};
|
|
424
|
-
declare const useQuery$1: <T>(query: (db: SelectQueryBuilder<DB,
|
|
396
|
+
declare const useQuery$1: <T>(query: (db: SelectQueryBuilder<DB, "recentView", {}>) => Promise<T>, otherKeys?: any[], initialData?: () => T) => import("@pinia/colada").UseQueryReturn<T, Error, T>;
|
|
425
397
|
declare namespace subscribe_d_exports {
|
|
426
398
|
export { AuthorItem, AuthorTable, EpItem, EpTable, Item, Key, Key_, QueryKey, Table$1 as Table, key, useQuery, useRemove, useUpsert };
|
|
427
399
|
}
|
|
@@ -452,6 +424,11 @@ declare enum QueryKey {
|
|
|
452
424
|
item = "db:subscribe:"
|
|
453
425
|
}
|
|
454
426
|
declare const useUpsert: () => {
|
|
427
|
+
upsert: (vars: {
|
|
428
|
+
items: Item[];
|
|
429
|
+
trx?: Kysely<DB>;
|
|
430
|
+
}) => Promise<void>;
|
|
431
|
+
key: (CommonQueryKey | QueryKey)[];
|
|
455
432
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<void, Error, undefined>>;
|
|
456
433
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
457
434
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -467,13 +444,13 @@ declare const useUpsert: () => {
|
|
|
467
444
|
trx?: Kysely<DB>;
|
|
468
445
|
}) => void;
|
|
469
446
|
reset: () => void;
|
|
470
|
-
|
|
471
|
-
|
|
447
|
+
};
|
|
448
|
+
declare const useRemove: () => {
|
|
449
|
+
remove: (vars: {
|
|
450
|
+
keys: Item["key"][];
|
|
472
451
|
trx?: Kysely<DB>;
|
|
473
452
|
}) => Promise<void>;
|
|
474
453
|
key: (CommonQueryKey | QueryKey)[];
|
|
475
|
-
};
|
|
476
|
-
declare const useRemove: () => {
|
|
477
454
|
state: import("vue").ComputedRef<import("@pinia/colada").DataState<void, Error, undefined>>;
|
|
478
455
|
status: import("vue").ShallowRef<import("@pinia/colada").DataStateStatus>;
|
|
479
456
|
asyncStatus: import("vue").ShallowRef<import("@pinia/colada").AsyncStatus>;
|
|
@@ -481,21 +458,16 @@ declare const useRemove: () => {
|
|
|
481
458
|
error: import("vue").ShallowRef<Error | null>;
|
|
482
459
|
isLoading: import("vue").ComputedRef<boolean>;
|
|
483
460
|
variables: import("vue").ShallowRef<{
|
|
484
|
-
keys: Item[
|
|
461
|
+
keys: Item["key"][];
|
|
485
462
|
trx?: Kysely<DB>;
|
|
486
463
|
} | undefined>;
|
|
487
464
|
mutate: (vars: {
|
|
488
|
-
keys: Item[
|
|
465
|
+
keys: Item["key"][];
|
|
489
466
|
trx?: Kysely<DB>;
|
|
490
467
|
}) => void;
|
|
491
468
|
reset: () => void;
|
|
492
|
-
remove: (vars: {
|
|
493
|
-
keys: Item['key'][];
|
|
494
|
-
trx?: Kysely<DB>;
|
|
495
|
-
}) => Promise<void>;
|
|
496
|
-
key: (CommonQueryKey | QueryKey)[];
|
|
497
469
|
};
|
|
498
|
-
declare const useQuery: <T>(query: (db: SelectQueryBuilder<DB,
|
|
470
|
+
declare const useQuery: <T>(query: (db: SelectQueryBuilder<DB, "subscribe", {}>) => Promise<T>, otherKeys?: any[], initialData?: () => T) => import("@pinia/colada").UseQueryReturn<T, Error, T>;
|
|
499
471
|
//#endregion
|
|
500
472
|
//#region lib/index.d.ts
|
|
501
473
|
interface DB {
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["QueryKey","useUpsert","useRemove","useQuery","useColadaQuery","QueryKey","useUpsert","QueryKey","ItemStoreDB.useUpsert","useColadaQuery","QueryKey","useUpsert","ItemStoreDB.useUpsert","useRemove","useQuery","useColadaQuery","QueryKey","useUpsert","useRemove","useQuery","useColadaQuery","ItemStoreDB.useUpsert","useQuery","useColadaQuery"],"sources":["../lib/utils.ts","../lib/plugin.ts","../lib/itemStore.ts","../lib/favourite.ts","../lib/history.ts","../lib/subscribe.ts","../lib/recentView.ts","../lib/config.ts","../lib/nativeStore/index.ts","../lib/index.ts"],"sourcesContent":["import { logger } from '@delta-comic/logger'\nimport type { Kysely, SelectQueryBuilder } from 'kysely'\n\nimport type { DB } from '.'\n\nconst transactionLogger = logger.scoped('db:transaction')\n\nexport const withTransition = async <T>(\n handler: (trx: Kysely<DB>) => Promise<T>,\n trx?: Kysely<DB>,\n) => {\n if (trx) return await handler(trx)\n else {\n const { db } = await import('.')\n transactionLogger.trace('database transaction started')\n try {\n const result = await db\n .transaction()\n .setAccessMode('read write')\n .setIsolationLevel('read committed')\n .execute(handler)\n transactionLogger.trace('database transaction committed')\n return result\n } catch (error) {\n transactionLogger.error('database transaction failed', error)\n throw error\n }\n }\n}\n\nexport async function countDb(sql: SelectQueryBuilder<DB, any, object>) {\n const v = await sql.select(db => db.fn.countAll<number>().as('count')).executeTakeFirstOrThrow()\n return v.count\n}\n\nexport enum CommonQueryKey {\n common = 'db',\n}","import {\n defineMutation,\n useMutation,\n useQueryCache,\n useQuery as useColadaQuery,\n} from '@pinia/colada'\nimport type { JSONColumnType, Kysely, Selectable, SelectQueryBuilder } from 'kysely'\n\nimport { CommonQueryKey, withTransition } from './utils'\n\nimport type { DB } from '.'\n\nexport interface Meta {\n name: { display: string; id: string }\n version: { plugin: string; supportCore: string }\n author: string\n description: string\n /** An HTTP(S) URL or a path relative to the installed plugin root. */\n icon?: string\n require: { id: string; download?: string | undefined }[]\n entry?: { jsPath: string; cssPath?: string }\n kind?: 'normal' | 'preboot'\n integrity?: { algorithm: 'blake3' | 'sha256'; digest: string }\n}\n\nexport interface Table {\n installerName: string\n loaderName: string\n /** @description primary key */\n pluginName: string\n meta: JSONColumnType<Meta>\n enable: boolean\n installInput: string\n displayName: string\n}\n\n/** @description Not Blue */\nexport type Archive = Selectable<Table>\n\nexport enum QueryKey {\n item = 'db:plugin:',\n}\n\nexport const removeByNames = async (keys: Archive['pluginName'][], trx: Kysely<DB>) => {\n if (keys.length === 0) return\n await trx.deleteFrom('plugin').where('plugin.pluginName', 'in', keys).execute()\n}\n\nexport const useUpsert = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ archives, trx }: { archives: Archive[]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await trx\n .replaceInto('plugin')\n .values(archives.map(a => ({ ...a, meta: JSON.stringify(a.meta) })))\n .execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, upsert: mutateAsync, key }\n})\n\nexport const useRemove = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ keys, trx }: { keys: Archive['pluginName'][]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await removeByNames(keys, trx)\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, remove: mutateAsync, key }\n})\n\nexport const useToggleEnable = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ keys, trx }: { keys: Archive['pluginName'][]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n for (const key of keys) {\n const isEnable = await trx\n .selectFrom('plugin')\n .where('pluginName', '=', key)\n .select('enable')\n .executeTakeFirstOrThrow()\n return trx\n .updateTable('plugin')\n .where('pluginName', '=', key)\n .set({ enable: !isEnable.enable })\n .execute()\n }\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, toggle: mutateAsync, key }\n})\n\nexport const useSetKind = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({\n pluginName,\n kind,\n }: {\n pluginName: string\n kind: NonNullable<Meta['kind']>\n }) =>\n withTransition(async trx => {\n const plugin = await trx\n .selectFrom('plugin')\n .select(['loaderName', 'meta'])\n .where('pluginName', '=', pluginName)\n .executeTakeFirstOrThrow()\n if (plugin.loaderName === 'builtin')\n throw new Error('built-in plugin kind cannot be changed')\n await trx\n .updateTable('plugin')\n .set({ meta: JSON.stringify({ ...plugin.meta, kind }) })\n .where('pluginName', '=', pluginName)\n .execute()\n }),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, setKind: mutateAsync, key }\n})\n\nexport const useQuery = <T>(\n query: (db: SelectQueryBuilder<DB, 'plugin', {}>) => Promise<T>,\n otherKeys: any[] = [],\n initialData?: () => T,\n) =>\n useColadaQuery({\n query: async () => {\n const { db } = await import('.')\n return await query(db.selectFrom('plugin'))\n },\n key: () => [CommonQueryKey.common, QueryKey.item, query].concat(otherKeys),\n staleTime: 15000,\n refetchOnMount: 'always',\n initialData,\n initialDataUpdatedAt: 0,\n })","import {\n SourcedValue,\n Struct,\n UniContentPage,\n type UniItem,\n type UniItemRaw,\n} from '@delta-comic/model'\nimport { defineMutation, useMutation, useQueryCache } from '@pinia/colada'\nimport type { JSONColumnType, Kysely, Selectable } from 'kysely'\n\nimport { CommonQueryKey, withTransition } from './utils'\n\nimport type { DB } from '.'\n\nexport interface Table {\n /** @description primary key */\n key: string\n item: JSONColumnType<UniItemRaw>\n}\nexport type StorableItem = UniItem | UniItemRaw\nexport type StoredItem = Selectable<Table>\nexport const itemKey = new SourcedValue('*')\n\nexport enum QueryKey {\n item = 'db:itemStore:',\n}\n\nexport const useUpsert = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ item, trx }: { item: StorableItem; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n const k = itemKey.toString([\n UniContentPage.contentPages.key.toString(item.contentType),\n item.id,\n ])\n await trx\n .replaceInto('itemStore')\n .values({ item: Struct.toRaw(item), key: k })\n .execute()\n return k\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, upsert: mutateAsync, key }\n})","import {\n defineMutation,\n useMutation,\n useQueryCache,\n useQuery as useColadaQuery,\n} from '@pinia/colada'\nimport type { Kysely, Selectable, SelectQueryBuilder } from 'kysely'\n\nimport * as ItemStoreDB from './itemStore'\nimport { CommonQueryKey, withTransition } from './utils'\n\nimport type { DB } from '.'\n\nexport interface CardTable {\n title: string\n private: boolean\n description: string\n /** @description primary key */\n createAt: number\n}\n\nexport type Card = Selectable<CardTable>\n\nexport interface ItemTable {\n itemKey: string\n /** @description foreign key */\n belongTo: CardTable['createAt']\n addTime: number\n}\n\nexport type Item = Selectable<ItemTable>\n\nexport enum QueryKey {\n item = 'db:favouriteItem:',\n card = 'db:favouriteCard:',\n}\n\nexport const useUpsertItem = defineMutation(() => {\n const queryCache = useQueryCache()\n const { key: iKey, upsert } = ItemStoreDB.useUpsert()\n const key = [CommonQueryKey.common, QueryKey.item, ...iKey]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({\n item,\n belongTos,\n trx,\n }: {\n item: ItemStoreDB.StorableItem\n belongTos: Item['belongTo'][]\n trx?: Kysely<DB>\n }) =>\n withTransition(async trx => {\n const itemKey = await upsert({ item, trx })\n await trx\n .replaceInto('favouriteItem')\n .values(belongTos.map(belongTo => ({ addTime: Date.now(), itemKey, belongTo })))\n .execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, upsert: mutateAsync, key }\n})\n\nexport const useMoveItem = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({\n item,\n from,\n aims,\n trx,\n }: {\n item: ItemStoreDB.StorableItem\n from: Item['belongTo']\n aims: Item['belongTo'][]\n trx?: Kysely<DB>\n }) =>\n withTransition(async trx => {\n await trx\n .deleteFrom('favouriteItem')\n .where('itemKey', '=', item.id)\n .where('belongTo', '=', from)\n .execute()\n await trx\n .replaceInto('favouriteItem')\n .values(aims.map(to => ({ addTime: Date.now(), itemKey: item.id, belongTo: to })))\n .execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, move: mutateAsync, key }\n})\n\nexport const useCreateCard = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [QueryKey.card, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ card, trx }: { card: Card; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await trx.replaceInto('favouriteCard').values(card).execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, createCard: mutateAsync, key }\n})\n\nexport const useQueryItem = <T>(\n query: (db: SelectQueryBuilder<DB, 'favouriteItem', {}>) => Promise<T>,\n otherKeys: any[] = [],\n initialData?: () => T,\n) =>\n useColadaQuery({\n query: async () => {\n const { db } = await import('.')\n return await query(db.selectFrom('favouriteItem'))\n },\n key: () => [QueryKey.item, QueryKey.card, query].concat(otherKeys),\n staleTime: 15000,\n initialData,\n initialDataUpdatedAt: 0,\n })\n\nexport const useQueryCard = <T>(\n query: (db: SelectQueryBuilder<DB, 'favouriteCard', {}>) => Promise<T>,\n otherKeys: any[] = [],\n initialData?: () => T,\n) =>\n useColadaQuery({\n query: async () => {\n const { db } = await import('.')\n return await query(db.selectFrom('favouriteCard'))\n },\n key: () => [QueryKey.card, query].concat(otherKeys),\n staleTime: 15000,\n refetchOnMount: 'always',\n initialData,\n initialDataUpdatedAt: 0,\n })","import { Struct, type UniEpRaw } from '@delta-comic/model'\nimport {\n defineMutation,\n useMutation,\n useQueryCache,\n useQuery as useColadaQuery,\n} from '@pinia/colada'\nimport type { JSONColumnType, Kysely, Selectable, SelectQueryBuilder } from 'kysely'\n\nimport * as ItemStoreDB from './itemStore'\nimport { CommonQueryKey, withTransition } from './utils'\n\nimport type { DB } from '.'\n\nexport interface Table {\n /** @description primary key */\n timestamp: number\n itemKey: string\n ep: JSONColumnType<UniEpRaw>\n}\n\nexport type Item = Selectable<Table>\n\nexport enum QueryKey {\n item = 'db:history:',\n}\n\nexport const useUpsert = defineMutation(() => {\n const queryCache = useQueryCache()\n const { key: iKey, upsert } = ItemStoreDB.useUpsert()\n const key = [CommonQueryKey.common, QueryKey.item, ...iKey]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ item, trx }: { item: ItemStoreDB.StorableItem; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n const itemKey = await upsert({ item, trx })\n await trx\n .replaceInto('history')\n .values({ itemKey, timestamp: Date.now(), ep: Struct.toRaw(item) })\n .execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, upsert: mutateAsync, key }\n})\n\nexport const useRemove = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: ({ keys, trx }: { keys: Item['timestamp'][]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await trx.deleteFrom('history').where('history.timestamp', 'is', keys).execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, remove: mutateAsync, key }\n})\n\nexport const useQuery = <T>(\n query: (db: SelectQueryBuilder<DB, 'history', {}>) => Promise<T>,\n otherKeys: any[] = [],\n initialData?: () => T,\n) =>\n useColadaQuery({\n query: async () => {\n const { db } = await import('.')\n return await query(db.selectFrom('history'))\n },\n key: () => [CommonQueryKey.common, QueryKey.item, query].concat(otherKeys),\n staleTime: 15000,\n refetchOnMount: 'always',\n initialData,\n initialDataUpdatedAt: 0,\n })","import { SourcedValue, type SourcedKeyType, type UniItemAuthor } from '@delta-comic/model'\nimport {\n defineMutation,\n useMutation,\n useQueryCache,\n useQuery as useColadaQuery,\n} from '@pinia/colada'\nimport type { JSONColumnType, Kysely, Selectable, SelectQueryBuilder } from 'kysely'\n\nimport { CommonQueryKey, withTransition } from './utils'\n\nimport type { DB } from '.'\n\nexport const key = new SourcedValue<[plugin: string, label: string]>()\nexport type Key_ = SourcedKeyType<typeof key>\nexport type Key = Exclude<Key_, string>\n\nexport interface AuthorTable {\n author: JSONColumnType<UniItemAuthor>\n itemKey: null\n type: 'author'\n /** @description primary key */\n key: string\n plugin: string\n}\nexport type AuthorItem = Selectable<AuthorTable>\n\nexport interface EpTable {\n author: null\n itemKey: string // not f key\n type: 'ep'\n /** @description primary key */\n key: string\n plugin: string\n}\nexport type EpItem = Selectable<EpTable>\n\nexport type Table = AuthorTable | EpTable\nexport type Item = AuthorItem | EpItem\n\nexport enum QueryKey {\n item = 'db:subscribe:',\n}\n\nexport const useUpsert = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ items, trx }: { items: Item[]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await trx\n .replaceInto('subscribe')\n .values(items.map(item => ({ ...item, author: JSON.stringify(item.author) })))\n .execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, upsert: mutateAsync, key }\n})\n\nexport const useRemove = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ keys, trx }: { keys: Item['key'][]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await trx.deleteFrom('subscribe').where('subscribe.key', 'is', keys).execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, remove: mutateAsync, key }\n})\n\nexport const useQuery = <T>(\n query: (db: SelectQueryBuilder<DB, 'subscribe', {}>) => Promise<T>,\n otherKeys: any[] = [],\n initialData?: () => T,\n) =>\n useColadaQuery({\n query: async () => {\n const { db } = await import('.')\n return await query(db.selectFrom('subscribe'))\n },\n key: () => [CommonQueryKey.common, QueryKey.item, query].concat(otherKeys),\n staleTime: 15000,\n refetchOnMount: 'always',\n initialData,\n initialDataUpdatedAt: 0,\n })","import {\n defineMutation,\n useMutation,\n useQueryCache,\n useQuery as useColadaQuery,\n} from '@pinia/colada'\nimport type { Kysely, Selectable, SelectQueryBuilder } from 'kysely'\n\nimport * as ItemStoreDB from './itemStore'\nimport { CommonQueryKey, withTransition } from './utils'\n\nimport type { DB } from '.'\n\nexport interface Table {\n /** @description primary key */\n timestamp: number\n itemKey: string\n isViewed: boolean\n}\nexport type Item = Selectable<Table>\n\nexport enum QueryKey {\n item = 'db:recentView:',\n}\n\nexport const useUpsert = defineMutation(() => {\n const queryCache = useQueryCache()\n const { key: iKey, upsert } = ItemStoreDB.useUpsert()\n const key = [CommonQueryKey.common, QueryKey.item, ...iKey]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ item, trx }: { item: ItemStoreDB.StorableItem; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n const itemKey = await upsert({ item, trx })\n await trx\n .replaceInto('recentView')\n .values({ isViewed: false, itemKey, timestamp: Date.now() })\n .execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, upsert: mutateAsync, key }\n})\n\nexport const useRemove = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ items, trx }: { items: Item['timestamp'][]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await trx.deleteFrom('recentView').where('recentView.timestamp', 'is', items).execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, remove: mutateAsync, key }\n})\n\nexport const useQuery = <T>(\n query: (db: SelectQueryBuilder<DB, 'recentView', {}>) => Promise<T>,\n otherKeys: any[] = [],\n initialData?: () => T,\n) =>\n useColadaQuery({\n query: async () => {\n const { db } = await import('.')\n return await query(db.selectFrom('recentView'))\n },\n key: () => [CommonQueryKey.common, QueryKey.item, query].concat(otherKeys),\n staleTime: 15000,\n refetchOnMount: 'always',\n initialData,\n initialDataUpdatedAt: 0,\n })","import { logger } from '@delta-comic/logger'\nimport type { FormResult, FormSingleConfigure } from '@delta-comic/model'\nimport { fromPairs } from 'es-toolkit/compat'\nimport { ref, watch, type Ref } from 'vue'\n\nconst configLogger = logger.scoped('db:config')\n\nexport interface Table {\n /** @description config owner, usually plugin name */\n belongTo: string\n /** @description serialized form structure */\n form: string\n /** @description serialized config data */\n data: string\n}\n\nexport type ConfigRef<T> = Ref<T> & { readonly ready: Promise<void> }\n\nexport type ConfigDescription = Record<\n string,\n Required<Pick<FormSingleConfigure, 'defaultValue'>> & FormSingleConfigure\n>\n\nconst cloneValue = <T>(value: T): T => {\n if (typeof structuredClone === 'function') return structuredClone(value)\n return JSON.parse(JSON.stringify(value)) as T\n}\n\nconst createDefaultData = <T extends ConfigDescription>(config: T): FormResult<T> =>\n fromPairs(\n Object.entries(config).map(([name, desc]) => [name, desc.defaultValue]),\n ) as FormResult<T>\n\nconst parseJson = <T>(value: unknown, fallback: T): T => {\n if (!value) return cloneValue(fallback)\n if (typeof value !== 'string') return cloneValue(value as T)\n try {\n return JSON.parse(value) as T\n } catch (error) {\n configLogger.warn('failed to parse config value', error)\n return cloneValue(fallback)\n }\n}\n\nconst upsertConfig = async (belongTo: string, form: any, data: unknown) => {\n const { db } = await import('.')\n await db\n .replaceInto('config')\n .values({ belongTo, form: JSON.stringify(form), data: JSON.stringify(data) })\n .execute()\n configLogger.debug('config persisted', { belongTo })\n}\n\nexport const useConfig = <T extends ConfigDescription>(\n belongTo: string,\n form: T,\n): ConfigRef<FormResult<T>> => {\n const defaultData = createDefaultData(form)\n const data = ref(cloneValue(defaultData)) as Ref<FormResult<T>>\n let hydrated = false\n let saveTimer: ReturnType<typeof setTimeout> | undefined\n\n const persist = () => {\n if (saveTimer) clearTimeout(saveTimer)\n saveTimer = setTimeout(() => {\n void upsertConfig(belongTo, form, data.value).catch(error => {\n configLogger.warn('failed to persist config value', { belongTo }, error)\n })\n }, 100)\n }\n\n const ready = (async () => {\n try {\n const { db } = await import('.')\n const stored = await db\n .selectFrom('config')\n .select(['form', 'data'])\n .where('belongTo', '=', belongTo)\n .executeTakeFirst()\n data.value = parseJson(stored?.data, defaultData)\n configLogger.debug('config hydrated', { belongTo, found: Boolean(stored) })\n hydrated = true\n const storedForm =\n typeof stored?.form === 'string' ? stored.form : JSON.stringify(stored?.form)\n if (!stored || storedForm !== JSON.stringify(form)) persist()\n } catch (error) {\n configLogger.warn('failed to load config value', { belongTo }, error)\n data.value = cloneValue(defaultData)\n hydrated = true\n }\n })()\n\n watch(\n data,\n () => {\n if (!hydrated) return\n persist()\n },\n { deep: true, flush: 'sync' },\n )\n\n return Object.assign(data, { ready })\n}","import { logger } from '@delta-comic/logger'\nimport { SourcedValue } from '@delta-comic/model'\nimport { ref, toValue, watch, type MaybeRefOrGetter, type Ref } from 'vue'\n\nconst nativeStoreLogger = logger.scoped('db:native-store')\n\nexport interface Table {\n namespace: string\n key: string\n value: string\n}\n\nconst saveKey = new SourcedValue<[namespace: string, key: string]>()\n\nconst cloneDefault = <T extends object>(defaultValue: MaybeRefOrGetter<T>): T => {\n const value = toValue(defaultValue)\n if (typeof structuredClone === 'function') return structuredClone(value)\n return JSON.parse(JSON.stringify(value)) as T\n}\n\nconst legacyValue = (namespace: string, key: string) => {\n try {\n return globalThis.localStorage?.getItem(saveKey.toString([namespace, key])) ?? null\n } catch {\n return null\n }\n}\n\nconst parseValue = <T extends object>(value: unknown, defaultValue: MaybeRefOrGetter<T>): T => {\n if (value === null || value === '') return cloneDefault(defaultValue)\n if (typeof value !== 'string') {\n if (typeof structuredClone === 'function') return structuredClone(value as T)\n return JSON.parse(JSON.stringify(value)) as T\n }\n try {\n return JSON.parse(value) as T\n } catch (error) {\n nativeStoreLogger.warn('failed to parse native store value', error)\n return cloneDefault(defaultValue)\n }\n}\n\nconst getStoreValue = async (namespace: string, key: string) => {\n const { db } = await import('../index')\n return (\n (\n await db\n .selectFrom('nativeStore')\n .select('value')\n .where('namespace', '=', namespace)\n .where('key', '=', key)\n .executeTakeFirst()\n )?.value ?? null\n )\n}\n\nconst setStoreValue = async (namespace: string, key: string, value: string) => {\n const { db } = await import('../index')\n await db.replaceInto('nativeStore').values({ namespace, key, value }).execute()\n}\n\nexport const useNativeStore = <T extends object>(\n namespace: string,\n key: MaybeRefOrGetter<string>,\n defaultValue: MaybeRefOrGetter<T>,\n) => {\n const state = ref(cloneDefault(defaultValue)) as Ref<T>\n let version = 0\n let hydrated = false\n let saveTimer: ReturnType<typeof setTimeout> | undefined\n\n const persist = (resolvedKey: string, value: T) => {\n if (saveTimer) clearTimeout(saveTimer)\n const encoded = JSON.stringify(value)\n saveTimer = setTimeout(() => {\n void setStoreValue(namespace, resolvedKey, encoded).catch(error => {\n nativeStoreLogger.warn(\n 'failed to persist native store value',\n { key: resolvedKey, namespace },\n error,\n )\n })\n }, 100)\n }\n\n const load = async () => {\n const current = ++version\n const resolvedKey = toValue(key)\n hydrated = false\n try {\n const storeValue = await getStoreValue(namespace, resolvedKey)\n const storedValue = storeValue ?? legacyValue(namespace, resolvedKey)\n if (current !== version) return\n state.value = parseValue(storedValue, defaultValue)\n nativeStoreLogger.debug('native store value hydrated', {\n key: resolvedKey,\n namespace,\n source: storeValue === null ? 'legacy-or-default' : 'database',\n })\n hydrated = true\n if (storeValue === null) persist(resolvedKey, state.value)\n } catch (error) {\n nativeStoreLogger.warn(\n 'failed to load native store value',\n { key: resolvedKey, namespace },\n error,\n )\n if (current !== version) return\n state.value = cloneDefault(defaultValue)\n hydrated = true\n }\n }\n\n watch(\n () => toValue(key),\n () => void load(),\n { immediate: true },\n )\n watch(\n state,\n value => {\n if (!hydrated) return\n persist(toValue(key), value)\n },\n { deep: true },\n )\n\n return state\n}","import { logger } from '@delta-comic/logger'\nimport { isTauri } from '@tauri-apps/api/core'\nimport { CamelCasePlugin, type Dialect, Kysely } from 'kysely'\nimport { SerializePlugin } from 'kysely-plugin-serialize'\n\nimport type * as FavouriteDB from './favourite'\nexport * as PluginArchiveDB from './plugin'\nimport type * as HistoryDB from './history'\nexport * as FavouriteDB from './favourite'\nimport type * as ConfigDB from './config'\nimport type * as ItemStoreDB from './itemStore'\nimport type * as NativeStoreDB from './nativeStore'\nexport * as HistoryDB from './history'\nimport type * as PluginArchiveDB from './plugin'\nexport * as ItemStoreDB from './itemStore'\nimport type * as RecentDB from './recentView'\nexport * as SubscribeDB from './subscribe'\nimport type * as SubscribeDB from './subscribe'\nexport * as RecentDB from './recentView'\nexport * as ConfigDB from './config'\n\nexport interface DB {\n itemStore: ItemStoreDB.Table\n favouriteCard: FavouriteDB.CardTable\n favouriteItem: FavouriteDB.ItemTable\n history: HistoryDB.Table\n recentView: RecentDB.Table\n subscribe: SubscribeDB.Table\n plugin: PluginArchiveDB.Table\n nativeStore: NativeStoreDB.Table\n config: ConfigDB.Table\n}\n\nconst databaseLogger = logger.scoped('db:lifecycle')\n\ndatabaseLogger.info('database initialization started')\n\nexport const isTauriRuntime = isTauri\n\nconst createDialect = async (): Promise<Dialect> => {\n if (isTauriRuntime()) {\n const [{ default: Database }, { TauriSqliteDialect }] = await Promise.all([\n import('@tauri-apps/plugin-sql'),\n import('kysely-dialect-tauri'),\n ])\n const database = await Database.load('sqlite:app.db')\n databaseLogger.info('native sqlite dialect initialized')\n return new TauriSqliteDialect({ database })\n }\n\n const { createWebDialect } = await import('./web')\n databaseLogger.info('web sqlite dialect initialized')\n return createWebDialect()\n}\n\nexport const db = new Kysely<DB>({\n dialect: await createDialect(),\n plugins: [new CamelCasePlugin(), new SerializePlugin()],\n})\n\nexport * as DBUtils from './utils'\n\nexport * from './nativeStore'\nexport { useConfig } from './config'"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["QueryKey","useUpsert","useRemove","useQuery","useColadaQuery","QueryKey","useUpsert","QueryKey","ItemStoreDB.useUpsert","useColadaQuery","QueryKey","useUpsert","ItemStoreDB.useUpsert","useRemove","useQuery","useColadaQuery","QueryKey","useUpsert","useRemove","useQuery","useColadaQuery","ItemStoreDB.useUpsert","useQuery","useColadaQuery"],"sources":["../lib/utils.ts","../lib/plugin.ts","../lib/itemStore.ts","../lib/favourite.ts","../lib/history.ts","../lib/subscribe.ts","../lib/recentView.ts","../lib/config.ts","../lib/nativeStore/index.ts","../lib/index.ts"],"sourcesContent":["import { logger } from '@delta-comic/logger'\nimport type { Kysely, SelectQueryBuilder } from 'kysely'\n\nimport type { DB } from '.'\n\nconst transactionLogger = logger.scoped('db:transaction')\n\nexport const withTransition = async <T>(\n handler: (trx: Kysely<DB>) => Promise<T>,\n trx?: Kysely<DB>,\n) => {\n if (trx) return await handler(trx)\n else {\n const { db } = await import('.')\n transactionLogger.trace('database transaction started')\n try {\n const result = await db\n .transaction()\n .setAccessMode('read write')\n .setIsolationLevel('read committed')\n .execute(handler)\n transactionLogger.trace('database transaction committed')\n return result\n } catch (error) {\n transactionLogger.error('database transaction failed', error)\n throw error\n }\n }\n}\n\nexport async function countDb(sql: SelectQueryBuilder<DB, any, object>) {\n const v = await sql.select(db => db.fn.countAll<number>().as('count')).executeTakeFirstOrThrow()\n return v.count\n}\n\nexport enum CommonQueryKey {\n common = 'db',\n}","import type { PluginManifest } from '@delta-comic/model'\nimport {\n defineMutation,\n useMutation,\n useQueryCache,\n useQuery as useColadaQuery,\n} from '@pinia/colada'\nimport type { JSONColumnType, Kysely, Selectable, SelectQueryBuilder } from 'kysely'\n\nimport { CommonQueryKey, withTransition } from './utils'\n\nimport type { DB } from '.'\n\nexport type Meta = PluginManifest\n\nexport interface Table {\n installerName: string\n loaderName: string\n /** @description primary key */\n pluginName: string\n meta: JSONColumnType<Meta>\n enable: boolean\n installInput: string\n displayName: string\n}\n\n/** @description Not Blue */\nexport type Archive = Selectable<Table>\n\nexport enum QueryKey {\n item = 'db:plugin:',\n}\n\nexport const removeByNames = async (keys: Archive['pluginName'][], trx: Kysely<DB>) => {\n if (keys.length === 0) return\n await trx.deleteFrom('plugin').where('plugin.pluginName', 'in', keys).execute()\n}\n\nexport const useUpsert = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ archives, trx }: { archives: Archive[]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await trx\n .replaceInto('plugin')\n .values(archives.map(a => ({ ...a, meta: JSON.stringify(a.meta) })))\n .execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, upsert: mutateAsync, key }\n})\n\nexport const useRemove = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ keys, trx }: { keys: Archive['pluginName'][]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await removeByNames(keys, trx)\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, remove: mutateAsync, key }\n})\n\nexport const useToggleEnable = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ keys, trx }: { keys: Archive['pluginName'][]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n for (const key of keys) {\n const isEnable = await trx\n .selectFrom('plugin')\n .where('pluginName', '=', key)\n .select('enable')\n .executeTakeFirstOrThrow()\n return trx\n .updateTable('plugin')\n .where('pluginName', '=', key)\n .set({ enable: !isEnable.enable })\n .execute()\n }\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, toggle: mutateAsync, key }\n})\n\nexport const useSetKind = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({\n pluginName,\n kind,\n }: {\n pluginName: string\n kind: NonNullable<Meta['kind']>\n }) =>\n withTransition(async trx => {\n const plugin = await trx\n .selectFrom('plugin')\n .select(['loaderName', 'meta'])\n .where('pluginName', '=', pluginName)\n .executeTakeFirstOrThrow()\n if (plugin.loaderName === 'builtin')\n throw new Error('built-in plugin kind cannot be changed')\n await trx\n .updateTable('plugin')\n .set({ meta: JSON.stringify({ ...plugin.meta, kind }) })\n .where('pluginName', '=', pluginName)\n .execute()\n }),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, setKind: mutateAsync, key }\n})\n\nexport const useQuery = <T>(\n query: (db: SelectQueryBuilder<DB, 'plugin', {}>) => Promise<T>,\n otherKeys: any[] = [],\n initialData?: () => T,\n) =>\n useColadaQuery({\n query: async () => {\n const { db } = await import('.')\n return await query(db.selectFrom('plugin'))\n },\n key: () => [CommonQueryKey.common, QueryKey.item, query].concat(otherKeys),\n staleTime: 15000,\n refetchOnMount: 'always',\n initialData,\n initialDataUpdatedAt: 0,\n })","import {\n SourcedValue,\n Struct,\n UniContentPage,\n type UniItem,\n type UniItemRaw,\n} from '@delta-comic/model'\nimport { defineMutation, useMutation, useQueryCache } from '@pinia/colada'\nimport type { JSONColumnType, Kysely, Selectable } from 'kysely'\n\nimport { CommonQueryKey, withTransition } from './utils'\n\nimport type { DB } from '.'\n\nexport interface Table {\n /** @description primary key */\n key: string\n item: JSONColumnType<UniItemRaw>\n}\nexport type StorableItem = UniItem | UniItemRaw\nexport type StoredItem = Selectable<Table>\nexport const itemKey = new SourcedValue('*')\n\nexport enum QueryKey {\n item = 'db:itemStore:',\n}\n\nexport const useUpsert = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ item, trx }: { item: StorableItem; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n const k = itemKey.toString([\n UniContentPage.contentPages.key.toString(item.contentType),\n item.id,\n ])\n await trx\n .replaceInto('itemStore')\n .values({ item: Struct.toRaw(item), key: k })\n .execute()\n return k\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, upsert: mutateAsync, key }\n})","import {\n defineMutation,\n useMutation,\n useQueryCache,\n useQuery as useColadaQuery,\n} from '@pinia/colada'\nimport type { Kysely, Selectable, SelectQueryBuilder } from 'kysely'\n\nimport * as ItemStoreDB from './itemStore'\nimport { CommonQueryKey, withTransition } from './utils'\n\nimport type { DB } from '.'\n\nexport interface CardTable {\n title: string\n private: boolean\n description: string\n /** @description primary key */\n createAt: number\n}\n\nexport type Card = Selectable<CardTable>\n\nexport interface ItemTable {\n itemKey: string\n /** @description foreign key */\n belongTo: CardTable['createAt']\n addTime: number\n}\n\nexport type Item = Selectable<ItemTable>\n\nexport enum QueryKey {\n item = 'db:favouriteItem:',\n card = 'db:favouriteCard:',\n}\n\nexport const useUpsertItem = defineMutation(() => {\n const queryCache = useQueryCache()\n const { key: iKey, upsert } = ItemStoreDB.useUpsert()\n const key = [CommonQueryKey.common, QueryKey.item, ...iKey]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({\n item,\n belongTos,\n trx,\n }: {\n item: ItemStoreDB.StorableItem\n belongTos: Item['belongTo'][]\n trx?: Kysely<DB>\n }) =>\n withTransition(async trx => {\n const itemKey = await upsert({ item, trx })\n await trx\n .replaceInto('favouriteItem')\n .values(belongTos.map(belongTo => ({ addTime: Date.now(), itemKey, belongTo })))\n .execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, upsert: mutateAsync, key }\n})\n\nexport const useMoveItem = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({\n item,\n from,\n aims,\n trx,\n }: {\n item: ItemStoreDB.StorableItem\n from: Item['belongTo']\n aims: Item['belongTo'][]\n trx?: Kysely<DB>\n }) =>\n withTransition(async trx => {\n await trx\n .deleteFrom('favouriteItem')\n .where('itemKey', '=', item.id)\n .where('belongTo', '=', from)\n .execute()\n await trx\n .replaceInto('favouriteItem')\n .values(aims.map(to => ({ addTime: Date.now(), itemKey: item.id, belongTo: to })))\n .execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, move: mutateAsync, key }\n})\n\nexport const useCreateCard = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [QueryKey.card, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ card, trx }: { card: Card; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await trx.replaceInto('favouriteCard').values(card).execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, createCard: mutateAsync, key }\n})\n\nexport const useQueryItem = <T>(\n query: (db: SelectQueryBuilder<DB, 'favouriteItem', {}>) => Promise<T>,\n otherKeys: any[] = [],\n initialData?: () => T,\n) =>\n useColadaQuery({\n query: async () => {\n const { db } = await import('.')\n return await query(db.selectFrom('favouriteItem'))\n },\n key: () => [QueryKey.item, QueryKey.card, query].concat(otherKeys),\n staleTime: 15000,\n initialData,\n initialDataUpdatedAt: 0,\n })\n\nexport const useQueryCard = <T>(\n query: (db: SelectQueryBuilder<DB, 'favouriteCard', {}>) => Promise<T>,\n otherKeys: any[] = [],\n initialData?: () => T,\n) =>\n useColadaQuery({\n query: async () => {\n const { db } = await import('.')\n return await query(db.selectFrom('favouriteCard'))\n },\n key: () => [QueryKey.card, query].concat(otherKeys),\n staleTime: 15000,\n refetchOnMount: 'always',\n initialData,\n initialDataUpdatedAt: 0,\n })","import { Struct, type UniEpRaw } from '@delta-comic/model'\nimport {\n defineMutation,\n useMutation,\n useQueryCache,\n useQuery as useColadaQuery,\n} from '@pinia/colada'\nimport type { JSONColumnType, Kysely, Selectable, SelectQueryBuilder } from 'kysely'\n\nimport * as ItemStoreDB from './itemStore'\nimport { CommonQueryKey, withTransition } from './utils'\n\nimport type { DB } from '.'\n\nexport interface Table {\n /** @description primary key */\n timestamp: number\n itemKey: string\n ep: JSONColumnType<UniEpRaw>\n}\n\nexport type Item = Selectable<Table>\n\nexport enum QueryKey {\n item = 'db:history:',\n}\n\nexport const useUpsert = defineMutation(() => {\n const queryCache = useQueryCache()\n const { key: iKey, upsert } = ItemStoreDB.useUpsert()\n const key = [CommonQueryKey.common, QueryKey.item, ...iKey]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ item, trx }: { item: ItemStoreDB.StorableItem; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n const itemKey = await upsert({ item, trx })\n await trx\n .replaceInto('history')\n .values({ itemKey, timestamp: Date.now(), ep: Struct.toRaw(item) })\n .execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, upsert: mutateAsync, key }\n})\n\nexport const useRemove = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: ({ keys, trx }: { keys: Item['timestamp'][]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await trx.deleteFrom('history').where('history.timestamp', 'is', keys).execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, remove: mutateAsync, key }\n})\n\nexport const useQuery = <T>(\n query: (db: SelectQueryBuilder<DB, 'history', {}>) => Promise<T>,\n otherKeys: any[] = [],\n initialData?: () => T,\n) =>\n useColadaQuery({\n query: async () => {\n const { db } = await import('.')\n return await query(db.selectFrom('history'))\n },\n key: () => [CommonQueryKey.common, QueryKey.item, query].concat(otherKeys),\n staleTime: 15000,\n refetchOnMount: 'always',\n initialData,\n initialDataUpdatedAt: 0,\n })","import { SourcedValue, type SourcedKeyType, type UniItemAuthor } from '@delta-comic/model'\nimport {\n defineMutation,\n useMutation,\n useQueryCache,\n useQuery as useColadaQuery,\n} from '@pinia/colada'\nimport type { JSONColumnType, Kysely, Selectable, SelectQueryBuilder } from 'kysely'\n\nimport { CommonQueryKey, withTransition } from './utils'\n\nimport type { DB } from '.'\n\nexport const key = new SourcedValue<[plugin: string, label: string]>()\nexport type Key_ = SourcedKeyType<typeof key>\nexport type Key = Exclude<Key_, string>\n\nexport interface AuthorTable {\n author: JSONColumnType<UniItemAuthor>\n itemKey: null\n type: 'author'\n /** @description primary key */\n key: string\n plugin: string\n}\nexport type AuthorItem = Selectable<AuthorTable>\n\nexport interface EpTable {\n author: null\n itemKey: string // not f key\n type: 'ep'\n /** @description primary key */\n key: string\n plugin: string\n}\nexport type EpItem = Selectable<EpTable>\n\nexport type Table = AuthorTable | EpTable\nexport type Item = AuthorItem | EpItem\n\nexport enum QueryKey {\n item = 'db:subscribe:',\n}\n\nexport const useUpsert = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ items, trx }: { items: Item[]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await trx\n .replaceInto('subscribe')\n .values(items.map(item => ({ ...item, author: JSON.stringify(item.author) })))\n .execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, upsert: mutateAsync, key }\n})\n\nexport const useRemove = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ keys, trx }: { keys: Item['key'][]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await trx.deleteFrom('subscribe').where('subscribe.key', 'is', keys).execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, remove: mutateAsync, key }\n})\n\nexport const useQuery = <T>(\n query: (db: SelectQueryBuilder<DB, 'subscribe', {}>) => Promise<T>,\n otherKeys: any[] = [],\n initialData?: () => T,\n) =>\n useColadaQuery({\n query: async () => {\n const { db } = await import('.')\n return await query(db.selectFrom('subscribe'))\n },\n key: () => [CommonQueryKey.common, QueryKey.item, query].concat(otherKeys),\n staleTime: 15000,\n refetchOnMount: 'always',\n initialData,\n initialDataUpdatedAt: 0,\n })","import {\n defineMutation,\n useMutation,\n useQueryCache,\n useQuery as useColadaQuery,\n} from '@pinia/colada'\nimport type { Kysely, Selectable, SelectQueryBuilder } from 'kysely'\n\nimport * as ItemStoreDB from './itemStore'\nimport { CommonQueryKey, withTransition } from './utils'\n\nimport type { DB } from '.'\n\nexport interface Table {\n /** @description primary key */\n timestamp: number\n itemKey: string\n isViewed: boolean\n}\nexport type Item = Selectable<Table>\n\nexport enum QueryKey {\n item = 'db:recentView:',\n}\n\nexport const useUpsert = defineMutation(() => {\n const queryCache = useQueryCache()\n const { key: iKey, upsert } = ItemStoreDB.useUpsert()\n const key = [CommonQueryKey.common, QueryKey.item, ...iKey]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ item, trx }: { item: ItemStoreDB.StorableItem; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n const itemKey = await upsert({ item, trx })\n await trx\n .replaceInto('recentView')\n .values({ isViewed: false, itemKey, timestamp: Date.now() })\n .execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, upsert: mutateAsync, key }\n})\n\nexport const useRemove = defineMutation(() => {\n const queryCache = useQueryCache()\n const key = [CommonQueryKey.common, QueryKey.item]\n const { mutateAsync, ...mutation } = useMutation({\n mutation: async ({ items, trx }: { items: Item['timestamp'][]; trx?: Kysely<DB> }) =>\n withTransition(async trx => {\n await trx.deleteFrom('recentView').where('recentView.timestamp', 'is', items).execute()\n }, trx),\n onSettled: () => {\n void queryCache.invalidateQueries({ key })\n },\n key,\n })\n return { ...mutation, remove: mutateAsync, key }\n})\n\nexport const useQuery = <T>(\n query: (db: SelectQueryBuilder<DB, 'recentView', {}>) => Promise<T>,\n otherKeys: any[] = [],\n initialData?: () => T,\n) =>\n useColadaQuery({\n query: async () => {\n const { db } = await import('.')\n return await query(db.selectFrom('recentView'))\n },\n key: () => [CommonQueryKey.common, QueryKey.item, query].concat(otherKeys),\n staleTime: 15000,\n refetchOnMount: 'always',\n initialData,\n initialDataUpdatedAt: 0,\n })","import { logger } from '@delta-comic/logger'\nimport type { FormResult, FormSingleConfigure } from '@delta-comic/model'\nimport { fromPairs } from 'es-toolkit/compat'\nimport { ref, watch, type Ref } from 'vue'\n\nconst configLogger = logger.scoped('db:config')\n\nexport interface Table {\n /** @description config owner, usually plugin name */\n belongTo: string\n /** @description serialized form structure */\n form: string\n /** @description serialized config data */\n data: string\n}\n\nexport type ConfigRef<T> = Ref<T> & { readonly ready: Promise<void> }\n\nexport type ConfigDescription = Record<\n string,\n Required<Pick<FormSingleConfigure, 'defaultValue'>> & FormSingleConfigure\n>\n\nconst cloneValue = <T>(value: T): T => {\n if (typeof structuredClone === 'function') return structuredClone(value)\n return JSON.parse(JSON.stringify(value)) as T\n}\n\nconst createDefaultData = <T extends ConfigDescription>(config: T): FormResult<T> =>\n fromPairs(\n Object.entries(config).map(([name, desc]) => [name, desc.defaultValue]),\n ) as FormResult<T>\n\nconst parseJson = <T>(value: unknown, fallback: T): T => {\n if (!value) return cloneValue(fallback)\n if (typeof value !== 'string') return cloneValue(value as T)\n try {\n return JSON.parse(value) as T\n } catch (error) {\n configLogger.warn('failed to parse config value', error)\n return cloneValue(fallback)\n }\n}\n\nconst upsertConfig = async (belongTo: string, form: any, data: unknown) => {\n const { db } = await import('.')\n await db\n .replaceInto('config')\n .values({ belongTo, form: JSON.stringify(form), data: JSON.stringify(data) })\n .execute()\n configLogger.debug('config persisted', { belongTo })\n}\n\nexport const useConfig = <T extends ConfigDescription>(\n belongTo: string,\n form: T,\n): ConfigRef<FormResult<T>> => {\n const defaultData = createDefaultData(form)\n const data = ref(cloneValue(defaultData)) as Ref<FormResult<T>>\n let hydrated = false\n let saveTimer: ReturnType<typeof setTimeout> | undefined\n\n const persist = () => {\n if (saveTimer) clearTimeout(saveTimer)\n saveTimer = setTimeout(() => {\n void upsertConfig(belongTo, form, data.value).catch(error => {\n configLogger.warn('failed to persist config value', { belongTo }, error)\n })\n }, 100)\n }\n\n const ready = (async () => {\n try {\n const { db } = await import('.')\n const stored = await db\n .selectFrom('config')\n .select(['form', 'data'])\n .where('belongTo', '=', belongTo)\n .executeTakeFirst()\n data.value = parseJson(stored?.data, defaultData)\n configLogger.debug('config hydrated', { belongTo, found: Boolean(stored) })\n hydrated = true\n const storedForm =\n typeof stored?.form === 'string' ? stored.form : JSON.stringify(stored?.form)\n if (!stored || storedForm !== JSON.stringify(form)) persist()\n } catch (error) {\n configLogger.warn('failed to load config value', { belongTo }, error)\n data.value = cloneValue(defaultData)\n hydrated = true\n }\n })()\n\n watch(\n data,\n () => {\n if (!hydrated) return\n persist()\n },\n { deep: true, flush: 'sync' },\n )\n\n return Object.assign(data, { ready })\n}","import { logger } from '@delta-comic/logger'\nimport { SourcedValue } from '@delta-comic/model'\nimport { ref, toValue, watch, type MaybeRefOrGetter, type Ref } from 'vue'\n\nconst nativeStoreLogger = logger.scoped('db:native-store')\n\nexport interface Table {\n namespace: string\n key: string\n value: string\n}\n\nconst saveKey = new SourcedValue<[namespace: string, key: string]>()\n\nconst cloneDefault = <T extends object>(defaultValue: MaybeRefOrGetter<T>): T => {\n const value = toValue(defaultValue)\n if (typeof structuredClone === 'function') return structuredClone(value)\n return JSON.parse(JSON.stringify(value)) as T\n}\n\nconst legacyValue = (namespace: string, key: string) => {\n try {\n return globalThis.localStorage?.getItem(saveKey.toString([namespace, key])) ?? null\n } catch {\n return null\n }\n}\n\nconst parseValue = <T extends object>(value: unknown, defaultValue: MaybeRefOrGetter<T>): T => {\n if (value === null || value === '') return cloneDefault(defaultValue)\n if (typeof value !== 'string') {\n if (typeof structuredClone === 'function') return structuredClone(value as T)\n return JSON.parse(JSON.stringify(value)) as T\n }\n try {\n return JSON.parse(value) as T\n } catch (error) {\n nativeStoreLogger.warn('failed to parse native store value', error)\n return cloneDefault(defaultValue)\n }\n}\n\nconst getStoreValue = async (namespace: string, key: string) => {\n const { db } = await import('../index')\n return (\n (\n await db\n .selectFrom('nativeStore')\n .select('value')\n .where('namespace', '=', namespace)\n .where('key', '=', key)\n .executeTakeFirst()\n )?.value ?? null\n )\n}\n\nconst setStoreValue = async (namespace: string, key: string, value: string) => {\n const { db } = await import('../index')\n await db.replaceInto('nativeStore').values({ namespace, key, value }).execute()\n}\n\nexport const useNativeStore = <T extends object>(\n namespace: string,\n key: MaybeRefOrGetter<string>,\n defaultValue: MaybeRefOrGetter<T>,\n) => {\n const state = ref(cloneDefault(defaultValue)) as Ref<T>\n let version = 0\n let hydrated = false\n let saveTimer: ReturnType<typeof setTimeout> | undefined\n\n const persist = (resolvedKey: string, value: T) => {\n if (saveTimer) clearTimeout(saveTimer)\n const encoded = JSON.stringify(value)\n saveTimer = setTimeout(() => {\n void setStoreValue(namespace, resolvedKey, encoded).catch(error => {\n nativeStoreLogger.warn(\n 'failed to persist native store value',\n { key: resolvedKey, namespace },\n error,\n )\n })\n }, 100)\n }\n\n const load = async () => {\n const current = ++version\n const resolvedKey = toValue(key)\n hydrated = false\n try {\n const storeValue = await getStoreValue(namespace, resolvedKey)\n const storedValue = storeValue ?? legacyValue(namespace, resolvedKey)\n if (current !== version) return\n state.value = parseValue(storedValue, defaultValue)\n nativeStoreLogger.debug('native store value hydrated', {\n key: resolvedKey,\n namespace,\n source: storeValue === null ? 'legacy-or-default' : 'database',\n })\n hydrated = true\n if (storeValue === null) persist(resolvedKey, state.value)\n } catch (error) {\n nativeStoreLogger.warn(\n 'failed to load native store value',\n { key: resolvedKey, namespace },\n error,\n )\n if (current !== version) return\n state.value = cloneDefault(defaultValue)\n hydrated = true\n }\n }\n\n watch(\n () => toValue(key),\n () => void load(),\n { immediate: true },\n )\n watch(\n state,\n value => {\n if (!hydrated) return\n persist(toValue(key), value)\n },\n { deep: true },\n )\n\n return state\n}","import { logger } from '@delta-comic/logger'\nimport { isTauri } from '@tauri-apps/api/core'\nimport { CamelCasePlugin, type Dialect, Kysely } from 'kysely'\nimport { SerializePlugin } from 'kysely-plugin-serialize'\n\nimport type * as FavouriteDB from './favourite'\nexport * as PluginArchiveDB from './plugin'\nimport type * as HistoryDB from './history'\nexport * as FavouriteDB from './favourite'\nimport type * as ConfigDB from './config'\nimport type * as ItemStoreDB from './itemStore'\nimport type * as NativeStoreDB from './nativeStore'\nexport * as HistoryDB from './history'\nimport type * as PluginArchiveDB from './plugin'\nexport * as ItemStoreDB from './itemStore'\nimport type * as RecentDB from './recentView'\nexport * as SubscribeDB from './subscribe'\nimport type * as SubscribeDB from './subscribe'\nexport * as RecentDB from './recentView'\nexport * as ConfigDB from './config'\n\nexport interface DB {\n itemStore: ItemStoreDB.Table\n favouriteCard: FavouriteDB.CardTable\n favouriteItem: FavouriteDB.ItemTable\n history: HistoryDB.Table\n recentView: RecentDB.Table\n subscribe: SubscribeDB.Table\n plugin: PluginArchiveDB.Table\n nativeStore: NativeStoreDB.Table\n config: ConfigDB.Table\n}\n\nconst databaseLogger = logger.scoped('db:lifecycle')\n\ndatabaseLogger.info('database initialization started')\n\nexport const isTauriRuntime = isTauri\n\nconst createDialect = async (): Promise<Dialect> => {\n if (isTauriRuntime()) {\n const [{ default: Database }, { TauriSqliteDialect }] = await Promise.all([\n import('@tauri-apps/plugin-sql'),\n import('kysely-dialect-tauri'),\n ])\n const database = await Database.load('sqlite:app.db')\n databaseLogger.info('native sqlite dialect initialized')\n return new TauriSqliteDialect({ database })\n }\n\n const { createWebDialect } = await import('./web')\n databaseLogger.info('web sqlite dialect initialized')\n return createWebDialect()\n}\n\nexport const db = new Kysely<DB>({\n dialect: await createDialect(),\n plugins: [new CamelCasePlugin(), new SerializePlugin()],\n})\n\nexport * as DBUtils from './utils'\n\nexport * from './nativeStore'\nexport { useConfig } from './config'"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@delta-comic/db",
|
|
3
|
-
"version": "3.0.0-next.
|
|
3
|
+
"version": "3.0.0-next.9",
|
|
4
4
|
"description": "空阙虱楼",
|
|
5
5
|
"homepage": "https://github.com/delta-comic/delta-comic",
|
|
6
6
|
"license": "AGPL-3.0-only",
|
|
@@ -30,28 +30,28 @@
|
|
|
30
30
|
},
|
|
31
31
|
"dependencies": {
|
|
32
32
|
"@subframe7536/sqlite-wasm": "^1.3.1",
|
|
33
|
-
"@tauri-apps/api": "^2.11.
|
|
33
|
+
"@tauri-apps/api": "^2.11.1",
|
|
34
34
|
"@tauri-apps/plugin-sql": "^2.4.0",
|
|
35
|
-
"es-toolkit": "^1.
|
|
36
|
-
"kysely": "^0.
|
|
37
|
-
"kysely-dialect-tauri": "^
|
|
35
|
+
"es-toolkit": "^1.50.0",
|
|
36
|
+
"kysely": "^0.30.0-beta.1",
|
|
37
|
+
"kysely-dialect-tauri": "^2.0.1",
|
|
38
38
|
"kysely-plugin-serialize": "^0.8.2",
|
|
39
|
-
"kysely-wasqlite-worker": "^
|
|
39
|
+
"kysely-wasqlite-worker": "^2.0.1",
|
|
40
40
|
"mitt": "^3.0.1",
|
|
41
|
-
"@delta-comic/logger": "3.0.0-next.
|
|
41
|
+
"@delta-comic/logger": "3.0.0-next.9"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"
|
|
44
|
+
"typescript": "npm:typescript-native-bridge@6.0.3-bridge.8.tsgo.7.0.2",
|
|
45
45
|
"vite": "npm:@voidzero-dev/vite-plus-core@latest",
|
|
46
|
-
"vite-plus": "^0.2.
|
|
46
|
+
"vite-plus": "^0.2.7"
|
|
47
47
|
},
|
|
48
48
|
"peerDependencies": {
|
|
49
|
-
"@pinia/colada": "^1.
|
|
50
|
-
"vue": "^3.
|
|
51
|
-
"@delta-comic/model": "3.0.0-next.
|
|
49
|
+
"@pinia/colada": "^1.4.2",
|
|
50
|
+
"vue": "^3.6.0-rc.2",
|
|
51
|
+
"@delta-comic/model": "3.0.0-next.9"
|
|
52
52
|
},
|
|
53
53
|
"scripts": {
|
|
54
54
|
"build": "vp pack",
|
|
55
|
-
"typecheck": "
|
|
55
|
+
"typecheck": "tsc -p tsconfig.app.json --noEmit && tsc -p tsconfig.node.json --noEmit"
|
|
56
56
|
}
|
|
57
57
|
}
|