@opennextjs/aws 3.7.7 → 3.8.0
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/dist/adapters/middleware.js +3 -1
- package/dist/build/copyTracedFiles.d.ts +1 -0
- package/dist/build/copyTracedFiles.js +7 -2
- package/dist/build/installDeps.js +1 -1
- package/dist/core/requestHandler.js +1 -1
- package/dist/core/routing/cacheInterceptor.d.ts +2 -2
- package/dist/core/routing/cacheInterceptor.js +7 -3
- package/dist/core/routing/middleware.d.ts +1 -6
- package/dist/core/routing/middleware.js +1 -1
- package/dist/core/routingHandler.js +14 -4
- package/dist/types/open-next.d.ts +15 -0
- package/dist/utils/cache.js +6 -2
- package/package.json +1 -1
|
@@ -75,7 +75,9 @@ const defaultHandler = async (internalEvent, options) => {
|
|
|
75
75
|
};
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
|
-
|
|
78
|
+
if (process.env.OPEN_NEXT_REQUEST_ID_HEADER || globalThis.openNextDebug) {
|
|
79
|
+
result.headers[INTERNAL_EVENT_REQUEST_ID] = requestId;
|
|
80
|
+
}
|
|
79
81
|
debug("Middleware response", result);
|
|
80
82
|
return result;
|
|
81
83
|
});
|
|
@@ -18,8 +18,13 @@ const EXCLUDED_PACKAGES = [
|
|
|
18
18
|
"next/dist/compiled/babel-packages",
|
|
19
19
|
"next/dist/compiled/amphtml-validator",
|
|
20
20
|
];
|
|
21
|
-
function isExcluded(srcPath) {
|
|
22
|
-
return EXCLUDED_PACKAGES.some((excluded) =>
|
|
21
|
+
export function isExcluded(srcPath) {
|
|
22
|
+
return EXCLUDED_PACKAGES.some((excluded) =>
|
|
23
|
+
// `pnpm` can create a symbolic link that points to the pnpm store folder
|
|
24
|
+
// This will live under `/node_modules/sharp`. We need to handle this in our regex
|
|
25
|
+
srcPath.match(getCrossPlatformPathRegex(`/node_modules/${excluded}(?:/|$)`, {
|
|
26
|
+
escape: false,
|
|
27
|
+
})));
|
|
23
28
|
}
|
|
24
29
|
function copyPatchFile(outputDir) {
|
|
25
30
|
const patchFile = path.join(__dirname, "patch", "patchedAsyncStorage.js");
|
|
@@ -63,7 +63,7 @@ export function installDependencies(outputDir, installOptions) {
|
|
|
63
63
|
logger.info(`Dependencies installed for ${name}`);
|
|
64
64
|
}
|
|
65
65
|
catch (e) {
|
|
66
|
-
logger.error(e.
|
|
66
|
+
logger.error(e.toString());
|
|
67
67
|
logger.error("Could not install dependencies");
|
|
68
68
|
}
|
|
69
69
|
}
|
|
@@ -31,7 +31,7 @@ export async function openNextHandler(internalEvent, options) {
|
|
|
31
31
|
initialHeaders.host = initialHeaders["x-forwarded-host"];
|
|
32
32
|
}
|
|
33
33
|
debug("internalEvent", internalEvent);
|
|
34
|
-
// These
|
|
34
|
+
// These 3 will get overwritten by the routing handler if not using an external middleware
|
|
35
35
|
const internalHeaders = {
|
|
36
36
|
initialPath: initialHeaders[INTERNAL_HEADER_INITIAL_URL] ?? internalEvent.rawPath,
|
|
37
37
|
resolvedRoutes: initialHeaders[INTERNAL_HEADER_RESOLVED_ROUTES]
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { InternalEvent, InternalResult } from "../../types/open-next";
|
|
2
|
-
export declare function cacheInterceptor(event:
|
|
1
|
+
import type { InternalEvent, InternalResult, MiddlewareEvent } from "../../types/open-next";
|
|
2
|
+
export declare function cacheInterceptor(event: MiddlewareEvent): Promise<InternalEvent | InternalResult>;
|
|
@@ -103,8 +103,12 @@ async function generateResult(event, localizedPath, cachedValue, lastModified) {
|
|
|
103
103
|
const cacheControl = await computeCacheControl(localizedPath, body, event.headers.host, cachedValue.revalidate, lastModified);
|
|
104
104
|
return {
|
|
105
105
|
type: "core",
|
|
106
|
-
//
|
|
107
|
-
|
|
106
|
+
// Sometimes other status codes can be cached, like 404. For these cases, we should return the correct status code
|
|
107
|
+
// Also set the status code to the rewriteStatusCode if defined
|
|
108
|
+
// This can happen in handleMiddleware in routingHandler.
|
|
109
|
+
// `NextResponse.rewrite(url, { status: xxx})
|
|
110
|
+
// The rewrite status code should take precedence over the cached one
|
|
111
|
+
statusCode: event.rewriteStatusCode ?? cachedValue.meta?.status ?? 200,
|
|
108
112
|
body: toReadableStream(body, false),
|
|
109
113
|
isBase64Encoded: false,
|
|
110
114
|
headers: {
|
|
@@ -209,7 +213,7 @@ export async function cacheInterceptor(event) {
|
|
|
209
213
|
const isBinary = isBinaryContentType(String(cachedData.value.meta?.headers?.["content-type"]));
|
|
210
214
|
return {
|
|
211
215
|
type: "core",
|
|
212
|
-
statusCode: cachedData.value.meta?.status ?? 200,
|
|
216
|
+
statusCode: event.rewriteStatusCode ?? cachedData.value.meta?.status ?? 200,
|
|
213
217
|
body: toReadableStream(cachedData.value.body, isBinary),
|
|
214
218
|
headers: {
|
|
215
219
|
...cacheControl,
|
|
@@ -1,9 +1,4 @@
|
|
|
1
|
-
import type { InternalEvent, InternalResult } from "../../types/open-next.js";
|
|
2
|
-
type MiddlewareEvent = InternalEvent & {
|
|
3
|
-
responseHeaders?: Record<string, string | string[]>;
|
|
4
|
-
isExternalRewrite?: boolean;
|
|
5
|
-
rewriteStatusCode?: number;
|
|
6
|
-
};
|
|
1
|
+
import type { InternalEvent, InternalResult, MiddlewareEvent } from "../../types/open-next.js";
|
|
7
2
|
type Middleware = (request: Request) => Response | Promise<Response>;
|
|
8
3
|
type MiddlewareLoader = () => Promise<{
|
|
9
4
|
default: Middleware;
|
|
@@ -151,6 +151,6 @@ export async function handleMiddleware(internalEvent, initialSearch, middlewareL
|
|
|
151
151
|
cookies: internalEvent.cookies,
|
|
152
152
|
remoteAddress: internalEvent.remoteAddress,
|
|
153
153
|
isExternalRewrite,
|
|
154
|
-
rewriteStatusCode: statusCode,
|
|
154
|
+
rewriteStatusCode: rewriteUrl && !isExternalRewrite ? statusCode : undefined,
|
|
155
155
|
};
|
|
156
156
|
}
|
|
@@ -79,10 +79,20 @@ export default async function routingHandler(event, { assetResolver }) {
|
|
|
79
79
|
if (isInternalResult(middlewareEventOrResult)) {
|
|
80
80
|
return middlewareEventOrResult;
|
|
81
81
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
82
|
+
const middlewareHeadersPrioritized = globalThis.openNextConfig.dangerous
|
|
83
|
+
?.middlewareHeadersOverrideNextConfigHeaders ?? false;
|
|
84
|
+
if (middlewareHeadersPrioritized) {
|
|
85
|
+
headers = {
|
|
86
|
+
...headers,
|
|
87
|
+
...middlewareEventOrResult.responseHeaders,
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
else {
|
|
91
|
+
headers = {
|
|
92
|
+
...middlewareEventOrResult.responseHeaders,
|
|
93
|
+
...headers,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
86
96
|
let isExternalRewrite = middlewareEventOrResult.isExternalRewrite ?? false;
|
|
87
97
|
eventOrResult = middlewareEventOrResult;
|
|
88
98
|
if (!isExternalRewrite) {
|
|
@@ -15,6 +15,11 @@ export type InternalEvent = {
|
|
|
15
15
|
readonly cookies: Record<string, string>;
|
|
16
16
|
readonly remoteAddress: string;
|
|
17
17
|
} & BaseEventOrResult<"core">;
|
|
18
|
+
export type MiddlewareEvent = InternalEvent & {
|
|
19
|
+
responseHeaders?: Record<string, string | string[]>;
|
|
20
|
+
isExternalRewrite?: boolean;
|
|
21
|
+
rewriteStatusCode?: number;
|
|
22
|
+
};
|
|
18
23
|
export type InternalResult = {
|
|
19
24
|
statusCode: number;
|
|
20
25
|
headers: Record<string, string | string[]>;
|
|
@@ -58,6 +63,16 @@ export interface DangerousOptions {
|
|
|
58
63
|
* This is executed for every request and after next config headers and middleware has executed.
|
|
59
64
|
*/
|
|
60
65
|
headersAndCookiesPriority?: (event: InternalEvent) => "middleware" | "handler";
|
|
66
|
+
/**
|
|
67
|
+
* Configuration option to prioritize headers set via middleware over headers set via the option in the Next config.
|
|
68
|
+
*
|
|
69
|
+
* The default will change to 'true' in v4.
|
|
70
|
+
*
|
|
71
|
+
* See also {@link https://nextjs.org/docs/app/api-reference/file-conventions/middleware#execution-order}
|
|
72
|
+
*
|
|
73
|
+
* @default false
|
|
74
|
+
*/
|
|
75
|
+
middlewareHeadersOverrideNextConfigHeaders?: boolean;
|
|
61
76
|
}
|
|
62
77
|
export type BaseOverride = {
|
|
63
78
|
name: string;
|
package/dist/utils/cache.js
CHANGED
|
@@ -13,7 +13,9 @@ export async function hasBeenRevalidated(key, tags, cacheEntry) {
|
|
|
13
13
|
}
|
|
14
14
|
const lastModified = cacheEntry.lastModified ?? Date.now();
|
|
15
15
|
if (globalThis.tagCache.mode === "nextMode") {
|
|
16
|
-
return
|
|
16
|
+
return tags.length === 0
|
|
17
|
+
? false
|
|
18
|
+
: await globalThis.tagCache.hasBeenRevalidated(tags, lastModified);
|
|
17
19
|
}
|
|
18
20
|
// TODO: refactor this, we should introduce a new method in the tagCache interface so that both implementations use hasBeenRevalidated
|
|
19
21
|
const _lastModified = await globalThis.tagCache.getLastModified(key, lastModified);
|
|
@@ -25,7 +27,9 @@ export function getTagsFromValue(value) {
|
|
|
25
27
|
}
|
|
26
28
|
// The try catch is necessary for older version of next.js that may fail on this
|
|
27
29
|
try {
|
|
28
|
-
|
|
30
|
+
const cacheTags = value.meta?.headers?.["x-next-cache-tags"]?.split(",") ?? [];
|
|
31
|
+
delete value.meta?.headers?.["x-next-cache-tags"];
|
|
32
|
+
return cacheTags;
|
|
29
33
|
}
|
|
30
34
|
catch (e) {
|
|
31
35
|
return [];
|