import { ModelInstanceMetadata, ModelPredicate, OpType, PaginationInput, PersistentModel, PersistentModelConstructor, QueryOne, SystemComponent, } from '../../types'; export interface Adapter extends SystemComponent { clear(): Promise; save( model: T, condition?: ModelPredicate ): Promise<[T, OpType.INSERT | OpType.UPDATE][]>; delete: ( modelOrModelConstructor: T | PersistentModelConstructor, condition?: ModelPredicate ) => Promise<[T[], T[]]>; query( modelConstructor: PersistentModelConstructor, predicate?: ModelPredicate, pagination?: PaginationInput ): Promise; queryOne( modelConstructor: PersistentModelConstructor, firstOrLast: QueryOne ): Promise; batchSave( modelConstructor: PersistentModelConstructor, items: ModelInstanceMetadata[] ): Promise<[T, OpType][]>; }