Numbers Probably Matter

    fetch-headers
    TypeScript icon, indicating that this package has built-in type declarations

    3.0.1 • Public • Published

    fetch-headers

    The Headers class for NodeJS Executed against wpt test suits so it follows the spec correctly.

    Install

    fetch-headers is an ESM-only module - you are not able to import it with require. If you are unable to use ESM in your project you can use the async import('fetch-headers') from CommonJS to load fetch-headers asynchronously.
    npm install fetch-headers

    Use

    import { Headers, bag } from 'fetch-headers'
    
    const headers = new Headers({
      'content-type': 'text/plain'
    })
    
    // Turn headers to become immutable.
    bag.get(headers).guard = 'immutable'
    headers.set('content-type', 'text/html') // Throws

    Regards to Set-Cookie and values joined by comma

    The new norm is that all headers with the same key should be joined by a comma value. but set-cookies Can still contain a comma value for historical reasons. (It's best to avoid using it in any header value). All other headers are not allowed to have it.

    Browser don't expose Set-Cookies headers in any way. That's why there is no issue with headers.get(name).split(',') that should always return a string joined by comma value, This header class will apply to this rule as well. meaning headers.get('set-cookie') will return a string with every Set-Cookie joined together.

    So parsing it can be tricky, that's why iterating over the headers can be the preferred way, this is the least way we could expose all set-cookie headers individually without deviating from the spec by adding a custom getAll() or raw() method that don't exist in the spec.

    const header = new Headers()
    headers.append('xyz', 'abc')
    headers.append('xyz', 'abc')
    headers.append('Set-Cookie', 'a=1')
    headers.append('Set-Cookie', 'b=2')
    
    for (const [name, value] of headers) {
      if (name === 'set-cookie') {
        // Could happen twice
      } else {
        // Will never see the same `name` twice
      }
    }
    
    console.log([...headers])
    // yields [[ "set-cookie", "a=1" ], ["set-cookie", "b=2"], ["xyz", "abc, abc"]]

    This matches the same way Deno handles headers in core as well. It also looks like we might be getting a getSetCookie method soon.

    Install

    npm i fetch-headers

    DownloadsWeekly Downloads

    8,368

    Version

    3.0.1

    License

    MIT

    Unpacked Size

    27.3 kB

    Total Files

    11

    Last publish

    Collaborators

    • endless