@opennextjs/aws 3.2.1 → 3.3.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/README.md +21 -2
- 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.d.ts +1 -2
- package/dist/adapters/image-optimization-adapter.js +4 -4
- package/dist/adapters/logger.d.ts +0 -3
- package/dist/adapters/logger.js +32 -13
- package/dist/adapters/middleware.js +42 -18
- package/dist/adapters/plugins/image-optimization/image-optimization.d.ts +1 -3
- package/dist/adapters/plugins/image-optimization/image-optimization.js +0 -1
- package/dist/adapters/plugins/image-optimization/image-optimization.replacement.d.ts +1 -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 +15 -26
- package/dist/build/createAssets.js +36 -27
- package/dist/build/createImageOptimizationBundle.js +1 -1
- package/dist/build/createMiddleware.js +8 -3
- package/dist/build/createRevalidationBundle.js +1 -1
- package/dist/build/createServerBundle.js +25 -31
- package/dist/build/createWarmerBundle.js +1 -1
- package/dist/build/edge/createEdgeBundle.d.ts +8 -4
- package/dist/build/edge/createEdgeBundle.js +34 -16
- package/dist/build/generateOutput.js +7 -13
- package/dist/build/helper.d.ts +28 -5
- package/dist/build/helper.js +44 -15
- 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 +4 -1
- 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.d.ts +1 -2
- package/dist/core/requestHandler.js +99 -90
- 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 +18 -27
- package/dist/core/routing/middleware.d.ts +3 -3
- package/dist/core/routing/middleware.js +20 -20
- package/dist/core/routing/util.d.ts +2 -15
- package/dist/core/routing/util.js +26 -88
- package/dist/core/routingHandler.d.ts +4 -8
- package/dist/core/routingHandler.js +36 -18
- package/dist/core/util.js +5 -3
- package/dist/helpers/withCloudflare.d.ts +1 -1
- package/dist/helpers/withCloudflare.js +2 -2
- package/dist/helpers/withSST.d.ts +1 -1
- package/dist/http/openNextResponse.d.ts +6 -18
- package/dist/http/openNextResponse.js +32 -32
- 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 +8 -8
- 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 +3 -5
- package/dist/overrides/converters/edge.js +15 -18
- 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/dummy.js +4 -3
- 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 +8 -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/dummy.js +2 -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/warmer/dummy.js +2 -1
- package/dist/overrides/wrappers/aws-lambda-streaming.d.ts +3 -3
- package/dist/overrides/wrappers/aws-lambda-streaming.js +0 -4
- package/dist/overrides/wrappers/aws-lambda.d.ts +2 -2
- package/dist/overrides/wrappers/aws-lambda.js +0 -3
- package/dist/overrides/wrappers/cloudflare-edge.d.ts +9 -0
- package/dist/overrides/wrappers/cloudflare-edge.js +38 -0
- package/dist/overrides/wrappers/cloudflare-node.d.ts +8 -0
- package/dist/overrides/wrappers/cloudflare-node.js +47 -0
- package/dist/overrides/wrappers/dummy.d.ts +3 -3
- package/dist/overrides/wrappers/dummy.js +1 -1
- package/dist/overrides/wrappers/node.d.ts +3 -3
- package/dist/overrides/wrappers/node.js +3 -6
- 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 +9 -2
- 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 +33 -41
- package/dist/types/overrides.d.ts +86 -0
- package/dist/{adapters → utils}/binary.js +1 -0
- package/dist/utils/error.d.ts +1 -0
- package/dist/utils/error.js +8 -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 +3 -3
- 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/wrappers/cloudflare.d.ts +0 -11
- package/dist/overrides/wrappers/cloudflare.js +0 -20
- /package/dist/{overrides/incrementalCache/types.js → types/global.js} +0 -0
- /package/dist/{overrides/queue/types.js → types/overrides.js} +0 -0
- /package/dist/{adapters → utils}/binary.d.ts +0 -0
|
@@ -7,15 +7,13 @@ const getAwsClient = () => {
|
|
|
7
7
|
if (awsClient) {
|
|
8
8
|
return awsClient;
|
|
9
9
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
return awsClient;
|
|
18
|
-
}
|
|
10
|
+
awsClient = new AwsClient({
|
|
11
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
12
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
|
13
|
+
sessionToken: process.env.AWS_SESSION_TOKEN,
|
|
14
|
+
region: process.env.REVALIDATION_QUEUE_REGION,
|
|
15
|
+
});
|
|
16
|
+
return awsClient;
|
|
19
17
|
};
|
|
20
18
|
const awsFetch = (body) => {
|
|
21
19
|
const { REVALIDATION_QUEUE_REGION } = process.env;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { SQSClient, SendMessageCommand } from "@aws-sdk/client-sqs";
|
|
2
2
|
import { awsLogger } from "../../adapters/logger";
|
|
3
3
|
// Expected environment variables
|
|
4
4
|
const { REVALIDATION_QUEUE_REGION, REVALIDATION_QUEUE_URL } = process.env;
|
|
@@ -7,10 +7,10 @@ const DEFAULT_DYNAMO_BATCH_WRITE_COMMAND_CONCURRENCY = 4;
|
|
|
7
7
|
export const getDynamoBatchWriteCommandConcurrency = () => {
|
|
8
8
|
const dynamoBatchWriteCommandConcurrencyFromEnv = process.env.DYNAMO_BATCH_WRITE_COMMAND_CONCURRENCY;
|
|
9
9
|
const parsedDynamoBatchWriteCommandConcurrencyFromEnv = dynamoBatchWriteCommandConcurrencyFromEnv
|
|
10
|
-
? parseInt(dynamoBatchWriteCommandConcurrencyFromEnv)
|
|
10
|
+
? Number.parseInt(dynamoBatchWriteCommandConcurrencyFromEnv)
|
|
11
11
|
: undefined;
|
|
12
12
|
if (parsedDynamoBatchWriteCommandConcurrencyFromEnv &&
|
|
13
|
-
!isNaN(parsedDynamoBatchWriteCommandConcurrencyFromEnv)) {
|
|
13
|
+
!Number.isNaN(parsedDynamoBatchWriteCommandConcurrencyFromEnv)) {
|
|
14
14
|
return parsedDynamoBatchWriteCommandConcurrencyFromEnv;
|
|
15
15
|
}
|
|
16
16
|
return DEFAULT_DYNAMO_BATCH_WRITE_COMMAND_CONCURRENCY;
|
|
@@ -1,27 +1,25 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-non-null-assertion */
|
|
2
|
+
import path from "node:path";
|
|
2
3
|
import { AwsClient } from "aws4fetch";
|
|
3
|
-
import path from "path";
|
|
4
4
|
import { RecoverableError } from "../../utils/error";
|
|
5
5
|
import { customFetchClient } from "../../utils/fetch";
|
|
6
6
|
import { debug, error } from "../../adapters/logger";
|
|
7
7
|
import { chunk, parseNumberFromEnv } from "../../adapters/util";
|
|
8
|
-
import {
|
|
8
|
+
import { MAX_DYNAMO_BATCH_WRITE_ITEM_COUNT, getDynamoBatchWriteCommandConcurrency, } from "./constants";
|
|
9
9
|
let awsClient = null;
|
|
10
10
|
const getAwsClient = () => {
|
|
11
11
|
const { CACHE_BUCKET_REGION } = process.env;
|
|
12
12
|
if (awsClient) {
|
|
13
13
|
return awsClient;
|
|
14
14
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
return awsClient;
|
|
24
|
-
}
|
|
15
|
+
awsClient = new AwsClient({
|
|
16
|
+
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
|
|
17
|
+
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
|
|
18
|
+
sessionToken: process.env.AWS_SESSION_TOKEN,
|
|
19
|
+
region: CACHE_BUCKET_REGION,
|
|
20
|
+
retries: parseNumberFromEnv(process.env.AWS_SDK_S3_MAX_ATTEMPTS),
|
|
21
|
+
});
|
|
22
|
+
return awsClient;
|
|
25
23
|
};
|
|
26
24
|
const awsFetch = (body, type = "query") => {
|
|
27
25
|
const { CACHE_BUCKET_REGION } = process.env;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import path from "node:path";
|
|
1
2
|
import { BatchWriteItemCommand, DynamoDBClient, QueryCommand, } from "@aws-sdk/client-dynamodb";
|
|
2
|
-
import path from "path";
|
|
3
3
|
import { awsLogger, debug, error } from "../../adapters/logger";
|
|
4
4
|
import { chunk, parseNumberFromEnv } from "../../adapters/util";
|
|
5
|
-
import {
|
|
5
|
+
import { MAX_DYNAMO_BATCH_WRITE_ITEM_COUNT, getDynamoBatchWriteCommandConcurrency, } from "./constants";
|
|
6
6
|
const { CACHE_BUCKET_REGION, CACHE_DYNAMO_TABLE, NEXT_BUILD_ID } = process.env;
|
|
7
7
|
function parseDynamoClientConfigFromEnv() {
|
|
8
8
|
return {
|
|
@@ -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;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { WrapperHandler } from "../../types/
|
|
1
|
+
import type { WrapperHandler } from "../../types/overrides";
|
|
2
2
|
declare const _default: {
|
|
3
|
-
wrapper: WrapperHandler
|
|
3
|
+
wrapper: WrapperHandler;
|
|
4
4
|
name: string;
|
|
5
|
-
supportStreaming:
|
|
5
|
+
supportStreaming: true;
|
|
6
6
|
};
|
|
7
7
|
export default _default;
|
|
@@ -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;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import type { WrapperHandler } from "../../types/
|
|
1
|
+
import type { WrapperHandler } from "../../types/overrides";
|
|
2
2
|
declare const _default: {
|
|
3
|
-
wrapper: WrapperHandler
|
|
3
|
+
wrapper: WrapperHandler;
|
|
4
4
|
name: string;
|
|
5
5
|
supportStreaming: boolean;
|
|
6
6
|
};
|
|
@@ -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;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const cfPropNameToHeaderName = {
|
|
2
|
+
city: "x-open-next-city",
|
|
3
|
+
country: "x-open-next-country",
|
|
4
|
+
regionCode: "x-open-next-region",
|
|
5
|
+
latitude: "x-open-next-latitude",
|
|
6
|
+
longitude: "x-open-next-longitude",
|
|
7
|
+
};
|
|
8
|
+
const handler = async (handler, converter) => async (request, env, ctx) => {
|
|
9
|
+
globalThis.process = process;
|
|
10
|
+
globalThis.openNextWaitUntil = ctx.waitUntil.bind(ctx);
|
|
11
|
+
// Set the environment variables
|
|
12
|
+
// Cloudflare suggests to not override the process.env object but instead apply the values to it
|
|
13
|
+
for (const [key, value] of Object.entries(env)) {
|
|
14
|
+
if (typeof value === "string") {
|
|
15
|
+
process.env[key] = value;
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
const internalEvent = await converter.convertFrom(request);
|
|
19
|
+
// Retrieve geo information from the cloudflare request
|
|
20
|
+
// See https://developers.cloudflare.com/workers/runtime-apis/request
|
|
21
|
+
// Note: This code could be moved to a cloudflare specific converter when one is created.
|
|
22
|
+
const cfProperties = request.cf;
|
|
23
|
+
for (const [propName, headerName] of Object.entries(cfPropNameToHeaderName)) {
|
|
24
|
+
const propValue = cfProperties?.[propName];
|
|
25
|
+
if (propValue != null) {
|
|
26
|
+
internalEvent.headers[headerName] = propValue;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
const response = await handler(internalEvent);
|
|
30
|
+
const result = await converter.convertTo(response);
|
|
31
|
+
return result;
|
|
32
|
+
};
|
|
33
|
+
export default {
|
|
34
|
+
wrapper: handler,
|
|
35
|
+
name: "cloudflare-edge",
|
|
36
|
+
supportStreaming: true,
|
|
37
|
+
edgeRuntime: true,
|
|
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,47 @@
|
|
|
1
|
+
import { Writable } from "node:stream";
|
|
2
|
+
const handler = async (handler, converter) => async (request, env, ctx) => {
|
|
3
|
+
globalThis.process = process;
|
|
4
|
+
globalThis.openNextWaitUntil = ctx.waitUntil.bind(ctx);
|
|
5
|
+
// Set the environment variables
|
|
6
|
+
// Cloudflare suggests to not override the process.env object but instead apply the values to it
|
|
7
|
+
for (const [key, value] of Object.entries(env)) {
|
|
8
|
+
if (typeof value === "string") {
|
|
9
|
+
process.env[key] = value;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
const internalEvent = await converter.convertFrom(request);
|
|
13
|
+
// TODO:
|
|
14
|
+
// The edge converter populate event.url with the url including the origin.
|
|
15
|
+
// This is required for middleware to keep track of the protocol (i.e. http with wrangler dev).
|
|
16
|
+
// However the server expects that the origin is not included.
|
|
17
|
+
const url = new URL(internalEvent.url);
|
|
18
|
+
internalEvent.url = url.href.slice(url.origin.length);
|
|
19
|
+
const { promise: promiseResponse, resolve: resolveResponse } = Promise.withResolvers();
|
|
20
|
+
const streamCreator = {
|
|
21
|
+
writeHeaders(prelude) {
|
|
22
|
+
const { statusCode, cookies, headers } = prelude;
|
|
23
|
+
const responseHeaders = new Headers(headers);
|
|
24
|
+
for (const cookie of cookies) {
|
|
25
|
+
responseHeaders.append("Set-Cookie", cookie);
|
|
26
|
+
}
|
|
27
|
+
const { readable, writable } = new TransformStream({
|
|
28
|
+
transform(chunk, controller) {
|
|
29
|
+
controller.enqueue(Uint8Array.from(chunk.chunk ?? chunk));
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
const response = new Response(readable, {
|
|
33
|
+
status: statusCode,
|
|
34
|
+
headers: responseHeaders,
|
|
35
|
+
});
|
|
36
|
+
resolveResponse(response);
|
|
37
|
+
return Writable.fromWeb(writable);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
ctx.waitUntil(handler(internalEvent, streamCreator));
|
|
41
|
+
return promiseResponse;
|
|
42
|
+
};
|
|
43
|
+
export default {
|
|
44
|
+
wrapper: handler,
|
|
45
|
+
name: "cloudflare-node",
|
|
46
|
+
supportStreaming: true,
|
|
47
|
+
};
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { WrapperHandler } from "../../types/
|
|
1
|
+
import type { WrapperHandler } from "../../types/overrides";
|
|
2
2
|
declare const _default: {
|
|
3
3
|
name: string;
|
|
4
|
-
|
|
5
|
-
supportStreaming:
|
|
4
|
+
wrapper: WrapperHandler;
|
|
5
|
+
supportStreaming: false;
|
|
6
6
|
};
|
|
7
7
|
export default _default;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { WrapperHandler } from "../../types/
|
|
1
|
+
import type { WrapperHandler } from "../../types/overrides";
|
|
2
2
|
declare const _default: {
|
|
3
|
-
wrapper: WrapperHandler
|
|
3
|
+
wrapper: WrapperHandler;
|
|
4
4
|
name: string;
|
|
5
|
-
supportStreaming:
|
|
5
|
+
supportStreaming: true;
|
|
6
6
|
};
|
|
7
7
|
export default _default;
|
|
@@ -11,9 +11,6 @@ const wrapper = async (handler, converter) => {
|
|
|
11
11
|
res.uncork();
|
|
12
12
|
return res;
|
|
13
13
|
},
|
|
14
|
-
onFinish: () => {
|
|
15
|
-
// Is it necessary to do something here?
|
|
16
|
-
},
|
|
17
14
|
};
|
|
18
15
|
if (internalEvent.rawPath === "/__health") {
|
|
19
16
|
res.writeHead(200, {
|
|
@@ -28,9 +25,9 @@ const wrapper = async (handler, converter) => {
|
|
|
28
25
|
await new Promise((resolve) => {
|
|
29
26
|
server.on("listening", () => {
|
|
30
27
|
const cleanup = (code) => {
|
|
31
|
-
debug(
|
|
28
|
+
debug("Closing server");
|
|
32
29
|
server.close(() => {
|
|
33
|
-
debug(
|
|
30
|
+
debug("Server closed");
|
|
34
31
|
process.exit(code);
|
|
35
32
|
});
|
|
36
33
|
};
|
|
@@ -41,7 +38,7 @@ const wrapper = async (handler, converter) => {
|
|
|
41
38
|
process.on("SIGTERM", () => cleanup(0));
|
|
42
39
|
resolve();
|
|
43
40
|
});
|
|
44
|
-
server.listen(parseInt(process.env.PORT ?? "3000", 10));
|
|
41
|
+
server.listen(Number.parseInt(process.env.PORT ?? "3000", 10));
|
|
45
42
|
});
|
|
46
43
|
server.on("error", (err) => {
|
|
47
44
|
error(err);
|
package/dist/plugins/edge.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import chalk from "chalk";
|
|
3
4
|
import { loadAppPathsManifestKeys, loadBuildId, loadConfig, loadConfigHeaders, loadHtmlPages, loadMiddlewareManifest, loadPrerenderManifest, loadRoutesManifest, } from "../adapters/config/util.js";
|
|
5
|
+
import logger from "../logger.js";
|
|
4
6
|
/**
|
|
5
7
|
* @param opts.nextDir - The path to the .next directory
|
|
6
8
|
* @param opts.edgeFunctionHandlerPath - The path to the edgeFunctionHandler.js file that we'll use to bundle the routing
|
|
@@ -23,6 +25,7 @@ export function openNextEdgePlugins({ nextDir, edgeFunctionHandlerPath, middlewa
|
|
|
23
25
|
return {
|
|
24
26
|
name: "opennext-edge",
|
|
25
27
|
setup(build) {
|
|
28
|
+
logger.debug(chalk.blue("OpenNext Edge plugin"));
|
|
26
29
|
if (edgeFunctionHandlerPath) {
|
|
27
30
|
// If we bundle the routing, we need to resolve the middleware
|
|
28
31
|
build.onResolve({ filter: /\.\/middleware.mjs/g }, () => {
|
|
@@ -60,7 +63,7 @@ globalThis.self = globalThis;
|
|
|
60
63
|
globalThis._ROUTES = ${JSON.stringify(routes)};
|
|
61
64
|
|
|
62
65
|
${isInCloudfare
|
|
63
|
-
?
|
|
66
|
+
? ""
|
|
64
67
|
: `
|
|
65
68
|
import {readFileSync} from "node:fs";
|
|
66
69
|
import path from "node:path";
|
|
@@ -124,13 +127,11 @@ ${contents}
|
|
|
124
127
|
const AppPathsManifestKeys = loadAppPathsManifestKeys(nextDir);
|
|
125
128
|
const MiddlewareManifest = loadMiddlewareManifest(nextDir);
|
|
126
129
|
const contents = `
|
|
127
|
-
import path from "path";
|
|
130
|
+
import path from "node:path";
|
|
128
131
|
|
|
129
132
|
import { debug } from "../logger";
|
|
130
133
|
|
|
131
|
-
|
|
132
|
-
globalThis.__dirname = ""
|
|
133
|
-
}
|
|
134
|
+
globalThis.__dirname ??= "";
|
|
134
135
|
|
|
135
136
|
export const NEXT_DIR = path.join(__dirname, ".next");
|
|
136
137
|
export const OPEN_NEXT_DIR = path.join(__dirname, ".open-next");
|
|
@@ -46,7 +46,7 @@ export function openNextReplacementPlugin({ target, replacements, deletes, name,
|
|
|
46
46
|
await Promise.all([
|
|
47
47
|
...(deletes ?? []).map(async (id) => {
|
|
48
48
|
const pattern = new RegExp(`\/\/#override (${id})\n([\\s\\S]*?)\/\/#endOverride`);
|
|
49
|
-
logger.debug(chalk.blue(`
|
|
49
|
+
logger.debug(chalk.blue(`OpenNext Replacement plugin ${name}`), `Delete override ${id}`);
|
|
50
50
|
contents = contents.replace(pattern, "");
|
|
51
51
|
}),
|
|
52
52
|
...(replacements ?? []).map(async (filename) => {
|
|
@@ -59,7 +59,7 @@ export function openNextReplacementPlugin({ target, replacements, deletes, name,
|
|
|
59
59
|
const replacement = match[2];
|
|
60
60
|
const id = match[1];
|
|
61
61
|
const pattern = new RegExp(`\/\/#override (${id})\n([\\s\\S]*?)\/\/#endOverride`, "g");
|
|
62
|
-
logger.debug(chalk.blue(`Open-next replacement plugin ${name}`),
|
|
62
|
+
logger.debug(chalk.blue(`Open-next replacement plugin ${name}`), `Apply override ${id} from ${filename}`);
|
|
63
63
|
contents = contents.replace(pattern, replacement);
|
|
64
64
|
}
|
|
65
65
|
}),
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Plugin } from "esbuild";
|
|
2
|
-
import type { DefaultOverrideOptions,
|
|
2
|
+
import type { DefaultOverrideOptions, IncludedImageLoader, IncludedOriginResolver, IncludedWarmer, LazyLoadedOverride, OverrideOptions } from "../types/open-next";
|
|
3
|
+
import type { ImageLoader, OriginResolver, Warmer } from "../types/overrides";
|
|
3
4
|
export interface IPluginSettings {
|
|
4
5
|
overrides?: {
|
|
5
6
|
wrapper?: DefaultOverrideOptions<any, any>["wrapper"];
|
|
@@ -10,6 +11,7 @@ export interface IPluginSettings {
|
|
|
10
11
|
imageLoader?: LazyLoadedOverride<ImageLoader> | IncludedImageLoader;
|
|
11
12
|
originResolver?: LazyLoadedOverride<OriginResolver> | IncludedOriginResolver;
|
|
12
13
|
warmer?: LazyLoadedOverride<Warmer> | IncludedWarmer;
|
|
14
|
+
proxyExternalRequest?: OverrideOptions["proxyExternalRequest"];
|
|
13
15
|
};
|
|
14
16
|
fnName?: string;
|
|
15
17
|
}
|
package/dist/plugins/resolve.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { readFileSync } from "node:fs";
|
|
2
|
+
import chalk from "chalk";
|
|
2
3
|
import logger from "../logger.js";
|
|
3
4
|
function getOverrideOrDummy(override) {
|
|
4
5
|
if (typeof override === "string") {
|
|
@@ -17,6 +18,7 @@ const nameToFolder = {
|
|
|
17
18
|
imageLoader: "imageLoader",
|
|
18
19
|
originResolver: "originResolver",
|
|
19
20
|
warmer: "warmer",
|
|
21
|
+
proxyExternalRequest: "proxyExternalRequest",
|
|
20
22
|
};
|
|
21
23
|
const defaultOverrides = {
|
|
22
24
|
wrapper: "aws-lambda",
|
|
@@ -27,6 +29,7 @@ const defaultOverrides = {
|
|
|
27
29
|
imageLoader: "s3",
|
|
28
30
|
originResolver: "pattern-env",
|
|
29
31
|
warmer: "aws-lambda",
|
|
32
|
+
proxyExternalRequest: "node",
|
|
30
33
|
};
|
|
31
34
|
/**
|
|
32
35
|
* @param opts.overrides - The name of the overrides to use
|
|
@@ -36,14 +39,18 @@ export function openNextResolvePlugin({ overrides, fnName, }) {
|
|
|
36
39
|
return {
|
|
37
40
|
name: "opennext-resolve",
|
|
38
41
|
setup(build) {
|
|
39
|
-
logger.debug(
|
|
42
|
+
logger.debug(chalk.blue("OpenNext Resolve plugin"), fnName ? `for ${fnName}` : "");
|
|
40
43
|
build.onLoad({ filter: /core(\/|\\)resolve\.js/g }, async (args) => {
|
|
41
44
|
let contents = readFileSync(args.path, "utf-8");
|
|
42
45
|
const overridesEntries = Object.entries(overrides ?? {});
|
|
43
|
-
for (
|
|
46
|
+
for (let [overrideName, overrideValue] of overridesEntries) {
|
|
44
47
|
if (!overrideValue) {
|
|
45
48
|
continue;
|
|
46
49
|
}
|
|
50
|
+
if (overrideName === "wrapper" && overrideValue === "cloudflare") {
|
|
51
|
+
// "cloudflare" is deprecated and replaced by "cloudflare-edge".
|
|
52
|
+
overrideValue = "cloudflare-edge";
|
|
53
|
+
}
|
|
47
54
|
const folder = nameToFolder[overrideName];
|
|
48
55
|
const defaultOverride = defaultOverrides[overrideName];
|
|
49
56
|
contents = contents.replace(`../overrides/${folder}/${defaultOverride}.js`, `../overrides/${folder}/${getOverrideOrDummy(overrideValue)}.js`);
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
/// <reference types="node" />
|
|
1
|
+
import type { Writable } from "node:stream";
|
|
4
2
|
import type { APIGatewayProxyEventV2, Context } from "aws-lambda";
|
|
5
|
-
import type { Writable } from "stream";
|
|
6
3
|
export interface ResponseStream extends Writable {
|
|
7
4
|
getBufferedData(): Buffer;
|
|
8
5
|
setContentType(contentType: string): void;
|
|
@@ -15,7 +12,7 @@ interface Metadata {
|
|
|
15
12
|
declare global {
|
|
16
13
|
namespace awslambda {
|
|
17
14
|
function streamifyResponse(handler: Handler): Handler;
|
|
18
|
-
|
|
15
|
+
namespace HttpResponseStream {
|
|
19
16
|
function from(res: Writable, metadata: Metadata): ResponseStream;
|
|
20
17
|
}
|
|
21
18
|
}
|