UNPKG

@routup/cookie

Version:
69 lines (62 loc) 1.9 kB
import { HeaderName, coreHandler, appendResponseHeader } from 'routup'; import { parse, serialize } from 'cookie-es'; function parseRequestCookies(req, options) { return parse(req.headers[HeaderName.COOKIE] || '', options || {}); } function isObject(item) { return !!item && typeof item === 'object' && !Array.isArray(item); } const CookieSymbol = Symbol.for('ReqCookie'); function useRequestCookies(req) { if (CookieSymbol in req) { return req[CookieSymbol]; } return {}; } function hasRequestCookies(req) { return CookieSymbol in req && isObject(req[CookieSymbol]); } function useRequestCookie(req, name) { return useRequestCookies(req)[name]; } function setRequestCookies(req, key, value) { if (isObject(key)) { req[CookieSymbol] = key; return; } req[CookieSymbol] = { [key]: value }; } function createHandler(options) { return coreHandler((req, res, next)=>{ if (hasRequestCookies(req)) { next(); return; } setRequestCookies(req, parseRequestCookies(req, options)); next(); }); } function cookie(options = {}) { return { name: 'cookie', install: (router)=>{ router.use(createHandler(options.parse)); } }; } function setResponseCookie(res, name, value, options) { appendResponseHeader(res, HeaderName.SET_COOKIE, serialize(name, value, { path: '/', ...options || {} })); } /* istanbul ignore next */ function unsetResponseCookie(res, name, options) { setResponseCookie(res, name, '', { ...options || {}, maxAge: 0 }); } export { cookie, createHandler, cookie as default, hasRequestCookies, isObject, parseRequestCookies, setRequestCookies, setResponseCookie, unsetResponseCookie, useRequestCookie, useRequestCookies }; //# sourceMappingURL=index.mjs.map