{"_id":"@remix-run/headers","_rev":"19-a0c6bbd4d1c83d5a193d2db62b18c337","name":"@remix-run/headers","dist-tags":{"latest":"1.0.0"},"versions":{"0.12.0":{"name":"@remix-run/headers","version":"0.12.0","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.12.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"chancestrickland","email":"hi@chance.dev"}],"homepage":"https://github.com/remix-run/remix/tree/v3/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"50dd61cde5c324ffa65997e60c4a9ab94ad85942","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.12.0.tgz","fileCount":52,"integrity":"sha512-eqVSL5UOIyqVx0NTqgtNKMKVokE9jPchkZHl/N13KKPQYw/leS8VCoX5zRhkB1UvcLyfj113LX0OvEcuNbc5Hg==","signatures":[{"sig":"MEUCIQCBxls1dAJCGyfE1P3UTN3IDusNFhXzaXDWFCeojssu3wIgBYhCGPeKKkNpdX2/yGa8cShbfmP7AtQ91WDzN0upR6k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":462271},"main":"./dist/headers.cjs","type":"module","_from":"file:remix-run-headers-0.12.0.tgz","types":"./dist/headers.d.ts","module":"./dist/headers.js","exports":{".":{"types":"./dist/headers.d.ts","import":"./dist/headers.js","default":"./dist/headers.js","require":"./dist/headers.cjs"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test ./src/**/*.test.ts","build":"pnpm run clean && pnpm run build:types && pnpm run build:esm && pnpm run build:cjs","clean":"rm -rf dist","build:cjs":"esbuild src/headers.ts --bundle --outfile=dist/headers.cjs --format=cjs --platform=node --sourcemap","build:esm":"esbuild src/headers.ts --bundle --outfile=dist/headers.js --format=esm --platform=neutral --sourcemap","build:types":"tsc --project tsconfig.build.json"},"_npmUser":{"name":"mjackson","email":"mjijackson+npm@gmail.com"},"_resolved":"/private/var/folders/n5/1lxhnzk56hg6b7vnl558364m0000gn/T/486cd44dec9387d2ddb0faa2be4a191d/remix-run-headers-0.12.0.tgz","_integrity":"sha512-eqVSL5UOIyqVx0NTqgtNKMKVokE9jPchkZHl/N13KKPQYw/leS8VCoX5zRhkB1UvcLyfj113LX0OvEcuNbc5Hg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.4.2","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.2.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.20.0","@types/node":"^20.14.10"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.12.0_1752870703449_0.9273446640625358","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@remix-run/headers","version":"0.13.0","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.13.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"3ba5445aeeb72f9cd84b9496d983c752af15ae41","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.13.0.tgz","fileCount":52,"integrity":"sha512-OHHFHozdXSjcyrYws8h0FfcgQ/i24iMsSExE1xqJFAyOAE3yvb5YoDVTf7Jz/4XuVVYnoc93ODCJc9jt6ZvsBw==","signatures":[{"sig":"MEYCIQDf84i+ztwZ6YuOjWsaAdwH20fbFWeHZVXRfxlU4PV+oQIhAP0vVU/gUpQz4Q+5v4+4MgHl9XcRTyPOGFR9gM8/eReO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":460098},"main":"./dist/index.cjs","type":"module","_from":"file:remix-run-headers-0.13.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js","require":"./dist/index.cjs"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","build":"pnpm run clean && pnpm run build:types && pnpm run build:esm && pnpm run build:cjs","clean":"rm -rf dist","build:cjs":"esbuild src/index.ts --bundle --outfile=dist/index.cjs --format=cjs --platform=node --sourcemap","build:esm":"esbuild src/index.ts --bundle --outfile=dist/index.js --format=esm --platform=neutral --sourcemap","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json"},"_npmUser":{"name":"mjackson","email":"mjijackson+npm@gmail.com"},"_resolved":"/tmp/9ed057dfeaa4f859ca9044f5af2029e3/remix-run-headers-0.13.0.tgz","_integrity":"sha512-OHHFHozdXSjcyrYws8h0FfcgQ/i24iMsSExE1xqJFAyOAE3yvb5YoDVTf7Jz/4XuVVYnoc93ODCJc9jt6ZvsBw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.6.0","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.9.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.10","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.13.0_1759562276003_0.2343066740377946","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@remix-run/headers","version":"0.14.0","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.14.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"ryanflorence","email":"rpflorence@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"389d35385b451fbd33632e1c5df9150a3e607d54","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.14.0.tgz","fileCount":50,"integrity":"sha512-IibY6iTkBhzHXacQkJDENlzJPe3G5RDJgzV2utftnJl/sg2qKnxtepypQmfXA6d+BI5BkzrtAd+mx7QSVY1NRQ==","signatures":[{"sig":"MEYCIQCO3NpWKGWEUNEAJJvJKklAoZw/GSJ0IWIf0Pz7p2g3tAIhANxmojLZ7SNRazp6/yEWw0EvwM19AE0zs5KhN73wzfeR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":305502},"type":"module","_from":"file:remix-run-headers-0.14.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","build":"pnpm run clean && pnpm run build:types && pnpm run build:esm","clean":"rm -rf dist","build:esm":"esbuild src/index.ts --bundle --outfile=dist/index.js --format=esm --platform=neutral --sourcemap","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json"},"_npmUser":{"name":"mjackson","email":"mjijackson+npm@gmail.com"},"_resolved":"/tmp/91d2b8e90d77a2c562c72f889af525b3/remix-run-headers-0.14.0.tgz","_integrity":"sha512-IibY6iTkBhzHXacQkJDENlzJPe3G5RDJgzV2utftnJl/sg2qKnxtepypQmfXA6d+BI5BkzrtAd+mx7QSVY1NRQ==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.6.1","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.10.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.10","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.14.0_1761151703635_0.450724741598594","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@remix-run/headers","version":"0.15.0","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.15.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"ryanflorence","email":"rpflorence@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"4f688180c1a3e1614651939a2fc366b6d69f39fa","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.15.0.tgz","fileCount":50,"integrity":"sha512-wGXHv9nAt8z8KQqc1bdtclduJwTO+zlQEjcNqYyifE8WqKToYu6/PJCDh5PGn0o4DHj8K71rEyP3MwZsIRRccg==","signatures":[{"sig":"MEQCIAjlxLml8ER2j1gb8kkpe3DHzLA2F4MEspNmklWgKoDgAiBv8Ct/Endy+jwQiwHnXeOGkjoFmn9JJeNpEnLoKLfYYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fheaders@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":307487},"type":"module","_from":"file:remix-run-headers-0.15.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","build":"pnpm run clean && pnpm run build:types && pnpm run build:esm","clean":"rm -rf dist","build:esm":"esbuild src/index.ts --bundle --outfile=dist/index.js --format=esm --platform=neutral --sourcemap","typecheck":"tsc --noEmit","build:types":"tsc --project tsconfig.build.json"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:967aa0e9-318a-49a4-b439-aeac50f5f1a5"}},"_resolved":"/tmp/91eac4d29fa020875db23491088b4243/remix-run-headers-0.15.0.tgz","_integrity":"sha512-wGXHv9nAt8z8KQqc1bdtclduJwTO+zlQEjcNqYyifE8WqKToYu6/PJCDh5PGn0o4DHj8K71rEyP3MwZsIRRccg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.6.1","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.11.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.10","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.15.0_1762287971846_0.3278057112114945","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@remix-run/headers","version":"0.16.0","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.16.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"ryanflorence","email":"rpflorence@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"1df4055187a29075272fd1c8522d3321553d4db2","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.16.0.tgz","fileCount":63,"integrity":"sha512-nK5ryu69T37liSnHYdxki+0Lv1zRMdVeZzAgp1YGPe+20DciNbYdGhfjW+KI5SZgCpHRo3Bi5CsH4jNTnosqRg==","signatures":[{"sig":"MEUCIDtCjSzBWsNpUrz5O5aRQQmAIsNHU8M5RkKBeF8y15pYAiEA0l0xRiiCqoRgDd33dp6gMQXVFy7jlHDtzPB0or2dttg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fheaders@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":215291},"type":"module","_from":"file:remix-run-headers-0.16.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","build":"tsc -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:967aa0e9-318a-49a4-b439-aeac50f5f1a5"}},"_resolved":"/tmp/edae11f514ba301e9530593ab8a1a5cc/remix-run-headers-0.16.0.tgz","_integrity":"sha512-nK5ryu69T37liSnHYdxki+0Lv1zRMdVeZzAgp1YGPe+20DciNbYdGhfjW+KI5SZgCpHRo3Bi5CsH4jNTnosqRg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.6.1","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.11.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.16.0_1762301267698_0.8232901613029302","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@remix-run/headers","version":"0.17.0","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.17.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"ryanflorence","email":"rpflorence@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"e9240b2c2d64560f13efc254ed8fa1733065c254","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.17.0.tgz","fileCount":79,"integrity":"sha512-YxHy357YpvdKvpOAsaDd/LQRD7qenTUdlvgoNb0dCpzxmX2xo+FbtBDMFBDZn4+L0aq9W78FkcvV45g5hPGllA==","signatures":[{"sig":"MEUCIQC/+uDHigLP9MKWz3Nc/ZuQJnOkjW5sUfG0WLxhalSBvAIgPaZyQkrwa28b4Rk41GrKbTZdbWJKz5nrgt9O8e3eo8w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fheaders@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":266599},"type":"module","_from":"file:remix-run-headers-0.17.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","build":"tsc -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:967aa0e9-318a-49a4-b439-aeac50f5f1a5"}},"_resolved":"/tmp/ed6085ec0a66760489abe322989817bc/remix-run-headers-0.17.0.tgz","_integrity":"sha512-YxHy357YpvdKvpOAsaDd/LQRD7qenTUdlvgoNb0dCpzxmX2xo+FbtBDMFBDZn4+L0aq9W78FkcvV45g5hPGllA==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.6.2","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.17.0_1763427592868_0.358974339454613","host":"s3://npm-registry-packages-npm-production"}},"0.17.1":{"name":"@remix-run/headers","version":"0.17.1","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.17.1","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"ryanflorence","email":"rpflorence@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"1f30ddabdf487a4d6c9605e6a99ee4e5ff9519b2","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.17.1.tgz","fileCount":79,"integrity":"sha512-DtgqvxvE5WoNGn+Lbn4E07gyEk/y7rJgwdljZfbeboy3yUpV4Ov7wWiIylurq6OhGKUSjlOXdr0/55ZoLX5ZQw==","signatures":[{"sig":"MEYCIQC/58DqYVAaWqh/v442PcT1ldn9kqufE9HQZfnCUuVtigIhAJWTWuOBlWvhuQvnbd/F3g16Q1cSlggJQ4Zz1fcjh7ps","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fheaders@0.17.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":266615},"type":"module","_from":"file:remix-run-headers-0.17.1.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","build":"tsc -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:967aa0e9-318a-49a4-b439-aeac50f5f1a5"}},"_resolved":"/tmp/9f0098d401bcf0934bd653febac5f579/remix-run-headers-0.17.1.tgz","_integrity":"sha512-DtgqvxvE5WoNGn+Lbn4E07gyEk/y7rJgwdljZfbeboy3yUpV4Ov7wWiIylurq6OhGKUSjlOXdr0/55ZoLX5ZQw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.6.2","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.17.1_1763768917223_0.5018363171272731","host":"s3://npm-registry-packages-npm-production"}},"0.17.2":{"name":"@remix-run/headers","version":"0.17.2","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.17.2","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"ryanflorence","email":"rpflorence@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"0988ce8d8a0d18815005ac10fcdf5796e19796c7","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.17.2.tgz","fileCount":79,"integrity":"sha512-IfHVCftsRKfk7kIQUxP9WDCe0OXj9X0lDRfFxk3CPcXJenBUEsYEPeBoW/YCZlKhdRWZjQlrofdk63lMSJmy8w==","signatures":[{"sig":"MEYCIQCUSzKe5QPKpu5he1KdK/zshNFeKu61RfxjHNmZNJeg5gIhAMkrYJxC96Xfw4VzhKFF6nLpxl2p+ckrU4YzthW5oaQR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fheaders@0.17.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":266629},"type":"module","_from":"file:remix-run-headers-0.17.2.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","build":"tsc -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:967aa0e9-318a-49a4-b439-aeac50f5f1a5"}},"_resolved":"/tmp/34a54b68dc1f5000d42a248f6967171c/remix-run-headers-0.17.2.tgz","_integrity":"sha512-IfHVCftsRKfk7kIQUxP9WDCe0OXj9X0lDRfFxk3CPcXJenBUEsYEPeBoW/YCZlKhdRWZjQlrofdk63lMSJmy8w==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.6.2","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.17.2_1764045006150_0.7526519956908306","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@remix-run/headers","version":"0.18.0","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.18.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"ryanflorence","email":"rpflorence@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"f13438f0fe9ea90e40f78d74563bd5513777feb8","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.18.0.tgz","fileCount":83,"integrity":"sha512-5V/doLOF1IBuMhV+USa/ImUzpql4SQ0VBbNKbRHvrwRK59GYGVqtcwpVzgdFb5QEa2vIedq4JdOy7FIesZUpIw==","signatures":[{"sig":"MEUCIHo48UIRea7Whi0IyVEI7exEfD3v96f49LqbTStZhVcgAiEAsbCKVzdEAFBk78V6xM1s4vCtwNhiRo2zxtV01RdVXeY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fheaders@0.18.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":297949},"type":"module","_from":"file:remix-run-headers-0.18.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test './src/**/*.test.ts'","build":"tsc -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:967aa0e9-318a-49a4-b439-aeac50f5f1a5"}},"_resolved":"/tmp/9b0feee3fc33113916f8a1ab8a613f2c/remix-run-headers-0.18.0.tgz","_integrity":"sha512-5V/doLOF1IBuMhV+USa/ImUzpql4SQ0VBbNKbRHvrwRK59GYGVqtcwpVzgdFb5QEa2vIedq4JdOy7FIesZUpIw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.6.2","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.11.1","_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.18.0_1764111729546_0.5755261859885852","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@remix-run/headers","version":"0.19.0","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.19.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"ryanflorence","email":"rpflorence@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"dc71a0372b64f06afe77fd08096e09a2203ea229","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.19.0.tgz","fileCount":83,"integrity":"sha512-+62NbkXuXm9r/NdG6KfH9OCKofCWm8VjkrVPICiHKtRl8Gf2Vi6eFTN4mGgBlZRhd5mmEVRV4hTIn/JUSHDAOw==","signatures":[{"sig":"MEUCIFI99fU0MX5DZ9KQNJnEeElodRrcvRfWch0auf5i45YJAiEAh/uyvKIdLSKhZLSVcrLv3/+Z7fbYXwEMSoDJbRC0wUE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fheaders@0.19.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":224561},"type":"module","_from":"file:remix-run-headers-0.19.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"node --disable-warning=ExperimentalWarning --test","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","typecheck":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:967aa0e9-318a-49a4-b439-aeac50f5f1a5"}},"_resolved":"/tmp/4d69c1f6f3a4021363d7d808e8c55ba6/remix-run-headers-0.19.0.tgz","_integrity":"sha512-+62NbkXuXm9r/NdG6KfH9OCKofCWm8VjkrVPICiHKtRl8Gf2Vi6eFTN4mGgBlZRhd5mmEVRV4hTIn/JUSHDAOw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.6.2","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.19.0_1768948069695_0.7733032541310005","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@remix-run/headers","version":"0.20.0","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.20.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"2451df37014c166959c5098a9e66a9f405153b25","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.20.0.tgz","fileCount":87,"integrity":"sha512-t5akxTE1y4s8mfGsemna+BooFPN17UcZ/utVTk/rgl3HhznzmSYjIXBAMQ4j9Hv6A9Ys9DKTH3yxetVEV9oPpw==","signatures":[{"sig":"MEUCIGxMjvmyb/qK/OA1QjvVnolyJnuua1OxCzxniVEUZ/LiAiEAkZ85/rxXwNWRHErQnpt7NnplvXtGY5ZMvOflGWIEUmI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fheaders@0.20.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":316276},"type":"module","_from":"file:remix-run-headers-0.20.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"remix-test","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","test:bun":"bun x --bun remix-test","typecheck":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:967aa0e9-318a-49a4-b439-aeac50f5f1a5"}},"_resolved":"/tmp/e2335e01b86ffba051acaf0d090675ed/remix-run-headers-0.20.0.tgz","_integrity":"sha512-t5akxTE1y4s8mfGsemna+BooFPN17UcZ/utVTk/rgl3HhznzmSYjIXBAMQ4j9Hv6A9Ys9DKTH3yxetVEV9oPpw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.12.1","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.4.0","@remix-run/assert":"0.2.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.20.0_1779247247821_0.29134679105132344","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@remix-run/headers","version":"0.21.0","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.21.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"8ab814a2fa8ddad8cefd9961e91eab329421e4c9","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.21.0.tgz","fileCount":87,"integrity":"sha512-jlVE0GGxTaLqZ8cfB/sBDQYkKHXJxhWlLY836A7kjnHmy2oHET8J3/4+7+JgTqFBEBvK+ZiiqJKZElj+/zp5Cg==","signatures":[{"sig":"MEUCID3WZsyNdxzuaKHwL7e+8JYzO5z354/VbWFBBGhc3M53AiEA+xuyisOK4Pdih58Cmf2wF3SeDVETUmFpAlukiyIe1hI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fheaders@0.21.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":326655},"type":"module","_from":"file:remix-run-headers-0.21.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"remix-test","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","test:bun":"bun x --bun remix-test","typecheck":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:967aa0e9-318a-49a4-b439-aeac50f5f1a5"}},"_resolved":"/tmp/c38c4e58d9e5ecf25cdef80d145109a2/remix-run-headers-0.21.0.tgz","_integrity":"sha512-jlVE0GGxTaLqZ8cfB/sBDQYkKHXJxhWlLY836A7kjnHmy2oHET8J3/4+7+JgTqFBEBvK+ZiiqJKZElj+/zp5Cg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.12.1","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.15.0","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.4.1","@remix-run/assert":"0.2.1","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.21.0_1779308209119_0.5050792268437299","host":"s3://npm-registry-packages-npm-production"}},"0.21.1":{"name":"@remix-run/headers","version":"0.21.1","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.21.1","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"68e65efedf91f218d67448b7b29775493cd52417","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.21.1.tgz","fileCount":87,"integrity":"sha512-DRhRveigepAQDUIi0MrOFhpcl3/KTv/fkpIhulv7Asv1pUwM8RpY2ENjdI8lfii6Z3MEsWtYhGt6If8bi6bYpQ==","signatures":[{"sig":"MEYCIQD+/c17k3IZA3v08FYDRhqK6Sr/BgSOaMSqbDkTNk99ZQIhALlx4+Qs7jwPzQkRoMvonTf1kgWd1hVnCQEdC79T+stj","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fheaders@0.21.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":328872},"type":"module","_from":"file:remix-run-headers-0.21.1.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./vary":{"types":"./dist/lib/vary.d.ts","default":"./dist/lib/vary.js"},"./range":{"types":"./dist/lib/range.d.ts","default":"./dist/lib/range.js"},"./accept":{"types":"./dist/lib/accept.d.ts","default":"./dist/lib/accept.js"},"./cookie":{"types":"./dist/lib/cookie.d.ts","default":"./dist/lib/cookie.js"},"./if-match":{"types":"./dist/lib/if-match.d.ts","default":"./dist/lib/if-match.js"},"./if-range":{"types":"./dist/lib/if-range.d.ts","default":"./dist/lib/if-range.js"},"./set-cookie":{"types":"./dist/lib/set-cookie.d.ts","default":"./dist/lib/set-cookie.js"},"./raw-headers":{"types":"./dist/lib/raw-headers.d.ts","default":"./dist/lib/raw-headers.js"},"./content-type":{"types":"./dist/lib/content-type.d.ts","default":"./dist/lib/content-type.js"},"./package.json":"./package.json","./cache-control":{"types":"./dist/lib/cache-control.d.ts","default":"./dist/lib/cache-control.js"},"./content-range":{"types":"./dist/lib/content-range.d.ts","default":"./dist/lib/content-range.js"},"./if-none-match":{"types":"./dist/lib/if-none-match.d.ts","default":"./dist/lib/if-none-match.js"},"./accept-encoding":{"types":"./dist/lib/accept-encoding.d.ts","default":"./dist/lib/accept-encoding.js"},"./accept-language":{"types":"./dist/lib/accept-language.d.ts","default":"./dist/lib/accept-language.js"},"./content-disposition":{"types":"./dist/lib/content-disposition.d.ts","default":"./dist/lib/content-disposition.js"}},"scripts":{"test":"remix-test","build":"tsgo -p tsconfig.build.json","clean":"git clean -fdX","test:bun":"bun x --bun remix-test","typecheck":"tsgo --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:967aa0e9-318a-49a4-b439-aeac50f5f1a5"}},"_resolved":"/tmp/1f263f14cfed30208f97096c10471bc5/remix-run-headers-0.21.1.tgz","_integrity":"sha512-DRhRveigepAQDUIi0MrOFhpcl3/KTv/fkpIhulv7Asv1pUwM8RpY2ENjdI8lfii6Z3MEsWtYhGt6If8bi6bYpQ==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.13.0","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.16.0","_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.4.2","@remix-run/assert":"0.2.1","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.21.1_1780078576041_0.9292672842224017","host":"s3://npm-registry-packages-npm-production"}},"0.21.2":{"name":"@remix-run/headers","version":"0.21.2","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.21.2","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"92fbfd53cb30deccd24c65515f886f75ac5d6809","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.21.2.tgz","fileCount":87,"integrity":"sha512-M5KagifodhXZglUiYjf16TrqxYce8N7h3pKt7FUX47Vgy7mYG7PSrGN7HtJg7VX7HbOhY3bd2CuRwOojwnNDHg==","signatures":[{"sig":"MEYCIQCRk1VvVyHtRylvcF9FvkZhBJLwaNIjO80/rwwP5+PDggIhALI2Uxzn/YaVsu/3y1DSQAJU41jKOYAlFC2rXYTkYC5Y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDiYbVaVybVrrbtKtSNrC0X7sLwZLQuGMJYtkebksScVAIhAIlQmDYWq6FqclRuDYpiwdYCdOCDbI1z9KfBdHwerrc0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fheaders@0.21.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":328848},"type":"module","_from":"file:/tmp/remix-publish-headers-9Iaytj/remix-run-headers-0.21.2.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./vary":{"types":"./dist/lib/vary.d.ts","default":"./dist/lib/vary.js"},"./range":{"types":"./dist/lib/range.d.ts","default":"./dist/lib/range.js"},"./accept":{"types":"./dist/lib/accept.d.ts","default":"./dist/lib/accept.js"},"./cookie":{"types":"./dist/lib/cookie.d.ts","default":"./dist/lib/cookie.js"},"./if-match":{"types":"./dist/lib/if-match.d.ts","default":"./dist/lib/if-match.js"},"./if-range":{"types":"./dist/lib/if-range.d.ts","default":"./dist/lib/if-range.js"},"./set-cookie":{"types":"./dist/lib/set-cookie.d.ts","default":"./dist/lib/set-cookie.js"},"./raw-headers":{"types":"./dist/lib/raw-headers.d.ts","default":"./dist/lib/raw-headers.js"},"./content-type":{"types":"./dist/lib/content-type.d.ts","default":"./dist/lib/content-type.js"},"./package.json":"./package.json","./cache-control":{"types":"./dist/lib/cache-control.d.ts","default":"./dist/lib/cache-control.js"},"./content-range":{"types":"./dist/lib/content-range.d.ts","default":"./dist/lib/content-range.js"},"./if-none-match":{"types":"./dist/lib/if-none-match.d.ts","default":"./dist/lib/if-none-match.js"},"./accept-encoding":{"types":"./dist/lib/accept-encoding.d.ts","default":"./dist/lib/accept-encoding.js"},"./accept-language":{"types":"./dist/lib/accept-language.d.ts","default":"./dist/lib/accept-language.js"},"./content-disposition":{"types":"./dist/lib/content-disposition.d.ts","default":"./dist/lib/content-disposition.js"}},"scripts":{"test":"remix test","build":"tsc -p tsconfig.build.json","clean":"git clean -fdX","test:bun":"bun x --bun remix test","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:967aa0e9-318a-49a4-b439-aeac50f5f1a5"}},"_resolved":"/tmp/remix-publish-headers-9Iaytj/remix-run-headers-0.21.2.tgz","_integrity":"sha512-M5KagifodhXZglUiYjf16TrqxYce8N7h3pKt7FUX47Vgy7mYG7PSrGN7HtJg7VX7HbOhY3bd2CuRwOojwnNDHg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.19.0","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^24.6.0","@remix-run/test":"0.6.1","@remix-run/assert":"0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.21.2_1789770759134_0.19880592034075684","host":"s3://npm-registry-packages-npm-production"}},"0.21.3":{"name":"@remix-run/headers","version":"0.21.3","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/headers@0.21.3","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"e2b434717cd00334dec8dd5a439b3bb71c79585e","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-0.21.3.tgz","fileCount":87,"integrity":"sha512-DEKN39YqaDx2m8l38hsfnIq4i5CUmeXhE4U8cfjkHZTMlGUQl9Ty1YF3v/8vQeZKoG8ccxz/h638a8jYmlBPeA==","signatures":[{"sig":"MEUCIQDSvRYgEjUyTZtbw88urUUjgAKYLqmZjQk4n/wVgAqwIgIgb2eEUdbA8WVgJIgeiFaykdAGq1F6KWJmyXxCBca7toI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQD2si45J/Etf7+7eDC1AUTjauMilIg7LgBR0gFL10yU1QIgB9F06+gzevWedTfHLPzn9N1eBg8+A+r8/etq2bntmos=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fheaders@0.21.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":334063},"type":"module","_from":"file:/tmp/remix-publish-headers-AxZxcR/remix-run-headers-0.21.3.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./vary":{"types":"./dist/lib/vary.d.ts","default":"./dist/lib/vary.js"},"./range":{"types":"./dist/lib/range.d.ts","default":"./dist/lib/range.js"},"./accept":{"types":"./dist/lib/accept.d.ts","default":"./dist/lib/accept.js"},"./cookie":{"types":"./dist/lib/cookie.d.ts","default":"./dist/lib/cookie.js"},"./if-match":{"types":"./dist/lib/if-match.d.ts","default":"./dist/lib/if-match.js"},"./if-range":{"types":"./dist/lib/if-range.d.ts","default":"./dist/lib/if-range.js"},"./set-cookie":{"types":"./dist/lib/set-cookie.d.ts","default":"./dist/lib/set-cookie.js"},"./raw-headers":{"types":"./dist/lib/raw-headers.d.ts","default":"./dist/lib/raw-headers.js"},"./content-type":{"types":"./dist/lib/content-type.d.ts","default":"./dist/lib/content-type.js"},"./package.json":"./package.json","./cache-control":{"types":"./dist/lib/cache-control.d.ts","default":"./dist/lib/cache-control.js"},"./content-range":{"types":"./dist/lib/content-range.d.ts","default":"./dist/lib/content-range.js"},"./if-none-match":{"types":"./dist/lib/if-none-match.d.ts","default":"./dist/lib/if-none-match.js"},"./accept-encoding":{"types":"./dist/lib/accept-encoding.d.ts","default":"./dist/lib/accept-encoding.js"},"./accept-language":{"types":"./dist/lib/accept-language.d.ts","default":"./dist/lib/accept-language.js"},"./content-disposition":{"types":"./dist/lib/content-disposition.d.ts","default":"./dist/lib/content-disposition.js"}},"scripts":{"test":"remix test","build":"tsc -p tsconfig.build.json","clean":"git clean -fdX","test:bun":"bun x --bun remix test","typecheck":"tsc --noEmit"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"967aa0e9-318a-49a4-b439-aeac50f5f1a5"}},"_resolved":"/tmp/remix-publish-headers-AxZxcR/remix-run-headers-0.21.3.tgz","_integrity":"sha512-DEKN39YqaDx2m8l38hsfnIq4i5CUmeXhE4U8cfjkHZTMlGUQl9Ty1YF3v/8vQeZKoG8ccxz/h638a8jYmlBPeA==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.19.0","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^24.6.0","@remix-run/test":"0.6.2","@remix-run/assert":"0.3.1"},"_npmOperationalInternal":{"tmp":"tmp/headers_0.21.3_1790631574481_0.9669388269853361","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"_id":"@remix-run/headers@1.0.0","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"66642563acc06d7ce7c641745055ed12b4564d71","tarball":"https://registry.npmjs.org/@remix-run/headers/-/headers-1.0.0.tgz","fileCount":87,"integrity":"sha512-EhZ8V2eqrRWZym4FwGRaEw21w9b8EgwnZ5NA8RCY/V4X/COKTyoEthUcH/w0wVgzIn+PeWgp+YLHq+9r4pqEUQ==","signatures":[{"sig":"MEYCIQDefEoZ0zpdMMKT/4na2+uyxVuRx86NhM/drodGfEpPtwIhANu8dGGl7iz1gWvGzD4HZMP0ax1IA7hvkvbrhBcwPEW7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBIkMoYnEza0Di/qRR+VQMTreNVphd5gbzlHUkNBf331AiAgR0SUs6iOFNlSYB+BLH5BXG7VRWnwTXcwmGs7Fi/jeA=="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fheaders@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":334062},"name":"@remix-run/headers","type":"module","_from":"file:/tmp/remix-publish-headers-VwWcFc/remix-run-headers-1.0.0.tgz","author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./vary":{"types":"./dist/lib/vary.d.ts","default":"./dist/lib/vary.js"},"./range":{"types":"./dist/lib/range.d.ts","default":"./dist/lib/range.js"},"./accept":{"types":"./dist/lib/accept.d.ts","default":"./dist/lib/accept.js"},"./cookie":{"types":"./dist/lib/cookie.d.ts","default":"./dist/lib/cookie.js"},"./if-match":{"types":"./dist/lib/if-match.d.ts","default":"./dist/lib/if-match.js"},"./if-range":{"types":"./dist/lib/if-range.d.ts","default":"./dist/lib/if-range.js"},"./set-cookie":{"types":"./dist/lib/set-cookie.d.ts","default":"./dist/lib/set-cookie.js"},"./raw-headers":{"types":"./dist/lib/raw-headers.d.ts","default":"./dist/lib/raw-headers.js"},"./content-type":{"types":"./dist/lib/content-type.d.ts","default":"./dist/lib/content-type.js"},"./package.json":"./package.json","./cache-control":{"types":"./dist/lib/cache-control.d.ts","default":"./dist/lib/cache-control.js"},"./content-range":{"types":"./dist/lib/content-range.d.ts","default":"./dist/lib/content-range.js"},"./if-none-match":{"types":"./dist/lib/if-none-match.d.ts","default":"./dist/lib/if-none-match.js"},"./accept-encoding":{"types":"./dist/lib/accept-encoding.d.ts","default":"./dist/lib/accept-encoding.js"},"./accept-language":{"types":"./dist/lib/accept-language.d.ts","default":"./dist/lib/accept-language.js"},"./content-disposition":{"types":"./dist/lib/content-disposition.d.ts","default":"./dist/lib/content-disposition.js"}},"license":"MIT","scripts":{"test":"remix test","build":"tsc -p tsconfig.build.json","clean":"git clean -fdX","test:bun":"bun x --bun remix test","typecheck":"tsc --noEmit"},"version":"1.0.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"967aa0e9-318a-49a4-b439-aeac50f5f1a5"}},"homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"_resolved":"/tmp/remix-publish-headers-VwWcFc/remix-run-headers-1.0.0.tgz","_integrity":"sha512-EhZ8V2eqrRWZym4FwGRaEw21w9b8EgwnZ5NA8RCY/V4X/COKTyoEthUcH/w0wVgzIn+PeWgp+YLHq+9r4pqEUQ==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"_npmVersion":"11.19.0","description":"A toolkit for working with HTTP headers in JavaScript","directories":{},"maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"sideEffects":false,"_nodeVersion":"24.21.0","_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^24.6.0","@remix-run/test":"1.0.0","@remix-run/assert":"1.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/headers_1.0.0_1790895151675_0.9219227418964233"}}},"time":{"created":"2025-07-18T20:31:43.353Z","modified":"2026-10-01T22:52:32.150Z","0.12.0":"2025-07-18T20:31:43.679Z","0.13.0":"2025-10-04T07:17:56.236Z","0.14.0":"2025-10-22T16:48:23.826Z","0.15.0":"2025-11-04T20:26:12.022Z","0.16.0":"2025-11-05T00:07:47.905Z","0.17.0":"2025-11-18T00:59:53.062Z","0.17.1":"2025-11-21T23:48:37.420Z","0.17.2":"2025-11-25T04:30:06.388Z","0.18.0":"2025-11-25T23:02:09.734Z","0.19.0":"2026-01-20T22:27:49.847Z","0.20.0":"2026-05-20T03:20:47.980Z","0.21.0":"2026-05-20T20:16:49.275Z","0.21.1":"2026-05-29T18:16:16.216Z","0.21.2":"2026-09-18T22:32:39.238Z","0.21.3":"2026-09-28T21:39:34.578Z","1.0.0":"2026-10-01T22:52:31.760Z"},"bugs":{"url":"https://github.com/remix-run/remix/issues"},"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","homepage":"https://github.com/remix-run/remix/tree/main/packages/headers#readme","keywords":["fetch","http","header","headers","http-headers","request-headers","response-headers","content-negotiation","cookies","set-cookie","cache-control","content-type","accept","accept-encoding","accept-language","content-disposition","if-none-match","etag","user-agent","host","last-modified"],"repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/headers"},"description":"A toolkit for working with HTTP headers in JavaScript","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"readme":"# headers\n\nTyped utilities for parsing, manipulating, and serializing HTTP header values. `headers` provides focused classes for common HTTP headers.\n\n## Features\n\n- **Enhanced `Headers` Class** - Use `SuperHeaders` for lazy, typed property accessors that still work anywhere native `Headers` are expected\n- **Header-Specific Classes** - Purpose-built APIs for `Accept`, `Cache-Control`, `Content-Type`, and more\n- **Round-Trip Safety** - Parse from raw values and serialize back with `.toString()`\n- **Typed Operations** - Work with structured values instead of manual string parsing\n\n## Installation\n\n```sh\nnpm i remix\n```\n\n## Usage\n\n`SuperHeaders` extends the native `Headers` class and adds lazy, typed property accessors for common headers. It is also the default export from this package.\n\n```ts\nimport Headers from 'remix/headers'\n\nlet headers = new Headers(request.headers)\n\nheaders.contentType = { mediaType: 'text/html', charset: 'utf-8' }\nheaders.cacheControl = { public: true, maxAge: 3600 }\nheaders.setCookie = { name: 'session', value: 'abc', httpOnly: true }\n\nheaders.contentType.charset = 'iso-8859-1'\nheaders.cacheControl.maxAge = 60\nheaders.setCookie.push({ name: 'theme', value: 'dark', path: '/' })\n\nreturn new Response(html, { headers })\n```\n\nBecause `SuperHeaders` is a real `Headers` subclass, it can be passed directly to platform APIs:\n\n```ts\nlet headers = new Headers({ contentType: 'text/plain' })\n\nheaders instanceof globalThis.Headers // true\nnew Response('Hello', { headers }).headers.get('Content-Type') // 'text/plain'\n```\n\nTyped accessors parse values only when you read them:\n\n```ts\nlet headers = new Headers({ 'Content-Type': 'application/json; charset=utf-8' })\n\nheaders.get('Content-Type') // no typed parse needed\nheaders.contentType.mediaType // parses Content-Type lazily\n```\n\nUse `apply()` to apply a `SuperHeadersInit` value to an existing instance with header-aware semantics:\n\n```ts\nlet headers = new Headers({\n  contentType: 'text/html',\n  setCookie: { name: 'session', value: 'abc' },\n  vary: 'Accept-Encoding',\n})\n\nheaders.apply({\n  contentType: 'application/json',\n  setCookie: { name: 'theme', value: 'dark' },\n  vary: ['Accept-Encoding', 'Accept-Language'],\n})\n\nheaders.get('Content-Type') // 'application/json'\nheaders.get('Vary') // 'accept-encoding, accept-language'\nheaders.getSetCookie() // ['session=abc', 'theme=dark']\n```\n\n## Individual Header Utilities\n\nEach supported header has a class that represents the header value. Use the static `from()` method to parse header values. Each class has a `toString()` method that returns the header value as a string, which you can either call manually, or will be called automatically when the header class is used in a context that expects a string.\n\nThe following headers are currently supported:\n\n- [Accept](./README.md#accept)\n- [Accept-Encoding](./README.md#accept-encoding)\n- [Accept-Language](./README.md#accept-language)\n- [Cache-Control](./README.md#cache-control)\n- [Content-Disposition](./README.md#content-disposition)\n- [Content-Range](./README.md#content-range)\n- [Content-Type](./README.md#content-type)\n- [Cookie](./README.md#cookie)\n- [If-Match](./README.md#if-match)\n- [If-None-Match](./README.md#if-none-match)\n- [If-Range](./README.md#if-range)\n- [Range](./README.md#range)\n- [Set-Cookie](./README.md#set-cookie)\n- [Vary](./README.md#vary)\n\nIf you only need a specific header parser (for example, just `Content-Type`), import that parser directly from its subpath. This avoids pulling the package barrel and `SuperHeaders`:\n\n```ts\nimport { ContentType } from 'remix/headers/content-type'\nimport { SetCookie } from 'remix/headers/set-cookie'\n\nlet contentType = ContentType.from('text/plain; charset=utf-8')\nlet setCookie = new SetCookie('session=abc; Path=/')\n```\n\n### Accept\n\nParse, manipulate and stringify [`Accept` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept).\n\nImplements `Map<mediaType, quality>`.\n\n```ts\nimport { Accept } from 'remix/headers'\n\n// Parse from headers\nlet accept = Accept.from(request.headers.get('Accept'))\n\naccept.mediaTypes // ['text/html', 'text/*']\naccept.weights // [1, 0.9]\naccept.accepts('text/html') // true\naccept.accepts('text/plain') // true (matches text/*)\naccept.accepts('image/jpeg') // false\naccept.getWeight('text/plain') // 1 (matches text/*)\naccept.getPreferred(['text/html', 'text/plain']) // 'text/html'\n\n// Iterate\nfor (let [mediaType, quality] of accept) {\n  // ...\n}\n\n// Modify and set header\naccept.set('application/json', 0.8)\naccept.delete('text/*')\nheaders.set('Accept', accept)\n\n// Construct directly\nnew Accept('text/html, text/*;q=0.9')\nnew Accept({ 'text/html': 1, 'text/*': 0.9 })\nnew Accept(['text/html', ['text/*', 0.9]])\n\n// Use class for type safety when setting Headers values\n// via Accept's `.toString()` method\nlet headers = new Headers({\n  Accept: new Accept({ 'text/html': 1, 'application/json': 0.8 }),\n})\nheaders.set('Accept', new Accept({ 'text/html': 1, 'application/json': 0.8 }))\n```\n\n### Accept-Encoding\n\nParse, manipulate and stringify [`Accept-Encoding` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding).\n\nImplements `Map<encoding, quality>`.\n\n```ts\nimport { AcceptEncoding } from 'remix/headers'\n\n// Parse from headers\nlet acceptEncoding = AcceptEncoding.from(request.headers.get('Accept-Encoding'))\n\nacceptEncoding.encodings // ['gzip', 'deflate']\nacceptEncoding.weights // [1, 0.8]\nacceptEncoding.accepts('gzip') // true\nacceptEncoding.accepts('br') // false\nacceptEncoding.getWeight('gzip') // 1\nacceptEncoding.getPreferred(['gzip', 'deflate', 'br']) // 'gzip'\n\n// Modify and set header\nacceptEncoding.set('br', 1)\nacceptEncoding.delete('deflate')\nheaders.set('Accept-Encoding', acceptEncoding)\n\n// Construct directly\nnew AcceptEncoding('gzip, deflate;q=0.8')\nnew AcceptEncoding({ gzip: 1, deflate: 0.8 })\n\n// Use class for type safety when setting Headers values\n// via AcceptEncoding's `.toString()` method\nlet headers = new Headers({\n  'Accept-Encoding': new AcceptEncoding({ gzip: 1, br: 0.9 }),\n})\nheaders.set('Accept-Encoding', new AcceptEncoding({ gzip: 1, br: 0.9 }))\n```\n\n### Accept-Language\n\nParse, manipulate and stringify [`Accept-Language` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language).\n\nImplements `Map<language, quality>`.\n\n```ts\nimport { AcceptLanguage } from 'remix/headers'\n\n// Parse from headers\nlet acceptLanguage = AcceptLanguage.from(request.headers.get('Accept-Language'))\n\nacceptLanguage.languages // ['en-us', 'en']\nacceptLanguage.weights // [1, 0.9]\nacceptLanguage.accepts('en-US') // true\nacceptLanguage.accepts('en-GB') // true (matches en)\nacceptLanguage.getWeight('en-GB') // 1 (matches en)\nacceptLanguage.getPreferred(['en-US', 'en-GB', 'fr']) // 'en-US'\n\n// Modify and set header\nacceptLanguage.set('fr', 0.5)\nacceptLanguage.delete('en')\nheaders.set('Accept-Language', acceptLanguage)\n\n// Construct directly\nnew AcceptLanguage('en-US, en;q=0.9')\nnew AcceptLanguage({ 'en-US': 1, en: 0.9 })\n\n// Use class for type safety when setting Headers values\n// via AcceptLanguage's `.toString()` method\nlet headers = new Headers({\n  'Accept-Language': new AcceptLanguage({ 'en-US': 1, fr: 0.5 }),\n})\nheaders.set('Accept-Language', new AcceptLanguage({ 'en-US': 1, fr: 0.5 }))\n```\n\n### Cache-Control\n\nParse, manipulate and stringify [`Cache-Control` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control).\n\n```ts\nimport { CacheControl } from 'remix/headers'\n\n// Parse from headers\nlet cacheControl = CacheControl.from(response.headers.get('Cache-Control'))\n\ncacheControl.public // true\ncacheControl.maxAge // 3600\ncacheControl.sMaxage // 7200\ncacheControl.noCache // undefined\ncacheControl.noStore // undefined\ncacheControl.noTransform // undefined\ncacheControl.mustRevalidate // undefined\ncacheControl.immutable // undefined\n\n// Modify and set header\ncacheControl.maxAge = 7200\ncacheControl.immutable = true\nheaders.set('Cache-Control', cacheControl)\n\n// Construct directly\nnew CacheControl('public, max-age=3600')\nnew CacheControl({ public: true, maxAge: 3600 })\n\n// Use class for type safety when setting Headers values\n// via CacheControl's `.toString()` method\nlet headers = new Headers({\n  'Cache-Control': new CacheControl({ public: true, maxAge: 3600 }),\n})\nheaders.set('Cache-Control', new CacheControl({ public: true, maxAge: 3600 }))\n```\n\n### Content-Disposition\n\nParse, manipulate and stringify [`Content-Disposition` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition).\n\n```ts\nimport { ContentDisposition } from 'remix/headers'\n\n// Parse from headers\nlet contentDisposition = ContentDisposition.from(response.headers.get('Content-Disposition'))\n\ncontentDisposition.type // 'attachment'\ncontentDisposition.filename // 'example.pdf'\ncontentDisposition.filenameSplat // \"UTF-8''%E4%BE%8B%E5%AD%90.pdf\"\ncontentDisposition.preferredFilename // '例子.pdf' (decoded from filename*)\n\n// Modify and set header\ncontentDisposition.filename = 'download.pdf'\nheaders.set('Content-Disposition', contentDisposition)\n\n// Construct directly\nnew ContentDisposition('attachment; filename=\"example.pdf\"')\nnew ContentDisposition({ type: 'attachment', filename: 'example.pdf' })\n\n// Use class for type safety when setting Headers values\n// via ContentDisposition's `.toString()` method\nlet headers = new Headers({\n  'Content-Disposition': new ContentDisposition({ type: 'attachment', filename: 'example.pdf' }),\n})\nheaders.set(\n  'Content-Disposition',\n  new ContentDisposition({ type: 'attachment', filename: 'example.pdf' }),\n)\n```\n\n#### Filename Safety\n\n`Content-Disposition` filenames received from clients are untrusted input. `filename` and `filenameSplat` expose parsed parameter values; `preferredFilename` selects and decodes `filename*` when available, falling back to `filename`. These APIs preserve filename metadata without sanitizing it for filesystem use, so values can contain path separators, `..` segments, or absolute paths.\n\nDo not use any of these values, or a `File.name` derived from them, directly as a filesystem path or join them to an upload directory. Generate a storage name in your application, such as `crypto.randomUUID()`, within a directory you control, and keep the submitted filename only as metadata. The same rule applies to filenames received from remote servers. See [RFC 6266, section 4.3](https://www.rfc-editor.org/rfc/rfc6266.html#section-4.3) and [RFC 7578, section 4.2](https://www.rfc-editor.org/rfc/rfc7578.html#section-4.2).\n\n### Content-Range\n\nParse, manipulate and stringify [`Content-Range` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range).\n\n```ts\nimport { ContentRange } from 'remix/headers'\n\n// Parse from headers\nlet contentRange = ContentRange.from(response.headers.get('Content-Range'))\n\ncontentRange.unit // \"bytes\"\ncontentRange.start // 200\ncontentRange.end // 1000\ncontentRange.size // 67589\n\n// Unsatisfied range\nlet unsatisfied = ContentRange.from('bytes */67589')\nunsatisfied.start // null\nunsatisfied.end // null\nunsatisfied.size // 67589\n\n// Construct directly\nnew ContentRange({ unit: 'bytes', start: 0, end: 499, size: 1000 })\n\n// Use class for type safety when setting Headers values\n// via ContentRange's `.toString()` method\nlet headers = new Headers({\n  'Content-Range': new ContentRange({ unit: 'bytes', start: 0, end: 499, size: 1000 }),\n})\nheaders.set('Content-Range', new ContentRange({ unit: 'bytes', start: 0, end: 499, size: 1000 }))\n```\n\n### Content-Type\n\nParse, manipulate and stringify [`Content-Type` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type).\n\n```ts\nimport { ContentType } from 'remix/headers'\n\n// Parse from headers\nlet contentType = ContentType.from(request.headers.get('Content-Type'))\n\ncontentType.mediaType // \"text/html\"\ncontentType.charset // \"utf-8\"\ncontentType.boundary // undefined (or boundary string for multipart)\n\n// Modify and set header\ncontentType.charset = 'iso-8859-1'\nheaders.set('Content-Type', contentType)\n\n// Construct directly\nnew ContentType('text/html; charset=utf-8')\nnew ContentType({ mediaType: 'text/html', charset: 'utf-8' })\n\n// Use class for type safety when setting Headers values\n// via ContentType's `.toString()` method\nlet headers = new Headers({\n  'Content-Type': new ContentType({ mediaType: 'text/html', charset: 'utf-8' }),\n})\nheaders.set('Content-Type', new ContentType({ mediaType: 'text/html', charset: 'utf-8' }))\n```\n\n### Cookie\n\nParse, manipulate and stringify [`Cookie` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie).\n\nImplements an ordered list of name/value pairs. Duplicate cookie names are preserved, such as when cookies with the same name were set for different paths.\n\n```ts\nimport { Cookie } from 'remix/headers'\n\n// Parse from headers\nlet cookie = Cookie.from(request.headers.get('Cookie'))\n\ncookie.get('session_id') // 'abc123'\ncookie.getAll('session_id') // ['abc123']\ncookie.get('theme') // 'dark'\ncookie.has('session_id') // true\ncookie.size // 2\n\n// Iterate\nfor (let [name, value] of cookie) {\n  // ...\n}\n\n// Modify and set header\ncookie.set('theme', 'light')\ncookie.append('session_id', 'def456')\ncookie.delete('session_id')\nheaders.set('Cookie', cookie)\n\n// Construct directly\nnew Cookie('session_id=abc123; theme=dark')\nnew Cookie({ session_id: 'abc123', theme: 'dark' })\nnew Cookie([\n  ['session_id', 'abc123'],\n  ['theme', 'dark'],\n])\n\n// Use class for type safety when setting Headers values\n// via Cookie's `.toString()` method\nlet headers = new Headers({\n  Cookie: new Cookie({ session_id: 'abc123', theme: 'dark' }),\n})\nheaders.set('Cookie', new Cookie({ session_id: 'abc123', theme: 'dark' }))\n```\n\n### If-Match\n\nParse, manipulate and stringify [`If-Match` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Match).\n\nImplements `Set<etag>`.\n\n```ts\nimport { IfMatch } from 'remix/headers'\n\n// Parse from headers\nlet ifMatch = IfMatch.from(request.headers.get('If-Match'))\n\nifMatch.tags // ['\"67ab43\"', '\"54ed21\"']\nifMatch.has('\"67ab43\"') // true\nifMatch.matches('\"67ab43\"') // true (checks precondition)\nifMatch.matches('\"abc123\"') // false\n\n// Note: Uses strong comparison only (weak ETags never match)\nlet weak = IfMatch.from('W/\"67ab43\"')\nweak.matches('W/\"67ab43\"') // false\n\n// Modify and set header\nifMatch.add('\"newetag\"')\nifMatch.delete('\"67ab43\"')\nheaders.set('If-Match', ifMatch)\n\n// Construct directly\nnew IfMatch(['abc123', 'def456'])\n\n// Use class for type safety when setting Headers values\n// via IfMatch's `.toString()` method\nlet headers = new Headers({\n  'If-Match': new IfMatch(['\"abc123\"', '\"def456\"']),\n})\nheaders.set('If-Match', new IfMatch(['\"abc123\"', '\"def456\"']))\n```\n\n### If-None-Match\n\nParse, manipulate and stringify [`If-None-Match` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match).\n\nImplements `Set<etag>`.\n\n```ts\nimport { IfNoneMatch } from 'remix/headers'\n\n// Parse from headers\nlet ifNoneMatch = IfNoneMatch.from(request.headers.get('If-None-Match'))\n\nifNoneMatch.tags // ['\"67ab43\"', '\"54ed21\"']\nifNoneMatch.has('\"67ab43\"') // true\nifNoneMatch.matches('\"67ab43\"') // true\n\n// Supports weak comparison (unlike If-Match)\nlet weak = IfNoneMatch.from('W/\"67ab43\"')\nweak.matches('W/\"67ab43\"') // true\n\n// Modify and set header\nifNoneMatch.add('\"newetag\"')\nifNoneMatch.delete('\"67ab43\"')\nheaders.set('If-None-Match', ifNoneMatch)\n\n// Construct directly\nnew IfNoneMatch(['abc123'])\n\n// Use class for type safety when setting Headers values\n// via IfNoneMatch's `.toString()` method\nlet headers = new Headers({\n  'If-None-Match': new IfNoneMatch(['\"abc123\"']),\n})\nheaders.set('If-None-Match', new IfNoneMatch(['\"abc123\"']))\n```\n\n### If-Range\n\nParse, manipulate and stringify [`If-Range` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Range).\n\n```ts\nimport { IfRange } from 'remix/headers'\n\n// Parse from headers\nlet ifRange = IfRange.from(request.headers.get('If-Range'))\n\n// With HTTP date\nifRange.matches({ lastModified: 1609459200000 }) // true\nifRange.matches({ lastModified: new Date('2021-01-01') }) // true\n\n// With ETag\nlet etagHeader = IfRange.from('\"67ab43\"')\netagHeader.matches({ etag: '\"67ab43\"' }) // true\n\n// Empty/null returns empty instance (range proceeds unconditionally)\nlet empty = IfRange.from(null)\nempty.matches({ etag: '\"any\"' }) // true\n\n// Construct directly\nnew IfRange('\"abc123\"')\n\n// Use class for type safety when setting Headers values\n// via IfRange's `.toString()` method\nlet headers = new Headers({\n  'If-Range': new IfRange('\"abc123\"'),\n})\nheaders.set('If-Range', new IfRange('\"abc123\"'))\n```\n\n### Range\n\nParse, manipulate and stringify [`Range` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Range).\n\n```ts\nimport { Range } from 'remix/headers'\n\n// Parse from headers\nlet range = Range.from(request.headers.get('Range'))\n\nrange.unit // \"bytes\"\nrange.ranges // [{ start: 200, end: 1000 }]\nrange.canSatisfy(2000) // true\nrange.canSatisfy(500) // false\nrange.normalize(2000) // [{ start: 200, end: 1000 }]\n\n// Multiple ranges\nlet multi = Range.from('bytes=0-499, 1000-1499')\nmulti.ranges.length // 2\n\n// Suffix range (last N bytes)\nlet suffix = Range.from('bytes=-500')\nsuffix.normalize(2000) // [{ start: 1500, end: 1999 }]\n\n// Construct directly\nnew Range({ unit: 'bytes', ranges: [{ start: 0, end: 999 }] })\n\n// Use class for type safety when setting Headers values\n// via Range's `.toString()` method\nlet headers = new Headers({\n  Range: new Range({ unit: 'bytes', ranges: [{ start: 0, end: 999 }] }),\n})\nheaders.set('Range', new Range({ unit: 'bytes', ranges: [{ start: 0, end: 999 }] }))\n```\n\n### Set-Cookie\n\nParse, manipulate and stringify [`Set-Cookie` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie).\n\n```ts\nimport { SetCookie } from 'remix/headers'\n\n// Parse from headers\nlet setCookie = SetCookie.from(response.headers.get('Set-Cookie'))\n\nsetCookie.name // \"session_id\"\nsetCookie.value // \"abc\"\nsetCookie.path // \"/\"\nsetCookie.httpOnly // true\nsetCookie.secure // true\nsetCookie.domain // undefined\nsetCookie.maxAge // undefined\nsetCookie.expires // undefined\nsetCookie.sameSite // undefined\n\n// Modify and set header\nsetCookie.maxAge = 3600\nsetCookie.sameSite = 'Strict'\nheaders.set('Set-Cookie', setCookie)\n\n// Construct directly\nnew SetCookie('session_id=abc; Path=/; HttpOnly; Secure')\nnew SetCookie({\n  name: 'session_id',\n  value: 'abc',\n  path: '/',\n  httpOnly: true,\n  secure: true,\n})\n\n// Use class for type safety when setting Headers values\n// via SetCookie's `.toString()` method\nlet headers = new Headers({\n  'Set-Cookie': new SetCookie({ name: 'session_id', value: 'abc', httpOnly: true }),\n})\nheaders.set('Set-Cookie', new SetCookie({ name: 'session_id', value: 'abc', httpOnly: true }))\n```\n\n### Vary\n\nParse, manipulate and stringify [`Vary` headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Vary).\n\nImplements `Set<headerName>`.\n\n```ts\nimport { Vary } from 'remix/headers'\n\n// Parse from headers\nlet vary = Vary.from(response.headers.get('Vary'))\n\nvary.headerNames // ['accept-encoding', 'accept-language']\nvary.has('Accept-Encoding') // true (case-insensitive)\nvary.size // 2\n\n// Modify and set header\nvary.add('User-Agent')\nvary.delete('Accept-Language')\nheaders.set('Vary', vary)\n\n// Construct directly\nnew Vary('Accept-Encoding, Accept-Language')\nnew Vary(['Accept-Encoding', 'Accept-Language'])\nnew Vary({ headerNames: ['Accept-Encoding', 'Accept-Language'] })\n\n// Use class for type safety when setting Headers values\n// via Vary's `.toString()` method\nlet headers = new Headers({\n  Vary: new Vary(['Accept-Encoding', 'Accept-Language']),\n})\nheaders.set('Vary', new Vary(['Accept-Encoding', 'Accept-Language']))\n```\n\n## Raw Headers\n\nParse and stringify raw HTTP header strings.\n\n```ts\nimport { parse, stringify } from 'remix/headers'\n\nlet headers = parse('Content-Type: text/html\\r\\nCache-Control: no-cache')\nheaders.get('Content-Type') // 'text/html'\nheaders.get('Cache-Control') // 'no-cache'\n\nstringify(headers)\n// 'Content-Type: text/html\\r\\nCache-Control: no-cache'\n```\n\n## Related Packages\n\n- [`fetch-proxy`](https://github.com/remix-run/remix/tree/main/packages/fetch-proxy) - Build HTTP proxy servers using the web fetch API\n- [`node-fetch-server`](https://github.com/remix-run/remix/tree/main/packages/node-fetch-server) - Build HTTP servers on Node.js using the web fetch API\n\n## License\n\nSee [LICENSE](https://github.com/remix-run/remix/blob/main/LICENSE)\n","readmeFilename":"README.md"}