bun-types 1.3.2-canary.20251105T140650 → 1.3.2

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 (370) hide show
  1. package/bun.d.ts +102 -6
  2. package/docs/README.md +28 -0
  3. package/docs/bundler/bytecode.mdx +465 -0
  4. package/docs/bundler/{css.md → css.mdx} +97 -101
  5. package/docs/bundler/esbuild.mdx +253 -0
  6. package/docs/bundler/{executables.md → executables.mdx} +130 -221
  7. package/docs/bundler/fullstack.mdx +1064 -0
  8. package/docs/bundler/{hmr.md → hot-reloading.mdx} +74 -79
  9. package/docs/bundler/{html.md → html-static.mdx} +148 -111
  10. package/docs/bundler/index.mdx +1499 -0
  11. package/docs/bundler/loaders.mdx +356 -0
  12. package/docs/bundler/{macros.md → macros.mdx} +83 -84
  13. package/docs/bundler/minifier.mdx +1306 -0
  14. package/docs/bundler/plugins.mdx +411 -0
  15. package/docs/feedback.mdx +85 -0
  16. package/docs/guides/binary/{arraybuffer-to-array.md → arraybuffer-to-array.mdx} +3 -1
  17. package/docs/guides/binary/{arraybuffer-to-blob.md → arraybuffer-to-blob.mdx} +3 -1
  18. package/docs/guides/binary/{arraybuffer-to-buffer.md → arraybuffer-to-buffer.mdx} +3 -1
  19. package/docs/guides/binary/{arraybuffer-to-string.md → arraybuffer-to-string.mdx} +3 -1
  20. package/docs/guides/binary/{arraybuffer-to-typedarray.md → arraybuffer-to-typedarray.mdx} +3 -1
  21. package/docs/guides/binary/{blob-to-arraybuffer.md → blob-to-arraybuffer.mdx} +3 -1
  22. package/docs/guides/binary/{blob-to-dataview.md → blob-to-dataview.mdx} +3 -1
  23. package/docs/guides/binary/{blob-to-stream.md → blob-to-stream.mdx} +3 -1
  24. package/docs/guides/binary/{blob-to-string.md → blob-to-string.mdx} +3 -1
  25. package/docs/guides/binary/{blob-to-typedarray.md → blob-to-typedarray.mdx} +3 -1
  26. package/docs/guides/binary/{buffer-to-arraybuffer.md → buffer-to-arraybuffer.mdx} +3 -1
  27. package/docs/guides/binary/{buffer-to-blob.md → buffer-to-blob.mdx} +3 -1
  28. package/docs/guides/binary/{buffer-to-readablestream.md → buffer-to-readablestream.mdx} +3 -1
  29. package/docs/guides/binary/{buffer-to-string.md → buffer-to-string.mdx} +3 -1
  30. package/docs/guides/binary/{buffer-to-typedarray.md → buffer-to-typedarray.mdx} +3 -1
  31. package/docs/guides/binary/{dataview-to-string.md → dataview-to-string.mdx} +3 -1
  32. package/docs/guides/binary/{typedarray-to-arraybuffer.md → typedarray-to-arraybuffer.mdx} +3 -1
  33. package/docs/guides/binary/{typedarray-to-blob.md → typedarray-to-blob.mdx} +3 -1
  34. package/docs/guides/binary/{typedarray-to-buffer.md → typedarray-to-buffer.mdx} +3 -1
  35. package/docs/guides/binary/{typedarray-to-dataview.md → typedarray-to-dataview.mdx} +3 -1
  36. package/docs/guides/binary/{typedarray-to-readablestream.md → typedarray-to-readablestream.mdx} +3 -1
  37. package/docs/guides/binary/{typedarray-to-string.md → typedarray-to-string.mdx} +3 -1
  38. package/docs/guides/deployment/aws-lambda.mdx +204 -0
  39. package/docs/guides/deployment/digital-ocean.mdx +161 -0
  40. package/docs/guides/deployment/google-cloud-run.mdx +197 -0
  41. package/docs/guides/deployment/{railway.md → railway.mdx} +42 -54
  42. package/docs/guides/deployment/render.mdx +82 -0
  43. package/docs/guides/deployment/vercel.mdx +99 -0
  44. package/docs/guides/ecosystem/{astro.md → astro.mdx} +16 -6
  45. package/docs/guides/ecosystem/{discordjs.md → discordjs.mdx} +21 -18
  46. package/docs/guides/ecosystem/{docker.md → docker.mdx} +25 -14
  47. package/docs/guides/ecosystem/{drizzle.md → drizzle.mdx} +32 -22
  48. package/docs/guides/ecosystem/{edgedb.md → edgedb.mdx} +63 -34
  49. package/docs/guides/ecosystem/{elysia.md → elysia.mdx} +11 -11
  50. package/docs/guides/ecosystem/{express.md → express.mdx} +12 -9
  51. package/docs/guides/ecosystem/{hono.md → hono.mdx} +16 -8
  52. package/docs/guides/ecosystem/{mongoose.md → mongoose.mdx} +26 -21
  53. package/docs/guides/ecosystem/{neon-drizzle.md → neon-drizzle.mdx} +49 -35
  54. package/docs/guides/ecosystem/{neon-serverless-postgres.md → neon-serverless-postgres.mdx} +16 -11
  55. package/docs/guides/ecosystem/{nextjs.md → nextjs.mdx} +18 -10
  56. package/docs/guides/ecosystem/{nuxt.md → nuxt.mdx} +45 -11
  57. package/docs/guides/ecosystem/{pm2.md → pm2.mdx} +7 -9
  58. package/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
  59. package/docs/guides/ecosystem/prisma.mdx +164 -0
  60. package/docs/guides/ecosystem/{qwik.md → qwik.mdx} +18 -11
  61. package/docs/guides/ecosystem/{react.md → react.mdx} +9 -7
  62. package/docs/guides/ecosystem/{remix.md → remix.mdx} +45 -26
  63. package/docs/guides/ecosystem/{sentry.md → sentry.mdx} +7 -5
  64. package/docs/guides/ecosystem/{solidstart.md → solidstart.mdx} +21 -13
  65. package/docs/guides/ecosystem/{ssr-react.md → ssr-react.mdx} +9 -11
  66. package/docs/guides/ecosystem/{stric.md → stric.mdx} +16 -17
  67. package/docs/guides/ecosystem/{sveltekit.md → sveltekit.mdx} +42 -29
  68. package/docs/guides/ecosystem/{systemd.md → systemd.mdx} +27 -26
  69. package/docs/guides/ecosystem/upstash.mdx +87 -0
  70. package/docs/guides/ecosystem/{vite.md → vite.mdx} +20 -14
  71. package/docs/guides/html-rewriter/{extract-links.md → extract-links.mdx} +11 -7
  72. package/docs/guides/html-rewriter/{extract-social-meta.md → extract-social-meta.mdx} +6 -2
  73. package/docs/guides/http/{cluster.md → cluster.mdx} +10 -7
  74. package/docs/guides/http/{fetch-unix.md → fetch-unix.mdx} +5 -3
  75. package/docs/guides/http/{fetch.md → fetch.mdx} +5 -3
  76. package/docs/guides/http/{file-uploads.md → file-uploads.mdx} +18 -15
  77. package/docs/guides/http/{hot.md → hot.mdx} +9 -7
  78. package/docs/guides/http/{proxy.md → proxy.mdx} +7 -5
  79. package/docs/guides/http/{server.md → server.mdx} +4 -2
  80. package/docs/guides/http/{simple.md → simple.mdx} +4 -2
  81. package/docs/guides/http/{stream-file.md → stream-file.mdx} +6 -4
  82. package/docs/guides/http/{stream-iterator.md → stream-iterator.mdx} +5 -3
  83. package/docs/guides/http/{stream-node-streams-in-bun.md → stream-node-streams-in-bun.mdx} +4 -2
  84. package/docs/guides/http/{tls.md → tls.mdx} +5 -3
  85. package/docs/guides/index.mdx +10 -0
  86. package/docs/guides/install/{add-dev.md → add-dev.mdx} +8 -6
  87. package/docs/guides/install/add-git.mdx +38 -0
  88. package/docs/guides/install/{add-optional.md → add-optional.mdx} +7 -5
  89. package/docs/guides/install/{add-peer.md → add-peer.mdx} +13 -11
  90. package/docs/guides/install/{add-tarball.md → add-tarball.mdx} +7 -5
  91. package/docs/guides/install/{add.md → add.mdx} +12 -10
  92. package/docs/guides/install/{azure-artifacts.md → azure-artifacts.mdx} +15 -12
  93. package/docs/guides/{runtime/cicd.md → install/cicd.mdx} +13 -13
  94. package/docs/guides/install/{custom-registry.md → custom-registry.mdx} +6 -4
  95. package/docs/guides/install/{from-npm-install-to-bun-install.md → from-npm-install-to-bun-install.mdx} +50 -34
  96. package/docs/guides/install/{git-diff-bun-lockfile.md → git-diff-bun-lockfile.mdx} +14 -11
  97. package/docs/guides/install/{jfrog-artifactory.md → jfrog-artifactory.mdx} +4 -4
  98. package/docs/guides/install/{npm-alias.md → npm-alias.mdx} +6 -4
  99. package/docs/guides/install/{registry-scope.md → registry-scope.mdx} +6 -4
  100. package/docs/guides/install/{trusted.md → trusted.mdx} +22 -18
  101. package/docs/guides/install/{workspaces.md → workspaces.mdx} +13 -13
  102. package/docs/guides/install/{yarnlock.md → yarnlock.mdx} +15 -9
  103. package/docs/guides/process/{argv.md → argv.mdx} +17 -9
  104. package/docs/guides/process/{ctrl-c.md → ctrl-c.mdx} +4 -2
  105. package/docs/guides/process/{ipc.md → ipc.mdx} +13 -10
  106. package/docs/guides/process/{nanoseconds.md → nanoseconds.mdx} +3 -1
  107. package/docs/guides/process/{os-signals.md → os-signals.mdx} +3 -1
  108. package/docs/guides/process/{spawn-stderr.md → spawn-stderr.mdx} +4 -1
  109. package/docs/guides/process/{spawn-stdout.md → spawn-stdout.mdx} +3 -1
  110. package/docs/guides/process/{spawn.md → spawn.mdx} +3 -1
  111. package/docs/guides/process/{stdin.md → stdin.mdx} +15 -7
  112. package/docs/guides/read-file/{arraybuffer.md → arraybuffer.mdx} +5 -3
  113. package/docs/guides/read-file/{buffer.md → buffer.mdx} +4 -2
  114. package/docs/guides/read-file/{exists.md → exists.mdx} +4 -2
  115. package/docs/guides/read-file/{json.md → json.mdx} +4 -2
  116. package/docs/guides/read-file/{mime.md → mime.mdx} +3 -1
  117. package/docs/guides/read-file/{stream.md → stream.mdx} +3 -1
  118. package/docs/guides/read-file/{string.md → string.mdx} +3 -1
  119. package/docs/guides/read-file/{uint8array.md → uint8array.mdx} +3 -1
  120. package/docs/guides/read-file/{watch.md → watch.mdx} +6 -8
  121. package/docs/guides/runtime/{build-time-constants.md → build-time-constants.mdx} +24 -22
  122. package/docs/guides/{install/cicd.md → runtime/cicd.mdx} +11 -7
  123. package/docs/guides/runtime/{codesign-macos-executable.md → codesign-macos-executable.mdx} +14 -9
  124. package/docs/guides/runtime/{define-constant.md → define-constant.mdx} +20 -16
  125. package/docs/guides/runtime/{delete-directory.md → delete-directory.mdx} +5 -3
  126. package/docs/guides/runtime/{delete-file.md → delete-file.mdx} +4 -2
  127. package/docs/guides/runtime/{heap-snapshot.md → heap-snapshot.mdx} +5 -3
  128. package/docs/guides/runtime/{import-html.md → import-html.mdx} +4 -2
  129. package/docs/guides/runtime/{import-json.md → import-json.mdx} +6 -4
  130. package/docs/guides/runtime/{import-toml.md → import-toml.mdx} +5 -3
  131. package/docs/guides/runtime/{import-yaml.md → import-yaml.mdx} +9 -7
  132. package/docs/guides/runtime/{read-env.md → read-env.mdx} +10 -5
  133. package/docs/guides/runtime/{set-env.md → set-env.mdx} +14 -10
  134. package/docs/guides/runtime/{shell.md → shell.mdx} +6 -4
  135. package/docs/guides/runtime/{timezone.md → timezone.mdx} +10 -7
  136. package/docs/guides/runtime/{tsconfig-paths.md → tsconfig-paths.mdx} +5 -3
  137. package/docs/guides/runtime/{typescript.md → typescript.mdx} +8 -6
  138. package/docs/guides/runtime/{vscode-debugger.md → vscode-debugger.mdx} +12 -11
  139. package/docs/guides/runtime/{web-debugger.md → web-debugger.mdx} +39 -18
  140. package/docs/guides/streams/{node-readable-to-arraybuffer.md → node-readable-to-arraybuffer.mdx} +3 -1
  141. package/docs/guides/streams/{node-readable-to-blob.md → node-readable-to-blob.mdx} +3 -1
  142. package/docs/guides/streams/{node-readable-to-json.md → node-readable-to-json.mdx} +3 -1
  143. package/docs/guides/streams/{node-readable-to-string.md → node-readable-to-string.mdx} +3 -1
  144. package/docs/guides/streams/{node-readable-to-uint8array.md → node-readable-to-uint8array.mdx} +3 -1
  145. package/docs/guides/streams/{to-array.md → to-array.mdx} +3 -1
  146. package/docs/guides/streams/{to-arraybuffer.md → to-arraybuffer.mdx} +3 -1
  147. package/docs/guides/streams/{to-blob.md → to-blob.mdx} +3 -1
  148. package/docs/guides/streams/{to-buffer.md → to-buffer.mdx} +3 -1
  149. package/docs/guides/streams/{to-json.md → to-json.mdx} +4 -2
  150. package/docs/guides/streams/{to-string.md → to-string.mdx} +3 -1
  151. package/docs/guides/streams/{to-typedarray.md → to-typedarray.mdx} +3 -1
  152. package/docs/guides/test/{bail.md → bail.mdx} +7 -5
  153. package/docs/guides/test/{coverage-threshold.md → coverage-threshold.mdx} +14 -7
  154. package/docs/guides/test/{coverage.md → coverage.mdx} +9 -4
  155. package/docs/guides/test/{happy-dom.md → happy-dom.mdx} +13 -8
  156. package/docs/guides/test/{migrate-from-jest.md → migrate-from-jest.mdx} +19 -37
  157. package/docs/guides/test/{mock-clock.md → mock-clock.mdx} +3 -1
  158. package/docs/guides/test/{mock-functions.md → mock-functions.mdx} +7 -5
  159. package/docs/guides/test/{rerun-each.md → rerun-each.mdx} +5 -3
  160. package/docs/guides/test/{run-tests.md → run-tests.mdx} +16 -11
  161. package/docs/guides/test/{skip-tests.md → skip-tests.mdx} +8 -4
  162. package/docs/guides/test/{snapshot.md → snapshot.mdx} +20 -13
  163. package/docs/guides/test/spy-on.mdx +49 -0
  164. package/docs/guides/test/{svelte-test.md → svelte-test.mdx} +16 -23
  165. package/docs/guides/test/{testing-library.md → testing-library.mdx} +18 -17
  166. package/docs/guides/test/{timeout.md → timeout.mdx} +5 -3
  167. package/docs/guides/test/{todo-tests.md → todo-tests.mdx} +13 -6
  168. package/docs/guides/test/{update-snapshots.md → update-snapshots.mdx} +9 -6
  169. package/docs/guides/test/{watch-mode.md → watch-mode.mdx} +9 -4
  170. package/docs/guides/util/{base64.md → base64.mdx} +3 -1
  171. package/docs/guides/util/{deep-equals.md → deep-equals.mdx} +5 -3
  172. package/docs/guides/util/{deflate.md → deflate.mdx} +3 -1
  173. package/docs/guides/util/{detect-bun.md → detect-bun.mdx} +3 -1
  174. package/docs/guides/util/{entrypoint.md → entrypoint.mdx} +4 -2
  175. package/docs/guides/util/{escape-html.md → escape-html.mdx} +3 -1
  176. package/docs/guides/util/{file-url-to-path.md → file-url-to-path.mdx} +3 -1
  177. package/docs/guides/util/{gzip.md → gzip.mdx} +3 -1
  178. package/docs/guides/util/{hash-a-password.md → hash-a-password.mdx} +3 -1
  179. package/docs/guides/util/{import-meta-dir.md → import-meta-dir.mdx} +4 -2
  180. package/docs/guides/util/{import-meta-file.md → import-meta-file.mdx} +4 -2
  181. package/docs/guides/util/{import-meta-path.md → import-meta-path.mdx} +4 -2
  182. package/docs/guides/util/{javascript-uuid.md → javascript-uuid.mdx} +3 -1
  183. package/docs/guides/util/{main.md → main.mdx} +19 -8
  184. package/docs/guides/util/{path-to-file-url.md → path-to-file-url.mdx} +3 -1
  185. package/docs/guides/util/{sleep.md → sleep.mdx} +3 -1
  186. package/docs/guides/util/{version.md → version.mdx} +6 -4
  187. package/docs/guides/util/{which-path-to-executable-bin.md → which-path-to-executable-bin.mdx} +4 -2
  188. package/docs/guides/websocket/{compression.md → compression.mdx} +5 -3
  189. package/docs/guides/websocket/{context.md → context.mdx} +9 -12
  190. package/docs/guides/websocket/{pubsub.md → pubsub.mdx} +5 -6
  191. package/docs/guides/websocket/{simple.md → simple.mdx} +5 -3
  192. package/docs/guides/write-file/{append.md → append.mdx} +3 -1
  193. package/docs/guides/write-file/{basic.md → basic.mdx} +3 -1
  194. package/docs/guides/write-file/{blob.md → blob.mdx} +3 -1
  195. package/docs/guides/write-file/{cat.md → cat.mdx} +4 -2
  196. package/docs/guides/write-file/{file-cp.md → file-cp.mdx} +3 -1
  197. package/docs/guides/write-file/{filesink.md → filesink.mdx} +3 -1
  198. package/docs/guides/write-file/{response.md → response.mdx} +3 -1
  199. package/docs/guides/write-file/{stdout.md → stdout.mdx} +3 -1
  200. package/docs/guides/write-file/{stream.md → stream.mdx} +3 -1
  201. package/docs/guides/write-file/{unlink.md → unlink.mdx} +3 -1
  202. package/docs/{index.md → index.mdx} +97 -41
  203. package/docs/installation.mdx +365 -0
  204. package/docs/{cli/bunx.md → pm/bunx.mdx} +25 -31
  205. package/docs/{install/catalogs.md → pm/catalogs.mdx} +18 -24
  206. package/docs/{cli/add.md → pm/cli/add.mdx} +61 -55
  207. package/docs/{install/audit.md → pm/cli/audit.mdx} +11 -8
  208. package/docs/{cli/install.md → pm/cli/install.mdx} +208 -81
  209. package/docs/{cli/link.md → pm/cli/link.mdx} +27 -19
  210. package/docs/{cli/outdated.md → pm/cli/outdated.mdx} +119 -12
  211. package/docs/{install/patch.md → pm/cli/patch.mdx} +25 -15
  212. package/docs/{cli/pm.md → pm/cli/pm.mdx} +96 -62
  213. package/docs/{cli/publish.md → pm/cli/publish.mdx} +38 -35
  214. package/docs/pm/cli/remove.mdx +16 -0
  215. package/docs/{cli/update.md → pm/cli/update.mdx} +26 -15
  216. package/docs/{cli/why.md → pm/cli/why.mdx} +27 -10
  217. package/docs/{cli/filter.md → pm/filter.mdx} +26 -14
  218. package/docs/{install/cache.md → pm/global-cache.mdx} +25 -12
  219. package/docs/{install/isolated.md → pm/isolated-installs.mdx} +32 -24
  220. package/docs/{install/lifecycle.md → pm/lifecycle.mdx} +20 -9
  221. package/docs/{install/lockfile.md → pm/lockfile.mdx} +18 -12
  222. package/docs/{install/npmrc.md → pm/npmrc.mdx} +30 -24
  223. package/docs/{install/overrides.md → pm/overrides.mdx} +47 -37
  224. package/docs/{install/registries.md → pm/scopes-registries.mdx} +8 -3
  225. package/docs/{install/security-scanner-api.md → pm/security-scanner-api.mdx} +22 -8
  226. package/docs/{install/workspaces.md → pm/workspaces.mdx} +17 -22
  227. package/docs/project/{benchmarking.md → benchmarking.mdx} +26 -11
  228. package/docs/project/{bindgen.md → bindgen.mdx} +12 -14
  229. package/docs/project/{building-windows.md → building-windows.mdx} +18 -47
  230. package/docs/project/{contributing.md → contributing.mdx} +56 -60
  231. package/docs/project/feedback.mdx +20 -0
  232. package/docs/project/license.mdx +78 -0
  233. package/docs/project/roadmap.mdx +8 -0
  234. package/docs/quickstart.mdx +240 -0
  235. package/docs/runtime/{autoimport.md → auto-install.mdx} +34 -31
  236. package/docs/{api/binary-data.md → runtime/binary-data.mdx} +77 -269
  237. package/docs/runtime/bun-apis.mdx +59 -0
  238. package/docs/runtime/{bunfig.md → bunfig.mdx} +95 -225
  239. package/docs/{api/cc.md → runtime/c-compiler.mdx} +16 -9
  240. package/docs/{api/spawn.md → runtime/child-process.mdx} +69 -119
  241. package/docs/{api/color.md → runtime/color.mdx} +6 -1
  242. package/docs/{api/console.md → runtime/console.mdx} +17 -7
  243. package/docs/{api/cookie.md → runtime/cookies.mdx} +24 -19
  244. package/docs/runtime/{debugger.md → debugger.mdx} +61 -51
  245. package/docs/runtime/environment-variables.mdx +214 -0
  246. package/docs/{api/ffi.md → runtime/ffi.mdx} +53 -45
  247. package/docs/{api/file-io.md → runtime/file-io.mdx} +41 -101
  248. package/docs/{api/file-system-router.md → runtime/file-system-router.mdx} +8 -2
  249. package/docs/{bundler/loaders.md → runtime/file-types.mdx} +56 -112
  250. package/docs/{api/glob.md → runtime/glob.mdx} +4 -1
  251. package/docs/runtime/globals.mdx +72 -0
  252. package/docs/{api/hashing.md → runtime/hashing.mdx} +18 -22
  253. package/docs/{api/html-rewriter.md → runtime/html-rewriter.mdx} +36 -30
  254. package/docs/runtime/http/cookies.mdx +79 -0
  255. package/docs/runtime/http/error-handling.mdx +40 -0
  256. package/docs/runtime/http/metrics.mdx +36 -0
  257. package/docs/runtime/http/routing.mdx +289 -0
  258. package/docs/runtime/http/server.mdx +647 -0
  259. package/docs/runtime/http/tls.mdx +101 -0
  260. package/docs/{api/websockets.md → runtime/http/websockets.mdx} +62 -231
  261. package/docs/{cli/run.md → runtime/index.mdx} +70 -108
  262. package/docs/runtime/jsx.mdx +115 -0
  263. package/docs/runtime/{modules.md → module-resolution.mdx} +83 -61
  264. package/docs/{api/dns.md → runtime/networking/dns.mdx} +23 -22
  265. package/docs/{api/fetch.md → runtime/networking/fetch.mdx} +10 -5
  266. package/docs/{api/tcp.md → runtime/networking/tcp.mdx} +59 -41
  267. package/docs/{api/udp.md → runtime/networking/udp.mdx} +14 -8
  268. package/docs/{api/node-api.md → runtime/node-api.mdx} +5 -0
  269. package/docs/runtime/{nodejs-apis.md → nodejs-compat.mdx} +9 -4
  270. package/docs/{bundler/plugins.md → runtime/plugins.mdx} +17 -61
  271. package/docs/{api/redis.md → runtime/redis.mdx} +65 -80
  272. package/docs/{api/s3.md → runtime/s3.mdx} +79 -66
  273. package/docs/{api/secrets.md → runtime/secrets.mdx} +27 -10
  274. package/docs/{api/semver.md → runtime/semver.mdx} +9 -4
  275. package/docs/runtime/{shell.md → shell.mdx} +52 -20
  276. package/docs/{api/sql.md → runtime/sql.mdx} +129 -99
  277. package/docs/{api/sqlite.md → runtime/sqlite.mdx} +162 -157
  278. package/docs/{api/streams.md → runtime/streams.mdx} +33 -31
  279. package/docs/{cli/bun-create.md → runtime/templating/create.mdx} +74 -143
  280. package/docs/{cli/init.md → runtime/templating/init.mdx} +24 -51
  281. package/docs/{api/transpiler.md → runtime/transpiler.mdx} +50 -38
  282. package/docs/{typescript.md → runtime/typescript.mdx} +7 -2
  283. package/docs/{api/utils.md → runtime/utils.mdx} +81 -50
  284. package/docs/runtime/{hot.md → watch-mode.mdx} +53 -37
  285. package/docs/runtime/web-apis.mdx +29 -0
  286. package/docs/{api/workers.md → runtime/workers.mdx} +28 -22
  287. package/docs/{api/yaml.md → runtime/yaml.mdx} +33 -232
  288. package/docs/snippets/cli/add.mdx +166 -0
  289. package/docs/snippets/cli/build.mdx +196 -0
  290. package/docs/snippets/cli/feedback.mdx +17 -0
  291. package/docs/snippets/cli/init.mdx +84 -0
  292. package/docs/snippets/cli/install.mdx +173 -0
  293. package/docs/snippets/cli/link.mdx +163 -0
  294. package/docs/snippets/cli/outdated.mdx +140 -0
  295. package/docs/snippets/cli/patch.mdx +171 -0
  296. package/docs/snippets/cli/publish.mdx +198 -0
  297. package/docs/snippets/cli/remove.mdx +146 -0
  298. package/docs/snippets/cli/run.mdx +293 -0
  299. package/docs/snippets/cli/test.mdx +100 -0
  300. package/docs/snippets/cli/update.mdx +144 -0
  301. package/docs/snippets/product-card.mdx +32 -0
  302. package/docs/snippets/product-tiles.mdx +94 -0
  303. package/docs/test/code-coverage.mdx +409 -0
  304. package/docs/test/configuration.mdx +467 -0
  305. package/docs/test/{time.md → dates-times.mdx} +23 -20
  306. package/docs/test/{discovery.md → discovery.mdx} +15 -10
  307. package/docs/test/dom.mdx +226 -0
  308. package/docs/{cli/test.md → test/index.mdx} +77 -94
  309. package/docs/test/lifecycle.mdx +348 -0
  310. package/docs/test/mocks.mdx +637 -0
  311. package/docs/test/{reporters.md → reporters.mdx} +15 -15
  312. package/docs/test/runtime-behavior.mdx +342 -0
  313. package/docs/test/snapshots.mdx +434 -0
  314. package/docs/test/writing-tests.mdx +635 -0
  315. package/docs/typescript.mdx +54 -0
  316. package/package.json +8 -6
  317. package/test.d.ts +2 -2
  318. package/docs/api/file.md +0 -19
  319. package/docs/api/globals.md +0 -387
  320. package/docs/api/http.md +0 -1408
  321. package/docs/api/import-meta.md +0 -69
  322. package/docs/benchmarks.md +0 -120
  323. package/docs/bun-flavored-toml.md +0 -42
  324. package/docs/bundler/css_modules.md +0 -145
  325. package/docs/bundler/fullstack.md +0 -418
  326. package/docs/bundler/index.md +0 -1735
  327. package/docs/bundler/intro.md +0 -75
  328. package/docs/bundler/vs-esbuild.md +0 -1127
  329. package/docs/cli/bun-completions.md +0 -3
  330. package/docs/cli/bun-install.md +0 -349
  331. package/docs/cli/bun-upgrade.md +0 -39
  332. package/docs/cli/info.md +0 -65
  333. package/docs/cli/patch-commit.md +0 -11
  334. package/docs/cli/remove.md +0 -7
  335. package/docs/cli/unlink.md +0 -9
  336. package/docs/contributing/upgrading-webkit.md +0 -57
  337. package/docs/ecosystem/elysia.md +0 -24
  338. package/docs/ecosystem/express.md +0 -37
  339. package/docs/ecosystem/hono.md +0 -18
  340. package/docs/ecosystem/react.md +0 -65
  341. package/docs/ecosystem/stric.md +0 -38
  342. package/docs/guides/ecosystem/prisma.md +0 -141
  343. package/docs/guides/ecosystem/render.md +0 -79
  344. package/docs/guides/install/add-git.md +0 -36
  345. package/docs/guides/test/spy-on.md +0 -46
  346. package/docs/install/index.md +0 -248
  347. package/docs/installation.md +0 -327
  348. package/docs/project/asan.md +0 -124
  349. package/docs/project/internals/build-process-for-ci.md +0 -75
  350. package/docs/project/licensing.md +0 -73
  351. package/docs/project/roadmap.md +0 -87
  352. package/docs/quickstart.md +0 -157
  353. package/docs/runtime/bun-apis.md +0 -207
  354. package/docs/runtime/env.md +0 -253
  355. package/docs/runtime/index.md +0 -312
  356. package/docs/runtime/jsx.md +0 -385
  357. package/docs/runtime/loaders.md +0 -130
  358. package/docs/runtime/plugins.md +0 -561
  359. package/docs/runtime/typescript.md +0 -139
  360. package/docs/runtime/web-apis.md +0 -128
  361. package/docs/test/configuration.md +0 -154
  362. package/docs/test/coverage.md +0 -142
  363. package/docs/test/dom.md +0 -75
  364. package/docs/test/examples/concurrent-test-glob.md +0 -132
  365. package/docs/test/hot.md +0 -15
  366. package/docs/test/lifecycle.md +0 -81
  367. package/docs/test/mocks.md +0 -313
  368. package/docs/test/runtime-behavior.md +0 -95
  369. package/docs/test/snapshots.md +0 -68
  370. package/docs/test/writing.md +0 -825
