import { CancelToken } from "@web-atoms/core/dist/core/types.js"; import DateTime from "@web-atoms/date-time/dist/DateTime.js"; import { Cloner } from "../models/Cloner.js"; import IClrEntity, { IClrEntityLike } from "../models/IClrEntity.js"; import { EntityContext } from "../models/IEntityModel.js"; import Query, { IDateRange, stepTypes } from "./Query.js"; import resolve from "./resolve.js"; import { QueryProcessor } from "./QueryProcessor.js"; import TaskManager from "../models/TaskManager.js"; import FetchBuilder from "@web-atoms/core/dist/services/FetchBuilder.js"; 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; doNotResolve?: boolean; hideActivityIndicator?: boolean; cacheSeconds?: number; cacheVersion?: string; cacheImmutable?: boolean; splitInclude?: boolean; } export interface IPagedListParams extends IListParams { start?: number; size?: number; more?: boolean; count?: boolean; } export interface IColumn { name?: string; type?: string; length?: number; dataType?: string; generated?: string; default?: any; } export interface IRelation { name?: string; fkMap?: { fk: string; relatedKey: string; }[]; relatedName?: string; isCollection?: boolean; isInverse?: boolean; relatedModel?: IModel; } export interface IModelSchema { name: string; keys: IColumn[]; properties: IColumn[]; relations: IRelation[]; queries?: { [key: string]: any; }; actions?: { [key: string]: any; }; } export interface IModel { name: string; create?(properties?: IClrEntityLike): T; patch?(original: IClrEntityLike, updates: IClrEntityLike): T; schema?: IModelSchema; } export declare class DefaultFactory { readonly factory: () => any; constructor(factory: () => any); } export declare class Model implements IModel { name: string; readonly keys: string[]; schema: IModelSchema; private defaults; constructor(name: string, keys?: string[], defaults?: any, schema?: IModelSchema); create(properties?: IClrEntityLike): T; patch(original: IClrEntityLike, updates: IClrEntityLike): T; } export type IPrimitive = string | null | number | boolean; export type ArrayItem = T extends Array ? T : never; export default abstract class BaseEntityService extends TaskManager { 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?: keyof TR, ...args: IPrimitive[]): Query; queryNavigation(entity: T, navigation: PR): Query>; queryNavigation(entity: T, navigation: PR): Query; queryEntity(m: IModel, entity: T, queryFunction?: keyof TR, ...args: IPrimitive[]): Query; as(): Query; delete(body: T): Promise; insert(body: IClrEntity): Promise; invoke(m: IModel, method: keyof TA, argEntity: T, ...args: any[]): Promise; buildRunUrl(m: IModel, method: keyof TA, argEntity: T, { args, cacheSeconds, cacheVersion }?: { args?: any[]; cacheSeconds?: number; cacheVersion?: any; }): string; run(m: IModel, method: keyof TA, argEntity: T, { args, cacheSeconds, cacheVersion }?: { args?: any[]; cacheSeconds?: number; cacheVersion?: any; }): FetchBuilder; runFiltered(m: IModel, method: keyof TA, argEntity: T, ...args: any[]): Promise; save(body: T, cloner?: (c: Cloner) => Cloner, trace?: boolean): Promise; save(body: T[], cloner?: (c: Cloner) => Cloner, trace?: boolean): Promise; update(e: T, update: IModifications): Promise; bulkUpdate(entities: T[], update: IModifications, throwWhenNotFound?: boolean): Promise; bulkDelete(entities: T[], throwWhenNotFound?: boolean): Promise; protected createBusyIndicator(hideActivityIndicator?: boolean): { [Symbol.dispose](): void; }; } //# sourceMappingURL=BaseEntityService.d.ts.map