68 lines
1.9 KiB
JavaScript
68 lines
1.9 KiB
JavaScript
// packages/persist/src/index.js
|
|
function src_default(Alpine) {
|
|
let persist = () => {
|
|
let alias;
|
|
let storage;
|
|
try {
|
|
storage = localStorage;
|
|
} catch (e) {
|
|
console.error(e);
|
|
console.warn("Alpine: $persist is using temporary storage since localStorage is unavailable.");
|
|
let dummy = /* @__PURE__ */ new Map();
|
|
storage = {
|
|
getItem: dummy.get.bind(dummy),
|
|
setItem: dummy.set.bind(dummy)
|
|
};
|
|
}
|
|
return Alpine.interceptor((initialValue, getter, setter, path, key) => {
|
|
let lookup = alias || `_x_${path}`;
|
|
let initial = storageHas(lookup, storage) ? storageGet(lookup, storage) : initialValue;
|
|
setter(initial);
|
|
Alpine.effect(() => {
|
|
let value = getter();
|
|
storageSet(lookup, value, storage);
|
|
setter(value);
|
|
});
|
|
return initial;
|
|
}, (func) => {
|
|
func.as = (key) => {
|
|
alias = key;
|
|
return func;
|
|
}, func.using = (target) => {
|
|
storage = target;
|
|
return func;
|
|
};
|
|
});
|
|
};
|
|
Object.defineProperty(Alpine, "$persist", { get: () => persist() });
|
|
Alpine.magic("persist", persist);
|
|
Alpine.persist = (key, { get, set }, storage = localStorage) => {
|
|
let initial = storageHas(key, storage) ? storageGet(key, storage) : get();
|
|
set(initial);
|
|
Alpine.effect(() => {
|
|
let value = get();
|
|
storageSet(key, value, storage);
|
|
set(value);
|
|
});
|
|
};
|
|
}
|
|
function storageHas(key, storage) {
|
|
return storage.getItem(key) !== null;
|
|
}
|
|
function storageGet(key, storage) {
|
|
let value = storage.getItem(key, storage);
|
|
if (value === void 0)
|
|
return;
|
|
return JSON.parse(value);
|
|
}
|
|
function storageSet(key, value, storage) {
|
|
storage.setItem(key, JSON.stringify(value));
|
|
}
|
|
|
|
// packages/persist/builds/module.js
|
|
var module_default = src_default;
|
|
export {
|
|
module_default as default,
|
|
src_default as persist
|
|
};
|