@opennextjs/aws 3.2.1 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -1
- package/dist/adapters/cache.d.ts +0 -23
- package/dist/adapters/cache.js +10 -12
- package/dist/adapters/config/index.js +1 -1
- package/dist/adapters/config/util.js +2 -2
- package/dist/adapters/dynamo-provider.js +3 -5
- package/dist/adapters/edge-adapter.d.ts +0 -3
- package/dist/adapters/edge-adapter.js +43 -38
- package/dist/adapters/image-optimization-adapter.js +4 -4
- package/dist/adapters/logger.d.ts +0 -3
- package/dist/adapters/logger.js +3 -5
- package/dist/adapters/middleware.js +42 -18
- package/dist/adapters/plugins/image-optimization/image-optimization.d.ts +0 -3
- package/dist/adapters/plugins/image-optimization/image-optimization.replacement.d.ts +0 -3
- package/dist/adapters/revalidate.js +2 -2
- package/dist/adapters/server-adapter.d.ts +0 -3
- package/dist/adapters/server-adapter.js +3 -1
- package/dist/adapters/util.js +2 -2
- package/dist/build/bundleNextServer.d.ts +3 -1
- package/dist/build/bundleNextServer.js +3 -3
- package/dist/build/compileConfig.js +1 -1
- package/dist/build/copyTracedFiles.js +14 -25
- package/dist/build/createAssets.js +35 -26
- package/dist/build/createImageOptimizationBundle.js +1 -1
- package/dist/build/createMiddleware.js +7 -2
- package/dist/build/createRevalidationBundle.js +1 -1
- package/dist/build/createServerBundle.js +23 -29
- package/dist/build/createWarmerBundle.js +1 -1
- package/dist/build/edge/createEdgeBundle.d.ts +7 -3
- package/dist/build/edge/createEdgeBundle.js +12 -5
- package/dist/build/generateOutput.js +7 -13
- package/dist/build/helper.d.ts +22 -4
- package/dist/build/helper.js +26 -12
- package/dist/build/installDeps.js +1 -1
- package/dist/build/patch/patchedAsyncStorage.js +1 -1
- package/dist/build/utils.js +3 -2
- package/dist/build/validateConfig.js +1 -0
- package/dist/core/createGenericHandler.d.ts +2 -4
- package/dist/core/createGenericHandler.js +1 -2
- package/dist/core/createMainHandler.d.ts +0 -17
- package/dist/core/createMainHandler.js +5 -4
- package/dist/core/edgeFunctionHandler.d.ts +1 -51
- package/dist/core/patchAsyncStorage.js +5 -6
- package/dist/core/requestHandler.js +98 -89
- package/dist/core/require-hooks.js +8 -7
- package/dist/core/resolve.d.ts +13 -7
- package/dist/core/resolve.js +29 -35
- package/dist/core/routing/cacheInterceptor.js +12 -13
- package/dist/core/routing/i18n/accept-header.js +3 -2
- package/dist/core/routing/matcher.d.ts +2 -4
- package/dist/core/routing/matcher.js +17 -26
- package/dist/core/routing/middleware.js +17 -16
- package/dist/core/routing/util.d.ts +0 -13
- package/dist/core/routing/util.js +25 -87
- package/dist/core/routingHandler.d.ts +2 -0
- package/dist/core/routingHandler.js +30 -12
- package/dist/core/util.js +5 -3
- package/dist/helpers/withSST.d.ts +1 -1
- package/dist/http/openNextResponse.d.ts +5 -9
- package/dist/http/openNextResponse.js +29 -31
- package/dist/http/request.d.ts +0 -3
- package/dist/http/request.js +4 -2
- package/dist/http/util.d.ts +1 -1
- package/dist/http/util.js +8 -12
- package/dist/minimize-js.js +19 -19
- package/dist/overrides/converters/aws-apigw-v1.d.ts +2 -2
- package/dist/overrides/converters/aws-apigw-v1.js +2 -1
- package/dist/overrides/converters/aws-apigw-v2.d.ts +2 -2
- package/dist/overrides/converters/aws-apigw-v2.js +6 -7
- package/dist/overrides/converters/aws-cloudfront.d.ts +2 -2
- package/dist/overrides/converters/aws-cloudfront.js +11 -30
- package/dist/overrides/converters/dummy.d.ts +1 -1
- package/dist/overrides/converters/edge.d.ts +2 -1
- package/dist/overrides/converters/edge.js +11 -15
- package/dist/overrides/converters/node.d.ts +1 -1
- package/dist/overrides/converters/node.js +1 -1
- package/dist/overrides/converters/sqs-revalidate.d.ts +1 -1
- package/dist/overrides/imageLoader/dummy.d.ts +1 -1
- package/dist/overrides/imageLoader/host.d.ts +1 -1
- package/dist/overrides/imageLoader/s3.d.ts +1 -1
- package/dist/overrides/imageLoader/s3.js +1 -1
- package/dist/overrides/incrementalCache/dummy.d.ts +1 -1
- package/dist/overrides/incrementalCache/s3-lite.d.ts +1 -1
- package/dist/overrides/incrementalCache/s3-lite.js +15 -19
- package/dist/overrides/incrementalCache/s3.d.ts +1 -1
- package/dist/overrides/incrementalCache/s3.js +1 -1
- package/dist/overrides/originResolver/dummy.d.ts +1 -1
- package/dist/overrides/originResolver/pattern-env.d.ts +1 -1
- package/dist/overrides/originResolver/pattern-env.js +10 -11
- package/dist/overrides/proxyExternalRequest/dummy.d.ts +3 -0
- package/dist/overrides/proxyExternalRequest/dummy.js +7 -0
- package/dist/overrides/proxyExternalRequest/fetch.d.ts +3 -0
- package/dist/overrides/proxyExternalRequest/fetch.js +25 -0
- package/dist/overrides/proxyExternalRequest/node.d.ts +3 -0
- package/dist/overrides/proxyExternalRequest/node.js +67 -0
- package/dist/overrides/queue/dummy.d.ts +1 -1
- package/dist/overrides/queue/sqs-lite.d.ts +1 -1
- package/dist/overrides/queue/sqs-lite.js +7 -9
- package/dist/overrides/queue/sqs.d.ts +1 -1
- package/dist/overrides/queue/sqs.js +1 -1
- package/dist/overrides/tagCache/constants.js +2 -2
- package/dist/overrides/tagCache/dummy.d.ts +1 -1
- package/dist/overrides/tagCache/dynamodb-lite.d.ts +1 -1
- package/dist/overrides/tagCache/dynamodb-lite.js +10 -12
- package/dist/overrides/tagCache/dynamodb.d.ts +1 -1
- package/dist/overrides/tagCache/dynamodb.js +2 -2
- package/dist/overrides/warmer/aws-lambda.d.ts +1 -1
- package/dist/overrides/warmer/dummy.d.ts +1 -1
- package/dist/overrides/wrappers/aws-lambda-streaming.d.ts +2 -2
- package/dist/overrides/wrappers/aws-lambda.d.ts +2 -2
- package/dist/overrides/wrappers/cloudflare.d.ts +2 -1
- package/dist/overrides/wrappers/cloudflare.js +20 -2
- package/dist/overrides/wrappers/dummy.d.ts +2 -2
- package/dist/overrides/wrappers/node.d.ts +2 -2
- package/dist/overrides/wrappers/node.js +3 -3
- package/dist/plugins/edge.js +6 -5
- package/dist/plugins/replacement.js +2 -2
- package/dist/plugins/resolve.d.ts +3 -1
- package/dist/plugins/resolve.js +4 -1
- package/dist/types/aws-lambda.d.ts +2 -5
- package/dist/types/cache.d.ts +0 -2
- package/dist/types/global.d.ts +188 -0
- package/dist/types/next-types.d.ts +1 -3
- package/dist/types/open-next.d.ts +15 -41
- package/dist/types/overrides.d.ts +87 -0
- package/dist/utils/promise.d.ts +3 -0
- package/dist/utils/promise.js +44 -0
- package/dist/utils/stream.d.ts +0 -1
- package/package.json +2 -2
- package/dist/overrides/incrementalCache/types.d.ts +0 -34
- package/dist/overrides/queue/types.d.ts +0 -12
- package/dist/overrides/tagCache/types.d.ts +0 -11
- package/dist/overrides/tagCache/types.js +0 -1
- /package/dist/{overrides/incrementalCache/types.js → types/global.js} +0 -0
- /package/dist/{overrides/queue/types.js → types/overrides.js} +0 -0
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { debug } from "../adapters/logger";
|
|
2
2
|
import { generateUniqueId } from "../adapters/util";
|
|
3
|
-
import { openNextHandler } from "./requestHandler
|
|
4
|
-
import { resolveConverter, resolveIncrementalCache, resolveQueue, resolveTagCache, resolveWrapper, } from "./resolve";
|
|
3
|
+
import { openNextHandler } from "./requestHandler";
|
|
4
|
+
import { resolveConverter, resolveIncrementalCache, resolveProxyRequest, resolveQueue, resolveTagCache, resolveWrapper, } from "./resolve";
|
|
5
5
|
export async function createMainHandler() {
|
|
6
|
-
//
|
|
7
|
-
const config = await import(
|
|
6
|
+
// @ts-expect-error `./open-next.config.mjs` exists only in the build output
|
|
7
|
+
const config = await import("./open-next.config.mjs").then((m) => m.default);
|
|
8
8
|
const thisFunction = globalThis.fnName
|
|
9
9
|
? config.functions[globalThis.fnName]
|
|
10
10
|
: config.default;
|
|
@@ -14,6 +14,7 @@ export async function createMainHandler() {
|
|
|
14
14
|
globalThis.queue = await resolveQueue(thisFunction.override?.queue);
|
|
15
15
|
globalThis.incrementalCache = await resolveIncrementalCache(thisFunction.override?.incrementalCache);
|
|
16
16
|
globalThis.tagCache = await resolveTagCache(thisFunction.override?.tagCache);
|
|
17
|
+
globalThis.proxyExternalRequest = await resolveProxyRequest(thisFunction.override?.proxyExternalRequest);
|
|
17
18
|
globalThis.lastModified = {};
|
|
18
19
|
// From the config, we create the converter
|
|
19
20
|
const converter = await resolveConverter(thisFunction.override?.converter);
|
|
@@ -1,54 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
import type { OutgoingHttpHeaders } from "http";
|
|
3
|
-
interface RequestData {
|
|
4
|
-
geo?: {
|
|
5
|
-
city?: string;
|
|
6
|
-
country?: string;
|
|
7
|
-
region?: string;
|
|
8
|
-
latitude?: string;
|
|
9
|
-
longitude?: string;
|
|
10
|
-
};
|
|
11
|
-
headers: OutgoingHttpHeaders;
|
|
12
|
-
ip?: string;
|
|
13
|
-
method: string;
|
|
14
|
-
nextConfig?: {
|
|
15
|
-
basePath?: string;
|
|
16
|
-
i18n?: any;
|
|
17
|
-
trailingSlash?: boolean;
|
|
18
|
-
};
|
|
19
|
-
page?: {
|
|
20
|
-
name?: string;
|
|
21
|
-
params?: {
|
|
22
|
-
[key: string]: string | string[];
|
|
23
|
-
};
|
|
24
|
-
};
|
|
25
|
-
url: string;
|
|
26
|
-
body?: ReadableStream<Uint8Array>;
|
|
27
|
-
signal: AbortSignal;
|
|
28
|
-
}
|
|
29
|
-
interface Entries {
|
|
30
|
-
[k: string]: {
|
|
31
|
-
default: (props: {
|
|
32
|
-
page: string;
|
|
33
|
-
request: RequestData;
|
|
34
|
-
}) => Promise<{
|
|
35
|
-
response: Response;
|
|
36
|
-
waitUntil: Promise<void>;
|
|
37
|
-
}>;
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
declare global {
|
|
41
|
-
var _ENTRIES: Entries;
|
|
42
|
-
var _ROUTES: EdgeRoute[];
|
|
43
|
-
var __storage__: Map<unknown, unknown>;
|
|
44
|
-
var AsyncContext: any;
|
|
45
|
-
var AsyncLocalStorage: any;
|
|
46
|
-
}
|
|
47
|
-
export interface EdgeRoute {
|
|
48
|
-
name: string;
|
|
49
|
-
page: string;
|
|
50
|
-
regex: string[];
|
|
51
|
-
}
|
|
1
|
+
import type { RequestData } from "../types/global";
|
|
52
2
|
type EdgeRequest = Omit<RequestData, "page">;
|
|
53
3
|
export default function edgeFunctionHandler(request: EdgeRequest): Promise<Response>;
|
|
54
4
|
export {};
|
|
@@ -1,16 +1,15 @@
|
|
|
1
|
-
const mod = require("module");
|
|
1
|
+
const mod = require("node:module");
|
|
2
2
|
const resolveFilename = mod._resolveFilename;
|
|
3
3
|
export function patchAsyncStorage() {
|
|
4
|
-
mod._resolveFilename =
|
|
4
|
+
mod._resolveFilename = ((originalResolveFilename, request, parent, isMain, options) => {
|
|
5
5
|
if (request.endsWith("static-generation-async-storage.external") ||
|
|
6
6
|
request.endsWith("static-generation-async-storage.external.js")) {
|
|
7
7
|
return require.resolve("./patchedAsyncStorage.cjs");
|
|
8
8
|
}
|
|
9
|
-
|
|
9
|
+
if (request.endsWith("static-generation-async-storage.external.original")) {
|
|
10
10
|
return originalResolveFilename.call(mod, request.replace(".original", ".js"), parent, isMain, options);
|
|
11
11
|
}
|
|
12
|
-
|
|
13
|
-
return originalResolveFilename.call(mod, request, parent, isMain, options);
|
|
12
|
+
return originalResolveFilename.call(mod, request, parent, isMain, options);
|
|
14
13
|
// We use `bind` here to avoid referencing outside variables to create potential memory leaks.
|
|
15
|
-
}.bind(null, resolveFilename);
|
|
14
|
+
}).bind(null, resolveFilename);
|
|
16
15
|
}
|
|
@@ -1,65 +1,88 @@
|
|
|
1
1
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
2
|
import { IncomingMessage } from "../http/index.js";
|
|
3
|
-
import {
|
|
3
|
+
import { runWithOpenNextRequestContext } from "../utils/promise";
|
|
4
4
|
import { debug, error, warn } from "../adapters/logger";
|
|
5
5
|
import { patchAsyncStorage } from "./patchAsyncStorage";
|
|
6
|
-
import { convertRes, createServerResponse
|
|
7
|
-
import routingHandler from "./routingHandler";
|
|
6
|
+
import { convertRes, createServerResponse } from "./routing/util";
|
|
7
|
+
import routingHandler, { MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_HEADER_PREFIX_LEN, } from "./routingHandler";
|
|
8
8
|
import { requestHandler, setNextjsPrebundledReact } from "./util";
|
|
9
9
|
// This is used to identify requests in the cache
|
|
10
|
-
globalThis.
|
|
10
|
+
globalThis.__openNextAls = new AsyncLocalStorage();
|
|
11
11
|
patchAsyncStorage();
|
|
12
12
|
export async function openNextHandler(internalEvent, responseStreaming) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
let preprocessResult = {
|
|
18
|
-
internalEvent: internalEvent,
|
|
19
|
-
isExternalRewrite: false,
|
|
20
|
-
origin: false,
|
|
21
|
-
isISR: false,
|
|
22
|
-
};
|
|
23
|
-
//#override withRouting
|
|
24
|
-
try {
|
|
25
|
-
preprocessResult = await routingHandler(internalEvent);
|
|
26
|
-
}
|
|
27
|
-
catch (e) {
|
|
28
|
-
warn("Routing failed.", e);
|
|
29
|
-
}
|
|
30
|
-
//#endOverride
|
|
31
|
-
const headers = "type" in preprocessResult
|
|
32
|
-
? preprocessResult.headers
|
|
33
|
-
: preprocessResult.internalEvent.headers;
|
|
34
|
-
const overwrittenResponseHeaders = Object.entries("type" in preprocessResult
|
|
35
|
-
? preprocessResult.headers
|
|
36
|
-
: preprocessResult.internalEvent.headers).reduce((acc, [key, value]) => {
|
|
37
|
-
if (!key.startsWith("x-middleware-response-")) {
|
|
38
|
-
return acc;
|
|
13
|
+
// We run everything in the async local storage context so that it is available in the middleware as well as in NextServer
|
|
14
|
+
return runWithOpenNextRequestContext({ isISRRevalidation: internalEvent.headers["x-isr"] === "1" }, async () => {
|
|
15
|
+
if (internalEvent.headers["x-forwarded-host"]) {
|
|
16
|
+
internalEvent.headers.host = internalEvent.headers["x-forwarded-host"];
|
|
39
17
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
18
|
+
debug("internalEvent", internalEvent);
|
|
19
|
+
let preprocessResult = {
|
|
20
|
+
internalEvent: internalEvent,
|
|
21
|
+
isExternalRewrite: false,
|
|
22
|
+
origin: false,
|
|
23
|
+
isISR: false,
|
|
24
|
+
};
|
|
25
|
+
//#override withRouting
|
|
26
|
+
try {
|
|
27
|
+
preprocessResult = await routingHandler(internalEvent);
|
|
28
|
+
}
|
|
29
|
+
catch (e) {
|
|
30
|
+
warn("Routing failed.", e);
|
|
45
31
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
for await (const chunk of bodyToConsume) {
|
|
55
|
-
res.write(chunk);
|
|
32
|
+
//#endOverride
|
|
33
|
+
const headers = "type" in preprocessResult
|
|
34
|
+
? preprocessResult.headers
|
|
35
|
+
: preprocessResult.internalEvent.headers;
|
|
36
|
+
const overwrittenResponseHeaders = {};
|
|
37
|
+
for (const [rawKey, value] of Object.entries(headers)) {
|
|
38
|
+
if (!rawKey.startsWith(MIDDLEWARE_HEADER_PREFIX)) {
|
|
39
|
+
continue;
|
|
56
40
|
}
|
|
57
|
-
|
|
58
|
-
|
|
41
|
+
const key = rawKey.slice(MIDDLEWARE_HEADER_PREFIX_LEN);
|
|
42
|
+
overwrittenResponseHeaders[key] = value;
|
|
43
|
+
headers[key] = value;
|
|
44
|
+
delete headers[rawKey];
|
|
45
|
+
}
|
|
46
|
+
if ("isExternalRewrite" in preprocessResult &&
|
|
47
|
+
preprocessResult.isExternalRewrite === true) {
|
|
48
|
+
try {
|
|
49
|
+
preprocessResult = await globalThis.proxyExternalRequest.proxy(preprocessResult.internalEvent);
|
|
50
|
+
}
|
|
51
|
+
catch (e) {
|
|
52
|
+
error("External request failed.", e);
|
|
53
|
+
preprocessResult = {
|
|
54
|
+
internalEvent: {
|
|
55
|
+
type: "core",
|
|
56
|
+
rawPath: "/500",
|
|
57
|
+
method: "GET",
|
|
58
|
+
headers: {},
|
|
59
|
+
url: "/500",
|
|
60
|
+
query: {},
|
|
61
|
+
cookies: {},
|
|
62
|
+
remoteAddress: "",
|
|
63
|
+
},
|
|
64
|
+
// On error we need to rewrite to the 500 page which is an internal rewrite
|
|
65
|
+
isExternalRewrite: false,
|
|
66
|
+
isISR: false,
|
|
67
|
+
origin: false,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if ("type" in preprocessResult) {
|
|
72
|
+
// response is used only in the streaming case
|
|
73
|
+
if (responseStreaming) {
|
|
74
|
+
const response = createServerResponse(internalEvent, headers, responseStreaming);
|
|
75
|
+
response.statusCode = preprocessResult.statusCode;
|
|
76
|
+
response.flushHeaders();
|
|
77
|
+
const [bodyToConsume, bodyToReturn] = preprocessResult.body.tee();
|
|
78
|
+
for await (const chunk of bodyToConsume) {
|
|
79
|
+
response.write(chunk);
|
|
80
|
+
}
|
|
81
|
+
response.end();
|
|
82
|
+
preprocessResult.body = bodyToReturn;
|
|
83
|
+
}
|
|
84
|
+
return preprocessResult;
|
|
59
85
|
}
|
|
60
|
-
return preprocessResult;
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
86
|
const preprocessedEvent = preprocessResult.internalEvent;
|
|
64
87
|
debug("preprocessedEvent", preprocessedEvent);
|
|
65
88
|
const reqProps = {
|
|
@@ -74,58 +97,44 @@ export async function openNextHandler(internalEvent, responseStreaming) {
|
|
|
74
97
|
body: preprocessedEvent.body,
|
|
75
98
|
remoteAddress: preprocessedEvent.remoteAddress,
|
|
76
99
|
};
|
|
77
|
-
const requestId = Math.random().toString(36);
|
|
78
|
-
const pendingPromiseRunner = new DetachedPromiseRunner();
|
|
79
|
-
const isISRRevalidation = headers["x-isr"] === "1";
|
|
80
100
|
const mergeHeadersPriority = globalThis.openNextConfig.dangerous
|
|
81
101
|
?.headersAndCookiesPriority
|
|
82
102
|
? globalThis.openNextConfig.dangerous.headersAndCookiesPriority(preprocessedEvent)
|
|
83
103
|
: "middleware";
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
};
|
|
104
|
+
const store = globalThis.__openNextAls.getStore();
|
|
105
|
+
if (store) {
|
|
106
|
+
store.mergeHeadersPriority = mergeHeadersPriority;
|
|
107
|
+
}
|
|
108
|
+
const req = new IncomingMessage(reqProps);
|
|
109
|
+
const res = createServerResponse(preprocessedEvent, overwrittenResponseHeaders, responseStreaming);
|
|
110
|
+
await processRequest(req, res, preprocessedEvent);
|
|
111
|
+
const { statusCode, headers: responseHeaders, isBase64Encoded, body, } = convertRes(res);
|
|
112
|
+
const internalResult = {
|
|
113
|
+
type: internalEvent.type,
|
|
114
|
+
statusCode,
|
|
115
|
+
headers: responseHeaders,
|
|
116
|
+
body,
|
|
117
|
+
isBase64Encoded,
|
|
118
|
+
};
|
|
119
|
+
const requestId = store?.requestId;
|
|
120
|
+
if (requestId) {
|
|
102
121
|
// reset lastModified. We need to do this to avoid memory leaks
|
|
103
122
|
delete globalThis.lastModified[requestId];
|
|
104
|
-
|
|
105
|
-
return internalResult;
|
|
106
|
-
});
|
|
123
|
+
}
|
|
107
124
|
return internalResult;
|
|
108
|
-
}
|
|
125
|
+
});
|
|
109
126
|
}
|
|
110
|
-
async function processRequest(req, res, internalEvent
|
|
127
|
+
async function processRequest(req, res, internalEvent) {
|
|
111
128
|
// @ts-ignore
|
|
112
129
|
// Next.js doesn't parse body if the property exists
|
|
113
130
|
// https://github.com/dougmoscrop/serverless-http/issues/227
|
|
114
131
|
delete req.body;
|
|
115
132
|
try {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
//#override applyNextjsPrebundledReact
|
|
124
|
-
setNextjsPrebundledReact(rawPath);
|
|
125
|
-
//#endOverride
|
|
126
|
-
// Next Server
|
|
127
|
-
await requestHandler(req, res);
|
|
128
|
-
}
|
|
133
|
+
//#override applyNextjsPrebundledReact
|
|
134
|
+
setNextjsPrebundledReact(internalEvent.rawPath);
|
|
135
|
+
//#endOverride
|
|
136
|
+
// Next Server
|
|
137
|
+
await requestHandler(req, res);
|
|
129
138
|
}
|
|
130
139
|
catch (e) {
|
|
131
140
|
// This might fail when using bundled next, importing won't do the trick either
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Individually compiled modules are as defined for the compilation in bundles/webpack/packages/*.
|
|
4
4
|
import { error } from "../adapters/logger.js";
|
|
5
5
|
// This module will only be loaded once per process.
|
|
6
|
-
const mod = require("module");
|
|
6
|
+
const mod = require("node:module");
|
|
7
7
|
const resolveFilename = mod._resolveFilename;
|
|
8
8
|
const hookPropertyMapApp = new Map();
|
|
9
9
|
const hookPropertyMapPage = new Map();
|
|
@@ -17,7 +17,7 @@ export function overrideHooks(config) {
|
|
|
17
17
|
throw e;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
-
function addHookAliases(aliases
|
|
20
|
+
function addHookAliases(aliases, type) {
|
|
21
21
|
for (const [key, value] of aliases) {
|
|
22
22
|
type === "app"
|
|
23
23
|
? hookPropertyMapApp.set(key, value)
|
|
@@ -68,12 +68,12 @@ function overrideDefault() {
|
|
|
68
68
|
const toResolveMap = (map) => Object.entries(map).map(([key, value]) => [key, require.resolve(value)]);
|
|
69
69
|
// Override built-in React packages if necessary
|
|
70
70
|
function overrideReact(config) {
|
|
71
|
-
addHookAliases([["react", require.resolve(
|
|
71
|
+
addHookAliases([["react", require.resolve("react")]], "page");
|
|
72
72
|
// ignore: react/jsx-dev-runtime is not available on older version of Next.js ie. v13.1.6
|
|
73
73
|
// react/jsx-runtime is not available on newer version of Next.js ie. v13.4.10-canary.3
|
|
74
74
|
try {
|
|
75
|
-
addHookAliases([["react/jsx-runtime", require.resolve(
|
|
76
|
-
addHookAliases([["react/jsx-dev-runtime", require.resolve(
|
|
75
|
+
addHookAliases([["react/jsx-runtime", require.resolve("react/jsx-runtime")]], "page");
|
|
76
|
+
addHookAliases([["react/jsx-dev-runtime", require.resolve("react/jsx-dev-runtime")]], "page");
|
|
77
77
|
}
|
|
78
78
|
catch (e) { }
|
|
79
79
|
if (config.experimental.appDir) {
|
|
@@ -90,13 +90,14 @@ function isApp() {
|
|
|
90
90
|
process.env.__NEXT_PRIVATE_PREBUNDLED_REACT === "experimental");
|
|
91
91
|
}
|
|
92
92
|
export function applyOverride() {
|
|
93
|
-
mod._resolveFilename =
|
|
93
|
+
mod._resolveFilename = ((originalResolveFilename, requestMapApp, requestMapPage, request, parent, isMain, options) => {
|
|
94
94
|
const hookResolved = isApp()
|
|
95
95
|
? requestMapApp.get(request)
|
|
96
96
|
: requestMapPage.get(request);
|
|
97
|
+
// biome-ignore lint/style/noParameterAssign:
|
|
97
98
|
if (hookResolved)
|
|
98
99
|
request = hookResolved;
|
|
99
100
|
return originalResolveFilename.call(mod, request, parent, isMain, options);
|
|
100
101
|
// We use `bind` here to avoid referencing outside variables to create potential memory leaks.
|
|
101
|
-
}.bind(null, resolveFilename, hookPropertyMapApp, hookPropertyMapPage);
|
|
102
|
+
}).bind(null, resolveFilename, hookPropertyMapApp, hookPropertyMapPage);
|
|
102
103
|
}
|
package/dist/core/resolve.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import type { BaseEventOrResult,
|
|
2
|
-
import type { TagCache } from "../overrides
|
|
1
|
+
import type { BaseEventOrResult, DefaultOverrideOptions, InternalEvent, InternalResult, OpenNextConfig, OverrideOptions } from "../types/open-next";
|
|
2
|
+
import type { Converter, TagCache, Wrapper } from "../types/overrides";
|
|
3
|
+
type RemoveUndefined<T> = T extends undefined ? never : T;
|
|
3
4
|
export declare function resolveConverter<E extends BaseEventOrResult = InternalEvent, R extends BaseEventOrResult = InternalResult>(converter: DefaultOverrideOptions<E, R>["converter"]): Promise<Converter<E, R>>;
|
|
4
5
|
export declare function resolveWrapper<E extends BaseEventOrResult = InternalEvent, R extends BaseEventOrResult = InternalResult>(wrapper: DefaultOverrideOptions<E, R>["wrapper"]): Promise<Wrapper<E, R>>;
|
|
5
6
|
/**
|
|
@@ -15,26 +16,31 @@ export declare function resolveTagCache(tagCache: OverrideOptions["tagCache"]):
|
|
|
15
16
|
* @returns
|
|
16
17
|
* @__PURE__
|
|
17
18
|
*/
|
|
18
|
-
export declare function resolveQueue(queue: OverrideOptions["queue"]): Promise<import("../overrides
|
|
19
|
+
export declare function resolveQueue(queue: OverrideOptions["queue"]): Promise<import("../types/overrides").Queue>;
|
|
19
20
|
/**
|
|
20
21
|
*
|
|
21
22
|
* @param incrementalCache
|
|
22
23
|
* @returns
|
|
23
24
|
* @__PURE__
|
|
24
25
|
*/
|
|
25
|
-
export declare function resolveIncrementalCache(incrementalCache: OverrideOptions["incrementalCache"]): Promise<import("../overrides
|
|
26
|
+
export declare function resolveIncrementalCache(incrementalCache: OverrideOptions["incrementalCache"]): Promise<import("../types/overrides").IncrementalCache>;
|
|
26
27
|
/**
|
|
27
28
|
* @param imageLoader
|
|
28
29
|
* @returns
|
|
29
30
|
* @__PURE__
|
|
30
31
|
*/
|
|
31
|
-
export declare function resolveImageLoader(imageLoader:
|
|
32
|
+
export declare function resolveImageLoader(imageLoader: RemoveUndefined<OpenNextConfig["imageOptimization"]>["loader"]): Promise<import("../types/overrides").ImageLoader>;
|
|
32
33
|
/**
|
|
33
34
|
* @returns
|
|
34
35
|
* @__PURE__
|
|
35
36
|
*/
|
|
36
|
-
export declare function resolveOriginResolver(originResolver
|
|
37
|
+
export declare function resolveOriginResolver(originResolver: RemoveUndefined<OpenNextConfig["middleware"]>["originResolver"]): Promise<import("../types/overrides").OriginResolver>;
|
|
37
38
|
/**
|
|
38
39
|
* @__PURE__
|
|
39
40
|
*/
|
|
40
|
-
export declare function resolveWarmerInvoke(warmer
|
|
41
|
+
export declare function resolveWarmerInvoke(warmer: RemoveUndefined<OpenNextConfig["warmer"]>["invokeFunction"]): Promise<import("../types/overrides").Warmer>;
|
|
42
|
+
/**
|
|
43
|
+
* @__PURE__
|
|
44
|
+
*/
|
|
45
|
+
export declare function resolveProxyRequest(proxyRequest: OverrideOptions["proxyExternalRequest"]): Promise<import("../types/overrides").ProxyExternalRequest>;
|
|
46
|
+
export {};
|
package/dist/core/resolve.js
CHANGED
|
@@ -2,22 +2,18 @@ export async function resolveConverter(converter) {
|
|
|
2
2
|
if (typeof converter === "function") {
|
|
3
3
|
return converter();
|
|
4
4
|
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return m_1.default;
|
|
9
|
-
}
|
|
5
|
+
const m_1 = await import("../overrides/converters/aws-apigw-v2.js");
|
|
6
|
+
// @ts-expect-error
|
|
7
|
+
return m_1.default;
|
|
10
8
|
}
|
|
11
9
|
export async function resolveWrapper(wrapper) {
|
|
12
10
|
if (typeof wrapper === "function") {
|
|
13
11
|
return wrapper();
|
|
14
12
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
return m_1.default;
|
|
20
|
-
}
|
|
13
|
+
// This will be replaced by the bundler
|
|
14
|
+
const m_1 = await import("../overrides/wrappers/aws-lambda.js");
|
|
15
|
+
// @ts-expect-error
|
|
16
|
+
return m_1.default;
|
|
21
17
|
}
|
|
22
18
|
/**
|
|
23
19
|
*
|
|
@@ -29,11 +25,9 @@ export async function resolveTagCache(tagCache) {
|
|
|
29
25
|
if (typeof tagCache === "function") {
|
|
30
26
|
return tagCache();
|
|
31
27
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
return m_1.default;
|
|
36
|
-
}
|
|
28
|
+
// This will be replaced by the bundler
|
|
29
|
+
const m_1 = await import("../overrides/tagCache/dynamodb.js");
|
|
30
|
+
return m_1.default;
|
|
37
31
|
}
|
|
38
32
|
/**
|
|
39
33
|
*
|
|
@@ -45,10 +39,8 @@ export async function resolveQueue(queue) {
|
|
|
45
39
|
if (typeof queue === "function") {
|
|
46
40
|
return queue();
|
|
47
41
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
return m_1.default;
|
|
51
|
-
}
|
|
42
|
+
const m_1 = await import("../overrides/queue/sqs.js");
|
|
43
|
+
return m_1.default;
|
|
52
44
|
}
|
|
53
45
|
/**
|
|
54
46
|
*
|
|
@@ -60,10 +52,8 @@ export async function resolveIncrementalCache(incrementalCache) {
|
|
|
60
52
|
if (typeof incrementalCache === "function") {
|
|
61
53
|
return incrementalCache();
|
|
62
54
|
}
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
return m_1.default;
|
|
66
|
-
}
|
|
55
|
+
const m_1 = await import("../overrides/incrementalCache/s3.js");
|
|
56
|
+
return m_1.default;
|
|
67
57
|
}
|
|
68
58
|
/**
|
|
69
59
|
* @param imageLoader
|
|
@@ -74,10 +64,8 @@ export async function resolveImageLoader(imageLoader) {
|
|
|
74
64
|
if (typeof imageLoader === "function") {
|
|
75
65
|
return imageLoader();
|
|
76
66
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return m_1.default;
|
|
80
|
-
}
|
|
67
|
+
const m_1 = await import("../overrides/imageLoader/s3.js");
|
|
68
|
+
return m_1.default;
|
|
81
69
|
}
|
|
82
70
|
/**
|
|
83
71
|
* @returns
|
|
@@ -87,10 +75,8 @@ export async function resolveOriginResolver(originResolver) {
|
|
|
87
75
|
if (typeof originResolver === "function") {
|
|
88
76
|
return originResolver();
|
|
89
77
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
return m_1.default;
|
|
93
|
-
}
|
|
78
|
+
const m_1 = await import("../overrides/originResolver/pattern-env.js");
|
|
79
|
+
return m_1.default;
|
|
94
80
|
}
|
|
95
81
|
/**
|
|
96
82
|
* @__PURE__
|
|
@@ -99,8 +85,16 @@ export async function resolveWarmerInvoke(warmer) {
|
|
|
99
85
|
if (typeof warmer === "function") {
|
|
100
86
|
return warmer();
|
|
101
87
|
}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
88
|
+
const m_1 = await import("../overrides/warmer/aws-lambda.js");
|
|
89
|
+
return m_1.default;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* @__PURE__
|
|
93
|
+
*/
|
|
94
|
+
export async function resolveProxyRequest(proxyRequest) {
|
|
95
|
+
if (typeof proxyRequest === "function") {
|
|
96
|
+
return proxyRequest();
|
|
105
97
|
}
|
|
98
|
+
const m_1 = await import("../overrides/proxyExternalRequest/node.js");
|
|
99
|
+
return m_1.default;
|
|
106
100
|
}
|
|
@@ -31,7 +31,7 @@ async function computeCacheControl(path, body, host, revalidate, lastModified) {
|
|
|
31
31
|
etag,
|
|
32
32
|
};
|
|
33
33
|
}
|
|
34
|
-
|
|
34
|
+
if (finalRevalidate !== CACHE_ONE_YEAR) {
|
|
35
35
|
const sMaxAge = Math.max(finalRevalidate - age, 1);
|
|
36
36
|
debug("sMaxAge", {
|
|
37
37
|
finalRevalidate,
|
|
@@ -58,13 +58,11 @@ async function computeCacheControl(path, body, host, revalidate, lastModified) {
|
|
|
58
58
|
etag,
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
};
|
|
67
|
-
}
|
|
61
|
+
return {
|
|
62
|
+
"cache-control": `s-maxage=${CACHE_ONE_YEAR}, stale-while-revalidate=${CACHE_ONE_MONTH}`,
|
|
63
|
+
"x-opennext-cache": "HIT",
|
|
64
|
+
etag,
|
|
65
|
+
};
|
|
68
66
|
}
|
|
69
67
|
async function generateResult(event, localizedPath, cachedValue, lastModified) {
|
|
70
68
|
debug("Returning result from experimental cache");
|
|
@@ -73,19 +71,19 @@ async function generateResult(event, localizedPath, cachedValue, lastModified) {
|
|
|
73
71
|
let isDataRequest = false;
|
|
74
72
|
switch (cachedValue.type) {
|
|
75
73
|
case "app":
|
|
76
|
-
isDataRequest = Boolean(event.headers
|
|
74
|
+
isDataRequest = Boolean(event.headers.rsc);
|
|
77
75
|
body = isDataRequest ? cachedValue.rsc : cachedValue.html;
|
|
78
76
|
type = isDataRequest ? "text/x-component" : "text/html; charset=utf-8";
|
|
79
77
|
break;
|
|
80
78
|
case "page":
|
|
81
|
-
isDataRequest = Boolean(event.query
|
|
79
|
+
isDataRequest = Boolean(event.query.__nextDataReq);
|
|
82
80
|
body = isDataRequest
|
|
83
81
|
? JSON.stringify(cachedValue.json)
|
|
84
82
|
: cachedValue.html;
|
|
85
83
|
type = isDataRequest ? "application/json" : "text/html; charset=utf-8";
|
|
86
84
|
break;
|
|
87
85
|
}
|
|
88
|
-
const cacheControl = await computeCacheControl(localizedPath, body, event.headers
|
|
86
|
+
const cacheControl = await computeCacheControl(localizedPath, body, event.headers.host, cachedValue.revalidate, lastModified);
|
|
89
87
|
return {
|
|
90
88
|
type: "core",
|
|
91
89
|
statusCode: 200,
|
|
@@ -130,12 +128,12 @@ export async function cacheInterceptor(event) {
|
|
|
130
128
|
return event;
|
|
131
129
|
}
|
|
132
130
|
}
|
|
133
|
-
const host = event.headers
|
|
131
|
+
const host = event.headers.host;
|
|
134
132
|
switch (cachedData.value?.type) {
|
|
135
133
|
case "app":
|
|
136
134
|
case "page":
|
|
137
135
|
return generateResult(event, localizedPath, cachedData.value, cachedData.lastModified);
|
|
138
|
-
case "redirect":
|
|
136
|
+
case "redirect": {
|
|
139
137
|
const cacheControl = await computeCacheControl(localizedPath, "", host, cachedData.value.revalidate, cachedData.lastModified);
|
|
140
138
|
return {
|
|
141
139
|
type: "core",
|
|
@@ -148,6 +146,7 @@ export async function cacheInterceptor(event) {
|
|
|
148
146
|
},
|
|
149
147
|
isBase64Encoded: false,
|
|
150
148
|
};
|
|
149
|
+
}
|
|
151
150
|
default:
|
|
152
151
|
return event;
|
|
153
152
|
}
|
|
@@ -11,6 +11,7 @@ function parse(raw, preferences, options) {
|
|
|
11
11
|
lowers.set(lower, { orig: preference, pos: pos++ });
|
|
12
12
|
if (options.prefixMatch) {
|
|
13
13
|
const parts = lower.split("-");
|
|
14
|
+
// biome-ignore lint/style/noCommaOperator:
|
|
14
15
|
while ((parts.pop(), parts.length > 0)) {
|
|
15
16
|
const joined = parts.join("-");
|
|
16
17
|
if (!lowers.has(joined)) {
|
|
@@ -32,7 +33,7 @@ function parse(raw, preferences, options) {
|
|
|
32
33
|
if (params.length > 2) {
|
|
33
34
|
throw new Error(`Invalid ${options.type} header`);
|
|
34
35
|
}
|
|
35
|
-
|
|
36
|
+
const token = params[0].toLowerCase();
|
|
36
37
|
if (!token) {
|
|
37
38
|
throw new Error(`Invalid ${options.type} header`);
|
|
38
39
|
}
|
|
@@ -47,7 +48,7 @@ function parse(raw, preferences, options) {
|
|
|
47
48
|
if (!value || (key !== "q" && key !== "Q")) {
|
|
48
49
|
throw new Error(`Invalid ${options.type} header`);
|
|
49
50
|
}
|
|
50
|
-
const score = parseFloat(value);
|
|
51
|
+
const score = Number.parseFloat(value);
|
|
51
52
|
if (score === 0) {
|
|
52
53
|
continue;
|
|
53
54
|
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
1
|
import type { Header, PrerenderManifest, RedirectDefinition, RewriteDefinition } from "../../types/next-types";
|
|
4
2
|
import type { InternalEvent, InternalResult } from "../../types/open-next";
|
|
5
|
-
export declare function
|
|
3
|
+
export declare function getNextConfigHeaders(event: InternalEvent, configHeaders?: Header[] | undefined): Record<string, string | undefined>;
|
|
6
4
|
export declare function handleRewrites<T extends RewriteDefinition>(event: InternalEvent, rewrites: T[]): {
|
|
7
5
|
internalEvent: {
|
|
8
6
|
rawPath: string;
|
|
9
7
|
url: string;
|
|
10
8
|
method: string;
|
|
11
|
-
body?: Buffer
|
|
9
|
+
body?: Buffer;
|
|
12
10
|
headers: Record<string, string>;
|
|
13
11
|
query: Record<string, string | string[]>;
|
|
14
12
|
cookies: Record<string, string>;
|