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
@@ -1,293 +0,0 @@
1
- ---
2
- name: Build-time constants with --define
3
- ---
4
-
5
- The `--define` flag can be used with `bun build` and `bun build --compile` to inject build-time constants into your application. This is especially useful for embedding metadata like build versions, timestamps, or configuration flags directly into your compiled executables.
6
-
7
- ```sh
8
- $ bun build --compile --define BUILD_VERSION='"1.2.3"' --define BUILD_TIME='"2024-01-15T10:30:00Z"' src/index.ts --outfile myapp
9
- ```
10
-
11
- ---
12
-
13
- ## Why use build-time constants?
14
-
15
- Build-time constants are embedded directly into your compiled code, making them:
16
-
17
- - **Zero runtime overhead** - No environment variable lookups or file reads
18
- - **Immutable** - Values are baked into the binary at compile time
19
- - **Optimizable** - Dead code elimination can remove unused branches
20
- - **Secure** - No external dependencies or configuration files to manage
21
-
22
- This is similar to `gcc -D` or `#define` in C/C++, but for JavaScript/TypeScript.
23
-
24
- ---
25
-
26
- ## Basic usage
27
-
28
- ### With `bun build`
29
-
30
- ```sh
31
- # Bundle with build-time constants
32
- $ bun build --define BUILD_VERSION='"1.0.0"' --define NODE_ENV='"production"' src/index.ts --outdir ./dist
33
- ```
34
-
35
- ### With `bun build --compile`
36
-
37
- ```sh
38
- # Compile to executable with build-time constants
39
- $ bun build --compile --define BUILD_VERSION='"1.0.0"' --define BUILD_TIME='"2024-01-15T10:30:00Z"' src/cli.ts --outfile mycli
40
- ```
41
-
42
- ### JavaScript API
43
-
44
- ```ts
45
- await Bun.build({
46
- entrypoints: ["./src/index.ts"],
47
- outdir: "./dist",
48
- define: {
49
- BUILD_VERSION: '"1.0.0"',
50
- BUILD_TIME: '"2024-01-15T10:30:00Z"',
51
- DEBUG: "false",
52
- },
53
- });
54
- ```
55
-
56
- ---
57
-
58
- ## Common use cases
59
-
60
- ### Version information
61
-
62
- Embed version and build metadata directly into your executable:
63
-
64
- {% codetabs %}
65
-
66
- ```ts#src/version.ts
67
- // These constants are replaced at build time
68
- declare const BUILD_VERSION: string;
69
- declare const BUILD_TIME: string;
70
- declare const GIT_COMMIT: string;
71
-
72
- export function getVersion() {
73
- return {
74
- version: BUILD_VERSION,
75
- buildTime: BUILD_TIME,
76
- commit: GIT_COMMIT,
77
- };
78
- }
79
- ```
80
-
81
- ```sh#Build command
82
- $ bun build --compile \
83
- --define BUILD_VERSION='"1.2.3"' \
84
- --define BUILD_TIME='"2024-01-15T10:30:00Z"' \
85
- --define GIT_COMMIT='"abc123"' \
86
- src/cli.ts --outfile mycli
87
- ```
88
-
89
- {% /codetabs %}
90
-
91
- ### Feature flags
92
-
93
- Use build-time constants to enable/disable features:
94
-
95
- ```ts
96
- // Replaced at build time
97
- declare const ENABLE_ANALYTICS: boolean;
98
- declare const ENABLE_DEBUG: boolean;
99
-
100
- function trackEvent(event: string) {
101
- if (ENABLE_ANALYTICS) {
102
- // This entire block is removed if ENABLE_ANALYTICS is false
103
- console.log("Tracking:", event);
104
- }
105
- }
106
-
107
- if (ENABLE_DEBUG) {
108
- console.log("Debug mode enabled");
109
- }
110
- ```
111
-
112
- ```sh
113
- # Production build - analytics enabled, debug disabled
114
- $ bun build --compile --define ENABLE_ANALYTICS=true --define ENABLE_DEBUG=false src/app.ts --outfile app-prod
115
-
116
- # Development build - both enabled
117
- $ bun build --compile --define ENABLE_ANALYTICS=false --define ENABLE_DEBUG=true src/app.ts --outfile app-dev
118
- ```
119
-
120
- ### Configuration
121
-
122
- Replace configuration objects at build time:
123
-
124
- ```ts
125
- declare const CONFIG: {
126
- apiUrl: string;
127
- timeout: number;
128
- retries: number;
129
- };
130
-
131
- // CONFIG is replaced with the actual object at build time
132
- const response = await fetch(CONFIG.apiUrl, {
133
- timeout: CONFIG.timeout,
134
- });
135
- ```
136
-
137
- ```sh
138
- $ bun build --compile --define 'CONFIG={"apiUrl":"https://api.example.com","timeout":5000,"retries":3}' src/app.ts --outfile app
139
- ```
140
-
141
- ---
142
-
143
- ## Advanced patterns
144
-
145
- ### Environment-specific builds
146
-
147
- Create different executables for different environments:
148
-
149
- ```json
150
- {
151
- "scripts": {
152
- "build:dev": "bun build --compile --define NODE_ENV='\"development\"' --define API_URL='\"http://localhost:3000\"' src/app.ts --outfile app-dev",
153
- "build:staging": "bun build --compile --define NODE_ENV='\"staging\"' --define API_URL='\"https://staging.example.com\"' src/app.ts --outfile app-staging",
154
- "build:prod": "bun build --compile --define NODE_ENV='\"production\"' --define API_URL='\"https://api.example.com\"' src/app.ts --outfile app-prod"
155
- }
156
- }
157
- ```
158
-
159
- ### Using shell commands for dynamic values
160
-
161
- Generate build-time constants from shell commands:
162
-
163
- ```sh
164
- # Use git to get current commit and timestamp
165
- $ bun build --compile \
166
- --define BUILD_VERSION="\"$(git describe --tags --always)\"" \
167
- --define BUILD_TIME="\"$(date -u +%Y-%m-%dT%H:%M:%SZ)\"" \
168
- --define GIT_COMMIT="\"$(git rev-parse HEAD)\"" \
169
- src/cli.ts --outfile mycli
170
- ```
171
-
172
- ### Build automation script
173
-
174
- Create a build script that automatically injects build metadata:
175
-
176
- ```ts
177
- // build.ts
178
- import { $ } from "bun";
179
-
180
- const version = await $`git describe --tags --always`.text();
181
- const buildTime = new Date().toISOString();
182
- const gitCommit = await $`git rev-parse HEAD`.text();
183
-
184
- await Bun.build({
185
- entrypoints: ["./src/cli.ts"],
186
- outdir: "./dist",
187
- define: {
188
- BUILD_VERSION: JSON.stringify(version.trim()),
189
- BUILD_TIME: JSON.stringify(buildTime),
190
- GIT_COMMIT: JSON.stringify(gitCommit.trim()),
191
- },
192
- });
193
-
194
- console.log(`Built with version ${version.trim()}`);
195
- ```
196
-
197
- ---
198
-
199
- ## Important considerations
200
-
201
- ### Value format
202
-
203
- Values must be valid JSON that will be parsed and inlined as JavaScript expressions:
204
-
205
- ```sh
206
- # ✅ Strings must be JSON-quoted
207
- --define VERSION='"1.0.0"'
208
-
209
- # ✅ Numbers are JSON literals
210
- --define PORT=3000
211
-
212
- # ✅ Booleans are JSON literals
213
- --define DEBUG=true
214
-
215
- # ✅ Objects and arrays (use single quotes to wrap the JSON)
216
- --define 'CONFIG={"host":"localhost","port":3000}'
217
-
218
- # ✅ Arrays work too
219
- --define 'FEATURES=["auth","billing","analytics"]'
220
-
221
- # ❌ This won't work - missing quotes around string
222
- --define VERSION=1.0.0
223
- ```
224
-
225
- ### Property keys
226
-
227
- You can use property access patterns as keys, not just simple identifiers:
228
-
229
- ```sh
230
- # ✅ Replace process.env.NODE_ENV with "production"
231
- --define 'process.env.NODE_ENV="production"'
232
-
233
- # ✅ Replace process.env.API_KEY with the actual key
234
- --define 'process.env.API_KEY="abc123"'
235
-
236
- # ✅ Replace nested properties
237
- --define 'window.myApp.version="1.0.0"'
238
-
239
- # ✅ Replace array access
240
- --define 'process.argv[2]="--production"'
241
- ```
242
-
243
- This is particularly useful for environment variables:
244
-
245
- ```ts
246
- // Before compilation
247
- if (process.env.NODE_ENV === "production") {
248
- console.log("Production mode");
249
- }
250
-
251
- // After compilation with --define 'process.env.NODE_ENV="production"'
252
- if ("production" === "production") {
253
- console.log("Production mode");
254
- }
255
-
256
- // After optimization
257
- console.log("Production mode");
258
- ```
259
-
260
- ### TypeScript declarations
261
-
262
- For TypeScript projects, declare your constants to avoid type errors:
263
-
264
- ```ts
265
- // types/build-constants.d.ts
266
- declare const BUILD_VERSION: string;
267
- declare const BUILD_TIME: string;
268
- declare const NODE_ENV: "development" | "staging" | "production";
269
- declare const DEBUG: boolean;
270
- ```
271
-
272
- ### Cross-platform compatibility
273
-
274
- When building for multiple platforms, constants work the same way:
275
-
276
- ```sh
277
- # Linux
278
- $ bun build --compile --target=bun-linux-x64 --define PLATFORM='"linux"' src/app.ts --outfile app-linux
279
-
280
- # macOS
281
- $ bun build --compile --target=bun-darwin-x64 --define PLATFORM='"darwin"' src/app.ts --outfile app-macos
282
-
283
- # Windows
284
- $ bun build --compile --target=bun-windows-x64 --define PLATFORM='"windows"' src/app.ts --outfile app-windows.exe
285
- ```
286
-
287
- ---
288
-
289
- ## Related
290
-
291
- - [Define constants at runtime](/guides/runtime/define-constant) - Using `--define` with `bun run`
292
- - [Building executables](/bundler/executables) - Complete guide to `bun build --compile`
293
- - [Bundler API](/bundler) - Full bundler documentation including `define` option
@@ -1,43 +0,0 @@
1
- ---
2
- name: Install and run Bun in GitHub Actions
3
- ---
4
-
5
- Use the official [`setup-bun`](https://github.com/oven-sh/setup-bun) GitHub Action to install `bun` in your GitHub Actions runner.
6
-
7
- ```yaml-diff#workflow.yml
8
- name: my-workflow
9
- jobs:
10
- my-job:
11
- name: my-job
12
- runs-on: ubuntu-latest
13
- steps:
14
- # ...
15
- - uses: actions/checkout@v4
16
- + - uses: oven-sh/setup-bun@v2
17
-
18
- # run any `bun` or `bunx` command
19
- + - run: bun install
20
- + - run: bun index.ts
21
- + - run: bun run build
22
- ```
23
-
24
- ---
25
-
26
- To specify a version of Bun to install:
27
-
28
- ```yaml-diff#workflow.yml
29
- name: my-workflow
30
- jobs:
31
- my-job:
32
- name: my-job
33
- runs-on: ubuntu-latest
34
- steps:
35
- # ...
36
- - uses: oven-sh/setup-bun@v2
37
- + with:
38
- + bun-version: 1.2.0 # or "latest", "canary", <sha>
39
- ```
40
-
41
- ---
42
-
43
- Refer to the [README.md](https://github.com/oven-sh/setup-bun) for complete documentation of the `setup-bun` GitHub Action.
@@ -1,56 +0,0 @@
1
- ---
2
- name: Codesign a single-file JavaScript executable on macOS
3
- description: Fix the "can't be opened because it is from an unidentified developer" Gatekeeper warning when running your JavaScript executable.
4
- ---
5
-
6
- Compile your executable using the `--compile` flag.
7
-
8
- ```sh
9
- $ bun build --compile ./path/to/entry.ts --outfile myapp
10
- ```
11
-
12
- ---
13
-
14
- List your available signing identities. One of these will be your signing identity that you pass to the `codesign` command. This command requires macOS.
15
-
16
- ```sh
17
- $ security find-identity -v -p codesigning
18
- 1. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX "Developer ID Application: Your Name (ZZZZZZZZZZ)"
19
- 1 valid identities found
20
- ```
21
-
22
- ---
23
-
24
- Optional, but recommended: create an `entitlements.plist` file with the necessary permissions for the JavaScript engine to work correctly.
25
-
26
- ```xml#entitlements.plist
27
- <?xml version="1.0" encoding="UTF-8"?>
28
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
29
- <plist version="1.0">
30
- <dict>
31
- <key>com.apple.security.cs.allow-jit</key>
32
- <true/>
33
- <key>com.apple.security.cs.allow-unsigned-executable-memory</key>
34
- <true/>
35
- <key>com.apple.security.cs.disable-executable-page-protection</key>
36
- <true/>
37
- <key>com.apple.security.cs.allow-dyld-environment-variables</key>
38
- <true/>
39
- <key>com.apple.security.cs.disable-library-validation</key>
40
- <true/>
41
- </dict>
42
- </plist>
43
- ```
44
-
45
- ---
46
-
47
- Sign your executable using the `codesign` command and verify it works.
48
-
49
- ```bash
50
- $ codesign --entitlements entitlements.plist -vvvv --deep --sign "XXXXXXXXXX" ./myapp --force
51
- $ codesign -vvv --verify ./myapp
52
- ```
53
-
54
- ---
55
-
56
- For more information on macOS codesigning, refer to [Apple's Code Signing documentation](https://developer.apple.com/documentation/security/code_signing_services). For details about creating single-file executables with Bun, see [Standalone Executables](/docs/bundler/executables). This guide requires Bun v1.2.4 or newer.
@@ -1,145 +0,0 @@
1
- ---
2
- name: Define and replace static globals & constants
3
- ---
4
-
5
- The `--define` flag lets you declare statically-analyzable constants and globals. It replace all usages of an identifier or property in a JavaScript or TypeScript file with a constant value. This feature is supported at runtime and also in `bun build`. This is sort of similar to `#define` in C/C++, except for JavaScript.
6
-
7
- ```sh
8
- $ bun --define process.env.NODE_ENV="'production'" src/index.ts # Runtime
9
- $ bun build --define process.env.NODE_ENV="'production'" src/index.ts # Build
10
- ```
11
-
12
- ---
13
-
14
- These statically-known values are used by Bun for dead code elimination and other optimizations.
15
-
16
- ```ts
17
- if (process.env.NODE_ENV === "production") {
18
- console.log("Production mode");
19
- } else {
20
- console.log("Development mode");
21
- }
22
- ```
23
-
24
- ---
25
-
26
- Before the code reaches the JavaScript engine, Bun replaces `process.env.NODE_ENV` with `"production"`.
27
-
28
- ```ts-diff
29
- + if ("production" === "production") {
30
- console.log("Production mode");
31
- } else {
32
- console.log("Development mode");
33
- }
34
- ```
35
-
36
- ---
37
-
38
- It doesn't stop there. Bun's optimizing transpiler is smart enough to do some basic constant folding.
39
-
40
- Since `"production" === "production"` is always `true`, Bun replaces the entire expression with the `true` value.
41
-
42
- ```ts-diff
43
- + if (true) {
44
- console.log("Production mode");
45
- } else {
46
- console.log("Development mode");
47
- }
48
- ```
49
-
50
- ---
51
-
52
- And finally, Bun detects the `else` branch is not reachable, and eliminates it.
53
-
54
- ```ts
55
- console.log("Production mode");
56
- ```
57
-
58
- ---
59
-
60
- ## What types of values are supported?
61
-
62
- Values can be strings, identifiers, properties, or JSON.
63
-
64
- ### Replace global identifiers
65
-
66
- To make all usages of `window` be `undefined`, you can use the following command.
67
-
68
- ```sh
69
- bun --define window="undefined" src/index.ts
70
- ```
71
-
72
- This can be useful when Server-Side Rendering (SSR) or when you want to make sure that the code doesn't depend on the `window` object.
73
-
74
- ```js
75
- if (typeof window !== "undefined") {
76
- console.log("Client-side code");
77
- } else {
78
- console.log("Server-side code");
79
- }
80
- ```
81
-
82
- You can also set the value to be another identifier. For example, to make all usages of `global` be `globalThis`, you can use the following command.
83
-
84
- ```sh
85
- bun --define global="globalThis" src/index.ts
86
- ```
87
-
88
- `global` is a global object in Node.js, but not in web browsers. So, you can use this to fix some cases where the code assumes that `global` is available.
89
-
90
- ### Replace values with JSON
91
-
92
- `--define` can also be used to replace values with JSON objects and arrays.
93
-
94
- To replace all usages of `AWS` with the JSON object `{"ACCESS_KEY":"abc","SECRET_KEY":"def"}`, you can use the following command.
95
-
96
- ```sh
97
- # JSON
98
- bun --define AWS='{"ACCESS_KEY":"abc","SECRET_KEY":"def"}' src/index.ts
99
- ```
100
-
101
- Those will be transformed into the equivalent JavaScript code.
102
-
103
- From:
104
-
105
- ```ts
106
- console.log(AWS.ACCESS_KEY); // => "abc"
107
- ```
108
-
109
- To:
110
-
111
- ```ts
112
- console.log("abc");
113
- ```
114
-
115
- ### Replace values with other properties
116
-
117
- You can also pass properties to the `--define` flag.
118
-
119
- For example, to replace all usages of `console.write` with `console.log`, you can use the following command (requires Bun v1.1.5 or later)
120
-
121
- ```sh
122
- bun --define console.write=console.log src/index.ts
123
- ```
124
-
125
- That transforms the following input:
126
-
127
- ```ts
128
- console.write("Hello, world!");
129
- ```
130
-
131
- Into the following output:
132
-
133
- ```ts
134
- console.log("Hello, world!");
135
- ```
136
-
137
- ## How is this different than setting a variable?
138
-
139
- You can also set `process.env.NODE_ENV` to `"production"` in your code, but that won't help with dead code elimination. In JavaScript, property accesses can have side effects. Getters & setters can be functions, and even dynamically defined (due to prototype chains and Proxy). Even if you set `process.env.NODE_ENV` to `"production"`, on the next line, it is not safe for static analysis tools to assume that `process.env.NODE_ENV`is`"production"`.
140
-
141
- ## How is this different than find-and-replace or string replacement?
142
-
143
- The `--define` flag operates on the AST (Abstract Syntax Tree) level, not on the text level. It happens during the transpilation process, which means it can be used in optimizations like dead code elimination.
144
-
145
- String replacement tools tend to have escaping issues and replace unintended parts of the code.
@@ -1,37 +0,0 @@
1
- ---
2
- name: Delete directories
3
- ---
4
-
5
- To recursively delete a directory and all its contents, use `rm` from `node:fs/promises`. This is like running `rm -rf` in JavaScript.
6
-
7
- ```ts
8
- import { rm } from "node:fs/promises";
9
-
10
- // Delete a directory and all its contents
11
- await rm("path/to/directory", { recursive: true, force: true });
12
- ```
13
-
14
- ---
15
-
16
- These options configure the deletion behavior:
17
-
18
- - `recursive: true` - Delete subdirectories and their contents
19
- - `force: true` - Don't throw errors if the directory doesn't exist
20
-
21
- You can also use it without `force` to ensure the directory exists:
22
-
23
- ```ts
24
- try {
25
- await rm("path/to/directory", { recursive: true });
26
- } catch (error) {
27
- if (error.code === "ENOENT") {
28
- console.log("Directory doesn't exist");
29
- } else {
30
- throw error;
31
- }
32
- }
33
- ```
34
-
35
- ---
36
-
37
- See [Docs > API > FileSystem](https://bun.com/docs/api/file-io) for more filesystem operations.
@@ -1,19 +0,0 @@
1
- ---
2
- name: Delete files
3
- ---
4
-
5
- To delete a file, use `Bun.file(path).delete()`.
6
-
7
- ```ts
8
- // Delete a file
9
- const file = Bun.file("path/to/file.txt");
10
- await file.delete();
11
-
12
- // Now the file doesn't exist
13
- const exists = await file.exists();
14
- // => false
15
- ```
16
-
17
- ---
18
-
19
- See [Docs > API > FileSystem](https://bun.com/docs/api/file-io) for more filesystem operations.
@@ -1,26 +0,0 @@
1
- ---
2
- name: Inspect memory usage using V8 heap snapshots
3
- ---
4
-
5
- Bun implements V8's heap snapshot API, which allows you to create snapshots of the heap at runtime. This helps debug memory leaks in your JavaScript/TypeScript application.
6
-
7
- ```ts#snapshot.ts
8
- import v8 from "node:v8";
9
-
10
- // Creates a heap snapshot file with an auto-generated name
11
- const snapshotPath = v8.writeHeapSnapshot();
12
- console.log(`Heap snapshot written to: ${snapshotPath}`);
13
- ```
14
-
15
- ---
16
-
17
- ## Inspect memory in Chrome DevTools
18
-
19
- To view V8 heap snapshots in Chrome DevTools:
20
-
21
- 1. Open Chrome DevTools (F12 or right-click and select "Inspect")
22
- 2. Go to the "Memory" tab
23
- 3. Click the "Load" button (folder icon)
24
- 4. Select your `.heapsnapshot` file
25
-
26
- {% image src="/images/chrome-devtools-memory.png" alt="Chrome DevTools Memory Tab" width="100%" /%}
@@ -1,15 +0,0 @@
1
- ---
2
- name: Import a HTML file as text
3
- ---
4
-
5
- To import a `.html` file in Bun as a text file, use the `type: "text"` attribute in the import statement.
6
-
7
- ```ts
8
- import html from "./file.html" with { type: "text" };
9
-
10
- console.log(html); // <!DOCTYPE html><html><head>...
11
- ```
12
-
13
- This can also be used with hot module reloading and/or watch mode to force Bun to reload whenever the `./file.html` file changes.
14
-
15
- This feature was added in Bun v1.1.5.
@@ -1,44 +0,0 @@
1
- ---
2
- name: Import a JSON file
3
- ---
4
-
5
- Bun natively supports `.json` imports.
6
-
7
- ```json#package.json
8
- {
9
- "name": "bun",
10
- "version": "1.0.0",
11
- "author": {
12
- "name": "John Dough",
13
- "email": "john@dough.com"
14
- }
15
- }
16
- ```
17
-
18
- ---
19
-
20
- Import the file like any other source file.
21
-
22
- ```ts
23
- import data from "./package.json";
24
-
25
- data.name; // => "bun"
26
- data.version; // => "1.0.0"
27
- data.author.name; // => "John Dough"
28
- ```
29
-
30
- ---
31
-
32
- Bun also supports [Import Attributes](https://github.com/tc39/proposal-import-attributes/) and [JSON modules](https://github.com/tc39/proposal-json-modules) syntax.
33
-
34
- ```ts
35
- import data from "./package.json" with { type: "json" };
36
-
37
- data.name; // => "bun"
38
- data.version; // => "1.0.0"
39
- data.author.name; // => "John Dough"
40
- ```
41
-
42
- ---
43
-
44
- See [Docs > Runtime > TypeScript](https://bun.com/docs/runtime/typescript) for more information on using TypeScript with Bun.