bun-types 1.3.2-canary.20251105T140650 → 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/docs/README.md +28 -0
- package/package.json +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
package/docs/api/yaml.md
DELETED
|
@@ -1,668 +0,0 @@
|
|
|
1
|
-
In Bun, YAML is a first-class citizen alongside JSON and TOML.
|
|
2
|
-
|
|
3
|
-
Bun provides built-in support for YAML files through both runtime APIs and bundler integration. You can
|
|
4
|
-
|
|
5
|
-
- Parse YAML strings with `Bun.YAML.parse`
|
|
6
|
-
- Stringify JavaScript objects to YAML with `Bun.YAML.stringify`
|
|
7
|
-
- import & require YAML files as modules at runtime (including hot reloading & watch mode support)
|
|
8
|
-
- import & require YAML files in frontend apps via bun's bundler
|
|
9
|
-
|
|
10
|
-
## Conformance
|
|
11
|
-
|
|
12
|
-
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.
|
|
13
|
-
|
|
14
|
-
## Runtime API
|
|
15
|
-
|
|
16
|
-
### `Bun.YAML.parse()`
|
|
17
|
-
|
|
18
|
-
Parse a YAML string into a JavaScript object.
|
|
19
|
-
|
|
20
|
-
```ts
|
|
21
|
-
import { YAML } from "bun";
|
|
22
|
-
const text = `
|
|
23
|
-
name: John Doe
|
|
24
|
-
age: 30
|
|
25
|
-
email: john@example.com
|
|
26
|
-
hobbies:
|
|
27
|
-
- reading
|
|
28
|
-
- coding
|
|
29
|
-
- hiking
|
|
30
|
-
`;
|
|
31
|
-
|
|
32
|
-
const data = YAML.parse(text);
|
|
33
|
-
console.log(data);
|
|
34
|
-
// {
|
|
35
|
-
// name: "John Doe",
|
|
36
|
-
// age: 30,
|
|
37
|
-
// email: "john@example.com",
|
|
38
|
-
// hobbies: ["reading", "coding", "hiking"]
|
|
39
|
-
// }
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
#### Multi-document YAML
|
|
43
|
-
|
|
44
|
-
When parsing YAML with multiple documents (separated by `---`), `Bun.YAML.parse()` returns an array:
|
|
45
|
-
|
|
46
|
-
```ts
|
|
47
|
-
const multiDoc = `
|
|
48
|
-
---
|
|
49
|
-
name: Document 1
|
|
50
|
-
---
|
|
51
|
-
name: Document 2
|
|
52
|
-
---
|
|
53
|
-
name: Document 3
|
|
54
|
-
`;
|
|
55
|
-
|
|
56
|
-
const docs = Bun.YAML.parse(multiDoc);
|
|
57
|
-
console.log(docs);
|
|
58
|
-
// [
|
|
59
|
-
// { name: "Document 1" },
|
|
60
|
-
// { name: "Document 2" },
|
|
61
|
-
// { name: "Document 3" }
|
|
62
|
-
// ]
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
#### Supported YAML Features
|
|
66
|
-
|
|
67
|
-
Bun's YAML parser supports the full YAML 1.2 specification, including:
|
|
68
|
-
|
|
69
|
-
- **Scalars**: strings, numbers, booleans, null values
|
|
70
|
-
- **Collections**: sequences (arrays) and mappings (objects)
|
|
71
|
-
- **Anchors and Aliases**: reusable nodes with `&` and `*`
|
|
72
|
-
- **Tags**: type hints like `!!str`, `!!int`, `!!float`, `!!bool`, `!!null`
|
|
73
|
-
- **Multi-line strings**: literal (`|`) and folded (`>`) scalars
|
|
74
|
-
- **Comments**: using `#`
|
|
75
|
-
- **Directives**: `%YAML` and `%TAG`
|
|
76
|
-
|
|
77
|
-
```ts
|
|
78
|
-
const yaml = `
|
|
79
|
-
# Employee record
|
|
80
|
-
employee: &emp
|
|
81
|
-
name: Jane Smith
|
|
82
|
-
department: Engineering
|
|
83
|
-
skills:
|
|
84
|
-
- JavaScript
|
|
85
|
-
- TypeScript
|
|
86
|
-
- React
|
|
87
|
-
|
|
88
|
-
manager: *emp # Reference to employee
|
|
89
|
-
|
|
90
|
-
config: !!str 123 # Explicit string type
|
|
91
|
-
|
|
92
|
-
description: |
|
|
93
|
-
This is a multi-line
|
|
94
|
-
literal string that preserves
|
|
95
|
-
line breaks and spacing.
|
|
96
|
-
|
|
97
|
-
summary: >
|
|
98
|
-
This is a folded string
|
|
99
|
-
that joins lines with spaces
|
|
100
|
-
unless there are blank lines.
|
|
101
|
-
`;
|
|
102
|
-
|
|
103
|
-
const data = Bun.YAML.parse(yaml);
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
#### Error Handling
|
|
107
|
-
|
|
108
|
-
`Bun.YAML.parse()` throws an error if the YAML is invalid:
|
|
109
|
-
|
|
110
|
-
```ts
|
|
111
|
-
try {
|
|
112
|
-
Bun.YAML.parse("invalid: yaml: content:");
|
|
113
|
-
} catch (error) {
|
|
114
|
-
console.error("Failed to parse YAML:", error.message);
|
|
115
|
-
}
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
### `Bun.YAML.stringify()`
|
|
119
|
-
|
|
120
|
-
Convert a JavaScript value into a YAML string. The API signature matches `JSON.stringify`:
|
|
121
|
-
|
|
122
|
-
```ts
|
|
123
|
-
YAML.stringify(value, replacer?, space?)
|
|
124
|
-
```
|
|
125
|
-
|
|
126
|
-
- `value`: The value to convert to YAML
|
|
127
|
-
- `replacer`: Currently only `null` or `undefined` (function replacers not yet supported)
|
|
128
|
-
- `space`: Number of spaces for indentation (e.g., `2`) or a string to use for indentation. **Without this parameter, outputs flow-style (single-line) YAML**
|
|
129
|
-
|
|
130
|
-
#### Basic Usage
|
|
131
|
-
|
|
132
|
-
```ts
|
|
133
|
-
import { YAML } from "bun";
|
|
134
|
-
|
|
135
|
-
const data = {
|
|
136
|
-
name: "John Doe",
|
|
137
|
-
age: 30,
|
|
138
|
-
hobbies: ["reading", "coding"],
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
// Without space - outputs flow-style (single-line) YAML
|
|
142
|
-
console.log(YAML.stringify(data));
|
|
143
|
-
// {name: John Doe,age: 30,hobbies: [reading,coding]}
|
|
144
|
-
|
|
145
|
-
// With space=2 - outputs block-style (multi-line) YAML
|
|
146
|
-
console.log(YAML.stringify(data, null, 2));
|
|
147
|
-
// name: John Doe
|
|
148
|
-
// age: 30
|
|
149
|
-
// hobbies:
|
|
150
|
-
// - reading
|
|
151
|
-
// - coding
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
#### Output Styles
|
|
155
|
-
|
|
156
|
-
```ts
|
|
157
|
-
const arr = [1, 2, 3];
|
|
158
|
-
|
|
159
|
-
// Flow style (single-line) - default
|
|
160
|
-
console.log(YAML.stringify(arr));
|
|
161
|
-
// [1,2,3]
|
|
162
|
-
|
|
163
|
-
// Block style (multi-line) - with indentation
|
|
164
|
-
console.log(YAML.stringify(arr, null, 2));
|
|
165
|
-
// - 1
|
|
166
|
-
// - 2
|
|
167
|
-
// - 3
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
#### String Quoting
|
|
171
|
-
|
|
172
|
-
`YAML.stringify()` automatically quotes strings when necessary:
|
|
173
|
-
|
|
174
|
-
- Strings that would be parsed as YAML keywords (`true`, `false`, `null`, `yes`, `no`, etc.)
|
|
175
|
-
- Strings that would be parsed as numbers
|
|
176
|
-
- Strings containing special characters or escape sequences
|
|
177
|
-
|
|
178
|
-
```ts
|
|
179
|
-
const examples = {
|
|
180
|
-
keyword: "true", // Will be quoted: "true"
|
|
181
|
-
number: "123", // Will be quoted: "123"
|
|
182
|
-
text: "hello world", // Won't be quoted: hello world
|
|
183
|
-
empty: "", // Will be quoted: ""
|
|
184
|
-
};
|
|
185
|
-
|
|
186
|
-
console.log(YAML.stringify(examples, null, 2));
|
|
187
|
-
// keyword: "true"
|
|
188
|
-
// number: "123"
|
|
189
|
-
// text: hello world
|
|
190
|
-
// empty: ""
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
#### Cycles and References
|
|
194
|
-
|
|
195
|
-
`YAML.stringify()` automatically detects and handles circular references using YAML anchors and aliases:
|
|
196
|
-
|
|
197
|
-
```ts
|
|
198
|
-
const obj = { name: "root" };
|
|
199
|
-
obj.self = obj; // Circular reference
|
|
200
|
-
|
|
201
|
-
const yamlString = YAML.stringify(obj, null, 2);
|
|
202
|
-
console.log(yamlString);
|
|
203
|
-
// &root
|
|
204
|
-
// name: root
|
|
205
|
-
// self:
|
|
206
|
-
// *root
|
|
207
|
-
|
|
208
|
-
// Objects with shared references
|
|
209
|
-
const shared = { id: 1 };
|
|
210
|
-
const data = {
|
|
211
|
-
first: shared,
|
|
212
|
-
second: shared,
|
|
213
|
-
};
|
|
214
|
-
|
|
215
|
-
console.log(YAML.stringify(data, null, 2));
|
|
216
|
-
// first:
|
|
217
|
-
// &first
|
|
218
|
-
// id: 1
|
|
219
|
-
// second:
|
|
220
|
-
// *first
|
|
221
|
-
```
|
|
222
|
-
|
|
223
|
-
#### Special Values
|
|
224
|
-
|
|
225
|
-
```ts
|
|
226
|
-
// Special numeric values
|
|
227
|
-
console.log(YAML.stringify(Infinity)); // .inf
|
|
228
|
-
console.log(YAML.stringify(-Infinity)); // -.inf
|
|
229
|
-
console.log(YAML.stringify(NaN)); // .nan
|
|
230
|
-
console.log(YAML.stringify(0)); // 0
|
|
231
|
-
console.log(YAML.stringify(-0)); // -0
|
|
232
|
-
|
|
233
|
-
// null and undefined
|
|
234
|
-
console.log(YAML.stringify(null)); // null
|
|
235
|
-
console.log(YAML.stringify(undefined)); // undefined (returns undefined, not a string)
|
|
236
|
-
|
|
237
|
-
// Booleans
|
|
238
|
-
console.log(YAML.stringify(true)); // true
|
|
239
|
-
console.log(YAML.stringify(false)); // false
|
|
240
|
-
```
|
|
241
|
-
|
|
242
|
-
#### Complex Objects
|
|
243
|
-
|
|
244
|
-
```ts
|
|
245
|
-
const config = {
|
|
246
|
-
server: {
|
|
247
|
-
port: 3000,
|
|
248
|
-
host: "localhost",
|
|
249
|
-
ssl: {
|
|
250
|
-
enabled: true,
|
|
251
|
-
cert: "/path/to/cert.pem",
|
|
252
|
-
key: "/path/to/key.pem",
|
|
253
|
-
},
|
|
254
|
-
},
|
|
255
|
-
database: {
|
|
256
|
-
connections: [
|
|
257
|
-
{ name: "primary", host: "db1.example.com" },
|
|
258
|
-
{ name: "replica", host: "db2.example.com" },
|
|
259
|
-
],
|
|
260
|
-
},
|
|
261
|
-
features: {
|
|
262
|
-
auth: true,
|
|
263
|
-
"rate-limit": 100, // Keys with special characters are preserved
|
|
264
|
-
},
|
|
265
|
-
};
|
|
266
|
-
|
|
267
|
-
const yamlString = YAML.stringify(config, null, 2);
|
|
268
|
-
console.log(yamlString);
|
|
269
|
-
// server:
|
|
270
|
-
// port: 3000
|
|
271
|
-
// host: localhost
|
|
272
|
-
// ssl:
|
|
273
|
-
// enabled: true
|
|
274
|
-
// cert: /path/to/cert.pem
|
|
275
|
-
// key: /path/to/key.pem
|
|
276
|
-
// database:
|
|
277
|
-
// connections:
|
|
278
|
-
// - name: primary
|
|
279
|
-
// host: db1.example.com
|
|
280
|
-
// - name: replica
|
|
281
|
-
// host: db2.example.com
|
|
282
|
-
// features:
|
|
283
|
-
// auth: true
|
|
284
|
-
// rate-limit: 100
|
|
285
|
-
```
|
|
286
|
-
|
|
287
|
-
## Module Import
|
|
288
|
-
|
|
289
|
-
### ES Modules
|
|
290
|
-
|
|
291
|
-
You can import YAML files directly as ES modules. The YAML content is parsed and made available as both default and named exports:
|
|
292
|
-
|
|
293
|
-
```yaml#config.yaml
|
|
294
|
-
database:
|
|
295
|
-
host: localhost
|
|
296
|
-
port: 5432
|
|
297
|
-
name: myapp
|
|
298
|
-
|
|
299
|
-
redis:
|
|
300
|
-
host: localhost
|
|
301
|
-
port: 6379
|
|
302
|
-
|
|
303
|
-
features:
|
|
304
|
-
auth: true
|
|
305
|
-
rateLimit: true
|
|
306
|
-
analytics: false
|
|
307
|
-
```
|
|
308
|
-
|
|
309
|
-
#### Default Import
|
|
310
|
-
|
|
311
|
-
```ts#app.ts
|
|
312
|
-
import config from "./config.yaml";
|
|
313
|
-
|
|
314
|
-
console.log(config.database.host); // "localhost"
|
|
315
|
-
console.log(config.redis.port); // 6379
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
#### Named Imports
|
|
319
|
-
|
|
320
|
-
You can destructure top-level YAML properties as named imports:
|
|
321
|
-
|
|
322
|
-
```ts
|
|
323
|
-
import { database, redis, features } from "./config.yaml";
|
|
324
|
-
|
|
325
|
-
console.log(database.host); // "localhost"
|
|
326
|
-
console.log(redis.port); // 6379
|
|
327
|
-
console.log(features.auth); // true
|
|
328
|
-
```
|
|
329
|
-
|
|
330
|
-
Or combine both:
|
|
331
|
-
|
|
332
|
-
```ts
|
|
333
|
-
import config, { database, features } from "./config.yaml";
|
|
334
|
-
|
|
335
|
-
// Use the full config object
|
|
336
|
-
console.log(config);
|
|
337
|
-
|
|
338
|
-
// Or use specific parts
|
|
339
|
-
if (features.rateLimit) {
|
|
340
|
-
setupRateLimiting(database);
|
|
341
|
-
}
|
|
342
|
-
```
|
|
343
|
-
|
|
344
|
-
### CommonJS
|
|
345
|
-
|
|
346
|
-
YAML files can also be required in CommonJS:
|
|
347
|
-
|
|
348
|
-
```js
|
|
349
|
-
const config = require("./config.yaml");
|
|
350
|
-
console.log(config.database.name); // "myapp"
|
|
351
|
-
|
|
352
|
-
// Destructuring also works
|
|
353
|
-
const { database, redis } = require("./config.yaml");
|
|
354
|
-
console.log(database.port); // 5432
|
|
355
|
-
```
|
|
356
|
-
|
|
357
|
-
### TypeScript Support
|
|
358
|
-
|
|
359
|
-
While Bun can import YAML files directly, TypeScript doesn't know the types of your YAML files by default. To add TypeScript support for your YAML imports, create a declaration file with `.d.ts` appended to the YAML filename (e.g., `config.yaml` → `config.yaml.d.ts`):
|
|
360
|
-
|
|
361
|
-
```yaml#config.yaml
|
|
362
|
-
features: "advanced"
|
|
363
|
-
server:
|
|
364
|
-
host: localhost
|
|
365
|
-
port: 3000
|
|
366
|
-
```
|
|
367
|
-
|
|
368
|
-
```ts#config.yaml.d.ts
|
|
369
|
-
const contents: {
|
|
370
|
-
features: string;
|
|
371
|
-
server: {
|
|
372
|
-
host: string;
|
|
373
|
-
port: number;
|
|
374
|
-
};
|
|
375
|
-
};
|
|
376
|
-
|
|
377
|
-
export = contents;
|
|
378
|
-
```
|
|
379
|
-
|
|
380
|
-
Now TypeScript will provide proper type checking and auto-completion:
|
|
381
|
-
|
|
382
|
-
```ts#app.ts
|
|
383
|
-
import config from "./config.yaml";
|
|
384
|
-
|
|
385
|
-
// TypeScript knows the types!
|
|
386
|
-
config.server.port; // number
|
|
387
|
-
config.server.host; // string
|
|
388
|
-
config.features; // string
|
|
389
|
-
|
|
390
|
-
// TypeScript will catch errors
|
|
391
|
-
config.server.unknown; // Error: Property 'unknown' does not exist
|
|
392
|
-
```
|
|
393
|
-
|
|
394
|
-
This approach works for both ES modules and CommonJS, giving you full type safety while Bun continues to handle the actual YAML parsing at runtime.
|
|
395
|
-
|
|
396
|
-
## Hot Reloading with YAML
|
|
397
|
-
|
|
398
|
-
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
|
|
399
|
-
|
|
400
|
-
### Configuration Hot Reloading
|
|
401
|
-
|
|
402
|
-
```yaml#config.yaml
|
|
403
|
-
server:
|
|
404
|
-
port: 3000
|
|
405
|
-
host: localhost
|
|
406
|
-
|
|
407
|
-
features:
|
|
408
|
-
debug: true
|
|
409
|
-
verbose: false
|
|
410
|
-
```
|
|
411
|
-
|
|
412
|
-
```ts#server.ts
|
|
413
|
-
import { server, features } from "./config.yaml";
|
|
414
|
-
|
|
415
|
-
console.log(`Starting server on ${server.host}:${server.port}`);
|
|
416
|
-
|
|
417
|
-
if (features.debug) {
|
|
418
|
-
console.log("Debug mode enabled");
|
|
419
|
-
}
|
|
420
|
-
|
|
421
|
-
// Your server code here
|
|
422
|
-
Bun.serve({
|
|
423
|
-
port: server.port,
|
|
424
|
-
hostname: server.host,
|
|
425
|
-
fetch(req) {
|
|
426
|
-
if (features.verbose) {
|
|
427
|
-
console.log(`${req.method} ${req.url}`);
|
|
428
|
-
}
|
|
429
|
-
return new Response("Hello World");
|
|
430
|
-
},
|
|
431
|
-
});
|
|
432
|
-
```
|
|
433
|
-
|
|
434
|
-
Run with hot reloading:
|
|
435
|
-
|
|
436
|
-
```bash
|
|
437
|
-
bun --hot server.ts
|
|
438
|
-
```
|
|
439
|
-
|
|
440
|
-
Now when you modify `config.yaml`, the changes are immediately reflected in your running application. This is perfect for:
|
|
441
|
-
|
|
442
|
-
- Adjusting configuration during development
|
|
443
|
-
- Testing different settings without restarts
|
|
444
|
-
- Live debugging with configuration changes
|
|
445
|
-
- Feature flag toggling
|
|
446
|
-
|
|
447
|
-
## Configuration Management
|
|
448
|
-
|
|
449
|
-
### Environment-Based Configuration
|
|
450
|
-
|
|
451
|
-
YAML excels at managing configuration across different environments:
|
|
452
|
-
|
|
453
|
-
```yaml#config.yaml
|
|
454
|
-
defaults: &defaults
|
|
455
|
-
timeout: 5000
|
|
456
|
-
retries: 3
|
|
457
|
-
cache:
|
|
458
|
-
enabled: true
|
|
459
|
-
ttl: 3600
|
|
460
|
-
|
|
461
|
-
development:
|
|
462
|
-
<<: *defaults
|
|
463
|
-
api:
|
|
464
|
-
url: http://localhost:4000
|
|
465
|
-
key: dev_key_12345
|
|
466
|
-
logging:
|
|
467
|
-
level: debug
|
|
468
|
-
pretty: true
|
|
469
|
-
|
|
470
|
-
staging:
|
|
471
|
-
<<: *defaults
|
|
472
|
-
api:
|
|
473
|
-
url: https://staging-api.example.com
|
|
474
|
-
key: ${STAGING_API_KEY}
|
|
475
|
-
logging:
|
|
476
|
-
level: info
|
|
477
|
-
pretty: false
|
|
478
|
-
|
|
479
|
-
production:
|
|
480
|
-
<<: *defaults
|
|
481
|
-
api:
|
|
482
|
-
url: https://api.example.com
|
|
483
|
-
key: ${PROD_API_KEY}
|
|
484
|
-
cache:
|
|
485
|
-
enabled: true
|
|
486
|
-
ttl: 86400
|
|
487
|
-
logging:
|
|
488
|
-
level: error
|
|
489
|
-
pretty: false
|
|
490
|
-
```
|
|
491
|
-
|
|
492
|
-
```ts#app.ts
|
|
493
|
-
import configs from "./config.yaml";
|
|
494
|
-
|
|
495
|
-
const env = process.env.NODE_ENV || "development";
|
|
496
|
-
const config = configs[env];
|
|
497
|
-
|
|
498
|
-
// Environment variables in YAML values can be interpolated
|
|
499
|
-
function interpolateEnvVars(obj: any): any {
|
|
500
|
-
if (typeof obj === "string") {
|
|
501
|
-
return obj.replace(/\${(\w+)}/g, (_, key) => process.env[key] || "");
|
|
502
|
-
}
|
|
503
|
-
if (typeof obj === "object") {
|
|
504
|
-
for (const key in obj) {
|
|
505
|
-
obj[key] = interpolateEnvVars(obj[key]);
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
return obj;
|
|
509
|
-
}
|
|
510
|
-
|
|
511
|
-
export default interpolateEnvVars(config);
|
|
512
|
-
```
|
|
513
|
-
|
|
514
|
-
### Feature Flags Configuration
|
|
515
|
-
|
|
516
|
-
```yaml#features.yaml
|
|
517
|
-
features:
|
|
518
|
-
newDashboard:
|
|
519
|
-
enabled: true
|
|
520
|
-
rolloutPercentage: 50
|
|
521
|
-
allowedUsers:
|
|
522
|
-
- admin@example.com
|
|
523
|
-
- beta@example.com
|
|
524
|
-
|
|
525
|
-
experimentalAPI:
|
|
526
|
-
enabled: false
|
|
527
|
-
endpoints:
|
|
528
|
-
- /api/v2/experimental
|
|
529
|
-
- /api/v2/beta
|
|
530
|
-
|
|
531
|
-
darkMode:
|
|
532
|
-
enabled: true
|
|
533
|
-
default: auto # auto, light, dark
|
|
534
|
-
```
|
|
535
|
-
|
|
536
|
-
```ts#feature-flags.ts
|
|
537
|
-
import { features } from "./features.yaml";
|
|
538
|
-
|
|
539
|
-
export function isFeatureEnabled(
|
|
540
|
-
featureName: string,
|
|
541
|
-
userEmail?: string,
|
|
542
|
-
): boolean {
|
|
543
|
-
const feature = features[featureName];
|
|
544
|
-
|
|
545
|
-
if (!feature?.enabled) {
|
|
546
|
-
return false;
|
|
547
|
-
}
|
|
548
|
-
|
|
549
|
-
// Check rollout percentage
|
|
550
|
-
if (feature.rolloutPercentage < 100) {
|
|
551
|
-
const hash = hashCode(userEmail || "anonymous");
|
|
552
|
-
if (hash % 100 >= feature.rolloutPercentage) {
|
|
553
|
-
return false;
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
// Check allowed users
|
|
558
|
-
if (feature.allowedUsers && userEmail) {
|
|
559
|
-
return feature.allowedUsers.includes(userEmail);
|
|
560
|
-
}
|
|
561
|
-
|
|
562
|
-
return true;
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
// Use with hot reloading to toggle features in real-time
|
|
566
|
-
if (isFeatureEnabled("newDashboard", user.email)) {
|
|
567
|
-
renderNewDashboard();
|
|
568
|
-
} else {
|
|
569
|
-
renderLegacyDashboard();
|
|
570
|
-
}
|
|
571
|
-
```
|
|
572
|
-
|
|
573
|
-
### Database Configuration
|
|
574
|
-
|
|
575
|
-
```yaml#database.yaml
|
|
576
|
-
connections:
|
|
577
|
-
primary:
|
|
578
|
-
type: postgres
|
|
579
|
-
host: ${DB_HOST:-localhost}
|
|
580
|
-
port: ${DB_PORT:-5432}
|
|
581
|
-
database: ${DB_NAME:-myapp}
|
|
582
|
-
username: ${DB_USER:-postgres}
|
|
583
|
-
password: ${DB_PASS}
|
|
584
|
-
pool:
|
|
585
|
-
min: 2
|
|
586
|
-
max: 10
|
|
587
|
-
idleTimeout: 30000
|
|
588
|
-
|
|
589
|
-
cache:
|
|
590
|
-
type: redis
|
|
591
|
-
host: ${REDIS_HOST:-localhost}
|
|
592
|
-
port: ${REDIS_PORT:-6379}
|
|
593
|
-
password: ${REDIS_PASS}
|
|
594
|
-
db: 0
|
|
595
|
-
|
|
596
|
-
analytics:
|
|
597
|
-
type: clickhouse
|
|
598
|
-
host: ${ANALYTICS_HOST:-localhost}
|
|
599
|
-
port: 8123
|
|
600
|
-
database: analytics
|
|
601
|
-
|
|
602
|
-
migrations:
|
|
603
|
-
autoRun: ${AUTO_MIGRATE:-false}
|
|
604
|
-
directory: ./migrations
|
|
605
|
-
|
|
606
|
-
seeds:
|
|
607
|
-
enabled: ${SEED_DB:-false}
|
|
608
|
-
directory: ./seeds
|
|
609
|
-
```
|
|
610
|
-
|
|
611
|
-
```ts#db.ts
|
|
612
|
-
import { connections, migrations } from "./database.yaml";
|
|
613
|
-
import { createConnection } from "./database-driver";
|
|
614
|
-
|
|
615
|
-
// Parse environment variables with defaults
|
|
616
|
-
function parseConfig(config: any) {
|
|
617
|
-
return JSON.parse(
|
|
618
|
-
JSON.stringify(config).replace(
|
|
619
|
-
/\${([^:-]+)(?::([^}]+))?}/g,
|
|
620
|
-
(_, key, defaultValue) => process.env[key] || defaultValue || "",
|
|
621
|
-
),
|
|
622
|
-
);
|
|
623
|
-
}
|
|
624
|
-
|
|
625
|
-
const dbConfig = parseConfig(connections);
|
|
626
|
-
|
|
627
|
-
export const db = await createConnection(dbConfig.primary);
|
|
628
|
-
export const cache = await createConnection(dbConfig.cache);
|
|
629
|
-
export const analytics = await createConnection(dbConfig.analytics);
|
|
630
|
-
|
|
631
|
-
// Auto-run migrations if configured
|
|
632
|
-
if (parseConfig(migrations).autoRun === "true") {
|
|
633
|
-
await runMigrations(db, migrations.directory);
|
|
634
|
-
}
|
|
635
|
-
```
|
|
636
|
-
|
|
637
|
-
### Bundler Integration
|
|
638
|
-
|
|
639
|
-
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:
|
|
640
|
-
|
|
641
|
-
```bash
|
|
642
|
-
bun build app.ts --outdir=dist
|
|
643
|
-
```
|
|
644
|
-
|
|
645
|
-
This means:
|
|
646
|
-
|
|
647
|
-
- Zero runtime YAML parsing overhead in production
|
|
648
|
-
- Smaller bundle sizes
|
|
649
|
-
- Tree-shaking support for unused configuration (named imports)
|
|
650
|
-
|
|
651
|
-
### Dynamic Imports
|
|
652
|
-
|
|
653
|
-
YAML files can be dynamically imported, useful for loading configuration on demand:
|
|
654
|
-
|
|
655
|
-
```ts#Load configuration based on environment
|
|
656
|
-
const env = process.env.NODE_ENV || "development";
|
|
657
|
-
const config = await import(`./configs/${env}.yaml`);
|
|
658
|
-
|
|
659
|
-
// Load user-specific settings
|
|
660
|
-
async function loadUserSettings(userId: string) {
|
|
661
|
-
try {
|
|
662
|
-
const settings = await import(`./users/${userId}/settings.yaml`);
|
|
663
|
-
return settings.default;
|
|
664
|
-
} catch {
|
|
665
|
-
return await import("./users/default-settings.yaml");
|
|
666
|
-
}
|
|
667
|
-
}
|
|
668
|
-
```
|