Vize

use-cookie

Parse a Cookie request header (or document.cookie) into name/value pairs.

Package @vizejs/composable/use-cookie
Own the source vize lib pull composable:use-cookie
Runtime exports COOKIE_ADAPTER_KEY, parseCookieHeader, provideCookieAdapter, serializeCookie, useCookie
Gzip budget 4608 B

Usage

import { COOKIE_ADAPTER_KEY, parseCookieHeader, provideCookieAdapter, serializeCookie, useCookie } from "@vizejs/composable/use-cookie";

Runtime contract

Utility Category Stability SSR Hydration Cleanup Targets Host globals Uses
parseCookieHeader storage experimental safe not-applicable none web, server, worker, native, desktop, terminal — —
serializeCookie storage experimental safe not-applicable none web, server, worker, native, desktop, terminal — —
provideCookieAdapter storage experimental safe not-applicable none web, server, worker, native, desktop, terminal — —
useCookie storage experimental safe stable reactive-scope web, server, worker, native, desktop, terminal window parseCookieHeader, serializeCookie, tryOnScopeDispose, useMounted

API

parseCookieHeader

Parse a Cookie request header (or document.cookie) into name/value pairs. Values are percent-decoded; the first occurrence of a name wins, matching how browsers order more specific cookies first. Pure and SSR-safe.

function parseCookieHeader(header: string): Record<string, string>

serializeCookie

Serialize one cookie as a Set-Cookie header value (also accepted by document.cookie). The value is percent-encoded so any string is safe.

function serializeCookie( name: string, value: string, attributes: CookieAttributes = {}, ): string

Injection key for an app- or subtree-wide CookieAdapter.

const COOKIE_ADAPTER_KEY: InjectionKey<CookieAdapter>

provideCookieAdapter

Provide a CookieAdapter to descendant components (for example the request/response pair of a server render). Must be called during setup; use app.provide(COOKIE_ADAPTER_KEY, adapter) for a whole app.

function provideCookieAdapter(adapter: CookieAdapter): void

useCookie

Read and write one cookie with a typed default.

function useCookie<Value>( name: string, options: UseCookieOptions<Value> & { readonly default: Value }, ): CookieControls<Value>

useCookie

Read and write one raw string cookie; absent cookies are undefined.

function useCookie( name: string, options?: UseCookieOptions<string>, ): CookieControls<string | undefined>

useCookie

Synchronize a typed reactive value with one cookie, on the server and in the browser. The adapter is resolved from options.adapter, then from COOKIE_ADAPTER_KEY (see provideCookieAdapter), then from document.cookie in browsers. During a server render with an adapter the value comes from the request Cookie header and assignments emit Set-Cookie headers through adapter.write, so server and client render the same value and hydrate without a mismatch. Without any adapter (plain SSR) the default is used and nothing is written. String defaults are stored raw; other defaults as JSON checked by validate (by default: same kind as the default). Assigning undefined (or calling remove) expires the cookie. Cookies are written with Path=/ unless path is given. Failures never throw; they are exposed through error and onError. The write watcher stops with the owning reactive scope.

function useCookie<Value>( name: string, options: UseCookieOptions<Value> = {}, ): CookieControls<Value | undefined>
// server entry: app.provide(COOKIE_ADAPTER_KEY, { read: () => req.headers.cookie ?? "",
//   write: (value) => res.appendHeader("Set-Cookie", value) });
const { state: locale } = useCookie("locale", { default: "en", maxAge: 31_536_000 });

Types

CookieAttributes

Attributes written with a cookie (RFC 6265bis).

Member Type Description
path? string Path attribute.
domain? string Domain attribute.
maxAge? number Max-Age in integer seconds; 0 or less expires the cookie.
expires? Date Expires date.
sameSite? CookieSameSite SameSite policy. "none" requires secure.
secure? boolean Secure flag.
httpOnly? boolean HttpOnly flag. Only honored by server adapters: browsers ignore cookies with this flag written through document.cookie.
partitioned? boolean Partitioned flag (CHIPS). Requires secure.

CookieAdapter

Request/response bridge used by useCookie. On the server, read returns the incoming Cookie header and write appends a Set-Cookie header to the response. In the browser the default adapter reads and writes document.cookie.

Member Type Description
read () => string Return the current Cookie header (name=value; …).
write (setCookie: string) => void Persist one serialized cookie (a Set-Cookie header value).

CookieSerializer

Converts a cookie value to and from its string form.

Member Type Description
read (raw: string) => Value Decode the percent-decoded cookie value. Throwing selects the default.
write (value: Value) => string Encode a value; the result is percent-encoded when written.

CookieFailure

Failure observed while synchronizing a cookie.

Member Type Description
code CookieErrorCode Which synchronization step failed.
name string Cookie name involved in the failure.
cause unknown Exact thrown value, or the rejected candidate for "invalid-value".

UseCookieOptions

Options for useCookie.

Member Type Description
path? string Path attribute.
domain? string Domain attribute.
maxAge? number Max-Age in integer seconds; 0 or less expires the cookie.
expires? Date Expires date.
sameSite? CookieSameSite SameSite policy. "none" requires secure.
secure? boolean Secure flag.
httpOnly? boolean HttpOnly flag. Only honored by server adapters: browsers ignore cookies with this flag written through document.cookie.
partitioned? boolean Partitioned flag (CHIPS). Requires secure.
default? Value Value used when the cookie is absent or unreadable. Also selects the serializer: strings are stored raw, everything else as JSON.
serializer? CookieSerializer<Value> Explicit serializer.
validate? (candidate: unknown) => candidate is Value Validation hook applied to every decoded value.
adapter? CookieAdapter | null Request/response adapter. Takes precedence over an injected adapter.
onError? (failure: CookieFailure) => void Observe failures. Failures never throw out of the composable.

CookieControls

Reactive state and controls returned by useCookie.

Member Type Description
state Ref<Value> Writable cookie value; assignments write the cookie.
supported Readonly<Ref<boolean>> Whether an adapter is attached. With the implicit document.cookie adapter inside a component it stays false until mounted, matching a server render without an adapter.
error Readonly<ShallowRef<CookieFailure | undefined>> Most recent failure, cleared by the next success.
refresh () => void Re-read the cookie from the adapter.
remove () => void Expire the cookie and restore the default value.