import { Collection, Cursor, FilterQuery, FindOneOptions, OptionalId, UpdateManyOptions, UpdateOneOptions, UpdateQuery } from "mongodb"; import MongoConnector from "./mongo_connector"; import { LRUCache } from "lru-cache"; export interface IDataLoader { clear(id: string): void; clearAll(): void; load(key: string): any; } export interface Options { batch?: boolean; cache?: boolean; cacheKeyFn?: (key: any) => any; cacheMap?: CacheWrapper | "lru"; cacheTTLMs?: number; cacheSize?: number; clearOnInsert?: boolean; clearOnUpdate?: boolean; selectorKeyFn?: (key: any) => any; } interface CacheWrapper { clear(): any; get(key: K): V; set(key: K, value: V): any; delete(key: K): any; } export declare class LruCacheWrapper implements CacheWrapper { cache: LRUCache; constructor(cacheSize?: number, ttl?: number); clear(): void; get(key: K): V; set(key: K, value: V): LRUCache; delete(key: K): boolean; } export default class MongoEntity { connector: MongoConnector; private _collectionName; private _collection; private _singleLoader; private _multiLoader; private _insertLoaders; private _updateLoaders; static DefaultCache: any; private _cache; get collection(): Collection; constructor(connector: MongoConnector, collectionName: string, cache?: any); clearUpdateCaches(selector: any): void; clearInsertCaches(selector: any): void; assignFilter(object: Object, selector: Object, result: Object, include: 0 | 1): (k: string) => void; filter(object: Object, selector: Object): any; find(selector: FilterQuery, projection?: Object, skip?: number, limit?: number): Cursor; findOne(selector: FilterQuery, options?: FindOneOptions): Promise; findOneCached(loader: IDataLoader, key: string, selector?: Object): Promise; findOneCachedById(id: string, selector?: Object): Promise; findManyCached(loader: IDataLoader, key: string, selector?: Object): Promise; findAllCached(selector?: Object): Promise; addCacheToOptions(options: any): any; insertOne(document: OptionalId): Promise>>; insertMany(document: OptionalId[]): Promise>>; deleteOne(selector: FilterQuery, many?: boolean): Promise; deleteMany(selector: FilterQuery, many?: boolean): Promise; dispose(): Promise; updateOne(selector: FilterQuery, update: UpdateQuery, options?: UpdateOneOptions): Promise; updateMany(selector: FilterQuery, update: UpdateQuery, options?: UpdateManyOptions): Promise; createLoader(selectorFunction: (key: any) => Promise, options?: Options): any; } export {};