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,366 +0,0 @@
1
- {% callout %}
2
-
3
- <!-- **Note** — The `Bun.file` and `Bun.write` APIs documented on this page are heavily optimized and represent the recommended way to perform file-system tasks using Bun. Existing Node.js projects may use Bun's [nearly complete](https://bun.com/docs/runtime/nodejs-apis#node-fs) implementation of the [`node:fs`](https://nodejs.org/api/fs.html) module. -->
4
-
5
- **Note** — The `Bun.file` and `Bun.write` APIs documented on this page are heavily optimized and represent the recommended way to perform file-system tasks using Bun. For operations that are not yet available with `Bun.file`, such as `mkdir` or `readdir`, you can use Bun's [nearly complete](https://bun.com/docs/runtime/nodejs-apis#node-fs) implementation of the [`node:fs`](https://nodejs.org/api/fs.html) module.
6
-
7
- {% /callout %}
8
-
9
- Bun provides a set of optimized APIs for reading and writing files.
10
-
11
- ## Reading files (`Bun.file()`)
12
-
13
- `Bun.file(path): BunFile`
14
-
15
- Create a `BunFile` instance with the `Bun.file(path)` function. A `BunFile` represents a lazily-loaded file; initializing it does not actually read the file from disk.
16
-
17
- ```ts
18
- const foo = Bun.file("foo.txt"); // relative to cwd
19
- foo.size; // number of bytes
20
- foo.type; // MIME type
21
- ```
22
-
23
- The reference conforms to the [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) interface, so the contents can be read in various formats.
24
-
25
- ```ts
26
- const foo = Bun.file("foo.txt");
27
-
28
- await foo.text(); // contents as a string
29
- await foo.stream(); // contents as ReadableStream
30
- await foo.arrayBuffer(); // contents as ArrayBuffer
31
- await foo.bytes(); // contents as Uint8Array
32
- ```
33
-
34
- File references can also be created using numerical [file descriptors](https://en.wikipedia.org/wiki/File_descriptor) or `file://` URLs.
35
-
36
- ```ts
37
- Bun.file(1234);
38
- Bun.file(new URL(import.meta.url)); // reference to the current file
39
- ```
40
-
41
- A `BunFile` can point to a location on disk where a file does not exist.
42
-
43
- ```ts
44
- const notreal = Bun.file("notreal.txt");
45
- notreal.size; // 0
46
- notreal.type; // "text/plain;charset=utf-8"
47
- const exists = await notreal.exists(); // false
48
- ```
49
-
50
- The default MIME type is `text/plain;charset=utf-8`, but it can be overridden by passing a second argument to `Bun.file`.
51
-
52
- ```ts
53
- const notreal = Bun.file("notreal.json", { type: "application/json" });
54
- notreal.type; // => "application/json;charset=utf-8"
55
- ```
56
-
57
- For convenience, Bun exposes `stdin`, `stdout` and `stderr` as instances of `BunFile`.
58
-
59
- ```ts
60
- Bun.stdin; // readonly
61
- Bun.stdout;
62
- Bun.stderr;
63
- ```
64
-
65
- ### Deleting files (`file.delete()`)
66
-
67
- You can delete a file by calling the `.delete()` function.
68
-
69
- ```ts
70
- await Bun.file("logs.json").delete();
71
- ```
72
-
73
- ## Writing files (`Bun.write()`)
74
-
75
- `Bun.write(destination, data): Promise<number>`
76
-
77
- The `Bun.write` function is a multi-tool for writing payloads of all kinds to disk.
78
-
79
- The first argument is the `destination` which can have any of the following types:
80
-
81
- - `string`: A path to a location on the file system. Use the `"path"` module to manipulate paths.
82
- - `URL`: A `file://` descriptor.
83
- - `BunFile`: A file reference.
84
-
85
- The second argument is the data to be written. It can be any of the following:
86
-
87
- - `string`
88
- - `Blob` (including `BunFile`)
89
- - `ArrayBuffer` or `SharedArrayBuffer`
90
- - `TypedArray` (`Uint8Array`, et. al.)
91
- - `Response`
92
-
93
- All possible permutations are handled using the fastest available system calls on the current platform.
94
-
95
- {% details summary="See syscalls" %}
96
-
97
- {% table %}
98
-
99
- - Output
100
- - Input
101
- - System call
102
- - Platform
103
-
104
- ---
105
-
106
- - file
107
- - file
108
- - copy_file_range
109
- - Linux
110
-
111
- ---
112
-
113
- - file
114
- - pipe
115
- - sendfile
116
- - Linux
117
-
118
- ---
119
-
120
- - pipe
121
- - pipe
122
- - splice
123
- - Linux
124
-
125
- ---
126
-
127
- - terminal
128
- - file
129
- - sendfile
130
- - Linux
131
-
132
- ---
133
-
134
- - terminal
135
- - terminal
136
- - sendfile
137
- - Linux
138
-
139
- ---
140
-
141
- - socket
142
- - file or pipe
143
- - sendfile (if http, not https)
144
- - Linux
145
-
146
- ---
147
-
148
- - file (doesn't exist)
149
- - file (path)
150
- - clonefile
151
- - macOS
152
-
153
- ---
154
-
155
- - file (exists)
156
- - file
157
- - fcopyfile
158
- - macOS
159
-
160
- ---
161
-
162
- - file
163
- - Blob or string
164
- - write
165
- - macOS
166
-
167
- ---
168
-
169
- - file
170
- - Blob or string
171
- - write
172
- - Linux
173
-
174
- {% /table %}
175
-
176
- {% /details %}
177
-
178
- To write a string to disk:
179
-
180
- ```ts
181
- const data = `It was the best of times, it was the worst of times.`;
182
- await Bun.write("output.txt", data);
183
- ```
184
-
185
- To copy a file to another location on disk:
186
-
187
- ```js
188
- const input = Bun.file("input.txt");
189
- const output = Bun.file("output.txt"); // doesn't exist yet!
190
- await Bun.write(output, input);
191
- ```
192
-
193
- To write a byte array to disk:
194
-
195
- ```ts
196
- const encoder = new TextEncoder();
197
- const data = encoder.encode("datadatadata"); // Uint8Array
198
- await Bun.write("output.txt", data);
199
- ```
200
-
201
- To write a file to `stdout`:
202
-
203
- ```ts
204
- const input = Bun.file("input.txt");
205
- await Bun.write(Bun.stdout, input);
206
- ```
207
-
208
- To write the body of an HTTP response to disk:
209
-
210
- ```ts
211
- const response = await fetch("https://bun.com");
212
- await Bun.write("index.html", response);
213
- ```
214
-
215
- ## Incremental writing with `FileSink`
216
-
217
- Bun provides a native incremental file writing API called `FileSink`. To retrieve a `FileSink` instance from a `BunFile`:
218
-
219
- ```ts
220
- const file = Bun.file("output.txt");
221
- const writer = file.writer();
222
- ```
223
-
224
- To incrementally write to the file, call `.write()`.
225
-
226
- ```ts
227
- const file = Bun.file("output.txt");
228
- const writer = file.writer();
229
-
230
- writer.write("it was the best of times\n");
231
- writer.write("it was the worst of times\n");
232
- ```
233
-
234
- These chunks will be buffered internally. To flush the buffer to disk, use `.flush()`. This returns the number of flushed bytes.
235
-
236
- ```ts
237
- writer.flush(); // write buffer to disk
238
- ```
239
-
240
- The buffer will also auto-flush when the `FileSink`'s _high water mark_ is reached; that is, when its internal buffer is full. This value can be configured.
241
-
242
- ```ts
243
- const file = Bun.file("output.txt");
244
- const writer = file.writer({ highWaterMark: 1024 * 1024 }); // 1MB
245
- ```
246
-
247
- To flush the buffer and close the file:
248
-
249
- ```ts
250
- writer.end();
251
- ```
252
-
253
- Note that, by default, the `bun` process will stay alive until this `FileSink` is explicitly closed with `.end()`. To opt out of this behavior, you can "unref" the instance.
254
-
255
- ```ts
256
- writer.unref();
257
-
258
- // to "re-ref" it later
259
- writer.ref();
260
- ```
261
-
262
- ## Directories
263
-
264
- Bun's implementation of `node:fs` is fast, and we haven't implemented a Bun-specific API for reading directories just yet. For now, you should use `node:fs` for working with directories in Bun.
265
-
266
- ### Reading directories (readdir)
267
-
268
- To read a directory in Bun, use `readdir` from `node:fs`.
269
-
270
- ```ts
271
- import { readdir } from "node:fs/promises";
272
-
273
- // read all the files in the current directory
274
- const files = await readdir(import.meta.dir);
275
- ```
276
-
277
- #### Reading directories recursively
278
-
279
- To recursively read a directory in Bun, use `readdir` with `recursive: true`.
280
-
281
- ```ts
282
- import { readdir } from "node:fs/promises";
283
-
284
- // read all the files in the current directory, recursively
285
- const files = await readdir("../", { recursive: true });
286
- ```
287
-
288
- ### Creating directories (mkdir)
289
-
290
- To recursively create a directory, use `mkdir` in `node:fs`:
291
-
292
- ```ts
293
- import { mkdir } from "node:fs/promises";
294
-
295
- await mkdir("path/to/dir", { recursive: true });
296
- ```
297
-
298
- ## Benchmarks
299
-
300
- The following is a 3-line implementation of the Linux `cat` command.
301
-
302
- ```ts#cat.ts
303
- // Usage
304
- // $ bun ./cat.ts ./path-to-file
305
-
306
- import { resolve } from "path";
307
-
308
- const path = resolve(process.argv.at(-1));
309
- await Bun.write(Bun.stdout, Bun.file(path));
310
- ```
311
-
312
- To run the file:
313
-
314
- ```bash
315
- $ bun ./cat.ts ./path-to-file
316
- ```
317
-
318
- It runs 2x faster than GNU `cat` for large files on Linux.
319
-
320
- {% image src="/images/cat.jpg" /%}
321
-
322
- ## Reference
323
-
324
- ```ts
325
- interface Bun {
326
- stdin: BunFile;
327
- stdout: BunFile;
328
- stderr: BunFile;
329
-
330
- file(path: string | number | URL, options?: { type?: string }): BunFile;
331
-
332
- write(
333
- destination: string | number | BunFile | URL,
334
- input:
335
- | string
336
- | Blob
337
- | ArrayBuffer
338
- | SharedArrayBuffer
339
- | TypedArray
340
- | Response,
341
- ): Promise<number>;
342
- }
343
-
344
- interface BunFile {
345
- readonly size: number;
346
- readonly type: string;
347
-
348
- text(): Promise<string>;
349
- stream(): ReadableStream;
350
- arrayBuffer(): Promise<ArrayBuffer>;
351
- json(): Promise<any>;
352
- writer(params: { highWaterMark?: number }): FileSink;
353
- exists(): Promise<boolean>;
354
- }
355
-
356
- export interface FileSink {
357
- write(
358
- chunk: string | ArrayBufferView | ArrayBuffer | SharedArrayBuffer,
359
- ): number;
360
- flush(): number | Promise<number>;
361
- end(error?: Error): number | Promise<number>;
362
- start(options?: { highWaterMark?: number }): void;
363
- ref(): void;
364
- unref(): void;
365
- }
366
- ```
@@ -1,112 +0,0 @@
1
- Bun provides a fast API for resolving routes against file-system paths. This API is primarily intended for library authors. At the moment only Next.js-style file-system routing is supported, but other styles may be added in the future.
2
-
3
- ## Next.js-style
4
-
5
- The `FileSystemRouter` class can resolve routes against a `pages` directory. (The Next.js 13 `app` directory is not yet supported.) Consider the following `pages` directory:
6
-
7
- ```txt
8
- pages
9
- ├── index.tsx
10
- ├── settings.tsx
11
- ├── blog
12
- │   ├── [slug].tsx
13
- │   └── index.tsx
14
- └── [[...catchall]].tsx
15
- ```
16
-
17
- The `FileSystemRouter` can be used to resolve routes against this directory:
18
-
19
- ```ts
20
- const router = new Bun.FileSystemRouter({
21
- style: "nextjs",
22
- dir: "./pages",
23
- origin: "https://mydomain.com",
24
- assetPrefix: "_next/static/"
25
- });
26
- router.match("/");
27
-
28
- // =>
29
- {
30
- filePath: "/path/to/pages/index.tsx",
31
- kind: "exact",
32
- name: "/",
33
- pathname: "/",
34
- src: "https://mydomain.com/_next/static/pages/index.tsx"
35
- }
36
- ```
37
-
38
- Query parameters will be parsed and returned in the `query` property.
39
-
40
- ```ts
41
- router.match("/settings?foo=bar");
42
-
43
- // =>
44
- {
45
- filePath: "/Users/colinmcd94/Documents/bun/fun/pages/settings.tsx",
46
- kind: "dynamic",
47
- name: "/settings",
48
- pathname: "/settings?foo=bar",
49
- src: "https://mydomain.com/_next/static/pages/settings.tsx",
50
- query: {
51
- foo: "bar"
52
- }
53
- }
54
- ```
55
-
56
- The router will automatically parse URL parameters and return them in the `params` property:
57
-
58
- ```ts
59
- router.match("/blog/my-cool-post");
60
-
61
- // =>
62
- {
63
- filePath: "/Users/colinmcd94/Documents/bun/fun/pages/blog/[slug].tsx",
64
- kind: "dynamic",
65
- name: "/blog/[slug]",
66
- pathname: "/blog/my-cool-post",
67
- src: "https://mydomain.com/_next/static/pages/blog/[slug].tsx",
68
- params: {
69
- slug: "my-cool-post"
70
- }
71
- }
72
- ```
73
-
74
- The `.match()` method also accepts `Request` and `Response` objects. The `url` property will be used to resolve the route.
75
-
76
- ```ts
77
- router.match(new Request("https://example.com/blog/my-cool-post"));
78
- ```
79
-
80
- The router will read the directory contents on initialization. To re-scan the files, use the `.reload()` method.
81
-
82
- ```ts
83
- router.reload();
84
- ```
85
-
86
- ## Reference
87
-
88
- ```ts
89
- interface Bun {
90
- class FileSystemRouter {
91
- constructor(params: {
92
- dir: string;
93
- style: "nextjs";
94
- origin?: string;
95
- assetPrefix?: string;
96
- fileExtensions?: string[];
97
- });
98
-
99
- reload(): void;
100
-
101
- match(path: string | Request | Response): {
102
- filePath: string;
103
- kind: "exact" | "catch-all" | "optional-catch-all" | "dynamic";
104
- name: string;
105
- pathname: string;
106
- src: string;
107
- params?: Record<string, string>;
108
- query?: Record<string, string>;
109
- } | null
110
- }
111
- }
112
- ```
package/docs/api/file.md DELETED
@@ -1,19 +0,0 @@
1
- Bun.js has fast paths for common use cases that make Web APIs live up to the performance demands of servers and CLIs.
2
-
3
- `Bun.file(path)` returns a [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) that represents a lazily-loaded file.
4
-
5
- When you pass a file blob to `Bun.write`, Bun automatically uses a faster system call:
6
-
7
- ```js
8
- const blob = Bun.file("input.txt");
9
- await Bun.write("output.txt", blob);
10
- ```
11
-
12
- On Linux, this uses the [`copy_file_range`](https://man7.org/linux/man-pages/man2/copy_file_range.2.html) syscall and on macOS, this becomes `clonefile` (or [`fcopyfile`](https://developer.apple.com/library/archive/documentation/System/Conceptual/ManPages_iPhoneOS/man3/copyfile.3.html)).
13
-
14
- `Bun.write` also supports [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) objects. It automatically converts to a [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob).
15
-
16
- ```js
17
- // Eventually, this will stream the response to disk but today it buffers
18
- await Bun.write("index.html", await fetch("https://example.com"));
19
- ```
package/docs/api/glob.md DELETED
@@ -1,178 +0,0 @@
1
- Bun includes a fast native implementation of file globbing.
2
-
3
- ## Quickstart
4
-
5
- **Scan a directory for files matching `*.ts`**:
6
-
7
- ```ts
8
- import { Glob } from "bun";
9
-
10
- const glob = new Glob("**/*.ts");
11
-
12
- // Scans the current working directory and each of its sub-directories recursively
13
- for await (const file of glob.scan(".")) {
14
- console.log(file); // => "index.ts"
15
- }
16
- ```
17
-
18
- **Match a string against a glob pattern**:
19
-
20
- ```ts
21
- import { Glob } from "bun";
22
-
23
- const glob = new Glob("*.ts");
24
-
25
- glob.match("index.ts"); // => true
26
- glob.match("index.js"); // => false
27
- ```
28
-
29
- `Glob` is a class which implements the following interface:
30
-
31
- ```ts
32
- class Glob {
33
- scan(root: string | ScanOptions): AsyncIterable<string>;
34
- scanSync(root: string | ScanOptions): Iterable<string>;
35
-
36
- match(path: string): boolean;
37
- }
38
-
39
- interface ScanOptions {
40
- /**
41
- * The root directory to start matching from. Defaults to `process.cwd()`
42
- */
43
- cwd?: string;
44
-
45
- /**
46
- * Allow patterns to match entries that begin with a period (`.`).
47
- *
48
- * @default false
49
- */
50
- dot?: boolean;
51
-
52
- /**
53
- * Return the absolute path for entries.
54
- *
55
- * @default false
56
- */
57
- absolute?: boolean;
58
-
59
- /**
60
- * Indicates whether to traverse descendants of symbolic link directories.
61
- *
62
- * @default false
63
- */
64
- followSymlinks?: boolean;
65
-
66
- /**
67
- * Throw an error when symbolic link is broken
68
- *
69
- * @default false
70
- */
71
- throwErrorOnBrokenSymlink?: boolean;
72
-
73
- /**
74
- * Return only files.
75
- *
76
- * @default true
77
- */
78
- onlyFiles?: boolean;
79
- }
80
- ```
81
-
82
- ## Supported Glob Patterns
83
-
84
- Bun supports the following glob patterns:
85
-
86
- ### `?` - Match any single character
87
-
88
- ```ts
89
- const glob = new Glob("???.ts");
90
- glob.match("foo.ts"); // => true
91
- glob.match("foobar.ts"); // => false
92
- ```
93
-
94
- ### `*` - Matches zero or more characters, except for path separators (`/` or `\`)
95
-
96
- ```ts
97
- const glob = new Glob("*.ts");
98
- glob.match("index.ts"); // => true
99
- glob.match("src/index.ts"); // => false
100
- ```
101
-
102
- ### `**` - Match any number of characters including `/`
103
-
104
- ```ts
105
- const glob = new Glob("**/*.ts");
106
- glob.match("index.ts"); // => true
107
- glob.match("src/index.ts"); // => true
108
- glob.match("src/index.js"); // => false
109
- ```
110
-
111
- ### `[ab]` - Matches one of the characters contained in the brackets, as well as character ranges
112
-
113
- ```ts
114
- const glob = new Glob("ba[rz].ts");
115
- glob.match("bar.ts"); // => true
116
- glob.match("baz.ts"); // => true
117
- glob.match("bat.ts"); // => false
118
- ```
119
-
120
- You can use character ranges (e.g `[0-9]`, `[a-z]`) as well as the negation operators `^` or `!` to match anything _except_ the characters contained within the braces (e.g `[^ab]`, `[!a-z]`)
121
-
122
- ```ts
123
- const glob = new Glob("ba[a-z][0-9][^4-9].ts");
124
- glob.match("bar01.ts"); // => true
125
- glob.match("baz83.ts"); // => true
126
- glob.match("bat22.ts"); // => true
127
- glob.match("bat24.ts"); // => false
128
- glob.match("ba0a8.ts"); // => false
129
- ```
130
-
131
- ### `{a,b,c}` - Match any of the given patterns
132
-
133
- ```ts
134
- const glob = new Glob("{a,b,c}.ts");
135
- glob.match("a.ts"); // => true
136
- glob.match("b.ts"); // => true
137
- glob.match("c.ts"); // => true
138
- glob.match("d.ts"); // => false
139
- ```
140
-
141
- These match patterns can be deeply nested (up to 10 levels), and contain any of the wildcards from above.
142
-
143
- ### `!` - Negates the result at the start of a pattern
144
-
145
- ```ts
146
- const glob = new Glob("!index.ts");
147
- glob.match("index.ts"); // => false
148
- glob.match("foo.ts"); // => true
149
- ```
150
-
151
- ### `\` - Escapes any of the special characters above
152
-
153
- ```ts
154
- const glob = new Glob("\\!index.ts");
155
- glob.match("!index.ts"); // => true
156
- glob.match("index.ts"); // => false
157
- ```
158
-
159
- ## Node.js `fs.glob()` compatibility
160
-
161
- Bun also implements Node.js's `fs.glob()` functions with additional features:
162
-
163
- ```ts
164
- import { glob, globSync, promises } from "node:fs";
165
-
166
- // Array of patterns
167
- const files = await promises.glob(["**/*.ts", "**/*.js"]);
168
-
169
- // Exclude patterns
170
- const filtered = await promises.glob("**/*", {
171
- exclude: ["node_modules/**", "*.test.*"],
172
- });
173
- ```
174
-
175
- All three functions (`fs.glob()`, `fs.globSync()`, `fs.promises.glob()`) support:
176
-
177
- - Array of patterns as the first argument
178
- - `exclude` option to filter results