import { isStringified as u } from "./utilities.mjs";
function o() {
  const e = /* @__PURE__ */ new Map();
  return {
    get length() {
      return e.size;
    },
    clear() {
      e.clear();
    },
    getItem(r) {
      return e.get(r) ?? null;
    },
    key(r) {
      return Array.from(e.keys())[r] ?? null;
    },
    removeItem(r) {
      e.delete(r);
    },
    setItem(r, t) {
      e.set(r, t);
    }
  };
}
function s(e) {
  try {
    return globalThis[e] ?? o();
  } catch {
    return o();
  }
}
function l(e) {
  return {
    get size() {
      return e.length;
    },
    keys() {
      return Array.from({ length: this.size }, (t, n) => e.key(n));
    },
    get(t, n = void 0) {
      const i = e.getItem(t);
      return (i && u(i) ? JSON.parse(i) : i) ?? n;
    },
    getAll() {
      return Object.fromEntries(this.keys().map((t) => [t, this.get(t, void 0)]));
    },
    set(t, n, i = !0) {
      e.setItem(t, i ? JSON.stringify(n) : n);
    },
    remove: e.removeItem.bind(e),
    clear: e.clear.bind(e),
    key: e.key.bind(e),
    has(t) {
      return !!e.getItem(t);
    }
  };
}
function c() {
  return {
    local: l(s("localStorage")),
    session: l(s("sessionStorage"))
  };
}
const g = c();
export {
  g as storage
};
