UNPKG

storage-manager-js

Version:

A little way to control Cookies, LocalStorage and SessionStorage without tears

104 lines (103 loc) 3.27 kB
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