{ "version": 3, "sources": ["../src/headers.ts", "../src/lib/param-values.ts", "../src/lib/utils.ts", "../src/lib/accept.ts", "../src/lib/accept-encoding.ts", "../src/lib/accept-language.ts", "../src/lib/cache-control.ts", "../src/lib/content-disposition.ts", "../src/lib/content-type.ts", "../src/lib/cookie.ts", "../src/lib/if-none-match.ts", "../src/lib/set-cookie.ts", "../src/lib/header-names.ts", "../src/lib/super-headers.ts"], "sourcesContent": ["export { type AcceptInit, Accept } from './lib/accept.ts';\nexport { type AcceptEncodingInit, AcceptEncoding } from './lib/accept-encoding.ts';\nexport { type AcceptLanguageInit, AcceptLanguage } from './lib/accept-language.ts';\nexport { type CacheControlInit, CacheControl } from './lib/cache-control.ts';\nexport { type ContentDispositionInit, ContentDisposition } from './lib/content-disposition.ts';\nexport { type ContentTypeInit, ContentType } from './lib/content-type.ts';\nexport { type CookieInit, Cookie } from './lib/cookie.ts';\nexport { type IfNoneMatchInit, IfNoneMatch } from './lib/if-none-match.ts';\nexport { type SetCookieInit, SetCookie } from './lib/set-cookie.ts';\n\nexport {\n type SuperHeadersInit,\n SuperHeaders,\n SuperHeaders as default,\n} from './lib/super-headers.ts';\n", "export function parseParams(\n input: string,\n delimiter: ';' | ',' = ';',\n): [string, string | undefined][] {\n // This parser splits on the delimiter and unquotes any quoted values\n // like `filename=\"the\\\\ filename.txt\"`.\n let parser =\n delimiter === ';'\n ? /(?:^|;)\\s*([^=;\\s]+)(\\s*=\\s*(?:\"((?:[^\"\\\\]|\\\\.)*)\"|((?:[^;]|\\\\\\;)+))?)?/g\n : /(?:^|,)\\s*([^=,\\s]+)(\\s*=\\s*(?:\"((?:[^\"\\\\]|\\\\.)*)\"|((?:[^,]|\\\\\\,)+))?)?/g;\n\n let params: [string, string | undefined][] = [];\n\n let match;\n while ((match = parser.exec(input)) !== null) {\n let key = match[1].trim();\n\n let value: string | undefined;\n if (match[2]) {\n value = (match[3] || match[4] || '').replace(/\\\\(.)/g, '$1').trim();\n }\n\n params.push([key, value]);\n }\n\n return params;\n}\n\nexport function quote(value: string): string {\n if (value.includes('\"') || value.includes(';') || value.includes(' ')) {\n return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\n }\n return value;\n}\n", "export function capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n}\n\nexport function isIterable(value: any): value is Iterable {\n return value != null && typeof value[Symbol.iterator] === 'function';\n}\n\nexport function isValidDate(date: unknown): boolean {\n return date instanceof Date && !isNaN(date.getTime());\n}\n\nexport function quoteEtag(tag: string): string {\n return tag === '*' ? tag : /^(W\\/)?\".*\"$/.test(tag) ? tag : `\"${tag}\"`;\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams } from './param-values.ts';\nimport { isIterable } from './utils.ts';\n\nexport type AcceptInit = Iterable | Record;\n\n/**\n * The value of a `Accept` HTTP header.\n *\n * [MDN `Accept` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.2)\n */\nexport class Accept implements HeaderValue, Iterable<[string, number]> {\n #map: Map;\n\n constructor(init?: string | AcceptInit) {\n this.#map = new Map();\n\n if (init) {\n if (typeof init === 'string') {\n for (let piece of init.split(/\\s*,\\s*/)) {\n let params = parseParams(piece);\n if (params.length < 1) continue;\n\n let mediaType = params[0][0];\n let weight = 1;\n\n for (let i = 1; i < params.length; i++) {\n let [key, value] = params[i];\n if (key === 'q') {\n weight = Number(value);\n break;\n }\n }\n\n this.#map.set(mediaType.toLowerCase(), weight);\n }\n } else if (isIterable(init)) {\n for (let mediaType of init) {\n if (Array.isArray(mediaType)) {\n this.#map.set(mediaType[0].toLowerCase(), mediaType[1]);\n } else {\n this.#map.set(mediaType.toLowerCase(), 1);\n }\n }\n } else {\n for (let mediaType of Object.getOwnPropertyNames(init)) {\n this.#map.set(mediaType.toLowerCase(), init[mediaType]);\n }\n }\n\n this.#sort();\n }\n }\n\n #sort() {\n this.#map = new Map([...this.#map].sort((a, b) => b[1] - a[1]));\n }\n\n /**\n * An array of all media types in the header.\n */\n get mediaTypes(): string[] {\n return Array.from(this.#map.keys());\n }\n\n /**\n * An array of all weights (q values) in the header.\n */\n get weights(): number[] {\n return Array.from(this.#map.values());\n }\n\n /**\n * The number of media types in the `Accept` header.\n */\n get size(): number {\n return this.#map.size;\n }\n\n /**\n * Returns `true` if the header matches the given media type (i.e. it is \"acceptable\").\n * @param mediaType The media type to check.\n * @returns `true` if the media type is acceptable, `false` otherwise.\n */\n accepts(mediaType: string): boolean {\n return this.getWeight(mediaType) > 0;\n }\n\n /**\n * Gets the weight of a given media type. Also supports wildcards, so e.g. `text/*` will match `text/html`.\n * @param mediaType The media type to get the weight of.\n * @returns The weight of the media type.\n */\n getWeight(mediaType: string): number {\n let [type, subtype] = mediaType.toLowerCase().split('/');\n\n for (let [key, value] of this) {\n let [t, s] = key.split('/');\n if (\n (t === type || t === '*' || type === '*') &&\n (s === subtype || s === '*' || subtype === '*')\n ) {\n return value;\n }\n }\n\n return 0;\n }\n\n /**\n * Returns the most preferred media type from the given list of media types.\n * @param mediaTypes The list of media types to choose from.\n * @returns The most preferred media type or `null` if none match.\n */\n getPreferred(mediaTypes: string[]): string | null {\n let sorted = mediaTypes\n .map((mediaType) => [mediaType, this.getWeight(mediaType)] as const)\n .sort((a, b) => b[1] - a[1]);\n\n let first = sorted[0];\n\n return first !== undefined && first[1] > 0 ? first[0] : null;\n }\n\n /**\n * Returns the weight of a media type. If it is not in the header verbatim, this returns `null`.\n * @param mediaType The media type to get the weight of.\n * @returns The weight of the media type, or `null` if it is not in the header.\n */\n get(mediaType: string): number | null {\n return this.#map.get(mediaType.toLowerCase()) ?? null;\n }\n\n /**\n * Sets a media type with the given weight.\n * @param mediaType The media type to set.\n * @param weight The weight of the media type. Defaults to 1.\n */\n set(mediaType: string, weight = 1): void {\n this.#map.set(mediaType.toLowerCase(), weight);\n this.#sort();\n }\n\n /**\n * Removes the given media type from the header.\n * @param mediaType The media type to remove.\n */\n delete(mediaType: string): void {\n this.#map.delete(mediaType.toLowerCase());\n }\n\n /**\n * Checks if a media type is in the header.\n * @param mediaType The media type to check.\n * @returns `true` if the media type is in the header (verbatim), `false` otherwise.\n */\n has(mediaType: string): boolean {\n return this.#map.has(mediaType.toLowerCase());\n }\n\n /**\n * Removes all media types from the header.\n */\n clear(): void {\n this.#map.clear();\n }\n\n entries(): IterableIterator<[string, number]> {\n return this.#map.entries();\n }\n\n [Symbol.iterator](): IterableIterator<[string, number]> {\n return this.entries();\n }\n\n forEach(\n callback: (mediaType: string, weight: number, header: Accept) => void,\n thisArg?: any,\n ): void {\n for (let [mediaType, weight] of this) {\n callback.call(thisArg, mediaType, weight, this);\n }\n }\n\n toString(): string {\n let pairs: string[] = [];\n\n for (let [mediaType, weight] of this.#map) {\n pairs.push(`${mediaType}${weight === 1 ? '' : `;q=${weight}`}`);\n }\n\n return pairs.join(',');\n }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams } from './param-values.ts';\nimport { isIterable } from './utils.ts';\n\nexport type AcceptEncodingInit = Iterable | Record;\n\n/**\n * The value of a `Accept-Encoding` HTTP header.\n *\n * [MDN `Accept-Encoding` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.4)\n */\nexport class AcceptEncoding implements HeaderValue, Iterable<[string, number]> {\n #map: Map;\n\n constructor(init?: string | AcceptEncodingInit) {\n this.#map = new Map();\n\n if (init) {\n if (typeof init === 'string') {\n for (let piece of init.split(/\\s*,\\s*/)) {\n let params = parseParams(piece);\n if (params.length < 1) continue;\n\n let encoding = params[0][0];\n let weight = 1;\n\n for (let i = 1; i < params.length; i++) {\n let [key, value] = params[i];\n if (key === 'q') {\n weight = Number(value);\n break;\n }\n }\n\n this.#map.set(encoding.toLowerCase(), weight);\n }\n } else if (isIterable(init)) {\n for (let value of init) {\n if (Array.isArray(value)) {\n this.#map.set(value[0].toLowerCase(), value[1]);\n } else {\n this.#map.set(value.toLowerCase(), 1);\n }\n }\n } else {\n for (let encoding of Object.getOwnPropertyNames(init)) {\n this.#map.set(encoding.toLowerCase(), init[encoding]);\n }\n }\n\n this.#sort();\n }\n }\n\n #sort() {\n this.#map = new Map([...this.#map].sort((a, b) => b[1] - a[1]));\n }\n\n /**\n * An array of all encodings in the header.\n */\n get encodings(): string[] {\n return Array.from(this.#map.keys());\n }\n\n /**\n * An array of all weights (q values) in the header.\n */\n get weights(): number[] {\n return Array.from(this.#map.values());\n }\n\n /**\n * The number of encodings in the header.\n */\n get size(): number {\n return this.#map.size;\n }\n\n /**\n * Returns `true` if the header matches the given encoding (i.e. it is \"acceptable\").\n * @param encoding The encoding to check.\n * @returns `true` if the encoding is acceptable, `false` otherwise.\n */\n accepts(encoding: string): boolean {\n return encoding.toLowerCase() === 'identity' || this.getWeight(encoding) > 0;\n }\n\n /**\n * Gets the weight an encoding. Performs wildcard matching so `*` matches all encodings.\n * @param encoding The encoding to get.\n * @returns The weight of the encoding, or `0` if it is not in the header.\n */\n getWeight(encoding: string): number {\n let lower = encoding.toLowerCase();\n\n for (let [enc, weight] of this) {\n if (enc === lower || enc === '*' || lower === '*') {\n return weight;\n }\n }\n\n return 0;\n }\n\n /**\n * Returns the most preferred encoding from the given list of encodings.\n * @param encodings The encodings to choose from.\n * @returns The most preferred encoding or `null` if none match.\n */\n getPreferred(encodings: string[]): string | null {\n let sorted = encodings\n .map((encoding) => [encoding, this.getWeight(encoding)] as const)\n .sort((a, b) => b[1] - a[1]);\n\n let first = sorted[0];\n\n return first !== undefined && first[1] > 0 ? first[0] : null;\n }\n\n /**\n * Gets the weight of an encoding. If it is not in the header verbatim, this returns `null`.\n * @param encoding The encoding to get.\n * @returns The weight of the encoding, or `null` if it is not in the header.\n */\n get(encoding: string): number | null {\n return this.#map.get(encoding.toLowerCase()) ?? null;\n }\n\n /**\n * Sets an encoding with the given weight.\n * @param encoding The encoding to set.\n * @param weight The weight of the encoding. Defaults to 1.\n */\n set(encoding: string, weight = 1): void {\n this.#map.set(encoding.toLowerCase(), weight);\n this.#sort();\n }\n\n /**\n * Removes the given encoding from the header.\n * @param encoding The encoding to remove.\n */\n delete(encoding: string): void {\n this.#map.delete(encoding.toLowerCase());\n }\n\n /**\n * Checks if the header contains a given encoding.\n * @param encoding The encoding to check.\n * @returns `true` if the encoding is in the header, `false` otherwise.\n */\n has(encoding: string): boolean {\n return this.#map.has(encoding.toLowerCase());\n }\n\n /**\n * Removes all encodings from the header.\n */\n clear(): void {\n this.#map.clear();\n }\n\n entries(): IterableIterator<[string, number]> {\n return this.#map.entries();\n }\n\n [Symbol.iterator](): IterableIterator<[string, number]> {\n return this.entries();\n }\n\n forEach(\n callback: (encoding: string, weight: number, header: AcceptEncoding) => void,\n thisArg?: any,\n ): void {\n for (let [encoding, weight] of this) {\n callback.call(thisArg, encoding, weight, this);\n }\n }\n\n toString(): string {\n let pairs: string[] = [];\n\n for (let [encoding, weight] of this.#map) {\n pairs.push(`${encoding}${weight === 1 ? '' : `;q=${weight}`}`);\n }\n\n return pairs.join(',');\n }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams } from './param-values.ts';\nimport { isIterable } from './utils.ts';\n\nexport type AcceptLanguageInit = Iterable | Record;\n\n/**\n * The value of a `Accept-Language` HTTP header.\n *\n * [MDN `Accept-Language` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.5)\n */\nexport class AcceptLanguage implements HeaderValue, Iterable<[string, number]> {\n #map: Map;\n\n constructor(init?: string | AcceptLanguageInit) {\n this.#map = new Map();\n\n if (init) {\n if (typeof init === 'string') {\n for (let piece of init.split(/\\s*,\\s*/)) {\n let params = parseParams(piece);\n if (params.length < 1) continue;\n\n let language = params[0][0];\n let weight = 1;\n\n for (let i = 1; i < params.length; i++) {\n let [key, value] = params[i];\n if (key === 'q') {\n weight = Number(value);\n break;\n }\n }\n\n this.#map.set(language.toLowerCase(), weight);\n }\n } else if (isIterable(init)) {\n for (let value of init) {\n if (Array.isArray(value)) {\n this.#map.set(value[0].toLowerCase(), value[1]);\n } else {\n this.#map.set(value.toLowerCase(), 1);\n }\n }\n } else {\n for (let language of Object.getOwnPropertyNames(init)) {\n this.#map.set(language.toLowerCase(), init[language]);\n }\n }\n\n this.#sort();\n }\n }\n\n #sort() {\n this.#map = new Map([...this.#map].sort((a, b) => b[1] - a[1]));\n }\n\n /**\n * An array of all languages in the header.\n */\n get languages(): string[] {\n return Array.from(this.#map.keys());\n }\n\n /**\n * An array of all weights (q values) in the header.\n */\n get weights(): number[] {\n return Array.from(this.#map.values());\n }\n\n /**\n * The number of languages in the header.\n */\n get size(): number {\n return this.#map.size;\n }\n\n /**\n * Returns `true` if the header matches the given language (i.e. it is \"acceptable\").\n * @param language The locale identifier of the language to check.\n * @returns `true` if the language is acceptable, `false` otherwise.\n */\n accepts(language: string): boolean {\n return this.getWeight(language) > 0;\n }\n\n /**\n * Gets the weight of a language with the given locale identifier. Performs wildcard and subtype\n * matching, so `en` matches `en-US` and `en-GB`, and `*` matches all languages.\n * @param language The locale identifier of the language to get.\n * @returns The weight of the language, or `0` if it is not in the header.\n */\n getWeight(language: string): number {\n let [base, subtype] = language.toLowerCase().split('-');\n\n for (let [key, value] of this) {\n let [b, s] = key.split('-');\n if (\n (b === base || b === '*' || base === '*') &&\n (s === subtype || s === undefined || subtype === undefined)\n ) {\n return value;\n }\n }\n\n return 0;\n }\n\n /**\n * Returns the most preferred language from the given list of languages.\n * @param languages The locale identifiers of the languages to choose from.\n * @returns The most preferred language or `null` if none match.\n */\n getPreferred(languages: string[]): string | null {\n let sorted = languages\n .map((language) => [language, this.getWeight(language)] as const)\n .sort((a, b) => b[1] - a[1]);\n\n let first = sorted[0];\n\n return first !== undefined && first[1] > 0 ? first[0] : null;\n }\n\n /**\n * Gets the weight of a language with the given locale identifier. If it is not in the header\n * verbatim, this returns `null`.\n * @param language The locale identifier of the language to get.\n * @returns The weight of the language, or `null` if it is not in the header.\n */\n get(language: string): number | null {\n return this.#map.get(language.toLowerCase()) ?? null;\n }\n\n /**\n * Sets a language with the given weight.\n * @param language The locale identifier of the language to set.\n * @param weight The weight of the language. Defaults to 1.\n */\n set(language: string, weight = 1): void {\n this.#map.set(language.toLowerCase(), weight);\n this.#sort();\n }\n\n /**\n * Removes a language with the given locale identifier.\n * @param language The locale identifier of the language to remove.\n */\n delete(language: string): void {\n this.#map.delete(language.toLowerCase());\n }\n\n /**\n * Checks if the header contains a language with the given locale identifier.\n * @param language The locale identifier of the language to check.\n * @returns `true` if the language is in the header, `false` otherwise.\n */\n has(language: string): boolean {\n return this.#map.has(language.toLowerCase());\n }\n\n /**\n * Removes all languages from the header.\n */\n clear(): void {\n this.#map.clear();\n }\n\n entries(): IterableIterator<[string, number]> {\n return this.#map.entries();\n }\n\n [Symbol.iterator](): IterableIterator<[string, number]> {\n return this.entries();\n }\n\n forEach(\n callback: (language: string, weight: number, header: AcceptLanguage) => void,\n thisArg?: any,\n ): void {\n for (let [language, weight] of this) {\n callback.call(thisArg, language, weight, this);\n }\n }\n\n toString(): string {\n let pairs: string[] = [];\n\n for (let [language, weight] of this.#map) {\n pairs.push(`${language}${weight === 1 ? '' : `;q=${weight}`}`);\n }\n\n return pairs.join(',');\n }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams } from './param-values.ts';\n\n// Taken from https://github.com/jjenzz/pretty-cache-header by jjenzz\n// License: MIT https://github.com/jjenzz/pretty-cache-header/blob/main/LICENSE\nexport interface CacheControlInit {\n /**\n * The `max-age=N` **request directive** indicates that the client allows a stored response that\n * is generated on the origin server within _N_ seconds \u2014 where _N_ may be any non-negative\n * integer (including `0`).\n *\n * The `max-age=N` **response directive** indicates that the response remains\n * [fresh](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age)\n * until _N_ seconds after the response is generated.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#max-age)\n */\n maxAge?: number;\n /**\n * The `max-stale=N` **request directive** indicates that the client allows a stored response\n * that is [stale](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age)\n * within _N_ seconds.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#max-stale)\n */\n maxStale?: number;\n /**\n * The `min-fresh=N` **request directive** indicates that the client allows a stored response\n * that is [fresh](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age)\n * for at least _N_ seconds.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#min-fresh)\n */\n minFresh?: number;\n /**\n * The `s-maxage` **response directive** also indicates how long the response is\n * [fresh](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age) for (similar to `max-age`) \u2014\n * but it is specific to shared caches, and they will ignore `max-age` when it is present.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#s-maxage)\n */\n sMaxage?: number;\n /**\n * The `no-cache` **request directive** asks caches to validate the response with the origin\n * server before reuse. If you want caches to always check for content updates while reusing\n * stored content, `no-cache` is the directive to use.\n *\n * The `no-cache` **response directive** indicates that the response can be stored in caches, but\n * the response must be validated with the origin server before each reuse, even when the cache\n * is disconnected from the origin server.\n *\n * `no-cache` allows clients to request the most up-to-date response even if the cache has a\n * [fresh](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age)\n * response.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#no-cache)\n */\n noCache?: true;\n /**\n * The `no-store` **request directive** allows a client to request that caches refrain from\n * storing the request and corresponding response \u2014 even if the origin server's response could\n * be stored.\n *\n * The `no-store` **response directive** indicates that any caches of any kind (private or shared)\n * should not store this response.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#no-store)\n */\n noStore?: true;\n /**\n * `no-transform` indicates that any intermediary (regardless of whether it implements a cache)\n * shouldn't transform the response contents.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#no-transform)\n */\n noTransform?: true;\n /**\n * The client indicates that cache should obtain an already-cached response. If a cache has\n * stored a response, it's reused.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#only-if-cached)\n */\n onlyIfCached?: true;\n /**\n * The `must-revalidate` **response directive** indicates that the response can be stored in\n * caches and can be reused while [fresh](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age).\n * If the response becomes [stale](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age),\n * it must be validated with the origin server before reuse.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#must-revalidate)\n */\n mustRevalidate?: true;\n /**\n * The `proxy-revalidate` **response directive** is the equivalent of `must-revalidate`, but\n * specifically for shared caches only.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#proxy-revalidate)\n */\n proxyRevalidate?: true;\n /**\n * The `must-understand` **response directive** indicates that a cache should store the response\n * only if it understands the requirements for caching based on status code.\n *\n * `must-understand` should be coupled with `no-store` for fallback behavior.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#must-understand)\n */\n mustUnderstand?: true;\n /**\n * The `private` **response directive** indicates that the response can be stored only in a\n * private cache (e.g. local caches in browsers).\n *\n * You should add the `private` directive for user-personalized content, especially for responses\n * received after login and for sessions managed via cookies.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#private)\n */\n private?: true;\n /**\n * The `public` **response directive** indicates that the response can be stored in a shared\n * cache. Responses for requests with `Authorization` header fields must not be stored in a\n * shared cache; however, the `public` directive will cause such responses to be stored in a\n * shared cache.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#public)\n */\n public?: true;\n /**\n * The `immutable` **response directive** indicates that the response will not be updated while\n * it's [fresh](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age).\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#public)\n */\n immutable?: true;\n /**\n * The `stale-while-revalidate` **response directive** indicates that the cache could reuse a\n * stale response while it revalidates it to a cache.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#stale-while-revalidate)\n */\n staleWhileRevalidate?: number;\n /**\n * The `stale-if-error` **response directive** indicates that the cache can reuse a\n * [stale response](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age)\n * when an upstream server generates an error, or when the error is generated locally. Here, an\n * error is considered any response with a status code of 500, 502, 503, or 504.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#stale-if-error)\n */\n staleIfError?: number;\n}\n\n/**\n * The value of a `Cache-Control` HTTP header.\n *\n * [MDN `Cache-Control` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7234#section-5.2)\n */\nexport class CacheControl implements HeaderValue, CacheControlInit {\n maxAge?: number;\n maxStale?: number;\n minFresh?: number;\n sMaxage?: number;\n noCache?: true;\n noStore?: true;\n noTransform?: true;\n onlyIfCached?: true;\n mustRevalidate?: true;\n proxyRevalidate?: true;\n mustUnderstand?: true;\n private?: true;\n public?: true;\n immutable?: true;\n staleWhileRevalidate?: number;\n staleIfError?: number;\n\n constructor(init?: string | CacheControlInit) {\n if (init) {\n if (typeof init === 'string') {\n let params = parseParams(init, ',');\n if (params.length > 0) {\n for (let [name, value] of params) {\n switch (name) {\n case 'max-age':\n this.maxAge = Number(value);\n break;\n case 'max-stale':\n this.maxStale = Number(value);\n break;\n case 'min-fresh':\n this.minFresh = Number(value);\n break;\n case 's-maxage':\n this.sMaxage = Number(value);\n break;\n case 'no-cache':\n this.noCache = true;\n break;\n case 'no-store':\n this.noStore = true;\n break;\n case 'no-transform':\n this.noTransform = true;\n break;\n case 'only-if-cached':\n this.onlyIfCached = true;\n break;\n case 'must-revalidate':\n this.mustRevalidate = true;\n break;\n case 'proxy-revalidate':\n this.proxyRevalidate = true;\n break;\n case 'must-understand':\n this.mustUnderstand = true;\n break;\n case 'private':\n this.private = true;\n break;\n case 'public':\n this.public = true;\n break;\n case 'immutable':\n this.immutable = true;\n break;\n case 'stale-while-revalidate':\n this.staleWhileRevalidate = Number(value);\n break;\n case 'stale-if-error':\n this.staleIfError = Number(value);\n break;\n }\n }\n }\n } else {\n this.maxAge = init.maxAge;\n this.maxStale = init.maxStale;\n this.minFresh = init.minFresh;\n this.sMaxage = init.sMaxage;\n this.noCache = init.noCache;\n this.noStore = init.noStore;\n this.noTransform = init.noTransform;\n this.onlyIfCached = init.onlyIfCached;\n this.mustRevalidate = init.mustRevalidate;\n this.proxyRevalidate = init.proxyRevalidate;\n this.mustUnderstand = init.mustUnderstand;\n this.private = init.private;\n this.public = init.public;\n this.immutable = init.immutable;\n this.staleWhileRevalidate = init.staleWhileRevalidate;\n this.staleIfError = init.staleIfError;\n }\n }\n }\n\n toString(): string {\n let parts = [];\n\n if (this.public) {\n parts.push('public');\n }\n if (this.private) {\n parts.push('private');\n }\n if (typeof this.maxAge === 'number') {\n parts.push(`max-age=${this.maxAge}`);\n }\n if (typeof this.sMaxage === 'number') {\n parts.push(`s-maxage=${this.sMaxage}`);\n }\n if (this.noCache) {\n parts.push('no-cache');\n }\n if (this.noStore) {\n parts.push('no-store');\n }\n if (this.noTransform) {\n parts.push('no-transform');\n }\n if (this.onlyIfCached) {\n parts.push('only-if-cached');\n }\n if (this.mustRevalidate) {\n parts.push('must-revalidate');\n }\n if (this.proxyRevalidate) {\n parts.push('proxy-revalidate');\n }\n if (this.mustUnderstand) {\n parts.push('must-understand');\n }\n if (this.immutable) {\n parts.push('immutable');\n }\n if (typeof this.staleWhileRevalidate === 'number') {\n parts.push(`stale-while-revalidate=${this.staleWhileRevalidate}`);\n }\n if (typeof this.staleIfError === 'number') {\n parts.push(`stale-if-error=${this.staleIfError}`);\n }\n if (typeof this.maxStale === 'number') {\n parts.push(`max-stale=${this.maxStale}`);\n }\n if (typeof this.minFresh === 'number') {\n parts.push(`min-fresh=${this.minFresh}`);\n }\n\n return parts.join(', ');\n }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams, quote } from './param-values.ts';\n\nexport interface ContentDispositionInit {\n /**\n * For file uploads, the name of the file that the user selected.\n */\n filename?: string;\n /**\n * For file uploads, the name of the file that the user selected, encoded as a [RFC 8187](https://tools.ietf.org/html/rfc8187) `filename*` parameter.\n * This parameter allows non-ASCII characters in filenames, and specifies the character encoding.\n */\n filenameSplat?: string;\n /**\n * For `multipart/form-data` requests, the name of the `` field associated with this content.\n */\n name?: string;\n /**\n * The disposition type of the content, such as `attachment` or `inline`.\n */\n type?: string;\n}\n\n/**\n * The value of a `Content-Disposition` HTTP header.\n *\n * [MDN `Content-Disposition` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition)\n *\n * [RFC 6266](https://tools.ietf.org/html/rfc6266)\n */\nexport class ContentDisposition implements HeaderValue, ContentDispositionInit {\n filename?: string;\n filenameSplat?: string;\n name?: string;\n type?: string;\n\n constructor(init?: string | ContentDispositionInit) {\n if (init) {\n if (typeof init === 'string') {\n let params = parseParams(init);\n if (params.length > 0) {\n this.type = params[0][0];\n for (let [name, value] of params.slice(1)) {\n if (name === 'filename') {\n this.filename = value;\n } else if (name === 'filename*') {\n this.filenameSplat = value;\n } else if (name === 'name') {\n this.name = value;\n }\n }\n }\n } else {\n this.filename = init.filename;\n this.filenameSplat = init.filenameSplat;\n this.name = init.name;\n this.type = init.type;\n }\n }\n }\n\n /**\n * The preferred filename for the content, using the `filename*` parameter if present, falling back to the `filename` parameter.\n *\n * From [RFC 6266](https://tools.ietf.org/html/rfc6266):\n *\n * Many user agent implementations predating this specification do not understand the \"filename*\" parameter.\n * Therefore, when both \"filename\" and \"filename*\" are present in a single header field value, recipients SHOULD\n * pick \"filename*\" and ignore \"filename\". This way, senders can avoid special-casing specific user agents by\n * sending both the more expressive \"filename*\" parameter, and the \"filename\" parameter as fallback for legacy recipients.\n */\n get preferredFilename(): string | undefined {\n let filenameSplat = this.filenameSplat;\n if (filenameSplat) {\n let decodedFilename = decodeFilenameSplat(filenameSplat);\n if (decodedFilename) return decodedFilename;\n }\n\n return this.filename;\n }\n\n toString(): string {\n if (!this.type) {\n return '';\n }\n\n let parts = [this.type];\n\n if (this.name) {\n parts.push(`name=${quote(this.name)}`);\n }\n if (this.filename) {\n parts.push(`filename=${quote(this.filename)}`);\n }\n if (this.filenameSplat) {\n parts.push(`filename*=${quote(this.filenameSplat)}`);\n }\n\n return parts.join('; ');\n }\n}\n\nfunction decodeFilenameSplat(value: string): string | null {\n let match = value.match(/^([\\w-]+)'([^']*)'(.+)$/);\n if (!match) return null;\n\n let [, charset, , encodedFilename] = match;\n\n let decodedFilename = percentDecode(encodedFilename);\n\n try {\n let decoder = new TextDecoder(charset);\n let bytes = new Uint8Array(decodedFilename.split('').map((char) => char.charCodeAt(0)));\n return decoder.decode(bytes);\n } catch (error) {\n console.warn(`Failed to decode filename from charset ${charset}:`, error);\n return decodedFilename;\n }\n}\n\nfunction percentDecode(value: string): string {\n return value.replace(/\\+/g, ' ').replace(/%([0-9A-Fa-f]{2})/g, (_, hex) => {\n return String.fromCharCode(parseInt(hex, 16));\n });\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams, quote } from './param-values.ts';\n\nexport interface ContentTypeInit {\n /**\n * For multipart entities, the boundary that separates the different parts of the message.\n */\n boundary?: string;\n /**\n * Indicates the [character encoding](https://developer.mozilla.org/en-US/docs/Glossary/Character_encoding) of the content.\n *\n * For example, `utf-8`, `iso-8859-1`.\n */\n charset?: string;\n /**\n * The media type (or MIME type) of the content. This consists of a type and subtype, separated by a slash.\n *\n * For example, `text/html`, `application/json`, `image/png`.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types)\n */\n mediaType?: string;\n}\n\n/**\n * The value of a `Content-Type` HTTP header.\n *\n * [MDN `Content-Type` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-3.1.1.5)\n */\nexport class ContentType implements HeaderValue, ContentTypeInit {\n boundary?: string;\n charset?: string;\n mediaType?: string;\n\n constructor(init?: string | ContentTypeInit) {\n if (init) {\n if (typeof init === 'string') {\n let params = parseParams(init);\n if (params.length > 0) {\n this.mediaType = params[0][0];\n for (let [name, value] of params.slice(1)) {\n if (name === 'boundary') {\n this.boundary = value;\n } else if (name === 'charset') {\n this.charset = value;\n }\n }\n }\n } else {\n this.boundary = init.boundary;\n this.charset = init.charset;\n this.mediaType = init.mediaType;\n }\n }\n }\n\n toString(): string {\n if (!this.mediaType) {\n return '';\n }\n\n let parts = [this.mediaType];\n\n if (this.charset) {\n parts.push(`charset=${quote(this.charset)}`);\n }\n if (this.boundary) {\n parts.push(`boundary=${quote(this.boundary)}`);\n }\n\n return parts.join('; ');\n }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams, quote } from './param-values.ts';\nimport { isIterable } from './utils.ts';\n\nexport type CookieInit = Iterable<[string, string]> | Record;\n\n/**\n * The value of a `Cookie` HTTP header.\n *\n * [MDN `Cookie` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc6265#section-4.2)\n */\nexport class Cookie implements HeaderValue, Iterable<[string, string]> {\n #map: Map;\n\n constructor(init?: string | CookieInit) {\n this.#map = new Map();\n if (init) {\n if (typeof init === 'string') {\n let params = parseParams(init);\n for (let [name, value] of params) {\n this.#map.set(name, value ?? '');\n }\n } else if (isIterable(init)) {\n for (let [name, value] of init) {\n this.#map.set(name, value);\n }\n } else {\n for (let name of Object.getOwnPropertyNames(init)) {\n this.#map.set(name, init[name]);\n }\n }\n }\n }\n\n /**\n * An array of the names of the cookies in the header.\n */\n get names(): string[] {\n return Array.from(this.#map.keys());\n }\n\n /**\n * An array of the values of the cookies in the header.\n */\n get values(): string[] {\n return Array.from(this.#map.values());\n }\n\n /**\n * The number of cookies in the header.\n */\n get size(): number {\n return this.#map.size;\n }\n\n /**\n * Gets the value of a cookie with the given name from the header.\n * @param name The name of the cookie.\n * @returns The value of the cookie, or `null` if the cookie does not exist.\n */\n get(name: string): string | null {\n return this.#map.get(name) ?? null;\n }\n\n /**\n * Sets a cookie with the given name and value in the header.\n * @param name The name of the cookie.\n * @param value The value of the cookie.\n */\n set(name: string, value: string): void {\n this.#map.set(name, value);\n }\n\n /**\n * Removes a cookie with the given name from the header.\n * @param name The name of the cookie.\n */\n delete(name: string): void {\n this.#map.delete(name);\n }\n\n /**\n * True if a cookie with the given name exists in the header.\n * @param name The name of the cookie.\n * @returns True if a cookie with the given name exists in the header.\n */\n has(name: string): boolean {\n return this.#map.has(name);\n }\n\n /**\n * Removes all cookies from the header.\n */\n clear(): void {\n this.#map.clear();\n }\n\n entries(): IterableIterator<[string, string]> {\n return this.#map.entries();\n }\n\n [Symbol.iterator](): IterableIterator<[string, string]> {\n return this.entries();\n }\n\n forEach(callback: (name: string, value: string, header: Cookie) => void, thisArg?: any): void {\n for (let [name, value] of this) {\n callback.call(thisArg, name, value, this);\n }\n }\n\n toString(): string {\n let pairs: string[] = [];\n\n for (let [name, value] of this.#map) {\n pairs.push(`${name}=${quote(value)}`);\n }\n\n return pairs.join('; ');\n }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { quoteEtag } from './utils.ts';\n\nexport interface IfNoneMatchInit {\n /**\n * The entity tags to compare against the current entity.\n */\n tags: string[];\n}\n\n/**\n * The value of an `If-None-Match` HTTP header.\n *\n * [MDN `If-None-Match` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7232#section-3.2)\n */\nexport class IfNoneMatch implements HeaderValue, IfNoneMatchInit {\n tags: string[] = [];\n\n constructor(init?: string | string[] | IfNoneMatchInit) {\n if (init) {\n if (typeof init === 'string') {\n this.tags.push(...init.split(/\\s*,\\s*/).map(quoteEtag));\n } else if (Array.isArray(init)) {\n this.tags.push(...init.map(quoteEtag));\n } else {\n this.tags.push(...init.tags.map(quoteEtag));\n }\n }\n }\n\n /**\n * Checks if the header contains the given entity tag.\n *\n * Note: This method checks only for exact matches and does not consider wildcards.\n *\n * @param tag The entity tag to check for.\n * @returns `true` if the tag is present in the header, `false` otherwise.\n */\n has(tag: string): boolean {\n return this.tags.includes(quoteEtag(tag));\n }\n\n /**\n * Checks if this header matches the given entity tag.\n *\n * @param tag The entity tag to check for.\n * @returns `true` if the tag is present in the header (or the header contains a wildcard), `false` otherwise.\n */\n matches(tag: string): boolean {\n return this.has(tag) || this.tags.includes('*');\n }\n\n toString() {\n return this.tags.join(', ');\n }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams, quote } from './param-values.ts';\nimport { capitalize, isValidDate } from './utils.ts';\n\ntype SameSiteValue = 'Strict' | 'Lax' | 'None';\n\nexport interface SetCookieInit {\n /**\n * The domain of the cookie. For example, `example.com`.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#domaindomain-value)\n */\n domain?: string;\n /**\n * The expiration date of the cookie. If not specified, the cookie is a session cookie.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#expiresdate)\n */\n expires?: Date;\n /**\n * Indicates this cookie should not be accessible via JavaScript.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#httponly)\n */\n httpOnly?: true;\n /**\n * The maximum age of the cookie in seconds.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#max-age)\n */\n maxAge?: number;\n /**\n * The name of the cookie.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie-namecookie-value)\n */\n name?: string;\n /**\n * The path of the cookie. For example, `/` or `/admin`.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#pathpath-value)\n */\n path?: string;\n /**\n * The `SameSite` attribute of the cookie. This attribute lets servers require that a cookie shouldn't be sent with\n * cross-site requests, which provides some protection against cross-site request forgery attacks.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value)\n */\n sameSite?: SameSiteValue;\n /**\n * Indicates the cookie should only be sent over HTTPS.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#secure)\n */\n secure?: true;\n /**\n * The value of the cookie.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie-namecookie-value)\n */\n value?: string;\n}\n\n/**\n * The value of a `Set-Cookie` HTTP header.\n *\n * [MDN `Set-Cookie` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc6265#section-4.1)\n */\nexport class SetCookie implements HeaderValue, SetCookieInit {\n domain?: string;\n expires?: Date;\n httpOnly?: true;\n maxAge?: number;\n name?: string;\n path?: string;\n sameSite?: SameSiteValue;\n secure?: true;\n value?: string;\n\n constructor(init?: string | SetCookieInit) {\n if (init) {\n if (typeof init === 'string') {\n let params = parseParams(init);\n if (params.length > 0) {\n this.name = params[0][0];\n this.value = params[0][1];\n\n for (let [key, value] of params.slice(1)) {\n switch (key.toLowerCase()) {\n case 'domain':\n this.domain = value;\n break;\n case 'expires': {\n if (typeof value === 'string') {\n let date = new Date(value);\n if (isValidDate(date)) {\n this.expires = date;\n }\n }\n break;\n }\n case 'httponly':\n this.httpOnly = true;\n break;\n case 'max-age': {\n if (typeof value === 'string') {\n let v = parseInt(value, 10);\n if (!isNaN(v)) this.maxAge = v;\n }\n break;\n }\n case 'path':\n this.path = value;\n break;\n case 'samesite':\n if (typeof value === 'string' && /strict|lax|none/i.test(value)) {\n this.sameSite = capitalize(value) as SameSiteValue;\n }\n break;\n case 'secure':\n this.secure = true;\n break;\n }\n }\n }\n } else {\n this.domain = init.domain;\n this.expires = init.expires;\n this.httpOnly = init.httpOnly;\n this.maxAge = init.maxAge;\n this.name = init.name;\n this.path = init.path;\n this.sameSite = init.sameSite;\n this.secure = init.secure;\n this.value = init.value;\n }\n }\n }\n\n toString(): string {\n if (!this.name) {\n return '';\n }\n\n let parts = [`${this.name}=${quote(this.value || '')}`];\n\n if (this.domain) {\n parts.push(`Domain=${this.domain}`);\n }\n if (this.path) {\n parts.push(`Path=${this.path}`);\n }\n if (this.expires) {\n parts.push(`Expires=${this.expires.toUTCString()}`);\n }\n if (this.maxAge) {\n parts.push(`Max-Age=${this.maxAge}`);\n }\n if (this.secure) {\n parts.push('Secure');\n }\n if (this.httpOnly) {\n parts.push('HttpOnly');\n }\n if (this.sameSite) {\n parts.push(`SameSite=${this.sameSite}`);\n }\n\n return parts.join('; ');\n }\n}\n", "const HeaderWordCasingExceptions: Record = {\n ct: 'CT',\n etag: 'ETag',\n te: 'TE',\n www: 'WWW',\n x: 'X',\n xss: 'XSS',\n};\n\nexport function canonicalHeaderName(name: string): string {\n return name\n .toLowerCase()\n .split('-')\n .map((word) => HeaderWordCasingExceptions[word] || word.charAt(0).toUpperCase() + word.slice(1))\n .join('-');\n}\n", "import { type AcceptInit, Accept } from './accept.ts';\nimport { type AcceptEncodingInit, AcceptEncoding } from './accept-encoding.ts';\nimport { type AcceptLanguageInit, AcceptLanguage } from './accept-language.ts';\nimport { type CacheControlInit, CacheControl } from './cache-control.ts';\nimport { type ContentDispositionInit, ContentDisposition } from './content-disposition.ts';\nimport { type ContentTypeInit, ContentType } from './content-type.ts';\nimport { type CookieInit, Cookie } from './cookie.ts';\nimport { canonicalHeaderName } from './header-names.ts';\nimport { type HeaderValue } from './header-value.ts';\nimport { type IfNoneMatchInit, IfNoneMatch } from './if-none-match.ts';\nimport { type SetCookieInit, SetCookie } from './set-cookie.ts';\nimport { isIterable, quoteEtag } from './utils.ts';\n\ntype DateInit = number | Date;\n\ninterface SuperHeadersPropertyInit {\n /**\n * The [`Accept`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept) header value.\n */\n accept?: string | AcceptInit;\n /**\n * The [`Accept-Encoding`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding) header value.\n */\n acceptEncoding?: string | AcceptEncodingInit;\n /**\n * The [`Accept-Language`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language) header value.\n */\n acceptLanguage?: string | AcceptLanguageInit;\n /**\n * The [`Accept-Ranges`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges) header value.\n */\n acceptRanges?: string;\n /**\n * The [`Age`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Age) header value.\n */\n age?: string | number;\n /**\n * The [`Cache-Control`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) header value.\n */\n cacheControl?: string | CacheControlInit;\n /**\n * The [`Connection`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Connection) header value.\n */\n connection?: string;\n /**\n * The [`Content-Disposition`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition) header value.\n */\n contentDisposition?: string | ContentDispositionInit;\n /**\n * The [`Content-Encoding`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding) header value.\n */\n contentEncoding?: string | string[];\n /**\n * The [`Content-Language`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Language) header value.\n */\n contentLanguage?: string | string[];\n /**\n * The [`Content-Length`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Length) header value.\n */\n contentLength?: string | number;\n /**\n * The [`Content-Type`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type) header value.\n */\n contentType?: string | ContentTypeInit;\n /**\n * The [`Cookie`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie) header value.\n */\n cookie?: string | CookieInit;\n /**\n * The [`Date`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Date) header value.\n */\n date?: string | DateInit;\n /**\n * The [`ETag`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag) header value.\n */\n etag?: string;\n /**\n * The [`Expires`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires) header value.\n */\n expires?: string | DateInit;\n /**\n * The [`Host`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Host) header value.\n */\n host?: string;\n /**\n * The [`If-Modified-Since`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since) header value.\n */\n ifModifiedSince?: string | DateInit;\n /**\n * The [`If-None-Match`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match) header value.\n */\n ifNoneMatch?: string | string[] | IfNoneMatchInit;\n /**\n * The [`If-Unmodified-Since`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Unmodified-Since) header value.\n */\n ifUnmodifiedSince?: string | DateInit;\n /**\n * The [`Last-Modified`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified) header value.\n */\n lastModified?: string | DateInit;\n /**\n * The [`Location`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Location) header value.\n */\n location?: string;\n /**\n * The [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer) header value.\n */\n referer?: string;\n /**\n * The [`Set-Cookie`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie) header value(s).\n */\n setCookie?: string | (string | SetCookieInit)[];\n}\n\nexport type SuperHeadersInit =\n | Iterable<[string, string]>\n | (SuperHeadersPropertyInit & Record);\n\nconst CRLF = '\\r\\n';\n\nconst AcceptKey = 'accept';\nconst AcceptEncodingKey = 'accept-encoding';\nconst AcceptLanguageKey = 'accept-language';\nconst AcceptRangesKey = 'accept-ranges';\nconst AgeKey = 'age';\nconst CacheControlKey = 'cache-control';\nconst ConnectionKey = 'connection';\nconst ContentDispositionKey = 'content-disposition';\nconst ContentEncodingKey = 'content-encoding';\nconst ContentLanguageKey = 'content-language';\nconst ContentLengthKey = 'content-length';\nconst ContentTypeKey = 'content-type';\nconst CookieKey = 'cookie';\nconst DateKey = 'date';\nconst ETagKey = 'etag';\nconst ExpiresKey = 'expires';\nconst HostKey = 'host';\nconst IfModifiedSinceKey = 'if-modified-since';\nconst IfNoneMatchKey = 'if-none-match';\nconst IfUnmodifiedSinceKey = 'if-unmodified-since';\nconst LastModifiedKey = 'last-modified';\nconst LocationKey = 'location';\nconst RefererKey = 'referer';\nconst SetCookieKey = 'set-cookie';\n\n/**\n * An enhanced JavaScript `Headers` interface with type-safe access.\n *\n * [API Reference](https://github.com/mjackson/remix-the-web/tree/main/packages/headers)\n *\n * [MDN `Headers` Base Class Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers)\n */\nexport class SuperHeaders extends Headers {\n #map: Map;\n #setCookies: (string | SetCookie)[] = [];\n\n constructor(init?: string | SuperHeadersInit | Headers) {\n super();\n\n this.#map = new Map();\n\n if (init) {\n if (typeof init === 'string') {\n let lines = init.split(CRLF);\n for (let line of lines) {\n let match = line.match(/^([^:]+):(.*)/);\n if (match) {\n this.append(match[1].trim(), match[2].trim());\n }\n }\n } else if (isIterable(init)) {\n for (let [name, value] of init) {\n this.append(name, value);\n }\n } else if (typeof init === 'object') {\n for (let name of Object.getOwnPropertyNames(init)) {\n let value = init[name];\n\n let descriptor = Object.getOwnPropertyDescriptor(SuperHeaders.prototype, name);\n if (descriptor?.set) {\n descriptor.set.call(this, value);\n } else {\n this.set(name, value.toString());\n }\n }\n }\n }\n }\n\n /**\n * Appends a new header value to the existing set of values for a header,\n * or adds the header if it does not already exist.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/append)\n */\n append(name: string, value: string): void {\n let key = name.toLowerCase();\n if (key === SetCookieKey) {\n this.#setCookies.push(value);\n } else {\n let existingValue = this.#map.get(key);\n this.#map.set(key, existingValue ? `${existingValue}, ${value}` : value);\n }\n }\n\n /**\n * Removes a header.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/delete)\n */\n delete(name: string): void {\n let key = name.toLowerCase();\n if (key === SetCookieKey) {\n this.#setCookies = [];\n } else {\n this.#map.delete(key);\n }\n }\n\n /**\n * Returns a string of all the values for a header, or `null` if the header does not exist.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/get)\n */\n get(name: string): string | null {\n let key = name.toLowerCase();\n if (key === SetCookieKey) {\n return this.getSetCookie().join(', ');\n } else {\n let value = this.#map.get(key);\n if (typeof value === 'string') {\n return value;\n } else if (value != null) {\n let str = value.toString();\n return str === '' ? null : str;\n } else {\n return null;\n }\n }\n }\n\n /**\n * Returns an array of all values associated with the `Set-Cookie` header. This is\n * useful when building headers for a HTTP response since multiple `Set-Cookie` headers\n * must be sent on separate lines.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/getSetCookie)\n */\n getSetCookie(): string[] {\n return this.#setCookies.map((v) => (typeof v === 'string' ? v : v.toString()));\n }\n\n /**\n * Returns `true` if the header is present in the list of headers.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/has)\n */\n has(name: string): boolean {\n let key = name.toLowerCase();\n return key === SetCookieKey ? this.#setCookies.length > 0 : this.get(key) != null;\n }\n\n /**\n * Sets a new value for the given header. If the header already exists, the new value\n * will replace the existing value.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/set)\n */\n set(name: string, value: string): void {\n let key = name.toLowerCase();\n if (key === SetCookieKey) {\n this.#setCookies = [value];\n } else {\n this.#map.set(key, value);\n }\n }\n\n /**\n * Returns an iterator of all header keys (lowercase).\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/keys)\n */\n *keys(): IterableIterator {\n for (let [key] of this) yield key;\n }\n\n /**\n * Returns an iterator of all header values.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/values)\n */\n *values(): IterableIterator {\n for (let [, value] of this) yield value;\n }\n\n /**\n * Returns an iterator of all header key/value pairs.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/entries)\n */\n *entries(): IterableIterator<[string, string]> {\n for (let [key] of this.#map) {\n let str = this.get(key);\n if (str) yield [key, str];\n }\n\n for (let value of this.getSetCookie()) {\n yield [SetCookieKey, value];\n }\n }\n\n [Symbol.iterator](): IterableIterator<[string, string]> {\n return this.entries();\n }\n\n /**\n * Invokes the `callback` for each header key/value pair.\n *\n * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/forEach)\n */\n forEach(\n callback: (value: string, key: string, headers: SuperHeaders) => void,\n thisArg?: any,\n ): void {\n for (let [key, value] of this) {\n callback.call(thisArg, value, key, this);\n }\n }\n\n /**\n * Returns a string representation of the headers suitable for use in a HTTP message.\n */\n toString(): string {\n let lines: string[] = [];\n\n for (let [key, value] of this) {\n lines.push(`${canonicalHeaderName(key)}: ${value}`);\n }\n\n return lines.join(CRLF);\n }\n\n // Header-specific getters and setters\n\n /**\n * The `Accept` header is used by clients to indicate the media types that are acceptable\n * in the response.\n *\n * [MDN `Accept` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.2)\n */\n get accept(): Accept {\n return this.#getHeaderValue(AcceptKey, Accept);\n }\n\n set accept(value: string | AcceptInit | undefined | null) {\n this.#setHeaderValue(AcceptKey, Accept, value);\n }\n\n /**\n * The `Accept-Encoding` header contains information about the content encodings that the client\n * is willing to accept in the response.\n *\n * [MDN `Accept-Encoding` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.4)\n */\n get acceptEncoding(): AcceptEncoding {\n return this.#getHeaderValue(AcceptEncodingKey, AcceptEncoding);\n }\n\n set acceptEncoding(value: string | AcceptEncodingInit | undefined | null) {\n this.#setHeaderValue(AcceptEncodingKey, AcceptEncoding, value);\n }\n\n /**\n * The `Accept-Language` header contains information about preferred natural language for the\n * response.\n *\n * [MDN `Accept-Language` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.5)\n */\n get acceptLanguage(): AcceptLanguage {\n return this.#getHeaderValue(AcceptLanguageKey, AcceptLanguage);\n }\n\n set acceptLanguage(value: string | AcceptLanguageInit | undefined | null) {\n this.#setHeaderValue(AcceptLanguageKey, AcceptLanguage, value);\n }\n\n /**\n * The `Accept-Ranges` header indicates the server's acceptance of range requests.\n *\n * [MDN `Accept-Ranges` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7233#section-2.3)\n */\n get acceptRanges(): string | null {\n return this.#getStringValue(AcceptRangesKey);\n }\n\n set acceptRanges(value: string | undefined | null) {\n this.#setStringValue(AcceptRangesKey, value);\n }\n\n /**\n * The `Age` header contains the time in seconds an object was in a proxy cache.\n *\n * [MDN `Age` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Age)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7234#section-5.1)\n */\n get age(): number | null {\n return this.#getNumberValue(AgeKey);\n }\n\n set age(value: string | number | undefined | null) {\n this.#setNumberValue(AgeKey, value);\n }\n\n /**\n * The `Cache-Control` header contains directives for caching mechanisms in both requests and responses.\n *\n * [MDN `Cache-Control` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7234#section-5.2)\n */\n get cacheControl(): CacheControl {\n return this.#getHeaderValue(CacheControlKey, CacheControl);\n }\n\n set cacheControl(value: string | CacheControlInit | undefined | null) {\n this.#setHeaderValue(CacheControlKey, CacheControl, value);\n }\n\n /**\n * The `Connection` header controls whether the network connection stays open after the current\n * transaction finishes.\n *\n * [MDN `Connection` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Connection)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7230#section-6.1)\n */\n get connection(): string | null {\n return this.#getStringValue(ConnectionKey);\n }\n\n set connection(value: string | undefined | null) {\n this.#setStringValue(ConnectionKey, value);\n }\n\n /**\n * The `Content-Disposition` header is a response-type header that describes how the payload is displayed.\n *\n * [MDN `Content-Disposition` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition)\n *\n * [RFC 6266](https://datatracker.ietf.org/doc/html/rfc6266)\n */\n get contentDisposition(): ContentDisposition {\n return this.#getHeaderValue(ContentDispositionKey, ContentDisposition);\n }\n\n set contentDisposition(value: string | ContentDispositionInit | undefined | null) {\n this.#setHeaderValue(ContentDispositionKey, ContentDisposition, value);\n }\n\n /**\n * The `Content-Encoding` header specifies the encoding of the resource.\n *\n * Note: If multiple encodings have been used, this value may be a comma-separated list. However, most often this\n * header will only contain a single value.\n *\n * [MDN `Content-Encoding` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding)\n *\n * [HTTP/1.1 Specification](https://httpwg.org/specs/rfc9110.html#field.content-encoding)\n */\n get contentEncoding(): string | null {\n return this.#getStringValue(ContentEncodingKey);\n }\n\n set contentEncoding(value: string | string[] | undefined | null) {\n this.#setStringValue(ContentEncodingKey, Array.isArray(value) ? value.join(', ') : value);\n }\n\n /**\n * The `Content-Language` header describes the natural language(s) of the intended audience for the response content.\n *\n * Note: If the response content is intended for multiple audiences, this value may be a comma-separated list. However,\n * most often this header will only contain a single value.\n *\n * [MDN `Content-Language` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Language)\n *\n * [HTTP/1.1 Specification](https://httpwg.org/specs/rfc9110.html#field.content-language)\n */\n get contentLanguage(): string | null {\n return this.#getStringValue(ContentLanguageKey);\n }\n\n set contentLanguage(value: string | string[] | undefined | null) {\n this.#setStringValue(ContentLanguageKey, Array.isArray(value) ? value.join(', ') : value);\n }\n\n /**\n * The `Content-Length` header indicates the size of the entity-body in bytes.\n *\n * [MDN `Content-Length` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Length)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7230#section-3.3.2)\n */\n get contentLength(): number | null {\n return this.#getNumberValue(ContentLengthKey);\n }\n\n set contentLength(value: string | number | undefined | null) {\n this.#setNumberValue(ContentLengthKey, value);\n }\n\n /**\n * The `Content-Type` header indicates the media type of the resource.\n *\n * [MDN `Content-Type` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-3.1.1.5)\n */\n get contentType(): ContentType {\n return this.#getHeaderValue(ContentTypeKey, ContentType);\n }\n\n set contentType(value: string | ContentTypeInit | undefined | null) {\n this.#setHeaderValue(ContentTypeKey, ContentType, value);\n }\n\n /**\n * The `Cookie` request header contains stored HTTP cookies previously sent by the server with\n * the `Set-Cookie` header.\n *\n * [MDN `Cookie` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc6265#section-5.4)\n */\n get cookie(): Cookie {\n return this.#getHeaderValue(CookieKey, Cookie);\n }\n\n set cookie(value: string | CookieInit | undefined | null) {\n this.#setHeaderValue(CookieKey, Cookie, value);\n }\n\n /**\n * The `Date` header contains the date and time at which the message was sent.\n *\n * [MDN `Date` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Date)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-7.1.1.2)\n */\n get date(): Date | null {\n return this.#getDateValue(DateKey);\n }\n\n set date(value: string | DateInit | undefined | null) {\n this.#setDateValue(DateKey, value);\n }\n\n /**\n * The `ETag` header provides a unique identifier for the current version of the resource.\n *\n * [MDN `ETag` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7232#section-2.3)\n */\n get etag(): string | null {\n return this.#getStringValue(ETagKey);\n }\n\n set etag(value: string | undefined | null) {\n this.#setStringValue(ETagKey, typeof value === 'string' ? quoteEtag(value) : value);\n }\n\n /**\n * The `Expires` header contains the date/time after which the response is considered stale.\n *\n * [MDN `Expires` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7234#section-5.3)\n */\n get expires(): Date | null {\n return this.#getDateValue(ExpiresKey);\n }\n\n set expires(value: string | DateInit | undefined | null) {\n this.#setDateValue(ExpiresKey, value);\n }\n\n /**\n * The `Host` header specifies the domain name of the server and (optionally) the TCP port number.\n *\n * [MDN `Host` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Host)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7230#section-5.4)\n */\n get host(): string | null {\n return this.#getStringValue(HostKey);\n }\n\n set host(value: string | undefined | null) {\n this.#setStringValue(HostKey, value);\n }\n\n /**\n * The `If-Modified-Since` header makes a request conditional on the last modification date of the\n * requested resource.\n *\n * [MDN `If-Modified-Since` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7232#section-3.3)\n */\n get ifModifiedSince(): Date | null {\n return this.#getDateValue(IfModifiedSinceKey);\n }\n\n set ifModifiedSince(value: string | DateInit | undefined | null) {\n this.#setDateValue(IfModifiedSinceKey, value);\n }\n\n /**\n * The `If-None-Match` header makes a request conditional on the absence of a matching ETag.\n *\n * [MDN `If-None-Match` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7232#section-3.2)\n */\n get ifNoneMatch(): IfNoneMatch {\n return this.#getHeaderValue(IfNoneMatchKey, IfNoneMatch);\n }\n\n set ifNoneMatch(value: string | string[] | IfNoneMatchInit | undefined | null) {\n this.#setHeaderValue(IfNoneMatchKey, IfNoneMatch, value);\n }\n\n /**\n * The `If-Unmodified-Since` header makes a request conditional on the last modification date of the\n * requested resource.\n *\n * [MDN `If-Unmodified-Since` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Unmodified-Since)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7232#section-3.4)\n */\n get ifUnmodifiedSince(): Date | null {\n return this.#getDateValue(IfUnmodifiedSinceKey);\n }\n\n set ifUnmodifiedSince(value: string | DateInit | undefined | null) {\n this.#setDateValue(IfUnmodifiedSinceKey, value);\n }\n\n /**\n * The `Last-Modified` header contains the date and time at which the resource was last modified.\n *\n * [MDN `Last-Modified` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7232#section-2.2)\n */\n get lastModified(): Date | null {\n return this.#getDateValue(LastModifiedKey);\n }\n\n set lastModified(value: string | DateInit | undefined | null) {\n this.#setDateValue(LastModifiedKey, value);\n }\n\n /**\n * The `Location` header indicates the URL to redirect to.\n *\n * [MDN `Location` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Location)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-7.1.2)\n */\n get location(): string | null {\n return this.#getStringValue(LocationKey);\n }\n\n set location(value: string | undefined | null) {\n this.#setStringValue(LocationKey, value);\n }\n\n /**\n * The `Referer` header contains the address of the previous web page from which a link to the\n * currently requested page was followed.\n *\n * [MDN `Referer` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.5.2)\n */\n get referer(): string | null {\n return this.#getStringValue(RefererKey);\n }\n\n set referer(value: string | undefined | null) {\n this.#setStringValue(RefererKey, value);\n }\n\n /**\n * The `Set-Cookie` header is used to send cookies from the server to the user agent.\n *\n * [MDN `Set-Cookie` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc6265#section-4.1)\n */\n get setCookie(): SetCookie[] {\n let setCookies = this.#setCookies;\n\n for (let i = 0; i < setCookies.length; ++i) {\n if (typeof setCookies[i] === 'string') {\n setCookies[i] = new SetCookie(setCookies[i]);\n }\n }\n\n return setCookies as SetCookie[];\n }\n\n set setCookie(value: (string | SetCookieInit)[] | string | SetCookieInit | undefined | null) {\n if (value != null) {\n this.#setCookies = (Array.isArray(value) ? value : [value]).map((v) =>\n typeof v === 'string' ? v : new SetCookie(v),\n );\n } else {\n this.#setCookies = [];\n }\n }\n\n // Helpers\n\n #getHeaderValue(key: string, ctor: new (init?: any) => T): T {\n let value = this.#map.get(key);\n\n if (value !== undefined) {\n if (typeof value === 'string') {\n let obj = new ctor(value);\n this.#map.set(key, obj); // cache the new object\n return obj;\n } else {\n return value as T;\n }\n }\n\n let obj = new ctor();\n this.#map.set(key, obj); // cache the new object\n return obj;\n }\n\n #setHeaderValue(key: string, ctor: new (init?: string) => HeaderValue, value: any): void {\n if (value != null) {\n this.#map.set(key, typeof value === 'string' ? value : new ctor(value));\n } else {\n this.#map.delete(key);\n }\n }\n\n #getDateValue(key: string): Date | null {\n let value = this.#map.get(key);\n return value === undefined ? null : new Date(value as string);\n }\n\n #setDateValue(key: string, value: string | DateInit | undefined | null): void {\n if (value != null) {\n this.#map.set(\n key,\n typeof value === 'string'\n ? value\n : (typeof value === 'number' ? new Date(value) : value).toUTCString(),\n );\n } else {\n this.#map.delete(key);\n }\n }\n\n #getNumberValue(key: string): number | null {\n let value = this.#map.get(key);\n return value === undefined ? null : parseInt(value as string, 10);\n }\n\n #setNumberValue(key: string, value: string | number | undefined | null): void {\n if (value != null) {\n this.#map.set(key, typeof value === 'string' ? value : value.toString());\n } else {\n this.#map.delete(key);\n }\n }\n\n #getStringValue(key: string): string | null {\n let value = this.#map.get(key);\n return value === undefined ? null : (value as string);\n }\n\n #setStringValue(key: string, value: string | undefined | null): void {\n if (value != null) {\n this.#map.set(key, value);\n } else {\n this.#map.delete(key);\n }\n }\n}\n"], "mappings": "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", "names": ["obj"] }