Browser Cookie

document.myCookie = "blog=learnersbucket";
document.myCookie = "name=prashant;max-age=2";

console.log(document.myCookie);
setTimeout(() => {
  console.log(document.myCookie);
}, 1000);
setTimeout(() => {
  console.log(document.myCookie);
}, 2000);

// blog=learnersbucket;name=prashant
// blog=learnersbucket;name=prashant
// blog=learnersbucket
function parseCookieString(str) {
  const [nameValue, ...rest] = str.split(";");
  const [key, value] = separateKeyValue(nameValue);
  const options = {};

  for (let option of rest) {
    const [key, value] = separateKeyValue(option);
    options[key] = value;
  }

  return { key, value, options };
}

function separateKeyValue(val) {
  return val.split("=").map((item) => item.trim());
}

function useCustomCookie() {
  const store = new Map();

  Object.defineProperty(document, "myCookie", {
    configurable: true,
    set(val) {
      const { key, value, options } = parseCookieString(val);

      let expiry = Infinity;
      if (options["max-age"]) {
        expiry = Date.now() + options["max-age"] * 1000;
      }

      store.set(key, { value, expiry });
    },
    get() {
      const cookies = [];
      let time = Date.now();

      for (let [key, { value, expiry }] of store) {
        if (time >= expiry) {
          delete store[key];
        } else {
          cookies.push(key + "=" + value);
        }
      }

      return cookies.join(";");
    },
  });
}

useCustomCookie();