unstorage
Version:
Universal Storage Layer
67 lines (66 loc) • 1.81 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
module.exports = void 0;
var _utils = require("./utils/index.cjs");
var _default = (0, _utils.defineDriver)((opts = {}) => {
if (!opts.window) {
opts.window = typeof window !== "undefined" ? window : void 0;
}
if (!opts.localStorage) {
opts.localStorage = opts.window?.localStorage;
}
if (!opts.localStorage) {
throw new Error("localStorage not available");
}
const r = key => (opts.base ? opts.base + ":" : "") + key;
let _storageListener;
return {
name: "localstorage",
options: opts,
hasItem(key) {
return Object.prototype.hasOwnProperty.call(opts.localStorage, r(key));
},
getItem(key) {
return opts.localStorage.getItem(r(key));
},
setItem(key, value) {
return opts.localStorage.setItem(r(key), value);
},
removeItem(key) {
return opts.localStorage.removeItem(r(key));
},
getKeys() {
return Object.keys(opts.localStorage);
},
clear() {
if (!opts.base) {
opts.localStorage.clear();
} else {
for (const key of Object.keys(opts.localStorage)) {
opts.localStorage?.removeItem(key);
}
}
if (opts.window && _storageListener) {
opts.window.removeEventListener("storage", _storageListener);
}
},
watch(callback) {
if (!opts.window) {
return;
}
_storageListener = ev => {
if (ev.key) {
callback(ev.newValue ? "update" : "remove", ev.key);
}
};
opts.window.addEventListener("storage", _storageListener);
return () => {
opts.window.removeEventListener("storage", _storageListener);
_storageListener = void 0;
};
}
};
});
module.exports = _default;