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,11 +1,16 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Build an app with SvelteKit and Bun
|
|
3
|
+
sidebarTitle: "SvelteKit with Bun"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Use `sv create my-app` to create a SvelteKit project with SvelteKit CLI. Answer the prompts to select a template and set up your development environment.
|
|
6
8
|
|
|
7
|
-
```sh
|
|
8
|
-
|
|
9
|
+
```sh terminal icon="terminal"
|
|
10
|
+
bunx sv create my-app
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
```txt
|
|
9
14
|
┌ Welcome to the Svelte CLI! (v0.5.7)
|
|
10
15
|
│
|
|
11
16
|
◇ Which template would you like?
|
|
@@ -47,9 +52,12 @@ Then start the development server with `bun --bun run dev`.
|
|
|
47
52
|
|
|
48
53
|
To run the dev server with Node.js instead of Bun, you can omit the `--bun` flag.
|
|
49
54
|
|
|
50
|
-
```sh
|
|
51
|
-
|
|
52
|
-
|
|
55
|
+
```sh terminal icon="terminal"
|
|
56
|
+
cd my-app
|
|
57
|
+
bun --bun run dev
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
```txt
|
|
53
61
|
$ vite dev
|
|
54
62
|
Forced re-optimization of dependencies
|
|
55
63
|
|
|
@@ -64,7 +72,9 @@ $ bun --bun run dev
|
|
|
64
72
|
|
|
65
73
|
Visit [http://localhost:5173](http://localhost:5173/) in a browser to see the template app.
|
|
66
74
|
|
|
67
|
-
|
|
75
|
+
<Frame>
|
|
76
|
+

|
|
77
|
+
</Frame>
|
|
68
78
|
|
|
69
79
|
---
|
|
70
80
|
|
|
@@ -78,34 +88,37 @@ To build for production, you'll need to add the right SvelteKit adapter. Current
|
|
|
78
88
|
|
|
79
89
|
Now, make the following changes to your `svelte.config.js`.
|
|
80
90
|
|
|
81
|
-
```ts-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
91
|
+
```ts svelte.config.js icon="file-code"
|
|
92
|
+
import adapter from "@sveltejs/adapter-auto"; // [!code --]
|
|
93
|
+
import adapter from "svelte-adapter-bun"; // [!code ++]
|
|
94
|
+
import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
|
|
95
|
+
|
|
96
|
+
/** @type {import('@sveltejs/kit').Config} */
|
|
97
|
+
const config = {
|
|
98
|
+
// Consult https://svelte.dev/docs/kit/integrations#preprocessors
|
|
99
|
+
// for more information about preprocessors
|
|
100
|
+
preprocess: vitePreprocess(),
|
|
101
|
+
|
|
102
|
+
kit: {
|
|
103
|
+
// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.
|
|
104
|
+
// If your environment is not supported, or you settled on a specific environment, switch out the adapter.
|
|
105
|
+
// See https://svelte.dev/docs/kit/adapters for more information about adapters.
|
|
106
|
+
adapter: adapter(),
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
|
|
110
|
+
export default config;
|
|
101
111
|
```
|
|
102
112
|
|
|
103
113
|
---
|
|
104
114
|
|
|
105
115
|
To build a production bundle:
|
|
106
116
|
|
|
107
|
-
```sh
|
|
108
|
-
|
|
117
|
+
```sh terminal icon="terminal"
|
|
118
|
+
bun --bun run build
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
```txt
|
|
109
122
|
$ vite build
|
|
110
123
|
vite v5.4.10 building SSR bundle for production...
|
|
111
124
|
"confetti" is imported from external module "@neoconfetti/svelte" but never used in "src/routes/sverdle/+page.svelte".
|
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Run Bun as a daemon with systemd
|
|
3
|
+
sidebarTitle: "systemd with Bun"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
[systemd](https://systemd.io) is an init system and service manager for Linux operating systems that manages the startup and control of system processes and services.
|
|
6
8
|
|
|
7
|
-
<!-- systemd provides aggressive parallelization capabilities, uses socket and D-Bus activation for starting services, offers on-demand starting of daemons, keeps track of processes using Linux control groups, maintains mount and auto mount points, and implements an elaborate transactional dependency-based service control logic. systemd supports SysV and LSB init scripts and works as a replacement for sysvinit. -->
|
|
8
|
-
|
|
9
|
-
<!-- Other parts include a logging daemon, utilities to control basic system configuration like the hostname, date, locale, maintain a list of logged-in users and running containers and virtual machines, system accounts, runtime directories and settings, and daemons to manage simple network configuration, network time synchronization, log forwarding, and name resolution. -->
|
|
10
|
-
|
|
11
9
|
---
|
|
12
10
|
|
|
13
11
|
To run a Bun application as a daemon using **systemd** you'll need to create a _service file_ in `/lib/systemd/system/`.
|
|
14
12
|
|
|
15
|
-
```sh
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
```sh terminal icon="terminal"
|
|
14
|
+
cd /lib/systemd/system
|
|
15
|
+
touch my-app.service
|
|
18
16
|
```
|
|
19
17
|
|
|
20
18
|
---
|
|
@@ -23,7 +21,7 @@ Here is a typical service file that runs an application on system start. You can
|
|
|
23
21
|
|
|
24
22
|
Refer to the [systemd documentation](https://www.freedesktop.org/software/systemd/man/systemd.service.html) for more information on each setting.
|
|
25
23
|
|
|
26
|
-
```ini
|
|
24
|
+
```ini my-app.service icon="file-code"
|
|
27
25
|
[Unit]
|
|
28
26
|
# describe the app
|
|
29
27
|
Description=My App
|
|
@@ -54,32 +52,35 @@ WantedBy=multi-user.target
|
|
|
54
52
|
|
|
55
53
|
If your application starts a webserver, note that non-`root` users are not able to listen on ports 80 or 443 by default. To permanently allow Bun to listen on these ports when executed by a non-`root` user, use the following command. This step isn't necessary when running as `root`.
|
|
56
54
|
|
|
57
|
-
```bash
|
|
58
|
-
|
|
55
|
+
```bash terminal icon="terminal"
|
|
56
|
+
setcap CAP_NET_BIND_SERVICE=+eip ~/.bun/bin/bun
|
|
59
57
|
```
|
|
60
58
|
|
|
61
59
|
---
|
|
62
60
|
|
|
63
61
|
With the service file configured, you can now _enable_ the service. Once enabled, it will start automatically on reboot. This requires `sudo` permissions.
|
|
64
62
|
|
|
65
|
-
```bash
|
|
66
|
-
|
|
63
|
+
```bash terminal icon="terminal"
|
|
64
|
+
systemctl enable my-app
|
|
67
65
|
```
|
|
68
66
|
|
|
69
67
|
---
|
|
70
68
|
|
|
71
69
|
To start the service without rebooting, you can manually _start_ it.
|
|
72
70
|
|
|
73
|
-
```bash
|
|
74
|
-
|
|
71
|
+
```bash terminal icon="terminal"
|
|
72
|
+
systemctl start my-app
|
|
75
73
|
```
|
|
76
74
|
|
|
77
75
|
---
|
|
78
76
|
|
|
79
77
|
Check the status of your application with `systemctl status`. If you've started your app successfully, you should see something like this:
|
|
80
78
|
|
|
81
|
-
```bash
|
|
82
|
-
|
|
79
|
+
```bash terminal icon="terminal"
|
|
80
|
+
systemctl status my-app
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
```txt
|
|
83
84
|
● my-app.service - My App
|
|
84
85
|
Loaded: loaded (/lib/systemd/system/my-app.service; enabled; preset: enabled)
|
|
85
86
|
Active: active (running) since Thu 2023-10-12 11:34:08 UTC; 1h 8min ago
|
|
@@ -95,19 +96,19 @@ $ sudo systemctl status my-app
|
|
|
95
96
|
|
|
96
97
|
To update the service, edit the contents of the service file, then reload the daemon.
|
|
97
98
|
|
|
98
|
-
```bash
|
|
99
|
-
|
|
99
|
+
```bash terminal icon="terminal"
|
|
100
|
+
systemctl daemon-reload
|
|
100
101
|
```
|
|
101
102
|
|
|
102
103
|
---
|
|
103
104
|
|
|
104
105
|
For a complete guide on the service unit configuration, you can check [this page](https://www.freedesktop.org/software/systemd/man/systemd.service.html). Or refer to this cheatsheet of common commands:
|
|
105
106
|
|
|
106
|
-
```bash
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
107
|
+
```bash terminal icon="terminal"
|
|
108
|
+
systemctl daemon-reload # tell systemd that some files got changed
|
|
109
|
+
systemctl enable my-app # enable the app (to allow auto-start)
|
|
110
|
+
systemctl disable my-app # disable the app (turns off auto-start)
|
|
111
|
+
systemctl start my-app # start the app if is stopped
|
|
112
|
+
systemctl stop my-app # stop the app
|
|
113
|
+
systemctl restart my-app # restart the app
|
|
113
114
|
```
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Bun Redis with Upstash
|
|
3
|
+
sidebarTitle: Upstash with Bun
|
|
4
|
+
mode: center
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
[Upstash](https://upstash.com/) is a fully managed Redis database as a service. Upstash works with the Redis® API, which means you can use Bun's native Redis client to connect to your Upstash database.
|
|
8
|
+
|
|
9
|
+
<Note>TLS is enabled by default for all Upstash Redis databases.</Note>
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
<Steps>
|
|
14
|
+
<Step title="Create a new project">
|
|
15
|
+
Create a new project by running `bun init`:
|
|
16
|
+
|
|
17
|
+
```sh terminal icon="terminal"
|
|
18
|
+
bun init bun-upstash-redis
|
|
19
|
+
cd bun-upstash-redis
|
|
20
|
+
```
|
|
21
|
+
</Step>
|
|
22
|
+
<Step title="Create an Upstash Redis database">
|
|
23
|
+
Go to the [Upstash dashboard](https://console.upstash.com/) and create a new Redis database. After completing the [getting started guide](https://upstash.com/docs/redis/overall/getstarted), you'll see your database page with connection information.
|
|
24
|
+
|
|
25
|
+
The database page displays two connection methods; HTTP and TLS. For Bun's Redis client, you need the **TLS** connection details. This URL starts with `rediss://`.
|
|
26
|
+
|
|
27
|
+
<Frame>
|
|
28
|
+

|
|
29
|
+
</Frame>
|
|
30
|
+
|
|
31
|
+
</Step>
|
|
32
|
+
<Step title="Connect using Bun's Redis client">
|
|
33
|
+
You can connect to Upstash by setting environment variables with Bun's default `redis` client.
|
|
34
|
+
|
|
35
|
+
Set the `REDIS_URL` environment variable in your `.env` file using the Redis endpoint (not the REST URL):
|
|
36
|
+
|
|
37
|
+
```env .env icon="settings"
|
|
38
|
+
REDIS_URL=rediss://********@********.upstash.io:6379
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Bun's Redis client reads connection information from `REDIS_URL` by default:
|
|
42
|
+
|
|
43
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
44
|
+
import { redis } from "bun";
|
|
45
|
+
|
|
46
|
+
// Reads from process.env.REDIS_URL automatically
|
|
47
|
+
await redis.set("counter", "0"); // [!code ++]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
Alternatively, you can create a custom client using `RedisClient`:
|
|
51
|
+
|
|
52
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
53
|
+
import { RedisClient } from "bun";
|
|
54
|
+
|
|
55
|
+
const redis = new RedisClient(process.env.REDIS_URL); // [!code ++]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
</Step>
|
|
59
|
+
<Step title="Use the Redis client">
|
|
60
|
+
You can now use the Redis client to interact with your Upstash Redis database:
|
|
61
|
+
|
|
62
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
63
|
+
import { redis } from "bun";
|
|
64
|
+
|
|
65
|
+
// Get a value
|
|
66
|
+
let counter = await redis.get("counter");
|
|
67
|
+
|
|
68
|
+
// Set a value if it doesn't exist
|
|
69
|
+
if (!counter) {
|
|
70
|
+
await redis.set("counter", "0");
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Increment the counter
|
|
74
|
+
await redis.incr("counter");
|
|
75
|
+
|
|
76
|
+
// Get the updated value
|
|
77
|
+
counter = await redis.get("counter");
|
|
78
|
+
console.log(counter);
|
|
79
|
+
```
|
|
80
|
+
```txt
|
|
81
|
+
1
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
The Redis client automatically handles connections in the background. No need to manually connect or disconnect for basic operations.
|
|
85
|
+
</Step>
|
|
86
|
+
|
|
87
|
+
</Steps>
|
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Build a frontend using Vite and Bun
|
|
3
|
+
sidebarTitle: "Vite with Bun"
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
|
-
|
|
6
|
-
You can use Vite with Bun, but many projects get faster builds & drop hundreds of dependencies by switching to [HTML
|
|
7
|
-
|
|
7
|
+
<Note>
|
|
8
|
+
You can use Vite with Bun, but many projects get faster builds & drop hundreds of dependencies by switching to [HTML
|
|
9
|
+
imports](/bundler/html-static).
|
|
10
|
+
</Note>
|
|
8
11
|
|
|
9
12
|
---
|
|
10
13
|
|
|
11
14
|
Vite works out of the box with Bun. Get started with one of Vite's templates.
|
|
12
15
|
|
|
13
|
-
```bash
|
|
14
|
-
|
|
16
|
+
```bash terminal icon="terminal"
|
|
17
|
+
bun create vite my-app
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
```txt
|
|
15
21
|
✔ Select a framework: › React
|
|
16
22
|
✔ Select a variant: › TypeScript + SWC
|
|
17
23
|
Scaffolding project in /path/to/my-app...
|
|
@@ -21,7 +27,7 @@ Scaffolding project in /path/to/my-app...
|
|
|
21
27
|
|
|
22
28
|
Then `cd` into the project directory and install dependencies.
|
|
23
29
|
|
|
24
|
-
```bash
|
|
30
|
+
```bash terminal icon="terminal"
|
|
25
31
|
cd my-app
|
|
26
32
|
bun install
|
|
27
33
|
```
|
|
@@ -32,7 +38,7 @@ Start the development server with the `vite` CLI using `bunx`.
|
|
|
32
38
|
|
|
33
39
|
The `--bun` flag tells Bun to run Vite's CLI using `bun` instead of `node`; by default Bun respects Vite's `#!/usr/bin/env node` [shebang line](<https://en.wikipedia.org/wiki/Shebang_(Unix)>).
|
|
34
40
|
|
|
35
|
-
```bash
|
|
41
|
+
```bash terminal icon="terminal"
|
|
36
42
|
bunx --bun vite
|
|
37
43
|
```
|
|
38
44
|
|
|
@@ -40,10 +46,10 @@ bunx --bun vite
|
|
|
40
46
|
|
|
41
47
|
To simplify this command, update the `"dev"` script in `package.json` to the following.
|
|
42
48
|
|
|
43
|
-
```json
|
|
49
|
+
```json package.json icon="file-json"
|
|
44
50
|
"scripts": {
|
|
45
|
-
|
|
46
|
-
|
|
51
|
+
"dev": "vite", // [!code --]
|
|
52
|
+
"dev": "bunx --bun vite", // [!code ++]
|
|
47
53
|
"build": "vite build",
|
|
48
54
|
"serve": "vite preview"
|
|
49
55
|
},
|
|
@@ -54,7 +60,7 @@ To simplify this command, update the `"dev"` script in `package.json` to the fol
|
|
|
54
60
|
|
|
55
61
|
Now you can start the development server with `bun run dev`.
|
|
56
62
|
|
|
57
|
-
```bash
|
|
63
|
+
```bash terminal icon="terminal"
|
|
58
64
|
bun run dev
|
|
59
65
|
```
|
|
60
66
|
|
|
@@ -62,8 +68,8 @@ bun run dev
|
|
|
62
68
|
|
|
63
69
|
The following command will build your app for production.
|
|
64
70
|
|
|
65
|
-
```sh
|
|
66
|
-
|
|
71
|
+
```sh terminal icon="terminal"
|
|
72
|
+
bunx --bun vite build
|
|
67
73
|
```
|
|
68
74
|
|
|
69
75
|
---
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Extract links from a webpage using HTMLRewriter
|
|
3
|
+
sidebarTitle: Extract links using HTMLRewriter
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
## Extract links from a webpage
|
|
6
8
|
|
|
7
9
|
Bun's [HTMLRewriter](https://bun.com/docs/api/html-rewriter) API can be used to efficiently extract links from HTML content. It works by chaining together CSS selectors to match the elements, text, and attributes you want to process. This is a simple example of how to extract links from a webpage. You can pass `.transform` a `Response`, `Blob`, or `string`.
|
|
8
10
|
|
|
9
|
-
```ts
|
|
11
|
+
```ts extract-links.ts icon="/icons/typescript.svg"
|
|
10
12
|
async function extractLinks(url: string) {
|
|
11
13
|
const links = new Set<string>();
|
|
12
14
|
const response = await fetch(url);
|
|
@@ -35,7 +37,7 @@ await extractLinks("https://bun.com");
|
|
|
35
37
|
|
|
36
38
|
When scraping websites, you often want to convert relative URLs (like `/docs`) to absolute URLs. Here's how to handle URL resolution:
|
|
37
39
|
|
|
38
|
-
```ts
|
|
40
|
+
```ts extract-links.ts icon="/icons/typescript.svg"
|
|
39
41
|
async function extractLinksFromURL(url: string) {
|
|
40
42
|
const response = await fetch(url);
|
|
41
43
|
const links = new Set<string>();
|
|
@@ -44,13 +46,15 @@ async function extractLinksFromURL(url: string) {
|
|
|
44
46
|
element(el) {
|
|
45
47
|
const href = el.getAttribute("href");
|
|
46
48
|
if (href) {
|
|
47
|
-
// Convert relative URLs to absolute
|
|
49
|
+
// Convert relative URLs to absolute // [!code ++]
|
|
48
50
|
try {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
+
// [!code ++]
|
|
52
|
+
const absoluteURL = new URL(href, url).href; // [!code ++]
|
|
53
|
+
links.add(absoluteURL); // [!code ++]
|
|
51
54
|
} catch {
|
|
55
|
+
// [!code ++]
|
|
52
56
|
links.add(href);
|
|
53
|
-
}
|
|
57
|
+
} // [!code ++]
|
|
54
58
|
}
|
|
55
59
|
},
|
|
56
60
|
});
|
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Extract social share images and Open Graph tags
|
|
3
|
+
sidebarTitle: OpenGraph tags
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
## Extract social share images and Open Graph tags
|
|
6
8
|
|
|
7
9
|
Bun's [HTMLRewriter](https://bun.com/docs/api/html-rewriter) API can be used to efficiently extract social share images and Open Graph metadata from HTML content. This is particularly useful for building link preview features, social media cards, or web scrapers. We can use HTMLRewriter to match CSS selectors to HTML elements, text, and attributes we want to process.
|
|
8
10
|
|
|
9
|
-
```ts
|
|
11
|
+
```ts extract-social-meta.ts icon="/icons/typescript.svg"
|
|
10
12
|
interface SocialMetadata {
|
|
11
13
|
title?: string;
|
|
12
14
|
description?: string;
|
|
@@ -79,7 +81,9 @@ async function extractSocialMetadata(url: string): Promise<SocialMetadata> {
|
|
|
79
81
|
|
|
80
82
|
return metadata;
|
|
81
83
|
}
|
|
84
|
+
```
|
|
82
85
|
|
|
86
|
+
```ts Example Usage icon="/icons/typescript.svg"
|
|
83
87
|
// Example usage
|
|
84
88
|
const metadata = await extractSocialMetadata("https://bun.com");
|
|
85
89
|
console.log(metadata);
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Start a cluster of HTTP servers
|
|
3
3
|
description: Run multiple HTTP servers concurrently via the "reusePort" option to share the same port across multiple processes
|
|
4
|
+
sidebarTitle: Start a cluster of HTTP servers
|
|
5
|
+
mode: center
|
|
4
6
|
---
|
|
5
7
|
|
|
6
8
|
To run multiple HTTP servers concurrently, use the `reusePort` option in `Bun.serve()` which shares the same port across multiple processes.
|
|
7
9
|
|
|
8
10
|
This automatically load balances incoming requests across multiple instances of Bun.
|
|
9
11
|
|
|
10
|
-
```ts
|
|
12
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
11
13
|
import { serve } from "bun";
|
|
12
14
|
|
|
13
15
|
const id = Math.random().toString(36).slice(2);
|
|
@@ -22,21 +24,22 @@ serve({
|
|
|
22
24
|
|
|
23
25
|
async fetch(request) {
|
|
24
26
|
return new Response("Hello from Bun #" + id + "!\n");
|
|
25
|
-
}
|
|
27
|
+
},
|
|
26
28
|
});
|
|
27
29
|
```
|
|
28
30
|
|
|
29
31
|
---
|
|
30
32
|
|
|
31
|
-
|
|
32
|
-
**Linux only** — Windows and macOS ignore the `reusePort` option. This is an operating system limitation with
|
|
33
|
-
|
|
33
|
+
<Note>
|
|
34
|
+
**Linux only** — Windows and macOS ignore the `reusePort` option. This is an operating system limitation with
|
|
35
|
+
`SO_REUSEPORT`, unfortunately.
|
|
36
|
+
</Note>
|
|
34
37
|
|
|
35
38
|
After saving the file, start your servers on the same port.
|
|
36
39
|
|
|
37
40
|
Under the hood, this uses the Linux `SO_REUSEPORT` and `SO_REUSEADDR` socket options to ensure fair load balancing across multiple processes. [Learn more about `SO_REUSEPORT` and `SO_REUSEADDR`](https://lwn.net/Articles/542629/)
|
|
38
41
|
|
|
39
|
-
```ts
|
|
42
|
+
```ts cluster.ts icon="/icons/typescript.svg"
|
|
40
43
|
import { spawn } from "bun";
|
|
41
44
|
|
|
42
45
|
const cpus = navigator.hardwareConcurrency; // Number of CPU cores
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: fetch with unix domain sockets in Bun
|
|
3
|
+
sidebarTitle: Fetch with unix domain sockets
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
In Bun, the `unix` option in `fetch()` lets you send HTTP requests over a [unix domain socket](https://en.wikipedia.org/wiki/Unix_domain_socket).
|
|
6
8
|
|
|
7
|
-
```ts
|
|
9
|
+
```ts fetch-unix.ts icon="/icons/typescript.svg"
|
|
8
10
|
const unix = "/var/run/docker.sock";
|
|
9
11
|
|
|
10
12
|
const response = await fetch("http://localhost/info", { unix });
|
|
@@ -19,7 +21,7 @@ The `unix` option is a string that specifies the local file path to a unix domai
|
|
|
19
21
|
|
|
20
22
|
To send a `POST` request to an API endpoint over a unix domain socket:
|
|
21
23
|
|
|
22
|
-
```ts
|
|
24
|
+
```ts fetch-unix.ts icon="/icons/typescript.svg"
|
|
23
25
|
const response = await fetch("https://hostname/a/path", {
|
|
24
26
|
unix: "/var/run/path/to/unix.sock",
|
|
25
27
|
method: "POST",
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Send an HTTP request using fetch
|
|
3
|
+
sidebarTitle: Fetch with Bun
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Bun implements the Web-standard [`fetch`](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API) API for sending HTTP requests. To send a simple `GET` request to a URL:
|
|
6
8
|
|
|
7
|
-
```ts
|
|
9
|
+
```ts fetch.ts icon="/icons/typescript.svg"
|
|
8
10
|
const response = await fetch("https://bun.com");
|
|
9
11
|
const html = await response.text(); // HTML string
|
|
10
12
|
```
|
|
@@ -13,7 +15,7 @@ const html = await response.text(); // HTML string
|
|
|
13
15
|
|
|
14
16
|
To send a `POST` request to an API endpoint.
|
|
15
17
|
|
|
16
|
-
```ts
|
|
18
|
+
```ts fetch.ts icon="/icons/typescript.svg"
|
|
17
19
|
const response = await fetch("https://bun.com/api", {
|
|
18
20
|
method: "POST",
|
|
19
21
|
body: JSON.stringify({ message: "Hello from Bun!" }),
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Upload files via HTTP using FormData
|
|
3
|
+
sidebarTitle: Upload files via HTTP using FormData
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
To upload files via HTTP with Bun, use the [`FormData`](https://developer.mozilla.org/en-US/docs/Web/API/FormData) API. Let's start with a HTTP server that serves a simple HTML web form.
|
|
6
8
|
|
|
7
|
-
```ts
|
|
9
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
8
10
|
const server = Bun.serve({
|
|
9
11
|
port: 4000,
|
|
10
12
|
async fetch(req) {
|
|
@@ -29,7 +31,7 @@ console.log(`Listening on http://localhost:${server.port}`);
|
|
|
29
31
|
|
|
30
32
|
We can define our HTML form in another file, `index.html`.
|
|
31
33
|
|
|
32
|
-
```html
|
|
34
|
+
```html index.html icon="file-code"
|
|
33
35
|
<!DOCTYPE html>
|
|
34
36
|
<html>
|
|
35
37
|
<head>
|
|
@@ -51,7 +53,7 @@ We can define our HTML form in another file, `index.html`.
|
|
|
51
53
|
At this point, we can run the server and visit [`localhost:4000`](http://localhost:4000) to see our form.
|
|
52
54
|
|
|
53
55
|
```bash
|
|
54
|
-
|
|
56
|
+
bun run index.ts
|
|
55
57
|
Listening on http://localhost:4000
|
|
56
58
|
```
|
|
57
59
|
|
|
@@ -63,7 +65,7 @@ First we use the [`.formData()`](https://developer.mozilla.org/en-US/docs/Web/AP
|
|
|
63
65
|
|
|
64
66
|
Finally, we write the `Blob` to disk using [`Bun.write()`](https://bun.com/docs/api/file-io#writing-files-bun-write).
|
|
65
67
|
|
|
66
|
-
```ts
|
|
68
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
67
69
|
const server = Bun.serve({
|
|
68
70
|
port: 4000,
|
|
69
71
|
async fetch(req) {
|
|
@@ -77,16 +79,17 @@ const server = Bun.serve({
|
|
|
77
79
|
},
|
|
78
80
|
});
|
|
79
81
|
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
82
|
+
// parse formdata at /action // [!code ++]
|
|
83
|
+
if (url.pathname === "/action") {
|
|
84
|
+
// [!code ++]
|
|
85
|
+
const formdata = await req.formData(); // [!code ++]
|
|
86
|
+
const name = formdata.get("name"); // [!code ++]
|
|
87
|
+
const profilePicture = formdata.get("profilePicture"); // [!code ++]
|
|
88
|
+
if (!profilePicture) throw new Error("Must upload a profile picture."); // [!code ++]
|
|
89
|
+
// write profilePicture to disk // [!code ++]
|
|
90
|
+
await Bun.write("profilePicture.png", profilePicture); // [!code ++]
|
|
91
|
+
return new Response("Success"); // [!code ++]
|
|
92
|
+
} // [!code ++]
|
|
90
93
|
|
|
91
94
|
return new Response("Not Found", { status: 404 });
|
|
92
95
|
},
|
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
2
|
+
title: Hot reload an HTTP server
|
|
3
|
+
sidebarTitle: Hot reload an HTTP server
|
|
4
|
+
mode: center
|
|
3
5
|
---
|
|
4
6
|
|
|
5
7
|
Bun supports the [`--hot`](https://bun.com/docs/runtime/hot#hot-mode) flag to run a file with hot reloading enabled. When any module or file changes, Bun re-runs the file.
|
|
6
8
|
|
|
7
|
-
```sh
|
|
8
|
-
|
|
9
|
+
```sh terminal icon="terminal"
|
|
10
|
+
bun --hot run index.ts
|
|
9
11
|
```
|
|
10
12
|
|
|
11
13
|
---
|
|
12
14
|
|
|
13
15
|
Bun detects when you are running an HTTP server with `Bun.serve()`. It reloads your fetch handler when source files change, _without_ restarting the `bun` process. This makes hot reloads nearly instantaneous.
|
|
14
16
|
|
|
15
|
-
|
|
17
|
+
<Note>
|
|
16
18
|
Note that this doesn't reload the page on your browser.
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
```ts
|
|
19
|
+
</Note>
|
|
20
|
+
|
|
21
|
+
```ts index.ts icon="/icons/typescript.svg"
|
|
20
22
|
Bun.serve({
|
|
21
23
|
port: 3000,
|
|
22
24
|
fetch(req) {
|