bun-types 1.3.2-canary.20251104T140728 → 1.3.2-canary.20251106T140813

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 (312) hide show
  1. package/bun.d.ts +4 -4
  2. package/docs/README.md +28 -0
  3. package/globals.d.ts +0 -1
  4. package/overrides.d.ts +45 -15
  5. package/package.json +1 -1
  6. package/test.d.ts +1 -1
  7. package/docs/api/binary-data.md +0 -1038
  8. package/docs/api/cc.md +0 -197
  9. package/docs/api/color.md +0 -262
  10. package/docs/api/console.md +0 -57
  11. package/docs/api/cookie.md +0 -449
  12. package/docs/api/dns.md +0 -110
  13. package/docs/api/fetch.md +0 -463
  14. package/docs/api/ffi.md +0 -557
  15. package/docs/api/file-io.md +0 -366
  16. package/docs/api/file-system-router.md +0 -112
  17. package/docs/api/file.md +0 -19
  18. package/docs/api/glob.md +0 -178
  19. package/docs/api/globals.md +0 -387
  20. package/docs/api/hashing.md +0 -319
  21. package/docs/api/html-rewriter.md +0 -334
  22. package/docs/api/http.md +0 -1408
  23. package/docs/api/import-meta.md +0 -69
  24. package/docs/api/node-api.md +0 -14
  25. package/docs/api/redis.md +0 -597
  26. package/docs/api/s3.md +0 -850
  27. package/docs/api/secrets.md +0 -319
  28. package/docs/api/semver.md +0 -52
  29. package/docs/api/spawn.md +0 -582
  30. package/docs/api/sql.md +0 -1374
  31. package/docs/api/sqlite.md +0 -694
  32. package/docs/api/streams.md +0 -230
  33. package/docs/api/tcp.md +0 -221
  34. package/docs/api/transpiler.md +0 -276
  35. package/docs/api/udp.md +0 -123
  36. package/docs/api/utils.md +0 -891
  37. package/docs/api/websockets.md +0 -573
  38. package/docs/api/workers.md +0 -322
  39. package/docs/api/yaml.md +0 -668
  40. package/docs/benchmarks.md +0 -120
  41. package/docs/bun-flavored-toml.md +0 -42
  42. package/docs/bundler/css.md +0 -1028
  43. package/docs/bundler/css_modules.md +0 -145
  44. package/docs/bundler/executables.md +0 -626
  45. package/docs/bundler/fullstack.md +0 -418
  46. package/docs/bundler/hmr.md +0 -234
  47. package/docs/bundler/html.md +0 -349
  48. package/docs/bundler/index.md +0 -1735
  49. package/docs/bundler/intro.md +0 -75
  50. package/docs/bundler/loaders.md +0 -410
  51. package/docs/bundler/macros.md +0 -329
  52. package/docs/bundler/plugins.md +0 -449
  53. package/docs/bundler/vs-esbuild.md +0 -1127
  54. package/docs/cli/add.md +0 -173
  55. package/docs/cli/bun-completions.md +0 -3
  56. package/docs/cli/bun-create.md +0 -338
  57. package/docs/cli/bun-install.md +0 -349
  58. package/docs/cli/bun-upgrade.md +0 -39
  59. package/docs/cli/bunx.md +0 -89
  60. package/docs/cli/filter.md +0 -90
  61. package/docs/cli/info.md +0 -65
  62. package/docs/cli/init.md +0 -85
  63. package/docs/cli/install.md +0 -344
  64. package/docs/cli/link.md +0 -40
  65. package/docs/cli/outdated.md +0 -90
  66. package/docs/cli/patch-commit.md +0 -11
  67. package/docs/cli/pm.md +0 -285
  68. package/docs/cli/publish.md +0 -120
  69. package/docs/cli/remove.md +0 -7
  70. package/docs/cli/run.md +0 -261
  71. package/docs/cli/test.md +0 -397
  72. package/docs/cli/unlink.md +0 -9
  73. package/docs/cli/update.md +0 -129
  74. package/docs/cli/why.md +0 -67
  75. package/docs/contributing/upgrading-webkit.md +0 -57
  76. package/docs/ecosystem/elysia.md +0 -24
  77. package/docs/ecosystem/express.md +0 -37
  78. package/docs/ecosystem/hono.md +0 -18
  79. package/docs/ecosystem/react.md +0 -65
  80. package/docs/ecosystem/stric.md +0 -38
  81. package/docs/guides/binary/arraybuffer-to-array.md +0 -27
  82. package/docs/guides/binary/arraybuffer-to-blob.md +0 -24
  83. package/docs/guides/binary/arraybuffer-to-buffer.md +0 -25
  84. package/docs/guides/binary/arraybuffer-to-string.md +0 -15
  85. package/docs/guides/binary/arraybuffer-to-typedarray.md +0 -39
  86. package/docs/guides/binary/blob-to-arraybuffer.md +0 -14
  87. package/docs/guides/binary/blob-to-dataview.md +0 -14
  88. package/docs/guides/binary/blob-to-stream.md +0 -14
  89. package/docs/guides/binary/blob-to-string.md +0 -15
  90. package/docs/guides/binary/blob-to-typedarray.md +0 -14
  91. package/docs/guides/binary/buffer-to-arraybuffer.md +0 -14
  92. package/docs/guides/binary/buffer-to-blob.md +0 -14
  93. package/docs/guides/binary/buffer-to-readablestream.md +0 -41
  94. package/docs/guides/binary/buffer-to-string.md +0 -25
  95. package/docs/guides/binary/buffer-to-typedarray.md +0 -14
  96. package/docs/guides/binary/dataview-to-string.md +0 -15
  97. package/docs/guides/binary/typedarray-to-arraybuffer.md +0 -25
  98. package/docs/guides/binary/typedarray-to-blob.md +0 -16
  99. package/docs/guides/binary/typedarray-to-buffer.md +0 -14
  100. package/docs/guides/binary/typedarray-to-dataview.md +0 -14
  101. package/docs/guides/binary/typedarray-to-readablestream.md +0 -41
  102. package/docs/guides/binary/typedarray-to-string.md +0 -16
  103. package/docs/guides/deployment/railway.md +0 -157
  104. package/docs/guides/ecosystem/astro.md +0 -72
  105. package/docs/guides/ecosystem/discordjs.md +0 -77
  106. package/docs/guides/ecosystem/docker.md +0 -140
  107. package/docs/guides/ecosystem/drizzle.md +0 -185
  108. package/docs/guides/ecosystem/edgedb.md +0 -228
  109. package/docs/guides/ecosystem/elysia.md +0 -31
  110. package/docs/guides/ecosystem/express.md +0 -40
  111. package/docs/guides/ecosystem/hono.md +0 -39
  112. package/docs/guides/ecosystem/mongoose.md +0 -87
  113. package/docs/guides/ecosystem/neon-drizzle.md +0 -220
  114. package/docs/guides/ecosystem/neon-serverless-postgres.md +0 -55
  115. package/docs/guides/ecosystem/nextjs.md +0 -49
  116. package/docs/guides/ecosystem/nuxt.md +0 -56
  117. package/docs/guides/ecosystem/pm2.md +0 -57
  118. package/docs/guides/ecosystem/prisma.md +0 -141
  119. package/docs/guides/ecosystem/qwik.md +0 -107
  120. package/docs/guides/ecosystem/react.md +0 -50
  121. package/docs/guides/ecosystem/remix.md +0 -78
  122. package/docs/guides/ecosystem/render.md +0 -79
  123. package/docs/guides/ecosystem/sentry.md +0 -52
  124. package/docs/guides/ecosystem/solidstart.md +0 -58
  125. package/docs/guides/ecosystem/ssr-react.md +0 -51
  126. package/docs/guides/ecosystem/stric.md +0 -55
  127. package/docs/guides/ecosystem/sveltekit.md +0 -125
  128. package/docs/guides/ecosystem/systemd.md +0 -113
  129. package/docs/guides/ecosystem/vite.md +0 -71
  130. package/docs/guides/html-rewriter/extract-links.md +0 -68
  131. package/docs/guides/html-rewriter/extract-social-meta.md +0 -93
  132. package/docs/guides/http/cluster.md +0 -66
  133. package/docs/guides/http/fetch-unix.md +0 -33
  134. package/docs/guides/http/fetch.md +0 -24
  135. package/docs/guides/http/file-uploads.md +0 -94
  136. package/docs/guides/http/hot.md +0 -26
  137. package/docs/guides/http/proxy.md +0 -24
  138. package/docs/guides/http/server.md +0 -46
  139. package/docs/guides/http/simple.md +0 -18
  140. package/docs/guides/http/stream-file.md +0 -48
  141. package/docs/guides/http/stream-iterator.md +0 -47
  142. package/docs/guides/http/stream-node-streams-in-bun.md +0 -20
  143. package/docs/guides/http/tls.md +0 -30
  144. package/docs/guides/install/add-dev.md +0 -26
  145. package/docs/guides/install/add-git.md +0 -36
  146. package/docs/guides/install/add-optional.md +0 -25
  147. package/docs/guides/install/add-peer.md +0 -43
  148. package/docs/guides/install/add-tarball.md +0 -33
  149. package/docs/guides/install/add.md +0 -42
  150. package/docs/guides/install/azure-artifacts.md +0 -73
  151. package/docs/guides/install/cicd.md +0 -41
  152. package/docs/guides/install/custom-registry.md +0 -30
  153. package/docs/guides/install/from-npm-install-to-bun-install.md +0 -214
  154. package/docs/guides/install/git-diff-bun-lockfile.md +0 -44
  155. package/docs/guides/install/jfrog-artifactory.md +0 -28
  156. package/docs/guides/install/npm-alias.md +0 -23
  157. package/docs/guides/install/registry-scope.md +0 -38
  158. package/docs/guides/install/trusted.md +0 -46
  159. package/docs/guides/install/workspaces.md +0 -70
  160. package/docs/guides/install/yarnlock.md +0 -44
  161. package/docs/guides/process/argv.md +0 -58
  162. package/docs/guides/process/ctrl-c.md +0 -16
  163. package/docs/guides/process/ipc.md +0 -66
  164. package/docs/guides/process/nanoseconds.md +0 -13
  165. package/docs/guides/process/os-signals.md +0 -39
  166. package/docs/guides/process/spawn-stderr.md +0 -31
  167. package/docs/guides/process/spawn-stdout.md +0 -26
  168. package/docs/guides/process/spawn.md +0 -41
  169. package/docs/guides/process/stdin.md +0 -54
  170. package/docs/guides/read-file/arraybuffer.md +0 -28
  171. package/docs/guides/read-file/buffer.md +0 -19
  172. package/docs/guides/read-file/exists.md +0 -16
  173. package/docs/guides/read-file/json.md +0 -17
  174. package/docs/guides/read-file/mime.md +0 -20
  175. package/docs/guides/read-file/stream.md +0 -26
  176. package/docs/guides/read-file/string.md +0 -22
  177. package/docs/guides/read-file/uint8array.md +0 -21
  178. package/docs/guides/read-file/watch.md +0 -68
  179. package/docs/guides/runtime/build-time-constants.md +0 -293
  180. package/docs/guides/runtime/cicd.md +0 -43
  181. package/docs/guides/runtime/codesign-macos-executable.md +0 -56
  182. package/docs/guides/runtime/define-constant.md +0 -145
  183. package/docs/guides/runtime/delete-directory.md +0 -37
  184. package/docs/guides/runtime/delete-file.md +0 -19
  185. package/docs/guides/runtime/heap-snapshot.md +0 -26
  186. package/docs/guides/runtime/import-html.md +0 -15
  187. package/docs/guides/runtime/import-json.md +0 -44
  188. package/docs/guides/runtime/import-toml.md +0 -30
  189. package/docs/guides/runtime/import-yaml.md +0 -102
  190. package/docs/guides/runtime/read-env.md +0 -32
  191. package/docs/guides/runtime/set-env.md +0 -47
  192. package/docs/guides/runtime/shell.md +0 -40
  193. package/docs/guides/runtime/timezone.md +0 -35
  194. package/docs/guides/runtime/tsconfig-paths.md +0 -29
  195. package/docs/guides/runtime/typescript.md +0 -49
  196. package/docs/guides/runtime/vscode-debugger.md +0 -47
  197. package/docs/guides/runtime/web-debugger.md +0 -82
  198. package/docs/guides/streams/node-readable-to-arraybuffer.md +0 -11
  199. package/docs/guides/streams/node-readable-to-blob.md +0 -11
  200. package/docs/guides/streams/node-readable-to-json.md +0 -12
  201. package/docs/guides/streams/node-readable-to-string.md +0 -12
  202. package/docs/guides/streams/node-readable-to-uint8array.md +0 -11
  203. package/docs/guides/streams/to-array.md +0 -14
  204. package/docs/guides/streams/to-arraybuffer.md +0 -14
  205. package/docs/guides/streams/to-blob.md +0 -14
  206. package/docs/guides/streams/to-buffer.md +0 -15
  207. package/docs/guides/streams/to-json.md +0 -14
  208. package/docs/guides/streams/to-string.md +0 -14
  209. package/docs/guides/streams/to-typedarray.md +0 -22
  210. package/docs/guides/test/bail.md +0 -22
  211. package/docs/guides/test/coverage-threshold.md +0 -60
  212. package/docs/guides/test/coverage.md +0 -44
  213. package/docs/guides/test/happy-dom.md +0 -68
  214. package/docs/guides/test/migrate-from-jest.md +0 -143
  215. package/docs/guides/test/mock-clock.md +0 -48
  216. package/docs/guides/test/mock-functions.md +0 -68
  217. package/docs/guides/test/rerun-each.md +0 -14
  218. package/docs/guides/test/run-tests.md +0 -111
  219. package/docs/guides/test/skip-tests.md +0 -39
  220. package/docs/guides/test/snapshot.md +0 -95
  221. package/docs/guides/test/spy-on.md +0 -46
  222. package/docs/guides/test/svelte-test.md +0 -120
  223. package/docs/guides/test/testing-library.md +0 -92
  224. package/docs/guides/test/timeout.md +0 -15
  225. package/docs/guides/test/todo-tests.md +0 -67
  226. package/docs/guides/test/update-snapshots.md +0 -46
  227. package/docs/guides/test/watch-mode.md +0 -19
  228. package/docs/guides/util/base64.md +0 -15
  229. package/docs/guides/util/deep-equals.md +0 -39
  230. package/docs/guides/util/deflate.md +0 -18
  231. package/docs/guides/util/detect-bun.md +0 -23
  232. package/docs/guides/util/entrypoint.md +0 -17
  233. package/docs/guides/util/escape-html.md +0 -22
  234. package/docs/guides/util/file-url-to-path.md +0 -14
  235. package/docs/guides/util/gzip.md +0 -18
  236. package/docs/guides/util/hash-a-password.md +0 -54
  237. package/docs/guides/util/import-meta-dir.md +0 -13
  238. package/docs/guides/util/import-meta-file.md +0 -13
  239. package/docs/guides/util/import-meta-path.md +0 -13
  240. package/docs/guides/util/javascript-uuid.md +0 -23
  241. package/docs/guides/util/main.md +0 -32
  242. package/docs/guides/util/path-to-file-url.md +0 -14
  243. package/docs/guides/util/sleep.md +0 -22
  244. package/docs/guides/util/version.md +0 -21
  245. package/docs/guides/util/which-path-to-executable-bin.md +0 -15
  246. package/docs/guides/websocket/compression.md +0 -31
  247. package/docs/guides/websocket/context.md +0 -77
  248. package/docs/guides/websocket/pubsub.md +0 -41
  249. package/docs/guides/websocket/simple.md +0 -33
  250. package/docs/guides/write-file/append.md +0 -52
  251. package/docs/guides/write-file/basic.md +0 -44
  252. package/docs/guides/write-file/blob.md +0 -28
  253. package/docs/guides/write-file/cat.md +0 -17
  254. package/docs/guides/write-file/file-cp.md +0 -16
  255. package/docs/guides/write-file/filesink.md +0 -52
  256. package/docs/guides/write-file/response.md +0 -17
  257. package/docs/guides/write-file/stdout.md +0 -21
  258. package/docs/guides/write-file/stream.md +0 -17
  259. package/docs/guides/write-file/unlink.md +0 -16
  260. package/docs/index.md +0 -77
  261. package/docs/install/audit.md +0 -57
  262. package/docs/install/cache.md +0 -59
  263. package/docs/install/catalogs.md +0 -298
  264. package/docs/install/index.md +0 -248
  265. package/docs/install/isolated.md +0 -197
  266. package/docs/install/lifecycle.md +0 -46
  267. package/docs/install/lockfile.md +0 -58
  268. package/docs/install/npmrc.md +0 -105
  269. package/docs/install/overrides.md +0 -73
  270. package/docs/install/patch.md +0 -59
  271. package/docs/install/registries.md +0 -30
  272. package/docs/install/security-scanner-api.md +0 -81
  273. package/docs/install/workspaces.md +0 -114
  274. package/docs/installation.md +0 -327
  275. package/docs/project/asan.md +0 -124
  276. package/docs/project/benchmarking.md +0 -203
  277. package/docs/project/bindgen.md +0 -225
  278. package/docs/project/building-windows.md +0 -162
  279. package/docs/project/contributing.md +0 -347
  280. package/docs/project/internals/build-process-for-ci.md +0 -75
  281. package/docs/project/licensing.md +0 -73
  282. package/docs/project/roadmap.md +0 -87
  283. package/docs/quickstart.md +0 -157
  284. package/docs/runtime/autoimport.md +0 -94
  285. package/docs/runtime/bun-apis.md +0 -207
  286. package/docs/runtime/bunfig.md +0 -772
  287. package/docs/runtime/debugger.md +0 -325
  288. package/docs/runtime/env.md +0 -253
  289. package/docs/runtime/hot.md +0 -145
  290. package/docs/runtime/index.md +0 -312
  291. package/docs/runtime/jsx.md +0 -385
  292. package/docs/runtime/loaders.md +0 -130
  293. package/docs/runtime/modules.md +0 -320
  294. package/docs/runtime/nodejs-apis.md +0 -463
  295. package/docs/runtime/plugins.md +0 -561
  296. package/docs/runtime/shell.md +0 -605
  297. package/docs/runtime/typescript.md +0 -139
  298. package/docs/runtime/web-apis.md +0 -128
  299. package/docs/test/configuration.md +0 -154
  300. package/docs/test/coverage.md +0 -142
  301. package/docs/test/discovery.md +0 -85
  302. package/docs/test/dom.md +0 -75
  303. package/docs/test/examples/concurrent-test-glob.md +0 -132
  304. package/docs/test/hot.md +0 -15
  305. package/docs/test/lifecycle.md +0 -81
  306. package/docs/test/mocks.md +0 -313
  307. package/docs/test/reporters.md +0 -117
  308. package/docs/test/runtime-behavior.md +0 -95
  309. package/docs/test/snapshots.md +0 -68
  310. package/docs/test/time.md +0 -126
  311. package/docs/test/writing.md +0 -825
  312. package/docs/typescript.md +0 -53
