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
@@ -1,825 +0,0 @@
1
- Define tests with a Jest-like API imported from the built-in `bun:test` module. Long term, Bun aims for complete Jest compatibility; at the moment, a [limited set](#matchers) of `expect` matchers are supported.
2
-
3
- ## Basic usage
4
-
5
- To define a simple test:
6
-
7
- ```ts#math.test.ts
8
- import { expect, test } from "bun:test";
9
-
10
- test("2 + 2", () => {
11
- expect(2 + 2).toBe(4);
12
- });
13
- ```
14
-
15
- {% details summary="Jest-style globals" %}
16
- As in Jest, you can use `describe`, `test`, `expect`, and other functions without importing them. Unlike Jest, they are not injected into the global scope. Instead, the Bun transpiler will automatically inject an import from `bun:test` internally.
17
-
18
- ```ts
19
- typeof globalThis.describe; // "undefined"
20
- typeof describe; // "function"
21
- ```
22
-
23
- This transpiler integration only occurs during `bun test`, and only for test files & preloaded scripts. In practice there's no significant difference to the end user.
24
- {% /details %}
25
-
26
- Tests can be grouped into suites with `describe`.
27
-
28
- ```ts#math.test.ts
29
- import { expect, test, describe } from "bun:test";
30
-
31
- describe("arithmetic", () => {
32
- test("2 + 2", () => {
33
- expect(2 + 2).toBe(4);
34
- });
35
-
36
- test("2 * 2", () => {
37
- expect(2 * 2).toBe(4);
38
- });
39
- });
40
- ```
41
-
42
- Tests can be `async`.
43
-
44
- ```ts
45
- import { expect, test } from "bun:test";
46
-
47
- test("2 * 2", async () => {
48
- const result = await Promise.resolve(2 * 2);
49
- expect(result).toEqual(4);
50
- });
51
- ```
52
-
53
- Alternatively, use the `done` callback to signal completion. If you include the `done` callback as a parameter in your test definition, you _must_ call it or the test will hang.
54
-
55
- ```ts
56
- import { expect, test } from "bun:test";
57
-
58
- test("2 * 2", done => {
59
- Promise.resolve(2 * 2).then(result => {
60
- expect(result).toEqual(4);
61
- done();
62
- });
63
- });
64
- ```
65
-
66
- ## Timeouts
67
-
68
- Optionally specify a per-test timeout in milliseconds by passing a number as the third argument to `test`.
69
-
70
- ```ts
71
- import { test } from "bun:test";
72
-
73
- test("wat", async () => {
74
- const data = await slowOperation();
75
- expect(data).toBe(42);
76
- }, 500); // test must run in <500ms
77
- ```
78
-
79
- In `bun:test`, test timeouts throw an uncatchable exception to force the test to stop running and fail. We also kill any child processes that were spawned in the test to avoid leaving behind zombie processes lurking in the background.
80
-
81
- The default timeout for each test is 5000ms (5 seconds) if not overridden by this timeout option or `jest.setDefaultTimeout()`.
82
-
83
- ### 🧟 Zombie process killer
84
-
85
- When a test times out and processes spawned in the test via `Bun.spawn`, `Bun.spawnSync`, or `node:child_process` are not killed, they will be automatically killed and a message will be logged to the console. This prevents zombie processes from lingering in the background after timed-out tests.
86
-
87
- ## `test.skip`
88
-
89
- Skip individual tests with `test.skip`. These tests will not be run.
90
-
91
- ```ts
92
- import { expect, test } from "bun:test";
93
-
94
- test.skip("wat", () => {
95
- // TODO: fix this
96
- expect(0.1 + 0.2).toEqual(0.3);
97
- });
98
- ```
99
-
100
- ## `test.todo`
101
-
102
- Mark a test as a todo with `test.todo`. These tests will not be run.
103
-
104
- ```ts
105
- import { expect, test } from "bun:test";
106
-
107
- test.todo("fix this", () => {
108
- myTestFunction();
109
- });
110
- ```
111
-
112
- To run todo tests and find any which are passing, use `bun test --todo`.
113
-
114
- ```sh
115
- $ bun test --todo
116
- my.test.ts:
117
- ✗ unimplemented feature
118
- ^ this test is marked as todo but passes. Remove `.todo` or check that test is correct.
119
-
120
- 0 pass
121
- 1 fail
122
- 1 expect() calls
123
- ```
124
-
125
- With this flag, failing todo tests will not cause an error, but todo tests which pass will be marked as failing so you can remove the todo mark or
126
- fix the test.
127
-
128
- ## `test.only`
129
-
130
- To run a particular test or suite of tests use `test.only()` or `describe.only()`.
131
-
132
- ```ts
133
- import { test, describe } from "bun:test";
134
-
135
- test("test #1", () => {
136
- // does not run
137
- });
138
-
139
- test.only("test #2", () => {
140
- // runs
141
- });
142
-
143
- describe.only("only", () => {
144
- test("test #3", () => {
145
- // runs
146
- });
147
- });
148
- ```
149
-
150
- The following command will only execute tests #2 and #3.
151
-
152
- ```sh
153
- $ bun test
154
- ```
155
-
156
- ## `test.if`
157
-
158
- To run a test conditionally, use `test.if()`. The test will run if the condition is truthy. This is particularly useful for tests that should only run on specific architectures or operating systems.
159
-
160
- ```ts
161
- test.if(Math.random() > 0.5)("runs half the time", () => {
162
- // ...
163
- });
164
-
165
- const macOS = process.arch === "darwin";
166
- test.if(macOS)("runs on macOS", () => {
167
- // runs if macOS
168
- });
169
- ```
170
-
171
- ## `test.skipIf`
172
-
173
- To instead skip a test based on some condition, use `test.skipIf()` or `describe.skipIf()`.
174
-
175
- ```ts
176
- const macOS = process.arch === "darwin";
177
-
178
- test.skipIf(macOS)("runs on non-macOS", () => {
179
- // runs if *not* macOS
180
- });
181
- ```
182
-
183
- ## `test.todoIf`
184
-
185
- If instead you want to mark the test as TODO, use `test.todoIf()` or `describe.todoIf()`. Carefully choosing `skipIf` or `todoIf` can show a difference between, for example, intent of "invalid for this target" and "planned but not implemented yet."
186
-
187
- ```ts
188
- const macOS = process.arch === "darwin";
189
-
190
- // TODO: we've only implemented this for Linux so far.
191
- test.todoIf(macOS)("runs on posix", () => {
192
- // runs if *not* macOS
193
- });
194
- ```
195
-
196
- ## `test.failing`
197
-
198
- Use `test.failing()` when you know a test is currently failing but you want to track it and be notified when it starts passing. This inverts the test result:
199
-
200
- - A failing test marked with `.failing()` will pass
201
- - A passing test marked with `.failing()` will fail (with a message indicating it's now passing and should be fixed)
202
-
203
- ```ts
204
- // This will pass because the test is failing as expected
205
- test.failing("math is broken", () => {
206
- expect(0.1 + 0.2).toBe(0.3); // fails due to floating point precision
207
- });
208
-
209
- // This will fail with a message that the test is now passing
210
- test.failing("fixed bug", () => {
211
- expect(1 + 1).toBe(2); // passes, but we expected it to fail
212
- });
213
- ```
214
-
215
- This is useful for tracking known bugs that you plan to fix later, or for implementing test-driven development.
216
-
217
- ## Conditional Tests for Describe Blocks
218
-
219
- The conditional modifiers `.if()`, `.skipIf()`, and `.todoIf()` can also be applied to `describe` blocks, affecting all tests within the suite:
220
-
221
- ```ts
222
- const isMacOS = process.platform === "darwin";
223
-
224
- // Only runs the entire suite on macOS
225
- describe.if(isMacOS)("macOS-specific features", () => {
226
- test("feature A", () => {
227
- // only runs on macOS
228
- });
229
-
230
- test("feature B", () => {
231
- // only runs on macOS
232
- });
233
- });
234
-
235
- // Skips the entire suite on Windows
236
- describe.skipIf(process.platform === "win32")("Unix features", () => {
237
- test("feature C", () => {
238
- // skipped on Windows
239
- });
240
- });
241
-
242
- // Marks the entire suite as TODO on Linux
243
- describe.todoIf(process.platform === "linux")("Upcoming Linux support", () => {
244
- test("feature D", () => {
245
- // marked as TODO on Linux
246
- });
247
- });
248
- ```
249
-
250
- ## `test.each` and `describe.each`
251
-
252
- To run the same test with multiple sets of data, use `test.each`. This creates a parametrized test that runs once for each test case provided.
253
-
254
- ```ts
255
- const cases = [
256
- [1, 2, 3],
257
- [3, 4, 7],
258
- ];
259
-
260
- test.each(cases)("%p + %p should be %p", (a, b, expected) => {
261
- expect(a + b).toBe(expected);
262
- });
263
- ```
264
-
265
- You can also use `describe.each` to create a parametrized suite that runs once for each test case:
266
-
267
- ```ts
268
- describe.each([
269
- [1, 2, 3],
270
- [3, 4, 7],
271
- ])("add(%i, %i)", (a, b, expected) => {
272
- test(`returns ${expected}`, () => {
273
- expect(a + b).toBe(expected);
274
- });
275
-
276
- test(`sum is greater than each value`, () => {
277
- expect(a + b).toBeGreaterThan(a);
278
- expect(a + b).toBeGreaterThan(b);
279
- });
280
- });
281
- ```
282
-
283
- ### Argument Passing
284
-
285
- How arguments are passed to your test function depends on the structure of your test cases:
286
-
287
- - If a table row is an array (like `[1, 2, 3]`), each element is passed as an individual argument
288
- - If a row is not an array (like an object), it's passed as a single argument
289
-
290
- ```ts
291
- // Array items passed as individual arguments
292
- test.each([
293
- [1, 2, 3],
294
- [4, 5, 9],
295
- ])("add(%i, %i) = %i", (a, b, expected) => {
296
- expect(a + b).toBe(expected);
297
- });
298
-
299
- // Object items passed as a single argument
300
- test.each([
301
- { a: 1, b: 2, expected: 3 },
302
- { a: 4, b: 5, expected: 9 },
303
- ])("add($a, $b) = $expected", data => {
304
- expect(data.a + data.b).toBe(data.expected);
305
- });
306
- ```
307
-
308
- ### Format Specifiers
309
-
310
- There are a number of options available for formatting the test title:
311
-
312
- {% table %}
313
-
314
- ---
315
-
316
- - `%p`
317
- - [`pretty-format`](https://www.npmjs.com/package/pretty-format)
318
-
319
- ---
320
-
321
- - `%s`
322
- - String
323
-
324
- ---
325
-
326
- - `%d`
327
- - Number
328
-
329
- ---
330
-
331
- - `%i`
332
- - Integer
333
-
334
- ---
335
-
336
- - `%f`
337
- - Floating point
338
-
339
- ---
340
-
341
- - `%j`
342
- - JSON
343
-
344
- ---
345
-
346
- - `%o`
347
- - Object
348
-
349
- ---
350
-
351
- - `%#`
352
- - Index of the test case
353
-
354
- ---
355
-
356
- - `%%`
357
- - Single percent sign (`%`)
358
-
359
- {% /table %}
360
-
361
- #### Examples
362
-
363
- ```ts
364
- // Basic specifiers
365
- test.each([
366
- ["hello", 123],
367
- ["world", 456],
368
- ])("string: %s, number: %i", (str, num) => {
369
- // "string: hello, number: 123"
370
- // "string: world, number: 456"
371
- });
372
-
373
- // %p for pretty-format output
374
- test.each([
375
- [{ name: "Alice" }, { a: 1, b: 2 }],
376
- [{ name: "Bob" }, { x: 5, y: 10 }],
377
- ])("user %p with data %p", (user, data) => {
378
- // "user { name: 'Alice' } with data { a: 1, b: 2 }"
379
- // "user { name: 'Bob' } with data { x: 5, y: 10 }"
380
- });
381
-
382
- // %# for index
383
- test.each(["apple", "banana"])("fruit #%# is %s", fruit => {
384
- // "fruit #0 is apple"
385
- // "fruit #1 is banana"
386
- });
387
- ```
388
-
389
- ## Assertion Counting
390
-
391
- Bun supports verifying that a specific number of assertions were called during a test:
392
-
393
- ### expect.hasAssertions()
394
-
395
- Use `expect.hasAssertions()` to verify that at least one assertion is called during a test:
396
-
397
- ```ts
398
- test("async work calls assertions", async () => {
399
- expect.hasAssertions(); // Will fail if no assertions are called
400
-
401
- const data = await fetchData();
402
- expect(data).toBeDefined();
403
- });
404
- ```
405
-
406
- This is especially useful for async tests to ensure your assertions actually run.
407
-
408
- ### expect.assertions(count)
409
-
410
- Use `expect.assertions(count)` to verify that a specific number of assertions are called during a test:
411
-
412
- ```ts
413
- test("exactly two assertions", () => {
414
- expect.assertions(2); // Will fail if not exactly 2 assertions are called
415
-
416
- expect(1 + 1).toBe(2);
417
- expect("hello").toContain("ell");
418
- });
419
- ```
420
-
421
- This helps ensure all your assertions run, especially in complex async code with multiple code paths.
422
-
423
- ## Type Testing
424
-
425
- Bun includes `expectTypeOf` for testing typescript types, compatible with Vitest.
426
-
427
- ### expectTypeOf
428
-
429
- {% callout %}
430
-
431
- **Note** — These functions are no-ops at runtime - you need to run TypeScript separately to verify the type checks.
432
-
433
- {% endcallout %}
434
-
435
- The `expectTypeOf` function provides type-level assertions that are checked by TypeScript's type checker. **Important**:
436
-
437
- To test your types:
438
-
439
- 1. Write your type assertions using `expectTypeOf`
440
- 2. Run `bunx tsc --noEmit` to check that your types are correct
441
-
442
- ```ts
443
- import { expectTypeOf } from "bun:test";
444
-
445
- // Basic type assertions
446
- expectTypeOf<string>().toEqualTypeOf<string>();
447
- expectTypeOf(123).toBeNumber();
448
- expectTypeOf("hello").toBeString();
449
-
450
- // Object type matching
451
- expectTypeOf({ a: 1, b: "hello" }).toMatchObjectType<{ a: number }>();
452
-
453
- // Function types
454
- function greet(name: string): string {
455
- return `Hello ${name}`;
456
- }
457
-
458
- expectTypeOf(greet).toBeFunction();
459
- expectTypeOf(greet).parameters.toEqualTypeOf<[string]>();
460
- expectTypeOf(greet).returns.toEqualTypeOf<string>();
461
-
462
- // Array types
463
- expectTypeOf([1, 2, 3]).items.toBeNumber();
464
-
465
- // Promise types
466
- expectTypeOf(Promise.resolve(42)).resolves.toBeNumber();
467
- ```
468
-
469
- For full documentation on expectTypeOf matchers, see the [API Reference](/reference/bun/test/expectTypeOf)
470
-
471
- ## Matchers
472
-
473
- Bun implements the following matchers. Full Jest compatibility is on the roadmap; track progress [here](https://github.com/oven-sh/bun/issues/1825).
474
-
475
- {% table %}
476
-
477
- ---
478
-
479
- - ✅
480
- - [`.not`](https://jestjs.io/docs/expect#not)
481
-
482
- ---
483
-
484
- - ✅
485
- - [`.toBe()`](https://jestjs.io/docs/expect#tobevalue)
486
-
487
- ---
488
-
489
- - ✅
490
- - [`.toEqual()`](https://jestjs.io/docs/expect#toequalvalue)
491
-
492
- ---
493
-
494
- - ✅
495
- - [`.toBeNull()`](https://jestjs.io/docs/expect#tobenull)
496
-
497
- ---
498
-
499
- - ✅
500
- - [`.toBeUndefined()`](https://jestjs.io/docs/expect#tobeundefined)
501
-
502
- ---
503
-
504
- - ✅
505
- - [`.toBeNaN()`](https://jestjs.io/docs/expect#tobenan)
506
-
507
- ---
508
-
509
- - ✅
510
- - [`.toBeDefined()`](https://jestjs.io/docs/expect#tobedefined)
511
-
512
- ---
513
-
514
- - ✅
515
- - [`.toBeFalsy()`](https://jestjs.io/docs/expect#tobefalsy)
516
-
517
- ---
518
-
519
- - ✅
520
- - [`.toBeTruthy()`](https://jestjs.io/docs/expect#tobetruthy)
521
-
522
- ---
523
-
524
- - ✅
525
- - [`.toContain()`](https://jestjs.io/docs/expect#tocontainitem)
526
-
527
- ---
528
-
529
- - ✅
530
- - [`.toContainAllKeys()`](https://jest-extended.jestcommunity.dev/docs/matchers/Object#tocontainallkeyskeys)
531
-
532
- ---
533
-
534
- - ✅
535
- - [`.toContainValue()`](https://jest-extended.jestcommunity.dev/docs/matchers/Object#tocontainvaluevalue)
536
-
537
- ---
538
-
539
- - ✅
540
- - [`.toContainValues()`](https://jest-extended.jestcommunity.dev/docs/matchers/Object#tocontainvaluesvalues)
541
-
542
- ---
543
-
544
- - ✅
545
- - [`.toContainAllValues()`](https://jest-extended.jestcommunity.dev/docs/matchers/Object#tocontainallvaluesvalues)
546
-
547
- ---
548
-
549
- - ✅
550
- - [`.toContainAnyValues()`](https://jest-extended.jestcommunity.dev/docs/matchers/Object#tocontainanyvaluesvalues)
551
-
552
- ---
553
-
554
- - ✅
555
- - [`.toStrictEqual()`](https://jestjs.io/docs/expect#tostrictequalvalue)
556
-
557
- ---
558
-
559
- - ✅
560
- - [`.toThrow()`](https://jestjs.io/docs/expect#tothrowerror)
561
-
562
- ---
563
-
564
- - ✅
565
- - [`.toHaveLength()`](https://jestjs.io/docs/expect#tohavelengthnumber)
566
-
567
- ---
568
-
569
- - ✅
570
- - [`.toHaveProperty()`](https://jestjs.io/docs/expect#tohavepropertykeypath-value)
571
-
572
- ---
573
-
574
- - ✅
575
- - [`.extend`](https://jestjs.io/docs/expect#expectextendmatchers)
576
-
577
- ---
578
-
579
- - ✅
580
- - [`.anything()`](https://jestjs.io/docs/expect#expectanything)
581
-
582
- ---
583
-
584
- - ✅
585
- - [`.any()`](https://jestjs.io/docs/expect#expectanyconstructor)
586
-
587
- ---
588
-
589
- - ✅
590
- - [`.arrayContaining()`](https://jestjs.io/docs/expect#expectarraycontainingarray)
591
-
592
- ---
593
-
594
- - ✅
595
- - [`.assertions()`](https://jestjs.io/docs/expect#expectassertionsnumber)
596
-
597
- ---
598
-
599
- - ✅
600
- - [`.closeTo()`](https://jestjs.io/docs/expect#expectclosetonumber-numdigits)
601
-
602
- ---
603
-
604
- - ✅
605
- - [`.hasAssertions()`](https://jestjs.io/docs/expect#expecthasassertions)
606
-
607
- ---
608
-
609
- - ✅
610
- - [`.objectContaining()`](https://jestjs.io/docs/expect#expectobjectcontainingobject)
611
-
612
- ---
613
-
614
- - ✅
615
- - [`.stringContaining()`](https://jestjs.io/docs/expect#expectstringcontainingstring)
616
-
617
- ---
618
-
619
- - ✅
620
- - [`.stringMatching()`](https://jestjs.io/docs/expect#expectstringmatchingstring--regexp)
621
-
622
- ---
623
-
624
- - ❌
625
- - [`.addSnapshotSerializer()`](https://jestjs.io/docs/expect#expectaddsnapshotserializerserializer)
626
-
627
- ---
628
-
629
- - ✅
630
- - [`.resolves()`](https://jestjs.io/docs/expect#resolves)
631
-
632
- ---
633
-
634
- - ✅
635
- - [`.rejects()`](https://jestjs.io/docs/expect#rejects)
636
-
637
- ---
638
-
639
- - ✅
640
- - [`.toHaveBeenCalled()`](https://jestjs.io/docs/expect#tohavebeencalled)
641
-
642
- ---
643
-
644
- - ✅
645
- - [`.toHaveBeenCalledTimes()`](https://jestjs.io/docs/expect#tohavebeencalledtimesnumber)
646
-
647
- ---
648
-
649
- - ✅
650
- - [`.toHaveBeenCalledWith()`](https://jestjs.io/docs/expect#tohavebeencalledwitharg1-arg2-)
651
-
652
- ---
653
-
654
- - ✅
655
- - [`.toHaveBeenLastCalledWith()`](https://jestjs.io/docs/expect#tohavebeenlastcalledwitharg1-arg2-)
656
-
657
- ---
658
-
659
- - ✅
660
- - [`.toHaveBeenNthCalledWith()`](https://jestjs.io/docs/expect#tohavebeennthcalledwithnthcall-arg1-arg2-)
661
-
662
- ---
663
-
664
- - ✅
665
- - [`.toHaveReturned()`](https://jestjs.io/docs/expect#tohavereturned)
666
-
667
- ---
668
-
669
- - ✅
670
- - [`.toHaveReturnedTimes()`](https://jestjs.io/docs/expect#tohavereturnedtimesnumber)
671
-
672
- ---
673
-
674
- - ✅
675
- - [`.toHaveReturnedWith()`](https://jestjs.io/docs/expect#tohavereturnedwithvalue)
676
-
677
- ---
678
-
679
- - ✅
680
- - [`.toHaveLastReturnedWith()`](https://jestjs.io/docs/expect#tohavelastreturnedwithvalue)
681
-
682
- ---
683
-
684
- - ✅
685
- - [`.toHaveNthReturnedWith()`](https://jestjs.io/docs/expect#tohaventhreturnedwithnthcall-value)
686
-
687
- ---
688
-
689
- - ✅
690
- - [`.toBeCloseTo()`](https://jestjs.io/docs/expect#tobeclosetonumber-numdigits)
691
-
692
- ---
693
-
694
- - ✅
695
- - [`.toBeGreaterThan()`](https://jestjs.io/docs/expect#tobegreaterthannumber--bigint)
696
-
697
- ---
698
-
699
- - ✅
700
- - [`.toBeGreaterThanOrEqual()`](https://jestjs.io/docs/expect#tobegreaterthanorequalnumber--bigint)
701
-
702
- ---
703
-
704
- - ✅
705
- - [`.toBeLessThan()`](https://jestjs.io/docs/expect#tobelessthannumber--bigint)
706
-
707
- ---
708
-
709
- - ✅
710
- - [`.toBeLessThanOrEqual()`](https://jestjs.io/docs/expect#tobelessthanorequalnumber--bigint)
711
-
712
- ---
713
-
714
- - ✅
715
- - [`.toBeInstanceOf()`](https://jestjs.io/docs/expect#tobeinstanceofclass)
716
-
717
- ---
718
-
719
- - ✅
720
- - [`.toContainEqual()`](https://jestjs.io/docs/expect#tocontainequalitem)
721
-
722
- ---
723
-
724
- - ✅
725
- - [`.toMatch()`](https://jestjs.io/docs/expect#tomatchregexp--string)
726
-
727
- ---
728
-
729
- - ✅
730
- - [`.toMatchObject()`](https://jestjs.io/docs/expect#tomatchobjectobject)
731
-
732
- ---
733
-
734
- - ✅
735
- - [`.toMatchSnapshot()`](https://jestjs.io/docs/expect#tomatchsnapshotpropertymatchers-hint)
736
-
737
- ---
738
-
739
- - ✅
740
- - [`.toMatchInlineSnapshot()`](https://jestjs.io/docs/expect#tomatchinlinesnapshotpropertymatchers-inlinesnapshot)
741
-
742
- ---
743
-
744
- - ✅
745
- - [`.toThrowErrorMatchingSnapshot()`](https://jestjs.io/docs/expect#tothrowerrormatchingsnapshothint)
746
-
747
- ---
748
-
749
- - ✅
750
- - [`.toThrowErrorMatchingInlineSnapshot()`](https://jestjs.io/docs/expect#tothrowerrormatchinginlinesnapshotinlinesnapshot)
751
-
752
- {% /table %}
753
-
754
- ## TypeScript Type Safety
755
-
756
- Bun's test runner provides enhanced TypeScript support with intelligent type checking for your test assertions. The type system helps catch potential bugs at compile time while still allowing flexibility when needed.
757
-
758
- ### Strict Type Checking by Default
759
-
760
- By default, Bun's test matchers enforce strict type checking between the actual value and expected value:
761
-
762
- ```ts
763
- import { expect, test } from "bun:test";
764
-
765
- test("strict typing", () => {
766
- const str = "hello";
767
- const num = 42;
768
-
769
- expect(str).toBe("hello"); // ✅ OK: string to string
770
- expect(num).toBe(42); // ✅ OK: number to number
771
- expect(str).toBe(42); // ❌ TypeScript error: string vs number
772
- });
773
- ```
774
-
775
- This helps catch common mistakes where you might accidentally compare values of different types.
776
-
777
- ### Relaxed Type Checking with Type Parameters
778
-
779
- Sometimes you need more flexibility in your tests, especially when working with:
780
-
781
- - Dynamic data from APIs
782
- - Polymorphic functions that can return multiple types
783
- - Generic utility functions
784
- - Migration of existing test suites
785
-
786
- For these cases, you can "opt out" of strict type checking by providing an explicit type parameter to matcher methods:
787
-
788
- ```ts
789
- import { expect, test } from "bun:test";
790
-
791
- test("relaxed typing with type parameters", () => {
792
- const value: unknown = getSomeValue();
793
-
794
- // These would normally cause TypeScript errors, but type parameters allow them:
795
- expect(value).toBe<number>(42); // No TS error, runtime check still works
796
- expect(value).toEqual<string>("hello"); // No TS error, runtime check still works
797
- expect(value).toStrictEqual<boolean>(true); // No TS error, runtime check still works
798
- });
799
-
800
- test("useful for dynamic data", () => {
801
- const apiResponse: any = { status: "success" };
802
-
803
- // Without type parameter: TypeScript error (any vs string)
804
- // expect(apiResponse.status).toBe("success");
805
-
806
- // With type parameter: No TypeScript error, runtime assertion still enforced
807
- expect(apiResponse.status).toBe<string>("success"); // ✅ OK
808
- });
809
- ```
810
-
811
- ### Migration from Looser Type Systems
812
-
813
- If migrating from a test framework with looser TypeScript integration, you can use type parameters as a stepping stone:
814
-
815
- ```ts
816
- // Old Jest test that worked but wasn't type-safe
817
- expect(response.data).toBe(200); // No type error in some setups
818
-
819
- // Bun equivalent with explicit typing during migration
820
- expect(response.data).toBe<number>(200); // Explicit about expected type
821
-
822
- // Ideal Bun test after refactoring
823
- const statusCode: number = response.data;
824
- expect(statusCode).toBe(200); // Type-safe without explicit parameter
825
- ```