import { IStorage } from '../interfaces/IStorage'; import { Utils } from '../Utils'; export abstract class MapStorage implements IStorage { /** * @type {Map } */ protected storage: Map = new Map (); /** * @param key * @returns {T} */ public get (key: string | number): T { const value: T | undefined = this.storage.get(key); if (!value) { throw new Error(`No value found in map storage with key \`${key}\``); } return value; } /** * @param value * @returns {string | number | null} */ public getKeyOf (value: T): string | number | null { return Utils.mapGetFirstKeyOf(this.storage, value); } /** * @returns {number} */ public getLength (): number { return Array.from(this.storage).length; } /** * @returns {Map } */ public getStorage (): Map { return this.storage; } /** * @param key * @param value */ public set (key: string | number, value: T): void { this.storage.set(key, value); } }