@@ -154,21 +154,37 @@ async function doHandleFetch(
154154 url : parsed . url ,
155155 } ;
156156 await Tap . dispatch ( handler . hooks . fetch . request , reqcontext , reqprops ) ;
157- let response : BareResponse ;
157+ let earlyResponse : BareResponse ;
158158
159159 if ( reqprops . earlyResponse ) {
160160 let resp = reqprops . earlyResponse ;
161161 if ( "rawHeaders" in resp ) {
162162 // it's a bare response
163- response = resp ;
163+ earlyResponse = resp ;
164164 } else {
165165 // it's a native response, convert it
166- response = BareResponse . fromNativeResponse ( resp ) ;
166+ earlyResponse = BareResponse . fromNativeResponse ( resp ) ;
167167 }
168168 } else {
169- response = await handler . client . fetch ( reqprops . url , reqprops . init ) ;
169+ earlyResponse = await handler . client . fetch ( reqprops . url , reqprops . init ) ;
170170 }
171171
172+ let prerespcontext : typeof handler . hooks . fetch . preresponse . context = {
173+ request,
174+ parsed,
175+ } ;
176+
177+ let prerespprops : typeof handler . hooks . fetch . preresponse . props = {
178+ response : earlyResponse ,
179+ } ;
180+
181+ await Tap . dispatch (
182+ handler . hooks . fetch . preresponse ,
183+ prerespcontext ,
184+ prerespprops
185+ ) ;
186+ let response = prerespprops . response ;
187+
172188 let responseBody : BodyType ;
173189
174190 // set-cookie needs to take the raw headers. after this, we can flatten the headers into a ScramjetHeaders object
@@ -713,12 +729,7 @@ async function rewriteBody(
713729 ) ;
714730 const htmlContent = new TextDecoder ( encoding ) . decode ( bytes ) ;
715731
716- return rewriteHtml (
717- htmlContent ,
718- handler . context ,
719- parsed . meta ,
720- true
721- ) ;
732+ return rewriteHtml ( htmlContent , handler . context , parsed . meta , true ) ;
722733 } else {
723734 return response . body ;
724735 }
@@ -761,6 +772,15 @@ export type FetchHooks = {
761772 earlyResponse ?: BareResponse ;
762773 } ;
763774 } ;
775+ preresponse : {
776+ context : {
777+ request : ScramjetFetchRequest ;
778+ parsed : ScramjetFetchParsed ;
779+ } ;
780+ props : {
781+ response : BareResponse ;
782+ } ;
783+ } ;
764784 response : {
765785 context : {
766786 request : ScramjetFetchRequest ;
0 commit comments