@remix-run/headers
Version:
A toolkit for working with HTTP headers in JavaScript
124 lines (106 loc) • 3.12 kB
text/typescript
import { type HeaderValue } from './header-value.ts';
import { parseParams, quote } from './param-values.ts';
import { isIterable } from './utils.ts';
export type CookieInit = Iterable<[string, string]> | Record<string, string>;
/**
* The value of a `Cookie` HTTP header.
*
* [MDN `Cookie` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie)
*
* [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc6265#section-4.2)
*/
export class Cookie implements HeaderValue, Iterable<[string, string]> {
constructor(init?: string | CookieInit) {
this.
if (init) {
if (typeof init === 'string') {
let params = parseParams(init);
for (let [name, value] of params) {
this.
}
} else if (isIterable(init)) {
for (let [name, value] of init) {
this.
}
} else {
for (let name of Object.getOwnPropertyNames(init)) {
this.
}
}
}
}
/**
* An array of the names of the cookies in the header.
*/
get names(): string[] {
return Array.from(this.
}
/**
* An array of the values of the cookies in the header.
*/
get values(): string[] {
return Array.from(this.
}
/**
* The number of cookies in the header.
*/
get size(): number {
return this.
}
/**
* Gets the value of a cookie with the given name from the header.
* @param name The name of the cookie.
* @returns The value of the cookie, or `null` if the cookie does not exist.
*/
get(name: string): string | null {
return this.
}
/**
* Sets a cookie with the given name and value in the header.
* @param name The name of the cookie.
* @param value The value of the cookie.
*/
set(name: string, value: string): void {
this.
}
/**
* Removes a cookie with the given name from the header.
* @param name The name of the cookie.
*/
delete(name: string): void {
this.
}
/**
* True if a cookie with the given name exists in the header.
* @param name The name of the cookie.
* @returns True if a cookie with the given name exists in the header.
*/
has(name: string): boolean {
return this.
}
/**
* Removes all cookies from the header.
*/
clear(): void {
this.
}
entries(): IterableIterator<[string, string]> {
return this.
}
[](): IterableIterator<[string, string]> {
return this.entries();
}
forEach(callback: (name: string, value: string, header: Cookie) => void, thisArg?: any): void {
for (let [name, value] of this) {
callback.call(thisArg, name, value, this);
}
}
toString(): string {
let pairs: string[] = [];
for (let [name, value] of this.
pairs.push(`${name}=${quote(value)}`);
}
return pairs.join('; ');
}
}