@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 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.0",
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.0",
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
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "../../dist/out-tsc",
5
- "module": "commonjs",
6
- "types": ["node"]
7
- },
8
- "exclude": ["./jest.config.ts", "lib/handlers"],
9
- "include": ["lib/**/*.ts", "index.ts"]
10
- }
package/tsconfig.json DELETED
@@ -1,16 +0,0 @@
1
- {
2
- "extends": "../../tsconfig.base.json",
3
- "files": [],
4
- "include": [],
5
- "references": [
6
- {
7
- "path": "./tsconfig.app.json"
8
- },
9
- {
10
- "path": "./tsconfig.spec.json"
11
- }
12
- ],
13
- "compilerOptions": {
14
- "esModuleInterop": true
15
- }
16
- }
@@ -1,8 +0,0 @@
1
- {
2
- "extends": "./tsconfig.json",
3
- "compilerOptions": {
4
- "outDir": "../../dist/out-tsc",
5
- "module": "commonjs",
6
- "types": ["jest", "node"]
7
- }
8
- }