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,334 +0,0 @@
1
- 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).
2
-
3
- ## Usage
4
-
5
- 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:
6
-
7
- ```ts
8
- // Replace all images with a rickroll
9
- const rewriter = new HTMLRewriter().on("img", {
10
- element(img) {
11
- // Famous rickroll video thumbnail
12
- img.setAttribute(
13
- "src",
14
- "https://img.youtube.com/vi/dQw4w9WgXcQ/maxresdefault.jpg",
15
- );
16
-
17
- // Wrap the image in a link to the video
18
- img.before(
19
- '<a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ" target="_blank">',
20
- { html: true },
21
- );
22
- img.after("</a>", { html: true });
23
-
24
- // Add some fun alt text
25
- img.setAttribute("alt", "Definitely not a rickroll");
26
- },
27
- });
28
-
29
- // An example HTML document
30
- const html = `
31
- <html>
32
- <body>
33
- <img src="/cat.jpg">
34
- <img src="dog.png">
35
- <img src="https://example.com/bird.webp">
36
- </body>
37
- </html>
38
- `;
39
-
40
- const result = rewriter.transform(html);
41
- console.log(result);
42
- ```
43
-
44
- This replaces all images with a thumbnail of Rick Astley and wraps each `<img>` in a link, producing a diff like this:
45
-
46
- ```html-diff
47
- <html>
48
- <body>
49
- - <img src="/cat.jpg">
50
- - <img src="dog.png">
51
- - <img src="https://example.com/bird.webp">
52
- + <a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ" target="_blank">
53
- + <img src="https://img.youtube.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" alt="Definitely not a rickroll">
54
- + </a>
55
- + <a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ" target="_blank">
56
- + <img src="https://img.youtube.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" alt="Definitely not a rickroll">
57
- + </a>
58
- + <a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ" target="_blank">
59
- + <img src="https://img.youtube.com/vi/dQw4w9WgXcQ/maxresdefault.jpg" alt="Definitely not a rickroll">
60
- + </a>
61
- </body>
62
- </html>
63
- ```
64
-
65
- 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).
66
-
67
- ### Input types
68
-
69
- HTMLRewriter can transform HTML from various sources. The input is automatically handled based on its type:
70
-
71
- ```ts
72
- // From Response
73
- rewriter.transform(new Response("<div>content</div>"));
74
-
75
- // From string
76
- rewriter.transform("<div>content</div>");
77
-
78
- // From ArrayBuffer
79
- rewriter.transform(new TextEncoder().encode("<div>content</div>").buffer);
80
-
81
- // From Blob
82
- rewriter.transform(new Blob(["<div>content</div>"]));
83
-
84
- // From File
85
- rewriter.transform(Bun.file("index.html"));
86
- ```
87
-
88
- Note that Cloudflare Workers implementation of HTMLRewriter only supports `Response` objects.
89
-
90
- ### Element Handlers
91
-
92
- 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:
93
-
94
- ```ts
95
- rewriter.on("div.content", {
96
- // Handle elements
97
- element(element) {
98
- element.setAttribute("class", "new-content");
99
- element.append("<p>New content</p>", { html: true });
100
- },
101
- // Handle text nodes
102
- text(text) {
103
- text.replace("new text");
104
- },
105
- // Handle comments
106
- comments(comment) {
107
- comment.remove();
108
- },
109
- });
110
- ```
111
-
112
- The handlers can be asynchronous and return a Promise. Note that async operations will block the transformation until they complete:
113
-
114
- ```ts
115
- rewriter.on("div", {
116
- async element(element) {
117
- await Bun.sleep(1000);
118
- element.setInnerContent("<span>replace</span>", { html: true });
119
- },
120
- });
121
- ```
122
-
123
- ### CSS Selector Support
124
-
125
- The `on()` method supports a wide range of CSS selectors:
126
-
127
- ```ts
128
- // Tag selectors
129
- rewriter.on("p", handler);
130
-
131
- // Class selectors
132
- rewriter.on("p.red", handler);
133
-
134
- // ID selectors
135
- rewriter.on("h1#header", handler);
136
-
137
- // Attribute selectors
138
- rewriter.on("p[data-test]", handler); // Has attribute
139
- rewriter.on('p[data-test="one"]', handler); // Exact match
140
- rewriter.on('p[data-test="one" i]', handler); // Case-insensitive
141
- rewriter.on('p[data-test="one" s]', handler); // Case-sensitive
142
- rewriter.on('p[data-test~="two"]', handler); // Word match
143
- rewriter.on('p[data-test^="a"]', handler); // Starts with
144
- rewriter.on('p[data-test$="1"]', handler); // Ends with
145
- rewriter.on('p[data-test*="b"]', handler); // Contains
146
- rewriter.on('p[data-test|="a"]', handler); // Dash-separated
147
-
148
- // Combinators
149
- rewriter.on("div span", handler); // Descendant
150
- rewriter.on("div > span", handler); // Direct child
151
-
152
- // Pseudo-classes
153
- rewriter.on("p:nth-child(2)", handler);
154
- rewriter.on("p:first-child", handler);
155
- rewriter.on("p:nth-of-type(2)", handler);
156
- rewriter.on("p:first-of-type", handler);
157
- rewriter.on("p:not(:first-child)", handler);
158
-
159
- // Universal selector
160
- rewriter.on("*", handler);
161
- ```
162
-
163
- ### Element Operations
164
-
165
- Elements provide various methods for manipulation. All modification methods return the element instance for chaining:
166
-
167
- ```ts
168
- rewriter.on("div", {
169
- element(el) {
170
- // Attributes
171
- el.setAttribute("class", "new-class").setAttribute("data-id", "123");
172
-
173
- const classAttr = el.getAttribute("class"); // "new-class"
174
- const hasId = el.hasAttribute("id"); // boolean
175
- el.removeAttribute("class");
176
-
177
- // Content manipulation
178
- el.setInnerContent("New content"); // Escapes HTML by default
179
- el.setInnerContent("<p>HTML content</p>", { html: true }); // Parses HTML
180
- el.setInnerContent(""); // Clear content
181
-
182
- // Position manipulation
183
- el.before("Content before")
184
- .after("Content after")
185
- .prepend("First child")
186
- .append("Last child");
187
-
188
- // HTML content insertion
189
- el.before("<span>before</span>", { html: true })
190
- .after("<span>after</span>", { html: true })
191
- .prepend("<span>first</span>", { html: true })
192
- .append("<span>last</span>", { html: true });
193
-
194
- // Removal
195
- el.remove(); // Remove element and contents
196
- el.removeAndKeepContent(); // Remove only the element tags
197
-
198
- // Properties
199
- console.log(el.tagName); // Lowercase tag name
200
- console.log(el.namespaceURI); // Element's namespace URI
201
- console.log(el.selfClosing); // Whether element is self-closing (e.g. <div />)
202
- console.log(el.canHaveContent); // Whether element can contain content (false for void elements like <br>)
203
- console.log(el.removed); // Whether element was removed
204
-
205
- // Attributes iteration
206
- for (const [name, value] of el.attributes) {
207
- console.log(name, value);
208
- }
209
-
210
- // End tag handling
211
- el.onEndTag(endTag => {
212
- endTag.before("Before end tag");
213
- endTag.after("After end tag");
214
- endTag.remove(); // Remove the end tag
215
- console.log(endTag.name); // Tag name in lowercase
216
- });
217
- },
218
- });
219
- ```
220
-
221
- ### Text Operations
222
-
223
- Text handlers provide methods for text manipulation. Text chunks represent portions of text content and provide information about their position in the text node:
224
-
225
- ```ts
226
- rewriter.on("p", {
227
- text(text) {
228
- // Content
229
- console.log(text.text); // Text content
230
- console.log(text.lastInTextNode); // Whether this is the last chunk
231
- console.log(text.removed); // Whether text was removed
232
-
233
- // Manipulation
234
- text.before("Before text").after("After text").replace("New text").remove();
235
-
236
- // HTML content insertion
237
- text
238
- .before("<span>before</span>", { html: true })
239
- .after("<span>after</span>", { html: true })
240
- .replace("<span>replace</span>", { html: true });
241
- },
242
- });
243
- ```
244
-
245
- ### Comment Operations
246
-
247
- Comment handlers allow comment manipulation with similar methods to text nodes:
248
-
249
- ```ts
250
- rewriter.on("*", {
251
- comments(comment) {
252
- // Content
253
- console.log(comment.text); // Comment text
254
- comment.text = "New comment text"; // Set comment text
255
- console.log(comment.removed); // Whether comment was removed
256
-
257
- // Manipulation
258
- comment
259
- .before("Before comment")
260
- .after("After comment")
261
- .replace("New comment")
262
- .remove();
263
-
264
- // HTML content insertion
265
- comment
266
- .before("<span>before</span>", { html: true })
267
- .after("<span>after</span>", { html: true })
268
- .replace("<span>replace</span>", { html: true });
269
- },
270
- });
271
- ```
272
-
273
- ### Document Handlers
274
-
275
- 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:
276
-
277
- ```ts
278
- rewriter.onDocument({
279
- // Handle doctype
280
- doctype(doctype) {
281
- console.log(doctype.name); // "html"
282
- console.log(doctype.publicId); // public identifier if present
283
- console.log(doctype.systemId); // system identifier if present
284
- },
285
- // Handle text nodes
286
- text(text) {
287
- console.log(text.text);
288
- },
289
- // Handle comments
290
- comments(comment) {
291
- console.log(comment.text);
292
- },
293
- // Handle document end
294
- end(end) {
295
- end.append("<!-- Footer -->", { html: true });
296
- },
297
- });
298
- ```
299
-
300
- ### Response Handling
301
-
302
- When transforming a Response:
303
-
304
- - The status code, headers, and other response properties are preserved
305
- - The body is transformed while maintaining streaming capabilities
306
- - Content-encoding (like gzip) is handled automatically
307
- - The original response body is marked as used after transformation
308
- - Headers are cloned to the new response
309
-
310
- ## Error Handling
311
-
312
- HTMLRewriter operations can throw errors in several cases:
313
-
314
- - Invalid selector syntax in `on()` method
315
- - Invalid HTML content in transformation methods
316
- - Stream errors when processing Response bodies
317
- - Memory allocation failures
318
- - Invalid input types (e.g., passing Symbol)
319
- - Body already used errors
320
-
321
- Errors should be caught and handled appropriately:
322
-
323
- ```ts
324
- try {
325
- const result = rewriter.transform(input);
326
- // Process result
327
- } catch (error) {
328
- console.error("HTMLRewriter error:", error);
329
- }
330
- ```
331
-
332
- ## See also
333
-
334
- 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.