UNPKG

d1-sql-tag

Version:

A template literal for working with Cloudflare D1 database

42 lines (38 loc) 2.2 kB
import { D1Database, D1DatabaseSession, D1Result, D1Response } from '@cloudflare/workers-types/experimental/index.js'; type Primitive = string | number | boolean | null; type SqlTag = ((strings: TemplateStringsArray, ...values: (Primitive | SqlQueryFragment)[]) => SqlQueryFragment) & { batch<T extends readonly PreparedStatementBase<object>[]>(statements: T): Promise<{ -readonly [P in keyof T]: SqlResult<RowType<T[P]>>; }>; }; interface SqlQueryFragment { build<T extends object = Record<string, Primitive>>(): RawPreparedStatement<T>; all<T extends object = Record<string, Primitive>>(): Promise<D1Result<T>>; run(): Promise<D1Response>; templateStrings: TemplateStringsArray; templateValues: (Primitive | SqlQueryFragment)[]; } interface PreparedStatementBase<T extends object> { query: string; values: Primitive[]; all(): Promise<D1Result<T>>; run(): Promise<D1Response>; [rowTypeSymbol]: T; } interface MappedPreparedStatement<TRaw extends object, TMapped extends object> extends PreparedStatementBase<TMapped> { mapper: (row: TRaw) => TMapped; } interface RawPreparedStatement<T extends object> extends PreparedStatementBase<T> { map<TMapped extends object>(mapper: (row: T) => TMapped): MappedPreparedStatement<T, TMapped>; } type RowType<T extends PreparedStatementBase<any> | ((...args: any) => PreparedStatementBase<any>)> = T extends PreparedStatementBase<any> ? T[typeof rowTypeSymbol] : T extends (...args: any) => PreparedStatementBase<any> ? ReturnType<T>[typeof rowTypeSymbol] : never; interface SqlResult<T extends object = Record<string, Primitive>> extends D1Result<T> { } interface SqlTagOptions { beforeQuery?: (id: number, queries: string[]) => void; afterQuery?: (id: number, queries: string[], results: SqlResult[], duration: number) => void; } declare const rowTypeSymbol: unique symbol; declare function createD1SqlTag(db: D1Database | D1DatabaseSession, options?: SqlTagOptions): SqlTag; declare function logQueryResults(queries: string[], results: SqlResult[], duration?: number): void; export { type Primitive, type RowType, type SqlQueryFragment, type SqlTag, createD1SqlTag, logQueryResults };