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,12 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: C Compiler
|
|
3
|
+
description: Compile and run C from JavaScript with low overhead
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
`bun:ffi` has experimental support for compiling and running C from JavaScript with low overhead.
|
|
2
7
|
|
|
8
|
+
---
|
|
9
|
+
|
|
3
10
|
## Usage (cc in `bun:ffi`)
|
|
4
11
|
|
|
5
12
|
See the [introduction blog post](https://bun.com/blog/compile-and-run-c-in-js) for more information.
|
|
6
13
|
|
|
7
14
|
JavaScript:
|
|
8
15
|
|
|
9
|
-
```ts
|
|
16
|
+
```ts hello.js icon="file-code"
|
|
10
17
|
import { cc } from "bun:ffi";
|
|
11
18
|
import source from "./hello.c" with { type: "file" };
|
|
12
19
|
|
|
@@ -27,7 +34,7 @@ console.log("What is the answer to the universe?", hello());
|
|
|
27
34
|
|
|
28
35
|
C source:
|
|
29
36
|
|
|
30
|
-
```c
|
|
37
|
+
```c hello.c
|
|
31
38
|
int hello() {
|
|
32
39
|
return 42;
|
|
33
40
|
}
|
|
@@ -35,8 +42,8 @@ int hello() {
|
|
|
35
42
|
|
|
36
43
|
When you run `hello.js`, it will print:
|
|
37
44
|
|
|
38
|
-
```sh
|
|
39
|
-
|
|
45
|
+
```sh terminal icon="terminal"
|
|
46
|
+
bun hello.js
|
|
40
47
|
What is the answer to the universe? 42
|
|
41
48
|
```
|
|
42
49
|
|
|
@@ -44,7 +51,7 @@ Under the hood, `cc` uses [TinyCC](https://bellard.org/tcc/) to compile the C co
|
|
|
44
51
|
|
|
45
52
|
### Primitive types
|
|
46
53
|
|
|
47
|
-
The same `FFIType` values in [`dlopen`](/
|
|
54
|
+
The same `FFIType` values in [`dlopen`](/runtime/ffi) are supported in `cc`.
|
|
48
55
|
|
|
49
56
|
| `FFIType` | C Type | Aliases |
|
|
50
57
|
| ---------- | -------------- | --------------------------- |
|
|
@@ -80,7 +87,7 @@ You can also pass a `napi_env` to receive the N-API environment used to call the
|
|
|
80
87
|
|
|
81
88
|
For example, if you have a string in C, you can return it to JavaScript like this:
|
|
82
89
|
|
|
83
|
-
```ts
|
|
90
|
+
```ts hello.js
|
|
84
91
|
import { cc } from "bun:ffi";
|
|
85
92
|
import source from "./hello.c" with { type: "file" };
|
|
86
93
|
|
|
@@ -101,7 +108,7 @@ const result = hello();
|
|
|
101
108
|
|
|
102
109
|
And in C:
|
|
103
110
|
|
|
104
|
-
```c
|
|
111
|
+
```c hello.c
|
|
105
112
|
#include <node/node_api.h>
|
|
106
113
|
|
|
107
114
|
napi_value hello(napi_env env) {
|
|
@@ -113,7 +120,7 @@ napi_value hello(napi_env env) {
|
|
|
113
120
|
|
|
114
121
|
You can also use this to return other types like objects and arrays:
|
|
115
122
|
|
|
116
|
-
```c
|
|
123
|
+
```c hello.c
|
|
117
124
|
#include <node/node_api.h>
|
|
118
125
|
|
|
119
126
|
napi_value hello(napi_env env) {
|
|
@@ -189,7 +196,7 @@ type Defines = Record<string, string>;
|
|
|
189
196
|
cc({
|
|
190
197
|
source: "hello.c",
|
|
191
198
|
define: {
|
|
192
|
-
|
|
199
|
+
NDEBUG: "1",
|
|
193
200
|
},
|
|
194
201
|
});
|
|
195
202
|
```
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
|
+
title: Spawn
|
|
3
|
+
description: Spawn child processes with `Bun.spawn` or `Bun.spawnSync`
|
|
4
|
+
---
|
|
2
5
|
|
|
3
6
|
## Spawn a process (`Bun.spawn()`)
|
|
4
7
|
|
|
@@ -29,68 +32,25 @@ By default, the input stream of the subprocess is undefined; it can be configure
|
|
|
29
32
|
|
|
30
33
|
```ts
|
|
31
34
|
const proc = Bun.spawn(["cat"], {
|
|
32
|
-
stdin: await fetch(
|
|
33
|
-
"https://raw.githubusercontent.com/oven-sh/bun/main/examples/hashing.js",
|
|
34
|
-
),
|
|
35
|
+
stdin: await fetch("https://raw.githubusercontent.com/oven-sh/bun/main/examples/hashing.js"),
|
|
35
36
|
});
|
|
36
37
|
|
|
37
38
|
const text = await proc.stdout.text();
|
|
38
39
|
console.log(text); // "const input = "hello world".repeat(400); ..."
|
|
39
40
|
```
|
|
40
41
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
- `"inherit"`
|
|
56
|
-
- Inherit the `stdin` of the parent process
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
- `Bun.file()`
|
|
61
|
-
- Read from the specified file.
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
- `TypedArray | DataView`
|
|
66
|
-
- Use a binary buffer as input.
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
- `Response`
|
|
71
|
-
- Use the response `body` as input.
|
|
72
|
-
|
|
73
|
-
---
|
|
74
|
-
|
|
75
|
-
- `Request`
|
|
76
|
-
- Use the request `body` as input.
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
- `ReadableStream`
|
|
81
|
-
- Use a readable stream as input.
|
|
82
|
-
|
|
83
|
-
---
|
|
84
|
-
|
|
85
|
-
- `Blob`
|
|
86
|
-
- Use a blob as input.
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
- `number`
|
|
91
|
-
- Read from the file with a given file descriptor.
|
|
92
|
-
|
|
93
|
-
{% /table %}
|
|
42
|
+
| Value | Description |
|
|
43
|
+
| ------------------------ | ------------------------------------------------ |
|
|
44
|
+
| `null` | **Default.** Provide no input to the subprocess |
|
|
45
|
+
| `"pipe"` | Return a `FileSink` for fast incremental writing |
|
|
46
|
+
| `"inherit"` | Inherit the `stdin` of the parent process |
|
|
47
|
+
| `Bun.file()` | Read from the specified file |
|
|
48
|
+
| `TypedArray \| DataView` | Use a binary buffer as input |
|
|
49
|
+
| `Response` | Use the response `body` as input |
|
|
50
|
+
| `Request` | Use the request `body` as input |
|
|
51
|
+
| `ReadableStream` | Use a readable stream as input |
|
|
52
|
+
| `Blob` | Use a blob as input |
|
|
53
|
+
| `number` | Read from the file with a given file descriptor |
|
|
94
54
|
|
|
95
55
|
The `"pipe"` option lets incrementally write to the subprocess's input stream from the parent process.
|
|
96
56
|
|
|
@@ -129,7 +89,7 @@ const proc = Bun.spawn(["cat"], {
|
|
|
129
89
|
stdout: "pipe",
|
|
130
90
|
});
|
|
131
91
|
|
|
132
|
-
const output = await
|
|
92
|
+
const output = await proc.stdout.text();
|
|
133
93
|
console.log(output); // "Hello from ReadableStream!"
|
|
134
94
|
```
|
|
135
95
|
|
|
@@ -140,45 +100,24 @@ You can read results from the subprocess via the `stdout` and `stderr` propertie
|
|
|
140
100
|
```ts
|
|
141
101
|
const proc = Bun.spawn(["bun", "--version"]);
|
|
142
102
|
const text = await proc.stdout.text();
|
|
143
|
-
console.log(text); // => "1.3.
|
|
103
|
+
console.log(text); // => "1.3.1\n"
|
|
144
104
|
```
|
|
145
105
|
|
|
146
106
|
Configure the output stream by passing one of the following values to `stdout/stderr`:
|
|
147
107
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
- `"inherit"`
|
|
158
|
-
- **Default for `stderr`.** Inherit from the parent process.
|
|
159
|
-
|
|
160
|
-
---
|
|
161
|
-
|
|
162
|
-
- `"ignore"`
|
|
163
|
-
- Discard the output.
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
- `Bun.file()`
|
|
168
|
-
- Write to the specified file.
|
|
169
|
-
|
|
170
|
-
---
|
|
171
|
-
|
|
172
|
-
- `number`
|
|
173
|
-
- Write to the file with the given file descriptor.
|
|
174
|
-
|
|
175
|
-
{% /table %}
|
|
108
|
+
| Value | Description |
|
|
109
|
+
| ------------ | --------------------------------------------------------------------------------------------------- |
|
|
110
|
+
| `"pipe"` | **Default for `stdout`.** Pipe the output to a `ReadableStream` on the returned `Subprocess` object |
|
|
111
|
+
| `"inherit"` | **Default for `stderr`.** Inherit from the parent process |
|
|
112
|
+
| `"ignore"` | Discard the output |
|
|
113
|
+
| `Bun.file()` | Write to the specified file |
|
|
114
|
+
| `number` | Write to the file with the given file descriptor |
|
|
176
115
|
|
|
177
116
|
## Exit handling
|
|
178
117
|
|
|
179
118
|
Use the `onExit` callback to listen for the process exiting or being killed.
|
|
180
119
|
|
|
181
|
-
```ts
|
|
120
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
182
121
|
const proc = Bun.spawn(["bun", "--version"], {
|
|
183
122
|
onExit(proc, exitCode, signalCode, error) {
|
|
184
123
|
// exit handler
|
|
@@ -188,7 +127,7 @@ const proc = Bun.spawn(["bun", "--version"], {
|
|
|
188
127
|
|
|
189
128
|
For convenience, the `exited` property is a `Promise` that resolves when the process exits.
|
|
190
129
|
|
|
191
|
-
```ts
|
|
130
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
192
131
|
const proc = Bun.spawn(["bun", "--version"]);
|
|
193
132
|
|
|
194
133
|
await proc.exited; // resolves when process exit
|
|
@@ -199,7 +138,7 @@ proc.signalCode; // null | "SIGABRT" | "SIGALRM" | ...
|
|
|
199
138
|
|
|
200
139
|
To kill a process:
|
|
201
140
|
|
|
202
|
-
```ts
|
|
141
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
203
142
|
const proc = Bun.spawn(["bun", "--version"]);
|
|
204
143
|
proc.kill();
|
|
205
144
|
proc.killed; // true
|
|
@@ -210,7 +149,7 @@ proc.kill("SIGTERM"); // specify a signal name
|
|
|
210
149
|
|
|
211
150
|
The parent `bun` process will not terminate until all child processes have exited. Use `proc.unref()` to detach the child process from the parent.
|
|
212
151
|
|
|
213
|
-
```ts
|
|
152
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
214
153
|
const proc = Bun.spawn(["bun", "--version"]);
|
|
215
154
|
proc.unref();
|
|
216
155
|
```
|
|
@@ -219,7 +158,7 @@ proc.unref();
|
|
|
219
158
|
|
|
220
159
|
You can get information about the process's resource usage after it has exited:
|
|
221
160
|
|
|
222
|
-
```ts
|
|
161
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
223
162
|
const proc = Bun.spawn(["bun", "--version"]);
|
|
224
163
|
await proc.exited;
|
|
225
164
|
|
|
@@ -233,7 +172,7 @@ console.log(`CPU time (system): ${usage.cpuTime.system} µs`);
|
|
|
233
172
|
|
|
234
173
|
You can abort a subprocess using an `AbortSignal`:
|
|
235
174
|
|
|
236
|
-
```ts
|
|
175
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
237
176
|
const controller = new AbortController();
|
|
238
177
|
const { signal } = controller;
|
|
239
178
|
|
|
@@ -250,7 +189,7 @@ controller.abort();
|
|
|
250
189
|
|
|
251
190
|
You can set a timeout for a subprocess to automatically terminate after a specific duration:
|
|
252
191
|
|
|
253
|
-
```ts
|
|
192
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
254
193
|
// Kill the process after 5 seconds
|
|
255
194
|
const proc = Bun.spawn({
|
|
256
195
|
cmd: ["sleep", "10"],
|
|
@@ -262,7 +201,7 @@ await proc.exited; // Will resolve after 5 seconds
|
|
|
262
201
|
|
|
263
202
|
By default, timed-out processes are killed with the `SIGTERM` signal. You can specify a different signal with the `killSignal` option:
|
|
264
203
|
|
|
265
|
-
```ts
|
|
204
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
266
205
|
// Kill the process with SIGKILL after 5 seconds
|
|
267
206
|
const proc = Bun.spawn({
|
|
268
207
|
cmd: ["sleep", "10"],
|
|
@@ -277,10 +216,10 @@ The `killSignal` option also controls which signal is sent when an AbortSignal i
|
|
|
277
216
|
|
|
278
217
|
For spawnSync, you can limit the maximum number of bytes of output before the process is killed:
|
|
279
218
|
|
|
280
|
-
```ts
|
|
281
|
-
//
|
|
219
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
220
|
+
// Kill 'yes' after it emits over 100 bytes of output
|
|
282
221
|
const result = Bun.spawnSync({
|
|
283
|
-
cmd: ["yes"], // or ["bun", "exec", "yes"] on
|
|
222
|
+
cmd: ["yes"], // or ["bun", "exec", "yes"] on Windows
|
|
284
223
|
maxBuffer: 100,
|
|
285
224
|
});
|
|
286
225
|
// process exits
|
|
@@ -290,7 +229,7 @@ const result = Bun.spawnSync({
|
|
|
290
229
|
|
|
291
230
|
Bun supports direct inter-process communication channel between two `bun` processes. To receive messages from a spawned Bun subprocess, specify an `ipc` handler.
|
|
292
231
|
|
|
293
|
-
```ts
|
|
232
|
+
```ts parent.ts icon="/icons/typescript.svg"
|
|
294
233
|
const child = Bun.spawn(["bun", "child.ts"], {
|
|
295
234
|
ipc(message) {
|
|
296
235
|
/**
|
|
@@ -302,13 +241,13 @@ const child = Bun.spawn(["bun", "child.ts"], {
|
|
|
302
241
|
|
|
303
242
|
The parent process can send messages to the subprocess using the `.send()` method on the returned `Subprocess` instance. A reference to the sending subprocess is also available as the second argument in the `ipc` handler.
|
|
304
243
|
|
|
305
|
-
```ts
|
|
244
|
+
```ts parent.ts icon="/icons/typescript.svg"
|
|
306
245
|
const childProc = Bun.spawn(["bun", "child.ts"], {
|
|
307
246
|
ipc(message, childProc) {
|
|
308
247
|
/**
|
|
309
248
|
* The message received from the sub process
|
|
310
249
|
**/
|
|
311
|
-
childProc.send("Respond to child")
|
|
250
|
+
childProc.send("Respond to child");
|
|
312
251
|
},
|
|
313
252
|
});
|
|
314
253
|
|
|
@@ -317,17 +256,17 @@ childProc.send("I am your father"); // The parent can send messages to the child
|
|
|
317
256
|
|
|
318
257
|
Meanwhile the child process can send messages to its parent using with `process.send()` and receive messages with `process.on("message")`. This is the same API used for `child_process.fork()` in Node.js.
|
|
319
258
|
|
|
320
|
-
```ts
|
|
259
|
+
```ts child.ts
|
|
321
260
|
process.send("Hello from child as string");
|
|
322
261
|
process.send({ message: "Hello from child as object" });
|
|
323
262
|
|
|
324
|
-
process.on("message",
|
|
263
|
+
process.on("message", message => {
|
|
325
264
|
// print message from parent
|
|
326
265
|
console.log(message);
|
|
327
266
|
});
|
|
328
267
|
```
|
|
329
268
|
|
|
330
|
-
```ts
|
|
269
|
+
```ts child.ts
|
|
331
270
|
// send a string
|
|
332
271
|
process.send("Hello from child as string");
|
|
333
272
|
|
|
@@ -350,7 +289,7 @@ childProc.disconnect();
|
|
|
350
289
|
|
|
351
290
|
To use IPC between a `bun` process and a Node.js process, set `serialization: "json"` in `Bun.spawn`. This is because Node.js and Bun use different JavaScript engines with different object serialization formats.
|
|
352
291
|
|
|
353
|
-
```
|
|
292
|
+
```ts bun-node-ipc.js icon="file-code"
|
|
354
293
|
if (typeof Bun !== "undefined") {
|
|
355
294
|
const prefix = `[bun ${process.versions.bun} 🐇]`;
|
|
356
295
|
const node = Bun.spawn({
|
|
@@ -374,6 +313,8 @@ if (typeof Bun !== "undefined") {
|
|
|
374
313
|
}
|
|
375
314
|
```
|
|
376
315
|
|
|
316
|
+
---
|
|
317
|
+
|
|
377
318
|
## Blocking API (`Bun.spawnSync()`)
|
|
378
319
|
|
|
379
320
|
Bun provides a synchronous equivalent of `Bun.spawn` called `Bun.spawnSync`. This is a blocking API that supports the same inputs and parameters as `Bun.spawn`. It returns a `SyncSubprocess` object, which differs from `Subprocess` in a few ways.
|
|
@@ -391,23 +332,35 @@ console.log(proc.stdout.toString());
|
|
|
391
332
|
|
|
392
333
|
As a rule of thumb, the asynchronous `Bun.spawn` API is better for HTTP servers and apps, and `Bun.spawnSync` is better for building command-line tools.
|
|
393
334
|
|
|
335
|
+
---
|
|
336
|
+
|
|
394
337
|
## Benchmarks
|
|
395
338
|
|
|
396
|
-
|
|
397
|
-
⚡️ Under the hood, `Bun.spawn` and `Bun.spawnSync` use
|
|
398
|
-
|
|
339
|
+
<Note>
|
|
340
|
+
⚡️ Under the hood, `Bun.spawn` and `Bun.spawnSync` use
|
|
341
|
+
[`posix_spawn(3)`](https://man7.org/linux/man-pages/man3/posix_spawn.3.html).
|
|
342
|
+
</Note>
|
|
399
343
|
|
|
400
344
|
Bun's `spawnSync` spawns processes 60% faster than the Node.js `child_process` module.
|
|
401
345
|
|
|
402
|
-
```bash
|
|
403
|
-
|
|
346
|
+
```bash terminal icon="terminal"
|
|
347
|
+
bun spawn.mjs
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
```txt
|
|
404
351
|
cpu: Apple M1 Max
|
|
405
352
|
runtime: bun 1.x (arm64-darwin)
|
|
406
353
|
|
|
407
354
|
benchmark time (avg) (min … max) p75 p99 p995
|
|
408
355
|
--------------------------------------------------------- -----------------------------
|
|
409
356
|
spawnSync echo hi 888.14 µs/iter (821.83 µs … 1.2 ms) 905.92 µs 1 ms 1.03 ms
|
|
410
|
-
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
```sh terminal icon="terminal"
|
|
360
|
+
node spawn.node.mjs
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
```txt
|
|
411
364
|
cpu: Apple M1 Max
|
|
412
365
|
runtime: node v18.9.1 (arm64-darwin)
|
|
413
366
|
|
|
@@ -416,22 +369,19 @@ benchmark time (avg) (min … max) p75 p99
|
|
|
416
369
|
spawnSync echo hi 1.47 ms/iter (1.14 ms … 2.64 ms) 1.57 ms 2.37 ms 2.52 ms
|
|
417
370
|
```
|
|
418
371
|
|
|
372
|
+
---
|
|
373
|
+
|
|
419
374
|
## Reference
|
|
420
375
|
|
|
421
376
|
A reference of the Spawn API and types are shown below. The real types have complex generics to strongly type the `Subprocess` streams with the options passed to `Bun.spawn` and `Bun.spawnSync`. For full details, find these types as defined [bun.d.ts](https://github.com/oven-sh/bun/blob/main/packages/bun-types/bun.d.ts).
|
|
422
377
|
|
|
423
|
-
```ts
|
|
378
|
+
```ts See Typescript Definitions expandable
|
|
424
379
|
interface Bun {
|
|
425
380
|
spawn(command: string[], options?: SpawnOptions.OptionsObject): Subprocess;
|
|
426
|
-
spawnSync(
|
|
427
|
-
command: string[],
|
|
428
|
-
options?: SpawnOptions.OptionsObject,
|
|
429
|
-
): SyncSubprocess;
|
|
381
|
+
spawnSync(command: string[], options?: SpawnOptions.OptionsObject): SyncSubprocess;
|
|
430
382
|
|
|
431
383
|
spawn(options: { cmd: string[] } & SpawnOptions.OptionsObject): Subprocess;
|
|
432
|
-
spawnSync(
|
|
433
|
-
options: { cmd: string[] } & SpawnOptions.OptionsObject,
|
|
434
|
-
): SyncSubprocess;
|
|
384
|
+
spawnSync(options: { cmd: string[] } & SpawnOptions.OptionsObject): SyncSubprocess;
|
|
435
385
|
}
|
|
436
386
|
|
|
437
387
|
namespace SpawnOptions {
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Color
|
|
3
|
+
description: Format colors as CSS, ANSI, numbers, hex strings, and more
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
`Bun.color(input, outputFormat?)` leverages Bun's CSS parser to parse, normalize, and convert colors from user input to a variety of output formats, including:
|
|
2
7
|
|
|
3
8
|
| Format | Example |
|
|
@@ -242,7 +247,7 @@ Bun.color([255, 0, 0], "HEX"); // "#FF0000"
|
|
|
242
247
|
|
|
243
248
|
Like many of Bun's APIs, you can use macros to invoke `Bun.color` at bundle-time for use in client-side JavaScript builds:
|
|
244
249
|
|
|
245
|
-
```ts
|
|
250
|
+
```ts client-side.ts
|
|
246
251
|
import { color } from "bun" with { type: "macro" };
|
|
247
252
|
|
|
248
253
|
console.log(color("#f00", "css"));
|
|
@@ -1,6 +1,14 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
---
|
|
2
|
+
title: Console
|
|
3
|
+
description: The console object in Bun
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<Note>
|
|
7
|
+
Bun provides a browser- and Node.js-compatible [console](https://developer.mozilla.org/en-US/docs/Web/API/console)
|
|
8
|
+
global. This page only documents Bun-native APIs.
|
|
9
|
+
</Note>
|
|
10
|
+
|
|
11
|
+
---
|
|
4
12
|
|
|
5
13
|
## Object inspection depth
|
|
6
14
|
|
|
@@ -19,11 +27,13 @@ console.log(nested);
|
|
|
19
27
|
|
|
20
28
|
The CLI flag takes precedence over the configuration file setting.
|
|
21
29
|
|
|
30
|
+
---
|
|
31
|
+
|
|
22
32
|
## Reading from stdin
|
|
23
33
|
|
|
24
34
|
In Bun, the `console` object can be used as an `AsyncIterable` to sequentially read lines from `process.stdin`.
|
|
25
35
|
|
|
26
|
-
```ts
|
|
36
|
+
```ts adder.ts icon="/icons/typescript.svg"
|
|
27
37
|
for await (const line of console) {
|
|
28
38
|
console.log(line);
|
|
29
39
|
}
|
|
@@ -31,7 +41,7 @@ for await (const line of console) {
|
|
|
31
41
|
|
|
32
42
|
This is useful for implementing interactive programs, like the following addition calculator.
|
|
33
43
|
|
|
34
|
-
```ts
|
|
44
|
+
```ts adder.ts icon="/icons/typescript.svg"
|
|
35
45
|
console.log(`Let's add some numbers!`);
|
|
36
46
|
console.write(`Count: 0\n> `);
|
|
37
47
|
|
|
@@ -44,8 +54,8 @@ for await (const line of console) {
|
|
|
44
54
|
|
|
45
55
|
To run the file:
|
|
46
56
|
|
|
47
|
-
```bash
|
|
48
|
-
|
|
57
|
+
```bash terminal icon="terminal"
|
|
58
|
+
bun adder.ts
|
|
49
59
|
Let's add some numbers!
|
|
50
60
|
Count: 0
|
|
51
61
|
> 5
|
|
@@ -1,10 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Cookies
|
|
3
|
+
description: Use Bun's native APIs for working with HTTP cookies
|
|
4
|
+
---
|
|
5
|
+
|
|
1
6
|
Bun provides native APIs for working with HTTP cookies through `Bun.Cookie` and `Bun.CookieMap`. These APIs offer fast, easy-to-use methods for parsing, generating, and manipulating cookies in HTTP requests and responses.
|
|
2
7
|
|
|
3
8
|
## CookieMap class
|
|
4
9
|
|
|
5
10
|
`Bun.CookieMap` provides a Map-like interface for working with collections of cookies. It implements the `Iterable` interface, allowing you to use it with `for...of` loops and other iteration methods.
|
|
6
11
|
|
|
7
|
-
```ts
|
|
12
|
+
```ts filename="cookies.ts" icon="/icons/typescript.svg"
|
|
8
13
|
// Empty cookie map
|
|
9
14
|
const cookies = new Bun.CookieMap();
|
|
10
15
|
|
|
@@ -28,7 +33,7 @@ const cookies3 = new Bun.CookieMap([
|
|
|
28
33
|
|
|
29
34
|
In Bun's HTTP server, the `cookies` property on the request object (in `routes`) is an instance of `CookieMap`:
|
|
30
35
|
|
|
31
|
-
```ts
|
|
36
|
+
```ts filename="server.ts" icon="/icons/typescript.svg"
|
|
32
37
|
const server = Bun.serve({
|
|
33
38
|
routes: {
|
|
34
39
|
"/": req => {
|
|
@@ -63,7 +68,7 @@ console.log("Server listening at: " + server.url);
|
|
|
63
68
|
|
|
64
69
|
Retrieves a cookie by name. Returns `null` if the cookie doesn't exist.
|
|
65
70
|
|
|
66
|
-
```ts
|
|
71
|
+
```ts filename="get-cookie.ts" icon="/icons/typescript.svg"
|
|
67
72
|
// Get by name
|
|
68
73
|
const cookie = cookies.get("session");
|
|
69
74
|
|
|
@@ -76,7 +81,7 @@ if (cookie != null) {
|
|
|
76
81
|
|
|
77
82
|
Checks if a cookie with the given name exists.
|
|
78
83
|
|
|
79
|
-
```ts
|
|
84
|
+
```ts filename="has-cookie.ts" icon="/icons/typescript.svg"
|
|
80
85
|
// Check if cookie exists
|
|
81
86
|
if (cookies.has("session")) {
|
|
82
87
|
// Cookie exists
|
|
@@ -91,7 +96,7 @@ if (cookies.has("session")) {
|
|
|
91
96
|
|
|
92
97
|
Adds or updates a cookie in the map. Cookies default to `{ path: "/", sameSite: "lax" }`.
|
|
93
98
|
|
|
94
|
-
```ts
|
|
99
|
+
```ts filename="set-cookie.ts" icon="/icons/typescript.svg"
|
|
95
100
|
// Set by name and value
|
|
96
101
|
cookies.set("session", "abc123");
|
|
97
102
|
|
|
@@ -114,7 +119,7 @@ cookies.set(cookie);
|
|
|
114
119
|
|
|
115
120
|
Removes a cookie from the map. When applied to a Response, this adds a cookie with an empty string value and an expiry date in the past. A cookie will only delete successfully on the browser if the domain and path is the same as it was when the cookie was created.
|
|
116
121
|
|
|
117
|
-
```ts
|
|
122
|
+
```ts filename="delete-cookie.ts" icon="/icons/typescript.svg"
|
|
118
123
|
// Delete by name using default domain and path.
|
|
119
124
|
cookies.delete("session");
|
|
120
125
|
|
|
@@ -130,7 +135,7 @@ cookies.delete({
|
|
|
130
135
|
|
|
131
136
|
Converts the cookie map to a serializable format.
|
|
132
137
|
|
|
133
|
-
```ts
|
|
138
|
+
```ts filename="cookie-to-json.ts" icon="/icons/typescript.svg"
|
|
134
139
|
const json = cookies.toJSON();
|
|
135
140
|
```
|
|
136
141
|
|
|
@@ -140,7 +145,7 @@ Returns an array of values for Set-Cookie headers that can be used to apply all
|
|
|
140
145
|
|
|
141
146
|
When using `Bun.serve()`, you don't need to call this method explicitly. Any changes made to the `req.cookies` map are automatically applied to the response headers. This method is primarily useful when working with other HTTP server implementations.
|
|
142
147
|
|
|
143
|
-
```js
|
|
148
|
+
```ts filename="node-server.js" icon="file-code"
|
|
144
149
|
import { createServer } from "node:http";
|
|
145
150
|
import { CookieMap } from "bun";
|
|
146
151
|
|
|
@@ -167,7 +172,7 @@ server.listen(3000, () => {
|
|
|
167
172
|
|
|
168
173
|
`CookieMap` provides several methods for iteration:
|
|
169
174
|
|
|
170
|
-
```ts
|
|
175
|
+
```ts filename="iterate-cookies.ts" icon="/icons/typescript.svg"
|
|
171
176
|
// Iterate over [name, cookie] entries
|
|
172
177
|
for (const [name, value] of cookies) {
|
|
173
178
|
console.log(`${name}: ${value}`);
|
|
@@ -200,7 +205,7 @@ cookies.forEach((value, name) => {
|
|
|
200
205
|
|
|
201
206
|
Returns the number of cookies in the map.
|
|
202
207
|
|
|
203
|
-
```ts
|
|
208
|
+
```ts filename="cookie-size.ts" icon="/icons/typescript.svg"
|
|
204
209
|
console.log(cookies.size); // Number of cookies
|
|
205
210
|
```
|
|
206
211
|
|
|
@@ -208,7 +213,7 @@ console.log(cookies.size); // Number of cookies
|
|
|
208
213
|
|
|
209
214
|
`Bun.Cookie` represents an HTTP cookie with its name, value, and attributes.
|
|
210
215
|
|
|
211
|
-
```ts
|
|
216
|
+
```ts filename="cookie-class.ts" icon="/icons/typescript.svg"
|
|
212
217
|
import { Cookie } from "bun";
|
|
213
218
|
|
|
214
219
|
// Create a basic cookie
|
|
@@ -238,7 +243,7 @@ const objCookie = new Bun.Cookie({
|
|
|
238
243
|
|
|
239
244
|
### Constructors
|
|
240
245
|
|
|
241
|
-
```ts
|
|
246
|
+
```ts filename="constructors.ts" icon="/icons/typescript.svg"
|
|
242
247
|
// Basic constructor with name/value
|
|
243
248
|
new Bun.Cookie(name: string, value: string);
|
|
244
249
|
|
|
@@ -254,7 +259,7 @@ new Bun.Cookie(options: CookieInit);
|
|
|
254
259
|
|
|
255
260
|
### Properties
|
|
256
261
|
|
|
257
|
-
```ts
|
|
262
|
+
```ts filename="cookie-properties.ts" icon="/icons/typescript.svg"
|
|
258
263
|
cookie.name; // string - Cookie name
|
|
259
264
|
cookie.value; // string - Cookie value
|
|
260
265
|
cookie.domain; // string | null - Domain scope (null if not specified)
|
|
@@ -273,7 +278,7 @@ cookie.httpOnly; // boolean - Accessible only via HTTP (not JavaScript)
|
|
|
273
278
|
|
|
274
279
|
Checks if the cookie has expired.
|
|
275
280
|
|
|
276
|
-
```ts
|
|
281
|
+
```ts filename="is-expired.ts" icon="/icons/typescript.svg"
|
|
277
282
|
// Expired cookie (Date in the past)
|
|
278
283
|
const expiredCookie = new Bun.Cookie("name", "value", {
|
|
279
284
|
expires: new Date(Date.now() - 1000),
|
|
@@ -297,7 +302,7 @@ console.log(sessionCookie.isExpired()); // false
|
|
|
297
302
|
|
|
298
303
|
Returns a string representation of the cookie suitable for a `Set-Cookie` header.
|
|
299
304
|
|
|
300
|
-
```ts
|
|
305
|
+
```ts filename="serialize-cookie.ts" icon="/icons/typescript.svg"
|
|
301
306
|
const cookie = new Bun.Cookie("session", "abc123", {
|
|
302
307
|
domain: "example.com",
|
|
303
308
|
path: "/admin",
|
|
@@ -317,7 +322,7 @@ console.log(cookie.toString());
|
|
|
317
322
|
|
|
318
323
|
Converts the cookie to a plain object suitable for JSON serialization.
|
|
319
324
|
|
|
320
|
-
```ts
|
|
325
|
+
```ts filename="cookie-json.ts" icon="/icons/typescript.svg"
|
|
321
326
|
const cookie = new Bun.Cookie("session", "abc123", {
|
|
322
327
|
secure: true,
|
|
323
328
|
httpOnly: true,
|
|
@@ -344,7 +349,7 @@ const jsonString = JSON.stringify(cookie);
|
|
|
344
349
|
|
|
345
350
|
Parses a cookie string into a `Cookie` instance.
|
|
346
351
|
|
|
347
|
-
```ts
|
|
352
|
+
```ts filename="parse-cookie.ts" icon="/icons/typescript.svg"
|
|
348
353
|
const cookie = Bun.Cookie.parse("name=value; Path=/; Secure; SameSite=Lax");
|
|
349
354
|
|
|
350
355
|
console.log(cookie.name); // "name"
|
|
@@ -358,7 +363,7 @@ console.log(cookie.sameSite); // "lax"
|
|
|
358
363
|
|
|
359
364
|
Factory method to create a cookie.
|
|
360
365
|
|
|
361
|
-
```ts
|
|
366
|
+
```ts filename="cookie-from.ts" icon="/icons/typescript.svg"
|
|
362
367
|
const cookie = Bun.Cookie.from("session", "abc123", {
|
|
363
368
|
httpOnly: true,
|
|
364
369
|
secure: true,
|
|
@@ -368,7 +373,7 @@ const cookie = Bun.Cookie.from("session", "abc123", {
|
|
|
368
373
|
|
|
369
374
|
## Types
|
|
370
375
|
|
|
371
|
-
```ts
|
|
376
|
+
```ts filename="types.ts" icon="/icons/typescript.svg"
|
|
372
377
|
interface CookieInit {
|
|
373
378
|
name?: string;
|
|
374
379
|
value?: string;
|