import { CoreModel } from "../models/coremodel.js";
import { Store, StoreFindResult, StoreParameters } from "./store.js";
import { WebdaQL } from "./webdaql/query.js";
interface StorageMap {
    [key: string]: string;
}
/**
 * Memory store
 */
declare class MemoryStoreParameters extends StoreParameters {
    /**
     * Persist the data in a file
     */
    persistence?: {
        /**
         * File path to save to
         */
        path: string;
        /**
         * Encryption key for AES encryption
         */
        key?: string;
        /**
         * By default only save once every 1s if modified
         *
         * @default 1000
         */
        delay?: number;
        /**
         * cipher to use
         */
        cipher?: string;
        /**
         * Compression level to use
         * @default 9
         * @max 9
         * @min 0
         */
        compressionLevel?: number;
    };
    constructor(params: any, service: MemoryStore);
}
/**
 * Store in Memory
 *
 * @category CoreServices
 * @WebdaModda
 */
declare class MemoryStore<T extends CoreModel = CoreModel, K extends MemoryStoreParameters = MemoryStoreParameters> extends Store<T, K> {
    /**
     * Inmemory storage
     */
    storage: StorageMap;
    /**
     * Persistence timeout id
     */
    private persistenceTimeout;
    /**
     * Current persistence
     */
    persistencePromise: any;
    /**
     * AES encryption key
     */
    private key;
    /**
     * Persist inmemory storage to file
     *
     * Called every this.parameters.persistence.delay ms
     */
    persist(): Promise<void>;
    /**
     * Load a persisted memory data
     */
    load(): Promise<void>;
    /**
     * @override
     */
    loadParameters(params: any): MemoryStoreParameters;
    /**
     * @override
     */
    init(): Promise<this>;
    /**
     * Ensure the store is saved if persistence is on
     */
    stop(): Promise<void>;
    /**
     * @override
     */
    _exists(uid: any): Promise<boolean>;
    /**
     * @override
     */
    find(query: WebdaQL.Query): Promise<StoreFindResult<T>>;
    /**
     * @override
     */
    _save(object: T): Promise<T>;
    /**
     * @override
     */
    _delete(uid: string): Promise<void>;
    /**
     * @override
     */
    _patch(object: any, uuid: string, writeCondition?: any, writeConditionField?: string): Promise<T>;
    /**
     * @override
     */
    _update(object: any, uid: string, writeCondition?: any, writeConditionField?: string): Promise<T>;
    /**
     * @override
     */
    getAll(uids?: string[]): Promise<any>;
    /**
     * Retrieve the object as model
     *
     * @param uid
     * @returns
     */
    _getSync(uid: string, raiseIfNotFound?: boolean): T;
    /**
     * @override
     */
    _removeAttribute(uuid: string, attribute: string, writeCondition?: any, writeConditionField?: string): Promise<void>;
    /**
     * @override
     */
    _get(uid: any, raiseIfNotFound?: boolean): Promise<T>;
    /**
     * @override
     */
    __clean(): Promise<void>;
    /**
     * @override
     */
    _incrementAttributes(uid: any, params: {
        property: string;
        value: number;
    }[], updateDate: Date): Promise<T>;
    /**
     * @inheritdoc
     */
    _upsertItemToCollection(uid: string, prop: string, item: any, index: number, itemWriteCondition: any, itemWriteConditionField: string, updateDate: Date): Promise<void>;
    /**
     * @override
     */
    _deleteItemFromCollection(uid: any, prop: any, index: any, itemWriteCondition: any, itemWriteConditionField: any, updateDate: Date): Promise<T>;
}
export { MemoryStore, MemoryStore as Plop, StorageMap };
