Skip to content

Commit b96e14a

Browse files
committed
transformer
1 parent bf2fa8f commit b96e14a

File tree

1 file changed

+11
-24
lines changed

1 file changed

+11
-24
lines changed

src/html_rewriter_wrapper.ts

Lines changed: 11 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ class HTMLRewriter {
2727
}
2828

2929
let rewriter: RawHTMLRewriter;
30-
const readable = new ReadableStream<Uint8Array>({
30+
31+
const transfomer = new TransformStream({
3132
start: async (controller) => {
33+
await HTMLRewriter.initPromise;
3234
// Create a rewriter instance for this transformation that writes its
3335
// output to the transformed response's stream. Note that each
3436
// BaseHTMLRewriter can only be used once.
35-
await HTMLRewriter.initPromise;
36-
// console.log('creating rewriter')
3737
rewriter = new RawHTMLRewriter((chunk: Uint8Array) => {
3838
// enqueue will throw on empty chunks
3939
if (chunk.length !== 0) controller.enqueue(chunk);
@@ -42,31 +42,18 @@ class HTMLRewriter {
4242
for (const [selector, handlers] of this.elementHandlers) {
4343
rewriter.on(selector, handlers);
4444
}
45-
46-
// Pipe the response body to the rewriter
47-
const reader = body.getReader();
48-
try {
49-
while (true) {
50-
// console.log('reading')
51-
const { done, value } = await reader.read();
52-
if (done) break;
53-
rewriter.write(value);
54-
}
55-
56-
rewriter.end();
57-
} catch (error) {
58-
// rewriter.end()
59-
controller.error(error);
60-
} finally {
61-
rewriter.free();
62-
reader.releaseLock();
63-
controller.close();
64-
}
45+
},
46+
transform(chunk) {
47+
rewriter.write(chunk);
48+
},
49+
flush() {
50+
rewriter.end();
51+
rewriter.free();
6552
},
6653
});
6754

6855
// Return a response with the transformed body, copying over headers, etc
69-
const res = new Response(readable, response);
56+
const res = new Response(body.pipeThrough(transfomer), response);
7057
// If Content-Length is set, it's probably going to be wrong, since we're
7158
// rewriting content, so remove it
7259
res.headers.delete("Content-Length");

0 commit comments

Comments
 (0)