Skip to content

Commit dd0cfb8

Browse files
committed
fix: free the underlying HTMLRewriter if the TransformStream has been cancelled
1 parent aeaacbe commit dd0cfb8

File tree

1 file changed

+15
-4
lines changed

1 file changed

+15
-4
lines changed

src/html_rewriter_wrapper.ts

+15-4
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ export class HTMLRewriter {
2424
response = new Response(response.body, response);
2525
}
2626

27-
let rewriter: RawHTMLRewriter;
27+
let rewriter: RawHTMLRewriter | undefined;
2828
const transformStream = new TransformStream<Uint8Array, Uint8Array>({
2929
start: (controller) => {
3030
// Create a rewriter instance for this transformation that writes its
@@ -39,10 +39,21 @@ export class HTMLRewriter {
3939
rewriter.on(selector, handlers);
4040
}
4141
},
42-
transform: (chunk) => rewriter.write(chunk),
42+
transform: (chunk) => rewriter?.write(chunk),
43+
// deno-lint-ignore require-await
44+
async cancel() {
45+
if (rewriter) {
46+
rewriter.end();
47+
rewriter.free();
48+
rewriter = undefined;
49+
}
50+
},
4351
flush: () => {
44-
rewriter.end();
45-
rewriter.free();
52+
if (rewriter) {
53+
rewriter.end();
54+
rewriter.free();
55+
rewriter = undefined;
56+
}
4657
},
4758
});
4859

0 commit comments

Comments
 (0)