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,101 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: TLS
|
|
3
|
+
description: Enable TLS in Bun.serve
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Bun supports TLS out of the box, powered by [BoringSSL](https://boringssl.googlesource.com/boringssl). Enable TLS by passing in a value for `key` and `cert`; both are required to enable TLS.
|
|
7
|
+
|
|
8
|
+
```ts
|
|
9
|
+
Bun.serve({
|
|
10
|
+
tls: {
|
|
11
|
+
key: Bun.file("./key.pem"), // [!code ++]
|
|
12
|
+
cert: Bun.file("./cert.pem"), // [!code ++]
|
|
13
|
+
},
|
|
14
|
+
});
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
The `key` and `cert` fields expect the _contents_ of your TLS key and certificate, _not a path to it_. This can be a string, `BunFile`, `TypedArray`, or `Buffer`.
|
|
18
|
+
|
|
19
|
+
```ts
|
|
20
|
+
Bun.serve({
|
|
21
|
+
tls: {
|
|
22
|
+
key: Bun.file("./key.pem"), // BunFile
|
|
23
|
+
key: fs.readFileSync("./key.pem"), // Buffer
|
|
24
|
+
key: fs.readFileSync("./key.pem", "utf8"), // string
|
|
25
|
+
key: [Bun.file("./key1.pem"), Bun.file("./key2.pem")], // array of above
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Passphrase
|
|
31
|
+
|
|
32
|
+
If your private key is encrypted with a passphrase, provide a value for `passphrase` to decrypt it.
|
|
33
|
+
|
|
34
|
+
```ts
|
|
35
|
+
Bun.serve({
|
|
36
|
+
tls: {
|
|
37
|
+
key: Bun.file("./key.pem"),
|
|
38
|
+
cert: Bun.file("./cert.pem"),
|
|
39
|
+
passphrase: "my-secret-passphrase", // [!code ++]
|
|
40
|
+
},
|
|
41
|
+
});
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### CA Certificates
|
|
45
|
+
|
|
46
|
+
Optionally, you can override the trusted CA certificates by passing a value for `ca`. By default, the server will trust the list of well-known CAs curated by Mozilla. When `ca` is specified, the Mozilla list is overwritten.
|
|
47
|
+
|
|
48
|
+
```ts
|
|
49
|
+
Bun.serve({
|
|
50
|
+
tls: {
|
|
51
|
+
key: Bun.file("./key.pem"), // path to TLS key
|
|
52
|
+
cert: Bun.file("./cert.pem"), // path to TLS cert
|
|
53
|
+
ca: Bun.file("./ca.pem"), // path to root CA certificate // [!code ++]
|
|
54
|
+
},
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Diffie-Hellman
|
|
59
|
+
|
|
60
|
+
To override Diffie-Hellman parameters:
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
Bun.serve({
|
|
64
|
+
tls: {
|
|
65
|
+
dhParamsFile: "/path/to/dhparams.pem", // path to Diffie Hellman parameters // [!code ++]
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Server name indication (SNI)
|
|
73
|
+
|
|
74
|
+
To configure the server name indication (SNI) for the server, set the `serverName` field in the `tls` object.
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
Bun.serve({
|
|
78
|
+
tls: {
|
|
79
|
+
serverName: "my-server.com", // SNI // [!code ++]
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
To allow multiple server names, pass an array of objects to `tls`, each with a `serverName` field.
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
Bun.serve({
|
|
88
|
+
tls: [
|
|
89
|
+
{
|
|
90
|
+
key: Bun.file("./key1.pem"),
|
|
91
|
+
cert: Bun.file("./cert1.pem"),
|
|
92
|
+
serverName: "my-server1.com", // [!code ++]
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
key: Bun.file("./key2.pem"),
|
|
96
|
+
cert: Bun.file("./cert2.pem"),
|
|
97
|
+
serverName: "my-server2.com", // [!code ++]
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
});
|
|
101
|
+
```
|
|
@@ -1,22 +1,32 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: WebSockets
|
|
3
|
+
description: Server-side WebSockets in Bun
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
`Bun.serve()` supports server-side WebSockets, with on-the-fly compression, TLS support, and a Bun-native publish-subscribe API.
|
|
2
7
|
|
|
3
|
-
|
|
8
|
+
<Info>
|
|
9
|
+
|
|
10
|
+
**⚡️ 7x more throughput**
|
|
4
11
|
|
|
5
|
-
|
|
12
|
+
Bun's WebSockets are fast. For a [simple chatroom](https://github.com/oven-sh/bun/tree/main/bench/websocket-server/README.md) on Linux x64, Bun can handle 7x more requests per second than Node.js + [`"ws"`](https://github.com/websockets/ws).
|
|
6
13
|
|
|
7
|
-
| Messages sent per second | Runtime
|
|
8
|
-
|
|
|
9
|
-
| ~700,000
|
|
10
|
-
| ~100,000
|
|
14
|
+
| **Messages sent per second** | **Runtime** | **Clients** |
|
|
15
|
+
| ---------------------------- | ------------------------------ | ----------- |
|
|
16
|
+
| ~700,000 | (`Bun.serve`) Bun v0.2.1 (x64) | 16 |
|
|
17
|
+
| ~100,000 | (`ws`) Node v18.10.0 (x64) | 16 |
|
|
11
18
|
|
|
12
19
|
Internally Bun's WebSocket implementation is built on [uWebSockets](https://github.com/uNetworking/uWebSockets).
|
|
13
|
-
|
|
20
|
+
|
|
21
|
+
</Info>
|
|
22
|
+
|
|
23
|
+
---
|
|
14
24
|
|
|
15
25
|
## Start a WebSocket server
|
|
16
26
|
|
|
17
27
|
Below is a simple WebSocket server built with `Bun.serve`, in which all incoming requests are [upgraded](https://developer.mozilla.org/en-US/docs/Web/HTTP/Protocol_upgrade_mechanism) to WebSocket connections in the `fetch` handler. The socket handlers are declared in the `websocket` parameter.
|
|
18
28
|
|
|
19
|
-
```ts
|
|
29
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
20
30
|
Bun.serve({
|
|
21
31
|
fetch(req, server) {
|
|
22
32
|
// upgrade the request to a WebSocket
|
|
@@ -31,7 +41,7 @@ Bun.serve({
|
|
|
31
41
|
|
|
32
42
|
The following WebSocket event handlers are supported:
|
|
33
43
|
|
|
34
|
-
```ts
|
|
44
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
35
45
|
Bun.serve({
|
|
36
46
|
fetch(req, server) {}, // upgrade logic
|
|
37
47
|
websocket: {
|
|
@@ -43,7 +53,7 @@ Bun.serve({
|
|
|
43
53
|
});
|
|
44
54
|
```
|
|
45
55
|
|
|
46
|
-
|
|
56
|
+
<Accordion title="An API designed for speed">
|
|
47
57
|
|
|
48
58
|
In Bun, handlers are declared once per server, instead of per socket.
|
|
49
59
|
|
|
@@ -60,11 +70,12 @@ But servers tend to have **many** socket connections open, which means:
|
|
|
60
70
|
So, instead of using an event-based API, `ServerWebSocket` expects you to pass a single object with methods for each event in `Bun.serve()` and it is reused for each connection.
|
|
61
71
|
|
|
62
72
|
This leads to less memory usage and less time spent adding/removing event listeners.
|
|
63
|
-
|
|
73
|
+
|
|
74
|
+
</Accordion>
|
|
64
75
|
|
|
65
76
|
The first argument to each handler is the instance of `ServerWebSocket` handling the event. The `ServerWebSocket` class is a fast, Bun-native implementation of [`WebSocket`](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) with some additional features.
|
|
66
77
|
|
|
67
|
-
```ts
|
|
78
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
68
79
|
Bun.serve({
|
|
69
80
|
fetch(req, server) {}, // upgrade logic
|
|
70
81
|
websocket: {
|
|
@@ -79,24 +90,32 @@ Bun.serve({
|
|
|
79
90
|
|
|
80
91
|
Each `ServerWebSocket` instance has a `.send()` method for sending messages to the client. It supports a range of input types.
|
|
81
92
|
|
|
82
|
-
```ts
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
93
|
+
```ts server.ts icon="/icons/typescript.svg" focus={4-6}
|
|
94
|
+
Bun.serve({
|
|
95
|
+
fetch(req, server) {}, // upgrade logic
|
|
96
|
+
websocket: {
|
|
97
|
+
message(ws, message) {
|
|
98
|
+
ws.send("Hello world"); // string
|
|
99
|
+
ws.send(response.arrayBuffer()); // ArrayBuffer
|
|
100
|
+
ws.send(new Uint8Array([1, 2, 3])); // TypedArray | DataView
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
});
|
|
86
104
|
```
|
|
87
105
|
|
|
88
106
|
### Headers
|
|
89
107
|
|
|
90
108
|
Once the upgrade succeeds, Bun will send a `101 Switching Protocols` response per the [spec](https://developer.mozilla.org/en-US/docs/Web/HTTP/Protocol_upgrade_mechanism). Additional `headers` can be attached to this `Response` in the call to `server.upgrade()`.
|
|
91
109
|
|
|
92
|
-
```ts
|
|
110
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
93
111
|
Bun.serve({
|
|
94
112
|
fetch(req, server) {
|
|
95
113
|
const sessionId = await generateSessionId();
|
|
96
114
|
server.upgrade(req, {
|
|
97
115
|
headers: {
|
|
98
|
-
|
|
99
|
-
|
|
116
|
+
// [!code ++]
|
|
117
|
+
"Set-Cookie": `SessionId=${sessionId}`, // [!code ++]
|
|
118
|
+
}, // [!code ++]
|
|
100
119
|
});
|
|
101
120
|
},
|
|
102
121
|
websocket: {}, // handlers
|
|
@@ -107,9 +126,7 @@ Bun.serve({
|
|
|
107
126
|
|
|
108
127
|
Contextual `data` can be attached to a new WebSocket in the `.upgrade()` call. This data is made available on the `ws.data` property inside the WebSocket handlers.
|
|
109
128
|
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
```ts
|
|
129
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
113
130
|
type WebSocketData = {
|
|
114
131
|
createdAt: number;
|
|
115
132
|
channelId: string;
|
|
@@ -134,7 +151,6 @@ Bun.serve({
|
|
|
134
151
|
websocket: {
|
|
135
152
|
// TypeScript: specify the type of ws.data like this
|
|
136
153
|
data: {} as WebSocketData,
|
|
137
|
-
|
|
138
154
|
// handler called when a message is received
|
|
139
155
|
async message(ws, message) {
|
|
140
156
|
// ws.data is now properly typed as WebSocketData
|
|
@@ -150,29 +166,28 @@ Bun.serve({
|
|
|
150
166
|
});
|
|
151
167
|
```
|
|
152
168
|
|
|
153
|
-
{% callout %}
|
|
154
|
-
**Note:** Previously, you could specify the type of `ws.data` using a type parameter on `Bun.serve`, like `Bun.serve<MyData>({...})`. This pattern was removed due to [a limitation in TypeScript](https://github.com/microsoft/TypeScript/issues/26242) in favor of the `data` property shown above.
|
|
155
|
-
{% /callout %}
|
|
156
|
-
|
|
157
169
|
To connect to this server from the browser, create a new `WebSocket`.
|
|
158
170
|
|
|
159
|
-
```ts
|
|
171
|
+
```ts browser.js icon="file-code"
|
|
160
172
|
const socket = new WebSocket("ws://localhost:3000/chat");
|
|
161
173
|
|
|
162
174
|
socket.addEventListener("message", event => {
|
|
163
175
|
console.log(event.data);
|
|
164
|
-
})
|
|
176
|
+
});
|
|
165
177
|
```
|
|
166
178
|
|
|
167
|
-
|
|
168
|
-
**Identifying users**
|
|
169
|
-
|
|
179
|
+
<Info>
|
|
180
|
+
**Identifying users**
|
|
181
|
+
|
|
182
|
+
The cookies that are currently set on the page will be sent with the WebSocket upgrade request and available on `req.headers` in the `fetch` handler. Parse these cookies to determine the identity of the connecting user and set the value of `data` accordingly.
|
|
183
|
+
|
|
184
|
+
</Info>
|
|
170
185
|
|
|
171
186
|
### Pub/Sub
|
|
172
187
|
|
|
173
188
|
Bun's `ServerWebSocket` implementation implements a native publish-subscribe API for topic-based broadcasting. Individual sockets can `.subscribe()` to a topic (specified with a string identifier) and `.publish()` messages to all other subscribers to that topic (excluding itself). This topic-based broadcast API is similar to [MQTT](https://en.wikipedia.org/wiki/MQTT) and [Redis Pub/Sub](https://redis.io/topics/pubsub).
|
|
174
189
|
|
|
175
|
-
```ts
|
|
190
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
176
191
|
const server = Bun.serve({
|
|
177
192
|
fetch(req, server) {
|
|
178
193
|
const url = new URL(req.url);
|
|
@@ -180,9 +195,7 @@ const server = Bun.serve({
|
|
|
180
195
|
console.log(`upgrade!`);
|
|
181
196
|
const username = getUsernameFromReq(req);
|
|
182
197
|
const success = server.upgrade(req, { data: { username } });
|
|
183
|
-
return success
|
|
184
|
-
? undefined
|
|
185
|
-
: new Response("WebSocket upgrade error", { status: 400 });
|
|
198
|
+
return success ? undefined : new Response("WebSocket upgrade error", { status: 400 });
|
|
186
199
|
}
|
|
187
200
|
|
|
188
201
|
return new Response("Hello world");
|
|
@@ -190,7 +203,6 @@ const server = Bun.serve({
|
|
|
190
203
|
websocket: {
|
|
191
204
|
// TypeScript: specify the type of ws.data like this
|
|
192
205
|
data: {} as { username: string },
|
|
193
|
-
|
|
194
206
|
open(ws) {
|
|
195
207
|
const msg = `${ws.data.username} has entered the chat`;
|
|
196
208
|
ws.subscribe("the-group-chat");
|
|
@@ -229,12 +241,10 @@ server.publish("the-group-chat", "Hello world");
|
|
|
229
241
|
|
|
230
242
|
Per-message [compression](https://websockets.readthedocs.io/en/stable/topics/compression.html) can be enabled with the `perMessageDeflate` parameter.
|
|
231
243
|
|
|
232
|
-
```ts
|
|
244
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
233
245
|
Bun.serve({
|
|
234
|
-
fetch(req, server) {}, // upgrade logic
|
|
235
246
|
websocket: {
|
|
236
|
-
|
|
237
|
-
perMessageDeflate: true,
|
|
247
|
+
perMessageDeflate: true, // [!code ++]
|
|
238
248
|
},
|
|
239
249
|
});
|
|
240
250
|
```
|
|
@@ -265,9 +275,7 @@ By default, Bun will close a WebSocket connection if it is idle for 120 seconds.
|
|
|
265
275
|
Bun.serve({
|
|
266
276
|
fetch(req, server) {}, // upgrade logic
|
|
267
277
|
websocket: {
|
|
268
|
-
idleTimeout: 60, // 60 seconds
|
|
269
|
-
|
|
270
|
-
// ...
|
|
278
|
+
idleTimeout: 60, // 60 seconds // [!code ++]
|
|
271
279
|
},
|
|
272
280
|
});
|
|
273
281
|
```
|
|
@@ -278,13 +286,13 @@ Bun will also close a WebSocket connection if it receives a message that is larg
|
|
|
278
286
|
Bun.serve({
|
|
279
287
|
fetch(req, server) {}, // upgrade logic
|
|
280
288
|
websocket: {
|
|
281
|
-
maxPayloadLength: 1024 * 1024, // 1 MB
|
|
282
|
-
|
|
283
|
-
// ...
|
|
289
|
+
maxPayloadLength: 1024 * 1024, // 1 MB // [!code ++]
|
|
284
290
|
},
|
|
285
291
|
});
|
|
286
292
|
```
|
|
287
293
|
|
|
294
|
+
---
|
|
295
|
+
|
|
288
296
|
## Connect to a `Websocket` server
|
|
289
297
|
|
|
290
298
|
Bun implements the `WebSocket` class. To create a WebSocket client that connects to a `ws://` or `wss://` server, create an instance of `WebSocket`, as you would in the browser.
|
|
@@ -303,19 +311,8 @@ For convenience, Bun lets you setting custom headers directly in the constructor
|
|
|
303
311
|
```ts
|
|
304
312
|
const socket = new WebSocket("ws://localhost:3000", {
|
|
305
313
|
headers: {
|
|
306
|
-
|
|
307
|
-
},
|
|
308
|
-
});
|
|
309
|
-
```
|
|
310
|
-
|
|
311
|
-
### Client compression
|
|
312
|
-
|
|
313
|
-
WebSocket clients support permessage-deflate compression. The `extensions` property shows negotiated compression:
|
|
314
|
-
|
|
315
|
-
```ts
|
|
316
|
-
const socket = new WebSocket("wss://echo.websocket.org");
|
|
317
|
-
socket.addEventListener("open", () => {
|
|
318
|
-
console.log(socket.extensions); // => "permessage-deflate"
|
|
314
|
+
/* custom headers */
|
|
315
|
+
}, // [!code ++]
|
|
319
316
|
});
|
|
320
317
|
```
|
|
321
318
|
|
|
@@ -335,17 +332,16 @@ socket.addEventListener("close", event => {});
|
|
|
335
332
|
socket.addEventListener("error", event => {});
|
|
336
333
|
```
|
|
337
334
|
|
|
335
|
+
---
|
|
336
|
+
|
|
338
337
|
## Reference
|
|
339
338
|
|
|
340
|
-
```ts
|
|
339
|
+
```ts See Typescript Definitions expandable
|
|
341
340
|
namespace Bun {
|
|
342
341
|
export function serve(params: {
|
|
343
342
|
fetch: (req: Request, server: Server) => Response | Promise<Response>;
|
|
344
343
|
websocket?: {
|
|
345
|
-
message: (
|
|
346
|
-
ws: ServerWebSocket,
|
|
347
|
-
message: string | ArrayBuffer | Uint8Array,
|
|
348
|
-
) => void;
|
|
344
|
+
message: (ws: ServerWebSocket, message: string | ArrayBuffer | Uint8Array) => void;
|
|
349
345
|
open?: (ws: ServerWebSocket) => void;
|
|
350
346
|
close?: (ws: ServerWebSocket, code: number, reason: string) => void;
|
|
351
347
|
error?: (ws: ServerWebSocket, error: Error) => void;
|
|
@@ -383,11 +379,7 @@ type Compressor =
|
|
|
383
379
|
|
|
384
380
|
interface Server {
|
|
385
381
|
pendingWebSockets: number;
|
|
386
|
-
publish(
|
|
387
|
-
topic: string,
|
|
388
|
-
data: string | ArrayBufferView | ArrayBuffer,
|
|
389
|
-
compress?: boolean,
|
|
390
|
-
): number;
|
|
382
|
+
publish(topic: string, data: string | ArrayBufferView | ArrayBuffer, compress?: boolean): number;
|
|
391
383
|
upgrade(
|
|
392
384
|
req: Request,
|
|
393
385
|
options?: {
|
|
@@ -410,164 +402,3 @@ interface ServerWebSocket {
|
|
|
410
402
|
cork(cb: (ws: ServerWebSocket) => void): void;
|
|
411
403
|
}
|
|
412
404
|
```
|
|
413
|
-
|
|
414
|
-
<!--
|
|
415
|
-
### `Bun.serve(params)`
|
|
416
|
-
|
|
417
|
-
{% param name="params" %}
|
|
418
|
-
Configuration object for WebSocket server
|
|
419
|
-
{% /param %}
|
|
420
|
-
|
|
421
|
-
{% param name=" fetch" %}
|
|
422
|
-
`(req: Request, server: Server) => Response | Promise<Response>`
|
|
423
|
-
|
|
424
|
-
Call `server.upgrade(req)` to upgrade the request to a WebSocket connection. This method returns `true` if the upgrade succeeds, or `false` if the upgrade fails.
|
|
425
|
-
{% /param %}
|
|
426
|
-
|
|
427
|
-
{% param name=" websocket" %}
|
|
428
|
-
Configuration object for WebSocket server
|
|
429
|
-
{% /param %}
|
|
430
|
-
|
|
431
|
-
{% param name=" message" %}
|
|
432
|
-
`(ws: ServerWebSocket, message: string | ArrayBuffer | Uint8Array) => void`
|
|
433
|
-
|
|
434
|
-
This handler is called when a `WebSocket` receives a message.
|
|
435
|
-
{% /param %}
|
|
436
|
-
|
|
437
|
-
{% param name=" open" %}
|
|
438
|
-
`(ws: ServerWebSocket) => void`
|
|
439
|
-
|
|
440
|
-
This handler is called when a `WebSocket` is opened.
|
|
441
|
-
{% /param %}
|
|
442
|
-
|
|
443
|
-
{% param name=" close" %}
|
|
444
|
-
`(ws: ServerWebSocket, code: number, message: string) => void`
|
|
445
|
-
|
|
446
|
-
This handler is called when a `WebSocket` is closed.
|
|
447
|
-
{% /param %}
|
|
448
|
-
|
|
449
|
-
{% param name=" drain" %}
|
|
450
|
-
`(ws: ServerWebSocket) => void`
|
|
451
|
-
|
|
452
|
-
This handler is called when a `WebSocket` is ready to receive more data.
|
|
453
|
-
{% /param %}
|
|
454
|
-
|
|
455
|
-
{% param name=" perMessageDeflate" %}
|
|
456
|
-
`boolean | {\n compress?: boolean | Compressor;\n decompress?: boolean | Compressor \n}`
|
|
457
|
-
|
|
458
|
-
Enable per-message compression and decompression. This is a boolean value or an object with `compress` and `decompress` properties. Each property can be a boolean value or one of the following `Compressor` types:
|
|
459
|
-
|
|
460
|
-
- `"disable"`
|
|
461
|
-
- `"shared"`
|
|
462
|
-
- `"dedicated"`
|
|
463
|
-
- `"3KB"`
|
|
464
|
-
- `"4KB"`
|
|
465
|
-
- `"8KB"`
|
|
466
|
-
- `"16KB"`
|
|
467
|
-
- `"32KB"`
|
|
468
|
-
- `"64KB"`
|
|
469
|
-
- `"128KB"`
|
|
470
|
-
- `"256KB"`
|
|
471
|
-
|
|
472
|
-
{% /param %}
|
|
473
|
-
|
|
474
|
-
### `ServerWebSocket`
|
|
475
|
-
|
|
476
|
-
{% param name="readyState" %}
|
|
477
|
-
`number`
|
|
478
|
-
|
|
479
|
-
The current state of the `WebSocket` connection. This is one of the following values:
|
|
480
|
-
|
|
481
|
-
- `0` `CONNECTING`
|
|
482
|
-
- `1` `OPEN`
|
|
483
|
-
- `2` `CLOSING`
|
|
484
|
-
- `3` `CLOSED`
|
|
485
|
-
|
|
486
|
-
{% /param %}
|
|
487
|
-
|
|
488
|
-
{% param name="remoteAddress" %}
|
|
489
|
-
|
|
490
|
-
`string`
|
|
491
|
-
|
|
492
|
-
The remote address of the `WebSocket` connection
|
|
493
|
-
{% /param %}
|
|
494
|
-
|
|
495
|
-
{% param name="data" %}
|
|
496
|
-
The data associated with the `WebSocket` connection. This is set in the `server.upgrade()` call.
|
|
497
|
-
{% /param %}
|
|
498
|
-
|
|
499
|
-
{% param name=".send()" %}
|
|
500
|
-
`send(message: string | ArrayBuffer | Uint8Array, compress?: boolean): number`
|
|
501
|
-
|
|
502
|
-
Send a message to the client. Returns a `number` indicating the result of the operation.
|
|
503
|
-
|
|
504
|
-
- `-1`: the message was enqueued but there is backpressure
|
|
505
|
-
- `0`: the message was dropped due to a connection issue
|
|
506
|
-
- `1+`: the number of bytes sent
|
|
507
|
-
|
|
508
|
-
The `compress` argument will enable compression for this message, even if the `perMessageDeflate` option is disabled.
|
|
509
|
-
{% /param %}
|
|
510
|
-
|
|
511
|
-
{% param name=".subscribe()" %}
|
|
512
|
-
`subscribe(topic: string): void`
|
|
513
|
-
|
|
514
|
-
Subscribe to a topic
|
|
515
|
-
{% /param %}
|
|
516
|
-
|
|
517
|
-
{% param name=".unsubscribe()" %}
|
|
518
|
-
`unsubscribe(topic: string): void`
|
|
519
|
-
|
|
520
|
-
Unsubscribe from a topic
|
|
521
|
-
{% /param %}
|
|
522
|
-
|
|
523
|
-
{% param name=".publish()" %}
|
|
524
|
-
`publish(topic: string, data: string | ArrayBufferView | ArrayBuffer, compress?: boolean): number;`
|
|
525
|
-
|
|
526
|
-
Send a message to all subscribers of a topic
|
|
527
|
-
{% /param %}
|
|
528
|
-
|
|
529
|
-
{% param name=".isSubscribed()" %}
|
|
530
|
-
`isSubscribed(topic: string): boolean`
|
|
531
|
-
|
|
532
|
-
Check if the `WebSocket` is subscribed to a topic
|
|
533
|
-
{% /param %}
|
|
534
|
-
{% param name=".cork()" %}
|
|
535
|
-
`cork(cb: (ws: ServerWebSocket) => void): void;`
|
|
536
|
-
|
|
537
|
-
Batch a set of operations on a `WebSocket` connection. The `message`, `open`, and `drain` callbacks are automatically corked, so
|
|
538
|
-
you only need to call this if you are sending messages outside of those
|
|
539
|
-
callbacks or in async functions.
|
|
540
|
-
|
|
541
|
-
```ts
|
|
542
|
-
ws.cork((ws) => {
|
|
543
|
-
ws.send("first");
|
|
544
|
-
ws.send("second");
|
|
545
|
-
ws.send("third");
|
|
546
|
-
});
|
|
547
|
-
```
|
|
548
|
-
|
|
549
|
-
{% /param %}
|
|
550
|
-
|
|
551
|
-
{% param name=".close()" %}
|
|
552
|
-
`close(code?: number, message?: string): void`
|
|
553
|
-
|
|
554
|
-
Close the `WebSocket` connection
|
|
555
|
-
{% /param %}
|
|
556
|
-
|
|
557
|
-
### `Server`
|
|
558
|
-
|
|
559
|
-
{% param name="pendingWebsockets" %}
|
|
560
|
-
Number of in-flight `WebSocket` messages
|
|
561
|
-
{% /param %}
|
|
562
|
-
|
|
563
|
-
{% param name=".publish()" %}
|
|
564
|
-
`publish(topic: string, data: string | ArrayBufferView | ArrayBuffer, compress?: boolean): number;`
|
|
565
|
-
|
|
566
|
-
Send a message to all subscribers of a topic
|
|
567
|
-
{% /param %}
|
|
568
|
-
|
|
569
|
-
{% param name=".upgrade()" %}
|
|
570
|
-
`upgrade(req: Request): boolean`
|
|
571
|
-
|
|
572
|
-
Upgrade a request to a `WebSocket` connection. Returns `true` if the upgrade succeeds, or `false` if the upgrade fails.
|
|
573
|
-
{% /param %} -->
|