HTML Rewriter
WASM-based implementation of Cloudflare's HTML Rewriter for use in Node.js. Hard fork of the NPM package @worker-tools/html-rewriter
.
It uses lol-html
under the hood, the same implementation used by Cloudflare Workers. It is based on Miniflare's WASM build.
Installation
This package only includes the file-based WASM approach from the @worker-tools/html-rewriter
package.
index.ts
loads the WASM that is co-located with this module via the fs/promises API and instantiates the module that way. The approach used in @worker-tools/html-rewriter
is broken in Node.js version 16 and is one of the primary reasons for the hard fork.
Usage
import {
HTMLRewriter
} from '@hoody-network/html-rewriter'
new HTMLRewriter()
.on("p", {
element(element) {
element.tagName = "h1"
},
})
.transform(new Response('<p class="red">test</p>'))
.text().then(x => console.log(x))
For more on how to use HTMLRewriter, see the Cloudflare Workers Docs.
Building
Make sure you've initialized all git submodules. It is 2 levels deep.
git submodule update --init --recursive
If this recursive init doesn't work for you, it's probably because the URL for wasm-pack
in the .gitmodules
file in html-rewriter-wasm
is pointing to a Git endpoint. Try to make it use the HTTPS endpoint instead. Then after you do this, make sure to run git submodule sync
inside the html-rewriter-wasm
directory.
Make sure you have rustup
installed. Then run
make dist
This 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.