UNPKG

@microsoft/teams.common

Version:

<p> <a href="https://www.npmjs.com/package/@microsoft/teams.common" target="_blank"> <img src="https://img.shields.io/npm/v/@microsoft/teams.common/latest" /> </a> <a href="https://www.npmjs.com/package/@microsoft/teams.common?activeTa

1 lines 4.36 kB
{"version":3,"sources":["../../src/storage/local-storage.ts"],"names":[],"mappings":"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","file":"local-storage.mjs","sourcesContent":["import type { IStorage } from './storage';\n\nexport type LocalStorageOptions = {\n /**\n * max number of records.\n */\n readonly max?: number;\n};\n\nexport class LocalStorage<T = any> implements IStorage<string, T> {\n protected readonly _store: Map<string, T>;\n protected readonly _keys: string[];\n protected readonly _options: LocalStorageOptions;\n\n get keys(): string[] {\n return this._keys;\n }\n\n get size(): number {\n return this._store.size;\n }\n\n constructor(data: Record<string, T> = {}, options: LocalStorageOptions = {}) {\n this._store = new Map<string, T>(Object.entries(data));\n this._keys = Object.keys(data);\n this._options = options;\n }\n\n get(key: string): T | undefined {\n this._hit(key);\n return this._store.get(key);\n }\n\n set(key: string, value: T): void {\n if (!this._hit(key)) {\n this._keys.push(key);\n }\n\n if (this._options.max) {\n if (this._keys.length > this._options.max) {\n const k = this._keys.shift();\n\n if (k) {\n this._store.delete(k);\n }\n }\n }\n\n this._store.set(key, value);\n }\n\n delete(key: string): void {\n const i = this._keys.findIndex((k) => key === k);\n\n if (i > -1) {\n this._keys.splice(i, 1);\n }\n\n this._store.delete(key);\n }\n\n toString(): string {\n return JSON.stringify(\n Array.from(this._store.entries()).map(([key, value]) => ({\n key,\n value,\n })),\n null,\n 2,\n );\n }\n\n protected _hit(key: string): boolean {\n if (!this._store.has(key)) return false;\n if (this._keys[this._keys.length - 1] === key) return true;\n\n const idx = this._keys.findIndex((k) => key === k);\n\n /* istanbul ignore next */\n if (idx < 0) return false;\n\n for (let i = idx + 1; i < this._keys.length; i++) {\n const tmp = this._keys[i - 1];\n this._keys[i - 1] = this._keys[i];\n this._keys[i] = tmp;\n }\n\n return true;\n }\n}\n"]}