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,6 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
title: Redis
|
|
3
|
+
description: Use Bun's native Redis client with a Promise-based API
|
|
4
|
+
---
|
|
2
5
|
|
|
3
|
-
|
|
6
|
+
<Note>Bun's Redis client supports Redis server versions 7.2 and up.</Note>
|
|
7
|
+
|
|
8
|
+
Bun provides native bindings for working with Redis databases with a modern, Promise-based API. The interface is designed to be simple and performant, with built-in connection management, fully typed responses, and TLS support.
|
|
9
|
+
|
|
10
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
4
11
|
import { redis } from "bun";
|
|
5
12
|
|
|
6
13
|
// Set a key
|
|
@@ -21,11 +28,13 @@ const exists = await redis.exists("greeting");
|
|
|
21
28
|
await redis.del("greeting");
|
|
22
29
|
```
|
|
23
30
|
|
|
31
|
+
---
|
|
32
|
+
|
|
24
33
|
## Getting Started
|
|
25
34
|
|
|
26
35
|
To use the Redis client, you first need to create a connection:
|
|
27
36
|
|
|
28
|
-
```ts
|
|
37
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
29
38
|
import { redis, RedisClient } from "bun";
|
|
30
39
|
|
|
31
40
|
// Using the default client (reads connection info from environment)
|
|
@@ -42,14 +51,13 @@ await client.incr("counter");
|
|
|
42
51
|
By default, the client reads connection information from the following environment variables (in order of precedence):
|
|
43
52
|
|
|
44
53
|
- `REDIS_URL`
|
|
45
|
-
- `VALKEY_URL`
|
|
46
54
|
- If not set, defaults to `"redis://localhost:6379"`
|
|
47
55
|
|
|
48
56
|
### Connection Lifecycle
|
|
49
57
|
|
|
50
58
|
The Redis client automatically handles connections in the background:
|
|
51
59
|
|
|
52
|
-
```ts
|
|
60
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
53
61
|
// No connection is made until a command is executed
|
|
54
62
|
const client = new RedisClient();
|
|
55
63
|
|
|
@@ -65,7 +73,7 @@ client.close();
|
|
|
65
73
|
|
|
66
74
|
You can also manually control the connection lifecycle:
|
|
67
75
|
|
|
68
|
-
```ts
|
|
76
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
69
77
|
const client = new RedisClient();
|
|
70
78
|
|
|
71
79
|
// Explicitly connect
|
|
@@ -78,11 +86,13 @@ await client.set("key", "value");
|
|
|
78
86
|
client.close();
|
|
79
87
|
```
|
|
80
88
|
|
|
89
|
+
---
|
|
90
|
+
|
|
81
91
|
## Basic Operations
|
|
82
92
|
|
|
83
93
|
### String Operations
|
|
84
94
|
|
|
85
|
-
```ts
|
|
95
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
86
96
|
// Set a key
|
|
87
97
|
await redis.set("user:1:name", "Alice");
|
|
88
98
|
|
|
@@ -108,7 +118,7 @@ const ttl = await redis.ttl("session:123");
|
|
|
108
118
|
|
|
109
119
|
### Numeric Operations
|
|
110
120
|
|
|
111
|
-
```ts
|
|
121
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
112
122
|
// Set initial value
|
|
113
123
|
await redis.set("counter", "0");
|
|
114
124
|
|
|
@@ -121,16 +131,9 @@ await redis.decr("counter");
|
|
|
121
131
|
|
|
122
132
|
### Hash Operations
|
|
123
133
|
|
|
124
|
-
```ts
|
|
134
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
125
135
|
// Set multiple fields in a hash
|
|
126
|
-
await redis.hmset("user:123", [
|
|
127
|
-
"name",
|
|
128
|
-
"Alice",
|
|
129
|
-
"email",
|
|
130
|
-
"alice@example.com",
|
|
131
|
-
"active",
|
|
132
|
-
"true",
|
|
133
|
-
]);
|
|
136
|
+
await redis.hmset("user:123", ["name", "Alice", "email", "alice@example.com", "active", "true"]);
|
|
134
137
|
|
|
135
138
|
// Get multiple fields from a hash
|
|
136
139
|
const userFields = await redis.hmget("user:123", ["name", "email"]);
|
|
@@ -149,7 +152,7 @@ await redis.hincrbyfloat("user:123", "score", 1.5);
|
|
|
149
152
|
|
|
150
153
|
### Set Operations
|
|
151
154
|
|
|
152
|
-
```ts
|
|
155
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
153
156
|
// Add member to set
|
|
154
157
|
await redis.sadd("tags", "javascript");
|
|
155
158
|
|
|
@@ -169,23 +172,25 @@ const randomTag = await redis.srandmember("tags");
|
|
|
169
172
|
const poppedTag = await redis.spop("tags");
|
|
170
173
|
```
|
|
171
174
|
|
|
175
|
+
---
|
|
176
|
+
|
|
172
177
|
## Pub/Sub
|
|
173
178
|
|
|
174
179
|
Bun provides native bindings for the [Redis
|
|
175
180
|
Pub/Sub](https://redis.io/docs/latest/develop/pubsub/) protocol. **New in Bun
|
|
176
181
|
1.2.23**
|
|
177
182
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
183
|
+
<Warning>
|
|
184
|
+
The Redis Pub/Sub feature is experimental. Although we expect it to be stable, we're currently actively looking for
|
|
185
|
+
feedback and areas for improvement.
|
|
186
|
+
</Warning>
|
|
182
187
|
|
|
183
188
|
### Basic Usage
|
|
184
189
|
|
|
185
190
|
To get started publishing messages, you can set up a publisher in
|
|
186
191
|
`publisher.ts`:
|
|
187
192
|
|
|
188
|
-
```typescript
|
|
193
|
+
```typescript publisher.ts icon="/icons/typescript.svg"
|
|
189
194
|
import { RedisClient } from "bun";
|
|
190
195
|
|
|
191
196
|
const writer = new RedisClient("redis://localhost:6739");
|
|
@@ -198,7 +203,7 @@ writer.close();
|
|
|
198
203
|
|
|
199
204
|
In another file, create the subscriber in `subscriber.ts`:
|
|
200
205
|
|
|
201
|
-
```typescript
|
|
206
|
+
```typescript subscriber.ts icon="/icons/typescript.svg"
|
|
202
207
|
import { RedisClient } from "bun";
|
|
203
208
|
|
|
204
209
|
const listener = new RedisClient("redis://localhost:6739");
|
|
@@ -211,40 +216,40 @@ await listener.subscribe("general", (message, channel) => {
|
|
|
211
216
|
|
|
212
217
|
In one shell, run your subscriber:
|
|
213
218
|
|
|
214
|
-
```bash
|
|
219
|
+
```bash terminal icon="terminal"
|
|
215
220
|
bun run subscriber.ts
|
|
216
221
|
```
|
|
217
222
|
|
|
218
223
|
and, in another, run your publisher:
|
|
219
224
|
|
|
220
|
-
```bash
|
|
225
|
+
```bash terminal icon="terminal"
|
|
221
226
|
bun run publisher.ts
|
|
222
227
|
```
|
|
223
228
|
|
|
224
|
-
|
|
225
|
-
|
|
229
|
+
<Note>
|
|
230
|
+
The subscription mode takes over the `RedisClient` connection. A
|
|
226
231
|
client with subscriptions can only call `RedisClient.prototype.subscribe()`. In
|
|
227
232
|
other words, applications which need to message Redis need a separate
|
|
228
233
|
connection, acquirable through `.duplicate()`:
|
|
229
234
|
|
|
230
|
-
```typescript
|
|
235
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
231
236
|
import { RedisClient } from "bun";
|
|
232
237
|
|
|
233
238
|
const redis = new RedisClient("redis://localhost:6379");
|
|
234
239
|
await redis.connect();
|
|
235
|
-
const subscriber = await redis.duplicate();
|
|
240
|
+
const subscriber = await redis.duplicate(); // [!code ++]
|
|
236
241
|
|
|
237
242
|
await subscriber.subscribe("foo", () => {});
|
|
238
243
|
await redis.set("bar", "baz");
|
|
239
244
|
```
|
|
240
245
|
|
|
241
|
-
|
|
246
|
+
</Note>
|
|
242
247
|
|
|
243
248
|
### Publishing
|
|
244
249
|
|
|
245
250
|
Publishing messages is done through the `publish()` method:
|
|
246
251
|
|
|
247
|
-
```typescript
|
|
252
|
+
```typescript redis.ts icon="/icons/typescript.svg"
|
|
248
253
|
await client.publish(channelName, message);
|
|
249
254
|
```
|
|
250
255
|
|
|
@@ -253,13 +258,13 @@ await client.publish(channelName, message);
|
|
|
253
258
|
The Bun `RedisClient` allows you to subscribe to channels through the
|
|
254
259
|
`.subscribe()` method:
|
|
255
260
|
|
|
256
|
-
```typescript
|
|
261
|
+
```typescript redis.ts icon="/icons/typescript.svg"
|
|
257
262
|
await client.subscribe(channel, (message, channel) => {});
|
|
258
263
|
```
|
|
259
264
|
|
|
260
265
|
You can unsubscribe through the `.unsubscribe()` method:
|
|
261
266
|
|
|
262
|
-
```typescript
|
|
267
|
+
```typescript redis.ts icon="/icons/typescript.svg"
|
|
263
268
|
await client.unsubscribe(); // Unsubscribe from all channels.
|
|
264
269
|
await client.unsubscribe(channel); // Unsubscribe a particular channel.
|
|
265
270
|
await client.unsubscribe(channel, listener); // Unsubscribe a particular listener.
|
|
@@ -271,19 +276,16 @@ await client.unsubscribe(channel, listener); // Unsubscribe a particular listene
|
|
|
271
276
|
|
|
272
277
|
The client automatically pipelines commands, improving performance by sending multiple commands in a batch and processing responses as they arrive.
|
|
273
278
|
|
|
274
|
-
```ts
|
|
279
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
275
280
|
// Commands are automatically pipelined by default
|
|
276
|
-
const [infoResult, listResult] = await Promise.all([
|
|
277
|
-
redis.get("user:1:name"),
|
|
278
|
-
redis.get("user:2:email"),
|
|
279
|
-
]);
|
|
281
|
+
const [infoResult, listResult] = await Promise.all([redis.get("user:1:name"), redis.get("user:2:email")]);
|
|
280
282
|
```
|
|
281
283
|
|
|
282
284
|
To disable automatic pipelining, you can set the `enableAutoPipelining` option to `false`:
|
|
283
285
|
|
|
284
|
-
```ts
|
|
286
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
285
287
|
const client = new RedisClient("redis://localhost:6379", {
|
|
286
|
-
enableAutoPipelining: false,
|
|
288
|
+
enableAutoPipelining: false, // [!code ++]
|
|
287
289
|
});
|
|
288
290
|
```
|
|
289
291
|
|
|
@@ -291,7 +293,7 @@ const client = new RedisClient("redis://localhost:6379", {
|
|
|
291
293
|
|
|
292
294
|
When you need to use commands that don't have convenience methods, you can use the `send` method:
|
|
293
295
|
|
|
294
|
-
```ts
|
|
296
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
295
297
|
// Run any Redis command
|
|
296
298
|
const info = await redis.send("INFO", []);
|
|
297
299
|
|
|
@@ -308,7 +310,7 @@ The `send` method allows you to use any Redis command, even ones that don't have
|
|
|
308
310
|
|
|
309
311
|
You can register handlers for connection events:
|
|
310
312
|
|
|
311
|
-
```ts
|
|
313
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
312
314
|
const client = new RedisClient();
|
|
313
315
|
|
|
314
316
|
// Called when successfully connected to Redis server
|
|
@@ -328,7 +330,7 @@ client.close();
|
|
|
328
330
|
|
|
329
331
|
### Connection Status and Monitoring
|
|
330
332
|
|
|
331
|
-
```ts
|
|
333
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
332
334
|
// Check if connected
|
|
333
335
|
console.log(client.connected); // boolean indicating connection status
|
|
334
336
|
|
|
@@ -373,11 +375,13 @@ The following commands disable automatic pipelining:
|
|
|
373
375
|
- `UNSUBSCRIBE`
|
|
374
376
|
- `UNPSUBSCRIBE`
|
|
375
377
|
|
|
378
|
+
---
|
|
379
|
+
|
|
376
380
|
## Connection Options
|
|
377
381
|
|
|
378
382
|
When creating a client, you can pass various options to configure the connection:
|
|
379
383
|
|
|
380
|
-
```ts
|
|
384
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
381
385
|
const client = new RedisClient("redis://localhost:6379", {
|
|
382
386
|
// Connection timeout in milliseconds (default: 10000)
|
|
383
387
|
connectionTimeout: 5000,
|
|
@@ -420,11 +424,13 @@ When a connection is lost, the client automatically attempts to reconnect with e
|
|
|
420
424
|
- Queued if `enableOfflineQueue` is true (default)
|
|
421
425
|
- Rejected immediately if `enableOfflineQueue` is false
|
|
422
426
|
|
|
427
|
+
---
|
|
428
|
+
|
|
423
429
|
## Supported URL Formats
|
|
424
430
|
|
|
425
431
|
The Redis client supports various URL formats:
|
|
426
432
|
|
|
427
|
-
```ts
|
|
433
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
428
434
|
// Standard Redis URL
|
|
429
435
|
new RedisClient("redis://localhost:6379");
|
|
430
436
|
new RedisClient("redis://localhost:6379");
|
|
@@ -450,11 +456,13 @@ new RedisClient("redis+tls+unix:///path/to/socket");
|
|
|
450
456
|
new RedisClient("redis+tls+unix:///path/to/socket");
|
|
451
457
|
```
|
|
452
458
|
|
|
459
|
+
---
|
|
460
|
+
|
|
453
461
|
## Error Handling
|
|
454
462
|
|
|
455
463
|
The Redis client throws typed errors for different scenarios:
|
|
456
464
|
|
|
457
|
-
```ts
|
|
465
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
458
466
|
try {
|
|
459
467
|
await redis.get("non-existent-key");
|
|
460
468
|
} catch (error) {
|
|
@@ -474,11 +482,13 @@ Common error codes:
|
|
|
474
482
|
- `ERR_REDIS_AUTHENTICATION_FAILED` - Failed to authenticate with the server
|
|
475
483
|
- `ERR_REDIS_INVALID_RESPONSE` - Received an invalid response from the server
|
|
476
484
|
|
|
485
|
+
---
|
|
486
|
+
|
|
477
487
|
## Example Use Cases
|
|
478
488
|
|
|
479
489
|
### Caching
|
|
480
490
|
|
|
481
|
-
```ts
|
|
491
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
482
492
|
async function getUserWithCache(userId) {
|
|
483
493
|
const cacheKey = `user:${userId}`;
|
|
484
494
|
|
|
@@ -501,7 +511,7 @@ async function getUserWithCache(userId) {
|
|
|
501
511
|
|
|
502
512
|
### Rate Limiting
|
|
503
513
|
|
|
504
|
-
```ts
|
|
514
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
505
515
|
async function rateLimit(ip, limit = 100, windowSecs = 3600) {
|
|
506
516
|
const key = `ratelimit:${ip}`;
|
|
507
517
|
|
|
@@ -523,20 +533,13 @@ async function rateLimit(ip, limit = 100, windowSecs = 3600) {
|
|
|
523
533
|
|
|
524
534
|
### Session Storage
|
|
525
535
|
|
|
526
|
-
```ts
|
|
536
|
+
```ts redis.ts icon="/icons/typescript.svg"
|
|
527
537
|
async function createSession(userId, data) {
|
|
528
538
|
const sessionId = crypto.randomUUID();
|
|
529
539
|
const key = `session:${sessionId}`;
|
|
530
540
|
|
|
531
541
|
// Store session with expiration
|
|
532
|
-
await redis.hmset(key, [
|
|
533
|
-
"userId",
|
|
534
|
-
userId.toString(),
|
|
535
|
-
"created",
|
|
536
|
-
Date.now().toString(),
|
|
537
|
-
"data",
|
|
538
|
-
JSON.stringify(data),
|
|
539
|
-
]);
|
|
542
|
+
await redis.hmset(key, ["userId", userId.toString(), "created", Date.now().toString(), "data", JSON.stringify(data)]);
|
|
540
543
|
await redis.expire(key, 86400); // 24 hours
|
|
541
544
|
|
|
542
545
|
return sessionId;
|
|
@@ -549,11 +552,7 @@ async function getSession(sessionId) {
|
|
|
549
552
|
const exists = await redis.exists(key);
|
|
550
553
|
if (!exists) return null;
|
|
551
554
|
|
|
552
|
-
const [userId, created, data] = await redis.hmget(key, [
|
|
553
|
-
"userId",
|
|
554
|
-
"created",
|
|
555
|
-
"data",
|
|
556
|
-
]);
|
|
555
|
+
const [userId, created, data] = await redis.hmget(key, ["userId", "created", "data"]);
|
|
557
556
|
|
|
558
557
|
return {
|
|
559
558
|
userId: Number(userId),
|
|
@@ -563,33 +562,19 @@ async function getSession(sessionId) {
|
|
|
563
562
|
}
|
|
564
563
|
```
|
|
565
564
|
|
|
565
|
+
---
|
|
566
|
+
|
|
566
567
|
## Implementation Notes
|
|
567
568
|
|
|
568
569
|
Bun's Redis client is implemented in Zig and uses the Redis Serialization Protocol (RESP3). It manages connections efficiently and provides automatic reconnection with exponential backoff.
|
|
569
570
|
|
|
570
571
|
The client supports pipelining commands, meaning multiple commands can be sent without waiting for the replies to previous commands. This significantly improves performance when sending multiple commands in succession.
|
|
571
572
|
|
|
572
|
-
### RESP3 Protocol Support
|
|
573
|
-
|
|
574
|
-
Bun's Redis client uses the newer RESP3 protocol by default, which provides more data types and features compared to RESP2:
|
|
575
|
-
|
|
576
|
-
- Better error handling with typed errors
|
|
577
|
-
- Native Boolean responses
|
|
578
|
-
- Map/Dictionary responses (key-value objects)
|
|
579
|
-
- Set responses
|
|
580
|
-
- Double (floating point) values
|
|
581
|
-
- BigNumber support for large integer values
|
|
582
|
-
|
|
583
|
-
When connecting to Redis servers using older versions that don't support RESP3, the client automatically fallbacks to compatible modes.
|
|
584
|
-
|
|
585
573
|
## Limitations and Future Plans
|
|
586
574
|
|
|
587
575
|
Current limitations of the Redis client we are planning to address in future versions:
|
|
588
576
|
|
|
589
|
-
-
|
|
590
|
-
- [ ] Streams are supported but without dedicated methods
|
|
591
|
-
- [ ] Pub/Sub does not currently support binary data, nor pattern-based
|
|
592
|
-
subscriptions.
|
|
577
|
+
- Transactions (MULTI/EXEC) must be done through raw commands for now
|
|
593
578
|
|
|
594
579
|
Unsupported features:
|
|
595
580
|
|