mirror of
https://github.com/oven-sh/bun
synced 2026-02-15 05:12:29 +00:00
enhancement(fetch): Merge parameters from request parameter with the second parameter for fetch, move verbose and proxy options to second parameter, add non-TLS tests for fetch (#1862)
* initial steps for proxy-server * added http_proxy in fetch, move 3rd argument to 3nd argument options, add some non-TLS proxy tests * some changes * use only 1 buffer for url+proxy, merge headers on fetch * initial steps * change back to override headers instead of merging in fetch * fix build response.zig * fix conditional in merged headers on fetch * updated with main and make proxy disabled if null is passed Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
This commit is contained in:
666
packages/bun-error/package-lock.json
generated
666
packages/bun-error/package-lock.json
generated
@@ -1,666 +0,0 @@
|
||||
{
|
||||
"name": "bun-error",
|
||||
"version": "1.0.0",
|
||||
"lockfileVersion": 2,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "bun-error",
|
||||
"version": "1.0.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"esbuild": "latest",
|
||||
"react": "^17.0.2",
|
||||
"react-dom": "^17.0.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/react": "^17.0.39"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/prop-types": {
|
||||
"version": "15.7.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
|
||||
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/@types/react": {
|
||||
"version": "17.0.47",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.47.tgz",
|
||||
"integrity": "sha512-mk0BL8zBinf2ozNr3qPnlu1oyVTYq+4V7WA76RgxUAtf0Em/Wbid38KN6n4abEkvO4xMTBWmnP1FtQzgkEiJoA==",
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"@types/prop-types": "*",
|
||||
"@types/scheduler": "*",
|
||||
"csstype": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/@types/scheduler": {
|
||||
"version": "0.16.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
|
||||
"integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/csstype": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
|
||||
"integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/esbuild": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.48.tgz",
|
||||
"integrity": "sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==",
|
||||
"hasInstallScript": true,
|
||||
"bin": {
|
||||
"esbuild": "bin/esbuild"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"esbuild-android-64": "0.14.48",
|
||||
"esbuild-android-arm64": "0.14.48",
|
||||
"esbuild-darwin-64": "0.14.48",
|
||||
"esbuild-darwin-arm64": "0.14.48",
|
||||
"esbuild-freebsd-64": "0.14.48",
|
||||
"esbuild-freebsd-arm64": "0.14.48",
|
||||
"esbuild-linux-32": "0.14.48",
|
||||
"esbuild-linux-64": "0.14.48",
|
||||
"esbuild-linux-arm": "0.14.48",
|
||||
"esbuild-linux-arm64": "0.14.48",
|
||||
"esbuild-linux-mips64le": "0.14.48",
|
||||
"esbuild-linux-ppc64le": "0.14.48",
|
||||
"esbuild-linux-riscv64": "0.14.48",
|
||||
"esbuild-linux-s390x": "0.14.48",
|
||||
"esbuild-netbsd-64": "0.14.48",
|
||||
"esbuild-openbsd-64": "0.14.48",
|
||||
"esbuild-sunos-64": "0.14.48",
|
||||
"esbuild-windows-32": "0.14.48",
|
||||
"esbuild-windows-64": "0.14.48",
|
||||
"esbuild-windows-arm64": "0.14.48"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-android-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.48.tgz",
|
||||
"integrity": "sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"android"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-android-arm64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.48.tgz",
|
||||
"integrity": "sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"android"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-darwin-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.48.tgz",
|
||||
"integrity": "sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-darwin-arm64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.48.tgz",
|
||||
"integrity": "sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"darwin"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-freebsd-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.48.tgz",
|
||||
"integrity": "sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"freebsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-freebsd-arm64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.48.tgz",
|
||||
"integrity": "sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"freebsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-linux-32": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.48.tgz",
|
||||
"integrity": "sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-linux-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.48.tgz",
|
||||
"integrity": "sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-linux-arm": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.48.tgz",
|
||||
"integrity": "sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==",
|
||||
"cpu": [
|
||||
"arm"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-linux-arm64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.48.tgz",
|
||||
"integrity": "sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-linux-mips64le": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.48.tgz",
|
||||
"integrity": "sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==",
|
||||
"cpu": [
|
||||
"mips64el"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-linux-ppc64le": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.48.tgz",
|
||||
"integrity": "sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==",
|
||||
"cpu": [
|
||||
"ppc64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-linux-riscv64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.48.tgz",
|
||||
"integrity": "sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==",
|
||||
"cpu": [
|
||||
"riscv64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-linux-s390x": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.48.tgz",
|
||||
"integrity": "sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==",
|
||||
"cpu": [
|
||||
"s390x"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-netbsd-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.48.tgz",
|
||||
"integrity": "sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"netbsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-openbsd-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.48.tgz",
|
||||
"integrity": "sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"openbsd"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-sunos-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz",
|
||||
"integrity": "sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"sunos"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-windows-32": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.48.tgz",
|
||||
"integrity": "sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==",
|
||||
"cpu": [
|
||||
"ia32"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-windows-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.48.tgz",
|
||||
"integrity": "sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==",
|
||||
"cpu": [
|
||||
"x64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/esbuild-windows-arm64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.48.tgz",
|
||||
"integrity": "sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==",
|
||||
"cpu": [
|
||||
"arm64"
|
||||
],
|
||||
"optional": true,
|
||||
"os": [
|
||||
"win32"
|
||||
],
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
|
||||
},
|
||||
"node_modules/loose-envify": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
|
||||
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
|
||||
"dependencies": {
|
||||
"js-tokens": "^3.0.0 || ^4.0.0"
|
||||
},
|
||||
"bin": {
|
||||
"loose-envify": "cli.js"
|
||||
}
|
||||
},
|
||||
"node_modules/object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react": {
|
||||
"version": "17.0.2",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
|
||||
"integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
|
||||
"dependencies": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"object-assign": "^4.1.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/react-dom": {
|
||||
"version": "17.0.2",
|
||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
|
||||
"integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
|
||||
"dependencies": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"object-assign": "^4.1.1",
|
||||
"scheduler": "^0.20.2"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "17.0.2"
|
||||
}
|
||||
},
|
||||
"node_modules/scheduler": {
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
|
||||
"integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
|
||||
"dependencies": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"object-assign": "^4.1.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/prop-types": {
|
||||
"version": "15.7.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
|
||||
"integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
|
||||
"dev": true
|
||||
},
|
||||
"@types/react": {
|
||||
"version": "17.0.47",
|
||||
"resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.47.tgz",
|
||||
"integrity": "sha512-mk0BL8zBinf2ozNr3qPnlu1oyVTYq+4V7WA76RgxUAtf0Em/Wbid38KN6n4abEkvO4xMTBWmnP1FtQzgkEiJoA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@types/prop-types": "*",
|
||||
"@types/scheduler": "*",
|
||||
"csstype": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"@types/scheduler": {
|
||||
"version": "0.16.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz",
|
||||
"integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==",
|
||||
"dev": true
|
||||
},
|
||||
"csstype": {
|
||||
"version": "3.1.0",
|
||||
"resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.0.tgz",
|
||||
"integrity": "sha512-uX1KG+x9h5hIJsaKR9xHUeUraxf8IODOwq9JLNPq6BwB04a/xgpq3rcx47l5BZu5zBPlgD342tdke3Hom/nJRA==",
|
||||
"dev": true
|
||||
},
|
||||
"esbuild": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.48.tgz",
|
||||
"integrity": "sha512-w6N1Yn5MtqK2U1/WZTX9ZqUVb8IOLZkZ5AdHkT6x3cHDMVsYWC7WPdiLmx19w3i4Rwzy5LqsEMtVihG3e4rFzA==",
|
||||
"requires": {
|
||||
"esbuild-android-64": "0.14.48",
|
||||
"esbuild-android-arm64": "0.14.48",
|
||||
"esbuild-darwin-64": "0.14.48",
|
||||
"esbuild-darwin-arm64": "0.14.48",
|
||||
"esbuild-freebsd-64": "0.14.48",
|
||||
"esbuild-freebsd-arm64": "0.14.48",
|
||||
"esbuild-linux-32": "0.14.48",
|
||||
"esbuild-linux-64": "0.14.48",
|
||||
"esbuild-linux-arm": "0.14.48",
|
||||
"esbuild-linux-arm64": "0.14.48",
|
||||
"esbuild-linux-mips64le": "0.14.48",
|
||||
"esbuild-linux-ppc64le": "0.14.48",
|
||||
"esbuild-linux-riscv64": "0.14.48",
|
||||
"esbuild-linux-s390x": "0.14.48",
|
||||
"esbuild-netbsd-64": "0.14.48",
|
||||
"esbuild-openbsd-64": "0.14.48",
|
||||
"esbuild-sunos-64": "0.14.48",
|
||||
"esbuild-windows-32": "0.14.48",
|
||||
"esbuild-windows-64": "0.14.48",
|
||||
"esbuild-windows-arm64": "0.14.48"
|
||||
}
|
||||
},
|
||||
"esbuild-android-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.48.tgz",
|
||||
"integrity": "sha512-3aMjboap/kqwCUpGWIjsk20TtxVoKck8/4Tu19rubh7t5Ra0Yrpg30Mt1QXXlipOazrEceGeWurXKeFJgkPOUg==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-android-arm64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.48.tgz",
|
||||
"integrity": "sha512-vptI3K0wGALiDq+EvRuZotZrJqkYkN5282iAfcffjI5lmGG9G1ta/CIVauhY42MBXwEgDJkweiDcDMRLzBZC4g==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-darwin-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.48.tgz",
|
||||
"integrity": "sha512-gGQZa4+hab2Va/Zww94YbshLuWteyKGD3+EsVon8EWTWhnHFRm5N9NbALNbwi/7hQ/hM1Zm4FuHg+k6BLsl5UA==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-darwin-arm64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.48.tgz",
|
||||
"integrity": "sha512-bFjnNEXjhZT+IZ8RvRGNJthLWNHV5JkCtuOFOnjvo5pC0sk2/QVk0Qc06g2PV3J0TcU6kaPC3RN9yy9w2PSLEA==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-freebsd-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.48.tgz",
|
||||
"integrity": "sha512-1NOlwRxmOsnPcWOGTB10JKAkYSb2nue0oM1AfHWunW/mv3wERfJmnYlGzL3UAOIUXZqW8GeA2mv+QGwq7DToqA==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-freebsd-arm64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.48.tgz",
|
||||
"integrity": "sha512-gXqKdO8wabVcYtluAbikDH2jhXp+Klq5oCD5qbVyUG6tFiGhrC9oczKq3vIrrtwcxDQqK6+HDYK8Zrd4bCA9Gw==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-linux-32": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.48.tgz",
|
||||
"integrity": "sha512-ghGyDfS289z/LReZQUuuKq9KlTiTspxL8SITBFQFAFRA/IkIvDpnZnCAKTCjGXAmUqroMQfKJXMxyjJA69c/nQ==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-linux-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.48.tgz",
|
||||
"integrity": "sha512-vni3p/gppLMVZLghI7oMqbOZdGmLbbKR23XFARKnszCIBpEMEDxOMNIKPmMItQrmH/iJrL1z8Jt2nynY0bE1ug==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-linux-arm": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.48.tgz",
|
||||
"integrity": "sha512-+VfSV7Akh1XUiDNXgqgY1cUP1i2vjI+BmlyXRfVz5AfV3jbpde8JTs5Q9sYgaoq5cWfuKfoZB/QkGOI+QcL1Tw==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-linux-arm64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.48.tgz",
|
||||
"integrity": "sha512-3CFsOlpoxlKPRevEHq8aAntgYGYkE1N9yRYAcPyng/p4Wyx0tPR5SBYsxLKcgPB9mR8chHEhtWYz6EZ+H199Zw==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-linux-mips64le": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.48.tgz",
|
||||
"integrity": "sha512-cs0uOiRlPp6ymknDnjajCgvDMSsLw5mST2UXh+ZIrXTj2Ifyf2aAP3Iw4DiqgnyYLV2O/v/yWBJx+WfmKEpNLA==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-linux-ppc64le": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.48.tgz",
|
||||
"integrity": "sha512-+2F0vJMkuI0Wie/wcSPDCqXvSFEELH7Jubxb7mpWrA/4NpT+/byjxDz0gG6R1WJoeDefcrMfpBx4GFNN1JQorQ==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-linux-riscv64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.48.tgz",
|
||||
"integrity": "sha512-BmaK/GfEE+5F2/QDrIXteFGKnVHGxlnK9MjdVKMTfvtmudjY3k2t8NtlY4qemKSizc+QwyombGWTBDc76rxePA==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-linux-s390x": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.48.tgz",
|
||||
"integrity": "sha512-tndw/0B9jiCL+KWKo0TSMaUm5UWBLsfCKVdbfMlb3d5LeV9WbijZ8Ordia8SAYv38VSJWOEt6eDCdOx8LqkC4g==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-netbsd-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.48.tgz",
|
||||
"integrity": "sha512-V9hgXfwf/T901Lr1wkOfoevtyNkrxmMcRHyticybBUHookznipMOHoF41Al68QBsqBxnITCEpjjd4yAos7z9Tw==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-openbsd-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.48.tgz",
|
||||
"integrity": "sha512-+IHf4JcbnnBl4T52egorXMatil/za0awqzg2Vy6FBgPcBpisDWT2sVz/tNdrK9kAqj+GZG/jZdrOkj7wsrNTKA==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-sunos-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.48.tgz",
|
||||
"integrity": "sha512-77m8bsr5wOpOWbGi9KSqDphcq6dFeJyun8TA+12JW/GAjyfTwVtOnN8DOt6DSPUfEV+ltVMNqtXUeTeMAxl5KA==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-windows-32": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.48.tgz",
|
||||
"integrity": "sha512-EPgRuTPP8vK9maxpTGDe5lSoIBHGKO/AuxDncg5O3NkrPeLNdvvK8oywB0zGaAZXxYWfNNSHskvvDgmfVTguhg==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-windows-64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.48.tgz",
|
||||
"integrity": "sha512-YmpXjdT1q0b8ictSdGwH3M8VCoqPpK1/UArze3X199w6u8hUx3V8BhAi1WjbsfDYRBanVVtduAhh2sirImtAvA==",
|
||||
"optional": true
|
||||
},
|
||||
"esbuild-windows-arm64": {
|
||||
"version": "0.14.48",
|
||||
"resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.48.tgz",
|
||||
"integrity": "sha512-HHaOMCsCXp0rz5BT2crTka6MPWVno121NKApsGs/OIW5QC0ggC69YMGs1aJct9/9FSUF4A1xNE/cLvgB5svR4g==",
|
||||
"optional": true
|
||||
},
|
||||
"js-tokens": {
|
||||
"version": "4.0.0",
|
||||
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
|
||||
},
|
||||
"loose-envify": {
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
|
||||
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
|
||||
"requires": {
|
||||
"js-tokens": "^3.0.0 || ^4.0.0"
|
||||
}
|
||||
},
|
||||
"object-assign": {
|
||||
"version": "4.1.1",
|
||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
|
||||
},
|
||||
"react": {
|
||||
"version": "17.0.2",
|
||||
"resolved": "https://registry.npmjs.org/react/-/react-17.0.2.tgz",
|
||||
"integrity": "sha512-gnhPt75i/dq/z3/6q/0asP78D0u592D5L1pd7M8P+dck6Fu/jJeL6iVVK23fptSUZj8Vjf++7wXA8UNclGQcbA==",
|
||||
"requires": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"object-assign": "^4.1.1"
|
||||
}
|
||||
},
|
||||
"react-dom": {
|
||||
"version": "17.0.2",
|
||||
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-17.0.2.tgz",
|
||||
"integrity": "sha512-s4h96KtLDUQlsENhMn1ar8t2bEa+q/YAtj8pPPdIjPDGBDIVNsrD9aXNWqspUe6AzKCIG0C1HZZLqLV7qpOBGA==",
|
||||
"requires": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"object-assign": "^4.1.1",
|
||||
"scheduler": "^0.20.2"
|
||||
}
|
||||
},
|
||||
"scheduler": {
|
||||
"version": "0.20.2",
|
||||
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.20.2.tgz",
|
||||
"integrity": "sha512-2eWfGgAqqWFGqtdMmcL5zCMK1U8KlXv8SQFGglL3CEtd0aDVDWgeF/YoCmvln55m5zSk3J/20hTaSBeSObsQDQ==",
|
||||
"requires": {
|
||||
"loose-envify": "^1.1.0",
|
||||
"object-assign": "^4.1.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
42
packages/bun-types/globals.d.ts
vendored
42
packages/bun-types/globals.d.ts
vendored
@@ -832,6 +832,22 @@ interface RequestInit {
|
||||
* Enable or disable HTTP request timeout
|
||||
*/
|
||||
timeout?: boolean;
|
||||
|
||||
}
|
||||
|
||||
interface FetchRequestInit extends RequestInit {
|
||||
/**
|
||||
* Log the raw HTTP request & response to stdout. This API may be
|
||||
* removed in a future version of Bun without notice.
|
||||
* This is a custom property that is not part of the Fetch API specification.
|
||||
* It exists mostly as a debugging tool
|
||||
*/
|
||||
verbose?: boolean,
|
||||
/**
|
||||
* Override http_proxy or HTTPS_PROXY
|
||||
* This is a custom property that is not part of the Fetch API specification.
|
||||
*/
|
||||
proxy?: string
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -1239,18 +1255,7 @@ declare function clearTimeout(id?: number): void;
|
||||
*/
|
||||
declare function fetch(
|
||||
url: string,
|
||||
init?: RequestInit,
|
||||
/**
|
||||
* This is a custom property that is not part of the Fetch API specification.
|
||||
* It exists mostly as a debugging tool
|
||||
*/
|
||||
bunOnlyOptions?: {
|
||||
/**
|
||||
* Log the raw HTTP request & response to stdout. This API may be
|
||||
* removed in a future version of Bun without notice.
|
||||
*/
|
||||
verbose: boolean;
|
||||
},
|
||||
init?: FetchRequestInit
|
||||
): Promise<Response>;
|
||||
|
||||
/**
|
||||
@@ -1266,18 +1271,7 @@ declare function fetch(
|
||||
// tslint:disable-next-line:unified-signatures
|
||||
declare function fetch(
|
||||
request: Request,
|
||||
init?: RequestInit,
|
||||
/**
|
||||
* This is a custom property that is not part of the Fetch API specification.
|
||||
* It exists mostly as a debugging tool
|
||||
*/
|
||||
bunOnlyOptions?: {
|
||||
/**
|
||||
* Log the raw HTTP request & response to stdout. This API may be
|
||||
* removed in a future version of Bun without notice.
|
||||
*/
|
||||
verbose: boolean;
|
||||
},
|
||||
init?: RequestInit
|
||||
): Promise<Response>;
|
||||
|
||||
declare function queueMicrotask(callback: (...args: any[]) => void): void;
|
||||
|
||||
@@ -268,12 +268,17 @@ pub const Request = struct {
|
||||
return this.url.len;
|
||||
|
||||
if (this.uws_request) |req| {
|
||||
const fmt = ZigURL.HostFormatter{
|
||||
.is_https = this.https,
|
||||
.host = req.header("host") orelse "",
|
||||
};
|
||||
|
||||
return this.getProtocol().len + req.url().len + std.fmt.count("{any}", .{fmt});
|
||||
const req_url = req.url();
|
||||
if (req_url.len > 0 and req_url[0] == '/') {
|
||||
if (req.header("host")) |host| {
|
||||
const fmt = ZigURL.HostFormatter{
|
||||
.is_https = this.https,
|
||||
.host = host,
|
||||
};
|
||||
return this.getProtocol().len + req_url.len + std.fmt.count("{any}", .{fmt});
|
||||
}
|
||||
}
|
||||
return req_url.len;
|
||||
}
|
||||
|
||||
return 0;
|
||||
@@ -291,28 +296,31 @@ pub const Request = struct {
|
||||
|
||||
if (this.uws_request) |req| {
|
||||
const req_url = req.url();
|
||||
if (req.header("host")) |host| {
|
||||
const fmt = ZigURL.HostFormatter{
|
||||
.is_https = this.https,
|
||||
.host = host,
|
||||
};
|
||||
const url = try std.fmt.allocPrint(bun.default_allocator, "{s}{any}{s}", .{
|
||||
this.getProtocol(),
|
||||
fmt,
|
||||
req_url,
|
||||
});
|
||||
if (comptime Environment.allow_assert) {
|
||||
std.debug.assert(this.sizeOfURL() == url.len);
|
||||
if (req_url.len > 0 and req_url[0] == '/') {
|
||||
if (req.header("host")) |host| {
|
||||
const fmt = ZigURL.HostFormatter{
|
||||
.is_https = this.https,
|
||||
.host = host,
|
||||
};
|
||||
const url = try std.fmt.allocPrint(bun.default_allocator, "{s}{any}{s}", .{
|
||||
this.getProtocol(),
|
||||
fmt,
|
||||
req_url,
|
||||
});
|
||||
if (comptime Environment.allow_assert) {
|
||||
std.debug.assert(this.sizeOfURL() == url.len);
|
||||
}
|
||||
this.url = url;
|
||||
this.url_was_allocated = true;
|
||||
return;
|
||||
}
|
||||
this.url = url;
|
||||
this.url_was_allocated = true;
|
||||
} else {
|
||||
if (comptime Environment.allow_assert) {
|
||||
std.debug.assert(this.sizeOfURL() == req_url.len);
|
||||
}
|
||||
this.url = try bun.default_allocator.dupe(u8, req_url);
|
||||
this.url_was_allocated = true;
|
||||
}
|
||||
|
||||
if (comptime Environment.allow_assert) {
|
||||
std.debug.assert(this.sizeOfURL() == req_url.len);
|
||||
}
|
||||
this.url = try bun.default_allocator.dupe(u8, req_url);
|
||||
this.url_was_allocated = true;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -575,18 +575,18 @@ pub const Fetch = struct {
|
||||
concurrent_task: JSC.ConcurrentTask = .{},
|
||||
poll_ref: JSC.PollRef = .{},
|
||||
|
||||
/// Memory is owned by FetchTasklet
|
||||
/// We always clone this one
|
||||
url_str: []const u8 = "",
|
||||
/// This is url + proxy memory buffer and is owned by FetchTasklet
|
||||
/// We always clone url and proxy (if informed)
|
||||
url_proxy_buffer: []const u8 = "",
|
||||
|
||||
pub fn init(_: std.mem.Allocator) anyerror!FetchTasklet {
|
||||
return FetchTasklet{};
|
||||
}
|
||||
|
||||
fn clearData(this: *FetchTasklet) void {
|
||||
if (this.url_str.len > 0) {
|
||||
bun.default_allocator.free(bun.constStrToU8(this.url_str));
|
||||
this.url_str.len = 0;
|
||||
if (this.url_proxy_buffer.len > 0) {
|
||||
bun.default_allocator.free(this.url_proxy_buffer);
|
||||
this.url_proxy_buffer.len = 0;
|
||||
}
|
||||
|
||||
this.request_headers.entries.deinit(bun.default_allocator);
|
||||
@@ -723,30 +723,28 @@ pub const Fetch = struct {
|
||||
.global_this = globalThis,
|
||||
.request_headers = fetch_options.headers,
|
||||
.ref = JSC.napi.Ref.create(globalThis, promise),
|
||||
.url_str = fetch_options.url.href,
|
||||
.url_proxy_buffer = fetch_options.url_proxy_buffer,
|
||||
};
|
||||
|
||||
if (fetch_tasklet.request_body.store()) |store| {
|
||||
store.ref();
|
||||
}
|
||||
|
||||
fetch_tasklet.http.?.* = HTTPClient.AsyncHTTP.init(
|
||||
allocator,
|
||||
fetch_options.method,
|
||||
fetch_options.url,
|
||||
fetch_options.headers.entries,
|
||||
fetch_options.headers.buf.items,
|
||||
&fetch_tasklet.response_buffer,
|
||||
fetch_tasklet.request_body.slice(),
|
||||
fetch_options.timeout,
|
||||
HTTPClient.HTTPClientResult.Callback.New(
|
||||
*FetchTasklet,
|
||||
FetchTasklet.callback,
|
||||
).init(
|
||||
fetch_tasklet,
|
||||
),
|
||||
jsc_vm.bundler.env.getHttpProxy(fetch_options.url)
|
||||
);
|
||||
|
||||
var proxy: ?ZigURL = null;
|
||||
if (fetch_options.proxy) |proxy_opt| {
|
||||
if (!proxy_opt.isEmpty()) { //if is empty just ignore proxy
|
||||
proxy = fetch_options.proxy orelse jsc_vm.bundler.env.getHttpProxy(fetch_options.url);
|
||||
}
|
||||
} else {
|
||||
proxy = jsc_vm.bundler.env.getHttpProxy(fetch_options.url);
|
||||
}
|
||||
|
||||
fetch_tasklet.http.?.* = HTTPClient.AsyncHTTP.init(allocator, fetch_options.method, fetch_options.url, fetch_options.headers.entries, fetch_options.headers.buf.items, &fetch_tasklet.response_buffer, fetch_tasklet.request_body.slice(), fetch_options.timeout, HTTPClient.HTTPClientResult.Callback.New(
|
||||
*FetchTasklet,
|
||||
FetchTasklet.callback,
|
||||
).init(
|
||||
fetch_tasklet,
|
||||
), proxy);
|
||||
|
||||
if (!fetch_options.follow_redirects) {
|
||||
fetch_tasklet.http.?.client.remaining_redirect_count = 0;
|
||||
@@ -758,17 +756,7 @@ pub const Fetch = struct {
|
||||
return fetch_tasklet;
|
||||
}
|
||||
|
||||
const FetchOptions = struct {
|
||||
method: Method,
|
||||
headers: Headers,
|
||||
body: AnyBlob,
|
||||
timeout: usize,
|
||||
disable_timeout: bool,
|
||||
disable_keepalive: bool,
|
||||
url: ZigURL,
|
||||
verbose: bool = false,
|
||||
follow_redirects: bool = true,
|
||||
};
|
||||
const FetchOptions = struct { method: Method, headers: Headers, body: AnyBlob, timeout: usize, disable_timeout: bool, disable_keepalive: bool, url: ZigURL, verbose: bool = false, follow_redirects: bool = true, proxy: ?ZigURL = null, url_proxy_buffer: []const u8 = "" };
|
||||
|
||||
pub fn queue(
|
||||
allocator: std.mem.Allocator,
|
||||
@@ -828,27 +816,129 @@ pub const Fetch = struct {
|
||||
var disable_timeout = false;
|
||||
var disable_keepalive = false;
|
||||
var verbose = false;
|
||||
var proxy: ?ZigURL = null;
|
||||
var follow_redirects = true;
|
||||
var url_proxy_buffer: []const u8 = undefined;
|
||||
|
||||
if (first_arg.as(Request)) |request| {
|
||||
url = ZigURL.parse(getAllocator(ctx).dupe(u8, request.url) catch unreachable);
|
||||
method = request.method;
|
||||
if (request.headers) |head| {
|
||||
headers = Headers.from(head, bun.default_allocator) catch unreachable;
|
||||
if (arguments.len >= 2) {
|
||||
const options = arguments[1].?.value();
|
||||
if (options.isObject() or options.jsType() == .DOMWrapper) {
|
||||
if (options.fastGet(ctx.ptr(), .method)) |method_| {
|
||||
var slice_ = method_.toSlice(ctx.ptr(), getAllocator(ctx));
|
||||
defer slice_.deinit();
|
||||
method = Method.which(slice_.slice()) orelse .GET;
|
||||
} else {
|
||||
method = request.method;
|
||||
}
|
||||
|
||||
if (options.fastGet(ctx.ptr(), .headers)) |headers_| {
|
||||
if (headers_.as(FetchHeaders)) |headers__| {
|
||||
headers = Headers.from(headers__, bun.default_allocator) catch unreachable;
|
||||
// TODO: make this one pass
|
||||
} else if (FetchHeaders.createFromJS(ctx.ptr(), headers_)) |headers__| {
|
||||
headers = Headers.from(headers__, bun.default_allocator) catch unreachable;
|
||||
headers__.deref();
|
||||
} else if (request.headers) |head| {
|
||||
headers = Headers.from(head, bun.default_allocator) catch unreachable;
|
||||
}
|
||||
} else if (request.headers) |head| {
|
||||
headers = Headers.from(head, bun.default_allocator) catch unreachable;
|
||||
}
|
||||
|
||||
if (options.fastGet(ctx.ptr(), .body)) |body__| {
|
||||
if (Body.Value.fromJS(ctx.ptr(), body__)) |body_const| {
|
||||
var body_value = body_const;
|
||||
// TODO: buffer ReadableStream?
|
||||
// we have to explicitly check for InternalBlob
|
||||
body = body_value.useAsAnyBlob();
|
||||
} else {
|
||||
// an error was thrown
|
||||
return JSC.JSValue.jsUndefined().asObjectRef();
|
||||
}
|
||||
} else {
|
||||
body = request.body.useAsAnyBlob();
|
||||
}
|
||||
|
||||
if (options.get(ctx, "timeout")) |timeout_value| {
|
||||
if (timeout_value.isBoolean()) {
|
||||
disable_timeout = !timeout_value.asBoolean();
|
||||
} else if (timeout_value.isNumber()) {
|
||||
disable_timeout = timeout_value.to(i32) == 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (options.get(ctx, "redirect")) |redirect_value| {
|
||||
if (redirect_value.getZigString(globalThis).eqlComptime("manual")) {
|
||||
follow_redirects = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (options.get(ctx, "keepalive")) |keepalive_value| {
|
||||
if (keepalive_value.isBoolean()) {
|
||||
disable_keepalive = !keepalive_value.asBoolean();
|
||||
} else if (keepalive_value.isNumber()) {
|
||||
disable_keepalive = keepalive_value.to(i32) == 0;
|
||||
}
|
||||
}
|
||||
if (options.get(globalThis, "verbose")) |verb| {
|
||||
verbose = verb.toBoolean();
|
||||
}
|
||||
if (options.get(globalThis, "proxy")) |proxy_arg| {
|
||||
if (!proxy_arg.isUndefined()) {
|
||||
if (proxy_arg.isNull()) {
|
||||
//if null we add an empty proxy to be ignore all proxy
|
||||
//only allocate url
|
||||
url = ZigURL.parse(getAllocator(ctx).dupe(u8, request.url) catch unreachable);
|
||||
url_proxy_buffer = url.href;
|
||||
proxy = ZigURL{}; //empty proxy
|
||||
} else {
|
||||
var proxy_str = proxy_arg.toStringOrNull(globalThis) orelse return null;
|
||||
// proxy + url 1 allocation
|
||||
var proxy_url_zig = proxy_str.getZigString(globalThis);
|
||||
|
||||
// ignore proxy if it is len = 0
|
||||
if (proxy_url_zig.len == 0) {
|
||||
url = ZigURL.parse(getAllocator(ctx).dupe(u8, request.url) catch unreachable);
|
||||
url_proxy_buffer = url.href;
|
||||
} else {
|
||||
var total_len = request.url.len + proxy_url_zig.len;
|
||||
|
||||
const allocator = getAllocator(ctx);
|
||||
|
||||
var buffer = allocator.alloc(u8, total_len) catch {
|
||||
JSC.JSError(bun.default_allocator, "Out of memory", .{}, ctx, exception);
|
||||
return null;
|
||||
};
|
||||
|
||||
var url_slice = buffer[0..request.url.len];
|
||||
std.mem.copy(u8, url_slice, request.url);
|
||||
var proxy_url_slice = buffer[request.url.len..buffer.len];
|
||||
std.mem.copy(u8, proxy_url_slice, proxy_url_zig.ptr[0..proxy_url_zig.len]);
|
||||
|
||||
url = ZigURL.parse(url_slice);
|
||||
proxy = ZigURL.parse(proxy_url_slice);
|
||||
url_proxy_buffer = buffer;
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// no proxy only url
|
||||
url = ZigURL.parse(getAllocator(ctx).dupe(u8, request.url) catch unreachable);
|
||||
url_proxy_buffer = url.href;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
method = request.method;
|
||||
if (request.headers) |head| {
|
||||
headers = Headers.from(head, bun.default_allocator) catch unreachable;
|
||||
}
|
||||
body = request.body.useAsAnyBlob();
|
||||
// no proxy only url
|
||||
url = ZigURL.parse(getAllocator(ctx).dupe(u8, request.url) catch unreachable);
|
||||
url_proxy_buffer = url.href;
|
||||
}
|
||||
body = request.body.useAsAnyBlob();
|
||||
} else if (first_arg.toStringOrNull(globalThis)) |jsstring| {
|
||||
var url_slice = jsstring.toSlice(globalThis, bun.default_allocator).cloneIfNeeded(bun.default_allocator) catch {
|
||||
JSC.JSError(bun.default_allocator, "Out of memory", .{}, ctx, exception);
|
||||
return null;
|
||||
};
|
||||
|
||||
if (url_slice.len == 0) {
|
||||
const fetch_error = fetch_error_blank_url;
|
||||
return JSPromise.rejectedPromiseValue(globalThis, ZigString.init(fetch_error).toErrorInstance(globalThis)).asRef();
|
||||
}
|
||||
|
||||
url = ZigURL.parse(url_slice.slice());
|
||||
|
||||
if (arguments.len >= 2) {
|
||||
const options = arguments[1].?.value();
|
||||
if (options.isObject() or options.jsType() == .DOMWrapper) {
|
||||
@@ -901,17 +991,108 @@ pub const Fetch = struct {
|
||||
disable_keepalive = keepalive_value.to(i32) == 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// non-standard debug things
|
||||
if (arguments.len == 3) {
|
||||
const special = arguments[2].?.value();
|
||||
if (!special.isEmptyOrUndefinedOrNull() and special.isObject()) {
|
||||
if (special.get(globalThis, "verbose")) |verb| {
|
||||
verbose = verb.toBoolean();
|
||||
if (options.get(globalThis, "verbose")) |verb| {
|
||||
verbose = verb.toBoolean();
|
||||
}
|
||||
if (options.get(globalThis, "proxy")) |proxy_arg| {
|
||||
if (!proxy_arg.isUndefined()) {
|
||||
var proxy_str = proxy_arg.toStringOrNull(globalThis) orelse return null;
|
||||
// proxy + url 1 allocation
|
||||
var url_zig = proxy_str.getZigString(globalThis);
|
||||
|
||||
if (url_zig.len == 0) {
|
||||
const fetch_error = fetch_error_blank_url;
|
||||
return JSPromise.rejectedPromiseValue(globalThis, ZigString.init(fetch_error).toErrorInstance(globalThis)).asRef();
|
||||
}
|
||||
|
||||
if (proxy_arg.isNull()) {
|
||||
//if null we add an empty proxy to be ignore all proxy
|
||||
//only allocate url
|
||||
const url_slice = url_zig.toSlice(bun.default_allocator).cloneIfNeeded(bun.default_allocator) catch {
|
||||
JSC.JSError(bun.default_allocator, "Out of memory", .{}, ctx, exception);
|
||||
return null;
|
||||
};
|
||||
url = ZigURL.parse(url_slice.slice());
|
||||
url_proxy_buffer = url.href;
|
||||
proxy = ZigURL{}; //empty proxy
|
||||
|
||||
} else {
|
||||
var proxy_url_zig = proxy_str.getZigString(globalThis);
|
||||
|
||||
// proxy is actual 0 len so ignores it
|
||||
if (proxy_url_zig.len == 0) {
|
||||
const url_slice = url_zig.toSlice(bun.default_allocator).cloneIfNeeded(bun.default_allocator) catch {
|
||||
JSC.JSError(bun.default_allocator, "Out of memory", .{}, ctx, exception);
|
||||
return null;
|
||||
};
|
||||
url = ZigURL.parse(url_slice.slice());
|
||||
url_proxy_buffer = url.href;
|
||||
} else {
|
||||
const allocator = getAllocator(ctx);
|
||||
|
||||
var total_len = url_zig.len + proxy_url_zig.len;
|
||||
var buffer = allocator.alloc(u8, total_len) catch {
|
||||
JSC.JSError(bun.default_allocator, "Out of memory", .{}, ctx, exception);
|
||||
return null;
|
||||
};
|
||||
|
||||
var url_slice = buffer[0..url_zig.len];
|
||||
|
||||
std.mem.copy(u8, url_slice, url_zig.ptr[0..url_zig.len]);
|
||||
var proxy_url_slice = buffer[url_zig.len..buffer.len];
|
||||
std.mem.copy(u8, proxy_url_slice, proxy_url_zig.ptr[0..proxy_url_zig.len]);
|
||||
|
||||
url = ZigURL.parse(url_slice);
|
||||
proxy = ZigURL.parse(proxy_url_slice);
|
||||
url_proxy_buffer = buffer;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//no proxy only url
|
||||
var url_slice = jsstring.toSlice(globalThis, bun.default_allocator).cloneIfNeeded(bun.default_allocator) catch {
|
||||
JSC.JSError(bun.default_allocator, "Out of memory", .{}, ctx, exception);
|
||||
return null;
|
||||
};
|
||||
|
||||
if (url_slice.len == 0) {
|
||||
const fetch_error = fetch_error_blank_url;
|
||||
return JSPromise.rejectedPromiseValue(globalThis, ZigString.init(fetch_error).toErrorInstance(globalThis)).asRef();
|
||||
}
|
||||
|
||||
url = ZigURL.parse(url_slice.slice());
|
||||
url_proxy_buffer = url.href;
|
||||
}
|
||||
} else {
|
||||
//no proxy only url
|
||||
var url_slice = jsstring.toSlice(globalThis, bun.default_allocator).cloneIfNeeded(bun.default_allocator) catch {
|
||||
JSC.JSError(bun.default_allocator, "Out of memory", .{}, ctx, exception);
|
||||
return null;
|
||||
};
|
||||
|
||||
if (url_slice.len == 0) {
|
||||
const fetch_error = fetch_error_blank_url;
|
||||
return JSPromise.rejectedPromiseValue(globalThis, ZigString.init(fetch_error).toErrorInstance(globalThis)).asRef();
|
||||
}
|
||||
|
||||
url = ZigURL.parse(url_slice.slice());
|
||||
url_proxy_buffer = url.href;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//no proxy only url
|
||||
var url_slice = jsstring.toSlice(globalThis, bun.default_allocator).cloneIfNeeded(bun.default_allocator) catch {
|
||||
JSC.JSError(bun.default_allocator, "Out of memory", .{}, ctx, exception);
|
||||
return null;
|
||||
};
|
||||
|
||||
if (url_slice.len == 0) {
|
||||
const fetch_error = fetch_error_blank_url;
|
||||
return JSPromise.rejectedPromiseValue(globalThis, ZigString.init(fetch_error).toErrorInstance(globalThis)).asRef();
|
||||
}
|
||||
|
||||
url = ZigURL.parse(url_slice.slice());
|
||||
url_proxy_buffer = url.href;
|
||||
}
|
||||
} else {
|
||||
const fetch_error = fetch_type_error_strings.get(js.JSValueGetType(ctx, arguments[0]));
|
||||
@@ -925,19 +1106,9 @@ pub const Fetch = struct {
|
||||
_ = FetchTasklet.queue(
|
||||
default_allocator,
|
||||
globalThis,
|
||||
.{
|
||||
.method = method,
|
||||
.url = url,
|
||||
.headers = headers orelse Headers{
|
||||
.allocator = bun.default_allocator,
|
||||
},
|
||||
.body = body,
|
||||
.timeout = std.time.ns_per_hour,
|
||||
.disable_keepalive = disable_keepalive,
|
||||
.disable_timeout = disable_timeout,
|
||||
.follow_redirects = follow_redirects,
|
||||
.verbose = verbose,
|
||||
},
|
||||
.{ .method = method, .url = url, .headers = headers orelse Headers{
|
||||
.allocator = bun.default_allocator,
|
||||
}, .body = body, .timeout = std.time.ns_per_hour, .disable_keepalive = disable_keepalive, .disable_timeout = disable_timeout, .follow_redirects = follow_redirects, .verbose = verbose, .proxy = proxy, .url_proxy_buffer = url_proxy_buffer },
|
||||
JSC.JSValue.fromRef(deferred_promise),
|
||||
) catch unreachable;
|
||||
return deferred_promise;
|
||||
|
||||
@@ -24,7 +24,6 @@ it("fetch() with a buffered gzip response works (one chunk)", async () => {
|
||||
|
||||
const res = await fetch(
|
||||
`http://${server.hostname}:${server.port}`,
|
||||
{},
|
||||
{ verbose: true },
|
||||
);
|
||||
gcTick(true);
|
||||
@@ -64,7 +63,6 @@ it("fetch() with a redirect that returns a buffered gzip response works (one chu
|
||||
|
||||
const res = await fetch(
|
||||
`http://${server.hostname}:${server.port}/hey`,
|
||||
{},
|
||||
{ verbose: true },
|
||||
);
|
||||
const arrayBuffer = await res.arrayBuffer();
|
||||
@@ -100,7 +98,6 @@ it("fetch() with a protocol-relative redirect that returns a buffered gzip respo
|
||||
|
||||
const res = await fetch(
|
||||
`http://${server.hostname}:${server.port}/hey`,
|
||||
{},
|
||||
{ verbose: true },
|
||||
);
|
||||
expect(res.url).toBe(`http://${server.hostname}:${server.port}/redirect`);
|
||||
|
||||
@@ -127,7 +127,7 @@ describe("fetch", () => {
|
||||
}
|
||||
it(name, async () => {
|
||||
gc();
|
||||
const response = await fetch(url, {}, { verbose: true });
|
||||
const response = await fetch(url, { verbose: true });
|
||||
gc();
|
||||
const text = await response.text();
|
||||
gc();
|
||||
|
||||
60
test/bun.js/proxy.test.js
Normal file
60
test/bun.js/proxy.test.js
Normal file
@@ -0,0 +1,60 @@
|
||||
import { afterAll, beforeAll, describe, expect, it } from "bun:test";
|
||||
import { gc } from "./gc";
|
||||
|
||||
let proxy, server;
|
||||
|
||||
// TODO: Proxy with TLS requests
|
||||
|
||||
beforeAll(()=> {
|
||||
proxy = Bun.serve({
|
||||
async fetch(request) {
|
||||
// if is not an proxy connection just drop it
|
||||
if (!request.headers.has("proxy-connection")) {
|
||||
return new Response("Bad Request", { status: 400 });
|
||||
}
|
||||
|
||||
// simple http proxy
|
||||
if (request.url.startsWith("http://")) {
|
||||
return await fetch(request.url, { method: request.method, body: await request.text() });
|
||||
}
|
||||
|
||||
// no TLS support here
|
||||
return new Response("Bad Request", { status: 400 });
|
||||
|
||||
},
|
||||
port: 54321,
|
||||
});
|
||||
server = Bun.serve({
|
||||
async fetch(request) {
|
||||
if (request.method === "POST"){
|
||||
const text = await request.text();
|
||||
return new Response(text,{ status: 200 });
|
||||
}
|
||||
return new Response("Hello, World",{ status: 200 });
|
||||
},
|
||||
port: 54322,
|
||||
});
|
||||
});
|
||||
|
||||
afterAll(() => {
|
||||
server.stop();
|
||||
proxy.stop();
|
||||
});
|
||||
|
||||
describe("proxy", () => {
|
||||
const requests = [
|
||||
[ new Request("http://localhost:54322"), "fetch() GET with non-TLS Proxy", "http://localhost:54321"],
|
||||
[ new Request("http://localhost:54322", { method: "POST", body: "Hello, World" }), "fetch() POST with non-TLS Proxy", "http://localhost:54321"]
|
||||
];
|
||||
for (let [ request, name, proxy ] of requests) {
|
||||
gc();
|
||||
it(name, async () => {
|
||||
gc();
|
||||
const response = await fetch(request, { verbose: true, proxy });
|
||||
gc();
|
||||
const text = await response.text();
|
||||
gc();
|
||||
expect(text).toBe("Hello, World");
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -905,7 +905,6 @@ describe("should support Content-Range with Bun.file()", () => {
|
||||
await getServer(async (server) => {
|
||||
const response = await fetch(
|
||||
`http://${server.hostname}:${server.port}/?start=${start}&end=${end}`,
|
||||
{},
|
||||
{ verbose: true },
|
||||
);
|
||||
expect(await response.arrayBuffer()).toEqual(
|
||||
|
||||
Reference in New Issue
Block a user