bun-types 1.3.2-canary.20251105T140650 → 1.3.2-canary.20251108T140624

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,130 +0,0 @@
1
- ## TypeScript
2
-
3
- Bun natively supports TypeScript out of the box. All files are transpiled on the fly by Bun's fast native transpiler before being executed. Similar to other build tools, Bun does not perform typechecking; it simply removes type annotations from the file.
4
-
5
- ```bash
6
- $ bun index.js
7
- $ bun index.jsx
8
- $ bun index.ts
9
- $ bun index.tsx
10
- ```
11
-
12
- Some aspects of Bun's runtime behavior are affected by the contents of your `tsconfig.json` file. Refer to [Runtime > TypeScript](https://bun.com/docs/runtime/typescript) page for details.
13
-
14
- ## JSX
15
-
16
- Bun supports `.jsx` and `.tsx` files out of the box. Bun's internal transpiler converts JSX syntax into vanilla JavaScript before execution.
17
-
18
- ```tsx#react.tsx
19
- function Component(props: {message: string}) {
20
- return (
21
- <body>
22
- <h1 style={{color: 'red'}}>{props.message}</h1>
23
- </body>
24
- );
25
- }
26
-
27
- console.log(<Component message="Hello world!" />);
28
- ```
29
-
30
- Bun implements special logging for JSX to make debugging easier.
31
-
32
- ```bash
33
- $ bun run react.tsx
34
- <Component message="Hello world!" />
35
- ```
36
-
37
- ## Text files
38
-
39
- Text files can be imported as strings.
40
-
41
- {% codetabs %}
42
-
43
- ```ts#index.ts
44
- import text from "./text.txt";
45
- console.log(text);
46
- // => "Hello world!"
47
- ```
48
-
49
- ```txt#text.txt
50
- Hello world!
51
- ```
52
-
53
- {% /codetabs %}
54
-
55
- ## JSON, TOML, and YAML
56
-
57
- JSON, TOML, and YAML files can be directly imported from a source file. The contents will be loaded and returned as a JavaScript object.
58
-
59
- ```ts
60
- import pkg from "./package.json";
61
- import data from "./data.toml";
62
- import config from "./config.yaml";
63
- ```
64
-
65
- For more details on YAML support, see the [YAML API documentation](/docs/api/yaml).
66
-
67
- ## WASI
68
-
69
- {% callout %}
70
- 🚧 **Experimental**
71
- {% /callout %}
72
-
73
- Bun has experimental support for WASI, the [WebAssembly System Interface](https://github.com/WebAssembly/WASI). To run a `.wasm` binary with Bun:
74
-
75
- ```bash
76
- $ bun ./my-wasm-app.wasm
77
- # if the filename doesn't end with ".wasm"
78
- $ bun run ./my-wasm-app.whatever
79
- ```
80
-
81
- {% callout %}
82
-
83
- **Note** — WASI support is based on [wasi-js](https://github.com/sagemathinc/cowasm/tree/main/core/wasi-js). Currently, it only supports WASI binaries that use the `wasi_snapshot_preview1` or `wasi_unstable` APIs. Bun's implementation is not fully optimized for performance; this will become more of a priority as WASM grows in popularity.
84
- {% /callout %}
85
-
86
- ## SQLite
87
-
88
- You can import sqlite databases directly into your code. Bun will automatically load the database and return a `Database` object.
89
-
90
- ```ts
91
- import db from "./my.db" with { type: "sqlite" };
92
- console.log(db.query("select * from users LIMIT 1").get());
93
- ```
94
-
95
- This uses [`bun:sqlite`](https://bun.com/docs/api/sqlite).
96
-
97
- ## Custom loaders
98
-
99
- Support for additional file types can be implemented with plugins. Refer to [Runtime > Plugins](https://bun.com/docs/bundler/plugins) for full documentation.
100
-
101
- <!--
102
-
103
- A loader determines how to map imports &amp; file extensions to transforms and output.
104
-
105
- Currently, Bun implements the following loaders:
106
-
107
- | Input | Loader | Output |
108
- | ----- | ----------------------------- | ------ |
109
- | .js | JSX + JavaScript | .js |
110
- | .jsx | JSX + JavaScript | .js |
111
- | .ts | TypeScript + JavaScript | .js |
112
- | .tsx | TypeScript + JSX + JavaScript | .js |
113
- | .mjs | JavaScript | .js |
114
- | .cjs | JavaScript | .js |
115
- | .mts | TypeScript | .js |
116
- | .cts | TypeScript | .js |
117
- | .toml | TOML | .js |
118
- | .css | CSS | .css |
119
- | .env | Env | N/A |
120
- | .\* | file | string |
121
-
122
- Everything else is treated as `file`. `file` replaces the import with a URL (or a path).
123
-
124
- You can configure which loaders map to which extensions by passing `--loaders` to `bun`. For example:
125
-
126
- ```sh
127
- $ bun --loader=.js:js
128
- ```
129
-
130
- This will disable JSX transforms for `.js` files. -->
@@ -1,561 +0,0 @@
1
- Bun provides a universal plugin API that can be used to extend both the _runtime_ and [_bundler_](https://bun.com/docs/bundler).
2
-
3
- Plugins intercept imports and perform custom loading logic: reading files, transpiling code, etc. They can be used to add support for additional file types, like `.scss` or `.yaml`. In the context of Bun's bundler, plugins can be used to implement framework-level features like CSS extraction, macros, and client-server code co-location.
4
-
5
- ## Usage
6
-
7
- A plugin is defined as simple JavaScript object containing a `name` property and a `setup` function. Register a plugin with Bun using the `plugin` function.
8
-
9
- ```tsx#myPlugin.ts
10
- import { plugin, type BunPlugin } from "bun";
11
-
12
- const myPlugin: BunPlugin = {
13
- name: "Custom loader",
14
- setup(build) {
15
- // implementation
16
- },
17
- };
18
-
19
- plugin(myPlugin);
20
- ```
21
-
22
- Plugins have to be loaded before any other code runs! To achieve this, use the `preload` option in your [`bunfig.toml`](https://bun.com/docs/runtime/bunfig). Bun automatically loads the files/modules specified in `preload` before running a file.
23
-
24
- ```toml
25
- preload = ["./myPlugin.ts"]
26
- ```
27
-
28
- Preloads can be either local files or npm packages. Anything that can be imported/required can be preloaded.
29
-
30
- ```toml
31
- preload = ["bun-plugin-foo"]
32
- ```
33
-
34
- To preload files before `bun test`:
35
-
36
- ```toml
37
- [test]
38
- preload = ["./myPlugin.ts"]
39
- ```
40
-
41
- ## Plugin conventions
42
-
43
- By convention, third-party plugins intended for consumption should export a factory function that accepts some configuration and returns a plugin object.
44
-
45
- ```ts
46
- import { plugin } from "bun";
47
- import fooPlugin from "bun-plugin-foo";
48
-
49
- plugin(
50
- fooPlugin({
51
- // configuration
52
- }),
53
- );
54
- ```
55
-
56
- Bun's plugin API is loosely based on [esbuild](https://esbuild.github.io/plugins). Only [a subset](https://bun.com/docs/bundler/vs-esbuild#plugin-api) of the esbuild API is implemented, but some esbuild plugins "just work" in Bun, like the official [MDX loader](https://mdxjs.com/packages/esbuild/):
57
-
58
- ```jsx
59
- import { plugin } from "bun";
60
- import mdx from "@mdx-js/esbuild";
61
-
62
- plugin(mdx());
63
- ```
64
-
65
- ## Loaders
66
-
67
- Plugins are primarily used to extend Bun with loaders for additional file types. Let's look at a simple plugin that implements a loader for `.yaml` files.
68
-
69
- ```ts#yamlPlugin.ts
70
- import { plugin } from "bun";
71
-
72
- await plugin({
73
- name: "YAML",
74
- async setup(build) {
75
- const { load } = await import("js-yaml");
76
-
77
- // when a .yaml file is imported...
78
- build.onLoad({ filter: /\.(yaml|yml)$/ }, async (args) => {
79
-
80
- // read and parse the file
81
- const text = await Bun.file(args.path).text();
82
- const exports = load(text) as Record<string, any>;
83
-
84
- // and returns it as a module
85
- return {
86
- exports,
87
- loader: "object", // special loader for JS objects
88
- };
89
- });
90
- },
91
- });
92
- ```
93
-
94
- Register this file in `preload`:
95
-
96
- ```toml#bunfig.toml
97
- preload = ["./yamlPlugin.ts"]
98
- ```
99
-
100
- Once the plugin is registered, `.yaml` and `.yml` files can be directly imported.
101
-
102
- {% codetabs %}
103
-
104
- ```ts#index.ts
105
- import * as data from "./data.yml"
106
-
107
- console.log(data);
108
- ```
109
-
110
- ```yaml#data.yml
111
- name: Fast X
112
- releaseYear: 2023
113
- ```
114
-
115
- {% /codetabs %}
116
-
117
- Note that the returned object has a `loader` property. This tells Bun which of its internal loaders should be used to handle the result. Even though we're implementing a loader for `.yaml`, the result must still be understandable by one of Bun's built-in loaders. It's loaders all the way down.
118
-
119
- In this case we're using `"object"`—a built-in loader (intended for use by plugins) that converts a plain JavaScript object to an equivalent ES module. Any of Bun's built-in loaders are supported; these same loaders are used by Bun internally for handling files of various kinds. The table below is a quick reference; refer to [Bundler > Loaders](https://bun.com/docs/bundler/loaders) for complete documentation.
120
-
121
- {% table %}
122
-
123
- - Loader
124
- - Extensions
125
- - Output
126
-
127
- ---
128
-
129
- - `js`
130
- - `.mjs` `.cjs`
131
- - Transpile to JavaScript files
132
-
133
- ---
134
-
135
- - `jsx`
136
- - `.js` `.jsx`
137
- - Transform JSX then transpile
138
-
139
- ---
140
-
141
- - `ts`
142
- - `.ts` `.mts` `.cts`
143
- - Transform TypeScript then transpile
144
-
145
- ---
146
-
147
- - `tsx`
148
- - `.tsx`
149
- - Transform TypeScript, JSX, then transpile
150
-
151
- ---
152
-
153
- - `toml`
154
- - `.toml`
155
- - Parse using Bun's built-in TOML parser
156
-
157
- ---
158
-
159
- - `json`
160
- - `.json`
161
- - Parse using Bun's built-in JSON parser
162
-
163
- ---
164
-
165
- - `napi`
166
- - `.node`
167
- - Import a native Node.js addon
168
-
169
- ---
170
-
171
- - `wasm`
172
- - `.wasm`
173
- - Import a native Node.js addon
174
-
175
- ---
176
-
177
- - `object`
178
- - _none_
179
- - A special loader intended for plugins that converts a plain JavaScript object to an equivalent ES module. Each key in the object corresponds to a named export.
180
-
181
- {% /callout %}
182
-
183
- Loading a YAML file is useful, but plugins support more than just data loading. Let's look at a plugin that lets Bun import `*.svelte` files.
184
-
185
- ```ts#sveltePlugin.ts
186
- import { plugin } from "bun";
187
-
188
- await plugin({
189
- name: "svelte loader",
190
- async setup(build) {
191
- const { compile } = await import("svelte/compiler");
192
-
193
- // when a .svelte file is imported...
194
- build.onLoad({ filter: /\.svelte$/ }, async ({ path }) => {
195
-
196
- // read and compile it with the Svelte compiler
197
- const file = await Bun.file(path).text();
198
- const contents = compile(file, {
199
- filename: path,
200
- generate: "ssr",
201
- }).js.code;
202
-
203
- // and return the compiled source code as "js"
204
- return {
205
- contents,
206
- loader: "js",
207
- };
208
- });
209
- },
210
- });
211
- ```
212
-
213
- > Note: in a production implementation, you'd want to cache the compiled output and include additional error handling.
214
-
215
- The object returned from `build.onLoad` contains the compiled source code in `contents` and specifies `"js"` as its loader. That tells Bun to consider the returned `contents` to be a JavaScript module and transpile it using Bun's built-in `js` loader.
216
-
217
- With this plugin, Svelte components can now be directly imported and consumed.
218
-
219
- ```js
220
- import "./sveltePlugin.ts";
221
- import MySvelteComponent from "./component.svelte";
222
-
223
- console.log(MySvelteComponent.render());
224
- ```
225
-
226
- ## Virtual Modules
227
-
228
- {% note %}
229
-
230
- This feature is currently only available at runtime with `Bun.plugin` and not yet supported in the bundler, but you can mimic the behavior using `onResolve` and `onLoad`.
231
-
232
- {% /note %}
233
-
234
- To create virtual modules at runtime, use `builder.module(specifier, callback)` in the `setup` function of a `Bun.plugin`.
235
-
236
- For example:
237
-
238
- ```js
239
- import { plugin } from "bun";
240
-
241
- plugin({
242
- name: "my-virtual-module",
243
-
244
- setup(build) {
245
- build.module(
246
- // The specifier, which can be any string - except a built-in, such as "buffer"
247
- "my-transpiled-virtual-module",
248
- // The callback to run when the module is imported or required for the first time
249
- () => {
250
- return {
251
- contents: "console.log('hello world!')",
252
- loader: "js",
253
- };
254
- },
255
- );
256
-
257
- build.module("my-object-virtual-module", () => {
258
- return {
259
- exports: {
260
- foo: "bar",
261
- },
262
- loader: "object",
263
- };
264
- });
265
- },
266
- });
267
-
268
- // Sometime later
269
- // All of these work
270
- import "my-transpiled-virtual-module";
271
- require("my-transpiled-virtual-module");
272
- await import("my-transpiled-virtual-module");
273
- require.resolve("my-transpiled-virtual-module");
274
-
275
- import { foo } from "my-object-virtual-module";
276
- const object = require("my-object-virtual-module");
277
- await import("my-object-virtual-module");
278
- require.resolve("my-object-virtual-module");
279
- ```
280
-
281
- ### Overriding existing modules
282
-
283
- You can also override existing modules with `build.module`.
284
-
285
- ```js
286
- import { plugin } from "bun";
287
- build.module("my-object-virtual-module", () => {
288
- return {
289
- exports: {
290
- foo: "bar",
291
- },
292
- loader: "object",
293
- };
294
- });
295
-
296
- require("my-object-virtual-module"); // { foo: "bar" }
297
- await import("my-object-virtual-module"); // { foo: "bar" }
298
-
299
- build.module("my-object-virtual-module", () => {
300
- return {
301
- exports: {
302
- baz: "quix",
303
- },
304
- loader: "object",
305
- };
306
- });
307
- require("my-object-virtual-module"); // { baz: "quix" }
308
- await import("my-object-virtual-module"); // { baz: "quix" }
309
- ```
310
-
311
- ## Reading or modifying the config
312
-
313
- Plugins can read and write to the [build config](https://bun.com/docs/bundler#api) with `build.config`.
314
-
315
- ```ts
316
- await Bun.build({
317
- entrypoints: ["./app.ts"],
318
- outdir: "./dist",
319
- sourcemap: "external",
320
- plugins: [
321
- {
322
- name: "demo",
323
- setup(build) {
324
- console.log(build.config.sourcemap); // "external"
325
-
326
- build.config.minify = true; // enable minification
327
-
328
- // `plugins` is readonly
329
- console.log(`Number of plugins: ${build.config.plugins.length}`);
330
- },
331
- },
332
- ],
333
- });
334
- ```
335
-
336
- {% callout %}
337
-
338
- **NOTE**: Plugin lifecycle callbacks (`onStart()`, `onResolve()`, etc.) do not have the ability to modify the `build.config` object in the `setup()` function. If you want to mutate `build.config`, you must do so directly in the `setup()` function:
339
-
340
- ```ts
341
- await Bun.build({
342
- entrypoints: ["./app.ts"],
343
- outdir: "./dist",
344
- sourcemap: "external",
345
- plugins: [
346
- {
347
- name: "demo",
348
- setup(build) {
349
- // ✅ good! modifying it directly in the setup() function
350
- build.config.minify = true;
351
-
352
- build.onStart(() => {
353
- // 🚫 uh-oh! this won't work!
354
- build.config.minify = false;
355
- });
356
- },
357
- },
358
- ],
359
- });
360
- ```
361
-
362
- {% /callout %}
363
-
364
- ## Lifecycle hooks
365
-
366
- Plugins can register callbacks to be run at various points in the lifecycle of a bundle:
367
-
368
- - [`onStart()`](#onstart): Run once the bundler has started a bundle
369
- - [`onResolve()`](#onresolve): Run before a module is resolved
370
- - [`onLoad()`](#onload): Run before a module is loaded.
371
-
372
- ### Reference
373
-
374
- A rough overview of the types (please refer to Bun's `bun.d.ts` for the full type definitions):
375
-
376
- ```ts
377
- namespace Bun {
378
- function plugin(plugin: {
379
- name: string;
380
- setup: (build: PluginBuilder) => void;
381
- }): void;
382
- }
383
-
384
- type PluginBuilder = {
385
- onStart(callback: () => void): void;
386
- onResolve: (
387
- args: { filter: RegExp; namespace?: string },
388
- callback: (args: { path: string; importer: string }) => {
389
- path: string;
390
- namespace?: string;
391
- } | void,
392
- ) => void;
393
- onLoad: (
394
- args: { filter: RegExp; namespace?: string },
395
- callback: (args: { path: string }) => {
396
- loader?: Loader;
397
- contents?: string;
398
- exports?: Record<string, any>;
399
- },
400
- ) => void;
401
- config: BuildConfig;
402
- };
403
-
404
- type Loader = "js" | "jsx" | "ts" | "tsx" | "css" | "json" | "toml" | "object";
405
- ```
406
-
407
- ### Namespaces
408
-
409
- `onLoad` and `onResolve` accept an optional `namespace` string. What is a namespace?
410
-
411
- Every module has a namespace. Namespaces are used to prefix the import in transpiled code; for instance, a loader with a `filter: /\.yaml$/` and `namespace: "yaml:"` will transform an import from `./myfile.yaml` into `yaml:./myfile.yaml`.
412
-
413
- The default namespace is `"file"` and it is not necessary to specify it, for instance: `import myModule from "./my-module.ts"` is the same as `import myModule from "file:./my-module.ts"`.
414
-
415
- Other common namespaces are:
416
-
417
- - `"bun"`: for Bun-specific modules (e.g. `"bun:test"`, `"bun:sqlite"`)
418
- - `"node"`: for Node.js modules (e.g. `"node:fs"`, `"node:path"`)
419
-
420
- ### `onStart`
421
-
422
- ```ts
423
- onStart(callback: () => void): Promise<void> | void;
424
- ```
425
-
426
- Registers a callback to be run when the bundler starts a new bundle.
427
-
428
- ```ts
429
- import { plugin } from "bun";
430
-
431
- plugin({
432
- name: "onStart example",
433
-
434
- setup(build) {
435
- build.onStart(() => {
436
- console.log("Bundle started!");
437
- });
438
- },
439
- });
440
- ```
441
-
442
- The callback can return a `Promise`. After the bundle process has initialized, the bundler waits until all `onStart()` callbacks have completed before continuing.
443
-
444
- For example:
445
-
446
- ```ts
447
- const result = await Bun.build({
448
- entrypoints: ["./app.ts"],
449
- outdir: "./dist",
450
- sourcemap: "external",
451
- plugins: [
452
- {
453
- name: "Sleep for 10 seconds",
454
- setup(build) {
455
- build.onStart(async () => {
456
- await Bunlog.sleep(10_000);
457
- });
458
- },
459
- },
460
- {
461
- name: "Log bundle time to a file",
462
- setup(build) {
463
- build.onStart(async () => {
464
- const now = Date.now();
465
- await Bun.$`echo ${now} > bundle-time.txt`;
466
- });
467
- },
468
- },
469
- ],
470
- });
471
- ```
472
-
473
- In the above example, Bun will wait until the first `onStart()` (sleeping for 10 seconds) has completed, _as well as_ the second `onStart()` (writing the bundle time to a file).
474
-
475
- Note that `onStart()` callbacks (like every other lifecycle callback) do not have the ability to modify the `build.config` object. If you want to mutate `build.config`, you must do so directly in the `setup()` function.
476
-
477
- ### `onResolve`
478
-
479
- ```ts
480
- onResolve(
481
- args: { filter: RegExp; namespace?: string },
482
- callback: (args: { path: string; importer: string }) => {
483
- path: string;
484
- namespace?: string;
485
- } | void,
486
- ): void;
487
- ```
488
-
489
- To bundle your project, Bun walks down the dependency tree of all modules in your project. For each imported module, Bun actually has to find and read that module. The "finding" part is known as "resolving" a module.
490
-
491
- The `onResolve()` plugin lifecycle callback allows you to configure how a module is resolved.
492
-
493
- The first argument to `onResolve()` is an object with a `filter` and [`namespace`](#what-is-a-namespace) property. The filter is a regular expression which is run on the import string. Effectively, these allow you to filter which modules your custom resolution logic will apply to.
494
-
495
- The second argument to `onResolve()` is a callback which is run for each module import Bun finds that matches the `filter` and `namespace` defined in the first argument.
496
-
497
- The callback receives as input the _path_ to the matching module. The callback can return a _new path_ for the module. Bun will read the contents of the _new path_ and parse it as a module.
498
-
499
- For example, redirecting all imports to `images/` to `./public/images/`:
500
-
501
- ```ts
502
- import { plugin } from "bun";
503
-
504
- plugin({
505
- name: "onResolve example",
506
- setup(build) {
507
- build.onResolve({ filter: /.*/, namespace: "file" }, args => {
508
- if (args.path.startsWith("images/")) {
509
- return {
510
- path: args.path.replace("images/", "./public/images/"),
511
- };
512
- }
513
- });
514
- },
515
- });
516
- ```
517
-
518
- ### `onLoad`
519
-
520
- ```ts
521
- onLoad(
522
- args: { filter: RegExp; namespace?: string },
523
- callback: (args: { path: string, importer: string, namespace: string, kind: ImportKind }) => {
524
- loader?: Loader;
525
- contents?: string;
526
- exports?: Record<string, any>;
527
- },
528
- ): void;
529
- ```
530
-
531
- After Bun's bundler has resolved a module, it needs to read the contents of the module and parse it.
532
-
533
- The `onLoad()` plugin lifecycle callback allows you to modify the _contents_ of a module before it is read and parsed by Bun.
534
-
535
- Like `onResolve()`, the first argument to `onLoad()` allows you to filter which modules this invocation of `onLoad()` will apply to.
536
-
537
- The second argument to `onLoad()` is a callback which is run for each matching module _before_ Bun loads the contents of the module into memory.
538
-
539
- This callback receives as input the _path_ to the matching module, the _importer_ of the module (the module that imported the module), the _namespace_ of the module, and the _kind_ of the module.
540
-
541
- The callback can return a new `contents` string for the module as well as a new `loader`.
542
-
543
- For example:
544
-
545
- ```ts
546
- import { plugin } from "bun";
547
-
548
- plugin({
549
- name: "env plugin",
550
- setup(build) {
551
- build.onLoad({ filter: /env/, namespace: "file" }, args => {
552
- return {
553
- contents: `export default ${JSON.stringify(process.env)}`,
554
- loader: "js",
555
- };
556
- });
557
- },
558
- });
559
- ```
560
-
561
- This plugin will transform all imports of the form `import env from "env"` into a JavaScript module that exports the current environment variables.