1.1.0 • Published 8 months ago
kysely-wasqlite-worker v1.1.0
kysely-wasqlite-worker
kysely dialect for @subframe7536/sqlite-wasm (use custom wa-sqlite under the hood), execute sql in Web Worker, store data in OPFS or IndexedDB
No need to set response header like official wasm
Install
pnpm add kysely kysely-wasqlite-worker @subframe7536/sqlite-wasmUsage
import { WaSqliteWorkerDialect } from 'kysely-wasqlite-worker'
const dialect = new WaSqliteWorkerDialect({
  fileName: 'test',
})Custom Worker
in worker.ts
import { customFunctionCore, exportDatabase } from '@subframe7536/sqlite-wasm'
import { createOnMessageCallback, defaultCreateDatabaseFn } from 'kysely-wasqlite-worker'
createOnMessageCallback(
  async (...args) => {
    const sqliteDB = await defaultCreateDatabaseFn(...args)
    customFunctionCore(sqliteDB, 'customFunction', (a, b) => a + b)
    return sqliteDB
  },
  ([type, exec, data1, data2, data3]) => {
    if (type === 'export') {
      return exportDatabase(exec.db)
    }
  }
)Config
export interface WaSqliteWorkerDialectConfig {
  /**
   * db file name
   */
  fileName: string
  /**
   * prefer to store data in OPFS
   * @default true
   */
  preferOPFS?: boolean
  /**
   * wasqlite worker
   *
   * built-in: {@link useDefaultWorker}
   * @param supportModuleWorker if support { type: 'module' } in worker options
   * @example
   * import { useDefaultWorker } from 'kysely-wasqlite-worker'
   * @example
   * (support) => support
   *   ? new Worker(
   *       new URL('kysely-wasqlite-worker/worker-module', import.meta.url),
   *       { type: 'module', credentials: 'same-origin' }
   *     )
   *   : new Worker(
   *       new URL('kysely-wasqlite-worker/worker-classic', import.meta.url),
   *       { type: 'classic', name: 'test' }
   *     )
   */
  worker?: Worker | ((supportModuleWorker: boolean) => Worker)
  /**
   * wasm URL
   *
   * built-in: {@link useDefaultWasmURL}
   * @param useAsyncWasm if need to use wa-sqlite-async.wasm
   * @example
   * import { useDefaultWasmURL } from 'kysely-wasqlite-worker'
   * @example
   * (useAsync) => useAsync
   *   ? 'https://cdn.jsdelivr.net/gh/rhashimoto/wa-sqlite@v0.9.9/dist/wa-sqlite-async.wasm'
   *   : new URL('kysely-wasqlite-worker/wasm-sync', import.meta.url).href
   */
  url?: string | ((useAsyncWasm: boolean) => string)
  /**
   * Handle custom messages for event emitter
   * @param mitt event emitter
   */
  message?: (mitt: IGenericEventEmitter) => Promisable<void>
  onCreateConnection?: (connection: DatabaseConnection) => Promisable<void>
}see more in playground
if throw error when using Vite to build, add worker config
export default defineConfig({
  // ...
  worker: {
    format: 'es',
  },
})Limitation
- minimal IndexedDB backend browser version
- minimal OPFS backend browser version
- only worked in secure environment, like:- localhost
- https
 
1.1.0
8 months ago
1.0.1
9 months ago
1.0.0
9 months ago
0.7.0
1 year ago
0.6.3
1 year ago
0.6.2
1 year ago
0.6.1
1 year ago
0.6.0
2 years ago
0.5.7
2 years ago
0.5.6
2 years ago
0.5.4
2 years ago
0.5.3
2 years ago
0.5.2
2 years ago
0.5.1
2 years ago
0.5.0
2 years ago
0.4.5
2 years ago
0.4.4
2 years ago
0.4.7
2 years ago
0.4.6
2 years ago
0.4.0
2 years ago
0.4.3
2 years ago
0.4.2
2 years ago
0.3.8
2 years ago
0.3.7
2 years ago
0.3.6
2 years ago
0.3.5
2 years ago
0.3.4
2 years ago
0.3.3
2 years ago
0.3.2
2 years ago
0.3.1
2 years ago
0.3.0
2 years ago