UNPKG

@samual/cookie

Version:

Set and get cookies with optional type validation with a Standard Schema.

68 lines (59 loc) 3.04 kB
import { StandardSchemaV1 } from "@standard-schema/spec"; export type CookieOptions<T extends StandardSchemaV1> = { name: string; schema: T; attributes?: `;${string}` | undefined; rawName?: boolean | undefined; rawValue?: boolean | undefined; }; /** Make a {@link CookieOptions} object for use with {@link getCookie}, {@link setCookie}, and {@link deleteCookie}. The schema should be compatible with [JSON](https://developer.mozilla.org/en-US/docs/Glossary/JSON) meaning only [`null`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/null), [boolean](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#boolean_type)s, [number](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#number_type)s, [string](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#string_type)s, [array](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array)s, and [object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#objects)s can be used. @example const MyCookie = makeCookieOptions({ name: "<unique name>", schema: z.object({ foo: z.string() }) }) */ export declare const makeCookieOptions: <T extends StandardSchemaV1>(options: CookieOptions<T>) => CookieOptions<T>; /** @example // client const MyCookie = makeCookieOptions({ name: "<unique name>", schema: z.object({ foo: z.string() }) }) const cookies = parseCookies(document.cookie) const myCookie = getCookie(cookies, MyCookie) console.log(myCookie) // { foo: "bar" } @example // server const MyCookie = makeCookieOptions({ name: "<unique name>", schema: z.object({ foo: z.string() }) }) const cookies = parseCookies(request.headers.get("cookie")) const myCookie = getCookie(cookies, MyCookie) console.log(myCookie) // { foo: "bar" } @param cookies Returned value of {@link parseCookies}. */ export declare function getCookie<T extends StandardSchemaV1>(cookies: Map<string, string>, options: CookieOptions<T>): StandardSchemaV1.InferOutput<T> | undefined; /** @example // client const MyCookie = makeCookieOptions({ name: "<unique name>", schema: z.object({ foo: z.string() }) }) document.cookie = setCookie(MyCookie, { foo: "bar" }) @example // server const MyCookie = makeCookieOptions({ name: "<unique name>", schema: z.object({ foo: z.string() }) }) response.headers.set("set-cookie", setCookie(MyCookie, { foo: "bar" })) */ export declare function setCookie<T extends StandardSchemaV1>(options: CookieOptions<T>, value: StandardSchemaV1.InferInput<T> | undefined): string; /** @example // client const MyCookie = makeCookieOptions({ name: "<unique name>", schema: z.object({ foo: z.string() }) }) document.cookie = deleteCookie(MyCookie) @example // server const MyCookie = makeCookieOptions({ name: "<unique name>", schema: z.object({ foo: z.string() }) }) response.headers.set("set-cookie", deleteCookie(MyCookie)) */ export declare const deleteCookie: <T extends StandardSchemaV1>(options: CookieOptions<T>) => string;