@hoody-network/html-rewriter

Node.js-based derivative of the worker-tools/html-rewriter repo


License
MIT
Install
npm install @hoody-network/html-rewriter@0.3.0

Documentation

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.