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; // type notIn = { // "!=": T[] // } 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; // Direct findOne by primaryKey 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; // .stream() await Something.stream(criteria) .eachRecord(async (record)=>{}); https://sailsjs.com/documentation/reference/waterline-orm/models/stream 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 }