From 07864e0b246dd3d639e8dbc6f3b5342b4760ea18 Mon Sep 17 00:00:00 2001
From: remorses
Date: Thu, 27 Jul 2023 14:23:01 +0200
Subject: [PATCH 01/55] stuff
---
build.sh | 27 ++---
html_rewriter.js.patch | 242 -----------------------------------------
index.ts | 61 +++++++++++
package.json | 11 +-
play.ts | 17 +++
tsconfig.json | 2 +-
6 files changed, 99 insertions(+), 261 deletions(-)
delete mode 100644 html_rewriter.js.patch
create mode 100644 index.ts
create mode 100644 play.ts
diff --git a/build.sh b/build.sh
index a0b894e..686b577 100755
--- a/build.sh
+++ b/build.sh
@@ -4,24 +4,25 @@ set -e
echo "---> Checking wasm-pack version..."
# We need to make sure the version of wasm-pack uses Binaryen version_92,
# which exports asyncify_get_state
-WASM_PACK_VERSION=$(wasm-pack --version)
-if [[ ! $WASM_PACK_VERSION =~ -asyncify$ ]]; then
- echo "$WASM_PACK_VERSION installed, please install mrbbot's fork:"
- echo "cargo install --git https://github.com/mrbbot/wasm-pack"
- exit 1
-fi
+# WASM_PACK_VERSION=$(wasm-pack --version)
+# if [[ ! $WASM_PACK_VERSION =~ -asyncify$ ]]; then
+# echo "$WASM_PACK_VERSION installed, please install mrbbot's fork:"
+# echo "cargo install --git https://github.com/mrbbot/wasm-pack"
+# exit 1
+# fi
echo "---> Building WebAssembly with wasm-pack..."
-wasm-pack build --target nodejs
+wasm-pack build
-echo "---> Patching JavaScript glue code..."
-# Wraps write/end with asyncify magic and adds this returns for chaining
-# diff -uN pkg/html_rewriter.js pkg2/html_rewriter.js > html_rewriter.js.patch
-patch -uN pkg/html_rewriter.js < html_rewriter.js.patch
+# echo "---> Patching JavaScript glue code..."
+# # Wraps write/end with asyncify magic and adds this returns for chaining
+# # diff -uN pkg/html_rewriter.js pkg2/html_rewriter.js > html_rewriter.js.patch
+# patch -uN pkg/html_rewriter.js < html_rewriter.js.patch
echo "---> Copying required files to dist..."
mkdir -p dist
cp pkg/html_rewriter.js dist/html_rewriter.js
cp pkg/html_rewriter_bg.wasm dist/html_rewriter_bg.wasm
-cp src/asyncify.js dist/asyncify.js
-cp src/html_rewriter.d.ts dist/html_rewriter.d.ts
+cp pkg/html_rewriter_bg.js dist/html_rewriter_bg.js
+# cp src/asyncify.js dist/asyncify.js
+cp pkg/html_rewriter.d.ts dist/html_rewriter.d.ts
diff --git a/html_rewriter.js.patch b/html_rewriter.js.patch
deleted file mode 100644
index ae2c6d8..0000000
--- a/html_rewriter.js.patch
+++ /dev/null
@@ -1,242 +0,0 @@
---- pkg/html_rewriter.js 2022-01-18 17:37:39.000000000 +0000
-+++ pkg2/html_rewriter.js 2022-01-18 17:37:19.000000000 +0000
-@@ -1,7 +1,7 @@
- let imports = {};
- imports['__wbindgen_placeholder__'] = module.exports;
- let wasm;
--const { awaitPromise } = require(String.raw`./asyncify.js`);
-+const { awaitPromise, setWasmExports, wrap } = require(String.raw`./asyncify.js`);
- const { TextDecoder, TextEncoder } = require(String.raw`util`);
-
- const heap = new Array(32).fill(undefined);
-@@ -233,6 +233,7 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.comment_before(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- * @param {string} content
-@@ -242,6 +243,7 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.comment_after(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- * @param {string} content
-@@ -251,11 +253,13 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.comment_replace(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- */
- remove() {
- wasm.comment_remove(this.ptr);
-+ return this;
- }
- /**
- * @returns {boolean}
-@@ -364,6 +368,7 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.documentend_append(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- }
- module.exports.DocumentEnd = DocumentEnd;
-@@ -397,6 +402,7 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.element_before(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- * @param {string} content
-@@ -406,6 +412,7 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.element_after(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- * @param {string} content
-@@ -415,11 +422,13 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.element_replace(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- */
- remove() {
- wasm.element_remove(this.ptr);
-+ return this;
- }
- /**
- * @returns {boolean}
-@@ -463,7 +472,7 @@
- */
- get attributes() {
- var ret = wasm.element_attributes(this.ptr);
-- return takeObject(ret);
-+ return takeObject(ret)[Symbol.iterator]();
- }
- /**
- * @param {string} name
-@@ -495,6 +504,7 @@
- var ptr1 = passStringToWasm0(value, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len1 = WASM_VECTOR_LEN;
- wasm.element_setAttribute(this.ptr, ptr0, len0, ptr1, len1);
-+ return this;
- }
- /**
- * @param {string} name
-@@ -503,6 +513,7 @@
- var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.element_removeAttribute(this.ptr, ptr0, len0);
-+ return this;
- }
- /**
- * @param {string} content
-@@ -512,6 +523,7 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.element_prepend(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- * @param {string} content
-@@ -521,6 +533,7 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.element_append(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- * @param {string} content
-@@ -530,17 +543,19 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.element_setInnerContent(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- */
- removeAndKeepContent() {
- wasm.element_removeAndKeepContent(this.ptr);
-+ return this;
- }
- /**
- * @param {any} handler
- */
- onEndTag(handler) {
-- wasm.element_onEndTag(this.ptr, addHeapObject(handler));
-+ wasm.element_onEndTag(this.ptr, addHeapObject(handler.bind(this)));
- }
- }
- module.exports.Element = Element;
-@@ -597,6 +612,7 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.endtag_before(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- * @param {string} content
-@@ -606,11 +622,13 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.endtag_after(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- */
- remove() {
- wasm.endtag_remove(this.ptr);
-+ return this;
- }
- }
- module.exports.EndTag = EndTag;
-@@ -656,25 +674,27 @@
- var ptr0 = passStringToWasm0(selector, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.htmlrewriter_on(this.ptr, ptr0, len0, addHeapObject(handlers));
-+ return this;
- }
- /**
- * @param {any} handlers
- */
- onDocument(handlers) {
- wasm.htmlrewriter_onDocument(this.ptr, addHeapObject(handlers));
-+ return this;
- }
- /**
- * @param {Uint8Array} chunk
- */
-- write(chunk) {
-+ async write(chunk) {
- var ptr0 = passArray8ToWasm0(chunk, wasm.__wbindgen_malloc);
- var len0 = WASM_VECTOR_LEN;
-- wasm.htmlrewriter_write(this.ptr, ptr0, len0);
-+ await wrap(this, wasm.htmlrewriter_write, this.ptr, ptr0, len0);
- }
- /**
- */
-- end() {
-- wasm.htmlrewriter_end(this.ptr);
-+ async end() {
-+ await wrap(this, wasm.htmlrewriter_end, this.ptr);
- }
- /**
- * @returns {number}
-@@ -715,6 +735,7 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.textchunk_before(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- * @param {string} content
-@@ -724,6 +745,7 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.textchunk_after(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- * @param {string} content
-@@ -733,11 +755,13 @@
- var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
- var len0 = WASM_VECTOR_LEN;
- wasm.textchunk_replace(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
-+ return this;
- }
- /**
- */
- remove() {
- wasm.textchunk_remove(this.ptr);
-+ return this;
- }
- /**
- * @returns {boolean}
-@@ -893,7 +917,8 @@
- };
-
- module.exports.__wbg_instanceof_Promise_c6535fc791fcc4d2 = function(arg0) {
-- var ret = getObject(arg0) instanceof Promise;
-+ var obj = getObject(arg0);
-+ var ret = (obj instanceof Promise) || (Object.prototype.toString.call(obj) === '[object Promise]');
- return ret;
- };
-
-@@ -939,5 +964,6 @@
- const wasmModule = new WebAssembly.Module(bytes);
- const wasmInstance = new WebAssembly.Instance(wasmModule, imports);
- wasm = wasmInstance.exports;
-+setWasmExports(wasm);
- module.exports.__wasm = wasm;
-
diff --git a/index.ts b/index.ts
new file mode 100644
index 0000000..a1aa8d3
--- /dev/null
+++ b/index.ts
@@ -0,0 +1,61 @@
+import {
+
+ HTMLRewriter as RawHTMLRewriter,
+
+} from './dist/html_rewriter'
+
+
+const encoder = new TextEncoder()
+const decoder = new TextDecoder()
+
+type ElementHandlers = {
+ element?(element: any): void | Promise
+}
+
+
+export class HTMLRewriter {
+ private elementHandlers: [selector: string, handlers: any][] =
+ []
+
+ constructor(private readonly options?: any) {}
+
+ on(selector: string, handlers: ElementHandlers): this {
+ this.elementHandlers.push([selector, handlers])
+ return this
+ }
+
+ async transform(res: Response) {
+
+ let output = ''
+ const rewriter = new RawHTMLRewriter((chunk: any) => {
+ output += decoder.decode(chunk)
+ }, this.options)
+ for (const [selector, handlers] of this.elementHandlers) {
+ rewriter.on(selector, handlers)
+ }
+
+ try {
+ await rewriter.write(encoder.encode(await res.text()))
+ await rewriter.end()
+ return new Response(output, res)
+ } finally {
+ rewriter.free()
+ }
+ }
+}
+
+async function main() {
+
+ const res1 = new Response(`hello
foo`)
+ const res2 = await new HTMLRewriter().on('h1', {
+ element(element) {
+ element.setInnerContent('hello world')
+ }
+ }).on('a', {
+ element(element) {
+ element.setAttribute('href', 'https://google.com')
+ }
+ }).transform(res1)
+ console.log(await res2.text())
+}
+main()
\ No newline at end of file
diff --git a/package.json b/package.json
index 7c54b31..dd5a2e9 100644
--- a/package.json
+++ b/package.json
@@ -1,11 +1,12 @@
{
- "name": "html-rewriter-wasm",
- "version": "0.4.1",
+ "name": "@xmorse/html-rewriter-wasm",
+ "version": "0.0.0",
"description": "WebAssembly version of HTMLRewriter",
- "main": "dist/html_rewriter.js",
- "types": "dist/html_rewriter.d.ts",
+ "main": "index.ts",
+
"files": [
- "dist"
+ "dist",
+ "index.ts"
],
"scripts": {
"prepublishOnly": "npm run build && npm test",
diff --git a/play.ts b/play.ts
new file mode 100644
index 0000000..402cc9b
--- /dev/null
+++ b/play.ts
@@ -0,0 +1,17 @@
+import { HTMLRewriter } from "./index"
+
+async function main() {
+
+ const res1 = new Response(`hello
foo`)
+ const res2 = await new HTMLRewriter().on('h1', {
+ element(element) {
+ element.setInnerContent('hello world')
+ }
+ }).on('a', {
+ element(element) {
+ element.setAttribute('href', 'https://google.com')
+ }
+ }).transform(res1)
+ console.log(await res2.text())
+}
+main()
\ No newline at end of file
diff --git a/tsconfig.json b/tsconfig.json
index f97c5c0..0c276d1 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,7 +2,7 @@
"compilerOptions": {
"module": "commonjs",
"target": "es2018",
- "lib": ["es2018"],
+ "lib": ["es2018", "dom"],
"strict": true,
"moduleResolution": "node",
"esModuleInterop": true,
From bd7739e04293ba8a705d664e643e80c305b738f0 Mon Sep 17 00:00:00 2001
From: remorses
Date: Thu, 27 Jul 2023 14:23:03 +0200
Subject: [PATCH 02/55] readme: update
---
README.md | 184 ------------------------------------------------------
1 file changed, 184 deletions(-)
diff --git a/README.md b/README.md
index f60b59a..e69de29 100644
--- a/README.md
+++ b/README.md
@@ -1,184 +0,0 @@
-# `html-rewriter-wasm`
-
-An implementation of
-[HTMLRewriter](https://developers.cloudflare.com/workers/runtime-apis/html-rewriter)
-using a WebAssembly version of
-[lol-html](https://github.com/cloudflare/lol-html/). This was primarily written
-for [🔥 Miniflare](https://github.com/mrbbot/miniflare), but may be useful for
-other projects too. Many thanks to [@inikulin](https://github.com/inikulin) for
-their work on
-[lol-html's JavaScript API](https://github.com/cloudflare/lol-html/tree/master/js-api)
-which this package's Rust code is based on.
-
-## Features
-
-- 🔋 Supports all handler types, properties and methods
-- ⏰ Supports synchronous and asynchronous handlers
-- 📌 Supports class handlers with correctly bound methods
-
-## Usage
-
-```js
-import { HTMLRewriter } from "html-rewriter-wasm";
-
-const encoder = new TextEncoder();
-const decoder = new TextDecoder();
-
-let output = "";
-const rewriter = new HTMLRewriter((outputChunk) => {
- output += decoder.decode(outputChunk);
-});
-
-rewriter.on("p", {
- element(element) {
- element.setInnerContent("new");
- },
-});
-
-try {
- await rewriter.write(encoder.encode("old
"));
- await rewriter.end();
- console.log(output); // new
-} finally {
- rewriter.free(); // Remember to free memory
-}
-```
-
-See [test/index.ts](./test/index.ts) for a more traditional `HTMLRewriter`
-implementation that doesn't have the caveats listed below, but restricts input
-and output to strings.
-
-To enable the
-[`html_rewriter_treats_esi_include_as_void_tag`](https://developers.cloudflare.com/workers/platform/compatibility-dates#htmlrewriter-handling-of-esiinclude)
-compatibility flag, set `enableEsiTags` when constructing the `HTMLRewriter`:
-
-```js
-const rewriter = new HTMLRewriter((outputChunk) => { ... }, {
- enableEsiTags: true,
-});
-```
-
-## Caveats
-
-- Once `write` or `end` has been called, you cannot add any more handlers. You
- must register all handlers before you start transforming:
-
- ```js
- const rewriter = new HTMLRewriter(...);
-
- // ❌
- rewriter.on("h1", { ... });
- await rewriter.write(encoder.encode("1
2
"));
-
- // ✅
- rewriter.on("h1", { ... });
- rewriter.on("p", { ... });
- await rewriter.write(encoder.encode("1
2"));
- ```
-
-- `end` may only be called once per `HTMLRewriter` instance. This means you must
- create a new `HTMLRewriter` instance for each transformation:
-
- ```js
- // ❌
- const rewriter = new HTMLRewriter(...);
- await rewriter.end();
- await rewriter.end(); // not allowed
-
- // ✅
- const rewriter1 = new HTMLRewriter(...);
- await rewriter1.end();
- const rewriter2 = new HTMLRewriter(...);
- await rewriter2.end();
- ```
-
-- When using `async` handlers, you must always `await` calls to `write` and
- `end` before calling them again. In other words, you cannot have concurrent
- `write` and `end` calls:
-
- ```js
- const rewriter = new HTMLRewriter(...).on("p", {
- async element(element) {
- await fetch(...);
- element.setInnerContent("new");
- }
- });
-
- // ❌
- rewriter.write(encoder.encode("1
"));
- rewriter.write(encoder.encode("2
")); // not allowed
-
- // ❌
- const promise1 = rewriter.write(encoder.encode("1
"));
- const promise2 = rewriter.write(encoder.encode("2
"));
- await Promise.all([promise1, promise2]); // not allowed
-
- // ✅
- await rewriter.write(encoder.encode("1
"));
- await rewriter.write(encoder.encode("2
"));
- ```
-
-## Internals
-
-`lol-html` doesn't natively support asynchronous handlers. Instead, whenever a
-handler returns a `Promise`, we have to unwind the WebAssembly stack into
-temporary storage, wait for the promise to resolve, then rewind the stack and
-continue parsing. This temporary storage is per `HTMLRewriter` instance, hence
-we cannot have concurrent `write` and `end` calls. We use the
-[Asyncify](https://github.com/WebAssembly/binaryen/blob/main/src/passes/Asyncify.cpp)
-feature of [Binaryen](https://github.com/WebAssembly/binaryen) to implement
-this. See
-[this article](https://kripken.github.io/blog/wasm/2019/07/16/asyncify.html) for
-more details.
-
-## Building
-
-You can build the package by running `npm run build`. You must do this prior to
-running tests with `npm test`.
-
-You **must** have mrbbot's fork of wasm-pack installed. This upgrades binaryen
-(wasm-opt) to version_92 which exports `asyncify_get_state`:
-
-```shell
-$ cargo install --git https://github.com/mrbbot/wasm-pack
-$ npm run build
-$ npm test
-```
-
-## License
-
-`html-rewriter-wasm` uses [lol-html](https://github.com/cloudflare/lol-html/)
-which is BSD 3-Clause licensed:
-
-```
-Copyright (C) 2019, Cloudflare, Inc.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
-1. Redistributions of source code must retain the above copyright notice, this
-list of conditions and the following disclaimer.
-
-2. Redistributions in binary form must reproduce the above copyright notice,
-this list of conditions and the following disclaimer in the documentation and/or
-other materials provided with the distribution.
-
-3. Neither the name of the copyright holder nor the names of its contributors
-may be used to endorse or promote products derived from this software without
-specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
-ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
-ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-```
From d68798dccb95edfc987c810a11895dfe37d1a8aa Mon Sep 17 00:00:00 2001
From: remorses
Date: Thu, 27 Jul 2023 15:00:27 +0200
Subject: [PATCH 03/55] works in edge runtime
---
.gitignore | 1 -
.prettierrc | 3 -
build.sh | 6 +-
dist/asyncify.js | 112 +
dist/html_rewriter.d.ts | 302 ++
dist/html_rewriter.js | 948 +++++
dist/html_rewriter_bg.js | 929 +++++
dist/html_rewriter_bg.wasm | Bin 0 -> 851914 bytes
dist/html_rewriter_bg.wasm.d.ts | 62 +
index.ts | 33 +-
package-lock.json | 5786 -------------------------------
tsconfig.json | 3 +-
12 files changed, 2365 insertions(+), 5820 deletions(-)
delete mode 100644 .prettierrc
create mode 100644 dist/asyncify.js
create mode 100644 dist/html_rewriter.d.ts
create mode 100644 dist/html_rewriter.js
create mode 100644 dist/html_rewriter_bg.js
create mode 100644 dist/html_rewriter_bg.wasm
create mode 100644 dist/html_rewriter_bg.wasm.d.ts
delete mode 100644 package-lock.json
diff --git a/.gitignore b/.gitignore
index 09f401c..ecad552 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,4 @@
.DS_Store
.idea
-dist
node_modules
target
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
deleted file mode 100644
index 3f758d7..0000000
--- a/.prettierrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "proseWrap": "always"
-}
\ No newline at end of file
diff --git a/build.sh b/build.sh
index 686b577..9718205 100755
--- a/build.sh
+++ b/build.sh
@@ -12,7 +12,7 @@ echo "---> Checking wasm-pack version..."
# fi
echo "---> Building WebAssembly with wasm-pack..."
-wasm-pack build
+wasm-pack build --target web
# echo "---> Patching JavaScript glue code..."
# # Wraps write/end with asyncify magic and adds this returns for chaining
@@ -24,5 +24,7 @@ mkdir -p dist
cp pkg/html_rewriter.js dist/html_rewriter.js
cp pkg/html_rewriter_bg.wasm dist/html_rewriter_bg.wasm
cp pkg/html_rewriter_bg.js dist/html_rewriter_bg.js
-# cp src/asyncify.js dist/asyncify.js
+cp src/asyncify.js dist/asyncify.js
cp pkg/html_rewriter.d.ts dist/html_rewriter.d.ts
+cp pkg/html_rewriter.d.ts dist/html_rewriter.d.ts
+cp pkg/html_rewriter_bg.wasm.d.ts dist/html_rewriter_bg.wasm.d.ts
diff --git a/dist/asyncify.js b/dist/asyncify.js
new file mode 100644
index 0000000..90845e0
--- /dev/null
+++ b/dist/asyncify.js
@@ -0,0 +1,112 @@
+const assert = require("assert");
+
+/**
+ * @typedef {object} WasmExports
+ * @property {WebAssembly.Memory} memory
+ * @property {function} asyncify_get_state
+ * @property {function} asyncify_start_unwind
+ * @property {function} asyncify_stop_unwind
+ * @property {function} asyncify_start_rewind
+ * @property {function} asyncify_stop_rewind
+ */
+
+/**
+ * @type {WasmExports}
+ */
+let wasm;
+
+/**
+ * @param {WasmExports} wasmExports
+ */
+function setWasmExports(wasmExports) {
+ wasm = wasmExports;
+}
+
+/**
+ * @type {Int32Array}
+ */
+let cachedInt32Memory = null;
+
+/**
+ * @returns {Int32Array}
+ */
+function getInt32Memory() {
+ if (
+ cachedInt32Memory === null ||
+ cachedInt32Memory.buffer !== wasm.memory.buffer
+ ) {
+ cachedInt32Memory = new Int32Array(wasm.memory.buffer);
+ }
+ return cachedInt32Memory;
+}
+
+// https://github.com/WebAssembly/binaryen/blob/fb9de9d391a7272548dcc41cd8229076189d7398/src/passes/Asyncify.cpp#L99
+const State = {
+ NONE: 0,
+ UNWINDING: 1,
+ REWINDING: 2,
+};
+
+function assertNoneState() {
+ assert.strictEqual(wasm.asyncify_get_state(), State.NONE);
+}
+
+/**
+ * Maps `HTMLRewriter`s (their `asyncifyStackPtr`s) to `Promise`s.
+ * `asyncifyStackPtr` acts as unique reference to `HTMLRewriter`.
+ * Each rewriter MUST have AT MOST ONE pending promise at any time.
+ * @type {Map}
+ */
+const promises = new Map();
+
+/**
+ * @param {number} stackPtr
+ * @param {Promise} promise
+ */
+function awaitPromise(stackPtr, promise) {
+ if (wasm.asyncify_get_state() === State.REWINDING) {
+ wasm.asyncify_stop_rewind();
+ return;
+ }
+
+ assertNoneState();
+
+ // https://github.com/WebAssembly/binaryen/blob/fb9de9d391a7272548dcc41cd8229076189d7398/src/passes/Asyncify.cpp#L106
+ assert.strictEqual(stackPtr % 4, 0);
+ getInt32Memory().set([stackPtr + 8, stackPtr + 1024], stackPtr / 4);
+
+ wasm.asyncify_start_unwind(stackPtr);
+
+ assert(!promises.has(stackPtr));
+ promises.set(stackPtr, promise);
+}
+
+/**
+ * @param {HTMLRewriter} rewriter
+ * @param {Function} fn
+ * @param args
+ */
+async function wrap(rewriter, fn, ...args) {
+ const stackPtr = rewriter.asyncifyStackPtr;
+
+ assertNoneState();
+ let result = fn(...args);
+
+ while (wasm.asyncify_get_state() === State.UNWINDING) {
+ wasm.asyncify_stop_unwind();
+
+ assertNoneState();
+ assert(promises.has(stackPtr));
+ await promises.get(stackPtr);
+ promises.delete(stackPtr);
+
+ assertNoneState();
+ wasm.asyncify_start_rewind(stackPtr);
+ result = fn();
+ }
+
+ assertNoneState();
+ return result;
+}
+
+module.exports = { awaitPromise, setWasmExports, wrap };
diff --git a/dist/html_rewriter.d.ts b/dist/html_rewriter.d.ts
new file mode 100644
index 0000000..2f58313
--- /dev/null
+++ b/dist/html_rewriter.d.ts
@@ -0,0 +1,302 @@
+/* tslint:disable */
+/* eslint-disable */
+/**
+*/
+export class Comment {
+ free(): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ before(content: string, content_type?: any): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ after(content: string, content_type?: any): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ replace(content: string, content_type?: any): void;
+/**
+*/
+ remove(): void;
+/**
+* @returns {boolean}
+*/
+ readonly removed: boolean;
+/**
+* @returns {string}
+*/
+ text: string;
+}
+/**
+*/
+export class Doctype {
+ free(): void;
+/**
+* @returns {any}
+*/
+ readonly name: any;
+/**
+* @returns {any}
+*/
+ readonly publicId: any;
+/**
+* @returns {any}
+*/
+ readonly systemId: any;
+}
+/**
+*/
+export class DocumentEnd {
+ free(): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ append(content: string, content_type?: any): void;
+}
+/**
+*/
+export class Element {
+ free(): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ before(content: string, content_type?: any): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ after(content: string, content_type?: any): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ replace(content: string, content_type?: any): void;
+/**
+*/
+ remove(): void;
+/**
+* @param {string} name
+* @returns {any}
+*/
+ getAttribute(name: string): any;
+/**
+* @param {string} name
+* @returns {boolean}
+*/
+ hasAttribute(name: string): boolean;
+/**
+* @param {string} name
+* @param {string} value
+*/
+ setAttribute(name: string, value: string): void;
+/**
+* @param {string} name
+*/
+ removeAttribute(name: string): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ prepend(content: string, content_type?: any): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ append(content: string, content_type?: any): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ setInnerContent(content: string, content_type?: any): void;
+/**
+*/
+ removeAndKeepContent(): void;
+/**
+* @param {any} handler
+*/
+ onEndTag(handler: any): void;
+/**
+* @returns {any}
+*/
+ readonly attributes: any;
+/**
+* @returns {any}
+*/
+ readonly namespaceURI: any;
+/**
+* @returns {boolean}
+*/
+ readonly removed: boolean;
+/**
+* @returns {string}
+*/
+ tagName: string;
+}
+/**
+*/
+export class EndTag {
+ free(): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ before(content: string, content_type?: any): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ after(content: string, content_type?: any): void;
+/**
+*/
+ remove(): void;
+/**
+* @returns {string}
+*/
+ name: string;
+}
+/**
+*/
+export class HTMLRewriter {
+ free(): void;
+/**
+* @param {any} output_sink
+* @param {any | undefined} options
+*/
+ constructor(output_sink: any, options?: any);
+/**
+* @param {string} selector
+* @param {any} handlers
+*/
+ on(selector: string, handlers: any): void;
+/**
+* @param {any} handlers
+*/
+ onDocument(handlers: any): void;
+/**
+* @param {Uint8Array} chunk
+*/
+ write(chunk: Uint8Array): void;
+/**
+*/
+ end(): void;
+/**
+* @returns {number}
+*/
+ readonly asyncifyStackPtr: number;
+}
+/**
+*/
+export class TextChunk {
+ free(): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ before(content: string, content_type?: any): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ after(content: string, content_type?: any): void;
+/**
+* @param {string} content
+* @param {any | undefined} content_type
+*/
+ replace(content: string, content_type?: any): void;
+/**
+*/
+ remove(): void;
+/**
+* @returns {boolean}
+*/
+ readonly lastInTextNode: boolean;
+/**
+* @returns {boolean}
+*/
+ readonly removed: boolean;
+/**
+* @returns {string}
+*/
+ readonly text: string;
+}
+
+export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
+
+export interface InitOutput {
+ readonly memory: WebAssembly.Memory;
+ readonly __wbg_element_free: (a: number) => void;
+ readonly element_before: (a: number, b: number, c: number, d: number) => void;
+ readonly element_after: (a: number, b: number, c: number, d: number) => void;
+ readonly element_replace: (a: number, b: number, c: number, d: number) => void;
+ readonly element_remove: (a: number) => void;
+ readonly element_removed: (a: number) => number;
+ readonly element_tag_name: (a: number, b: number) => void;
+ readonly element_set_tag_name: (a: number, b: number, c: number) => void;
+ readonly element_namespace_uri: (a: number) => number;
+ readonly element_attributes: (a: number) => number;
+ readonly element_getAttribute: (a: number, b: number, c: number) => number;
+ readonly element_hasAttribute: (a: number, b: number, c: number) => number;
+ readonly element_setAttribute: (a: number, b: number, c: number, d: number, e: number) => void;
+ readonly element_removeAttribute: (a: number, b: number, c: number) => void;
+ readonly element_prepend: (a: number, b: number, c: number, d: number) => void;
+ readonly element_append: (a: number, b: number, c: number, d: number) => void;
+ readonly element_setInnerContent: (a: number, b: number, c: number, d: number) => void;
+ readonly element_removeAndKeepContent: (a: number) => void;
+ readonly element_onEndTag: (a: number, b: number) => void;
+ readonly __wbg_comment_free: (a: number) => void;
+ readonly comment_before: (a: number, b: number, c: number, d: number) => void;
+ readonly comment_after: (a: number, b: number, c: number, d: number) => void;
+ readonly comment_replace: (a: number, b: number, c: number, d: number) => void;
+ readonly comment_remove: (a: number) => void;
+ readonly comment_removed: (a: number) => number;
+ readonly comment_text: (a: number, b: number) => void;
+ readonly comment_set_text: (a: number, b: number, c: number) => void;
+ readonly __wbg_textchunk_free: (a: number) => void;
+ readonly textchunk_before: (a: number, b: number, c: number, d: number) => void;
+ readonly textchunk_after: (a: number, b: number, c: number, d: number) => void;
+ readonly textchunk_replace: (a: number, b: number, c: number, d: number) => void;
+ readonly textchunk_remove: (a: number) => void;
+ readonly textchunk_removed: (a: number) => number;
+ readonly textchunk_text: (a: number, b: number) => void;
+ readonly textchunk_last_in_text_node: (a: number) => number;
+ readonly __wbg_doctype_free: (a: number) => void;
+ readonly doctype_name: (a: number) => number;
+ readonly doctype_public_id: (a: number) => number;
+ readonly doctype_system_id: (a: number) => number;
+ readonly documentend_append: (a: number, b: number, c: number, d: number) => void;
+ readonly endtag_name: (a: number, b: number) => void;
+ readonly endtag_set_name: (a: number, b: number, c: number) => void;
+ readonly endtag_before: (a: number, b: number, c: number, d: number) => void;
+ readonly endtag_after: (a: number, b: number, c: number, d: number) => void;
+ readonly endtag_remove: (a: number) => void;
+ readonly __wbg_documentend_free: (a: number) => void;
+ readonly __wbg_endtag_free: (a: number) => void;
+ readonly __wbg_htmlrewriter_free: (a: number) => void;
+ readonly htmlrewriter_new: (a: number, b: number) => number;
+ readonly htmlrewriter_on: (a: number, b: number, c: number, d: number) => void;
+ readonly htmlrewriter_onDocument: (a: number, b: number) => void;
+ readonly htmlrewriter_write: (a: number, b: number, c: number) => void;
+ readonly htmlrewriter_end: (a: number) => void;
+ readonly htmlrewriter_asyncify_stack_ptr: (a: number) => number;
+ readonly __wbindgen_malloc: (a: number) => number;
+ readonly __wbindgen_realloc: (a: number, b: number, c: number) => number;
+ readonly __wbindgen_add_to_stack_pointer: (a: number) => number;
+ readonly __wbindgen_free: (a: number, b: number) => void;
+ readonly __wbindgen_exn_store: (a: number) => void;
+}
+
+/**
+* If `module_or_path` is {RequestInfo} or {URL}, makes a request and
+* for everything else, calls `WebAssembly.instantiate` directly.
+*
+* @param {InitInput | Promise} module_or_path
+*
+* @returns {Promise}
+*/
+export default function init (module_or_path?: InitInput | Promise): Promise;
diff --git a/dist/html_rewriter.js b/dist/html_rewriter.js
new file mode 100644
index 0000000..a6e8e62
--- /dev/null
+++ b/dist/html_rewriter.js
@@ -0,0 +1,948 @@
+import { awaitPromise } from './asyncify.js';
+
+let wasm;
+
+const heap = new Array(32).fill(undefined);
+
+heap.push(undefined, null, true, false);
+
+function getObject(idx) { return heap[idx]; }
+
+let heap_next = heap.length;
+
+function dropObject(idx) {
+ if (idx < 36) return;
+ heap[idx] = heap_next;
+ heap_next = idx;
+}
+
+function takeObject(idx) {
+ const ret = getObject(idx);
+ dropObject(idx);
+ return ret;
+}
+
+let cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });
+
+cachedTextDecoder.decode();
+
+let cachegetUint8Memory0 = null;
+function getUint8Memory0() {
+ if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {
+ cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);
+ }
+ return cachegetUint8Memory0;
+}
+
+function getStringFromWasm0(ptr, len) {
+ return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
+}
+
+function addHeapObject(obj) {
+ if (heap_next === heap.length) heap.push(heap.length + 1);
+ const idx = heap_next;
+ heap_next = heap[idx];
+
+ heap[idx] = obj;
+ return idx;
+}
+
+function debugString(val) {
+ // primitive types
+ const type = typeof val;
+ if (type == 'number' || type == 'boolean' || val == null) {
+ return `${val}`;
+ }
+ if (type == 'string') {
+ return `"${val}"`;
+ }
+ if (type == 'symbol') {
+ const description = val.description;
+ if (description == null) {
+ return 'Symbol';
+ } else {
+ return `Symbol(${description})`;
+ }
+ }
+ if (type == 'function') {
+ const name = val.name;
+ if (typeof name == 'string' && name.length > 0) {
+ return `Function(${name})`;
+ } else {
+ return 'Function';
+ }
+ }
+ // objects
+ if (Array.isArray(val)) {
+ const length = val.length;
+ let debug = '[';
+ if (length > 0) {
+ debug += debugString(val[0]);
+ }
+ for(let i = 1; i < length; i++) {
+ debug += ', ' + debugString(val[i]);
+ }
+ debug += ']';
+ return debug;
+ }
+ // Test for built-in
+ const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
+ let className;
+ if (builtInMatches.length > 1) {
+ className = builtInMatches[1];
+ } else {
+ // Failed to match the standard '[object ClassName]'
+ return toString.call(val);
+ }
+ if (className == 'Object') {
+ // we're a user defined class or Object
+ // JSON.stringify avoids problems with cycles, and is generally much
+ // easier than looping through ownProperties of `val`.
+ try {
+ return 'Object(' + JSON.stringify(val) + ')';
+ } catch (_) {
+ return 'Object';
+ }
+ }
+ // errors
+ if (val instanceof Error) {
+ return `${val.name}: ${val.message}\n${val.stack}`;
+ }
+ // TODO we could test for more things here, like `Set`s and `Map`s.
+ return className;
+}
+
+let WASM_VECTOR_LEN = 0;
+
+let cachedTextEncoder = new TextEncoder('utf-8');
+
+const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
+ ? function (arg, view) {
+ return cachedTextEncoder.encodeInto(arg, view);
+}
+ : function (arg, view) {
+ const buf = cachedTextEncoder.encode(arg);
+ view.set(buf);
+ return {
+ read: arg.length,
+ written: buf.length
+ };
+});
+
+function passStringToWasm0(arg, malloc, realloc) {
+
+ if (realloc === undefined) {
+ const buf = cachedTextEncoder.encode(arg);
+ const ptr = malloc(buf.length);
+ getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);
+ WASM_VECTOR_LEN = buf.length;
+ return ptr;
+ }
+
+ let len = arg.length;
+ let ptr = malloc(len);
+
+ const mem = getUint8Memory0();
+
+ let offset = 0;
+
+ for (; offset < len; offset++) {
+ const code = arg.charCodeAt(offset);
+ if (code > 0x7F) break;
+ mem[ptr + offset] = code;
+ }
+
+ if (offset !== len) {
+ if (offset !== 0) {
+ arg = arg.slice(offset);
+ }
+ ptr = realloc(ptr, len, len = offset + arg.length * 3);
+ const view = getUint8Memory0().subarray(ptr + offset, ptr + len);
+ const ret = encodeString(arg, view);
+
+ offset += ret.written;
+ }
+
+ WASM_VECTOR_LEN = offset;
+ return ptr;
+}
+
+let cachegetInt32Memory0 = null;
+function getInt32Memory0() {
+ if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
+ cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
+ }
+ return cachegetInt32Memory0;
+}
+
+function isLikeNone(x) {
+ return x === undefined || x === null;
+}
+
+let stack_pointer = 32;
+
+function addBorrowedObject(obj) {
+ if (stack_pointer == 1) throw new Error('out of js stack');
+ heap[--stack_pointer] = obj;
+ return stack_pointer;
+}
+
+function passArray8ToWasm0(arg, malloc) {
+ const ptr = malloc(arg.length * 1);
+ getUint8Memory0().set(arg, ptr / 1);
+ WASM_VECTOR_LEN = arg.length;
+ return ptr;
+}
+
+function handleError(f, args) {
+ try {
+ return f.apply(this, args);
+ } catch (e) {
+ wasm.__wbindgen_exn_store(addHeapObject(e));
+ }
+}
+/**
+*/
+export class Comment {
+
+ static __wrap(ptr) {
+ const obj = Object.create(Comment.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_comment_free(ptr);
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ before(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.comment_before(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ after(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.comment_after(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ replace(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.comment_replace(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ */
+ remove() {
+ wasm.comment_remove(this.ptr);
+ }
+ /**
+ * @returns {boolean}
+ */
+ get removed() {
+ var ret = wasm.comment_removed(this.ptr);
+ return ret !== 0;
+ }
+ /**
+ * @returns {string}
+ */
+ get text() {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.comment_text(retptr, this.ptr);
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
+ return getStringFromWasm0(r0, r1);
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ wasm.__wbindgen_free(r0, r1);
+ }
+ }
+ /**
+ * @param {string} text
+ */
+ set text(text) {
+ var ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.comment_set_text(this.ptr, ptr0, len0);
+ }
+}
+/**
+*/
+export class Doctype {
+
+ static __wrap(ptr) {
+ const obj = Object.create(Doctype.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_doctype_free(ptr);
+ }
+ /**
+ * @returns {any}
+ */
+ get name() {
+ var ret = wasm.doctype_name(this.ptr);
+ return takeObject(ret);
+ }
+ /**
+ * @returns {any}
+ */
+ get publicId() {
+ var ret = wasm.doctype_public_id(this.ptr);
+ return takeObject(ret);
+ }
+ /**
+ * @returns {any}
+ */
+ get systemId() {
+ var ret = wasm.doctype_system_id(this.ptr);
+ return takeObject(ret);
+ }
+}
+/**
+*/
+export class DocumentEnd {
+
+ static __wrap(ptr) {
+ const obj = Object.create(DocumentEnd.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_documentend_free(ptr);
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ append(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.documentend_append(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+}
+/**
+*/
+export class Element {
+
+ static __wrap(ptr) {
+ const obj = Object.create(Element.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_element_free(ptr);
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ before(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_before(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ after(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_after(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ replace(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_replace(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ */
+ remove() {
+ wasm.element_remove(this.ptr);
+ }
+ /**
+ * @returns {boolean}
+ */
+ get removed() {
+ var ret = wasm.element_removed(this.ptr);
+ return ret !== 0;
+ }
+ /**
+ * @returns {string}
+ */
+ get tagName() {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.element_tag_name(retptr, this.ptr);
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
+ return getStringFromWasm0(r0, r1);
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ wasm.__wbindgen_free(r0, r1);
+ }
+ }
+ /**
+ * @param {string} name
+ */
+ set tagName(name) {
+ var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_set_tag_name(this.ptr, ptr0, len0);
+ }
+ /**
+ * @returns {any}
+ */
+ get namespaceURI() {
+ var ret = wasm.element_namespace_uri(this.ptr);
+ return takeObject(ret);
+ }
+ /**
+ * @returns {any}
+ */
+ get attributes() {
+ var ret = wasm.element_attributes(this.ptr);
+ return takeObject(ret);
+ }
+ /**
+ * @param {string} name
+ * @returns {any}
+ */
+ getAttribute(name) {
+ var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ var ret = wasm.element_getAttribute(this.ptr, ptr0, len0);
+ return takeObject(ret);
+ }
+ /**
+ * @param {string} name
+ * @returns {boolean}
+ */
+ hasAttribute(name) {
+ var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ var ret = wasm.element_hasAttribute(this.ptr, ptr0, len0);
+ return ret !== 0;
+ }
+ /**
+ * @param {string} name
+ * @param {string} value
+ */
+ setAttribute(name, value) {
+ var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ var ptr1 = passStringToWasm0(value, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len1 = WASM_VECTOR_LEN;
+ wasm.element_setAttribute(this.ptr, ptr0, len0, ptr1, len1);
+ }
+ /**
+ * @param {string} name
+ */
+ removeAttribute(name) {
+ var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_removeAttribute(this.ptr, ptr0, len0);
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ prepend(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_prepend(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ append(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_append(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ setInnerContent(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_setInnerContent(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ */
+ removeAndKeepContent() {
+ wasm.element_removeAndKeepContent(this.ptr);
+ }
+ /**
+ * @param {any} handler
+ */
+ onEndTag(handler) {
+ wasm.element_onEndTag(this.ptr, addHeapObject(handler));
+ }
+}
+/**
+*/
+export class EndTag {
+
+ static __wrap(ptr) {
+ const obj = Object.create(EndTag.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_endtag_free(ptr);
+ }
+ /**
+ * @returns {string}
+ */
+ get name() {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.endtag_name(retptr, this.ptr);
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
+ return getStringFromWasm0(r0, r1);
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ wasm.__wbindgen_free(r0, r1);
+ }
+ }
+ /**
+ * @param {string} name
+ */
+ set name(name) {
+ var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.endtag_set_name(this.ptr, ptr0, len0);
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ before(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.endtag_before(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ after(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.endtag_after(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ */
+ remove() {
+ wasm.endtag_remove(this.ptr);
+ }
+}
+/**
+*/
+export class HTMLRewriter {
+
+ static __wrap(ptr) {
+ const obj = Object.create(HTMLRewriter.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_htmlrewriter_free(ptr);
+ }
+ /**
+ * @param {any} output_sink
+ * @param {any | undefined} options
+ */
+ constructor(output_sink, options) {
+ try {
+ var ret = wasm.htmlrewriter_new(addBorrowedObject(output_sink), isLikeNone(options) ? 0 : addHeapObject(options));
+ return HTMLRewriter.__wrap(ret);
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @param {string} selector
+ * @param {any} handlers
+ */
+ on(selector, handlers) {
+ var ptr0 = passStringToWasm0(selector, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.htmlrewriter_on(this.ptr, ptr0, len0, addHeapObject(handlers));
+ }
+ /**
+ * @param {any} handlers
+ */
+ onDocument(handlers) {
+ wasm.htmlrewriter_onDocument(this.ptr, addHeapObject(handlers));
+ }
+ /**
+ * @param {Uint8Array} chunk
+ */
+ write(chunk) {
+ var ptr0 = passArray8ToWasm0(chunk, wasm.__wbindgen_malloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.htmlrewriter_write(this.ptr, ptr0, len0);
+ }
+ /**
+ */
+ end() {
+ wasm.htmlrewriter_end(this.ptr);
+ }
+ /**
+ * @returns {number}
+ */
+ get asyncifyStackPtr() {
+ var ret = wasm.htmlrewriter_asyncify_stack_ptr(this.ptr);
+ return ret;
+ }
+}
+/**
+*/
+export class TextChunk {
+
+ static __wrap(ptr) {
+ const obj = Object.create(TextChunk.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_textchunk_free(ptr);
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ before(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.textchunk_before(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ after(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.textchunk_after(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ replace(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.textchunk_replace(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ */
+ remove() {
+ wasm.textchunk_remove(this.ptr);
+ }
+ /**
+ * @returns {boolean}
+ */
+ get removed() {
+ var ret = wasm.textchunk_removed(this.ptr);
+ return ret !== 0;
+ }
+ /**
+ * @returns {string}
+ */
+ get text() {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.textchunk_text(retptr, this.ptr);
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
+ return getStringFromWasm0(r0, r1);
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ wasm.__wbindgen_free(r0, r1);
+ }
+ }
+ /**
+ * @returns {boolean}
+ */
+ get lastInTextNode() {
+ var ret = wasm.textchunk_last_in_text_node(this.ptr);
+ return ret !== 0;
+ }
+}
+
+async function load(module, imports) {
+ if (typeof Response === 'function' && module instanceof Response) {
+ if (typeof WebAssembly.instantiateStreaming === 'function') {
+ try {
+ return await WebAssembly.instantiateStreaming(module, imports);
+
+ } catch (e) {
+ if (module.headers.get('Content-Type') != 'application/wasm') {
+ console.warn("`WebAssembly.instantiateStreaming` failed because your server does not serve wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\n", e);
+
+ } else {
+ throw e;
+ }
+ }
+ }
+
+ const bytes = await module.arrayBuffer();
+ return await WebAssembly.instantiate(bytes, imports);
+
+ } else {
+ const instance = await WebAssembly.instantiate(module, imports);
+
+ if (instance instanceof WebAssembly.Instance) {
+ return { instance, module };
+
+ } else {
+ return instance;
+ }
+ }
+}
+
+async function init(input) {
+ if (typeof input === 'undefined') {
+ input = new URL('html_rewriter_bg.wasm', import.meta.url);
+ }
+ const imports = {};
+ imports.wbg = {};
+ imports.wbg.__wbindgen_object_drop_ref = function(arg0) {
+ takeObject(arg0);
+ };
+ imports.wbg.__wbg_comment_new = function(arg0) {
+ var ret = Comment.__wrap(arg0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_doctype_new = function(arg0) {
+ var ret = Doctype.__wrap(arg0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_documentend_new = function(arg0) {
+ var ret = DocumentEnd.__wrap(arg0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_element_new = function(arg0) {
+ var ret = Element.__wrap(arg0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_endtag_new = function(arg0) {
+ var ret = EndTag.__wrap(arg0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_textchunk_new = function(arg0) {
+ var ret = TextChunk.__wrap(arg0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_html_cd9a0f328493678b = function(arg0) {
+ var ret = getObject(arg0).html;
+ return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;
+ };
+ imports.wbg.__wbindgen_string_new = function(arg0, arg1) {
+ var ret = getStringFromWasm0(arg0, arg1);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_awaitPromise_39a1101fd8518869 = function(arg0, arg1) {
+ awaitPromise(arg0, getObject(arg1));
+ };
+ imports.wbg.__wbindgen_object_clone_ref = function(arg0) {
+ var ret = getObject(arg0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_element_c38470ed972aea27 = function(arg0) {
+ var ret = getObject(arg0).element;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_comments_ba86bc03331d9378 = function(arg0) {
+ var ret = getObject(arg0).comments;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_text_7800bf26cb443911 = function(arg0) {
+ var ret = getObject(arg0).text;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_doctype_ac58c0964a59b61b = function(arg0) {
+ var ret = getObject(arg0).doctype;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_comments_94d876f6c0502e82 = function(arg0) {
+ var ret = getObject(arg0).comments;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_text_4606a16c30e4ae91 = function(arg0) {
+ var ret = getObject(arg0).text;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_end_34efb9402eac8a4e = function(arg0) {
+ var ret = getObject(arg0).end;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+ };
+ imports.wbg.__wbg_enableEsiTags_de6b91cc61a25874 = function(arg0) {
+ var ret = getObject(arg0).enableEsiTags;
+ return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;
+ };
+ imports.wbg.__wbg_String_60c4ba333b5ca1c6 = function(arg0, arg1) {
+ var ret = String(getObject(arg1));
+ var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbg_new_4fee7e2900033464 = function() {
+ var ret = new Array();
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_push_ba9b5e3c25cff8f9 = function(arg0, arg1) {
+ var ret = getObject(arg0).push(getObject(arg1));
+ return ret;
+ };
+ imports.wbg.__wbg_call_6c4ea719458624eb = function() { return handleError(function (arg0, arg1, arg2) {
+ var ret = getObject(arg0).call(getObject(arg1), getObject(arg2));
+ return addHeapObject(ret);
+ }, arguments) };
+ imports.wbg.__wbg_new_917809a3e20a4b00 = function(arg0, arg1) {
+ var ret = new TypeError(getStringFromWasm0(arg0, arg1));
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_instanceof_Promise_c6535fc791fcc4d2 = function(arg0) {
+ var ret = getObject(arg0) instanceof Promise;
+ return ret;
+ };
+ imports.wbg.__wbg_buffer_89a8560ab6a3d9c6 = function(arg0) {
+ var ret = getObject(arg0).buffer;
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_newwithbyteoffsetandlength_e45d8b33c02dc3b5 = function(arg0, arg1, arg2) {
+ var ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbg_new_bd2e1d010adb8a1a = function(arg0) {
+ var ret = new Uint8Array(getObject(arg0));
+ return addHeapObject(ret);
+ };
+ imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {
+ var ret = debugString(getObject(arg1));
+ var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+ };
+ imports.wbg.__wbindgen_throw = function(arg0, arg1) {
+ throw new Error(getStringFromWasm0(arg0, arg1));
+ };
+ imports.wbg.__wbindgen_rethrow = function(arg0) {
+ throw takeObject(arg0);
+ };
+ imports.wbg.__wbindgen_memory = function() {
+ var ret = wasm.memory;
+ return addHeapObject(ret);
+ };
+
+ if (typeof input === 'string' || (typeof Request === 'function' && input instanceof Request) || (typeof URL === 'function' && input instanceof URL)) {
+ input = fetch(input);
+ }
+
+
+
+ const { instance, module } = await load(await input, imports);
+
+ wasm = instance.exports;
+ init.__wbindgen_wasm_module = module;
+
+ return wasm;
+}
+
+export default init;
+
diff --git a/dist/html_rewriter_bg.js b/dist/html_rewriter_bg.js
new file mode 100644
index 0000000..82717b5
--- /dev/null
+++ b/dist/html_rewriter_bg.js
@@ -0,0 +1,929 @@
+import { awaitPromise } from './asyncify.js';
+import * as wasm from './html_rewriter_bg.wasm';
+
+const heap = new Array(32).fill(undefined);
+
+heap.push(undefined, null, true, false);
+
+function getObject(idx) { return heap[idx]; }
+
+let heap_next = heap.length;
+
+function dropObject(idx) {
+ if (idx < 36) return;
+ heap[idx] = heap_next;
+ heap_next = idx;
+}
+
+function takeObject(idx) {
+ const ret = getObject(idx);
+ dropObject(idx);
+ return ret;
+}
+
+const lTextDecoder = typeof TextDecoder === 'undefined' ? (0, module.require)('util').TextDecoder : TextDecoder;
+
+let cachedTextDecoder = new lTextDecoder('utf-8', { ignoreBOM: true, fatal: true });
+
+cachedTextDecoder.decode();
+
+let cachegetUint8Memory0 = null;
+function getUint8Memory0() {
+ if (cachegetUint8Memory0 === null || cachegetUint8Memory0.buffer !== wasm.memory.buffer) {
+ cachegetUint8Memory0 = new Uint8Array(wasm.memory.buffer);
+ }
+ return cachegetUint8Memory0;
+}
+
+function getStringFromWasm0(ptr, len) {
+ return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
+}
+
+function addHeapObject(obj) {
+ if (heap_next === heap.length) heap.push(heap.length + 1);
+ const idx = heap_next;
+ heap_next = heap[idx];
+
+ heap[idx] = obj;
+ return idx;
+}
+
+function debugString(val) {
+ // primitive types
+ const type = typeof val;
+ if (type == 'number' || type == 'boolean' || val == null) {
+ return `${val}`;
+ }
+ if (type == 'string') {
+ return `"${val}"`;
+ }
+ if (type == 'symbol') {
+ const description = val.description;
+ if (description == null) {
+ return 'Symbol';
+ } else {
+ return `Symbol(${description})`;
+ }
+ }
+ if (type == 'function') {
+ const name = val.name;
+ if (typeof name == 'string' && name.length > 0) {
+ return `Function(${name})`;
+ } else {
+ return 'Function';
+ }
+ }
+ // objects
+ if (Array.isArray(val)) {
+ const length = val.length;
+ let debug = '[';
+ if (length > 0) {
+ debug += debugString(val[0]);
+ }
+ for(let i = 1; i < length; i++) {
+ debug += ', ' + debugString(val[i]);
+ }
+ debug += ']';
+ return debug;
+ }
+ // Test for built-in
+ const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
+ let className;
+ if (builtInMatches.length > 1) {
+ className = builtInMatches[1];
+ } else {
+ // Failed to match the standard '[object ClassName]'
+ return toString.call(val);
+ }
+ if (className == 'Object') {
+ // we're a user defined class or Object
+ // JSON.stringify avoids problems with cycles, and is generally much
+ // easier than looping through ownProperties of `val`.
+ try {
+ return 'Object(' + JSON.stringify(val) + ')';
+ } catch (_) {
+ return 'Object';
+ }
+ }
+ // errors
+ if (val instanceof Error) {
+ return `${val.name}: ${val.message}\n${val.stack}`;
+ }
+ // TODO we could test for more things here, like `Set`s and `Map`s.
+ return className;
+}
+
+let WASM_VECTOR_LEN = 0;
+
+const lTextEncoder = typeof TextEncoder === 'undefined' ? (0, module.require)('util').TextEncoder : TextEncoder;
+
+let cachedTextEncoder = new lTextEncoder('utf-8');
+
+const encodeString = (typeof cachedTextEncoder.encodeInto === 'function'
+ ? function (arg, view) {
+ return cachedTextEncoder.encodeInto(arg, view);
+}
+ : function (arg, view) {
+ const buf = cachedTextEncoder.encode(arg);
+ view.set(buf);
+ return {
+ read: arg.length,
+ written: buf.length
+ };
+});
+
+function passStringToWasm0(arg, malloc, realloc) {
+
+ if (realloc === undefined) {
+ const buf = cachedTextEncoder.encode(arg);
+ const ptr = malloc(buf.length);
+ getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);
+ WASM_VECTOR_LEN = buf.length;
+ return ptr;
+ }
+
+ let len = arg.length;
+ let ptr = malloc(len);
+
+ const mem = getUint8Memory0();
+
+ let offset = 0;
+
+ for (; offset < len; offset++) {
+ const code = arg.charCodeAt(offset);
+ if (code > 0x7F) break;
+ mem[ptr + offset] = code;
+ }
+
+ if (offset !== len) {
+ if (offset !== 0) {
+ arg = arg.slice(offset);
+ }
+ ptr = realloc(ptr, len, len = offset + arg.length * 3);
+ const view = getUint8Memory0().subarray(ptr + offset, ptr + len);
+ const ret = encodeString(arg, view);
+
+ offset += ret.written;
+ }
+
+ WASM_VECTOR_LEN = offset;
+ return ptr;
+}
+
+let cachegetInt32Memory0 = null;
+function getInt32Memory0() {
+ if (cachegetInt32Memory0 === null || cachegetInt32Memory0.buffer !== wasm.memory.buffer) {
+ cachegetInt32Memory0 = new Int32Array(wasm.memory.buffer);
+ }
+ return cachegetInt32Memory0;
+}
+
+function isLikeNone(x) {
+ return x === undefined || x === null;
+}
+
+let stack_pointer = 32;
+
+function addBorrowedObject(obj) {
+ if (stack_pointer == 1) throw new Error('out of js stack');
+ heap[--stack_pointer] = obj;
+ return stack_pointer;
+}
+
+function passArray8ToWasm0(arg, malloc) {
+ const ptr = malloc(arg.length * 1);
+ getUint8Memory0().set(arg, ptr / 1);
+ WASM_VECTOR_LEN = arg.length;
+ return ptr;
+}
+
+function handleError(f, args) {
+ try {
+ return f.apply(this, args);
+ } catch (e) {
+ wasm.__wbindgen_exn_store(addHeapObject(e));
+ }
+}
+/**
+*/
+export class Comment {
+
+ static __wrap(ptr) {
+ const obj = Object.create(Comment.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_comment_free(ptr);
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ before(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.comment_before(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ after(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.comment_after(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ replace(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.comment_replace(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ */
+ remove() {
+ wasm.comment_remove(this.ptr);
+ }
+ /**
+ * @returns {boolean}
+ */
+ get removed() {
+ var ret = wasm.comment_removed(this.ptr);
+ return ret !== 0;
+ }
+ /**
+ * @returns {string}
+ */
+ get text() {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.comment_text(retptr, this.ptr);
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
+ return getStringFromWasm0(r0, r1);
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ wasm.__wbindgen_free(r0, r1);
+ }
+ }
+ /**
+ * @param {string} text
+ */
+ set text(text) {
+ var ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.comment_set_text(this.ptr, ptr0, len0);
+ }
+}
+/**
+*/
+export class Doctype {
+
+ static __wrap(ptr) {
+ const obj = Object.create(Doctype.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_doctype_free(ptr);
+ }
+ /**
+ * @returns {any}
+ */
+ get name() {
+ var ret = wasm.doctype_name(this.ptr);
+ return takeObject(ret);
+ }
+ /**
+ * @returns {any}
+ */
+ get publicId() {
+ var ret = wasm.doctype_public_id(this.ptr);
+ return takeObject(ret);
+ }
+ /**
+ * @returns {any}
+ */
+ get systemId() {
+ var ret = wasm.doctype_system_id(this.ptr);
+ return takeObject(ret);
+ }
+}
+/**
+*/
+export class DocumentEnd {
+
+ static __wrap(ptr) {
+ const obj = Object.create(DocumentEnd.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_documentend_free(ptr);
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ append(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.documentend_append(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+}
+/**
+*/
+export class Element {
+
+ static __wrap(ptr) {
+ const obj = Object.create(Element.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_element_free(ptr);
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ before(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_before(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ after(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_after(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ replace(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_replace(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ */
+ remove() {
+ wasm.element_remove(this.ptr);
+ }
+ /**
+ * @returns {boolean}
+ */
+ get removed() {
+ var ret = wasm.element_removed(this.ptr);
+ return ret !== 0;
+ }
+ /**
+ * @returns {string}
+ */
+ get tagName() {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.element_tag_name(retptr, this.ptr);
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
+ return getStringFromWasm0(r0, r1);
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ wasm.__wbindgen_free(r0, r1);
+ }
+ }
+ /**
+ * @param {string} name
+ */
+ set tagName(name) {
+ var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_set_tag_name(this.ptr, ptr0, len0);
+ }
+ /**
+ * @returns {any}
+ */
+ get namespaceURI() {
+ var ret = wasm.element_namespace_uri(this.ptr);
+ return takeObject(ret);
+ }
+ /**
+ * @returns {any}
+ */
+ get attributes() {
+ var ret = wasm.element_attributes(this.ptr);
+ return takeObject(ret);
+ }
+ /**
+ * @param {string} name
+ * @returns {any}
+ */
+ getAttribute(name) {
+ var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ var ret = wasm.element_getAttribute(this.ptr, ptr0, len0);
+ return takeObject(ret);
+ }
+ /**
+ * @param {string} name
+ * @returns {boolean}
+ */
+ hasAttribute(name) {
+ var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ var ret = wasm.element_hasAttribute(this.ptr, ptr0, len0);
+ return ret !== 0;
+ }
+ /**
+ * @param {string} name
+ * @param {string} value
+ */
+ setAttribute(name, value) {
+ var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ var ptr1 = passStringToWasm0(value, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len1 = WASM_VECTOR_LEN;
+ wasm.element_setAttribute(this.ptr, ptr0, len0, ptr1, len1);
+ }
+ /**
+ * @param {string} name
+ */
+ removeAttribute(name) {
+ var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_removeAttribute(this.ptr, ptr0, len0);
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ prepend(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_prepend(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ append(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_append(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ setInnerContent(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.element_setInnerContent(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ */
+ removeAndKeepContent() {
+ wasm.element_removeAndKeepContent(this.ptr);
+ }
+ /**
+ * @param {any} handler
+ */
+ onEndTag(handler) {
+ wasm.element_onEndTag(this.ptr, addHeapObject(handler));
+ }
+}
+/**
+*/
+export class EndTag {
+
+ static __wrap(ptr) {
+ const obj = Object.create(EndTag.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_endtag_free(ptr);
+ }
+ /**
+ * @returns {string}
+ */
+ get name() {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.endtag_name(retptr, this.ptr);
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
+ return getStringFromWasm0(r0, r1);
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ wasm.__wbindgen_free(r0, r1);
+ }
+ }
+ /**
+ * @param {string} name
+ */
+ set name(name) {
+ var ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.endtag_set_name(this.ptr, ptr0, len0);
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ before(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.endtag_before(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ after(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.endtag_after(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ */
+ remove() {
+ wasm.endtag_remove(this.ptr);
+ }
+}
+/**
+*/
+export class HTMLRewriter {
+
+ static __wrap(ptr) {
+ const obj = Object.create(HTMLRewriter.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_htmlrewriter_free(ptr);
+ }
+ /**
+ * @param {any} output_sink
+ * @param {any | undefined} options
+ */
+ constructor(output_sink, options) {
+ try {
+ var ret = wasm.htmlrewriter_new(addBorrowedObject(output_sink), isLikeNone(options) ? 0 : addHeapObject(options));
+ return HTMLRewriter.__wrap(ret);
+ } finally {
+ heap[stack_pointer++] = undefined;
+ }
+ }
+ /**
+ * @param {string} selector
+ * @param {any} handlers
+ */
+ on(selector, handlers) {
+ var ptr0 = passStringToWasm0(selector, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.htmlrewriter_on(this.ptr, ptr0, len0, addHeapObject(handlers));
+ }
+ /**
+ * @param {any} handlers
+ */
+ onDocument(handlers) {
+ wasm.htmlrewriter_onDocument(this.ptr, addHeapObject(handlers));
+ }
+ /**
+ * @param {Uint8Array} chunk
+ */
+ write(chunk) {
+ var ptr0 = passArray8ToWasm0(chunk, wasm.__wbindgen_malloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.htmlrewriter_write(this.ptr, ptr0, len0);
+ }
+ /**
+ */
+ end() {
+ wasm.htmlrewriter_end(this.ptr);
+ }
+ /**
+ * @returns {number}
+ */
+ get asyncifyStackPtr() {
+ var ret = wasm.htmlrewriter_asyncify_stack_ptr(this.ptr);
+ return ret;
+ }
+}
+/**
+*/
+export class TextChunk {
+
+ static __wrap(ptr) {
+ const obj = Object.create(TextChunk.prototype);
+ obj.ptr = ptr;
+
+ return obj;
+ }
+
+ __destroy_into_raw() {
+ const ptr = this.ptr;
+ this.ptr = 0;
+
+ return ptr;
+ }
+
+ free() {
+ const ptr = this.__destroy_into_raw();
+ wasm.__wbg_textchunk_free(ptr);
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ before(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.textchunk_before(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ after(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.textchunk_after(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ * @param {string} content
+ * @param {any | undefined} content_type
+ */
+ replace(content, content_type) {
+ var ptr0 = passStringToWasm0(content, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ wasm.textchunk_replace(this.ptr, ptr0, len0, isLikeNone(content_type) ? 0 : addHeapObject(content_type));
+ }
+ /**
+ */
+ remove() {
+ wasm.textchunk_remove(this.ptr);
+ }
+ /**
+ * @returns {boolean}
+ */
+ get removed() {
+ var ret = wasm.textchunk_removed(this.ptr);
+ return ret !== 0;
+ }
+ /**
+ * @returns {string}
+ */
+ get text() {
+ try {
+ const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);
+ wasm.textchunk_text(retptr, this.ptr);
+ var r0 = getInt32Memory0()[retptr / 4 + 0];
+ var r1 = getInt32Memory0()[retptr / 4 + 1];
+ return getStringFromWasm0(r0, r1);
+ } finally {
+ wasm.__wbindgen_add_to_stack_pointer(16);
+ wasm.__wbindgen_free(r0, r1);
+ }
+ }
+ /**
+ * @returns {boolean}
+ */
+ get lastInTextNode() {
+ var ret = wasm.textchunk_last_in_text_node(this.ptr);
+ return ret !== 0;
+ }
+}
+
+export function __wbindgen_object_drop_ref(arg0) {
+ takeObject(arg0);
+};
+
+export function __wbg_comment_new(arg0) {
+ var ret = Comment.__wrap(arg0);
+ return addHeapObject(ret);
+};
+
+export function __wbg_doctype_new(arg0) {
+ var ret = Doctype.__wrap(arg0);
+ return addHeapObject(ret);
+};
+
+export function __wbg_documentend_new(arg0) {
+ var ret = DocumentEnd.__wrap(arg0);
+ return addHeapObject(ret);
+};
+
+export function __wbg_element_new(arg0) {
+ var ret = Element.__wrap(arg0);
+ return addHeapObject(ret);
+};
+
+export function __wbg_endtag_new(arg0) {
+ var ret = EndTag.__wrap(arg0);
+ return addHeapObject(ret);
+};
+
+export function __wbg_textchunk_new(arg0) {
+ var ret = TextChunk.__wrap(arg0);
+ return addHeapObject(ret);
+};
+
+export function __wbg_html_cd9a0f328493678b(arg0) {
+ var ret = getObject(arg0).html;
+ return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;
+};
+
+export function __wbindgen_string_new(arg0, arg1) {
+ var ret = getStringFromWasm0(arg0, arg1);
+ return addHeapObject(ret);
+};
+
+export function __wbg_awaitPromise_39a1101fd8518869(arg0, arg1) {
+ awaitPromise(arg0, getObject(arg1));
+};
+
+export function __wbindgen_object_clone_ref(arg0) {
+ var ret = getObject(arg0);
+ return addHeapObject(ret);
+};
+
+export function __wbg_element_c38470ed972aea27(arg0) {
+ var ret = getObject(arg0).element;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+};
+
+export function __wbg_comments_ba86bc03331d9378(arg0) {
+ var ret = getObject(arg0).comments;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+};
+
+export function __wbg_text_7800bf26cb443911(arg0) {
+ var ret = getObject(arg0).text;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+};
+
+export function __wbg_doctype_ac58c0964a59b61b(arg0) {
+ var ret = getObject(arg0).doctype;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+};
+
+export function __wbg_comments_94d876f6c0502e82(arg0) {
+ var ret = getObject(arg0).comments;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+};
+
+export function __wbg_text_4606a16c30e4ae91(arg0) {
+ var ret = getObject(arg0).text;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+};
+
+export function __wbg_end_34efb9402eac8a4e(arg0) {
+ var ret = getObject(arg0).end;
+ return isLikeNone(ret) ? 0 : addHeapObject(ret);
+};
+
+export function __wbg_enableEsiTags_de6b91cc61a25874(arg0) {
+ var ret = getObject(arg0).enableEsiTags;
+ return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;
+};
+
+export function __wbg_String_60c4ba333b5ca1c6(arg0, arg1) {
+ var ret = String(getObject(arg1));
+ var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+};
+
+export function __wbg_new_4fee7e2900033464() {
+ var ret = new Array();
+ return addHeapObject(ret);
+};
+
+export function __wbg_push_ba9b5e3c25cff8f9(arg0, arg1) {
+ var ret = getObject(arg0).push(getObject(arg1));
+ return ret;
+};
+
+export function __wbg_call_6c4ea719458624eb() { return handleError(function (arg0, arg1, arg2) {
+ var ret = getObject(arg0).call(getObject(arg1), getObject(arg2));
+ return addHeapObject(ret);
+}, arguments) };
+
+export function __wbg_new_917809a3e20a4b00(arg0, arg1) {
+ var ret = new TypeError(getStringFromWasm0(arg0, arg1));
+ return addHeapObject(ret);
+};
+
+export function __wbg_instanceof_Promise_c6535fc791fcc4d2(arg0) {
+ var ret = getObject(arg0) instanceof Promise;
+ return ret;
+};
+
+export function __wbg_buffer_89a8560ab6a3d9c6(arg0) {
+ var ret = getObject(arg0).buffer;
+ return addHeapObject(ret);
+};
+
+export function __wbg_newwithbyteoffsetandlength_e45d8b33c02dc3b5(arg0, arg1, arg2) {
+ var ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0);
+ return addHeapObject(ret);
+};
+
+export function __wbg_new_bd2e1d010adb8a1a(arg0) {
+ var ret = new Uint8Array(getObject(arg0));
+ return addHeapObject(ret);
+};
+
+export function __wbindgen_debug_string(arg0, arg1) {
+ var ret = debugString(getObject(arg1));
+ var ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
+ var len0 = WASM_VECTOR_LEN;
+ getInt32Memory0()[arg0 / 4 + 1] = len0;
+ getInt32Memory0()[arg0 / 4 + 0] = ptr0;
+};
+
+export function __wbindgen_throw(arg0, arg1) {
+ throw new Error(getStringFromWasm0(arg0, arg1));
+};
+
+export function __wbindgen_rethrow(arg0) {
+ throw takeObject(arg0);
+};
+
+export function __wbindgen_memory() {
+ var ret = wasm.memory;
+ return addHeapObject(ret);
+};
+
diff --git a/dist/html_rewriter_bg.wasm b/dist/html_rewriter_bg.wasm
new file mode 100644
index 0000000000000000000000000000000000000000..05e9ff923db11dd03c398fe60618bf3c492f1121
GIT binary patch
literal 851914
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
z