UNPKG

pims

Version:

An ORM for document-oriented database systems, written in and for TypeScript.

43 lines (36 loc) 1.22 kB
import { ModelCtor } from '../model'; export const adapterKey = Symbol('Model Adapter'); export type QueryPredicate = (...args: any[]) => any; export interface QueryOptions { predicate?: QueryPredicate; } export interface GetOptions extends QueryOptions { index?: string; } export interface JoinOptions { predicate?: (row: any) => void; } export interface Adapter { ensure(): Promise<void>; save<M>(model: M, replace?: boolean): Promise<M>; delete<M>(model: M): Promise<void>; all<T>(ctor: ModelCtor<T>, opts?: QueryOptions): Promise<T[]>; find<T>( ctor: ModelCtor<T>, filter: Partial<T>, opts?: QueryOptions, ): Promise<T[]>; findOne<T>( ctor: ModelCtor<T>, filter: Partial<T>, opts?: QueryOptions, ): Promise<T>; get<T>(ctor: ModelCtor<T>, value: any, opts?: GetOptions): Promise<T[]>; getOne<T>(ctor: ModelCtor<T>, value: any, opts?: GetOptions): Promise<T>; join<M>(model: M, relationshipKey: string, opts?: JoinOptions): Promise<M>; } export namespace Adapter { export function fromModel<T extends Adapter>(model: any): T { return model[adapterKey] || model.constructor[adapterKey]; } }