bun-types 1.3.2-canary.20251104T140728 → 1.3.2-canary.20251106T140813

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