Skip to content

Commit 44da98b

Browse files
committed
[scramjet/core] api: add earlyResponse hook
1 parent fb14c3a commit 44da98b

File tree

1 file changed

+30
-10
lines changed
  • packages/scramjet/packages/core/src/fetch

1 file changed

+30
-10
lines changed

packages/scramjet/packages/core/src/fetch/index.ts

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)