bun-types 1.1.37-canary.20241123T140655 → 1.1.37-canary.20241125T140601

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,47 @@
1
+ ---
2
+ name: Streaming HTTP Server with Async Iterators
3
+ ---
4
+
5
+ In Bun, [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) objects can accept an async generator function as their body. This allows you to stream data to the client as it becomes available, rather than waiting for the entire response to be ready.
6
+
7
+ ```ts
8
+ Bun.serve({
9
+ port: 3000,
10
+ fetch(req) {
11
+ return new Response(
12
+ // An async generator function
13
+ async function* () {
14
+ yield "Hello, ";
15
+ await Bun.sleep(100);
16
+ yield "world!";
17
+
18
+ // you can also yield a TypedArray or Buffer
19
+ yield new Uint8Array(["\n".charCodeAt(0)]);
20
+ },
21
+ { headers: { "Content-Type": "text/plain" } },
22
+ );
23
+ },
24
+ });
25
+ ```
26
+
27
+ ---
28
+
29
+ You can pass any async iterable directly to `Response`:
30
+
31
+ ```ts
32
+ Bun.serve({
33
+ port: 3000,
34
+ fetch(req) {
35
+ return new Response(
36
+ {
37
+ [Symbol.asyncIterator]: async function* () {
38
+ yield "Hello, ";
39
+ await Bun.sleep(100);
40
+ yield "world!";
41
+ },
42
+ },
43
+ { headers: { "Content-Type": "text/plain" } },
44
+ );
45
+ },
46
+ });
47
+ ```
@@ -0,0 +1,20 @@
1
+ ---
2
+ name: Streaming HTTP Server with Node.js Streams
3
+ ---
4
+
5
+ In Bun, [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) objects can accept a Node.js [`Readable`](https://nodejs.org/api/stream.html#stream_readable_streams).
6
+
7
+ This works because Bun's `Response` object allows any async iterable as its body. Node.js streams are async iterables, so you can pass them directly to `Response`.
8
+
9
+ ```ts
10
+ import { Readable } from "stream";
11
+ import { serve } from "bun";
12
+ serve({
13
+ port: 3000,
14
+ fetch(req) {
15
+ return new Response(Readable.from(["Hello, ", "world!"]), {
16
+ headers: { "Content-Type": "text/plain" },
17
+ });
18
+ },
19
+ });
20
+ ```
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: Configure TLS on an HTTP server
3
+ ---
4
+
5
+ Set the `tls` key to configure TLS. Both `key` and `cert` are required. The `key` should be the contents of your private key; `cert` should be the contents of your issued certificate. Use [`Bun.file()`](https://bun.sh/docs/api/file-io#reading-files-bun-file) to read the contents.
6
+
7
+ ```ts
8
+ const server = Bun.serve({
9
+ fetch: request => new Response("Welcome to Bun!"),
10
+ tls: {
11
+ cert: Bun.file("cert.pem"),
12
+ key: Bun.file("key.pem"),
13
+ },
14
+ });
15
+ ```
16
+
17
+ ---
18
+
19
+ By default Bun trusts the default Mozilla-curated list of well-known root CAs. To override this list, pass an array of certificates as `ca`.
20
+
21
+ ```ts
22
+ const server = Bun.serve({
23
+ fetch: request => new Response("Welcome to Bun!"),
24
+ tls: {
25
+ cert: Bun.file("cert.pem"),
26
+ key: Bun.file("key.pem"),
27
+ ca: [Bun.file("ca1.pem"), Bun.file("ca2.pem")],
28
+ },
29
+ });
30
+ ```
@@ -0,0 +1,26 @@
1
+ ---
2
+ name: Add a development dependency
3
+ ---
4
+
5
+ To add an npm package as a development dependency, use `bun add --development`.
6
+
7
+ ```sh
8
+ $ bun add zod --dev
9
+ $ bun add zod -d # shorthand
10
+ ```
11
+
12
+ ---
13
+
14
+ This will add the package to `devDependencies` in `package.json`.
15
+
16
+ ```json-diff
17
+ {
18
+ "devDependencies": {
19
+ + "zod": "^3.0.0"
20
+ }
21
+ }
22
+ ```
23
+
24
+ ---
25
+
26
+ See [Docs > Package manager](https://bun.sh/docs/cli/install) for complete documentation of Bun's package manager.
@@ -0,0 +1,36 @@
1
+ ---
2
+ name: Add a Git dependency
3
+ ---
4
+
5
+ Bun supports directly adding GitHub repositories as dependencies of your project.
6
+
7
+ ```sh
8
+ $ bun add github:lodash/lodash
9
+ ```
10
+
11
+ ---
12
+
13
+ This will add the following line to your `package.json`:
14
+
15
+ ```json-diff#package.json
16
+ {
17
+ "dependencies": {
18
+ + "lodash": "github:lodash/lodash"
19
+ }
20
+ }
21
+ ```
22
+
23
+ ---
24
+
25
+ Bun supports a number of protocols for specifying Git dependencies.
26
+
27
+ ```sh
28
+ $ bun add git+https://github.com/lodash/lodash.git
29
+ $ bun add git+ssh://github.com/lodash/lodash.git#4.17.21
30
+ $ bun add git@github.com:lodash/lodash.git
31
+ $ bun add github:colinhacks/zod
32
+ ```
33
+
34
+ ---
35
+
36
+ See [Docs > Package manager](https://bun.sh/docs/cli/install) for complete documentation of Bun's package manager.
@@ -0,0 +1,25 @@
1
+ ---
2
+ name: Add an optional dependency
3
+ ---
4
+
5
+ To add an npm package as a peer dependency, use the `--optional` flag.
6
+
7
+ ```sh
8
+ $ bun add zod --optional
9
+ ```
10
+
11
+ ---
12
+
13
+ This will add the package to `optionalDependencies` in `package.json`.
14
+
15
+ ```json-diff
16
+ {
17
+ "optionalDependencies": {
18
+ + "zod": "^3.0.0"
19
+ }
20
+ }
21
+ ```
22
+
23
+ ---
24
+
25
+ See [Docs > Package manager](https://bun.sh/docs/cli/install) for complete documentation of Bun's package manager.
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: Add a peer dependency
3
+ ---
4
+
5
+ To add an npm package as a peer dependency, directly modify the `peerDependencies` object in your package.json. Running `bun install` will install peer dependencies by default, unless marked optional in `peerDependenciesMeta`.
6
+
7
+ ```json-diff
8
+ {
9
+ "peerDependencies": {
10
+ + "zod": "^3.0.0"
11
+ }
12
+ }
13
+ ```
14
+
15
+ ---
16
+
17
+ See [Docs > Package manager](https://bun.sh/docs/cli/install) for complete documentation of Bun's package manager.
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: Add a tarball dependency
3
+ ---
4
+
5
+ Bun's package manager can install any publicly available tarball URL as a dependency of your project.
6
+
7
+ ```sh
8
+ $ bun add zod@https://registry.npmjs.org/zod/-/zod-3.21.4.tgz
9
+ ```
10
+
11
+ ---
12
+
13
+ Running this command will download, extract, and install the tarball to your project's `node_modules` directory. It will also add the following line to your `package.json`:
14
+
15
+ ```json-diff#package.json
16
+ {
17
+ "dependencies": {
18
+ + "zod": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz"
19
+ }
20
+ }
21
+ ```
22
+
23
+ ---
24
+
25
+ The package `"zod"` can now be imported as usual.
26
+
27
+ ```ts
28
+ import { z } from "zod";
29
+ ```
30
+
31
+ ---
32
+
33
+ See [Docs > Package manager](https://bun.sh/docs/cli/install) for complete documentation of Bun's package manager.
@@ -0,0 +1,42 @@
1
+ ---
2
+ name: Add a dependency
3
+ ---
4
+
5
+ To add an npm package as a dependency, use `bun add`.
6
+
7
+ ```sh
8
+ $ bun add zod
9
+ ```
10
+
11
+ ---
12
+
13
+ This will add the package to `dependencies` in `package.json`. By default, the `^` range specifier will be used, to indicate that any future minor or patch versions are acceptable.
14
+
15
+ ```json-diff
16
+ {
17
+ "dependencies": {
18
+ + "zod": "^3.0.0"
19
+ }
20
+ }
21
+ ```
22
+
23
+ ---
24
+
25
+ To "pin" to the `latest` version of the package, use `--exact`. This will add the package to `dependencies` without the `^`, pinning your project to the exact version you installed.
26
+
27
+ ```sh
28
+ $ bun add zod --exact
29
+ ```
30
+
31
+ ---
32
+
33
+ To specify an exact version or a tag:
34
+
35
+ ```sh
36
+ $ bun add zod@3.0.0
37
+ $ bun add zod@next
38
+ ```
39
+
40
+ ---
41
+
42
+ See [Docs > Package manager](https://bun.sh/docs/cli/install) for complete documentation of Bun's package manager.
@@ -0,0 +1,73 @@
1
+ ---
2
+ name: Using bun install with an Azure Artifacts npm registry
3
+ ---
4
+
5
+ {% callout %}
6
+ In [Azure Artifact's](https://learn.microsoft.com/en-us/azure/devops/artifacts/npm/npmrc?view=azure-devops&tabs=windows%2Cclassic) instructions for `.npmrc`, they say to base64 encode the password. Do not do this for `bun install`. Bun will automatically base64 encode the password for you if needed.
7
+ {% /callout %}
8
+
9
+ [Azure Artifacts](https://azure.microsoft.com/en-us/products/devops/artifacts) is a package management system for Azure DevOps. It allows you to host your own private npm registry, npm packages, and other types of packages as well.
10
+
11
+ ---
12
+
13
+ ### Configure with bunfig.toml
14
+
15
+ ---
16
+
17
+ To use it with `bun install`, add a `bunfig.toml` file to your project with the following contents. Make sure to replace `my-azure-artifacts-user` with your Azure Artifacts username, such as `jarred1234`.
18
+
19
+ ```toml#bunfig.toml
20
+ [install.registry]
21
+ url = "https://pkgs.dev.azure.com/my-azure-artifacts-user/_packaging/my-azure-artifacts-user/npm/registry"
22
+ username = "my-azure-artifacts-user"
23
+ # Bun v1.0.3+ supports using an environment variable here
24
+ password = "$NPM_PASSWORD"
25
+ ```
26
+
27
+ ---
28
+
29
+ Then assign your Azure Personal Access Token to the `NPM_PASSWORD` environment variable. Bun [automatically reads](https://bun.sh/docs/runtime/env) `.env` files, so create a file called `.env` in your project root. There is no need to base-64 encode this token! Bun will do this for you.
30
+
31
+ ```txt#.env
32
+ NPM_PASSWORD=<paste token here>
33
+ ```
34
+
35
+ ---
36
+
37
+ ### Configure with environment variables
38
+
39
+ ---
40
+
41
+ To configure Azure Artifacts without `bunfig.toml`, you can set the `NPM_CONFIG_REGISTRY` environment variable. The URL should include `:username` and `:_password` as query parameters. Replace `<USERNAME>` and `<PASSWORD>` with the apprropriate values.
42
+
43
+ ```bash#shell
44
+ NPM_CONFIG_REGISTRY=https://pkgs.dev.azure.com/my-azure-artifacts-user/_packaging/my-azure-artifacts-user/npm/registry/:username=<USERNAME>:_password=<PASSWORD>
45
+ ```
46
+
47
+ ---
48
+
49
+ ### Don't base64 encode the password
50
+
51
+ ---
52
+
53
+ In [Azure Artifact's](https://learn.microsoft.com/en-us/azure/devops/artifacts/npm/npmrc?view=azure-devops&tabs=windows%2Cclassic) instructions for `.npmrc`, they say to base64 encode the password. Do not do this for `bun install`. Bun will automatically base64 encode the password for you if needed.
54
+
55
+ {% callout %}
56
+ **Tip** — If it ends with `==`, it probably is base64 encoded.
57
+ {% /callout %}
58
+
59
+ ---
60
+
61
+ To decode a base64-encoded password, open your browser console and run:
62
+
63
+ ```js
64
+ atob("<base64-encoded password>");
65
+ ```
66
+
67
+ ---
68
+
69
+ Alternatively, use the `base64` command line tool, but doing so means it may be saved in your terminal history which is not recommended:
70
+
71
+ ```bash
72
+ echo "base64-encoded-password" | base64 --decode
73
+ ```
@@ -0,0 +1,41 @@
1
+ ---
2
+ name: Install dependencies with Bun in GitHub Actions
3
+ ---
4
+
5
+ Use the official [`setup-bun`](https://github.com/oven-sh/setup-bun) GitHub Action to install `bun` in your GitHub Actions runner.
6
+
7
+ ```yaml-diff#workflow.yml
8
+ name: my-workflow
9
+ jobs:
10
+ my-job:
11
+ name: my-job
12
+ runs-on: ubuntu-latest
13
+ steps:
14
+ # ...
15
+ - uses: actions/checkout@v4
16
+ + - uses: oven-sh/setup-bun@v1
17
+
18
+ # run any `bun` or `bunx` command
19
+ + - run: bun install
20
+ ```
21
+
22
+ ---
23
+
24
+ To specify a version of Bun to install:
25
+
26
+ ```yaml-diff#workflow.yml
27
+ name: my-workflow
28
+ jobs:
29
+ my-job:
30
+ name: my-job
31
+ runs-on: ubuntu-latest
32
+ steps:
33
+ # ...
34
+ - uses: oven-sh/setup-bun@v1
35
+ + with:
36
+ + version: 0.7.0 # or "canary"
37
+ ```
38
+
39
+ ---
40
+
41
+ Refer to the [README.md](https://github.com/oven-sh/setup-bun) for complete documentation of the `setup-bun` GitHub Action.
@@ -0,0 +1,30 @@
1
+ ---
2
+ name: Override the default npm registry for bun install
3
+ ---
4
+
5
+ The default registry is `registry.npmjs.org`. This can be globally configured in `bunfig.toml`.
6
+
7
+ ```toml#bunfig.toml
8
+ [install]
9
+ # set default registry as a string
10
+ registry = "https://registry.npmjs.org"
11
+
12
+ # if needed, set a token
13
+ registry = { url = "https://registry.npmjs.org", token = "123456" }
14
+
15
+ # if needed, set a username/password
16
+ registry = "https://username:password@registry.npmjs.org"
17
+ ```
18
+
19
+ ---
20
+
21
+ Your `bunfig.toml` can reference environment variables. Bun automatically loads environment variables from `.env.local`, `.env.[NODE_ENV]`, and `.env`. See [Docs > Environment variables](https://bun.sh/docs/runtime/env) for more information.
22
+
23
+ ```toml#bunfig.toml
24
+ [install]
25
+ registry = { url = "https://registry.npmjs.org", token = "$npm_token" }
26
+ ```
27
+
28
+ ---
29
+
30
+ See [Docs > Package manager](https://bun.sh/docs/cli/install) for complete documentation of Bun's package manager.
@@ -0,0 +1,214 @@
1
+ ---
2
+ name: Migrate from npm install to bun install
3
+ ---
4
+
5
+ `bun install` is a Node.js compatible npm client designed to be an incredibly fast successor to npm.
6
+
7
+ We've put a lot of work into making sure that the migration path from `npm install` to `bun install` is as easy as running `bun install` instead of `npm install`.
8
+
9
+ - **Designed for Node.js & Bun**: `bun install` installs a Node.js compatible `node_modules` folder. You can use it in place of `npm install` for Node.js projects without any code changes and without using Bun's runtime.
10
+ - **Automatically converts `package-lock.json`** to bun's `bun.lockb` lockfile format, preserving your existing resolved dependency versions without any manual work on your part. You can secretly use `bun install` in place of `npm install` at work without anyone noticing.
11
+ - **`.npmrc` compatible**: bun install reads npm registry configuration from npm's `.npmrc`, so you can use the same configuration for both npm and Bun.
12
+ - **Hardlinks**: On Windows and Linux, `bun install` uses hardlinks to conserve disk space and install times.
13
+
14
+ ```bash
15
+ # It only takes one command to migrate
16
+ $ bun i
17
+
18
+ # To add dependencies:
19
+ $ bun i @types/bun
20
+
21
+ # To add devDependencies:
22
+ $ bun i -d @types/bun
23
+
24
+ # To remove a dependency:
25
+ $ bun rm @types/bun
26
+ ```
27
+
28
+ ---
29
+
30
+ ## Run package.json scripts faster
31
+
32
+ Run scripts from package.json, executables from `node_modules/.bin` (sort of like `npx`), and JavaScript/TypeScript files (just like `node`) - all from a single simple command.
33
+
34
+ | NPM | Bun |
35
+ | ------------------ | ---------------- |
36
+ | `npm run <script>` | `bun <script>` |
37
+ | `npm exec <bin>` | `bun <bin>` |
38
+ | `node <file>` | `bun <file>` |
39
+ | `npx <package>` | `bunx <package>` |
40
+
41
+ When you use `bun run <executable>`, it will choose the locally-installed executable
42
+
43
+ ```sh
44
+ # Run a package.json script:
45
+ $ bun my-script
46
+ $ bun run my-script
47
+
48
+ # Run an executable in node_modules/.bin:
49
+ $ bun my-executable # such as tsc, esbuild, etc.
50
+ $ bun run my-executable
51
+
52
+ # Run a JavaScript/TypeScript file:
53
+ $ bun ./index.ts
54
+ ```
55
+
56
+ ---
57
+
58
+ ## Workspaces? Yes.
59
+
60
+ `bun install` supports workspaces similarly to npm, with more features.
61
+
62
+ In package.json, you can set `"workspaces"` to an array of relative paths.
63
+
64
+ ```json#package.json
65
+ {
66
+ "name": "my-app",
67
+ "workspaces": ["packages/*", "apps/*"]
68
+ }
69
+ ```
70
+
71
+ ---
72
+
73
+ ### Filter scripts by workspace name
74
+
75
+ In Bun, the `--filter` flag accepts a glob pattern, and will run the command concurrently for all workspace packages with a `name` that matches the pattern, respecting dependency order.
76
+
77
+ ```sh
78
+ $ bun --filter 'lib-*' my-script
79
+ # instead of:
80
+ # npm run --workspace lib-foo --workspace lib-bar my-script
81
+ ```
82
+
83
+ ---
84
+
85
+ ## Update dependencies
86
+
87
+ To update a dependency, you can use `bun update <package>`. This will update the dependency to the latest version that satisfies the semver range specified in package.json.
88
+
89
+ ```sh
90
+ # Update a single dependency
91
+ $ bun update @types/bun
92
+
93
+ # Update all dependencies
94
+ $ bun update
95
+
96
+ # Ignore semver, update to the latest version
97
+ $ bun update @types/bun --latest
98
+
99
+ # Update a dependency to a specific version
100
+ $ bun update @types/bun@1.1.10
101
+
102
+ # Update all dependencies to the latest versions
103
+ $ bun update --latest
104
+ ```
105
+
106
+ ---
107
+
108
+ ### View outdated dependencies
109
+
110
+ To view outdated dependencies, run `bun outdated`. This is like `npm outdated` but with more compact output.
111
+
112
+ ```sh
113
+ $ bun outdated
114
+ ┌────────────────────────────────────────┬─────────┬────────┬────────┐
115
+ │ Package │ Current │ Update │ Latest │
116
+ ├────────────────────────────────────────┼─────────┼────────┼────────┤
117
+ │ @types/bun (dev) │ 1.1.6 │ 1.1.10 │ 1.1.10 │
118
+ ├────────────────────────────────────────┼─────────┼────────┼────────┤
119
+ │ @types/react (dev) │ 18.3.3 │ 18.3.8 │ 18.3.8 │
120
+ ├────────────────────────────────────────┼─────────┼────────┼────────┤
121
+ │ @typescript-eslint/eslint-plugin (dev) │ 7.16.1 │ 7.18.0 │ 8.6.0 │
122
+ ├────────────────────────────────────────┼─────────┼────────┼────────┤
123
+ │ @typescript-eslint/parser (dev) │ 7.16.1 │ 7.18.0 │ 8.6.0 │
124
+ ├────────────────────────────────────────┼─────────┼────────┼────────┤
125
+ │ @vscode/debugadapter (dev) │ 1.66.0 │ 1.67.0 │ 1.67.0 │
126
+ ├────────────────────────────────────────┼─────────┼────────┼────────┤
127
+ │ esbuild (dev) │ 0.21.5 │ 0.21.5 │ 0.24.0 │
128
+ ├────────────────────────────────────────┼─────────┼────────┼────────┤
129
+ │ eslint (dev) │ 9.7.0 │ 9.11.0 │ 9.11.0 │
130
+ ├────────────────────────────────────────┼─────────┼────────┼────────┤
131
+ │ mitata (dev) │ 0.1.11 │ 0.1.14 │ 1.0.2 │
132
+ ├────────────────────────────────────────┼─────────┼────────┼────────┤
133
+ │ prettier-plugin-organize-imports (dev) │ 4.0.0 │ 4.1.0 │ 4.1.0 │
134
+ ├────────────────────────────────────────┼─────────┼────────┼────────┤
135
+ │ source-map-js (dev) │ 1.2.0 │ 1.2.1 │ 1.2.1 │
136
+ ├────────────────────────────────────────┼─────────┼────────┼────────┤
137
+ │ typescript (dev) │ 5.5.3 │ 5.6.2 │ 5.6.2 │
138
+ └────────────────────────────────────────┴─────────┴────────┴────────┘
139
+ ```
140
+
141
+ ---
142
+
143
+ ## List installed packages
144
+
145
+ To list installed packages, you can use `bun pm ls`. This will list all the packages that are installed in the `node_modules` folder using Bun's lockfile as the source of truth. You can pass the `-a` flag to list all installed packages, including transitive dependencies.
146
+
147
+ ```sh
148
+ # List top-level installed packages:
149
+ $ bun pm ls
150
+ my-pkg node_modules (781)
151
+ ├── @types/node@20.16.5
152
+ ├── @types/react@18.3.8
153
+ ├── @types/react-dom@18.3.0
154
+ ├── eslint@8.57.1
155
+ ├── eslint-config-next@14.2.8
156
+
157
+ # List all installed packages:
158
+ $ bun pm ls -a
159
+ my-pkg node_modules
160
+ ├── @alloc/quick-lru@5.2.0
161
+ ├── @isaacs/cliui@8.0.2
162
+ │ └── strip-ansi@7.1.0
163
+ │ └── ansi-regex@6.1.0
164
+ ├── @jridgewell/gen-mapping@0.3.5
165
+ ├── @jridgewell/resolve-uri@3.1.2
166
+ ...
167
+ ```
168
+
169
+ ---
170
+
171
+ ## Create a package tarball
172
+
173
+ To create a package tarball, you can use `bun pm pack`. This will create a tarball of the package in the current directory.
174
+
175
+ ```sh
176
+ # Create a tarball
177
+ $ bun pm pack
178
+
179
+ Total files: 46
180
+ Shasum: 2ee19b6f0c6b001358449ca0eadead703f326216
181
+ Integrity: sha512-ZV0lzWTEkGAMz[...]Gl4f8lA9sl97g==
182
+ Unpacked size: 0.41MB
183
+ Packed size: 117.50KB
184
+ ```
185
+
186
+ ---
187
+
188
+ ## Shebang
189
+
190
+ If the package references `node` in the `#!/usr/bin/env node` shebang, `bun run` will by default respect it and use the system's `node` executable. You can force it to use Bun's `node` by passing `--bun` to `bun run`.
191
+
192
+ When you pass `--bun` to `bun run`, we create a symlink to the locally-installed Bun executable named `"node"` in a temporary directory and add that to your `PATH` for the duration of the script's execution.
193
+
194
+ ```sh
195
+ # Force using Bun's runtime instead of node
196
+ $ bun --bun my-script
197
+
198
+ # This also works:
199
+ $ bun run --bun my-script
200
+ ```
201
+
202
+ ---
203
+
204
+ ## Global installs
205
+
206
+ You can install packages globally using `bun i -g <package>`. This will install into a `.bun/install/global/node_modules` folder inside your home directory by default.
207
+
208
+ ```sh
209
+ # Install a package globally
210
+ $ bun i -g eslint
211
+
212
+ # Run a globally-installed package without the `bun run` prefix
213
+ $ eslint --init
214
+ ```
@@ -0,0 +1,38 @@
1
+ ---
2
+ name: Configure git to diff Bun's lockb lockfile
3
+ ---
4
+
5
+ To teach `git` how to generate a human-readable diff of Bun's binary lockfile format (`.lockb`), add the following to your local or global `.gitattributes` file:
6
+
7
+ ```js
8
+ *.lockb binary diff=lockb
9
+ ```
10
+
11
+ ---
12
+
13
+ Then add the following to you local git config with:
14
+
15
+ ```sh
16
+ $ git config diff.lockb.textconv bun
17
+ $ git config diff.lockb.binary true
18
+ ```
19
+
20
+ ---
21
+
22
+ To globally configure git to diff Bun's lockfile, add the following to your global git config with:
23
+
24
+ ```sh
25
+ $ git config --global diff.lockb.textconv bun
26
+ $ git config --global diff.lockb.binary true
27
+ ```
28
+
29
+ ---
30
+
31
+ ## How this works
32
+
33
+ Why this works:
34
+
35
+ - `textconv` tells git to run bun on the file before diffing
36
+ - `binary` tells git to treat the file as binary (so it doesn't try to diff it line-by-line)
37
+
38
+ In Bun, you can execute Bun's lockfile (`bun ./bun.lockb`) to generate a human-readable version of the lockfile and `git diff` can then use that to generate a human-readable diff.