pretur.sync
Version:
Front-end back-end communication infrastructure
30 lines (29 loc) • 1.23 kB
TypeScript
import { EmptySpec } from 'pretur.spec';
import { Bundle } from 'pretur.i18n';
import { Query } from './query';
import { Request, OperateRequest, ValidateRequest, MutateRequest } from './request';
import { Response, OperateResponse, ValidateResponse } from './response';
export interface TransactionLike {
commit(): Promise<void>;
rollback(): Promise<void>;
}
export interface ResolveResult {
data: any[];
count: number;
}
export interface SyncResult {
errors: Bundle[];
generatedIds?: any;
}
export interface PoolLike<C> {
resolve(transaction: any, scope: string, model: string, query: Query<EmptySpec>, context?: C): Promise<ResolveResult>;
sync(transaction: any, item: MutateRequest, context?: C): Promise<SyncResult>;
}
export interface ResponderOptions<C> {
errorToBundle: (error: Error) => Bundle;
pool?: PoolLike<C>;
operator?: (request: OperateRequest, context?: C) => PromiseLike<OperateResponse>;
validator?: (request: ValidateRequest, context?: C) => PromiseLike<ValidateResponse>;
transact?: () => PromiseLike<TransactionLike>;
}
export declare function buildResponder<C>(options: ResponderOptions<C>): (requests: Request[], context?: any) => Promise<Response[]>;