import { RequiredField, NonPrimitiveKeys, TypeOrArray } from "../interfaces/toolsTS"; import { WaterlinePromise, CRUDBuilder, UpdateBuilder, LifecycleCallbacks } from "waterline"; export type Callback = (err: Error | null, result: T) => void; export type DataStore = { manager: any; config: any; driver: any; schema: any; }; type or = { or?: WhereCriteriaQuery[]; }; type notEqual = { '!=': T; }; type not = { "!=": T; }; type _not = { "not": T; }; type lessThan = { "<": T; }; type lessThanOrEqual = { "<=": T; }; type greaterThan = { ">": T; }; type greaterThanOrEqual = { ">=": T; }; type nin = { nin: T[]; }; type _in = { in: T[]; }; type contains = { contains: string; }; type startsWith = { startsWith: string; }; type endsWith = { endsWith: string; }; type SortDirection = 'asc' | 'desc'; type SortCriteria = { [P in keyof T]?: SortDirection; }; export type CriteriaQuery = { where?: WhereCriteriaQuery | or; limit?: number; skip?: number; sort?: string | SortCriteria | SortCriteria[]; } | WhereCriteriaQuery; export type WhereCriteriaQuery = { [P in keyof T]?: T[P] | T[P][] | not | not | _not | _not | lessThan | lessThan | lessThanOrEqual | lessThanOrEqual | greaterThanOrEqual | greaterThanOrEqual | greaterThan | greaterThan | notEqual | notEqual[] | _in | nin | contains | startsWith | endsWith | not | or; }; type collectionMember = { members(childIds: string[]): Promise; }; type UpdateSetBuilder = { set: (changes: Partial) => WaterlinePromise; }; type QueryBuilder = WaterlinePromise & { where(condition: any): QueryBuilder; limit(lim: number): QueryBuilder; skip(num: number): QueryBuilder; sort(criteria: string | { [attribute: string]: string; } | { [attribute: string]: string; }[]): QueryBuilder; paginate(pagination?: { page: number; limit: number; }): QueryBuilder; populate(association: NonPrimitiveKeys>): QueryBuilder; populate(association: NonPrimitiveKeys>, filter: any): QueryBuilder; groupBy(attrOrExpr: string): QueryBuilder; max(attribute: string): QueryBuilder; min(attribute: string): QueryBuilder; sum(attribute: string): QueryBuilder; average(attribute: string): QueryBuilder; meta(options: any): QueryBuilder; }; /** * Waterline model * @template M Model object * @template C Fields required for create new instance */ /** * Waterline model * @template M Model object * @template C Fields required for create new instance */ export interface ORMModel { create?(params: RequiredField, C>): CRUDBuilder; create?(params: RequiredField, C>[]): CRUDBuilder; createEach?(params: M[]): CRUDBuilder; find?(criteria?: CriteriaQuery): QueryBuilder; findOne?(criteria?: CriteriaQuery): QueryBuilder; findOne?(criteria?: number): QueryBuilder; findOne?(criteria?: string): QueryBuilder; findOrCreate?(criteria?: CriteriaQuery, values?: Partial): QueryBuilder; update?(criteria: CriteriaQuery, changes: Partial): UpdateBuilder; updateOne?(criteria: CriteriaQuery, changes: Partial): UpdateBuilder; update?(criteria: CriteriaQuery): UpdateSetBuilder; updateOne?(criteria: CriteriaQuery): UpdateSetBuilder; destroy?(criteria: CriteriaQuery): CRUDBuilder; destroy?(criteria: CriteriaQuery[]): CRUDBuilder; destroyOne?(criteria: CriteriaQuery[]): CRUDBuilder; count?(criteria?: CriteriaQuery): WaterlinePromise; count?(criteria: CriteriaQuery[]): WaterlinePromise; query?(sqlQuery: string, cb: Callback): void; query?(sqlQuery: string, data: any, cb: Callback): void; native?(cb: (err: Error, collection: any) => void): void; stream?(criteria: any, writeEnd: any): NodeJS.WritableStream | Error; addToCollection?(parentId: string | number | string[] | number[], association: NonPrimitiveKeys, childIds: string[]): Promise; addToCollection?(parentId: string | number | string[] | number[], association: NonPrimitiveKeys, childIds: number[]): Promise; addToCollection?(parentId: string | number | string[] | number[], association: NonPrimitiveKeys): collectionMember; removeFromCollection?(parentId: string | number | string[] | number[], association: NonPrimitiveKeys, childIds: string[]): Promise; removeFromCollection?(parentId: string | number | string[] | number[], association: NonPrimitiveKeys, childIds: number[]): Promise; removeFromCollection?(parentId: string | number | string[] | number[], association: NonPrimitiveKeys): collectionMember; replaceCollection?(parentId: string | number | string[] | number[], association: NonPrimitiveKeys, childIds: string[]): Promise; replaceCollection?(parentId: string | number | string[] | number[], association: NonPrimitiveKeys, childIds: number[]): Promise; replaceCollection?(parentId: string | number | string[] | number[], association: NonPrimitiveKeys): collectionMember; createEach?(params: Array>): WaterlinePromise; getDatastore?(): WaterlinePromise; sum?(attribute: keyof M): WaterlinePromise; validate?(params: Partial): WaterlinePromise; query?(sqlQuery: string, cb: Callback): void; query?(sqlQuery: string, data: any, cb: Callback): void; archive?(criteria: CriteriaQuery): WaterlinePromise; archived?(): WaterlinePromise; lease?(leaseCriteria: any): WaterlinePromise; } export type ModelMethods = LifecycleCallbacks & { [key: string]: Function; }; export {};