Set and get cookies with optional type validation with a Valibot schema.
Requires Node.js 18, 20 or above.
npm install @samual/cookie
import { deleteCookie, parseCookies, setCookie } from "@samual/cookie"
// parse cookies
const cookies = parseCookies(document.cookie)
// get a cookie
console.log(cookies.get("foo")) // "bar"
// set a cookie
document.cookie = setCookie("foo", "baz")
// delete a cookie
document.cookie = deleteCookie("foo")
import { deleteCookie, parseCookies, setCookie } from "@samual/cookie"
// ...
// in request handling code:
// parse cookies
const cookies = parseCookies(request.headers.get("cookie"))
// get a cookie
console.log(cookies.get("foo")) // "bar"
// set a cookie
response.headers.set("set-cookie", setCookie("foo", "baz"))
// delete a cookie
response.headers.set("set-cookie", deleteCookie("foo"))
import { parseCookies } from "@samual/cookie"
import { deleteCookie, getCookie, setCookie } from "@samual/cookie/typed"
import * as v from "valibot"
// set up cookie name and schema
const MyCookie = makeCookieOptions({ name: "<unique name>", schema: v.object({ foo: v.string() }) })
// parse cookies
const cookies = parseCookies(document.cookie)
// get a cookie
console.log(getCookie(cookies, MyCookie)) // { foo: "bar" }
// set a cookie
document.cookie = setCookie(MyCookie, { foo: "baz" })
// delete a cookie
document.cookie = deleteCookie(MyCookie)
import { parseCookies } from "@samual/cookie"
import { deleteCookie, getCookie, setCookie } from "@samual/cookie/typed"
import * as v from "valibot"
// set up cookie name and schema
const MyCookie = makeCookieOptions({ name: "<unique name>", schema: v.object({ foo: v.string() }) })
// ...
// in request handling code:
// parse cookies
const cookies = parseCookies(request.headers.get("cookie"))
// get a cookie
console.log(getCookie(cookies, MyCookie)) // { foo: "bar" }
// set a cookie
response.headers.set("set-cookie", setCookie(MyCookie, { foo: "baz" }))
// delete a cookie
response.headers.set("set-cookie", deleteCookie(MyCookie))