@opennextjs/aws 3.7.0 → 3.7.1
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 +9 -7
- package/dist/build/createServerBundle.js +2 -0
- package/dist/build/generateOutput.js +4 -2
- package/dist/build/validateConfig.js +3 -1
- package/dist/core/createGenericHandler.js +4 -2
- package/dist/core/requestHandler.js +12 -2
- package/dist/core/resolve.d.ts +2 -2
- package/dist/types/open-next.d.ts +44 -30
- package/package.json +1 -1
|
@@ -7,14 +7,16 @@ import routingHandler, { INTERNAL_EVENT_REQUEST_ID, INTERNAL_HEADER_INITIAL_URL,
|
|
|
7
7
|
globalThis.internalFetch = fetch;
|
|
8
8
|
globalThis.__openNextAls = new AsyncLocalStorage();
|
|
9
9
|
const defaultHandler = async (internalEvent, options) => {
|
|
10
|
-
|
|
11
|
-
const
|
|
12
|
-
|
|
13
|
-
const
|
|
10
|
+
// We know that the middleware is external when this adapter is used
|
|
11
|
+
const middlewareConfig = globalThis.openNextConfig
|
|
12
|
+
.middleware;
|
|
13
|
+
const originResolver = await resolveOriginResolver(middlewareConfig?.originResolver);
|
|
14
|
+
const externalRequestProxy = await resolveProxyRequest(middlewareConfig?.override?.proxyExternalRequest);
|
|
15
|
+
const assetResolver = await resolveAssetResolver(middlewareConfig?.assetResolver);
|
|
14
16
|
//#override includeCacheInMiddleware
|
|
15
|
-
globalThis.tagCache = await resolveTagCache(
|
|
16
|
-
globalThis.queue = await resolveQueue(
|
|
17
|
-
globalThis.incrementalCache = await resolveIncrementalCache(
|
|
17
|
+
globalThis.tagCache = await resolveTagCache(middlewareConfig?.override?.tagCache);
|
|
18
|
+
globalThis.queue = await resolveQueue(middlewareConfig?.override?.queue);
|
|
19
|
+
globalThis.incrementalCache = await resolveIncrementalCache(middlewareConfig?.override?.incrementalCache);
|
|
18
20
|
//#endOverride
|
|
19
21
|
const requestId = Math.random().toString(36);
|
|
20
22
|
// We run everything in the async local storage context so that it is available in the external middleware
|
|
@@ -139,6 +139,7 @@ async function generateBundle(name, options, fnOptions, codeCustomization) {
|
|
|
139
139
|
const isAfter141 = buildHelper.compareSemver(options.nextVersion, ">=", "14.1");
|
|
140
140
|
const isAfter142 = buildHelper.compareSemver(options.nextVersion, ">=", "14.2");
|
|
141
141
|
const isAfter152 = buildHelper.compareSemver(options.nextVersion, ">=", "15.2.0");
|
|
142
|
+
const isAfter154 = buildHelper.compareSemver(options.nextVersion, ">=", "15.4.0");
|
|
142
143
|
const disableRouting = isBefore13413 || config.middleware?.external;
|
|
143
144
|
const updater = new ContentUpdater(options);
|
|
144
145
|
const additionalPlugins = codeCustomization?.additionalPlugins
|
|
@@ -153,6 +154,7 @@ async function generateBundle(name, options, fnOptions, codeCustomization) {
|
|
|
153
154
|
...(disableRouting ? ["withRouting"] : []),
|
|
154
155
|
...(isAfter142 ? ["patchAsyncStorage"] : []),
|
|
155
156
|
...(isAfter141 ? ["appendPrefetch"] : []),
|
|
157
|
+
...(isAfter154 ? [] : ["setInitialURL"]),
|
|
156
158
|
],
|
|
157
159
|
}),
|
|
158
160
|
openNextReplacementPlugin({
|
|
@@ -61,11 +61,13 @@ export async function generateOutput(options) {
|
|
|
61
61
|
const edgeFunctions = {};
|
|
62
62
|
const isExternalMiddleware = config.middleware?.external ?? false;
|
|
63
63
|
if (isExternalMiddleware) {
|
|
64
|
+
const middlewareConfig = options.config
|
|
65
|
+
.middleware;
|
|
64
66
|
edgeFunctions.middleware = {
|
|
65
67
|
bundle: ".open-next/middleware",
|
|
66
68
|
handler: "handler.handler",
|
|
67
|
-
pathResolver: await extractOverrideName("pattern-env",
|
|
68
|
-
...(await extractOverrideFn(
|
|
69
|
+
pathResolver: await extractOverrideName("pattern-env", middlewareConfig.originResolver),
|
|
70
|
+
...(await extractOverrideFn(middlewareConfig.override)),
|
|
69
71
|
};
|
|
70
72
|
}
|
|
71
73
|
// Add edge functions
|
|
@@ -72,7 +72,9 @@ export function validateConfig(config) {
|
|
|
72
72
|
It is safe to disable if you only use page router`);
|
|
73
73
|
}
|
|
74
74
|
validateFunctionOptions(config.imageOptimization ?? {});
|
|
75
|
-
|
|
75
|
+
if (config.middleware?.external === true) {
|
|
76
|
+
validateFunctionOptions(config.middleware ?? {});
|
|
77
|
+
}
|
|
76
78
|
//@ts-expect-error - Revalidate custom wrapper type is different
|
|
77
79
|
validateFunctionOptions(config.revalidate ?? {});
|
|
78
80
|
//@ts-expect-error - Warmer custom wrapper type is different
|
|
@@ -4,8 +4,10 @@ export async function createGenericHandler(handler) {
|
|
|
4
4
|
// @ts-expect-error `./open-next.config.mjs` exists only in the build output
|
|
5
5
|
const config = await import("./open-next.config.mjs").then((m) => m.default);
|
|
6
6
|
globalThis.openNextConfig = config;
|
|
7
|
-
const
|
|
8
|
-
|
|
7
|
+
const handlerConfig = config[handler.type];
|
|
8
|
+
const override = handlerConfig && "override" in handlerConfig
|
|
9
|
+
? handlerConfig.override
|
|
10
|
+
: undefined;
|
|
9
11
|
// From the config, we create the converter
|
|
10
12
|
const converter = await resolveConverter(override?.converter);
|
|
11
13
|
// Then we create the handler
|
|
@@ -4,7 +4,7 @@ import { runWithOpenNextRequestContext } from "../utils/promise";
|
|
|
4
4
|
import { NextConfig } from "../adapters/config/index";
|
|
5
5
|
import { debug, error } from "../adapters/logger";
|
|
6
6
|
import { patchAsyncStorage } from "./patchAsyncStorage";
|
|
7
|
-
import { constructNextUrl, convertRes, convertToQuery, createServerResponse, } from "./routing/util";
|
|
7
|
+
import { constructNextUrl, convertRes, convertToQuery, convertToQueryString, createServerResponse, } from "./routing/util";
|
|
8
8
|
import routingHandler, { INTERNAL_EVENT_REQUEST_ID, INTERNAL_HEADER_INITIAL_URL, INTERNAL_HEADER_RESOLVED_ROUTES, MIDDLEWARE_HEADER_PREFIX, MIDDLEWARE_HEADER_PREFIX_LEN, } from "./routingHandler";
|
|
9
9
|
import { requestHandler, setNextjsPrebundledReact } from "./util";
|
|
10
10
|
// This is used to identify requests in the cache
|
|
@@ -167,7 +167,10 @@ async function processRequest(req, res, routingResult) {
|
|
|
167
167
|
// Here we try to apply as much request metadata as possible
|
|
168
168
|
// We apply every metadata from `resolve-routes` https://github.com/vercel/next.js/blob/916f105b97211de50f8580f0b39c9e7c60de4886/packages/next/src/server/lib/router-utils/resolve-routes.ts
|
|
169
169
|
// and `router-server` https://github.com/vercel/next.js/blob/916f105b97211de50f8580f0b39c9e7c60de4886/packages/next/src/server/lib/router-server.ts
|
|
170
|
-
const initialURL = new URL(
|
|
170
|
+
const initialURL = new URL(
|
|
171
|
+
// We always assume that only the routing layer can set this header.
|
|
172
|
+
routingResult.internalEvent.headers[INTERNAL_HEADER_INITIAL_URL] ??
|
|
173
|
+
routingResult.initialURL);
|
|
171
174
|
let invokeStatus;
|
|
172
175
|
if (routingResult.internalEvent.rawPath === "/500") {
|
|
173
176
|
invokeStatus = 500;
|
|
@@ -194,6 +197,13 @@ async function processRequest(req, res, routingResult) {
|
|
|
194
197
|
setNextjsPrebundledReact(routingResult.internalEvent.rawPath);
|
|
195
198
|
//#endOverride
|
|
196
199
|
// Next Server
|
|
200
|
+
// TODO: only enable this on Next 15.4+
|
|
201
|
+
// We need to set the pathname to the data request path
|
|
202
|
+
//#override setInitialURL
|
|
203
|
+
req.url =
|
|
204
|
+
initialURL.pathname +
|
|
205
|
+
convertToQueryString(routingResult.internalEvent.query);
|
|
206
|
+
//#endOverride
|
|
197
207
|
await requestHandler(requestMetadata)(req, res);
|
|
198
208
|
}
|
|
199
209
|
catch (e) {
|
package/dist/core/resolve.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BaseEventOrResult, DefaultOverrideOptions, InternalEvent, InternalResult, OpenNextConfig, OverrideOptions } from "../types/open-next";
|
|
1
|
+
import type { BaseEventOrResult, DefaultOverrideOptions, ExternalMiddlewareConfig, InternalEvent, InternalResult, OpenNextConfig, OverrideOptions } from "../types/open-next";
|
|
2
2
|
import type { Converter, TagCache, Wrapper } from "../types/overrides";
|
|
3
3
|
type RemoveUndefined<T> = T extends undefined ? never : T;
|
|
4
4
|
export declare function resolveConverter<E extends BaseEventOrResult = InternalEvent, R extends BaseEventOrResult = InternalResult>(converter: DefaultOverrideOptions<E, R>["converter"]): Promise<Converter<E, R>>;
|
|
@@ -34,7 +34,7 @@ export declare function resolveImageLoader(imageLoader: RemoveUndefined<OpenNext
|
|
|
34
34
|
* @returns
|
|
35
35
|
* @__PURE__
|
|
36
36
|
*/
|
|
37
|
-
export declare function resolveOriginResolver(originResolver: RemoveUndefined<
|
|
37
|
+
export declare function resolveOriginResolver(originResolver: RemoveUndefined<ExternalMiddlewareConfig>["originResolver"]): Promise<import("../types/overrides").OriginResolver>;
|
|
38
38
|
/**
|
|
39
39
|
* @returns
|
|
40
40
|
* @__PURE__
|
|
@@ -244,43 +244,56 @@ export interface SplittedFunctionOptions extends FunctionOptions {
|
|
|
244
244
|
*/
|
|
245
245
|
patterns: string[];
|
|
246
246
|
}
|
|
247
|
+
/**
|
|
248
|
+
* MiddlewareConfig that applies to both external and internal middlewares
|
|
249
|
+
*
|
|
250
|
+
* Note: this type is internal and included in both `ExternalMiddlewareConfig` and `InternalMiddlewareConfig`
|
|
251
|
+
*/
|
|
252
|
+
type CommonMiddlewareConfig = {
|
|
253
|
+
/**
|
|
254
|
+
* The assetResolver is used to resolve assets in the routing layer.
|
|
255
|
+
*
|
|
256
|
+
* @default "dummy"
|
|
257
|
+
*/
|
|
258
|
+
assetResolver?: IncludedAssetResolver | LazyLoadedOverride<AssetResolver>;
|
|
259
|
+
};
|
|
260
|
+
/** MiddlewareConfig that applies to external middlewares only */
|
|
261
|
+
export type ExternalMiddlewareConfig = DefaultFunctionOptions & CommonMiddlewareConfig & {
|
|
262
|
+
external: true;
|
|
263
|
+
/**
|
|
264
|
+
* The runtime used by next for the middleware.
|
|
265
|
+
* @default "edge"
|
|
266
|
+
*/
|
|
267
|
+
runtime?: "node" | "edge";
|
|
268
|
+
/**
|
|
269
|
+
* The override options for the middleware.
|
|
270
|
+
* By default the lite override are used (.i.e. s3-lite, dynamodb-lite, sqs-lite)
|
|
271
|
+
* @default undefined
|
|
272
|
+
*/
|
|
273
|
+
override?: OverrideOptions;
|
|
274
|
+
/**
|
|
275
|
+
* Origin resolver is used to resolve the origin for internal rewrite.
|
|
276
|
+
* By default, it uses the pattern-env origin resolver.
|
|
277
|
+
* Pattern env uses pattern set in split function options and an env variable OPEN_NEXT_ORIGIN
|
|
278
|
+
* OPEN_NEXT_ORIGIN should be a json stringified object with the key of the splitted function as key and the origin as value
|
|
279
|
+
* @default "pattern-env"
|
|
280
|
+
*/
|
|
281
|
+
originResolver?: IncludedOriginResolver | LazyLoadedOverride<OriginResolver>;
|
|
282
|
+
};
|
|
283
|
+
/** MiddlewareConfig that applies to internal middlewares only */
|
|
284
|
+
export type InternalMiddlewareConfig = {
|
|
285
|
+
external: false;
|
|
286
|
+
} & CommonMiddlewareConfig;
|
|
247
287
|
export interface OpenNextConfig {
|
|
248
288
|
default: FunctionOptions;
|
|
249
289
|
functions?: Record<string, SplittedFunctionOptions>;
|
|
250
290
|
/**
|
|
251
291
|
* Override the default middleware
|
|
252
|
-
*
|
|
292
|
+
* When `external` is true, the middleware need to be deployed separately.
|
|
253
293
|
* It supports both edge and node runtime.
|
|
254
|
-
* @default undefined
|
|
294
|
+
* @default undefined - Which is equivalent to `external: false`
|
|
255
295
|
*/
|
|
256
|
-
middleware?:
|
|
257
|
-
external: true;
|
|
258
|
-
/**
|
|
259
|
-
* The runtime used by next for the middleware.
|
|
260
|
-
* @default "edge"
|
|
261
|
-
*/
|
|
262
|
-
runtime?: "node" | "edge";
|
|
263
|
-
/**
|
|
264
|
-
* The override options for the middleware.
|
|
265
|
-
* By default the lite override are used (.i.e. s3-lite, dynamodb-lite, sqs-lite)
|
|
266
|
-
* @default undefined
|
|
267
|
-
*/
|
|
268
|
-
override?: OverrideOptions;
|
|
269
|
-
/**
|
|
270
|
-
* Origin resolver is used to resolve the origin for internal rewrite.
|
|
271
|
-
* By default, it uses the pattern-env origin resolver.
|
|
272
|
-
* Pattern env uses pattern set in split function options and an env variable OPEN_NEXT_ORIGIN
|
|
273
|
-
* OPEN_NEXT_ORIGIN should be a json stringified object with the key of the splitted function as key and the origin as value
|
|
274
|
-
* @default "pattern-env"
|
|
275
|
-
*/
|
|
276
|
-
originResolver?: IncludedOriginResolver | LazyLoadedOverride<OriginResolver>;
|
|
277
|
-
/**
|
|
278
|
-
* The assetResolver is used to resolve assets in the routing layer.
|
|
279
|
-
*
|
|
280
|
-
* @default "dummy"
|
|
281
|
-
*/
|
|
282
|
-
assetResolver?: IncludedAssetResolver | LazyLoadedOverride<AssetResolver>;
|
|
283
|
-
};
|
|
296
|
+
middleware?: ExternalMiddlewareConfig | InternalMiddlewareConfig;
|
|
284
297
|
/**
|
|
285
298
|
* Override the default warmer
|
|
286
299
|
* By default, works for lambda only.
|
|
@@ -362,3 +375,4 @@ export interface OpenNextConfig {
|
|
|
362
375
|
*/
|
|
363
376
|
edgeExternals?: string[];
|
|
364
377
|
}
|
|
378
|
+
export {};
|