UNPKG

@routup/cookie

Version:
74 lines (73 loc) 2.12 kB
import { appendResponseHeader, defineCoreHandler } from "routup"; import { parse, serialize } from "cookie-es"; //#region src/utils.ts function parseRequestCookies(event, options) { return parse(event.headers.get("cookie") || "", options || {}); } function isObject(item) { return !!item && typeof item === "object" && !Array.isArray(item); } //#endregion //#region src/request.ts const CookieSymbol = Symbol.for("@routup/cookie:ReqCookie"); function useRequestCookies(event) { if (CookieSymbol in event.store) return event.store[CookieSymbol]; return {}; } function hasRequestCookies(event) { return CookieSymbol in event.store && isObject(event.store[CookieSymbol]); } function useRequestCookie(event, name) { return useRequestCookies(event)[name]; } function setRequestCookies(event, key, value) { if (isObject(key)) { event.store[CookieSymbol] = key; return; } const existing = CookieSymbol in event.store ? event.store[CookieSymbol] : {}; event.store[CookieSymbol] = { ...existing, [key]: value }; } //#endregion //#region src/handler.ts function createHandler(options) { return defineCoreHandler((event) => { if (hasRequestCookies(event)) return event.next(); setRequestCookies(event, parseRequestCookies(event, options)); return event.next(); }); } //#endregion //#region src/module.ts function cookie(options = {}) { return { name: "cookie", install: (router) => { router.use(createHandler(options.parse)); } }; } //#endregion //#region src/response.ts function setResponseCookie(event, name, value, options) { appendResponseHeader(event, "set-cookie", serialize(name, value, { path: "/", ...options || {} })); } /* istanbul ignore next */ function unsetResponseCookie(event, name, options) { setResponseCookie(event, name, "", { ...options || {}, maxAge: 0 }); } //#endregion //#region src/index.ts var src_default = cookie; //#endregion export { cookie, src_default as default, hasRequestCookies, isObject, parseRequestCookies, setRequestCookies, setResponseCookie, unsetResponseCookie, useRequestCookie, useRequestCookies }; //# sourceMappingURL=index.mjs.map