bun-types 1.3.2-canary.20251105T140650 → 1.3.2-canary.20251106T140813

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