bun-types 1.3.2-canary.20251105T140650 → 1.3.2-canary.20251108T140624
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,411 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Plugins
|
|
3
|
+
description: Universal plugin API for extending Bun's runtime and bundler
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Bun provides a universal plugin API that can be used to extend both the runtime and bundler.
|
|
7
|
+
|
|
8
|
+
Plugins intercept imports and perform custom loading logic: reading files, transpiling code, etc. They can be used to add support for additional file types, like `.scss` or `.yaml`. In the context of Bun's bundler, plugins can be used to implement framework-level features like CSS extraction, macros, and client-server code co-location.
|
|
9
|
+
|
|
10
|
+
## Lifecycle hooks
|
|
11
|
+
|
|
12
|
+
Plugins can register callbacks to be run at various points in the lifecycle of a bundle:
|
|
13
|
+
|
|
14
|
+
- `onStart()`: Run once the bundler has started a bundle
|
|
15
|
+
- `onResolve()`: Run before a module is resolved
|
|
16
|
+
- `onLoad()`: Run before a module is loaded
|
|
17
|
+
- `onBeforeParse()`: Run zero-copy native addons in the parser thread before a file is parsed
|
|
18
|
+
|
|
19
|
+
## Reference
|
|
20
|
+
|
|
21
|
+
A rough overview of the types (please refer to Bun's `bun.d.ts` for the full type definitions):
|
|
22
|
+
|
|
23
|
+
```ts title="bun.d.ts" icon="/icons/typescript.svg"
|
|
24
|
+
type PluginBuilder = {
|
|
25
|
+
onStart(callback: () => void): void;
|
|
26
|
+
onResolve: (
|
|
27
|
+
args: { filter: RegExp; namespace?: string },
|
|
28
|
+
callback: (args: { path: string; importer: string }) => {
|
|
29
|
+
path: string;
|
|
30
|
+
namespace?: string;
|
|
31
|
+
} | void,
|
|
32
|
+
) => void;
|
|
33
|
+
onLoad: (
|
|
34
|
+
args: { filter: RegExp; namespace?: string },
|
|
35
|
+
defer: () => Promise<void>,
|
|
36
|
+
callback: (args: { path: string }) => {
|
|
37
|
+
loader?: Loader;
|
|
38
|
+
contents?: string;
|
|
39
|
+
exports?: Record<string, any>;
|
|
40
|
+
},
|
|
41
|
+
) => void;
|
|
42
|
+
config: BuildConfig;
|
|
43
|
+
};
|
|
44
|
+
|
|
45
|
+
type Loader = "js" | "jsx" | "ts" | "tsx" | "css" | "json" | "toml";
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Usage
|
|
49
|
+
|
|
50
|
+
A plugin is defined as simple JavaScript object containing a `name` property and a `setup` function.
|
|
51
|
+
|
|
52
|
+
```ts title="myPlugin.ts" icon="/icons/typescript.svg"
|
|
53
|
+
import type { BunPlugin } from "bun";
|
|
54
|
+
|
|
55
|
+
const myPlugin: BunPlugin = {
|
|
56
|
+
name: "Custom loader",
|
|
57
|
+
setup(build) {
|
|
58
|
+
// implementation
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
This plugin can be passed into the `plugins` array when calling `Bun.build`.
|
|
64
|
+
|
|
65
|
+
```ts title="index.ts" icon="/icons/typescript.svg"
|
|
66
|
+
await Bun.build({
|
|
67
|
+
entrypoints: ["./app.ts"],
|
|
68
|
+
outdir: "./out",
|
|
69
|
+
plugins: [myPlugin],
|
|
70
|
+
});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Plugin lifecycle
|
|
74
|
+
|
|
75
|
+
### Namespaces
|
|
76
|
+
|
|
77
|
+
`onLoad` and `onResolve` accept an optional `namespace` string. What is a namespace?
|
|
78
|
+
|
|
79
|
+
Every module has a namespace. Namespaces are used to prefix the import in transpiled code; for instance, a loader with a `filter: /\.yaml$/` and `namespace: "yaml:"` will transform an import from `./myfile.yaml` into `yaml:./myfile.yaml`.
|
|
80
|
+
|
|
81
|
+
The default namespace is `"file"` and it is not necessary to specify it, for instance: `import myModule from "./my-module.ts"` is the same as `import myModule from "file:./my-module.ts"`.
|
|
82
|
+
|
|
83
|
+
Other common namespaces are:
|
|
84
|
+
|
|
85
|
+
- `"bun"`: for Bun-specific modules (e.g. `"bun:test"`, `"bun:sqlite"`)
|
|
86
|
+
- `"node"`: for Node.js modules (e.g. `"node:fs"`, `"node:path"`)
|
|
87
|
+
|
|
88
|
+
### onStart
|
|
89
|
+
|
|
90
|
+
```ts
|
|
91
|
+
onStart(callback: () => void): Promise<void> | void;
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
Registers a callback to be run when the bundler starts a new bundle.
|
|
95
|
+
|
|
96
|
+
```ts title="index.ts" icon="/icons/typescript.svg"
|
|
97
|
+
import { plugin } from "bun";
|
|
98
|
+
|
|
99
|
+
plugin({
|
|
100
|
+
name: "onStart example",
|
|
101
|
+
|
|
102
|
+
setup(build) {
|
|
103
|
+
build.onStart(() => {
|
|
104
|
+
console.log("Bundle started!");
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
The callback can return a Promise. After the bundle process has initialized, the bundler waits until all `onStart()` callbacks have completed before continuing.
|
|
111
|
+
|
|
112
|
+
For example:
|
|
113
|
+
|
|
114
|
+
```ts title="index.ts" icon="/icons/typescript.svg"
|
|
115
|
+
const result = await Bun.build({
|
|
116
|
+
entrypoints: ["./app.ts"],
|
|
117
|
+
outdir: "./dist",
|
|
118
|
+
sourcemap: "external",
|
|
119
|
+
plugins: [
|
|
120
|
+
{
|
|
121
|
+
name: "Sleep for 10 seconds",
|
|
122
|
+
setup(build) {
|
|
123
|
+
build.onStart(async () => {
|
|
124
|
+
await Bun.sleep(10_000);
|
|
125
|
+
});
|
|
126
|
+
},
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
name: "Log bundle time to a file",
|
|
130
|
+
setup(build) {
|
|
131
|
+
build.onStart(async () => {
|
|
132
|
+
const now = Date.now();
|
|
133
|
+
await Bun.$`echo ${now} > bundle-time.txt`;
|
|
134
|
+
});
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
],
|
|
138
|
+
});
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
In the above example, Bun will wait until the first `onStart()` (sleeping for 10 seconds) has completed, as well as the second `onStart()` (writing the bundle time to a file).
|
|
142
|
+
|
|
143
|
+
<Note>
|
|
144
|
+
`onStart()` callbacks (like every other lifecycle callback) do not have the ability to modify the `build.config`
|
|
145
|
+
object. If you want to mutate `build.config`, you must do so directly in the `setup()` function.
|
|
146
|
+
</Note>
|
|
147
|
+
|
|
148
|
+
### onResolve
|
|
149
|
+
|
|
150
|
+
```ts
|
|
151
|
+
onResolve(
|
|
152
|
+
args: { filter: RegExp; namespace?: string },
|
|
153
|
+
callback: (args: { path: string; importer: string }) => {
|
|
154
|
+
path: string;
|
|
155
|
+
namespace?: string;
|
|
156
|
+
} | void,
|
|
157
|
+
): void;
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
To bundle your project, Bun walks down the dependency tree of all modules in your project. For each imported module, Bun actually has to find and read that module. The "finding" part is known as "resolving" a module.
|
|
161
|
+
|
|
162
|
+
The `onResolve()` plugin lifecycle callback allows you to configure how a module is resolved.
|
|
163
|
+
|
|
164
|
+
The first argument to `onResolve()` is an object with a `filter` and `namespace` property. The `filter` is a regular expression which is run on the import string. Effectively, these allow you to filter which modules your custom resolution logic will apply to.
|
|
165
|
+
|
|
166
|
+
The second argument to `onResolve()` is a callback which is run for each module import Bun finds that matches the filter and namespace defined in the first argument.
|
|
167
|
+
|
|
168
|
+
The callback receives as input the path to the matching module. The callback can return a new path for the module. Bun will read the contents of the new path and parse it as a module.
|
|
169
|
+
|
|
170
|
+
For example, redirecting all imports to `images/` to `./public/images/`:
|
|
171
|
+
|
|
172
|
+
```ts title="index.ts" icon="/icons/typescript.svg"
|
|
173
|
+
import { plugin } from "bun";
|
|
174
|
+
|
|
175
|
+
plugin({
|
|
176
|
+
name: "onResolve example",
|
|
177
|
+
setup(build) {
|
|
178
|
+
build.onResolve({ filter: /.*/, namespace: "file" }, args => {
|
|
179
|
+
if (args.path.startsWith("images/")) {
|
|
180
|
+
return {
|
|
181
|
+
path: args.path.replace("images/", "./public/images/"),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
},
|
|
186
|
+
});
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### onLoad
|
|
190
|
+
|
|
191
|
+
```ts
|
|
192
|
+
onLoad(
|
|
193
|
+
args: { filter: RegExp; namespace?: string },
|
|
194
|
+
defer: () => Promise<void>,
|
|
195
|
+
callback: (args: { path: string, importer: string, namespace: string, kind: ImportKind }) => {
|
|
196
|
+
loader?: Loader;
|
|
197
|
+
contents?: string;
|
|
198
|
+
exports?: Record<string, any>;
|
|
199
|
+
},
|
|
200
|
+
): void;
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
After Bun's bundler has resolved a module, it needs to read the contents of the module and parse it.
|
|
204
|
+
|
|
205
|
+
The `onLoad()` plugin lifecycle callback allows you to modify the contents of a module before it is read and parsed by Bun.
|
|
206
|
+
|
|
207
|
+
Like `onResolve()`, the first argument to `onLoad()` allows you to filter which modules this invocation of `onLoad()` will apply to.
|
|
208
|
+
|
|
209
|
+
The second argument to `onLoad()` is a callback which is run for each matching module before Bun loads the contents of the module into memory.
|
|
210
|
+
|
|
211
|
+
This callback receives as input the path to the matching module, the importer of the module (the module that imported the module), the namespace of the module, and the kind of the module.
|
|
212
|
+
|
|
213
|
+
The callback can return a new `contents` string for the module as well as a new `loader`.
|
|
214
|
+
|
|
215
|
+
For example:
|
|
216
|
+
|
|
217
|
+
```ts title="index.ts" icon="/icons/typescript.svg"
|
|
218
|
+
import { plugin } from "bun";
|
|
219
|
+
|
|
220
|
+
const envPlugin: BunPlugin = {
|
|
221
|
+
name: "env plugin",
|
|
222
|
+
setup(build) {
|
|
223
|
+
build.onLoad({ filter: /env/, namespace: "file" }, args => {
|
|
224
|
+
return {
|
|
225
|
+
contents: `export default ${JSON.stringify(process.env)}`,
|
|
226
|
+
loader: "js",
|
|
227
|
+
};
|
|
228
|
+
});
|
|
229
|
+
},
|
|
230
|
+
});
|
|
231
|
+
|
|
232
|
+
Bun.build({
|
|
233
|
+
entrypoints: ["./app.ts"],
|
|
234
|
+
outdir: "./dist",
|
|
235
|
+
plugins: [envPlugin],
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
// import env from "env"
|
|
239
|
+
// env.FOO === "bar"
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
This plugin will transform all imports of the form `import env from "env"` into a JavaScript module that exports the current environment variables.
|
|
243
|
+
|
|
244
|
+
#### .defer()
|
|
245
|
+
|
|
246
|
+
One of the arguments passed to the `onLoad` callback is a `defer` function. This function returns a Promise that is resolved when all other modules have been loaded.
|
|
247
|
+
|
|
248
|
+
This allows you to delay execution of the `onLoad` callback until all other modules have been loaded.
|
|
249
|
+
|
|
250
|
+
This is useful for returning contents of a module that depends on other modules.
|
|
251
|
+
|
|
252
|
+
<Accordion title="Example: tracking and reporting unused exports">
|
|
253
|
+
|
|
254
|
+
```ts title="index.ts" icon="/icons/typescript.svg"
|
|
255
|
+
import { plugin } from "bun";
|
|
256
|
+
|
|
257
|
+
plugin({
|
|
258
|
+
name: "track imports",
|
|
259
|
+
setup(build) {
|
|
260
|
+
const transpiler = new Bun.Transpiler();
|
|
261
|
+
|
|
262
|
+
let trackedImports: Record<string, number> = {};
|
|
263
|
+
|
|
264
|
+
// Each module that goes through this onLoad callback
|
|
265
|
+
// will record its imports in `trackedImports`
|
|
266
|
+
build.onLoad({ filter: /\.ts/ }, async ({ path }) => {
|
|
267
|
+
const contents = await Bun.file(path).arrayBuffer();
|
|
268
|
+
|
|
269
|
+
const imports = transpiler.scanImports(contents);
|
|
270
|
+
|
|
271
|
+
for (const i of imports) {
|
|
272
|
+
trackedImports[i.path] = (trackedImports[i.path] || 0) + 1;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
return undefined;
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
build.onLoad({ filter: /stats\.json/ }, async ({ defer }) => {
|
|
279
|
+
// Wait for all files to be loaded, ensuring
|
|
280
|
+
// that every file goes through the above `onLoad()` function
|
|
281
|
+
// and their imports tracked
|
|
282
|
+
await defer();
|
|
283
|
+
|
|
284
|
+
// Emit JSON containing the stats of each import
|
|
285
|
+
return {
|
|
286
|
+
contents: `export default ${JSON.stringify(trackedImports)}`,
|
|
287
|
+
loader: "json",
|
|
288
|
+
};
|
|
289
|
+
});
|
|
290
|
+
},
|
|
291
|
+
});
|
|
292
|
+
```
|
|
293
|
+
|
|
294
|
+
</Accordion>
|
|
295
|
+
|
|
296
|
+
<Warning>
|
|
297
|
+
The `.defer()` function currently has the limitation that it can only be called once per `onLoad` callback.
|
|
298
|
+
</Warning>
|
|
299
|
+
|
|
300
|
+
## Native plugins
|
|
301
|
+
|
|
302
|
+
One of the reasons why Bun's bundler is so fast is that it is written in native code and leverages multi-threading to load and parse modules in parallel.
|
|
303
|
+
|
|
304
|
+
However, one limitation of plugins written in JavaScript is that JavaScript itself is single-threaded.
|
|
305
|
+
|
|
306
|
+
Native plugins are written as NAPI modules and can be run on multiple threads. This allows native plugins to run much faster than JavaScript plugins.
|
|
307
|
+
|
|
308
|
+
In addition, native plugins can skip unnecessary work such as the UTF-8 -> UTF-16 conversion needed to pass strings to JavaScript.
|
|
309
|
+
|
|
310
|
+
These are the following lifecycle hooks which are available to native plugins:
|
|
311
|
+
|
|
312
|
+
- `onBeforeParse()`: Called on any thread before a file is parsed by Bun's bundler.
|
|
313
|
+
|
|
314
|
+
Native plugins are NAPI modules which expose lifecycle hooks as C ABI functions.
|
|
315
|
+
|
|
316
|
+
To create a native plugin, you must export a C ABI function which matches the signature of the native lifecycle hook you want to implement.
|
|
317
|
+
|
|
318
|
+
### Creating a native plugin in Rust
|
|
319
|
+
|
|
320
|
+
Native plugins are NAPI modules which expose lifecycle hooks as C ABI functions.
|
|
321
|
+
|
|
322
|
+
To create a native plugin, you must export a C ABI function which matches the signature of the native lifecycle hook you want to implement.
|
|
323
|
+
|
|
324
|
+
```bash terminal icon="terminal"
|
|
325
|
+
bun add -g @napi-rs/cli
|
|
326
|
+
napi new
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Then install this crate:
|
|
330
|
+
|
|
331
|
+
```bash terminal icon="terminal"
|
|
332
|
+
cargo add bun-native-plugin
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Now, inside the `lib.rs` file, we'll use the `bun_native_plugin::bun` proc macro to define a function which will implement our native plugin.
|
|
336
|
+
|
|
337
|
+
Here's an example implementing the `onBeforeParse` hook:
|
|
338
|
+
|
|
339
|
+
```rust title="lib.rs" icon="/icons/rust.svg"
|
|
340
|
+
use bun_native_plugin::{define_bun_plugin, OnBeforeParse, bun, Result, anyhow, BunLoader};
|
|
341
|
+
use napi_derive::napi;
|
|
342
|
+
|
|
343
|
+
/// Define the plugin and its name
|
|
344
|
+
define_bun_plugin!("replace-foo-with-bar");
|
|
345
|
+
|
|
346
|
+
/// Here we'll implement `onBeforeParse` with code that replaces all occurrences of
|
|
347
|
+
/// `foo` with `bar`.
|
|
348
|
+
///
|
|
349
|
+
/// We use the #[bun] macro to generate some of the boilerplate code.
|
|
350
|
+
///
|
|
351
|
+
/// The argument of the function (`handle: &mut OnBeforeParse`) tells
|
|
352
|
+
/// the macro that this function implements the `onBeforeParse` hook.
|
|
353
|
+
#[bun]
|
|
354
|
+
pub fn replace_foo_with_bar(handle: &mut OnBeforeParse) -> Result<()> {
|
|
355
|
+
// Fetch the input source code.
|
|
356
|
+
let input_source_code = handle.input_source_code()?;
|
|
357
|
+
|
|
358
|
+
// Get the Loader for the file
|
|
359
|
+
let loader = handle.output_loader();
|
|
360
|
+
|
|
361
|
+
let output_source_code = input_source_code.replace("foo", "bar");
|
|
362
|
+
|
|
363
|
+
handle.set_output_source_code(output_source_code, BunLoader::BUN_LOADER_JSX);
|
|
364
|
+
|
|
365
|
+
Ok(())
|
|
366
|
+
}
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
And to use it in `Bun.build()`:
|
|
370
|
+
|
|
371
|
+
```ts title="index.ts" icon="/icons/typescript.svg"
|
|
372
|
+
import myNativeAddon from "./my-native-addon";
|
|
373
|
+
|
|
374
|
+
Bun.build({
|
|
375
|
+
entrypoints: ["./app.tsx"],
|
|
376
|
+
plugins: [
|
|
377
|
+
{
|
|
378
|
+
name: "my-plugin",
|
|
379
|
+
|
|
380
|
+
setup(build) {
|
|
381
|
+
build.onBeforeParse(
|
|
382
|
+
{
|
|
383
|
+
namespace: "file",
|
|
384
|
+
filter: "**/*.tsx",
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
napiModule: myNativeAddon,
|
|
388
|
+
symbol: "replace_foo_with_bar",
|
|
389
|
+
// external: myNativeAddon.getSharedState()
|
|
390
|
+
},
|
|
391
|
+
);
|
|
392
|
+
},
|
|
393
|
+
},
|
|
394
|
+
],
|
|
395
|
+
});
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### onBeforeParse
|
|
399
|
+
|
|
400
|
+
```ts
|
|
401
|
+
onBeforeParse(
|
|
402
|
+
args: { filter: RegExp; namespace?: string },
|
|
403
|
+
callback: { napiModule: NapiModule; symbol: string; external?: unknown },
|
|
404
|
+
): void;
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
This lifecycle callback is run immediately before a file is parsed by Bun's bundler.
|
|
408
|
+
|
|
409
|
+
As input, it receives the file's contents and can optionally return new source code.
|
|
410
|
+
|
|
411
|
+
<Info>This callback can be called from any thread and so the napi module implementation must be thread-safe.</Info>
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Feedback
|
|
3
|
+
description: Share feedback, bug reports, and feature requests
|
|
4
|
+
mode: center
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
import Feedback from "/snippets/cli/feedback.mdx";
|
|
8
|
+
|
|
9
|
+
Whether you've found a bug, have a performance issue, or just want to suggest an improvement, here's how you can open a helpful issue:
|
|
10
|
+
|
|
11
|
+
<Callout icon="discord">
|
|
12
|
+
For general questions, please join our [Discord](https://discord.com/invite/CXdq2DP29u).
|
|
13
|
+
</Callout>
|
|
14
|
+
|
|
15
|
+
## Reporting Issues
|
|
16
|
+
|
|
17
|
+
<Steps>
|
|
18
|
+
<Step title="Upgrade Bun">
|
|
19
|
+
Try upgrading Bun to the latest version with `bun upgrade`. This might fix your problem without having to open an issue.
|
|
20
|
+
|
|
21
|
+
```bash terminal icon="terminal"
|
|
22
|
+
bun upgrade
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
You can also try the latest canary release, which includes the most recent changes and bug fixes that haven't been released in a stable version yet.
|
|
26
|
+
|
|
27
|
+
```bash terminal icon="terminal"
|
|
28
|
+
bun upgrade --canary
|
|
29
|
+
|
|
30
|
+
# To revert back to the stable
|
|
31
|
+
bun upgrade --stable
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
If the issue still persists after upgrading, continue to the next step.
|
|
35
|
+
</Step>
|
|
36
|
+
<Step title="Review Existing Issues">
|
|
37
|
+
First take a minute to check if the issue has already been reported. Don't open a new issue if it has already been reported, it saves time for everyone and helps us focus on fixing things faster.
|
|
38
|
+
|
|
39
|
+
- 🔍 [**Search existing issues**](https://github.com/oven-sh/bun/issues)
|
|
40
|
+
- 💬 [**Check discussions**](https://github.com/oven-sh/bun/discussions)
|
|
41
|
+
|
|
42
|
+
If you find a related issue, add a 👍 reaction or comment with extra details instead of opening a new one.
|
|
43
|
+
</Step>
|
|
44
|
+
<Step title="Report the Issue">
|
|
45
|
+
If no one has reported the issue, please open a new issue or suggest an improvement.
|
|
46
|
+
|
|
47
|
+
- 🐞 [**Report a Bug**](https://github.com/oven-sh/bun/issues/new?template=2-bug-report.yml)
|
|
48
|
+
- ⚡ [**Suggest an Improvement**](https://github.com/oven-sh/bun/issues/new?template=4-feature-request.yml)
|
|
49
|
+
|
|
50
|
+
Please provide as much detail as possible, including:
|
|
51
|
+
- A clear and concise title
|
|
52
|
+
- A code example or steps to reproduce the issue
|
|
53
|
+
- The version of Bun you are using (run `bun --version`)
|
|
54
|
+
- A detailed description of the issue (what happened, what you expected to happen, and what actually happened)
|
|
55
|
+
- The operating system and version you are using
|
|
56
|
+
<Note>
|
|
57
|
+
- For MacOS and Linux: copy the output of `uname -mprs`
|
|
58
|
+
- For Windows: copy the output of this command in the powershell console:
|
|
59
|
+
```powershell
|
|
60
|
+
"$([Environment]::OSVersion | ForEach-Object VersionString) $(if ([Environment]::Is64BitOperatingSystem) { "x64" } else { "x86" })"
|
|
61
|
+
```
|
|
62
|
+
</Note>
|
|
63
|
+
</Step>
|
|
64
|
+
|
|
65
|
+
</Steps>
|
|
66
|
+
|
|
67
|
+
The Bun team will review the issue and get back to you as soon as possible!
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Use `bun feedback`
|
|
72
|
+
|
|
73
|
+
Alternatively, you can use `bun feedback` to share feedback, bug reports, and feature requests directly with the Bun team.
|
|
74
|
+
|
|
75
|
+
```bash terminal icon="terminal"
|
|
76
|
+
bun feedback "Love the new release!"
|
|
77
|
+
bun feedback report.txt details.log
|
|
78
|
+
echo "please document X" | bun feedback --email you@example.com
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
You can provide feedback as text arguments, file paths, or piped input.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
<Feedback />
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert an ArrayBuffer to an array of numbers
|
|
3
|
+
sidebarTitle: "ArrayBuffer to Array"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
To retrieve the contents of an `ArrayBuffer` as an array of numbers, create a [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) over of the buffer. and use the [`Array.from()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from) method to convert it to an array.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert an ArrayBuffer to a Blob
|
|
3
|
+
sidebarTitle: "ArrayBuffer to Blob"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
A [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) can be constructed from an array of "chunks", where each chunk is a string, binary data structure, or another `Blob`.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert an ArrayBuffer to a Buffer
|
|
3
|
+
sidebarTitle: "ArrayBuffer to Buffer"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
The Node.js [`Buffer`](https://nodejs.org/api/buffer.html) API predates the introduction of `ArrayBuffer` into the JavaScript language. Bun implements both.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert an ArrayBuffer to a string
|
|
3
|
+
sidebarTitle: "ArrayBuffer to string"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Bun implements the Web-standard [`TextDecoder`](https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder) class for converting between binary data types and strings.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert an ArrayBuffer to a Uint8Array
|
|
3
|
+
sidebarTitle: "ArrayBuffer to Uint8Array"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
A `Uint8Array` is a _typed array_, meaning it is a mechanism for viewing the data in an underlying `ArrayBuffer`.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert a Blob to an ArrayBuffer
|
|
3
|
+
sidebarTitle: "Blob to ArrayBuffer"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
The [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) class provides a number of methods for consuming its contents in different formats, including `.arrayBuffer()`.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert a Blob to a DataView
|
|
3
|
+
sidebarTitle: "Blob to DataView"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
The [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) class provides a number of methods for consuming its contents in different formats. This snippets reads the contents to an `ArrayBuffer`, then creates a `DataView` from the buffer.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert a Blob to a ReadableStream
|
|
3
|
+
sidebarTitle: "Blob to ReadableStream"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
The [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) class provides a number of methods for consuming its contents in different formats, including `.stream()`. This returns `Promise<ReadableStream>`.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert a Blob to a string
|
|
3
|
+
sidebarTitle: "Blob to string"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
The [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) class provides a number of methods for consuming its contents in different formats, including `.text()`.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert a Blob to a Uint8Array
|
|
3
|
+
sidebarTitle: "Blob to Uint8Array"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
The [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) class provides a number of methods for consuming its contents in different formats. This snippets reads the contents to an `ArrayBuffer`, then creates a `Uint8Array` from the buffer.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert a Buffer to an ArrayBuffer
|
|
3
|
+
sidebarTitle: "Buffer to ArrayBuffer"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
The Node.js [`Buffer`](https://nodejs.org/api/buffer.html) class provides a way to view and manipulate data in an underlying `ArrayBuffer`, which is available via the `buffer` property.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert a Buffer to a blob
|
|
3
|
+
sidebarTitle: "Buffer to Blob"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
A [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) can be constructed from an array of "chunks", where each chunk is a string, binary data structure (including `Buffer`), or another `Blob`.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert a Buffer to a ReadableStream
|
|
3
|
+
sidebarTitle: "Buffer to ReadableStream"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
The naive approach to creating a [`ReadableStream`](https://developer.mozilla.org/en-US/docs/Web/API/ReadableStream) from a [`Buffer`](https://nodejs.org/api/buffer.html) is to use the `ReadableStream` constructor and enqueue the entire array as a single chunk. For a large buffer, this may be undesirable as this approach does not "streaming" the data in smaller chunks.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert a Buffer to a string
|
|
3
|
+
sidebarTitle: "Buffer to string"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
The [`Buffer`](https://nodejs.org/api/buffer.html) class provides a built-in `.toString()` method that converts a `Buffer` to a string.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert a Buffer to a Uint8Array
|
|
3
|
+
sidebarTitle: "Buffer to Uint8Array"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
The Node.js [`Buffer`](https://nodejs.org/api/buffer.html) class extends [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array), so no conversion is needed. All properties and methods on `Uint8Array` are available on `Buffer`.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert a DataView to a string
|
|
3
|
+
sidebarTitle: "DataView to string"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
If a [`DataView`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView) contains ASCII-encoded text, you can convert it to a string using the [`TextDecoder`](https://developer.mozilla.org/en-US/docs/Web/API/TextDecoder) class.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert a Uint8Array to an ArrayBuffer
|
|
3
|
+
sidebarTitle: "Uint8Array to ArrayBuffer"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
A [`Uint8Array`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array) is a _typed array_ class, meaning it is a mechanism for viewing data in an underlying `ArrayBuffer`. The underlying `ArrayBuffer` is accessible via the `buffer` property.
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Convert a Uint8Array to a Blob
|
|
3
|
+
sidebarTitle: "Uint8Array to Blob"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
A [`Blob`](https://developer.mozilla.org/en-US/docs/Web/API/Blob) can be constructed from an array of "chunks", where each chunk is a string, binary data structure (including `Uint8Array`), or another `Blob`.
|