@@ -0,0 +1,226 @@
1
+ ---
2
+ title: "DOM testing"
3
+ description: "Learn how to test DOM elements and components using Bun with happy-dom and React Testing Library"
4
+ ---
5
+
6
+ Bun's test runner plays well with existing component and DOM testing libraries, including React Testing Library and happy-dom.
7
+
8
+ ## happy-dom
9
+
10
+ For writing headless tests for your frontend code and components, we recommend happy-dom. Happy DOM implements a complete set of HTML and DOM APIs in plain JavaScript, making it possible to simulate a browser environment with high fidelity.
11
+
12
+ To get started install the `@happy-dom/global-registrator` package as a dev dependency.
13
+
14
+ ```bash terminal icon="terminal"
15
+ bun add -d @happy-dom/global-registrator
16
+ ```
17
+
18
+ We'll be using Bun's preload functionality to register the happy-dom globals before running our tests. This step will make browser APIs like `document` available in the global scope. Create a file called `happydom.ts` in the root of your project and add the following code:
19
+
20
+ ```ts title="happydom.ts" icon="/icons/typescript.svg"
21
+ import { GlobalRegistrator } from "@happy-dom/global-registrator";
22
+
23
+ GlobalRegistrator.register();
24
+ ```
25
+
26
+ To preload this file before `bun test`, open or create a `bunfig.toml` file and add the following lines.
27
+
28
+ ```toml title="bunfig.toml" icon="settings"
29
+ [test]
30
+ preload = ["./happydom.ts"]
31
+ ```
32
+
33
+ This will execute `happydom.ts` when you run `bun test`. Now you can write tests that use browser APIs like `document` and `window`.
34
+
35
+ ```ts title="dom.test.ts" icon="/icons/typescript.svg"
36
+ import { test, expect } from "bun:test";
37
+
38
+ test("dom test", () => {
39
+ document.body.innerHTML = `<button>My button</button>`;
40
+ const button = document.querySelector("button");
41
+ expect(button?.innerText).toEqual("My button");
42
+ });
43
+ ```
44
+
45
+ ### TypeScript Support
46
+
47
+ Depending on your `tsconfig.json` setup, you may see a "Cannot find name 'document'" type error in the code above. To "inject" the types for `document` and other browser APIs, add the following triple-slash directive to the top of any test file.
48
+
49
+ ```ts title="dom.test.ts" icon="/icons/typescript.svg"
50
+ /// <reference lib="dom" />
51
+
52
+ import { test, expect } from "bun:test";
53
+
54
+ test("dom test", () => {
55
+ document.body.innerHTML = `<button>My button</button>`;
56
+ const button = document.querySelector("button");
57
+ expect(button?.innerText).toEqual("My button");
58
+ });
59
+ ```
60
+
61
+ Let's run this test with `bun test`:
62
+
63
+ ```bash terminal icon="terminal"
64
+ bun test
65
+ ```
66
+
67
+ ```
68
+ bun test v1.2.20
69
+
70
+ dom.test.ts:
71
+ ✓ dom test [0.82ms]
72
+
73
+ 1 pass
74
+ 0 fail
75
+ 1 expect() calls
76
+ Ran 1 tests across 1 files. 1 total [125.00ms]
77
+ ```
78
+
79
+ ## React Testing Library
80
+
81
+ Bun works seamlessly with React Testing Library for testing React components. After setting up happy-dom as shown above, you can install and use React Testing Library normally.
82
+
83
+ ```bash terminal icon="terminal"
84
+ bun add -d @testing-library/react @testing-library/jest-dom
85
+ ```
86
+
87
+ ```ts title="component.test.tsx" icon="/icons/typescript.svg"
88
+ /// <reference lib="dom" />
89
+
90
+ import { test, expect } from 'bun:test';
91
+ import { render, screen } from '@testing-library/react';
92
+ import '@testing-library/jest-dom';
93
+
94
+ function Button({ children }: { children: React.ReactNode }) {
95
+ return <button>{children}</button>;
96
+ }
97
+
98
+ test('renders button', () => {
99
+ render(<Button>Click me</Button>);
100
+ expect(screen.getByRole('button')).toHaveTextContent('Click me');
101
+ });
102
+ ```
103
+
104
+ ## Advanced DOM Testing
105
+
106
+ ### Custom Elements
107
+
108
+ You can test custom elements and web components using the same setup:
109
+
110
+ ```ts title="custom-element.test.ts" icon="/icons/typescript.svg"
111
+ /// <reference lib="dom" />
112
+
113
+ import { test, expect } from "bun:test";
114
+
115
+ test("custom element", () => {
116
+ // Define a custom element
117
+ class MyElement extends HTMLElement {
118
+ constructor() {
119
+ super();
120
+ this.innerHTML = "<p>Custom element content</p>";
121
+ }
122
+ }
123
+
124
+ customElements.define("my-element", MyElement);
125
+
126
+ // Use it in tests
127
+ document.body.innerHTML = "<my-element></my-element>";
128
+ const element = document.querySelector("my-element");
129
+ expect(element?.innerHTML).toBe("<p>Custom element content</p>");
130
+ });
131
+ ```
132
+
133
+ ### Event Testing
134
+
135
+ Test DOM events and user interactions:
136
+
137
+ ```ts title="events.test.ts" icon="/icons/typescript.svg"
138
+ /// <reference lib="dom" />
139
+
140
+ import { test, expect } from "bun:test";
141
+
142
+ test("button click event", () => {
143
+ let clicked = false;
144
+
145
+ document.body.innerHTML = '<button id="test-btn">Click me</button>';
146
+ const button = document.getElementById("test-btn");
147
+
148
+ button?.addEventListener("click", () => {
149
+ clicked = true;
150
+ });
151
+
152
+ button?.click();
153
+ expect(clicked).toBe(true);
154
+ });
155
+ ```
156
+
157
+ ## Configuration Tips
158
+
159
+ ### Global Setup
160
+
161
+ For more complex DOM testing setups, you can create a more comprehensive preload file:
162
+
163
+ ```ts title="test-setup.ts" icon="/icons/typescript.svg"
164
+ import { GlobalRegistrator } from "@happy-dom/global-registrator";
165
+ import "@testing-library/jest-dom";
166
+
167
+ // Register happy-dom globals
168
+ GlobalRegistrator.register();
169
+
170
+ // Add any global test configuration here
171
+ global.ResizeObserver = class ResizeObserver {
172
+ observe() {}
173
+ unobserve() {}
174
+ disconnect() {}
175
+ };
176
+
177
+ // Mock other APIs as needed
178
+ Object.defineProperty(window, "matchMedia", {
179
+ writable: true,
180
+ value: jest.fn().mockImplementation(query => ({
181
+ matches: false,
182
+ media: query,
183
+ onchange: null,
184
+ addListener: jest.fn(),
185
+ removeListener: jest.fn(),
186
+ addEventListener: jest.fn(),
187
+ removeEventListener: jest.fn(),
188
+ dispatchEvent: jest.fn(),
189
+ })),
190
+ });
191
+ ```
192
+
193
+ Then update your `bunfig.toml`:
194
+
195
+ ```toml title="bunfig.toml" icon="settings"
196
+ [test]
197
+ preload = ["./test-setup.ts"]
198
+ ```
199
+
200
+ ## Troubleshooting
201
+
202
+ ### Common Issues
203
+
204
+ **TypeScript errors for DOM APIs**: Make sure to include the `/// <reference lib="dom" />` directive at the top of your test files.
205
+
206
+ **Missing globals**: Ensure that `@happy-dom/global-registrator` is properly imported and registered in your preload file.
207
+
208
+ **React component rendering issues**: Make sure you've installed both `@testing-library/react` and have happy-dom set up correctly.
209
+
210
+ ### Performance Considerations
211
+
212
+ Happy-dom is fast, but for very large test suites, you might want to:
213
+
214
+ - Use `beforeEach` to reset the DOM state between tests
215
+ - Avoid creating too many DOM elements in a single test
216
+ - Consider using `cleanup` functions from testing libraries
217
+
218
+ ```ts title="test-setup.ts" icon="/icons/typescript.svg"
219
+ import { afterEach } from "bun:test";
220
+ import { cleanup } from "@testing-library/react";
221
+
222
+ afterEach(() => {
223
+ cleanup();
224
+ document.body.innerHTML = "";
225
+ });
226
+ ```
@@ -1,3 +1,10 @@
1
+ ---
2
+ title: "Test runner"
3
+ description: "Bun's fast, built-in, Jest-compatible test runner with TypeScript support, lifecycle hooks, mocking, and watch mode"
4
+ ---
5
+
6
+ import Test from "/snippets/cli/test.mdx";
7
+
1
8
  Bun ships with a fast, built-in, Jest-compatible test runner. Tests are executed with the Bun runtime, and support the following features.
