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,10 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
title: Macros
|
|
3
|
+
description: Run JavaScript functions at bundle-time with Bun macros
|
|
4
|
+
---
|
|
2
5
|
|
|
3
|
-
|
|
6
|
+
Macros are a mechanism for running JavaScript functions at bundle-time. The value returned from these functions are directly inlined into your bundle.
|
|
4
7
|
|
|
5
8
|
As a toy example, consider this simple function that returns a random number.
|
|
6
9
|
|
|
7
|
-
```ts
|
|
10
|
+
```ts title="random.ts" icon="/icons/typescript.svg"
|
|
8
11
|
export function random() {
|
|
9
12
|
return Math.random();
|
|
10
13
|
}
|
|
@@ -12,24 +15,28 @@ export function random() {
|
|
|
12
15
|
|
|
13
16
|
This is just a regular function in a regular file, but we can use it as a macro like so:
|
|
14
17
|
|
|
15
|
-
```
|
|
16
|
-
import { random } from
|
|
18
|
+
```tsx title="cli.tsx" icon="/icons/typescript.svg"
|
|
19
|
+
import { random } from "./random.ts" with { type: "macro" };
|
|
17
20
|
|
|
18
21
|
console.log(`Your random number is ${random()}`);
|
|
19
22
|
```
|
|
20
23
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
<Note>
|
|
25
|
+
Macros are indicated using import attribute syntax. If you haven't seen this syntax before, it's a Stage 3 TC39
|
|
26
|
+
proposal that lets you attach additional metadata to import statements.
|
|
27
|
+
</Note>
|
|
24
28
|
|
|
25
29
|
Now we'll bundle this file with `bun build`. The bundled file will be printed to stdout.
|
|
26
30
|
|
|
27
|
-
```bash
|
|
28
|
-
|
|
31
|
+
```bash terminal icon="terminal"
|
|
32
|
+
bun build ./cli.tsx
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
```js
|
|
29
36
|
console.log(`Your random number is ${0.6805550949689833}`);
|
|
30
37
|
```
|
|
31
38
|
|
|
32
|
-
As you can see, the source code of the `random` function occurs nowhere in the bundle. Instead, it is executed
|
|
39
|
+
As you can see, the source code of the `random` function occurs nowhere in the bundle. Instead, it is executed during bundling and function call (`random()`) is replaced with the result of the function. Since the source code will never be included in the bundle, macros can safely perform privileged operations like reading from a database.
|
|
33
40
|
|
|
34
41
|
## When to use macros
|
|
35
42
|
|
|
@@ -41,8 +48,8 @@ If you find yourself running a lot of code at bundle-time though, consider runni
|
|
|
41
48
|
|
|
42
49
|
Bun Macros are import statements annotated using either:
|
|
43
50
|
|
|
44
|
-
- `with { type: 'macro' }` — an
|
|
45
|
-
- `assert { type: 'macro' }` — an import assertion, an earlier incarnation of import attributes that has now been abandoned (but is
|
|
51
|
+
- `with { type: 'macro' }` — an import attribute, a Stage 3 ECMA Script proposal
|
|
52
|
+
- `assert { type: 'macro' }` — an import assertion, an earlier incarnation of import attributes that has now been abandoned (but is already supported by a number of browsers and runtimes)
|
|
46
53
|
|
|
47
54
|
## Security considerations
|
|
48
55
|
|
|
@@ -50,7 +57,7 @@ Macros must explicitly be imported with `{ type: "macro" }` in order to be execu
|
|
|
50
57
|
|
|
51
58
|
You can disable macros entirely by passing the `--no-macros` flag to Bun. It produces a build error like this:
|
|
52
59
|
|
|
53
|
-
```
|
|
60
|
+
```
|
|
54
61
|
error: Macros are disabled
|
|
55
62
|
|
|
56
63
|
foo();
|
|
@@ -58,9 +65,9 @@ foo();
|
|
|
58
65
|
./hello.js:3:1 53
|
|
59
66
|
```
|
|
60
67
|
|
|
61
|
-
To reduce the potential attack surface for malicious packages, macros cannot be
|
|
68
|
+
To reduce the potential attack surface for malicious packages, macros cannot be invoked from inside `node_modules/**/*`. If a package attempts to invoke a macro, you'll see an error like this:
|
|
62
69
|
|
|
63
|
-
```
|
|
70
|
+
```
|
|
64
71
|
error: For security reasons, macros cannot be run from node_modules.
|
|
65
72
|
|
|
66
73
|
beEvil();
|
|
@@ -70,17 +77,17 @@ node_modules/evil/index.js:3:1 50
|
|
|
70
77
|
|
|
71
78
|
Your application code can still import macros from `node_modules` and invoke them.
|
|
72
79
|
|
|
73
|
-
```ts
|
|
80
|
+
```ts title="cli.tsx" icon="/icons/typescript.svg"
|
|
74
81
|
import { macro } from "some-package" with { type: "macro" };
|
|
75
82
|
|
|
76
83
|
macro();
|
|
77
84
|
```
|
|
78
85
|
|
|
79
|
-
## Export condition
|
|
86
|
+
## Export condition "macro"
|
|
80
87
|
|
|
81
|
-
When shipping a library containing a macro to
|
|
88
|
+
When shipping a library containing a macro to npm or another package registry, use the `"macro"` export condition to provide a special version of your package exclusively for the macro environment.
|
|
82
89
|
|
|
83
|
-
```
|
|
90
|
+
```json title="package.json" icon="file-code"
|
|
84
91
|
{
|
|
85
92
|
"name": "my-package",
|
|
86
93
|
"exports": {
|
|
@@ -94,7 +101,7 @@ When shipping a library containing a macro to `npm` or another package registry,
|
|
|
94
101
|
|
|
95
102
|
With this configuration, users can consume your package at runtime or at bundle-time using the same import specifier:
|
|
96
103
|
|
|
97
|
-
```ts
|
|
104
|
+
```ts title="index.ts" icon="/icons/typescript.svg"
|
|
98
105
|
import pkg from "my-package"; // runtime import
|
|
99
106
|
import { macro } from "my-package" with { type: "macro" }; // macro import
|
|
100
107
|
```
|
|
@@ -105,15 +112,15 @@ The first import will resolve to `./node_modules/my-package/index.js`, while the
|
|
|
105
112
|
|
|
106
113
|
When Bun's transpiler sees a macro import, it calls the function inside the transpiler using Bun's JavaScript runtime and converts the return value from JavaScript into an AST node. These JavaScript functions are called at bundle-time, not runtime.
|
|
107
114
|
|
|
108
|
-
Macros are executed synchronously in the transpiler during the visiting phase—before plugins and before the transpiler generates the AST. They are executed in the order they are imported. The transpiler will wait for the macro to finish executing before continuing. The transpiler will also
|
|
115
|
+
Macros are executed synchronously in the transpiler during the visiting phase—before plugins and before the transpiler generates the AST. They are executed in the order they are imported. The transpiler will wait for the macro to finish executing before continuing. The transpiler will also await any Promise returned by a macro.
|
|
109
116
|
|
|
110
117
|
Bun's bundler is multi-threaded. As such, macros execute in parallel inside of multiple spawned JavaScript "workers".
|
|
111
118
|
|
|
112
119
|
## Dead code elimination
|
|
113
120
|
|
|
114
|
-
The bundler performs dead code elimination
|
|
121
|
+
The bundler performs dead code elimination after running and inlining macros. So given the following macro:
|
|
115
122
|
|
|
116
|
-
```ts
|
|
123
|
+
```ts title="returnFalse.ts" icon="/icons/typescript.svg"
|
|
117
124
|
export function returnFalse() {
|
|
118
125
|
return false;
|
|
119
126
|
}
|
|
@@ -121,7 +128,7 @@ export function returnFalse() {
|
|
|
121
128
|
|
|
122
129
|
...then bundling the following file will produce an empty bundle, provided that the minify syntax option is enabled.
|
|
123
130
|
|
|
124
|
-
```ts
|
|
131
|
+
```ts title="index.ts" icon="/icons/typescript.svg"
|
|
125
132
|
import { returnFalse } from "./returnFalse.ts" with { type: "macro" };
|
|
126
133
|
|
|
127
134
|
if (returnFalse()) {
|
|
@@ -133,19 +140,19 @@ if (returnFalse()) {
|
|
|
133
140
|
|
|
134
141
|
Bun's transpiler needs to be able to serialize the result of the macro so it can be inlined into the AST. All JSON-compatible data structures are supported:
|
|
135
142
|
|
|
136
|
-
```ts
|
|
143
|
+
```ts title="macro.ts" icon="/icons/typescript.svg"
|
|
137
144
|
export function getObject() {
|
|
138
145
|
return {
|
|
139
146
|
foo: "bar",
|
|
140
147
|
baz: 123,
|
|
141
|
-
array: [
|
|
148
|
+
array: [1, 2, { nested: "value" }],
|
|
142
149
|
};
|
|
143
150
|
}
|
|
144
151
|
```
|
|
145
152
|
|
|
146
|
-
Macros can be async, or return
|
|
153
|
+
Macros can be async, or return Promise instances. Bun's transpiler will automatically await the Promise and inline the result.
|
|
147
154
|
|
|
148
|
-
```ts
|
|
155
|
+
```ts title="macro.ts" icon="/icons/typescript.svg"
|
|
149
156
|
export async function getText() {
|
|
150
157
|
return "async value";
|
|
151
158
|
}
|
|
@@ -153,21 +160,21 @@ export async function getText() {
|
|
|
153
160
|
|
|
154
161
|
The transpiler implements special logic for serializing common data formats like `Response`, `Blob`, `TypedArray`.
|
|
155
162
|
|
|
156
|
-
-
|
|
157
|
-
-
|
|
158
|
-
-
|
|
163
|
+
- **TypedArray**: Resolves to a base64-encoded string.
|
|
164
|
+
- **Response**: Bun will read the `Content-Type` and serialize accordingly; for instance, a Response with type `application/json` will be automatically parsed into an object and `text/plain` will be inlined as a string. Responses with an unrecognized or undefined type will be base-64 encoded.
|
|
165
|
+
- **Blob**: As with Response, the serialization depends on the `type` property.
|
|
159
166
|
|
|
160
167
|
The result of `fetch` is `Promise<Response>`, so it can be directly returned.
|
|
161
168
|
|
|
162
|
-
```ts
|
|
169
|
+
```ts title="macro.ts" icon="/icons/typescript.svg"
|
|
163
170
|
export function getObject() {
|
|
164
|
-
return fetch("https://bun.com")
|
|
171
|
+
return fetch("https://bun.com");
|
|
165
172
|
}
|
|
166
173
|
```
|
|
167
174
|
|
|
168
175
|
Functions and instances of most classes (except those mentioned above) are not serializable.
|
|
169
176
|
|
|
170
|
-
```ts
|
|
177
|
+
```ts title="macro.ts" icon="/icons/typescript.svg"
|
|
171
178
|
export function getText(url: string) {
|
|
172
179
|
// this doesn't work!
|
|
173
180
|
return () => {};
|
|
@@ -178,7 +185,7 @@ export function getText(url: string) {
|
|
|
178
185
|
|
|
179
186
|
Macros can accept inputs, but only in limited cases. The value must be statically known. For example, the following is not allowed:
|
|
180
187
|
|
|
181
|
-
```ts
|
|
188
|
+
```ts title="index.ts" icon="/icons/typescript.svg"
|
|
182
189
|
import { getText } from "./getText.ts" with { type: "macro" };
|
|
183
190
|
|
|
184
191
|
export function howLong() {
|
|
@@ -192,7 +199,7 @@ export function howLong() {
|
|
|
192
199
|
|
|
193
200
|
However, if the value of `foo` is known at bundle-time (say, if it's a constant or the result of another macro) then it's allowed:
|
|
194
201
|
|
|
195
|
-
```ts
|
|
202
|
+
```ts title="index.ts" icon="/icons/typescript.svg"
|
|
196
203
|
import { getText } from "./getText.ts" with { type: "macro" };
|
|
197
204
|
import { getFoo } from "./getFoo.ts" with { type: "macro" };
|
|
198
205
|
|
|
@@ -206,7 +213,7 @@ export function howLong() {
|
|
|
206
213
|
|
|
207
214
|
This outputs:
|
|
208
215
|
|
|
209
|
-
```
|
|
216
|
+
```js
|
|
210
217
|
function howLong() {
|
|
211
218
|
console.log("The page is", 1322, "characters long");
|
|
212
219
|
}
|
|
@@ -217,11 +224,9 @@ export { howLong };
|
|
|
217
224
|
|
|
218
225
|
### Embed latest git commit hash
|
|
219
226
|
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
```ts#getGitCommitHash.ts
|
|
227
|
+
```ts title="getGitCommitHash.ts" icon="/icons/typescript.svg"
|
|
223
228
|
export function getGitCommitHash() {
|
|
224
|
-
const {stdout} = Bun.spawnSync({
|
|
229
|
+
const { stdout } = Bun.spawnSync({
|
|
225
230
|
cmd: ["git", "rev-parse", "HEAD"],
|
|
226
231
|
stdout: "pipe",
|
|
227
232
|
});
|
|
@@ -230,33 +235,32 @@ export function getGitCommitHash() {
|
|
|
230
235
|
}
|
|
231
236
|
```
|
|
232
237
|
|
|
233
|
-
{% /codetabs %}
|
|
234
|
-
|
|
235
|
-
<!-- --target=browser so they can clearly see it's for browsers -->
|
|
236
|
-
|
|
237
238
|
When we build it, the `getGitCommitHash` is replaced with the result of calling the function:
|
|
238
239
|
|
|
239
|
-
|
|
240
|
+
<CodeGroup>
|
|
240
241
|
|
|
241
|
-
```ts
|
|
242
|
-
import { getGitCommitHash } from
|
|
242
|
+
```ts input
|
|
243
|
+
import { getGitCommitHash } from "./getGitCommitHash.ts" with { type: "macro" };
|
|
243
244
|
|
|
244
245
|
console.log(`The current Git commit hash is ${getGitCommitHash()}`);
|
|
245
246
|
```
|
|
246
247
|
|
|
247
|
-
```
|
|
248
|
-
console.log(`The current Git commit hash is
|
|
248
|
+
```ts output
|
|
249
|
+
console.log(`The current Git commit hash is 3ee3259104e4507cf62c160f0ff5357ec4c7a7f8`);
|
|
249
250
|
```
|
|
250
251
|
|
|
251
|
-
|
|
252
|
+
</CodeGroup>
|
|
252
253
|
|
|
253
|
-
|
|
254
|
+
<Info>
|
|
255
|
+
You're probably thinking "Why not just use `process.env.GIT_COMMIT_HASH`?" Well, you can do that too. But can you do
|
|
256
|
+
this with an environment variable?
|
|
257
|
+
</Info>
|
|
254
258
|
|
|
255
|
-
### Make
|
|
259
|
+
### Make fetch() requests at bundle-time
|
|
256
260
|
|
|
257
261
|
In this example, we make an outgoing HTTP request using `fetch()`, parse the HTML response using `HTMLRewriter`, and return an object containing the title and meta tags–all at bundle-time.
|
|
258
262
|
|
|
259
|
-
```ts
|
|
263
|
+
```ts title="meta.ts" icon="/icons/typescript.svg"
|
|
260
264
|
export async function extractMetaTags(url: string) {
|
|
261
265
|
const response = await fetch(url);
|
|
262
266
|
const meta = {
|
|
@@ -271,9 +275,7 @@ export async function extractMetaTags(url: string) {
|
|
|
271
275
|
.on("meta", {
|
|
272
276
|
element(element) {
|
|
273
277
|
const name =
|
|
274
|
-
element.getAttribute("name") ||
|
|
275
|
-
element.getAttribute("property") ||
|
|
276
|
-
element.getAttribute("itemprop");
|
|
278
|
+
element.getAttribute("name") || element.getAttribute("property") || element.getAttribute("itemprop");
|
|
277
279
|
|
|
278
280
|
if (name) meta[name] = element.getAttribute("content");
|
|
279
281
|
},
|
|
@@ -284,14 +286,12 @@ export async function extractMetaTags(url: string) {
|
|
|
284
286
|
}
|
|
285
287
|
```
|
|
286
288
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
The `extractMetaTags` function is erased at bundle-time and replaced with the result of the function call. This means that the `fetch` request happens at bundle-time, and the result is embedded in the bundle. Also, the branch throwing the error is eliminated since it's unreachable.
|
|
289
|
+
The `extractMetaTags` function is erased at bundle-time and replaced with the result of the function call. This means that the fetch request happens at bundle-time, and the result is embedded in the bundle. Also, the branch throwing the error is eliminated since it's unreachable.
|
|
290
290
|
|
|
291
|
-
|
|
291
|
+
<CodeGroup>
|
|
292
292
|
|
|
293
|
-
```
|
|
294
|
-
import { extractMetaTags } from
|
|
293
|
+
```jsx input
|
|
294
|
+
import { extractMetaTags } from "./meta.ts" with { type: "macro" };
|
|
295
295
|
|
|
296
296
|
export const Head = () => {
|
|
297
297
|
const headTags = extractMetaTags("https://example.com");
|
|
@@ -300,30 +300,29 @@ export const Head = () => {
|
|
|
300
300
|
throw new Error("Expected title to be 'Example Domain'");
|
|
301
301
|
}
|
|
302
302
|
|
|
303
|
-
return
|
|
304
|
-
<
|
|
305
|
-
|
|
306
|
-
|
|
303
|
+
return (
|
|
304
|
+
<head>
|
|
305
|
+
<title>{headTags.title}</title>
|
|
306
|
+
<meta name="viewport" content={headTags.viewport} />
|
|
307
|
+
</head>
|
|
308
|
+
);
|
|
307
309
|
};
|
|
308
310
|
```
|
|
309
311
|
|
|
310
|
-
```
|
|
311
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
312
|
+
```jsx output
|
|
312
313
|
export const Head = () => {
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
}),
|
|
318
|
-
jsx("meta", {
|
|
319
|
-
name: "viewport",
|
|
320
|
-
content: "width=device-width, initial-scale=1",
|
|
321
|
-
}),
|
|
322
|
-
],
|
|
323
|
-
});
|
|
324
|
-
};
|
|
314
|
+
const headTags = {
|
|
315
|
+
title: "Example Domain",
|
|
316
|
+
viewport: "width=device-width, initial-scale=1",
|
|
317
|
+
};
|
|
325
318
|
|
|
326
|
-
|
|
319
|
+
return (
|
|
320
|
+
<head>
|
|
321
|
+
<title>{headTags.title}</title>
|
|
322
|
+
<meta name="viewport" content={headTags.viewport} />
|
|
323
|
+
</head>
|
|
324
|
+
);
|
|
325
|
+
};
|
|
327
326
|
```
|
|
328
327
|
|
|
329
|
-
|
|
328
|
+
</CodeGroup>
|