// deno-lint-ignore-file no-explicit-any import type { AsyncResult, Keyof, Optional } from "@fabric/core"; import type { StoreQueryError } from "../../errors/query-error.ts"; import type { FilterOptions } from "./filter-options.ts"; import type { OrderByOptions } from "./order-by-options.ts"; export interface StoreQuery { where(where: FilterOptions): StoreSortableQuery; orderBy(opts: OrderByOptions): StoreLimitableQuery; limit(limit: number, offset?: number): SelectableQuery; select(): AsyncResult; select>( keys: K[], ): AsyncResult[], StoreQueryError>; selectOne(): AsyncResult, StoreQueryError>; selectOne>( keys: K[], ): AsyncResult>, StoreQueryError>; } export interface StoreSortableQuery { orderBy(opts: OrderByOptions): StoreLimitableQuery; limit(limit: number, offset?: number): SelectableQuery; select(): AsyncResult; select>( keys: K[], ): AsyncResult[], StoreQueryError>; selectOne(): AsyncResult, StoreQueryError>; selectOne>( keys: K[], ): AsyncResult>, StoreQueryError>; } export interface StoreLimitableQuery { limit(limit: number, offset?: number): SelectableQuery; select(): AsyncResult; select>( keys: K[], ): AsyncResult[], StoreQueryError>; selectOne(): AsyncResult, StoreQueryError>; selectOne>( keys: K[], ): AsyncResult>, StoreQueryError>; } export interface SelectableQuery { select(): AsyncResult; select>( keys: K[], ): AsyncResult[], StoreQueryError>; selectOne(): AsyncResult, StoreQueryError>; selectOne>( keys: K[], ): AsyncResult>, StoreQueryError>; } export interface QueryDefinition { from: K; where?: FilterOptions; orderBy?: OrderByOptions; limit?: number; offset?: number; keys?: string[]; }