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
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Using Testing Library with Bun
|
|
3
|
+
sidebarTitle: Testing Library
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
You can use [Testing Library](https://testing-library.com/) with Bun's test runner.
|
|
@@ -8,7 +10,7 @@ You can use [Testing Library](https://testing-library.com/) with Bun's test runn
|
|
|
8
10
|
|
|
9
11
|
As a prerequisite to using Testing Library you will need to install [Happy Dom](https://github.com/capricorn86/happy-dom). ([see Bun's Happy DOM guide for more information](https://bun.sh/guides/test/happy-dom)).
|
|
10
12
|
|
|
11
|
-
```sh
|
|
13
|
+
```sh terminal icon="terminal"
|
|
12
14
|
bun add -D @happy-dom/global-registrator
|
|
13
15
|
```
|
|
14
16
|
|
|
@@ -16,7 +18,7 @@ bun add -D @happy-dom/global-registrator
|
|
|
16
18
|
|
|
17
19
|
Next you should install the Testing Library packages you are planning on using. For example, if you are setting up testing for React your installs may look like this. You will also need to install `@testing-library/jest-dom` to get matchers working later.
|
|
18
20
|
|
|
19
|
-
```sh
|
|
21
|
+
```sh terminal icon="terminal"
|
|
20
22
|
bun add -D @testing-library/react @testing-library/dom @testing-library/jest-dom
|
|
21
23
|
```
|
|
22
24
|
|
|
@@ -24,8 +26,8 @@ bun add -D @testing-library/react @testing-library/dom @testing-library/jest-dom
|
|
|
24
26
|
|
|
25
27
|
Next you will need to create a preload script for Happy DOM and for Testing Library. For more details about the Happy DOM setup script see [Bun's Happy DOM guide](https://bun.sh/guides/test/happy-dom).
|
|
26
28
|
|
|
27
|
-
```ts
|
|
28
|
-
import { GlobalRegistrator } from
|
|
29
|
+
```ts happydom.ts icon="/icons/typescript.svg"
|
|
30
|
+
import { GlobalRegistrator } from "@happy-dom/global-registrator";
|
|
29
31
|
|
|
30
32
|
GlobalRegistrator.register();
|
|
31
33
|
```
|
|
@@ -34,10 +36,10 @@ GlobalRegistrator.register();
|
|
|
34
36
|
|
|
35
37
|
For Testing Library, you will want to extend Bun's `expect` function with Testing Library's matchers. Optionally, to better match the behavior of test-runners like Jest, you may want to run cleanup after each test.
|
|
36
38
|
|
|
37
|
-
```ts
|
|
38
|
-
import { afterEach, expect } from
|
|
39
|
-
import { cleanup } from
|
|
40
|
-
import * as matchers from
|
|
39
|
+
```ts testing-library.ts icon="/icons/typescript.svg"
|
|
40
|
+
import { afterEach, expect } from "bun:test";
|
|
41
|
+
import { cleanup } from "@testing-library/react";
|
|
42
|
+
import * as matchers from "@testing-library/jest-dom/matchers";
|
|
41
43
|
|
|
42
44
|
expect.extend(matchers);
|
|
43
45
|
|
|
@@ -51,7 +53,7 @@ afterEach(() => {
|
|
|
51
53
|
|
|
52
54
|
Next, add these preload scripts to your `bunfig.toml` (you can also have everything in a single `preload.ts` script if you prefer).
|
|
53
55
|
|
|
54
|
-
```toml
|
|
56
|
+
```toml bunfig.toml icon="settings"
|
|
55
57
|
[test]
|
|
56
58
|
preload = ["./happydom.ts", "./testing-library.ts"]
|
|
57
59
|
```
|
|
@@ -60,13 +62,12 @@ preload = ["./happydom.ts", "./testing-library.ts"]
|
|
|
60
62
|
|
|
61
63
|
If you are using TypeScript you will also need to make use of declaration merging in order to get the new matcher types to show up in your editor. To do this, create a type declaration file that extends `Matchers` like this.
|
|
62
64
|
|
|
63
|
-
```ts
|
|
64
|
-
import { TestingLibraryMatchers } from
|
|
65
|
-
import { Matchers, AsymmetricMatchers } from
|
|
65
|
+
```ts matchers.d.ts icon="/icons/typescript.svg"
|
|
66
|
+
import { TestingLibraryMatchers } from "@testing-library/jest-dom/matchers";
|
|
67
|
+
import { Matchers, AsymmetricMatchers } from "bun:test";
|
|
66
68
|
|
|
67
|
-
declare module
|
|
68
|
-
interface Matchers<T>
|
|
69
|
-
extends TestingLibraryMatchers<typeof expect.stringContaining, T> {}
|
|
69
|
+
declare module "bun:test" {
|
|
70
|
+
interface Matchers<T> extends TestingLibraryMatchers<typeof expect.stringContaining, T> {}
|
|
70
71
|
interface AsymmetricMatchers extends TestingLibraryMatchers {}
|
|
71
72
|
}
|
|
72
73
|
```
|
|
@@ -75,7 +76,7 @@ declare module 'bun:test' {
|
|
|
75
76
|
|
|
76
77
|
You should now be able to use Testing Library in your tests
|
|
77
78
|
|
|
78
|
-
```ts
|
|
79
|
+
```ts matchers.d.ts icon="/icons/typescript.svg"
|
|
79
80
|
import { test, expect } from "bun:test";
|
|
80
81
|
import { screen, render } from "@testing-library/react";
|
|
81
82
|
import { MyComponent } from "./myComponent";
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Set a per-test timeout with the Bun test runner
|
|
3
|
+
sidebarTitle: Test timeout
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Use the `--timeout` flag to set a timeout for each test in milliseconds. If any test exceeds this timeout, it will be marked as failed.
|
|
6
8
|
|
|
7
9
|
The default timeout is `5000` (5 seconds).
|
|
8
10
|
|
|
9
|
-
```sh
|
|
10
|
-
|
|
11
|
+
```sh terminal icon="terminal"
|
|
12
|
+
bun test --timeout 3000 # 3 seconds
|
|
11
13
|
```
|
|
12
14
|
|
|
13
15
|
---
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Mark a test as a "todo" with the Bun test runner
|
|
3
|
+
sidebarTitle: Todo tests
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
To remind yourself to write a test later, use the `test.todo` function. There's no need to provide a test implementation.
|
|
6
8
|
|
|
7
|
-
```ts
|
|
9
|
+
```ts test.ts icon="/icons/typescript.svg"
|
|
8
10
|
import { test, expect } from "bun:test";
|
|
9
11
|
|
|
10
12
|
// write this later
|
|
@@ -15,9 +17,11 @@ test.todo("unimplemented feature");
|
|
|
15
17
|
|
|
16
18
|
The output of `bun test` indicates how many `todo` tests were encountered.
|
|
17
19
|
|
|
18
|
-
```sh
|
|
19
|
-
|
|
20
|
+
```sh terminal icon="terminal"
|
|
21
|
+
bun test
|
|
22
|
+
```
|
|
20
23
|
|
|
24
|
+
```txt
|
|
21
25
|
test.test.ts:
|
|
22
26
|
✓ add [0.03ms]
|
|
23
27
|
✓ multiply [0.02ms]
|
|
@@ -46,8 +50,11 @@ test.todo("unimplemented feature", () => {
|
|
|
46
50
|
|
|
47
51
|
If an implementation is provided, it will not be run unless the `--todo` flag is passed. If the `--todo` flag is passed, the test will be executed and _expected to fail_ by test runner! If a todo test passes, the `bun test` run will return a non-zero exit code to signal the failure.
|
|
48
52
|
|
|
49
|
-
```sh
|
|
50
|
-
|
|
53
|
+
```sh terminal icon="terminal"
|
|
54
|
+
bun test --todo
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
```txt
|
|
51
58
|
my.test.ts:
|
|
52
59
|
✗ unimplemented feature
|
|
53
60
|
^ this test is marked as todo but passes. Remove `.todo` or check that test is correct.
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Update snapshots in `bun test`
|
|
3
|
+
sidebarTitle: Update snapshots
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Bun's test runner supports Jest-style snapshot testing via `.toMatchSnapshot()`.
|
|
6
8
|
|
|
7
|
-
```ts
|
|
9
|
+
```ts snap.test.ts icon="/icons/typescript.svg"
|
|
8
10
|
import { test, expect } from "bun:test";
|
|
9
11
|
|
|
10
12
|
test("snapshot", () => {
|
|
@@ -16,7 +18,7 @@ test("snapshot", () => {
|
|
|
16
18
|
|
|
17
19
|
The first time this test is executed, Bun will write a snapshot file to disk in a directory called `__snapshots__` that lives alongside the test file.
|
|
18
20
|
|
|
19
|
-
```txt
|
|
21
|
+
```txt File Tree icon="folder-tree"
|
|
20
22
|
test
|
|
21
23
|
├── __snapshots__
|
|
22
24
|
│ └── snap.test.ts.snap
|
|
@@ -27,10 +29,11 @@ test
|
|
|
27
29
|
|
|
28
30
|
To regenerate snapshots, use the `--update-snapshots` flag.
|
|
29
31
|
|
|
30
|
-
```sh
|
|
31
|
-
|
|
32
|
-
|
|
32
|
+
```sh terminal icon="terminal"
|
|
33
|
+
bun test --update-snapshots
|
|
34
|
+
```
|
|
33
35
|
|
|
36
|
+
```txt
|
|
34
37
|
test/snap.test.ts:
|
|
35
38
|
✓ snapshot [0.86ms]
|
|
36
39
|
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Run tests in watch mode with Bun
|
|
3
|
+
sidebarTitle: Watch mode
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Use the `--watch` flag to run your tests in watch mode.
|
|
6
8
|
|
|
7
|
-
```sh
|
|
8
|
-
|
|
9
|
+
```sh terminal icon="terminal"
|
|
10
|
+
bun test --watch
|
|
9
11
|
```
|
|
10
12
|
|
|
11
13
|
---
|
|
12
14
|
|
|
13
15
|
This will restart the running Bun process whenever a file change is detected. It's fast. In this example, the editor is configured to save the file on every keystroke.
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
<Frame>
|
|
18
|
+

|
|
20
|
+
</Frame>
|
|
16
21
|
|
|
17
22
|
---
|
|
18
23
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Encode and decode base64 strings
|
|
3
|
+
sidebarTitle: Base64 encoding
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Bun implements the Web-standard [`atob`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/atob) and [`btoa`](https://developer.mozilla.org/en-US/docs/Web/API/WindowOrWorkerGlobalScope/btoa) functions for encoding and decoding base64 strings.
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Check if two objects are deeply equal
|
|
3
|
+
sidebarTitle: Deep equality
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Check if two objects are deeply equal. This is used internally by `expect().toEqual()` in Bun's [test runner](https://bun.com/docs/test/writing).
|
|
6
8
|
|
|
7
|
-
```ts
|
|
9
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
8
10
|
const a = { a: 1, b: 2, c: { d: 3 } };
|
|
9
11
|
const b = { a: 1, b: 2, c: { d: 3 } };
|
|
10
12
|
|
|
@@ -17,7 +19,7 @@ Pass `true` as a third argument to enable strict mode. This is used internally b
|
|
|
17
19
|
|
|
18
20
|
The following examples would return `true` in non-strict mode but `false` in strict mode.
|
|
19
21
|
|
|
20
|
-
```ts
|
|
22
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
21
23
|
// undefined values
|
|
22
24
|
Bun.deepEquals({}, { a: undefined }, true); // false
|
|
23
25
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Detect when code is executed with Bun
|
|
3
|
+
sidebarTitle: Detect Bun
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
The recommended way to conditionally detect when code is being executed with `bun` is to check for the existence of the `Bun` global.
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Check if the current file is the entrypoint
|
|
3
|
+
sidebarTitle: Check entrypoint
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Bun provides a handful of module-specific utilities on the [`import.meta`](https://bun.com/docs/api/import-meta) object. Use `import.meta.main` to check if the current file is the entrypoint of the current process.
|
|
6
8
|
|
|
7
|
-
```ts
|
|
9
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
8
10
|
if (import.meta.main) {
|
|
9
11
|
// this file is directly executed with `bun run`
|
|
10
12
|
} else {
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Get the directory of the current file
|
|
3
|
+
sidebarTitle: import.meta.dir
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Bun provides a handful of module-specific utilities on the [`import.meta`](https://bun.com/docs/api/import-meta) object.
|
|
6
8
|
|
|
7
|
-
```ts
|
|
9
|
+
```ts /a/b/c.ts icon="/icons/typescript.svg"
|
|
8
10
|
import.meta.dir; // => "/a/b"
|
|
9
11
|
```
|
|
10
12
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Get the file name of the current file
|
|
3
|
+
sidebarTitle: import.meta.file
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Bun provides a handful of module-specific utilities on the [`import.meta`](https://bun.com/docs/api/import-meta) object. Use `import.meta.file` to retrieve the name of the current file.
|
|
6
8
|
|
|
7
|
-
```ts
|
|
9
|
+
```ts /a/b/c.ts icon="/icons/typescript.svg"
|
|
8
10
|
import.meta.file; // => "c.ts"
|
|
9
11
|
```
|
|
10
12
|
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Get the absolute path of the current file
|
|
3
|
+
sidebarTitle: import.meta.path
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Bun provides a handful of module-specific utilities on the [`import.meta`](https://bun.com/docs/api/import-meta) object. Use `import.meta.path` to retrieve the absolute path of the current file.
|
|
6
8
|
|
|
7
|
-
```ts
|
|
9
|
+
```ts /a/b/c.ts icon="/icons/typescript.svg"
|
|
8
10
|
import.meta.path; // => "/a/b/c.ts"
|
|
9
11
|
```
|
|
10
12
|
|
|
@@ -1,29 +1,40 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Get the absolute path to the current entrypoint
|
|
3
|
+
sidebarTitle: Get entrypoint path
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
The `Bun.main` property contains the absolute path to the current entrypoint.
|
|
6
8
|
|
|
7
|
-
|
|
9
|
+
<CodeGroup>
|
|
8
10
|
|
|
9
|
-
```ts
|
|
11
|
+
```ts foo.ts icon="/icons/typescript.svg"
|
|
10
12
|
console.log(Bun.main);
|
|
11
13
|
```
|
|
12
14
|
|
|
13
|
-
```ts
|
|
15
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
14
16
|
import "./foo.ts";
|
|
15
17
|
```
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
</CodeGroup>
|
|
18
20
|
|
|
19
21
|
---
|
|
20
22
|
|
|
21
23
|
The printed path corresponds to the file that is executed with `bun run`.
|
|
22
24
|
|
|
23
|
-
```sh
|
|
24
|
-
|
|
25
|
+
```sh terminal icon="terminal"
|
|
26
|
+
bun run index.ts
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
```txt
|
|
25
30
|
/path/to/index.ts
|
|
26
|
-
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
```sh terminal icon="terminal"
|
|
34
|
+
bun run foo.ts
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
```txt
|
|
27
38
|
/path/to/foo.ts
|
|
28
39
|
```
|
|
29
40
|
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Sleep for a fixed number of milliseconds
|
|
3
|
+
sidebarTitle: Sleep
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
The `Bun.sleep` method provides a convenient way to create a void `Promise` that resolves in a fixed number of milliseconds.
|
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Get the current Bun version
|
|
3
|
+
sidebarTitle: Get Bun version
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Get the current version of Bun in a semver format.
|
|
6
8
|
|
|
7
|
-
```ts
|
|
8
|
-
Bun.version; // => "1.3.
|
|
9
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
10
|
+
Bun.version; // => "1.3.1"
|
|
9
11
|
```
|
|
10
12
|
|
|
11
13
|
---
|
|
12
14
|
|
|
13
15
|
Get the exact `git` commit of [`oven-sh/bun`](https://github.com/oven-sh/bun) that was compiled to produce this Bun binary.
|
|
14
16
|
|
|
15
|
-
```ts
|
|
17
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
16
18
|
Bun.revision; // => "49231b2cb9aa48497ab966fc0bb6b742dacc4994"
|
|
17
19
|
```
|
|
18
20
|
|
package/docs/guides/util/{which-path-to-executable-bin.md → which-path-to-executable-bin.mdx}
RENAMED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Get the path to an executable bin file
|
|
3
|
+
sidebarTitle: Find executable path
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
`Bun.which` is a utility function to find the absolute path of an executable file. It is similar to the `which` command in Unix-like systems.
|
|
6
8
|
|
|
7
|
-
```ts
|
|
9
|
+
```ts foo.ts icon="/icons/typescript.svg"
|
|
8
10
|
Bun.which("sh"); // => "/bin/sh"
|
|
9
11
|
Bun.which("notfound"); // => null
|
|
10
12
|
Bun.which("bun"); // => "/home/user/.bun/bin/bun"
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Enable compression for WebSocket messages
|
|
3
|
+
sidebarTitle: Enable compression
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Per-message compression can be enabled with the `perMessageDeflate` parameter. When set, all messages will be compressed using the [permessage-deflate](https://tools.ietf.org/html/rfc7692) WebSocket extension.
|
|
6
8
|
|
|
7
|
-
```ts
|
|
9
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
8
10
|
Bun.serve({
|
|
9
11
|
// ...
|
|
10
12
|
websocket: {
|
|
@@ -18,7 +20,7 @@ Bun.serve({
|
|
|
18
20
|
|
|
19
21
|
To enable compression for individual messages, pass `true` as the second parameter to `ws.send()`.
|
|
20
22
|
|
|
21
|
-
```ts
|
|
23
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
22
24
|
Bun.serve({
|
|
23
25
|
// ...
|
|
24
26
|
websocket: {
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Set per-socket contextual data on a WebSocket
|
|
3
|
+
sidebarTitle: Contextual data
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
When building a WebSocket server, it's typically necessary to store some identifying information or context associated with each connected client.
|
|
6
8
|
|
|
7
|
-
With [Bun.serve()](https://bun.com/docs/api/websockets
|
|
9
|
+
With [Bun.serve()](https://bun.com/docs/api/websockets contextual-data), this "contextual data" is set when the connection is initially upgraded by passing a `data` parameter in the `server.upgrade()` call.
|
|
8
10
|
|
|
9
|
-
```ts
|
|
10
|
-
Bun.serve({
|
|
11
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
12
|
+
Bun.serve<{ socketId: number }>({
|
|
11
13
|
fetch(req, server) {
|
|
12
14
|
const success = server.upgrade(req, {
|
|
13
15
|
data: {
|
|
@@ -20,9 +22,6 @@ Bun.serve({
|
|
|
20
22
|
// ...
|
|
21
23
|
},
|
|
22
24
|
websocket: {
|
|
23
|
-
// TypeScript: specify the type of ws.data like this
|
|
24
|
-
data: {} as { socketId: number },
|
|
25
|
-
|
|
26
25
|
// define websocket handlers
|
|
27
26
|
async message(ws, message) {
|
|
28
27
|
// the contextual data is available as the `data` property
|
|
@@ -37,14 +36,15 @@ Bun.serve({
|
|
|
37
36
|
|
|
38
37
|
It's common to read cookies/headers from the incoming request to identify the connecting client.
|
|
39
38
|
|
|
40
|
-
```ts
|
|
39
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
41
40
|
type WebSocketData = {
|
|
42
41
|
createdAt: number;
|
|
43
42
|
token: string;
|
|
44
43
|
userId: string;
|
|
45
44
|
};
|
|
46
45
|
|
|
47
|
-
|
|
46
|
+
// TypeScript: specify the type of `data`
|
|
47
|
+
Bun.serve<WebSocketData>({
|
|
48
48
|
async fetch(req, server) {
|
|
49
49
|
// use a library to parse cookies
|
|
50
50
|
const cookies = parseCookies(req.headers.get("Cookie"));
|
|
@@ -62,9 +62,6 @@ Bun.serve({
|
|
|
62
62
|
if (upgraded) return undefined;
|
|
63
63
|
},
|
|
64
64
|
websocket: {
|
|
65
|
-
// TypeScript: specify the type of ws.data like this
|
|
66
|
-
data: {} as WebSocketData,
|
|
67
|
-
|
|
68
65
|
async message(ws, message) {
|
|
69
66
|
// save the message to a database
|
|
70
67
|
await saveMessageToDatabase({
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Build a publish-subscribe WebSocket server
|
|
3
|
+
sidebarTitle: Pub-sub server
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Bun's server-side `WebSocket` API provides a native pub-sub API. Sockets can be subscribed to a set of named channels using `socket.subscribe(<name>)`; messages can be published to a channel using `socket.publish(<name>, <message>)`.
|
|
6
8
|
|
|
7
9
|
This code snippet implements a simple single-channel chat server.
|
|
8
10
|
|
|
9
|
-
```ts
|
|
10
|
-
const server = Bun.serve({
|
|
11
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
12
|
+
const server = Bun.serve<{ username: string }>({
|
|
11
13
|
fetch(req, server) {
|
|
12
14
|
const cookies = req.headers.get("cookie");
|
|
13
15
|
const username = getUsernameFromCookies(cookies);
|
|
@@ -17,9 +19,6 @@ const server = Bun.serve({
|
|
|
17
19
|
return new Response("Hello world");
|
|
18
20
|
},
|
|
19
21
|
websocket: {
|
|
20
|
-
// TypeScript: specify the type of ws.data like this
|
|
21
|
-
data: {} as { username: string },
|
|
22
|
-
|
|
23
22
|
open(ws) {
|
|
24
23
|
const msg = `${ws.data.username} has entered the chat`;
|
|
25
24
|
ws.subscribe("the-group-chat");
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Build a simple WebSocket server
|
|
3
|
+
sidebarTitle: Simple server
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Start a simple WebSocket server using [`Bun.serve`](https://bun.com/docs/api/http).
|
|
6
8
|
|
|
7
9
|
Inside `fetch`, we attempt to upgrade incoming `ws:` or `wss:` requests to WebSocket connections.
|
|
8
10
|
|
|
9
|
-
```ts
|
|
10
|
-
const server = Bun.serve({
|
|
11
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
12
|
+
const server = Bun.serve<{ authToken: string }>({
|
|
11
13
|
fetch(req, server) {
|
|
12
14
|
const success = server.upgrade(req);
|
|
13
15
|
if (success) {
|