UNPKG

@naturalcycles/js-lib

Version:

Standard library for universal (browser + Node.js) javascript

42 lines (41 loc) 996 B
/// <reference lib="es2023" preserve="true" /> /// <reference lib="dom" preserve="true" /> /** * Implements WebStorage API by using in-memory storage. * Can be useful in SSR environment or unit tests. * * This is how localStorage can be mocked in Node: * * Object.assign(globalThis, { * localStorage: new InMemoryWebStorage(), * }) * * @experimental */ export class InMemoryWebStorage { data; constructor(data = {}) { this.data = data; } // Not implementing "free property access" now for simplicity, // but can be implemented with Proxy // [ name: string ]: any getItem(key) { return this.data[key] ?? null; } setItem(key, value) { this.data[key] = String(value); } removeItem(key) { delete this.data[key]; } key(index) { return Object.keys(this.data)[index] ?? null; } clear() { this.data = {}; } get length() { return Object.keys(this.data).length; } }