datasquirel/package-shared/utils/backend/parseCookies.ts
2025-01-10 20:10:28 +01:00

53 lines
1.5 KiB
TypeScript

import { IncomingMessage } from "http";
/**
* Parse request cookies
* ===================================================
*
* @description This function takes in a request object and
* returns the cookies as a JS object
*/
export default function parseCookies({
request,
cookieString,
}: {
request?: IncomingMessage & { [s: string]: any };
cookieString?: string;
}): { [s: string]: string } {
try {
/** @type {string | undefined} */
const cookieStr = request
? request.headers.cookie
: cookieString
? cookieString
: undefined;
if (!cookieStr) return {};
if (!cookieStr || typeof cookieStr !== "string") {
return {};
}
const cookieSplitArray: string[] = cookieStr.split(";");
let cookieObject: { [k: string]: string } = {};
cookieSplitArray.forEach((keyValueString) => {
const [key, value] = keyValueString.split("=");
if (key && typeof key == "string") {
const parsedKey = key.replace(/^ +| +$/, "");
cookieObject[parsedKey] =
value && typeof value == "string"
? value.replace(/^ +| +$/, "")
: "";
}
});
return cookieObject;
} catch (error: any) {
console.log(`ERROR parsing cookies: ${error.message}`);
return {};
}
}