{"_id":"@remix-run/form-data-parser","_rev":"21-79e24555568d0a811b8557e1f5b33680","name":"@remix-run/form-data-parser","dist-tags":{"latest":"1.1.0"},"versions":{"0.10.0":{"name":"@remix-run/form-data-parser","version":"0.10.0","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.10.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/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"f0d6d6897a21a2792093b13b168b8ffc28ebff86","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.10.0.tgz","fileCount":13,"integrity":"sha512-V5fY84u0nlF4VmJLz1bJaUacjJ4houOAvoKVt1deSYzJQ3NJSJqamGceHiHeGFJfEdqiG+hQmV+6Sm6Vu/skLQ==","signatures":[{"sig":"MEQCIG18CXTvbN1kalOY/llMuY84pifmhek3vvTQzQU6+2CBAiBYF646GR13P8PIW3nCDmEHnWk9METs2HqfqxjWQGLcCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":408505},"main":"./dist/form-data-parser.cjs","type":"module","_from":"file:remix-run-form-data-parser-0.10.0.tgz","types":"./dist/form-data-parser.d.ts","module":"./dist/form-data-parser.js","exports":{".":{"types":"./dist/form-data-parser.d.ts","import":"./dist/form-data-parser.js","default":"./dist/form-data-parser.js","require":"./dist/form-data-parser.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/form-data-parser.ts --bundle --outfile=dist/form-data-parser.cjs --format=cjs --platform=node --sourcemap","build:esm":"esbuild src/form-data-parser.ts --bundle --outfile=dist/form-data-parser.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/5c726996a4e1009e024ca22d11fe7c42/remix-run-form-data-parser-0.10.0.tgz","_integrity":"sha512-V5fY84u0nlF4VmJLz1bJaUacjJ4houOAvoKVt1deSYzJQ3NJSJqamGceHiHeGFJfEdqiG+hQmV+6Sm6Vu/skLQ==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.4.2","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.2.0","dependencies":{"@remix-run/multipart-parser":"^0.10.1"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.5","@types/node":"^22.4.1"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.10.0_1753386518868_0.9437661953964327","host":"s3://npm-registry-packages-npm-production"}},"0.10.1":{"name":"@remix-run/form-data-parser","version":"0.10.1","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.10.1","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"},{"name":"chancestrickland","email":"hi@chance.dev"}],"homepage":"https://github.com/remix-run/remix/tree/v3/packages/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"1df105093457a7cd20bbfe660453c3fd47c7ce88","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.10.1.tgz","fileCount":13,"integrity":"sha512-vuse/+1fVjxGnwgVJ67xTKMvkqQX7XfNbriPA1cXSFWYfiLlOC2GUPXCprNwUULkW0c9oom6fXTIj5laog1vVA==","signatures":[{"sig":"MEUCIQD4CjU6mKKlU847Zk4OYatyWmNopnEZ9JCpOsv8ibBmoQIgBhxhHkVuQ1q89oXAVn1zSVZjc8lijAUnuZZtK2Fc6AE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":408505},"main":"./dist/form-data-parser.cjs","type":"module","_from":"file:remix-run-form-data-parser-0.10.1.tgz","types":"./dist/form-data-parser.d.ts","module":"./dist/form-data-parser.js","exports":{".":{"types":"./dist/form-data-parser.d.ts","import":"./dist/form-data-parser.js","default":"./dist/form-data-parser.js","require":"./dist/form-data-parser.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/form-data-parser.ts --bundle --outfile=dist/form-data-parser.cjs --format=cjs --platform=node --sourcemap","build:esm":"esbuild src/form-data-parser.ts --bundle --outfile=dist/form-data-parser.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/1bf9892a0dd2fa2bc8c0c2924670a917/remix-run-form-data-parser-0.10.1.tgz","_integrity":"sha512-vuse/+1fVjxGnwgVJ67xTKMvkqQX7XfNbriPA1cXSFWYfiLlOC2GUPXCprNwUULkW0c9oom6fXTIj5laog1vVA==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.4.2","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.2.0","dependencies":{"@remix-run/multipart-parser":"^0.11.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.5","@types/node":"^22.4.1"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.10.1_1753394969671_0.43168022637415593","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@remix-run/form-data-parser","version":"0.11.0","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.11.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"13e4d97cf07c889ed6def31de4e1757cf74f529e","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.11.0.tgz","fileCount":13,"integrity":"sha512-vD1xko5NntvKKzCOM6hAmCfUOPguIWJJ3WqcBFMqqUYlk3Z4j9t4CpvL0taq9gaB8kMtYN78lD4r8Nb8xXI4zw==","signatures":[{"sig":"MEYCIQDGqpY29kNM8Kfob6a9sqjeFPCbHPJRYq0cLjz2+aBXYQIhAPK9Ed4sfgbgqRPGkbKejdb9K9r1Y5bWb17sPragUhzl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":409205},"main":"./dist/index.cjs","type":"module","_from":"file:remix-run-form-data-parser-0.11.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/307d0997cf8c0ed8f6cf163f865780e4/remix-run-form-data-parser-0.11.0.tgz","_integrity":"sha512-vD1xko5NntvKKzCOM6hAmCfUOPguIWJJ3WqcBFMqqUYlk3Z4j9t4CpvL0taq9gaB8kMtYN78lD4r8Nb8xXI4zw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.6.0","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.9.0","dependencies":{"@remix-run/multipart-parser":"^0.11.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.10","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.11.0_1759645666881_0.27509674710085386","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@remix-run/form-data-parser","version":"0.12.0","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.12.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/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"607335d90185967a817ab326c9a551804d1ee5a1","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.12.0.tgz","fileCount":11,"integrity":"sha512-PSeHTVp1nDAA1yr8HUiU0dNkQ3jD4TlW6Crw0oV406YC0JskkJ9TyHC8BYKQzi8URFX12fHJD70W3RtvofKqvw==","signatures":[{"sig":"MEUCIBPto/gy87Qwa/EnXd/NcF51r1OICpjX0in17fx/LZbVAiEAtMxMBty3KS/shC/66Qr/6VPkLctfeQKO7Yimz+1nSso=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":212226},"type":"module","_from":"file:remix-run-form-data-parser-0.12.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/4ba3b6fc63547fefbe6542bfad060f4b/remix-run-form-data-parser-0.12.0.tgz","_integrity":"sha512-PSeHTVp1nDAA1yr8HUiU0dNkQ3jD4TlW6Crw0oV406YC0JskkJ9TyHC8BYKQzi8URFX12fHJD70W3RtvofKqvw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.6.1","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.10.0","dependencies":{"@remix-run/multipart-parser":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.10","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.12.0_1761152646189_0.9308524564317864","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@remix-run/form-data-parser","version":"0.13.0","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.13.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/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"b22418087ed7eb8154c62d9f91043e9b08d4b477","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.13.0.tgz","fileCount":11,"integrity":"sha512-6B7ps6FdwtWk2g0/S8riQXLoCWsSrMpDnZ68musT49Rp8YZuBFfD3M0vVvCowhfN8F7nqV1qD5bKC61mOALPyw==","signatures":[{"sig":"MEUCIQCYXfWHS8GV3K8xQijg+ikh19iefu/aPyMdTMhxitLBTAIgBRcKgsVoAHkYI+UErYpjISdalIOQ/f2H90IG/J+nHWU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@0.13.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":213728},"type":"module","_from":"file:remix-run-form-data-parser-0.13.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:3126ee03-a573-40f0-b350-d5c262a74457"}},"_resolved":"/tmp/8eb78d9d64d7f86a96c6ae493a163da5/remix-run-form-data-parser-0.13.0.tgz","_integrity":"sha512-6B7ps6FdwtWk2g0/S8riQXLoCWsSrMpDnZ68musT49Rp8YZuBFfD3M0vVvCowhfN8F7nqV1qD5bKC61mOALPyw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.6.1","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.11.0","dependencies":{"@remix-run/multipart-parser":"^0.12.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.10","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.13.0_1762289662292_0.0888486233393353","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@remix-run/form-data-parser","version":"0.14.0","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@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/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"83adec5110be7c65ae5bc84a55dd3b90c875f5e4","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.14.0.tgz","fileCount":11,"integrity":"sha512-erLDiOCYPkuhbRUv9PVlPa0izyruppBRwxQbvAR+cZ5d1EX4Nv21AGcZn2x63pZMxclWRnnLpmDTjACXgZFgWg==","signatures":[{"sig":"MEUCIQCGBxb/QFHVXY+ecEtoPddNS4kwD3z14r41tfQqVE/4EgIgJrMpEqXgYgjiQ45rxIkYextEbqgTuKbJnM5PwAGy91Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@0.14.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":20381},"type":"module","_from":"file:remix-run-form-data-parser-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":"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:3126ee03-a573-40f0-b350-d5c262a74457"}},"_resolved":"/tmp/f3a1a4fa3e0644faf4d3abe283598f8e/remix-run-form-data-parser-0.14.0.tgz","_integrity":"sha512-erLDiOCYPkuhbRUv9PVlPa0izyruppBRwxQbvAR+cZ5d1EX4Nv21AGcZn2x63pZMxclWRnnLpmDTjACXgZFgWg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.6.1","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.11.0","dependencies":{"@remix-run/multipart-parser":"^0.13.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^24.6.0"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.14.0_1762301365758_0.7359960211430701","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@remix-run/form-data-parser","version":"0.15.0","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@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/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"e3295a81472706c255df88f93ae62279a2eb8db8","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.15.0.tgz","fileCount":11,"integrity":"sha512-sQP4r9218TWmow6Nt252VjKE674dRi4Z8WTnWUxJJG8I/qNfnGZubZ8LgyE0dR9z1gfaEpkd19MfYMLiOTOkJQ==","signatures":[{"sig":"MEQCIAMKlZC7EQ/Ei55s6d89X5qua8oMXgQeEtf2JcORINSJAiBoK7neX6a7PLuVHhgH11QogLkT89wr7RYi6uE1er4E0A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@0.15.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":20715},"type":"module","_from":"file:remix-run-form-data-parser-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","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:3126ee03-a573-40f0-b350-d5c262a74457"}},"_resolved":"/tmp/1053aa58dd89eddadc9433fe00852f2a/remix-run-form-data-parser-0.15.0.tgz","_integrity":"sha512-sQP4r9218TWmow6Nt252VjKE674dRi4Z8WTnWUxJJG8I/qNfnGZubZ8LgyE0dR9z1gfaEpkd19MfYMLiOTOkJQ==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.6.2","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.13.0","dependencies":{"@remix-run/multipart-parser":"^0.14.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.15.0_1769566401350_0.30225710754700463","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@remix-run/form-data-parser","version":"0.16.0","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.16.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"0c361a9d64451b4517fa024f0472f3d1b3853611","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.16.0.tgz","fileCount":11,"integrity":"sha512-k4QCgCyPURpqe+9Rual1GBJ8Ab6ri82Clfh5ooxq03jKQ1TyQZT5xh+XP0R05+Bqg5bzAZl7r2BpmDEvfoRTWw==","signatures":[{"sig":"MEUCIQDjR2KvSQjecPEHLkNH/FUaKEW74G1hgp31S+oLVZh2PQIgAWTo4I5bSnD0CpcunLDoovKTIV0XoMHF8i/yBXIpDS8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@0.16.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":23971},"type":"module","_from":"file:remix-run-form-data-parser-0.16.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"scripts":{"test":"node --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:3126ee03-a573-40f0-b350-d5c262a74457"}},"_resolved":"/tmp/44558065f1741003973a25df7cb21efc/remix-run-form-data-parser-0.16.0.tgz","_integrity":"sha512-k4QCgCyPURpqe+9Rual1GBJ8Ab6ri82Clfh5ooxq03jKQ1TyQZT5xh+XP0R05+Bqg5bzAZl7r2BpmDEvfoRTWw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.9.0","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.14.0","dependencies":{"@remix-run/multipart-parser":"^0.15.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/data-schema":"^0.2.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.16.0_1774479845094_0.5912412045973474","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@remix-run/form-data-parser","version":"0.17.0","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.17.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"2b554a712782f8ea117ada8ae2b4e84673f08e5b","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.17.0.tgz","fileCount":11,"integrity":"sha512-012VyeBYzqHxg/c6n882qDdHgR/hLk+bT+Eh9nb2CCfzt5OtkhAIuQOCj1Me9KZs3x23Rfe06ybZZ8k/dp3cxw==","signatures":[{"sig":"MEUCIAxqvvUG1Yk3AaJ3LxjE4eiXEdfGWw3z6bGJXel36NvJAiEAgW2ttB+uH5fdCxujbOnRdA2irmOYOQcuMnsPA5PhiSw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@0.17.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24702},"type":"module","_from":"file:remix-run-form-data-parser-0.17.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:3126ee03-a573-40f0-b350-d5c262a74457"}},"_resolved":"/tmp/cfcd0377d73b4d45c594738ec8161985/remix-run-form-data-parser-0.17.0.tgz","_integrity":"sha512-012VyeBYzqHxg/c6n882qDdHgR/hLk+bT+Eh9nb2CCfzt5OtkhAIuQOCj1Me9KZs3x23Rfe06ybZZ8k/dp3cxw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.11.0","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.14.1","dependencies":{"@remix-run/multipart-parser":"^0.16.0"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.2.0","@remix-run/assert":"0.1.0","@remix-run/data-schema":"^0.3.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.17.0_1777483794791_0.6618595913328682","host":"s3://npm-registry-packages-npm-production"}},"0.17.1":{"name":"@remix-run/form-data-parser","version":"0.17.1","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.17.1","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"26cca3a768ade2cb0dde5592077bfc6ac822184c","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.17.1.tgz","fileCount":11,"integrity":"sha512-jWtWqcpgu8d9ghwHX5a3YuH7gllGoNFFHfRuo3Ap+iuGJ61zzZK15ZvIqSxKNIqPhj5UgAoILN77kqd/wdufCg==","signatures":[{"sig":"MEUCIBRXLo/sxALjAXz3uJcCj2byp2+AFEid8pGBnEQzEIkuAiEAwpebwynJ6Ddr08eHNov7Ye983RDjmU702hp33JIXjjo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@0.17.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24702},"type":"module","_from":"file:remix-run-form-data-parser-0.17.1.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:3126ee03-a573-40f0-b350-d5c262a74457"}},"_resolved":"/tmp/3e059d526a1185691b3768db8630686e/remix-run-form-data-parser-0.17.1.tgz","_integrity":"sha512-jWtWqcpgu8d9ghwHX5a3YuH7gllGoNFFHfRuo3Ap+iuGJ61zzZK15ZvIqSxKNIqPhj5UgAoILN77kqd/wdufCg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.12.1","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@remix-run/multipart-parser":"^0.16.1"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.4.0","@remix-run/assert":"0.2.0","@remix-run/data-schema":"^0.3.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.17.1_1779247309500_0.19556206789417518","host":"s3://npm-registry-packages-npm-production"}},"0.17.2":{"name":"@remix-run/form-data-parser","version":"0.17.2","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.17.2","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"ddcdbec85a1b2e128e9bc84df15e400e7db64382","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.17.2.tgz","fileCount":11,"integrity":"sha512-6V9XffMkADkCHa/zLZQI2NVx1jDPiGtuiJ5cv9tmYzDn4KXjEJfqwHo6Fj8l95MThfoz5BTkkk2DOW2HEnuYkA==","signatures":[{"sig":"MEUCIAmkqN2Fx1HZF9b0AP7IIkd3MRdHUmjLQDro7Q4n1hgXAiEAvf/+iTLy5kRcN9qEe96p9C9U3Jj1PpNGsZeYH8gz+6w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@0.17.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24604},"type":"module","_from":"file:remix-run-form-data-parser-0.17.2.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:3126ee03-a573-40f0-b350-d5c262a74457"}},"_resolved":"/tmp/fa4e505056d9db96527b7fffec46bf73/remix-run-form-data-parser-0.17.2.tgz","_integrity":"sha512-6V9XffMkADkCHa/zLZQI2NVx1jDPiGtuiJ5cv9tmYzDn4KXjEJfqwHo6Fj8l95MThfoz5BTkkk2DOW2HEnuYkA==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.12.1","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.15.0","dependencies":{"@remix-run/multipart-parser":"^0.16.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.4.1","@remix-run/assert":"0.2.1","@remix-run/data-schema":"^0.3.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.17.2_1779308277872_0.4586663634780428","host":"s3://npm-registry-packages-npm-production"}},"0.17.3":{"name":"@remix-run/form-data-parser","version":"0.17.3","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.17.3","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"92a30c8e615de6780e14ff2246cbdfe62cc017c5","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.17.3.tgz","fileCount":11,"integrity":"sha512-K23ImS2P+Gl4ZEK00dEa2GAuhQJkxocvMsnF5SafcRh4aoKINUcdiCQraBDP+929c3VxnP3nUj5UYzBtGuGIIw==","signatures":[{"sig":"MEUCIC1uOWWH0/j8aRd2LcF955nUyQFX3aXiwTaE2hjXhs8uAiEAg0n3aGwEBfidpN8Df7sWKAKPl25oRijJhGetxwYxmaM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@0.17.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24602},"type":"module","_from":"file:remix-run-form-data-parser-0.17.3.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:3126ee03-a573-40f0-b350-d5c262a74457"}},"_resolved":"/tmp/502b1ad6ef39ad8fa84abe1182629559/remix-run-form-data-parser-0.17.3.tgz","_integrity":"sha512-K23ImS2P+Gl4ZEK00dEa2GAuhQJkxocvMsnF5SafcRh4aoKINUcdiCQraBDP+929c3VxnP3nUj5UYzBtGuGIIw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.13.0","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.16.0","dependencies":{"@remix-run/multipart-parser":"^0.16.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.4.2","@remix-run/assert":"0.2.1","@remix-run/data-schema":"^0.3.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.17.3_1780078629959_0.769125174632278","host":"s3://npm-registry-packages-npm-production"}},"0.17.4":{"name":"@remix-run/form-data-parser","version":"0.17.4","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.17.4","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"67b67028f90603dcc2f5ff0b9330879080cd40c8","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.17.4.tgz","fileCount":11,"integrity":"sha512-mqWVpD2OaJTFEW2i+M49/iWoUp2Cai6WD606/iynZ+NIlzVdkty3bbGb8g7vTjXeV/sQRmPbg3SJypgvQitvJg==","signatures":[{"sig":"MEUCIAM8cYQpTEofPAN4WY9JPF5YEa3Rg4U69AHZQE8f7UBPAiEAneukZOt6elHpQE60I2U/qw4cWwj076Jff5NLAISmI0E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@0.17.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29772},"type":"module","_from":"file:remix-run-form-data-parser-0.17.4.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:3126ee03-a573-40f0-b350-d5c262a74457"}},"_resolved":"/tmp/773c6952591e06d924eaf7548001bdd9/remix-run-form-data-parser-0.17.4.tgz","_integrity":"sha512-mqWVpD2OaJTFEW2i+M49/iWoUp2Cai6WD606/iynZ+NIlzVdkty3bbGb8g7vTjXeV/sQRmPbg3SJypgvQitvJg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.13.0","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.17.0","dependencies":{"@remix-run/multipart-parser":"^0.16.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^24.6.0","@remix-run/test":"0.5.0","@remix-run/assert":"0.3.0","@remix-run/data-schema":"^0.3.0","@typescript/native-preview":"7.0.0-dev.20251125.1"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.17.4_1782932550422_0.39592091794790685","host":"s3://npm-registry-packages-npm-production"}},"0.17.5":{"name":"@remix-run/form-data-parser","version":"0.17.5","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.17.5","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"2efc298c0c8503b0bcb76b0b3d3015b51b1ed827","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.17.5.tgz","fileCount":11,"integrity":"sha512-LPBZ6uazgMhtWnt17wKZ6N97aebVqLQMXcNIuLooKdFH2s8uIg7twlbTfEO6G6Jgl8jrpjLpPL5HZgN5cdTXOw==","signatures":[{"sig":"MEQCIDx9S5Zsagge/nT6eeSQfJ7YNcdJuKWxbiAYgbrjom/IAiBL8sX6DiiWTwaK4ZGZXRxtLGq4ueCs38Zznz3lVaLFCA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@0.17.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29740},"type":"module","_from":"file:remix-run-form-data-parser-0.17.5.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"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:3126ee03-a573-40f0-b350-d5c262a74457"}},"_resolved":"/tmp/9f457bdd307124d4ec5e6843650ae848/remix-run-form-data-parser-0.17.5.tgz","_integrity":"sha512-LPBZ6uazgMhtWnt17wKZ6N97aebVqLQMXcNIuLooKdFH2s8uIg7twlbTfEO6G6Jgl8jrpjLpPL5HZgN5cdTXOw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.16.0","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.18.0","dependencies":{"@remix-run/multipart-parser":"^0.16.4"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^24.6.0","@remix-run/test":"0.6.0","@remix-run/assert":"0.3.0","@remix-run/data-schema":"^0.3.0"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.17.5_1786666425795_0.5949226910566661","host":"s3://npm-registry-packages-npm-production"}},"0.17.6":{"name":"@remix-run/form-data-parser","version":"0.17.6","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.17.6","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"343eefd946bb8d9450ce062ef75a1e76dfc5a196","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.17.6.tgz","fileCount":11,"integrity":"sha512-/pFSz67srxk+4pVXFsJCyF6vPMVtkp+15p66DChdn8Os0LvRt1U4E+0OaXv25VRx5/FsTVwuCr7cPJVI/k4wJQ==","signatures":[{"sig":"MEQCIBTkV7PzMRkAl5DRht2wNL6nLfr0iDkvQiykkiP2pYwAAiALnVEpiUfdmDnXrdd9VbADQXdaIgR+qDb469hi90aqaA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEo2EqU3oDZpIkBxOyh6xpHvsLCCjwKZydsFD94ERQxrAiEAylTIsocpUfZg4SX8uvxgoJ+YiSD2StK/IC9MYBT5Yc0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@0.17.6","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":31461},"type":"module","_from":"file:/tmp/remix-publish-form-data-parser-RbcjKq/remix-run-form-data-parser-0.17.6.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"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:3126ee03-a573-40f0-b350-d5c262a74457"}},"_resolved":"/tmp/remix-publish-form-data-parser-RbcjKq/remix-run-form-data-parser-0.17.6.tgz","_integrity":"sha512-/pFSz67srxk+4pVXFsJCyF6vPMVtkp+15p66DChdn8Os0LvRt1U4E+0OaXv25VRx5/FsTVwuCr7cPJVI/k4wJQ==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.19.0","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"_nodeVersion":"24.20.0","dependencies":{"@remix-run/headers":"^0.21.2","@remix-run/multipart-parser":"^0.16.5"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^24.6.0","@remix-run/test":"0.6.1","@remix-run/assert":"0.3.0","@remix-run/data-schema":"^0.3.1"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.17.6_1789770914435_0.28395684636332197","host":"s3://npm-registry-packages-npm-production"}},"0.17.7":{"name":"@remix-run/form-data-parser","version":"0.17.7","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@0.17.7","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"374a2cc895410cabc64db07d65f67647fd6f8c01","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-0.17.7.tgz","fileCount":11,"integrity":"sha512-stjc3WUyA42xegdGaS3/1SBxIi7DDfrCQvT9TKtchTSgTODTE9IlBd4Sg2TWhe5QP54W3ioihqrOch4SKEEyxQ==","signatures":[{"sig":"MEYCIQD2o57FGb/Qg7ShPbPV/q0dn+hMpIzAkxmGjBU0DyQFxAIhAPqk69Yb1MqnNUZaCWfiL5BczV6oLnfF+VYkkugfnAHz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDC1v0AIcz4k/m3NxGv4skXpLlzxotODX6RIh/efOuedQIgeChxAyHyOF0g7MVD6RWYVtn/YEU3L45OOKhA2ntpDXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@0.17.7","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":32394},"type":"module","_from":"file:/tmp/remix-publish-form-data-parser-UdhK4f/remix-run-form-data-parser-0.17.7.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"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":"3126ee03-a573-40f0-b350-d5c262a74457"}},"_resolved":"/tmp/remix-publish-form-data-parser-UdhK4f/remix-run-form-data-parser-0.17.7.tgz","_integrity":"sha512-stjc3WUyA42xegdGaS3/1SBxIi7DDfrCQvT9TKtchTSgTODTE9IlBd4Sg2TWhe5QP54W3ioihqrOch4SKEEyxQ==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.19.0","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"@remix-run/headers":"^0.21.3","@remix-run/multipart-parser":"^0.16.6"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^24.6.0","@remix-run/test":"0.6.2","@remix-run/assert":"0.3.1","@remix-run/data-schema":"^0.3.1"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_0.17.7_1790631755262_0.44849395115499036","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@remix-run/form-data-parser","version":"1.0.0","keywords":["form-data","FormData","multipart","parser"],"author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"license":"MIT","_id":"@remix-run/form-data-parser@1.0.0","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"homepage":"https://github.com/remix-run/remix/tree/main/packages/form-data-parser#readme","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"4743ab4aaec7f803fe286453a06f7b0c750c9efe","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-1.0.0.tgz","fileCount":11,"integrity":"sha512-jvAQhOb4ZLW/Qk3MTEdAGrdDH++Vdd0ox34IKorUW2PqaRVqyPxO+P57gbLRJC5FFwiFWqwq/zm14/h7TBZXPw==","signatures":[{"sig":"MEYCIQDVdS6gkaU6IRYtYBnPbuGQ4AkCZ2R7DX0Y9T1oip5tDgIhANFnaDBm4CRDzC7q1BQsQmE0pAfxS/yAMIt3dnNvhzsS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCCEcV6b3GN6TLjZVPBy8+k64E8FnLJKe7UMbkUzzXjKQIgVlRNUEgfccVp6oOu1eqWyeLzzWdhe8VkwUVlSNYY6nk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":32391},"type":"module","_from":"file:/tmp/remix-publish-form-data-parser-ydgNjd/remix-run-form-data-parser-1.0.0.tgz","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"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":"3126ee03-a573-40f0-b350-d5c262a74457"}},"_resolved":"/tmp/remix-publish-form-data-parser-ydgNjd/remix-run-form-data-parser-1.0.0.tgz","_integrity":"sha512-jvAQhOb4ZLW/Qk3MTEdAGrdDH++Vdd0ox34IKorUW2PqaRVqyPxO+P57gbLRJC5FFwiFWqwq/zm14/h7TBZXPw==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.19.0","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"@remix-run/headers":"^1.0.0","@remix-run/multipart-parser":"^1.0.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","@remix-run/data-schema":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/form-data-parser_1.0.0_1790895386577_0.9458899488166879","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"_id":"@remix-run/form-data-parser@1.1.0","bugs":{"url":"https://github.com/remix-run/remix/issues"},"dist":{"shasum":"08abafbed6d83ac1270d7b1f06b460f714081696","tarball":"https://registry.npmjs.org/@remix-run/form-data-parser/-/form-data-parser-1.1.0.tgz","fileCount":19,"integrity":"sha512-qFP0gYjkyt+Sjv7G2hD50SDfxey7j8nOW0l35MP/l2LzZwnOFMKoEl6ZU9IJaGz581HriAWLUjJCjDbc6MsRAg==","signatures":[{"sig":"MEYCIQDdVDPhaO3IxDl0VaqSStN5D1nCNwXh322j68aY26QBhAIhAOIRB0PE9TFIA4TJZq6BRVYzWIb5oi9gn/jVoibELPw9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQD3KFgY0QLE5ph8pMmJ7LOX0H+6Uy1x/JyBH28xvkpClQIhANDpDT34NWE74imd0eRUauabTUhgAE9oHXsre1t6GVhi"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@remix-run%2fform-data-parser@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":69322},"name":"@remix-run/form-data-parser","type":"module","_from":"file:/tmp/remix-publish-form-data-parser-BRah5c/remix-run-form-data-parser-1.1.0.tgz","author":{"name":"Michael Jackson","email":"mjijackson@gmail.com"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./future":{"types":"./dist/future.d.ts","default":"./dist/future.js"},"./package.json":"./package.json"},"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.1.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"3126ee03-a573-40f0-b350-d5c262a74457"}},"homepage":"https://github.com/remix-run/remix/tree/main/packages/form-data-parser#readme","keywords":["form-data","FormData","multipart","parser"],"_resolved":"/tmp/remix-publish-form-data-parser-BRah5c/remix-run-form-data-parser-1.1.0.tgz","_integrity":"sha512-qFP0gYjkyt+Sjv7G2hD50SDfxey7j8nOW0l35MP/l2LzZwnOFMKoEl6ZU9IJaGz581HriAWLUjJCjDbc6MsRAg==","repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"_npmVersion":"11.19.0","description":"A request.formData() wrapper with streaming file upload handling","directories":{},"maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"sideEffects":false,"_nodeVersion":"24.21.0","dependencies":{"@remix-run/headers":"^1.0.1","@remix-run/multipart-parser":"^1.1.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","@remix-run/data-schema":"^1.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/form-data-parser_1.1.0_1792780764362_0.7394201227019583"}}},"time":{"created":"2025-07-24T19:48:38.760Z","modified":"2026-10-23T18:39:24.864Z","0.10.0":"2025-07-24T19:48:39.034Z","0.10.1":"2025-07-24T22:09:29.873Z","0.11.0":"2025-10-05T06:27:47.101Z","0.12.0":"2025-10-22T17:04:06.391Z","0.13.0":"2025-11-04T20:54:22.506Z","0.14.0":"2025-11-05T00:09:25.940Z","0.15.0":"2026-01-28T02:13:21.473Z","0.16.0":"2026-03-25T23:04:05.269Z","0.17.0":"2026-04-29T17:29:54.930Z","0.17.1":"2026-05-20T03:21:49.634Z","0.17.2":"2026-05-20T20:17:58.034Z","0.17.3":"2026-05-29T18:17:10.161Z","0.17.4":"2026-07-01T19:02:30.557Z","0.17.5":"2026-08-14T00:13:45.942Z","0.17.6":"2026-09-18T22:35:14.519Z","0.17.7":"2026-09-28T21:42:35.344Z","1.0.0":"2026-10-01T22:56:26.662Z","1.1.0":"2026-10-23T18:39:24.449Z"},"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/form-data-parser#readme","keywords":["form-data","FormData","multipart","parser"],"repository":{"url":"git+https://github.com/remix-run/remix.git","type":"git","directory":"packages/form-data-parser"},"description":"A request.formData() wrapper with streaming file upload handling","maintainers":[{"name":"mjackson","email":"mjijackson+npm@gmail.com"}],"readme":"# form-data-parser\n\nA streaming `multipart/form-data` parser that solves memory issues with file uploads in server environments. Built as an enhanced replacement for the native `request.formData()` API, it enables efficient handling of large file uploads by streaming directly to disk or cloud storage services like [AWS S3](https://aws.amazon.com/s3/) or [Cloudflare R2](https://www.cloudflare.com/developer-platform/r2/), preventing server crashes from memory exhaustion.\n\n## Features\n\n- **Drop-in replacement** for `request.formData()` with streaming file upload support\n- **Minimal buffering** - processes file upload streams with minimal memory footprint\n- **Standards-based** - built on the [web Streams API](https://developer.mozilla.org/en-US/docs/Web/API/Streams_API) and [File API](https://developer.mozilla.org/en-US/docs/Web/API/File)\n- **Smart fallback** - parses `application/x-www-form-urlencoded` requests with the same total size and field count limits, and uses native `request.formData()` for other form requests\n- **Storage agnostic** - works with any storage backend (local disk, S3, R2, etc.)\n\n## Why You Need This\n\nThe native [`request.formData()` method](https://developer.mozilla.org/en-US/docs/Web/API/Request/formData) has a few major flaws in server environments:\n\n- It buffers all file uploads in memory\n- It does not provide fine-grained control over file upload handling\n- It does not prevent DoS attacks from malicious requests\n\nIn normal usage, this makes it difficult to process requests with large file uploads because they can exhaust your server's RAM and crash the application.\n\nFor attackers, this creates an attack vector where malicious actors can overwhelm your server's memory by sending large payloads with many files.\n\n`form-data-parser` solves this by handling file uploads as they arrive in the request body stream, allowing you to safely store files and use either a) the `File` directly or b) a unique identifier for that file in the returned `FormData` object.\n\n## Installation\n\n```sh\nnpm i remix\n```\n\n## Usage\n\nThe `parseFormData` interface allows you to define an \"upload handler\" function for fine-grained control of handling file uploads.\n\n`parseFormData()` accepts `multipart/*` and `application/x-www-form-urlencoded` media types, matched case-insensitively. Other media types throw `FormDataParseError` before the request body is read.\n\n`FileUpload.name` and `FileUpload.type` are untrusted client input from the submitted multipart metadata. Filenames are not sanitized for filesystem use, including on files returned in `FormData`. Do not use these names directly as filesystem paths or join them to an upload directory. Generate storage names in your application; see [Filename Safety](https://github.com/remix-run/remix/tree/main/packages/headers#filename-safety).\n\nThe parser does not verify that the contents match the media type or filename extension. Validate file contents before serving uploads inline. To serve uploads as downloads, set `Content-Disposition: attachment` on the file response; see [File Responses](https://github.com/remix-run/remix/tree/main/packages/response#file-responses).\n\n```ts\nimport * as fsp from 'node:fs/promises'\nimport type { FileUpload } from 'remix/form-data-parser'\nimport { parseFormData } from 'remix/form-data-parser'\n\n// Define how to handle incoming file uploads\nasync function uploadHandler(fileUpload: FileUpload) {\n  // Is this file upload from the <input type=\"file\" name=\"user-avatar\"> field?\n  if (fileUpload.fieldName === 'user-avatar') {\n    let filename = `/uploads/${crypto.randomUUID()}`\n\n    // Store under an application-generated name in an existing upload directory\n    await fsp.writeFile(filename, new Uint8Array(await fileUpload.arrayBuffer()), { flag: 'wx' })\n\n    // Return the file name to use in the FormData object so we don't\n    // keep the file contents around in memory.\n    return filename\n  }\n\n  // Ignore unrecognized fields\n}\n\n// Handle form submissions with file uploads\nasync function requestHandler(request: Request) {\n  // Parse the form data from the request.body stream, passing any files\n  // through your upload handler as they are parsed from the stream\n  let formData = await parseFormData(request, uploadHandler)\n\n  let avatarFilename = formData.get('user-avatar')\n\n  if (avatarFilename != null) {\n    console.log(`User avatar uploaded to ${avatarFilename}`)\n  } else {\n    console.log(`No user avatar file was uploaded`)\n  }\n}\n```\n\nTo validate the resulting `FormData` object with `remix/data-schema`, use the `remix/data-schema/form-data` helpers.\n\nTo limit the overall shape of multipart requests, use the `maxHeaderSize`, `maxFileSize`, `maxFiles`, `maxParts`, and `maxTotalSize` options. For `application/x-www-form-urlencoded` requests, `maxParts` limits the number of form fields and `maxTotalSize` limits the raw request body size. By default, `parseFormData()` uses `maxFiles = 20`, `maxParts = 1000`, and `maxTotalSize = maxFiles * maxFileSize + 1 MiB`.\n\nKnown limit errors are thrown directly so you can handle them with `instanceof` checks. Other failures while parsing the request body are wrapped in `FormDataParseError`, with the original error available as `error.cause`. Errors thrown or rejected by your `uploadHandler` are not wrapped.\n\n```ts\nimport {\n  FormDataParseError,\n  MaxFilesExceededError,\n  MaxFileSizeExceededError,\n  MaxHeaderSizeExceededError,\n  MaxPartsExceededError,\n  MaxTotalSizeExceededError,\n} from 'remix/form-data-parser'\n\nconst oneKb = 1024\nconst oneMb = 1024 * oneKb\n\ntry {\n  let formData = await parseFormData(request, {\n    maxFiles: 5,\n    maxFileSize: 10 * oneMb,\n    maxParts: 25,\n    maxTotalSize: 12 * oneMb,\n  })\n} catch (error) {\n  if (error instanceof MaxFilesExceededError) {\n    console.error(`Request may not contain more than 5 files`)\n  } else if (error instanceof MaxHeaderSizeExceededError) {\n    console.error(`Multipart headers may not exceed the configured size limit`)\n  } else if (error instanceof MaxFileSizeExceededError) {\n    console.error(`Files may not be larger than 10 MiB`)\n  } else if (error instanceof MaxPartsExceededError) {\n    console.error(`Request may not contain more than 25 form fields or multipart parts`)\n  } else if (error instanceof MaxTotalSizeExceededError) {\n    console.error(`Form data request may not exceed 12 MiB of total content`)\n  } else if (error instanceof FormDataParseError) {\n    console.error(`Could not parse form data:`, error.cause ?? error)\n  } else {\n    throw error\n  }\n}\n```\n\nIf you're looking for a more flexible storage solution for `FileUpload` objects, this library pairs really well with [the `file-storage` library](https://github.com/remix-run/remix/tree/main/packages/file-storage) for keeping files in various storage backends.\n\n```ts\nimport { createFsFileStorage } from 'remix/file-storage/fs'\nimport type { FileUpload } from 'remix/form-data-parser'\nimport { parseFormData } from 'remix/form-data-parser'\n\n// Set up storage for uploaded files\nconst fileStorage = createFsFileStorage('/uploads/user-avatars')\n\n// Define how to handle incoming file uploads\nasync function uploadHandler(fileUpload: FileUpload) {\n  // Is this file upload from the <input type=\"file\" name=\"user-avatar\"> field?\n  if (fileUpload.fieldName === 'user-avatar') {\n    let storageKey = `user-${user.id}-avatar`\n\n    // Store the file and return its key to use in the FormData object\n    await fileStorage.set(storageKey, fileUpload)\n    return storageKey\n  }\n\n  // Ignore unrecognized fields\n}\n```\n\n## Future API\n\n**Future APIs are not stable.** The `remix/form-data-parser/future` entrypoint may change in any release, but it is a good indication of where this package will land in its next major release.\n\n`parseFormData()` from `remix/form-data-parser/future` streams file uploads to your upload handler instead of buffering them. Each `FileUpload` is passed to the handler as soon as its headers arrive, and its contents stream from the request body as you read them.\n\nPair it with a storage backend that streams, like the filesystem and S3 backends of [`remix/file-storage`](https://github.com/remix-run/remix/tree/main/packages/file-storage), and a large upload goes from the request to storage without being buffered:\n\n```ts\nimport { createS3FileStorage } from 'remix/file-storage/s3'\nimport { parseFormData } from 'remix/form-data-parser/future'\n\nlet fileStorage = createS3FileStorage({ accessKeyId, secretAccessKey, bucket, region })\n\nlet formData = await parseFormData(request, async (fileUpload) => {\n  let storageKey = `uploads/${crypto.randomUUID()}`\n  // Streams the upload to S3 without holding it in memory\n  await fileStorage.set(storageKey, fileUpload)\n  return storageKey\n})\n```\n\nThe future `FileUpload` has the same shape as `File`, with a few differences:\n\n- Its contents can be read once, and only while the upload handler is running\n- `size` throws until the contents have been read\n- `slice()` is not supported\n\nIf the upload handler returns the `FileUpload` without reading it, or you don't pass an upload handler, `parseFormData()` reads it into a regular `File` and puts that in the `FormData`.\n\n## Demos\n\nThe [`demos` directory](https://github.com/remix-run/remix/tree/main/packages/form-data-parser/demos) contains working demos:\n\n- [`demos/node`](https://github.com/remix-run/remix/tree/main/packages/form-data-parser/demos/node) - using form-data-parser with file-storage in Node.js\n\n## Related Packages\n\n- [`data-schema`](https://github.com/remix-run/remix/tree/main/packages/data-schema) - Tiny, standards-aligned validation with a `form-data` export for `FormData` and `URLSearchParams`\n- [`file-storage`](https://github.com/remix-run/remix/tree/main/packages/file-storage) - A simple key/value interface for storing `FileUpload` objects you get from the parser\n- [`multipart-parser`](https://github.com/remix-run/remix/tree/main/packages/multipart-parser) - The parser used internally for parsing `multipart/form-data` HTTP messages\n\n## License\n\nSee [LICENSE](https://github.com/remix-run/remix/blob/main/LICENSE)\n","readmeFilename":"README.md"}