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.
- package/bun.d.ts +102 -6
- package/docs/README.md +28 -0
- package/docs/bundler/bytecode.mdx +465 -0
- package/docs/bundler/{css.md → css.mdx} +97 -101
- package/docs/bundler/esbuild.mdx +253 -0
- package/docs/bundler/{executables.md → executables.mdx} +130 -221
- package/docs/bundler/fullstack.mdx +1064 -0
- package/docs/bundler/{hmr.md → hot-reloading.mdx} +74 -79
- package/docs/bundler/{html.md → html-static.mdx} +148 -111
- package/docs/bundler/index.mdx +1499 -0
- package/docs/bundler/loaders.mdx +356 -0
- package/docs/bundler/{macros.md → macros.mdx} +83 -84
- package/docs/bundler/minifier.mdx +1306 -0
- package/docs/bundler/plugins.mdx +411 -0
- package/docs/feedback.mdx +85 -0
- package/docs/guides/binary/{arraybuffer-to-array.md → arraybuffer-to-array.mdx} +3 -1
- package/docs/guides/binary/{arraybuffer-to-blob.md → arraybuffer-to-blob.mdx} +3 -1
- package/docs/guides/binary/{arraybuffer-to-buffer.md → arraybuffer-to-buffer.mdx} +3 -1
- package/docs/guides/binary/{arraybuffer-to-string.md → arraybuffer-to-string.mdx} +3 -1
- package/docs/guides/binary/{arraybuffer-to-typedarray.md → arraybuffer-to-typedarray.mdx} +3 -1
- package/docs/guides/binary/{blob-to-arraybuffer.md → blob-to-arraybuffer.mdx} +3 -1
- package/docs/guides/binary/{blob-to-dataview.md → blob-to-dataview.mdx} +3 -1
- package/docs/guides/binary/{blob-to-stream.md → blob-to-stream.mdx} +3 -1
- package/docs/guides/binary/{blob-to-string.md → blob-to-string.mdx} +3 -1
- package/docs/guides/binary/{blob-to-typedarray.md → blob-to-typedarray.mdx} +3 -1
- package/docs/guides/binary/{buffer-to-arraybuffer.md → buffer-to-arraybuffer.mdx} +3 -1
- package/docs/guides/binary/{buffer-to-blob.md → buffer-to-blob.mdx} +3 -1
- package/docs/guides/binary/{buffer-to-readablestream.md → buffer-to-readablestream.mdx} +3 -1
- package/docs/guides/binary/{buffer-to-string.md → buffer-to-string.mdx} +3 -1
- package/docs/guides/binary/{buffer-to-typedarray.md → buffer-to-typedarray.mdx} +3 -1
- package/docs/guides/binary/{dataview-to-string.md → dataview-to-string.mdx} +3 -1
- package/docs/guides/binary/{typedarray-to-arraybuffer.md → typedarray-to-arraybuffer.mdx} +3 -1
- package/docs/guides/binary/{typedarray-to-blob.md → typedarray-to-blob.mdx} +3 -1
- package/docs/guides/binary/{typedarray-to-buffer.md → typedarray-to-buffer.mdx} +3 -1
- package/docs/guides/binary/{typedarray-to-dataview.md → typedarray-to-dataview.mdx} +3 -1
- package/docs/guides/binary/{typedarray-to-readablestream.md → typedarray-to-readablestream.mdx} +3 -1
- package/docs/guides/binary/{typedarray-to-string.md → typedarray-to-string.mdx} +3 -1
- package/docs/guides/deployment/aws-lambda.mdx +204 -0
- package/docs/guides/deployment/digital-ocean.mdx +161 -0
- package/docs/guides/deployment/google-cloud-run.mdx +197 -0
- package/docs/guides/deployment/{railway.md → railway.mdx} +42 -54
- package/docs/guides/deployment/render.mdx +82 -0
- package/docs/guides/deployment/vercel.mdx +99 -0
- package/docs/guides/ecosystem/{astro.md → astro.mdx} +16 -6
- package/docs/guides/ecosystem/{discordjs.md → discordjs.mdx} +21 -18
- package/docs/guides/ecosystem/{docker.md → docker.mdx} +25 -14
- package/docs/guides/ecosystem/{drizzle.md → drizzle.mdx} +32 -22
- package/docs/guides/ecosystem/{edgedb.md → edgedb.mdx} +63 -34
- package/docs/guides/ecosystem/{elysia.md → elysia.mdx} +11 -11
- package/docs/guides/ecosystem/{express.md → express.mdx} +12 -9
- package/docs/guides/ecosystem/{hono.md → hono.mdx} +16 -8
- package/docs/guides/ecosystem/{mongoose.md → mongoose.mdx} +26 -21
- package/docs/guides/ecosystem/{neon-drizzle.md → neon-drizzle.mdx} +49 -35
- package/docs/guides/ecosystem/{neon-serverless-postgres.md → neon-serverless-postgres.mdx} +16 -11
- package/docs/guides/ecosystem/{nextjs.md → nextjs.mdx} +18 -10
- package/docs/guides/ecosystem/{nuxt.md → nuxt.mdx} +45 -11
- package/docs/guides/ecosystem/{pm2.md → pm2.mdx} +7 -9
- package/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
- package/docs/guides/ecosystem/prisma.mdx +164 -0
- package/docs/guides/ecosystem/{qwik.md → qwik.mdx} +18 -11
- package/docs/guides/ecosystem/{react.md → react.mdx} +9 -7
- package/docs/guides/ecosystem/{remix.md → remix.mdx} +45 -26
- package/docs/guides/ecosystem/{sentry.md → sentry.mdx} +7 -5
- package/docs/guides/ecosystem/{solidstart.md → solidstart.mdx} +21 -13
- package/docs/guides/ecosystem/{ssr-react.md → ssr-react.mdx} +9 -11
- package/docs/guides/ecosystem/{stric.md → stric.mdx} +16 -17
- package/docs/guides/ecosystem/{sveltekit.md → sveltekit.mdx} +42 -29
- package/docs/guides/ecosystem/{systemd.md → systemd.mdx} +27 -26
- package/docs/guides/ecosystem/upstash.mdx +87 -0
- package/docs/guides/ecosystem/{vite.md → vite.mdx} +20 -14
- package/docs/guides/html-rewriter/{extract-links.md → extract-links.mdx} +11 -7
- package/docs/guides/html-rewriter/{extract-social-meta.md → extract-social-meta.mdx} +6 -2
- package/docs/guides/http/{cluster.md → cluster.mdx} +10 -7
- package/docs/guides/http/{fetch-unix.md → fetch-unix.mdx} +5 -3
- package/docs/guides/http/{fetch.md → fetch.mdx} +5 -3
- package/docs/guides/http/{file-uploads.md → file-uploads.mdx} +18 -15
- package/docs/guides/http/{hot.md → hot.mdx} +9 -7
- package/docs/guides/http/{proxy.md → proxy.mdx} +7 -5
- package/docs/guides/http/{server.md → server.mdx} +4 -2
- package/docs/guides/http/{simple.md → simple.mdx} +4 -2
- package/docs/guides/http/{stream-file.md → stream-file.mdx} +6 -4
- package/docs/guides/http/{stream-iterator.md → stream-iterator.mdx} +5 -3
- package/docs/guides/http/{stream-node-streams-in-bun.md → stream-node-streams-in-bun.mdx} +4 -2
- package/docs/guides/http/{tls.md → tls.mdx} +5 -3
- package/docs/guides/index.mdx +10 -0
- package/docs/guides/install/{add-dev.md → add-dev.mdx} +8 -6
- package/docs/guides/install/add-git.mdx +38 -0
- package/docs/guides/install/{add-optional.md → add-optional.mdx} +7 -5
- package/docs/guides/install/{add-peer.md → add-peer.mdx} +13 -11
- package/docs/guides/install/{add-tarball.md → add-tarball.mdx} +7 -5
- package/docs/guides/install/{add.md → add.mdx} +12 -10
- package/docs/guides/install/{azure-artifacts.md → azure-artifacts.mdx} +15 -12
- package/docs/guides/{runtime/cicd.md → install/cicd.mdx} +13 -13
- package/docs/guides/install/{custom-registry.md → custom-registry.mdx} +6 -4
- package/docs/guides/install/{from-npm-install-to-bun-install.md → from-npm-install-to-bun-install.mdx} +50 -34
- package/docs/guides/install/{git-diff-bun-lockfile.md → git-diff-bun-lockfile.mdx} +14 -11
- package/docs/guides/install/{jfrog-artifactory.md → jfrog-artifactory.mdx} +4 -4
- package/docs/guides/install/{npm-alias.md → npm-alias.mdx} +6 -4
- package/docs/guides/install/{registry-scope.md → registry-scope.mdx} +6 -4
- package/docs/guides/install/{trusted.md → trusted.mdx} +22 -18
- package/docs/guides/install/{workspaces.md → workspaces.mdx} +13 -13
- package/docs/guides/install/{yarnlock.md → yarnlock.mdx} +15 -9
- package/docs/guides/process/{argv.md → argv.mdx} +17 -9
- package/docs/guides/process/{ctrl-c.md → ctrl-c.mdx} +4 -2
- package/docs/guides/process/{ipc.md → ipc.mdx} +13 -10
- package/docs/guides/process/{nanoseconds.md → nanoseconds.mdx} +3 -1
- package/docs/guides/process/{os-signals.md → os-signals.mdx} +3 -1
- package/docs/guides/process/{spawn-stderr.md → spawn-stderr.mdx} +4 -1
- package/docs/guides/process/{spawn-stdout.md → spawn-stdout.mdx} +3 -1
- package/docs/guides/process/{spawn.md → spawn.mdx} +3 -1
- package/docs/guides/process/{stdin.md → stdin.mdx} +15 -7
- package/docs/guides/read-file/{arraybuffer.md → arraybuffer.mdx} +5 -3
- package/docs/guides/read-file/{buffer.md → buffer.mdx} +4 -2
- package/docs/guides/read-file/{exists.md → exists.mdx} +4 -2
- package/docs/guides/read-file/{json.md → json.mdx} +4 -2
- package/docs/guides/read-file/{mime.md → mime.mdx} +3 -1
- package/docs/guides/read-file/{stream.md → stream.mdx} +3 -1
- package/docs/guides/read-file/{string.md → string.mdx} +3 -1
- package/docs/guides/read-file/{uint8array.md → uint8array.mdx} +3 -1
- package/docs/guides/read-file/{watch.md → watch.mdx} +6 -8
- package/docs/guides/runtime/{build-time-constants.md → build-time-constants.mdx} +24 -22
- package/docs/guides/{install/cicd.md → runtime/cicd.mdx} +11 -7
- package/docs/guides/runtime/{codesign-macos-executable.md → codesign-macos-executable.mdx} +14 -9
- package/docs/guides/runtime/{define-constant.md → define-constant.mdx} +20 -16
- package/docs/guides/runtime/{delete-directory.md → delete-directory.mdx} +5 -3
- package/docs/guides/runtime/{delete-file.md → delete-file.mdx} +4 -2
- package/docs/guides/runtime/{heap-snapshot.md → heap-snapshot.mdx} +5 -3
- package/docs/guides/runtime/{import-html.md → import-html.mdx} +4 -2
- package/docs/guides/runtime/{import-json.md → import-json.mdx} +6 -4
- package/docs/guides/runtime/{import-toml.md → import-toml.mdx} +5 -3
- package/docs/guides/runtime/{import-yaml.md → import-yaml.mdx} +9 -7
- package/docs/guides/runtime/{read-env.md → read-env.mdx} +10 -5
- package/docs/guides/runtime/{set-env.md → set-env.mdx} +14 -10
- package/docs/guides/runtime/{shell.md → shell.mdx} +6 -4
- package/docs/guides/runtime/{timezone.md → timezone.mdx} +10 -7
- package/docs/guides/runtime/{tsconfig-paths.md → tsconfig-paths.mdx} +5 -3
- package/docs/guides/runtime/{typescript.md → typescript.mdx} +8 -6
- package/docs/guides/runtime/{vscode-debugger.md → vscode-debugger.mdx} +12 -11
- package/docs/guides/runtime/{web-debugger.md → web-debugger.mdx} +39 -18
- package/docs/guides/streams/{node-readable-to-arraybuffer.md → node-readable-to-arraybuffer.mdx} +3 -1
- package/docs/guides/streams/{node-readable-to-blob.md → node-readable-to-blob.mdx} +3 -1
- package/docs/guides/streams/{node-readable-to-json.md → node-readable-to-json.mdx} +3 -1
- package/docs/guides/streams/{node-readable-to-string.md → node-readable-to-string.mdx} +3 -1
- package/docs/guides/streams/{node-readable-to-uint8array.md → node-readable-to-uint8array.mdx} +3 -1
- package/docs/guides/streams/{to-array.md → to-array.mdx} +3 -1
- package/docs/guides/streams/{to-arraybuffer.md → to-arraybuffer.mdx} +3 -1
- package/docs/guides/streams/{to-blob.md → to-blob.mdx} +3 -1
- package/docs/guides/streams/{to-buffer.md → to-buffer.mdx} +3 -1
- package/docs/guides/streams/{to-json.md → to-json.mdx} +4 -2
- package/docs/guides/streams/{to-string.md → to-string.mdx} +3 -1
- package/docs/guides/streams/{to-typedarray.md → to-typedarray.mdx} +3 -1
- package/docs/guides/test/{bail.md → bail.mdx} +7 -5
- package/docs/guides/test/{coverage-threshold.md → coverage-threshold.mdx} +14 -7
- package/docs/guides/test/{coverage.md → coverage.mdx} +9 -4
- package/docs/guides/test/{happy-dom.md → happy-dom.mdx} +13 -8
- package/docs/guides/test/{migrate-from-jest.md → migrate-from-jest.mdx} +19 -37
- package/docs/guides/test/{mock-clock.md → mock-clock.mdx} +3 -1
- package/docs/guides/test/{mock-functions.md → mock-functions.mdx} +7 -5
- package/docs/guides/test/{rerun-each.md → rerun-each.mdx} +5 -3
- package/docs/guides/test/{run-tests.md → run-tests.mdx} +16 -11
- package/docs/guides/test/{skip-tests.md → skip-tests.mdx} +8 -4
- package/docs/guides/test/{snapshot.md → snapshot.mdx} +20 -13
- package/docs/guides/test/spy-on.mdx +49 -0
- package/docs/guides/test/{svelte-test.md → svelte-test.mdx} +16 -23
- package/docs/guides/test/{testing-library.md → testing-library.mdx} +18 -17
- package/docs/guides/test/{timeout.md → timeout.mdx} +5 -3
- package/docs/guides/test/{todo-tests.md → todo-tests.mdx} +13 -6
- package/docs/guides/test/{update-snapshots.md → update-snapshots.mdx} +9 -6
- package/docs/guides/test/{watch-mode.md → watch-mode.mdx} +9 -4
- package/docs/guides/util/{base64.md → base64.mdx} +3 -1
- package/docs/guides/util/{deep-equals.md → deep-equals.mdx} +5 -3
- package/docs/guides/util/{deflate.md → deflate.mdx} +3 -1
- package/docs/guides/util/{detect-bun.md → detect-bun.mdx} +3 -1
- package/docs/guides/util/{entrypoint.md → entrypoint.mdx} +4 -2
- package/docs/guides/util/{escape-html.md → escape-html.mdx} +3 -1
- package/docs/guides/util/{file-url-to-path.md → file-url-to-path.mdx} +3 -1
- package/docs/guides/util/{gzip.md → gzip.mdx} +3 -1
- package/docs/guides/util/{hash-a-password.md → hash-a-password.mdx} +3 -1
- package/docs/guides/util/{import-meta-dir.md → import-meta-dir.mdx} +4 -2
- package/docs/guides/util/{import-meta-file.md → import-meta-file.mdx} +4 -2
- package/docs/guides/util/{import-meta-path.md → import-meta-path.mdx} +4 -2
- package/docs/guides/util/{javascript-uuid.md → javascript-uuid.mdx} +3 -1
- package/docs/guides/util/{main.md → main.mdx} +19 -8
- package/docs/guides/util/{path-to-file-url.md → path-to-file-url.mdx} +3 -1
- package/docs/guides/util/{sleep.md → sleep.mdx} +3 -1
- package/docs/guides/util/{version.md → version.mdx} +6 -4
- package/docs/guides/util/{which-path-to-executable-bin.md → which-path-to-executable-bin.mdx} +4 -2
- package/docs/guides/websocket/{compression.md → compression.mdx} +5 -3
- package/docs/guides/websocket/{context.md → context.mdx} +9 -12
- package/docs/guides/websocket/{pubsub.md → pubsub.mdx} +5 -6
- package/docs/guides/websocket/{simple.md → simple.mdx} +5 -3
- package/docs/guides/write-file/{append.md → append.mdx} +3 -1
- package/docs/guides/write-file/{basic.md → basic.mdx} +3 -1
- package/docs/guides/write-file/{blob.md → blob.mdx} +3 -1
- package/docs/guides/write-file/{cat.md → cat.mdx} +4 -2
- package/docs/guides/write-file/{file-cp.md → file-cp.mdx} +3 -1
- package/docs/guides/write-file/{filesink.md → filesink.mdx} +3 -1
- package/docs/guides/write-file/{response.md → response.mdx} +3 -1
- package/docs/guides/write-file/{stdout.md → stdout.mdx} +3 -1
- package/docs/guides/write-file/{stream.md → stream.mdx} +3 -1
- package/docs/guides/write-file/{unlink.md → unlink.mdx} +3 -1
- package/docs/{index.md → index.mdx} +97 -41
- package/docs/installation.mdx +365 -0
- package/docs/{cli/bunx.md → pm/bunx.mdx} +25 -31
- package/docs/{install/catalogs.md → pm/catalogs.mdx} +18 -24
- package/docs/{cli/add.md → pm/cli/add.mdx} +61 -55
- package/docs/{install/audit.md → pm/cli/audit.mdx} +11 -8
- package/docs/{cli/install.md → pm/cli/install.mdx} +208 -81
- package/docs/{cli/link.md → pm/cli/link.mdx} +27 -19
- package/docs/{cli/outdated.md → pm/cli/outdated.mdx} +119 -12
- package/docs/{install/patch.md → pm/cli/patch.mdx} +25 -15
- package/docs/{cli/pm.md → pm/cli/pm.mdx} +96 -62
- package/docs/{cli/publish.md → pm/cli/publish.mdx} +38 -35
- package/docs/pm/cli/remove.mdx +16 -0
- package/docs/{cli/update.md → pm/cli/update.mdx} +26 -15
- package/docs/{cli/why.md → pm/cli/why.mdx} +27 -10
- package/docs/{cli/filter.md → pm/filter.mdx} +26 -14
- package/docs/{install/cache.md → pm/global-cache.mdx} +25 -12
- package/docs/{install/isolated.md → pm/isolated-installs.mdx} +32 -24
- package/docs/{install/lifecycle.md → pm/lifecycle.mdx} +20 -9
- package/docs/{install/lockfile.md → pm/lockfile.mdx} +18 -12
- package/docs/{install/npmrc.md → pm/npmrc.mdx} +30 -24
- package/docs/{install/overrides.md → pm/overrides.mdx} +47 -37
- package/docs/{install/registries.md → pm/scopes-registries.mdx} +8 -3
- package/docs/{install/security-scanner-api.md → pm/security-scanner-api.mdx} +22 -8
- package/docs/{install/workspaces.md → pm/workspaces.mdx} +17 -22
- package/docs/project/{benchmarking.md → benchmarking.mdx} +26 -11
- package/docs/project/{bindgen.md → bindgen.mdx} +12 -14
- package/docs/project/{building-windows.md → building-windows.mdx} +18 -47
- package/docs/project/{contributing.md → contributing.mdx} +56 -60
- package/docs/project/feedback.mdx +20 -0
- package/docs/project/license.mdx +78 -0
- package/docs/project/roadmap.mdx +8 -0
- package/docs/quickstart.mdx +240 -0
- package/docs/runtime/{autoimport.md → auto-install.mdx} +34 -31
- package/docs/{api/binary-data.md → runtime/binary-data.mdx} +77 -269
- package/docs/runtime/bun-apis.mdx +59 -0
- package/docs/runtime/{bunfig.md → bunfig.mdx} +95 -225
- package/docs/{api/cc.md → runtime/c-compiler.mdx} +16 -9
- package/docs/{api/spawn.md → runtime/child-process.mdx} +69 -119
- package/docs/{api/color.md → runtime/color.mdx} +6 -1
- package/docs/{api/console.md → runtime/console.mdx} +17 -7
- package/docs/{api/cookie.md → runtime/cookies.mdx} +24 -19
- package/docs/runtime/{debugger.md → debugger.mdx} +61 -51
- package/docs/runtime/environment-variables.mdx +214 -0
- package/docs/{api/ffi.md → runtime/ffi.mdx} +53 -45
- package/docs/{api/file-io.md → runtime/file-io.mdx} +41 -101
- package/docs/{api/file-system-router.md → runtime/file-system-router.mdx} +8 -2
- package/docs/{bundler/loaders.md → runtime/file-types.mdx} +56 -112
- package/docs/{api/glob.md → runtime/glob.mdx} +4 -1
- package/docs/runtime/globals.mdx +72 -0
- package/docs/{api/hashing.md → runtime/hashing.mdx} +18 -22
- package/docs/{api/html-rewriter.md → runtime/html-rewriter.mdx} +36 -30
- package/docs/runtime/http/cookies.mdx +79 -0
- package/docs/runtime/http/error-handling.mdx +40 -0
- package/docs/runtime/http/metrics.mdx +36 -0
- package/docs/runtime/http/routing.mdx +289 -0
- package/docs/runtime/http/server.mdx +647 -0
- package/docs/runtime/http/tls.mdx +101 -0
- package/docs/{api/websockets.md → runtime/http/websockets.mdx} +62 -231
- package/docs/{cli/run.md → runtime/index.mdx} +70 -108
- package/docs/runtime/jsx.mdx +115 -0
- package/docs/runtime/{modules.md → module-resolution.mdx} +83 -61
- package/docs/{api/dns.md → runtime/networking/dns.mdx} +23 -22
- package/docs/{api/fetch.md → runtime/networking/fetch.mdx} +10 -5
- package/docs/{api/tcp.md → runtime/networking/tcp.mdx} +59 -41
- package/docs/{api/udp.md → runtime/networking/udp.mdx} +14 -8
- package/docs/{api/node-api.md → runtime/node-api.mdx} +5 -0
- package/docs/runtime/{nodejs-apis.md → nodejs-compat.mdx} +9 -4
- package/docs/{bundler/plugins.md → runtime/plugins.mdx} +17 -61
- package/docs/{api/redis.md → runtime/redis.mdx} +65 -80
- package/docs/{api/s3.md → runtime/s3.mdx} +79 -66
- package/docs/{api/secrets.md → runtime/secrets.mdx} +27 -10
- package/docs/{api/semver.md → runtime/semver.mdx} +9 -4
- package/docs/runtime/{shell.md → shell.mdx} +52 -20
- package/docs/{api/sql.md → runtime/sql.mdx} +129 -99
- package/docs/{api/sqlite.md → runtime/sqlite.mdx} +162 -157
- package/docs/{api/streams.md → runtime/streams.mdx} +33 -31
- package/docs/{cli/bun-create.md → runtime/templating/create.mdx} +74 -143
- package/docs/{cli/init.md → runtime/templating/init.mdx} +24 -51
- package/docs/{api/transpiler.md → runtime/transpiler.mdx} +50 -38
- package/docs/{typescript.md → runtime/typescript.mdx} +7 -2
- package/docs/{api/utils.md → runtime/utils.mdx} +81 -50
- package/docs/runtime/{hot.md → watch-mode.mdx} +53 -37
- package/docs/runtime/web-apis.mdx +29 -0
- package/docs/{api/workers.md → runtime/workers.mdx} +28 -22
- package/docs/{api/yaml.md → runtime/yaml.mdx} +33 -232
- package/docs/snippets/cli/add.mdx +166 -0
- package/docs/snippets/cli/build.mdx +196 -0
- package/docs/snippets/cli/feedback.mdx +17 -0
- package/docs/snippets/cli/init.mdx +84 -0
- package/docs/snippets/cli/install.mdx +173 -0
- package/docs/snippets/cli/link.mdx +163 -0
- package/docs/snippets/cli/outdated.mdx +140 -0
- package/docs/snippets/cli/patch.mdx +171 -0
- package/docs/snippets/cli/publish.mdx +198 -0
- package/docs/snippets/cli/remove.mdx +146 -0
- package/docs/snippets/cli/run.mdx +293 -0
- package/docs/snippets/cli/test.mdx +100 -0
- package/docs/snippets/cli/update.mdx +144 -0
- package/docs/snippets/product-card.mdx +32 -0
- package/docs/snippets/product-tiles.mdx +94 -0
- package/docs/test/code-coverage.mdx +409 -0
- package/docs/test/configuration.mdx +467 -0
- package/docs/test/{time.md → dates-times.mdx} +23 -20
- package/docs/test/{discovery.md → discovery.mdx} +15 -10
- package/docs/test/dom.mdx +226 -0
- package/docs/{cli/test.md → test/index.mdx} +77 -94
- package/docs/test/lifecycle.mdx +348 -0
- package/docs/test/mocks.mdx +637 -0
- package/docs/test/{reporters.md → reporters.mdx} +15 -15
- package/docs/test/runtime-behavior.mdx +342 -0
- package/docs/test/snapshots.mdx +434 -0
- package/docs/test/writing-tests.mdx +635 -0
- package/docs/typescript.mdx +54 -0
- package/package.json +8 -6
- package/test.d.ts +2 -2
- package/docs/api/file.md +0 -19
- package/docs/api/globals.md +0 -387
- package/docs/api/http.md +0 -1408
- package/docs/api/import-meta.md +0 -69
- package/docs/benchmarks.md +0 -120
- package/docs/bun-flavored-toml.md +0 -42
- package/docs/bundler/css_modules.md +0 -145
- package/docs/bundler/fullstack.md +0 -418
- package/docs/bundler/index.md +0 -1735
- package/docs/bundler/intro.md +0 -75
- package/docs/bundler/vs-esbuild.md +0 -1127
- package/docs/cli/bun-completions.md +0 -3
- package/docs/cli/bun-install.md +0 -349
- package/docs/cli/bun-upgrade.md +0 -39
- package/docs/cli/info.md +0 -65
- package/docs/cli/patch-commit.md +0 -11
- package/docs/cli/remove.md +0 -7
- package/docs/cli/unlink.md +0 -9
- package/docs/contributing/upgrading-webkit.md +0 -57
- package/docs/ecosystem/elysia.md +0 -24
- package/docs/ecosystem/express.md +0 -37
- package/docs/ecosystem/hono.md +0 -18
- package/docs/ecosystem/react.md +0 -65
- package/docs/ecosystem/stric.md +0 -38
- package/docs/guides/ecosystem/prisma.md +0 -141
- package/docs/guides/ecosystem/render.md +0 -79
- package/docs/guides/install/add-git.md +0 -36
- package/docs/guides/test/spy-on.md +0 -46
- package/docs/install/index.md +0 -248
- package/docs/installation.md +0 -327
- package/docs/project/asan.md +0 -124
- package/docs/project/internals/build-process-for-ci.md +0 -75
- package/docs/project/licensing.md +0 -73
- package/docs/project/roadmap.md +0 -87
- package/docs/quickstart.md +0 -157
- package/docs/runtime/bun-apis.md +0 -207
- package/docs/runtime/env.md +0 -253
- package/docs/runtime/index.md +0 -312
- package/docs/runtime/jsx.md +0 -385
- package/docs/runtime/loaders.md +0 -130
- package/docs/runtime/plugins.md +0 -561
- package/docs/runtime/typescript.md +0 -139
- package/docs/runtime/web-apis.md +0 -128
- package/docs/test/configuration.md +0 -154
- package/docs/test/coverage.md +0 -142
- package/docs/test/dom.md +0 -75
- package/docs/test/examples/concurrent-test-glob.md +0 -132
- package/docs/test/hot.md +0 -15
- package/docs/test/lifecycle.md +0 -81
- package/docs/test/mocks.md +0 -313
- package/docs/test/runtime-behavior.md +0 -95
- package/docs/test/snapshots.md +0 -68
- package/docs/test/writing.md +0 -825
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: "Snapshots"
|
|
3
|
+
description: "Learn how to use snapshot testing in Bun to save and compare output between test runs"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Snapshot testing saves the output of a value and compares it against future test runs. This is particularly useful for UI components, complex objects, or any output that needs to remain consistent.
|
|
7
|
+
|
|
8
|
+
## Basic Snapshots
|
|
9
|
+
|
|
10
|
+
Snapshot tests are written using the `.toMatchSnapshot()` matcher:
|
|
11
|
+
|
|
12
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
13
|
+
import { test, expect } from "bun:test";
|
|
14
|
+
|
|
15
|
+
test("snap", () => {
|
|
16
|
+
expect("foo").toMatchSnapshot();
|
|
17
|
+
});
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The first time this test is run, the argument to `expect` will be serialized and written to a special snapshot file in a `__snapshots__` directory alongside the test file.
|
|
21
|
+
|
|
22
|
+
### Snapshot Files
|
|
23
|
+
|
|
24
|
+
After running the test above, Bun will create:
|
|
25
|
+
|
|
26
|
+
```text title="directory structure" icon="file-directory"
|
|
27
|
+
your-project/
|
|
28
|
+
├── snap.test.ts
|
|
29
|
+
└── __snapshots__/
|
|
30
|
+
└── snap.test.ts.snap
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The snapshot file contains:
|
|
34
|
+
|
|
35
|
+
```txt title="snapshot file" icon="file-code"
|
|
36
|
+
// Bun Snapshot v1, https://goo.gl/fbAQLP
|
|
37
|
+
|
|
38
|
+
exports[`snap 1`] = `"foo"`;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
On future runs, the argument is compared against the snapshot on disk.
|
|
42
|
+
|
|
43
|
+
## Updating Snapshots
|
|
44
|
+
|
|
45
|
+
Snapshots can be re-generated with the following command:
|
|
46
|
+
|
|
47
|
+
```bash terminal icon="terminal"
|
|
48
|
+
bun test --update-snapshots
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
This is useful when:
|
|
52
|
+
|
|
53
|
+
- You've intentionally changed the output
|
|
54
|
+
- You're adding new snapshot tests
|
|
55
|
+
- The expected output has legitimately changed
|
|
56
|
+
|
|
57
|
+
## Inline Snapshots
|
|
58
|
+
|
|
59
|
+
For smaller values, you can use inline snapshots with `.toMatchInlineSnapshot()`. These snapshots are stored directly in your test file:
|
|
60
|
+
|
|
61
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
62
|
+
import { test, expect } from "bun:test";
|
|
63
|
+
|
|
64
|
+
test("inline snapshot", () => {
|
|
65
|
+
// First run: snapshot will be inserted automatically
|
|
66
|
+
expect({ hello: "world" }).toMatchInlineSnapshot();
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
After the first run, Bun automatically updates your test file:
|
|
71
|
+
|
|
72
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
73
|
+
import { test, expect } from "bun:test";
|
|
74
|
+
|
|
75
|
+
test("inline snapshot", () => {
|
|
76
|
+
expect({ hello: "world" }).toMatchInlineSnapshot(`
|
|
77
|
+
{
|
|
78
|
+
"hello": "world",
|
|
79
|
+
}
|
|
80
|
+
`);
|
|
81
|
+
});
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Using Inline Snapshots
|
|
85
|
+
|
|
86
|
+
1. Write your test with `.toMatchInlineSnapshot()`
|
|
87
|
+
2. Run the test once
|
|
88
|
+
3. Bun automatically updates your test file with the snapshot
|
|
89
|
+
4. On subsequent runs, the value will be compared against the inline snapshot
|
|
90
|
+
|
|
91
|
+
Inline snapshots are particularly useful for small, simple values where it's helpful to see the expected output right in the test file.
|
|
92
|
+
|
|
93
|
+
## Error Snapshots
|
|
94
|
+
|
|
95
|
+
You can also snapshot error messages using `.toThrowErrorMatchingSnapshot()` and `.toThrowErrorMatchingInlineSnapshot()`:
|
|
96
|
+
|
|
97
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
98
|
+
import { test, expect } from "bun:test";
|
|
99
|
+
|
|
100
|
+
test("error snapshot", () => {
|
|
101
|
+
expect(() => {
|
|
102
|
+
throw new Error("Something went wrong");
|
|
103
|
+
}).toThrowErrorMatchingSnapshot();
|
|
104
|
+
|
|
105
|
+
expect(() => {
|
|
106
|
+
throw new Error("Another error");
|
|
107
|
+
}).toThrowErrorMatchingInlineSnapshot();
|
|
108
|
+
});
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
After running, the inline version becomes:
|
|
112
|
+
|
|
113
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
114
|
+
test("error snapshot", () => {
|
|
115
|
+
expect(() => {
|
|
116
|
+
throw new Error("Something went wrong");
|
|
117
|
+
}).toThrowErrorMatchingSnapshot();
|
|
118
|
+
|
|
119
|
+
expect(() => {
|
|
120
|
+
throw new Error("Another error");
|
|
121
|
+
}).toThrowErrorMatchingInlineSnapshot(`"Another error"`);
|
|
122
|
+
});
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## Advanced Snapshot Usage
|
|
126
|
+
|
|
127
|
+
### Complex Objects
|
|
128
|
+
|
|
129
|
+
Snapshots work well with complex nested objects:
|
|
130
|
+
|
|
131
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
132
|
+
import { test, expect } from "bun:test";
|
|
133
|
+
|
|
134
|
+
test("complex object snapshot", () => {
|
|
135
|
+
const user = {
|
|
136
|
+
id: 1,
|
|
137
|
+
name: "John Doe",
|
|
138
|
+
email: "john@example.com",
|
|
139
|
+
profile: {
|
|
140
|
+
age: 30,
|
|
141
|
+
preferences: {
|
|
142
|
+
theme: "dark",
|
|
143
|
+
notifications: true,
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
tags: ["developer", "javascript", "bun"],
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
expect(user).toMatchSnapshot();
|
|
150
|
+
});
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Array Snapshots
|
|
154
|
+
|
|
155
|
+
Arrays are also well-suited for snapshot testing:
|
|
156
|
+
|
|
157
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
158
|
+
import { test, expect } from "bun:test";
|
|
159
|
+
|
|
160
|
+
test("array snapshot", () => {
|
|
161
|
+
const numbers = [1, 2, 3, 4, 5].map(n => n * 2);
|
|
162
|
+
expect(numbers).toMatchSnapshot();
|
|
163
|
+
});
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### Function Output Snapshots
|
|
167
|
+
|
|
168
|
+
Snapshot the output of functions:
|
|
169
|
+
|
|
170
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
171
|
+
import { test, expect } from "bun:test";
|
|
172
|
+
|
|
173
|
+
function generateReport(data: any[]) {
|
|
174
|
+
return {
|
|
175
|
+
total: data.length,
|
|
176
|
+
summary: data.map(item => ({ id: item.id, name: item.name })),
|
|
177
|
+
timestamp: "2024-01-01", // Fixed for testing
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
test("report generation", () => {
|
|
182
|
+
const data = [
|
|
183
|
+
{ id: 1, name: "Alice", age: 30 },
|
|
184
|
+
{ id: 2, name: "Bob", age: 25 },
|
|
185
|
+
];
|
|
186
|
+
|
|
187
|
+
expect(generateReport(data)).toMatchSnapshot();
|
|
188
|
+
});
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## React Component Snapshots
|
|
192
|
+
|
|
193
|
+
Snapshots are particularly useful for React components:
|
|
194
|
+
|
|
195
|
+
```tsx title="test.ts" icon="/icons/typescript.svg"
|
|
196
|
+
import { test, expect } from "bun:test";
|
|
197
|
+
import { render } from "@testing-library/react";
|
|
198
|
+
|
|
199
|
+
function Button({ children, variant = "primary" }) {
|
|
200
|
+
return <button className={`btn btn-${variant}`}>{children}</button>;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
test("Button component snapshots", () => {
|
|
204
|
+
const { container: primary } = render(<Button>Click me</Button>);
|
|
205
|
+
const { container: secondary } = render(<Button variant="secondary">Cancel</Button>);
|
|
206
|
+
|
|
207
|
+
expect(primary.innerHTML).toMatchSnapshot();
|
|
208
|
+
expect(secondary.innerHTML).toMatchSnapshot();
|
|
209
|
+
});
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
## Property Matchers
|
|
213
|
+
|
|
214
|
+
For values that change between test runs (like timestamps or IDs), use property matchers:
|
|
215
|
+
|
|
216
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
217
|
+
import { test, expect } from "bun:test";
|
|
218
|
+
|
|
219
|
+
test("snapshot with dynamic values", () => {
|
|
220
|
+
const user = {
|
|
221
|
+
id: Math.random(), // This changes every run
|
|
222
|
+
name: "John",
|
|
223
|
+
createdAt: new Date().toISOString(), // This also changes
|
|
224
|
+
};
|
|
225
|
+
|
|
226
|
+
expect(user).toMatchSnapshot({
|
|
227
|
+
id: expect.any(Number),
|
|
228
|
+
createdAt: expect.any(String),
|
|
229
|
+
});
|
|
230
|
+
});
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
The snapshot will store:
|
|
234
|
+
|
|
235
|
+
```txt title="snapshot file" icon="file-code"
|
|
236
|
+
exports[`snapshot with dynamic values 1`] = `
|
|
237
|
+
{
|
|
238
|
+
"createdAt": Any<String>,
|
|
239
|
+
"id": Any<Number>,
|
|
240
|
+
"name": "John",
|
|
241
|
+
}
|
|
242
|
+
`;
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
## Custom Serializers
|
|
246
|
+
|
|
247
|
+
You can customize how objects are serialized in snapshots:
|
|
248
|
+
|
|
249
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
250
|
+
import { test, expect } from "bun:test";
|
|
251
|
+
|
|
252
|
+
// Custom serializer for Date objects
|
|
253
|
+
expect.addSnapshotSerializer({
|
|
254
|
+
test: val => val instanceof Date,
|
|
255
|
+
serialize: val => `"${val.toISOString()}"`,
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
test("custom serializer", () => {
|
|
259
|
+
const event = {
|
|
260
|
+
name: "Meeting",
|
|
261
|
+
date: new Date("2024-01-01T10:00:00Z"),
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
expect(event).toMatchSnapshot();
|
|
265
|
+
});
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
## Best Practices
|
|
269
|
+
|
|
270
|
+
### Keep Snapshots Small
|
|
271
|
+
|
|
272
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
273
|
+
// Good: Focused snapshots
|
|
274
|
+
test("user name formatting", () => {
|
|
275
|
+
const formatted = formatUserName("john", "doe");
|
|
276
|
+
expect(formatted).toMatchInlineSnapshot(`"John Doe"`);
|
|
277
|
+
});
|
|
278
|
+
|
|
279
|
+
// Avoid: Huge snapshots that are hard to review
|
|
280
|
+
test("entire page render", () => {
|
|
281
|
+
const page = renderEntirePage();
|
|
282
|
+
expect(page).toMatchSnapshot(); // This could be thousands of lines
|
|
283
|
+
});
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
### Use Descriptive Test Names
|
|
287
|
+
|
|
288
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
289
|
+
// Good: Clear what the snapshot represents
|
|
290
|
+
test("formats currency with USD symbol", () => {
|
|
291
|
+
expect(formatCurrency(99.99)).toMatchInlineSnapshot(`"$99.99"`);
|
|
292
|
+
});
|
|
293
|
+
|
|
294
|
+
// Avoid: Unclear what's being tested
|
|
295
|
+
test("format test", () => {
|
|
296
|
+
expect(format(99.99)).toMatchInlineSnapshot(`"$99.99"`);
|
|
297
|
+
});
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Group Related Snapshots
|
|
301
|
+
|
|
302
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
303
|
+
import { describe, test, expect } from "bun:test";
|
|
304
|
+
|
|
305
|
+
describe("Button component", () => {
|
|
306
|
+
test("primary variant", () => {
|
|
307
|
+
expect(render(<Button variant="primary">Click</Button>))
|
|
308
|
+
.toMatchSnapshot();
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
test("secondary variant", () => {
|
|
312
|
+
expect(render(<Button variant="secondary">Cancel</Button>))
|
|
313
|
+
.toMatchSnapshot();
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
test("disabled state", () => {
|
|
317
|
+
expect(render(<Button disabled>Disabled</Button>))
|
|
318
|
+
.toMatchSnapshot();
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Handle Dynamic Data
|
|
324
|
+
|
|
325
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
326
|
+
// Good: Normalize dynamic data
|
|
327
|
+
test("API response format", () => {
|
|
328
|
+
const response = {
|
|
329
|
+
data: { id: 1, name: "Test" },
|
|
330
|
+
timestamp: Date.now(),
|
|
331
|
+
requestId: generateId(),
|
|
332
|
+
};
|
|
333
|
+
|
|
334
|
+
expect({
|
|
335
|
+
...response,
|
|
336
|
+
timestamp: "TIMESTAMP",
|
|
337
|
+
requestId: "REQUEST_ID",
|
|
338
|
+
}).toMatchSnapshot();
|
|
339
|
+
});
|
|
340
|
+
|
|
341
|
+
// Or use property matchers
|
|
342
|
+
test("API response with matchers", () => {
|
|
343
|
+
const response = getApiResponse();
|
|
344
|
+
|
|
345
|
+
expect(response).toMatchSnapshot({
|
|
346
|
+
timestamp: expect.any(Number),
|
|
347
|
+
requestId: expect.any(String),
|
|
348
|
+
});
|
|
349
|
+
});
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
## Managing Snapshots
|
|
353
|
+
|
|
354
|
+
### Reviewing Snapshot Changes
|
|
355
|
+
|
|
356
|
+
When snapshots change, carefully review them:
|
|
357
|
+
|
|
358
|
+
```bash terminal icon="terminal"
|
|
359
|
+
# See what changed
|
|
360
|
+
git diff __snapshots__/
|
|
361
|
+
|
|
362
|
+
# Update if changes are intentional
|
|
363
|
+
bun test --update-snapshots
|
|
364
|
+
|
|
365
|
+
# Commit the updated snapshots
|
|
366
|
+
git add __snapshots__/
|
|
367
|
+
git commit -m "Update snapshots after UI changes"
|
|
368
|
+
```
|
|
369
|
+
|
|
370
|
+
### Cleaning Up Unused Snapshots
|
|
371
|
+
|
|
372
|
+
Bun will warn about unused snapshots:
|
|
373
|
+
|
|
374
|
+
```txt title="warning" icon="warning"
|
|
375
|
+
Warning: 1 unused snapshot found:
|
|
376
|
+
my-test.test.ts.snap: "old test that no longer exists 1"
|
|
377
|
+
```
|
|
378
|
+
|
|
379
|
+
Remove unused snapshots by deleting them from the snapshot files or by running tests with cleanup flags if available.
|
|
380
|
+
|
|
381
|
+
### Organizing Large Snapshot Files
|
|
382
|
+
|
|
383
|
+
For large projects, consider organizing tests to keep snapshot files manageable:
|
|
384
|
+
|
|
385
|
+
```text title="directory structure" icon="file-directory"
|
|
386
|
+
tests/
|
|
387
|
+
├── components/
|
|
388
|
+
│ ├── Button.test.tsx
|
|
389
|
+
│ └── __snapshots__/
|
|
390
|
+
│ └── Button.test.tsx.snap
|
|
391
|
+
├── utils/
|
|
392
|
+
│ ├── formatters.test.ts
|
|
393
|
+
│ └── __snapshots__/
|
|
394
|
+
│ └── formatters.test.ts.snap
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
## Troubleshooting
|
|
398
|
+
|
|
399
|
+
### Snapshot Failures
|
|
400
|
+
|
|
401
|
+
When snapshots fail, you'll see a diff:
|
|
402
|
+
|
|
403
|
+
```text title="diff" icon="file-code"
|
|
404
|
+
- Expected
|
|
405
|
+
+ Received
|
|
406
|
+
|
|
407
|
+
Object {
|
|
408
|
+
- "name": "John",
|
|
409
|
+
+ "name": "Jane",
|
|
410
|
+
}
|
|
411
|
+
```
|
|
412
|
+
|
|
413
|
+
Common causes:
|
|
414
|
+
|
|
415
|
+
- Intentional changes (update with `--update-snapshots`)
|
|
416
|
+
- Unintentional changes (fix the code)
|
|
417
|
+
- Dynamic data (use property matchers)
|
|
418
|
+
- Environment differences (normalize the data)
|
|
419
|
+
|
|
420
|
+
### Platform Differences
|
|
421
|
+
|
|
422
|
+
Be aware of platform-specific differences:
|
|
423
|
+
|
|
424
|
+
```ts title="test.ts" icon="/icons/typescript.svg"
|
|
425
|
+
// Paths might differ between Windows/Unix
|
|
426
|
+
test("file operations", () => {
|
|
427
|
+
const result = processFile("./test.txt");
|
|
428
|
+
|
|
429
|
+
expect({
|
|
430
|
+
...result,
|
|
431
|
+
path: result.path.replace(/\\/g, "/"), // Normalize paths
|
|
432
|
+
}).toMatchSnapshot();
|
|
433
|
+
});
|
|
434
|
+
```
|