bun-types 1.3.2-canary.20251106T140813 → 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/bundler/bytecode.mdx +465 -0
- package/docs/bundler/css.mdx +1024 -0
- package/docs/bundler/esbuild.mdx +253 -0
- package/docs/bundler/executables.mdx +535 -0
- package/docs/bundler/fullstack.mdx +1064 -0
- package/docs/bundler/hot-reloading.mdx +229 -0
- package/docs/bundler/html-static.mdx +386 -0
- package/docs/bundler/index.mdx +1499 -0
- package/docs/bundler/loaders.mdx +356 -0
- package/docs/bundler/macros.mdx +328 -0
- 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.mdx +29 -0
- package/docs/guides/binary/arraybuffer-to-blob.mdx +26 -0
- package/docs/guides/binary/arraybuffer-to-buffer.mdx +27 -0
- package/docs/guides/binary/arraybuffer-to-string.mdx +17 -0
- package/docs/guides/binary/arraybuffer-to-typedarray.mdx +41 -0
- package/docs/guides/binary/blob-to-arraybuffer.mdx +16 -0
- package/docs/guides/binary/blob-to-dataview.mdx +16 -0
- package/docs/guides/binary/blob-to-stream.mdx +16 -0
- package/docs/guides/binary/blob-to-string.mdx +17 -0
- package/docs/guides/binary/blob-to-typedarray.mdx +16 -0
- package/docs/guides/binary/buffer-to-arraybuffer.mdx +16 -0
- package/docs/guides/binary/buffer-to-blob.mdx +16 -0
- package/docs/guides/binary/buffer-to-readablestream.mdx +43 -0
- package/docs/guides/binary/buffer-to-string.mdx +27 -0
- package/docs/guides/binary/buffer-to-typedarray.mdx +16 -0
- package/docs/guides/binary/dataview-to-string.mdx +17 -0
- package/docs/guides/binary/typedarray-to-arraybuffer.mdx +27 -0
- package/docs/guides/binary/typedarray-to-blob.mdx +18 -0
- package/docs/guides/binary/typedarray-to-buffer.mdx +16 -0
- package/docs/guides/binary/typedarray-to-dataview.mdx +16 -0
- package/docs/guides/binary/typedarray-to-readablestream.mdx +43 -0
- package/docs/guides/binary/typedarray-to-string.mdx +18 -0
- 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.mdx +145 -0
- package/docs/guides/deployment/render.mdx +82 -0
- package/docs/guides/deployment/vercel.mdx +99 -0
- package/docs/guides/ecosystem/astro.mdx +82 -0
- package/docs/guides/ecosystem/discordjs.mdx +80 -0
- package/docs/guides/ecosystem/docker.mdx +151 -0
- package/docs/guides/ecosystem/drizzle.mdx +195 -0
- package/docs/guides/ecosystem/edgedb.mdx +257 -0
- package/docs/guides/ecosystem/elysia.mdx +31 -0
- package/docs/guides/ecosystem/express.mdx +43 -0
- package/docs/guides/ecosystem/hono.mdx +47 -0
- package/docs/guides/ecosystem/mongoose.mdx +92 -0
- package/docs/guides/ecosystem/neon-drizzle.mdx +234 -0
- package/docs/guides/ecosystem/neon-serverless-postgres.mdx +60 -0
- package/docs/guides/ecosystem/nextjs.mdx +57 -0
- package/docs/guides/ecosystem/nuxt.mdx +90 -0
- package/docs/guides/ecosystem/pm2.mdx +55 -0
- package/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
- package/docs/guides/ecosystem/prisma.mdx +164 -0
- package/docs/guides/ecosystem/qwik.mdx +114 -0
- package/docs/guides/ecosystem/react.mdx +52 -0
- package/docs/guides/ecosystem/remix.mdx +97 -0
- package/docs/guides/ecosystem/sentry.mdx +54 -0
- package/docs/guides/ecosystem/solidstart.mdx +66 -0
- package/docs/guides/ecosystem/ssr-react.mdx +49 -0
- package/docs/guides/ecosystem/stric.mdx +54 -0
- package/docs/guides/ecosystem/sveltekit.mdx +138 -0
- package/docs/guides/ecosystem/systemd.mdx +114 -0
- package/docs/guides/ecosystem/upstash.mdx +87 -0
- package/docs/guides/ecosystem/vite.mdx +77 -0
- package/docs/guides/html-rewriter/extract-links.mdx +72 -0
- package/docs/guides/html-rewriter/extract-social-meta.mdx +97 -0
- package/docs/guides/http/cluster.mdx +69 -0
- package/docs/guides/http/fetch-unix.mdx +35 -0
- package/docs/guides/http/fetch.mdx +26 -0
- package/docs/guides/http/file-uploads.mdx +97 -0
- package/docs/guides/http/hot.mdx +28 -0
- package/docs/guides/http/proxy.mdx +26 -0
- package/docs/guides/http/server.mdx +48 -0
- package/docs/guides/http/simple.mdx +20 -0
- package/docs/guides/http/stream-file.mdx +50 -0
- package/docs/guides/http/stream-iterator.mdx +49 -0
- package/docs/guides/http/stream-node-streams-in-bun.mdx +22 -0
- package/docs/guides/http/tls.mdx +32 -0
- package/docs/guides/index.mdx +10 -0
- package/docs/guides/install/add-dev.mdx +28 -0
- package/docs/guides/install/add-git.mdx +38 -0
- package/docs/guides/install/add-optional.mdx +27 -0
- package/docs/guides/install/add-peer.mdx +45 -0
- package/docs/guides/install/add-tarball.mdx +35 -0
- package/docs/guides/install/add.mdx +44 -0
- package/docs/guides/install/azure-artifacts.mdx +76 -0
- package/docs/guides/install/cicd.mdx +43 -0
- package/docs/guides/install/custom-registry.mdx +32 -0
- package/docs/guides/install/from-npm-install-to-bun-install.mdx +230 -0
- package/docs/guides/install/git-diff-bun-lockfile.mdx +47 -0
- package/docs/guides/install/jfrog-artifactory.mdx +28 -0
- package/docs/guides/install/npm-alias.mdx +25 -0
- package/docs/guides/install/registry-scope.mdx +40 -0
- package/docs/guides/install/trusted.mdx +50 -0
- package/docs/guides/install/workspaces.mdx +70 -0
- package/docs/guides/install/yarnlock.mdx +50 -0
- package/docs/guides/process/argv.mdx +66 -0
- package/docs/guides/process/ctrl-c.mdx +18 -0
- package/docs/guides/process/ipc.mdx +69 -0
- package/docs/guides/process/nanoseconds.mdx +15 -0
- package/docs/guides/process/os-signals.mdx +41 -0
- package/docs/guides/process/spawn-stderr.mdx +34 -0
- package/docs/guides/process/spawn-stdout.mdx +28 -0
- package/docs/guides/process/spawn.mdx +43 -0
- package/docs/guides/process/stdin.mdx +62 -0
- package/docs/guides/read-file/arraybuffer.mdx +30 -0
- package/docs/guides/read-file/buffer.mdx +21 -0
- package/docs/guides/read-file/exists.mdx +18 -0
- package/docs/guides/read-file/json.mdx +19 -0
- package/docs/guides/read-file/mime.mdx +22 -0
- package/docs/guides/read-file/stream.mdx +28 -0
- package/docs/guides/read-file/string.mdx +24 -0
- package/docs/guides/read-file/uint8array.mdx +23 -0
- package/docs/guides/read-file/watch.mdx +66 -0
- package/docs/guides/runtime/build-time-constants.mdx +295 -0
- package/docs/guides/runtime/cicd.mdx +45 -0
- package/docs/guides/runtime/codesign-macos-executable.mdx +61 -0
- package/docs/guides/runtime/define-constant.mdx +149 -0
- package/docs/guides/runtime/delete-directory.mdx +39 -0
- package/docs/guides/runtime/delete-file.mdx +21 -0
- package/docs/guides/runtime/heap-snapshot.mdx +28 -0
- package/docs/guides/runtime/import-html.mdx +17 -0
- package/docs/guides/runtime/import-json.mdx +46 -0
- package/docs/guides/runtime/import-toml.mdx +32 -0
- package/docs/guides/runtime/import-yaml.mdx +104 -0
- package/docs/guides/runtime/read-env.mdx +37 -0
- package/docs/guides/runtime/set-env.mdx +51 -0
- package/docs/guides/runtime/shell.mdx +42 -0
- package/docs/guides/runtime/timezone.mdx +38 -0
- package/docs/guides/runtime/tsconfig-paths.mdx +31 -0
- package/docs/guides/runtime/typescript.mdx +51 -0
- package/docs/guides/runtime/vscode-debugger.mdx +48 -0
- package/docs/guides/runtime/web-debugger.mdx +103 -0
- package/docs/guides/streams/node-readable-to-arraybuffer.mdx +13 -0
- package/docs/guides/streams/node-readable-to-blob.mdx +13 -0
- package/docs/guides/streams/node-readable-to-json.mdx +14 -0
- package/docs/guides/streams/node-readable-to-string.mdx +14 -0
- package/docs/guides/streams/node-readable-to-uint8array.mdx +13 -0
- package/docs/guides/streams/to-array.mdx +16 -0
- package/docs/guides/streams/to-arraybuffer.mdx +16 -0
- package/docs/guides/streams/to-blob.mdx +16 -0
- package/docs/guides/streams/to-buffer.mdx +17 -0
- package/docs/guides/streams/to-json.mdx +16 -0
- package/docs/guides/streams/to-string.mdx +16 -0
- package/docs/guides/streams/to-typedarray.mdx +24 -0
- package/docs/guides/test/bail.mdx +24 -0
- package/docs/guides/test/coverage-threshold.mdx +67 -0
- package/docs/guides/test/coverage.mdx +49 -0
- package/docs/guides/test/happy-dom.mdx +73 -0
- package/docs/guides/test/migrate-from-jest.mdx +125 -0
- package/docs/guides/test/mock-clock.mdx +50 -0
- package/docs/guides/test/mock-functions.mdx +70 -0
- package/docs/guides/test/rerun-each.mdx +16 -0
- package/docs/guides/test/run-tests.mdx +116 -0
- package/docs/guides/test/skip-tests.mdx +43 -0
- package/docs/guides/test/snapshot.mdx +102 -0
- package/docs/guides/test/spy-on.mdx +49 -0
- package/docs/guides/test/svelte-test.mdx +113 -0
- package/docs/guides/test/testing-library.mdx +93 -0
- package/docs/guides/test/timeout.mdx +17 -0
- package/docs/guides/test/todo-tests.mdx +74 -0
- package/docs/guides/test/update-snapshots.mdx +49 -0
- package/docs/guides/test/watch-mode.mdx +24 -0
- package/docs/guides/util/base64.mdx +17 -0
- package/docs/guides/util/deep-equals.mdx +41 -0
- package/docs/guides/util/deflate.mdx +20 -0
- package/docs/guides/util/detect-bun.mdx +25 -0
- package/docs/guides/util/entrypoint.mdx +19 -0
- package/docs/guides/util/escape-html.mdx +24 -0
- package/docs/guides/util/file-url-to-path.mdx +16 -0
- package/docs/guides/util/gzip.mdx +20 -0
- package/docs/guides/util/hash-a-password.mdx +56 -0
- package/docs/guides/util/import-meta-dir.mdx +15 -0
- package/docs/guides/util/import-meta-file.mdx +15 -0
- package/docs/guides/util/import-meta-path.mdx +15 -0
- package/docs/guides/util/javascript-uuid.mdx +25 -0
- package/docs/guides/util/main.mdx +43 -0
- package/docs/guides/util/path-to-file-url.mdx +16 -0
- package/docs/guides/util/sleep.mdx +24 -0
- package/docs/guides/util/version.mdx +23 -0
- package/docs/guides/util/which-path-to-executable-bin.mdx +17 -0
- package/docs/guides/websocket/compression.mdx +33 -0
- package/docs/guides/websocket/context.mdx +74 -0
- package/docs/guides/websocket/pubsub.mdx +40 -0
- package/docs/guides/websocket/simple.mdx +35 -0
- package/docs/guides/write-file/append.mdx +54 -0
- package/docs/guides/write-file/basic.mdx +46 -0
- package/docs/guides/write-file/blob.mdx +30 -0
- package/docs/guides/write-file/cat.mdx +19 -0
- package/docs/guides/write-file/file-cp.mdx +18 -0
- package/docs/guides/write-file/filesink.mdx +54 -0
- package/docs/guides/write-file/response.mdx +19 -0
- package/docs/guides/write-file/stdout.mdx +23 -0
- package/docs/guides/write-file/stream.mdx +19 -0
- package/docs/guides/write-file/unlink.mdx +18 -0
- package/docs/index.mdx +133 -0
- package/docs/installation.mdx +365 -0
- package/docs/pm/bunx.mdx +83 -0
- package/docs/pm/catalogs.mdx +292 -0
- package/docs/pm/cli/add.mdx +179 -0
- package/docs/pm/cli/audit.mdx +60 -0
- package/docs/pm/cli/install.mdx +471 -0
- package/docs/pm/cli/link.mdx +48 -0
- package/docs/pm/cli/outdated.mdx +197 -0
- package/docs/pm/cli/patch.mdx +69 -0
- package/docs/pm/cli/pm.mdx +319 -0
- package/docs/pm/cli/publish.mdx +123 -0
- package/docs/pm/cli/remove.mdx +16 -0
- package/docs/pm/cli/update.mdx +140 -0
- package/docs/pm/cli/why.mdx +84 -0
- package/docs/pm/filter.mdx +102 -0
- package/docs/pm/global-cache.mdx +72 -0
- package/docs/pm/isolated-installs.mdx +205 -0
- package/docs/pm/lifecycle.mdx +57 -0
- package/docs/pm/lockfile.mdx +64 -0
- package/docs/pm/npmrc.mdx +111 -0
- package/docs/pm/overrides.mdx +83 -0
- package/docs/pm/scopes-registries.mdx +35 -0
- package/docs/pm/security-scanner-api.mdx +95 -0
- package/docs/pm/workspaces.mdx +109 -0
- package/docs/project/benchmarking.mdx +218 -0
- package/docs/project/bindgen.mdx +223 -0
- package/docs/project/building-windows.mdx +133 -0
- package/docs/project/contributing.mdx +343 -0
- 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/auto-install.mdx +97 -0
- package/docs/runtime/binary-data.mdx +846 -0
- package/docs/runtime/bun-apis.mdx +59 -0
- package/docs/runtime/bunfig.mdx +642 -0
- package/docs/runtime/c-compiler.mdx +204 -0
- package/docs/runtime/child-process.mdx +532 -0
- package/docs/runtime/color.mdx +267 -0
- package/docs/runtime/console.mdx +67 -0
- package/docs/runtime/cookies.mdx +454 -0
- package/docs/runtime/debugger.mdx +335 -0
- package/docs/runtime/environment-variables.mdx +214 -0
- package/docs/runtime/ffi.mdx +565 -0
- package/docs/runtime/file-io.mdx +306 -0
- package/docs/runtime/file-system-router.mdx +118 -0
- package/docs/runtime/file-types.mdx +354 -0
- package/docs/runtime/glob.mdx +181 -0
- package/docs/runtime/globals.mdx +72 -0
- package/docs/runtime/hashing.mdx +315 -0
- package/docs/runtime/html-rewriter.mdx +340 -0
- 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/runtime/http/websockets.mdx +404 -0
- package/docs/runtime/index.mdx +223 -0
- package/docs/runtime/jsx.mdx +115 -0
- package/docs/runtime/module-resolution.mdx +342 -0
- package/docs/runtime/networking/dns.mdx +111 -0
- package/docs/runtime/networking/fetch.mdx +468 -0
- package/docs/runtime/networking/tcp.mdx +239 -0
- package/docs/runtime/networking/udp.mdx +129 -0
- package/docs/runtime/node-api.mdx +19 -0
- package/docs/runtime/nodejs-compat.mdx +468 -0
- package/docs/runtime/plugins.mdx +405 -0
- package/docs/runtime/redis.mdx +582 -0
- package/docs/runtime/s3.mdx +863 -0
- package/docs/runtime/secrets.mdx +336 -0
- package/docs/runtime/semver.mdx +57 -0
- package/docs/runtime/shell.mdx +637 -0
- package/docs/runtime/sql.mdx +1404 -0
- package/docs/runtime/sqlite.mdx +699 -0
- package/docs/runtime/streams.mdx +232 -0
- package/docs/runtime/templating/create.mdx +269 -0
- package/docs/runtime/templating/init.mdx +58 -0
- package/docs/runtime/transpiler.mdx +288 -0
- package/docs/runtime/typescript.mdx +58 -0
- package/docs/runtime/utils.mdx +922 -0
- package/docs/runtime/watch-mode.mdx +161 -0
- package/docs/runtime/web-apis.mdx +29 -0
- package/docs/runtime/workers.mdx +328 -0
- package/docs/runtime/yaml.mdx +469 -0
- 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/dates-times.mdx +129 -0
- package/docs/test/discovery.mdx +90 -0
- package/docs/test/dom.mdx +226 -0
- package/docs/test/index.mdx +380 -0
- package/docs/test/lifecycle.mdx +348 -0
- package/docs/test/mocks.mdx +637 -0
- package/docs/test/reporters.mdx +117 -0
- 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
|
@@ -0,0 +1,469 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: YAML
|
|
3
|
+
description: Use Bun's built-in support for YAML files through both runtime APIs and bundler integration
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
In Bun, YAML is a first-class citizen alongside JSON and TOML. You can:
|
|
7
|
+
|
|
8
|
+
- Parse YAML strings with `Bun.YAML.parse`
|
|
9
|
+
- `import` & `require` YAML files as modules at runtime (including hot reloading & watch mode support)
|
|
10
|
+
- `import` & `require` YAML files in frontend apps via bun's bundler
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Conformance
|
|
15
|
+
|
|
16
|
+
Bun's YAML parser currently passes over 90% of the official YAML test suite. While we're actively working on reaching 100% conformance, the current implementation covers the vast majority of real-world use cases. The parser is written in Zig for optimal performance and is continuously being improved.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Runtime API
|
|
21
|
+
|
|
22
|
+
### `Bun.YAML.parse()`
|
|
23
|
+
|
|
24
|
+
Parse a YAML string into a JavaScript object.
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
import { YAML } from "bun";
|
|
28
|
+
const text = `
|
|
29
|
+
name: John Doe
|
|
30
|
+
age: 30
|
|
31
|
+
email: john@example.com
|
|
32
|
+
hobbies:
|
|
33
|
+
- reading
|
|
34
|
+
- coding
|
|
35
|
+
- hiking
|
|
36
|
+
`;
|
|
37
|
+
|
|
38
|
+
const data = YAML.parse(text);
|
|
39
|
+
console.log(data);
|
|
40
|
+
// {
|
|
41
|
+
// name: "John Doe",
|
|
42
|
+
// age: 30,
|
|
43
|
+
// email: "john@example.com",
|
|
44
|
+
// hobbies: ["reading", "coding", "hiking"]
|
|
45
|
+
// }
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
#### Multi-document YAML
|
|
49
|
+
|
|
50
|
+
When parsing YAML with multiple documents (separated by `---`), `Bun.YAML.parse()` returns an array:
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
const multiDoc = `
|
|
54
|
+
---
|
|
55
|
+
name: Document 1
|
|
56
|
+
---
|
|
57
|
+
name: Document 2
|
|
58
|
+
---
|
|
59
|
+
name: Document 3
|
|
60
|
+
`;
|
|
61
|
+
|
|
62
|
+
const docs = Bun.YAML.parse(multiDoc);
|
|
63
|
+
console.log(docs);
|
|
64
|
+
// [
|
|
65
|
+
// { name: "Document 1" },
|
|
66
|
+
// { name: "Document 2" },
|
|
67
|
+
// { name: "Document 3" }
|
|
68
|
+
// ]
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
#### Supported YAML Features
|
|
72
|
+
|
|
73
|
+
Bun's YAML parser supports the full YAML 1.2 specification, including:
|
|
74
|
+
|
|
75
|
+
- **Scalars**: strings, numbers, booleans, null values
|
|
76
|
+
- **Collections**: sequences (arrays) and mappings (objects)
|
|
77
|
+
- **Anchors and Aliases**: reusable nodes with `&` and `*`
|
|
78
|
+
- **Tags**: type hints like `!!str`, `!!int`, `!!float`, `!!bool`, `!!null`
|
|
79
|
+
- **Multi-line strings**: literal (`|`) and folded (`>`) scalars
|
|
80
|
+
- **Comments**: using `#`
|
|
81
|
+
- **Directives**: `%YAML` and `%TAG`
|
|
82
|
+
|
|
83
|
+
```ts
|
|
84
|
+
const yaml = `
|
|
85
|
+
# Employee record
|
|
86
|
+
employee: &emp
|
|
87
|
+
name: Jane Smith
|
|
88
|
+
department: Engineering
|
|
89
|
+
skills:
|
|
90
|
+
- JavaScript
|
|
91
|
+
- TypeScript
|
|
92
|
+
- React
|
|
93
|
+
|
|
94
|
+
manager: *emp # Reference to employee
|
|
95
|
+
|
|
96
|
+
config: !!str 123 # Explicit string type
|
|
97
|
+
|
|
98
|
+
description: |
|
|
99
|
+
This is a multi-line
|
|
100
|
+
literal string that preserves
|
|
101
|
+
line breaks and spacing.
|
|
102
|
+
|
|
103
|
+
summary: >
|
|
104
|
+
This is a folded string
|
|
105
|
+
that joins lines with spaces
|
|
106
|
+
unless there are blank lines.
|
|
107
|
+
`;
|
|
108
|
+
|
|
109
|
+
const data = Bun.YAML.parse(yaml);
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
#### Error Handling
|
|
113
|
+
|
|
114
|
+
`Bun.YAML.parse()` throws a `SyntaxError` if the YAML is invalid:
|
|
115
|
+
|
|
116
|
+
```ts
|
|
117
|
+
try {
|
|
118
|
+
Bun.YAML.parse("invalid: yaml: content:");
|
|
119
|
+
} catch (error) {
|
|
120
|
+
console.error("Failed to parse YAML:", error.message);
|
|
121
|
+
}
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## Module Import
|
|
127
|
+
|
|
128
|
+
### ES Modules
|
|
129
|
+
|
|
130
|
+
You can import YAML files directly as ES modules. The YAML content is parsed and made available as both default and named exports:
|
|
131
|
+
|
|
132
|
+
```yaml config.yaml
|
|
133
|
+
database:
|
|
134
|
+
host: localhost
|
|
135
|
+
port: 5432
|
|
136
|
+
name: myapp
|
|
137
|
+
|
|
138
|
+
redis:
|
|
139
|
+
host: localhost
|
|
140
|
+
port: 6379
|
|
141
|
+
|
|
142
|
+
features:
|
|
143
|
+
auth: true
|
|
144
|
+
rateLimit: true
|
|
145
|
+
analytics: false
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
#### Default Import
|
|
149
|
+
|
|
150
|
+
```ts app.ts icon="/icons/typescript.svg"
|
|
151
|
+
import config from "./config.yaml";
|
|
152
|
+
|
|
153
|
+
console.log(config.database.host); // "localhost"
|
|
154
|
+
console.log(config.redis.port); // 6379
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
#### Named Imports
|
|
158
|
+
|
|
159
|
+
You can destructure top-level YAML properties as named imports:
|
|
160
|
+
|
|
161
|
+
```ts app.ts icon="/icons/typescript.svg"
|
|
162
|
+
import { database, redis, features } from "./config.yaml";
|
|
163
|
+
|
|
164
|
+
console.log(database.host); // "localhost"
|
|
165
|
+
console.log(redis.port); // 6379
|
|
166
|
+
console.log(features.auth); // true
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
Or combine both:
|
|
170
|
+
|
|
171
|
+
```ts app.ts icon="/icons/typescript.svg"
|
|
172
|
+
import config, { database, features } from "./config.yaml";
|
|
173
|
+
|
|
174
|
+
// Use the full config object
|
|
175
|
+
console.log(config);
|
|
176
|
+
|
|
177
|
+
// Or use specific parts
|
|
178
|
+
if (features.rateLimit) {
|
|
179
|
+
setupRateLimiting(database);
|
|
180
|
+
}
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
### CommonJS
|
|
184
|
+
|
|
185
|
+
YAML files can also be required in CommonJS:
|
|
186
|
+
|
|
187
|
+
```ts app.ts icon="/icons/typescript.svg"
|
|
188
|
+
const config = require("./config.yaml");
|
|
189
|
+
console.log(config.database.name); // "myapp"
|
|
190
|
+
|
|
191
|
+
// Destructuring also works
|
|
192
|
+
const { database, redis } = require("./config.yaml");
|
|
193
|
+
console.log(database.port); // 5432
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## Hot Reloading with YAML
|
|
199
|
+
|
|
200
|
+
One of the most powerful features of Bun's YAML support is hot reloading. When you run your application with `bun --hot`, changes to YAML files are automatically detected and reloaded without closing connections
|
|
201
|
+
|
|
202
|
+
### Configuration Hot Reloading
|
|
203
|
+
|
|
204
|
+
```yaml config.yaml
|
|
205
|
+
server:
|
|
206
|
+
port: 3000
|
|
207
|
+
host: localhost
|
|
208
|
+
|
|
209
|
+
features:
|
|
210
|
+
debug: true
|
|
211
|
+
verbose: false
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
```ts server.ts icon="/icons/typescript.svg"
|
|
215
|
+
import { server, features } from "./config.yaml";
|
|
216
|
+
|
|
217
|
+
console.log(`Starting server on ${server.host}:${server.port}`);
|
|
218
|
+
|
|
219
|
+
if (features.debug) {
|
|
220
|
+
console.log("Debug mode enabled");
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Your server code here
|
|
224
|
+
Bun.serve({
|
|
225
|
+
port: server.port,
|
|
226
|
+
hostname: server.host,
|
|
227
|
+
fetch(req) {
|
|
228
|
+
if (features.verbose) {
|
|
229
|
+
console.log(`${req.method} ${req.url}`);
|
|
230
|
+
}
|
|
231
|
+
return new Response("Hello World");
|
|
232
|
+
},
|
|
233
|
+
});
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Run with hot reloading:
|
|
237
|
+
|
|
238
|
+
```bash terminal icon="terminal"
|
|
239
|
+
bun --hot server.ts
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
Now when you modify `config.yaml`, the changes are immediately reflected in your running application. This is perfect for:
|
|
243
|
+
|
|
244
|
+
- Adjusting configuration during development
|
|
245
|
+
- Testing different settings without restarts
|
|
246
|
+
- Live debugging with configuration changes
|
|
247
|
+
- Feature flag toggling
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Configuration Management
|
|
252
|
+
|
|
253
|
+
### Environment-Based Configuration
|
|
254
|
+
|
|
255
|
+
YAML excels at managing configuration across different environments:
|
|
256
|
+
|
|
257
|
+
```yaml config.yaml
|
|
258
|
+
defaults: &defaults
|
|
259
|
+
timeout: 5000
|
|
260
|
+
retries: 3
|
|
261
|
+
cache:
|
|
262
|
+
enabled: true
|
|
263
|
+
ttl: 3600
|
|
264
|
+
|
|
265
|
+
development:
|
|
266
|
+
<<: *defaults
|
|
267
|
+
api:
|
|
268
|
+
url: http://localhost:4000
|
|
269
|
+
key: dev_key_12345
|
|
270
|
+
logging:
|
|
271
|
+
level: debug
|
|
272
|
+
pretty: true
|
|
273
|
+
|
|
274
|
+
staging:
|
|
275
|
+
<<: *defaults
|
|
276
|
+
api:
|
|
277
|
+
url: https://staging-api.example.com
|
|
278
|
+
key: ${STAGING_API_KEY}
|
|
279
|
+
logging:
|
|
280
|
+
level: info
|
|
281
|
+
pretty: false
|
|
282
|
+
|
|
283
|
+
production:
|
|
284
|
+
<<: *defaults
|
|
285
|
+
api:
|
|
286
|
+
url: https://api.example.com
|
|
287
|
+
key: ${PROD_API_KEY}
|
|
288
|
+
cache:
|
|
289
|
+
enabled: true
|
|
290
|
+
ttl: 86400
|
|
291
|
+
logging:
|
|
292
|
+
level: error
|
|
293
|
+
pretty: false
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
```ts app.ts icon="/icons/typescript.svg"
|
|
297
|
+
import configs from "./config.yaml";
|
|
298
|
+
|
|
299
|
+
const env = process.env.NODE_ENV || "development";
|
|
300
|
+
const config = configs[env];
|
|
301
|
+
|
|
302
|
+
// Environment variables in YAML values can be interpolated
|
|
303
|
+
function interpolateEnvVars(obj: any): any {
|
|
304
|
+
if (typeof obj === "string") {
|
|
305
|
+
return obj.replace(/\${(\w+)}/g, (_, key) => process.env[key] || "");
|
|
306
|
+
}
|
|
307
|
+
if (typeof obj === "object") {
|
|
308
|
+
for (const key in obj) {
|
|
309
|
+
obj[key] = interpolateEnvVars(obj[key]);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
return obj;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
export default interpolateEnvVars(config);
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### Feature Flags Configuration
|
|
319
|
+
|
|
320
|
+
```yaml features.yaml
|
|
321
|
+
features:
|
|
322
|
+
newDashboard:
|
|
323
|
+
enabled: true
|
|
324
|
+
rolloutPercentage: 50
|
|
325
|
+
allowedUsers:
|
|
326
|
+
- admin@example.com
|
|
327
|
+
- beta@example.com
|
|
328
|
+
|
|
329
|
+
experimentalAPI:
|
|
330
|
+
enabled: false
|
|
331
|
+
endpoints:
|
|
332
|
+
- /api/v2/experimental
|
|
333
|
+
- /api/v2/beta
|
|
334
|
+
|
|
335
|
+
darkMode:
|
|
336
|
+
enabled: true
|
|
337
|
+
default: auto # auto, light, dark
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
```ts feature-flags.ts icon="/icons/typescript.svg"
|
|
341
|
+
import { features } from "./features.yaml";
|
|
342
|
+
|
|
343
|
+
export function isFeatureEnabled(featureName: string, userEmail?: string): boolean {
|
|
344
|
+
const feature = features[featureName];
|
|
345
|
+
|
|
346
|
+
if (!feature?.enabled) {
|
|
347
|
+
return false;
|
|
348
|
+
}
|
|
349
|
+
|
|
350
|
+
// Check rollout percentage
|
|
351
|
+
if (feature.rolloutPercentage < 100) {
|
|
352
|
+
const hash = hashCode(userEmail || "anonymous");
|
|
353
|
+
if (hash % 100 >= feature.rolloutPercentage) {
|
|
354
|
+
return false;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
// Check allowed users
|
|
359
|
+
if (feature.allowedUsers && userEmail) {
|
|
360
|
+
return feature.allowedUsers.includes(userEmail);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
return true;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
// Use with hot reloading to toggle features in real-time
|
|
367
|
+
if (isFeatureEnabled("newDashboard", user.email)) {
|
|
368
|
+
renderNewDashboard();
|
|
369
|
+
} else {
|
|
370
|
+
renderLegacyDashboard();
|
|
371
|
+
}
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
### Database Configuration
|
|
375
|
+
|
|
376
|
+
```yaml database.yaml icon="yaml"
|
|
377
|
+
connections:
|
|
378
|
+
primary:
|
|
379
|
+
type: postgres
|
|
380
|
+
host: ${DB_HOST:-localhost}
|
|
381
|
+
port: ${DB_PORT:-5432}
|
|
382
|
+
database: ${DB_NAME:-myapp}
|
|
383
|
+
username: ${DB_USER:-postgres}
|
|
384
|
+
password: ${DB_PASS}
|
|
385
|
+
pool:
|
|
386
|
+
min: 2
|
|
387
|
+
max: 10
|
|
388
|
+
idleTimeout: 30000
|
|
389
|
+
|
|
390
|
+
cache:
|
|
391
|
+
type: redis
|
|
392
|
+
host: ${REDIS_HOST:-localhost}
|
|
393
|
+
port: ${REDIS_PORT:-6379}
|
|
394
|
+
password: ${REDIS_PASS}
|
|
395
|
+
db: 0
|
|
396
|
+
|
|
397
|
+
analytics:
|
|
398
|
+
type: clickhouse
|
|
399
|
+
host: ${ANALYTICS_HOST:-localhost}
|
|
400
|
+
port: 8123
|
|
401
|
+
database: analytics
|
|
402
|
+
|
|
403
|
+
migrations:
|
|
404
|
+
autoRun: ${AUTO_MIGRATE:-false}
|
|
405
|
+
directory: ./migrations
|
|
406
|
+
|
|
407
|
+
seeds:
|
|
408
|
+
enabled: ${SEED_DB:-false}
|
|
409
|
+
directory: ./seeds
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
```ts db.ts icon="/icons/typescript.svg"
|
|
413
|
+
import { connections, migrations } from "./database.yaml";
|
|
414
|
+
import { createConnection } from "./database-driver";
|
|
415
|
+
|
|
416
|
+
// Parse environment variables with defaults
|
|
417
|
+
function parseConfig(config: any) {
|
|
418
|
+
return JSON.parse(
|
|
419
|
+
JSON.stringify(config).replace(
|
|
420
|
+
/\${([^:-]+)(?::([^}]+))?}/g,
|
|
421
|
+
(_, key, defaultValue) => process.env[key] || defaultValue || "",
|
|
422
|
+
),
|
|
423
|
+
);
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
const dbConfig = parseConfig(connections);
|
|
427
|
+
|
|
428
|
+
export const db = await createConnection(dbConfig.primary);
|
|
429
|
+
export const cache = await createConnection(dbConfig.cache);
|
|
430
|
+
export const analytics = await createConnection(dbConfig.analytics);
|
|
431
|
+
|
|
432
|
+
// Auto-run migrations if configured
|
|
433
|
+
if (parseConfig(migrations).autoRun === "true") {
|
|
434
|
+
await runMigrations(db, migrations.directory);
|
|
435
|
+
}
|
|
436
|
+
```
|
|
437
|
+
|
|
438
|
+
### Bundler Integration
|
|
439
|
+
|
|
440
|
+
When you import YAML files in your application and bundle it with Bun, the YAML is parsed at build time and included as a JavaScript module:
|
|
441
|
+
|
|
442
|
+
```bash terminal icon="terminal"
|
|
443
|
+
bun build app.ts --outdir=dist
|
|
444
|
+
```
|
|
445
|
+
|
|
446
|
+
This means:
|
|
447
|
+
|
|
448
|
+
- Zero runtime YAML parsing overhead in production
|
|
449
|
+
- Smaller bundle sizes
|
|
450
|
+
- Tree-shaking support for unused configuration (named imports)
|
|
451
|
+
|
|
452
|
+
### Dynamic Imports
|
|
453
|
+
|
|
454
|
+
YAML files can be dynamically imported, useful for loading configuration on demand:
|
|
455
|
+
|
|
456
|
+
```ts Load configuration based on environment
|
|
457
|
+
const env = process.env.NODE_ENV || "development";
|
|
458
|
+
const config = await import(`./configs/${env}.yaml`);
|
|
459
|
+
|
|
460
|
+
// Load user-specific settings
|
|
461
|
+
async function loadUserSettings(userId: string) {
|
|
462
|
+
try {
|
|
463
|
+
const settings = await import(`./users/${userId}/settings.yaml`);
|
|
464
|
+
return settings.default;
|
|
465
|
+
} catch {
|
|
466
|
+
return await import("./users/default-settings.yaml");
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
```
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
## CLI Usage
|
|
2
|
+
|
|
3
|
+
```bash
|
|
4
|
+
bun add <package> <@version>
|
|
5
|
+
```
|
|
6
|
+
|
|
7
|
+
### Dependency Management
|
|
8
|
+
|
|
9
|
+
<ParamField path="--production" type="boolean">
|
|
10
|
+
Don't install devDependencies. Alias: <code>-p</code>
|
|
11
|
+
</ParamField>
|
|
12
|
+
|
|
13
|
+
<ParamField path="--omit" type="string">
|
|
14
|
+
Exclude <code>dev</code>, <code>optional</code>, or <code>peer</code> dependencies from install
|
|
15
|
+
</ParamField>
|
|
16
|
+
|
|
17
|
+
<ParamField path="--global" type="boolean">
|
|
18
|
+
Install globally. Alias: <code>-g</code>
|
|
19
|
+
</ParamField>
|
|
20
|
+
|
|
21
|
+
<ParamField path="--dev" type="boolean">
|
|
22
|
+
Add dependency to <code>devDependencies</code>. Alias: <code>-d</code>
|
|
23
|
+
</ParamField>
|
|
24
|
+
|
|
25
|
+
<ParamField path="--optional" type="boolean">
|
|
26
|
+
Add dependency to <code>optionalDependencies</code>
|
|
27
|
+
</ParamField>
|
|
28
|
+
|
|
29
|
+
<ParamField path="--peer" type="boolean">
|
|
30
|
+
Add dependency to <code>peerDependencies</code>
|
|
31
|
+
</ParamField>
|
|
32
|
+
|
|
33
|
+
<ParamField path="--exact" type="boolean">
|
|
34
|
+
Add the exact version instead of the <code>^</code> range. Alias: <code>-E</code>
|
|
35
|
+
</ParamField>
|
|
36
|
+
|
|
37
|
+
<ParamField path="--only-missing" type="boolean">
|
|
38
|
+
Only add dependencies to <code>package.json</code> if they are not already present
|
|
39
|
+
</ParamField>
|
|
40
|
+
|
|
41
|
+
### Project Files & Lockfiles
|
|
42
|
+
|
|
43
|
+
<ParamField path="--yarn" type="boolean">
|
|
44
|
+
Write a <code>yarn.lock</code> file (yarn v1). Alias: <code>-y</code>
|
|
45
|
+
</ParamField>
|
|
46
|
+
|
|
47
|
+
<ParamField path="--no-save" type="boolean">
|
|
48
|
+
Don't update <code>package.json</code> or save a lockfile
|
|
49
|
+
</ParamField>
|
|
50
|
+
|
|
51
|
+
<ParamField path="--save" type="boolean" default="true">
|
|
52
|
+
Save to <code>package.json</code> (true by default)
|
|
53
|
+
</ParamField>
|
|
54
|
+
|
|
55
|
+
<ParamField path="--frozen-lockfile" type="boolean">
|
|
56
|
+
Disallow changes to lockfile
|
|
57
|
+
</ParamField>
|
|
58
|
+
|
|
59
|
+
<ParamField path="--trust" type="boolean">
|
|
60
|
+
Add to <code>trustedDependencies</code> in the project's <code>package.json</code> and install the package(s)
|
|
61
|
+
</ParamField>
|
|
62
|
+
|
|
63
|
+
<ParamField path="--save-text-lockfile" type="boolean">
|
|
64
|
+
Save a text-based lockfile
|
|
65
|
+
</ParamField>
|
|
66
|
+
|
|
67
|
+
<ParamField path="--lockfile-only" type="boolean">
|
|
68
|
+
Generate a lockfile without installing dependencies
|
|
69
|
+
</ParamField>
|
|
70
|
+
|
|
71
|
+
### Installation Control
|
|
72
|
+
|
|
73
|
+
<ParamField path="--dry-run" type="boolean">
|
|
74
|
+
Don't install anything
|
|
75
|
+
</ParamField>
|
|
76
|
+
|
|
77
|
+
<ParamField path="--force" type="boolean">
|
|
78
|
+
Always request the latest versions from the registry & reinstall all dependencies. Alias: <code>-f</code>
|
|
79
|
+
</ParamField>
|
|
80
|
+
|
|
81
|
+
<ParamField path="--no-verify" type="boolean">
|
|
82
|
+
Skip verifying integrity of newly downloaded packages
|
|
83
|
+
</ParamField>
|
|
84
|
+
|
|
85
|
+
<ParamField path="--ignore-scripts" type="boolean">
|
|
86
|
+
Skip lifecycle scripts in the project's <code>package.json</code> (dependency scripts are never run)
|
|
87
|
+
</ParamField>
|
|
88
|
+
|
|
89
|
+
<ParamField path="--analyze" type="boolean">
|
|
90
|
+
Recursively analyze & install dependencies of files passed as arguments (using Bun's bundler). Alias:{" "}
|
|
91
|
+
<code>-a</code>
|
|
92
|
+
</ParamField>
|
|
93
|
+
|
|
94
|
+
### Network & Registry
|
|
95
|
+
|
|
96
|
+
<ParamField path="--ca" type="string">
|
|
97
|
+
Provide a Certificate Authority signing certificate
|
|
98
|
+
</ParamField>
|
|
99
|
+
|
|
100
|
+
<ParamField path="--cafile" type="string">
|
|
101
|
+
Same as <code>--ca</code>, but as a file path to the certificate
|
|
102
|
+
</ParamField>
|
|
103
|
+
|
|
104
|
+
<ParamField path="--registry" type="string">
|
|
105
|
+
Use a specific registry by default, overriding <code>.npmrc</code>, <code>bunfig.toml</code>, and environment
|
|
106
|
+
variables
|
|
107
|
+
</ParamField>
|
|
108
|
+
|
|
109
|
+
<ParamField path="--network-concurrency" type="number" default="48">
|
|
110
|
+
Maximum number of concurrent network requests (default 48)
|
|
111
|
+
</ParamField>
|
|
112
|
+
|
|
113
|
+
### Performance & Resource
|
|
114
|
+
|
|
115
|
+
<ParamField path="--backend" type="string" default="clonefile">
|
|
116
|
+
Platform-specific optimizations for installing dependencies. Possible values: <code>clonefile</code> (default),{" "}
|
|
117
|
+
<code>hardlink</code>, <code>symlink</code>, <code>copyfile</code>
|
|
118
|
+
</ParamField>
|
|
119
|
+
|
|
120
|
+
<ParamField path="--concurrent-scripts" type="number" default="5">
|
|
121
|
+
Maximum number of concurrent jobs for lifecycle scripts (default 5)
|
|
122
|
+
</ParamField>
|
|
123
|
+
|
|
124
|
+
### Caching
|
|
125
|
+
|
|
126
|
+
<ParamField path="--cache-dir" type="string">
|
|
127
|
+
Store & load cached data from a specific directory path
|
|
128
|
+
</ParamField>
|
|
129
|
+
|
|
130
|
+
<ParamField path="--no-cache" type="boolean">
|
|
131
|
+
Ignore manifest cache entirely
|
|
132
|
+
</ParamField>
|
|
133
|
+
|
|
134
|
+
### Output & Logging
|
|
135
|
+
|
|
136
|
+
<ParamField path="--silent" type="boolean">
|
|
137
|
+
Don't log anything
|
|
138
|
+
</ParamField>
|
|
139
|
+
|
|
140
|
+
<ParamField path="--verbose" type="boolean">
|
|
141
|
+
Excessively verbose logging
|
|
142
|
+
</ParamField>
|
|
143
|
+
|
|
144
|
+
<ParamField path="--no-progress" type="boolean">
|
|
145
|
+
Disable the progress bar
|
|
146
|
+
</ParamField>
|
|
147
|
+
|
|
148
|
+
<ParamField path="--no-summary" type="boolean">
|
|
149
|
+
Don't print a summary
|
|
150
|
+
</ParamField>
|
|
151
|
+
|
|
152
|
+
### Global Configuration & Context
|
|
153
|
+
|
|
154
|
+
<ParamField path="--config" type="string">
|
|
155
|
+
Specify path to config file (<code>bunfig.toml</code>). Alias: <code>-c</code>
|
|
156
|
+
</ParamField>
|
|
157
|
+
|
|
158
|
+
<ParamField path="--cwd" type="string">
|
|
159
|
+
Set a specific current working directory
|
|
160
|
+
</ParamField>
|
|
161
|
+
|
|
162
|
+
### Help
|
|
163
|
+
|
|
164
|
+
<ParamField path="--help" type="boolean">
|
|
165
|
+
Print this help menu. Alias: <code>-h</code>
|
|
166
|
+
</ParamField>
|