@routup/cookie
Version:
Cookie plugin for routup.
84 lines (75 loc) • 2.28 kB
JavaScript
;
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