@samual/cookie
Version:
Set and get cookies with optional type validation with a Standard Schema.
25 lines (24 loc) • 873 B
JavaScript
function assertValidCookieName(name) {
if (!/^[!#-+-.\d^-z|~]+$/i.test(name)) throw SyntaxError("Invalid cookie name")
}
function parseCookies(cookies) {
const parsedCookies = new Map()
if (cookies)
for (const cookie of cookies.split("; ")) {
const index = cookie.indexOf("=")
;-1 == index ?
parsedCookies.set("", cookie)
: parsedCookies.set(cookie.slice(0, index), cookie.slice(index + 1))
}
return parsedCookies
}
function setCookie(name, value, options) {
assertValidCookieName(name)
if (!/^(?:[!#-+--:<-[\]-~]*)|(?:"[!#-+--:<-[\]-~]*")$/.test(value)) throw SyntaxError("Invalid cookie value")
return `${name}=${value}${options?.attributes || ";max-age=31536000;path=/;sameSite=lax"}`
}
function deleteCookie(name) {
assertValidCookieName(name)
return name + "=;max-age=0;path=/;sameSite=lax"
}
export { deleteCookie, parseCookies, setCookie }