@depup/bun-types 1.3.11-depup.0

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 (361) hide show
  1. package/CLAUDE.md +105 -0
  2. package/README.md +25 -0
  3. package/bun.d.ts +8712 -0
  4. package/bun.ns.d.ts +5 -0
  5. package/bundle.d.ts +74 -0
  6. package/changes.json +5 -0
  7. package/deprecated.d.ts +184 -0
  8. package/devserver.d.ts +187 -0
  9. package/docs/README.md +28 -0
  10. package/docs/bundler/bytecode.mdx +447 -0
  11. package/docs/bundler/css.mdx +1024 -0
  12. package/docs/bundler/esbuild.mdx +304 -0
  13. package/docs/bundler/executables.mdx +1318 -0
  14. package/docs/bundler/fullstack.mdx +1086 -0
  15. package/docs/bundler/hot-reloading.mdx +229 -0
  16. package/docs/bundler/html-static.mdx +498 -0
  17. package/docs/bundler/index.mdx +1840 -0
  18. package/docs/bundler/loaders.mdx +451 -0
  19. package/docs/bundler/macros.mdx +328 -0
  20. package/docs/bundler/minifier.mdx +1286 -0
  21. package/docs/bundler/plugins.mdx +477 -0
  22. package/docs/bundler/standalone-html.mdx +314 -0
  23. package/docs/feedback.mdx +75 -0
  24. package/docs/guides/binary/arraybuffer-to-array.mdx +29 -0
  25. package/docs/guides/binary/arraybuffer-to-blob.mdx +26 -0
  26. package/docs/guides/binary/arraybuffer-to-buffer.mdx +27 -0
  27. package/docs/guides/binary/arraybuffer-to-string.mdx +17 -0
  28. package/docs/guides/binary/arraybuffer-to-typedarray.mdx +41 -0
  29. package/docs/guides/binary/blob-to-arraybuffer.mdx +16 -0
  30. package/docs/guides/binary/blob-to-dataview.mdx +16 -0
  31. package/docs/guides/binary/blob-to-stream.mdx +16 -0
  32. package/docs/guides/binary/blob-to-string.mdx +17 -0
  33. package/docs/guides/binary/blob-to-typedarray.mdx +16 -0
  34. package/docs/guides/binary/buffer-to-arraybuffer.mdx +16 -0
  35. package/docs/guides/binary/buffer-to-blob.mdx +16 -0
  36. package/docs/guides/binary/buffer-to-readablestream.mdx +43 -0
  37. package/docs/guides/binary/buffer-to-string.mdx +27 -0
  38. package/docs/guides/binary/buffer-to-typedarray.mdx +16 -0
  39. package/docs/guides/binary/dataview-to-string.mdx +17 -0
  40. package/docs/guides/binary/typedarray-to-arraybuffer.mdx +27 -0
  41. package/docs/guides/binary/typedarray-to-blob.mdx +18 -0
  42. package/docs/guides/binary/typedarray-to-buffer.mdx +16 -0
  43. package/docs/guides/binary/typedarray-to-dataview.mdx +16 -0
  44. package/docs/guides/binary/typedarray-to-readablestream.mdx +43 -0
  45. package/docs/guides/binary/typedarray-to-string.mdx +18 -0
  46. package/docs/guides/deployment/aws-lambda.mdx +204 -0
  47. package/docs/guides/deployment/digital-ocean.mdx +161 -0
  48. package/docs/guides/deployment/google-cloud-run.mdx +194 -0
  49. package/docs/guides/deployment/railway.mdx +145 -0
  50. package/docs/guides/deployment/render.mdx +82 -0
  51. package/docs/guides/deployment/vercel.mdx +97 -0
  52. package/docs/guides/ecosystem/astro.mdx +82 -0
  53. package/docs/guides/ecosystem/discordjs.mdx +80 -0
  54. package/docs/guides/ecosystem/docker.mdx +151 -0
  55. package/docs/guides/ecosystem/drizzle.mdx +195 -0
  56. package/docs/guides/ecosystem/elysia.mdx +31 -0
  57. package/docs/guides/ecosystem/express.mdx +43 -0
  58. package/docs/guides/ecosystem/gel.mdx +261 -0
  59. package/docs/guides/ecosystem/hono.mdx +47 -0
  60. package/docs/guides/ecosystem/mongoose.mdx +92 -0
  61. package/docs/guides/ecosystem/neon-drizzle.mdx +234 -0
  62. package/docs/guides/ecosystem/neon-serverless-postgres.mdx +60 -0
  63. package/docs/guides/ecosystem/nextjs.mdx +103 -0
  64. package/docs/guides/ecosystem/nuxt.mdx +96 -0
  65. package/docs/guides/ecosystem/pm2.mdx +55 -0
  66. package/docs/guides/ecosystem/prisma-postgres.mdx +169 -0
  67. package/docs/guides/ecosystem/prisma.mdx +164 -0
  68. package/docs/guides/ecosystem/qwik.mdx +114 -0
  69. package/docs/guides/ecosystem/react.mdx +52 -0
  70. package/docs/guides/ecosystem/remix.mdx +97 -0
  71. package/docs/guides/ecosystem/sentry.mdx +54 -0
  72. package/docs/guides/ecosystem/solidstart.mdx +62 -0
  73. package/docs/guides/ecosystem/ssr-react.mdx +49 -0
  74. package/docs/guides/ecosystem/stric.mdx +54 -0
  75. package/docs/guides/ecosystem/sveltekit.mdx +138 -0
  76. package/docs/guides/ecosystem/systemd.mdx +114 -0
  77. package/docs/guides/ecosystem/tanstack-start.mdx +791 -0
  78. package/docs/guides/ecosystem/upstash.mdx +87 -0
  79. package/docs/guides/ecosystem/vite.mdx +77 -0
  80. package/docs/guides/html-rewriter/extract-links.mdx +71 -0
  81. package/docs/guides/html-rewriter/extract-social-meta.mdx +97 -0
  82. package/docs/guides/http/cluster.mdx +69 -0
  83. package/docs/guides/http/fetch-unix.mdx +35 -0
  84. package/docs/guides/http/fetch.mdx +26 -0
  85. package/docs/guides/http/file-uploads.mdx +97 -0
  86. package/docs/guides/http/hot.mdx +28 -0
  87. package/docs/guides/http/proxy.mdx +50 -0
  88. package/docs/guides/http/server.mdx +48 -0
  89. package/docs/guides/http/simple.mdx +20 -0
  90. package/docs/guides/http/sse.mdx +91 -0
  91. package/docs/guides/http/stream-file.mdx +50 -0
  92. package/docs/guides/http/stream-iterator.mdx +49 -0
  93. package/docs/guides/http/stream-node-streams-in-bun.mdx +22 -0
  94. package/docs/guides/http/tls.mdx +32 -0
  95. package/docs/guides/index.mdx +10 -0
  96. package/docs/guides/install/add-dev.mdx +28 -0
  97. package/docs/guides/install/add-git.mdx +40 -0
  98. package/docs/guides/install/add-optional.mdx +27 -0
  99. package/docs/guides/install/add-peer.mdx +45 -0
  100. package/docs/guides/install/add-tarball.mdx +35 -0
  101. package/docs/guides/install/add.mdx +44 -0
  102. package/docs/guides/install/azure-artifacts.mdx +76 -0
  103. package/docs/guides/install/cicd.mdx +43 -0
  104. package/docs/guides/install/custom-registry.mdx +32 -0
  105. package/docs/guides/install/from-npm-install-to-bun-install.mdx +230 -0
  106. package/docs/guides/install/git-diff-bun-lockfile.mdx +48 -0
  107. package/docs/guides/install/jfrog-artifactory.mdx +28 -0
  108. package/docs/guides/install/npm-alias.mdx +25 -0
  109. package/docs/guides/install/registry-scope.mdx +40 -0
  110. package/docs/guides/install/trusted.mdx +52 -0
  111. package/docs/guides/install/workspaces.mdx +70 -0
  112. package/docs/guides/install/yarnlock.mdx +51 -0
  113. package/docs/guides/process/argv.mdx +66 -0
  114. package/docs/guides/process/ctrl-c.mdx +18 -0
  115. package/docs/guides/process/ipc.mdx +69 -0
  116. package/docs/guides/process/nanoseconds.mdx +15 -0
  117. package/docs/guides/process/os-signals.mdx +31 -0
  118. package/docs/guides/process/spawn-stderr.mdx +34 -0
  119. package/docs/guides/process/spawn-stdout.mdx +28 -0
  120. package/docs/guides/process/spawn.mdx +43 -0
  121. package/docs/guides/process/stdin.mdx +62 -0
  122. package/docs/guides/read-file/arraybuffer.mdx +30 -0
  123. package/docs/guides/read-file/buffer.mdx +21 -0
  124. package/docs/guides/read-file/exists.mdx +18 -0
  125. package/docs/guides/read-file/json.mdx +19 -0
  126. package/docs/guides/read-file/mime.mdx +22 -0
  127. package/docs/guides/read-file/stream.mdx +28 -0
  128. package/docs/guides/read-file/string.mdx +24 -0
  129. package/docs/guides/read-file/uint8array.mdx +23 -0
  130. package/docs/guides/read-file/watch.mdx +66 -0
  131. package/docs/guides/runtime/build-time-constants.mdx +295 -0
  132. package/docs/guides/runtime/cicd.mdx +45 -0
  133. package/docs/guides/runtime/codesign-macos-executable.mdx +61 -0
  134. package/docs/guides/runtime/define-constant.mdx +149 -0
  135. package/docs/guides/runtime/delete-directory.mdx +39 -0
  136. package/docs/guides/runtime/delete-file.mdx +21 -0
  137. package/docs/guides/runtime/heap-snapshot.mdx +28 -0
  138. package/docs/guides/runtime/import-html.mdx +15 -0
  139. package/docs/guides/runtime/import-json.mdx +46 -0
  140. package/docs/guides/runtime/import-json5.mdx +74 -0
  141. package/docs/guides/runtime/import-toml.mdx +32 -0
  142. package/docs/guides/runtime/import-yaml.mdx +104 -0
  143. package/docs/guides/runtime/read-env.mdx +37 -0
  144. package/docs/guides/runtime/set-env.mdx +51 -0
  145. package/docs/guides/runtime/shell.mdx +42 -0
  146. package/docs/guides/runtime/timezone.mdx +38 -0
  147. package/docs/guides/runtime/tsconfig-paths.mdx +31 -0
  148. package/docs/guides/runtime/typescript.mdx +51 -0
  149. package/docs/guides/runtime/vscode-debugger.mdx +47 -0
  150. package/docs/guides/runtime/web-debugger.mdx +103 -0
  151. package/docs/guides/streams/node-readable-to-arraybuffer.mdx +13 -0
  152. package/docs/guides/streams/node-readable-to-blob.mdx +13 -0
  153. package/docs/guides/streams/node-readable-to-json.mdx +14 -0
  154. package/docs/guides/streams/node-readable-to-string.mdx +14 -0
  155. package/docs/guides/streams/node-readable-to-uint8array.mdx +13 -0
  156. package/docs/guides/streams/to-array.mdx +16 -0
  157. package/docs/guides/streams/to-arraybuffer.mdx +16 -0
  158. package/docs/guides/streams/to-blob.mdx +16 -0
  159. package/docs/guides/streams/to-buffer.mdx +17 -0
  160. package/docs/guides/streams/to-json.mdx +16 -0
  161. package/docs/guides/streams/to-string.mdx +16 -0
  162. package/docs/guides/streams/to-typedarray.mdx +24 -0
  163. package/docs/guides/test/bail.mdx +24 -0
  164. package/docs/guides/test/concurrent-test-glob.mdx +146 -0
  165. package/docs/guides/test/coverage-threshold.mdx +67 -0
  166. package/docs/guides/test/coverage.mdx +49 -0
  167. package/docs/guides/test/happy-dom.mdx +73 -0
  168. package/docs/guides/test/migrate-from-jest.mdx +125 -0
  169. package/docs/guides/test/mock-clock.mdx +50 -0
  170. package/docs/guides/test/mock-functions.mdx +70 -0
  171. package/docs/guides/test/rerun-each.mdx +16 -0
  172. package/docs/guides/test/run-tests.mdx +116 -0
  173. package/docs/guides/test/skip-tests.mdx +43 -0
  174. package/docs/guides/test/snapshot.mdx +102 -0
  175. package/docs/guides/test/spy-on.mdx +49 -0
  176. package/docs/guides/test/svelte-test.mdx +113 -0
  177. package/docs/guides/test/testing-library.mdx +93 -0
  178. package/docs/guides/test/timeout.mdx +17 -0
  179. package/docs/guides/test/todo-tests.mdx +74 -0
  180. package/docs/guides/test/update-snapshots.mdx +49 -0
  181. package/docs/guides/test/watch-mode.mdx +24 -0
  182. package/docs/guides/util/base64.mdx +17 -0
  183. package/docs/guides/util/deep-equals.mdx +41 -0
  184. package/docs/guides/util/deflate.mdx +20 -0
  185. package/docs/guides/util/detect-bun.mdx +28 -0
  186. package/docs/guides/util/entrypoint.mdx +19 -0
  187. package/docs/guides/util/escape-html.mdx +24 -0
  188. package/docs/guides/util/file-url-to-path.mdx +16 -0
  189. package/docs/guides/util/gzip.mdx +20 -0
  190. package/docs/guides/util/hash-a-password.mdx +56 -0
  191. package/docs/guides/util/import-meta-dir.mdx +15 -0
  192. package/docs/guides/util/import-meta-file.mdx +15 -0
  193. package/docs/guides/util/import-meta-path.mdx +15 -0
  194. package/docs/guides/util/javascript-uuid.mdx +25 -0
  195. package/docs/guides/util/main.mdx +43 -0
  196. package/docs/guides/util/path-to-file-url.mdx +16 -0
  197. package/docs/guides/util/sleep.mdx +24 -0
  198. package/docs/guides/util/upgrade.mdx +93 -0
  199. package/docs/guides/util/version.mdx +23 -0
  200. package/docs/guides/util/which-path-to-executable-bin.mdx +17 -0
  201. package/docs/guides/websocket/compression.mdx +33 -0
  202. package/docs/guides/websocket/context.mdx +79 -0
  203. package/docs/guides/websocket/pubsub.mdx +43 -0
  204. package/docs/guides/websocket/simple.mdx +38 -0
  205. package/docs/guides/write-file/append.mdx +54 -0
  206. package/docs/guides/write-file/basic.mdx +46 -0
  207. package/docs/guides/write-file/blob.mdx +30 -0
  208. package/docs/guides/write-file/cat.mdx +19 -0
  209. package/docs/guides/write-file/file-cp.mdx +18 -0
  210. package/docs/guides/write-file/filesink.mdx +54 -0
  211. package/docs/guides/write-file/response.mdx +19 -0
  212. package/docs/guides/write-file/stdout.mdx +23 -0
  213. package/docs/guides/write-file/stream.mdx +19 -0
  214. package/docs/guides/write-file/unlink.mdx +18 -0
  215. package/docs/index.mdx +133 -0
  216. package/docs/installation.mdx +372 -0
  217. package/docs/pm/bunx.mdx +91 -0
  218. package/docs/pm/catalogs.mdx +292 -0
  219. package/docs/pm/cli/add.mdx +179 -0
  220. package/docs/pm/cli/audit.mdx +60 -0
  221. package/docs/pm/cli/info.mdx +70 -0
  222. package/docs/pm/cli/install.mdx +591 -0
  223. package/docs/pm/cli/link.mdx +61 -0
  224. package/docs/pm/cli/outdated.mdx +197 -0
  225. package/docs/pm/cli/patch.mdx +69 -0
  226. package/docs/pm/cli/pm.mdx +323 -0
  227. package/docs/pm/cli/publish.mdx +131 -0
  228. package/docs/pm/cli/remove.mdx +16 -0
  229. package/docs/pm/cli/update.mdx +140 -0
  230. package/docs/pm/cli/why.mdx +84 -0
  231. package/docs/pm/filter.mdx +127 -0
  232. package/docs/pm/global-cache.mdx +72 -0
  233. package/docs/pm/isolated-installs.mdx +220 -0
  234. package/docs/pm/lifecycle.mdx +64 -0
  235. package/docs/pm/lockfile.mdx +64 -0
  236. package/docs/pm/npmrc.mdx +245 -0
  237. package/docs/pm/overrides.mdx +83 -0
  238. package/docs/pm/scopes-registries.mdx +35 -0
  239. package/docs/pm/security-scanner-api.mdx +95 -0
  240. package/docs/pm/workspaces.mdx +115 -0
  241. package/docs/project/benchmarking.mdx +296 -0
  242. package/docs/project/bindgen.mdx +223 -0
  243. package/docs/project/building-windows.mdx +143 -0
  244. package/docs/project/contributing.mdx +366 -0
  245. package/docs/project/feedback.mdx +20 -0
  246. package/docs/project/license.mdx +78 -0
  247. package/docs/project/roadmap.mdx +8 -0
  248. package/docs/quickstart.mdx +251 -0
  249. package/docs/runtime/archive.mdx +452 -0
  250. package/docs/runtime/auto-install.mdx +97 -0
  251. package/docs/runtime/binary-data.mdx +846 -0
  252. package/docs/runtime/bun-apis.mdx +60 -0
  253. package/docs/runtime/bunfig.mdx +765 -0
  254. package/docs/runtime/c-compiler.mdx +204 -0
  255. package/docs/runtime/child-process.mdx +659 -0
  256. package/docs/runtime/color.mdx +267 -0
  257. package/docs/runtime/console.mdx +67 -0
  258. package/docs/runtime/cookies.mdx +454 -0
  259. package/docs/runtime/cron.mdx +358 -0
  260. package/docs/runtime/csrf.mdx +171 -0
  261. package/docs/runtime/debugger.mdx +335 -0
  262. package/docs/runtime/environment-variables.mdx +231 -0
  263. package/docs/runtime/ffi.mdx +567 -0
  264. package/docs/runtime/file-io.mdx +306 -0
  265. package/docs/runtime/file-system-router.mdx +118 -0
  266. package/docs/runtime/file-types.mdx +482 -0
  267. package/docs/runtime/glob.mdx +181 -0
  268. package/docs/runtime/globals.mdx +72 -0
  269. package/docs/runtime/hashing.mdx +315 -0
  270. package/docs/runtime/html-rewriter.mdx +333 -0
  271. package/docs/runtime/http/cookies.mdx +79 -0
  272. package/docs/runtime/http/error-handling.mdx +40 -0
  273. package/docs/runtime/http/metrics.mdx +36 -0
  274. package/docs/runtime/http/routing.mdx +289 -0
  275. package/docs/runtime/http/server.mdx +672 -0
  276. package/docs/runtime/http/tls.mdx +101 -0
  277. package/docs/runtime/http/websockets.mdx +414 -0
  278. package/docs/runtime/index.mdx +223 -0
  279. package/docs/runtime/json5.mdx +271 -0
  280. package/docs/runtime/jsonl.mdx +188 -0
  281. package/docs/runtime/jsx.mdx +115 -0
  282. package/docs/runtime/markdown.mdx +381 -0
  283. package/docs/runtime/module-resolution.mdx +374 -0
  284. package/docs/runtime/networking/dns.mdx +111 -0
  285. package/docs/runtime/networking/fetch.mdx +484 -0
  286. package/docs/runtime/networking/tcp.mdx +239 -0
  287. package/docs/runtime/networking/udp.mdx +180 -0
  288. package/docs/runtime/node-api.mdx +19 -0
  289. package/docs/runtime/nodejs-compat.mdx +468 -0
  290. package/docs/runtime/plugins.mdx +419 -0
  291. package/docs/runtime/redis.mdx +583 -0
  292. package/docs/runtime/repl.mdx +176 -0
  293. package/docs/runtime/s3.mdx +881 -0
  294. package/docs/runtime/secrets.mdx +340 -0
  295. package/docs/runtime/semver.mdx +57 -0
  296. package/docs/runtime/shell.mdx +637 -0
  297. package/docs/runtime/sql.mdx +1404 -0
  298. package/docs/runtime/sqlite.mdx +721 -0
  299. package/docs/runtime/streams.mdx +232 -0
  300. package/docs/runtime/templating/create.mdx +269 -0
  301. package/docs/runtime/templating/init.mdx +58 -0
  302. package/docs/runtime/toml.mdx +238 -0
  303. package/docs/runtime/transpiler.mdx +288 -0
  304. package/docs/runtime/typescript.mdx +58 -0
  305. package/docs/runtime/utils.mdx +1010 -0
  306. package/docs/runtime/watch-mode.mdx +161 -0
  307. package/docs/runtime/web-apis.mdx +29 -0
  308. package/docs/runtime/workers.mdx +314 -0
  309. package/docs/runtime/yaml.mdx +470 -0
  310. package/docs/snippets/cli/add.mdx +166 -0
  311. package/docs/snippets/cli/build.mdx +197 -0
  312. package/docs/snippets/cli/bunx.mdx +49 -0
  313. package/docs/snippets/cli/feedback.mdx +17 -0
  314. package/docs/snippets/cli/init.mdx +84 -0
  315. package/docs/snippets/cli/install.mdx +173 -0
  316. package/docs/snippets/cli/link.mdx +163 -0
  317. package/docs/snippets/cli/outdated.mdx +140 -0
  318. package/docs/snippets/cli/patch.mdx +171 -0
  319. package/docs/snippets/cli/publish.mdx +198 -0
  320. package/docs/snippets/cli/remove.mdx +146 -0
  321. package/docs/snippets/cli/run.mdx +305 -0
  322. package/docs/snippets/cli/test.mdx +105 -0
  323. package/docs/snippets/cli/update.mdx +144 -0
  324. package/docs/test/code-coverage.mdx +409 -0
  325. package/docs/test/configuration.mdx +574 -0
  326. package/docs/test/dates-times.mdx +129 -0
  327. package/docs/test/discovery.mdx +90 -0
  328. package/docs/test/dom.mdx +226 -0
  329. package/docs/test/index.mdx +409 -0
  330. package/docs/test/lifecycle.mdx +366 -0
  331. package/docs/test/mocks.mdx +637 -0
  332. package/docs/test/reporters.mdx +126 -0
  333. package/docs/test/runtime-behavior.mdx +342 -0
  334. package/docs/test/snapshots.mdx +434 -0
  335. package/docs/test/writing-tests.mdx +672 -0
  336. package/docs/typescript.mdx +54 -0
  337. package/extensions.d.ts +40 -0
  338. package/fetch.d.ts +79 -0
  339. package/ffi.d.ts +1154 -0
  340. package/globals.d.ts +2067 -0
  341. package/html-rewriter.d.ts +186 -0
  342. package/index.d.ts +32 -0
  343. package/jsc.d.ts +233 -0
  344. package/jsx.d.ts +11 -0
  345. package/overrides.d.ts +376 -0
  346. package/package.json +53 -0
  347. package/redis.d.ts +3352 -0
  348. package/s3.d.ts +1354 -0
  349. package/security.d.ts +101 -0
  350. package/serve.d.ts +1296 -0
  351. package/shell.d.ts +380 -0
  352. package/sql.d.ts +887 -0
  353. package/sqlite.d.ts +1322 -0
  354. package/test-globals.d.ts +22 -0
  355. package/test.d.ts +2392 -0
  356. package/vendor/expect-type/branding.d.ts +283 -0
  357. package/vendor/expect-type/index.d.ts +1207 -0
  358. package/vendor/expect-type/messages.d.ts +395 -0
  359. package/vendor/expect-type/overloads.d.ts +669 -0
  360. package/vendor/expect-type/utils.d.ts +431 -0
  361. package/wasm.d.ts +193 -0
