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