rethinkts
Version:
A model system for RethinkDB, written in and for TypeScript.
49 lines (48 loc) • 1.96 kB
TypeScript
import * as rethinkdb from 'rethinkdbdash';
import { ModelCtor } from './model';
export interface RethinkAdapterOptions extends rethinkdb.ImportOptions {
models: ModelCtor<any>[];
}
export declare const adapterKey: symbol;
export declare type QueryPredicate<T> = (q: rethinkdb.Term<T>) => rethinkdb.Term<any>;
export interface QueryOptions<T> {
predicate?: QueryPredicate<T>;
}
export interface GetOptions<T> extends QueryOptions<T> {
index?: string;
}
export interface JoinOptions {
predicate?: (row) => void;
}
export declare class RethinkAdapter {
private ropts;
r: rethinkdb.Instance;
private init;
static fromModel(model: any): RethinkAdapter;
constructor(ropts?: RethinkAdapterOptions);
/**
* Resolves when tables and indexes are ready.
*/
wait(): Promise<void>;
/**
* Drain the connection pool, allowing your app to exit.
*/
close(): void;
all<T>(ctor: ModelCtor<T>, opts?: QueryOptions<T[]>): Promise<T[]>;
find<T>(ctor: ModelCtor<T>, filter: Partial<T>, opts?: QueryOptions<T[]>): Promise<T[]>;
findOne<T>(ctor: ModelCtor<T>, filter: Partial<T>, opts?: QueryOptions<T[]>): Promise<T>;
get<T>(ctor: ModelCtor<T>, value: any, opts?: GetOptions<T[]>): Promise<T[]>;
getOne<T>(ctor: ModelCtor<T>, value: any, opts?: GetOptions<T[]>): Promise<T>;
query<T>(ctor: ModelCtor<T>, ...predicates: QueryPredicate<T[]>[]): rethinkdb.Term<T[]>;
changes<T>(ctor: ModelCtor<T>, opts?: rethinkdb.ChangeOpts): Promise<rethinkdb.ChangesFeed<T>>;
save<M>(model: M): Promise<M>;
join<M>(model: M, relationshipKey: string, opts?: JoinOptions): Promise<M>;
delete<M>(model: M): Promise<void>;
private getModelQuery<T>(ctor);
/**
* Create the table and indexes if they don't already exist.
* Doesn't create the database.
*/
private ensureTable(ctor);
private getRowFromPath(path);
}