@naturalcycles/js-lib
Version:
Standard library for universal (browser + Node.js) javascript
46 lines (45 loc) • 1.15 kB
JavaScript
;
/// <reference lib="es2022" preserve="true" />
/// <reference lib="dom" preserve="true" />
Object.defineProperty(exports, "__esModule", { value: true });
exports.InMemoryWebStorage = void 0;
/**
* 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
*/
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;
}
}
exports.InMemoryWebStorage = InMemoryWebStorage;