bun-types 1.1.37-canary.20241124T140524 → 1.1.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/docs/api/binary-data.md +1028 -0
  2. package/docs/api/cc.md +197 -0
  3. package/docs/api/color.md +262 -0
  4. package/docs/api/console.md +38 -0
  5. package/docs/api/dns.md +113 -0
  6. package/docs/api/fetch.md +308 -0
  7. package/docs/api/ffi.md +536 -0
  8. package/docs/api/file-io.md +358 -0
  9. package/docs/api/file-system-router.md +112 -0
  10. package/docs/api/file.md +19 -0
  11. package/docs/api/glob.md +157 -0
  12. package/docs/api/globals.md +387 -0
  13. package/docs/api/hashing.md +314 -0
  14. package/docs/api/html-rewriter.md +31 -0
  15. package/docs/api/http.md +661 -0
  16. package/docs/api/import-meta.md +69 -0
  17. package/docs/api/node-api.md +16 -0
  18. package/docs/api/semver.md +52 -0
  19. package/docs/api/spawn.md +441 -0
  20. package/docs/api/sqlite.md +692 -0
  21. package/docs/api/streams.md +214 -0
  22. package/docs/api/tcp.md +221 -0
  23. package/docs/api/test.md +1 -0
  24. package/docs/api/transpiler.md +274 -0
  25. package/docs/api/udp.md +125 -0
  26. package/docs/api/utils.md +773 -0
  27. package/docs/api/websockets.md +547 -0
  28. package/docs/api/workers.md +230 -0
  29. package/docs/benchmarks.md +120 -0
  30. package/docs/bun-flavored-toml.md +42 -0
  31. package/docs/bundler/executables.md +291 -0
  32. package/docs/bundler/index.md +1543 -0
  33. package/docs/bundler/intro.md +75 -0
  34. package/docs/bundler/loaders.md +288 -0
  35. package/docs/bundler/macros.md +327 -0
  36. package/docs/bundler/plugins.md +30 -0
  37. package/docs/bundler/vs-esbuild.md +1127 -0
  38. package/docs/cli/add.md +163 -0
  39. package/docs/cli/bun-completions.md +3 -0
  40. package/docs/cli/bun-create.md +254 -0
  41. package/docs/cli/bun-dev.md +21 -0
  42. package/docs/cli/bun-install.md +255 -0
  43. package/docs/cli/bun-upgrade.md +39 -0
  44. package/docs/cli/bunx.md +80 -0
  45. package/docs/cli/filter.md +57 -0
  46. package/docs/cli/init.md +40 -0
  47. package/docs/cli/install.md +205 -0
  48. package/docs/cli/link.md +38 -0
  49. package/docs/cli/outdated.md +61 -0
  50. package/docs/cli/patch-commit.md +9 -0
  51. package/docs/cli/pm.md +150 -0
  52. package/docs/cli/publish.md +107 -0
  53. package/docs/cli/remove.md +5 -0
  54. package/docs/cli/run.md +196 -0
  55. package/docs/cli/test.md +247 -0
  56. package/docs/cli/unlink.md +7 -0
  57. package/docs/cli/update.md +34 -0
  58. package/docs/contributing/upgrading-webkit.md +57 -0
  59. package/docs/ecosystem/elysia.md +24 -0
  60. package/docs/ecosystem/express.md +37 -0
  61. package/docs/ecosystem/hono.md +18 -0
  62. package/docs/ecosystem/react.md +65 -0
  63. package/docs/ecosystem/stric.md +37 -0
  64. package/docs/guides/binary/arraybuffer-to-array.md +27 -0
  65. package/docs/guides/binary/arraybuffer-to-blob.md +24 -0
  66. package/docs/guides/binary/arraybuffer-to-buffer.md +25 -0
  67. package/docs/guides/binary/arraybuffer-to-string.md +15 -0
  68. package/docs/guides/binary/arraybuffer-to-typedarray.md +39 -0
  69. package/docs/guides/binary/blob-to-arraybuffer.md +14 -0
  70. package/docs/guides/binary/blob-to-dataview.md +14 -0
  71. package/docs/guides/binary/blob-to-stream.md +14 -0
  72. package/docs/guides/binary/blob-to-string.md +15 -0
  73. package/docs/guides/binary/blob-to-typedarray.md +14 -0
  74. package/docs/guides/binary/buffer-to-arraybuffer.md +14 -0
  75. package/docs/guides/binary/buffer-to-blob.md +14 -0
  76. package/docs/guides/binary/buffer-to-readablestream.md +41 -0
  77. package/docs/guides/binary/buffer-to-string.md +25 -0
  78. package/docs/guides/binary/buffer-to-typedarray.md +14 -0
  79. package/docs/guides/binary/dataview-to-string.md +15 -0
  80. package/docs/guides/binary/typedarray-to-arraybuffer.md +25 -0
  81. package/docs/guides/binary/typedarray-to-blob.md +16 -0
  82. package/docs/guides/binary/typedarray-to-buffer.md +14 -0
  83. package/docs/guides/binary/typedarray-to-dataview.md +14 -0
  84. package/docs/guides/binary/typedarray-to-readablestream.md +41 -0
  85. package/docs/guides/binary/typedarray-to-string.md +16 -0
  86. package/docs/guides/ecosystem/astro.md +72 -0
  87. package/docs/guides/ecosystem/discordjs.md +77 -0
  88. package/docs/guides/ecosystem/docker.md +140 -0
  89. package/docs/guides/ecosystem/drizzle.md +185 -0
  90. package/docs/guides/ecosystem/edgedb.md +228 -0
  91. package/docs/guides/ecosystem/elysia.md +31 -0
  92. package/docs/guides/ecosystem/express.md +40 -0
  93. package/docs/guides/ecosystem/hono.md +39 -0
  94. package/docs/guides/ecosystem/mongoose.md +87 -0
  95. package/docs/guides/ecosystem/neon-drizzle.md +220 -0
  96. package/docs/guides/ecosystem/neon-serverless-postgres.md +55 -0
  97. package/docs/guides/ecosystem/nextjs.md +38 -0
  98. package/docs/guides/ecosystem/nuxt.md +56 -0
  99. package/docs/guides/ecosystem/pm2.md +57 -0
  100. package/docs/guides/ecosystem/prisma.md +140 -0
  101. package/docs/guides/ecosystem/qwik.md +107 -0
  102. package/docs/guides/ecosystem/react.md +49 -0
  103. package/docs/guides/ecosystem/remix.md +78 -0
  104. package/docs/guides/ecosystem/render.md +79 -0
  105. package/docs/guides/ecosystem/sentry.md +52 -0
  106. package/docs/guides/ecosystem/solidstart.md +58 -0
  107. package/docs/guides/ecosystem/ssr-react.md +51 -0
  108. package/docs/guides/ecosystem/stric.md +55 -0
  109. package/docs/guides/ecosystem/sveltekit.md +125 -0
  110. package/docs/guides/ecosystem/systemd.md +113 -0
  111. package/docs/guides/ecosystem/vite.md +70 -0
  112. package/docs/guides/http/cluster.md +66 -0
  113. package/docs/guides/http/fetch-unix.md +33 -0
  114. package/docs/guides/http/fetch.md +24 -0
  115. package/docs/guides/http/file-uploads.md +94 -0
  116. package/docs/guides/http/hot.md +22 -0
  117. package/docs/guides/http/proxy.md +24 -0
  118. package/docs/guides/http/server.md +46 -0
  119. package/docs/guides/http/simple.md +18 -0
  120. package/docs/guides/http/stream-file.md +48 -0
  121. package/docs/guides/http/stream-iterator.md +47 -0
  122. package/docs/guides/http/stream-node-streams-in-bun.md +20 -0
  123. package/docs/guides/http/tls.md +30 -0
  124. package/docs/guides/install/add-dev.md +26 -0
  125. package/docs/guides/install/add-git.md +36 -0
  126. package/docs/guides/install/add-optional.md +25 -0
  127. package/docs/guides/install/add-peer.md +17 -0
  128. package/docs/guides/install/add-tarball.md +33 -0
  129. package/docs/guides/install/add.md +42 -0
  130. package/docs/guides/install/azure-artifacts.md +73 -0
  131. package/docs/guides/install/cicd.md +41 -0
  132. package/docs/guides/install/custom-registry.md +30 -0
  133. package/docs/guides/install/from-npm-install-to-bun-install.md +214 -0
  134. package/docs/guides/install/git-diff-bun-lockfile.md +38 -0
  135. package/docs/guides/install/jfrog-artifactory.md +28 -0
  136. package/docs/guides/install/npm-alias.md +23 -0
  137. package/docs/guides/install/registry-scope.md +36 -0
  138. package/docs/guides/install/trusted.md +48 -0
  139. package/docs/guides/install/workspaces.md +70 -0
  140. package/docs/guides/install/yarnlock.md +42 -0
  141. package/docs/guides/process/argv.md +57 -0
  142. package/docs/guides/process/ctrl-c.md +16 -0
  143. package/docs/guides/process/ipc.md +66 -0
  144. package/docs/guides/process/nanoseconds.md +13 -0
  145. package/docs/guides/process/os-signals.md +39 -0
  146. package/docs/guides/process/spawn-stderr.md +31 -0
  147. package/docs/guides/process/spawn-stdout.md +26 -0
  148. package/docs/guides/process/spawn.md +41 -0
  149. package/docs/guides/process/stdin.md +54 -0
  150. package/docs/guides/read-file/arraybuffer.md +28 -0
  151. package/docs/guides/read-file/buffer.md +19 -0
  152. package/docs/guides/read-file/exists.md +16 -0
  153. package/docs/guides/read-file/json.md +17 -0
  154. package/docs/guides/read-file/mime.md +20 -0
  155. package/docs/guides/read-file/stream.md +26 -0
  156. package/docs/guides/read-file/string.md +22 -0
  157. package/docs/guides/read-file/uint8array.md +21 -0
  158. package/docs/guides/read-file/watch.md +68 -0
  159. package/docs/guides/runtime/cicd.md +43 -0
  160. package/docs/guides/runtime/define-constant.md +145 -0
  161. package/docs/guides/runtime/import-html.md +15 -0
  162. package/docs/guides/runtime/import-json.md +44 -0
  163. package/docs/guides/runtime/import-toml.md +30 -0
  164. package/docs/guides/runtime/read-env.md +32 -0
  165. package/docs/guides/runtime/set-env.md +37 -0
  166. package/docs/guides/runtime/shell.md +40 -0
  167. package/docs/guides/runtime/timezone.md +35 -0
  168. package/docs/guides/runtime/tsconfig-paths.md +29 -0
  169. package/docs/guides/runtime/typescript.md +47 -0
  170. package/docs/guides/runtime/vscode-debugger.md +47 -0
  171. package/docs/guides/runtime/web-debugger.md +82 -0
  172. package/docs/guides/streams/node-readable-to-arraybuffer.md +11 -0
  173. package/docs/guides/streams/node-readable-to-blob.md +11 -0
  174. package/docs/guides/streams/node-readable-to-json.md +12 -0
  175. package/docs/guides/streams/node-readable-to-string.md +12 -0
  176. package/docs/guides/streams/node-readable-to-uint8array.md +11 -0
  177. package/docs/guides/streams/to-array.md +14 -0
  178. package/docs/guides/streams/to-arraybuffer.md +14 -0
  179. package/docs/guides/streams/to-blob.md +14 -0
  180. package/docs/guides/streams/to-buffer.md +15 -0
  181. package/docs/guides/streams/to-json.md +14 -0
  182. package/docs/guides/streams/to-string.md +14 -0
  183. package/docs/guides/streams/to-typedarray.md +22 -0
  184. package/docs/guides/test/bail.md +22 -0
  185. package/docs/guides/test/coverage-threshold.md +60 -0
  186. package/docs/guides/test/coverage.md +44 -0
  187. package/docs/guides/test/happy-dom.md +68 -0
  188. package/docs/guides/test/migrate-from-jest.md +110 -0
  189. package/docs/guides/test/mock-clock.md +48 -0
  190. package/docs/guides/test/mock-functions.md +68 -0
  191. package/docs/guides/test/rerun-each.md +14 -0
  192. package/docs/guides/test/run-tests.md +111 -0
  193. package/docs/guides/test/skip-tests.md +39 -0
  194. package/docs/guides/test/snapshot.md +99 -0
  195. package/docs/guides/test/spy-on.md +46 -0
  196. package/docs/guides/test/testing-library.md +87 -0
  197. package/docs/guides/test/timeout.md +15 -0
  198. package/docs/guides/test/todo-tests.md +67 -0
  199. package/docs/guides/test/update-snapshots.md +50 -0
  200. package/docs/guides/test/watch-mode.md +19 -0
  201. package/docs/guides/util/base64.md +15 -0
  202. package/docs/guides/util/deep-equals.md +39 -0
  203. package/docs/guides/util/deflate.md +18 -0
  204. package/docs/guides/util/detect-bun.md +23 -0
  205. package/docs/guides/util/entrypoint.md +17 -0
  206. package/docs/guides/util/escape-html.md +22 -0
  207. package/docs/guides/util/file-url-to-path.md +14 -0
  208. package/docs/guides/util/gzip.md +18 -0
  209. package/docs/guides/util/hash-a-password.md +54 -0
  210. package/docs/guides/util/import-meta-dir.md +13 -0
  211. package/docs/guides/util/import-meta-file.md +13 -0
  212. package/docs/guides/util/import-meta-path.md +13 -0
  213. package/docs/guides/util/main.md +32 -0
  214. package/docs/guides/util/path-to-file-url.md +14 -0
  215. package/docs/guides/util/sleep.md +22 -0
  216. package/docs/guides/util/version.md +21 -0
  217. package/docs/guides/util/which-path-to-executable-bin.md +15 -0
  218. package/docs/guides/websocket/compression.md +31 -0
  219. package/docs/guides/websocket/context.md +72 -0
  220. package/docs/guides/websocket/pubsub.md +38 -0
  221. package/docs/guides/websocket/simple.md +33 -0
  222. package/docs/guides/write-file/append.md +52 -0
  223. package/docs/guides/write-file/basic.md +44 -0
  224. package/docs/guides/write-file/blob.md +28 -0
  225. package/docs/guides/write-file/cat.md +17 -0
  226. package/docs/guides/write-file/file-cp.md +16 -0
  227. package/docs/guides/write-file/filesink.md +52 -0
  228. package/docs/guides/write-file/response.md +17 -0
  229. package/docs/guides/write-file/stdout.md +21 -0
  230. package/docs/guides/write-file/stream.md +17 -0
  231. package/docs/guides/write-file/unlink.md +23 -0
  232. package/docs/index.md +77 -0
  233. package/docs/install/cache.md +57 -0
  234. package/docs/install/index.md +202 -0
  235. package/docs/install/lifecycle.md +46 -0
  236. package/docs/install/lockfile.md +90 -0
  237. package/docs/install/npmrc.md +75 -0
  238. package/docs/install/overrides.md +73 -0
  239. package/docs/install/patch.md +57 -0
  240. package/docs/install/registries.md +30 -0
  241. package/docs/install/workspaces.md +70 -0
  242. package/docs/installation.md +289 -0
  243. package/docs/project/benchmarking.md +203 -0
  244. package/docs/project/building-windows.md +162 -0
  245. package/docs/project/internals/build-process-for-ci.md +75 -0
  246. package/docs/project/roadmap.md +87 -0
  247. package/docs/quickstart.md +144 -0
  248. package/docs/runtime/autoimport.md +94 -0
  249. package/docs/runtime/bun-apis.md +129 -0
  250. package/docs/runtime/bunfig.md +532 -0
  251. package/docs/runtime/debugger.md +325 -0
  252. package/docs/runtime/env.md +214 -0
  253. package/docs/runtime/hot.md +139 -0
  254. package/docs/runtime/index.md +309 -0
  255. package/docs/runtime/jsx.md +326 -0
  256. package/docs/runtime/loaders.md +127 -0
  257. package/docs/runtime/modules.md +298 -0
  258. package/docs/runtime/nodejs-apis.md +456 -0
  259. package/docs/runtime/plugins.md +605 -0
  260. package/docs/runtime/shell.md +537 -0
  261. package/docs/runtime/typescript.md +60 -0
  262. package/docs/runtime/web-apis.md +128 -0
  263. package/docs/test/coverage.md +91 -0
  264. package/docs/test/dom.md +75 -0
  265. package/docs/test/hot.md +15 -0
  266. package/docs/test/lifecycle.md +81 -0
  267. package/docs/test/mocks.md +236 -0
  268. package/docs/test/snapshots.md +15 -0
  269. package/docs/test/time.md +106 -0
  270. package/docs/test/writing.md +547 -0
  271. package/docs/typescript.md +51 -0
  272. package/package.json +5 -4
