UNPKG

@routup/cookie

Version:
84 lines (75 loc) 2.28 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var routup = require('routup'); var cookieEs = require('cookie-es'); function parseRequestCookies(req, options) { return cookieEs.parse(req.headers[routup.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 routup.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) { routup.appendResponseHeader(res, routup.HeaderName.SET_COOKIE, cookieEs.serialize(name, value, { path: '/', ...options || {} })); } /* istanbul ignore next */ function unsetResponseCookie(res, name, options) { setResponseCookie(res, name, '', { ...options || {}, maxAge: 0 }); } exports.cookie = cookie; exports.createHandler = createHandler; exports.default = cookie; exports.hasRequestCookies = hasRequestCookies; exports.isObject = isObject; exports.parseRequestCookies = parseRequestCookies; exports.setRequestCookies = setRequestCookies; exports.setResponseCookie = setResponseCookie; exports.unsetResponseCookie = unsetResponseCookie; exports.useRequestCookie = useRequestCookie; exports.useRequestCookies = useRequestCookies; module.exports = Object.assign(exports.default, exports); //# sourceMappingURL=index.cjs.map