Skip to content

Commit d3e4b48

Browse files
committed
review
1 parent 81294d0 commit d3e4b48

File tree

5 files changed

+14
-18
lines changed

5 files changed

+14
-18
lines changed

packages/open-next/src/http/openNextResponse.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ export class OpenNextNodeResponse extends Transform implements ServerResponse {
8787

8888
// We want to destroy this response when the original response is closed. (i.e when the client disconnects)
8989
// This is to support `request.signal.onabort` in route handlers
90-
if (streamCreator?.onClose) {
91-
streamCreator.onClose(() => {
90+
if (streamCreator?.abortSignal) {
91+
streamCreator.abortSignal.addEventListener("abort", () => {
9292
this.destroy();
9393
});
9494
}

packages/open-next/src/overrides/wrappers/cloudflare-node.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,9 @@ const handler: WrapperHandler<InternalEvent, InternalResult> =
6666

6767
return Writable.fromWeb(writable);
6868
},
69+
// For some reason the signal from `request` here did not work.
70+
// @ts-expect-error This is defined in init from cloudflare
71+
abortSignal: globalThis[Symbol.for("__cloudflare-context__")].signal,
6972
};
7073

7174
ctx.waitUntil(

packages/open-next/src/overrides/wrappers/express-dev.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ const wrapper: WrapperHandler = async (handler, converter) => {
4242
}
4343
const internalEvent = await converter.convertFrom(req);
4444

45-
let onCloseCallback: (() => void) | undefined;
45+
const abortController = new AbortController();
46+
4647
const streamCreator: StreamCreator = {
4748
writeHeaders: (prelude) => {
4849
res.setHeader("Set-Cookie", prelude.cookies);
@@ -51,15 +52,11 @@ const wrapper: WrapperHandler = async (handler, converter) => {
5152
return res;
5253
},
5354
onFinish: () => {},
54-
onClose: (callback) => {
55-
onCloseCallback = callback;
56-
},
55+
abortSignal: abortController.signal,
5756
};
5857

5958
res.on("close", () => {
60-
if (onCloseCallback) {
61-
onCloseCallback();
62-
}
59+
abortController.abort();
6360
});
6461

6562
await handler(internalEvent, { streamCreator });

packages/open-next/src/overrides/wrappers/node.ts

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,23 +9,20 @@ const wrapper: WrapperHandler = async (handler, converter) => {
99
const server = createServer(async (req, res) => {
1010
const internalEvent = await converter.convertFrom(req);
1111

12-
let onCloseCallback: (() => void) | undefined;
12+
const abortController = new AbortController();
13+
1314
const streamCreator: StreamCreator = {
1415
writeHeaders: (prelude) => {
1516
res.setHeader("Set-Cookie", prelude.cookies);
1617
res.writeHead(prelude.statusCode, prelude.headers);
1718
res.flushHeaders();
1819
return res;
1920
},
20-
onClose: (callback) => {
21-
onCloseCallback = callback;
22-
},
21+
abortSignal: abortController.signal,
2322
};
2423

2524
res.on("close", () => {
26-
if (onCloseCallback) {
27-
onCloseCallback();
28-
}
25+
abortController.abort();
2926
});
3027

3128
if (internalEvent.rawPath === "/__health") {

packages/open-next/src/types/open-next.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,7 @@ export interface StreamCreator {
4949
// Just to fix an issue with aws lambda streaming with empty body
5050
onWrite?: () => void;
5151
onFinish?: (length: number) => void;
52-
// This is called when the wrappers response is closed, i.e. when the client disconnects
53-
onClose?: (callback: () => void) => void;
52+
abortSignal?: AbortSignal;
5453
}
5554

5655
export type WaitUntil = (promise: Promise<void>) => void;

0 commit comments

Comments
 (0)