@dossierhq/database-adapter
Version:
A library for adapting Dossier to a database, such as SQLite or PostgreSQL.
38 lines (37 loc) • 1.69 kB
TypeScript
export declare const DEFAULT: unique symbol;
declare const ValueReferenceSymbol: unique symbol;
declare const RawSqlSymbol: unique symbol;
interface ValueReference {
marker: typeof ValueReferenceSymbol;
index: number;
}
interface RawSql {
marker: typeof RawSqlSymbol;
sql: string;
}
type InputValue<TValue> = TValue | typeof DEFAULT | ValueReference | RawSql;
type SqlTemplateTag<TValue> = (strings: TemplateStringsArray, ...args: InputValue<TValue>[]) => void;
interface Query<TValue> {
text: string;
values: TValue[];
}
interface SqlQueryBuilder<TValue> {
sql: SqlTemplateTag<TValue>;
query: Query<TValue>;
addValue: (value: TValue) => ValueReference;
removeTrailingWhere: () => void;
}
type SqlQueryBuilderCallback<TValue> = (builder: Omit<SqlQueryBuilder<TValue>, 'query'>) => void;
export type PostgresQueryBuilder = SqlQueryBuilder<unknown>;
export type PostgresSqlTemplateTag = SqlTemplateTag<unknown>;
export declare function createPostgresSqlQuery(): PostgresQueryBuilder;
export declare function buildPostgresSqlQuery(callback: SqlQueryBuilderCallback<unknown>): Query<unknown>;
type SqliteColumnValue = number | string | Uint8Array | null;
export type SqliteSqlTemplateTag = SqlTemplateTag<SqliteColumnValue>;
export interface SqliteQueryBuilder extends SqlQueryBuilder<SqliteColumnValue> {
addValueList: (values: readonly SqliteColumnValue[]) => RawSql;
}
type SqliteQueryBuilderCallback = (builder: Omit<SqliteQueryBuilder, 'query'>) => void;
export declare function createSqliteSqlQuery(): SqliteQueryBuilder;
export declare function buildSqliteSqlQuery(callback: SqliteQueryBuilderCallback): Query<SqliteColumnValue>;
export {};