@@ -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