@@ -0,0 +1,333 @@
1
+ ---
2
+ title: HTMLRewriter
3
+ description: Use Bun's HTMLRewriter to transform HTML documents with CSS selectors
4
+ ---
5
+
6
+ HTMLRewriter lets you use CSS selectors to transform HTML documents. It works with `Request`, `Response`, as well as `string`. Bun's implementation is based on Cloudflare's [lol-html](https://github.com/cloudflare/lol-html).
7
+
8
+ ---
9
+
10
+ ## Usage
11
+
12
+ A common usecase is rewriting URLs in HTML content. Here's an example that rewrites image sources and link URLs to use a CDN domain:
13
+
14
+ ```ts
15
+ // Replace all images with a rickroll
16
+ const rewriter = new HTMLRewriter().on("img", {
17
+ element(img) {
18
+ // Famous rickroll video thumbnail
19
+ img.setAttribute("src", "https://img.youtube.com/vi/dQw4w9WgXcQ/maxresdefault.jpg");
20
+
21
+ // Wrap the image in a link to the video
22
+ img.before('<a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ" target="_blank">', {
23
+ html: true,
24
+ });
25
+ img.after("</a>", { html: true });
26
+
27
+ // Add some fun alt text
28
+ img.setAttribute("alt", "Definitely not a rickroll");
29
+ },
30
+ });
31
+
32
+ // An example HTML document
33
+ const html = `
34
+ <html>
35
+ <body>
36
+ <img src="/cat.jpg">
37
+ <img src="dog.png">
38
+ <img src="https://example.com/bird.webp">
39
+ </body>
40
+ </html>
41
+ `;
42
+
43
+ const result = rewriter.transform(html);
44
+ console.log(result);
45
+ ```
46
+
47
+ This replaces all images with a thumbnail of Rick Astley and wraps each `<img>` in a link, producing a diff like this:
48
+
49
+ {/* prettier-ignore */}
50
+ ```html
51
+ <html>
52
+ <body>
53
+ <img src="/cat.jpg" /> <!-- [!code --] -->
54
+ <img src="dog.png" /> <!-- [!code --] -->
55
+ <img src="https://example.com/bird.webp" /> <!-- [!code --] -->
56
+ <a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ" target="_blank"> <!-- [!code ++] -->
57
+ <img src="https://img.youtube.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" alt="Definitely not a rickroll" /> <!-- [!code ++] -->
58
+ </a> <!-- [!code ++] -->
59
+ <a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ" target="_blank"> <!-- [!code ++] -->
60
+ <img src="https://img.youtube.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" alt="Definitely not a rickroll" /> <!-- [!code ++] -->
61
+ </a> <!-- [!code ++] -->
62
+ <a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ" target="_blank"> <!-- [!code ++] -->
63
+ <img src="https://img.youtube.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" alt="Definitely not a rickroll" /> <!-- [!code ++] -->
64
+ </a> <!-- [!code ++] -->
65
+ </body>
66
+ </html>
67
+ ```
68
+
69
+ Now every image on the page will be replaced with a thumbnail of Rick Astley, and clicking any image will lead to [a very famous video](https://www.youtube.com/watch?v=dQw4w9WgXcQ).
70
+
71
+ ### Input types
72
+
73
+ HTMLRewriter can transform HTML from various sources. The input is automatically handled based on its type:
74
+
75
+ ```ts
76
+ // From Response
77
+ rewriter.transform(new Response("<div>content</div>"));
78
+
79
+ // From string
80
+ rewriter.transform("<div>content</div>");
81
+
82
+ // From ArrayBuffer
83
+ rewriter.transform(new TextEncoder().encode("<div>content</div>").buffer);
84
+
85
+ // From Blob
86
+ rewriter.transform(new Blob(["<div>content</div>"]));
87
+
88
+ // From File
89
+ rewriter.transform(Bun.file("index.html"));
90
+ ```
91
+
92
+ Note that Cloudflare Workers implementation of HTMLRewriter only supports `Response` objects.
93
+
94
+ ### Element Handlers
95
+
96
+ The `on(selector, handlers)` method allows you to register handlers for HTML elements that match a CSS selector. The handlers are called for each matching element during parsing:
97
+
98
+ ```ts
99
+ rewriter.on("div.content", {
100
+ // Handle elements
101
+ element(element) {
102
+ element.setAttribute("class", "new-content");
103
+ element.append("<p>New content</p>", { html: true });
104
+ },
105
+ // Handle text nodes
106
+ text(text) {
107
+ text.replace("new text");
108
+ },
109
+ // Handle comments
110
+ comments(comment) {
111
+ comment.remove();
112
+ },
113
+ });
114
+ ```
115
+
116
+ The handlers can be asynchronous and return a Promise. Note that async operations will block the transformation until they complete:
117
+
118
+ ```ts
119
+ rewriter.on("div", {
120
+ async element(element) {
121
+ await Bun.sleep(1000);
122
+ element.setInnerContent("<span>replace</span>", { html: true });
123
+ },
124
+ });
125
+ ```
126
+
127
+ ### CSS Selector Support
128
+
129
+ The `on()` method supports a wide range of CSS selectors:
130
+
131
+ ```ts
132
+ // Tag selectors
133
+ rewriter.on("p", handler);
134
+
135
+ // Class selectors
136
+ rewriter.on("p.red", handler);
137
+
138
+ // ID selectors
139
+ rewriter.on("h1#header", handler);
140
+
141
+ // Attribute selectors
142
+ rewriter.on("p[data-test]", handler); // Has attribute
143
+ rewriter.on('p[data-test="one"]', handler); // Exact match
144
+ rewriter.on('p[data-test="one" i]', handler); // Case-insensitive
145
+ rewriter.on('p[data-test="one" s]', handler); // Case-sensitive
146
+ rewriter.on('p[data-test~="two"]', handler); // Word match
147
+ rewriter.on('p[data-test^="a"]', handler); // Starts with
148
+ rewriter.on('p[data-test$="1"]', handler); // Ends with
149
+ rewriter.on('p[data-test*="b"]', handler); // Contains
150
+ rewriter.on('p[data-test|="a"]', handler); // Dash-separated
151
+
152
+ // Combinators
153
+ rewriter.on("div span", handler); // Descendant
154
+ rewriter.on("div > span", handler); // Direct child
155
+
156
+ // Pseudo-classes
157
+ rewriter.on("p:nth-child(2)", handler);
158
+ rewriter.on("p:first-child", handler);
159
+ rewriter.on("p:nth-of-type(2)", handler);
160
+ rewriter.on("p:first-of-type", handler);
161
+ rewriter.on("p:not(:first-child)", handler);
162
+
163
+ // Universal selector
164
+ rewriter.on("*", handler);
165
+ ```
166
+
167
+ ### Element Operations
168
+
169
+ Elements provide various methods for manipulation. All modification methods return the element instance for chaining:
170
+
171
+ ```ts
172
+ rewriter.on("div", {
173
+ element(el) {
174
+ // Attributes
175
+ el.setAttribute("class", "new-class").setAttribute("data-id", "123");
176
+
177
+ const classAttr = el.getAttribute("class"); // "new-class"
178
+ const hasId = el.hasAttribute("id"); // boolean
179
+ el.removeAttribute("class");
180
+
181
+ // Content manipulation
182
+ el.setInnerContent("New content"); // Escapes HTML by default
183
+ el.setInnerContent("<p>HTML content</p>", { html: true }); // Parses HTML
184
+ el.setInnerContent(""); // Clear content
185
+
186
+ // Position manipulation
187
+ el.before("Content before").after("Content after").prepend("First child").append("Last child");
188
+
189
+ // HTML content insertion
190
+ el.before("<span>before</span>", { html: true })
191
+ .after("<span>after</span>", { html: true })
192
+ .prepend("<span>first</span>", { html: true })
193
+ .append("<span>last</span>", { html: true });
194
+
195
+ // Removal
196
+ el.remove(); // Remove element and contents
197
+ el.removeAndKeepContent(); // Remove only the element tags
198
+
199
+ // Properties
200
+ console.log(el.tagName); // Lowercase tag name
201
+ console.log(el.namespaceURI); // Element's namespace URI
202
+ console.log(el.selfClosing); // Whether element is self-closing (e.g. <div />)
203
+ console.log(el.canHaveContent); // Whether element can contain content (false for void elements like <br>)
204
+ console.log(el.removed); // Whether element was removed
205
+
206
+ // Attributes iteration
207
+ for (const [name, value] of el.attributes) {
208
+ console.log(name, value);
209
+ }
210
+
211
+ // End tag handling
212
+ el.onEndTag(endTag => {
213
+ endTag.before("Before end tag");
214
+ endTag.after("After end tag");
215
+ endTag.remove(); // Remove the end tag
216
+ console.log(endTag.name); // Tag name in lowercase
217
+ });
218
+ },
219
+ });
220
+ ```
221
+
222
+ ### Text Operations
223
+
224
+ Text handlers provide methods for text manipulation. Text chunks represent portions of text content and provide information about their position in the text node:
225
+
226
+ ```ts
227
+ rewriter.on("p", {
228
+ text(text) {
229
+ // Content
230
+ console.log(text.text); // Text content
231
+ console.log(text.lastInTextNode); // Whether this is the last chunk
232
+ console.log(text.removed); // Whether text was removed
233
+
234
+ // Manipulation
235
+ text.before("Before text").after("After text").replace("New text").remove();
236
+
237
+ // HTML content insertion
238
+ text
239
+ .before("<span>before</span>", { html: true })
240
+ .after("<span>after</span>", { html: true })
241
+ .replace("<span>replace</span>", { html: true });
242
+ },
243
+ });
244
+ ```
245
+
246
+ ### Comment Operations
247
+
248
+ Comment handlers allow comment manipulation with similar methods to text nodes:
249
+
250
+ ```ts
251
+ rewriter.on("*", {
252
+ comments(comment) {
253
+ // Content
254
+ console.log(comment.text); // Comment text
255
+ comment.text = "New comment text"; // Set comment text
256
+ console.log(comment.removed); // Whether comment was removed
257
+
258
+ // Manipulation
259
+ comment.before("Before comment").after("After comment").replace("New comment").remove();
260
+
261
+ // HTML content insertion
262
+ comment
263
+ .before("<span>before</span>", { html: true })
264
+ .after("<span>after</span>", { html: true })
265
+ .replace("<span>replace</span>", { html: true });
266
+ },
267
+ });
268
+ ```
269
+
270
+ ### Document Handlers
271
+
272
+ The `onDocument(handlers)` method allows you to handle document-level events. These handlers are called for events that occur at the document level rather than within specific elements:
273
+
274
+ ```ts
275
+ rewriter.onDocument({
276
+ // Handle doctype
277
+ doctype(doctype) {
278
+ console.log(doctype.name); // "html"
279
+ console.log(doctype.publicId); // public identifier if present
280
+ console.log(doctype.systemId); // system identifier if present
281
+ },
282
+ // Handle text nodes
283
+ text(text) {
284
+ console.log(text.text);
285
+ },
286
+ // Handle comments
287
+ comments(comment) {
288
+ console.log(comment.text);
289
+ },
290
+ // Handle document end
291
+ end(end) {
292
+ end.append("<!-- Footer -->", { html: true });
293
+ },
294
+ });
295
+ ```
296
+
297
+ ### Response Handling
298
+
299
+ When transforming a Response:
300
+
301
+ - The status code, headers, and other response properties are preserved
302
+ - The body is transformed while maintaining streaming capabilities
303
+ - Content-encoding (like gzip) is handled automatically
304
+ - The original response body is marked as used after transformation
305
+ - Headers are cloned to the new response
306
+
307
+ ## Error Handling
308
+
309
+ HTMLRewriter operations can throw errors in several cases:
310
+
311
+ - Invalid selector syntax in `on()` method
312
+ - Invalid HTML content in transformation methods
313
+ - Stream errors when processing Response bodies
314
+ - Memory allocation failures
315
+ - Invalid input types (e.g., passing Symbol)
316
+ - Body already used errors
317
+
318
+ Errors should be caught and handled appropriately:
319
+
320
+ ```ts
321
+ try {
322
+ const result = rewriter.transform(input);
323
+ // Process result
324
+ } catch (error) {
325
+ console.error("HTMLRewriter error:", error);
326
+ }
327
+ ```
328
+
329
+ ---
330
+
331
+ ## See also
332
+
333
+ You can also read the [Cloudflare documentation](https://developers.cloudflare.com/workers/runtime-apis/html-rewriter/), which this API is intended to be compatible with.
@@ -0,0 +1,79 @@
1
+ ---
2
+ title: Cookies
3
+ description: Work with cookies in HTTP requests and responses using Bun's built-in Cookie API.
4
+ ---
5
+
6
+ Bun provides a built-in API for working with cookies in HTTP requests and responses. The `BunRequest` object includes a `cookies` property that provides a `CookieMap` for easily accessing and manipulating cookies. When using `routes`, `Bun.serve()` automatically tracks `request.cookies.set` and applies them to the response.
7
+
8
+ ## Reading cookies
9
+
10
+ Read cookies from incoming requests using the `cookies` property on the `BunRequest` object:
11
+
12
+ ```ts
13
+ Bun.serve({
14
+ routes: {
15
+ "/profile": req => {
16
+ // Access cookies from the request
17
+ const userId = req.cookies.get("user_id");
18
+ const theme = req.cookies.get("theme") || "light";
19
+
20
+ return Response.json({
21
+ userId,
22
+ theme,
23
+ message: "Profile page",
24
+ });
25
+ },
26
+ },
27
+ });
28
+ ```
29
+
30
+ ## Setting cookies
31
+
32
+ To set cookies, use the `set` method on the `CookieMap` from the `BunRequest` object.
33
+
34
+ ```ts
35
+ Bun.serve({
36
+ routes: {
37
+ "/login": req => {
38
+ const cookies = req.cookies;
39
+
40
+ // Set a cookie with various options
41
+ cookies.set("user_id", "12345", {
42
+ maxAge: 60 * 60 * 24 * 7, // 1 week
43
+ httpOnly: true,
44
+ secure: true,
45
+ path: "/",
46
+ });
47
+
48
+ // Add a theme preference cookie
49
+ cookies.set("theme", "dark");
50
+
51
+ // Modified cookies from the request are automatically applied to the response
52
+ return new Response("Login successful");
53
+ },
54
+ },
55
+ });
56
+ ```
57
+
58
+ `Bun.serve()` automatically tracks modified cookies from the request and applies them to the response.
59
+
60
+ ## Deleting cookies
61
+
62
+ To delete a cookie, use the `delete` method on the `request.cookies` (`CookieMap`) object:
63
+
64
+ ```ts
65
+ Bun.serve({
66
+ routes: {
67
+ "/logout": req => {
68
+ // Delete the user_id cookie
69
+ req.cookies.delete("user_id", {
70
+ path: "/",
71
+ });
72
+
73
+ return new Response("Logged out successfully");
74
+ },
75
+ },
76
+ });
77
+ ```
78
+
79
+ Deleted cookies become a `Set-Cookie` header on the response with the `maxAge` set to `0` and an empty `value`.
@@ -0,0 +1,40 @@
1
+ ---
2
+ title: Error Handling
3
+ description: Learn how to handle errors in Bun's development server
4
+ ---
5
+
6
+ To activate development mode, set `development: true`.
7
+
8
+ ```ts title="server.ts" icon="/icons/typescript.svg"
9
+ Bun.serve({
10
+ development: true, // [!code ++]
11
+ fetch(req) {
12
+ throw new Error("woops!");
13
+ },
14
+ });
15
+ ```
16
+
17
+ In development mode, Bun will surface errors in-browser with a built-in error page.
18
+
19
+ <Frame>![Bun's built-in 500 page](https://bun.com/images/exception_page.png)</Frame>
20
+
21
+ ### `error` callback
22
+
23
+ To handle server-side errors, implement an `error` handler. This function should return a `Response` to serve to the client when an error occurs. This response will supersede Bun's default error page in `development` mode.
24
+
25
+ ```ts
26
+ Bun.serve({
27
+ fetch(req) {
28
+ throw new Error("woops!");
29
+ },
30
+ error(error) {
31
+ return new Response(`<pre>${error}\n${error.stack}</pre>`, {
32
+ headers: {
33
+ "Content-Type": "text/html",
34
+ },
35
+ });
36
+ },
37
+ });
38
+ ```
39
+
40
+ <Info>[Learn more about debugging in Bun](/docs/runtime/debugger)</Info>
@@ -0,0 +1,36 @@
1
+ ---
2
+ title: Metrics
3
+ description: Monitor server activity with built-in metrics
4
+ ---
5
+
6
+ ### `server.pendingRequests` and `server.pendingWebSockets`
7
+
8
+ Monitor server activity with built-in counters:
9
+
10
+ ```ts
11
+ const server = Bun.serve({
12
+ fetch(req, server) {
13
+ return new Response(
14
+ `Active requests: ${server.pendingRequests}\n` + `Active WebSockets: ${server.pendingWebSockets}`,
15
+ );
16
+ },
17
+ });
18
+ ```
19
+
20
+ ### `server.subscriberCount(topic)`
21
+
22
+ Get count of subscribers for a WebSocket topic:
23
+
24
+ ```ts
25
+ const server = Bun.serve({
26
+ fetch(req, server) {
27
+ const chatUsers = server.subscriberCount("chat");
28
+ return new Response(`${chatUsers} users in chat`);
29
+ },
30
+ websocket: {
31
+ message(ws) {
32
+ ws.subscribe("chat");
33
+ },
34
+ },
35
+ });
36
+ ```