cdk-nextjs 0.3.10 → 0.4.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/.jsii +1316 -781
- package/API.md +1067 -532
- package/README.md +4 -5
- package/assets/lambdas/assets-deployment/assets-deployment.lambda/assets-deployment.Dockerfile +12 -8
- package/assets/lambdas/assets-deployment/assets-deployment.lambda/index.js +68 -57
- package/assets/lambdas/post-deploy/post-deploy.lambda/index.js +246 -0
- package/docs/breaking-changes.md +9 -0
- package/docs/notes.md +170 -20
- package/examples/README.md +2 -2
- package/lib/constants.d.ts +32 -0
- package/lib/constants.js +38 -0
- package/lib/generated-structs/OptionalCustomResourceProps.d.ts +104 -0
- package/lib/generated-structs/OptionalCustomResourceProps.js +3 -0
- package/lib/generated-structs/OptionalDockerImageAssetProps.d.ts +21 -0
- package/lib/generated-structs/OptionalDockerImageAssetProps.js +1 -1
- package/lib/generated-structs/OptionalNextjsAssetsDeploymentProps.d.ts +9 -3
- package/lib/generated-structs/OptionalNextjsAssetsDeploymentProps.js +1 -1
- package/lib/generated-structs/OptionalNextjsBuildProps.d.ts +1 -1
- package/lib/generated-structs/OptionalNextjsBuildProps.js +1 -1
- package/lib/generated-structs/OptionalNextjsContainersProps.d.ts +3 -3
- package/lib/generated-structs/OptionalNextjsContainersProps.js +1 -1
- package/lib/generated-structs/OptionalNextjsPostDeployProps.d.ts +42 -0
- package/lib/generated-structs/OptionalNextjsPostDeployProps.js +3 -0
- package/lib/generated-structs/OptionalPostDeployCustomResourceProperties.d.ts +41 -0
- package/lib/generated-structs/OptionalPostDeployCustomResourceProperties.js +4 -0
- package/lib/index.d.ts +6 -5
- package/lib/index.js +6 -8
- package/lib/lambdas/assets-deployment/assets-deployment.lambda.js +5 -23
- package/lib/lambdas/assets-deployment/fs-to-fs.js +18 -3
- package/lib/lambdas/assets-deployment/fs-to-s3.d.ts +8 -2
- package/lib/lambdas/assets-deployment/fs-to-s3.js +15 -9
- package/lib/lambdas/post-deploy/create-invalidation.d.ts +2 -0
- package/lib/lambdas/post-deploy/create-invalidation.js +19 -0
- package/lib/lambdas/post-deploy/post-deploy-function.d.ts +13 -0
- package/lib/lambdas/post-deploy/post-deploy-function.js +22 -0
- package/lib/lambdas/post-deploy/post-deploy.lambda.d.ts +9 -0
- package/lib/lambdas/post-deploy/post-deploy.lambda.js +56 -0
- package/lib/lambdas/post-deploy/prune-fs.d.ts +10 -0
- package/lib/lambdas/post-deploy/prune-fs.js +33 -0
- package/lib/lambdas/post-deploy/prune-s3.d.ts +15 -0
- package/lib/lambdas/post-deploy/prune-s3.js +101 -0
- package/lib/lambdas/utils.js +35 -0
- package/lib/nextjs-assets-deployment.d.ts +20 -51
- package/lib/nextjs-assets-deployment.js +32 -26
- package/lib/nextjs-build/builder.Dockerfile +12 -8
- package/lib/nextjs-build/cdk-nextjs-cache-handler.cjs +63 -0
- package/lib/nextjs-build/cdk-nextjs-cache-handler.d.ts +21 -0
- package/lib/nextjs-build/cdk-nextjs-cache-handler.js +49 -0
- package/lib/nextjs-build/global-containers.Dockerfile +29 -19
- package/lib/nextjs-build/global-functions.Dockerfile +30 -24
- package/lib/nextjs-build/nextjs-build.d.ts +51 -26
- package/lib/nextjs-build/nextjs-build.js +108 -88
- package/lib/nextjs-build/regional-containers.Dockerfile +30 -20
- package/lib/nextjs-compute/nextjs-compute-base-props.d.ts +0 -1
- package/lib/nextjs-compute/nextjs-compute-base-props.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.d.ts +2 -1
- package/lib/nextjs-compute/nextjs-containers.js +7 -5
- package/lib/nextjs-compute/nextjs-functions.d.ts +1 -0
- package/lib/nextjs-compute/nextjs-functions.js +8 -11
- package/lib/nextjs-distribution.d.ts +1 -1
- package/lib/nextjs-distribution.js +5 -8
- package/lib/nextjs-file-system.js +1 -1
- package/lib/nextjs-post-deploy.d.ts +101 -0
- package/lib/nextjs-post-deploy.js +78 -0
- package/lib/nextjs-static-assets.js +1 -1
- package/lib/nextjs-vpc.d.ts +1 -1
- package/lib/nextjs-vpc.js +4 -4
- package/lib/root-constructs/nextjs-base-overrides.d.ts +4 -0
- package/lib/root-constructs/nextjs-base-overrides.js +1 -1
- package/lib/root-constructs/nextjs-base-props.d.ts +15 -7
- package/lib/root-constructs/nextjs-base-props.js +1 -1
- package/lib/root-constructs/nextjs-global-containers.d.ts +8 -8
- package/lib/root-constructs/nextjs-global-containers.js +26 -15
- package/lib/root-constructs/nextjs-global-functions.d.ts +8 -11
- package/lib/root-constructs/nextjs-global-functions.js +26 -25
- package/lib/root-constructs/nextjs-regional-containers.d.ts +8 -0
- package/lib/root-constructs/nextjs-regional-containers.js +26 -9
- package/lib/utils/get-architecture.d.ts +2 -0
- package/lib/utils/get-architecture.js +8 -0
- package/lib/utils/handle-deprecated-properties.d.ts +7 -0
- package/lib/utils/handle-deprecated-properties.js +14 -0
- package/package.json +17 -19
- package/assets/lambdas/revalidate/revalidate.lambda/index.js +0 -67
- package/lib/common.d.ts +0 -25
- package/lib/common.js +0 -30
- package/lib/generated-structs/OptionalNextjsInvalidationProps.d.ts +0 -11
- package/lib/generated-structs/OptionalNextjsInvalidationProps.js +0 -3
- package/lib/lambdas/assets-deployment/prune-s3.d.ts +0 -15
- package/lib/lambdas/assets-deployment/prune-s3.js +0 -42
- package/lib/lambdas/assets-deployment/s3.d.ts +0 -2
- package/lib/lambdas/assets-deployment/s3.js +0 -7
- package/lib/lambdas/assets-deployment/utils.js +0 -35
- package/lib/lambdas/revalidate/revalidate-function.d.ts +0 -13
- package/lib/lambdas/revalidate/revalidate-function.js +0 -22
- package/lib/lambdas/revalidate/revalidate.lambda.d.ts +0 -2
- package/lib/lambdas/revalidate/revalidate.lambda.js +0 -53
- package/lib/nextjs-build/add-cache-handler.d.ts +0 -1
- package/lib/nextjs-build/add-cache-handler.js +0 -23
- package/lib/nextjs-build/add-cache-handler.mjs +0 -18
- package/lib/nextjs-build/cache-handler.cjs +0 -21878
- package/lib/nextjs-build/cache-handler.d.ts +0 -6
- package/lib/nextjs-build/cache-handler.js +0 -26
- package/lib/nextjs-invalidation.d.ts +0 -19
- package/lib/nextjs-invalidation.js +0 -52
- package/lib/nextjs-revalidation.d.ts +0 -30
- package/lib/nextjs-revalidation.js +0 -65
- /package/lib/lambdas/{assets-deployment/utils.d.ts → utils.d.ts} +0 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
interface PruneS3Props {
|
|
2
|
+
bucketName: string;
|
|
3
|
+
currentBuildId: string;
|
|
4
|
+
/**
|
|
5
|
+
* Time to live in milliseconds.
|
|
6
|
+
*/
|
|
7
|
+
msTtl: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Given `bucketName`, `currentBuildId`, and `msTtl`, list all objects
|
|
11
|
+
* in the bucket and delete any that 1/ do not have a metadata key of "next-build-id"
|
|
12
|
+
* and value of `currentBuildId` and 2/ were created more than `msTtl` ago
|
|
13
|
+
*/
|
|
14
|
+
export declare function pruneS3(props: PruneS3Props): Promise<void>;
|
|
15
|
+
export {};
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pruneS3 = pruneS3;
|
|
4
|
+
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
5
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
const s3Client = new client_s3_1.S3Client();
|
|
8
|
+
// Maximum number of concurrent operations
|
|
9
|
+
const MAX_CONCURRENT_OPERATIONS = 50;
|
|
10
|
+
/**
|
|
11
|
+
* Given `bucketName`, `currentBuildId`, and `msTtl`, list all objects
|
|
12
|
+
* in the bucket and delete any that 1/ do not have a metadata key of "next-build-id"
|
|
13
|
+
* and value of `currentBuildId` and 2/ were created more than `msTtl` ago
|
|
14
|
+
*/
|
|
15
|
+
async function pruneS3(props) {
|
|
16
|
+
const { bucketName, currentBuildId, msTtl } = props;
|
|
17
|
+
const cutoffDate = new Date(Date.now() - msTtl);
|
|
18
|
+
const objectsToDelete = [];
|
|
19
|
+
let continuationToken = undefined;
|
|
20
|
+
let listObjectsCount = 0;
|
|
21
|
+
do {
|
|
22
|
+
// List objects in the bucket
|
|
23
|
+
const listObjectsV2Input = {
|
|
24
|
+
Bucket: bucketName,
|
|
25
|
+
ContinuationToken: continuationToken,
|
|
26
|
+
};
|
|
27
|
+
const listResponse = await s3Client.send(new client_s3_1.ListObjectsV2Command(listObjectsV2Input));
|
|
28
|
+
if (!listResponse.Contents || listResponse.Contents.length === 0) {
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
// Filter out objects without keys
|
|
32
|
+
const oldObjects = listResponse.Contents.filter((obj) => {
|
|
33
|
+
const lastModified = obj.LastModified || new Date();
|
|
34
|
+
return obj.Key && lastModified < cutoffDate;
|
|
35
|
+
});
|
|
36
|
+
(0, utils_1.debug)(`Checking old objects metadata to determine pruning: ${oldObjects.map((o) => o.Key)}`);
|
|
37
|
+
// Process objects in parallel with controlled concurrency
|
|
38
|
+
const checkResults = await processBatch(oldObjects, MAX_CONCURRENT_OPERATIONS, async (object) => {
|
|
39
|
+
if (!object.Key)
|
|
40
|
+
return null;
|
|
41
|
+
try {
|
|
42
|
+
const headResponse = await s3Client.send(new client_s3_1.HeadObjectCommand({
|
|
43
|
+
Bucket: bucketName,
|
|
44
|
+
Key: object.Key,
|
|
45
|
+
}));
|
|
46
|
+
const objectBuildId = headResponse.Metadata?.["next-build-id"];
|
|
47
|
+
// Return the key if it should be deleted
|
|
48
|
+
if (objectBuildId !== currentBuildId) {
|
|
49
|
+
return { Key: object.Key };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error(`Error checking object ${object.Key}:`, error);
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
});
|
|
57
|
+
// Add valid objects to delete list
|
|
58
|
+
objectsToDelete.push(...checkResults.filter(Boolean));
|
|
59
|
+
if (listResponse.NextContinuationToken) {
|
|
60
|
+
continuationToken = listResponse.NextContinuationToken;
|
|
61
|
+
}
|
|
62
|
+
listObjectsCount++;
|
|
63
|
+
// assume less than 100K objects (100 * 1K objects per ListObjectsV2Command = 100K)
|
|
64
|
+
} while (continuationToken && listObjectsCount <= 100);
|
|
65
|
+
// Delete objects in parallel batches (respecting S3's 1000 objects per request limit)
|
|
66
|
+
if (objectsToDelete.length > 0) {
|
|
67
|
+
const deleteBatches = [];
|
|
68
|
+
for (let i = 0; i < objectsToDelete.length; i += 1000) {
|
|
69
|
+
const batch = objectsToDelete.slice(i, i + 1000);
|
|
70
|
+
deleteBatches.push(batch);
|
|
71
|
+
}
|
|
72
|
+
await processBatch(deleteBatches, 5, // Process up to 5 delete batches in parallel
|
|
73
|
+
async (batch) => {
|
|
74
|
+
try {
|
|
75
|
+
(0, utils_1.debug)(`Deleting objects: ${batch.map((b) => b.Key)} from ${bucketName}`);
|
|
76
|
+
await s3Client.send(new client_s3_1.DeleteObjectsCommand({
|
|
77
|
+
Bucket: bucketName,
|
|
78
|
+
Delete: { Objects: batch },
|
|
79
|
+
}));
|
|
80
|
+
(0, utils_1.debug)(`Deleted ${batch.length} objects from ${bucketName}`);
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.error("Error deleting objects:", error);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
(0, utils_1.debug)(`Pruning complete. Deleted ${objectsToDelete.length} objects from ${bucketName}`);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Process objects in batches to avoid overwhelming the system
|
|
91
|
+
*/
|
|
92
|
+
async function processBatch(items, batchSize, processFn) {
|
|
93
|
+
const results = [];
|
|
94
|
+
for (let i = 0; i < items.length; i += batchSize) {
|
|
95
|
+
const batch = items.slice(i, i + batchSize);
|
|
96
|
+
const batchResults = await Promise.all(batch.map(processFn));
|
|
97
|
+
results.push(...batchResults);
|
|
98
|
+
}
|
|
99
|
+
return results;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJ1bmUtczMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGFtYmRhcy9wb3N0LWRlcGxveS9wcnVuZS1zMy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQTRCQSwwQkEyR0M7QUF2SUQsNkRBQTZEO0FBQzdELGtEQU00QjtBQUM1QixvQ0FBaUM7QUFFakMsTUFBTSxRQUFRLEdBQUcsSUFBSSxvQkFBUSxFQUFFLENBQUM7QUFDaEMsMENBQTBDO0FBQzFDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxDQUFDO0FBV3JDOzs7O0dBSUc7QUFDSSxLQUFLLFVBQVUsT0FBTyxDQUFDLEtBQW1CO0lBQy9DLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBRSxHQUFHLEtBQUssQ0FBQztJQUVwRCxNQUFNLFVBQVUsR0FBRyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7SUFDaEQsTUFBTSxlQUFlLEdBQXNCLEVBQUUsQ0FBQztJQUU5QyxJQUFJLGlCQUFpQixHQUF1QixTQUFTLENBQUM7SUFDdEQsSUFBSSxnQkFBZ0IsR0FBRyxDQUFDLENBQUM7SUFFekIsR0FBRyxDQUFDO1FBQ0YsNkJBQTZCO1FBQzdCLE1BQU0sa0JBQWtCLEdBQThCO1lBQ3BELE1BQU0sRUFBRSxVQUFVO1lBQ2xCLGlCQUFpQixFQUFFLGlCQUFpQjtTQUNyQyxDQUFDO1FBQ0YsTUFBTSxZQUFZLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUN0QyxJQUFJLGdDQUFvQixDQUFDLGtCQUFrQixDQUFDLENBQzdDLENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNqRSxNQUFNO1FBQ1IsQ0FBQztRQUVELGtDQUFrQztRQUNsQyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsUUFBUSxD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QUssRUFBRTtpQkFDM0IsQ0FBQyxDQUNILENBQUM7Z0JBQ0YsSUFBQSxhQUFLLEVBQUMsV0FBVyxLQUFLLENBQUMsTUFBTSxpQkFBaUIsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUM5RCxDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ2xELENBQUM7UUFDSCxDQUFDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRCxJQUFBLGFBQUssRUFDSCw2QkFBNkIsZUFBZSxDQUFDLE1BQU0saUJBQWlCLFVBQVUsRUFBRSxDQUNqRixDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsS0FBSyxVQUFVLFlBQVksQ0FDekIsS0FBVSxFQUNWLFNBQWlCLEVBQ2pCLFNBQWtDO0lBRWxDLE1BQU0sT0FBTyxHQUFRLEVBQUUsQ0FBQztJQUV4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksU0FBUyxFQUFFLENBQUM7UUFDakQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDO1FBQzVDLE1BQU0sWUFBWSxHQUFHLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxPQUFPLE9BQU8sQ0FBQztBQUNqQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llc1xuaW1wb3J0IHtcbiAgUzNDbGllbnQsXG4gIExpc3RPYmplY3RzVjJDb21tYW5kLFxuICBEZWxldGVPYmplY3RzQ29tbWFuZCxcbiAgSGVhZE9iamVjdENvbW1hbmQsXG4gIExpc3RPYmplY3RzVjJDb21tYW5kSW5wdXQsXG59IGZyb20gXCJAYXdzLXNkay9jbGllbnQtczNcIjtcbmltcG9ydCB7IGRlYnVnIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IHMzQ2xpZW50ID0gbmV3IFMzQ2xpZW50KCk7XG4vLyBNYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IG9wZXJhdGlvbnNcbmNvbnN0IE1BWF9DT05DVVJSRU5UX09QRVJBVElPTlMgPSA1MDtcblxuaW50ZXJmYWNlIFBydW5lUzNQcm9wcyB7XG4gIGJ1Y2tldE5hbWU6IHN0cmluZztcbiAgY3VycmVudEJ1aWxkSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRpbWUgdG8gbGl2ZSBpbiBtaWxsaXNlY29uZHMuXG4gICAqL1xuICBtc1R0bDogbnVtYmVyO1xufVxuXG4vKipcbiAqIEdpdmVuIGBidWNrZXROYW1lYCwgYGN1cnJlbnRCdWlsZElkYCwgYW5kIGBtc1R0bGAsIGxpc3QgYWxsIG9iamVjdHNcbiAqIGluIHRoZSBidWNrZXQgYW5kIGRlbGV0ZSBhbnkgdGhhdCAxLyBkbyBub3QgaGF2ZSBhIG1ldGFkYXRhIGtleSBvZiBcIm5leHQtYnVpbGQtaWRcIlxuICogYW5kIHZhbHVlIG9mIGBjdXJyZW50QnVpbGRJZGAgYW5kIDIvIHdlcmUgY3JlYXRlZCBtb3JlIHRoYW4gYG1zVHRsYCBhZ29cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBydW5lUzMocHJvcHM6IFBydW5lUzNQcm9wcykge1xuICBjb25zdCB7IGJ1Y2tldE5hbWUsIGN1cnJlbnRCdWlsZElkLCBtc1R0bCB9ID0gcHJvcHM7XG5cbiAgY29uc3QgY3V0b2ZmRGF0ZSA9IG5ldyBEYXRlKERhdGUubm93KCkgLSBtc1R0bCk7XG4gIGNvbnN0IG9iamVjdHNUb0RlbGV0ZTogeyBLZXk6IHN0cmluZyB9W10gPSBbXTtcblxuICBsZXQgY29udGludWF0aW9uVG9rZW46IHN0cmluZyB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgbGV0IGxpc3RPYmplY3RzQ291bnQgPSAwO1xuXG4gIGRvIHtcbiAgICAvLyBMaXN0IG9iamVjdHMgaW4gdGhlIGJ1Y2tldFxuICAgIGNvbnN0IGxpc3RPYmplY3RzVjJJbnB1dDogTGlzdE9iamVjdHNWMkNvbW1hbmRJbnB1dCA9IHtcbiAgICAgIEJ1Y2tldDogYnVja2V0TmFtZSxcbiAgICAgIENvbnRpbnVhdGlvblRva2VuOiBjb250aW51YXRpb25Ub2tlbixcbiAgICB9O1xuICAgIGNvbnN0IGxpc3RSZXNwb25zZSA9IGF3YWl0IHMzQ2xpZW50LnNlbmQoXG4gICAgICBuZXcgTGlzdE9iamVjdHNWMkNvbW1hbmQobGlzdE9iamVjdHNWMklucHV0KSxcbiAgICApO1xuXG4gICAgaWYgKCFsaXN0UmVzcG9uc2UuQ29udGVudHMgfHwgbGlzdFJlc3BvbnNlLkNvbnRlbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gRmlsdGVyIG91dCBvYmplY3RzIHdpdGhvdXQga2V5c1xuICAgIGNvbnN0IG9sZE9iamVjdHMgPSBsaXN0UmVzcG9uc2UuQ29udGVudHMuZmlsdGVyKChvYmopID0+IHtcbiAgICAgIGNvbnN0IGxhc3RNb2RpZmllZCA9IG9iai5MYXN0TW9kaWZpZWQgfHwgbmV3IERhdGUoKTtcbiAgICAgIHJldHVybiBvYmouS2V5ICYmIGxhc3RNb2RpZmllZCA8IGN1dG9mZkRhdGU7XG4gICAgfSk7XG4gICAgZGVidWcoXG4gICAgICBgQ2hlY2tpbmcgb2xkIG9iamVjdHMgbWV0YWRhdGEgdG8gZGV0ZXJtaW5lIHBydW5pbmc6ICR7b2xkT2JqZWN0cy5tYXAoKG8pID0+IG8uS2V5KX1gLFxuICAgICk7XG5cbiAgICAvLyBQcm9jZXNzIG9iamVjdHMgaW4gcGFyYWxsZWwgd2l0aCBjb250cm9sbGVkIGNvbmN1cnJlbmN5XG4gICAgY29uc3QgY2hlY2tSZXN1bHRzID0gYXdhaXQgcHJvY2Vzc0JhdGNoKFxuICAgICAgb2xkT2JqZWN0cyxcbiAgICAgIE1BWF9DT05DVVJSRU5UX09QRVJBVElPTlMsXG4gICAgICBhc3luYyAob2JqZWN0KSA9PiB7XG4gICAgICAgIGlmICghb2JqZWN0LktleSkgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBoZWFkUmVzcG9uc2UgPSBhd2FpdCBzM0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IEhlYWRPYmplY3RDb21tYW5kKHtcbiAgICAgICAgICAgICAgQnVja2V0OiBidWNrZXROYW1lLFxuICAgICAgICAgICAgICBLZXk6IG9iamVjdC5LZXksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgY29uc3Qgb2JqZWN0QnVpbGRJZCA9IGhlYWRSZXNwb25zZS5NZXRhZGF0YT8uW1wibmV4dC1idWlsZC1pZFwiXTtcblxuICAgICAgICAgIC8vIFJldHVybiB0aGUga2V5IGlmIGl0IHNob3VsZCBiZSBkZWxldGVkXG4gICAgICAgICAgaWYgKG9iamVjdEJ1aWxkSWQgIT09IGN1cnJlbnRCdWlsZElkKSB7XG4gICAgICAgICAgICByZXR1cm4geyBLZXk6IG9iamVjdC5LZXkgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgY2hlY2tpbmcgb2JqZWN0ICR7b2JqZWN0LktleX06YCwgZXJyb3IpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9LFxuICAgICk7XG5cbiAgICAvLyBBZGQgdmFsaWQgb2JqZWN0cyB0byBkZWxldGUgbGlzdFxuICAgIG9iamVjdHNUb0RlbGV0ZS5wdXNoKFxuICAgICAgLi4uKGNoZWNrUmVzdWx0cy5maWx0ZXIoQm9vbGVhbikgYXMgeyBLZXk6IHN0cmluZyB9W10pLFxuICAgICk7XG5cbiAgICBpZiAobGlzdFJlc3BvbnNlLk5leHRDb250aW51YXRpb25Ub2tlbikge1xuICAgICAgY29udGludWF0aW9uVG9rZW4gPSBsaXN0UmVzcG9uc2UuTmV4dENvbnRpbnVhdGlvblRva2VuO1xuICAgIH1cbiAgICBsaXN0T2JqZWN0c0NvdW50Kys7XG4gICAgLy8gYXNzdW1lIGxlc3MgdGhhbiAxMDBLIG9iamVjdHMgKDEwMCAqIDFLIG9iamVjdHMgcGVyIExpc3RPYmplY3RzVjJDb21tYW5kID0gMTAwSylcbiAgfSB3aGlsZSAoY29udGludWF0aW9uVG9rZW4gJiYgbGlzdE9iamVjdHNDb3VudCA8PSAxMDApO1xuXG4gIC8vIERlbGV0ZSBvYmplY3RzIGluIHBhcmFsbGVsIGJhdGNoZXMgKHJlc3BlY3RpbmcgUzMncyAxMDAwIG9iamVjdHMgcGVyIHJlcXVlc3QgbGltaXQpXG4gIGlmIChvYmplY3RzVG9EZWxldGUubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGRlbGV0ZUJhdGNoZXMgPSBbXTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0c1RvRGVsZXRlLmxlbmd0aDsgaSArPSAxMDAwKSB7XG4gICAgICBjb25zdCBiYXRjaCA9IG9iamVjdHNUb0RlbGV0ZS5zbGljZShpLCBpICsgMTAwMCk7XG4gICAgICBkZWxldGVCYXRjaGVzLnB1c2goYmF0Y2gpO1xuICAgIH1cblxuICAgIGF3YWl0IHByb2Nlc3NCYXRjaChcbiAgICAgIGRlbGV0ZUJhdGNoZXMsXG4gICAgICA1LCAvLyBQcm9jZXNzIHVwIHRvIDUgZGVsZXRlIGJhdGNoZXMgaW4gcGFyYWxsZWxcbiAgICAgIGFzeW5jIChiYXRjaCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGRlYnVnKFxuICAgICAgICAgICAgYERlbGV0aW5nIG9iamVjdHM6ICR7YmF0Y2gubWFwKChiKSA9PiBiLktleSl9IGZyb20gJHtidWNrZXROYW1lfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBhd2FpdCBzM0NsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IERlbGV0ZU9iamVjdHNDb21tYW5kKHtcbiAgICAgICAgICAgICAgQnVja2V0OiBidWNrZXROYW1lLFxuICAgICAgICAgICAgICBEZWxldGU6IHsgT2JqZWN0czogYmF0Y2ggfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgICAgZGVidWcoYERlbGV0ZWQgJHtiYXRjaC5sZW5ndGh9IG9iamVjdHMgZnJvbSAke2J1Y2tldE5hbWV9YCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihcIkVycm9yIGRlbGV0aW5nIG9iamVjdHM6XCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICApO1xuICB9XG5cbiAgZGVidWcoXG4gICAgYFBydW5pbmcgY29tcGxldGUuIERlbGV0ZWQgJHtvYmplY3RzVG9EZWxldGUubGVuZ3RofSBvYmplY3RzIGZyb20gJHtidWNrZXROYW1lfWAsXG4gICk7XG59XG5cbi8qKlxuICogUHJvY2VzcyBvYmplY3RzIGluIGJhdGNoZXMgdG8gYXZvaWQgb3ZlcndoZWxtaW5nIHRoZSBzeXN0ZW1cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0JhdGNoPFQsIFI+KFxuICBpdGVtczogVFtdLFxuICBiYXRjaFNpemU6IG51bWJlcixcbiAgcHJvY2Vzc0ZuOiAoaXRlbTogVCkgPT4gUHJvbWlzZTxSPixcbik6IFByb21pc2U8UltdPiB7XG4gIGNvbnN0IHJlc3VsdHM6IFJbXSA9IFtdO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaXRlbXMubGVuZ3RoOyBpICs9IGJhdGNoU2l6ZSkge1xuICAgIGNvbnN0IGJhdGNoID0gaXRlbXMuc2xpY2UoaSwgaSArIGJhdGNoU2l6ZSk7XG4gICAgY29uc3QgYmF0Y2hSZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoYmF0Y2gubWFwKHByb2Nlc3NGbikpO1xuICAgIHJlc3VsdHMucHVzaCguLi5iYXRjaFJlc3VsdHMpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG4iXX0=
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CfnResponseStatus = void 0;
|
|
4
|
+
exports.cfnResponse = cfnResponse;
|
|
5
|
+
exports.debug = debug;
|
|
6
|
+
var CfnResponseStatus;
|
|
7
|
+
(function (CfnResponseStatus) {
|
|
8
|
+
CfnResponseStatus["Success"] = "SUCCESS";
|
|
9
|
+
CfnResponseStatus["Failed"] = "FAILED";
|
|
10
|
+
})(CfnResponseStatus || (exports.CfnResponseStatus = CfnResponseStatus = {}));
|
|
11
|
+
/**
|
|
12
|
+
* Inspired by: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-lambda-function-code-cfnresponsemodule.html
|
|
13
|
+
*/
|
|
14
|
+
function cfnResponse(props) {
|
|
15
|
+
const body = JSON.stringify({
|
|
16
|
+
Status: props.responseStatus,
|
|
17
|
+
Reason: "See the details in CloudWatch Log Stream: " +
|
|
18
|
+
props.context.logStreamName,
|
|
19
|
+
PhysicalResourceId: props.physicalResourceId || props.context.logStreamName,
|
|
20
|
+
StackId: props.event.StackId,
|
|
21
|
+
RequestId: props.event.RequestId,
|
|
22
|
+
LogicalResourceId: props.event.LogicalResourceId,
|
|
23
|
+
Data: props.responseData,
|
|
24
|
+
});
|
|
25
|
+
return fetch(props.event.ResponseURL, {
|
|
26
|
+
method: "PUT",
|
|
27
|
+
body,
|
|
28
|
+
headers: { "content-type": "", "content-length": body.length.toString() },
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function debug(value) {
|
|
32
|
+
if (process.env.DEBUG)
|
|
33
|
+
console.log(JSON.stringify(value, null, 2));
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGFtYmRhcy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFrQkEsa0NBaUJDO0FBRUQsc0JBRUM7QUFyQ0QsSUFBWSxpQkFHWDtBQUhELFdBQVksaUJBQWlCO0lBQzNCLHdDQUFtQixDQUFBO0lBQ25CLHNDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFIVyxpQkFBaUIsaUNBQWpCLGlCQUFpQixRQUc1QjtBQVVEOztHQUVHO0FBQ0gsU0FBZ0IsV0FBVyxDQUFDLEtBQXVCO0lBQ2pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7UUFDMUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxjQUFjO1FBQzVCLE1BQU0sRUFDSiw0Q0FBNEM7WUFDNUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxhQUFhO1FBQzdCLGtCQUFrQixFQUFFLEtBQUssQ0FBQyxrQkFBa0IsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLGFBQWE7UUFDM0UsT0FBTyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTztRQUM1QixTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFTO1FBQ2hDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsaUJBQWlCO1FBQ2hELElBQUksRUFBRSxLQUFLLENBQUMsWUFBWTtLQUN6QixDQUFDLENBQUM7SUFDSCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRTtRQUNwQyxNQUFNLEVBQUUsS0FBSztRQUNiLElBQUk7UUFDSixPQUFPLEVBQUUsRUFBRSxjQUFjLEVBQUUsRUFBRSxFQUFFLGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLEVBQUU7S0FDMUUsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQWdCLEtBQUssQ0FBQyxLQUFjO0lBQ2xDLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLO1FBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlSGFuZGxlciB9IGZyb20gXCJhd3MtbGFtYmRhXCI7XG5cbmV4cG9ydCBlbnVtIENmblJlc3BvbnNlU3RhdHVzIHtcbiAgU3VjY2VzcyA9IFwiU1VDQ0VTU1wiLFxuICBGYWlsZWQgPSBcIkZBSUxFRFwiLFxufVxuXG5pbnRlcmZhY2UgQ2ZuUmVzcG9uc2VQcm9wcyB7XG4gIGV2ZW50OiBQYXJhbWV0ZXJzPENsb3VkRm9ybWF0aW9uQ3VzdG9tUmVzb3VyY2VIYW5kbGVyPlswXTtcbiAgY29udGV4dDogUGFyYW1ldGVyczxDbG91ZEZvcm1hdGlvbkN1c3RvbVJlc291cmNlSGFuZGxlcj5bMV07XG4gIHJlc3BvbnNlU3RhdHVzOiBDZm5SZXNwb25zZVN0YXR1cztcbiAgcmVzcG9uc2VEYXRhPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgcGh5c2ljYWxSZXNvdXJjZUlkPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEluc3BpcmVkIGJ5OiBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTQ2xvdWRGb3JtYXRpb24vbGF0ZXN0L1VzZXJHdWlkZS9jZm4tbGFtYmRhLWZ1bmN0aW9uLWNvZGUtY2ZucmVzcG9uc2Vtb2R1bGUuaHRtbFxuICovXG5leHBvcnQgZnVuY3Rpb24gY2ZuUmVzcG9uc2UocHJvcHM6IENmblJlc3BvbnNlUHJvcHMpIHtcbiAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBTdGF0dXM6IHByb3BzLnJlc3BvbnNlU3RhdHVzLFxuICAgIFJlYXNvbjpcbiAgICAgIFwiU2VlIHRoZSBkZXRhaWxzIGluIENsb3VkV2F0Y2ggTG9nIFN0cmVhbTogXCIgK1xuICAgICAgcHJvcHMuY29udGV4dC5sb2dTdHJlYW1OYW1lLFxuICAgIFBoeXNpY2FsUmVzb3VyY2VJZDogcHJvcHMucGh5c2ljYWxSZXNvdXJjZUlkIHx8IHByb3BzLmNvbnRleHQubG9nU3RyZWFtTmFtZSxcbiAgICBTdGFja0lkOiBwcm9wcy5ldmVudC5TdGFja0lkLFxuICAgIFJlcXVlc3RJZDogcHJvcHMuZXZlbnQuUmVxdWVzdElkLFxuICAgIExvZ2ljYWxSZXNvdXJjZUlkOiBwcm9wcy5ldmVudC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICBEYXRhOiBwcm9wcy5yZXNwb25zZURhdGEsXG4gIH0pO1xuICByZXR1cm4gZmV0Y2gocHJvcHMuZXZlbnQuUmVzcG9uc2VVUkwsIHtcbiAgICBtZXRob2Q6IFwiUFVUXCIsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwiXCIsIFwiY29udGVudC1sZW5ndGhcIjogYm9keS5sZW5ndGgudG9TdHJpbmcoKSB9LFxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYnVnKHZhbHVlOiB1bmtub3duKSB7XG4gIGlmIChwcm9jZXNzLmVudi5ERUJVRykgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodmFsdWUsIG51bGwsIDIpKTtcbn1cbiJdfQ==
|
|
@@ -4,23 +4,30 @@ import { AccessPoint } from "aws-cdk-lib/aws-efs";
|
|
|
4
4
|
import { DockerImageCode, DockerImageFunction } from "aws-cdk-lib/aws-lambda";
|
|
5
5
|
import { Bucket } from "aws-cdk-lib/aws-s3";
|
|
6
6
|
import { Construct } from "constructs";
|
|
7
|
-
import { NextjsType } from "./
|
|
7
|
+
import { NextjsType } from "./constants";
|
|
8
|
+
import { OptionalCustomResourceProps } from "./generated-structs/OptionalCustomResourceProps";
|
|
8
9
|
import { OptionalDockerImageFunctionProps } from "./generated-structs/OptionalDockerImageFunctionProps";
|
|
9
|
-
import { NextjsBuild } from "./nextjs-build/nextjs-build";
|
|
10
10
|
export interface NextjsAssetDeploymentOverrides {
|
|
11
|
+
/**
|
|
12
|
+
* Props that define the custom resource
|
|
13
|
+
*/
|
|
14
|
+
readonly customResourceProps?: OptionalCustomResourceProps;
|
|
11
15
|
readonly dockerImageFunctionProps?: OptionalDockerImageFunctionProps;
|
|
12
16
|
}
|
|
13
17
|
export interface NextjsAssetsDeploymentProps {
|
|
14
18
|
readonly accessPoint: AccessPoint;
|
|
15
19
|
/**
|
|
16
|
-
*
|
|
20
|
+
* Prefix to the URI path the app will be served at.
|
|
21
|
+
* @example "/my-base-path"
|
|
17
22
|
*/
|
|
18
|
-
readonly
|
|
23
|
+
readonly basePath?: string;
|
|
24
|
+
readonly buildId: string;
|
|
19
25
|
/**
|
|
20
|
-
* @see {@link NextjsBuild.
|
|
26
|
+
* @see {@link NextjsBuild.buildImageDigest}
|
|
21
27
|
*/
|
|
22
|
-
readonly
|
|
28
|
+
readonly buildImageDigest: string;
|
|
23
29
|
/**
|
|
30
|
+
* If true, logs details in custom resource lambda
|
|
24
31
|
* @default true
|
|
25
32
|
*/
|
|
26
33
|
readonly debug?: boolean;
|
|
@@ -28,9 +35,9 @@ export interface NextjsAssetsDeploymentProps {
|
|
|
28
35
|
readonly nextjsType: NextjsType;
|
|
29
36
|
readonly overrides?: NextjsAssetDeploymentOverrides;
|
|
30
37
|
/**
|
|
31
|
-
* @see {@link NextjsBaseProps.
|
|
38
|
+
* @see {@link NextjsBaseProps.relativePathToPackage}
|
|
32
39
|
*/
|
|
33
|
-
readonly
|
|
40
|
+
readonly relativePathToPackage?: string;
|
|
34
41
|
/**
|
|
35
42
|
* Required for `NextjsType.GlobalFunctions` and `NextjsType.GlobalContainers`
|
|
36
43
|
*/
|
|
@@ -53,53 +60,19 @@ export interface FsToFsAction {
|
|
|
53
60
|
type: "fs-to-fs";
|
|
54
61
|
sourcePath: string;
|
|
55
62
|
destinationPath: string;
|
|
63
|
+
includeExtensions?: string[];
|
|
56
64
|
}
|
|
57
65
|
/**
|
|
58
66
|
* @internal
|
|
59
67
|
*/
|
|
60
|
-
export interface
|
|
61
|
-
|
|
68
|
+
export interface StaticAssetsCustomResourceProperties {
|
|
69
|
+
actions: (FsToS3Action | FsToFsAction)[];
|
|
70
|
+
buildId: string;
|
|
62
71
|
/**
|
|
63
|
-
*
|
|
64
|
-
* @default 3
|
|
65
|
-
*/
|
|
66
|
-
minPreviousDeployCountToPrune: number;
|
|
67
|
-
/**
|
|
68
|
-
* The minimum previous deployment date to prune
|
|
69
|
-
* @default new Date(new Date().setMonth(new Date().getMonth() - 1))
|
|
70
|
-
*/
|
|
71
|
-
minPreviousDeployDateToPrune: string;
|
|
72
|
-
bucketName: string;
|
|
73
|
-
bucketPrefix?: string;
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* @internal
|
|
77
|
-
*/
|
|
78
|
-
export interface PruneFsAction {
|
|
79
|
-
type: "prune-fs";
|
|
80
|
-
/**
|
|
81
|
-
* The minimum previous deployment count to prune
|
|
82
|
-
* @default 3
|
|
83
|
-
*/
|
|
84
|
-
minPreviousDeployCountToPrune: number;
|
|
85
|
-
/**
|
|
86
|
-
* The minimum previous deployment date to prune
|
|
87
|
-
* @default new Date(new Date().setMonth(new Date().getMonth() - 1))
|
|
88
|
-
*/
|
|
89
|
-
minPreviousDeployDateToPrune: string;
|
|
90
|
-
directory: string;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* @internal
|
|
94
|
-
*/
|
|
95
|
-
export interface CustomResourceProperties {
|
|
96
|
-
actions: (FsToS3Action | FsToFsAction | PruneS3Action | PruneFsAction)[];
|
|
97
|
-
/**
|
|
98
|
-
* {@link NextjsAssetDeploymentProps.builderImageDigest}
|
|
72
|
+
* @see {@link NextjsBuild.buildImageDigest}
|
|
99
73
|
*/
|
|
100
74
|
buildImageDigest: string;
|
|
101
75
|
imageCachePath: string;
|
|
102
|
-
prerenderManifestPath: string;
|
|
103
76
|
nextjsType: NextjsType;
|
|
104
77
|
}
|
|
105
78
|
/**
|
|
@@ -108,10 +81,6 @@ export interface CustomResourceProperties {
|
|
|
108
81
|
export declare class NextjsAssetsDeployment extends Construct {
|
|
109
82
|
customResource: CustomResource;
|
|
110
83
|
dockerImageFunction: DockerImageFunction;
|
|
111
|
-
/**
|
|
112
|
-
* Only used for `NextjsGlobalFunctions`
|
|
113
|
-
*/
|
|
114
|
-
previewModeId: string;
|
|
115
84
|
private props;
|
|
116
85
|
constructor(scope: Construct, id: string, props: NextjsAssetsDeploymentProps);
|
|
117
86
|
private createFunction;
|
|
@@ -7,7 +7,8 @@ const posix_1 = require("path/posix");
|
|
|
7
7
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
8
8
|
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
9
9
|
const constructs_1 = require("constructs");
|
|
10
|
-
const
|
|
10
|
+
const constants_1 = require("./constants");
|
|
11
|
+
const get_architecture_1 = require("./utils/get-architecture");
|
|
11
12
|
/**
|
|
12
13
|
* Deploys static assets to S3 and cache assets to EFS in Lambda Custom Resource.
|
|
13
14
|
*/
|
|
@@ -17,21 +18,13 @@ class NextjsAssetsDeployment extends constructs_1.Construct {
|
|
|
17
18
|
this.props = props;
|
|
18
19
|
this.dockerImageFunction = this.createFunction();
|
|
19
20
|
this.customResource = this.createCustomResource();
|
|
20
|
-
this.previewModeId = this.customResource.getAttString("previewModeId");
|
|
21
21
|
}
|
|
22
22
|
createFunction() {
|
|
23
|
-
let architecture = undefined;
|
|
24
|
-
if (process.arch === "x64") {
|
|
25
|
-
architecture = aws_lambda_1.Architecture.X86_64;
|
|
26
|
-
}
|
|
27
|
-
else if (process.arch === "arm64") {
|
|
28
|
-
architecture = aws_lambda_1.Architecture.ARM_64;
|
|
29
|
-
}
|
|
30
23
|
const fn = new aws_lambda_1.DockerImageFunction(this, "Fn", {
|
|
31
|
-
architecture,
|
|
24
|
+
architecture: (0, get_architecture_1.getLambdaArchitecture)(),
|
|
32
25
|
code: this.props.dockerImageCode,
|
|
33
26
|
memorySize: 2048,
|
|
34
|
-
filesystem: aws_lambda_1.FileSystem.fromEfsAccessPoint(this.props.accessPoint,
|
|
27
|
+
filesystem: aws_lambda_1.FileSystem.fromEfsAccessPoint(this.props.accessPoint, constants_1.MOUNT_PATH),
|
|
35
28
|
vpc: this.props.vpc,
|
|
36
29
|
timeout: aws_cdk_lib_1.Duration.minutes(5),
|
|
37
30
|
...this.props.overrides?.dockerImageFunctionProps,
|
|
@@ -48,55 +41,68 @@ class NextjsAssetsDeployment extends constructs_1.Construct {
|
|
|
48
41
|
const root = "/app";
|
|
49
42
|
const actions = [];
|
|
50
43
|
if (this.props.staticAssetsBucket?.bucketName) {
|
|
44
|
+
// Prepare the destination key prefix with basePath when available
|
|
45
|
+
const staticKeyPrefix = this.props.basePath
|
|
46
|
+
? `${this.props.basePath.replace(/^\//, "")}/_next/static`
|
|
47
|
+
: "_next/static";
|
|
51
48
|
actions.push(
|
|
52
49
|
// static files
|
|
53
50
|
{
|
|
54
51
|
type: "fs-to-s3",
|
|
55
|
-
sourcePath: (0, posix_1.join)(root,
|
|
52
|
+
sourcePath: (0, posix_1.join)(root, constants_1.STATIC_PATH),
|
|
56
53
|
destinationBucketName: this.props.staticAssetsBucket.bucketName,
|
|
57
|
-
destinationKeyPrefix:
|
|
54
|
+
destinationKeyPrefix: staticKeyPrefix,
|
|
58
55
|
},
|
|
59
56
|
// public directory to s3 for CloudFront -> S3
|
|
60
57
|
{
|
|
61
58
|
type: "fs-to-s3",
|
|
62
|
-
sourcePath: (0, posix_1.join)(root,
|
|
59
|
+
sourcePath: (0, posix_1.join)(root, constants_1.PUBLIC_PATH),
|
|
63
60
|
destinationBucketName: this.props.staticAssetsBucket.bucketName,
|
|
64
61
|
});
|
|
65
62
|
}
|
|
66
63
|
actions.push(
|
|
67
|
-
//
|
|
64
|
+
// full route cache - https://nextjs.org/docs/app/building-your-application/caching#full-route-cache
|
|
68
65
|
{
|
|
69
66
|
type: "fs-to-fs",
|
|
70
|
-
sourcePath: (0, posix_1.join)(root, ".next", "
|
|
71
|
-
destinationPath: (0, posix_1.join)(this.props.
|
|
67
|
+
sourcePath: (0, posix_1.join)(root, ".next", "standalone", this.props.relativePathToPackage || "", constants_1.FULL_ROUTE_CACHE_PATH),
|
|
68
|
+
destinationPath: (0, posix_1.join)(constants_1.MOUNT_PATH, this.props.buildId, constants_1.FULL_ROUTE_CACHE_PATH),
|
|
69
|
+
// only files with these extensions are needed in EFS FileSystem cache
|
|
70
|
+
// since these files are the only ones updated by Next.js during runtime.
|
|
71
|
+
// other files like .js and .nft.json files are static per deployment
|
|
72
|
+
includeExtensions: ["body", "html", "rsc", "meta"],
|
|
72
73
|
},
|
|
73
|
-
//
|
|
74
|
+
// after `next build` data cache https://nextjs.org/docs/app/building-your-application/caching#data-cache
|
|
75
|
+
// exists at top level .next/cache so we need to copy into relativePathToPackage
|
|
76
|
+
// normalized path
|
|
74
77
|
{
|
|
75
78
|
type: "fs-to-fs",
|
|
76
|
-
sourcePath: (0, posix_1.join)(root,
|
|
77
|
-
destinationPath: (0, posix_1.join)(this.props.
|
|
79
|
+
sourcePath: (0, posix_1.join)(root, constants_1.DATA_CACHE_PATH),
|
|
80
|
+
destinationPath: (0, posix_1.join)(constants_1.MOUNT_PATH, this.props.buildId, constants_1.DATA_CACHE_PATH),
|
|
78
81
|
},
|
|
79
82
|
// public directory to EFS for needed optimizing images in public directory
|
|
83
|
+
// we don't load these into compute to save on image size
|
|
80
84
|
{
|
|
81
85
|
type: "fs-to-fs",
|
|
82
|
-
sourcePath: (0, posix_1.join)(root,
|
|
83
|
-
destinationPath: (0, posix_1.join)(this.props.
|
|
86
|
+
sourcePath: (0, posix_1.join)(root, constants_1.PUBLIC_PATH),
|
|
87
|
+
destinationPath: (0, posix_1.join)(constants_1.MOUNT_PATH, this.props.buildId, constants_1.PUBLIC_PATH),
|
|
84
88
|
});
|
|
85
89
|
const properties = {
|
|
86
90
|
actions,
|
|
91
|
+
buildId: this.props.buildId,
|
|
92
|
+
// ensures this CR runs each time new builder image
|
|
87
93
|
buildImageDigest: this.props.buildImageDigest,
|
|
88
|
-
imageCachePath: (0, posix_1.join)(this.props.
|
|
94
|
+
imageCachePath: (0, posix_1.join)(constants_1.MOUNT_PATH, this.props.buildId, constants_1.IMAGE_CACHE_PATH),
|
|
89
95
|
nextjsType: this.props.nextjsType,
|
|
90
|
-
prerenderManifestPath: (0, posix_1.join)(root, ".next", "prerender-manifest.json"),
|
|
91
96
|
};
|
|
92
97
|
return new aws_cdk_lib_1.CustomResource(this, "CustomResource", {
|
|
93
98
|
properties,
|
|
94
99
|
resourceType: "Custom::NextjsAssetsDeployment",
|
|
95
100
|
serviceToken: this.dockerImageFunction.functionArn,
|
|
101
|
+
...this.props.overrides?.customResourceProps,
|
|
96
102
|
});
|
|
97
103
|
}
|
|
98
104
|
}
|
|
99
105
|
exports.NextjsAssetsDeployment = NextjsAssetsDeployment;
|
|
100
106
|
_a = JSII_RTTI_SYMBOL_1;
|
|
101
|
-
NextjsAssetsDeployment[_a] = { fqn: "cdk-nextjs.NextjsAssetsDeployment", version: "0.
|
|
102
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWFzc2V0cy1kZXBsb3ltZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25leHRqcy1hc3NldHMtZGVwbG95bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNDQUFrQztBQUNsQyw2Q0FBdUQ7QUFHdkQsdURBS2dDO0FBRWhDLDJDQUF1QztBQUN2QyxxQ0FNa0I7QUF3R2xCOztHQUVHO0FBQ0gsTUFBYSxzQkFBdUIsU0FBUSxzQkFBUztJQVVuRCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFrQztRQUVsQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFTyxjQUFjO1FBQ3BCLElBQUksWUFBWSxHQUE2QixTQUFTLENBQUM7UUFDdkQsSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLEtBQUssRUFBRSxDQUFDO1lBQzNCLFlBQVksR0FBRyx5QkFBWSxDQUFDLE1BQU0sQ0FBQztRQUNyQyxDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsSUFBSSxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLFlBQVksR0FBRyx5QkFBWSxDQUFDLE1BQU0sQ0FBQztRQUNyQyxDQUFDO1FBQ0QsTUFBTSxFQUFFLEdBQUcsSUFBSSxnQ0FBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQzdDLFlBQVk7WUFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlO1lBQ2hDLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLFVBQVUsRUFBRSx1QkFBVSxDQUFDLGtCQUFrQixDQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFDdEIsSUFBSSxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FDcEM7WUFDRCxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHO1lBQ25CLE9BQU8sRUFBRSxzQkFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDNUIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx3QkFBd0I7U0FDbEQsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssS0FBSyxLQUFLLEVBQUUsQ0FBQztZQUMvQixFQUFFLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNsQyxDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkQsQ0FBQztRQUNELE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUM7UUFDcEIsTUFBTSxPQUFPLEdBQXdDLEVBQUUsQ0FBQztRQUN4RCxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDOUMsT0FBTyxDQUFDLElBQUk7WUFDVixlQUFlO1lBQ2Y7Z0JBQ0UsSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLFVBQVUsRUFBRSxJQUFBLFlBQUksRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQztnQkFDekMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVO2dCQUMvRCxvQkFBb0IsRUFBRSxjQUFjO2FBQ3JDO1lBQ0QsOENBQThDO1lBQzlDO2dCQUNFLElBQUksRUFBRSxVQUFVO2dCQUNoQixVQUFVLEVBQUUsSUFBQSxZQUFJLEVBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztnQkFDaEMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVO2FBQ2hFLENBQ0YsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLENBQUMsSUFBSTtRQUNWLHdGQUF3RjtRQUN4RjtZQUNFLElBQUksRUFBRSxVQUFVO1lBQ2hCLFVBQVUsRUFBRSxJQUFBLFlBQUksRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUM7WUFDdkQsZUFBZSxFQUFFLElBQUEsWUFBSSxFQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUNuQyx1QkFBYyxDQUNmO1NBQ0Y7UUFDRCxvR0FBb0c7UUFDcEc7WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixVQUFVLEVBQUUsSUFBQSxZQUFJLEVBQ2QsSUFBSSxFQUNKLE9BQU8sRUFDUCxZQUFZLEVBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUIsSUFBSSxFQUFFLEVBQ3hDLE9BQU8sRUFDUCxRQUFRLEVBQ1IsS0FBSyxDQUNOO1lBQ0QsZUFBZSxFQUFFLElBQUEsWUFBSSxFQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUNuQyw2QkFBb0IsQ0FDckI7U0FDRjtRQUNELDJFQUEyRTtRQUMzRTtZQUNFLElBQUksRUFBRSxVQUFVO1lBQ2hCLFVBQVUsRUFBRSxJQUFBLFlBQUksRUFBQyxJQUFJLEVBQUUsUUFBUSxDQUFDO1lBQ2hDLGVBQWUsRUFBRSxJQUFBLFlBQUksRUFBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLG1CQUFVLENBQUM7U0FDdkUsQ0FFRixDQUFDO1FBQ0YsTUFBTSxVQUFVLEdBQTZCO1lBQzNDLE9BQU87WUFDUCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQjtZQUM3QyxjQUFjLEVBQUUsSUFBQSxZQUFJLEVBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsd0JBQXdCLEVBQ25DLHdCQUFlLENBQ2hCO1lBQ0QsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtZQUNqQyxxQkFBcUIsRUFBRSxJQUFBLFlBQUksRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLHlCQUF5QixDQUFDO1NBQ3RFLENBQUM7UUFDRixPQUFPLElBQUksNEJBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDaEQsVUFBVTtZQUNWLFlBQVksRUFBRSxnQ0FBZ0M7WUFDOUMsWUFBWSxFQUFFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxXQUFXO1NBQ25ELENBQUMsQ0FBQztJQUNMLENBQUM7O0FBeEhILHdEQXlIQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aC9wb3NpeFwiO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2UsIER1cmF0aW9uIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IEFjY2Vzc1BvaW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lZnNcIjtcbmltcG9ydCB7XG4gIEFyY2hpdGVjdHVyZSxcbiAgRG9ja2VySW1hZ2VDb2RlLFxuICBEb2NrZXJJbWFnZUZ1bmN0aW9uLFxuICBGaWxlU3lzdGVtLFxufSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgQnVja2V0IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIERBVEFfQ0FDSEVfRElSLFxuICBGVUxMX1JPVVRFX0NBQ0hFX0RJUixcbiAgSU1BR0VfQ0FDSEVfRElSLFxuICBOZXh0anNUeXBlLFxuICBQVUJMSUNfRElSLFxufSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCB7IE9wdGlvbmFsRG9ja2VySW1hZ2VGdW5jdGlvblByb3BzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxEb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHNcIjtcbmltcG9ydCB7IE5leHRqc0J1aWxkIH0gZnJvbSBcIi4vbmV4dGpzLWJ1aWxkL25leHRqcy1idWlsZFwiO1xuaW1wb3J0IHsgTmV4dGpzQmFzZVByb3BzIH0gZnJvbSBcIi4vcm9vdC1jb25zdHJ1Y3RzL25leHRqcy1iYXNlLXByb3BzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQXNzZXREZXBsb3ltZW50T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgZG9ja2VySW1hZ2VGdW5jdGlvblByb3BzPzogT3B0aW9uYWxEb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQXNzZXRzRGVwbG95bWVudFByb3BzIHtcbiAgcmVhZG9ubHkgYWNjZXNzUG9pbnQ6IEFjY2Vzc1BvaW50O1xuICAvKipcbiAgICogQHNlZSB7QGxpbmsgTmV4dGpzQnVpbGQuYnVpbGRJbWFnZURpZ2VzdH1cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkSW1hZ2VEaWdlc3Q6IHN0cmluZztcbiAgLyoqXG4gICAqIEBzZWUge0BsaW5rIE5leHRqc0J1aWxkLmNvbnRhaW5lck1vdW50UGF0aEZvckVmc31cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lck1vdW50UGF0aEZvckVmczogTmV4dGpzQnVpbGRbXCJjb250YWluZXJNb3VudFBhdGhGb3JFZnNcIl07XG4gIC8qKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBkZWJ1Zz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGRvY2tlckltYWdlQ29kZTogRG9ja2VySW1hZ2VDb2RlOyAvLyBUT0RPOiByZW1vdmUgYW5kIGJ1aWxkIGZyb20gY29tbW9uIGJ1aWxkZXIgYmFzZT9cbiAgcmVhZG9ubHkgbmV4dGpzVHlwZTogTmV4dGpzVHlwZTtcbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogTmV4dGpzQXNzZXREZXBsb3ltZW50T3ZlcnJpZGVzO1xuICAvKipcbiAgICogQHNlZSB7QGxpbmsgTmV4dGpzQmFzZVByb3BzLnJlbGF0aXZlUGF0aFRvV29ya3NwYWNlfVxuICAgKi9cbiAgcmVhZG9ubHkgcmVsYXRpdmVQYXRoVG9Xb3Jrc3BhY2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBSZXF1aXJlZCBmb3IgYE5leHRqc1R5cGUuR2xvYmFsRnVuY3Rpb25zYCBhbmQgYE5leHRqc1R5cGUuR2xvYmFsQ29udGFpbmVyc2BcbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0J1Y2tldD86IEJ1Y2tldDtcbiAgcmVhZG9ubHkgdnBjOiBJVnBjO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZzVG9TM0FjdGlvbiB7XG4gIHR5cGU6IFwiZnMtdG8tczNcIjtcbiAgZGVzdGluYXRpb25CdWNrZXROYW1lOiBzdHJpbmc7XG4gIGRlc3RpbmF0aW9uS2V5UHJlZml4Pzogc3RyaW5nO1xuICBzb3VyY2VQYXRoOiBzdHJpbmc7XG59XG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZzVG9Gc0FjdGlvbiB7XG4gIHR5cGU6IFwiZnMtdG8tZnNcIjtcbiAgc291cmNlUGF0aDogc3RyaW5nO1xuICBkZXN0aW5hdGlvblBhdGg6IHN0cmluZztcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJ1bmVTM0FjdGlvbiB7XG4gIHR5cGU6IFwicHJ1bmUtczNcIjtcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHByZXZpb3VzIGRlcGxveW1lbnQgY291bnQgdG8gcHJ1bmVcbiAgICogQGRlZmF1bHQgM1xuICAgKi9cbiAgbWluUHJldmlvdXNEZXBsb3lDb3VudFRvUHJ1bmU6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHByZXZpb3VzIGRlcGxveW1lbnQgZGF0ZSB0byBwcnVuZVxuICAgKiBAZGVmYXVsdCBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldE1vbnRoKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSAtIDEpKVxuICAgKi9cbiAgbWluUHJldmlvdXNEZXBsb3lEYXRlVG9QcnVuZTogc3RyaW5nO1xuICBidWNrZXROYW1lOiBzdHJpbmc7XG4gIGJ1Y2tldFByZWZpeD86IHN0cmluZztcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUHJ1bmVGc0FjdGlvbiB7XG4gIHR5cGU6IFwicHJ1bmUtZnNcIjtcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHByZXZpb3VzIGRlcGxveW1lbnQgY291bnQgdG8gcHJ1bmVcbiAgICogQGRlZmF1bHQgM1xuICAgKi9cbiAgbWluUHJldmlvdXNEZXBsb3lDb3VudFRvUHJ1bmU6IG51bWJlcjtcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHByZXZpb3VzIGRlcGxveW1lbnQgZGF0ZSB0byBwcnVuZVxuICAgKiBAZGVmYXVsdCBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldE1vbnRoKG5ldyBEYXRlKCkuZ2V0TW9udGgoKSAtIDEpKVxuICAgKi9cbiAgbWluUHJldmlvdXNEZXBsb3lEYXRlVG9QcnVuZTogc3RyaW5nO1xuICBkaXJlY3Rvcnk6IHN0cmluZztcbn1cblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21SZXNvdXJjZVByb3BlcnRpZXMge1xuICBhY3Rpb25zOiAoRnNUb1MzQWN0aW9uIHwgRnNUb0ZzQWN0aW9uIHwgUHJ1bmVTM0FjdGlvbiB8IFBydW5lRnNBY3Rpb24pW107XG4gIC8qKlxuICAgKiB7QGxpbmsgTmV4dGpzQXNzZXREZXBsb3ltZW50UHJvcHMuYnVpbGRlckltYWdlRGlnZXN0fVxuICAgKi9cbiAgYnVpbGRJbWFnZURpZ2VzdDogc3RyaW5nO1xuICBpbWFnZUNhY2hlUGF0aDogc3RyaW5nO1xuICBwcmVyZW5kZXJNYW5pZmVzdFBhdGg6IHN0cmluZztcbiAgbmV4dGpzVHlwZTogTmV4dGpzVHlwZTtcbn1cblxuLyoqXG4gKiBEZXBsb3lzIHN0YXRpYyBhc3NldHMgdG8gUzMgYW5kIGNhY2hlIGFzc2V0cyB0byBFRlMgaW4gTGFtYmRhIEN1c3RvbSBSZXNvdXJjZS5cbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc0Fzc2V0c0RlcGxveW1lbnQgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjdXN0b21SZXNvdXJjZTogQ3VzdG9tUmVzb3VyY2U7XG4gIGRvY2tlckltYWdlRnVuY3Rpb246IERvY2tlckltYWdlRnVuY3Rpb247XG4gIC8qKlxuICAgKiBPbmx5IHVzZWQgZm9yIGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgXG4gICAqL1xuICBwcmV2aWV3TW9kZUlkOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBwcm9wczogTmV4dGpzQXNzZXRzRGVwbG95bWVudFByb3BzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogTmV4dGpzQXNzZXRzRGVwbG95bWVudFByb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmRvY2tlckltYWdlRnVuY3Rpb24gPSB0aGlzLmNyZWF0ZUZ1bmN0aW9uKCk7XG4gICAgdGhpcy5jdXN0b21SZXNvdXJjZSA9IHRoaXMuY3JlYXRlQ3VzdG9tUmVzb3VyY2UoKTtcbiAgICB0aGlzLnByZXZpZXdNb2RlSWQgPSB0aGlzLmN1c3RvbVJlc291cmNlLmdldEF0dFN0cmluZyhcInByZXZpZXdNb2RlSWRcIik7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZ1bmN0aW9uKCkge1xuICAgIGxldCBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocHJvY2Vzcy5hcmNoID09PSBcIng2NFwiKSB7XG4gICAgICBhcmNoaXRlY3R1cmUgPSBBcmNoaXRlY3R1cmUuWDg2XzY0O1xuICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5hcmNoID09PSBcImFybTY0XCIpIHtcbiAgICAgIGFyY2hpdGVjdHVyZSA9IEFyY2hpdGVjdHVyZS5BUk1fNjQ7XG4gICAgfVxuICAgIGNvbnN0IGZuID0gbmV3IERvY2tlckltYWdlRnVuY3Rpb24odGhpcywgXCJGblwiLCB7XG4gICAgICBhcmNoaXRlY3R1cmUsXG4gICAgICBjb2RlOiB0aGlzLnByb3BzLmRvY2tlckltYWdlQ29kZSxcbiAgICAgIG1lbW9yeVNpemU6IDIwNDgsXG4gICAgICBmaWxlc3lzdGVtOiBGaWxlU3lzdGVtLmZyb21FZnNBY2Nlc3NQb2ludChcbiAgICAgICAgdGhpcy5wcm9wcy5hY2Nlc3NQb2ludCxcbiAgICAgICAgdGhpcy5wcm9wcy5jb250YWluZXJNb3VudFBhdGhGb3JFZnMsXG4gICAgICApLFxuICAgICAgdnBjOiB0aGlzLnByb3BzLnZwYyxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZG9ja2VySW1hZ2VGdW5jdGlvblByb3BzLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnByb3BzLmRlYnVnICE9PSBmYWxzZSkge1xuICAgICAgZm4uYWRkRW52aXJvbm1lbnQoXCJERUJVR1wiLCBcIjFcIik7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldCkge1xuICAgICAgdGhpcy5wcm9wcy5zdGF0aWNBc3NldHNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm47XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUN1c3RvbVJlc291cmNlKCkge1xuICAgIGNvbnN0IHJvb3QgPSBcIi9hcHBcIjtcbiAgICBjb25zdCBhY3Rpb25zOiBDdXN0b21SZXNvdXJjZVByb3BlcnRpZXNbXCJhY3Rpb25zXCJdID0gW107XG4gICAgaWYgKHRoaXMucHJvcHMuc3RhdGljQXNzZXRzQnVja2V0Py5idWNrZXROYW1lKSB7XG4gICAgICBhY3Rpb25zLnB1c2goXG4gICAgICAgIC8vIHN0YXRpYyBmaWxlc1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogXCJmcy10by1zM1wiLFxuICAgICAgICAgIHNvdXJjZVBhdGg6IGpvaW4ocm9vdCwgXCIubmV4dFwiLCBcInN0YXRpY1wiKSxcbiAgICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldE5hbWU6IHRoaXMucHJvcHMuc3RhdGljQXNzZXRzQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6IFwiX25leHQvc3RhdGljXCIsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHB1YmxpYyBkaXJlY3RvcnkgdG8gczMgZm9yIENsb3VkRnJvbnQgLT4gUzNcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiZnMtdG8tczNcIixcbiAgICAgICAgICBzb3VyY2VQYXRoOiBqb2luKHJvb3QsIFwicHVibGljXCIpLFxuICAgICAgICAgIGRlc3RpbmF0aW9uQnVja2V0TmFtZTogdGhpcy5wcm9wcy5zdGF0aWNBc3NldHNCdWNrZXQuYnVja2V0TmFtZSxcbiAgICAgICAgfSxcbiAgICAgICk7XG4gICAgfVxuICAgIGFjdGlvbnMucHVzaChcbiAgICAgIC8vIGRhdGEgY2FjaGUgLSBodHRwczovL25leHRqcy5vcmcvZG9jcy9hcHAvYnVpbGRpbmcteW91ci1hcHBsaWNhdGlvbi9jYWNoaW5nI2RhdGEtY2FjaGVcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJmcy10by1mc1wiLFxuICAgICAgICBzb3VyY2VQYXRoOiBqb2luKHJvb3QsIFwiLm5leHRcIiwgXCJjYWNoZVwiLCBcImZldGNoLWNhY2hlXCIpLFxuICAgICAgICBkZXN0aW5hdGlvblBhdGg6IGpvaW4oXG4gICAgICAgICAgdGhpcy5wcm9wcy5jb250YWluZXJNb3VudFBhdGhGb3JFZnMsXG4gICAgICAgICAgREFUQV9DQUNIRV9ESVIsXG4gICAgICAgICksXG4gICAgICB9LFxuICAgICAgLy8gZnVsbCByb3V0ZSBjYWNoZSAtIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL2NhY2hpbmcjZnVsbC1yb3V0ZS1jYWNoZVxuICAgICAge1xuICAgICAgICB0eXBlOiBcImZzLXRvLWZzXCIsXG4gICAgICAgIHNvdXJjZVBhdGg6IGpvaW4oXG4gICAgICAgICAgcm9vdCxcbiAgICAgICAgICBcIi5uZXh0XCIsXG4gICAgICAgICAgXCJzdGFuZGFsb25lXCIsXG4gICAgICAgICAgdGhpcy5wcm9wcy5yZWxhdGl2ZVBhdGhUb1dvcmtzcGFjZSB8fCBcIlwiLFxuICAgICAgICAgIFwiLm5leHRcIixcbiAgICAgICAgICBcInNlcnZlclwiLFxuICAgICAgICAgIFwiYXBwXCIsXG4gICAgICAgICksXG4gICAgICAgIGRlc3RpbmF0aW9uUGF0aDogam9pbihcbiAgICAgICAgICB0aGlzLnByb3BzLmNvbnRhaW5lck1vdW50UGF0aEZvckVmcyxcbiAgICAgICAgICBGVUxMX1JPVVRFX0NBQ0hFX0RJUixcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICAvLyBwdWJsaWMgZGlyZWN0b3J5IHRvIEVGUyBmb3IgbmVlZGVkIG9wdGltaXppbmcgaW1hZ2VzIGluIHB1YmxpYyBkaXJlY3RvcnlcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJmcy10by1mc1wiLFxuICAgICAgICBzb3VyY2VQYXRoOiBqb2luKHJvb3QsIFwicHVibGljXCIpLFxuICAgICAgICBkZXN0aW5hdGlvblBhdGg6IGpvaW4odGhpcy5wcm9wcy5jb250YWluZXJNb3VudFBhdGhGb3JFZnMsIFBVQkxJQ19ESVIpLFxuICAgICAgfSxcbiAgICAgIC8vIGltYWdlcyBhcmUgb3B0aW1pemVkIGF0IHJ1bnRpbWUgc28gbm90aGluZyB0byBkZXBsb3lcbiAgICApO1xuICAgIGNvbnN0IHByb3BlcnRpZXM6IEN1c3RvbVJlc291cmNlUHJvcGVydGllcyA9IHtcbiAgICAgIGFjdGlvbnMsXG4gICAgICBidWlsZEltYWdlRGlnZXN0OiB0aGlzLnByb3BzLmJ1aWxkSW1hZ2VEaWdlc3QsXG4gICAgICBpbWFnZUNhY2hlUGF0aDogam9pbihcbiAgICAgICAgdGhpcy5wcm9wcy5jb250YWluZXJNb3VudFBhdGhGb3JFZnMsXG4gICAgICAgIElNQUdFX0NBQ0hFX0RJUixcbiAgICAgICksXG4gICAgICBuZXh0anNUeXBlOiB0aGlzLnByb3BzLm5leHRqc1R5cGUsXG4gICAgICBwcmVyZW5kZXJNYW5pZmVzdFBhdGg6IGpvaW4ocm9vdCwgXCIubmV4dFwiLCBcInByZXJlbmRlci1tYW5pZmVzdC5qc29uXCIpLFxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCBcIkN1c3RvbVJlc291cmNlXCIsIHtcbiAgICAgIHByb3BlcnRpZXMsXG4gICAgICByZXNvdXJjZVR5cGU6IFwiQ3VzdG9tOjpOZXh0anNBc3NldHNEZXBsb3ltZW50XCIsXG4gICAgICBzZXJ2aWNlVG9rZW46IHRoaXMuZG9ja2VySW1hZ2VGdW5jdGlvbi5mdW5jdGlvbkFybixcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
107
|
+
NextjsAssetsDeployment[_a] = { fqn: "cdk-nextjs.NextjsAssetsDeployment", version: "0.4.0" };
|
|
108
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWFzc2V0cy1kZXBsb3ltZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL25leHRqcy1hc3NldHMtZGVwbG95bWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHNDQUFrQztBQUNsQyw2Q0FBdUQ7QUFHdkQsdURBSWdDO0FBRWhDLDJDQUF1QztBQUN2QywyQ0FRcUI7QUFLckIsK0RBQWlFO0FBNEVqRTs7R0FFRztBQUNILE1BQWEsc0JBQXVCLFNBQVEsc0JBQVM7SUFNbkQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBa0M7UUFFbEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ2pELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7SUFDcEQsQ0FBQztJQUVPLGNBQWM7UUFDcEIsTUFBTSxFQUFFLEdBQUcsSUFBSSxnQ0FBbUIsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFO1lBQzdDLFlBQVksRUFBRSxJQUFBLHdDQUFxQixHQUFFO1lBQ3JDLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWU7WUFDaEMsVUFBVSxFQUFFLElBQUk7WUFDaEIsVUFBVSxFQUFFLHVCQUFVLENBQUMsa0JBQWtCLENBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUN0QixzQkFBVSxDQUNYO1lBQ0QsR0FBRyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRztZQUNuQixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQzVCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsd0JBQXdCO1NBQ2xELENBQUMsQ0FBQztRQUNILElBQUks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Z0JBQWdCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxnQkFBZ0I7WUFDN0MsY0FBYyxFQUFFLElBQUEsWUFBSSxFQUFDLHNCQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsNEJBQWdCLENBQUM7WUFDdEUsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVTtTQUNsQyxDQUFDO1FBQ0YsT0FBTyxJQUFJLDRCQUFjLENBQUMsSUFBSSxFQUFFLGdCQUFnQixFQUFFO1lBQ2hELFVBQVU7WUFDVixZQUFZLEVBQUUsZ0NBQWdDO1lBQzlDLFlBQVksRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVztZQUNsRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLG1CQUFtQjtTQUM3QyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQXBISCx3REFxSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGgvcG9zaXhcIjtcbmltcG9ydCB7IEN1c3RvbVJlc291cmNlLCBEdXJhdGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgSVZwYyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBBY2Nlc3NQb2ludCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWZzXCI7XG5pbXBvcnQge1xuICBEb2NrZXJJbWFnZUNvZGUsXG4gIERvY2tlckltYWdlRnVuY3Rpb24sXG4gIEZpbGVTeXN0ZW0sXG59IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgREFUQV9DQUNIRV9QQVRILFxuICBGVUxMX1JPVVRFX0NBQ0hFX1BBVEgsXG4gIElNQUdFX0NBQ0hFX1BBVEgsXG4gIE1PVU5UX1BBVEgsXG4gIE5leHRqc1R5cGUsXG4gIFBVQkxJQ19QQVRILFxuICBTVEFUSUNfUEFUSCxcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBPcHRpb25hbEN1c3RvbVJlc291cmNlUHJvcHMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbEN1c3RvbVJlc291cmNlUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsRG9ja2VySW1hZ2VGdW5jdGlvblByb3BzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxEb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHNcIjtcbmltcG9ydCB7IE5leHRqc0J1aWxkIH0gZnJvbSBcIi4vbmV4dGpzLWJ1aWxkL25leHRqcy1idWlsZFwiO1xuaW1wb3J0IHsgTmV4dGpzQmFzZVByb3BzIH0gZnJvbSBcIi4vcm9vdC1jb25zdHJ1Y3RzL25leHRqcy1iYXNlLXByb3BzXCI7XG5pbXBvcnQgeyBnZXRMYW1iZGFBcmNoaXRlY3R1cmUgfSBmcm9tIFwiLi91dGlscy9nZXQtYXJjaGl0ZWN0dXJlXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQXNzZXREZXBsb3ltZW50T3ZlcnJpZGVzIHtcbiAgLyoqXG4gICAqIFByb3BzIHRoYXQgZGVmaW5lIHRoZSBjdXN0b20gcmVzb3VyY2VcbiAgICovXG4gIHJlYWRvbmx5IGN1c3RvbVJlc291cmNlUHJvcHM/OiBPcHRpb25hbEN1c3RvbVJlc291cmNlUHJvcHM7XG4gIC8vIE5PVEU6IHdlIGRvbid0IG9mZmVyIG92ZXJyaWRpbmcgYGN1c3RvbVJlc291cmNlUHJvcGVydGllc2Agc2luY2UganNpaSBkb2Vzbid0IHN1cHBvcnQgdW5pb24gdHlwZXNcbiAgLy8gcmVhZG9ubHkgY3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzPzogT3B0aW9uYWxTdGF0aWNBc3NldHNDdXN0b21SZXNvdXJjZVByb3BlcnRpZXNcbiAgcmVhZG9ubHkgZG9ja2VySW1hZ2VGdW5jdGlvblByb3BzPzogT3B0aW9uYWxEb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQXNzZXRzRGVwbG95bWVudFByb3BzIHtcbiAgcmVhZG9ubHkgYWNjZXNzUG9pbnQ6IEFjY2Vzc1BvaW50O1xuICAvKipcbiAgICogUHJlZml4IHRvIHRoZSBVUkkgcGF0aCB0aGUgYXBwIHdpbGwgYmUgc2VydmVkIGF0LlxuICAgKiBAZXhhbXBsZSBcIi9teS1iYXNlLXBhdGhcIlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZVBhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGJ1aWxkSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEBzZWUge0BsaW5rIE5leHRqc0J1aWxkLmJ1aWxkSW1hZ2VEaWdlc3R9XG4gICAqL1xuICByZWFkb25seSBidWlsZEltYWdlRGlnZXN0OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBJZiB0cnVlLCBsb2dzIGRldGFpbHMgaW4gY3VzdG9tIHJlc291cmNlIGxhbWJkYVxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBkZWJ1Zz86IGJvb2xlYW47XG4gIHJlYWRvbmx5IGRvY2tlckltYWdlQ29kZTogRG9ja2VySW1hZ2VDb2RlOyAvLyBUT0RPOiByZW1vdmUgYW5kIGJ1aWxkIGZyb20gY29tbW9uIGJ1aWxkZXIgYmFzZT9cbiAgcmVhZG9ubHkgbmV4dGpzVHlwZTogTmV4dGpzVHlwZTtcbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogTmV4dGpzQXNzZXREZXBsb3ltZW50T3ZlcnJpZGVzO1xuICAvKipcbiAgICogQHNlZSB7QGxpbmsgTmV4dGpzQmFzZVByb3BzLnJlbGF0aXZlUGF0aFRvUGFja2FnZX1cbiAgICovXG4gIHJlYWRvbmx5IHJlbGF0aXZlUGF0aFRvUGFja2FnZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFJlcXVpcmVkIGZvciBgTmV4dGpzVHlwZS5HbG9iYWxGdW5jdGlvbnNgIGFuZCBgTmV4dGpzVHlwZS5HbG9iYWxDb250YWluZXJzYFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdGljQXNzZXRzQnVja2V0PzogQnVja2V0O1xuICByZWFkb25seSB2cGM6IElWcGM7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnNUb1MzQWN0aW9uIHtcbiAgdHlwZTogXCJmcy10by1zM1wiO1xuICBkZXN0aW5hdGlvbkJ1Y2tldE5hbWU6IHN0cmluZztcbiAgZGVzdGluYXRpb25LZXlQcmVmaXg/OiBzdHJpbmc7XG4gIHNvdXJjZVBhdGg6IHN0cmluZztcbn1cbi8qKlxuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRnNUb0ZzQWN0aW9uIHtcbiAgdHlwZTogXCJmcy10by1mc1wiO1xuICBzb3VyY2VQYXRoOiBzdHJpbmc7XG4gIGRlc3RpbmF0aW9uUGF0aDogc3RyaW5nO1xuICBpbmNsdWRlRXh0ZW5zaW9ucz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YXRpY0Fzc2V0c0N1c3RvbVJlc291cmNlUHJvcGVydGllcyB7XG4gIGFjdGlvbnM6IChGc1RvUzNBY3Rpb24gfCBGc1RvRnNBY3Rpb24pW107XG4gIGJ1aWxkSWQ6IHN0cmluZztcbiAgLyoqXG4gICAqIEBzZWUge0BsaW5rIE5leHRqc0J1aWxkLmJ1aWxkSW1hZ2VEaWdlc3R9XG4gICAqL1xuICBidWlsZEltYWdlRGlnZXN0OiBzdHJpbmc7XG4gIGltYWdlQ2FjaGVQYXRoOiBzdHJpbmc7XG4gIG5leHRqc1R5cGU6IE5leHRqc1R5cGU7XG59XG5cbi8qKlxuICogRGVwbG95cyBzdGF0aWMgYXNzZXRzIHRvIFMzIGFuZCBjYWNoZSBhc3NldHMgdG8gRUZTIGluIExhbWJkYSBDdXN0b20gUmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXh0anNBc3NldHNEZXBsb3ltZW50IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY3VzdG9tUmVzb3VyY2U6IEN1c3RvbVJlc291cmNlO1xuICBkb2NrZXJJbWFnZUZ1bmN0aW9uOiBEb2NrZXJJbWFnZUZ1bmN0aW9uO1xuXG4gIHByaXZhdGUgcHJvcHM6IE5leHRqc0Fzc2V0c0RlcGxveW1lbnRQcm9wcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IE5leHRqc0Fzc2V0c0RlcGxveW1lbnRQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5kb2NrZXJJbWFnZUZ1bmN0aW9uID0gdGhpcy5jcmVhdGVGdW5jdGlvbigpO1xuICAgIHRoaXMuY3VzdG9tUmVzb3VyY2UgPSB0aGlzLmNyZWF0ZUN1c3RvbVJlc291cmNlKCk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGZuID0gbmV3IERvY2tlckltYWdlRnVuY3Rpb24odGhpcywgXCJGblwiLCB7XG4gICAgICBhcmNoaXRlY3R1cmU6IGdldExhbWJkYUFyY2hpdGVjdHVyZSgpLFxuICAgICAgY29kZTogdGhpcy5wcm9wcy5kb2NrZXJJbWFnZUNvZGUsXG4gICAgICBtZW1vcnlTaXplOiAyMDQ4LFxuICAgICAgZmlsZXN5c3RlbTogRmlsZVN5c3RlbS5mcm9tRWZzQWNjZXNzUG9pbnQoXG4gICAgICAgIHRoaXMucHJvcHMuYWNjZXNzUG9pbnQsXG4gICAgICAgIE1PVU5UX1BBVEgsXG4gICAgICApLFxuICAgICAgdnBjOiB0aGlzLnByb3BzLnZwYyxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uZG9ja2VySW1hZ2VGdW5jdGlvblByb3BzLFxuICAgIH0pO1xuICAgIGlmICh0aGlzLnByb3BzLmRlYnVnICE9PSBmYWxzZSkge1xuICAgICAgZm4uYWRkRW52aXJvbm1lbnQoXCJERUJVR1wiLCBcIjFcIik7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldCkge1xuICAgICAgdGhpcy5wcm9wcy5zdGF0aWNBc3NldHNCdWNrZXQuZ3JhbnRSZWFkV3JpdGUoZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm47XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUN1c3RvbVJlc291cmNlKCkge1xuICAgIGNvbnN0IHJvb3QgPSBcIi9hcHBcIjtcbiAgICBjb25zdCBhY3Rpb25zOiBTdGF0aWNBc3NldHNDdXN0b21SZXNvdXJjZVByb3BlcnRpZXNbXCJhY3Rpb25zXCJdID0gW107XG4gICAgaWYgKHRoaXMucHJvcHMuc3RhdGljQXNzZXRzQnVja2V0Py5idWNrZXROYW1lKSB7XG4gICAgICAvLyBQcmVwYXJlIHRoZSBkZXN0aW5hdGlvbiBrZXkgcHJlZml4IHdpdGggYmFzZVBhdGggd2hlbiBhdmFpbGFibGVcbiAgICAgIGNvbnN0IHN0YXRpY0tleVByZWZpeCA9IHRoaXMucHJvcHMuYmFzZVBhdGhcbiAgICAgICAgPyBgJHt0aGlzLnByb3BzLmJhc2VQYXRoLnJlcGxhY2UoL15cXC8vLCBcIlwiKX0vX25leHQvc3RhdGljYFxuICAgICAgICA6IFwiX25leHQvc3RhdGljXCI7XG5cbiAgICAgIGFjdGlvbnMucHVzaChcbiAgICAgICAgLy8gc3RhdGljIGZpbGVzXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiBcImZzLXRvLXMzXCIsXG4gICAgICAgICAgc291cmNlUGF0aDogam9pbihyb290LCBTVEFUSUNfUEFUSCksXG4gICAgICAgICAgZGVzdGluYXRpb25CdWNrZXROYW1lOiB0aGlzLnByb3BzLnN0YXRpY0Fzc2V0c0J1Y2tldC5idWNrZXROYW1lLFxuICAgICAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBzdGF0aWNLZXlQcmVmaXgsXG4gICAgICAgIH0sXG4gICAgICAgIC8vIHB1YmxpYyBkaXJlY3RvcnkgdG8gczMgZm9yIENsb3VkRnJvbnQgLT4gUzNcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6IFwiZnMtdG8tczNcIixcbiAgICAgICAgICBzb3VyY2VQYXRoOiBqb2luKHJvb3QsIFBVQkxJQ19QQVRIKSxcbiAgICAgICAgICBkZXN0aW5hdGlvbkJ1Y2tldE5hbWU6IHRoaXMucHJvcHMuc3RhdGljQXNzZXRzQnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH1cbiAgICBhY3Rpb25zLnB1c2goXG4gICAgICAvLyBmdWxsIHJvdXRlIGNhY2hlIC0gaHR0cHM6Ly9uZXh0anMub3JnL2RvY3MvYXBwL2J1aWxkaW5nLXlvdXItYXBwbGljYXRpb24vY2FjaGluZyNmdWxsLXJvdXRlLWNhY2hlXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFwiZnMtdG8tZnNcIixcbiAgICAgICAgc291cmNlUGF0aDogam9pbihcbiAgICAgICAgICByb290LFxuICAgICAgICAgIFwiLm5leHRcIixcbiAgICAgICAgICBcInN0YW5kYWxvbmVcIixcbiAgICAgICAgICB0aGlzLnByb3BzLnJlbGF0aXZlUGF0aFRvUGFja2FnZSB8fCBcIlwiLFxuICAgICAgICAgIEZVTExfUk9VVEVfQ0FDSEVfUEFUSCxcbiAgICAgICAgKSxcbiAgICAgICAgZGVzdGluYXRpb25QYXRoOiBqb2luKFxuICAgICAgICAgIE1PVU5UX1BBVEgsXG4gICAgICAgICAgdGhpcy5wcm9wcy5idWlsZElkLFxuICAgICAgICAgIEZVTExfUk9VVEVfQ0FDSEVfUEFUSCxcbiAgICAgICAgKSxcbiAgICAgICAgLy8gb25seSBmaWxlcyB3aXRoIHRoZXNlIGV4dGVuc2lvbnMgYXJlIG5lZWRlZCBpbiBFRlMgRmlsZVN5c3RlbSBjYWNoZVxuICAgICAgICAvLyBzaW5jZSB0aGVzZSBmaWxlcyBhcmUgdGhlIG9ubHkgb25lcyB1cGRhdGVkIGJ5IE5leHQuanMgZHVyaW5nIHJ1bnRpbWUuXG4gICAgICAgIC8vIG90aGVyIGZpbGVzIGxpa2UgLmpzIGFuZCAubmZ0Lmpzb24gZmlsZXMgYXJlIHN0YXRpYyBwZXIgZGVwbG95bWVudFxuICAgICAgICBpbmNsdWRlRXh0ZW5zaW9uczogW1wiYm9keVwiLCBcImh0bWxcIiwgXCJyc2NcIiwgXCJtZXRhXCJdLFxuICAgICAgfSxcbiAgICAgIC8vIGFmdGVyIGBuZXh0IGJ1aWxkYCBkYXRhIGNhY2hlIGh0dHBzOi8vbmV4dGpzLm9yZy9kb2NzL2FwcC9idWlsZGluZy15b3VyLWFwcGxpY2F0aW9uL2NhY2hpbmcjZGF0YS1jYWNoZVxuICAgICAgLy8gZXhpc3RzIGF0IHRvcCBsZXZlbCAubmV4dC9jYWNoZSBzbyB3ZSBuZWVkIHRvIGNvcHkgaW50byByZWxhdGl2ZVBhdGhUb1BhY2thZ2VcbiAgICAgIC8vIG5vcm1hbGl6ZWQgcGF0aFxuICAgICAge1xuICAgICAgICB0eXBlOiBcImZzLXRvLWZzXCIsXG4gICAgICAgIHNvdXJjZVBhdGg6IGpvaW4ocm9vdCwgREFUQV9DQUNIRV9QQVRIKSxcbiAgICAgICAgZGVzdGluYXRpb25QYXRoOiBqb2luKE1PVU5UX1BBVEgsIHRoaXMucHJvcHMuYnVpbGRJZCwgREFUQV9DQUNIRV9QQVRIKSxcbiAgICAgIH0sXG4gICAgICAvLyBwdWJsaWMgZGlyZWN0b3J5IHRvIEVGUyBmb3IgbmVlZGVkIG9wdGltaXppbmcgaW1hZ2VzIGluIHB1YmxpYyBkaXJlY3RvcnlcbiAgICAgIC8vIHdlIGRvbid0IGxvYWQgdGhlc2UgaW50byBjb21wdXRlIHRvIHNhdmUgb24gaW1hZ2Ugc2l6ZVxuICAgICAge1xuICAgICAgICB0eXBlOiBcImZzLXRvLWZzXCIsXG4gICAgICAgIHNvdXJjZVBhdGg6IGpvaW4ocm9vdCwgUFVCTElDX1BBVEgpLFxuICAgICAgICBkZXN0aW5hdGlvblBhdGg6IGpvaW4oTU9VTlRfUEFUSCwgdGhpcy5wcm9wcy5idWlsZElkLCBQVUJMSUNfUEFUSCksXG4gICAgICB9LFxuICAgICAgLy8gaW1hZ2VzIGFyZSBvcHRpbWl6ZWQgYXQgcnVudGltZSBzbyBub3RoaW5nIHRvIGRlcGxveVxuICAgICk7XG4gICAgY29uc3QgcHJvcGVydGllczogU3RhdGljQXNzZXRzQ3VzdG9tUmVzb3VyY2VQcm9wZXJ0aWVzID0ge1xuICAgICAgYWN0aW9ucyxcbiAgICAgIGJ1aWxkSWQ6IHRoaXMucHJvcHMuYnVpbGRJZCxcbiAgICAgIC8vIGVuc3VyZXMgdGhpcyBDUiBydW5zIGVhY2ggdGltZSBuZXcgYnVpbGRlciBpbWFnZVxuICAgICAgYnVpbGRJbWFnZURpZ2VzdDogdGhpcy5wcm9wcy5idWlsZEltYWdlRGlnZXN0LFxuICAgICAgaW1hZ2VDYWNoZVBhdGg6IGpvaW4oTU9VTlRfUEFUSCwgdGhpcy5wcm9wcy5idWlsZElkLCBJTUFHRV9DQUNIRV9QQVRIKSxcbiAgICAgIG5leHRqc1R5cGU6IHRoaXMucHJvcHMubmV4dGpzVHlwZSxcbiAgICB9O1xuICAgIHJldHVybiBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgXCJDdXN0b21SZXNvdXJjZVwiLCB7XG4gICAgICBwcm9wZXJ0aWVzLFxuICAgICAgcmVzb3VyY2VUeXBlOiBcIkN1c3RvbTo6TmV4dGpzQXNzZXRzRGVwbG95bWVudFwiLFxuICAgICAgc2VydmljZVRva2VuOiB0aGlzLmRvY2tlckltYWdlRnVuY3Rpb24uZnVuY3Rpb25Bcm4sXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8uY3VzdG9tUmVzb3VyY2VQcm9wcyxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -6,9 +6,7 @@ RUN apk add --no-cache libc6-compat
|
|
|
6
6
|
WORKDIR /app
|
|
7
7
|
# It's preferrable to only copy package.json's and lockfiles, install, and then
|
|
8
8
|
# copy the rest of the code to efficiently utilize build cache. We don't do that
|
|
9
|
-
# here because it's highly customized based on a projects setup.
|
|
10
|
-
# developers use `overrides.nextjs[GlobalFunctions].nextjsBuildProps.builderImageProps.srcDockerfilePath`
|
|
11
|
-
# to optimize for their setup.
|
|
9
|
+
# here because it's highly customized based on a projects setup. See cdk-nextjs/examples/turbo.
|
|
12
10
|
COPY . .
|
|
13
11
|
# Install dependencies based on the preferred package manager
|
|
14
12
|
RUN \
|
|
@@ -18,8 +16,14 @@ RUN \
|
|
|
18
16
|
else echo "Lockfile not found." && exit 1; \
|
|
19
17
|
fi
|
|
20
18
|
ARG BUILD_COMMAND
|
|
21
|
-
ARG
|
|
22
|
-
RUN
|
|
23
|
-
RUN
|
|
24
|
-
#
|
|
25
|
-
|
|
19
|
+
ARG RELATIVE_PATH_TO_PACKAGE
|
|
20
|
+
RUN cd $RELATIVE_PATH_TO_PACKAGE && {{INJECT_CDK_NEXTJS_BUILD_ENV_VARS}} $BUILD_COMMAND
|
|
21
|
+
RUN rm -rf node_modules && \
|
|
22
|
+
# remove pnpm cache if exists
|
|
23
|
+
command -v pnpm >/dev/null 2>&1 && rm -rf $(pnpm store path) || echo "pnpm not installed, skipping cache cleanup" && \
|
|
24
|
+
# .next/cache/webpack used to speed up builds on subsequent `next build`
|
|
25
|
+
rm -rf $RELATIVE_PATH_TO_PACKAGE/.next/cache/webpack && \
|
|
26
|
+
# .next/trace used for debugging purposes
|
|
27
|
+
rm $RELATIVE_PATH_TO_PACKAGE/.next/trace && \
|
|
28
|
+
# not needed since we use .next/server in standalone
|
|
29
|
+
rm -rf $RELATIVE_PATH_TO_PACKAGE/.next/server
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
22
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
23
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
24
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
25
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
26
|
+
mod
|
|
27
|
+
));
|
|
28
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
|
+
|
|
30
|
+
// src/nextjs-build/cdk-nextjs-cache-handler.ts
|
|
31
|
+
var cdk_nextjs_cache_handler_exports = {};
|
|
32
|
+
__export(cdk_nextjs_cache_handler_exports, {
|
|
33
|
+
default: () => CdkNextjsCacheHandler
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(cdk_nextjs_cache_handler_exports);
|
|
36
|
+
var import_file_system_cache = __toESM(require("next/dist/server/lib/incremental-cache/file-system-cache"));
|
|
37
|
+
|
|
38
|
+
// src/constants.ts
|
|
39
|
+
var CACHE_PATH = ".next/cache";
|
|
40
|
+
var DATA_CACHE_PATH = `${CACHE_PATH}/fetch-cache`;
|
|
41
|
+
var IMAGE_CACHE_PATH = `${CACHE_PATH}/images`;
|
|
42
|
+
var SERVER_DIST_PATH = ".next/server";
|
|
43
|
+
var FULL_ROUTE_CACHE_PATH = `${SERVER_DIST_PATH}/app`;
|
|
44
|
+
var CDK_NEXTJS_SERVER_DIST_DIR_ENV_VAR_NAME = "CDK_NEXTJS_SERVER_DIST_DIR";
|
|
45
|
+
|
|
46
|
+
// src/nextjs-build/cdk-nextjs-cache-handler.ts
|
|
47
|
+
var CdkNextjsCacheHandler = class extends import_file_system_cache.default {
|
|
48
|
+
constructor(options) {
|
|
49
|
+
const cdkNextjsServerDistDir = process.env[CDK_NEXTJS_SERVER_DIST_DIR_ENV_VAR_NAME];
|
|
50
|
+
if (!cdkNextjsServerDistDir) {
|
|
51
|
+
throw new Error(
|
|
52
|
+
`${CDK_NEXTJS_SERVER_DIST_DIR_ENV_VAR_NAME} environment variable not set`
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
super({ ...options, serverDistDir: cdkNextjsServerDistDir });
|
|
56
|
+
}
|
|
57
|
+
get(cacheKey, ctx) {
|
|
58
|
+
return super.get(cacheKey, ctx);
|
|
59
|
+
}
|
|
60
|
+
set(pathname, data, ctx) {
|
|
61
|
+
return super.set(pathname, data, ctx);
|
|
62
|
+
}
|
|
63
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { CacheHandlerValue } from "next/dist/server/lib/incremental-cache";
|
|
2
|
+
import FileSystemCache from "next/dist/server/lib/incremental-cache/file-system-cache";
|
|
3
|
+
import { IncrementalCacheKindHint, IncrementalCacheValue } from "next/dist/server/response-cache";
|
|
4
|
+
export default class CdkNextjsCacheHandler extends FileSystemCache {
|
|
5
|
+
constructor(options: ConstructorParameters<typeof FileSystemCache>[0]);
|
|
6
|
+
get(cacheKey: string, ctx?: {
|
|
7
|
+
kindHint?: IncrementalCacheKindHint;
|
|
8
|
+
revalidate?: number | false;
|
|
9
|
+
fetchUrl?: string;
|
|
10
|
+
fetchIdx?: number;
|
|
11
|
+
tags?: string[];
|
|
12
|
+
softTags?: string[];
|
|
13
|
+
} | undefined): Promise<CacheHandlerValue | null>;
|
|
14
|
+
set(pathname: string, data: IncrementalCacheValue | null, ctx: {
|
|
15
|
+
revalidate?: number | false;
|
|
16
|
+
fetchCache?: boolean;
|
|
17
|
+
fetchUrl?: string;
|
|
18
|
+
fetchIdx?: number;
|
|
19
|
+
tags?: string[];
|
|
20
|
+
}): Promise<void>;
|
|
21
|
+
}
|