@@ -1,230 +0,0 @@
1
- Streams are an important abstraction for working with binary data without loading it all into memory at once. They are commonly used for reading and writing files, sending and receiving network requests, and processing large amounts of data.
2
-
3
- Bun implements the Web APIs [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream) and [`WritableStream`](https://developer.mozilla.org/en-US/docs/Web/API/WritableStream).
4
-
5
- {% callout %}
6
- Bun also implements the `node:stream` module, including [`Readable`](https://nodejs.org/api/stream.html#stream_readable_streams), [`Writable`](https://nodejs.org/api/stream.html#stream_writable_streams), and [`Duplex`](https://nodejs.org/api/stream.html#stream_duplex_and_transform_streams). For complete documentation, refer to the [Node.js docs](https://nodejs.org/api/stream.html).
7
- {% /callout %}
8
-
9
- To create a simple `ReadableStream`:
10
-
11
- ```ts
12
- const stream = new ReadableStream({
13
- start(controller) {
14
- controller.enqueue("hello");
15
- controller.enqueue("world");
16
- controller.close();
17
- },
18
- });
19
- ```
20
-
21
- The contents of a `ReadableStream` can be read chunk-by-chunk with `for await` syntax.
22
-
23
- ```ts
24
- for await (const chunk of stream) {
25
- console.log(chunk);
26
- // => "hello"
27
- // => "world"
28
- }
29
- ```
30
-
31
- `ReadableStream` also provides convenience methods for consuming the entire stream:
32
-
33
- ```ts
34
- const stream = new ReadableStream({
35
- start(controller) {
36
- controller.enqueue("hello world");
37
- controller.close();
38
- },
39
- });
40
-
41
- const data = await stream.text(); // => "hello world"
42
- // Also available: .json(), .bytes(), .blob()
43
- ```
44
-
45
- ## Direct `ReadableStream`
46
-
47
- Bun implements an optimized version of `ReadableStream` that avoid unnecessary data copying & queue management logic. With a traditional `ReadableStream`, chunks of data are _enqueued_. Each chunk is copied into a queue, where it sits until the stream is ready to send more data.
48
-
49
- ```ts
50
- const stream = new ReadableStream({
51
- start(controller) {
52
- controller.enqueue("hello");
53
- controller.enqueue("world");
54
- controller.close();
55
- },
56
- });
57
- ```
58
-
59
- With a direct `ReadableStream`, chunks of data are written directly to the stream. No queueing happens, and there's no need to clone the chunk data into memory. The `controller` API is updated to reflect this; instead of `.enqueue()` you call `.write`.
60
-
61
- ```ts
62
- const stream = new ReadableStream({
63
- type: "direct",
64
- pull(controller) {
65
- controller.write("hello");
66
- controller.write("world");
67
- },
68
- });
69
- ```
70
-
71
- When using a direct `ReadableStream`, all chunk queueing is handled by the destination. The consumer of the stream receives exactly what is passed to `controller.write()`, without any encoding or modification.
72
-
73
- ## Async generator streams
74
-
75
- Bun also supports async generator functions as a source for `Response` and `Request`. This is an easy way to create a `ReadableStream` that fetches data from an asynchronous source.
76
-
77
- ```ts
78
- const response = new Response(
79
- (async function* () {
80
- yield "hello";
81
- yield "world";
82
- })(),
83
- );
84
-
85
- await response.text(); // "helloworld"
86
- ```
87
-
88
- You can also use `[Symbol.asyncIterator]` directly.
89
-
90
- ```ts
91
- const response = new Response({
92
- [Symbol.asyncIterator]: async function* () {
93
- yield "hello";
94
- yield "world";
95
- },
96
- });
97
-
98
- await response.text(); // "helloworld"
99
- ```
100
-
101
- If you need more granular control over the stream, `yield` will return the direct ReadableStream controller.
102
-
103
- ```ts
104
- const response = new Response({
105
- [Symbol.asyncIterator]: async function* () {
106
- const controller = yield "hello";
107
- await controller.end();
108
- },
109
- });
110
-
111
- await response.text(); // "hello"
112
- ```
113
-
114
- ## `Bun.ArrayBufferSink`
115
-
116
- The `Bun.ArrayBufferSink` class is a fast incremental writer for constructing an `ArrayBuffer` of unknown size.
117
-
118
- ```ts
119
- const sink = new Bun.ArrayBufferSink();
120
-
121
- sink.write("h");
122
- sink.write("e");
123
- sink.write("l");
124
- sink.write("l");
125
- sink.write("o");
126
-
127
- sink.end();
128
- // ArrayBuffer(5) [ 104, 101, 108, 108, 111 ]
129
- ```
130
-
131
- To instead retrieve the data as a `Uint8Array`, pass the `asUint8Array` option to the `start` method.
132
-
133
- ```ts-diff
134
- const sink = new Bun.ArrayBufferSink();
135
- sink.start({
136
- + asUint8Array: true
137
- });
138
-
139
- sink.write("h");
140
- sink.write("e");
141
- sink.write("l");
142
- sink.write("l");
143
- sink.write("o");
144
-
145
- sink.end();
146
- // Uint8Array(5) [ 104, 101, 108, 108, 111 ]
147
- ```
148
-
149
- The `.write()` method supports strings, typed arrays, `ArrayBuffer`, and `SharedArrayBuffer`.
150
-
151
- ```ts
152
- sink.write("h");
153
- sink.write(new Uint8Array([101, 108]));
154
- sink.write(Buffer.from("lo").buffer);
155
-
156
- sink.end();
157
- ```
158
-
159
- Once `.end()` is called, no more data can be written to the `ArrayBufferSink`. However, in the context of buffering a stream, it's useful to continuously write data and periodically `.flush()` the contents (say, into a `WriteableStream`). To support this, pass `stream: true` to the constructor.
160
-
161
- ```ts
162
- const sink = new Bun.ArrayBufferSink();
163
- sink.start({
164
- stream: true,
165
- });
166
-
167
- sink.write("h");
168
- sink.write("e");
169
- sink.write("l");
170
- sink.flush();
171
- // ArrayBuffer(5) [ 104, 101, 108 ]
172
-
173
- sink.write("l");
174
- sink.write("o");
175
- sink.flush();
176
- // ArrayBuffer(5) [ 108, 111 ]
177
- ```
178
-
179
- The `.flush()` method returns the buffered data as an `ArrayBuffer` (or `Uint8Array` if `asUint8Array: true`) and clears internal buffer.
180
-
181
- To manually set the size of the internal buffer in bytes, pass a value for `highWaterMark`:
182
-
183
- ```ts
184
- const sink = new Bun.ArrayBufferSink();
185
- sink.start({
186
- highWaterMark: 1024 * 1024, // 1 MB
187
- });
188
- ```
189
-
190
- {% details summary="Reference" %}
191
-
192
- ```ts
193
- /**
194
- * Fast incremental writer that becomes an `ArrayBuffer` on end().
195
- */
196
- export class ArrayBufferSink {
197
- constructor();
198
-
199
- start(options?: {
200
- asUint8Array?: boolean;
201
- /**
202
- * Preallocate an internal buffer of this size
203
- * This can significantly improve performance when the chunk size is small
204
- */
205
- highWaterMark?: number;
206
- /**
207
- * On {@link ArrayBufferSink.flush}, return the written data as a `Uint8Array`.
208
- * Writes will restart from the beginning of the buffer.
209
- */
210
- stream?: boolean;
211
- }): void;
212
-
213
- write(
214
- chunk: string | ArrayBufferView | ArrayBuffer | SharedArrayBuffer,
215
- ): number;
216
- /**
217
- * Flush the internal buffer
218
- *
219
- * If {@link ArrayBufferSink.start} was passed a `stream` option, this will return a `ArrayBuffer`
220
- * If {@link ArrayBufferSink.start} was passed a `stream` option and `asUint8Array`, this will return a `Uint8Array`
221
- * Otherwise, this will return the number of bytes written since the last flush
222
- *
223
- * This API might change later to separate Uint8ArraySink and ArrayBufferSink
224
- */
225
- flush(): number | Uint8Array<ArrayBuffer> | ArrayBuffer;
226
- end(): ArrayBuffer | Uint8Array<ArrayBuffer>;
227
- }
228
- ```
229
-
230
- {% /details %}
package/docs/api/tcp.md DELETED
@@ -1,221 +0,0 @@
1
- Use Bun's native TCP API to implement performance sensitive systems like database clients, game servers, or anything that needs to communicate over TCP (instead of HTTP). This is a low-level API intended for library authors and for advanced use cases.
2
-
3
- ## Start a server (`Bun.listen()`)
4
-
5
- To start a TCP server with `Bun.listen`:
6
-
7
- ```ts
8
- Bun.listen({
9
- hostname: "localhost",
10
- port: 8080,
11
- socket: {
12
- data(socket, data) {}, // message received from client
13
- open(socket) {}, // socket opened
14
- close(socket, error) {}, // socket closed
15
- drain(socket) {}, // socket ready for more data
16
- error(socket, error) {}, // error handler
17
- },
18
- });
19
- ```
20
-
21
- {% details summary="An API designed for speed" %}
22
-
23
- In Bun, a set of handlers are declared once per server instead of assigning callbacks to each socket, as with Node.js `EventEmitters` or the web-standard `WebSocket` API.
24
-
25
- ```ts
26
- Bun.listen({
27
- hostname: "localhost",
28
- port: 8080,
29
- socket: {
30
- open(socket) {},
31
- data(socket, data) {},
32
- drain(socket) {},
33
- close(socket, error) {},
34
- error(socket, error) {},
35
- },
36
- });
37
- ```
38
-
39
- For performance-sensitive servers, assigning listeners to each socket can cause significant garbage collector pressure and increase memory usage. By contrast, Bun only allocates one handler function for each event and shares it among all sockets. This is a small optimization, but it adds up.
40
-
41
- {% /details %}
42
-
43
- Contextual data can be attached to a socket in the `open` handler.
44
-
45
- ```ts
46
- type SocketData = { sessionId: string };
47
-
48
- Bun.listen<SocketData>({
49
- hostname: "localhost",
50
- port: 8080,
51
- socket: {
52
- data(socket, data) {
53
- socket.write(`${socket.data.sessionId}: ack`);
54
- },
55
- open(socket) {
56
- socket.data = { sessionId: "abcd" };
57
- },
58
- },
59
- });
60
- ```
61
-
62
- To enable TLS, pass a `tls` object containing `key` and `cert` fields.
63
-
64
- ```ts
65
- Bun.listen({
66
- hostname: "localhost",
67
- port: 8080,
68
- socket: {
69
- data(socket, data) {},
70
- },
71
- tls: {
72
- // can be string, BunFile, TypedArray, Buffer, or array thereof
73
- key: Bun.file("./key.pem"),
74
- cert: Bun.file("./cert.pem"),
75
- },
76
- });
77
- ```
78
-
79
- The `key` and `cert` fields expect the _contents_ of your TLS key and certificate. This can be a string, `BunFile`, `TypedArray`, or `Buffer`.
80
-
81
- ```ts
82
- Bun.listen({
83
- // ...
84
- tls: {
85
- // BunFile
86
- key: Bun.file("./key.pem"),
87
- // Buffer
88
- key: fs.readFileSync("./key.pem"),
89
- // string
90
- key: fs.readFileSync("./key.pem", "utf8"),
91
- // array of above
92
- key: [Bun.file("./key1.pem"), Bun.file("./key2.pem")],
93
- },
94
- });
95
- ```
96
-
97
- The result of `Bun.listen` is a server that conforms to the `TCPSocket` interface.
98
-
99
- ```ts
100
- const server = Bun.listen({
101
- /* config*/
102
- });
103
-
104
- // stop listening
105
- // parameter determines whether active connections are closed
106
- server.stop(true);
107
-
108
- // let Bun process exit even if server is still listening
109
- server.unref();
110
- ```
111
-
112
- ## Create a connection (`Bun.connect()`)
113
-
114
- Use `Bun.connect` to connect to a TCP server. Specify the server to connect to with `hostname` and `port`. TCP clients can define the same set of handlers as `Bun.listen`, plus a couple client-specific handlers.
115
-
116
- ```ts
117
- // The client
118
- const socket = await Bun.connect({
119
- hostname: "localhost",
120
- port: 8080,
121
-
122
- socket: {
123
- data(socket, data) {},
124
- open(socket) {},
125
- close(socket, error) {},
126
- drain(socket) {},
127
- error(socket, error) {},
128
-
129
- // client-specific handlers
130
- connectError(socket, error) {}, // connection failed
131
- end(socket) {}, // connection closed by server
132
- timeout(socket) {}, // connection timed out
133
- },
134
- });
135
- ```
136
-
137
- To require TLS, specify `tls: true`.
138
-
139
- ```ts
140
- // The client
141
- const socket = await Bun.connect({
142
- // ... config
143
- tls: true,
144
- });
145
- ```
146
-
147
- ## Hot reloading
148
-
149
- Both TCP servers and sockets can be hot reloaded with new handlers.
150
-
151
- {% codetabs %}
152
-
153
- ```ts#Server
154
- const server = Bun.listen({ /* config */ })
155
-
156
- // reloads handlers for all active server-side sockets
157
- server.reload({
158
- socket: {
159
- data(){
160
- // new 'data' handler
161
- }
162
- }
163
- })
164
- ```
165
-
166
- ```ts#Client
167
- const socket = await Bun.connect({ /* config */ })
168
- socket.reload({
169
- data(){
170
- // new 'data' handler
171
- }
172
- })
173
- ```
174
-
175
- {% /codetabs %}
176
-
177
- ## Buffering
178
-
179
- Currently, TCP sockets in Bun do not buffer data. For performance-sensitive code, it's important to consider buffering carefully. For example, this:
180
-
181
- ```ts
182
- socket.write("h");
183
- socket.write("e");
184
- socket.write("l");
185
- socket.write("l");
186
- socket.write("o");
187
- ```
188
-
189
- ...performs significantly worse than this:
190
-
191
- ```ts
192
- socket.write("hello");
193
- ```
194
-
195
- To simplify this for now, consider using Bun's `ArrayBufferSink` with the `{stream: true}` option:
196
-
197
- ```ts
198
- import { ArrayBufferSink } from "bun";
199
-
200
- const sink = new ArrayBufferSink();
201
- sink.start({ stream: true, highWaterMark: 1024 });
202
-
203
- sink.write("h");
204
- sink.write("e");
205
- sink.write("l");
206
- sink.write("l");
207
- sink.write("o");
208
-
209
- queueMicrotask(() => {
210
- const data = sink.flush();
211
- const wrote = socket.write(data);
212
- if (wrote < data.byteLength) {
213
- // put it back in the sink if the socket is full
214
- sink.write(data.subarray(wrote));
215
- }
216
- });
217
- ```
218
-
219
- {% callout %}
220
- **Corking** — Support for corking is planned, but in the meantime backpressure must be managed manually with the `drain` handler.
221
- {% /callout %}