import type { StateManager } from "./state-manager"; /** * The `StateManagerCenter` class is a singleton that manages multiple state managers, * logs state changes, and provides methods for state hydration and dehydration. */ declare class StateManagerCenter { protected _cacheRefs: Record; /** * A record of state managers identified by unique IDs. */ protected _stateManagers: Record>; /** * An array of state manager center records. */ protected _records: CenterRecordType[]; /** * A record of the current states identified by unique IDs. */ protected _currentStates: Record; /** * A flag indicating whether logging is enabled. */ protected _isEnabledLog: boolean; /** * A flag indicating whether cloning is disabled. */ protected _disableCloning: boolean; /** * An optional callback function for logging. */ protected _onLog: ((props: { uid: string; state: any; }) => Promise) | undefined; /** * A flag indicating whether hydration is in progress. */ protected _isHydration: boolean; /** * Gets the hydration status. */ get isHydration(): boolean; /** * The singleton instance of `StateManagerCenter`. */ private static _instance; /** * Private constructor to prevent direct instantiation. */ private constructor(); /** * Gets the cloning disable status. */ get disableCloning(): boolean; /** * Sets the cloning disable status. */ set disableCloning(value: boolean); /** * Gets the singleton instance of `StateManagerCenter`. */ static get instance(): StateManagerCenter; /** * Gets the current states. */ get currentStates(): Record; /** * Gets the logging enable status. */ get enableLog(): boolean; /** * Sets the logging enable status. */ set enableLog(value: boolean); /** * Returns the state manager center records. * These records can be sent to the server for monitoring and debugging purposes. * * @returns The state manager center records. */ get records(): CenterRecordType[]; /** * Sets the current records to the provided records. * This method can be used for monitoring and debugging purposes. * * @param records - The records to be set. */ set records(records: CenterRecordType[]); /** * Gets the state manager center records in reverse order. */ getReverseRecords(): Promise; /** * Logs a state change. */ _log({ uid, state }: { uid: string; state: any; }): this; /** * Registers a state manager with a unique ID. */ _register({ uid, stateManager, }: { uid: string; stateManager: StateManager; }): this; /** * Applies the given states to the related state managers. * * @param {CenterRecordType} record - An object containing the states to be applied. * @returns {this} The current instance of the class. */ apply({ states }: CenterRecordType): this; /** * Initializes the hydration process. */ protected _initializeHydration(): this; /** * Hydrates the state managers with the provided entities. * @param entities - The entities to be hydrated. * @returns The hydrated states. * @throws An error if the entity does not have a `hydrated` property. */ get hydrated(): { generate: (...entries: HydratedEntries) => Promise<{ hydrated: Hydrated; values: any[]; }>; config: ({ initial }: { initial: Hydrated; }) => { generate: (...entries: HydratedEntries) => Promise<{ hydrated: Hydrated; values: any[]; }>; }; }; protected _generateHydrated({ entries, initial, }: { initial?: Hydrated; entries: HydratedEntries; }): Promise<{ hydrated: Hydrated; values: any[]; }>; _registerCacheRef({ uid, ref }: { uid: string; ref: any; }): this; /** * Dehydrates the state managers with the provided states. * @param states - The states to be dehydrated. */ dehydrate(hydrated: Hydrated): Promise; protected _updateCache({ value, hash, cacheRef, timestamp, }: HydratedItem): Promise; /** * Registers a callback function for logging. * If a callback is already registered, an error will be thrown. * @param callback - The callback function to be registered. * @returns The `StateManagerCenter` instance. * @throws An error if a callback is already registered. */ onLog(callback: ((props: { uid: string; state: any; }) => Promise) | undefined): StateManagerCenter; /** * Clears the state manager center records. */ clearRecords(): this; } export declare const center: StateManagerCenter; export type CenterRecordType = { updatedUID: string; timestamp: number; states: Record; number: number; }; export type HydratedEntries = (Promise | HydratedEntry)[]; export type HydratedEntry = { update: (record: Hydrated["data"]) => void; value: any; }; export type Hydrated = { id: string; data: Record; timestamp: number; }; export type HydratedItem = { value: any; hash?: string; cacheRef?: string; timestamp?: number; }; export interface CacheRef { _getCache(cacheKey: string): Promise<{ data: any; updatedAt: number; } | undefined>; _setCache(cacheKey: string, value: { data: any; updatedAt: number; }): void; } export {};