storage-manager-js
Version:
A little way to control Cookies, LocalStorage and SessionStorage without tears
104 lines (103 loc) • 3.27 kB
JavaScript
const k = (e, t) => {
try {
Object.keys(e).forEach(t);
} catch (o) {
window.console.log(o);
}
}, i = (e) => e == null, w = (e) => {
const t = typeof e;
return t === "string" || t === "number" || t === "boolean" || i(e);
}, d = (e, t) => {
const o = t.getItem(e);
try {
return JSON.parse(o);
} catch {
return o ?? null;
}
}, l = (e) => Object.keys(e).reduce(
(t, o) => ({
...t,
[o]: d(o, e)
}),
{}
), p = (e) => e instanceof Date ? e : typeof e == "number" ? new Date(/* @__PURE__ */ new Date() * 1 + e * 864e5) : e, u = "1969-12-31T23:59:59.000Z", h = () => document.cookie === "" ? {} : document.cookie.split("; ").map((t) => t.split("=")).reduce((t, o) => (t[decodeURIComponent(o[0].trim())] = decodeURIComponent(o[1].trim()), t), {}), c = /* @__PURE__ */ new Set(), a = () => {
const e = h();
c.forEach((t) => t(e));
}, I = [
{ name: "expires", parse: (e) => `expires=${p(e.expires ?? u)}` },
{ name: "maxAge", parse: (e) => e.maxAge ? `max-age=${p(e.expires ?? u)}` : "" },
{ name: "path", parse: (e) => `path=${e.path ?? "/"}` },
{ name: "sameSite", parse: (e) => `samesite=${e.sameSite ?? "strict"}` },
{ name: "useSecure", parse: (e) => `${e.useSecure ?? !0 ? "secure" : ""}` },
{
name: "domain",
parse: (e) => {
const t = e.domain ?? "";
return t === "" ? "" : `domain=${e.multiDomain ? "." : ""}${t}`;
}
},
{ name: "partitioned", parse: (e) => e.partitioned ? "Partitioned" : "" }
], x = {
json: h,
listener: (e) => (c.add(e), () => c.delete(e)),
clearListeners: () => c.clear(),
has: (e) => document.cookie.split(";").some((t) => t.trim().startsWith(`${e}=`)),
deleteAll: () => {
document.cookie.split(";").forEach((e) => {
document.cookie = e.replace(/^ +/, "").replace(/=.*/, `=;expires=${(/* @__PURE__ */ new Date()).toUTCString()};path=/`);
}), a();
},
get: (e) => {
const t = x.json()[e];
if (i(t))
return null;
try {
return JSON.parse(decodeURIComponent(t));
} catch {
return t;
}
},
delete: (e) => {
document.cookie = `${encodeURIComponent(e)}=;expires=${(/* @__PURE__ */ new Date()).toUTCString()}`, a();
},
set: (e, t, o = {}) => {
const n = w(t) ? t : encodeURIComponent(JSON.stringify(t)), s = I.reduce(
(r, $) => {
const m = $.parse(o);
return m === "" ? r : r.concat(m);
},
[`${encodeURIComponent(e)}=${n}`]
).join(";");
document.cookie = s, a();
}
}, f = (e) => {
const t = /* @__PURE__ */ new Set(), o = (n) => {
e().removeItem(n);
const s = l(e());
t.forEach((r) => r(s));
};
return {
delete: o,
listener: (n) => (t.add(n), () => t.delete(n)),
clearListeners: () => t.clear(),
json: (n = !1) => n ? l(e()) : e(),
has: (n) => {
const s = e().getItem(n);
return !i(s);
},
deleteAll: () => {
k(e(), o), t.forEach((n) => n(e()));
},
get: (n) => d(n, e()),
set: (n, s) => {
e().setItem(n, JSON.stringify(s)), t.forEach((r) => r(e()));
}
};
}, S = f(() => window.sessionStorage), y = f(() => window.localStorage);
export {
x as Cookie,
y as LocalStorage,
S as SessionStorage,
f as createStorage
};
//# sourceMappingURL=index.mjs.map