UNPKG

d1-sql-tag

Version:

A template literal for working with Cloudflare D1 database

59 lines (58 loc) 2.99 kB
import { D1Database, D1DatabaseSession, D1Response, D1Result } from "@cloudflare/workers-types/experimental/index.js"; //#region src/sql-tag.d.ts type Primitive = string | number | boolean | null; interface JoinFragment { templateStrings: TemplateStringsArray; templateValues: Primitive[]; } type SqlTag = ((strings: TemplateStringsArray, ...values: (Primitive | SqlQueryFragment | JoinFragment)[]) => SqlQueryFragment) & { batch<T extends readonly PreparedStatementBase<object>[]>(statements: T): Promise<{ -readonly [P in keyof T]: SqlResult<RowType<T[P]>> }>; join(values: Primitive[]): JoinFragment; }; 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: TemplateValue[]; } type TemplateValue = Primitive | SqlQueryFragment | JoinFragment; 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; } interface MockSqlTagHandler { all<T extends object>(query: string, values: Primitive[]): Promise<D1Result<T>>; run(query: string, values: Primitive[]): Promise<D1Response>; batch(statements: Array<{ query: string; values: Primitive[]; }>): Promise<D1Result<object>[]>; } type MockSqlTag<T extends MockSqlTagHandler> = SqlTag & { handler: T; }; declare const rowTypeSymbol: unique symbol; declare function createD1SqlTag(db: D1Database | D1DatabaseSession, options?: SqlTagOptions): SqlTag; declare function createMockSqlTag<T extends MockSqlTagHandler>(handler: T): MockSqlTag<T>; //#endregion //#region src/logger.d.ts declare function logQueryResults(queries: string[], results: SqlResult[], duration?: number): void; //#endregion export { type MockSqlTag, type MockSqlTagHandler, type Primitive, type RowType, type SqlQueryFragment, type SqlTag, createD1SqlTag, createMockSqlTag, logQueryResults }; //# sourceMappingURL=index.d.ts.map