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,11 +1,20 @@
1
+ ---
2
+ title: SQLite
3
+ description: Bun natively implements a high-performance SQLite3 driver.
4
+ ---
5
+
1
6
  Bun natively implements a high-performance [SQLite3](https://www.sqlite.org/) driver. To use it import from the built-in `bun:sqlite` module.
2
7
 
3
- ```ts
8
+ ```ts db.ts icon="/icons/typescript.svg"
4
9
  import { Database } from "bun:sqlite";
5
10
 
6
11
  const db = new Database(":memory:");
7
12
  const query = db.query("select 'Hello world' as message;");
8
- query.get(); // => { message: "Hello world" }
13
+ query.get();
14
+ ```
15
+
16
+ ```txt
17
+ { message: "Hello world" }
9
18
  ```
10
19
 
11
20
  The API is simple, synchronous, and fast. Credit to [better-sqlite3](https://github.com/JoshuaWise/better-sqlite3) and its contributors for inspiring the API of `bun:sqlite`.
@@ -23,13 +32,18 @@ Features include:
23
32
 
24
33
  The `bun:sqlite` module is roughly 3-6x faster than `better-sqlite3` and 8-9x faster than `deno.land/x/sqlite` for read queries. Each driver was benchmarked against the [Northwind Traders](https://github.com/jpwhite3/northwind-SQLite3/blob/46d5f8a64f396f87cd374d1600dbf521523980e8/Northwind_large.sqlite.zip) dataset. View and run the [benchmark source](https://github.com/oven-sh/bun/tree/main/bench/sqlite).
25
34
 
26
- {% image width="738" alt="SQLite benchmarks for Bun, better-sqlite3, and deno.land/x/sqlite" src="https://user-images.githubusercontent.com/709451/168459263-8cd51ca3-a924-41e9-908d-cf3478a3b7f3.png" caption="Benchmarked on an M1 MacBook Pro (64GB) running macOS 12.3.1" /%}
35
+ <Frame caption="Benchmarked on an M1 MacBook Pro (64GB) running macOS 12.3.1">
36
+ ![SQLite benchmarks for Bun, better-sqlite3, and
37
+ deno.land/x/sqlite](https://user-images.githubusercontent.com/709451/168459263-8cd51ca3-a924-41e9-908d-cf3478a3b7f3.png)
38
+ </Frame>
39
+
40
+ ---
27
41
 
28
42
  ## Database
29
43
 
30
44
  To open or create a SQLite3 database:
31
45
 
32
- ```ts
46
+ ```ts db.ts icon="/icons/typescript.svg"
33
47
  import { Database } from "bun:sqlite";
34
48
 
35
49
  const db = new Database("mydb.sqlite");
@@ -37,7 +51,7 @@ const db = new Database("mydb.sqlite");
37
51
 
38
52
  To open an in-memory database:
39
53
 
40
- ```ts
54
+ ```ts db.ts icon="/icons/typescript.svg"
41
55
  import { Database } from "bun:sqlite";
42
56
 
43
57
  // all of these do the same thing
@@ -48,64 +62,50 @@ const db = new Database("");
48
62
 
49
63
  To open in `readonly` mode:
50
64
 
51
- ```ts
65
+ ```ts db.ts icon="/icons/typescript.svg" highlight={2}
52
66
  import { Database } from "bun:sqlite";
53
67
  const db = new Database("mydb.sqlite", { readonly: true });
54
68
  ```
55
69
 
56
70
  To create the database if the file doesn't exist:
57
71
 
58
- ```ts
72
+ ```ts db.ts icon="/icons/typescript.svg" highlight={2}
59
73
  import { Database } from "bun:sqlite";
60
74
  const db = new Database("mydb.sqlite", { create: true });
61
75
  ```
62
76
 
63
77
  ### Strict mode
64
78
 
65
- {% callout %}
66
- Added in Bun v1.1.14
67
- {% /callout %}
68
-
69
79
  By default, `bun:sqlite` requires binding parameters to include the `$`, `:`, or `@` prefix, and does not throw an error if a parameter is missing.
70
80
 
71
81
  To instead throw an error when a parameter is missing and allow binding without a prefix, set `strict: true` on the `Database` constructor:
72
82
 
73
- <!-- prettier-ignore -->
74
- ```ts
83
+ ```ts db.ts icon="/icons/typescript.svg" highlight={3}
75
84
  import { Database } from "bun:sqlite";
76
85
 
77
- const strict = new Database(
78
- ":memory:",
79
- { strict: true }
80
- );
86
+ const strict = new Database(":memory:", { strict: true });
81
87
 
82
88
  // throws error because of the typo:
83
- const query = strict
84
- .query("SELECT $message;")
85
- .all({ message: "Hello world" });
89
+ const query = strict.query("SELECT $message;").all({ message: "Hello world" });
86
90
 
87
- const notStrict = new Database(
88
- ":memory:"
89
- );
91
+ const notStrict = new Database(":memory:");
90
92
  // does not throw error:
91
- notStrict
92
- .query("SELECT $message;")
93
- .all({ message: "Hello world" });
93
+ notStrict.query("SELECT $message;").all({ message: "Hello world" });
94
94
  ```
95
95
 
96
96
  ### Load via ES module import
97
97
 
98
98
  You can also use an import attribute to load a database.
99
99
 
100
- ```ts
101
- import db from "./mydb.sqlite" with { "type": "sqlite" };
100
+ ```ts db.ts icon="/icons/typescript.svg" highlight={1}
101
+ import db from "./mydb.sqlite" with { type: "sqlite" };
102
102
 
103
103
  console.log(db.query("select * from users LIMIT 1").get());
104
104
  ```
105
105
 
106
106
  This is equivalent to the following:
107
107
 
108
- ```ts
108
+ ```ts db.ts icon="/icons/typescript.svg"
109
109
  import { Database } from "bun:sqlite";
110
110
  const db = new Database("./mydb.sqlite");
111
111
  ```
@@ -114,7 +114,7 @@ const db = new Database("./mydb.sqlite");
114
114
 
115
115
  To close a database connection, but allow existing queries to finish, call `.close(false)`:
116
116
 
117
- ```ts
117
+ ```ts db.ts icon="/icons/typescript.svg" highlight={3}
118
118
  const db = new Database();
119
119
  // ... do stuff
120
120
  db.close(false);
@@ -122,33 +122,40 @@ db.close(false);
122
122
 
123
123
  To close the database and throw an error if there are any pending queries, call `.close(true)`:
124
124
 
125
- ```ts
125
+ ```ts db.ts icon="/icons/typescript.svg" highlight={3}
126
126
  const db = new Database();
127
127
  // ... do stuff
128
128
  db.close(true);
129
129
  ```
130
130
 
131
- Note: `close(false)` is called automatically when the database is garbage collected. It is safe to call multiple times but has no effect after the first.
131
+ <Note>
132
+ `close(false)` is called automatically when the database is garbage collected. It is safe to call multiple times but
133
+ has no effect after the first.
134
+ </Note>
132
135
 
133
136
  ### `using` statement
134
137
 
135
138
  You can use the `using` statement to ensure that a database connection is closed when the `using` block is exited.
136
139
 
137
- ```ts
140
+ ```ts db.ts icon="/icons/typescript.svg" highlight={4, 5}
138
141
  import { Database } from "bun:sqlite";
139
142
 
140
143
  {
141
144
  using db = new Database("mydb.sqlite");
142
145
  using query = db.query("select 'Hello world' as message;");
143
- console.log(query.get()); // => { message: "Hello world" }
146
+ console.log(query.get());
144
147
  }
145
148
  ```
146
149
 
150
+ ```txt
151
+ { message: "Hello world" }
152
+ ```
153
+
147
154
  ### `.serialize()`
148
155
 
149
156
  `bun:sqlite` supports SQLite's built-in mechanism for [serializing](https://www.sqlite.org/c3ref/serialize.html) and [deserializing](https://www.sqlite.org/c3ref/deserialize.html) databases to and from memory.
150
157
 
151
- ```ts
158
+ ```ts db.ts icon="/icons/typescript.svg" highlight={2}
152
159
  const olddb = new Database("mydb.sqlite");
153
160
  const contents = olddb.serialize(); // => Uint8Array
154
161
  const newdb = Database.deserialize(contents);
@@ -160,20 +167,21 @@ Internally, `.serialize()` calls [`sqlite3_serialize`](https://www.sqlite.org/c3
160
167
 
161
168
  Use the `db.query()` method on your `Database` instance to [prepare](https://www.sqlite.org/c3ref/prepare.html) a SQL query. The result is a `Statement` instance that will be cached on the `Database` instance. _The query will not be executed._
162
169
 
163
- ```ts
170
+ ```ts db.ts icon="/icons/typescript.svg"
164
171
  const query = db.query(`select "Hello world" as message`);
165
172
  ```
166
173
 
167
- {% callout %}
174
+ <Note>
175
+ Use the `.prepare()` method to prepare a query _without_ caching it on the `Database` instance.
168
176
 
169
- **Note** — Use the `.prepare()` method to prepare a query _without_ caching it on the `Database` instance.
177
+ ```ts
178
+ // compile the prepared statement
179
+ const query = db.prepare("SELECT * FROM foo WHERE bar = ?");
180
+ ```
170
181
 
171
- ```ts
172
- // compile the prepared statement
173
- const query = db.prepare("SELECT * FROM foo WHERE bar = ?");
174
- ```
182
+ </Note>
175
183
 
176
- {% /callout %}
184
+ ---
177
185
 
178
186
  ## WAL mode
179
187
 
@@ -181,15 +189,18 @@ SQLite supports [write-ahead log mode](https://www.sqlite.org/wal.html) (WAL) wh
181
189
 
182
190
  To enable WAL mode, run this pragma query at the beginning of your application:
183
191
 
184
- ```ts
192
+ ```ts db.ts icon="/icons/typescript.svg"
185
193
  db.exec("PRAGMA journal_mode = WAL;");
186
194
  ```
187
195
 
188
- {% details summary="What is WAL mode" %}
196
+ <Accordion title="What is WAL mode?">
189
197
  In WAL mode, writes to the database are written directly to a separate file called the "WAL file" (write-ahead log). This file will be later integrated into the main database file. Think of it as a buffer for pending writes. Refer to the [SQLite docs](https://www.sqlite.org/wal.html) for a more detailed overview.
190
198
 
191
199
  On macOS, WAL files may be persistent by default. This is not a bug, it is how macOS configured the system version of SQLite.
192
- {% /details %}
200
+
201
+ </Accordion>
202
+
203
+ ---
193
204
 
194
205
  ## Statements
195
206
 
@@ -197,13 +208,13 @@ A `Statement` is a _prepared query_, which means it's been parsed and compiled i
197
208
 
198
209
  Create a statement with the `.query` method on your `Database` instance.
199
210
 
200
- ```ts
211
+ ```ts db.ts icon="/icons/typescript.svg"
201
212
  const query = db.query(`select "Hello world" as message`);
202
213
  ```
203
214
 
204
215
  Queries can contain parameters. These can be numerical (`?1`) or named (`$param` or `:param` or `@param`).
205
216
 
206
- ```ts
217
+ ```ts db.ts icon="/icons/typescript.svg"
207
218
  const query = db.query(`SELECT ?1, ?2;`);
208
219
  const query = db.query(`SELECT $param1, $param2;`);
209
220
  ```
@@ -214,32 +225,28 @@ Values are bound to these parameters when the query is executed. A `Statement` c
214
225
 
215
226
  To bind values to a statement, pass an object to the `.all()`, `.get()`, `.run()`, or `.values()` method.
216
227
 
217
- ```ts
228
+ ```ts db.ts icon="/icons/typescript.svg" highlight={2}
218
229
  const query = db.query(`select $message;`);
219
230
  query.all({ $message: "Hello world" });
220
231
  ```
221
232
 
222
233
  You can bind using positional parameters too:
223
234
 
224
- ```ts
235
+ ```ts db.ts icon="/icons/typescript.svg"
225
236
  const query = db.query(`select ?1;`);
226
237
  query.all("Hello world");
227
238
  ```
228
239
 
229
240
  #### `strict: true` lets you bind values without prefixes
230
241
 
231
- {% callout %}
232
- Added in Bun v1.1.14
233
- {% /callout %}
234
-
235
242
  By default, the `$`, `:`, and `@` prefixes are **included** when binding values to named parameters. To bind without these prefixes, use the `strict` option in the `Database` constructor.
236
243
 
237
- ```ts
244
+ ```ts db.ts icon="/icons/typescript.svg"
238
245
  import { Database } from "bun:sqlite";
239
246
 
240
247
  const db = new Database(":memory:", {
241
248
  // bind values without prefixes
242
- strict: true,
249
+ strict: true, // [!code ++]
243
250
  });
244
251
 
245
252
  const query = db.query(`select $message;`);
@@ -255,10 +262,13 @@ query.all({ message: "Hello world" });
255
262
 
256
263
  Use `.all()` to run a query and get back the results as an array of objects.
257
264
 
258
- ```ts
265
+ ```ts db.ts icon="/icons/typescript.svg" highlight={2}
259
266
  const query = db.query(`select $message;`);
260
267
  query.all({ $message: "Hello world" });
261
- // => [{ message: "Hello world" }]
268
+ ```
269
+
270
+ ```txt
271
+ [{ message: "Hello world" }]
262
272
  ```
263
273
 
264
274
  Internally, this calls [`sqlite3_reset`](https://www.sqlite.org/capi3ref.html#sqlite3_reset) and repeatedly calls [`sqlite3_step`](https://www.sqlite.org/capi3ref.html#sqlite3_step) until it returns `SQLITE_DONE`.
@@ -267,10 +277,13 @@ Internally, this calls [`sqlite3_reset`](https://www.sqlite.org/capi3ref.html#sq
267
277
 
268
278
  Use `.get()` to run a query and get back the first result as an object.
269
279
 
270
- ```ts
280
+ ```ts db.ts icon="/icons/typescript.svg" highlight={2}
271
281
  const query = db.query(`select $message;`);
272
282
  query.get({ $message: "Hello world" });
273
- // => { $message: "Hello world" }
283
+ ```
284
+
285
+ ```txt
286
+ { $message: "Hello world" }
274
287
  ```
275
288
 
276
289
  Internally, this calls [`sqlite3_reset`](https://www.sqlite.org/capi3ref.html#sqlite3_reset) followed by [`sqlite3_step`](https://www.sqlite.org/capi3ref.html#sqlite3_step) until it no longer returns `SQLITE_ROW`. If the query returns no rows, `undefined` is returned.
@@ -279,32 +292,27 @@ Internally, this calls [`sqlite3_reset`](https://www.sqlite.org/capi3ref.html#sq
279
292
 
280
293
  Use `.run()` to run a query and get back `undefined`. This is useful for schema-modifying queries (e.g. `CREATE TABLE`) or bulk write operations.
281
294
 
282
- ```ts
295
+ ```ts db.ts icon="/icons/typescript.svg" highlight={2}
283
296
  const query = db.query(`create table foo;`);
284
297
  query.run();
285
- // {
286
- // lastInsertRowid: 0,
287
- // changes: 0,
288
- // }
289
298
  ```
290
299
 
291
- Internally, this calls [`sqlite3_reset`](https://www.sqlite.org/capi3ref.html#sqlite3_reset) and calls [`sqlite3_step`](https://www.sqlite.org/capi3ref.html#sqlite3_step) once. Stepping through all the rows is not necessary when you don't care about the results.
300
+ ```txt
301
+ {
302
+ lastInsertRowid: 0,
303
+ changes: 0,
304
+ }
305
+ ```
292
306
 
293
- {% callout %}
294
- Since Bun v1.1.14, `.run()` returns an object with two properties: `lastInsertRowid` and `changes`.
295
- {% /callout %}
307
+ Internally, this calls [`sqlite3_reset`](https://www.sqlite.org/capi3ref.html#sqlite3_reset) and calls [`sqlite3_step`](https://www.sqlite.org/capi3ref.html#sqlite3_step) once. Stepping through all the rows is not necessary when you don't care about the results.
296
308
 
297
309
  The `lastInsertRowid` property returns the ID of the last row inserted into the database. The `changes` property is the number of rows affected by the query.
298
310
 
299
311
  ### `.as(Class)` - Map query results to a class
300
312
 
301
- {% callout %}
302
- Added in Bun v1.1.14
303
- {% /callout %}
304
-
305
313
  Use `.as(Class)` to run a query and get back the results as instances of a class. This lets you attach methods & getters/setters to results.
306
314
 
307
- ```ts
315
+ ```ts db.ts icon="/icons/typescript.svg" highlight={10}
308
316
  class Movie {
309
317
  title: string;
310
318
  year: number;
@@ -317,8 +325,14 @@ class Movie {
317
325
  const query = db.query("SELECT title, year FROM movies").as(Movie);
318
326
  const movies = query.all();
319
327
  const first = query.get();
320
- console.log(movies[0].isMarvel); // => true
321
- console.log(first.isMarvel); // => true
328
+
329
+ console.log(movies[0].isMarvel);
330
+ console.log(first.isMarvel);
331
+ ```
332
+
333
+ ```txt
334
+ true
335
+ true
322
336
  ```
323
337
 
324
338
  As a performance optimization, the class constructor is not called, default initializers are not run, and private fields are not accessible. This is more like using `Object.create` than `new`. The class's prototype is assigned to the object, methods are attached, and getters/setters are set up, but the constructor is not called.
@@ -329,7 +343,7 @@ The database columns are set as properties on the class instance.
329
343
 
330
344
  Use `.iterate()` to run a query and incrementally return results. This is useful for large result sets that you want to process one row at a time without loading all the results into memory.
331
345
 
332
- ```ts
346
+ ```ts db.ts icon="/icons/typescript.svg" highlight={2}
333
347
  const query = db.query("SELECT * FROM foo");
334
348
  for (const row of query.iterate()) {
335
349
  console.log(row);
@@ -338,7 +352,7 @@ for (const row of query.iterate()) {
338
352
 
339
353
  You can also use the `@@iterator` protocol:
340
354
 
341
- ```ts
355
+ ```ts db.ts icon="/icons/typescript.svg" highlight={2}
342
356
  const query = db.query("SELECT * FROM foo");
343
357
  for (const row of query) {
344
358
  console.log(row);
@@ -351,16 +365,19 @@ This feature was added in Bun v1.1.31.
351
365
 
352
366
  Use `values()` to run a query and get back all results as an array of arrays.
353
367
 
354
- ```ts
368
+ ```ts db.ts icon="/icons/typescript.svg" highlight={3, 4}
355
369
  const query = db.query(`select $message;`);
356
- query.values({ $message: "Hello world" });
357
370
 
371
+ query.values({ $message: "Hello world" });
358
372
  query.values(2);
359
- // [
360
- // [ "Iron Man", 2008 ],
361
- // [ "The Avengers", 2012 ],
362
- // [ "Ant-Man: Quantumania", 2023 ],
363
- // ]
373
+ ```
374
+
375
+ ```txt
376
+ [
377
+ [ "Iron Man", 2008 ],
378
+ [ "The Avengers", 2012 ],
379
+ [ "Ant-Man: Quantumania", 2023 ],
380
+ ]
364
381
  ```
365
382
 
366
383
  Internally, this calls [`sqlite3_reset`](https://www.sqlite.org/capi3ref.html#sqlite3_reset) and repeatedly calls [`sqlite3_step`](https://www.sqlite.org/capi3ref.html#sqlite3_step) until it returns `SQLITE_DONE`.
@@ -369,7 +386,7 @@ Internally, this calls [`sqlite3_reset`](https://www.sqlite.org/capi3ref.html#sq
369
386
 
370
387
  Use `.finalize()` to destroy a `Statement` and free any resources associated with it. Once finalized, a `Statement` cannot be executed again. Typically, the garbage collector will do this for you, but explicit finalization may be useful in performance-sensitive applications.
371
388
 
372
- ```ts
389
+ ```ts db.ts icon="/icons/typescript.svg" highlight={3}
373
390
  const query = db.query("SELECT title, year FROM movies");
374
391
  const movies = query.all();
375
392
  query.finalize();
@@ -379,7 +396,7 @@ query.finalize();
379
396
 
380
397
  Calling `toString()` on a `Statement` instance prints the expanded SQL query. This is useful for debugging.
381
398
 
382
- ```ts
399
+ ```ts db.ts icon="/icons/typescript.svg" highlight={6, 9, 12}
383
400
  import { Database } from "bun:sqlite";
384
401
 
385
402
  // setup
@@ -400,42 +417,34 @@ Internally, this calls [`sqlite3_expanded_sql`](https://www.sqlite.org/capi3ref.
400
417
 
401
418
  Queries can contain parameters. These can be numerical (`?1`) or named (`$param` or `:param` or `@param`). Bind values to these parameters when executing the query:
402
419
 
403
- {% codetabs %}
404
-
405
- ```ts#Query
420
+ ```ts title="query.ts" icon="/icons/typescript.svg"
406
421
  const query = db.query("SELECT * FROM foo WHERE bar = $bar");
407
422
  const results = query.all({
408
423
  $bar: "bar",
409
424
  });
410
425
  ```
411
426
 
412
- ```json#Results
413
- [
414
- { "$bar": "bar" }
415
- ]
427
+ ```txt
428
+ [{ "$bar": "bar" }]
416
429
  ```
417
430
 
418
- {% /codetabs %}
419
-
420
431
  Numbered (positional) parameters work too:
421
432
 
422
- {% codetabs %}
423
-
424
- ```ts#Query
433
+ ```ts db.ts icon="/icons/typescript.svg"
425
434
  const query = db.query("SELECT ?1, ?2");
426
435
  const results = query.all("hello", "goodbye");
427
436
  ```
428
437
 
429
- ```ts#Results
438
+ ```txt
430
439
  [
431
- {
432
- "?1": "hello",
433
- "?2": "goodbye"
434
- }
435
- ]
440
+ {
441
+ "?1": "hello",
442
+ "?2": "goodbye",
443
+ },
444
+ ];
436
445
  ```
437
446
 
438
- {% /codetabs %}
447
+ ---
439
448
 
440
449
  ## Integers
441
450
 
@@ -447,26 +456,25 @@ By default, `bun:sqlite` returns integers as `number` types. If you need to hand
447
456
 
448
457
  ### `safeIntegers: true`
449
458
 
450
- {% callout %}
451
- Added in Bun v1.1.14
452
- {% /callout %}
453
-
454
459
  When `safeIntegers` is `true`, `bun:sqlite` will return integers as `bigint` types:
455
460
 
456
- ```ts
461
+ ```ts db.ts icon="/icons/typescript.svg" highlight={3}
457
462
  import { Database } from "bun:sqlite";
458
463
 
459
464
  const db = new Database(":memory:", { safeIntegers: true });
460
- const query = db.query(
461
- `SELECT ${BigInt(Number.MAX_SAFE_INTEGER) + 102n} as max_int`,
462
- );
465
+ const query = db.query(`SELECT ${BigInt(Number.MAX_SAFE_INTEGER) + 102n} as max_int`);
463
466
  const result = query.get();
464
- console.log(result.max_int); // => 9007199254741093n
467
+
468
+ console.log(result.max_int);
469
+ ```
470
+
471
+ ```txt
472
+ 9007199254741093n
465
473
  ```
466
474
 
467
475
  When `safeIntegers` is `true`, `bun:sqlite` will throw an error if a `bigint` value in a bound parameter exceeds 64 bits:
468
476
 
469
- ```ts
477
+ ```ts db.ts icon="/icons/typescript.svg" highlight={3}
470
478
  import { Database } from "bun:sqlite";
471
479
 
472
480
  const db = new Database(":memory:", { safeIntegers: true });
@@ -477,30 +485,38 @@ const query = db.query("INSERT INTO test (value) VALUES ($value)");
477
485
  try {
478
486
  query.run({ $value: BigInt(Number.MAX_SAFE_INTEGER) ** 2n });
479
487
  } catch (e) {
480
- console.log(e.message); // => BigInt value '81129638414606663681390495662081' is out of range
488
+ console.log(e.message);
481
489
  }
482
490
  ```
483
491
 
492
+ ```txt
493
+ BigInt value '81129638414606663681390495662081' is out of range
494
+ ```
495
+
484
496
  ### `safeIntegers: false` (default)
485
497
 
486
498
  When `safeIntegers` is `false`, `bun:sqlite` will return integers as `number` types and truncate any bits beyond 53:
487
499
 
488
- ```ts
500
+ ```ts db.ts icon="/icons/typescript.svg" highlight={3}
489
501
  import { Database } from "bun:sqlite";
490
502
 
491
503
  const db = new Database(":memory:", { safeIntegers: false });
492
- const query = db.query(
493
- `SELECT ${BigInt(Number.MAX_SAFE_INTEGER) + 102n} as max_int`,
494
- );
504
+ const query = db.query(`SELECT ${BigInt(Number.MAX_SAFE_INTEGER) + 102n} as max_int`);
495
505
  const result = query.get();
496
- console.log(result.max_int); // => 9007199254741092
506
+ console.log(result.max_int);
507
+ ```
508
+
509
+ ```txt
510
+ 9007199254741092
497
511
  ```
498
512
 
513
+ ---
514
+
499
515
  ## Transactions
500
516
 
501
517
  Transactions are a mechanism for executing multiple queries in an _atomic_ way; that is, either all of the queries succeed or none of them do. Create a transaction with the `db.transaction()` method:
502
518
 
503
- ```ts
519
+ ```ts db.ts icon="/icons/typescript.svg" highlight={2}
504
520
  const insertCat = db.prepare("INSERT INTO cats (name) VALUES ($name)");
505
521
  const insertCats = db.transaction(cats => {
506
522
  for (const cat of cats) insertCat.run(cat);
@@ -511,42 +527,32 @@ At this stage, we haven't inserted any cats! The call to `db.transaction()` retu
511
527
 
512
528
  To execute the transaction, call this function. All arguments will be passed through to the wrapped function; the return value of the wrapped function will be returned by the transaction function. The wrapped function also has access to the `this` context as defined where the transaction is executed.
513
529
 
514
- ```ts
530
+ ```ts db.ts icon="/icons/typescript.svg" highlight={3}
515
531
  const insert = db.prepare("INSERT INTO cats (name) VALUES ($name)");
516
532
  const insertCats = db.transaction(cats => {
517
533
  for (const cat of cats) insert.run(cat);
518
534
  return cats.length;
519
535
  });
520
536
 
521
- const count = insertCats([
522
- { $name: "Keanu" },
523
- { $name: "Salem" },
524
- { $name: "Crookshanks" },
525
- ]);
537
+ const count = insertCats([{ $name: "Keanu" }, { $name: "Salem" }, { $name: "Crookshanks" }]);
526
538
 
527
539
  console.log(`Inserted ${count} cats`);
528
540
  ```
529
541
 
530
542
  The driver will automatically [`begin`](https://www.sqlite.org/lang_transaction.html) a transaction when `insertCats` is called and `commit` it when the wrapped function returns. If an exception is thrown, the transaction will be rolled back. The exception will propagate as usual; it is not caught.
531
543
 
532
- {% callout %}
544
+ <Note>
533
545
  **Nested transactions** — Transaction functions can be called from inside other transaction functions. When doing so, the inner transaction becomes a [savepoint](https://www.sqlite.org/lang_savepoint.html).
534
546
 
535
- {% details summary="View nested transaction example" %}
547
+ <Accordion title="View nested transaction example">
536
548
 
537
- ```ts
549
+ ```ts db.ts icon="/icons/typescript.svg"
538
550
  // setup
539
551
  import { Database } from "bun:sqlite";
540
552
  const db = Database.open(":memory:");
541
- db.run(
542
- "CREATE TABLE expenses (id INTEGER PRIMARY KEY AUTOINCREMENT, note TEXT, dollars INTEGER);",
543
- );
544
- db.run(
545
- "CREATE TABLE cats (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE, age INTEGER)",
546
- );
547
- const insertExpense = db.prepare(
548
- "INSERT INTO expenses (note, dollars) VALUES (?, ?)",
549
- );
553
+ db.run("CREATE TABLE expenses (id INTEGER PRIMARY KEY AUTOINCREMENT, note TEXT, dollars INTEGER);");
554
+ db.run("CREATE TABLE cats (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT UNIQUE, age INTEGER)");
555
+ const insertExpense = db.prepare("INSERT INTO expenses (note, dollars) VALUES (?, ?)");
550
556
  const insert = db.prepare("INSERT INTO cats (name, age) VALUES ($name, $age)");
551
557
  const insertCats = db.transaction(cats => {
552
558
  for (const cat of cats) insert.run(cat);
@@ -564,8 +570,8 @@ adopt([
564
570
  ]);
565
571
  ```
566
572
 
567
- {% /details %}
568
- {% /callout %}
573
+ </Accordion>
574
+ </Note>
569
575
 
570
576
  Transactions also come with `deferred`, `immediate`, and `exclusive` versions.
571
577
 
@@ -580,24 +586,24 @@ insertCats.exclusive(cats); // uses "BEGIN EXCLUSIVE"
580
586
 
581
587
  To load a [SQLite extension](https://www.sqlite.org/loadext.html), call `.loadExtension(name)` on your `Database` instance
582
588
 
583
- ```ts
589
+ ```ts db.ts icon="/icons/typescript.svg" highlight={4}
584
590
  import { Database } from "bun:sqlite";
585
591
 
586
592
  const db = new Database();
587
593
  db.loadExtension("myext");
588
594
  ```
589
595
 
590
- {% details summary="For macOS users" %}
596
+ <Note>
591
597
  **MacOS users** By default, macOS ships with Apple's proprietary build of SQLite, which doesn't support extensions. To use extensions, you'll need to install a vanilla build of SQLite.
592
598
 
593
- ```bash
594
- $ brew install sqlite
595
- $ which sqlite # get path to binary
599
+ ```bash terminal icon="terminal"
600
+ brew install sqlite
601
+ which sqlite # get path to binary
596
602
  ```
597
603
 
598
604
  To point `bun:sqlite` to the new build, call `Database.setCustomSQLite(path)` before creating any `Database` instances. (On other operating systems, this is a no-op.) Pass a path to the SQLite `.dylib` file, _not_ the executable. With recent versions of Homebrew this is something like `/opt/homebrew/Cellar/sqlite/<version>/libsqlite3.dylib`.
599
605
 
600
- ```ts
606
+ ```ts db.ts icon="/icons/typescript.svg" highlight={3}
601
607
  import { Database } from "bun:sqlite";
602
608
 
603
609
  Database.setCustomSQLite("/path/to/libsqlite.dylib");
@@ -606,13 +612,13 @@ const db = new Database();
606
612
  db.loadExtension("myext");
607
613
  ```
608
614
 
609
- {% /details %}
615
+ </Note>
610
616
 
611
- ### .fileControl(cmd: number, value: any)
617
+ ### `.fileControl(cmd: number, value: any)`
612
618
 
613
619
  To use the advanced `sqlite3_file_control` API, call `.fileControl(cmd, value)` on your `Database` instance.
614
620
 
615
- ```ts
621
+ ```ts db.ts icon="/icons/typescript.svg" highlight={6}
616
622
  import { Database, constants } from "bun:sqlite";
617
623
 
618
624
  const db = new Database();
@@ -627,9 +633,11 @@ db.fileControl(constants.SQLITE_FCNTL_PERSIST_WAL, 0);
627
633
  - `TypedArray`
628
634
  - `undefined` or `null`
629
635
 
636
+ ---
637
+
630
638
  ## Reference
631
639
 
632
- ```ts
640
+ ```ts Type Reference icon="/icons/typescript.svg" expandable
633
641
  class Database {
634
642
  constructor(
635
643
  filename: string,
@@ -643,10 +651,7 @@ class Database {
643
651
  );
644
652
 
645
653
  query<Params, ReturnType>(sql: string): Statement<Params, ReturnType>;
646
- run(
647
- sql: string,
648
- params?: SQLQueryBindings,
649
- ): { lastInsertRowid: number; changes: number };
654
+ run(sql: string, params?: SQLQueryBindings): { lastInsertRowid: number; changes: number };
650
655
  exec = this.run;
651
656
  }
652
657