@opennextjs/aws 3.2.2 → 3.3.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/README.md +6 -1
- package/dist/adapters/cache.d.ts +1 -2
- package/dist/adapters/cache.js +2 -12
- package/dist/adapters/config/index.d.ts +2 -0
- package/dist/adapters/config/index.js +4 -3
- package/dist/adapters/config/util.d.ts +2 -0
- package/dist/adapters/config/util.js +12 -2
- package/dist/adapters/image-optimization-adapter.d.ts +1 -2
- package/dist/adapters/logger.js +32 -11
- package/dist/adapters/middleware.js +13 -2
- package/dist/adapters/plugins/image-optimization/image-optimization.d.ts +1 -0
- package/dist/adapters/plugins/image-optimization/image-optimization.js +0 -1
- package/dist/adapters/plugins/image-optimization/image-optimization.replacement.d.ts +1 -0
- package/dist/adapters/util.js +5 -1
- package/dist/build/bundleNextServer.d.ts +2 -2
- package/dist/build/bundleNextServer.js +2 -2
- package/dist/build/copyTracedFiles.js +1 -1
- package/dist/build/createAssets.js +23 -24
- package/dist/build/createMiddleware.js +1 -1
- package/dist/build/createServerBundle.js +3 -3
- package/dist/build/edge/createEdgeBundle.d.ts +5 -4
- package/dist/build/edge/createEdgeBundle.js +35 -33
- package/dist/build/helper.d.ts +6 -1
- package/dist/build/helper.js +20 -5
- package/dist/build/validateConfig.js +3 -1
- package/dist/core/requestHandler.d.ts +1 -2
- package/dist/core/requestHandler.js +31 -20
- package/dist/core/routing/matcher.js +1 -1
- package/dist/core/routing/middleware.d.ts +3 -3
- package/dist/core/routing/middleware.js +3 -4
- package/dist/core/routing/routeMatcher.d.ts +10 -0
- package/dist/core/routing/routeMatcher.js +45 -0
- package/dist/core/routing/util.d.ts +3 -3
- package/dist/core/routing/util.js +7 -5
- package/dist/core/routingHandler.d.ts +5 -8
- package/dist/core/routingHandler.js +38 -37
- package/dist/helpers/withCloudflare.d.ts +1 -1
- package/dist/helpers/withCloudflare.js +2 -2
- package/dist/http/openNextResponse.d.ts +2 -10
- package/dist/http/openNextResponse.js +5 -3
- package/dist/overrides/converters/aws-apigw-v2.js +2 -1
- package/dist/overrides/converters/aws-cloudfront.js +1 -1
- package/dist/overrides/converters/edge.d.ts +2 -5
- package/dist/overrides/converters/edge.js +5 -4
- package/dist/overrides/incrementalCache/dummy.js +4 -3
- package/dist/overrides/proxyExternalRequest/dummy.js +2 -1
- package/dist/overrides/proxyExternalRequest/node.js +2 -2
- package/dist/overrides/queue/dummy.js +2 -1
- package/dist/overrides/warmer/dummy.js +2 -1
- package/dist/overrides/wrappers/aws-lambda-streaming.d.ts +1 -1
- package/dist/overrides/wrappers/aws-lambda-streaming.js +0 -4
- package/dist/overrides/wrappers/aws-lambda.js +0 -3
- package/dist/overrides/wrappers/cloudflare-edge.d.ts +9 -0
- package/dist/overrides/wrappers/{cloudflare.js → cloudflare-edge.js} +3 -3
- package/dist/overrides/wrappers/cloudflare-node.d.ts +8 -0
- package/dist/overrides/wrappers/cloudflare-node.js +50 -0
- package/dist/overrides/wrappers/dummy.d.ts +2 -2
- package/dist/overrides/wrappers/dummy.js +1 -1
- package/dist/overrides/wrappers/node.d.ts +1 -1
- package/dist/overrides/wrappers/node.js +0 -3
- package/dist/plugins/edge.js +6 -1
- package/dist/plugins/resolve.js +5 -1
- package/dist/types/open-next.d.ts +26 -1
- package/dist/types/overrides.d.ts +4 -5
- package/dist/{adapters → utils}/binary.js +1 -0
- package/dist/utils/error.d.ts +1 -0
- package/dist/utils/error.js +8 -0
- package/package.json +3 -3
- package/dist/overrides/wrappers/cloudflare.d.ts +0 -12
- /package/dist/{adapters → utils}/binary.d.ts +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { debug, error } from "node:console";
|
|
2
1
|
import { request } from "node:https";
|
|
3
2
|
import { Readable } from "node:stream";
|
|
4
|
-
import {
|
|
3
|
+
import { debug, error } from "../../adapters/logger";
|
|
4
|
+
import { isBinaryContentType } from "../../utils/binary";
|
|
5
5
|
function filterHeadersForProxy(headers) {
|
|
6
6
|
const filteredHeaders = {};
|
|
7
7
|
const disallowedHeaders = [
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { FatalError } from "../../utils/error";
|
|
1
2
|
const dummyWarmer = {
|
|
2
3
|
name: "dummy",
|
|
3
4
|
invoke: async (_) => {
|
|
4
|
-
throw new
|
|
5
|
+
throw new FatalError("Dummy warmer is not implemented");
|
|
5
6
|
},
|
|
6
7
|
};
|
|
7
8
|
export default dummyWarmer;
|
|
@@ -62,10 +62,6 @@ const handler = async (handler, converter) => awslambda.streamifyResponse(async
|
|
|
62
62
|
responseStream.write(new Uint8Array(8));
|
|
63
63
|
return compressedStream ?? responseStream;
|
|
64
64
|
},
|
|
65
|
-
onWrite: () => {
|
|
66
|
-
// _hasWriten = true;
|
|
67
|
-
},
|
|
68
|
-
onFinish: () => { },
|
|
69
65
|
};
|
|
70
66
|
const response = await handler(internalEvent, streamCreator);
|
|
71
67
|
const isUsingEdge = globalThis.isEdgeRuntime ?? false;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { InternalEvent, InternalResult, MiddlewareResult } from "../../types/open-next";
|
|
2
|
+
import type { WrapperHandler } from "../../types/overrides";
|
|
3
|
+
declare const _default: {
|
|
4
|
+
wrapper: WrapperHandler<InternalEvent, InternalResult | MiddlewareResult>;
|
|
5
|
+
name: string;
|
|
6
|
+
supportStreaming: true;
|
|
7
|
+
edgeRuntime: true;
|
|
8
|
+
};
|
|
9
|
+
export default _default;
|
|
@@ -21,8 +21,8 @@ const handler = async (handler, converter) => async (request, env, ctx) => {
|
|
|
21
21
|
// Note: This code could be moved to a cloudflare specific converter when one is created.
|
|
22
22
|
const cfProperties = request.cf;
|
|
23
23
|
for (const [propName, headerName] of Object.entries(cfPropNameToHeaderName)) {
|
|
24
|
-
const propValue = cfProperties[propName];
|
|
25
|
-
if (propValue
|
|
24
|
+
const propValue = cfProperties?.[propName];
|
|
25
|
+
if (propValue != null) {
|
|
26
26
|
internalEvent.headers[headerName] = propValue;
|
|
27
27
|
}
|
|
28
28
|
}
|
|
@@ -32,7 +32,7 @@ const handler = async (handler, converter) => async (request, env, ctx) => {
|
|
|
32
32
|
};
|
|
33
33
|
export default {
|
|
34
34
|
wrapper: handler,
|
|
35
|
-
name: "cloudflare",
|
|
35
|
+
name: "cloudflare-edge",
|
|
36
36
|
supportStreaming: true,
|
|
37
37
|
edgeRuntime: true,
|
|
38
38
|
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { InternalEvent, InternalResult } from "../../types/open-next";
|
|
2
|
+
import type { WrapperHandler } from "../../types/overrides";
|
|
3
|
+
declare const _default: {
|
|
4
|
+
wrapper: WrapperHandler<InternalEvent, InternalResult>;
|
|
5
|
+
name: string;
|
|
6
|
+
supportStreaming: true;
|
|
7
|
+
};
|
|
8
|
+
export default _default;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Writable } from "node:stream";
|
|
2
|
+
// Response with null body status (101, 204, 205, or 304) cannot have a body.
|
|
3
|
+
const NULL_BODY_STATUSES = new Set([101, 204, 205, 304]);
|
|
4
|
+
const handler = async (handler, converter) => async (request, env, ctx) => {
|
|
5
|
+
globalThis.process = process;
|
|
6
|
+
globalThis.openNextWaitUntil = ctx.waitUntil.bind(ctx);
|
|
7
|
+
// Set the environment variables
|
|
8
|
+
// Cloudflare suggests to not override the process.env object but instead apply the values to it
|
|
9
|
+
for (const [key, value] of Object.entries(env)) {
|
|
10
|
+
if (typeof value === "string") {
|
|
11
|
+
process.env[key] = value;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const internalEvent = await converter.convertFrom(request);
|
|
15
|
+
// TODO:
|
|
16
|
+
// The edge converter populate event.url with the url including the origin.
|
|
17
|
+
// This is required for middleware to keep track of the protocol (i.e. http with wrangler dev).
|
|
18
|
+
// However the server expects that the origin is not included.
|
|
19
|
+
const url = new URL(internalEvent.url);
|
|
20
|
+
internalEvent.url = url.href.slice(url.origin.length);
|
|
21
|
+
const { promise: promiseResponse, resolve: resolveResponse } = Promise.withResolvers();
|
|
22
|
+
const streamCreator = {
|
|
23
|
+
writeHeaders(prelude) {
|
|
24
|
+
const { statusCode, cookies, headers } = prelude;
|
|
25
|
+
const responseHeaders = new Headers(headers);
|
|
26
|
+
for (const cookie of cookies) {
|
|
27
|
+
responseHeaders.append("Set-Cookie", cookie);
|
|
28
|
+
}
|
|
29
|
+
const { readable, writable } = new TransformStream({
|
|
30
|
+
transform(chunk, controller) {
|
|
31
|
+
controller.enqueue(Uint8Array.from(chunk.chunk ?? chunk));
|
|
32
|
+
},
|
|
33
|
+
});
|
|
34
|
+
const body = NULL_BODY_STATUSES.has(statusCode) ? null : readable;
|
|
35
|
+
const response = new Response(body, {
|
|
36
|
+
status: statusCode,
|
|
37
|
+
headers: responseHeaders,
|
|
38
|
+
});
|
|
39
|
+
resolveResponse(response);
|
|
40
|
+
return Writable.fromWeb(writable);
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
ctx.waitUntil(handler(internalEvent, streamCreator));
|
|
44
|
+
return promiseResponse;
|
|
45
|
+
};
|
|
46
|
+
export default {
|
|
47
|
+
wrapper: handler,
|
|
48
|
+
name: "cloudflare-node",
|
|
49
|
+
supportStreaming: true,
|
|
50
|
+
};
|
package/dist/plugins/edge.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import chalk from "chalk";
|
|
4
|
-
import { loadAppPathsManifestKeys, loadBuildId, loadConfig, loadConfigHeaders, loadHtmlPages, loadMiddlewareManifest, loadPrerenderManifest, loadRoutesManifest, } from "../adapters/config/util.js";
|
|
4
|
+
import { loadAppPathRoutesManifest, loadAppPathsManifest, loadAppPathsManifestKeys, loadBuildId, loadConfig, loadConfigHeaders, loadHtmlPages, loadMiddlewareManifest, loadPrerenderManifest, loadRoutesManifest, } from "../adapters/config/util.js";
|
|
5
5
|
import logger from "../logger.js";
|
|
6
6
|
/**
|
|
7
7
|
* @param opts.nextDir - The path to the .next directory
|
|
@@ -126,6 +126,8 @@ ${contents}
|
|
|
126
126
|
const PrerenderManifest = loadPrerenderManifest(nextDir);
|
|
127
127
|
const AppPathsManifestKeys = loadAppPathsManifestKeys(nextDir);
|
|
128
128
|
const MiddlewareManifest = loadMiddlewareManifest(nextDir);
|
|
129
|
+
const AppPathsManifest = loadAppPathsManifest(nextDir);
|
|
130
|
+
const AppPathRoutesManifest = loadAppPathRoutesManifest(nextDir);
|
|
129
131
|
const contents = `
|
|
130
132
|
import path from "node:path";
|
|
131
133
|
|
|
@@ -146,6 +148,9 @@ ${contents}
|
|
|
146
148
|
export const PrerenderManifest = ${JSON.stringify(PrerenderManifest)};
|
|
147
149
|
export const AppPathsManifestKeys = ${JSON.stringify(AppPathsManifestKeys)};
|
|
148
150
|
export const MiddlewareManifest = ${JSON.stringify(MiddlewareManifest)};
|
|
151
|
+
export const AppPathsManifest = ${JSON.stringify(AppPathsManifest)};
|
|
152
|
+
export const AppPathRoutesManifest = ${JSON.stringify(AppPathRoutesManifest)};
|
|
153
|
+
|
|
149
154
|
|
|
150
155
|
process.env.NEXT_BUILD_ID = BuildId;
|
|
151
156
|
`;
|
package/dist/plugins/resolve.js
CHANGED
|
@@ -43,10 +43,14 @@ export function openNextResolvePlugin({ overrides, fnName, }) {
|
|
|
43
43
|
build.onLoad({ filter: /core(\/|\\)resolve\.js/g }, async (args) => {
|
|
44
44
|
let contents = readFileSync(args.path, "utf-8");
|
|
45
45
|
const overridesEntries = Object.entries(overrides ?? {});
|
|
46
|
-
for (
|
|
46
|
+
for (let [overrideName, overrideValue] of overridesEntries) {
|
|
47
47
|
if (!overrideValue) {
|
|
48
48
|
continue;
|
|
49
49
|
}
|
|
50
|
+
if (overrideName === "wrapper" && overrideValue === "cloudflare") {
|
|
51
|
+
// "cloudflare" is deprecated and replaced by "cloudflare-edge".
|
|
52
|
+
overrideValue = "cloudflare-edge";
|
|
53
|
+
}
|
|
50
54
|
const folder = nameToFolder[overrideName];
|
|
51
55
|
const defaultOverride = defaultOverrides[overrideName];
|
|
52
56
|
contents = contents.replace(`../overrides/${folder}/${defaultOverride}.js`, `../overrides/${folder}/${getOverrideOrDummy(overrideValue)}.js`);
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { ReadableStream } from "node:stream/web";
|
|
2
|
+
import type { Writable } from "node:stream";
|
|
2
3
|
import type { WarmerEvent, WarmerResponse } from "../adapters/warmer-function";
|
|
3
4
|
import type { Converter, ImageLoader, IncrementalCache, OriginResolver, ProxyExternalRequest, Queue, TagCache, Warmer, Wrapper } from "./overrides";
|
|
4
5
|
export type BaseEventOrResult<T extends string = string> = {
|
|
@@ -20,6 +21,15 @@ export type InternalResult = {
|
|
|
20
21
|
body: ReadableStream;
|
|
21
22
|
isBase64Encoded: boolean;
|
|
22
23
|
} & BaseEventOrResult<"core">;
|
|
24
|
+
export interface StreamCreator {
|
|
25
|
+
writeHeaders(prelude: {
|
|
26
|
+
statusCode: number;
|
|
27
|
+
cookies: string[];
|
|
28
|
+
headers: Record<string, string>;
|
|
29
|
+
}): Writable;
|
|
30
|
+
onWrite?: () => void;
|
|
31
|
+
onFinish?: (length: number) => void;
|
|
32
|
+
}
|
|
23
33
|
export interface DangerousOptions {
|
|
24
34
|
/**
|
|
25
35
|
* The tag cache is used for revalidateTags and revalidatePath.
|
|
@@ -56,8 +66,23 @@ export interface Origin {
|
|
|
56
66
|
port?: number;
|
|
57
67
|
customHeaders?: Record<string, string>;
|
|
58
68
|
}
|
|
59
|
-
export type IncludedWrapper = "aws-lambda" | "aws-lambda-streaming" | "node" | "cloudflare" | "dummy";
|
|
69
|
+
export type IncludedWrapper = "aws-lambda" | "aws-lambda-streaming" | "node" | "cloudflare" | "cloudflare-edge" | "cloudflare-node" | "dummy";
|
|
60
70
|
export type IncludedConverter = "aws-apigw-v2" | "aws-apigw-v1" | "aws-cloudfront" | "edge" | "node" | "sqs-revalidate" | "dummy";
|
|
71
|
+
export type RouteType = "route" | "page" | "app";
|
|
72
|
+
export interface ResolvedRoute {
|
|
73
|
+
route: string;
|
|
74
|
+
type: RouteType;
|
|
75
|
+
}
|
|
76
|
+
export interface RoutingResult {
|
|
77
|
+
internalEvent: InternalEvent;
|
|
78
|
+
isExternalRewrite: boolean;
|
|
79
|
+
origin: Origin | false;
|
|
80
|
+
isISR: boolean;
|
|
81
|
+
initialPath: string;
|
|
82
|
+
resolvedRoutes: ResolvedRoute[];
|
|
83
|
+
}
|
|
84
|
+
export interface MiddlewareResult extends RoutingResult, BaseEventOrResult<"middleware"> {
|
|
85
|
+
}
|
|
61
86
|
export type IncludedQueue = "sqs" | "sqs-lite" | "dummy";
|
|
62
87
|
export type IncludedIncrementalCache = "s3" | "s3-lite" | "dummy";
|
|
63
88
|
export type IncludedTagCache = "dynamodb" | "dynamodb-lite" | "dummy";
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { Readable } from "node:stream";
|
|
2
|
-
import type { StreamCreator } from "../http/index";
|
|
3
2
|
import type { Meta } from "./cache";
|
|
4
|
-
import type { BaseEventOrResult, BaseOverride, InternalEvent, InternalResult, Origin } from "./open-next";
|
|
3
|
+
import type { BaseEventOrResult, BaseOverride, InternalEvent, InternalResult, Origin, StreamCreator } from "./open-next";
|
|
5
4
|
export interface QueueMessage {
|
|
6
5
|
MessageDeduplicationId: string;
|
|
7
6
|
MessageBody: {
|
|
@@ -14,7 +13,7 @@ export interface Queue {
|
|
|
14
13
|
send(message: QueueMessage): Promise<void>;
|
|
15
14
|
name: string;
|
|
16
15
|
}
|
|
17
|
-
export type
|
|
16
|
+
export type CachedFile = {
|
|
18
17
|
type: "redirect";
|
|
19
18
|
props?: Object;
|
|
20
19
|
meta?: Meta;
|
|
@@ -33,12 +32,12 @@ export type S3CachedFile = {
|
|
|
33
32
|
body: string;
|
|
34
33
|
meta?: Meta;
|
|
35
34
|
};
|
|
36
|
-
export type
|
|
35
|
+
export type FetchCache = Object;
|
|
37
36
|
export type WithLastModified<T> = {
|
|
38
37
|
lastModified?: number;
|
|
39
38
|
value?: T;
|
|
40
39
|
};
|
|
41
|
-
export type CacheValue<IsFetch extends boolean> = (IsFetch extends true ?
|
|
40
|
+
export type CacheValue<IsFetch extends boolean> = (IsFetch extends true ? FetchCache : CachedFile) & {
|
|
42
41
|
revalidate?: number | false;
|
|
43
42
|
};
|
|
44
43
|
export type IncrementalCache = {
|
package/dist/utils/error.d.ts
CHANGED
package/dist/utils/error.js
CHANGED
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"access": "public"
|
|
4
4
|
},
|
|
5
5
|
"name": "@opennextjs/aws",
|
|
6
|
-
"version": "3.
|
|
6
|
+
"version": "3.3.1",
|
|
7
7
|
"bin": {
|
|
8
8
|
"open-next": "./dist/index.js"
|
|
9
9
|
},
|
|
@@ -47,9 +47,9 @@
|
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/aws-lambda": "^8.10.109",
|
|
50
|
-
"@types/node": "
|
|
50
|
+
"@types/node": "20.17.6",
|
|
51
51
|
"tsc-alias": "^1.8.8",
|
|
52
|
-
"typescript": "
|
|
52
|
+
"typescript": "5.6.3"
|
|
53
53
|
},
|
|
54
54
|
"bugs": {
|
|
55
55
|
"url": "https://github.com/opennextjs/opennextjs-aws/issues"
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { InternalEvent, InternalResult } from "../../types/open-next";
|
|
2
|
-
import type { WrapperHandler } from "../../types/overrides";
|
|
3
|
-
import type { MiddlewareOutputEvent } from "../../core/routingHandler";
|
|
4
|
-
declare const _default: {
|
|
5
|
-
wrapper: WrapperHandler<InternalEvent, InternalResult | ({
|
|
6
|
-
type: "middleware";
|
|
7
|
-
} & MiddlewareOutputEvent)>;
|
|
8
|
-
name: string;
|
|
9
|
-
supportStreaming: boolean;
|
|
10
|
-
edgeRuntime: boolean;
|
|
11
|
-
};
|
|
12
|
-
export default _default;
|
|
File without changes
|