Skip to content

Commit 4dea7ea

Browse files
authored
fix: partially reverts 644 (#660)
1 parent be8b2c7 commit 4dea7ea

File tree

9 files changed

+72
-56
lines changed

9 files changed

+72
-56
lines changed

.changeset/sharp-worms-cross.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@opennextjs/aws": patch
3+
---
4+
5+
fix: partially reverts 644

packages/open-next/src/adapters/middleware.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import type { InternalEvent, Origin } from "types/open-next";
1+
import type {
2+
InternalEvent,
3+
InternalResult,
4+
MiddlewareResult,
5+
} from "types/open-next";
26
import { runWithOpenNextRequestContext } from "utils/promise";
37

48
import { debug, error } from "../adapters/logger";
@@ -15,7 +19,9 @@ import routingHandler from "../core/routingHandler";
1519
globalThis.internalFetch = fetch;
1620
globalThis.__openNextAls = new AsyncLocalStorage();
1721

18-
const defaultHandler = async (internalEvent: InternalEvent) => {
22+
const defaultHandler = async (
23+
internalEvent: InternalEvent,
24+
): Promise<InternalResult | MiddlewareResult> => {
1925
const originResolver = await resolveOriginResolver(
2026
globalThis.openNextConfig.middleware?.originResolver,
2127
);

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

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,16 @@ import { AsyncLocalStorage } from "node:async_hooks";
22

33
import type { OpenNextNodeResponse, StreamCreator } from "http/index.js";
44
import { IncomingMessage } from "http/index.js";
5-
import type { InternalEvent, InternalResult } from "types/open-next";
5+
import type {
6+
InternalEvent,
7+
InternalResult,
8+
RoutingResult,
9+
} from "types/open-next";
610
import { runWithOpenNextRequestContext } from "utils/promise";
711

812
import { debug, error, warn } from "../adapters/logger";
913
import { patchAsyncStorage } from "./patchAsyncStorage";
10-
import { resolveProxyRequest } from "./resolve";
1114
import { convertRes, createServerResponse } from "./routing/util";
12-
import type { MiddlewareOutputEvent } from "./routingHandler";
1315
import routingHandler, {
1416
MIDDLEWARE_HEADER_PREFIX,
1517
MIDDLEWARE_HEADER_PREFIX_LEN,
@@ -34,8 +36,7 @@ export async function openNextHandler(
3436
}
3537
debug("internalEvent", internalEvent);
3638

37-
let routingResult: InternalResult | MiddlewareOutputEvent = {
38-
type: "middleware",
39+
let routingResult: InternalResult | RoutingResult = {
3940
internalEvent,
4041
isExternalRewrite: false,
4142
origin: false,
@@ -51,9 +52,9 @@ export async function openNextHandler(
5152
//#endOverride
5253

5354
const headers =
54-
routingResult.type === "middleware"
55-
? routingResult.internalEvent.headers
56-
: routingResult.headers;
55+
"type" in routingResult
56+
? routingResult.headers
57+
: routingResult.internalEvent.headers;
5758

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

@@ -68,7 +69,7 @@ export async function openNextHandler(
6869
}
6970

7071
if (
71-
routingResult.type === "middleware" &&
72+
"isExternalRewrite" in routingResult &&
7273
routingResult.isExternalRewrite === true
7374
) {
7475
try {
@@ -78,7 +79,6 @@ export async function openNextHandler(
7879
} catch (e) {
7980
error("External request failed.", e);
8081
routingResult = {
81-
type: "middleware",
8282
internalEvent: {
8383
type: "core",
8484
rawPath: "/500",
@@ -97,7 +97,7 @@ export async function openNextHandler(
9797
}
9898
}
9999

100-
if (routingResult.type === "core") {
100+
if ("type" in routingResult) {
101101
// response is used only in the streaming case
102102
if (responseStreaming) {
103103
const response = createServerResponse(

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

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

2424
const middleMatch = getMiddlewareMatch(middlewareManifest);
2525

26-
type InternalMiddlewareEvent = InternalEvent & {
26+
type MiddlewareEvent = InternalEvent & {
2727
responseHeaders?: Record<string, string | string[]>;
2828
isExternalRewrite?: boolean;
2929
};
@@ -45,7 +45,7 @@ function defaultMiddlewareLoader() {
4545
export async function handleMiddleware(
4646
internalEvent: InternalEvent,
4747
middlewareLoader: MiddlewareLoader = defaultMiddlewareLoader,
48-
): Promise<InternalMiddlewareEvent | InternalResult> {
48+
): Promise<MiddlewareEvent | InternalResult> {
4949
const headers = internalEvent.headers;
5050

5151
// We bypass the middleware if the request is internal
@@ -207,5 +207,5 @@ export async function handleMiddleware(
207207
cookies: internalEvent.cookies,
208208
remoteAddress: internalEvent.remoteAddress,
209209
isExternalRewrite,
210-
} satisfies InternalMiddlewareEvent;
210+
} satisfies MiddlewareEvent;
211211
}

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

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ import {
44
PrerenderManifest,
55
RoutesManifest,
66
} from "config/index";
7-
import type { InternalEvent, InternalResult, Origin } from "types/open-next";
7+
import type {
8+
InternalEvent,
9+
InternalResult,
10+
RoutingResult,
11+
} from "types/open-next";
812

913
import { debug } from "../adapters/logger";
1014
import { cacheInterceptor } from "./routing/cacheInterceptor";
@@ -20,14 +24,6 @@ import { handleMiddleware } from "./routing/middleware";
2024
export const MIDDLEWARE_HEADER_PREFIX = "x-middleware-response-";
2125
export const MIDDLEWARE_HEADER_PREFIX_LEN = MIDDLEWARE_HEADER_PREFIX.length;
2226

23-
export interface MiddlewareOutputEvent {
24-
type: "middleware";
25-
internalEvent: InternalEvent;
26-
isExternalRewrite: boolean;
27-
origin: Origin | false;
28-
isISR: boolean;
29-
}
30-
3127
// Add the locale prefix to the regex so we correctly match the rawPath
3228
const optionalLocalePrefixRegex = RoutesManifest.locales.length
3329
? `^/(?:${RoutesManifest.locales.map((locale) => `${locale}/?`).join("|")})?`
@@ -88,7 +84,7 @@ function applyMiddlewareHeaders(
8884

8985
export default async function routingHandler(
9086
event: InternalEvent,
91-
): Promise<InternalResult | MiddlewareOutputEvent> {
87+
): Promise<InternalResult | RoutingResult> {
9288
// Add Next geo headers
9389
for (const [openNextGeoName, nextGeoName] of Object.entries(
9490
geoHeaderToNextHeader,
@@ -112,15 +108,15 @@ export default async function routingHandler(
112108
return redirect;
113109
}
114110

115-
const middlewareEventOrResult = await handleMiddleware(internalEvent);
116-
const isInternalResult = "statusCode" in middlewareEventOrResult;
117-
if (isInternalResult) {
118-
return middlewareEventOrResult;
111+
const eventOrResult = await handleMiddleware(internalEvent);
112+
const isResult = "statusCode" in eventOrResult;
113+
if (isResult) {
114+
return eventOrResult;
119115
}
120-
const middlewareResponseHeaders = middlewareEventOrResult.responseHeaders;
121-
let isExternalRewrite = middlewareEventOrResult.isExternalRewrite ?? false;
122-
// internalEvent is `InternalEvent | InternalMiddlewareEvent`
123-
internalEvent = middlewareEventOrResult;
116+
const middlewareResponseHeaders = eventOrResult.responseHeaders;
117+
let isExternalRewrite = eventOrResult.isExternalRewrite ?? false;
118+
// internalEvent is `InternalEvent | MiddlewareEvent`
119+
internalEvent = eventOrResult;
124120

125121
if (!isExternalRewrite) {
126122
// First rewrite to be applied
@@ -234,7 +230,6 @@ export default async function routingHandler(
234230
});
235231

236232
return {
237-
type: "middleware",
238233
internalEvent,
239234
isExternalRewrite,
240235
origin: false,

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

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,18 +8,16 @@ import type {
88
CloudFrontRequestResult,
99
} from "aws-lambda";
1010
import { parseCookies } from "http/util";
11-
import type { InternalEvent, InternalResult } from "types/open-next";
11+
import type {
12+
InternalEvent,
13+
InternalResult,
14+
MiddlewareResult,
15+
} from "types/open-next";
1216
import type { Converter } from "types/overrides";
1317
import { fromReadableStream } from "utils/stream";
1418

1519
import { debug } from "../../adapters/logger";
16-
import {
17-
convertRes,
18-
convertToQuery,
19-
convertToQueryString,
20-
createServerResponse,
21-
} from "../../core/routing/util";
22-
import type { MiddlewareOutputEvent } from "../../core/routingHandler";
20+
import { convertToQuery, convertToQueryString } from "../../core/routing/util";
2321

2422
const cloudfrontBlacklistedHeaders = [
2523
// Disallowed headers, see: https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/edge-function-restrictions-all.html#function-restrictions-disallowed-headers
@@ -146,7 +144,7 @@ function convertToCloudfrontHeaders(
146144
}
147145

148146
async function convertToCloudFrontRequestResult(
149-
result: InternalResult | MiddlewareOutputEvent,
147+
result: InternalResult | MiddlewareResult,
150148
originalRequest: CloudFrontRequestEvent,
151149
): Promise<CloudFrontRequestResult> {
152150
if (result.type === "middleware") {

packages/open-next/src/overrides/converters/edge.ts

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
import { Buffer } from "node:buffer";
22

33
import { parseCookies } from "http/util";
4-
import type { InternalEvent, InternalResult } from "types/open-next";
4+
import type {
5+
InternalEvent,
6+
InternalResult,
7+
MiddlewareResult,
8+
} from "types/open-next";
59
import type { Converter } from "types/overrides";
610

7-
import type { MiddlewareOutputEvent } from "../../core/routingHandler";
8-
911
declare global {
1012
// Makes convertTo returns the request instead of fetching it.
1113
var __dangerous_ON_edge_converter_returns_request: boolean | undefined;
1214
}
1315

14-
const converter: Converter<
15-
InternalEvent,
16-
InternalResult | MiddlewareOutputEvent
17-
> = {
16+
const converter: Converter<InternalEvent, InternalResult | MiddlewareResult> = {
1817
convertFrom: async (event: Request) => {
1918
const url = new URL(event.url);
2019

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
import type { InternalEvent, InternalResult } from "types/open-next";
1+
import type {
2+
InternalEvent,
3+
InternalResult,
4+
MiddlewareResult,
5+
} from "types/open-next";
26
import type { Wrapper, WrapperHandler } from "types/overrides";
37

4-
import type { MiddlewareOutputEvent } from "../../core/routingHandler";
5-
68
const cfPropNameToHeaderName = {
79
city: "x-open-next-city",
810
country: "x-open-next-country",
@@ -17,7 +19,7 @@ interface WorkerContext {
1719

1820
const handler: WrapperHandler<
1921
InternalEvent,
20-
InternalResult | MiddlewareOutputEvent
22+
InternalResult | MiddlewareResult
2123
> =
2224
async (handler, converter) =>
2325
async (
@@ -65,4 +67,4 @@ export default {
6567
name: "cloudflare-edge",
6668
supportStreaming: true,
6769
edgeRuntime: true,
68-
} satisfies Wrapper<InternalEvent, InternalResult | MiddlewareOutputEvent>;
70+
} satisfies Wrapper<InternalEvent, InternalResult | MiddlewareResult>;

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,17 @@ export type IncludedConverter =
9595
| "sqs-revalidate"
9696
| "dummy";
9797

98+
export interface RoutingResult {
99+
internalEvent: InternalEvent;
100+
isExternalRewrite: boolean;
101+
origin: Origin | false;
102+
isISR: boolean;
103+
}
104+
105+
export interface MiddlewareResult
106+
extends RoutingResult,
107+
BaseEventOrResult<"middleware"> {}
108+
98109
export type IncludedQueue = "sqs" | "sqs-lite" | "dummy";
99110

100111
export type IncludedIncrementalCache = "s3" | "s3-lite" | "dummy";

0 commit comments

Comments
 (0)