@@ -0,0 +1,308 @@
1
+ Bun implements the WHATWG `fetch` standard, with some extensions to meet the needs of server-side JavaScript.
2
+
3
+ Bun also implements `node:http`, but `fetch` is generally recommended instead.
4
+
5
+ ## Sending an HTTP request
6
+
7
+ To send an HTTP request, use `fetch`
8
+
9
+ ```ts
10
+ const response = await fetch("http://example.com");
11
+
12
+ console.log(response.status); // => 200
13
+
14
+ const text = await response.text(); // or response.json(), response.formData(), etc.
15
+ ```
16
+
17
+ `fetch` also works with HTTPS URLs.
18
+
19
+ ```ts
20
+ const response = await fetch("https://example.com");
21
+ ```
22
+
23
+ You can also pass `fetch` a [`Request`](https://developer.mozilla.org/en-US/docs/Web/API/Request) object.
24
+
25
+ ```ts
26
+ const request = new Request("http://example.com", {
27
+ method: "POST",
28
+ body: "Hello, world!",
29
+ });
30
+
31
+ const response = await fetch(request);
32
+ ```
33
+
34
+ ### Sending a POST request
35
+
36
+ To send a POST request, pass an object with the `method` property set to `"POST"`.
37
+
38
+ ```ts
39
+ const response = await fetch("http://example.com", {
40
+ method: "POST",
41
+ body: "Hello, world!",
42
+ });
43
+ ```
44
+
45
+ `body` can be a string, a `FormData` object, an `ArrayBuffer`, a `Blob`, and more. See the [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#setting_a_body) for more information.
46
+
47
+ ### Proxying requests
48
+
49
+ To proxy a request, pass an object with the `proxy` property set to a URL.
50
+
51
+ ```ts
52
+ const response = await fetch("http://example.com", {
53
+ proxy: "http://proxy.com",
54
+ });
55
+ ```
56
+
57
+ ### Custom headers
58
+
59
+ To set custom headers, pass an object with the `headers` property set to an object.
60
+
61
+ ```ts
62
+ const response = await fetch("http://example.com", {
63
+ headers: {
64
+ "X-Custom-Header": "value",
65
+ },
66
+ });
67
+ ```
68
+
69
+ You can also set headers using the [Headers](https://developer.mozilla.org/en-US/docs/Web/API/Headers) object.
70
+
71
+ ```ts
72
+ const headers = new Headers();
73
+ headers.append("X-Custom-Header", "value");
74
+
75
+ const response = await fetch("http://example.com", {
76
+ headers,
77
+ });
78
+ ```
79
+
80
+ ### Response bodies
81
+
82
+ To read the response body, use one of the following methods:
83
+
84
+ - `response.text(): Promise<string>`: Returns a promise that resolves with the response body as a string.
85
+ - `response.json(): Promise<any>`: Returns a promise that resolves with the response body as a JSON object.
86
+ - `response.formData(): Promise<FormData>`: Returns a promise that resolves with the response body as a `FormData` object.
87
+ - `response.bytes(): Promise<Uint8Array>`: Returns a promise that resolves with the response body as a `Uint8Array`.
88
+ - `response.arrayBuffer(): Promise<ArrayBuffer>`: Returns a promise that resolves with the response body as an `ArrayBuffer`.
89
+ - `response.blob(): Promise<Blob>`: Returns a promise that resolves with the response body as a `Blob`.
90
+
91
+ #### Streaming response bodies
92
+
93
+ You can use async iterators to stream the response body.
94
+
95
+ ```ts
96
+ const response = await fetch("http://example.com");
97
+
98
+ for await (const chunk of response.body) {
99
+ console.log(chunk);
100
+ }
101
+ ```
102
+
103
+ You can also more directly access the `ReadableStream` object.
104
+
105
+ ```ts
106
+ const response = await fetch("http://example.com");
107
+
108
+ const stream = response.body;
109
+
110
+ const reader = stream.getReader();
111
+ const { value, done } = await reader.read();
112
+ ```
113
+
114
+ ### Fetching a URL with a timeout
115
+
116
+ To fetch a URL with a timeout, use `AbortSignal.timeout`:
117
+
118
+ ```ts
119
+ const response = await fetch("http://example.com", {
120
+ signal: AbortSignal.timeout(1000),
121
+ });
122
+ ```
123
+
124
+ #### Canceling a request
125
+
126
+ To cancel a request, use an `AbortController`:
127
+
128
+ ```ts
129
+ const controller = new AbortController();
130
+
131
+ const response = await fetch("http://example.com", {
132
+ signal: controller.signal,
133
+ });
134
+
135
+ controller.abort();
136
+ ```
137
+
138
+ ### Unix domain sockets
139
+
140
+ To fetch a URL using a Unix domain socket, use the `unix: string` option:
141
+
142
+ ```ts
143
+ const response = await fetch("https://hostname/a/path", {
144
+ unix: "/var/run/path/to/unix.sock",
145
+ method: "POST",
146
+ body: JSON.stringify({ message: "Hello from Bun!" }),
147
+ headers: {
148
+ "Content-Type": "application/json",
149
+ },
150
+ });
151
+ ```
152
+
153
+ ### TLS
154
+
155
+ To use a client certificate, use the `tls` option:
156
+
157
+ ```ts
158
+ await fetch("https://example.com", {
159
+ tls: {
160
+ key: Bun.file("/path/to/key.pem"),
161
+ cert: Bun.file("/path/to/cert.pem"),
162
+ // ca: [Bun.file("/path/to/ca.pem")],
163
+ },
164
+ });
165
+ ```
166
+
167
+ #### Custom TLS Validation
168
+
169
+ To customize the TLS validation, use the `checkServerIdentity` option in `tls`
170
+
171
+ ```ts
172
+ await fetch("https://example.com", {
173
+ tls: {
174
+ checkServerIdentity: (hostname, peerCertificate) => {
175
+ // Return an error if the certificate is invalid
176
+ },
177
+ },
178
+ });
179
+ ```
180
+
181
+ This is similar to how it works in Node's `net` module.
182
+
183
+ ## Debugging
184
+
185
+ To help with debugging, you can pass `verbose: true` to `fetch`:
186
+
187
+ ```ts
188
+ const response = await fetch("http://example.com", {
189
+ verbose: true,
190
+ });
191
+ ```
192
+
193
+ This will print the request and response headers to your terminal:
194
+
195
+ ```sh
196
+ [fetch] > HTTP/1.1 GET http://example.com/
197
+ [fetch] > Connection: keep-alive
198
+ [fetch] > User-Agent: Bun/1.1.21
199
+ [fetch] > Accept: */*
200
+ [fetch] > Host: example.com
201
+ [fetch] > Accept-Encoding: gzip, deflate, br
202
+
203
+ [fetch] < 200 OK
204
+ [fetch] < Content-Encoding: gzip
205
+ [fetch] < Age: 201555
206
+ [fetch] < Cache-Control: max-age=604800
207
+ [fetch] < Content-Type: text/html; charset=UTF-8
208
+ [fetch] < Date: Sun, 21 Jul 2024 02:41:14 GMT
209
+ [fetch] < Etag: "3147526947+gzip"
210
+ [fetch] < Expires: Sun, 28 Jul 2024 02:41:14 GMT
211
+ [fetch] < Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
212
+ [fetch] < Server: ECAcc (sac/254F)
213
+ [fetch] < Vary: Accept-Encoding
214
+ [fetch] < X-Cache: HIT
215
+ [fetch] < Content-Length: 648
216
+ ```
217
+
218
+ Note: `verbose: boolean` is not part of the Web standard `fetch` API and is specific to Bun.
219
+
220
+ ## Performance
221
+
222
+ Before an HTTP request can be sent, the DNS lookup must be performed. This can take a significant amount of time, especially if the DNS server is slow or the network connection is poor.
223
+
224
+ After the DNS lookup, the TCP socket must be connected and the TLS handshake might need to be performed. This can also take a significant amount of time.
225
+
226
+ After the request completes, consuming the response body can also take a significant amount of time and memory.
227
+
228
+ At every step of the way, Bun provides APIs to help you optimize the performance of your application.
229
+
230
+ ### DNS prefetching
231
+
232
+ To prefetch a DNS entry, you can use the `dns.prefetch` API. This API is useful when you know you'll need to connect to a host soon and want to avoid the initial DNS lookup.
233
+
234
+ ```ts
235
+ import { dns } from "bun";
236
+
237
+ dns.prefetch("bun.sh", 443);
238
+ ```
239
+
240
+ #### DNS caching
241
+
242
+ By default, Bun caches and deduplicates DNS queries in-memory for up to 30 seconds. You can see the cache stats by calling `dns.getCacheStats()`:
243
+
244
+ To learn more about DNS caching in Bun, see the [DNS caching](https://bun.sh/docs/api/dns) documentation.
245
+
246
+ ### Preconnect to a host
247
+
248
+ To preconnect to a host, you can use the `fetch.preconnect` API. This API is useful when you know you'll need to connect to a host soon and want to start the initial DNS lookup, TCP socket connection, and TLS handshake early.
249
+
250
+ ```ts
251
+ import { fetch } from "bun";
252
+
253
+ fetch.preconnect("https://bun.sh");
254
+ ```
255
+
256
+ Note: calling `fetch` immediately after `fetch.preconnect` will not make your request faster. Preconnecting only helps if you know you'll need to connect to a host soon, but you're not ready to make the request yet.
257
+
258
+ #### Preconnect at startup
259
+
260
+ To preconnect to a host at startup, you can pass `--fetch-preconnect`:
261
+
262
+ ```sh
263
+ $ bun --fetch-preconnect https://bun.sh ./my-script.ts
264
+ ```
265
+
266
+ This is sort of like `<link rel="preconnect">` in HTML.
267
+
268
+ This feature is not implemented on Windows yet. If you're interested in using this feature on Windows, please file an issue and we can implement support for it on Windows.
269
+
270
+ ### Connection pooling & HTTP keep-alive
271
+
272
+ Bun automatically reuses connections to the same host. This is known as connection pooling. This can significantly reduce the time it takes to establish a connection. You don't need to do anything to enable this; it's automatic.
273
+
274
+ #### Simultaneous connection limit
275
+
276
+ By default, Bun limits the maximum number of simultaneous `fetch` requests to 256. We do this for several reasons:
277
+
278
+ - It improves overall system stability. Operating systems have an upper limit on the number of simultaneous open TCP sockets, usually in the low thousands. Nearing this limit causes your entire computer to behave strangely. Applications hang and crash.
279
+ - It encourages HTTP Keep-Alive connection reuse. For short-lived HTTP requests, the slowest step is often the initial connection setup. Reusing connections can save a lot of time.
280
+
281
+ When the limit is exceeded, the requests are queued and sent as soon as the next request ends.
282
+
283
+ You can increase the maximum number of simultaneous connections via the `BUN_CONFIG_MAX_HTTP_REQUESTS` environment variable:
284
+
285
+ ```sh
286
+ $ BUN_CONFIG_MAX_HTTP_REQUESTS=512 bun ./my-script.ts
287
+ ```
288
+
289
+ The max value for this limit is currently set to 65,336. The maximum port number is 65,535, so it's quite difficult for any one computer to exceed this limit.
290
+
291
+ ### Response buffering
292
+
293
+ Bun goes to great lengths to optimize the performance of reading the response body. The fastest way to read the response body is to use one of these methods:
294
+
295
+ - `response.text(): Promise<string>`
296
+ - `response.json(): Promise<any>`
297
+ - `response.formData(): Promise<FormData>`
298
+ - `response.bytes(): Promise<Uint8Array>`
299
+ - `response.arrayBuffer(): Promise<ArrayBuffer>`
300
+ - `response.blob(): Promise<Blob>`
301
+
302
+ You can also use `Bun.write` to write the response body to a file on disk:
303
+
304
+ ```ts
305
+ import { write } from "bun";
306
+
307
+ await write("output.txt", response);
308
+ ```