@aligent/cdk-prerender-proxy 2.5.0 → 2.5.2
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/CHANGELOG.md +12 -0
- package/index.d.ts +6 -0
- package/index.js +14 -0
- package/lib/error-response-construct.d.ts +12 -0
- package/lib/error-response-construct.js +43 -0
- package/lib/prerender-cf-cache-control-construct.d.ts +12 -0
- package/lib/prerender-cf-cache-control-construct.js +43 -0
- package/lib/prerender-check-construct.d.ts +17 -0
- package/lib/prerender-check-construct.js +42 -0
- package/lib/prerender-construct.d.ts +13 -0
- package/lib/prerender-construct.js +44 -0
- package/lib/prerender-lambda-construct.d.ts +18 -0
- package/lib/prerender-lambda-construct.js +19 -0
- package/package.json +2 -2
- package/index.ts +0 -29
- package/jest.config.ts +0 -11
- package/lib/error-response-construct.ts +0 -64
- package/lib/prerender-cf-cache-control-construct.ts +0 -64
- package/lib/prerender-check-construct.ts +0 -62
- package/lib/prerender-construct.ts +0 -64
- package/lib/prerender-lambda-construct.ts +0 -59
- package/project.json +0 -47
- package/tsconfig.app.json +0 -10
- package/tsconfig.json +0 -16
- package/tsconfig.spec.json +0 -8
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# @aligent/cdk-prerender-proxy
|
|
2
2
|
|
|
3
|
+
## 2.5.2
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- [#1573](https://github.com/aligent/cdk-constructs/pull/1573) [`9c26514`](https://github.com/aligent/cdk-constructs/commit/9c26514be321e73b4217aa4a040ac4a91f9b1503) Thanks [@ryanrixxh](https://github.com/ryanrixxh)! - Restucture of the internal codebase and addition of CDK Aspects package. The Aspects package exports a number of usable cdk aspects
|
|
8
|
+
|
|
9
|
+
## 2.5.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- [#1523](https://github.com/aligent/cdk-constructs/pull/1523) [`2550ceb`](https://github.com/aligent/cdk-constructs/commit/2550cebd411cf2cfd5b92deba17e18a5a3d3d012) Thanks [@TheOrangePuff](https://github.com/TheOrangePuff)! - Fixes changeset publishing to work correctly by switching from dist-based builds to in-place compilation within packages
|
|
14
|
+
|
|
3
15
|
## 2.5.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { PrerenderLambda, PrerenderLambdaProps } from "./lib/prerender-lambda-construct";
|
|
2
|
+
import { PrerenderFunction, PrerenderFunctionOptions } from "./lib/prerender-construct";
|
|
3
|
+
import { PrerenderCheckFunction } from "./lib/prerender-check-construct";
|
|
4
|
+
import { ErrorResponseFunction, ErrorResponseFunctionOptions } from "./lib/error-response-construct";
|
|
5
|
+
import { CloudFrontCacheControl, CloudFrontCacheControlOptions } from "./lib/prerender-cf-cache-control-construct";
|
|
6
|
+
export { PrerenderLambda, PrerenderFunction, PrerenderCheckFunction, ErrorResponseFunction, CloudFrontCacheControl, CloudFrontCacheControlOptions, ErrorResponseFunctionOptions, PrerenderFunctionOptions, PrerenderLambdaProps, };
|
package/index.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CloudFrontCacheControl = exports.ErrorResponseFunction = exports.PrerenderCheckFunction = exports.PrerenderFunction = exports.PrerenderLambda = void 0;
|
|
4
|
+
const prerender_lambda_construct_1 = require("./lib/prerender-lambda-construct");
|
|
5
|
+
Object.defineProperty(exports, "PrerenderLambda", { enumerable: true, get: function () { return prerender_lambda_construct_1.PrerenderLambda; } });
|
|
6
|
+
const prerender_construct_1 = require("./lib/prerender-construct");
|
|
7
|
+
Object.defineProperty(exports, "PrerenderFunction", { enumerable: true, get: function () { return prerender_construct_1.PrerenderFunction; } });
|
|
8
|
+
const prerender_check_construct_1 = require("./lib/prerender-check-construct");
|
|
9
|
+
Object.defineProperty(exports, "PrerenderCheckFunction", { enumerable: true, get: function () { return prerender_check_construct_1.PrerenderCheckFunction; } });
|
|
10
|
+
const error_response_construct_1 = require("./lib/error-response-construct");
|
|
11
|
+
Object.defineProperty(exports, "ErrorResponseFunction", { enumerable: true, get: function () { return error_response_construct_1.ErrorResponseFunction; } });
|
|
12
|
+
const prerender_cf_cache_control_construct_1 = require("./lib/prerender-cf-cache-control-construct");
|
|
13
|
+
Object.defineProperty(exports, "CloudFrontCacheControl", { enumerable: true, get: function () { return prerender_cf_cache_control_construct_1.CloudFrontCacheControl; } });
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxpRkFHMEM7QUFnQnhDLGdHQWxCQSw0Q0FBZSxPQWtCQTtBQWZqQixtRUFHbUM7QUFhakMsa0dBZkEsdUNBQWlCLE9BZUE7QUFabkIsK0VBQXlFO0FBYXZFLHVHQWJPLGtEQUFzQixPQWFQO0FBWnhCLDZFQUd3QztBQVV0QyxzR0FaQSxnREFBcUIsT0FZQTtBQVR2QixxR0FHb0Q7QUFPbEQsdUdBVEEsNkRBQXNCLE9BU0EiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBQcmVyZW5kZXJMYW1iZGEsXG4gIFByZXJlbmRlckxhbWJkYVByb3BzLFxufSBmcm9tIFwiLi9saWIvcHJlcmVuZGVyLWxhbWJkYS1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7XG4gIFByZXJlbmRlckZ1bmN0aW9uLFxuICBQcmVyZW5kZXJGdW5jdGlvbk9wdGlvbnMsXG59IGZyb20gXCIuL2xpYi9wcmVyZW5kZXItY29uc3RydWN0XCI7XG5pbXBvcnQgeyBQcmVyZW5kZXJDaGVja0Z1bmN0aW9uIH0gZnJvbSBcIi4vbGliL3ByZXJlbmRlci1jaGVjay1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7XG4gIEVycm9yUmVzcG9uc2VGdW5jdGlvbixcbiAgRXJyb3JSZXNwb25zZUZ1bmN0aW9uT3B0aW9ucyxcbn0gZnJvbSBcIi4vbGliL2Vycm9yLXJlc3BvbnNlLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHtcbiAgQ2xvdWRGcm9udENhY2hlQ29udHJvbCxcbiAgQ2xvdWRGcm9udENhY2hlQ29udHJvbE9wdGlvbnMsXG59IGZyb20gXCIuL2xpYi9wcmVyZW5kZXItY2YtY2FjaGUtY29udHJvbC1jb25zdHJ1Y3RcIjtcblxuZXhwb3J0IHtcbiAgUHJlcmVuZGVyTGFtYmRhLFxuICBQcmVyZW5kZXJGdW5jdGlvbixcbiAgUHJlcmVuZGVyQ2hlY2tGdW5jdGlvbixcbiAgRXJyb3JSZXNwb25zZUZ1bmN0aW9uLFxuICBDbG91ZEZyb250Q2FjaGVDb250cm9sLFxuICBDbG91ZEZyb250Q2FjaGVDb250cm9sT3B0aW9ucyxcbiAgRXJyb3JSZXNwb25zZUZ1bmN0aW9uT3B0aW9ucyxcbiAgUHJlcmVuZGVyRnVuY3Rpb25PcHRpb25zLFxuICBQcmVyZW5kZXJMYW1iZGFQcm9wcyxcbn07XG4iXX0=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { experimental } from "aws-cdk-lib/aws-cloudfront";
|
|
2
|
+
import { IVersion } from "aws-cdk-lib/aws-lambda";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
export interface ErrorResponseFunctionOptions {
|
|
5
|
+
pathPrefix?: string;
|
|
6
|
+
frontendHost: string;
|
|
7
|
+
}
|
|
8
|
+
export declare class ErrorResponseFunction extends Construct {
|
|
9
|
+
readonly edgeFunction: experimental.EdgeFunction;
|
|
10
|
+
constructor(scope: Construct, id: string, options: ErrorResponseFunctionOptions);
|
|
11
|
+
getFunctionVersion(): IVersion;
|
|
12
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorResponseFunction = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
|
|
6
|
+
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
7
|
+
const constructs_1 = require("constructs");
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
const cdk_esbuild_1 = require("@aligent/cdk-esbuild");
|
|
10
|
+
class ErrorResponseFunction extends constructs_1.Construct {
|
|
11
|
+
constructor(scope, id, options) {
|
|
12
|
+
var _a;
|
|
13
|
+
super(scope, id);
|
|
14
|
+
const command = [
|
|
15
|
+
"sh",
|
|
16
|
+
"-c",
|
|
17
|
+
'echo "Docker build not supported. Please install esbuild."',
|
|
18
|
+
];
|
|
19
|
+
this.edgeFunction = new aws_cloudfront_1.experimental.EdgeFunction(this, `${id}-error-response-fn`, {
|
|
20
|
+
code: aws_lambda_1.Code.fromAsset((0, path_1.join)(__dirname, "handlers"), {
|
|
21
|
+
assetHashType: aws_cdk_lib_1.AssetHashType.OUTPUT,
|
|
22
|
+
bundling: {
|
|
23
|
+
command,
|
|
24
|
+
image: aws_cdk_lib_1.DockerImage.fromRegistry("busybox"),
|
|
25
|
+
local: new cdk_esbuild_1.Esbuild({
|
|
26
|
+
entryPoints: [(0, path_1.join)(__dirname, "handlers/error-response.ts")],
|
|
27
|
+
define: {
|
|
28
|
+
"process.env.PATH_PREFIX": JSON.stringify((_a = options.pathPrefix) !== null && _a !== void 0 ? _a : ""),
|
|
29
|
+
"process.env.FRONTEND_HOST": JSON.stringify(options.frontendHost),
|
|
30
|
+
},
|
|
31
|
+
}),
|
|
32
|
+
},
|
|
33
|
+
}),
|
|
34
|
+
runtime: aws_lambda_1.Runtime.NODEJS_22_X,
|
|
35
|
+
handler: "error-response.handler",
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
getFunctionVersion() {
|
|
39
|
+
return aws_lambda_1.Version.fromVersionArn(this, "error-response-fn-version", this.edgeFunction.currentVersion.edgeArn);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.ErrorResponseFunction = ErrorResponseFunction;
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItcmVzcG9uc2UtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXJyb3ItcmVzcG9uc2UtY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF5RDtBQUN6RCwrREFBMEQ7QUFDMUQsdURBQTBFO0FBQzFFLDJDQUF1QztBQUN2QywrQkFBNEI7QUFDNUIsc0RBQStDO0FBTy9DLE1BQWEscUJBQXNCLFNBQVEsc0JBQVM7SUFHbEQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsT0FBcUM7O1FBRXJDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxPQUFPLEdBQUc7WUFDZCxJQUFJO1lBQ0osSUFBSTtZQUNKLDREQUE0RDtTQUM3RCxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLDZCQUFZLENBQUMsWUFBWSxDQUMvQyxJQUFJLEVBQ0osR0FBRyxFQUFFLG9CQUFvQixFQUN6QjtZQUNFLElBQUksRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUU7Z0JBQ2hELGFBQWEsRUFBRSwyQkFBYSxDQUFDLE1BQU07Z0JBQ25DLFFBQVEsRUFBRTtvQkFDUixPQUFPO29CQUNQLEtBQUssRUFBRSx5QkFBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7b0JBQzFDLEtBQUssRUFBRSxJQUFJLHFCQUFPLENBQUM7d0JBQ2pCLFdBQVcsRUFBRSxDQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO3dCQUM1RCxNQUFNLEVBQUU7NEJBQ04seUJBQXlCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FDdkMsTUFBQSxPQUFPLENBQUMsVUFBVSxtQ0FBSSxFQUFFLENBQ3pCOzRCQUNELDJCQUEyQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQ3pDLE9BQU8sQ0FBQyxZQUFZLENBQ3JCO3lCQUNGO3FCQUNGLENBQUM7aUJBQ0g7YUFDRixDQUFDO1lBQ0YsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixPQUFPLEVBQUUsd0JBQXdCO1NBQ2xDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsT0FBTyxvQkFBTyxDQUFDLGNBQWMsQ0FDM0IsSUFBSSxFQUNKLDJCQUEyQixFQUMzQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQ3pDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFuREQsc0RBbURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNzZXRIYXNoVHlwZSwgRG9ja2VySW1hZ2UgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IGV4cGVyaW1lbnRhbCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgQ29kZSwgSVZlcnNpb24sIFJ1bnRpbWUsIFZlcnNpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgRXNidWlsZCB9IGZyb20gXCJAYWxpZ2VudC9jZGstZXNidWlsZFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIEVycm9yUmVzcG9uc2VGdW5jdGlvbk9wdGlvbnMge1xuICBwYXRoUHJlZml4Pzogc3RyaW5nO1xuICBmcm9udGVuZEhvc3Q6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEVycm9yUmVzcG9uc2VGdW5jdGlvbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IGVkZ2VGdW5jdGlvbjogZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb3B0aW9uczogRXJyb3JSZXNwb25zZUZ1bmN0aW9uT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgY29tbWFuZCA9IFtcbiAgICAgIFwic2hcIixcbiAgICAgIFwiLWNcIixcbiAgICAgICdlY2hvIFwiRG9ja2VyIGJ1aWxkIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSBpbnN0YWxsIGVzYnVpbGQuXCInLFxuICAgIF07XG5cbiAgICB0aGlzLmVkZ2VGdW5jdGlvbiA9IG5ldyBleHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2lkfS1lcnJvci1yZXNwb25zZS1mbmAsXG4gICAgICB7XG4gICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KGpvaW4oX19kaXJuYW1lLCBcImhhbmRsZXJzXCIpLCB7XG4gICAgICAgICAgYXNzZXRIYXNoVHlwZTogQXNzZXRIYXNoVHlwZS5PVVRQVVQsXG4gICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICBpbWFnZTogRG9ja2VySW1hZ2UuZnJvbVJlZ2lzdHJ5KFwiYnVzeWJveFwiKSxcbiAgICAgICAgICAgIGxvY2FsOiBuZXcgRXNidWlsZCh7XG4gICAgICAgICAgICAgIGVudHJ5UG9pbnRzOiBbam9pbihfX2Rpcm5hbWUsIFwiaGFuZGxlcnMvZXJyb3ItcmVzcG9uc2UudHNcIildLFxuICAgICAgICAgICAgICBkZWZpbmU6IHtcbiAgICAgICAgICAgICAgICBcInByb2Nlc3MuZW52LlBBVEhfUFJFRklYXCI6IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wYXRoUHJlZml4ID8/IFwiXCJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIFwicHJvY2Vzcy5lbnYuRlJPTlRFTkRfSE9TVFwiOiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMuZnJvbnRlbmRIb3N0XG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgICBoYW5kbGVyOiBcImVycm9yLXJlc3BvbnNlLmhhbmRsZXJcIixcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEZ1bmN0aW9uVmVyc2lvbigpOiBJVmVyc2lvbiB7XG4gICAgcmV0dXJuIFZlcnNpb24uZnJvbVZlcnNpb25Bcm4oXG4gICAgICB0aGlzLFxuICAgICAgXCJlcnJvci1yZXNwb25zZS1mbi12ZXJzaW9uXCIsXG4gICAgICB0aGlzLmVkZ2VGdW5jdGlvbi5jdXJyZW50VmVyc2lvbi5lZGdlQXJuXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { experimental } from "aws-cdk-lib/aws-cloudfront";
|
|
2
|
+
import { IVersion } from "aws-cdk-lib/aws-lambda";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
export interface CloudFrontCacheControlOptions {
|
|
5
|
+
cacheKey?: string;
|
|
6
|
+
maxAge?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class CloudFrontCacheControl extends Construct {
|
|
9
|
+
readonly edgeFunction: experimental.EdgeFunction;
|
|
10
|
+
constructor(scope: Construct, id: string, options?: CloudFrontCacheControlOptions);
|
|
11
|
+
getFunctionVersion(): IVersion;
|
|
12
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CloudFrontCacheControl = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
|
|
6
|
+
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
7
|
+
const constructs_1 = require("constructs");
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
const cdk_esbuild_1 = require("@aligent/cdk-esbuild");
|
|
10
|
+
class CloudFrontCacheControl extends constructs_1.Construct {
|
|
11
|
+
constructor(scope, id, options) {
|
|
12
|
+
var _a, _b;
|
|
13
|
+
super(scope, id);
|
|
14
|
+
const command = [
|
|
15
|
+
"sh",
|
|
16
|
+
"-c",
|
|
17
|
+
'echo "Docker build not supported. Please install esbuild."',
|
|
18
|
+
];
|
|
19
|
+
this.edgeFunction = new aws_cloudfront_1.experimental.EdgeFunction(this, `${id}-cache-control-fn`, {
|
|
20
|
+
code: aws_lambda_1.Code.fromAsset((0, path_1.join)(__dirname, "handlers"), {
|
|
21
|
+
assetHashType: aws_cdk_lib_1.AssetHashType.OUTPUT,
|
|
22
|
+
bundling: {
|
|
23
|
+
command,
|
|
24
|
+
image: aws_cdk_lib_1.DockerImage.fromRegistry("busybox"),
|
|
25
|
+
local: new cdk_esbuild_1.Esbuild({
|
|
26
|
+
entryPoints: [(0, path_1.join)(__dirname, "handlers/cache-control.ts")],
|
|
27
|
+
define: {
|
|
28
|
+
"process.env.PRERENDER_CACHE_KEY": JSON.stringify((_a = options === null || options === void 0 ? void 0 : options.cacheKey) !== null && _a !== void 0 ? _a : "x-prerender-requestid"),
|
|
29
|
+
"process.env.PRERENDER_CACHE_MAX_AGE": JSON.stringify(String((_b = options === null || options === void 0 ? void 0 : options.maxAge) !== null && _b !== void 0 ? _b : 0)),
|
|
30
|
+
},
|
|
31
|
+
}),
|
|
32
|
+
},
|
|
33
|
+
}),
|
|
34
|
+
runtime: aws_lambda_1.Runtime.NODEJS_22_X,
|
|
35
|
+
handler: "cache-control.handler",
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
getFunctionVersion() {
|
|
39
|
+
return aws_lambda_1.Version.fromVersionArn(this, "cache-control-fn-version", this.edgeFunction.currentVersion.edgeArn);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.CloudFrontCacheControl = CloudFrontCacheControl;
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVuZGVyLWNmLWNhY2hlLWNvbnRyb2wtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHJlcmVuZGVyLWNmLWNhY2hlLWNvbnRyb2wtY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF5RDtBQUN6RCwrREFBMEQ7QUFDMUQsdURBQTBFO0FBQzFFLDJDQUF1QztBQUN2QywrQkFBNEI7QUFDNUIsc0RBQStDO0FBTy9DLE1BQWEsc0JBQXVCLFNBQVEsc0JBQVM7SUFHbkQsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsT0FBdUM7O1FBRXZDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxPQUFPLEdBQUc7WUFDZCxJQUFJO1lBQ0osSUFBSTtZQUNKLDREQUE0RDtTQUM3RCxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLDZCQUFZLENBQUMsWUFBWSxDQUMvQyxJQUFJLEVBQ0osR0FBRyxFQUFFLG1CQUFtQixFQUN4QjtZQUNFLElBQUksRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUU7Z0JBQ2hELGFBQWEsRUFBRSwyQkFBYSxDQUFDLE1BQU07Z0JBQ25DLFFBQVEsRUFBRTtvQkFDUixPQUFPO29CQUNQLEtBQUssRUFBRSx5QkFBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7b0JBQzFDLEtBQUssRUFBRSxJQUFJLHFCQUFPLENBQUM7d0JBQ2pCLFdBQVcsRUFBRSxDQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSwyQkFBMkIsQ0FBQyxDQUFDO3dCQUMzRCxNQUFNLEVBQUU7NEJBQ04saUNBQWlDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FDL0MsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsUUFBUSxtQ0FBSSx1QkFBdUIsQ0FDN0M7NEJBQ0QscUNBQXFDLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FDbkQsTUFBTSxDQUFDLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLE1BQU0sbUNBQUksQ0FBQyxDQUFDLENBQzdCO3lCQUNGO3FCQUNGLENBQUM7aUJBQ0g7YUFDRixDQUFDO1lBQ0YsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixPQUFPLEVBQUUsdUJBQXVCO1NBQ2pDLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsT0FBTyxvQkFBTyxDQUFDLGNBQWMsQ0FDM0IsSUFBSSxFQUNKLDBCQUEwQixFQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQ3pDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFuREQsd0RBbURDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNzZXRIYXNoVHlwZSwgRG9ja2VySW1hZ2UgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IGV4cGVyaW1lbnRhbCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgQ29kZSwgSVZlcnNpb24sIFJ1bnRpbWUsIFZlcnNpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgRXNidWlsZCB9IGZyb20gXCJAYWxpZ2VudC9jZGstZXNidWlsZFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkRnJvbnRDYWNoZUNvbnRyb2xPcHRpb25zIHtcbiAgY2FjaGVLZXk/OiBzdHJpbmc7XG4gIG1heEFnZT86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNsYXNzIENsb3VkRnJvbnRDYWNoZUNvbnRyb2wgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICByZWFkb25seSBlZGdlRnVuY3Rpb246IGV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBDbG91ZEZyb250Q2FjaGVDb250cm9sT3B0aW9uc1xuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgY29tbWFuZCA9IFtcbiAgICAgIFwic2hcIixcbiAgICAgIFwiLWNcIixcbiAgICAgICdlY2hvIFwiRG9ja2VyIGJ1aWxkIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSBpbnN0YWxsIGVzYnVpbGQuXCInLFxuICAgIF07XG5cbiAgICB0aGlzLmVkZ2VGdW5jdGlvbiA9IG5ldyBleHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2lkfS1jYWNoZS1jb250cm9sLWZuYCxcbiAgICAgIHtcbiAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoam9pbihfX2Rpcm5hbWUsIFwiaGFuZGxlcnNcIiksIHtcbiAgICAgICAgICBhc3NldEhhc2hUeXBlOiBBc3NldEhhc2hUeXBlLk9VVFBVVCxcbiAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIGltYWdlOiBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoXCJidXN5Ym94XCIpLFxuICAgICAgICAgICAgbG9jYWw6IG5ldyBFc2J1aWxkKHtcbiAgICAgICAgICAgICAgZW50cnlQb2ludHM6IFtqb2luKF9fZGlybmFtZSwgXCJoYW5kbGVycy9jYWNoZS1jb250cm9sLnRzXCIpXSxcbiAgICAgICAgICAgICAgZGVmaW5lOiB7XG4gICAgICAgICAgICAgICAgXCJwcm9jZXNzLmVudi5QUkVSRU5ERVJfQ0FDSEVfS0VZXCI6IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgICAgb3B0aW9ucz8uY2FjaGVLZXkgPz8gXCJ4LXByZXJlbmRlci1yZXF1ZXN0aWRcIlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgXCJwcm9jZXNzLmVudi5QUkVSRU5ERVJfQ0FDSEVfTUFYX0FHRVwiOiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgIFN0cmluZyhvcHRpb25zPy5tYXhBZ2UgPz8gMClcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICAgIGhhbmRsZXI6IFwiY2FjaGUtY29udHJvbC5oYW5kbGVyXCIsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdW5jdGlvblZlcnNpb24oKTogSVZlcnNpb24ge1xuICAgIHJldHVybiBWZXJzaW9uLmZyb21WZXJzaW9uQXJuKFxuICAgICAgdGhpcyxcbiAgICAgIFwiY2FjaGUtY29udHJvbC1mbi12ZXJzaW9uXCIsXG4gICAgICB0aGlzLmVkZ2VGdW5jdGlvbi5jdXJyZW50VmVyc2lvbi5lZGdlQXJuXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { experimental } from "aws-cdk-lib/aws-cloudfront";
|
|
2
|
+
import { IVersion } from "aws-cdk-lib/aws-lambda";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
export interface PrerenderCheckOptions {
|
|
5
|
+
/**
|
|
6
|
+
* A custom regex string to detect bots. Will be used in addition
|
|
7
|
+
* to the existing bot check regex to determine if a user-agent is a bot.
|
|
8
|
+
*
|
|
9
|
+
* @type string
|
|
10
|
+
*/
|
|
11
|
+
customBotCheckRegex: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class PrerenderCheckFunction extends Construct {
|
|
14
|
+
readonly edgeFunction: experimental.EdgeFunction;
|
|
15
|
+
constructor(scope: Construct, id: string, options?: PrerenderCheckOptions);
|
|
16
|
+
getFunctionVersion(): IVersion;
|
|
17
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PrerenderCheckFunction = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
|
|
6
|
+
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
7
|
+
const constructs_1 = require("constructs");
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
const cdk_esbuild_1 = require("@aligent/cdk-esbuild");
|
|
10
|
+
class PrerenderCheckFunction extends constructs_1.Construct {
|
|
11
|
+
constructor(scope, id, options) {
|
|
12
|
+
var _a;
|
|
13
|
+
super(scope, id);
|
|
14
|
+
const command = [
|
|
15
|
+
"sh",
|
|
16
|
+
"-c",
|
|
17
|
+
'echo "Docker build not supported. Please install esbuild."',
|
|
18
|
+
];
|
|
19
|
+
this.edgeFunction = new aws_cloudfront_1.experimental.EdgeFunction(this, `${id}-prerender-check-fn`, {
|
|
20
|
+
code: aws_lambda_1.Code.fromAsset((0, path_1.join)(__dirname, "handlers"), {
|
|
21
|
+
assetHashType: aws_cdk_lib_1.AssetHashType.OUTPUT,
|
|
22
|
+
bundling: {
|
|
23
|
+
command,
|
|
24
|
+
image: aws_cdk_lib_1.DockerImage.fromRegistry("busybox"),
|
|
25
|
+
local: new cdk_esbuild_1.Esbuild({
|
|
26
|
+
entryPoints: [(0, path_1.join)(__dirname, "handlers/prerender-check.ts")],
|
|
27
|
+
define: {
|
|
28
|
+
"process.env.CUSTOM_BOT_CHECK": JSON.stringify((_a = options === null || options === void 0 ? void 0 : options.customBotCheckRegex) !== null && _a !== void 0 ? _a : "[]"),
|
|
29
|
+
},
|
|
30
|
+
}),
|
|
31
|
+
},
|
|
32
|
+
}),
|
|
33
|
+
runtime: aws_lambda_1.Runtime.NODEJS_22_X,
|
|
34
|
+
handler: "prerender-check.handler",
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
getFunctionVersion() {
|
|
38
|
+
return aws_lambda_1.Version.fromVersionArn(this, "prerender-check-fn-version", this.edgeFunction.currentVersion.edgeArn);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
exports.PrerenderCheckFunction = PrerenderCheckFunction;
|
|
42
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVuZGVyLWNoZWNrLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByZXJlbmRlci1jaGVjay1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXlEO0FBQ3pELCtEQUEwRDtBQUMxRCx1REFBMEU7QUFDMUUsMkNBQXVDO0FBQ3ZDLCtCQUE0QjtBQUM1QixzREFBK0M7QUFZL0MsTUFBYSxzQkFBdUIsU0FBUSxzQkFBUztJQUduRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE9BQStCOztRQUN2RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSTtZQUNKLElBQUk7WUFDSiw0REFBNEQ7U0FDN0QsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSw2QkFBWSxDQUFDLFlBQVksQ0FDL0MsSUFBSSxFQUNKLEdBQUcsRUFBRSxxQkFBcUIsRUFDMUI7WUFDRSxJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUFFO2dCQUNoRCxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxNQUFNO2dCQUNuQyxRQUFRLEVBQUU7b0JBQ1IsT0FBTztvQkFDUCxLQUFLLEVBQUUseUJBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO29CQUMxQyxLQUFLLEVBQUUsSUFBSSxxQkFBTyxDQUFDO3dCQUNqQixXQUFXLEVBQUUsQ0FBQyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsNkJBQTZCLENBQUMsQ0FBQzt3QkFDN0QsTUFBTSxFQUFFOzRCQUNOLDhCQUE4QixFQUFFLElBQUksQ0FBQyxTQUFTLENBQzVDLE1BQUEsT0FBTyxhQUFQLE9BQU8sdUJBQVAsT0FBTyxDQUFFLG1CQUFtQixtQ0FBSSxJQUFJLENBQ3JDO3lCQUNGO3FCQUNGLENBQUM7aUJBQ0g7YUFDRixDQUFDO1lBQ0YsT0FBTyxFQUFFLG9CQUFPLENBQUMsV0FBVztZQUM1QixPQUFPLEVBQUUseUJBQXlCO1NBQ25DLENBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxrQkFBa0I7UUFDdkIsT0FBTyxvQkFBTyxDQUFDLGNBQWMsQ0FDM0IsSUFBSSxFQUNKLDRCQUE0QixFQUM1QixJQUFJLENBQUMsWUFBWSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQ3pDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUE1Q0Qsd0RBNENDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXNzZXRIYXNoVHlwZSwgRG9ja2VySW1hZ2UgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IGV4cGVyaW1lbnRhbCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgQ29kZSwgSVZlcnNpb24sIFJ1bnRpbWUsIFZlcnNpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IGpvaW4gfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgRXNidWlsZCB9IGZyb20gXCJAYWxpZ2VudC9jZGstZXNidWlsZFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByZXJlbmRlckNoZWNrT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBIGN1c3RvbSByZWdleCBzdHJpbmcgdG8gZGV0ZWN0IGJvdHMuIFdpbGwgYmUgdXNlZCBpbiBhZGRpdGlvblxuICAgKiB0byB0aGUgZXhpc3RpbmcgYm90IGNoZWNrIHJlZ2V4IHRvIGRldGVybWluZSBpZiBhIHVzZXItYWdlbnQgaXMgYSBib3QuXG4gICAqXG4gICAqIEB0eXBlIHN0cmluZ1xuICAgKi9cbiAgY3VzdG9tQm90Q2hlY2tSZWdleDogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUHJlcmVuZGVyQ2hlY2tGdW5jdGlvbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IGVkZ2VGdW5jdGlvbjogZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBvcHRpb25zPzogUHJlcmVuZGVyQ2hlY2tPcHRpb25zKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGNvbW1hbmQgPSBbXG4gICAgICBcInNoXCIsXG4gICAgICBcIi1jXCIsXG4gICAgICAnZWNobyBcIkRvY2tlciBidWlsZCBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgaW5zdGFsbCBlc2J1aWxkLlwiJyxcbiAgICBdO1xuXG4gICAgdGhpcy5lZGdlRnVuY3Rpb24gPSBuZXcgZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBgJHtpZH0tcHJlcmVuZGVyLWNoZWNrLWZuYCxcbiAgICAgIHtcbiAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoam9pbihfX2Rpcm5hbWUsIFwiaGFuZGxlcnNcIiksIHtcbiAgICAgICAgICBhc3NldEhhc2hUeXBlOiBBc3NldEhhc2hUeXBlLk9VVFBVVCxcbiAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIGltYWdlOiBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoXCJidXN5Ym94XCIpLFxuICAgICAgICAgICAgbG9jYWw6IG5ldyBFc2J1aWxkKHtcbiAgICAgICAgICAgICAgZW50cnlQb2ludHM6IFtqb2luKF9fZGlybmFtZSwgXCJoYW5kbGVycy9wcmVyZW5kZXItY2hlY2sudHNcIildLFxuICAgICAgICAgICAgICBkZWZpbmU6IHtcbiAgICAgICAgICAgICAgICBcInByb2Nlc3MuZW52LkNVU1RPTV9CT1RfQ0hFQ0tcIjogSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPy5jdXN0b21Cb3RDaGVja1JlZ2V4ID8/IFwiW11cIlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgICAgaGFuZGxlcjogXCJwcmVyZW5kZXItY2hlY2suaGFuZGxlclwiLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RnVuY3Rpb25WZXJzaW9uKCk6IElWZXJzaW9uIHtcbiAgICByZXR1cm4gVmVyc2lvbi5mcm9tVmVyc2lvbkFybihcbiAgICAgIHRoaXMsXG4gICAgICBcInByZXJlbmRlci1jaGVjay1mbi12ZXJzaW9uXCIsXG4gICAgICB0aGlzLmVkZ2VGdW5jdGlvbi5jdXJyZW50VmVyc2lvbi5lZGdlQXJuXG4gICAgKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { experimental } from "aws-cdk-lib/aws-cloudfront";
|
|
2
|
+
import { IVersion } from "aws-cdk-lib/aws-lambda";
|
|
3
|
+
import { Construct } from "constructs";
|
|
4
|
+
export interface PrerenderFunctionOptions {
|
|
5
|
+
prerenderToken: string;
|
|
6
|
+
prerenderUrl?: string;
|
|
7
|
+
pathPrefix?: string;
|
|
8
|
+
}
|
|
9
|
+
export declare class PrerenderFunction extends Construct {
|
|
10
|
+
readonly edgeFunction: experimental.EdgeFunction;
|
|
11
|
+
constructor(scope: Construct, id: string, options: PrerenderFunctionOptions);
|
|
12
|
+
getFunctionVersion(): IVersion;
|
|
13
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PrerenderFunction = void 0;
|
|
4
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
5
|
+
const aws_cloudfront_1 = require("aws-cdk-lib/aws-cloudfront");
|
|
6
|
+
const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
|
|
7
|
+
const constructs_1 = require("constructs");
|
|
8
|
+
const path_1 = require("path");
|
|
9
|
+
const cdk_esbuild_1 = require("@aligent/cdk-esbuild");
|
|
10
|
+
class PrerenderFunction extends constructs_1.Construct {
|
|
11
|
+
constructor(scope, id, options) {
|
|
12
|
+
var _a, _b;
|
|
13
|
+
super(scope, id);
|
|
14
|
+
const command = [
|
|
15
|
+
"sh",
|
|
16
|
+
"-c",
|
|
17
|
+
'echo "Docker build not supported. Please install esbuild."',
|
|
18
|
+
];
|
|
19
|
+
this.edgeFunction = new aws_cloudfront_1.experimental.EdgeFunction(this, `${id}-prerender-fn`, {
|
|
20
|
+
code: aws_lambda_1.Code.fromAsset((0, path_1.join)(__dirname, "handlers"), {
|
|
21
|
+
assetHashType: aws_cdk_lib_1.AssetHashType.OUTPUT,
|
|
22
|
+
bundling: {
|
|
23
|
+
command,
|
|
24
|
+
image: aws_cdk_lib_1.DockerImage.fromRegistry("busybox"),
|
|
25
|
+
local: new cdk_esbuild_1.Esbuild({
|
|
26
|
+
entryPoints: [(0, path_1.join)(__dirname, "handlers/prerender.ts")],
|
|
27
|
+
define: {
|
|
28
|
+
"process.env.PRERENDER_TOKEN": JSON.stringify(options.prerenderToken),
|
|
29
|
+
"process.env.PATH_PREFIX": JSON.stringify((_a = options.pathPrefix) !== null && _a !== void 0 ? _a : ""),
|
|
30
|
+
"process.env.PRERENDER_URL": JSON.stringify((_b = options.prerenderUrl) !== null && _b !== void 0 ? _b : "service.prerender.io"),
|
|
31
|
+
},
|
|
32
|
+
}),
|
|
33
|
+
},
|
|
34
|
+
}),
|
|
35
|
+
runtime: aws_lambda_1.Runtime.NODEJS_22_X,
|
|
36
|
+
handler: "prerender.handler",
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
getFunctionVersion() {
|
|
40
|
+
return aws_lambda_1.Version.fromVersionArn(this, "prerender-fn-version", this.edgeFunction.currentVersion.edgeArn);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.PrerenderFunction = PrerenderFunction;
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVuZGVyLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByZXJlbmRlci1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXlEO0FBQ3pELCtEQUEwRDtBQUMxRCx1REFBMEU7QUFDMUUsMkNBQXVDO0FBQ3ZDLCtCQUE0QjtBQUM1QixzREFBK0M7QUFRL0MsTUFBYSxpQkFBa0IsU0FBUSxzQkFBUztJQUc5QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLE9BQWlDOztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLE1BQU0sT0FBTyxHQUFHO1lBQ2QsSUFBSTtZQUNKLElBQUk7WUFDSiw0REFBNEQ7U0FDN0QsQ0FBQztRQUVGLElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSw2QkFBWSxDQUFDLFlBQVksQ0FDL0MsSUFBSSxFQUNKLEdBQUcsRUFBRSxlQUFlLEVBQ3BCO1lBQ0UsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRTtnQkFDaEQsYUFBYSxFQUFFLDJCQUFhLENBQUMsTUFBTTtnQkFDbkMsUUFBUSxFQUFFO29CQUNSLE9BQU87b0JBQ1AsS0FBSyxFQUFFLHlCQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztvQkFDMUMsS0FBSyxFQUFFLElBQUkscUJBQU8sQ0FBQzt3QkFDakIsV0FBVyxFQUFFLENBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLHVCQUF1QixDQUFDLENBQUM7d0JBQ3ZELE1BQU0sRUFBRTs0QkFDTiw2QkFBNkIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUMzQyxPQUFPLENBQUMsY0FBYyxDQUN2Qjs0QkFDRCx5QkFBeUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUN2QyxNQUFBLE9BQU8sQ0FBQyxVQUFVLG1DQUFJLEVBQUUsQ0FDekI7NEJBQ0QsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FDekMsTUFBQSxPQUFPLENBQUMsWUFBWSxtQ0FBSSxzQkFBc0IsQ0FDL0M7eUJBQ0Y7cUJBQ0YsQ0FBQztpQkFDSDthQUNGLENBQUM7WUFDRixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLE9BQU8sRUFBRSxtQkFBbUI7U0FDN0IsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixPQUFPLG9CQUFPLENBQUMsY0FBYyxDQUMzQixJQUFJLEVBQ0osc0JBQXNCLEVBQ3RCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FDekMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWxERCw4Q0FrREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3NldEhhc2hUeXBlLCBEb2NrZXJJbWFnZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgZXhwZXJpbWVudGFsIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCI7XG5pbXBvcnQgeyBDb2RlLCBJVmVyc2lvbiwgUnVudGltZSwgVmVyc2lvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBFc2J1aWxkIH0gZnJvbSBcIkBhbGlnZW50L2Nkay1lc2J1aWxkXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcmVuZGVyRnVuY3Rpb25PcHRpb25zIHtcbiAgcHJlcmVuZGVyVG9rZW46IHN0cmluZztcbiAgcHJlcmVuZGVyVXJsPzogc3RyaW5nO1xuICBwYXRoUHJlZml4Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUHJlcmVuZGVyRnVuY3Rpb24gZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICByZWFkb25seSBlZGdlRnVuY3Rpb246IGV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb247XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgb3B0aW9uczogUHJlcmVuZGVyRnVuY3Rpb25PcHRpb25zKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IGNvbW1hbmQgPSBbXG4gICAgICBcInNoXCIsXG4gICAgICBcIi1jXCIsXG4gICAgICAnZWNobyBcIkRvY2tlciBidWlsZCBub3Qgc3VwcG9ydGVkLiBQbGVhc2UgaW5zdGFsbCBlc2J1aWxkLlwiJyxcbiAgICBdO1xuXG4gICAgdGhpcy5lZGdlRnVuY3Rpb24gPSBuZXcgZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBgJHtpZH0tcHJlcmVuZGVyLWZuYCxcbiAgICAgIHtcbiAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoam9pbihfX2Rpcm5hbWUsIFwiaGFuZGxlcnNcIiksIHtcbiAgICAgICAgICBhc3NldEhhc2hUeXBlOiBBc3NldEhhc2hUeXBlLk9VVFBVVCxcbiAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIGltYWdlOiBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoXCJidXN5Ym94XCIpLFxuICAgICAgICAgICAgbG9jYWw6IG5ldyBFc2J1aWxkKHtcbiAgICAgICAgICAgICAgZW50cnlQb2ludHM6IFtqb2luKF9fZGlybmFtZSwgXCJoYW5kbGVycy9wcmVyZW5kZXIudHNcIildLFxuICAgICAgICAgICAgICBkZWZpbmU6IHtcbiAgICAgICAgICAgICAgICBcInByb2Nlc3MuZW52LlBSRVJFTkRFUl9UT0tFTlwiOiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMucHJlcmVuZGVyVG9rZW5cbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgIFwicHJvY2Vzcy5lbnYuUEFUSF9QUkVGSVhcIjogSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLnBhdGhQcmVmaXggPz8gXCJcIlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgXCJwcm9jZXNzLmVudi5QUkVSRU5ERVJfVVJMXCI6IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcmVyZW5kZXJVcmwgPz8gXCJzZXJ2aWNlLnByZXJlbmRlci5pb1wiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgICBoYW5kbGVyOiBcInByZXJlbmRlci5oYW5kbGVyXCIsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdW5jdGlvblZlcnNpb24oKTogSVZlcnNpb24ge1xuICAgIHJldHVybiBWZXJzaW9uLmZyb21WZXJzaW9uQXJuKFxuICAgICAgdGhpcyxcbiAgICAgIFwicHJlcmVuZGVyLWZuLXZlcnNpb25cIixcbiAgICAgIHRoaXMuZWRnZUZ1bmN0aW9uLmN1cnJlbnRWZXJzaW9uLmVkZ2VBcm5cbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Construct } from "constructs";
|
|
2
|
+
import { CloudFrontCacheControl, CloudFrontCacheControlOptions } from "./prerender-cf-cache-control-construct";
|
|
3
|
+
import { PrerenderCheckFunction, PrerenderCheckOptions } from "./prerender-check-construct";
|
|
4
|
+
import { PrerenderFunction, PrerenderFunctionOptions } from "./prerender-construct";
|
|
5
|
+
import { ErrorResponseFunction, ErrorResponseFunctionOptions } from "./error-response-construct";
|
|
6
|
+
export interface PrerenderLambdaProps {
|
|
7
|
+
prerenderProps: PrerenderFunctionOptions;
|
|
8
|
+
errorResponseProps: ErrorResponseFunctionOptions;
|
|
9
|
+
prerenderCheckOptions?: PrerenderCheckOptions;
|
|
10
|
+
cacheControlProps?: CloudFrontCacheControlOptions;
|
|
11
|
+
}
|
|
12
|
+
export declare class PrerenderLambda extends Construct {
|
|
13
|
+
readonly prerenderCheckFunction: PrerenderCheckFunction;
|
|
14
|
+
readonly prerenderFunction: PrerenderFunction;
|
|
15
|
+
readonly errorResponseFunction: ErrorResponseFunction;
|
|
16
|
+
readonly cacheControlFunction: CloudFrontCacheControl;
|
|
17
|
+
constructor(scope: Construct, id: string, props: PrerenderLambdaProps);
|
|
18
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PrerenderLambda = void 0;
|
|
4
|
+
const constructs_1 = require("constructs");
|
|
5
|
+
const prerender_cf_cache_control_construct_1 = require("./prerender-cf-cache-control-construct");
|
|
6
|
+
const prerender_check_construct_1 = require("./prerender-check-construct");
|
|
7
|
+
const prerender_construct_1 = require("./prerender-construct");
|
|
8
|
+
const error_response_construct_1 = require("./error-response-construct");
|
|
9
|
+
class PrerenderLambda extends constructs_1.Construct {
|
|
10
|
+
constructor(scope, id, props) {
|
|
11
|
+
super(scope, id);
|
|
12
|
+
this.prerenderCheckFunction = new prerender_check_construct_1.PrerenderCheckFunction(this, `${id}-PrerenderViewerRequest`, props.prerenderCheckOptions);
|
|
13
|
+
this.prerenderFunction = new prerender_construct_1.PrerenderFunction(this, `${id}-PrerenderOriginRequest`, props.prerenderProps);
|
|
14
|
+
this.errorResponseFunction = new error_response_construct_1.ErrorResponseFunction(this, `${id}-ErrorResponse`, props.errorResponseProps);
|
|
15
|
+
this.cacheControlFunction = new prerender_cf_cache_control_construct_1.CloudFrontCacheControl(this, `${id}-PrerenderCloudFrontCacheControl`, props.cacheControlProps);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.PrerenderLambda = PrerenderLambda;
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVuZGVyLWxhbWJkYS1jb25zdHJ1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJwcmVyZW5kZXItbGFtYmRhLWNvbnN0cnVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyQ0FBdUM7QUFDdkMsaUdBR2dEO0FBQ2hELDJFQUdxQztBQUNyQywrREFHK0I7QUFDL0IseUVBR29DO0FBU3BDLE1BQWEsZUFBZ0IsU0FBUSxzQkFBUztJQU01QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQTJCO1FBQ25FLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLElBQUksa0RBQXNCLENBQ3RELElBQUksRUFDSixHQUFHLEVBQUUseUJBQXlCLEVBQzlCLEtBQUssQ0FBQyxxQkFBcUIsQ0FDNUIsQ0FBQztRQUVGLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLHVDQUFpQixDQUM1QyxJQUFJLEVBQ0osR0FBRyxFQUFFLHlCQUF5QixFQUM5QixLQUFLLENBQUMsY0FBYyxDQUNyQixDQUFDO1FBRUYsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksZ0RBQXFCLENBQ3BELElBQUksRUFDSixHQUFHLEVBQUUsZ0JBQWdCLEVBQ3JCLEtBQUssQ0FBQyxrQkFBa0IsQ0FDekIsQ0FBQztRQUVGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLDZEQUFzQixDQUNwRCxJQUFJLEVBQ0osR0FBRyxFQUFFLGtDQUFrQyxFQUN2QyxLQUFLLENBQUMsaUJBQWlCLENBQ3hCLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFqQ0QsMENBaUNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7XG4gIENsb3VkRnJvbnRDYWNoZUNvbnRyb2wsXG4gIENsb3VkRnJvbnRDYWNoZUNvbnRyb2xPcHRpb25zLFxufSBmcm9tIFwiLi9wcmVyZW5kZXItY2YtY2FjaGUtY29udHJvbC1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7XG4gIFByZXJlbmRlckNoZWNrRnVuY3Rpb24sXG4gIFByZXJlbmRlckNoZWNrT3B0aW9ucyxcbn0gZnJvbSBcIi4vcHJlcmVuZGVyLWNoZWNrLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHtcbiAgUHJlcmVuZGVyRnVuY3Rpb24sXG4gIFByZXJlbmRlckZ1bmN0aW9uT3B0aW9ucyxcbn0gZnJvbSBcIi4vcHJlcmVuZGVyLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHtcbiAgRXJyb3JSZXNwb25zZUZ1bmN0aW9uLFxuICBFcnJvclJlc3BvbnNlRnVuY3Rpb25PcHRpb25zLFxufSBmcm9tIFwiLi9lcnJvci1yZXNwb25zZS1jb25zdHJ1Y3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcmVyZW5kZXJMYW1iZGFQcm9wcyB7XG4gIHByZXJlbmRlclByb3BzOiBQcmVyZW5kZXJGdW5jdGlvbk9wdGlvbnM7XG4gIGVycm9yUmVzcG9uc2VQcm9wczogRXJyb3JSZXNwb25zZUZ1bmN0aW9uT3B0aW9ucztcbiAgcHJlcmVuZGVyQ2hlY2tPcHRpb25zPzogUHJlcmVuZGVyQ2hlY2tPcHRpb25zO1xuICBjYWNoZUNvbnRyb2xQcm9wcz86IENsb3VkRnJvbnRDYWNoZUNvbnRyb2xPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgUHJlcmVuZGVyTGFtYmRhIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcmVhZG9ubHkgcHJlcmVuZGVyQ2hlY2tGdW5jdGlvbjogUHJlcmVuZGVyQ2hlY2tGdW5jdGlvbjtcbiAgcmVhZG9ubHkgcHJlcmVuZGVyRnVuY3Rpb246IFByZXJlbmRlckZ1bmN0aW9uO1xuICByZWFkb25seSBlcnJvclJlc3BvbnNlRnVuY3Rpb246IEVycm9yUmVzcG9uc2VGdW5jdGlvbjtcbiAgcmVhZG9ubHkgY2FjaGVDb250cm9sRnVuY3Rpb246IENsb3VkRnJvbnRDYWNoZUNvbnRyb2w7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFByZXJlbmRlckxhbWJkYVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIHRoaXMucHJlcmVuZGVyQ2hlY2tGdW5jdGlvbiA9IG5ldyBQcmVyZW5kZXJDaGVja0Z1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2lkfS1QcmVyZW5kZXJWaWV3ZXJSZXF1ZXN0YCxcbiAgICAgIHByb3BzLnByZXJlbmRlckNoZWNrT3B0aW9uc1xuICAgICk7XG5cbiAgICB0aGlzLnByZXJlbmRlckZ1bmN0aW9uID0gbmV3IFByZXJlbmRlckZ1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2lkfS1QcmVyZW5kZXJPcmlnaW5SZXF1ZXN0YCxcbiAgICAgIHByb3BzLnByZXJlbmRlclByb3BzXG4gICAgKTtcblxuICAgIHRoaXMuZXJyb3JSZXNwb25zZUZ1bmN0aW9uID0gbmV3IEVycm9yUmVzcG9uc2VGdW5jdGlvbihcbiAgICAgIHRoaXMsXG4gICAgICBgJHtpZH0tRXJyb3JSZXNwb25zZWAsXG4gICAgICBwcm9wcy5lcnJvclJlc3BvbnNlUHJvcHNcbiAgICApO1xuXG4gICAgdGhpcy5jYWNoZUNvbnRyb2xGdW5jdGlvbiA9IG5ldyBDbG91ZEZyb250Q2FjaGVDb250cm9sKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2lkfS1QcmVyZW5kZXJDbG91ZEZyb250Q2FjaGVDb250cm9sYCxcbiAgICAgIHByb3BzLmNhY2hlQ29udHJvbFByb3BzXG4gICAgKTtcbiAgfVxufVxuIl19
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aligent/cdk-prerender-proxy",
|
|
3
|
-
"version": "2.5.
|
|
3
|
+
"version": "2.5.2",
|
|
4
4
|
"description": "Cloudfront Lambda@Edge constructs for integrating with prerender.io",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
},
|
|
19
19
|
"homepage": "https://github.com/aligent/aws-cdk-constructs/tree/main/packages/prerender-proxy#readme",
|
|
20
20
|
"devDependencies": {
|
|
21
|
-
"@aligent/cdk-esbuild": "^2.5.
|
|
21
|
+
"@aligent/cdk-esbuild": "^2.5.2",
|
|
22
22
|
"@types/aws-lambda": "^8.10.150",
|
|
23
23
|
"@types/jest": "^29.5.10",
|
|
24
24
|
"@types/node": "^20.6.3",
|
package/index.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
PrerenderLambda,
|
|
3
|
-
PrerenderLambdaProps,
|
|
4
|
-
} from "./lib/prerender-lambda-construct";
|
|
5
|
-
import {
|
|
6
|
-
PrerenderFunction,
|
|
7
|
-
PrerenderFunctionOptions,
|
|
8
|
-
} from "./lib/prerender-construct";
|
|
9
|
-
import { PrerenderCheckFunction } from "./lib/prerender-check-construct";
|
|
10
|
-
import {
|
|
11
|
-
ErrorResponseFunction,
|
|
12
|
-
ErrorResponseFunctionOptions,
|
|
13
|
-
} from "./lib/error-response-construct";
|
|
14
|
-
import {
|
|
15
|
-
CloudFrontCacheControl,
|
|
16
|
-
CloudFrontCacheControlOptions,
|
|
17
|
-
} from "./lib/prerender-cf-cache-control-construct";
|
|
18
|
-
|
|
19
|
-
export {
|
|
20
|
-
PrerenderLambda,
|
|
21
|
-
PrerenderFunction,
|
|
22
|
-
PrerenderCheckFunction,
|
|
23
|
-
ErrorResponseFunction,
|
|
24
|
-
CloudFrontCacheControl,
|
|
25
|
-
CloudFrontCacheControlOptions,
|
|
26
|
-
ErrorResponseFunctionOptions,
|
|
27
|
-
PrerenderFunctionOptions,
|
|
28
|
-
PrerenderLambdaProps,
|
|
29
|
-
};
|
package/jest.config.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/* eslint-disable */
|
|
2
|
-
export default {
|
|
3
|
-
displayName: "prerender-proxy",
|
|
4
|
-
preset: "../../jest.preset.js",
|
|
5
|
-
testEnvironment: "node",
|
|
6
|
-
transform: {
|
|
7
|
-
"^.+\\.[tj]s$": ["ts-jest", { tsconfig: "<rootDir>/tsconfig.spec.json" }],
|
|
8
|
-
},
|
|
9
|
-
moduleFileExtensions: ["ts", "js", "html"],
|
|
10
|
-
coverageDirectory: "../../coverage/packages/prerender-proxy",
|
|
11
|
-
};
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { AssetHashType, DockerImage } from "aws-cdk-lib";
|
|
2
|
-
import { experimental } from "aws-cdk-lib/aws-cloudfront";
|
|
3
|
-
import { Code, IVersion, Runtime, Version } from "aws-cdk-lib/aws-lambda";
|
|
4
|
-
import { Construct } from "constructs";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
import { Esbuild } from "@aligent/cdk-esbuild";
|
|
7
|
-
|
|
8
|
-
export interface ErrorResponseFunctionOptions {
|
|
9
|
-
pathPrefix?: string;
|
|
10
|
-
frontendHost: string;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export class ErrorResponseFunction extends Construct {
|
|
14
|
-
readonly edgeFunction: experimental.EdgeFunction;
|
|
15
|
-
|
|
16
|
-
constructor(
|
|
17
|
-
scope: Construct,
|
|
18
|
-
id: string,
|
|
19
|
-
options: ErrorResponseFunctionOptions
|
|
20
|
-
) {
|
|
21
|
-
super(scope, id);
|
|
22
|
-
|
|
23
|
-
const command = [
|
|
24
|
-
"sh",
|
|
25
|
-
"-c",
|
|
26
|
-
'echo "Docker build not supported. Please install esbuild."',
|
|
27
|
-
];
|
|
28
|
-
|
|
29
|
-
this.edgeFunction = new experimental.EdgeFunction(
|
|
30
|
-
this,
|
|
31
|
-
`${id}-error-response-fn`,
|
|
32
|
-
{
|
|
33
|
-
code: Code.fromAsset(join(__dirname, "handlers"), {
|
|
34
|
-
assetHashType: AssetHashType.OUTPUT,
|
|
35
|
-
bundling: {
|
|
36
|
-
command,
|
|
37
|
-
image: DockerImage.fromRegistry("busybox"),
|
|
38
|
-
local: new Esbuild({
|
|
39
|
-
entryPoints: [join(__dirname, "handlers/error-response.ts")],
|
|
40
|
-
define: {
|
|
41
|
-
"process.env.PATH_PREFIX": JSON.stringify(
|
|
42
|
-
options.pathPrefix ?? ""
|
|
43
|
-
),
|
|
44
|
-
"process.env.FRONTEND_HOST": JSON.stringify(
|
|
45
|
-
options.frontendHost
|
|
46
|
-
),
|
|
47
|
-
},
|
|
48
|
-
}),
|
|
49
|
-
},
|
|
50
|
-
}),
|
|
51
|
-
runtime: Runtime.NODEJS_22_X,
|
|
52
|
-
handler: "error-response.handler",
|
|
53
|
-
}
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
public getFunctionVersion(): IVersion {
|
|
58
|
-
return Version.fromVersionArn(
|
|
59
|
-
this,
|
|
60
|
-
"error-response-fn-version",
|
|
61
|
-
this.edgeFunction.currentVersion.edgeArn
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { AssetHashType, DockerImage } from "aws-cdk-lib";
|
|
2
|
-
import { experimental } from "aws-cdk-lib/aws-cloudfront";
|
|
3
|
-
import { Code, IVersion, Runtime, Version } from "aws-cdk-lib/aws-lambda";
|
|
4
|
-
import { Construct } from "constructs";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
import { Esbuild } from "@aligent/cdk-esbuild";
|
|
7
|
-
|
|
8
|
-
export interface CloudFrontCacheControlOptions {
|
|
9
|
-
cacheKey?: string;
|
|
10
|
-
maxAge?: number;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export class CloudFrontCacheControl extends Construct {
|
|
14
|
-
readonly edgeFunction: experimental.EdgeFunction;
|
|
15
|
-
|
|
16
|
-
constructor(
|
|
17
|
-
scope: Construct,
|
|
18
|
-
id: string,
|
|
19
|
-
options?: CloudFrontCacheControlOptions
|
|
20
|
-
) {
|
|
21
|
-
super(scope, id);
|
|
22
|
-
|
|
23
|
-
const command = [
|
|
24
|
-
"sh",
|
|
25
|
-
"-c",
|
|
26
|
-
'echo "Docker build not supported. Please install esbuild."',
|
|
27
|
-
];
|
|
28
|
-
|
|
29
|
-
this.edgeFunction = new experimental.EdgeFunction(
|
|
30
|
-
this,
|
|
31
|
-
`${id}-cache-control-fn`,
|
|
32
|
-
{
|
|
33
|
-
code: Code.fromAsset(join(__dirname, "handlers"), {
|
|
34
|
-
assetHashType: AssetHashType.OUTPUT,
|
|
35
|
-
bundling: {
|
|
36
|
-
command,
|
|
37
|
-
image: DockerImage.fromRegistry("busybox"),
|
|
38
|
-
local: new Esbuild({
|
|
39
|
-
entryPoints: [join(__dirname, "handlers/cache-control.ts")],
|
|
40
|
-
define: {
|
|
41
|
-
"process.env.PRERENDER_CACHE_KEY": JSON.stringify(
|
|
42
|
-
options?.cacheKey ?? "x-prerender-requestid"
|
|
43
|
-
),
|
|
44
|
-
"process.env.PRERENDER_CACHE_MAX_AGE": JSON.stringify(
|
|
45
|
-
String(options?.maxAge ?? 0)
|
|
46
|
-
),
|
|
47
|
-
},
|
|
48
|
-
}),
|
|
49
|
-
},
|
|
50
|
-
}),
|
|
51
|
-
runtime: Runtime.NODEJS_22_X,
|
|
52
|
-
handler: "cache-control.handler",
|
|
53
|
-
}
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
public getFunctionVersion(): IVersion {
|
|
58
|
-
return Version.fromVersionArn(
|
|
59
|
-
this,
|
|
60
|
-
"cache-control-fn-version",
|
|
61
|
-
this.edgeFunction.currentVersion.edgeArn
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import { AssetHashType, DockerImage } from "aws-cdk-lib";
|
|
2
|
-
import { experimental } from "aws-cdk-lib/aws-cloudfront";
|
|
3
|
-
import { Code, IVersion, Runtime, Version } from "aws-cdk-lib/aws-lambda";
|
|
4
|
-
import { Construct } from "constructs";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
import { Esbuild } from "@aligent/cdk-esbuild";
|
|
7
|
-
|
|
8
|
-
export interface PrerenderCheckOptions {
|
|
9
|
-
/**
|
|
10
|
-
* A custom regex string to detect bots. Will be used in addition
|
|
11
|
-
* to the existing bot check regex to determine if a user-agent is a bot.
|
|
12
|
-
*
|
|
13
|
-
* @type string
|
|
14
|
-
*/
|
|
15
|
-
customBotCheckRegex: string;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export class PrerenderCheckFunction extends Construct {
|
|
19
|
-
readonly edgeFunction: experimental.EdgeFunction;
|
|
20
|
-
|
|
21
|
-
constructor(scope: Construct, id: string, options?: PrerenderCheckOptions) {
|
|
22
|
-
super(scope, id);
|
|
23
|
-
|
|
24
|
-
const command = [
|
|
25
|
-
"sh",
|
|
26
|
-
"-c",
|
|
27
|
-
'echo "Docker build not supported. Please install esbuild."',
|
|
28
|
-
];
|
|
29
|
-
|
|
30
|
-
this.edgeFunction = new experimental.EdgeFunction(
|
|
31
|
-
this,
|
|
32
|
-
`${id}-prerender-check-fn`,
|
|
33
|
-
{
|
|
34
|
-
code: Code.fromAsset(join(__dirname, "handlers"), {
|
|
35
|
-
assetHashType: AssetHashType.OUTPUT,
|
|
36
|
-
bundling: {
|
|
37
|
-
command,
|
|
38
|
-
image: DockerImage.fromRegistry("busybox"),
|
|
39
|
-
local: new Esbuild({
|
|
40
|
-
entryPoints: [join(__dirname, "handlers/prerender-check.ts")],
|
|
41
|
-
define: {
|
|
42
|
-
"process.env.CUSTOM_BOT_CHECK": JSON.stringify(
|
|
43
|
-
options?.customBotCheckRegex ?? "[]"
|
|
44
|
-
),
|
|
45
|
-
},
|
|
46
|
-
}),
|
|
47
|
-
},
|
|
48
|
-
}),
|
|
49
|
-
runtime: Runtime.NODEJS_22_X,
|
|
50
|
-
handler: "prerender-check.handler",
|
|
51
|
-
}
|
|
52
|
-
);
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
public getFunctionVersion(): IVersion {
|
|
56
|
-
return Version.fromVersionArn(
|
|
57
|
-
this,
|
|
58
|
-
"prerender-check-fn-version",
|
|
59
|
-
this.edgeFunction.currentVersion.edgeArn
|
|
60
|
-
);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
import { AssetHashType, DockerImage } from "aws-cdk-lib";
|
|
2
|
-
import { experimental } from "aws-cdk-lib/aws-cloudfront";
|
|
3
|
-
import { Code, IVersion, Runtime, Version } from "aws-cdk-lib/aws-lambda";
|
|
4
|
-
import { Construct } from "constructs";
|
|
5
|
-
import { join } from "path";
|
|
6
|
-
import { Esbuild } from "@aligent/cdk-esbuild";
|
|
7
|
-
|
|
8
|
-
export interface PrerenderFunctionOptions {
|
|
9
|
-
prerenderToken: string;
|
|
10
|
-
prerenderUrl?: string;
|
|
11
|
-
pathPrefix?: string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
export class PrerenderFunction extends Construct {
|
|
15
|
-
readonly edgeFunction: experimental.EdgeFunction;
|
|
16
|
-
|
|
17
|
-
constructor(scope: Construct, id: string, options: PrerenderFunctionOptions) {
|
|
18
|
-
super(scope, id);
|
|
19
|
-
|
|
20
|
-
const command = [
|
|
21
|
-
"sh",
|
|
22
|
-
"-c",
|
|
23
|
-
'echo "Docker build not supported. Please install esbuild."',
|
|
24
|
-
];
|
|
25
|
-
|
|
26
|
-
this.edgeFunction = new experimental.EdgeFunction(
|
|
27
|
-
this,
|
|
28
|
-
`${id}-prerender-fn`,
|
|
29
|
-
{
|
|
30
|
-
code: Code.fromAsset(join(__dirname, "handlers"), {
|
|
31
|
-
assetHashType: AssetHashType.OUTPUT,
|
|
32
|
-
bundling: {
|
|
33
|
-
command,
|
|
34
|
-
image: DockerImage.fromRegistry("busybox"),
|
|
35
|
-
local: new Esbuild({
|
|
36
|
-
entryPoints: [join(__dirname, "handlers/prerender.ts")],
|
|
37
|
-
define: {
|
|
38
|
-
"process.env.PRERENDER_TOKEN": JSON.stringify(
|
|
39
|
-
options.prerenderToken
|
|
40
|
-
),
|
|
41
|
-
"process.env.PATH_PREFIX": JSON.stringify(
|
|
42
|
-
options.pathPrefix ?? ""
|
|
43
|
-
),
|
|
44
|
-
"process.env.PRERENDER_URL": JSON.stringify(
|
|
45
|
-
options.prerenderUrl ?? "service.prerender.io"
|
|
46
|
-
),
|
|
47
|
-
},
|
|
48
|
-
}),
|
|
49
|
-
},
|
|
50
|
-
}),
|
|
51
|
-
runtime: Runtime.NODEJS_22_X,
|
|
52
|
-
handler: "prerender.handler",
|
|
53
|
-
}
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
public getFunctionVersion(): IVersion {
|
|
58
|
-
return Version.fromVersionArn(
|
|
59
|
-
this,
|
|
60
|
-
"prerender-fn-version",
|
|
61
|
-
this.edgeFunction.currentVersion.edgeArn
|
|
62
|
-
);
|
|
63
|
-
}
|
|
64
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { Construct } from "constructs";
|
|
2
|
-
import {
|
|
3
|
-
CloudFrontCacheControl,
|
|
4
|
-
CloudFrontCacheControlOptions,
|
|
5
|
-
} from "./prerender-cf-cache-control-construct";
|
|
6
|
-
import {
|
|
7
|
-
PrerenderCheckFunction,
|
|
8
|
-
PrerenderCheckOptions,
|
|
9
|
-
} from "./prerender-check-construct";
|
|
10
|
-
import {
|
|
11
|
-
PrerenderFunction,
|
|
12
|
-
PrerenderFunctionOptions,
|
|
13
|
-
} from "./prerender-construct";
|
|
14
|
-
import {
|
|
15
|
-
ErrorResponseFunction,
|
|
16
|
-
ErrorResponseFunctionOptions,
|
|
17
|
-
} from "./error-response-construct";
|
|
18
|
-
|
|
19
|
-
export interface PrerenderLambdaProps {
|
|
20
|
-
prerenderProps: PrerenderFunctionOptions;
|
|
21
|
-
errorResponseProps: ErrorResponseFunctionOptions;
|
|
22
|
-
prerenderCheckOptions?: PrerenderCheckOptions;
|
|
23
|
-
cacheControlProps?: CloudFrontCacheControlOptions;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export class PrerenderLambda extends Construct {
|
|
27
|
-
readonly prerenderCheckFunction: PrerenderCheckFunction;
|
|
28
|
-
readonly prerenderFunction: PrerenderFunction;
|
|
29
|
-
readonly errorResponseFunction: ErrorResponseFunction;
|
|
30
|
-
readonly cacheControlFunction: CloudFrontCacheControl;
|
|
31
|
-
|
|
32
|
-
constructor(scope: Construct, id: string, props: PrerenderLambdaProps) {
|
|
33
|
-
super(scope, id);
|
|
34
|
-
|
|
35
|
-
this.prerenderCheckFunction = new PrerenderCheckFunction(
|
|
36
|
-
this,
|
|
37
|
-
`${id}-PrerenderViewerRequest`,
|
|
38
|
-
props.prerenderCheckOptions
|
|
39
|
-
);
|
|
40
|
-
|
|
41
|
-
this.prerenderFunction = new PrerenderFunction(
|
|
42
|
-
this,
|
|
43
|
-
`${id}-PrerenderOriginRequest`,
|
|
44
|
-
props.prerenderProps
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
this.errorResponseFunction = new ErrorResponseFunction(
|
|
48
|
-
this,
|
|
49
|
-
`${id}-ErrorResponse`,
|
|
50
|
-
props.errorResponseProps
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
this.cacheControlFunction = new CloudFrontCacheControl(
|
|
54
|
-
this,
|
|
55
|
-
`${id}-PrerenderCloudFrontCacheControl`,
|
|
56
|
-
props.cacheControlProps
|
|
57
|
-
);
|
|
58
|
-
}
|
|
59
|
-
}
|
package/project.json
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "prerender-proxy",
|
|
3
|
-
"$schema": "../../node_modules/nx/schemas/project-schema.json",
|
|
4
|
-
"sourceRoot": "packages/prerender-proxy/lib",
|
|
5
|
-
"projectType": "application",
|
|
6
|
-
"targets": {
|
|
7
|
-
"build": {
|
|
8
|
-
"executor": "@nx/js:tsc",
|
|
9
|
-
"options": {
|
|
10
|
-
"main": "packages/prerender-proxy/index.ts",
|
|
11
|
-
"outputPath": "dist/prerender-proxy",
|
|
12
|
-
"tsConfig": "packages/prerender-proxy/tsconfig.app.json",
|
|
13
|
-
"assets": [
|
|
14
|
-
"packages/prerender-proxy/lib/handlers/**",
|
|
15
|
-
"packages/prerender-proxy/README.md"
|
|
16
|
-
]
|
|
17
|
-
},
|
|
18
|
-
"dependsOn": ["merge-gitignore"]
|
|
19
|
-
},
|
|
20
|
-
"lint": {
|
|
21
|
-
"executor": "@nx/eslint:lint",
|
|
22
|
-
"outputs": ["{options.outputFile}"],
|
|
23
|
-
"options": {
|
|
24
|
-
"fix": false
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
"test": {
|
|
28
|
-
"executor": "@nx/jest:jest",
|
|
29
|
-
"outputs": ["{workspaceRoot}/coverage/{projectRoot}"],
|
|
30
|
-
"options": {
|
|
31
|
-
"jestConfig": "packages/prerender-proxy/jest.config.ts",
|
|
32
|
-
"passWithNoTests": true
|
|
33
|
-
}
|
|
34
|
-
},
|
|
35
|
-
"publish": {
|
|
36
|
-
"command": "node tools/scripts/publish.mjs prerender-proxy {args.ver} {args.tag}",
|
|
37
|
-
"dependsOn": ["build"]
|
|
38
|
-
},
|
|
39
|
-
"merge-gitignore": {
|
|
40
|
-
"executor": "nx:run-commands",
|
|
41
|
-
"options": {
|
|
42
|
-
"command": "node tools/scripts/merge-gitignore.mjs prerender-proxy"
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
"tags": []
|
|
47
|
-
}
|
package/tsconfig.app.json
DELETED
package/tsconfig.json
DELETED