UNPKG

@pgxsinkit/pgwasm

Version:
86 lines • 3.37 kB
import type { Pgwasm, Results, Row } from "../interface"; export interface LiveQueryOptions<T = Row> { query: string; params?: readonly unknown[] | null; offset?: number; limit?: number; callback?: (results: Results<T>) => void; signal?: AbortSignal; } export interface LiveChangesOptions<T = Row> { query: string; params?: readonly unknown[] | null; key: string; callback?: (changes: Change<T>[]) => void; signal?: AbortSignal; } export interface LiveIncrementalQueryOptions<T = Row> { query: string; params?: readonly unknown[] | null; key: string; callback?: (results: Results<T>) => void; signal?: AbortSignal; } /** The `live` namespace the extension attaches. */ export interface LiveNamespace { /** * A query whose results are re-run and delivered whenever a table it reads changes. Resolves to the * initial results plus `subscribe` / `unsubscribe` / `refresh`. */ query<T = Row>(query: string, params?: readonly unknown[] | null, callback?: (results: Results<T>) => void): Promise<LiveQuery<T>>; query<T = Row>(options: LiveQueryOptions<T>): Promise<LiveQuery<T>>; /** The changes to a query's results, keyed by a column (`key`) that identifies a row. */ changes<T = Row>(query: string, params: readonly unknown[] | undefined | null, key: string, callback?: (changes: Change<T>[]) => void): Promise<LiveChanges<T>>; changes<T = Row>(options: LiveChangesOptions<T>): Promise<LiveChanges<T>>; /** Like {@link query}, but maintained from `changes`, keyed by `key`: cheaper for large results. */ incrementalQuery<T = Row>(query: string, params: readonly unknown[] | undefined | null, key: string, callback?: (results: Results<T>) => void): Promise<LiveQuery<T>>; incrementalQuery<T = Row>(options: LiveIncrementalQueryOptions<T>): Promise<LiveQuery<T>>; } export interface LiveQueryResults<T> extends Results<T> { totalCount?: number; offset?: number; limit?: number; } export interface LiveQuery<T> { initialResults: LiveQueryResults<T>; subscribe: (callback: (results: LiveQueryResults<T>) => void) => void; unsubscribe: (callback?: (results: LiveQueryResults<T>) => void) => Promise<void>; refresh: (options?: { offset?: number; limit?: number; }) => Promise<void>; } export interface LiveChanges<T = Row> { fields: { name: string; dataTypeID: number; }[]; initialChanges: Change<T>[]; subscribe: (callback: (changes: Change<T>[]) => void) => void; unsubscribe: (callback?: (changes: Change<T>[]) => void) => Promise<void>; refresh: () => Promise<void>; } export type ChangeInsert<T> = { __changed_columns__: string[]; __op__: "INSERT"; __after__: number; } & T; export type ChangeDelete<T> = { __changed_columns__: string[]; __op__: "DELETE"; __after__: undefined; } & T; export type ChangeUpdate<T> = { __changed_columns__: string[]; __op__: "UPDATE"; __after__: number; } & T; export type ChangeReset<T> = { __op__: "RESET"; } & T; export type Change<T> = ChangeInsert<T> | ChangeDelete<T> | ChangeUpdate<T> | ChangeReset<T>; /** A database with the `live` extension attached under the key `live`. */ export type PgwasmWithLive = Pgwasm & { readonly live: LiveNamespace; }; //# sourceMappingURL=interface.d.ts.map