import { Emitter } from 'strict-event-emitter'; import { Entity, KeyType, ModelDictionary, PrimaryKeyType } from '../glossary'; export declare const SERIALIZED_INTERNAL_PROPERTIES_KEY = "SERIALIZED_INTERNAL_PROPERTIES"; declare type Models = Record>>; export interface SerializedInternalEntityProperties { entityType: string; primaryKey: PrimaryKeyType; } export interface SerializedEntity extends Entity { [SERIALIZED_INTERNAL_PROPERTIES_KEY]: SerializedInternalEntityProperties; } export declare type DatabaseEventsMap = { create: [ sourceId: string, modelName: KeyType, entity: SerializedEntity, customPrimaryKey?: PrimaryKeyType ]; update: [ sourceId: string, modelName: KeyType, prevEntity: SerializedEntity, nextEntity: SerializedEntity ]; delete: [sourceId: string, modelName: KeyType, primaryKey: PrimaryKeyType]; }; export declare class Database { id: string; events: Emitter; private models; constructor(dictionary: Dictionary); /** * Generates a unique MD5 hash based on the database * module location and invocation order. Used to reproducibly * identify a database instance among sibling instances. */ private generateId; private serializeEntity; getModel(name: ModelName): Models[ModelName]; create(modelName: ModelName, entity: Entity, customPrimaryKey?: PrimaryKeyType): Map>; update(modelName: ModelName, prevEntity: Entity, nextEntity: Entity): void; delete(modelName: ModelName, primaryKey: PrimaryKeyType): void; has(modelName: ModelName, primaryKey: PrimaryKeyType): boolean; count(modelName: ModelName): number; listEntities(modelName: ModelName): Entity[]; } export {};