Last active
January 23, 2025 10:54
-
-
Save rendro/525bbbf85e84fa9042c2 to your computer and use it in GitHub Desktop.
Parse document.cookie into object
+1, thanks for the helpful code!
"What ain't tested, ain't working"
The only implementation in the comments that passes most of the tests from jshttp/cookie is the one from @kapouer: https://gist.github.com/rendro/525bbbf85e84fa9042c2?permalink_comment_id=3084097#gistcomment-3084097
So I've fixed the remaining failing tests and refactored a bit the code.
Here the result:
function decode(str: string) {
try {
return decodeURIComponent(str);
} catch {
return str;
}
}
/**
* Parses a `Cookie` HTTP header value or `document.cookie` into an object.
*
* Implementation adapted from https://gist.github.com/rendro/525bbbf85e84fa9042c2?permalink_comment_id=3084097#gistcomment-3084097
*/
export function parseCookie(cookies: string) {
const obj = Object.create(null) as Record<string, string | undefined>;
const list = cookies.split(';');
for (const cookie of list) {
if (cookie === '') continue;
const eq = cookie.indexOf('=');
const key = (eq > 0 ? cookie.slice(0, eq) : cookie).trim();
const value = eq > 0 ? decode(cookie.slice(eq + 1).trim()) : undefined;
if (!(key in obj)) {
obj[key] = value;
}
}
return obj;
}
You can retrieve this implementation + all the tests and benchs in this gist: https://gist.github.com/tkrotoff/a1f83070067300174fbe9f35d0075dd3
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
https://stackoverflow.com/a/64472572/8784402