UNPKG

@naturalcycles/js-lib

Version:

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

49 lines (39 loc) 1.08 kB
/// <reference lib="es2022" preserve="true" /> /// <reference lib="dom" preserve="true" /> import type { StringMap } from './types.js' /** * 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 implements Storage { constructor(public data: StringMap = {}) {} // Not implementing "free property access" now for simplicity, // but can be implemented with Proxy // [ name: string ]: any getItem(key: string): string | null { return this.data[key] ?? null } setItem(key: string, value: string): void { this.data[key] = String(value) } removeItem(key: string): void { delete this.data[key] } key(index: number): string | null { return Object.keys(this.data)[index] ?? null } clear(): void { this.data = {} } get length(): number { return Object.keys(this.data).length } }