@routup/cookie
Version:
Cookie plugin for routup.
69 lines (62 loc) • 1.9 kB
JavaScript
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