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.
Files changed (308) hide show
  1. package/docs/README.md +28 -0
  2. package/package.json +1 -1
  3. package/docs/api/binary-data.md +0 -1038
  4. package/docs/api/cc.md +0 -197
  5. package/docs/api/color.md +0 -262
  6. package/docs/api/console.md +0 -57
  7. package/docs/api/cookie.md +0 -449
  8. package/docs/api/dns.md +0 -110
  9. package/docs/api/fetch.md +0 -463
  10. package/docs/api/ffi.md +0 -557
  11. package/docs/api/file-io.md +0 -366
  12. package/docs/api/file-system-router.md +0 -112
  13. package/docs/api/file.md +0 -19
  14. package/docs/api/glob.md +0 -178
  15. package/docs/api/globals.md +0 -387
  16. package/docs/api/hashing.md +0 -319
  17. package/docs/api/html-rewriter.md +0 -334
  18. package/docs/api/http.md +0 -1408
  19. package/docs/api/import-meta.md +0 -69
  20. package/docs/api/node-api.md +0 -14
  21. package/docs/api/redis.md +0 -597
  22. package/docs/api/s3.md +0 -850
  23. package/docs/api/secrets.md +0 -319
  24. package/docs/api/semver.md +0 -52
  25. package/docs/api/spawn.md +0 -582
  26. package/docs/api/sql.md +0 -1374
  27. package/docs/api/sqlite.md +0 -694
  28. package/docs/api/streams.md +0 -230
  29. package/docs/api/tcp.md +0 -221
  30. package/docs/api/transpiler.md +0 -276
  31. package/docs/api/udp.md +0 -123
  32. package/docs/api/utils.md +0 -891
  33. package/docs/api/websockets.md +0 -573
  34. package/docs/api/workers.md +0 -322
  35. package/docs/api/yaml.md +0 -668
  36. package/docs/benchmarks.md +0 -120
  37. package/docs/bun-flavored-toml.md +0 -42
  38. package/docs/bundler/css.md +0 -1028
  39. package/docs/bundler/css_modules.md +0 -145
  40. package/docs/bundler/executables.md +0 -626
  41. package/docs/bundler/fullstack.md +0 -418
  42. package/docs/bundler/hmr.md +0 -234
  43. package/docs/bundler/html.md +0 -349
  44. package/docs/bundler/index.md +0 -1735
  45. package/docs/bundler/intro.md +0 -75
  46. package/docs/bundler/loaders.md +0 -410
  47. package/docs/bundler/macros.md +0 -329
  48. package/docs/bundler/plugins.md +0 -449
  49. package/docs/bundler/vs-esbuild.md +0 -1127
  50. package/docs/cli/add.md +0 -173
  51. package/docs/cli/bun-completions.md +0 -3
  52. package/docs/cli/bun-create.md +0 -338
  53. package/docs/cli/bun-install.md +0 -349
  54. package/docs/cli/bun-upgrade.md +0 -39
  55. package/docs/cli/bunx.md +0 -89
  56. package/docs/cli/filter.md +0 -90
  57. package/docs/cli/info.md +0 -65
  58. package/docs/cli/init.md +0 -85
  59. package/docs/cli/install.md +0 -344
  60. package/docs/cli/link.md +0 -40
  61. package/docs/cli/outdated.md +0 -90
  62. package/docs/cli/patch-commit.md +0 -11
  63. package/docs/cli/pm.md +0 -285
  64. package/docs/cli/publish.md +0 -120
  65. package/docs/cli/remove.md +0 -7
  66. package/docs/cli/run.md +0 -261
  67. package/docs/cli/test.md +0 -397
  68. package/docs/cli/unlink.md +0 -9
  69. package/docs/cli/update.md +0 -129
  70. package/docs/cli/why.md +0 -67
  71. package/docs/contributing/upgrading-webkit.md +0 -57
  72. package/docs/ecosystem/elysia.md +0 -24
  73. package/docs/ecosystem/express.md +0 -37
  74. package/docs/ecosystem/hono.md +0 -18
  75. package/docs/ecosystem/react.md +0 -65
  76. package/docs/ecosystem/stric.md +0 -38
  77. package/docs/guides/binary/arraybuffer-to-array.md +0 -27
  78. package/docs/guides/binary/arraybuffer-to-blob.md +0 -24
  79. package/docs/guides/binary/arraybuffer-to-buffer.md +0 -25
  80. package/docs/guides/binary/arraybuffer-to-string.md +0 -15
  81. package/docs/guides/binary/arraybuffer-to-typedarray.md +0 -39
  82. package/docs/guides/binary/blob-to-arraybuffer.md +0 -14
  83. package/docs/guides/binary/blob-to-dataview.md +0 -14
  84. package/docs/guides/binary/blob-to-stream.md +0 -14
  85. package/docs/guides/binary/blob-to-string.md +0 -15
  86. package/docs/guides/binary/blob-to-typedarray.md +0 -14
  87. package/docs/guides/binary/buffer-to-arraybuffer.md +0 -14
  88. package/docs/guides/binary/buffer-to-blob.md +0 -14
  89. package/docs/guides/binary/buffer-to-readablestream.md +0 -41
  90. package/docs/guides/binary/buffer-to-string.md +0 -25
  91. package/docs/guides/binary/buffer-to-typedarray.md +0 -14
  92. package/docs/guides/binary/dataview-to-string.md +0 -15
  93. package/docs/guides/binary/typedarray-to-arraybuffer.md +0 -25
  94. package/docs/guides/binary/typedarray-to-blob.md +0 -16
  95. package/docs/guides/binary/typedarray-to-buffer.md +0 -14
  96. package/docs/guides/binary/typedarray-to-dataview.md +0 -14
  97. package/docs/guides/binary/typedarray-to-readablestream.md +0 -41
  98. package/docs/guides/binary/typedarray-to-string.md +0 -16
  99. package/docs/guides/deployment/railway.md +0 -157
  100. package/docs/guides/ecosystem/astro.md +0 -72
  101. package/docs/guides/ecosystem/discordjs.md +0 -77
  102. package/docs/guides/ecosystem/docker.md +0 -140
  103. package/docs/guides/ecosystem/drizzle.md +0 -185
  104. package/docs/guides/ecosystem/edgedb.md +0 -228
  105. package/docs/guides/ecosystem/elysia.md +0 -31
  106. package/docs/guides/ecosystem/express.md +0 -40
  107. package/docs/guides/ecosystem/hono.md +0 -39
  108. package/docs/guides/ecosystem/mongoose.md +0 -87
  109. package/docs/guides/ecosystem/neon-drizzle.md +0 -220
  110. package/docs/guides/ecosystem/neon-serverless-postgres.md +0 -55
  111. package/docs/guides/ecosystem/nextjs.md +0 -49
  112. package/docs/guides/ecosystem/nuxt.md +0 -56
  113. package/docs/guides/ecosystem/pm2.md +0 -57
  114. package/docs/guides/ecosystem/prisma.md +0 -141
  115. package/docs/guides/ecosystem/qwik.md +0 -107
  116. package/docs/guides/ecosystem/react.md +0 -50
  117. package/docs/guides/ecosystem/remix.md +0 -78
  118. package/docs/guides/ecosystem/render.md +0 -79
  119. package/docs/guides/ecosystem/sentry.md +0 -52
  120. package/docs/guides/ecosystem/solidstart.md +0 -58
  121. package/docs/guides/ecosystem/ssr-react.md +0 -51
  122. package/docs/guides/ecosystem/stric.md +0 -55
  123. package/docs/guides/ecosystem/sveltekit.md +0 -125
  124. package/docs/guides/ecosystem/systemd.md +0 -113
  125. package/docs/guides/ecosystem/vite.md +0 -71
  126. package/docs/guides/html-rewriter/extract-links.md +0 -68
  127. package/docs/guides/html-rewriter/extract-social-meta.md +0 -93
  128. package/docs/guides/http/cluster.md +0 -66
  129. package/docs/guides/http/fetch-unix.md +0 -33
  130. package/docs/guides/http/fetch.md +0 -24
  131. package/docs/guides/http/file-uploads.md +0 -94
  132. package/docs/guides/http/hot.md +0 -26
  133. package/docs/guides/http/proxy.md +0 -24
  134. package/docs/guides/http/server.md +0 -46
  135. package/docs/guides/http/simple.md +0 -18
  136. package/docs/guides/http/stream-file.md +0 -48
  137. package/docs/guides/http/stream-iterator.md +0 -47
  138. package/docs/guides/http/stream-node-streams-in-bun.md +0 -20
  139. package/docs/guides/http/tls.md +0 -30
  140. package/docs/guides/install/add-dev.md +0 -26
  141. package/docs/guides/install/add-git.md +0 -36
  142. package/docs/guides/install/add-optional.md +0 -25
  143. package/docs/guides/install/add-peer.md +0 -43
  144. package/docs/guides/install/add-tarball.md +0 -33
  145. package/docs/guides/install/add.md +0 -42
  146. package/docs/guides/install/azure-artifacts.md +0 -73
  147. package/docs/guides/install/cicd.md +0 -41
  148. package/docs/guides/install/custom-registry.md +0 -30
  149. package/docs/guides/install/from-npm-install-to-bun-install.md +0 -214
  150. package/docs/guides/install/git-diff-bun-lockfile.md +0 -44
  151. package/docs/guides/install/jfrog-artifactory.md +0 -28
  152. package/docs/guides/install/npm-alias.md +0 -23
  153. package/docs/guides/install/registry-scope.md +0 -38
  154. package/docs/guides/install/trusted.md +0 -46
  155. package/docs/guides/install/workspaces.md +0 -70
  156. package/docs/guides/install/yarnlock.md +0 -44
  157. package/docs/guides/process/argv.md +0 -58
  158. package/docs/guides/process/ctrl-c.md +0 -16
  159. package/docs/guides/process/ipc.md +0 -66
  160. package/docs/guides/process/nanoseconds.md +0 -13
  161. package/docs/guides/process/os-signals.md +0 -39
  162. package/docs/guides/process/spawn-stderr.md +0 -31
  163. package/docs/guides/process/spawn-stdout.md +0 -26
  164. package/docs/guides/process/spawn.md +0 -41
  165. package/docs/guides/process/stdin.md +0 -54
  166. package/docs/guides/read-file/arraybuffer.md +0 -28
  167. package/docs/guides/read-file/buffer.md +0 -19
  168. package/docs/guides/read-file/exists.md +0 -16
  169. package/docs/guides/read-file/json.md +0 -17
  170. package/docs/guides/read-file/mime.md +0 -20
  171. package/docs/guides/read-file/stream.md +0 -26
  172. package/docs/guides/read-file/string.md +0 -22
  173. package/docs/guides/read-file/uint8array.md +0 -21
  174. package/docs/guides/read-file/watch.md +0 -68
  175. package/docs/guides/runtime/build-time-constants.md +0 -293
  176. package/docs/guides/runtime/cicd.md +0 -43
  177. package/docs/guides/runtime/codesign-macos-executable.md +0 -56
  178. package/docs/guides/runtime/define-constant.md +0 -145
  179. package/docs/guides/runtime/delete-directory.md +0 -37
  180. package/docs/guides/runtime/delete-file.md +0 -19
  181. package/docs/guides/runtime/heap-snapshot.md +0 -26
  182. package/docs/guides/runtime/import-html.md +0 -15
  183. package/docs/guides/runtime/import-json.md +0 -44
  184. package/docs/guides/runtime/import-toml.md +0 -30
  185. package/docs/guides/runtime/import-yaml.md +0 -102
  186. package/docs/guides/runtime/read-env.md +0 -32
  187. package/docs/guides/runtime/set-env.md +0 -47
  188. package/docs/guides/runtime/shell.md +0 -40
  189. package/docs/guides/runtime/timezone.md +0 -35
  190. package/docs/guides/runtime/tsconfig-paths.md +0 -29
  191. package/docs/guides/runtime/typescript.md +0 -49
  192. package/docs/guides/runtime/vscode-debugger.md +0 -47
  193. package/docs/guides/runtime/web-debugger.md +0 -82
  194. package/docs/guides/streams/node-readable-to-arraybuffer.md +0 -11
  195. package/docs/guides/streams/node-readable-to-blob.md +0 -11
  196. package/docs/guides/streams/node-readable-to-json.md +0 -12
  197. package/docs/guides/streams/node-readable-to-string.md +0 -12
  198. package/docs/guides/streams/node-readable-to-uint8array.md +0 -11
  199. package/docs/guides/streams/to-array.md +0 -14
  200. package/docs/guides/streams/to-arraybuffer.md +0 -14
  201. package/docs/guides/streams/to-blob.md +0 -14
  202. package/docs/guides/streams/to-buffer.md +0 -15
  203. package/docs/guides/streams/to-json.md +0 -14
  204. package/docs/guides/streams/to-string.md +0 -14
  205. package/docs/guides/streams/to-typedarray.md +0 -22
  206. package/docs/guides/test/bail.md +0 -22
  207. package/docs/guides/test/coverage-threshold.md +0 -60
  208. package/docs/guides/test/coverage.md +0 -44
  209. package/docs/guides/test/happy-dom.md +0 -68
  210. package/docs/guides/test/migrate-from-jest.md +0 -143
  211. package/docs/guides/test/mock-clock.md +0 -48
  212. package/docs/guides/test/mock-functions.md +0 -68
  213. package/docs/guides/test/rerun-each.md +0 -14
  214. package/docs/guides/test/run-tests.md +0 -111
  215. package/docs/guides/test/skip-tests.md +0 -39
  216. package/docs/guides/test/snapshot.md +0 -95
  217. package/docs/guides/test/spy-on.md +0 -46
  218. package/docs/guides/test/svelte-test.md +0 -120
  219. package/docs/guides/test/testing-library.md +0 -92
  220. package/docs/guides/test/timeout.md +0 -15
  221. package/docs/guides/test/todo-tests.md +0 -67
  222. package/docs/guides/test/update-snapshots.md +0 -46
  223. package/docs/guides/test/watch-mode.md +0 -19
  224. package/docs/guides/util/base64.md +0 -15
  225. package/docs/guides/util/deep-equals.md +0 -39
  226. package/docs/guides/util/deflate.md +0 -18
  227. package/docs/guides/util/detect-bun.md +0 -23
  228. package/docs/guides/util/entrypoint.md +0 -17
  229. package/docs/guides/util/escape-html.md +0 -22
  230. package/docs/guides/util/file-url-to-path.md +0 -14
  231. package/docs/guides/util/gzip.md +0 -18
  232. package/docs/guides/util/hash-a-password.md +0 -54
  233. package/docs/guides/util/import-meta-dir.md +0 -13
  234. package/docs/guides/util/import-meta-file.md +0 -13
  235. package/docs/guides/util/import-meta-path.md +0 -13
  236. package/docs/guides/util/javascript-uuid.md +0 -23
  237. package/docs/guides/util/main.md +0 -32
  238. package/docs/guides/util/path-to-file-url.md +0 -14
  239. package/docs/guides/util/sleep.md +0 -22
  240. package/docs/guides/util/version.md +0 -21
  241. package/docs/guides/util/which-path-to-executable-bin.md +0 -15
  242. package/docs/guides/websocket/compression.md +0 -31
  243. package/docs/guides/websocket/context.md +0 -77
  244. package/docs/guides/websocket/pubsub.md +0 -41
  245. package/docs/guides/websocket/simple.md +0 -33
  246. package/docs/guides/write-file/append.md +0 -52
  247. package/docs/guides/write-file/basic.md +0 -44
  248. package/docs/guides/write-file/blob.md +0 -28
  249. package/docs/guides/write-file/cat.md +0 -17
  250. package/docs/guides/write-file/file-cp.md +0 -16
  251. package/docs/guides/write-file/filesink.md +0 -52
  252. package/docs/guides/write-file/response.md +0 -17
  253. package/docs/guides/write-file/stdout.md +0 -21
  254. package/docs/guides/write-file/stream.md +0 -17
  255. package/docs/guides/write-file/unlink.md +0 -16
  256. package/docs/index.md +0 -77
  257. package/docs/install/audit.md +0 -57
  258. package/docs/install/cache.md +0 -59
  259. package/docs/install/catalogs.md +0 -298
  260. package/docs/install/index.md +0 -248
  261. package/docs/install/isolated.md +0 -197
  262. package/docs/install/lifecycle.md +0 -46
  263. package/docs/install/lockfile.md +0 -58
  264. package/docs/install/npmrc.md +0 -105
  265. package/docs/install/overrides.md +0 -73
  266. package/docs/install/patch.md +0 -59
  267. package/docs/install/registries.md +0 -30
  268. package/docs/install/security-scanner-api.md +0 -81
  269. package/docs/install/workspaces.md +0 -114
  270. package/docs/installation.md +0 -327
  271. package/docs/project/asan.md +0 -124
  272. package/docs/project/benchmarking.md +0 -203
  273. package/docs/project/bindgen.md +0 -225
  274. package/docs/project/building-windows.md +0 -162
  275. package/docs/project/contributing.md +0 -347
  276. package/docs/project/internals/build-process-for-ci.md +0 -75
  277. package/docs/project/licensing.md +0 -73
  278. package/docs/project/roadmap.md +0 -87
  279. package/docs/quickstart.md +0 -157
  280. package/docs/runtime/autoimport.md +0 -94
  281. package/docs/runtime/bun-apis.md +0 -207
  282. package/docs/runtime/bunfig.md +0 -772
  283. package/docs/runtime/debugger.md +0 -325
  284. package/docs/runtime/env.md +0 -253
  285. package/docs/runtime/hot.md +0 -145
  286. package/docs/runtime/index.md +0 -312
  287. package/docs/runtime/jsx.md +0 -385
  288. package/docs/runtime/loaders.md +0 -130
  289. package/docs/runtime/modules.md +0 -320
  290. package/docs/runtime/nodejs-apis.md +0 -463
  291. package/docs/runtime/plugins.md +0 -561
  292. package/docs/runtime/shell.md +0 -605
  293. package/docs/runtime/typescript.md +0 -139
  294. package/docs/runtime/web-apis.md +0 -128
  295. package/docs/test/configuration.md +0 -154
  296. package/docs/test/coverage.md +0 -142
  297. package/docs/test/discovery.md +0 -85
  298. package/docs/test/dom.md +0 -75
  299. package/docs/test/examples/concurrent-test-glob.md +0 -132
  300. package/docs/test/hot.md +0 -15
  301. package/docs/test/lifecycle.md +0 -81
  302. package/docs/test/mocks.md +0 -313
  303. package/docs/test/reporters.md +0 -117
  304. package/docs/test/runtime-behavior.md +0 -95
  305. package/docs/test/snapshots.md +0 -68
  306. package/docs/test/time.md +0 -126
  307. package/docs/test/writing.md +0 -825
  308. 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
- ```