pretur.sync
Version:
Front-end back-end communication infrastructure
44 lines (43 loc) • 1.98 kB
TypeScript
import { SpecType, Model } from 'pretur.spec';
import { Bundle } from 'pretur.i18n';
import { Query } from './query';
import { FetchStatus } from './fetch';
import { Request } from './request';
import { SelectResult, OperateResult, MutateResult, ValidateResult } from './result';
export declare type InsertOptions<T extends SpecType> = {
data: Partial<Model<T>>;
scope: string;
model: T['name'];
};
export declare type UpdateOptions<T extends SpecType> = {
data: Partial<T['fields']>;
scope: string;
model: T['name'];
};
export declare type RemoveOptions<T extends SpecType> = {
identifiers: Partial<T['fields']>;
scope: string;
model: T['name'];
};
export interface Requester {
select<T extends SpecType>(scope: string, model: T['name'], query: Query<T>): Promise<SelectResult<T>>;
operate<TData, TResult>(name: string, data?: TData): Promise<OperateResult<TResult>>;
insert<T extends SpecType>(options: InsertOptions<T>): Promise<MutateResult<T>>;
insert<T extends SpecType>(scope: string, model: T['name'], data: Partial<Model<T>>): Promise<MutateResult<T>>;
update<T extends SpecType>(options: UpdateOptions<T>): Promise<MutateResult>;
update<T extends SpecType>(scope: string, model: T['name'], data: Partial<T['fields']>): Promise<MutateResult>;
remove<T extends SpecType>(options: RemoveOptions<T>): Promise<MutateResult>;
remove<T extends SpecType>(scope: string, model: T['name'], identifiers: Partial<T['fields']>): Promise<MutateResult>;
validate<T>(name: string, data: T): Promise<ValidateResult>;
batchMutateStart(): void;
batchMutateEnd(): void;
flush(): void;
cancel(): void;
}
export interface BuildRequesterOptions {
wait?: number;
maxWait?: number;
cancelError: (request: Request) => Bundle[];
networkError: (status: FetchStatus, error?: any) => Bundle[];
}
export declare function buildRequester(endPoint: string, options: BuildRequesterOptions): Requester;