import { DataAccessor } from "../DataAccessor"; import Waterline from "waterline"; export interface Attribute { type: 'association' | 'association-many' | 'number' | 'json' | 'string' | 'boolean' | 'ref'; required?: boolean; unique?: boolean; defaultsTo?: any; columnName?: string; model?: string; collection?: string; via?: string; allowNull?: boolean; /** * This is a field that indicates that it refers to keep the bond key 1: 1 */ primaryKeyForAssociation?: boolean; } export interface ModelAttributes { [key: string]: Attribute; } export type ModelAnyField = number | string | boolean | Date | Array | { [key: string]: number | string | boolean | Date; }; export type ModelAnyInstance = { [key: string]: ModelAnyField; }; type PopulateOption = [string, { sort?: string; where?: any; }]; export interface FindOptions { populate?: PopulateOption[]; limit?: number; } export declare abstract class AbstractModel { readonly modelname: string; readonly attributes: ModelAttributes; readonly primaryKey: string; readonly identity: string; protected constructor(modelname: string, attributes: ModelAttributes, primaryKey: string, identity: string); protected abstract _create(data: Partial): Promise; protected abstract _findOne(criteria: Partial): Promise; protected abstract _find(criteria: Partial, options?: FindOptions): Promise; protected abstract _updateOne(criteria: Partial, data: Partial): Promise; protected abstract _update(criteria: Partial, data: Partial): Promise; protected abstract _destroyOne(criteria: Partial): Promise; protected abstract _destroy(criteria: Partial): Promise; protected abstract _count(criteria: Partial | undefined): Promise; /** * Generate diff between old and new records */ private generateDiff; /** * Generate delete diff (record vs empty object) */ private generateDeleteDiff; private setHistory; /** * Log system event with diff */ private logSystemEvent; create(data: T, dataAccessor: DataAccessor): Promise>; findOne(criteria: Partial, dataAccessor: DataAccessor): Promise | null>; find(criteria: Partial, dataAccessor: DataAccessor): Promise[]>; updateOne(criteria: Partial, data: Partial, dataAccessor: DataAccessor): Promise | null>; update(criteria: Partial, data: Partial, dataAccessor: DataAccessor): Promise[]>; destroyOne(criteria: Partial, dataAccessor: DataAccessor): Promise | null>; destroy(criteria: Partial, dataAccessor: DataAccessor): Promise[]>; count(criteria: Partial | undefined, dataAccessor: DataAccessor): Promise; } export declare abstract class AbstractAdapter { abstract Model: any; readonly orm: any; readonly ormType: string; protected constructor(type: string, orm: any); abstract get models(): Record; /** This function should return constant type from any adapter (for adminizer proper work) */ abstract getAttributes(modelName: string): Waterline.Attributes; /** Return full model object */ abstract getModel(modelName: string): any; /** * This method must ensure system models registration and throw an error in case of errors. We force all adapters to realize it */ static registerSystemModels(orm: any): void; } export {};