import type { InferInsertData, InferTableData, InferUpdateData, PodTable } from './schema'; import { type QueryCondition } from './query-conditions'; import type { SolidDatabase } from '../driver'; type RepositoryTable = PodTable; export type AnyPodTable = RepositoryTable; export type AnyPodResource = RepositoryTable; export interface PodExecutableQuery { where(condition: unknown): PodExecutableQuery; whereByIri?(iri: string | string[]): PodExecutableQuery; orderBy(...args: unknown[]): PodExecutableQuery; execute(): Promise; } export interface PodInsertQuery { values(values: unknown): { execute(): Promise; }; } export interface PodUpdateQuery { set(values: unknown): PodMutationQuery; } export interface PodMutationQuery { where(condition: unknown): PodMutationQuery; whereByIri?(iri: string): PodMutationQuery; execute(): Promise; } export declare function initSolidTables(db: Pick, tables: AnyPodTable[]): Promise; export declare const initSolidResources: typeof initSolidTables; export interface RepositoryCacheOptions { staleTime?: number; gcTime?: number; } export type RepositoryScope = 'list' | 'detail' | string; export interface RepositoryInvalidations { create?: RepositoryScope[]; update?: RepositoryScope[]; remove?: RepositoryScope[]; } export interface RepositoryFilterContext { table: TTable; filters?: Filters; } export interface PodRepositoryDescriptor = InferTableData, Insert = InferInsertData, Update = InferUpdateData, Filters extends Record = Record> { namespace: string; resourcePath: string; searchableFields?: (keyof Row & string)[]; defaultSort?: { field: keyof Row & string; direction: 'asc' | 'desc'; }; cache?: RepositoryCacheOptions; invalidations: RepositoryInvalidations; list: (db: SolidDatabase, filters?: Filters) => Promise; detail: (db: SolidDatabase, id: string) => Promise; create?: (db: SolidDatabase, input: Insert) => Promise; update?: (db: SolidDatabase, id: string, input: Update) => Promise; remove?: (db: SolidDatabase, id: string) => Promise<{ id: string; }>; } export interface PodRepositoryOptions = InferTableData, Filters extends Record = Record> { namespace: string; table: TTable; searchableFields?: (keyof Row & string)[]; searchAccessor?: (filters?: Filters) => string | undefined; defaultSort?: { field: keyof Row & string; direction: 'asc' | 'desc'; }; cache?: RepositoryCacheOptions; invalidations?: Partial; transform?: (row: Row) => Row; filter?: (context: RepositoryFilterContext) => QueryCondition | undefined; disableMutations?: Partial>; } export declare function createRepositoryDescriptor = InferTableData, Insert = InferInsertData, Update = InferUpdateData, Filters extends Record = Record>(options: PodRepositoryOptions): PodRepositoryDescriptor; export declare const definePodRepository: typeof createRepositoryDescriptor; export {}; //# sourceMappingURL=repository.d.ts.map