cdk-nextjs 0.0.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 +13811 -0
- package/.prettierrc +0 -0
- package/API.md +9694 -0
- package/LICENSE +202 -0
- package/README.md +137 -0
- package/THIRD-PARTY-LICENSES.md +31 -0
- package/assets/lambdas/assets-deployment/assets-deployment.lambda/assets-deployment.Dockerfile +18 -0
- package/assets/lambdas/assets-deployment/assets-deployment.lambda/index.js +8831 -0
- package/assets/lambdas/revalidate/revalidate.lambda/index.js +67 -0
- package/assets/lambdas/sign-fn-url/sign-fn-url.lambda/index.js +2002 -0
- package/examples/README.md +14 -0
- package/lib/common.d.ts +23 -0
- package/lib/common.js +28 -0
- package/lib/generated-structs/OptionalApplicationLoadBalancedTaskImageOptions.d.ts +106 -0
- package/lib/generated-structs/OptionalApplicationLoadBalancedTaskImageOptions.js +3 -0
- package/lib/generated-structs/OptionalCloudFrontFunctionProps.d.ts +43 -0
- package/lib/generated-structs/OptionalCloudFrontFunctionProps.js +3 -0
- package/lib/generated-structs/OptionalClusterProps.d.ts +49 -0
- package/lib/generated-structs/OptionalClusterProps.js +3 -0
- package/lib/generated-structs/OptionalDistributionProps.d.ts +155 -0
- package/lib/generated-structs/OptionalDistributionProps.js +3 -0
- package/lib/generated-structs/OptionalDockerImageAssetProps.d.ts +124 -0
- package/lib/generated-structs/OptionalDockerImageAssetProps.js +3 -0
- package/lib/generated-structs/OptionalDockerImageFunctionProps.d.ts +399 -0
- package/lib/generated-structs/OptionalDockerImageFunctionProps.js +3 -0
- package/lib/generated-structs/OptionalEdgeFunctionProps.d.ts +428 -0
- package/lib/generated-structs/OptionalEdgeFunctionProps.js +3 -0
- package/lib/generated-structs/OptionalFunctionProps.d.ts +422 -0
- package/lib/generated-structs/OptionalFunctionProps.js +3 -0
- package/lib/generated-structs/OptionalFunctionUrlProps.d.ts +30 -0
- package/lib/generated-structs/OptionalFunctionUrlProps.js +3 -0
- package/lib/generated-structs/OptionalNextjsAssetsDeploymentProps.d.ts +45 -0
- package/lib/generated-structs/OptionalNextjsAssetsDeploymentProps.js +3 -0
- package/lib/generated-structs/OptionalNextjsBuildProps.d.ts +30 -0
- package/lib/generated-structs/OptionalNextjsBuildProps.js +3 -0
- package/lib/generated-structs/OptionalNextjsContainersProps.d.ts +43 -0
- package/lib/generated-structs/OptionalNextjsContainersProps.js +3 -0
- package/lib/generated-structs/OptionalNextjsDistributionProps.d.ts +50 -0
- package/lib/generated-structs/OptionalNextjsDistributionProps.js +3 -0
- package/lib/generated-structs/OptionalNextjsFileSystemProps.d.ts +15 -0
- package/lib/generated-structs/OptionalNextjsFileSystemProps.js +3 -0
- package/lib/generated-structs/OptionalNextjsInvalidationProps.d.ts +17 -0
- package/lib/generated-structs/OptionalNextjsInvalidationProps.js +3 -0
- package/lib/generated-structs/OptionalNextjsVpcProps.d.ts +21 -0
- package/lib/generated-structs/OptionalNextjsVpcProps.js +3 -0
- package/lib/generated-structs/OptionalS3OriginProps.d.ts +64 -0
- package/lib/generated-structs/OptionalS3OriginProps.js +3 -0
- package/lib/generated-structs/OptionalVpcProps.d.ts +224 -0
- package/lib/generated-structs/OptionalVpcProps.js +3 -0
- package/lib/index.d.ts +35 -0
- package/lib/index.js +32 -0
- package/lib/lambdas/assets-deployment/assets-deployment-function.d.ts +13 -0
- package/lib/lambdas/assets-deployment/assets-deployment-function.js +23 -0
- package/lib/lambdas/assets-deployment/assets-deployment.lambda.d.ts +2 -0
- package/lib/lambdas/assets-deployment/assets-deployment.lambda.js +62 -0
- package/lib/lambdas/assets-deployment/common.d.ts +8 -0
- package/lib/lambdas/assets-deployment/common.js +32 -0
- package/lib/lambdas/assets-deployment/fs-to-fs.d.ts +2 -0
- package/lib/lambdas/assets-deployment/fs-to-fs.js +9 -0
- package/lib/lambdas/assets-deployment/fs-to-s3.d.ts +2 -0
- package/lib/lambdas/assets-deployment/fs-to-s3.js +45 -0
- package/lib/lambdas/assets-deployment/prune-s3.d.ts +15 -0
- package/lib/lambdas/assets-deployment/prune-s3.js +42 -0
- package/lib/lambdas/assets-deployment/s3.d.ts +2 -0
- package/lib/lambdas/assets-deployment/s3.js +7 -0
- package/lib/lambdas/assets-deployment/utils.d.ts +18 -0
- package/lib/lambdas/assets-deployment/utils.js +35 -0
- package/lib/lambdas/revalidate/revalidate-function.d.ts +13 -0
- package/lib/lambdas/revalidate/revalidate-function.js +23 -0
- package/lib/lambdas/revalidate/revalidate.lambda.d.ts +2 -0
- package/lib/lambdas/revalidate/revalidate.lambda.js +53 -0
- package/lib/lambdas/sign-fn-url/sign-fn-url-function.d.ts +13 -0
- package/lib/lambdas/sign-fn-url/sign-fn-url-function.js +23 -0
- package/lib/lambdas/sign-fn-url/sign-fn-url.lambda.d.ts +9 -0
- package/lib/lambdas/sign-fn-url/sign-fn-url.lambda.js +35 -0
- package/lib/lambdas/sign-fn-url/sign-request.d.ts +28 -0
- package/lib/lambdas/sign-fn-url/sign-request.js +119 -0
- package/lib/lambdas/sign-fn-url/sign-request.test.d.ts +1 -0
- package/lib/lambdas/sign-fn-url/sign-request.test.js +129 -0
- package/lib/nextjs-assets-deployment.d.ts +116 -0
- package/lib/nextjs-assets-deployment.js +93 -0
- package/lib/nextjs-build/add-cache-handler.d.ts +1 -0
- package/lib/nextjs-build/add-cache-handler.js +23 -0
- package/lib/nextjs-build/add-cache-handler.mjs +18 -0
- package/lib/nextjs-build/builder.Dockerfile +29 -0
- package/lib/nextjs-build/cache-handler.cjs +21513 -0
- package/lib/nextjs-build/cache-handler.d.ts +6 -0
- package/lib/nextjs-build/cache-handler.js +22 -0
- package/lib/nextjs-build/global-containers.Dockerfile +45 -0
- package/lib/nextjs-build/global-functions.Dockerfile +46 -0
- package/lib/nextjs-build/nextjs-build.d.ts +150 -0
- package/lib/nextjs-build/nextjs-build.js +220 -0
- package/lib/nextjs-build/regional-containers.Dockerfile +45 -0
- package/lib/nextjs-build/symlink-full-route-cache.d.ts +1 -0
- package/lib/nextjs-build/symlink-full-route-cache.js +37 -0
- package/lib/nextjs-build/symlink-full-route-cache.mjs +23 -0
- package/lib/nextjs-compute/nextjs-compute-base-props.d.ts +8 -0
- package/lib/nextjs-compute/nextjs-compute-base-props.js +3 -0
- package/lib/nextjs-compute/nextjs-containers.d.ts +43 -0
- package/lib/nextjs-compute/nextjs-containers.js +149 -0
- package/lib/nextjs-compute/nextjs-functions.d.ts +23 -0
- package/lib/nextjs-compute/nextjs-functions.js +57 -0
- package/lib/nextjs-distribution.d.ts +120 -0
- package/lib/nextjs-distribution.js +362 -0
- package/lib/nextjs-file-system.d.ts +42 -0
- package/lib/nextjs-file-system.js +74 -0
- package/lib/nextjs-invalidation.d.ts +19 -0
- package/lib/nextjs-invalidation.js +52 -0
- package/lib/nextjs-revalidation.d.ts +30 -0
- package/lib/nextjs-revalidation.js +65 -0
- package/lib/nextjs-static-assets.d.ts +21 -0
- package/lib/nextjs-static-assets.js +32 -0
- package/lib/nextjs-vpc.d.ts +42 -0
- package/lib/nextjs-vpc.js +64 -0
- package/lib/root-constructs/nextjs-base-overrides.d.ts +26 -0
- package/lib/root-constructs/nextjs-base-overrides.js +3 -0
- package/lib/root-constructs/nextjs-base-props.d.ts +56 -0
- package/lib/root-constructs/nextjs-base-props.js +3 -0
- package/lib/root-constructs/nextjs-global-containers.d.ts +74 -0
- package/lib/root-constructs/nextjs-global-containers.js +125 -0
- package/lib/root-constructs/nextjs-global-functions.d.ts +76 -0
- package/lib/root-constructs/nextjs-global-functions.js +131 -0
- package/lib/root-constructs/nextjs-regional-containers.d.ts +43 -0
- package/lib/root-constructs/nextjs-regional-containers.js +92 -0
- package/package.json +165 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.NextjsGlobalContainers = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const constructs_1 = require("constructs");
|
|
7
|
+
const common_1 = require("../common");
|
|
8
|
+
const nextjs_assets_deployment_1 = require("../nextjs-assets-deployment");
|
|
9
|
+
const nextjs_build_1 = require("../nextjs-build/nextjs-build");
|
|
10
|
+
const nextjs_containers_1 = require("../nextjs-compute/nextjs-containers");
|
|
11
|
+
const nextjs_distribution_1 = require("../nextjs-distribution");
|
|
12
|
+
const nextjs_file_system_1 = require("../nextjs-file-system");
|
|
13
|
+
const nextjs_invalidation_1 = require("../nextjs-invalidation");
|
|
14
|
+
const nextjs_static_assets_1 = require("../nextjs-static-assets");
|
|
15
|
+
const nextjs_vpc_1 = require("../nextjs-vpc");
|
|
16
|
+
/**
|
|
17
|
+
* Deploy Next.js globally distributed with containers. Uses [CloudFront
|
|
18
|
+
* Distribution](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html)
|
|
19
|
+
* as Content Delivery Network (CDN) for global distribution and [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)
|
|
20
|
+
* for containers.
|
|
21
|
+
*/
|
|
22
|
+
class NextjsGlobalContainers extends constructs_1.Construct {
|
|
23
|
+
constructor(scope, id, props) {
|
|
24
|
+
super(scope, id);
|
|
25
|
+
this.nextjsType = common_1.NextjsType.GLOBAL_CONTAINERS;
|
|
26
|
+
this.props = props;
|
|
27
|
+
this.nextjsBuild = this.createNextjsBuild();
|
|
28
|
+
this.nextjsStaticAssets = this.createNextjsStaticAssets();
|
|
29
|
+
this.nextjsVpc = this.createVpc();
|
|
30
|
+
this.nextjsFileSystem = this.createNextjsFileSystem();
|
|
31
|
+
this.nextjsAssetsDeployment = this.createNextjsAssetsDeployment();
|
|
32
|
+
this.nextjsContainers = this.createNextjsContainers();
|
|
33
|
+
this.nextjsFileSystem.allowCompute({
|
|
34
|
+
connections: this.nextjsContainers.albFargateService.service.connections,
|
|
35
|
+
role: this.nextjsContainers.albFargateService.taskDefinition.taskRole,
|
|
36
|
+
});
|
|
37
|
+
this.nextjsDistribution = this.createNextjsDistribution();
|
|
38
|
+
this.nextjsInvalidation = this.createNextjsInvalidation();
|
|
39
|
+
}
|
|
40
|
+
createNextjsBuild() {
|
|
41
|
+
return new nextjs_build_1.NextjsBuild(this, "NextjsBuild", {
|
|
42
|
+
buildCommand: this.props.buildCommand,
|
|
43
|
+
buildContext: this.props.buildContext,
|
|
44
|
+
nextjsType: this.nextjsType,
|
|
45
|
+
relativePathToWorkspace: this.props.relativePathToWorkspace,
|
|
46
|
+
overrides: this.props.overrides?.nextjsBuild,
|
|
47
|
+
...this.props.overrides?.nextjsGlobalContainers?.nextjsBuildProps,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
createNextjsStaticAssets() {
|
|
51
|
+
return new nextjs_static_assets_1.NextjsStaticAssets(this, "NextjsStaticAssets", {
|
|
52
|
+
overrides: this.props.overrides?.nextjsStaticAssets,
|
|
53
|
+
...this.props.overrides?.nextjsGlobalContainers?.nextjsStaticAssetsProps,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
createVpc() {
|
|
57
|
+
return new nextjs_vpc_1.NextjsVpc(this, "NextjsVpc", {
|
|
58
|
+
nextjsType: this.nextjsType,
|
|
59
|
+
overrides: this.props.overrides?.nextjsVpc,
|
|
60
|
+
...this.props.overrides?.nextjsGlobalContainers?.nextjsVpcProps,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
createNextjsFileSystem() {
|
|
64
|
+
return new nextjs_file_system_1.NextjsFileSystem(this, "NextjsFileSystem", {
|
|
65
|
+
vpc: this.nextjsVpc.vpc,
|
|
66
|
+
overrides: this.props.overrides?.nextjsFileSystem,
|
|
67
|
+
...this.props.overrides?.nextjsGlobalContainers?.nextjsFileSystemProps,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
createNextjsAssetsDeployment() {
|
|
71
|
+
return new nextjs_assets_deployment_1.NextjsAssetsDeployment(this, "NextjsAssetsDeployment", {
|
|
72
|
+
accessPoint: this.nextjsFileSystem.accessPoint,
|
|
73
|
+
buildImageDigest: this.nextjsBuild.buildImageDigest,
|
|
74
|
+
dockerImageCode: this.nextjsBuild.imageForNextjsAssetsDeployment,
|
|
75
|
+
containerMountPathForEfs: this.nextjsBuild.containerMountPathForEfs,
|
|
76
|
+
overrides: this.props.overrides?.nextjsAssetsDeployment,
|
|
77
|
+
relativePathToWorkspace: this.props.relativePathToWorkspace,
|
|
78
|
+
staticAssetsBucket: this.nextjsStaticAssets.bucket,
|
|
79
|
+
vpc: this.nextjsVpc.vpc,
|
|
80
|
+
...this.props.overrides?.nextjsGlobalContainers
|
|
81
|
+
?.nextjsAssetsDeploymentProps,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
createNextjsContainers() {
|
|
85
|
+
if (!this.nextjsBuild.imageForNextjsContainers) {
|
|
86
|
+
throw new Error("nextjsBuild.dockerImageAsset is undefined");
|
|
87
|
+
}
|
|
88
|
+
return new nextjs_containers_1.NextjsContainers(this, "NextjsContainers", {
|
|
89
|
+
accessPoint: this.nextjsFileSystem.accessPoint,
|
|
90
|
+
containerMountPathForEfs: this.nextjsBuild.containerMountPathForEfs,
|
|
91
|
+
dockerImageAsset: this.nextjsBuild.imageForNextjsContainers,
|
|
92
|
+
fileSystem: this.nextjsFileSystem.fileSystem,
|
|
93
|
+
healthCheckPath: this.props.healthCheckPath,
|
|
94
|
+
nextjsType: this.nextjsType,
|
|
95
|
+
relativeEntrypointPath: this.nextjsBuild.relativePathToEntrypoint,
|
|
96
|
+
overrides: this.props.overrides?.nextjsContainers,
|
|
97
|
+
vpc: this.nextjsVpc.vpc,
|
|
98
|
+
...this.props.overrides?.nextjsGlobalContainers?.nextjsContainersProps,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
createNextjsDistribution() {
|
|
102
|
+
return new nextjs_distribution_1.NextjsDistribution(this, "NextjsDistribution", {
|
|
103
|
+
assetsBucket: this.nextjsStaticAssets.bucket,
|
|
104
|
+
basePath: this.props.basePath,
|
|
105
|
+
certificate: this.nextjsContainers.albFargateService.certificate,
|
|
106
|
+
distribution: this.props.distribution,
|
|
107
|
+
dynamicUrl: this.nextjsContainers.url,
|
|
108
|
+
nextjsType: this.nextjsType,
|
|
109
|
+
overrides: this.props.overrides?.nextjsDistribution,
|
|
110
|
+
publicDirEntries: this.nextjsBuild.publicDirEntries,
|
|
111
|
+
...this.props.overrides?.nextjsGlobalContainers?.nextjsDistributionProps,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
createNextjsInvalidation() {
|
|
115
|
+
return new nextjs_invalidation_1.NextjsInvalidation(this, "NextjsInvalidation", {
|
|
116
|
+
distribution: this.nextjsDistribution.distribution,
|
|
117
|
+
overrides: this.props.overrides?.nextjsInvalidation,
|
|
118
|
+
...this.props.overrides?.nextjsGlobalContainers?.nextjsInvalidationProps,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.NextjsGlobalContainers = NextjsGlobalContainers;
|
|
123
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
124
|
+
NextjsGlobalContainers[_a] = { fqn: "cdk-nextjs.NextjsGlobalContainers", version: "0.0.0" };
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWdsb2JhbC1jb250YWluZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jvb3QtY29uc3RydWN0cy9uZXh0anMtZ2xvYmFsLWNvbnRhaW5lcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSwyQ0FBdUM7QUFNdkMsc0NBQXVDO0FBSXZDLDBFQUFxRTtBQUNyRSwrREFBMkQ7QUFDM0QsMkVBRzZDO0FBQzdDLGdFQUdnQztBQUNoQyw4REFBeUQ7QUFDekQsZ0VBR2dDO0FBRWhDLGtFQUlpQztBQUNqQyw4Q0FBMEM7QUFxQzFDOzs7OztHQUtHO0FBQ0gsTUFBYSxzQkFBdUIsU0FBUSxzQkFBUztJQWFuRCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFrQztRQUVsQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBUlgsZUFBVSxHQUFHLG1CQUFVLENBQUMsaUJBQWlCLENBQUM7UUFTaEQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNsRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQztZQUNqQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFD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QUMsVUFBVTtZQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsa0JBQWtCO1lBQ25ELGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCO1lBQ25ELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCO1NBQ3pFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTyx3QkFBd0I7UUFDOUIsT0FBTyxJQUFJLHdDQUFrQixDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUN4RCxZQUFZLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVk7WUFDbEQsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGtCQUFrQjtZQUNuRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHNCQUFzQixFQUFFLHVCQUF1QjtTQUN6RSxDQUFDLENBQUM7SUFDTCxDQUFDOztBQWxISCx3REFtSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXN0cmlidXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBCYXNlTmV4dGpzQ29uc3RydWN0T3ZlcnJpZGVzLFxuICBCYXNlTmV4dGpzT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi9uZXh0anMtYmFzZS1vdmVycmlkZXNcIjtcbmltcG9ydCB7IE5leHRqc0Jhc2VQcm9wcyB9IGZyb20gXCIuL25leHRqcy1iYXNlLXByb3BzXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuaW1wb3J0IHsgT3B0aW9uYWxOZXh0anNDb250YWluZXJzUHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNDb250YWluZXJzUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNEaXN0cmlidXRpb25Qcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxOZXh0anNJbnZhbGlkYXRpb25Qcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbE5leHRqc0ludmFsaWRhdGlvblByb3BzXCI7XG5pbXBvcnQgeyBOZXh0anNBc3NldHNEZXBsb3ltZW50IH0gZnJvbSBcIi4uL25leHRqcy1hc3NldHMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHsgTmV4dGpzQnVpbGQgfSBmcm9tIFwiLi4vbmV4dGpzLWJ1aWxkL25leHRqcy1idWlsZFwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzQ29udGFpbmVycyxcbiAgTmV4dGpzQ29udGFpbmVyc092ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1jb21wdXRlL25leHRqcy1jb250YWluZXJzXCI7XG5pbXBvcnQge1xuICBOZXh0anNEaXN0cmlidXRpb24sXG4gIE5leHRqc0Rpc3RyaWJ1dGlvbk92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1kaXN0cmlidXRpb25cIjtcbmltcG9ydCB7IE5leHRqc0ZpbGVTeXN0ZW0gfSBmcm9tIFwiLi4vbmV4dGpzLWZpbGUtc3lzdGVtXCI7XG5pbXBvcnQge1xuICBOZXh0anNJbnZhbGlkYXRpb24sXG4gIE5leHRqc0ludmFsaWRhdGlvbk92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1pbnZhbGlkYXRpb25cIjtcbmltcG9ydCB7IE5leHRqc1JldmFsaWRhdGlvblByb3BzIH0gZnJvbSBcIi4uL25leHRqcy1yZXZhbGlkYXRpb25cIjtcbmltcG9ydCB7XG4gIE5leHRqc1N0YXRpY0Fzc2V0cyxcbiAgTmV4dGpzU3RhdGljQXNzZXRzT3ZlcnJpZGVzLFxuICBOZXh0anNTdGF0aWNBc3NldHNQcm9wcyxcbn0gZnJvbSBcIi4uL25leHRqcy1zdGF0aWMtYXNzZXRzXCI7XG5pbXBvcnQgeyBOZXh0anNWcGMgfSBmcm9tIFwiLi4vbmV4dGpzLXZwY1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0dsb2JhbENvbnRhaW5lcnNDb25zdHJ1Y3RPdmVycmlkZXNcbiAgZXh0ZW5kcyBCYXNlTmV4dGpzQ29uc3RydWN0T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgbmV4dGpzQ29udGFpbmVyc1Byb3BzPzogT3B0aW9uYWxOZXh0anNDb250YWluZXJzUHJvcHM7XG4gIHJlYWRvbmx5IG5leHRqc0Rpc3RyaWJ1dGlvblByb3BzPzogT3B0aW9uYWxOZXh0anNEaXN0cmlidXRpb25Qcm9wcztcbiAgcmVhZG9ubHkgbmV4dGpzUmV2YWxpZGF0aW9uUHJvcHM/OiBOZXh0anNSZXZhbGlkYXRpb25Qcm9wcztcbiAgcmVhZG9ubHkgbmV4dGpzU3RhdGljQXNzZXRzUHJvcHM/OiBOZXh0anNTdGF0aWNBc3NldHNQcm9wcztcbiAgcmVhZG9ubHkgbmV4dGpzSW52YWxpZGF0aW9uUHJvcHM/OiBPcHRpb25hbE5leHRqc0ludmFsaWRhdGlvblByb3BzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0dsb2JhbENvbnRhaW5lcnNPdmVycmlkZXMgZXh0ZW5kcyBCYXNlTmV4dGpzT3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgbmV4dGpzR2xvYmFsQ29udGFpbmVycz86IE5leHRqc0dsb2JhbENvbnRhaW5lcnNDb25zdHJ1Y3RPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc0NvbnRhaW5lcnM/OiBOZXh0anNDb250YWluZXJzT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNEaXN0cmlidXRpb24/OiBOZXh0anNEaXN0cmlidXRpb25PdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc0ludmFsaWRhdGlvbj86IE5leHRqc0ludmFsaWRhdGlvbk92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzU3RhdGljQXNzZXRzPzogTmV4dGpzU3RhdGljQXNzZXRzT3ZlcnJpZGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0dsb2JhbENvbnRhaW5lcnNQcm9wcyBleHRlbmRzIE5leHRqc0Jhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBQcmVmaXggdG8gdGhlIFVSSSBwYXRoIHRoZSBhcHAgd2lsbCBiZSBzZXJ2ZWQgYXQuIEVzcGVjaWFsbHkgdXNlZnVsIHdoZW5cbiAgICogcGFzc2luZyBpbiB5b3VyIG93biBgZGlzdHJpYnV0aW9uYC5cbiAgICogQGV4YW1wbGUgXCIvbXktYmFzZS1wYXRoXCJcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VQYXRoPzogc3RyaW5nO1xuICAvKipcbiAgICogQnJpbmcgeW91ciBvd24gZGlzdHJpYnV0aW9uLiBDYW4gYmUgdXNlZCB3aXRoIGBiYXNlUGF0aGAgdG8gaG9zdCBtdWx0aXBsZVxuICAgKiBhcHBzIG9uIHRoZSBzYW1lIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uPzogRGlzdHJpYnV0aW9uO1xuICAvKipcbiAgICogT3ZlcnJpZGUgcHJvcHMgb2YgYW55IGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc0dsb2JhbENvbnRhaW5lcnNPdmVycmlkZXM7XG59XG5cbi8qKlxuICogRGVwbG95IE5leHQuanMgZ2xvYmFsbHkgZGlzdHJpYnV0ZWQgd2l0aCBjb250YWluZXJzLiBVc2VzIFtDbG91ZEZyb250XG4gKiBEaXN0cmlidXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td29ya2luZy13aXRoLmh0bWwpXG4gKiBhcyBDb250ZW50IERlbGl2ZXJ5IE5ldHdvcmsgKENETikgZm9yIGdsb2JhbCBkaXN0cmlidXRpb24gYW5kIFtBV1MgRmFyZ2F0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvQVdTX0ZhcmdhdGUuaHRtbClcbiAqIGZvciBjb250YWluZXJzLlxuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzR2xvYmFsQ29udGFpbmVycyBleHRlbmRzIENvbnN0cnVjdCB7XG4gIG5leHRqc0J1aWxkOiBOZXh0anNCdWlsZDtcbiAgbmV4dGpzU3RhdGljQXNzZXRzOiBOZXh0anNTdGF0aWNBc3NldHM7XG4gIG5leHRqc1ZwYzogTmV4dGpzVnBjO1xuICBuZXh0anNGaWxlU3lzdGVtOiBOZXh0anNGaWxlU3lzdGVtO1xuICBuZXh0anNBc3NldHNEZXBsb3ltZW50OiBOZXh0anNBc3NldHNEZXBsb3ltZW50O1xuICBuZXh0anNDb250YWluZXJzOiBOZXh0anNDb250YWluZXJzO1xuICBuZXh0anNEaXN0cmlidXRpb246IE5leHRqc0Rpc3RyaWJ1dGlvbjtcbiAgbmV4dGpzSW52YWxpZGF0aW9uOiBOZXh0anNJbnZhbGlkYXRpb247XG5cbiAgcHJpdmF0ZSBuZXh0anNUeXBlID0gTmV4dGpzVHlwZS5HTE9CQUxfQ09OVEFJTkVSUztcbiAgcHJpdmF0ZSBwcm9wczogTmV4dGpzR2xvYmFsQ29udGFpbmVyc1Byb3BzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogTmV4dGpzR2xvYmFsQ29udGFpbmVyc1Byb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLm5leHRqc0J1aWxkID0gdGhpcy5jcmVhdGVOZXh0anNCdWlsZCgpO1xuICAgIHRoaXMubmV4dGpzU3RhdGljQXNzZXRzID0gdGhpcy5jcmVhdGVOZXh0anNTdGF0aWNBc3NldHMoKTtcbiAgICB0aGlzLm5leHRqc1ZwYyA9IHRoaXMuY3JlYXRlVnBjKCk7XG4gICAgdGhpcy5uZXh0anNGaWxlU3lzdGVtID0gdGhpcy5jcmVhdGVOZXh0anNGaWxlU3lzdGVtKCk7XG4gICAgdGhpcy5uZXh0anNBc3NldHNEZXBsb3ltZW50ID0gdGhpcy5jcmVhdGVOZXh0anNBc3NldHNEZXBsb3ltZW50KCk7XG4gICAgdGhpcy5uZXh0anNDb250YWluZXJzID0gdGhpcy5jcmVhdGVOZXh0anNDb250YWluZXJzKCk7XG4gICAgdGhpcy5uZXh0anNGaWxlU3lzdGVtLmFsbG93Q29tcHV0ZSh7XG4gICAgICBjb25uZWN0aW9uczogdGhpcy5uZXh0anNDb250YWluZXJzLmFsYkZhcmdhdGVTZXJ2aWNlLnNlcnZpY2UuY29ubmVjdGlvbnMsXG4gICAgICByb2xlOiB0aGlzLm5leHRqc0NvbnRhaW5lcnMuYWxiRmFyZ2F0ZVNlcnZpY2UudGFza0RlZmluaXRpb24udGFza1JvbGUsXG4gICAgfSk7XG4gICAgdGhpcy5uZXh0anNEaXN0cmlidXRpb24gPSB0aGlzLmNyZWF0ZU5leHRqc0Rpc3RyaWJ1dGlvbigpO1xuICAgIHRoaXMubmV4dGpzSW52YWxpZGF0aW9uID0gdGhpcy5jcmVhdGVOZXh0anNJbnZhbGlkYXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzQnVpbGQoKSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNCdWlsZCh0aGlzLCBcIk5leHRqc0J1aWxkXCIsIHtcbiAgICAgIGJ1aWxkQ29tbWFuZDogdGhpcy5wcm9wcy5idWlsZENvbW1hbmQsXG4gICAgICBidWlsZENvbnRleHQ6IHRoaXMucHJvcHMuYnVpbGRDb250ZXh0LFxuICAgICAgbmV4dGpzVHlwZTogdGhpcy5uZXh0anNUeXBlLFxuICAgICAgcmVsYXRpdmVQYXRoVG9Xb3Jrc3BhY2U6IHRoaXMucHJvcHMucmVsYXRpdmVQYXRoVG9Xb3Jrc3BhY2UsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNCdWlsZCxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNHbG9iYWxDb250YWluZXJzPy5uZXh0anNCdWlsZFByb3BzLFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzU3RhdGljQXNzZXRzKCkge1xuICAgIHJldHVybiBuZXcgTmV4dGpzU3RhdGljQXNzZXRzKHRoaXMsIFwiTmV4dGpzU3RhdGljQXNzZXRzXCIsIHtcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc1N0YXRpY0Fzc2V0cyxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNHbG9iYWxDb250YWluZXJzPy5uZXh0anNTdGF0aWNBc3NldHNQcm9wcyxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZVZwYygpIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc1ZwYyh0aGlzLCBcIk5leHRqc1ZwY1wiLCB7XG4gICAgICBuZXh0anNUeXBlOiB0aGlzLm5leHRqc1R5cGUsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNWcGMsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzR2xvYmFsQ29udGFpbmVycz8ubmV4dGpzVnBjUHJvcHMsXG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNGaWxlU3lzdGVtKCkge1xuICAgIHJldHVybiBuZXcgTmV4dGpzRmlsZVN5c3RlbSh0aGlzLCBcIk5leHRqc0ZpbGVTeXN0ZW1cIiwge1xuICAgICAgdnBjOiB0aGlzLm5leHRqc1ZwYy52cGMsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNGaWxlU3lzdGVtLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0dsb2JhbENvbnRhaW5lcnM/Lm5leHRqc0ZpbGVTeXN0ZW1Qcm9wcyxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0Fzc2V0c0RlcGxveW1lbnQoKSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNBc3NldHNEZXBsb3ltZW50KHRoaXMsIFwiTmV4dGpzQXNzZXRzRGVwbG95bWVudFwiLCB7XG4gICAgICBhY2Nlc3NQb2ludDogdGhpcy5uZXh0anNGaWxlU3lzdGVtLmFjY2Vzc1BvaW50LFxuICAgICAgYnVpbGRJbWFnZURpZ2VzdDogdGhpcy5uZXh0anNCdWlsZC5idWlsZEltYWdlRGlnZXN0LFxuICAgICAgZG9ja2VySW1hZ2VDb2RlOiB0aGlzLm5leHRqc0J1aWxkLmltYWdlRm9yTmV4dGpzQXNzZXRzRGVwbG95bWVudCxcbiAgICAgIGNvbnRhaW5lck1vdW50UGF0aEZvckVmczogdGhpcy5uZXh0anNCdWlsZC5jb250YWluZXJNb3VudFBhdGhGb3JFZnMsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNBc3NldHNEZXBsb3ltZW50LFxuICAgICAgcmVsYXRpdmVQYXRoVG9Xb3Jrc3BhY2U6IHRoaXMucHJvcHMucmVsYXRpdmVQYXRoVG9Xb3Jrc3BhY2UsXG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXQ6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmJ1Y2tldCxcbiAgICAgIHZwYzogdGhpcy5uZXh0anNWcGMudnBjLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0dsb2JhbENvbnRhaW5lcnNcbiAgICAgICAgPy5uZXh0anNBc3NldHNEZXBsb3ltZW50UHJvcHMsXG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNDb250YWluZXJzKCkge1xuICAgIGlmICghdGhpcy5uZXh0anNCdWlsZC5pbWFnZUZvck5leHRqc0NvbnRhaW5lcnMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIm5leHRqc0J1aWxkLmRvY2tlckltYWdlQXNzZXQgaXMgdW5kZWZpbmVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE5leHRqc0NvbnRhaW5lcnModGhpcywgXCJOZXh0anNDb250YWluZXJzXCIsIHtcbiAgICAgIGFjY2Vzc1BvaW50OiB0aGlzLm5leHRqc0ZpbGVTeXN0ZW0uYWNjZXNzUG9pbnQsXG4gICAgICBjb250YWluZXJNb3VudFBhdGhGb3JFZnM6IHRoaXMubmV4dGpzQnVpbGQuY29udGFpbmVyTW91bnRQYXRoRm9yRWZzLFxuICAgICAgZG9ja2VySW1hZ2VBc3NldDogdGhpcy5uZXh0anNCdWlsZC5pbWFnZUZvck5leHRqc0NvbnRhaW5lcnMsXG4gICAgICBmaWxlU3lzdGVtOiB0aGlzLm5leHRqc0ZpbGVTeXN0ZW0uZmlsZVN5c3RlbSxcbiAgICAgIGhlYWx0aENoZWNrUGF0aDogdGhpcy5wcm9wcy5oZWFsdGhDaGVja1BhdGgsXG4gICAgICBuZXh0anNUeXBlOiB0aGlzLm5leHRqc1R5cGUsXG4gICAgICByZWxhdGl2ZUVudHJ5cG9pbnRQYXRoOiB0aGlzLm5leHRqc0J1aWxkLnJlbGF0aXZlUGF0aFRvRW50cnlwb2ludCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0NvbnRhaW5lcnMsXG4gICAgICB2cGM6IHRoaXMubmV4dGpzVnBjLnZwYyxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNHbG9iYWxDb250YWluZXJzPy5uZXh0anNDb250YWluZXJzUHJvcHMsXG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNEaXN0cmlidXRpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNEaXN0cmlidXRpb24odGhpcywgXCJOZXh0anNEaXN0cmlidXRpb25cIiwge1xuICAgICAgYXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBiYXNlUGF0aDogdGhpcy5wcm9wcy5iYXNlUGF0aCxcbiAgICAgIGNlcnRpZmljYXRlOiB0aGlzLm5leHRqc0NvbnRhaW5lcnMuYWxiRmFyZ2F0ZVNlcnZpY2UuY2VydGlmaWNhdGUsXG4gICAgICBkaXN0cmlidXRpb246IHRoaXMucHJvcHMuZGlzdHJpYnV0aW9uLFxuICAgICAgZHluYW1pY1VybDogdGhpcy5uZXh0anNDb250YWluZXJzLnVybCxcbiAgICAgIG5leHRqc1R5cGU6IHRoaXMubmV4dGpzVHlwZSxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0Rpc3RyaWJ1dGlvbixcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IHRoaXMubmV4dGpzQnVpbGQucHVibGljRGlyRW50cmllcyxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNHbG9iYWxDb250YWluZXJzPy5uZXh0anNEaXN0cmlidXRpb25Qcm9wcyxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0ludmFsaWRhdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0ludmFsaWRhdGlvbih0aGlzLCBcIk5leHRqc0ludmFsaWRhdGlvblwiLCB7XG4gICAgICBkaXN0cmlidXRpb246IHRoaXMubmV4dGpzRGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbixcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0ludmFsaWRhdGlvbixcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNHbG9iYWxDb250YWluZXJzPy5uZXh0anNJbnZhbGlkYXRpb25Qcm9wcyxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Distribution } from "aws-cdk-lib/aws-cloudfront";
|
|
2
|
+
import { Construct } from "constructs";
|
|
3
|
+
import { BaseNextjsConstructOverrides, BaseNextjsOverrides } from "./nextjs-base-overrides";
|
|
4
|
+
import { NextjsBaseProps } from "./nextjs-base-props";
|
|
5
|
+
import { OptionalNextjsDistributionProps } from "../generated-structs/OptionalNextjsDistributionProps";
|
|
6
|
+
import { OptionalNextjsInvalidationProps } from "../generated-structs/OptionalNextjsInvalidationProps";
|
|
7
|
+
import { NextjsAssetsDeployment } from "../nextjs-assets-deployment";
|
|
8
|
+
import { NextjsBuild } from "../nextjs-build/nextjs-build";
|
|
9
|
+
import { NextjsFunctions, NextjsFunctionsOverrides, NextjsFunctionsProps } from "../nextjs-compute/nextjs-functions";
|
|
10
|
+
import { NextjsDistribution, NextjsDistributionOverrides } from "../nextjs-distribution";
|
|
11
|
+
import { NextjsFileSystem } from "../nextjs-file-system";
|
|
12
|
+
import { NextjsInvalidation, NextjsInvalidationOverrides } from "../nextjs-invalidation";
|
|
13
|
+
import { NextjsRevalidation, NextjsRevalidationOverrides, NextjsRevalidationProps } from "../nextjs-revalidation";
|
|
14
|
+
import { NextjsStaticAssets, NextjsStaticAssetsOverrides, NextjsStaticAssetsProps } from "../nextjs-static-assets";
|
|
15
|
+
import { NextjsVpc } from "../nextjs-vpc";
|
|
16
|
+
export interface NextjsGlobalFunctionsConstructOverrides extends BaseNextjsConstructOverrides {
|
|
17
|
+
readonly nextjsFunctionProps?: NextjsFunctionsProps;
|
|
18
|
+
readonly nextjsDistributionProps?: OptionalNextjsDistributionProps;
|
|
19
|
+
readonly nextjsInvalidationProps?: OptionalNextjsInvalidationProps;
|
|
20
|
+
readonly nextjsRevalidationProps?: NextjsRevalidationProps;
|
|
21
|
+
readonly nextjsStaticAssetsProps?: NextjsStaticAssetsProps;
|
|
22
|
+
}
|
|
23
|
+
export interface NextjsGlobalFunctionsOverrides extends BaseNextjsOverrides {
|
|
24
|
+
readonly nextjsGlobalFunctions?: NextjsGlobalFunctionsConstructOverrides;
|
|
25
|
+
readonly nextjsFunction?: NextjsFunctionsOverrides;
|
|
26
|
+
readonly nextjsDistribution?: NextjsDistributionOverrides;
|
|
27
|
+
readonly nextjsRevalidation?: NextjsRevalidationOverrides;
|
|
28
|
+
readonly nextjsInvalidation?: NextjsInvalidationOverrides;
|
|
29
|
+
readonly nextjsStaticAssets?: NextjsStaticAssetsOverrides;
|
|
30
|
+
}
|
|
31
|
+
export interface NextjsGlobalFunctionsProps extends NextjsBaseProps {
|
|
32
|
+
/**
|
|
33
|
+
* Prefix to the URI path the app will be served at. Especially useful when
|
|
34
|
+
* passing in your own `distribution`.
|
|
35
|
+
* @example "/my-base-path"
|
|
36
|
+
*/
|
|
37
|
+
readonly basePath?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Bring your own distribution. Can be used with `basePath` to host multiple
|
|
40
|
+
* apps on the same CloudFront distribution.
|
|
41
|
+
*/
|
|
42
|
+
readonly distribution?: Distribution;
|
|
43
|
+
/**
|
|
44
|
+
* Override props of any construct.
|
|
45
|
+
*/
|
|
46
|
+
readonly overrides?: NextjsGlobalFunctionsOverrides;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Deploy Next.js globally distributed with functions. Uses [CloudFront
|
|
50
|
+
* Distribution](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html)
|
|
51
|
+
* as Content Delivery Network (CDN) for global distribution and [AWS Lambda Functions](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
|
|
52
|
+
* for functions.
|
|
53
|
+
*/
|
|
54
|
+
export declare class NextjsGlobalFunctions extends Construct {
|
|
55
|
+
nextjsBuild: NextjsBuild;
|
|
56
|
+
nextjsStaticAssets: NextjsStaticAssets;
|
|
57
|
+
nextjsVpc: NextjsVpc;
|
|
58
|
+
nextjsFileSystem: NextjsFileSystem;
|
|
59
|
+
nextjsAssetsDeployment: NextjsAssetsDeployment;
|
|
60
|
+
nextjsFunctions: NextjsFunctions;
|
|
61
|
+
nextjsDistribution: NextjsDistribution;
|
|
62
|
+
nextjsRevalidation: NextjsRevalidation;
|
|
63
|
+
nextjsInvalidation: NextjsInvalidation;
|
|
64
|
+
private nextjsType;
|
|
65
|
+
private props;
|
|
66
|
+
constructor(scope: Construct, id: string, props: NextjsGlobalFunctionsProps);
|
|
67
|
+
private createNextjsBuild;
|
|
68
|
+
private createNextjsStaticAssets;
|
|
69
|
+
private createVpc;
|
|
70
|
+
private createNextjsFileSystem;
|
|
71
|
+
private createNextjsAssetsDeployment;
|
|
72
|
+
private createNextjsFunctions;
|
|
73
|
+
private createNextjsDistribution;
|
|
74
|
+
private createNextjsRevalidation;
|
|
75
|
+
private createNextjsInvalidation;
|
|
76
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.NextjsGlobalFunctions = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const constructs_1 = require("constructs");
|
|
7
|
+
const common_1 = require("../common");
|
|
8
|
+
const nextjs_assets_deployment_1 = require("../nextjs-assets-deployment");
|
|
9
|
+
const nextjs_build_1 = require("../nextjs-build/nextjs-build");
|
|
10
|
+
const nextjs_functions_1 = require("../nextjs-compute/nextjs-functions");
|
|
11
|
+
const nextjs_distribution_1 = require("../nextjs-distribution");
|
|
12
|
+
const nextjs_file_system_1 = require("../nextjs-file-system");
|
|
13
|
+
const nextjs_invalidation_1 = require("../nextjs-invalidation");
|
|
14
|
+
const nextjs_revalidation_1 = require("../nextjs-revalidation");
|
|
15
|
+
const nextjs_static_assets_1 = require("../nextjs-static-assets");
|
|
16
|
+
const nextjs_vpc_1 = require("../nextjs-vpc");
|
|
17
|
+
/**
|
|
18
|
+
* Deploy Next.js globally distributed with functions. Uses [CloudFront
|
|
19
|
+
* Distribution](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html)
|
|
20
|
+
* as Content Delivery Network (CDN) for global distribution and [AWS Lambda Functions](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html)
|
|
21
|
+
* for functions.
|
|
22
|
+
*/
|
|
23
|
+
class NextjsGlobalFunctions extends constructs_1.Construct {
|
|
24
|
+
constructor(scope, id, props) {
|
|
25
|
+
super(scope, id);
|
|
26
|
+
this.nextjsType = common_1.NextjsType.GLOBAL_FUNCTIONS;
|
|
27
|
+
this.props = props;
|
|
28
|
+
this.nextjsBuild = this.createNextjsBuild();
|
|
29
|
+
this.nextjsStaticAssets = this.createNextjsStaticAssets();
|
|
30
|
+
this.nextjsVpc = this.createVpc();
|
|
31
|
+
this.nextjsFileSystem = this.createNextjsFileSystem();
|
|
32
|
+
this.nextjsAssetsDeployment = this.createNextjsAssetsDeployment();
|
|
33
|
+
this.nextjsFunctions = this.createNextjsFunctions();
|
|
34
|
+
this.nextjsFileSystem.allowCompute({
|
|
35
|
+
connections: this.nextjsFunctions.function.connections,
|
|
36
|
+
role: this.nextjsFunctions.function.role,
|
|
37
|
+
});
|
|
38
|
+
this.nextjsDistribution = this.createNextjsDistribution();
|
|
39
|
+
this.nextjsRevalidation = this.createNextjsRevalidation();
|
|
40
|
+
this.nextjsInvalidation = this.createNextjsInvalidation();
|
|
41
|
+
}
|
|
42
|
+
createNextjsBuild() {
|
|
43
|
+
return new nextjs_build_1.NextjsBuild(this, "NextjsBuild", {
|
|
44
|
+
buildCommand: this.props.buildCommand,
|
|
45
|
+
buildContext: this.props.buildContext,
|
|
46
|
+
nextjsType: this.nextjsType,
|
|
47
|
+
relativePathToWorkspace: this.props.relativePathToWorkspace,
|
|
48
|
+
overrides: this.props.overrides?.nextjsBuild,
|
|
49
|
+
...this.props.overrides?.nextjsGlobalFunctions?.nextjsBuildProps,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
createNextjsStaticAssets() {
|
|
53
|
+
return new nextjs_static_assets_1.NextjsStaticAssets(this, "NextjsStaticAssets", {
|
|
54
|
+
overrides: this.props.overrides?.nextjsStaticAssets,
|
|
55
|
+
...this.props.overrides?.nextjsGlobalFunctions?.nextjsStaticAssetsProps,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
createVpc() {
|
|
59
|
+
return new nextjs_vpc_1.NextjsVpc(this, "NextjsVpc", {
|
|
60
|
+
nextjsType: this.nextjsType,
|
|
61
|
+
overrides: this.props.overrides?.nextjsVpc,
|
|
62
|
+
...this.props.overrides?.nextjsGlobalFunctions?.nextjsVpcProps,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
createNextjsFileSystem() {
|
|
66
|
+
return new nextjs_file_system_1.NextjsFileSystem(this, "NextjsFileSystem", {
|
|
67
|
+
vpc: this.nextjsVpc.vpc,
|
|
68
|
+
overrides: this.props.overrides?.nextjsFileSystem,
|
|
69
|
+
...this.props.overrides?.nextjsGlobalFunctions?.nextjsFileSystemProps,
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
createNextjsAssetsDeployment() {
|
|
73
|
+
return new nextjs_assets_deployment_1.NextjsAssetsDeployment(this, "NextjsAssetsDeployment", {
|
|
74
|
+
accessPoint: this.nextjsFileSystem.accessPoint,
|
|
75
|
+
buildImageDigest: this.nextjsBuild.buildImageDigest,
|
|
76
|
+
containerMountPathForEfs: this.nextjsBuild.containerMountPathForEfs,
|
|
77
|
+
dockerImageCode: this.nextjsBuild.imageForNextjsAssetsDeployment,
|
|
78
|
+
overrides: this.props.overrides?.nextjsAssetsDeployment,
|
|
79
|
+
relativePathToWorkspace: this.props.relativePathToWorkspace,
|
|
80
|
+
staticAssetsBucket: this.nextjsStaticAssets.bucket,
|
|
81
|
+
vpc: this.nextjsVpc.vpc,
|
|
82
|
+
...this.props.overrides?.nextjsGlobalFunctions
|
|
83
|
+
?.nextjsAssetsDeploymentProps,
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
createNextjsFunctions() {
|
|
87
|
+
if (!this.nextjsBuild.imageForNextjsFunctions) {
|
|
88
|
+
throw new Error("nextjsBuild.dockerImageCode is undefined");
|
|
89
|
+
}
|
|
90
|
+
return new nextjs_functions_1.NextjsFunctions(this, "NextjsFunctions", {
|
|
91
|
+
accessPoint: this.nextjsFileSystem.accessPoint,
|
|
92
|
+
containerMountPathForEfs: this.nextjsBuild.containerMountPathForEfs,
|
|
93
|
+
dockerImageCode: this.nextjsBuild.imageForNextjsFunctions,
|
|
94
|
+
healthCheckPath: this.props.healthCheckPath,
|
|
95
|
+
vpc: this.nextjsVpc.vpc,
|
|
96
|
+
overrides: this.props.overrides?.nextjsFunction,
|
|
97
|
+
...this.props.overrides?.nextjsGlobalFunctions?.nextjsFunctionProps,
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
createNextjsDistribution() {
|
|
101
|
+
return new nextjs_distribution_1.NextjsDistribution(this, "NextjsDistribution", {
|
|
102
|
+
assetsBucket: this.nextjsStaticAssets.bucket,
|
|
103
|
+
basePath: this.props.basePath,
|
|
104
|
+
dynamicUrl: this.nextjsFunctions.functionUrl.url,
|
|
105
|
+
functionArn: this.nextjsFunctions.function.functionArn,
|
|
106
|
+
nextjsType: this.nextjsType,
|
|
107
|
+
overrides: this.props.overrides?.nextjsDistribution,
|
|
108
|
+
publicDirEntries: this.nextjsBuild.publicDirEntries,
|
|
109
|
+
...this.props.overrides?.nextjsGlobalFunctions?.nextjsDistributionProps,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
createNextjsRevalidation() {
|
|
113
|
+
return new nextjs_revalidation_1.NextjsRevalidation(this, "NextjsRevalidation", {
|
|
114
|
+
fn: this.nextjsFunctions.function,
|
|
115
|
+
overrides: this.props.overrides?.nextjsRevalidation,
|
|
116
|
+
previewModeId: this.nextjsAssetsDeployment.previewModeId,
|
|
117
|
+
...this.props.overrides?.nextjsGlobalFunctions?.nextjsRevalidationProps,
|
|
118
|
+
});
|
|
119
|
+
}
|
|
120
|
+
createNextjsInvalidation() {
|
|
121
|
+
return new nextjs_invalidation_1.NextjsInvalidation(this, "NextjsInvalidation", {
|
|
122
|
+
distribution: this.nextjsDistribution.distribution,
|
|
123
|
+
overrides: this.props.overrides?.nextjsInvalidation,
|
|
124
|
+
...this.props.overrides?.nextjsGlobalFunctions?.nextjsInvalidationProps,
|
|
125
|
+
});
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
exports.NextjsGlobalFunctions = NextjsGlobalFunctions;
|
|
129
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
130
|
+
NextjsGlobalFunctions[_a] = { fqn: "cdk-nextjs.NextjsGlobalFunctions", version: "0.0.0" };
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWdsb2JhbC1mdW5jdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm9vdC1jb25zdHJ1Y3RzL25leHRqcy1nbG9iYWwtZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsMkNBQXVDO0FBTXZDLHNDQUF1QztBQUd2QywwRUFBcUU7QUFDckUsK0RBQTJEO0FBQzNELHlFQUk0QztBQUM1QyxnRUFHZ0M7QUFDaEMsOERBQXlEO0FBQ3pELGdFQUdnQztBQUNoQyxnRUFJZ0M7QUFDaEMsa0VBSWlDO0FBQ2pDLDhDQUEwQztBQXNDMUM7Ozs7O0dBS0c7QUFDSCxNQUFhLHFCQUFzQixTQUFRLHNCQUFTO0lBY2xELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBaUM7UUFDekUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUpYLGVBQVUsR0FBRyxtQkFBVSxDQUFDLGdCQUFnQixDQUFDO1FBSy9DLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDO1lBQ2pDLFdBQVcsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEs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LEtBQUssQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCO1NBQ3hFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTyx3QkFBd0I7UUFDOUIsT0FBTyxJQUFJLHdDQUFrQixDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUN4RCxFQUFFLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRO1lBQ2pDLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxrQkFBa0I7WUFDbkQsYUFBYSxFQUFFLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhO1lBQ3hELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCO1NBQ3hFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTyx3QkFBd0I7UUFDOUIsT0FBTyxJQUFJLHdDQUFrQixDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUN4RCxZQUFZLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVk7WUFDbEQsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGtCQUFrQjtZQUNuRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHFCQUFxQixFQUFFLHVCQUF1QjtTQUN4RSxDQUFDLENBQUM7SUFDTCxDQUFDOztBQXBISCxzREFxSEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXN0cmlidXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQge1xuICBCYXNlTmV4dGpzQ29uc3RydWN0T3ZlcnJpZGVzLFxuICBCYXNlTmV4dGpzT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi9uZXh0anMtYmFzZS1vdmVycmlkZXNcIjtcbmltcG9ydCB7IE5leHRqc0Jhc2VQcm9wcyB9IGZyb20gXCIuL25leHRqcy1iYXNlLXByb3BzXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuaW1wb3J0IHsgT3B0aW9uYWxOZXh0anNEaXN0cmlidXRpb25Qcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbE5leHRqc0Rpc3RyaWJ1dGlvblByb3BzXCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc0ludmFsaWRhdGlvblByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzSW52YWxpZGF0aW9uUHJvcHNcIjtcbmltcG9ydCB7IE5leHRqc0Fzc2V0c0RlcGxveW1lbnQgfSBmcm9tIFwiLi4vbmV4dGpzLWFzc2V0cy1kZXBsb3ltZW50XCI7XG5pbXBvcnQgeyBOZXh0anNCdWlsZCB9IGZyb20gXCIuLi9uZXh0anMtYnVpbGQvbmV4dGpzLWJ1aWxkXCI7XG5pbXBvcnQge1xuICBOZXh0anNGdW5jdGlvbnMsXG4gIE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcyxcbiAgTmV4dGpzRnVuY3Rpb25zUHJvcHMsXG59IGZyb20gXCIuLi9uZXh0anMtY29tcHV0ZS9uZXh0anMtZnVuY3Rpb25zXCI7XG5pbXBvcnQge1xuICBOZXh0anNEaXN0cmlidXRpb24sXG4gIE5leHRqc0Rpc3RyaWJ1dGlvbk92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1kaXN0cmlidXRpb25cIjtcbmltcG9ydCB7IE5leHRqc0ZpbGVTeXN0ZW0gfSBmcm9tIFwiLi4vbmV4dGpzLWZpbGUtc3lzdGVtXCI7XG5pbXBvcnQge1xuICBOZXh0anNJbnZhbGlkYXRpb24sXG4gIE5leHRqc0ludmFsaWRhdGlvbk92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1pbnZhbGlkYXRpb25cIjtcbmltcG9ydCB7XG4gIE5leHRqc1JldmFsaWRhdGlvbixcbiAgTmV4dGpzUmV2YWxpZGF0aW9uT3ZlcnJpZGVzLFxuICBOZXh0anNSZXZhbGlkYXRpb25Qcm9wcyxcbn0gZnJvbSBcIi4uL25leHRqcy1yZXZhbGlkYXRpb25cIjtcbmltcG9ydCB7XG4gIE5leHRqc1N0YXRpY0Fzc2V0cyxcbiAgTmV4dGpzU3RhdGljQXNzZXRzT3ZlcnJpZGVzLFxuICBOZXh0anNTdGF0aWNBc3NldHNQcm9wcyxcbn0gZnJvbSBcIi4uL25leHRqcy1zdGF0aWMtYXNzZXRzXCI7XG5pbXBvcnQgeyBOZXh0anNWcGMgfSBmcm9tIFwiLi4vbmV4dGpzLXZwY1wiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0dsb2JhbEZ1bmN0aW9uc0NvbnN0cnVjdE92ZXJyaWRlc1xuICBleHRlbmRzIEJhc2VOZXh0anNDb25zdHJ1Y3RPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNGdW5jdGlvblByb3BzPzogTmV4dGpzRnVuY3Rpb25zUHJvcHM7XG4gIHJlYWRvbmx5IG5leHRqc0Rpc3RyaWJ1dGlvblByb3BzPzogT3B0aW9uYWxOZXh0anNEaXN0cmlidXRpb25Qcm9wcztcbiAgcmVhZG9ubHkgbmV4dGpzSW52YWxpZGF0aW9uUHJvcHM/OiBPcHRpb25hbE5leHRqc0ludmFsaWRhdGlvblByb3BzO1xuICByZWFkb25seSBuZXh0anNSZXZhbGlkYXRpb25Qcm9wcz86IE5leHRqc1JldmFsaWRhdGlvblByb3BzO1xuICByZWFkb25seSBuZXh0anNTdGF0aWNBc3NldHNQcm9wcz86IE5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0dsb2JhbEZ1bmN0aW9uc092ZXJyaWRlcyBleHRlbmRzIEJhc2VOZXh0anNPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNHbG9iYWxGdW5jdGlvbnM/OiBOZXh0anNHbG9iYWxGdW5jdGlvbnNDb25zdHJ1Y3RPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc0Z1bmN0aW9uPzogTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNEaXN0cmlidXRpb24/OiBOZXh0anNEaXN0cmlidXRpb25PdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc1JldmFsaWRhdGlvbj86IE5leHRqc1JldmFsaWRhdGlvbk92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzSW52YWxpZGF0aW9uPzogTmV4dGpzSW52YWxpZGF0aW9uT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNTdGF0aWNBc3NldHM/OiBOZXh0anNTdGF0aWNBc3NldHNPdmVycmlkZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzR2xvYmFsRnVuY3Rpb25zUHJvcHMgZXh0ZW5kcyBOZXh0anNCYXNlUHJvcHMge1xuICAvKipcbiAgICogUHJlZml4IHRvIHRoZSBVUkkgcGF0aCB0aGUgYXBwIHdpbGwgYmUgc2VydmVkIGF0LiBFc3BlY2lhbGx5IHVzZWZ1bCB3aGVuXG4gICAqIHBhc3NpbmcgaW4geW91ciBvd24gYGRpc3RyaWJ1dGlvbmAuXG4gICAqIEBleGFtcGxlIFwiL215LWJhc2UtcGF0aFwiXG4gICAqL1xuICByZWFkb25seSBiYXNlUGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIGRpc3RyaWJ1dGlvbi4gQ2FuIGJlIHVzZWQgd2l0aCBgYmFzZVBhdGhgIHRvIGhvc3QgbXVsdGlwbGVcbiAgICogYXBwcyBvbiB0aGUgc2FtZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IERpc3RyaWJ1dGlvbjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHByb3BzIG9mIGFueSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNHbG9iYWxGdW5jdGlvbnNPdmVycmlkZXM7XG59XG5cbi8qKlxuICogRGVwbG95IE5leHQuanMgZ2xvYmFsbHkgZGlzdHJpYnV0ZWQgd2l0aCBmdW5jdGlvbnMuIFVzZXMgW0Nsb3VkRnJvbnRcbiAqIERpc3RyaWJ1dGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13b3JraW5nLXdpdGguaHRtbClcbiAqIGFzIENvbnRlbnQgRGVsaXZlcnkgTmV0d29yayAoQ0ROKSBmb3IgZ2xvYmFsIGRpc3RyaWJ1dGlvbiBhbmQgW0FXUyBMYW1iZGEgRnVuY3Rpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy93ZWxjb21lLmh0bWwpXG4gKiBmb3IgZnVuY3Rpb25zLlxuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzR2xvYmFsRnVuY3Rpb25zIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgbmV4dGpzQnVpbGQ6IE5leHRqc0J1aWxkO1xuICBuZXh0anNTdGF0aWNBc3NldHM6IE5leHRqc1N0YXRpY0Fzc2V0cztcbiAgbmV4dGpzVnBjOiBOZXh0anNWcGM7XG4gIG5leHRqc0ZpbGVTeXN0ZW06IE5leHRqc0ZpbGVTeXN0ZW07XG4gIG5leHRqc0Fzc2V0c0RlcGxveW1lbnQ6IE5leHRqc0Fzc2V0c0RlcGxveW1lbnQ7XG4gIG5leHRqc0Z1bmN0aW9uczogTmV4dGpzRnVuY3Rpb25zO1xuICBuZXh0anNEaXN0cmlidXRpb246IE5leHRqc0Rpc3RyaWJ1dGlvbjtcbiAgbmV4dGpzUmV2YWxpZGF0aW9uOiBOZXh0anNSZXZhbGlkYXRpb247XG4gIG5leHRqc0ludmFsaWRhdGlvbjogTmV4dGpzSW52YWxpZGF0aW9uO1xuXG4gIHByaXZhdGUgbmV4dGpzVHlwZSA9IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUztcbiAgcHJpdmF0ZSBwcm9wczogTmV4dGpzR2xvYmFsRnVuY3Rpb25zUHJvcHM7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IE5leHRqc0dsb2JhbEZ1bmN0aW9uc1Byb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5uZXh0anNCdWlsZCA9IHRoaXMuY3JlYXRlTmV4dGpzQnVpbGQoKTtcbiAgICB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cyA9IHRoaXMuY3JlYXRlTmV4dGpzU3RhdGljQXNzZXRzKCk7XG4gICAgdGhpcy5uZXh0anNWcGMgPSB0aGlzLmNyZWF0ZVZwYygpO1xuICAgIHRoaXMubmV4dGpzRmlsZVN5c3RlbSA9IHRoaXMuY3JlYXRlTmV4dGpzRmlsZVN5c3RlbSgpO1xuICAgIHRoaXMubmV4dGpzQXNzZXRzRGVwbG95bWVudCA9IHRoaXMuY3JlYXRlTmV4dGpzQXNzZXRzRGVwbG95bWVudCgpO1xuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zID0gdGhpcy5jcmVhdGVOZXh0anNGdW5jdGlvbnMoKTtcbiAgICB0aGlzLm5leHRqc0ZpbGVTeXN0ZW0uYWxsb3dDb21wdXRlKHtcbiAgICAgIGNvbm5lY3Rpb25zOiB0aGlzLm5leHRqc0Z1bmN0aW9ucy5mdW5jdGlvbi5jb25uZWN0aW9ucyxcbiAgICAgIHJvbGU6IHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uLnJvbGUhLFxuICAgIH0pO1xuICAgIHRoaXMubmV4dGpzRGlzdHJpYnV0aW9uID0gdGhpcy5jcmVhdGVOZXh0anNEaXN0cmlidXRpb24oKTtcbiAgICB0aGlzLm5leHRqc1JldmFsaWRhdGlvbiA9IHRoaXMuY3JlYXRlTmV4dGpzUmV2YWxpZGF0aW9uKCk7XG4gICAgdGhpcy5uZXh0anNJbnZhbGlkYXRpb24gPSB0aGlzLmNyZWF0ZU5leHRqc0ludmFsaWRhdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNCdWlsZCgpIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0J1aWxkKHRoaXMsIFwiTmV4dGpzQnVpbGRcIiwge1xuICAgICAgYnVpbGRDb21tYW5kOiB0aGlzLnByb3BzLmJ1aWxkQ29tbWFuZCxcbiAgICAgIGJ1aWxkQ29udGV4dDogdGhpcy5wcm9wcy5idWlsZENvbnRleHQsXG4gICAgICBuZXh0anNUeXBlOiB0aGlzLm5leHRqc1R5cGUsXG4gICAgICByZWxhdGl2ZVBhdGhUb1dvcmtzcGFjZTogdGhpcy5wcm9wcy5yZWxhdGl2ZVBhdGhUb1dvcmtzcGFjZSxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0J1aWxkLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0dsb2JhbEZ1bmN0aW9ucz8ubmV4dGpzQnVpbGRQcm9wcyxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU5leHRqc1N0YXRpY0Fzc2V0cygpIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc1N0YXRpY0Fzc2V0cyh0aGlzLCBcIk5leHRqc1N0YXRpY0Fzc2V0c1wiLCB7XG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNTdGF0aWNBc3NldHMsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzR2xvYmFsRnVuY3Rpb25zPy5uZXh0anNTdGF0aWNBc3NldHNQcm9wcyxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZVZwYygpIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc1ZwYyh0aGlzLCBcIk5leHRqc1ZwY1wiLCB7XG4gICAgICBuZXh0anNUeXBlOiB0aGlzLm5leHRqc1R5cGUsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNWcGMsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzR2xvYmFsRnVuY3Rpb25zPy5uZXh0anNWcGNQcm9wcyxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0ZpbGVTeXN0ZW0oKSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNGaWxlU3lzdGVtKHRoaXMsIFwiTmV4dGpzRmlsZVN5c3RlbVwiLCB7XG4gICAgICB2cGM6IHRoaXMubmV4dGpzVnBjLnZwYyxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0ZpbGVTeXN0ZW0sXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzR2xvYmFsRnVuY3Rpb25zPy5uZXh0anNGaWxlU3lzdGVtUHJvcHMsXG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNBc3NldHNEZXBsb3ltZW50KCkge1xuICAgIHJldHVybiBuZXcgTmV4dGpzQXNzZXRzRGVwbG95bWVudCh0aGlzLCBcIk5leHRqc0Fzc2V0c0RlcGxveW1lbnRcIiwge1xuICAgICAgYWNjZXNzUG9pbnQ6IHRoaXMubmV4dGpzRmlsZVN5c3RlbS5hY2Nlc3NQb2ludCxcbiAgICAgIGJ1aWxkSW1hZ2VEaWdlc3Q6IHRoaXMubmV4dGpzQnVpbGQuYnVpbGRJbWFnZURpZ2VzdCxcbiAgICAgIGNvbnRhaW5lck1vdW50UGF0aEZvckVmczogdGhpcy5uZXh0anNCdWlsZC5jb250YWluZXJNb3VudFBhdGhGb3JFZnMsXG4gICAgICBkb2NrZXJJbWFnZUNvZGU6IHRoaXMubmV4dGpzQnVpbGQuaW1hZ2VGb3JOZXh0anNBc3NldHNEZXBsb3ltZW50LFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzQXNzZXRzRGVwbG95bWVudCxcbiAgICAgIHJlbGF0aXZlUGF0aFRvV29ya3NwYWNlOiB0aGlzLnByb3BzLnJlbGF0aXZlUGF0aFRvV29ya3NwYWNlLFxuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICB2cGM6IHRoaXMubmV4dGpzVnBjLnZwYyxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNHbG9iYWxGdW5jdGlvbnNcbiAgICAgICAgPy5uZXh0anNBc3NldHNEZXBsb3ltZW50UHJvcHMsXG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNGdW5jdGlvbnMoKSB7XG4gICAgaWYgKCF0aGlzLm5leHRqc0J1aWxkLmltYWdlRm9yTmV4dGpzRnVuY3Rpb25zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJuZXh0anNCdWlsZC5kb2NrZXJJbWFnZUNvZGUgaXMgdW5kZWZpbmVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE5leHRqc0Z1bmN0aW9ucyh0aGlzLCBcIk5leHRqc0Z1bmN0aW9uc1wiLCB7XG4gICAgICBhY2Nlc3NQb2ludDogdGhpcy5uZXh0anNGaWxlU3lzdGVtLmFjY2Vzc1BvaW50LFxuICAgICAgY29udGFpbmVyTW91bnRQYXRoRm9yRWZzOiB0aGlzLm5leHRqc0J1aWxkLmNvbnRhaW5lck1vdW50UGF0aEZvckVmcyxcbiAgICAgIGRvY2tlckltYWdlQ29kZTogdGhpcy5uZXh0anNCdWlsZC5pbWFnZUZvck5leHRqc0Z1bmN0aW9ucyxcbiAgICAgIGhlYWx0aENoZWNrUGF0aDogdGhpcy5wcm9wcy5oZWFsdGhDaGVja1BhdGgsXG4gICAgICB2cGM6IHRoaXMubmV4dGpzVnBjLnZwYyxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0Z1bmN0aW9uLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0dsb2JhbEZ1bmN0aW9ucz8ubmV4dGpzRnVuY3Rpb25Qcm9wcyxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0Rpc3RyaWJ1dGlvbigpIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbih0aGlzLCBcIk5leHRqc0Rpc3RyaWJ1dGlvblwiLCB7XG4gICAgICBhc3NldHNCdWNrZXQ6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmJ1Y2tldCxcbiAgICAgIGJhc2VQYXRoOiB0aGlzLnByb3BzLmJhc2VQYXRoLFxuICAgICAgZHluYW1pY1VybDogdGhpcy5uZXh0anNGdW5jdGlvbnMuZnVuY3Rpb25VcmwudXJsLFxuICAgICAgZnVuY3Rpb25Bcm46IHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uLmZ1bmN0aW9uQXJuLFxuICAgICAgbmV4dGpzVHlwZTogdGhpcy5uZXh0anNUeXBlLFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzRGlzdHJpYnV0aW9uLFxuICAgICAgcHVibGljRGlyRW50cmllczogdGhpcy5uZXh0anNCdWlsZC5wdWJsaWNEaXJFbnRyaWVzLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0dsb2JhbEZ1bmN0aW9ucz8ubmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNSZXZhbGlkYXRpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNSZXZhbGlkYXRpb24odGhpcywgXCJOZXh0anNSZXZhbGlkYXRpb25cIiwge1xuICAgICAgZm46IHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uLFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzUmV2YWxpZGF0aW9uLFxuICAgICAgcHJldmlld01vZGVJZDogdGhpcy5uZXh0anNBc3NldHNEZXBsb3ltZW50LnByZXZpZXdNb2RlSWQsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzR2xvYmFsRnVuY3Rpb25zPy5uZXh0anNSZXZhbGlkYXRpb25Qcm9wcyxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0ludmFsaWRhdGlvbigpIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0ludmFsaWRhdGlvbih0aGlzLCBcIk5leHRqc0ludmFsaWRhdGlvblwiLCB7XG4gICAgICBkaXN0cmlidXRpb246IHRoaXMubmV4dGpzRGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbixcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0ludmFsaWRhdGlvbixcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNHbG9iYWxGdW5jdGlvbnM/Lm5leHRqc0ludmFsaWRhdGlvblByb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { BaseNextjsConstructOverrides, BaseNextjsOverrides } from "./nextjs-base-overrides";
|
|
3
|
+
import { NextjsBaseProps } from "./nextjs-base-props";
|
|
4
|
+
import { OptionalNextjsContainersProps } from "../generated-structs/OptionalNextjsContainersProps";
|
|
5
|
+
import { NextjsAssetsDeployment } from "../nextjs-assets-deployment";
|
|
6
|
+
import { NextjsBuild } from "../nextjs-build/nextjs-build";
|
|
7
|
+
import { NextjsContainers, NextjsContainersOverrides } from "../nextjs-compute/nextjs-containers";
|
|
8
|
+
import { NextjsFileSystem } from "../nextjs-file-system";
|
|
9
|
+
import { NextjsVpc } from "../nextjs-vpc";
|
|
10
|
+
export interface NextjsRegionalContainersConstructOverrides extends BaseNextjsConstructOverrides {
|
|
11
|
+
readonly nextjsContainerProps?: OptionalNextjsContainersProps;
|
|
12
|
+
}
|
|
13
|
+
export interface NextjsRegionalContainersOverrides extends BaseNextjsOverrides {
|
|
14
|
+
readonly nextjsRegionalContainers?: NextjsRegionalContainersConstructOverrides;
|
|
15
|
+
readonly nextjsContainers?: NextjsContainersOverrides;
|
|
16
|
+
}
|
|
17
|
+
export interface NextjsRegionalContainersProps extends NextjsBaseProps {
|
|
18
|
+
/**
|
|
19
|
+
* Override props of any construct.
|
|
20
|
+
*/
|
|
21
|
+
readonly overrides?: NextjsRegionalContainersOverrides;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Deploy Next.js load balanced with containers. Uses [Application Load
|
|
25
|
+
* Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)
|
|
26
|
+
* for load balancing and [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)
|
|
27
|
+
* for containers.
|
|
28
|
+
*/
|
|
29
|
+
export declare class NextjsRegionalContainers extends Construct {
|
|
30
|
+
nextjsBuild: NextjsBuild;
|
|
31
|
+
nextjsVpc: NextjsVpc;
|
|
32
|
+
nextjsFileSystem: NextjsFileSystem;
|
|
33
|
+
nextjsAssetsDeployment: NextjsAssetsDeployment;
|
|
34
|
+
nextjsContainers: NextjsContainers;
|
|
35
|
+
private nextjsType;
|
|
36
|
+
private props;
|
|
37
|
+
constructor(scope: Construct, id: string, props: NextjsRegionalContainersProps);
|
|
38
|
+
private createNextjsBuild;
|
|
39
|
+
private createVpc;
|
|
40
|
+
private createNextjsFileSystem;
|
|
41
|
+
private createNextjsAssetsDeployment;
|
|
42
|
+
private createNextjsLoadBalancedContainers;
|
|
43
|
+
}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var _a;
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.NextjsRegionalContainers = void 0;
|
|
5
|
+
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
|
+
const constructs_1 = require("constructs");
|
|
7
|
+
const common_1 = require("../common");
|
|
8
|
+
const nextjs_assets_deployment_1 = require("../nextjs-assets-deployment");
|
|
9
|
+
const nextjs_build_1 = require("../nextjs-build/nextjs-build");
|
|
10
|
+
const nextjs_containers_1 = require("../nextjs-compute/nextjs-containers");
|
|
11
|
+
const nextjs_file_system_1 = require("../nextjs-file-system");
|
|
12
|
+
const nextjs_vpc_1 = require("../nextjs-vpc");
|
|
13
|
+
/**
|
|
14
|
+
* Deploy Next.js load balanced with containers. Uses [Application Load
|
|
15
|
+
* Balancer](https://docs.aws.amazon.com/elasticloadbalancing/latest/application/introduction.html)
|
|
16
|
+
* for load balancing and [AWS Fargate](https://docs.aws.amazon.com/AmazonECS/latest/developerguide/AWS_Fargate.html)
|
|
17
|
+
* for containers.
|
|
18
|
+
*/
|
|
19
|
+
class NextjsRegionalContainers extends constructs_1.Construct {
|
|
20
|
+
constructor(scope, id, props) {
|
|
21
|
+
super(scope, id);
|
|
22
|
+
this.nextjsType = common_1.NextjsType.REGIONAL_CONTAINERS;
|
|
23
|
+
this.props = props;
|
|
24
|
+
this.nextjsBuild = this.createNextjsBuild();
|
|
25
|
+
this.nextjsVpc = this.createVpc();
|
|
26
|
+
this.nextjsFileSystem = this.createNextjsFileSystem();
|
|
27
|
+
this.nextjsAssetsDeployment = this.createNextjsAssetsDeployment();
|
|
28
|
+
this.nextjsContainers = this.createNextjsLoadBalancedContainers();
|
|
29
|
+
this.nextjsFileSystem.allowCompute({
|
|
30
|
+
connections: this.nextjsContainers.albFargateService.service.connections,
|
|
31
|
+
role: this.nextjsContainers.albFargateService.taskDefinition.taskRole,
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
createNextjsBuild() {
|
|
35
|
+
return new nextjs_build_1.NextjsBuild(this, "NextjsBuild", {
|
|
36
|
+
buildCommand: this.props.buildCommand,
|
|
37
|
+
buildContext: this.props.buildContext,
|
|
38
|
+
nextjsType: this.nextjsType,
|
|
39
|
+
relativePathToWorkspace: this.props.relativePathToWorkspace,
|
|
40
|
+
overrides: this.props.overrides?.nextjsBuild,
|
|
41
|
+
...this.props.overrides?.nextjsRegionalContainers?.nextjsBuildProps,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
createVpc() {
|
|
45
|
+
return new nextjs_vpc_1.NextjsVpc(this, "NextjsVpc", {
|
|
46
|
+
nextjsType: this.nextjsType,
|
|
47
|
+
overrides: this.props.overrides?.nextjsVpc,
|
|
48
|
+
...this.props.overrides?.nextjsRegionalContainers?.nextjsVpcProps,
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
createNextjsFileSystem() {
|
|
52
|
+
return new nextjs_file_system_1.NextjsFileSystem(this, "NextjsFileSystem", {
|
|
53
|
+
vpc: this.nextjsVpc.vpc,
|
|
54
|
+
overrides: this.props.overrides?.nextjsFileSystem,
|
|
55
|
+
...this.props.overrides?.nextjsRegionalContainers?.nextjsFileSystemProps,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
createNextjsAssetsDeployment() {
|
|
59
|
+
return new nextjs_assets_deployment_1.NextjsAssetsDeployment(this, "NextjsAssetsDeployment", {
|
|
60
|
+
accessPoint: this.nextjsFileSystem.accessPoint,
|
|
61
|
+
buildImageDigest: this.nextjsBuild.buildImageDigest,
|
|
62
|
+
dockerImageCode: this.nextjsBuild.imageForNextjsAssetsDeployment,
|
|
63
|
+
containerMountPathForEfs: this.nextjsBuild.containerMountPathForEfs,
|
|
64
|
+
overrides: this.props.overrides?.nextjsAssetsDeployment,
|
|
65
|
+
relativePathToWorkspace: this.props.relativePathToWorkspace,
|
|
66
|
+
vpc: this.nextjsVpc.vpc,
|
|
67
|
+
...this.props.overrides?.nextjsRegionalContainers
|
|
68
|
+
?.nextjsAssetsDeploymentProps,
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
createNextjsLoadBalancedContainers() {
|
|
72
|
+
if (!this.nextjsBuild.imageForNextjsContainers) {
|
|
73
|
+
throw new Error("nextjsBuild.imageForNextjsContainers is undefined");
|
|
74
|
+
}
|
|
75
|
+
return new nextjs_containers_1.NextjsContainers(this, "NextjsContainers", {
|
|
76
|
+
accessPoint: this.nextjsFileSystem.accessPoint,
|
|
77
|
+
containerMountPathForEfs: this.nextjsBuild.containerMountPathForEfs,
|
|
78
|
+
dockerImageAsset: this.nextjsBuild.imageForNextjsContainers,
|
|
79
|
+
fileSystem: this.nextjsFileSystem.fileSystem,
|
|
80
|
+
healthCheckPath: this.props.healthCheckPath,
|
|
81
|
+
nextjsType: this.nextjsType,
|
|
82
|
+
overrides: this.props.overrides?.nextjsContainers,
|
|
83
|
+
relativeEntrypointPath: this.nextjsBuild.relativePathToEntrypoint,
|
|
84
|
+
vpc: this.nextjsVpc.vpc,
|
|
85
|
+
...this.props.overrides?.nextjsRegionalContainers?.nextjsContainerProps,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
exports.NextjsRegionalContainers = NextjsRegionalContainers;
|
|
90
|
+
_a = JSII_RTTI_SYMBOL_1;
|
|
91
|
+
NextjsRegionalContainers[_a] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.0.0" };
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXJlZ2lvbmFsLWNvbnRhaW5lcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm9vdC1jb25zdHJ1Y3RzL25leHRqcy1yZWdpb25hbC1jb250YWluZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsMkNBQXVDO0FBTXZDLHNDQUF1QztBQUV2QywwRUFBcUU7QUFDckUsK0RBQTJEO0FBQzNELDJFQUc2QztBQUM3Qyw4REFBeUQ7QUFDekQsOENBQTBDO0FBbUIxQzs7Ozs7R0FLRztBQUNILE1BQWEsd0JBQXlCLFNBQVEsc0JBQVM7SUFVckQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBb0M7UUFFcEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQVJYLGVBQVUsR0FBRyxtQkFBVSxDQUFDLG1CQUFtQixDQUFDO1FBU2xELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztRQUNsRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGtDQUFrQyxFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQztZQUNqQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxXQUFXO1lBQ3hFLElBQUksRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDLFFBQVE7U0FDdEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixPQUFPLElBQUksMEJBQVcsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQzFDLFlBQVksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7WUFDckMsWUFBWSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtZQUNyQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyx1QkFBdUI7WUFDM0QsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLFdBQVc7WUFDNUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxnQkFBZ0I7U0FDcEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNPLFNBQVM7UUFDZixPQUFPLElBQUksc0JBQVMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBQ3RDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUztZQUMxQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHdCQUF3QixFQUFFLGNBQWM7U0FDbEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUNPLHNCQUFzQjtRQUM1QixPQUFPLElBQUkscUNBQWdCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3BELEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7WUFDdkIsU0FBUyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLGdCQUFnQjtZQUNqRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHdCQUF3QixFQUFFLHFCQUFxQjtTQUN6RSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBQ08sNEJBQTRCO1FBQ2xDLE9BQU8sSUFBSSxpREFBc0IsQ0FBQyxJQUFJLEVBQUUsd0JBQXdCLEVBQUU7WUFDaEUsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXO1lBQzlDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCO1lBQ25ELGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLDhCQUE4QjtZQUNoRSx3QkFBd0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLHdCQUF3QjtZQUNuRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsc0JBQXNCO1lBQ3ZELHVCQUF1QixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsdUJBQXVCO1lBQzNELEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7WUFDdkIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx3QkFBd0I7Z0JBQy9DLEVBQUUsMkJBQTJCO1NBQ2hDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFDTyxrQ0FBa0M7UUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztZQUMvQyxNQUFNLElBQUksS0FBSyxDQUFDLG1EQUFtRCxDQUFDLENBQUM7UUFDdkUsQ0FBQztRQUNELE9BQU8sSUFBSSxvQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDcEQsV0FBVyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXO1lBQzlDLHdCQUF3QixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCO1lBQ25FLGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCO1lBQzNELFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVTtZQUM1QyxlQUFlLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlO1lBQzNDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCO1lBQ2pELHNCQUFzQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsd0JBQXdCO1lBQ2pFLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7WUFDdkIsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSx3QkFBd0IsRUFBRSxvQkFBb0I7U0FDeEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFqRkgsNERBa0ZDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIEJhc2VOZXh0anNDb25zdHJ1Y3RPdmVycmlkZXMsXG4gIEJhc2VOZXh0anNPdmVycmlkZXMsXG59IGZyb20gXCIuL25leHRqcy1iYXNlLW92ZXJyaWRlc1wiO1xuaW1wb3J0IHsgTmV4dGpzQmFzZVByb3BzIH0gZnJvbSBcIi4vbmV4dGpzLWJhc2UtcHJvcHNcIjtcbmltcG9ydCB7IE5leHRqc1R5cGUgfSBmcm9tIFwiLi4vY29tbW9uXCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc0NvbnRhaW5lcnNQcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbE5leHRqc0NvbnRhaW5lcnNQcm9wc1wiO1xuaW1wb3J0IHsgTmV4dGpzQXNzZXRzRGVwbG95bWVudCB9IGZyb20gXCIuLi9uZXh0anMtYXNzZXRzLWRlcGxveW1lbnRcIjtcbmltcG9ydCB7IE5leHRqc0J1aWxkIH0gZnJvbSBcIi4uL25leHRqcy1idWlsZC9uZXh0anMtYnVpbGRcIjtcbmltcG9ydCB7XG4gIE5leHRqc0NvbnRhaW5lcnMsXG4gIE5leHRqc0NvbnRhaW5lcnNPdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtY29tcHV0ZS9uZXh0anMtY29udGFpbmVyc1wiO1xuaW1wb3J0IHsgTmV4dGpzRmlsZVN5c3RlbSB9IGZyb20gXCIuLi9uZXh0anMtZmlsZS1zeXN0ZW1cIjtcbmltcG9ydCB7IE5leHRqc1ZwYyB9IGZyb20gXCIuLi9uZXh0anMtdnBjXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzQ29uc3RydWN0T3ZlcnJpZGVzXG4gIGV4dGVuZHMgQmFzZU5leHRqc0NvbnN0cnVjdE92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc0NvbnRhaW5lclByb3BzPzogT3B0aW9uYWxOZXh0anNDb250YWluZXJzUHJvcHM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzT3ZlcnJpZGVzIGV4dGVuZHMgQmFzZU5leHRqc092ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc1JlZ2lvbmFsQ29udGFpbmVycz86IE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc0NvbnN0cnVjdE92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzQ29udGFpbmVycz86IE5leHRqc0NvbnRhaW5lcnNPdmVycmlkZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzUHJvcHMgZXh0ZW5kcyBOZXh0anNCYXNlUHJvcHMge1xuICAvKipcbiAgICogT3ZlcnJpZGUgcHJvcHMgb2YgYW55IGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc092ZXJyaWRlcztcbn1cblxuLyoqXG4gKiBEZXBsb3kgTmV4dC5qcyBsb2FkIGJhbGFuY2VkIHdpdGggY29udGFpbmVycy4gVXNlcyBbQXBwbGljYXRpb24gTG9hZFxuICogQmFsYW5jZXJdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9lbGFzdGljbG9hZGJhbGFuY2luZy9sYXRlc3QvYXBwbGljYXRpb24vaW50cm9kdWN0aW9uLmh0bWwpXG4gKiBmb3IgbG9hZCBiYWxhbmNpbmcgYW5kIFtBV1MgRmFyZ2F0ZV0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkVDUy9sYXRlc3QvZGV2ZWxvcGVyZ3VpZGUvQVdTX0ZhcmdhdGUuaHRtbClcbiAqIGZvciBjb250YWluZXJzLlxuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgbmV4dGpzQnVpbGQ6IE5leHRqc0J1aWxkO1xuICBuZXh0anNWcGM6IE5leHRqc1ZwYztcbiAgbmV4dGpzRmlsZVN5c3RlbTogTmV4dGpzRmlsZVN5c3RlbTtcbiAgbmV4dGpzQXNzZXRzRGVwbG95bWVudDogTmV4dGpzQXNzZXRzRGVwbG95bWVudDtcbiAgbmV4dGpzQ29udGFpbmVyczogTmV4dGpzQ29udGFpbmVycztcblxuICBwcml2YXRlIG5leHRqc1R5cGUgPSBOZXh0anNUeXBlLlJFR0lPTkFMX0NPTlRBSU5FUlM7XG4gIHByaXZhdGUgcHJvcHM6IE5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc1Byb3BzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogTmV4dGpzUmVnaW9uYWxDb250YWluZXJzUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5wcm9wcyA9IHByb3BzO1xuICAgIHRoaXMubmV4dGpzQnVpbGQgPSB0aGlzLmNyZWF0ZU5leHRqc0J1aWxkKCk7XG4gICAgdGhpcy5uZXh0anNWcGMgPSB0aGlzLmNyZWF0ZVZwYygpO1xuICAgIHRoaXMubmV4dGpzRmlsZVN5c3RlbSA9IHRoaXMuY3JlYXRlTmV4dGpzRmlsZVN5c3RlbSgpO1xuICAgIHRoaXMubmV4dGpzQXNzZXRzRGVwbG95bWVudCA9IHRoaXMuY3JlYXRlTmV4dGpzQXNzZXRzRGVwbG95bWVudCgpO1xuICAgIHRoaXMubmV4dGpzQ29udGFpbmVycyA9IHRoaXMuY3JlYXRlTmV4dGpzTG9hZEJhbGFuY2VkQ29udGFpbmVycygpO1xuICAgIHRoaXMubmV4dGpzRmlsZVN5c3RlbS5hbGxvd0NvbXB1dGUoe1xuICAgICAgY29ubmVjdGlvbnM6IHRoaXMubmV4dGpzQ29udGFpbmVycy5hbGJGYXJnYXRlU2VydmljZS5zZXJ2aWNlLmNvbm5lY3Rpb25zLFxuICAgICAgcm9sZTogdGhpcy5uZXh0anNDb250YWluZXJzLmFsYkZhcmdhdGVTZXJ2aWNlLnRhc2tEZWZpbml0aW9uLnRhc2tSb2xlLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNCdWlsZCgpIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0J1aWxkKHRoaXMsIFwiTmV4dGpzQnVpbGRcIiwge1xuICAgICAgYnVpbGRDb21tYW5kOiB0aGlzLnByb3BzLmJ1aWxkQ29tbWFuZCxcbiAgICAgIGJ1aWxkQ29udGV4dDogdGhpcy5wcm9wcy5idWlsZENvbnRleHQsXG4gICAgICBuZXh0anNUeXBlOiB0aGlzLm5leHRqc1R5cGUsXG4gICAgICByZWxhdGl2ZVBhdGhUb1dvcmtzcGFjZTogdGhpcy5wcm9wcy5yZWxhdGl2ZVBhdGhUb1dvcmtzcGFjZSxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0J1aWxkLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc1JlZ2lvbmFsQ29udGFpbmVycz8ubmV4dGpzQnVpbGRQcm9wcyxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZVZwYygpIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc1ZwYyh0aGlzLCBcIk5leHRqc1ZwY1wiLCB7XG4gICAgICBuZXh0anNUeXBlOiB0aGlzLm5leHRqc1R5cGUsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNWcGMsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzUmVnaW9uYWxDb250YWluZXJzPy5uZXh0anNWcGNQcm9wcyxcbiAgICB9KTtcbiAgfVxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0ZpbGVTeXN0ZW0oKSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNGaWxlU3lzdGVtKHRoaXMsIFwiTmV4dGpzRmlsZVN5c3RlbVwiLCB7XG4gICAgICB2cGM6IHRoaXMubmV4dGpzVnBjLnZwYyxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0ZpbGVTeXN0ZW0sXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzUmVnaW9uYWxDb250YWluZXJzPy5uZXh0anNGaWxlU3lzdGVtUHJvcHMsXG4gICAgfSk7XG4gIH1cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNBc3NldHNEZXBsb3ltZW50KCkge1xuICAgIHJldHVybiBuZXcgTmV4dGpzQXNzZXRzRGVwbG95bWVudCh0aGlzLCBcIk5leHRqc0Fzc2V0c0RlcGxveW1lbnRcIiwge1xuICAgICAgYWNjZXNzUG9pbnQ6IHRoaXMubmV4dGpzRmlsZVN5c3RlbS5hY2Nlc3NQb2ludCxcbiAgICAgIGJ1aWxkSW1hZ2VEaWdlc3Q6IHRoaXMubmV4dGpzQnVpbGQuYnVpbGRJbWFnZURpZ2VzdCxcbiAgICAgIGRvY2tlckltYWdlQ29kZTogdGhpcy5uZXh0anNCdWlsZC5pbWFnZUZvck5leHRqc0Fzc2V0c0RlcGxveW1lbnQsXG4gICAgICBjb250YWluZXJNb3VudFBhdGhGb3JFZnM6IHRoaXMubmV4dGpzQnVpbGQuY29udGFpbmVyTW91bnRQYXRoRm9yRWZzLFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzQXNzZXRzRGVwbG95bWVudCxcbiAgICAgIHJlbGF0aXZlUGF0aFRvV29ya3NwYWNlOiB0aGlzLnByb3BzLnJlbGF0aXZlUGF0aFRvV29ya3NwYWNlLFxuICAgICAgdnBjOiB0aGlzLm5leHRqc1ZwYy52cGMsXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzUmVnaW9uYWxDb250YWluZXJzXG4gICAgICAgID8ubmV4dGpzQXNzZXRzRGVwbG95bWVudFByb3BzLFxuICAgIH0pO1xuICB9XG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzTG9hZEJhbGFuY2VkQ29udGFpbmVycygpIHtcbiAgICBpZiAoIXRoaXMubmV4dGpzQnVpbGQuaW1hZ2VGb3JOZXh0anNDb250YWluZXJzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJuZXh0anNCdWlsZC5pbWFnZUZvck5leHRqc0NvbnRhaW5lcnMgaXMgdW5kZWZpbmVkXCIpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE5leHRqc0NvbnRhaW5lcnModGhpcywgXCJOZXh0anNDb250YWluZXJzXCIsIHtcbiAgICAgIGFjY2Vzc1BvaW50OiB0aGlzLm5leHRqc0ZpbGVTeXN0ZW0uYWNjZXNzUG9pbnQsXG4gICAgICBjb250YWluZXJNb3VudFBhdGhGb3JFZnM6IHRoaXMubmV4dGpzQnVpbGQuY29udGFpbmVyTW91bnRQYXRoRm9yRWZzLFxuICAgICAgZG9ja2VySW1hZ2VBc3NldDogdGhpcy5uZXh0anNCdWlsZC5pbWFnZUZvck5leHRqc0NvbnRhaW5lcnMsXG4gICAgICBmaWxlU3lzdGVtOiB0aGlzLm5leHRqc0ZpbGVTeXN0ZW0uZmlsZVN5c3RlbSxcbiAgICAgIGhlYWx0aENoZWNrUGF0aDogdGhpcy5wcm9wcy5oZWFsdGhDaGVja1BhdGgsXG4gICAgICBuZXh0anNUeXBlOiB0aGlzLm5leHRqc1R5cGUsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNDb250YWluZXJzLFxuICAgICAgcmVsYXRpdmVFbnRyeXBvaW50UGF0aDogdGhpcy5uZXh0anNCdWlsZC5yZWxhdGl2ZVBhdGhUb0VudHJ5cG9pbnQsXG4gICAgICB2cGM6IHRoaXMubmV4dGpzVnBjLnZwYyxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNSZWdpb25hbENvbnRhaW5lcnM/Lm5leHRqc0NvbnRhaW5lclByb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|