@naturalcycles/js-lib
Version:
Standard library for universal (browser + Node.js) javascript
42 lines (41 loc) • 996 B
JavaScript
/// <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;
}
}