UNPKG

5.67 kBMarkdownView Raw
1# HTML Rewriter
2
3WASM-based implementation of Cloudflare's HTML Rewriter for use in Deno, browsers, etc.
4
5It uses `lol-html` under the hood, the same implementation used by Cloudflare Workers. It is based on [Miniflare's WASM build](https://github.com/mrbbot/html-rewriter-wasm).
6
7## Installation
8This package includes 2 versions of HTML Rewriter.
9
10`index.ts` loads the WASM that is co-located with this module via fetch and (streaming-) instantiates the module that way. In Deno, this works via file system (if you've downloaded the module) and web (when loading from deno.land/x or even githubusercontent.com).
11However, if you are using this version with other tooling, depending on the bundler and configuration the WASM source may or may not be included...
12
13`base64.ts` has the required WASM inlined as compressed base64. The total size is 447K (345K gzipped).
14This ensures that HTML Rewriter is working properly when bundled, offline, etc.
15The "hackyness" of ~400K of inlined WASM and relying on [`DecompressionStream`][dcs] is significant (without compression, the file size would be 1.2MB), but its simplicity makes it easier to get it to work with various bundlers (including Deno's own, as of this writing).
16
17[dcs]: https://developer.mozilla.org/en-US/docs/Web/API/DecompressionStream
18
19### Use in Browser
20For use in the browser it's best to install the "node-ified" package from npm and use it with a bundler.
21
22```sh
23npm install @worker-tools/html-rewriter
24```
25
26Which version of HTML Rewriter to pick depends on which bundler you are using:
27
28For **Webpack 4**, it's best to use the non-ESM base64 version via its full path: `@worker-tools/html-rewriter/script/base64`.
29
30**Webpack 5** treats the regular version correctly by default, which can be imported as `@worker-tools/html-rewriter`.
31
32For **esbuild** it's best to use the base64-version via `@worker-tools/html-rewriter/base64`.
33
34You can explore the full contents of the npm package [here](https://unpkg.com/browse/@worker-tools/html-rewriter/).
35
36## Usage
37
38```ts
39import {
40 HTMLRewriter
41} from 'https://ghuc.cc/worker-tools/html-rewriter/index.ts'
42
43new HTMLRewriter()
44 .on("p", {
45 element(element) {
46 element.tagName = "h1"
47 },
48 })
49 .transform(new Response('<p class="red">test</p>'))
50 .text().then(x => console.log(x))
51```
52
53For more on how to use HTMLRewriter, see the [Cloudflare Workers Docs](https://developers.cloudflare.com/workers/runtime-apis/html-rewriter/).
54
55
56## Building
57
58Make sure you've initialized all git submodules. It is 2 levels deep.
59
60```sh
61git submodule update --init --recursive
62```
63
64Make sure you have `rustup` installed. Then run
65
66```sh
67make dist
68```
69
70This will build a custom version of `wasm-pack` first, then use it to compile `lol-html` to WASM. Please see the submodules for details on why this is necessary.
71
72--------
73
74<p align="center"><a href="https://workers.tools"><img src="https://workers.tools/assets/img/logo.svg" width="100" height="100" /></a>
75<p align="center">This module is part of the Worker Tools collection<br/>⁕
76
77[Worker Tools](https://workers.tools) are a collection of TypeScript libraries for writing web servers in [Worker Runtimes](https://workers.js.org) such as Cloudflare Workers, Deno Deploy and Service Workers in the browser.
78
79If you liked this module, you might also like:
80
81- 🧭 [__Worker Router__][router] --- Complete routing solution that works across CF Workers, Deno and Service Workers
82- πŸ”‹ [__Worker Middleware__][middleware] --- A suite of standalone HTTP server-side middleware with TypeScript support
83- πŸ“„ [__Worker HTML__][html] --- HTML templating and streaming response library
84- πŸ“¦ [__Storage Area__][kv-storage] --- Key-value store abstraction across [Cloudflare KV][cloudflare-kv-storage], [Deno][deno-kv-storage] and browsers.
85- πŸ†— [__Response Creators__][response-creators] --- Factory functions for responses with pre-filled status and status text
86- 🎏 [__Stream Response__][stream-response] --- Use async generators to build streaming responses for SSE, etc...
87- πŸ₯ [__JSON Fetch__][json-fetch] --- Drop-in replacements for Fetch API classes with first class support for JSON.
88- πŸ¦‘ [__JSON Stream__][json-stream] --- Streaming JSON parser/stingifier with first class support for web streams.
89
90Worker Tools also includes a number of polyfills that help bridge the gap between Worker Runtimes:
91- ✏️ [__HTML Rewriter__][html-rewriter] --- Cloudflare's HTML Rewriter for use in Deno, browsers, etc...
92- πŸ“ [__Location Polyfill__][location-polyfill] --- A `Location` polyfill for Cloudflare Workers.
93- πŸ¦• [__Deno Fetch Event Adapter__][deno-fetch-event-adapter] --- Dispatches global `fetch` events using Deno’s native HTTP server.
94
95[router]: https://workers.tools/router
96[middleware]: https://workers.tools/middleware
97[html]: https://workers.tools/html
98[kv-storage]: https://workers.tools/kv-storage
99[cloudflare-kv-storage]: https://workers.tools/cloudflare-kv-storage
100[deno-kv-storage]: https://workers.tools/deno-kv-storage
101[kv-storage-polyfill]: https://workers.tools/kv-storage-polyfill
102[response-creators]: https://workers.tools/response-creators
103[stream-response]: https://workers.tools/stream-response
104[json-fetch]: https://workers.tools/json-fetch
105[json-stream]: https://workers.tools/json-stream
106[request-cookie-store]: https://workers.tools/request-cookie-store
107[extendable-promise]: https://workers.tools/extendable-promise
108[html-rewriter]: https://workers.tools/html-rewriter
109[location-polyfill]: https://workers.tools/location-polyfill
110[deno-fetch-event-adapter]: https://workers.tools/deno-fetch-event-adapter
111
112Fore more visit [workers.tools](https://workers.tools).