Skip to content

Commit f32e94b

Browse files
committed
fixup! MiddlewareOutputEvent
1 parent 3e15385 commit f32e94b

File tree

6 files changed

+43
-47
lines changed

6 files changed

+43
-47
lines changed

packages/open-next/src/core/requestHandler.ts

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -34,25 +34,26 @@ export async function openNextHandler(
3434
}
3535
debug("internalEvent", internalEvent);
3636

37-
let preprocessResult: InternalResult | MiddlewareOutputEvent = {
38-
internalEvent: internalEvent,
37+
let routingResult: InternalResult | MiddlewareOutputEvent = {
38+
type: "middleware",
39+
internalEvent,
3940
isExternalRewrite: false,
4041
origin: false,
4142
isISR: false,
4243
};
4344

4445
//#override withRouting
4546
try {
46-
preprocessResult = await routingHandler(internalEvent);
47+
routingResult = await routingHandler(internalEvent);
4748
} catch (e) {
4849
warn("Routing failed.", e);
4950
}
5051
//#endOverride
5152

5253
const headers =
53-
"type" in preprocessResult
54-
? preprocessResult.headers
55-
: preprocessResult.internalEvent.headers;
54+
routingResult.type === "middleware"
55+
? routingResult.internalEvent.headers
56+
: routingResult.headers;
5657

5758
const overwrittenResponseHeaders: Record<string, string | string[]> = {};
5859

@@ -67,16 +68,17 @@ export async function openNextHandler(
6768
}
6869

6970
if (
70-
"isExternalRewrite" in preprocessResult &&
71-
preprocessResult.isExternalRewrite === true
71+
routingResult.type === "middleware" &&
72+
routingResult.isExternalRewrite === true
7273
) {
7374
try {
74-
preprocessResult = await globalThis.proxyExternalRequest.proxy(
75-
preprocessResult.internalEvent,
75+
routingResult = await globalThis.proxyExternalRequest.proxy(
76+
routingResult.internalEvent,
7677
);
7778
} catch (e) {
7879
error("External request failed.", e);
79-
preprocessResult = {
80+
routingResult = {
81+
type: "middleware",
8082
internalEvent: {
8183
type: "core",
8284
rawPath: "/500",
@@ -95,26 +97,27 @@ export async function openNextHandler(
9597
}
9698
}
9799

98-
if ("type" in preprocessResult) {
100+
if (routingResult.type === "core") {
99101
// response is used only in the streaming case
100102
if (responseStreaming) {
101103
const response = createServerResponse(
102104
internalEvent,
103105
headers,
104106
responseStreaming,
105107
);
106-
response.statusCode = preprocessResult.statusCode;
108+
response.statusCode = routingResult.statusCode;
107109
response.flushHeaders();
108-
const [bodyToConsume, bodyToReturn] = preprocessResult.body.tee();
110+
const [bodyToConsume, bodyToReturn] = routingResult.body.tee();
109111
for await (const chunk of bodyToConsume) {
110112
response.write(chunk);
111113
}
112114
response.end();
113-
preprocessResult.body = bodyToReturn;
115+
routingResult.body = bodyToReturn;
114116
}
115-
return preprocessResult;
117+
return routingResult;
116118
}
117-
const preprocessedEvent = preprocessResult.internalEvent;
119+
120+
const preprocessedEvent = routingResult.internalEvent;
118121
debug("preprocessedEvent", preprocessedEvent);
119122
const reqProps = {
120123
method: preprocessedEvent.method,

packages/open-next/src/core/routing/middleware.ts

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ const middlewareManifest = MiddlewareManifest;
2323

2424
const middleMatch = getMiddlewareMatch(middlewareManifest);
2525

26-
type MiddlewareOutputEvent = InternalEvent & {
26+
type InternalMiddlewareEvent = InternalEvent & {
2727
responseHeaders?: Record<string, string | string[]>;
28-
externalRewrite?: boolean;
28+
isExternalRewrite?: boolean;
2929
};
3030

3131
type Middleware = (request: Request) => Response | Promise<Response>;
@@ -45,7 +45,7 @@ function defaultMiddlewareLoader() {
4545
export async function handleMiddleware(
4646
internalEvent: InternalEvent,
4747
middlewareLoader: MiddlewareLoader = defaultMiddlewareLoader,
48-
): Promise<MiddlewareOutputEvent | InternalResult> {
48+
): Promise<InternalMiddlewareEvent | InternalResult> {
4949
const headers = internalEvent.headers;
5050

5151
// We bypass the middleware if the request is internal
@@ -142,22 +142,22 @@ export async function handleMiddleware(
142142
statusCode: statusCode,
143143
headers: resHeaders,
144144
isBase64Encoded: false,
145-
};
145+
} satisfies InternalResult;
146146
}
147147

148148
// If the middleware returned a Rewrite, set the `url` to the pathname of the rewrite
149149
// NOTE: the header was added to `req` from above
150150
const rewriteUrl = responseHeaders.get("x-middleware-rewrite");
151151
let rewritten = false;
152-
let externalRewrite = false;
152+
let isExternalRewrite = false;
153153
let middlewareQueryString = internalEvent.query;
154154
let newUrl = internalEvent.url;
155155
if (rewriteUrl) {
156156
// If not a string, it should probably throw
157157
if (isExternal(rewriteUrl, internalEvent.headers.host as string)) {
158158
newUrl = rewriteUrl;
159159
rewritten = true;
160-
externalRewrite = true;
160+
isExternalRewrite = true;
161161
} else {
162162
const rewriteUrlObject = new URL(rewriteUrl);
163163
newUrl = rewriteUrlObject.pathname;
@@ -184,14 +184,13 @@ export async function handleMiddleware(
184184
// transfer response body to res
185185
const body = result.body as ReadableStream<Uint8Array>;
186186

187-
// await pipeReadable(result.response.body, res);
188187
return {
189188
type: internalEvent.type,
190189
statusCode: statusCode,
191190
headers: resHeaders,
192191
body,
193192
isBase64Encoded: false,
194-
};
193+
} satisfies InternalResult;
195194
}
196195

197196
return {
@@ -207,6 +206,6 @@ export async function handleMiddleware(
207206
query: middlewareQueryString,
208207
cookies: internalEvent.cookies,
209208
remoteAddress: internalEvent.remoteAddress,
210-
externalRewrite,
211-
};
209+
isExternalRewrite,
210+
} satisfies InternalMiddlewareEvent;
212211
}

packages/open-next/src/core/routingHandler.ts

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,9 @@ import { handleMiddleware } from "./routing/middleware";
1919

2020
export const MIDDLEWARE_HEADER_PREFIX = "x-middleware-response-";
2121
export const MIDDLEWARE_HEADER_PREFIX_LEN = MIDDLEWARE_HEADER_PREFIX.length;
22+
2223
export interface MiddlewareOutputEvent {
24+
type: "middleware";
2325
internalEvent: InternalEvent;
2426
isExternalRewrite: boolean;
2527
origin: Origin | false;
@@ -110,17 +112,16 @@ export default async function routingHandler(
110112
return redirect;
111113
}
112114

113-
const middleware = await handleMiddleware(internalEvent);
114-
let middlewareResponseHeaders: Record<string, string | string[]> = {};
115-
if ("statusCode" in middleware) {
116-
return middleware;
115+
const middlewareEventOrResult = await handleMiddleware(internalEvent);
116+
const isInternalResult = "statusCode" in middlewareEventOrResult;
117+
if (isInternalResult) {
118+
return middlewareEventOrResult;
117119
}
118-
middlewareResponseHeaders = middleware.responseHeaders || {};
119-
internalEvent = middleware;
120-
121-
// At this point internalEvent is an InternalEvent or a MiddlewareOutputEvent
120+
const middlewareResponseHeaders = middlewareEventOrResult.responseHeaders;
121+
let isExternalRewrite = middlewareEventOrResult.isExternalRewrite ?? false;
122+
// internalEvent is `InternalEvent | InternalMiddlewareEvent`
123+
internalEvent = middlewareEventOrResult;
122124

123-
let isExternalRewrite = middleware.externalRewrite ?? false;
124125
if (!isExternalRewrite) {
125126
// First rewrite to be applied
126127
const beforeRewrites = handleRewrites(
@@ -233,6 +234,7 @@ export default async function routingHandler(
233234
});
234235

235236
return {
237+
type: "middleware",
236238
internalEvent,
237239
isExternalRewrite,
238240
origin: false,

packages/open-next/src/overrides/converters/aws-cloudfront.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,10 +111,6 @@ async function convertFromCloudFrontRequestEvent(
111111
};
112112
}
113113

114-
type MiddlewareEvent = {
115-
type: "middleware";
116-
} & MiddlewareOutputEvent;
117-
118114
function convertToCloudfrontHeaders(
119115
headers: Record<string, OutgoingHttpHeader>,
120116
directResponse?: boolean,
@@ -150,7 +146,7 @@ function convertToCloudfrontHeaders(
150146
}
151147

152148
async function convertToCloudFrontRequestResult(
153-
result: InternalResult | MiddlewareEvent,
149+
result: InternalResult | MiddlewareOutputEvent,
154150
originalRequest: CloudFrontRequestEvent,
155151
): Promise<CloudFrontRequestResult> {
156152
if (result.type === "middleware") {

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import type { Wrapper, WrapperHandler } from "types/overrides";
33

44
import { Writable } from "node:stream";
55
import type { StreamCreator } from "http/index";
6-
import type { MiddlewareOutputEvent } from "../../core/routingHandler";
76

87
const handler: WrapperHandler<InternalEvent, InternalResult> =
98
async (handler, converter) =>

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ interface WorkerContext {
1717

1818
const handler: WrapperHandler<
1919
InternalEvent,
20-
InternalResult | ({ type: "middleware" } & MiddlewareOutputEvent)
20+
InternalResult | MiddlewareOutputEvent
2121
> =
2222
async (handler, converter) =>
2323
async (
@@ -65,7 +65,4 @@ export default {
6565
name: "cloudflare",
6666
supportStreaming: true,
6767
edgeRuntime: true,
68-
} satisfies Wrapper<
69-
InternalEvent,
70-
InternalResult | ({ type: "middleware" } & MiddlewareOutputEvent)
71-
>;
68+
} satisfies Wrapper<InternalEvent, InternalResult | MiddlewareOutputEvent>;

0 commit comments

Comments
 (0)