@@ -3,43 +3,66 @@ import { SqliteAdapter, SqliteIntrospector, SqliteQueryCompiler } from 'kysely'
3
3
import { WaSqliteWorkerDriver } from './driver'
4
4
import type { Promisable } from './type'
5
5
6
- export { isIdbSupported as isSupported } from '@subframe7536/sqlite-wasm'
7
6
export interface WaSqliteWorkerDialectConfig {
8
7
/**
9
8
* db file name
10
9
*/
11
10
fileName : string
12
11
/**
13
- * the URL of `wa-sqlite` WASM
14
- * @example
15
- * ```ts
16
- * // vite
17
- * import url from 'kysely-wasqlite-worker/dist/wa-sqlite-async.wasm?url'
18
- * ```
12
+ * prefer to store data in OPFS
13
+ * @default true
19
14
*/
20
- url ?: string
15
+ preferOPFS ?: boolean
21
16
/**
22
- * worker for executing sql
17
+ * wasqlite worker
18
+ *
19
+ * built-in: {@link useDefaultWorker}
20
+ * @param supportModuleWorker if support `{ type: 'module' }` in worker options
23
21
* @example
24
- * ```ts
25
- * // vite
26
- * import Worker from 'kysely-wasqlite-worker/dist/worker?worker'
27
- * ```
22
+ * import { useDefaultWorker } from 'kysely-wasqlite-worker'
23
+ * @example
24
+ * (supportModuleWorker) => supportModuleWorker
25
+ * ? new Worker(
26
+ * new URL('kysely-wasqlite-worker/worker-module', import.meta.url),
27
+ * { type: 'module', credentials: 'same-origin' }
28
+ * )
29
+ * : new Worker(
30
+ * new URL('kysely-wasqlite-worker/worker-classic', import.meta.url),
31
+ * { type: 'classic', name: 'test' }
32
+ * )
28
33
*/
29
- worker ?: Worker
34
+ worker ?: Worker | ( ( supportModuleWorker : boolean ) => Worker )
30
35
/**
31
- * prefer to use OPFS, fallback to IndexedDB
36
+ * wasm URL
37
+ *
38
+ * built-in: {@link useDefaultWasmURL}
39
+ * @param useAsyncWasm if need to use wa-sqlite-async.wasm
40
+ * @example
41
+ * import { useDefaultWasmURL } from 'kysely-wasqlite-worker'
42
+ * @example
43
+ * (useAsyncWasm) => useAsyncWasm
44
+ * ? 'https://cdn.jsdelivr.net/gh/rhashimoto/wa-sqlite@v0.9.9/dist/wa-sqlite-async.wasm'
45
+ * : new URL('kysely-wasqlite-worker/wasm-sync', import.meta.url).href
32
46
*/
33
- preferOPFS ?: boolean
47
+ url ?: string | ( ( useAsyncWasm : boolean ) => string )
34
48
onCreateConnection ?: ( connection : DatabaseConnection ) => Promisable < void >
35
49
}
50
+ export { isIdbSupported , isOpfsSupported , isModuleWorkerSupport } from '@subframe7536/sqlite-wasm'
51
+
36
52
export class WaSqliteWorkerDialect implements Dialect {
37
53
readonly #config: WaSqliteWorkerDialectConfig
38
54
39
55
/**
40
- * dialect for [wa-sqlite](https://github.com/rhashimoto/wa-sqlite)
56
+ * dialect for [`wa-sqlite`](https://github.com/rhashimoto/wa-sqlite),
57
+ * execute sql in `Web Worker`,
58
+ * store data in [OPFS](https://developer.mozilla.org/en-US/docs/Web/API/File_System_API/Origin_private_file_system) or IndexedDB
59
+ *
60
+ * @example
61
+ * import { WaSqliteWorkerDialect } from 'kysely-wasqlite-worker'
41
62
*
42
- * execute sql in `Web Worker`, store data in IndexedDB
63
+ * const dialect = new WaSqliteWorkerDialect({
64
+ * fileName: 'test',
65
+ * })
43
66
*/
44
67
constructor ( config : WaSqliteWorkerDialectConfig ) {
45
68
this . #config = config
0 commit comments