import { BaseSqliteDialect, GenericSqliteDialect, IBaseSqliteDialectConfig, Promisable } from "kysely-generic-sqlite"; //#region src/dialects/types.d.ts /** Bound parameter values for a SQL statement. */ type SqliteParameters = readonly any[] | any[]; /** * Minimal interface for a * {@link https://vlcn.io/js/wasm | cr-sqlite} database handle. */ interface CrSqliteDatabase { api: { changes: (db: number) => number | bigint; }; db: number; close: () => Promisable; execA: (sql: string, bind?: SqliteParameters) => Promise; execO: (sql: string, bind?: SqliteParameters) => Promise; } /** A prepared statement returned by `node-sqlite3-wasm`. */ interface NodeWasmStatement { iterate: (parameters?: any) => IterableIterator; } /** * Minimal interface for a * {@link https://github.com/tndrle/node-sqlite3-wasm | node-sqlite3-wasm} database handle. */ interface NodeWasmDatabase { all: (sql: string, parameters?: any, options?: any) => Promisable; close: () => Promisable; prepare: (sql: string) => NodeWasmStatement; run: (sql: string, parameters?: any) => { changes: number | bigint; lastInsertRowid: number | bigint; }; } /** A prepared statement returned by the official SQLite WASM build. */ interface OfficialPreparedStatement = Record> { columnCount: number; bind: (parameters: any) => unknown; finalize: () => void; get: (row: Row) => Row; step: () => boolean; } /** * Minimal interface for the * {@link https://sqlite.org/wasm/doc/trunk/index.md | official SQLite WASM} database handle. */ interface OfficialWasmDatabase { changes: () => number | bigint; close: () => Promisable; prepare: (sql: string) => OfficialPreparedStatement; selectValue: (sql: string) => unknown; } /** A prepared statement returned by sql.js. */ interface SqlJsStatement> { bind: (parameters?: any) => unknown; free: () => void; getAsObject: () => Row; getColumnNames: () => readonly string[]; step: () => boolean; } /** * Minimal interface for a * {@link https://github.com/sql-js/sql.js | sql.js} database handle. */ interface SqlJsDatabase { close: () => void; exec: (sql: string) => Array<{ values: unknown[][]; }>; getRowsModified: () => number | bigint; prepare: (sql: string) => SqlJsStatement; } //#endregion //#region src/dialects/crsqlite.d.ts /** * Configuration for {@link CrSqliteDialect}. */ interface CrSqliteDialectConfig extends IBaseSqliteDialectConfig { database: CrSqliteDatabase | (() => Promisable); } /** * SQLite dialect for {@link https://vlcn.io/js/wasm | cr-sqlite} (vlcn.io/wasm). */ declare class CrSqliteDialect extends GenericSqliteDialect { /** * @param config - {@link CrSqliteDialectConfig} */ constructor(config: CrSqliteDialectConfig); } //#endregion //#region src/dialects/empty.d.ts /** * A no-op dialect that produces SQL strings without executing them. * * Useful for debugging, testing, or generating SQL offline. */ declare class EmptyDialect extends BaseSqliteDialect { constructor(); } //#endregion //#region src/dialects/node-wasm.d.ts /** * Configuration for {@link NodeWasmDialect}. */ interface NodeWasmDialectConfig extends IBaseSqliteDialectConfig { database: NodeWasmDatabase | (() => Promisable); } /** * SQLite dialect for * {@link https://github.com/tndrle/node-sqlite3-wasm | node-sqlite3-wasm}. */ declare class NodeWasmDialect extends GenericSqliteDialect { /** * @param config - {@link NodeWasmDialectConfig} */ constructor(config: NodeWasmDialectConfig); } //#endregion //#region src/dialects/official-wasm.d.ts /** * Configuration for {@link OfficialWasmDialect}. */ interface OfficialWasmDialectConfig extends IBaseSqliteDialectConfig { database: OfficialWasmDatabase | (() => Promisable); } /** * SQLite dialect for the * {@link https://sqlite.org/wasm/doc/trunk/index.md | official SQLite WASM build}. * * Supports `BigInt` and is recommended for use with OPFS. * * @see {@link https://sqlite.org/forum/forumpost/59097f57cbe647a2d1950fab93e7ab82dd24c1e384d38b90ec1e2f03a2a4e580 | OPFS discussion} * @see {@link https://sqlite.org/forum/forumpost/8f50dc99149a6cedade784595238f45aa912144fae81821d5f9db31965f754dd | OPFS discussion 2} * * You can also use * {@link https://github.com/overtone-app/sqlite-wasm-esm | sqlite-wasm-esm} * as a drop-in ESM wrapper. * * @example * ```ts * import sqlite3InitModule from './jswasm/sqlite3-bundler-friendly' * * const db = new Kysely({ * dialect: new OfficialSqliteWasmDialect({ * database: async () => { * const sqlite3 = (await sqlite3InitModule()).oo1 * if (!sqlite3) { * return Promise.reject('fail to load sqlite') * } * const path = '/test.db' * return sqlite3.OpfsDb * ? new sqlite3.OpfsDb(path) * : new sqlite3.DB(path) * }, * }), * }) * ``` * * When using Origin-Private FileSystem, your server must respond with COOP and * COEP headers: * * ```ts * server.middlewares.use((_req, res, next) => { * res.setHeader('Cross-Origin-Embedder-Policy', 'require-corp') * res.setHeader('Cross-Origin-Opener-Policy', 'same-origin') * next() * }) * ``` * * @see https://developer.mozilla.org/en-US/docs/Web/API/File_System_Access_API#origin_private_file_system * @see https://sqlite.org/wasm/doc/trunk/persistence.md#coop-coep */ declare class OfficialWasmDialect extends GenericSqliteDialect { /** * @param config - {@link OfficialWasmDialectConfig} */ constructor(config: OfficialWasmDialectConfig); } //#endregion //#region src/dialects/sqljs.d.ts /** * Configuration for {@link SqlJsDialect}. */ interface SqlJsDialectConfig extends IBaseSqliteDialectConfig { database: SqlJsDatabase | (() => Promisable); } /** * SQLite dialect for {@link https://github.com/sql-js/sql.js | sql.js}. * * Does **not** support `BigInt`. */ declare class SqlJsDialect extends GenericSqliteDialect { /** * @param config - {@link SqlJsDialectConfig} */ constructor(config: SqlJsDialectConfig); } //#endregion export { CrSqliteDialect, CrSqliteDialectConfig, EmptyDialect, NodeWasmDialect, NodeWasmDialectConfig, OfficialWasmDialect, OfficialWasmDialectConfig, SqlJsDialect, SqlJsDialectConfig };