bun-types 1.3.2-canary.20251104T140728 → 1.3.2-canary.20251106T140813
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 +4 -4
- package/docs/README.md +28 -0
- package/globals.d.ts +0 -1
- package/overrides.d.ts +45 -15
- package/package.json +1 -1
- package/test.d.ts +1 -1
- package/docs/api/binary-data.md +0 -1038
- package/docs/api/cc.md +0 -197
- package/docs/api/color.md +0 -262
- package/docs/api/console.md +0 -57
- package/docs/api/cookie.md +0 -449
- package/docs/api/dns.md +0 -110
- package/docs/api/fetch.md +0 -463
- package/docs/api/ffi.md +0 -557
- package/docs/api/file-io.md +0 -366
- package/docs/api/file-system-router.md +0 -112
- package/docs/api/file.md +0 -19
- package/docs/api/glob.md +0 -178
- package/docs/api/globals.md +0 -387
- package/docs/api/hashing.md +0 -319
- package/docs/api/html-rewriter.md +0 -334
- package/docs/api/http.md +0 -1408
- package/docs/api/import-meta.md +0 -69
- package/docs/api/node-api.md +0 -14
- package/docs/api/redis.md +0 -597
- package/docs/api/s3.md +0 -850
- package/docs/api/secrets.md +0 -319
- package/docs/api/semver.md +0 -52
- package/docs/api/spawn.md +0 -582
- package/docs/api/sql.md +0 -1374
- package/docs/api/sqlite.md +0 -694
- package/docs/api/streams.md +0 -230
- package/docs/api/tcp.md +0 -221
- package/docs/api/transpiler.md +0 -276
- package/docs/api/udp.md +0 -123
- package/docs/api/utils.md +0 -891
- package/docs/api/websockets.md +0 -573
- package/docs/api/workers.md +0 -322
- package/docs/api/yaml.md +0 -668
- package/docs/benchmarks.md +0 -120
- package/docs/bun-flavored-toml.md +0 -42
- package/docs/bundler/css.md +0 -1028
- package/docs/bundler/css_modules.md +0 -145
- package/docs/bundler/executables.md +0 -626
- package/docs/bundler/fullstack.md +0 -418
- package/docs/bundler/hmr.md +0 -234
- package/docs/bundler/html.md +0 -349
- package/docs/bundler/index.md +0 -1735
- package/docs/bundler/intro.md +0 -75
- package/docs/bundler/loaders.md +0 -410
- package/docs/bundler/macros.md +0 -329
- package/docs/bundler/plugins.md +0 -449
- package/docs/bundler/vs-esbuild.md +0 -1127
- package/docs/cli/add.md +0 -173
- package/docs/cli/bun-completions.md +0 -3
- package/docs/cli/bun-create.md +0 -338
- package/docs/cli/bun-install.md +0 -349
- package/docs/cli/bun-upgrade.md +0 -39
- package/docs/cli/bunx.md +0 -89
- package/docs/cli/filter.md +0 -90
- package/docs/cli/info.md +0 -65
- package/docs/cli/init.md +0 -85
- package/docs/cli/install.md +0 -344
- package/docs/cli/link.md +0 -40
- package/docs/cli/outdated.md +0 -90
- package/docs/cli/patch-commit.md +0 -11
- package/docs/cli/pm.md +0 -285
- package/docs/cli/publish.md +0 -120
- package/docs/cli/remove.md +0 -7
- package/docs/cli/run.md +0 -261
- package/docs/cli/test.md +0 -397
- package/docs/cli/unlink.md +0 -9
- package/docs/cli/update.md +0 -129
- package/docs/cli/why.md +0 -67
- 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/binary/arraybuffer-to-array.md +0 -27
- package/docs/guides/binary/arraybuffer-to-blob.md +0 -24
- package/docs/guides/binary/arraybuffer-to-buffer.md +0 -25
- package/docs/guides/binary/arraybuffer-to-string.md +0 -15
- package/docs/guides/binary/arraybuffer-to-typedarray.md +0 -39
- package/docs/guides/binary/blob-to-arraybuffer.md +0 -14
- package/docs/guides/binary/blob-to-dataview.md +0 -14
- package/docs/guides/binary/blob-to-stream.md +0 -14
- package/docs/guides/binary/blob-to-string.md +0 -15
- package/docs/guides/binary/blob-to-typedarray.md +0 -14
- package/docs/guides/binary/buffer-to-arraybuffer.md +0 -14
- package/docs/guides/binary/buffer-to-blob.md +0 -14
- package/docs/guides/binary/buffer-to-readablestream.md +0 -41
- package/docs/guides/binary/buffer-to-string.md +0 -25
- package/docs/guides/binary/buffer-to-typedarray.md +0 -14
- package/docs/guides/binary/dataview-to-string.md +0 -15
- package/docs/guides/binary/typedarray-to-arraybuffer.md +0 -25
- package/docs/guides/binary/typedarray-to-blob.md +0 -16
- package/docs/guides/binary/typedarray-to-buffer.md +0 -14
- package/docs/guides/binary/typedarray-to-dataview.md +0 -14
- package/docs/guides/binary/typedarray-to-readablestream.md +0 -41
- package/docs/guides/binary/typedarray-to-string.md +0 -16
- package/docs/guides/deployment/railway.md +0 -157
- package/docs/guides/ecosystem/astro.md +0 -72
- package/docs/guides/ecosystem/discordjs.md +0 -77
- package/docs/guides/ecosystem/docker.md +0 -140
- package/docs/guides/ecosystem/drizzle.md +0 -185
- package/docs/guides/ecosystem/edgedb.md +0 -228
- package/docs/guides/ecosystem/elysia.md +0 -31
- package/docs/guides/ecosystem/express.md +0 -40
- package/docs/guides/ecosystem/hono.md +0 -39
- package/docs/guides/ecosystem/mongoose.md +0 -87
- package/docs/guides/ecosystem/neon-drizzle.md +0 -220
- package/docs/guides/ecosystem/neon-serverless-postgres.md +0 -55
- package/docs/guides/ecosystem/nextjs.md +0 -49
- package/docs/guides/ecosystem/nuxt.md +0 -56
- package/docs/guides/ecosystem/pm2.md +0 -57
- package/docs/guides/ecosystem/prisma.md +0 -141
- package/docs/guides/ecosystem/qwik.md +0 -107
- package/docs/guides/ecosystem/react.md +0 -50
- package/docs/guides/ecosystem/remix.md +0 -78
- package/docs/guides/ecosystem/render.md +0 -79
- package/docs/guides/ecosystem/sentry.md +0 -52
- package/docs/guides/ecosystem/solidstart.md +0 -58
- package/docs/guides/ecosystem/ssr-react.md +0 -51
- package/docs/guides/ecosystem/stric.md +0 -55
- package/docs/guides/ecosystem/sveltekit.md +0 -125
- package/docs/guides/ecosystem/systemd.md +0 -113
- package/docs/guides/ecosystem/vite.md +0 -71
- package/docs/guides/html-rewriter/extract-links.md +0 -68
- package/docs/guides/html-rewriter/extract-social-meta.md +0 -93
- package/docs/guides/http/cluster.md +0 -66
- package/docs/guides/http/fetch-unix.md +0 -33
- package/docs/guides/http/fetch.md +0 -24
- package/docs/guides/http/file-uploads.md +0 -94
- package/docs/guides/http/hot.md +0 -26
- package/docs/guides/http/proxy.md +0 -24
- package/docs/guides/http/server.md +0 -46
- package/docs/guides/http/simple.md +0 -18
- package/docs/guides/http/stream-file.md +0 -48
- package/docs/guides/http/stream-iterator.md +0 -47
- package/docs/guides/http/stream-node-streams-in-bun.md +0 -20
- package/docs/guides/http/tls.md +0 -30
- package/docs/guides/install/add-dev.md +0 -26
- package/docs/guides/install/add-git.md +0 -36
- package/docs/guides/install/add-optional.md +0 -25
- package/docs/guides/install/add-peer.md +0 -43
- package/docs/guides/install/add-tarball.md +0 -33
- package/docs/guides/install/add.md +0 -42
- package/docs/guides/install/azure-artifacts.md +0 -73
- package/docs/guides/install/cicd.md +0 -41
- package/docs/guides/install/custom-registry.md +0 -30
- package/docs/guides/install/from-npm-install-to-bun-install.md +0 -214
- package/docs/guides/install/git-diff-bun-lockfile.md +0 -44
- package/docs/guides/install/jfrog-artifactory.md +0 -28
- package/docs/guides/install/npm-alias.md +0 -23
- package/docs/guides/install/registry-scope.md +0 -38
- package/docs/guides/install/trusted.md +0 -46
- package/docs/guides/install/workspaces.md +0 -70
- package/docs/guides/install/yarnlock.md +0 -44
- package/docs/guides/process/argv.md +0 -58
- package/docs/guides/process/ctrl-c.md +0 -16
- package/docs/guides/process/ipc.md +0 -66
- package/docs/guides/process/nanoseconds.md +0 -13
- package/docs/guides/process/os-signals.md +0 -39
- package/docs/guides/process/spawn-stderr.md +0 -31
- package/docs/guides/process/spawn-stdout.md +0 -26
- package/docs/guides/process/spawn.md +0 -41
- package/docs/guides/process/stdin.md +0 -54
- package/docs/guides/read-file/arraybuffer.md +0 -28
- package/docs/guides/read-file/buffer.md +0 -19
- package/docs/guides/read-file/exists.md +0 -16
- package/docs/guides/read-file/json.md +0 -17
- package/docs/guides/read-file/mime.md +0 -20
- package/docs/guides/read-file/stream.md +0 -26
- package/docs/guides/read-file/string.md +0 -22
- package/docs/guides/read-file/uint8array.md +0 -21
- package/docs/guides/read-file/watch.md +0 -68
- package/docs/guides/runtime/build-time-constants.md +0 -293
- package/docs/guides/runtime/cicd.md +0 -43
- package/docs/guides/runtime/codesign-macos-executable.md +0 -56
- package/docs/guides/runtime/define-constant.md +0 -145
- package/docs/guides/runtime/delete-directory.md +0 -37
- package/docs/guides/runtime/delete-file.md +0 -19
- package/docs/guides/runtime/heap-snapshot.md +0 -26
- package/docs/guides/runtime/import-html.md +0 -15
- package/docs/guides/runtime/import-json.md +0 -44
- package/docs/guides/runtime/import-toml.md +0 -30
- package/docs/guides/runtime/import-yaml.md +0 -102
- package/docs/guides/runtime/read-env.md +0 -32
- package/docs/guides/runtime/set-env.md +0 -47
- package/docs/guides/runtime/shell.md +0 -40
- package/docs/guides/runtime/timezone.md +0 -35
- package/docs/guides/runtime/tsconfig-paths.md +0 -29
- package/docs/guides/runtime/typescript.md +0 -49
- package/docs/guides/runtime/vscode-debugger.md +0 -47
- package/docs/guides/runtime/web-debugger.md +0 -82
- package/docs/guides/streams/node-readable-to-arraybuffer.md +0 -11
- package/docs/guides/streams/node-readable-to-blob.md +0 -11
- package/docs/guides/streams/node-readable-to-json.md +0 -12
- package/docs/guides/streams/node-readable-to-string.md +0 -12
- package/docs/guides/streams/node-readable-to-uint8array.md +0 -11
- package/docs/guides/streams/to-array.md +0 -14
- package/docs/guides/streams/to-arraybuffer.md +0 -14
- package/docs/guides/streams/to-blob.md +0 -14
- package/docs/guides/streams/to-buffer.md +0 -15
- package/docs/guides/streams/to-json.md +0 -14
- package/docs/guides/streams/to-string.md +0 -14
- package/docs/guides/streams/to-typedarray.md +0 -22
- package/docs/guides/test/bail.md +0 -22
- package/docs/guides/test/coverage-threshold.md +0 -60
- package/docs/guides/test/coverage.md +0 -44
- package/docs/guides/test/happy-dom.md +0 -68
- package/docs/guides/test/migrate-from-jest.md +0 -143
- package/docs/guides/test/mock-clock.md +0 -48
- package/docs/guides/test/mock-functions.md +0 -68
- package/docs/guides/test/rerun-each.md +0 -14
- package/docs/guides/test/run-tests.md +0 -111
- package/docs/guides/test/skip-tests.md +0 -39
- package/docs/guides/test/snapshot.md +0 -95
- package/docs/guides/test/spy-on.md +0 -46
- package/docs/guides/test/svelte-test.md +0 -120
- package/docs/guides/test/testing-library.md +0 -92
- package/docs/guides/test/timeout.md +0 -15
- package/docs/guides/test/todo-tests.md +0 -67
- package/docs/guides/test/update-snapshots.md +0 -46
- package/docs/guides/test/watch-mode.md +0 -19
- package/docs/guides/util/base64.md +0 -15
- package/docs/guides/util/deep-equals.md +0 -39
- package/docs/guides/util/deflate.md +0 -18
- package/docs/guides/util/detect-bun.md +0 -23
- package/docs/guides/util/entrypoint.md +0 -17
- package/docs/guides/util/escape-html.md +0 -22
- package/docs/guides/util/file-url-to-path.md +0 -14
- package/docs/guides/util/gzip.md +0 -18
- package/docs/guides/util/hash-a-password.md +0 -54
- package/docs/guides/util/import-meta-dir.md +0 -13
- package/docs/guides/util/import-meta-file.md +0 -13
- package/docs/guides/util/import-meta-path.md +0 -13
- package/docs/guides/util/javascript-uuid.md +0 -23
- package/docs/guides/util/main.md +0 -32
- package/docs/guides/util/path-to-file-url.md +0 -14
- package/docs/guides/util/sleep.md +0 -22
- package/docs/guides/util/version.md +0 -21
- package/docs/guides/util/which-path-to-executable-bin.md +0 -15
- package/docs/guides/websocket/compression.md +0 -31
- package/docs/guides/websocket/context.md +0 -77
- package/docs/guides/websocket/pubsub.md +0 -41
- package/docs/guides/websocket/simple.md +0 -33
- package/docs/guides/write-file/append.md +0 -52
- package/docs/guides/write-file/basic.md +0 -44
- package/docs/guides/write-file/blob.md +0 -28
- package/docs/guides/write-file/cat.md +0 -17
- package/docs/guides/write-file/file-cp.md +0 -16
- package/docs/guides/write-file/filesink.md +0 -52
- package/docs/guides/write-file/response.md +0 -17
- package/docs/guides/write-file/stdout.md +0 -21
- package/docs/guides/write-file/stream.md +0 -17
- package/docs/guides/write-file/unlink.md +0 -16
- package/docs/index.md +0 -77
- package/docs/install/audit.md +0 -57
- package/docs/install/cache.md +0 -59
- package/docs/install/catalogs.md +0 -298
- package/docs/install/index.md +0 -248
- package/docs/install/isolated.md +0 -197
- package/docs/install/lifecycle.md +0 -46
- package/docs/install/lockfile.md +0 -58
- package/docs/install/npmrc.md +0 -105
- package/docs/install/overrides.md +0 -73
- package/docs/install/patch.md +0 -59
- package/docs/install/registries.md +0 -30
- package/docs/install/security-scanner-api.md +0 -81
- package/docs/install/workspaces.md +0 -114
- package/docs/installation.md +0 -327
- package/docs/project/asan.md +0 -124
- package/docs/project/benchmarking.md +0 -203
- package/docs/project/bindgen.md +0 -225
- package/docs/project/building-windows.md +0 -162
- package/docs/project/contributing.md +0 -347
- 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/autoimport.md +0 -94
- package/docs/runtime/bun-apis.md +0 -207
- package/docs/runtime/bunfig.md +0 -772
- package/docs/runtime/debugger.md +0 -325
- package/docs/runtime/env.md +0 -253
- package/docs/runtime/hot.md +0 -145
- package/docs/runtime/index.md +0 -312
- package/docs/runtime/jsx.md +0 -385
- package/docs/runtime/loaders.md +0 -130
- package/docs/runtime/modules.md +0 -320
- package/docs/runtime/nodejs-apis.md +0 -463
- package/docs/runtime/plugins.md +0 -561
- package/docs/runtime/shell.md +0 -605
- 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/discovery.md +0 -85
- 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/reporters.md +0 -117
- package/docs/test/runtime-behavior.md +0 -95
- package/docs/test/snapshots.md +0 -68
- package/docs/test/time.md +0 -126
- package/docs/test/writing.md +0 -825
- package/docs/typescript.md +0 -53
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Start a cluster of HTTP servers
|
|
3
|
-
description: Run multiple HTTP servers concurrently via the "reusePort" option to share the same port across multiple processes
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
To run multiple HTTP servers concurrently, use the `reusePort` option in `Bun.serve()` which shares the same port across multiple processes.
|
|
7
|
-
|
|
8
|
-
This automatically load balances incoming requests across multiple instances of Bun.
|
|
9
|
-
|
|
10
|
-
```ts#server.ts
|
|
11
|
-
import { serve } from "bun";
|
|
12
|
-
|
|
13
|
-
const id = Math.random().toString(36).slice(2);
|
|
14
|
-
|
|
15
|
-
serve({
|
|
16
|
-
port: process.env.PORT || 8080,
|
|
17
|
-
development: false,
|
|
18
|
-
|
|
19
|
-
// Share the same port across multiple processes
|
|
20
|
-
// This is the important part!
|
|
21
|
-
reusePort: true,
|
|
22
|
-
|
|
23
|
-
async fetch(request) {
|
|
24
|
-
return new Response("Hello from Bun #" + id + "!\n");
|
|
25
|
-
}
|
|
26
|
-
});
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
---
|
|
30
|
-
|
|
31
|
-
{% callout %}
|
|
32
|
-
**Linux only** — Windows and macOS ignore the `reusePort` option. This is an operating system limitation with `SO_REUSEPORT`, unfortunately.
|
|
33
|
-
{% /callout %}
|
|
34
|
-
|
|
35
|
-
After saving the file, start your servers on the same port.
|
|
36
|
-
|
|
37
|
-
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
|
-
|
|
39
|
-
```ts#cluster.ts
|
|
40
|
-
import { spawn } from "bun";
|
|
41
|
-
|
|
42
|
-
const cpus = navigator.hardwareConcurrency; // Number of CPU cores
|
|
43
|
-
const buns = new Array(cpus);
|
|
44
|
-
|
|
45
|
-
for (let i = 0; i < cpus; i++) {
|
|
46
|
-
buns[i] = spawn({
|
|
47
|
-
cmd: ["bun", "./server.ts"],
|
|
48
|
-
stdout: "inherit",
|
|
49
|
-
stderr: "inherit",
|
|
50
|
-
stdin: "inherit",
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
function kill() {
|
|
55
|
-
for (const bun of buns) {
|
|
56
|
-
bun.kill();
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
process.on("SIGINT", kill);
|
|
61
|
-
process.on("exit", kill);
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
Bun has also implemented the `node:cluster` module, but this is a faster, simple, and limited alternative.
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: fetch with unix domain sockets in Bun
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
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
|
-
|
|
7
|
-
```ts
|
|
8
|
-
const unix = "/var/run/docker.sock";
|
|
9
|
-
|
|
10
|
-
const response = await fetch("http://localhost/info", { unix });
|
|
11
|
-
|
|
12
|
-
const body = await response.json();
|
|
13
|
-
console.log(body); // { ... }
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
---
|
|
17
|
-
|
|
18
|
-
The `unix` option is a string that specifies the local file path to a unix domain socket. The `fetch()` function will use the socket to send the request to the server instead of using a TCP network connection. `https` is also supported by using the `https://` protocol in the URL instead of `http://`.
|
|
19
|
-
|
|
20
|
-
To send a `POST` request to an API endpoint over a unix domain socket:
|
|
21
|
-
|
|
22
|
-
```ts
|
|
23
|
-
const response = await fetch("https://hostname/a/path", {
|
|
24
|
-
unix: "/var/run/path/to/unix.sock",
|
|
25
|
-
method: "POST",
|
|
26
|
-
body: JSON.stringify({ message: "Hello from Bun!" }),
|
|
27
|
-
headers: {
|
|
28
|
-
"Content-Type": "application/json",
|
|
29
|
-
},
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
const body = await response.json();
|
|
33
|
-
```
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Send an HTTP request using fetch
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
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
|
-
|
|
7
|
-
```ts
|
|
8
|
-
const response = await fetch("https://bun.com");
|
|
9
|
-
const html = await response.text(); // HTML string
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
To send a `POST` request to an API endpoint.
|
|
15
|
-
|
|
16
|
-
```ts
|
|
17
|
-
const response = await fetch("https://bun.com/api", {
|
|
18
|
-
method: "POST",
|
|
19
|
-
body: JSON.stringify({ message: "Hello from Bun!" }),
|
|
20
|
-
headers: { "Content-Type": "application/json" },
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
const body = await response.json();
|
|
24
|
-
```
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Upload files via HTTP using FormData
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
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
|
-
|
|
7
|
-
```ts#index.ts
|
|
8
|
-
const server = Bun.serve({
|
|
9
|
-
port: 4000,
|
|
10
|
-
async fetch(req) {
|
|
11
|
-
const url = new URL(req.url);
|
|
12
|
-
|
|
13
|
-
// return index.html for root path
|
|
14
|
-
if (url.pathname === "/")
|
|
15
|
-
return new Response(Bun.file("index.html"), {
|
|
16
|
-
headers: {
|
|
17
|
-
"Content-Type": "text/html",
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
|
|
21
|
-
return new Response("Not Found", { status: 404 });
|
|
22
|
-
},
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
console.log(`Listening on http://localhost:${server.port}`);
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
We can define our HTML form in another file, `index.html`.
|
|
31
|
-
|
|
32
|
-
```html#index.html
|
|
33
|
-
<!DOCTYPE html>
|
|
34
|
-
<html>
|
|
35
|
-
<head>
|
|
36
|
-
<meta charset="utf-8" />
|
|
37
|
-
<title>Form</title>
|
|
38
|
-
</head>
|
|
39
|
-
<body>
|
|
40
|
-
<form action="/action" method="post" enctype="multipart/form-data">
|
|
41
|
-
<input type="text" name="name" placeholder="Name" />
|
|
42
|
-
<input type="file" name="profilePicture" />
|
|
43
|
-
<input type="submit" value="Submit" />
|
|
44
|
-
</form>
|
|
45
|
-
</body>
|
|
46
|
-
</html>
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
At this point, we can run the server and visit [`localhost:4000`](http://localhost:4000) to see our form.
|
|
52
|
-
|
|
53
|
-
```bash
|
|
54
|
-
$ bun run index.ts
|
|
55
|
-
Listening on http://localhost:4000
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
---
|
|
59
|
-
|
|
60
|
-
Our form will send a `POST` request to the `/action` endpoint with the form data. Let's handle that request in our server.
|
|
61
|
-
|
|
62
|
-
First we use the [`.formData()`](https://developer.mozilla.org/en-US/docs/Web/API/Request/formData) method on the incoming `Request` to asynchronously parse its contents to a `FormData` instance. Then we can use the [`.get()`](https://developer.mozilla.org/en-US/docs/Web/API/FormData/get) method to extract the value of the `name` and `profilePicture` fields. Here `name` corresponds to a `string` and `profilePicture` is a `Blob`.
|
|
63
|
-
|
|
64
|
-
Finally, we write the `Blob` to disk using [`Bun.write()`](https://bun.com/docs/api/file-io#writing-files-bun-write).
|
|
65
|
-
|
|
66
|
-
```ts-diff#index.ts
|
|
67
|
-
const server = Bun.serve({
|
|
68
|
-
port: 4000,
|
|
69
|
-
async fetch(req) {
|
|
70
|
-
const url = new URL(req.url);
|
|
71
|
-
|
|
72
|
-
// return index.html for root path
|
|
73
|
-
if (url.pathname === "/")
|
|
74
|
-
return new Response(Bun.file("index.html"), {
|
|
75
|
-
headers: {
|
|
76
|
-
"Content-Type": "text/html",
|
|
77
|
-
},
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
+ // parse formdata at /action
|
|
81
|
-
+ if (url.pathname === '/action') {
|
|
82
|
-
+ const formdata = await req.formData();
|
|
83
|
-
+ const name = formdata.get('name');
|
|
84
|
-
+ const profilePicture = formdata.get('profilePicture');
|
|
85
|
-
+ if (!profilePicture) throw new Error('Must upload a profile picture.');
|
|
86
|
-
+ // write profilePicture to disk
|
|
87
|
-
+ await Bun.write('profilePicture.png', profilePicture);
|
|
88
|
-
+ return new Response("Success");
|
|
89
|
-
+ }
|
|
90
|
-
|
|
91
|
-
return new Response("Not Found", { status: 404 });
|
|
92
|
-
},
|
|
93
|
-
});
|
|
94
|
-
```
|
package/docs/guides/http/hot.md
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Hot reload an HTTP server
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
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
|
-
|
|
7
|
-
```sh
|
|
8
|
-
$ bun --hot run index.ts
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
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
|
-
|
|
15
|
-
{% callout %}
|
|
16
|
-
Note that this doesn't reload the page on your browser.
|
|
17
|
-
{% /callout %}
|
|
18
|
-
|
|
19
|
-
```ts
|
|
20
|
-
Bun.serve({
|
|
21
|
-
port: 3000,
|
|
22
|
-
fetch(req) {
|
|
23
|
-
return new Response("Hello world");
|
|
24
|
-
},
|
|
25
|
-
});
|
|
26
|
-
```
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Proxy HTTP requests using fetch()
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
In Bun, `fetch` supports sending requests through an HTTP or HTTPS proxy. This is useful on corporate networks or when you need to ensure a request is sent through a specific IP address.
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
await fetch("https://example.com", {
|
|
9
|
-
// The URL of the proxy server
|
|
10
|
-
proxy: "https://username:password@proxy.example.com:8080",
|
|
11
|
-
});
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
The `proxy` option is a URL string that specifies the proxy server. It can include the username and password if the proxy requires authentication. It can be `http://` or `https://`.
|
|
17
|
-
|
|
18
|
-
---
|
|
19
|
-
|
|
20
|
-
You can also set the `$HTTP_PROXY` or `$HTTPS_PROXY` environment variable to the proxy URL. This is useful when you want to use the same proxy for all requests.
|
|
21
|
-
|
|
22
|
-
```sh
|
|
23
|
-
HTTPS_PROXY=https://username:password@proxy.example.com:8080 bun run index.ts
|
|
24
|
-
```
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Common HTTP server usage
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
This starts an HTTP server listening on port `3000`. It demonstrates basic routing with a number of common responses and also handles POST data from standard forms or as JSON.
|
|
6
|
-
|
|
7
|
-
See [`Bun.serve`](https://bun.com/docs/api/http) for details.
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
const server = Bun.serve({
|
|
11
|
-
async fetch(req) {
|
|
12
|
-
const path = new URL(req.url).pathname;
|
|
13
|
-
|
|
14
|
-
// respond with text/html
|
|
15
|
-
if (path === "/") return new Response("Welcome to Bun!");
|
|
16
|
-
|
|
17
|
-
// redirect
|
|
18
|
-
if (path === "/abc") return Response.redirect("/source", 301);
|
|
19
|
-
|
|
20
|
-
// send back a file (in this case, *this* file)
|
|
21
|
-
if (path === "/source") return new Response(Bun.file(import.meta.path));
|
|
22
|
-
|
|
23
|
-
// respond with JSON
|
|
24
|
-
if (path === "/api") return Response.json({ some: "buns", for: "you" });
|
|
25
|
-
|
|
26
|
-
// receive JSON data to a POST request
|
|
27
|
-
if (req.method === "POST" && path === "/api/post") {
|
|
28
|
-
const data = await req.json();
|
|
29
|
-
console.log("Received JSON:", data);
|
|
30
|
-
return Response.json({ success: true, data });
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
// receive POST data from a form
|
|
34
|
-
if (req.method === "POST" && path === "/form") {
|
|
35
|
-
const data = await req.formData();
|
|
36
|
-
console.log(data.get("someField"));
|
|
37
|
-
return new Response("Success");
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
// 404s
|
|
41
|
-
return new Response("Page not found", { status: 404 });
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
|
|
45
|
-
console.log(`Listening on ${server.url}`);
|
|
46
|
-
```
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Write a simple HTTP server
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
This starts an HTTP server listening on port `3000`. It responds to all requests with a `Response` with status `200` and body `"Welcome to Bun!"`.
|
|
6
|
-
|
|
7
|
-
See [`Bun.serve`](https://bun.com/docs/api/http) for details.
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
const server = Bun.serve({
|
|
11
|
-
port: 3000,
|
|
12
|
-
fetch(request) {
|
|
13
|
-
return new Response("Welcome to Bun!");
|
|
14
|
-
},
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
console.log(`Listening on ${server.url}`);
|
|
18
|
-
```
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Stream a file as an HTTP Response
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
This snippet reads a file from disk using [`Bun.file()`](https://bun.com/docs/api/file-io#reading-files-bun-file). This returns a `BunFile` instance, which can be passed directly into the `new Response` constructor.
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
const path = "/path/to/file.txt";
|
|
9
|
-
const file = Bun.file(path);
|
|
10
|
-
const resp = new Response(file);
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
---
|
|
14
|
-
|
|
15
|
-
The `Content-Type` is read from the file and automatically set on the `Response`.
|
|
16
|
-
|
|
17
|
-
```ts
|
|
18
|
-
new Response(Bun.file("./package.json")).headers.get("Content-Type");
|
|
19
|
-
// => application/json;charset=utf-8
|
|
20
|
-
|
|
21
|
-
new Response(Bun.file("./test.txt")).headers.get("Content-Type");
|
|
22
|
-
// => text/plain;charset=utf-8
|
|
23
|
-
|
|
24
|
-
new Response(Bun.file("./index.tsx")).headers.get("Content-Type");
|
|
25
|
-
// => text/javascript;charset=utf-8
|
|
26
|
-
|
|
27
|
-
new Response(Bun.file("./img.png")).headers.get("Content-Type");
|
|
28
|
-
// => image/png
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
Putting it all together with [`Bun.serve()`](https://bun.com/docs/api/http#bun-serve).
|
|
34
|
-
|
|
35
|
-
```ts
|
|
36
|
-
// static file server
|
|
37
|
-
Bun.serve({
|
|
38
|
-
async fetch(req) {
|
|
39
|
-
const path = new URL(req.url).pathname;
|
|
40
|
-
const file = Bun.file(path);
|
|
41
|
-
return new Response(file);
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
See [Docs > API > File I/O](https://bun.com/docs/api/file-io#writing-files-bun-write) for complete documentation of `Bun.write()`.
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Streaming HTTP Server with Async Iterators
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
In Bun, [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) objects can accept an async generator function as their body. This allows you to stream data to the client as it becomes available, rather than waiting for the entire response to be ready.
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
Bun.serve({
|
|
9
|
-
port: 3000,
|
|
10
|
-
fetch(req) {
|
|
11
|
-
return new Response(
|
|
12
|
-
// An async generator function
|
|
13
|
-
async function* () {
|
|
14
|
-
yield "Hello, ";
|
|
15
|
-
await Bun.sleep(100);
|
|
16
|
-
yield "world!";
|
|
17
|
-
|
|
18
|
-
// you can also yield a TypedArray or Buffer
|
|
19
|
-
yield new Uint8Array(["\n".charCodeAt(0)]);
|
|
20
|
-
},
|
|
21
|
-
{ headers: { "Content-Type": "text/plain" } },
|
|
22
|
-
);
|
|
23
|
-
},
|
|
24
|
-
});
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
---
|
|
28
|
-
|
|
29
|
-
You can pass any async iterable directly to `Response`:
|
|
30
|
-
|
|
31
|
-
```ts
|
|
32
|
-
Bun.serve({
|
|
33
|
-
port: 3000,
|
|
34
|
-
fetch(req) {
|
|
35
|
-
return new Response(
|
|
36
|
-
{
|
|
37
|
-
[Symbol.asyncIterator]: async function* () {
|
|
38
|
-
yield "Hello, ";
|
|
39
|
-
await Bun.sleep(100);
|
|
40
|
-
yield "world!";
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
{ headers: { "Content-Type": "text/plain" } },
|
|
44
|
-
);
|
|
45
|
-
},
|
|
46
|
-
});
|
|
47
|
-
```
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Streaming HTTP Server with Node.js Streams
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
In Bun, [`Response`](https://developer.mozilla.org/en-US/docs/Web/API/Response) objects can accept a Node.js [`Readable`](https://nodejs.org/api/stream.html#stream_readable_streams).
|
|
6
|
-
|
|
7
|
-
This works because Bun's `Response` object allows any async iterable as its body. Node.js streams are async iterables, so you can pass them directly to `Response`.
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
import { Readable } from "stream";
|
|
11
|
-
import { serve } from "bun";
|
|
12
|
-
serve({
|
|
13
|
-
port: 3000,
|
|
14
|
-
fetch(req) {
|
|
15
|
-
return new Response(Readable.from(["Hello, ", "world!"]), {
|
|
16
|
-
headers: { "Content-Type": "text/plain" },
|
|
17
|
-
});
|
|
18
|
-
},
|
|
19
|
-
});
|
|
20
|
-
```
|
package/docs/guides/http/tls.md
DELETED
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Configure TLS on an HTTP server
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
Set the `tls` key to configure TLS. Both `key` and `cert` are required. The `key` should be the contents of your private key; `cert` should be the contents of your issued certificate. Use [`Bun.file()`](https://bun.com/docs/api/file-io#reading-files-bun-file) to read the contents.
|
|
6
|
-
|
|
7
|
-
```ts
|
|
8
|
-
const server = Bun.serve({
|
|
9
|
-
fetch: request => new Response("Welcome to Bun!"),
|
|
10
|
-
tls: {
|
|
11
|
-
cert: Bun.file("cert.pem"),
|
|
12
|
-
key: Bun.file("key.pem"),
|
|
13
|
-
},
|
|
14
|
-
});
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
By default Bun trusts the default Mozilla-curated list of well-known root CAs. To override this list, pass an array of certificates as `ca`.
|
|
20
|
-
|
|
21
|
-
```ts
|
|
22
|
-
const server = Bun.serve({
|
|
23
|
-
fetch: request => new Response("Welcome to Bun!"),
|
|
24
|
-
tls: {
|
|
25
|
-
cert: Bun.file("cert.pem"),
|
|
26
|
-
key: Bun.file("key.pem"),
|
|
27
|
-
ca: [Bun.file("ca1.pem"), Bun.file("ca2.pem")],
|
|
28
|
-
},
|
|
29
|
-
});
|
|
30
|
-
```
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Add a development dependency
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
To add an npm package as a development dependency, use `bun add --development`.
|
|
6
|
-
|
|
7
|
-
```sh
|
|
8
|
-
$ bun add zod --dev
|
|
9
|
-
$ bun add zod -d # shorthand
|
|
10
|
-
```
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
This will add the package to `devDependencies` in `package.json`.
|
|
15
|
-
|
|
16
|
-
```json-diff
|
|
17
|
-
{
|
|
18
|
-
"devDependencies": {
|
|
19
|
-
+ "zod": "^3.0.0"
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
```
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Add a Git dependency
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
Bun supports directly adding GitHub repositories as dependencies of your project.
|
|
6
|
-
|
|
7
|
-
```sh
|
|
8
|
-
$ bun add github:lodash/lodash
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
This will add the following line to your `package.json`:
|
|
14
|
-
|
|
15
|
-
```json-diff#package.json
|
|
16
|
-
{
|
|
17
|
-
"dependencies": {
|
|
18
|
-
+ "lodash": "github:lodash/lodash"
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
Bun supports a number of protocols for specifying Git dependencies.
|
|
26
|
-
|
|
27
|
-
```sh
|
|
28
|
-
$ bun add git+https://github.com/lodash/lodash.git
|
|
29
|
-
$ bun add git+ssh://github.com/lodash/lodash.git#4.17.21
|
|
30
|
-
$ bun add git@github.com:lodash/lodash.git
|
|
31
|
-
$ bun add github:colinhacks/zod
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
---
|
|
35
|
-
|
|
36
|
-
See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Add an optional dependency
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
To add an npm package as an optional dependency, use the `--optional` flag.
|
|
6
|
-
|
|
7
|
-
```sh
|
|
8
|
-
$ bun add zod --optional
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
This will add the package to `optionalDependencies` in `package.json`.
|
|
14
|
-
|
|
15
|
-
```json-diff
|
|
16
|
-
{
|
|
17
|
-
"optionalDependencies": {
|
|
18
|
-
+ "zod": "^3.0.0"
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Add a peer dependency
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
To add an npm package as a peer dependency, use the `--peer` flag.
|
|
6
|
-
|
|
7
|
-
```sh
|
|
8
|
-
$ bun add @types/bun --peer
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
This will add the package to `peerDependencies` in `package.json`.
|
|
14
|
-
|
|
15
|
-
```json-diff
|
|
16
|
-
{
|
|
17
|
-
"peerDependencies": {
|
|
18
|
-
+ "@types/bun": "^1.3.2-canary.20251104T140728"
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
Running `bun install` will install peer dependencies by default, unless marked optional in `peerDependenciesMeta`.
|
|
26
|
-
|
|
27
|
-
```json-diff
|
|
28
|
-
{
|
|
29
|
-
"peerDependencies": {
|
|
30
|
-
"@types/bun": "^1.3.2-canary.20251104T140728"
|
|
31
|
-
},
|
|
32
|
-
"peerDependenciesMeta": {
|
|
33
|
-
+ "@types/bun": {
|
|
34
|
-
+ "optional": true
|
|
35
|
-
+ }
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
---
|
|
42
|
-
|
|
43
|
-
See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: Add a tarball dependency
|
|
3
|
-
---
|
|
4
|
-
|
|
5
|
-
Bun's package manager can install any publicly available tarball URL as a dependency of your project.
|
|
6
|
-
|
|
7
|
-
```sh
|
|
8
|
-
$ bun add zod@https://registry.npmjs.org/zod/-/zod-3.21.4.tgz
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
Running this command will download, extract, and install the tarball to your project's `node_modules` directory. It will also add the following line to your `package.json`:
|
|
14
|
-
|
|
15
|
-
```json-diff#package.json
|
|
16
|
-
{
|
|
17
|
-
"dependencies": {
|
|
18
|
-
+ "zod": "https://registry.npmjs.org/zod/-/zod-3.21.4.tgz"
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
---
|
|
24
|
-
|
|
25
|
-
The package `"zod"` can now be imported as usual.
|
|
26
|
-
|
|
27
|
-
```ts
|
|
28
|
-
import { z } from "zod";
|
|
29
|
-
```
|
|
30
|
-
|
|
31
|
-
---
|
|
32
|
-
|
|
33
|
-
See [Docs > Package manager](https://bun.com/docs/cli/install) for complete documentation of Bun's package manager.
|