import { CancelToken } from "@web-atoms/core/dist/core/types"; import DateTime from "@web-atoms/date-time/dist/DateTime"; import { Cloner } from "../models/Cloner"; import IClrEntity, { IClrEntityLike } from "../models/IClrEntity"; import { EntityContext } from "../models/IEntityModel"; import HttpSession, { IHttpRequest } from "./HttpSession"; import Query, { IDateRange, stepTypes } from "./Query"; import resolve from "./resolve"; import { QueryProcessor } from "./QueryProcessor"; export interface IGeometry { latitude: number; longitude: number; wktString?: string; difference?(g: IGeometry): IGeometry; intersection?(g: IGeometry): IGeometry; union?(g: IGeometry): IGeometry; symmetricDifference?(g: IGeometry): IGeometry; distance?(g: IGeometry): number; isWithinDistance?(g: IGeometry, distance: number): boolean; touches?(g: IGeometry): boolean; intersects?(g: IGeometry): boolean; crosses?(g: IGeometry): boolean; within?(g: IGeometry): boolean; contains?(g: IGeometry): boolean; overlaps?(g: IGeometry): boolean; covers?(g: IGeometry): boolean; coveredBy?(g: IGeometry): boolean; } export interface IKeyCollection extends ICollection { key?: TKey; } export interface ICollection extends Array { sum?(filter?: (item: T) => number): number; min?(filter?: (item: T) => number): number; max?(filter?: (item: T) => number): number; average?(filter?: (item: T) => number): number; groupBy?(this: ICollection, selector: (item: T) => TK): ICollection>; where?(filter: (item: T) => boolean): ICollection; any?(filter?: (item: T) => boolean): boolean; select?(select: (item: T) => TR): ICollection; selectMany?(select: (item: T) => TR[]): ICollection; firstOrDefault?(filter?: (item: T) => boolean): T; count?(filter?: (item: T) => boolean): number; toArray?(): ICollection; toList?(): ICollection; take?(n: number): ICollection; orderBy?(item: (item: T) => any): ICollection; thenBy?(item: (item: T) => any): ICollection; orderByDescending?(item: (item: T) => any): ICollection; thenByDescending?(item: (item: T) => any): ICollection; } export interface IMethod { select?: [string, ...any[]]; where?: [string, ...any[]]; orderBy?: [string, ...any[]]; orderByDescending?: [string, ...any[]]; thenBy?: [string, ...any[]]; thenByDescending?: [string, ...any[]]; } export interface IMethodsFilter { methods: IMethod[]; start: number; size: number; } export interface IModifications { [key: string]: any; } export interface IBulkUpdateModel { keys: IClrEntity[]; update: IModifications; throwWhenNotFound?: boolean; } export interface IBulkDeleteModel { keys: IClrEntity[]; throwWhenNotFound?: boolean; } export type IQueryMethod = [ "select", string, ...any[] ] | ["where", string, ...any[]] | ["joinDateRange", string, ...any[]] | ["orderBy", string, ...any[]] | ["orderByDescending", string, ...any[]] | ["thenBy", string, ...any[]] | ["thenByDescending", string, ...any[]] | ["include", string] | ["thenInclude", string] | ["dateRange", string, ...any[]]; export interface IListParams { cancelToken?: CancelToken; /** * Query will resolve references by replacing $id attributed objects */ doNotResolve?: boolean; /** * Do not display activity indicator */ hideActivityIndicator?: boolean; /** * Response will include cache-control with given seconds as max age */ cacheSeconds?: number; /** * Arbitrary cache version to invalidate previous version */ cacheVersion?: string; /** * True if cacheSeconds is greater than zero, set false to turn it off */ cacheImmutable?: boolean; /** * Split server side includes */ splitInclude?: boolean; } export interface IPagedListParams extends IListParams { start?: number; size?: number; count?: boolean; } export interface IModel { name: string; create?(properties?: IClrEntityLike): T; patch?(original: IClrEntityLike, updates: IClrEntityLike): T; } export declare class DefaultFactory { readonly factory: () => any; constructor(factory: () => any); } export declare class Model implements IModel { name: string; readonly keys: string[]; private defaults; constructor(name: string, keys?: string[], defaults?: any); create(properties?: IClrEntityLike): T; patch(original: IClrEntityLike, updates: IClrEntityLike): T; } export default abstract class BaseEntityService extends HttpSession { url: string; abstract queryProcessor: QueryProcessor; protected resultConverter: typeof resolve; private entityModel; cloner(item: T): Cloner; model(): Promise; dateRange(start: DateTime, end: DateTime, step: stepTypes): Query; query(m: IModel, queryFunction?: string, ...args: any[]): Query; delete(body: T): Promise; insert(body: IClrEntity): Promise; save(body: T): Promise; save(body: T[]): Promise; update(e: T, update: IModifications): Promise; bulkUpdate(entities: T[], update: IModifications, throwWhenNotFound?: boolean): Promise; bulkDelete(entities: T[], throwWhenNotFound?: boolean): Promise; protected fetchJson(options: IHttpRequest): Promise; protected createBusyIndicator(options: IHttpRequest): { dispose(): void; }; } //# sourceMappingURL=BaseEntityService.d.ts.map