@aligent/cdk-prerender-proxy 2.4.2 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/README.md +26 -0
- package/index.ts +29 -0
- package/jest.config.ts +11 -0
- package/lib/error-response-construct.ts +64 -0
- package/lib/prerender-cf-cache-control-construct.ts +64 -0
- package/lib/prerender-check-construct.ts +62 -0
- package/lib/prerender-construct.ts +64 -0
- package/lib/prerender-lambda-construct.ts +59 -0
- package/package.json +10 -10
- package/project.json +47 -0
- package/tsconfig.app.json +10 -0
- package/tsconfig.json +16 -0
- package/tsconfig.spec.json +8 -0
- package/index.d.ts +0 -6
- package/index.js +0 -14
- package/lib/error-response-construct.d.ts +0 -12
- package/lib/error-response-construct.js +0 -43
- package/lib/prerender-cf-cache-control-construct.d.ts +0 -12
- package/lib/prerender-cf-cache-control-construct.js +0 -43
- package/lib/prerender-check-construct.d.ts +0 -17
- package/lib/prerender-check-construct.js +0 -42
- package/lib/prerender-construct.d.ts +0 -13
- package/lib/prerender-construct.js +0 -44
- package/lib/prerender-lambda-construct.d.ts +0 -18
- package/lib/prerender-lambda-construct.js +0 -19
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# @aligent/cdk-prerender-proxy
|
|
2
|
+
|
|
3
|
+
## 2.5.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#1512](https://github.com/aligent/cdk-constructs/pull/1512) [`a9a6231`](https://github.com/aligent/cdk-constructs/commit/a9a62319e4528ac2d23f3af96e96cb2427f242f8) Thanks [@TheOrangePuff](https://github.com/TheOrangePuff)! - Adds changeset package to handle release management
|
package/README.md
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Prerender Proxy
|
|
2
|
+
|
|
3
|
+
This library provides two function constructs and a construct that creates two Lambda@Edge functions to use prerender.io as a Cloudfront Origin for site indexers (Google, Bing, etc).
|
|
4
|
+
|
|
5
|
+
The `prerender-check` is a `viewer-request` function that will check if a requester is from a indexer and if it is adds a header so that the second function `prerender` (`origin-request`) will alter the origin to prerender.
|
|
6
|
+
|
|
7
|
+
The `prerender` will function also make a HEAD request to a nominated backend to detect 301 and 302 redirects and if so forward them on to the frontend. This ensures that your SEO rankings are not penalized by having multiple pages at the same URL.
|
|
8
|
+
|
|
9
|
+
These functions are intended to be added to an existing Cloudfront
|
|
10
|
+
|
|
11
|
+
## Cache Control
|
|
12
|
+
|
|
13
|
+
The intention of `cache-control` function is to avoid/control CloudFront Caches for `prerender` bot.
|
|
14
|
+
This function to be associated with CloudFront's `origin response`
|
|
15
|
+
|
|
16
|
+
## Props
|
|
17
|
+
|
|
18
|
+
`redirectBackendOrigin`: The backend origin to make the HEAD request to
|
|
19
|
+
`redirectFrontendHost`: This hostname is used to replace the backend host for any redirects that contain the backend host
|
|
20
|
+
`prerenderToken`: Your prerender.io authentication token
|
|
21
|
+
`prerenderUrl`: The URL of your Prerender service (optional: defaults to prerender.io)
|
|
22
|
+
`pathPrefix`: A prefix path (optional)
|
|
23
|
+
`cacheControlProps.cacheKey`: An optional parameter, which is to set `PRERENDER_CACHE_KEY` to be used in *[prerender CloudFront cache control function]*
|
|
24
|
+
`cacheControlProps.maxAge`: An optional parameter, which is to set `PRERENDER_CACHE_MAX_AGE` to be used in *[prerender CloudFront cache control function]*
|
|
25
|
+
|
|
26
|
+
[prerender CloudFront cache control function]:lib/handlers/cache-control.ts
|
package/index.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
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
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
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
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,64 @@
|
|
|
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
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
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/package.json
CHANGED
|
@@ -1,22 +1,24 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aligent/cdk-prerender-proxy",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.5.0",
|
|
4
4
|
"description": "Cloudfront Lambda@Edge constructs for integrating with prerender.io",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"build": "tsc"
|
|
7
|
+
"build": "tsc",
|
|
8
|
+
"test": "npx nx test prerender-proxy",
|
|
9
|
+
"lint": "npx nx lint prerender-proxy"
|
|
8
10
|
},
|
|
9
11
|
"repository": {
|
|
10
12
|
"type": "git",
|
|
11
|
-
"url": "git+https://github.com/aligent/aws-cdk-
|
|
13
|
+
"url": "git+https://github.com/aligent/aws-cdk-constructs.git"
|
|
12
14
|
},
|
|
13
15
|
"license": "MIT",
|
|
14
16
|
"bugs": {
|
|
15
|
-
"url": "https://github.com/aligent/aws-cdk-
|
|
17
|
+
"url": "https://github.com/aligent/aws-cdk-constructs/issues"
|
|
16
18
|
},
|
|
17
|
-
"homepage": "https://github.com/aligent/aws-cdk-prerender-proxy
|
|
19
|
+
"homepage": "https://github.com/aligent/aws-cdk-constructs/tree/main/packages/prerender-proxy#readme",
|
|
18
20
|
"devDependencies": {
|
|
19
|
-
"@aligent/cdk-esbuild": "^2.0",
|
|
21
|
+
"@aligent/cdk-esbuild": "^2.5.0",
|
|
20
22
|
"@types/aws-lambda": "^8.10.150",
|
|
21
23
|
"@types/jest": "^29.5.10",
|
|
22
24
|
"@types/node": "^20.6.3",
|
|
@@ -33,7 +35,5 @@
|
|
|
33
35
|
"peerDependencies": {
|
|
34
36
|
"aws-cdk-lib": "^2.168.0",
|
|
35
37
|
"constructs": "^10.4.2"
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
"types": "./index.d.ts"
|
|
39
|
-
}
|
|
38
|
+
}
|
|
39
|
+
}
|
package/project.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
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.json
ADDED
package/index.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
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
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9wYWNrYWdlcy9wcmVyZW5kZXItcHJveHkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaUZBRzBDO0FBZ0J4QyxnR0FsQkEsNENBQWUsT0FrQkE7QUFmakIsbUVBR21DO0FBYWpDLGtHQWZBLHVDQUFpQixPQWVBO0FBWm5CLCtFQUF5RTtBQWF2RSx1R0FiTyxrREFBc0IsT0FhUDtBQVp4Qiw2RUFHd0M7QUFVdEMsc0dBWkEsZ0RBQXFCLE9BWUE7QUFUdkIscUdBR29EO0FBT2xELHVHQVRBLDZEQUFzQixPQVNBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgUHJlcmVuZGVyTGFtYmRhLFxuICBQcmVyZW5kZXJMYW1iZGFQcm9wcyxcbn0gZnJvbSBcIi4vbGliL3ByZXJlbmRlci1sYW1iZGEtY29uc3RydWN0XCI7XG5pbXBvcnQge1xuICBQcmVyZW5kZXJGdW5jdGlvbixcbiAgUHJlcmVuZGVyRnVuY3Rpb25PcHRpb25zLFxufSBmcm9tIFwiLi9saWIvcHJlcmVuZGVyLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHsgUHJlcmVuZGVyQ2hlY2tGdW5jdGlvbiB9IGZyb20gXCIuL2xpYi9wcmVyZW5kZXItY2hlY2stY29uc3RydWN0XCI7XG5pbXBvcnQge1xuICBFcnJvclJlc3BvbnNlRnVuY3Rpb24sXG4gIEVycm9yUmVzcG9uc2VGdW5jdGlvbk9wdGlvbnMsXG59IGZyb20gXCIuL2xpYi9lcnJvci1yZXNwb25zZS1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7XG4gIENsb3VkRnJvbnRDYWNoZUNvbnRyb2wsXG4gIENsb3VkRnJvbnRDYWNoZUNvbnRyb2xPcHRpb25zLFxufSBmcm9tIFwiLi9saWIvcHJlcmVuZGVyLWNmLWNhY2hlLWNvbnRyb2wtY29uc3RydWN0XCI7XG5cbmV4cG9ydCB7XG4gIFByZXJlbmRlckxhbWJkYSxcbiAgUHJlcmVuZGVyRnVuY3Rpb24sXG4gIFByZXJlbmRlckNoZWNrRnVuY3Rpb24sXG4gIEVycm9yUmVzcG9uc2VGdW5jdGlvbixcbiAgQ2xvdWRGcm9udENhY2hlQ29udHJvbCxcbiAgQ2xvdWRGcm9udENhY2hlQ29udHJvbE9wdGlvbnMsXG4gIEVycm9yUmVzcG9uc2VGdW5jdGlvbk9wdGlvbnMsXG4gIFByZXJlbmRlckZ1bmN0aW9uT3B0aW9ucyxcbiAgUHJlcmVuZGVyTGFtYmRhUHJvcHMsXG59O1xuIl19
|
|
@@ -1,12 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3ItcmVzcG9uc2UtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcHJlcmVuZGVyLXByb3h5L2xpYi9lcnJvci1yZXNwb25zZS1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXlEO0FBQ3pELCtEQUEwRDtBQUMxRCx1REFBMEU7QUFDMUUsMkNBQXVDO0FBQ3ZDLCtCQUE0QjtBQUM1QixzREFBK0M7QUFPL0MsTUFBYSxxQkFBc0IsU0FBUSxzQkFBUztJQUdsRCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixPQUFxQzs7UUFFckMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLE9BQU8sR0FBRztZQUNkLElBQUk7WUFDSixJQUFJO1lBQ0osNERBQTREO1NBQzdELENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksNkJBQVksQ0FBQyxZQUFZLENBQy9DLElBQUksRUFDSixHQUFHLEVBQUUsb0JBQW9CLEVBQ3pCO1lBQ0UsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRTtnQkFDaEQsYUFBYSxFQUFFLDJCQUFhLENBQUMsTUFBTTtnQkFDbkMsUUFBUSxFQUFFO29CQUNSLE9BQU87b0JBQ1AsS0FBSyxFQUFFLHlCQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztvQkFDMUMsS0FBSyxFQUFFLElBQUkscUJBQU8sQ0FBQzt3QkFDakIsV0FBVyxFQUFFLENBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLDRCQUE0QixDQUFDLENBQUM7d0JBQzVELE1BQU0sRUFBRTs0QkFDTix5QkFBeUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUN2QyxNQUFBLE9BQU8sQ0FBQyxVQUFVLG1DQUFJLEVBQUUsQ0FDekI7NEJBQ0QsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FDekMsT0FBTyxDQUFDLFlBQVksQ0FDckI7eUJBQ0Y7cUJBQ0YsQ0FBQztpQkFDSDthQUNGLENBQUM7WUFDRixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLE9BQU8sRUFBRSx3QkFBd0I7U0FDbEMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixPQUFPLG9CQUFPLENBQUMsY0FBYyxDQUMzQixJQUFJLEVBQ0osMkJBQTJCLEVBQzNCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FDekMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQW5ERCxzREFtREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3NldEhhc2hUeXBlLCBEb2NrZXJJbWFnZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgZXhwZXJpbWVudGFsIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCI7XG5pbXBvcnQgeyBDb2RlLCBJVmVyc2lvbiwgUnVudGltZSwgVmVyc2lvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBFc2J1aWxkIH0gZnJvbSBcIkBhbGlnZW50L2Nkay1lc2J1aWxkXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRXJyb3JSZXNwb25zZUZ1bmN0aW9uT3B0aW9ucyB7XG4gIHBhdGhQcmVmaXg/OiBzdHJpbmc7XG4gIGZyb250ZW5kSG9zdDogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRXJyb3JSZXNwb25zZUZ1bmN0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcmVhZG9ubHkgZWRnZUZ1bmN0aW9uOiBleHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBFcnJvclJlc3BvbnNlRnVuY3Rpb25PcHRpb25zXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb21tYW5kID0gW1xuICAgICAgXCJzaFwiLFxuICAgICAgXCItY1wiLFxuICAgICAgJ2VjaG8gXCJEb2NrZXIgYnVpbGQgbm90IHN1cHBvcnRlZC4gUGxlYXNlIGluc3RhbGwgZXNidWlsZC5cIicsXG4gICAgXTtcblxuICAgIHRoaXMuZWRnZUZ1bmN0aW9uID0gbmV3IGV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24oXG4gICAgICB0aGlzLFxuICAgICAgYCR7aWR9LWVycm9yLXJlc3BvbnNlLWZuYCxcbiAgICAgIHtcbiAgICAgICAgY29kZTogQ29kZS5mcm9tQXNzZXQoam9pbihfX2Rpcm5hbWUsIFwiaGFuZGxlcnNcIiksIHtcbiAgICAgICAgICBhc3NldEhhc2hUeXBlOiBBc3NldEhhc2hUeXBlLk9VVFBVVCxcbiAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIGltYWdlOiBEb2NrZXJJbWFnZS5mcm9tUmVnaXN0cnkoXCJidXN5Ym94XCIpLFxuICAgICAgICAgICAgbG9jYWw6IG5ldyBFc2J1aWxkKHtcbiAgICAgICAgICAgICAgZW50cnlQb2ludHM6IFtqb2luKF9fZGlybmFtZSwgXCJoYW5kbGVycy9lcnJvci1yZXNwb25zZS50c1wiKV0sXG4gICAgICAgICAgICAgIGRlZmluZToge1xuICAgICAgICAgICAgICAgIFwicHJvY2Vzcy5lbnYuUEFUSF9QUkVGSVhcIjogSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLnBhdGhQcmVmaXggPz8gXCJcIlxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgXCJwcm9jZXNzLmVudi5GUk9OVEVORF9IT1NUXCI6IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5mcm9udGVuZEhvc3RcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICAgIGhhbmRsZXI6IFwiZXJyb3ItcmVzcG9uc2UuaGFuZGxlclwiLFxuICAgICAgfVxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0RnVuY3Rpb25WZXJzaW9uKCk6IElWZXJzaW9uIHtcbiAgICByZXR1cm4gVmVyc2lvbi5mcm9tVmVyc2lvbkFybihcbiAgICAgIHRoaXMsXG4gICAgICBcImVycm9yLXJlc3BvbnNlLWZuLXZlcnNpb25cIixcbiAgICAgIHRoaXMuZWRnZUZ1bmN0aW9uLmN1cnJlbnRWZXJzaW9uLmVkZ2VBcm5cbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -1,12 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVuZGVyLWNmLWNhY2hlLWNvbnRyb2wtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcHJlcmVuZGVyLXByb3h5L2xpYi9wcmVyZW5kZXItY2YtY2FjaGUtY29udHJvbC1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkNBQXlEO0FBQ3pELCtEQUEwRDtBQUMxRCx1REFBMEU7QUFDMUUsMkNBQXVDO0FBQ3ZDLCtCQUE0QjtBQUM1QixzREFBK0M7QUFPL0MsTUFBYSxzQkFBdUIsU0FBUSxzQkFBUztJQUduRCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixPQUF1Qzs7UUFFdkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLE9BQU8sR0FBRztZQUNkLElBQUk7WUFDSixJQUFJO1lBQ0osNERBQTREO1NBQzdELENBQUM7UUFFRixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksNkJBQVksQ0FBQyxZQUFZLENBQy9DLElBQUksRUFDSixHQUFHLEVBQUUsbUJBQW1CLEVBQ3hCO1lBQ0UsSUFBSSxFQUFFLGlCQUFJLENBQUMsU0FBUyxDQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRTtnQkFDaEQsYUFBYSxFQUFFLDJCQUFhLENBQUMsTUFBTTtnQkFDbkMsUUFBUSxFQUFFO29CQUNSLE9BQU87b0JBQ1AsS0FBSyxFQUFFLHlCQUFXLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQztvQkFDMUMsS0FBSyxFQUFFLElBQUkscUJBQU8sQ0FBQzt3QkFDakIsV0FBVyxFQUFFLENBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLDJCQUEyQixDQUFDLENBQUM7d0JBQzNELE1BQU0sRUFBRTs0QkFDTixpQ0FBaUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUMvQyxNQUFBLE9BQU8sYUFBUCxPQUFPLHVCQUFQLE9BQU8sQ0FBRSxRQUFRLG1DQUFJLHVCQUF1QixDQUM3Qzs0QkFDRCxxQ0FBcUMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUNuRCxNQUFNLENBQUMsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsTUFBTSxtQ0FBSSxDQUFDLENBQUMsQ0FDN0I7eUJBQ0Y7cUJBQ0YsQ0FBQztpQkFDSDthQUNGLENBQUM7WUFDRixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLE9BQU8sRUFBRSx1QkFBdUI7U0FDakMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixPQUFPLG9CQUFPLENBQUMsY0FBYyxDQUMzQixJQUFJLEVBQ0osMEJBQTBCLEVBQzFCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FDekMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQW5ERCx3REFtREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3NldEhhc2hUeXBlLCBEb2NrZXJJbWFnZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgZXhwZXJpbWVudGFsIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCI7XG5pbXBvcnQgeyBDb2RlLCBJVmVyc2lvbiwgUnVudGltZSwgVmVyc2lvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBFc2J1aWxkIH0gZnJvbSBcIkBhbGlnZW50L2Nkay1lc2J1aWxkXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRGcm9udENhY2hlQ29udHJvbE9wdGlvbnMge1xuICBjYWNoZUtleT86IHN0cmluZztcbiAgbWF4QWdlPzogbnVtYmVyO1xufVxuXG5leHBvcnQgY2xhc3MgQ2xvdWRGcm9udENhY2hlQ29udHJvbCBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IGVkZ2VGdW5jdGlvbjogZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IENsb3VkRnJvbnRDYWNoZUNvbnRyb2xPcHRpb25zXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBjb25zdCBjb21tYW5kID0gW1xuICAgICAgXCJzaFwiLFxuICAgICAgXCItY1wiLFxuICAgICAgJ2VjaG8gXCJEb2NrZXIgYnVpbGQgbm90IHN1cHBvcnRlZC4gUGxlYXNlIGluc3RhbGwgZXNidWlsZC5cIicsXG4gICAgXTtcblxuICAgIHRoaXMuZWRnZUZ1bmN0aW9uID0gbmV3IGV4cGVyaW1lbnRhbC5FZGdlRnVuY3Rpb24oXG4gICAgICB0aGlzLFxuICAgICAgYCR7aWR9LWNhY2hlLWNvbnRyb2wtZm5gLFxuICAgICAge1xuICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChqb2luKF9fZGlybmFtZSwgXCJoYW5kbGVyc1wiKSwge1xuICAgICAgICAgIGFzc2V0SGFzaFR5cGU6IEFzc2V0SGFzaFR5cGUuT1VUUFVULFxuICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgaW1hZ2U6IERvY2tlckltYWdlLmZyb21SZWdpc3RyeShcImJ1c3lib3hcIiksXG4gICAgICAgICAgICBsb2NhbDogbmV3IEVzYnVpbGQoe1xuICAgICAgICAgICAgICBlbnRyeVBvaW50czogW2pvaW4oX19kaXJuYW1lLCBcImhhbmRsZXJzL2NhY2hlLWNvbnRyb2wudHNcIildLFxuICAgICAgICAgICAgICBkZWZpbmU6IHtcbiAgICAgICAgICAgICAgICBcInByb2Nlc3MuZW52LlBSRVJFTkRFUl9DQUNIRV9LRVlcIjogSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zPy5jYWNoZUtleSA/PyBcIngtcHJlcmVuZGVyLXJlcXVlc3RpZFwiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBcInByb2Nlc3MuZW52LlBSRVJFTkRFUl9DQUNIRV9NQVhfQUdFXCI6IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgICAgU3RyaW5nKG9wdGlvbnM/Lm1heEFnZSA/PyAwKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgICAgICAgcnVudGltZTogUnVudGltZS5OT0RFSlNfMjJfWCxcbiAgICAgICAgaGFuZGxlcjogXCJjYWNoZS1jb250cm9sLmhhbmRsZXJcIixcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEZ1bmN0aW9uVmVyc2lvbigpOiBJVmVyc2lvbiB7XG4gICAgcmV0dXJuIFZlcnNpb24uZnJvbVZlcnNpb25Bcm4oXG4gICAgICB0aGlzLFxuICAgICAgXCJjYWNoZS1jb250cm9sLWZuLXZlcnNpb25cIixcbiAgICAgIHRoaXMuZWRnZUZ1bmN0aW9uLmN1cnJlbnRWZXJzaW9uLmVkZ2VBcm5cbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -1,17 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVuZGVyLWNoZWNrLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3ByZXJlbmRlci1wcm94eS9saWIvcHJlcmVuZGVyLWNoZWNrLWNvbnN0cnVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBeUQ7QUFDekQsK0RBQTBEO0FBQzFELHVEQUEwRTtBQUMxRSwyQ0FBdUM7QUFDdkMsK0JBQTRCO0FBQzVCLHNEQUErQztBQVkvQyxNQUFhLHNCQUF1QixTQUFRLHNCQUFTO0lBR25ELFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsT0FBK0I7O1FBQ3ZFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxPQUFPLEdBQUc7WUFDZCxJQUFJO1lBQ0osSUFBSTtZQUNKLDREQUE0RDtTQUM3RCxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLDZCQUFZLENBQUMsWUFBWSxDQUMvQyxJQUFJLEVBQ0osR0FBRyxFQUFFLHFCQUFxQixFQUMxQjtZQUNFLElBQUksRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsVUFBVSxDQUFDLEVBQUU7Z0JBQ2hELGFBQWEsRUFBRSwyQkFBYSxDQUFDLE1BQU07Z0JBQ25DLFFBQVEsRUFBRTtvQkFDUixPQUFPO29CQUNQLEtBQUssRUFBRSx5QkFBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7b0JBQzFDLEtBQUssRUFBRSxJQUFJLHFCQUFPLENBQUM7d0JBQ2pCLFdBQVcsRUFBRSxDQUFDLElBQUEsV0FBSSxFQUFDLFNBQVMsRUFBRSw2QkFBNkIsQ0FBQyxDQUFDO3dCQUM3RCxNQUFNLEVBQUU7NEJBQ04sOEJBQThCLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FDNUMsTUFBQSxPQUFPLGFBQVAsT0FBTyx1QkFBUCxPQUFPLENBQUUsbUJBQW1CLG1DQUFJLElBQUksQ0FDckM7eUJBQ0Y7cUJBQ0YsQ0FBQztpQkFDSDthQUNGLENBQUM7WUFDRixPQUFPLEVBQUUsb0JBQU8sQ0FBQyxXQUFXO1lBQzVCLE9BQU8sRUFBRSx5QkFBeUI7U0FDbkMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixPQUFPLG9CQUFPLENBQUMsY0FBYyxDQUMzQixJQUFJLEVBQ0osNEJBQTRCLEVBQzVCLElBQUksQ0FBQyxZQUFZLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FDekMsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQTVDRCx3REE0Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBc3NldEhhc2hUeXBlLCBEb2NrZXJJbWFnZSB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgZXhwZXJpbWVudGFsIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1jbG91ZGZyb250XCI7XG5pbXBvcnQgeyBDb2RlLCBJVmVyc2lvbiwgUnVudGltZSwgVmVyc2lvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgam9pbiB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBFc2J1aWxkIH0gZnJvbSBcIkBhbGlnZW50L2Nkay1lc2J1aWxkXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJlcmVuZGVyQ2hlY2tPcHRpb25zIHtcbiAgLyoqXG4gICAqIEEgY3VzdG9tIHJlZ2V4IHN0cmluZyB0byBkZXRlY3QgYm90cy4gV2lsbCBiZSB1c2VkIGluIGFkZGl0aW9uXG4gICAqIHRvIHRoZSBleGlzdGluZyBib3QgY2hlY2sgcmVnZXggdG8gZGV0ZXJtaW5lIGlmIGEgdXNlci1hZ2VudCBpcyBhIGJvdC5cbiAgICpcbiAgICogQHR5cGUgc3RyaW5nXG4gICAqL1xuICBjdXN0b21Cb3RDaGVja1JlZ2V4OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBQcmVyZW5kZXJDaGVja0Z1bmN0aW9uIGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgcmVhZG9ubHkgZWRnZUZ1bmN0aW9uOiBleHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBQcmVyZW5kZXJDaGVja09wdGlvbnMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgY29tbWFuZCA9IFtcbiAgICAgIFwic2hcIixcbiAgICAgIFwiLWNcIixcbiAgICAgICdlY2hvIFwiRG9ja2VyIGJ1aWxkIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSBpbnN0YWxsIGVzYnVpbGQuXCInLFxuICAgIF07XG5cbiAgICB0aGlzLmVkZ2VGdW5jdGlvbiA9IG5ldyBleHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2lkfS1wcmVyZW5kZXItY2hlY2stZm5gLFxuICAgICAge1xuICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChqb2luKF9fZGlybmFtZSwgXCJoYW5kbGVyc1wiKSwge1xuICAgICAgICAgIGFzc2V0SGFzaFR5cGU6IEFzc2V0SGFzaFR5cGUuT1VUUFVULFxuICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgaW1hZ2U6IERvY2tlckltYWdlLmZyb21SZWdpc3RyeShcImJ1c3lib3hcIiksXG4gICAgICAgICAgICBsb2NhbDogbmV3IEVzYnVpbGQoe1xuICAgICAgICAgICAgICBlbnRyeVBvaW50czogW2pvaW4oX19kaXJuYW1lLCBcImhhbmRsZXJzL3ByZXJlbmRlci1jaGVjay50c1wiKV0sXG4gICAgICAgICAgICAgIGRlZmluZToge1xuICAgICAgICAgICAgICAgIFwicHJvY2Vzcy5lbnYuQ1VTVE9NX0JPVF9DSEVDS1wiOiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnM/LmN1c3RvbUJvdENoZWNrUmVnZXggPz8gXCJbXVwiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICBydW50aW1lOiBSdW50aW1lLk5PREVKU18yMl9YLFxuICAgICAgICBoYW5kbGVyOiBcInByZXJlbmRlci1jaGVjay5oYW5kbGVyXCIsXG4gICAgICB9XG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRGdW5jdGlvblZlcnNpb24oKTogSVZlcnNpb24ge1xuICAgIHJldHVybiBWZXJzaW9uLmZyb21WZXJzaW9uQXJuKFxuICAgICAgdGhpcyxcbiAgICAgIFwicHJlcmVuZGVyLWNoZWNrLWZuLXZlcnNpb25cIixcbiAgICAgIHRoaXMuZWRnZUZ1bmN0aW9uLmN1cnJlbnRWZXJzaW9uLmVkZ2VBcm5cbiAgICApO1xuICB9XG59XG4iXX0=
|
|
@@ -1,13 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVuZGVyLWNvbnN0cnVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3ByZXJlbmRlci1wcm94eS9saWIvcHJlcmVuZGVyLWNvbnN0cnVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2Q0FBeUQ7QUFDekQsK0RBQTBEO0FBQzFELHVEQUEwRTtBQUMxRSwyQ0FBdUM7QUFDdkMsK0JBQTRCO0FBQzVCLHNEQUErQztBQVEvQyxNQUFhLGlCQUFrQixTQUFRLHNCQUFTO0lBRzlDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsT0FBaUM7O1FBQ3pFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsTUFBTSxPQUFPLEdBQUc7WUFDZCxJQUFJO1lBQ0osSUFBSTtZQUNKLDREQUE0RDtTQUM3RCxDQUFDO1FBRUYsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLDZCQUFZLENBQUMsWUFBWSxDQUMvQyxJQUFJLEVBQ0osR0FBRyxFQUFFLGVBQWUsRUFDcEI7WUFDRSxJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxFQUFFO2dCQUNoRCxhQUFhLEVBQUUsMkJBQWEsQ0FBQyxNQUFNO2dCQUNuQyxRQUFRLEVBQUU7b0JBQ1IsT0FBTztvQkFDUCxLQUFLLEVBQUUseUJBQVcsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDO29CQUMxQyxLQUFLLEVBQUUsSUFBSSxxQkFBTyxDQUFDO3dCQUNqQixXQUFXLEVBQUUsQ0FBQyxJQUFBLFdBQUksRUFBQyxTQUFTLEVBQUUsdUJBQXVCLENBQUMsQ0FBQzt3QkFDdkQsTUFBTSxFQUFFOzRCQUNOLDZCQUE2QixFQUFFLElBQUksQ0FBQyxTQUFTLENBQzNDLE9BQU8sQ0FBQyxjQUFjLENBQ3ZCOzRCQUNELHlCQUF5QixFQUFFLElBQUksQ0FBQyxTQUFTLENBQ3ZDLE1BQUEsT0FBTyxDQUFDLFVBQVUsbUNBQUksRUFBRSxDQUN6Qjs0QkFDRCwyQkFBMkIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUN6QyxNQUFBLE9BQU8sQ0FBQyxZQUFZLG1DQUFJLHNCQUFzQixDQUMvQzt5QkFDRjtxQkFDRixDQUFDO2lCQUNIO2FBQ0YsQ0FBQztZQUNGLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFdBQVc7WUFDNUIsT0FBTyxFQUFFLG1CQUFtQjtTQUM3QixDQUNGLENBQUM7SUFDSixDQUFDO0lBRU0sa0JBQWtCO1FBQ3ZCLE9BQU8sb0JBQU8sQ0FBQyxjQUFjLENBQzNCLElBQUksRUFDSixzQkFBc0IsRUFDdEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUN6QyxDQUFDO0lBQ0osQ0FBQztDQUNGO0FBbERELDhDQWtEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFzc2V0SGFzaFR5cGUsIERvY2tlckltYWdlIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBleHBlcmltZW50YWwgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IENvZGUsIElWZXJzaW9uLCBSdW50aW1lLCBWZXJzaW9uIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IEVzYnVpbGQgfSBmcm9tIFwiQGFsaWdlbnQvY2RrLWVzYnVpbGRcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcmVyZW5kZXJGdW5jdGlvbk9wdGlvbnMge1xuICBwcmVyZW5kZXJUb2tlbjogc3RyaW5nO1xuICBwcmVyZW5kZXJVcmw/OiBzdHJpbmc7XG4gIHBhdGhQcmVmaXg/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBQcmVyZW5kZXJGdW5jdGlvbiBleHRlbmRzIENvbnN0cnVjdCB7XG4gIHJlYWRvbmx5IGVkZ2VGdW5jdGlvbjogZXhwZXJpbWVudGFsLkVkZ2VGdW5jdGlvbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBvcHRpb25zOiBQcmVyZW5kZXJGdW5jdGlvbk9wdGlvbnMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3QgY29tbWFuZCA9IFtcbiAgICAgIFwic2hcIixcbiAgICAgIFwiLWNcIixcbiAgICAgICdlY2hvIFwiRG9ja2VyIGJ1aWxkIG5vdCBzdXBwb3J0ZWQuIFBsZWFzZSBpbnN0YWxsIGVzYnVpbGQuXCInLFxuICAgIF07XG5cbiAgICB0aGlzLmVkZ2VGdW5jdGlvbiA9IG5ldyBleHBlcmltZW50YWwuRWRnZUZ1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2lkfS1wcmVyZW5kZXItZm5gLFxuICAgICAge1xuICAgICAgICBjb2RlOiBDb2RlLmZyb21Bc3NldChqb2luKF9fZGlybmFtZSwgXCJoYW5kbGVyc1wiKSwge1xuICAgICAgICAgIGFzc2V0SGFzaFR5cGU6IEFzc2V0SGFzaFR5cGUuT1VUUFVULFxuICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgaW1hZ2U6IERvY2tlckltYWdlLmZyb21SZWdpc3RyeShcImJ1c3lib3hcIiksXG4gICAgICAgICAgICBsb2NhbDogbmV3IEVzYnVpbGQoe1xuICAgICAgICAgICAgICBlbnRyeVBvaW50czogW2pvaW4oX19kaXJuYW1lLCBcImhhbmRsZXJzL3ByZXJlbmRlci50c1wiKV0sXG4gICAgICAgICAgICAgIGRlZmluZToge1xuICAgICAgICAgICAgICAgIFwicHJvY2Vzcy5lbnYuUFJFUkVOREVSX1RPS0VOXCI6IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcmVyZW5kZXJUb2tlblxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgXCJwcm9jZXNzLmVudi5QQVRIX1BSRUZJWFwiOiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGF0aFByZWZpeCA/PyBcIlwiXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBcInByb2Nlc3MuZW52LlBSRVJFTkRFUl9VUkxcIjogSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLnByZXJlbmRlclVybCA/PyBcInNlcnZpY2UucHJlcmVuZGVyLmlvXCJcbiAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuTk9ERUpTXzIyX1gsXG4gICAgICAgIGhhbmRsZXI6IFwicHJlcmVuZGVyLmhhbmRsZXJcIixcbiAgICAgIH1cbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEZ1bmN0aW9uVmVyc2lvbigpOiBJVmVyc2lvbiB7XG4gICAgcmV0dXJuIFZlcnNpb24uZnJvbVZlcnNpb25Bcm4oXG4gICAgICB0aGlzLFxuICAgICAgXCJwcmVyZW5kZXItZm4tdmVyc2lvblwiLFxuICAgICAgdGhpcy5lZGdlRnVuY3Rpb24uY3VycmVudFZlcnNpb24uZWRnZUFyblxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,18 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,19 +0,0 @@
|
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcmVuZGVyLWxhbWJkYS1jb25zdHJ1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9wcmVyZW5kZXItcHJveHkvbGliL3ByZXJlbmRlci1sYW1iZGEtY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDJDQUF1QztBQUN2QyxpR0FHZ0Q7QUFDaEQsMkVBR3FDO0FBQ3JDLCtEQUcrQjtBQUMvQix5RUFHb0M7QUFTcEMsTUFBYSxlQUFnQixTQUFRLHNCQUFTO0lBTTVDLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBMkI7UUFDbkUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxrREFBc0IsQ0FDdEQsSUFBSSxFQUNKLEdBQUcsRUFBRSx5QkFBeUIsRUFDOUIsS0FBSyxDQUFDLHFCQUFxQixDQUM1QixDQUFDO1FBRUYsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksdUNBQWlCLENBQzVDLElBQUksRUFDSixHQUFHLEVBQUUseUJBQXlCLEVBQzlCLEtBQUssQ0FBQyxjQUFjLENBQ3JCLENBQUM7UUFFRixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxnREFBcUIsQ0FDcEQsSUFBSSxFQUNKLEdBQUcsRUFBRSxnQkFBZ0IsRUFDckIsS0FBSyxDQUFDLGtCQUFrQixDQUN6QixDQUFDO1FBRUYsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksNkRBQXNCLENBQ3BELElBQUksRUFDSixHQUFHLEVBQUUsa0NBQWtDLEVBQ3ZDLEtBQUssQ0FBQyxpQkFBaUIsQ0FDeEIsQ0FBQztJQUNKLENBQUM7Q0FDRjtBQWpDRCwwQ0FpQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHtcbiAgQ2xvdWRGcm9udENhY2hlQ29udHJvbCxcbiAgQ2xvdWRGcm9udENhY2hlQ29udHJvbE9wdGlvbnMsXG59IGZyb20gXCIuL3ByZXJlbmRlci1jZi1jYWNoZS1jb250cm9sLWNvbnN0cnVjdFwiO1xuaW1wb3J0IHtcbiAgUHJlcmVuZGVyQ2hlY2tGdW5jdGlvbixcbiAgUHJlcmVuZGVyQ2hlY2tPcHRpb25zLFxufSBmcm9tIFwiLi9wcmVyZW5kZXItY2hlY2stY29uc3RydWN0XCI7XG5pbXBvcnQge1xuICBQcmVyZW5kZXJGdW5jdGlvbixcbiAgUHJlcmVuZGVyRnVuY3Rpb25PcHRpb25zLFxufSBmcm9tIFwiLi9wcmVyZW5kZXItY29uc3RydWN0XCI7XG5pbXBvcnQge1xuICBFcnJvclJlc3BvbnNlRnVuY3Rpb24sXG4gIEVycm9yUmVzcG9uc2VGdW5jdGlvbk9wdGlvbnMsXG59IGZyb20gXCIuL2Vycm9yLXJlc3BvbnNlLWNvbnN0cnVjdFwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFByZXJlbmRlckxhbWJkYVByb3BzIHtcbiAgcHJlcmVuZGVyUHJvcHM6IFByZXJlbmRlckZ1bmN0aW9uT3B0aW9ucztcbiAgZXJyb3JSZXNwb25zZVByb3BzOiBFcnJvclJlc3BvbnNlRnVuY3Rpb25PcHRpb25zO1xuICBwcmVyZW5kZXJDaGVja09wdGlvbnM/OiBQcmVyZW5kZXJDaGVja09wdGlvbnM7XG4gIGNhY2hlQ29udHJvbFByb3BzPzogQ2xvdWRGcm9udENhY2hlQ29udHJvbE9wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBQcmVyZW5kZXJMYW1iZGEgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICByZWFkb25seSBwcmVyZW5kZXJDaGVja0Z1bmN0aW9uOiBQcmVyZW5kZXJDaGVja0Z1bmN0aW9uO1xuICByZWFkb25seSBwcmVyZW5kZXJGdW5jdGlvbjogUHJlcmVuZGVyRnVuY3Rpb247XG4gIHJlYWRvbmx5IGVycm9yUmVzcG9uc2VGdW5jdGlvbjogRXJyb3JSZXNwb25zZUZ1bmN0aW9uO1xuICByZWFkb25seSBjYWNoZUNvbnRyb2xGdW5jdGlvbjogQ2xvdWRGcm9udENhY2hlQ29udHJvbDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUHJlcmVuZGVyTGFtYmRhUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgdGhpcy5wcmVyZW5kZXJDaGVja0Z1bmN0aW9uID0gbmV3IFByZXJlbmRlckNoZWNrRnVuY3Rpb24oXG4gICAgICB0aGlzLFxuICAgICAgYCR7aWR9LVByZXJlbmRlclZpZXdlclJlcXVlc3RgLFxuICAgICAgcHJvcHMucHJlcmVuZGVyQ2hlY2tPcHRpb25zXG4gICAgKTtcblxuICAgIHRoaXMucHJlcmVuZGVyRnVuY3Rpb24gPSBuZXcgUHJlcmVuZGVyRnVuY3Rpb24oXG4gICAgICB0aGlzLFxuICAgICAgYCR7aWR9LVByZXJlbmRlck9yaWdpblJlcXVlc3RgLFxuICAgICAgcHJvcHMucHJlcmVuZGVyUHJvcHNcbiAgICApO1xuXG4gICAgdGhpcy5lcnJvclJlc3BvbnNlRnVuY3Rpb24gPSBuZXcgRXJyb3JSZXNwb25zZUZ1bmN0aW9uKFxuICAgICAgdGhpcyxcbiAgICAgIGAke2lkfS1FcnJvclJlc3BvbnNlYCxcbiAgICAgIHByb3BzLmVycm9yUmVzcG9uc2VQcm9wc1xuICAgICk7XG5cbiAgICB0aGlzLmNhY2hlQ29udHJvbEZ1bmN0aW9uID0gbmV3IENsb3VkRnJvbnRDYWNoZUNvbnRyb2woXG4gICAgICB0aGlzLFxuICAgICAgYCR7aWR9LVByZXJlbmRlckNsb3VkRnJvbnRDYWNoZUNvbnRyb2xgLFxuICAgICAgcHJvcHMuY2FjaGVDb250cm9sUHJvcHNcbiAgICApO1xuICB9XG59XG4iXX0=
|