2
9
 
3
10
  - TypeScript and JSX
@@ -7,19 +14,20 @@ Bun ships with a fast, built-in, Jest-compatible test runner. Tests are executed
7
14
  - Watch mode with `--watch`
8
15
  - Script pre-loading with `--preload`
9
16
 
10
- {% callout %}
11
- Bun aims for compatibility with Jest, but not everything is implemented. To track compatibility, see [this tracking issue](https://github.com/oven-sh/bun/issues/1825).
12
- {% /callout %}
17
+ <Note>
18
+ Bun aims for compatibility with Jest, but not everything is implemented. To track compatibility, see [this tracking
19
+ issue](https://github.com/oven-sh/bun/issues/1825).
20
+ </Note>
13
21
 
14
22
  ## Run tests
15
23
 
16
- ```bash
17
- $ bun test
24
+ ```bash terminal icon="terminal"
25
+ bun test
18
26
  ```
19
27
 
20
- Tests are written in JavaScript or TypeScript with a Jest-like API. Refer to [Writing tests](https://bun.com/docs/test/writing) for full documentation.
28
+ Tests are written in JavaScript or TypeScript with a Jest-like API. Refer to [Writing tests](/test/writing-tests) for full documentation.
21
29
 
22
- ```ts#math.test.ts
30
+ ```ts math.test.ts icon="/icons/typescript.svg"
23
31
  import { expect, test } from "bun:test";
24
32
 
25
33
  test("2 + 2", () => {
@@ -36,26 +44,24 @@ The runner recursively searches the working directory for files that match the f
36
44
 
37
45
  You can filter the set of _test files_ to run by passing additional positional arguments to `bun test`. Any test file with a path that matches one of the filters will run. Commonly, these filters will be file or directory names; glob patterns are not yet supported.
38
46
 
39
- ```bash
40
- $ bun test <filter> <filter> ...
47
+ ```bash terminal icon="terminal"
48
+ bun test <filter> <filter> ...
41
49
  ```
42
50
 
43
51
  To filter by _test name_, use the `-t`/`--test-name-pattern` flag.
44
52
 
45
- ```sh
53
+ ```sh terminal icon="terminal"
46
54
  # run all tests or test suites with "addition" in the name
47
- $ bun test --test-name-pattern addition
55
+ bun test --test-name-pattern addition
48
56
  ```
49
57
 
50
- When no tests match the filter, `bun test` exits with code 1.
51
-
52
58
  To run a specific file in the test runner, make sure the path starts with `./` or `/` to distinguish it from a filter name.
53
59
 
54
- ```bash
55
- $ bun test ./test/specific-file.test.ts
60
+ ```bash terminal icon="terminal"
61
+ bun test ./test/specific-file.test.ts
56
62
  ```
57
63
 
58
- The test runner runs all tests in a single process. It loads all `--preload` scripts (see [Lifecycle](https://bun.com/docs/test/lifecycle) for details), then runs all tests. If a test fails, the test runner will exit with a non-zero exit code.
64
+ The test runner runs all tests in a single process. It loads all `--preload` scripts (see [Lifecycle](/test/lifecycle) for details), then runs all tests. If a test fails, the test runner will exit with a non-zero exit code.
59
65
 
60
66
  ## CI/CD integration
61
67
 
@@ -71,7 +77,7 @@ No configuration is needed, other than installing `bun` in the workflow and runn
71
77
 
72
78
  To use `bun test` in a GitHub Actions workflow, add the following step:
73
79
 
74
- ```yaml
80
+ ```yaml title=".github/workflows/test.yml" icon="file-code"
75
81
  jobs:
76
82
  build:
77
83
  name: build-app
@@ -93,8 +99,8 @@ From there, you'll get GitHub Actions annotations.
93
99
 
94
100
  To use `bun test` with a JUnit XML reporter, you can use the `--reporter=junit` in combination with `--reporter-outfile`.
95
101
 
96
- ```sh
97
- $ bun test --reporter=junit --reporter-outfile=./bun.xml
102
+ ```sh terminal icon="terminal"
103
+ bun test --reporter=junit --reporter-outfile=./bun.xml
98
104
  ```
99
105
 
100
106
  This will continue to output to stdout/stderr as usual, and also write a JUnit
@@ -106,9 +112,9 @@ JUnit XML is a popular format for reporting test results in CI/CD pipelines.
106
112
 
107
113
  Use the `--timeout` flag to specify a _per-test_ timeout in milliseconds. If a test times out, it will be marked as failed. The default value is `5000`.
108
114
 
109
- ```bash
115
+ ```bash terminal icon="terminal"
110
116
  # default value is 5000
111
- $ bun test --timeout 20
117
+ bun test --timeout 20
112
118
  ```
113
119
 
114
120
  ## Concurrent test execution
@@ -119,8 +125,8 @@ By default, Bun runs all tests sequentially within each test file. You can enabl
119
125
 
120
126
  Use the `--concurrent` flag to run all tests concurrently within their respective files:
121
127
 
122
- ```sh
123
- $ bun test --concurrent
128
+ ```sh terminal icon="terminal"
129
+ bun test --concurrent
124
130
  ```
125
131
 
126
132
  When this flag is enabled, all tests will run in parallel unless explicitly marked with `test.serial`.
@@ -129,12 +135,12 @@ When this flag is enabled, all tests will run in parallel unless explicitly mark
129
135
 
130
136
  Control the maximum number of tests running simultaneously with the `--max-concurrency` flag:
131
137
 
132
- ```sh
138
+ ```sh terminal icon="terminal"
133
139
  # Limit to 4 concurrent tests
134
- $ bun test --concurrent --max-concurrency 4
140
+ bun test --concurrent --max-concurrency 4
135
141
 
136
142
  # Default: 20
137
- $ bun test --concurrent
143
+ bun test --concurrent
138
144
  ```
139
145
 
140
146
  This helps prevent resource exhaustion when running many concurrent tests. The default value is 20.
@@ -143,7 +149,7 @@ This helps prevent resource exhaustion when running many concurrent tests. The d
143
149
 
144
150
  Mark individual tests to run concurrently, even when the `--concurrent` flag is not used:
145
151
 
146
- ```ts
152
+ ```ts title="math.test.ts" icon="/icons/typescript.svg"
147
153
  import { test, expect } from "bun:test";
148
154
 
149
155
  // These tests run in parallel with each other
@@ -167,7 +173,7 @@ test("sequential test", () => {
167
173
 
168
174
  Force tests to run sequentially, even when the `--concurrent` flag is enabled:
169
175
 
170
- ```ts
176
+ ```ts title="math.test.ts" icon="/icons/typescript.svg"
171
177
  import { test, expect } from "bun:test";
172
178
 
173
179
  let sharedState = 0;
@@ -199,22 +205,25 @@ test.failing.each([1, 2, 3])("chained qualifiers %d", input => {
199
205
 
200
206
  Use the `--rerun-each` flag to run each test multiple times. This is useful for detecting flaky or non-deterministic test failures.
201
207
 
202
- ```sh
203
- $ bun test --rerun-each 100
208
+ ```sh terminal icon="terminal"
209
+ bun test --rerun-each 100
204
210
  ```
205
211
 
206
212
  ## Randomize test execution order
207
213
 
208
214
  Use the `--randomize` flag to run tests in a random order. This helps detect tests that depend on shared state or execution order.
209
215
 
210
- ```sh
211
- $ bun test --randomize
216
+ ```sh terminal icon="terminal"
217
+ bun test --randomize
212
218
  ```
213
219
 
214
220
  When using `--randomize`, the seed used for randomization will be displayed in the test summary:
215
221
 
216
- ```sh
217
- $ bun test --randomize
222
+ ```sh terminal icon="terminal"
223
+ bun test --randomize
224
+ ```
225
+
226
+ ```txt
218
227
  # ... test output ...
219
228
  --seed=12345
220
229
  2 pass
@@ -226,9 +235,9 @@ Ran 10 tests across 2 files. [50.00ms]
226
235
 
227
236
  Use the `--seed` flag to specify a seed for the randomization. This allows you to reproduce the same test order when debugging order-dependent failures.
228
237
 
229
- ```sh
238
+ ```sh terminal icon="terminal"
230
239
  # Reproduce a previous randomized run
231
- $ bun test --seed 123456
240
+ bun test --seed 123456
232
241
  ```
233
242
 
234
243
  The `--seed` flag implies `--randomize`, so you don't need to specify both. Using the same seed value will always produce the same test execution order, making it easier to debug intermittent failures caused by test interdependencies.
@@ -237,47 +246,46 @@ The `--seed` flag implies `--randomize`, so you don't need to specify both. Usin
237
246
 
238
247
  Use the `--bail` flag to abort the test run early after a pre-determined number of test failures. By default Bun will run all tests and report all failures, but sometimes in CI environments it's preferable to terminate earlier to reduce CPU usage.
239
248
 
240
- ```sh
249
+ ```sh terminal icon="terminal"
241
250
  # bail after 1 failure
242
- $ bun test --bail
251
+ bun test --bail
243
252
 
244
253
  # bail after 10 failure
245
- $ bun test --bail=10
254
+ bun test --bail=10
246
255
  ```
247
256
 
248
257
  ## Watch mode
249
258
 
250
259
  Similar to `bun run`, you can pass the `--watch` flag to `bun test` to watch for changes and re-run tests.
251
260
 
252
- ```bash
253
- $ bun test --watch
261
+ ```bash terminal icon="terminal"
262
+ bun test --watch
254
263
  ```
255
264
 
256
265
  ## Lifecycle hooks
257
266
 
258
267
  Bun supports the following lifecycle hooks:
259
268
 
260
- | Hook | Description |
261
- | ---------------- | -------------------------------------------------------- |
262
- | `beforeAll` | Runs once before all tests. |
263
- | `beforeEach` | Runs before each test. |
264
- | `afterEach` | Runs after each test. |
265
- | `afterAll` | Runs once after all tests. |
266
- | `onTestFinished` | Runs after a test finishes, including after `afterEach`. |
269
+ | Hook | Description |
270
+ | ------------ | --------------------------- |
271
+ | `beforeAll` | Runs once before all tests. |
272
+ | `beforeEach` | Runs before each test. |
273
+ | `afterEach` | Runs after each test. |
274
+ | `afterAll` | Runs once after all tests. |
267
275
 
268
276
  These hooks can be defined inside test files, or in a separate file that is preloaded with the `--preload` flag.
269
277
 
270
- ```ts
271
- $ bun test --preload ./setup.ts
278
+ ```ts terminal icon="terminal"
279
+ bun test --preload ./setup.ts
272
280
  ```
273
281
 
274
- See [Test > Lifecycle](https://bun.com/docs/test/lifecycle) for complete documentation.
282
+ See [Test > Lifecycle](/test/lifecycle) for complete documentation.
275
283
 
276
284
  ## Mocks
277
285
 
278
286
  Create mock functions with the `mock` function.
279
287
 
280
- ```ts
288
+ ```ts title="math.test.ts" icon="/icons/typescript.svg"
281
289
  import { test, expect, mock } from "bun:test";
282
290
  const random = mock(() => Math.random());
283
291
 
@@ -291,21 +299,21 @@ test("random", () => {
291
299
 
292
300
  Alternatively, you can use `jest.fn()`, it behaves identically.
293
301
 
294
- ```ts-diff
295
- - import { test, expect, mock } from "bun:test";
296
- + import { test, expect, jest } from "bun:test";
302
+ ```ts title="math.test.ts" icon="/icons/typescript.svg"
303
+ import { test, expect, mock } from "bun:test"; // [!code --]
304
+ import { test, expect, jest } from "bun:test"; // [!code ++]
297
305
 
298
- - const random = mock(() => Math.random());
299
- + const random = jest.fn(() => Math.random());
306
+ const random = mock(() => Math.random()); // [!code --]
307
+ const random = jest.fn(() => Math.random()); // [!code ++]
300
308
  ```
301
309
 
302
- See [Test > Mocks](https://bun.com/docs/test/mocks) for complete documentation.
310
+ See [Test > Mocks](/test/mocks) for complete documentation.
303
311
 
304
312
  ## Snapshot testing
305
313
 
306
314
  Snapshots are supported by `bun test`.
307
315
 
308
- ```ts
316
+ ```ts title="math.test.ts" icon="/icons/typescript.svg"
309
317
  // example usage of toMatchSnapshot
310
318
  import { test, expect } from "bun:test";
311
319
 
@@ -316,11 +324,11 @@ test("snapshot", () => {
316
324
 
317
325
  To update snapshots, use the `--update-snapshots` flag.
318
326
 
319
- ```sh
320
- $ bun test --update-snapshots
327
+ ```sh terminal icon="terminal"
328
+ bun test --update-snapshots
321
329
  ```
322
330
 
323
- See [Test > Snapshots](https://bun.com/docs/test/snapshots) for complete documentation.
331
+ See [Test > Snapshots](/test/snapshots) for complete documentation.
324
332
 
325
333
  ## UI & DOM testing
326
334
 
@@ -330,40 +338,13 @@ Bun is compatible with popular UI testing libraries:
330
338
  - [DOM Testing Library](https://testing-library.com/docs/dom-testing-library/intro/)
331
339
  - [React Testing Library](https://testing-library.com/docs/react-testing-library/intro)
332
340
 
333
- See [Test > DOM Testing](https://bun.com/docs/test/dom) for complete documentation.
341
+ See [Test > DOM Testing](/test/dom) for complete documentation.
334
342
 
335
343
  ## Performance
336
344
 
337
345
  Bun's test runner is fast.
338
346
 
339
- {% image src="/images/buntest.jpeg" caption="Running 266 React SSR tests faster than Jest can print its version number." /%}
340
-
341
- <!--
342
- Consider the following directory structure:
343
-
344
- ```
345
- .
346
- ├── a.test.ts
347
- ├── b.test.ts
348
- ├── c.test.ts
349
- └── foo
350
- ├── a.test.ts
351
- └── b.test.ts
352
- ```
353
-
354
- To run both `a.test.ts` files:
355
-
356
- ```
357
- $ bun test a
358
- ```
359
-
360
- To run all tests in the `foo` directory:
361
-
362
- ```
363
- $ bun test foo
364
- ```
365
-
366
- Any test file in the directory with an _absolute path_ that contains one of the targets will run. Glob patterns are not yet supported. -->
347
+ <Frame>![Running 266 React SSR tests faster than Jest can print its version number.](/images/buntest.jpeg)</Frame>
367
348
 
368
349
  ## AI Agent Integration
369
350
 
@@ -385,13 +366,15 @@ When an AI agent environment is detected:
385
366
  - Passing, skipped, and todo test indicators are hidden
386
367
  - Summary statistics remain intact
387
368
 
388
- ```bash
369
+ ```bash terminal icon="terminal"
389
370
  # Example: Enable quiet output for Claude Code
390
- $ CLAUDECODE=1 bun test
371
+ CLAUDECODE=1 bun test
391
372
 
392
373
  # Still shows failures and summary, but hides verbose passing test output
393
374
  ```
394
375
 
395
376
  This feature is particularly useful in AI-assisted development workflows where reduced output verbosity improves context efficiency while maintaining visibility into test failures.
396
377
 
397
- {% bunCLIUsage command="test" /%}
378
+ ---
379
+
380
+ <Test />