react-use-storage-state
Version:
React use hook for shared and persisted state
67 lines • 1.81 kB
JavaScript
function toString(value) {
switch (value) {
case true:
return 'true';
case false:
return 'false';
case null:
return 'null';
case undefined:
return 'undefined';
}
switch (typeof value) {
case 'string':
return value;
case 'number':
return value.toString();
}
return Object.prototype.toString.call(value);
}
var nativeKeys = {
length: true,
clear: true,
getItem: true,
key: true,
removeItem: true,
setItem: true,
};
export function createMemoryStorage() {
var entries = new Map();
var storage = {
get length() {
return entries.size;
},
clear: function () {
entries.clear();
},
getItem: function (key) {
var value = entries.get(key);
return value === undefined ? null : value;
},
key: function (index) {
return Array.from(entries.keys())[index];
},
removeItem: function (key) {
entries.delete(key);
},
setItem: function (key, value) {
entries.set(key, toString(value));
},
};
return new Proxy(storage, {
get: function (target, p, receiver) {
if (typeof p === 'string' && !nativeKeys[p]) {
return storage.getItem(p);
}
return Reflect.get(target, p, receiver);
},
set: function (target, p, value, receiver) {
if (typeof p === 'string' && !nativeKeys[p]) {
storage.setItem(p, value);
return true;
}
return Reflect.set(target, p, value, receiver);
},
});
}
//# sourceMappingURL=memory-storage.js.map