import Observable from 'zen-observable-ts'; import { Patch } from 'immer'; import { ModelInstanceCreator } from '../datastore/datastore'; import { InternalSchema, ModelInstanceMetadata, ModelPredicate, NamespaceResolver, OpType, PaginationInput, PersistentModel, PersistentModelConstructor, QueryOne, SchemaNamespace, InternalSubscriptionMessage, SubscriptionMessage } from '../types'; import { Adapter } from './adapter'; export declare type StorageSubscriptionMessage = InternalSubscriptionMessage & { mutator?: Symbol; }; export declare type StorageFacade = Omit; export declare type Storage = InstanceType; declare class StorageClass implements StorageFacade { private readonly schema; private readonly namespaceResolver; private readonly getModelConstructorByModelName; private readonly modelInstanceCreator; private readonly adapter?; private readonly sessionId?; private initialized; private readonly pushStream; constructor(schema: InternalSchema, namespaceResolver: NamespaceResolver, getModelConstructorByModelName: (namsespaceName: string, modelName: string) => PersistentModelConstructor, modelInstanceCreator: ModelInstanceCreator, adapter?: Adapter, sessionId?: string); static getNamespace(): SchemaNamespace; init(): Promise; save(model: T, condition?: ModelPredicate, mutator?: Symbol, patchesTuple?: [Patch[], PersistentModel]): Promise<[T, OpType.INSERT | OpType.UPDATE][]>; delete(model: T, condition?: ModelPredicate, mutator?: Symbol): Promise<[T[], T[]]>; delete(modelConstructor: PersistentModelConstructor, condition?: ModelPredicate, mutator?: Symbol): Promise<[T[], T[]]>; query(modelConstructor: PersistentModelConstructor, predicate?: ModelPredicate, pagination?: PaginationInput): Promise; queryOne(modelConstructor: PersistentModelConstructor, firstOrLast?: QueryOne): Promise; observe(modelConstructor?: PersistentModelConstructor, predicate?: ModelPredicate, skipOwn?: Symbol): Observable>; clear(completeObservable?: boolean): Promise; batchSave(modelConstructor: PersistentModelConstructor, items: ModelInstanceMetadata[], mutator?: Symbol): Promise<[T, OpType][]>; private getUpdateMutationInput; } declare class ExclusiveStorage implements StorageFacade { private storage; private readonly mutex; constructor(schema: InternalSchema, namespaceResolver: NamespaceResolver, getModelConstructorByModelName: (namsespaceName: string, modelName: string) => PersistentModelConstructor, modelInstanceCreator: ModelInstanceCreator, adapter?: Adapter, sessionId?: string); runExclusive(fn: (storage: StorageClass) => Promise): Promise; save(model: T, condition?: ModelPredicate, mutator?: Symbol, patchesTuple?: [Patch[], PersistentModel]): Promise<[T, OpType.INSERT | OpType.UPDATE][]>; delete(model: T, condition?: ModelPredicate, mutator?: Symbol): Promise<[T[], T[]]>; delete(modelConstructor: PersistentModelConstructor, condition?: ModelPredicate, mutator?: Symbol): Promise<[T[], T[]]>; query(modelConstructor: PersistentModelConstructor, predicate?: ModelPredicate, pagination?: PaginationInput): Promise; queryOne(modelConstructor: PersistentModelConstructor, firstOrLast?: QueryOne): Promise; static getNamespace(): SchemaNamespace; observe(modelConstructor?: PersistentModelConstructor, predicate?: ModelPredicate, skipOwn?: Symbol): Observable>; clear(): Promise; batchSave(modelConstructor: PersistentModelConstructor, items: ModelInstanceMetadata[]): Promise<[T, OpType][]>; init(): Promise; } export { ExclusiveStorage };