@samual/cookie
Version:
Set and get cookies with optional type validation with a Standard Schema.
68 lines (59 loc) • 3.04 kB
TypeScript
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;