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
@@ -1,124 +0,0 @@
1
- # ASAN Builds for Bun
2
-
3
- This document explains how to use and configure ASAN (Address Sanitizer) builds for Bun.
4
-
5
- > **Note**: ASAN builds are available in CI for Linux and are configured to help identify memory issues in release builds.
6
-
7
- ## What is ASAN?
8
-
9
- ASAN (Address Sanitizer) is a memory error detector for C/C++ and Zig code. It can detect:
10
-
11
- - Use-after-free
12
- - Heap buffer overflow
13
- - Stack buffer overflow
14
- - Global buffer overflow
15
- - Use-after-return
16
- - Use-after-scope
17
- - Initialization order bugs
18
- - Memory leaks
19
-
20
- ## ASAN Builds in CI
21
-
22
- Bun CI includes ASAN builds to catch memory errors. These builds are configured with:
23
-
24
- - Release optimizations for speed
25
- - ASAN instrumentation for memory error detection
26
- - Assertions enabled for both Bun and WebKit
27
-
28
- The CI pipeline automatically:
29
-
30
- - Builds a special ASAN-enabled release build for Linux
31
- - Runs all tests to thoroughly check for memory issues
32
- - Uses reduced parallelism to avoid memory pressure during testing
33
- - Applies suppressions for known false positives
34
- - Extends test timeouts to accommodate ASAN overhead
35
- - Includes ASAN builds in release artifacts for debugging purposes
36
-
37
- ## Local ASAN Builds
38
-
39
- To build Bun with ASAN locally, you can use the npm script:
40
-
41
- ```bash
42
- # Build a release build with ASAN and assertions (recommended)
43
- bun run build:asan
44
- ```
45
-
46
- Or manually with CMake:
47
-
48
- ```bash
49
- # Debug build with ASAN
50
- cmake -B build -DCMAKE_BUILD_TYPE=Debug -DENABLE_ASAN=ON
51
-
52
- # Release build with ASAN
53
- cmake -B build -DCMAKE_BUILD_TYPE=Release -DENABLE_ASAN=ON
54
-
55
- # Release build with ASAN and assertions
56
- cmake -B build -DCMAKE_BUILD_TYPE=Release -DENABLE_ASAN=ON -DENABLE_ASSERTIONS=ON
57
- ```
58
-
59
- ## Running with ASAN
60
-
61
- When running an ASAN build, you can configure behavior with environment variables:
62
-
63
- ```bash
64
- # Basic ASAN options - leak detection disabled (recommended)
65
- ASAN_OPTIONS=detect_leaks=0:halt_on_error=0:detect_odr_violation=0 ./build/bun-asan
66
-
67
- # If you really need leak detection (will produce A LOT of noise)
68
- # ASAN_OPTIONS=detect_leaks=1:leak_check_at_exit=1:halt_on_error=0 ./build/bun-asan
69
- # LSAN_OPTIONS=suppressions=lsan.supp:print_suppressions=1 ./build/bun-asan
70
- ```
71
-
72
- > **Warning**: Enabling leak detection will generate excessive noise due to deliberately uncollected memory in WebKit and other components. It's recommended to keep leak detection disabled and focus on other memory errors like use-after-free, buffer overflows, etc.
73
-
74
- ## Other Memory Error Types
75
-
76
- ASAN can detect several types of memory errors:
77
-
78
- 1. **Use-after-free**: When a program continues to use memory after it's been freed
79
- 2. **Buffer overflow**: When a program writes beyond the bounds of allocated memory
80
- 3. **Stack overflow**: When a function's stack usage exceeds available space
81
- 4. **Memory corruption**: Often caused by writing to invalid memory locations
82
- 5. **Use-after-return**: When a function returns a pointer to stack memory that's no longer valid
83
-
84
- When an error is detected, ASAN will print a helpful report showing:
85
-
86
- - The type of error
87
- - The memory address where the error occurred
88
- - A stack trace showing the code path that led to the error
89
- - Information about the memory allocation/deallocation (if relevant)
90
-
91
- Example error output:
92
-
93
- ```
94
- ==1234==ERROR: AddressSanitizer: heap-use-after-free on address 0x614000000044 at pc 0x55d8e2ac1f14...
95
- READ of size 4 at 0x614000000044 thread T0
96
- #0 0x55d8e2ac1f14 in main example.c:10
97
- #1 0x7f91e6f5e0b2 in __libc_start_main...
98
- ```
99
-
100
- ## Understanding ASAN Reports
101
-
102
- ASAN reports contain detailed information about memory errors:
103
-
104
- ```
105
- ==12345==ERROR: AddressSanitizer: heap-use-after-free on address 0x7f7ddab8c084
106
- READ of size 4 at 0x7f7ddab8c084 thread T0
107
- #0 0x43b45a in Function source/file.cpp:123:45
108
- #1 0x44af90 in AnotherFunction source/file.cpp:234:10
109
- ...
110
- ```
111
-
112
- Key components of the report:
113
-
114
- - Error type (heap-use-after-free, heap-buffer-overflow, etc.)
115
- - Operation (READ/WRITE) and size
116
- - Stack trace showing where the error occurred
117
- - Information about the allocated/freed memory
118
-
119
- ## Best Practices
120
-
121
- 1. Run tests with ASAN builds regularly
122
- 2. Add suppressions only for well-understood false positives
123
- 3. Fix real issues promptly - ASAN errors indicate real problems
124
- 4. Consider using ASAN in debug builds during development
@@ -1,203 +0,0 @@
1
- Bun is designed for speed. Hot paths are extensively profiled and benchmarked. The source code for all of Bun's public benchmarks can be found in the [`/bench`](https://github.com/oven-sh/bun/tree/main/bench) directory of the Bun repo.
2
-
3
- ## Measuring time
4
-
5
- To precisely measure time, Bun offers two runtime APIs functions:
6
-
7
- 1. The Web-standard [`performance.now()`](https://developer.mozilla.org/en-US/docs/Web/API/Performance/now) function
8
- 2. `Bun.nanoseconds()` which is similar to `performance.now()` except it returns the current time since the application started in nanoseconds. You can use `performance.timeOrigin` to convert this to a Unix timestamp.
9
-
10
- ## Benchmarking tools
11
-
12
- When writing your own benchmarks, it's important to choose the right tool.
13
-
14
- - For microbenchmarks, a great general-purpose tool is [`mitata`](https://github.com/evanwashere/mitata).
15
- - For load testing, you _must use_ an HTTP benchmarking tool that is at least as fast as `Bun.serve()`, or your results will be skewed. Some popular Node.js-based benchmarking tools like [`autocannon`](https://github.com/mcollina/autocannon) are not fast enough. We recommend one of the following:
16
- - [`bombardier`](https://github.com/codesenberg/bombardier)
17
- - [`oha`](https://github.com/hatoo/oha)
18
- - [`http_load_test`](https://github.com/uNetworking/uSockets/blob/master/examples/http_load_test.c)
19
- - For benchmarking scripts or CLI commands, we recommend [`hyperfine`](https://github.com/sharkdp/hyperfine).
20
-
21
- ## Measuring memory usage
22
-
23
- Bun has two heaps. One heap is for the JavaScript runtime and the other heap is for everything else.
24
-
25
- {% anchor id="bunjsc" /%}
26
-
27
- ### JavaScript heap stats
28
-
29
- The `bun:jsc` module exposes a few functions for measuring memory usage:
30
-
31
- ```ts
32
- import { heapStats } from "bun:jsc";
33
- console.log(heapStats());
34
- ```
35
-
36
- {% details summary="View example statistics" %}
37
-
38
- ```ts
39
- {
40
- heapSize: 1657575,
41
- heapCapacity: 2872775,
42
- extraMemorySize: 598199,
43
- objectCount: 13790,
44
- protectedObjectCount: 62,
45
- globalObjectCount: 1,
46
- protectedGlobalObjectCount: 1,
47
- // A count of every object type in the heap
48
- objectTypeCounts: {
49
- CallbackObject: 25,
50
- FunctionExecutable: 2078,
51
- AsyncGeneratorFunction: 2,
52
- 'RegExp String Iterator': 1,
53
- FunctionCodeBlock: 188,
54
- ModuleProgramExecutable: 13,
55
- String: 1,
56
- UnlinkedModuleProgramCodeBlock: 13,
57
- JSON: 1,
58
- AsyncGenerator: 1,
59
- Symbol: 1,
60
- GetterSetter: 68,
61
- ImportMeta: 10,
62
- DOMAttributeGetterSetter: 1,
63
- UnlinkedFunctionCodeBlock: 174,
64
- RegExp: 52,
65
- ModuleLoader: 1,
66
- Intl: 1,
67
- WeakMap: 4,
68
- Generator: 2,
69
- PropertyTable: 95,
70
- 'Array Iterator': 1,
71
- JSLexicalEnvironment: 75,
72
- UnlinkedFunctionExecutable: 2067,
73
- WeakSet: 1,
74
- console: 1,
75
- Map: 23,
76
- SparseArrayValueMap: 14,
77
- StructureChain: 19,
78
- Set: 18,
79
- 'String Iterator': 1,
80
- FunctionRareData: 3,
81
- JSGlobalLexicalEnvironment: 1,
82
- Object: 481,
83
- BigInt: 2,
84
- StructureRareData: 55,
85
- Array: 179,
86
- AbortController: 2,
87
- ModuleNamespaceObject: 11,
88
- ShadowRealm: 1,
89
- 'Immutable Butterfly': 103,
90
- Primordials: 1,
91
- 'Set Iterator': 1,
92
- JSGlobalProxy: 1,
93
- AsyncFromSyncIterator: 1,
94
- ModuleRecord: 13,
95
- FinalizationRegistry: 1,
96
- AsyncIterator: 1,
97
- InternalPromise: 22,
98
- Iterator: 1,
99
- CustomGetterSetter: 65,
100
- Promise: 19,
101
- WeakRef: 1,
102
- InternalPromisePrototype: 1,
103
- Function: 2381,
104
- AsyncFunction: 2,
105
- GlobalObject: 1,
106
- ArrayBuffer: 2,
107
- Boolean: 1,
108
- Math: 1,
109
- CallbackConstructor: 1,
110
- Error: 2,
111
- JSModuleEnvironment: 13,
112
- WebAssembly: 1,
113
- HashMapBucket: 300,
114
- Callee: 3,
115
- symbol: 37,
116
- string: 2484,
117
- Performance: 1,
118
- ModuleProgramCodeBlock: 12,
119
- JSSourceCode: 13,
120
- JSPropertyNameEnumerator: 3,
121
- NativeExecutable: 290,
122
- Number: 1,
123
- Structure: 1550,
124
- SymbolTable: 108,
125
- GeneratorFunction: 2,
126
- 'Map Iterator': 1
127
- },
128
- protectedObjectTypeCounts: {
129
- CallbackConstructor: 1,
130
- BigInt: 1,
131
- RegExp: 2,
132
- GlobalObject: 1,
133
- UnlinkedModuleProgramCodeBlock: 13,
134
- HashMapBucket: 2,
135
- Structure: 41,
136
- JSPropertyNameEnumerator: 1
137
- }
138
- }
139
- ```
140
-
141
- {% /details %}
142
-
143
- JavaScript is a garbage-collected language, not reference counted. It's normal and correct for objects to not be freed immediately in all cases, though it's not normal for objects to never be freed.
144
-
145
- To force garbage collection to run manually:
146
-
147
- ```js
148
- Bun.gc(true); // synchronous
149
- Bun.gc(false); // asynchronous
150
- ```
151
-
152
- Heap snapshots let you inspect what objects are not being freed. You can use the `bun:jsc` module to take a heap snapshot and then view it with Safari or WebKit GTK developer tools. To generate a heap snapshot:
153
-
154
- ```ts
155
- import { generateHeapSnapshot } from "bun";
156
-
157
- const snapshot = generateHeapSnapshot();
158
- await Bun.write("heap.json", JSON.stringify(snapshot, null, 2));
159
- ```
160
-
161
- To view the snapshot, open the `heap.json` file in Safari's Developer Tools (or WebKit GTK)
162
-
163
- 1. Open the Developer Tools
164
- 2. Click "Timeline"
165
- 3. Click "JavaScript Allocations" in the menu on the left. It might not be visible until you click the pencil icon to show all the timelines
166
- 4. Click "Import" and select your heap snapshot JSON
167
-
168
- {% image alt="Import heap json" src="https://user-images.githubusercontent.com/709451/204428943-ba999e8f-8984-4f23-97cb-b4e3e280363e.png" caption="Importing a heap snapshot" /%}
169
-
170
- Once imported, you should see something like this:
171
-
172
- {% image alt="Viewing heap snapshot in Safari" src="https://user-images.githubusercontent.com/709451/204429337-b0d8935f-3509-4071-b991-217794d1fb27.png" caption="Viewing heap snapshot in Safari Dev Tools" /%}
173
-
174
- > The [web debugger](https://bun.com/docs/runtime/debugger#inspect) also offers the timeline feature which allows you to track and examine the memory usage of the running debug session.
175
-
176
- ### Native heap stats
177
-
178
- Bun uses mimalloc for the other heap. To report a summary of non-JavaScript memory usage, set the `MIMALLOC_SHOW_STATS=1` environment variable. and stats will print on exit.
179
-
180
- ```js
181
- MIMALLOC_SHOW_STATS=1 bun script.js
182
-
183
- # will show something like this:
184
- heap stats: peak total freed current unit count
185
- reserved: 64.0 MiB 64.0 MiB 0 64.0 MiB not all freed!
186
- committed: 64.0 MiB 64.0 MiB 0 64.0 MiB not all freed!
187
- reset: 0 0 0 0 ok
188
- touched: 128.5 KiB 128.5 KiB 5.4 MiB -5.3 MiB ok
189
- segments: 1 1 0 1 not all freed!
190
- -abandoned: 0 0 0 0 ok
191
- -cached: 0 0 0 0 ok
192
- pages: 0 0 53 -53 ok
193
- -abandoned: 0 0 0 0 ok
194
- -extended: 0
195
- -noretire: 0
196
- mmaps: 0
197
- commits: 0
198
- threads: 0 0 0 0 ok
199
- searches: 0.0 avg
200
- numa nodes: 1
201
- elapsed: 0.068 s
202
- process: user: 0.061 s, system: 0.014 s, faults: 0, rss: 57.4 MiB, commit: 64.0 MiB
203
- ```
@@ -1,225 +0,0 @@
1
- {% callout %}
2
-
3
- This document is for maintainers and contributors to Bun, and describes internal implementation details.
4
-
5
- {% /callout %}
6
-
7
- The new bindings generator, introduced to the codebase in Dec 2024, scans for
8
- `*.bind.ts` to find function and class definition, and generates glue code to
9
- interop between JavaScript and native code.
10
-
11
- There are currently other code generators and systems that achieve similar
12
- purposes. The following will all eventually be completely phased out in favor of
13
- this one:
14
-
15
- - "Classes generator", converting `*.classes.ts` for custom classes.
16
- - "JS2Native", allowing ad-hoc calls from `src/js` to native code.
17
-
18
- ## Creating JS Functions in Zig
19
-
20
- Given a file implementing a simple function, such as `add`
21
-
22
- ```zig#src/bun.js/math.zig
23
- pub fn add(global: *jsc.JSGlobalObject, a: i32, b: i32) !i32 {
24
- return std.math.add(i32, a, b) catch {
25
- // Binding functions can return `error.OutOfMemory` and `error.JSError`.
26
- // Others like `error.Overflow` from `std.math.add` must be converted.
27
- // Remember to be descriptive.
28
- return global.throwPretty("Integer overflow while adding", .{});
29
- };
30
- }
31
-
32
- const gen = bun.gen.math; // "math" being this file's basename
33
-
34
- const std = @import("std");
35
- const bun = @import("bun");
36
- const jsc = bun.jsc;
37
- ```
38
-
39
- Then describe the API schema using a `.bind.ts` function. The binding file goes next to the Zig file.
40
-
41
- ```ts#src/bun.js/math.bind.ts
42
- import { t, fn } from 'bindgen';
43
-
44
- export const add = fn({
45
- args: {
46
- global: t.globalObject,
47
- a: t.i32,
48
- b: t.i32.default(1),
49
- },
50
- ret: t.i32,
51
- });
52
- ```
53
-
54
- This function declaration is equivalent to:
55
-
56
- ```ts
57
- /**
58
- * Throws if zero arguments are provided.
59
- * Wraps out of range numbers using modulo.
60
- */
61
- declare function add(a: number, b: number = 1): number;
62
- ```
63
-
64
- The code generator will provide `bun.gen.math.jsAdd`, which is the native
65
- function implementation. To pass to JavaScript, use
66
- `bun.gen.math.createAddCallback(global)`. JS files in `src/js/` may use
67
- `$bindgenFn("math.bind.ts", "add")` to get a handle to the implementation.
68
-
69
- ## Strings
70
-
71
- The type for receiving strings is one of [`t.DOMString`](https://webidl.spec.whatwg.org/#idl-DOMString), [`t.ByteString`](https://webidl.spec.whatwg.org/#idl-ByteString), and [`t.USVString`](https://webidl.spec.whatwg.org/#idl-USVString). These map directly to their WebIDL counterparts, and have slightly different conversion logic. Bindgen will pass BunString to native code in all cases.
72
-
73
- When in doubt, use DOMString.
74
-
75
- `t.UTF8String` can be used in place of `t.DOMString`, but will call `bun.String.toUTF8`. The native callback gets `[]const u8` (WTF-8 data) passed to native code, freeing it after the function returns.
76
-
77
- TLDRs from WebIDL spec:
78
-
79
- - ByteString can only contain valid latin1 characters. It is not safe to assume bun.String is already in 8-bit format, but it is extremely likely.
80
- - USVString will not contain invalid surrogate pairs, aka text that can be represented correctly in UTF-8.
81
- - DOMString is the loosest but also most recommended strategy.
82
-
83
- ## Function Variants
84
-
85
- A `variants` can specify multiple variants (also known as overloads).
86
-
87
- ```ts#src/bun.js/math.bind.ts
88
- import { t, fn } from 'bindgen';
89
-
90
- export const action = fn({
91
- variants: [
92
- {
93
- args: {
94
- a: t.i32,
95
- },
96
- ret: t.i32,
97
- },
98
- {
99
- args: {
100
- a: t.DOMString,
101
- },
102
- ret: t.DOMString,
103
- },
104
- ]
105
- });
106
- ```
107
-
108
- In Zig, each variant gets a number, based on the order the schema defines.
109
-
110
- ```zig
111
- fn action1(a: i32) i32 {
112
- return a;
113
- }
114
-
115
- fn action2(a: bun.String) bun.String {
116
- return a;
117
- }
118
- ```
119
-
120
- ## `t.dictionary`
121
-
122
- A `dictionary` is a definition for a JavaScript object, typically as a function inputs. For function outputs, it is usually a smarter idea to declare a class type to add functions and destructuring.
123
-
124
- ## Enumerations
125
-
126
- To use [WebIDL's enumeration](https://webidl.spec.whatwg.org/#idl-enums) type, use either:
127
-
128
- - `t.stringEnum`: Create and codegen a new enum type.
129
- - `t.zigEnum`: Derive a bindgen type off of an existing enum in the codebase.
130
-
131
- An example of `stringEnum` as used in `fmt.zig` / `bun:internal-for-testing`
132
-
133
- ```ts
134
- export const Formatter = t.stringEnum(
135
- "highlight-javascript",
136
- "escape-powershell",
137
- );
138
-
139
- export const fmtString = fn({
140
- args: {
141
- global: t.globalObject,
142
- code: t.UTF8String,
143
- formatter: Formatter,
144
- },
145
- ret: t.DOMString,
146
- });
147
- ```
148
-
149
- WebIDL strongly encourages using kebab case for enumeration values, to be consistent with existing Web APIs.
150
-
151
- ### Deriving enums from Zig code
152
-
153
- TODO: zigEnum
154
-
155
- ## `t.oneOf`
156
-
157
- A `oneOf` is a union between two or more types. It is represented by `union(enum)` in Zig.
158
-
159
- TODO:
160
-
161
- ## Attributes
162
-
163
- There are set of attributes that can be chained onto `t.*` types. On all types there are:
164
-
165
- - `.required`, in dictionary parameters only
166
- - `.optional`, in function arguments only
167
- - `.default(T)`
168
-
169
- When a value is optional, it is lowered to a Zig optional.
170
-
171
- Depending on the type, there are more attributes available. See the type definitions in auto-complete for more details. Note that one of the above three can only be applied, and they must be applied at the end.
172
-
173
- ### Integer Attributes
174
-
175
- Integer types allow customizing the overflow behavior with `clamp` or `enforceRange`
176
-
177
- ```ts
178
- import { t, fn } from "bindgen";
179
-
180
- export const add = fn({
181
- args: {
182
- global: t.globalObject,
183
- // enforce in i32 range
184
- a: t.i32.enforceRange(),
185
- // clamp to u16 range
186
- b: t.u16,
187
- // enforce in arbitrary range, with a default if not provided
188
- c: t.i32.enforceRange(0, 1000).default(5),
189
- // clamp to arbitrary range, or null
190
- d: t.u16.clamp(0, 10).optional,
191
- },
192
- ret: t.i32,
193
- });
194
- ```
195
-
196
- Various Node.js validator functions such as `validateInteger`, `validateNumber`, and more are available. Use these when implementing Node.js APIs, so the error messages match 1:1 what Node would do.
197
-
198
- Unlike `enforceRange`, which is taken from WebIDL, `validate*` functions are much more strict on the input they accept. For example, Node's numerical validator check `typeof value === 'number'`, while WebIDL uses `ToNumber` for lossy conversion.
199
-
200
- ```ts
201
- import { t, fn } from "bindgen";
202
-
203
- export const add = fn({
204
- args: {
205
- global: t.globalObject,
206
- // throw if not given a number
207
- a: t.f64.validateNumber(),
208
- // valid in i32 range
209
- a: t.i32.validateInt32(),
210
- // f64 within safe integer range
211
- b: t.f64.validateInteger(),
212
- // f64 in given range
213
- c: t.f64.validateNumber(-10000, 10000),
214
- },
215
- ret: t.i32,
216
- });
217
- ```
218
-
219
- ## Callbacks
220
-
221
- TODO
222
-
223
- ## Classes
224
-
225
- TODO