UNPKG

synapse-storage

Version:

Набор инструментов для управления состоянием и апи-запросами

92 lines (81 loc) 3.09 kB
import { SingletonMixin } from "../modules/singleton/mixin.util.js"; import { StorageKey } from "../utils/storage-key.js"; import { getValueByPath, removeValueByPath, setValueByPath } from "./path.utils.js"; import { SyncBaseStorage } from "./sync-base-storage.service.js"; class MemoryStorage extends SyncBaseStorage { static STORAGE_TYPE = 'memory'; type = 'memory'; storage = new Map(); constructor(config, eventEmitter, logger){ super(config, eventEmitter, logger); } static create(config, eventEmitter, logger) { return SingletonMixin.handleSingletonCreation(config, this.STORAGE_TYPE, (finalConfig)=>new MemoryStorage(finalConfig, eventEmitter, logger), logger); } async doInitialize() { try { this.logger?.debug(`Initializing MemoryStorage "${this.name}"`); this.initializeMiddlewares(); this.initializeWithMiddlewares(); this.logger?.debug(`MemoryStorage "${this.name}" initialized successfully`); return this; } catch (error) { this.logger?.error('Error initializing MemoryStorage', { error }); throw error; } } doGet(key) { const state = this.storage.get(this.name); if (!state) return undefined; if (key instanceof StorageKey && key.isUnparseable()) { return state[key.valueOf()]; } return getValueByPath(state, key); } doSet(key, value) { const state = this.storage.get(this.name) || {}; // setValueByPath иммутабелен → не мутирует state/initialState (хранятся по ссылке). const newState = setValueByPath(state, key, value); this.storage.set(this.name, newState); } doRemove(key) { const state = this.storage.get(this.name); if (!state) return false; const { state: newState, removed } = removeValueByPath(state, key); if (!removed) return false; this.storage.set(this.name, newState); return true; } doUpdate(updates) { let newState = { ...this.storage.get(this.name) || {} }; for (const { key, value } of updates){ if (key instanceof StorageKey && key.isUnparseable()) { newState[key.valueOf()] = value; } else { newState = setValueByPath(newState, key, value); } } this.storage.set(this.name, newState); } doClear() { this.storage.delete(this.name); } doKeys() { const state = this.storage.get(this.name); if (!state) return []; return Object.keys(state); } doHas(key) { const value = this.doGet(key); return value !== undefined; } async doDestroy() { // Очистка управляется флагом config.clearOnDestroy в performCleanup (memory → по умолчанию true). } } export { MemoryStorage }; //# sourceMappingURL=memory-storage.service.js.map