* @param {string | string[]} varyHeader Vary header from the server * @param {Record } headers Request headers * @returns {Record }
(varyHeader, headers)
| 284 | * @returns {Record<string, string | string[]>} |
| 285 | */ |
| 286 | function parseVaryHeader (varyHeader, headers) { |
| 287 | if (typeof varyHeader === 'string' && varyHeader.includes('*')) { |
| 288 | return headers |
| 289 | } |
| 290 | |
| 291 | const output = /** @type {Record<string, string | string[] | null>} */ ({}) |
| 292 | |
| 293 | const varyingHeaders = typeof varyHeader === 'string' |
| 294 | ? varyHeader.split(',') |
| 295 | : varyHeader |
| 296 | |
| 297 | for (const header of varyingHeaders) { |
| 298 | const trimmedHeader = header.trim().toLowerCase() |
| 299 | |
| 300 | output[trimmedHeader] = headers[trimmedHeader] ?? null |
| 301 | } |
| 302 | |
| 303 | return output |
| 304 | } |
| 305 | |
| 306 | /** |
| 307 | * Note: this deviates from the spec a little. Empty etags ("", W/"") are valid, |
no test coverage detected