Last active
January 23, 2025 10:54
-
-
Save rendro/525bbbf85e84fa9042c2 to your computer and use it in GitHub Desktop.
Parse document.cookie into object
"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
+1, thanks for the helpful code!