cdk-nextjs 0.5.15 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +821 -253
- package/.jsii.tabl.json +1 -1
- package/API.md +787 -18
- package/README.md +3 -3
- package/docs/breaking-changes.md +86 -0
- package/docs/caching-guide.md +6 -0
- package/docs/plans/adapter-runtime-release.md +362 -0
- package/docs/plans/phase-0-image-function-opt-in.md +295 -0
- package/lib/generated-structs/OptionalNextjsDistributionProps.d.ts +13 -0
- package/lib/generated-structs/OptionalNextjsDistributionProps.js +1 -1
- package/lib/image-optimization/handler-utils.d.ts +34 -0
- package/lib/image-optimization/handler-utils.js +83 -0
- package/lib/image-optimization/handler-utils.test.d.ts +1 -0
- package/lib/image-optimization/handler-utils.test.js +178 -0
- package/lib/image-optimization/handler.mjs +56126 -0
- package/lib/index.d.ts +2 -1
- package/lib/index.js +4 -2
- package/lib/nextjs-api.d.ts +44 -0
- package/lib/nextjs-api.js +64 -20
- package/lib/nextjs-api.test.d.ts +1 -0
- package/lib/nextjs-api.test.js +144 -0
- package/lib/nextjs-build/nextjs-build.d.ts +60 -0
- package/lib/nextjs-build/nextjs-build.js +184 -27
- package/lib/nextjs-cache.js +1 -1
- package/lib/nextjs-compute/nextjs-containers.js +1 -1
- package/lib/nextjs-compute/nextjs-functions.js +1 -1
- package/lib/nextjs-compute/nextjs-image-function.d.ts +53 -0
- package/lib/nextjs-compute/nextjs-image-function.js +59 -0
- package/lib/nextjs-distribution.d.ts +33 -0
- package/lib/nextjs-distribution.js +39 -11
- package/lib/nextjs-post-deploy.js +1 -1
- package/lib/nextjs-static-assets.d.ts +18 -0
- package/lib/nextjs-static-assets.js +33 -6
- package/lib/nextjs-static-assets.test.d.ts +1 -0
- package/lib/nextjs-static-assets.test.js +58 -0
- package/lib/root-constructs/nextjs-base-construct.d.ts +62 -2
- package/lib/root-constructs/nextjs-base-construct.js +81 -3
- package/lib/root-constructs/nextjs-global-containers.d.ts +6 -1
- package/lib/root-constructs/nextjs-global-containers.js +11 -5
- package/lib/root-constructs/nextjs-global-functions.d.ts +16 -5
- package/lib/root-constructs/nextjs-global-functions.js +23 -21
- package/lib/root-constructs/nextjs-regional-containers.js +1 -1
- package/lib/root-constructs/nextjs-regional-functions.d.ts +11 -5
- package/lib/root-constructs/nextjs-regional-functions.js +17 -21
- package/lib/utils/base-path.d.ts +40 -0
- package/lib/utils/base-path.js +123 -0
- package/lib/utils/base-path.test.d.ts +1 -0
- package/lib/utils/base-path.test.js +163 -0
- package/lib/utils/experimental-flags.d.ts +24 -0
- package/lib/utils/experimental-flags.js +30 -0
- package/lib/utils/get-architecture.d.ts +10 -0
- package/lib/utils/get-architecture.js +17 -2
- package/package.json +3 -1
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* eslint-disable import/no-extraneous-dependencies */
|
|
4
|
+
const node_fs_1 = require("node:fs");
|
|
5
|
+
const node_os_1 = require("node:os");
|
|
6
|
+
const node_path_1 = require("node:path");
|
|
7
|
+
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
8
|
+
const nextjs_static_assets_1 = require("./nextjs-static-assets");
|
|
9
|
+
describe("NextjsStaticAssets", () => {
|
|
10
|
+
let stack;
|
|
11
|
+
let buildDirectory;
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
stack = new aws_cdk_lib_1.Stack(new aws_cdk_lib_1.App(), "TestStack");
|
|
14
|
+
buildDirectory = (0, node_fs_1.mkdtempSync)((0, node_path_1.join)((0, node_os_1.tmpdir)(), "nextjs-static-assets-"));
|
|
15
|
+
const staticDir = (0, node_path_1.join)(buildDirectory, ".next", "static");
|
|
16
|
+
(0, node_fs_1.mkdirSync)(staticDir, { recursive: true });
|
|
17
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(staticDir, "chunk.js"), "// chunk");
|
|
18
|
+
});
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
(0, node_fs_1.rmSync)(buildDirectory, { recursive: true, force: true });
|
|
21
|
+
});
|
|
22
|
+
function createStaticAssets(props) {
|
|
23
|
+
return new nextjs_static_assets_1.NextjsStaticAssets(stack, "NextjsStaticAssets", {
|
|
24
|
+
buildDirectory,
|
|
25
|
+
buildId: "test-build-id",
|
|
26
|
+
basePath: props.basePath,
|
|
27
|
+
overrides: props.destinationKeyPrefix === undefined
|
|
28
|
+
? undefined
|
|
29
|
+
: {
|
|
30
|
+
bucketDeploymentProps: {
|
|
31
|
+
destinationKeyPrefix: props.destinationKeyPrefix,
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
describe("keyPrefix", () => {
|
|
37
|
+
it("is empty when no basePath is set", () => {
|
|
38
|
+
expect(createStaticAssets({}).keyPrefix).toBe("");
|
|
39
|
+
});
|
|
40
|
+
it("strips surrounding slashes from basePath", () => {
|
|
41
|
+
expect(createStaticAssets({ basePath: "/base/" }).keyPrefix).toBe("base");
|
|
42
|
+
});
|
|
43
|
+
// The override is spread last into BucketDeployment, so it decides where
|
|
44
|
+
// the objects actually land. Consumers reading assets back out of the
|
|
45
|
+
// bucket have to see that, not the basePath prop.
|
|
46
|
+
it("reflects a destinationKeyPrefix override rather than basePath", () => {
|
|
47
|
+
expect(createStaticAssets({
|
|
48
|
+
basePath: "/base",
|
|
49
|
+
destinationKeyPrefix: "branch-x",
|
|
50
|
+
}).keyPrefix).toBe("branch-x");
|
|
51
|
+
});
|
|
52
|
+
it("is empty when an override clears the prefix", () => {
|
|
53
|
+
expect(createStaticAssets({ basePath: "/base", destinationKeyPrefix: "" })
|
|
54
|
+
.keyPrefix).toBe("");
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXN0YXRpYy1hc3NldHMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9uZXh0anMtc3RhdGljLWFzc2V0cy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsc0RBQXNEO0FBQ3RELHFDQUF3RTtBQUN4RSxxQ0FBaUM7QUFDakMseUNBQWlDO0FBQ2pDLDZDQUF5QztBQUN6QyxpRUFBNEQ7QUFFNUQsUUFBUSxDQUFDLG9CQUFvQixFQUFFLEdBQUcsRUFBRTtJQUNsQyxJQUFJLEtBQVksQ0FBQztJQUNqQixJQUFJLGNBQXNCLENBQUM7SUFFM0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLEtBQUssR0FBRyxJQUFJLG1CQUFLLENBQUMsSUFBSSxpQkFBRyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDMUMsY0FBYyxHQUFHLElBQUEscUJBQVcsRUFBQyxJQUFBLGdCQUFJLEVBQUMsSUFBQSxnQkFBTSxHQUFFLEVBQUUsdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sU0FBUyxHQUFHLElBQUEsZ0JBQUksRUFBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQzFELElBQUEsbUJBQVMsRUFBQyxTQUFTLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFBLHVCQUFhLEVBQUMsSUFBQSxnQkFBSSxFQUFDLFNBQVMsRUFBRSxVQUFVLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUN6RCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixJQUFBLGdCQUFNLEVBQUMsY0FBYyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsa0JBQWtCLENBQUMsS0FHM0I7UUFDQyxPQUFPLElBQUkseUNBQWtCLENBQUMsS0FBSyxFQUFFLG9CQUFvQixFQUFFO1lBQ3pELGNBQWM7WUFDZCxPQUFPLEVBQUUsZUFBZTtZQUN4QixRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVE7WUFDeEIsU0FBUyxFQUNQLEtBQUssQ0FBQyxvQkFBb0IsS0FBSyxTQUFTO2dCQUN0QyxDQUFDLENBQUMsU0FBUztnQkFDWCxDQUFDLENBQUM7b0JBQ0UscUJBQXFCLEVBQUU7d0JBQ3JCLG9CQUFvQixFQUFFLEtBQUssQ0FBQyxvQkFBb0I7cUJBQzFDO2lCQUNUO1NBQ1IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO1FBQ3pCLEVBQUUsQ0FBQyxrQ0FBa0MsRUFBRSxHQUFHLEVBQUU7WUFDMUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNwRCxDQUFDLENBQUMsQ0FBQztRQUVILEVBQUUsQ0FBQywwQ0FBMEMsRUFBRSxHQUFHLEVBQUU7WUFDbEQsTUFBTSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVFLENBQUMsQ0FBQyxDQUFDO1FBRUgseUVBQXlFO1FBQ3pFLHNFQUFzRTtRQUN0RSxrREFBa0Q7UUFDbEQsRUFBRSxDQUFDLCtEQUErRCxFQUFFLEdBQUcsRUFBRTtZQUN2RSxNQUFNLENBQ0osa0JBQWtCLENBQUM7Z0JBQ2pCLFFBQVEsRUFBRSxPQUFPO2dCQUNqQixvQkFBb0IsRUFBRSxVQUFVO2FBQ2pDLENBQUMsQ0FBQyxTQUFTLENBQ2IsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDckIsQ0FBQyxDQUFDLENBQUM7UUFFSCxFQUFFLENBQUMsNkNBQTZDLEVBQUUsR0FBRyxFQUFFO1lBQ3JELE1BQU0sQ0FDSixrQkFBa0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxFQUFFLENBQUM7aUJBQ2hFLFNBQVMsQ0FDYixDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNiLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IHsgbWtkaXJTeW5jLCBta2R0ZW1wU3luYywgcm1TeW5jLCB3cml0ZUZpbGVTeW5jIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gXCJub2RlOm9zXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQXBwLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgTmV4dGpzU3RhdGljQXNzZXRzIH0gZnJvbSBcIi4vbmV4dGpzLXN0YXRpYy1hc3NldHNcIjtcblxuZGVzY3JpYmUoXCJOZXh0anNTdGF0aWNBc3NldHNcIiwgKCkgPT4ge1xuICBsZXQgc3RhY2s6IFN0YWNrO1xuICBsZXQgYnVpbGREaXJlY3Rvcnk6IHN0cmluZztcblxuICBiZWZvcmVFYWNoKCgpID0+IHtcbiAgICBzdGFjayA9IG5ldyBTdGFjayhuZXcgQXBwKCksIFwiVGVzdFN0YWNrXCIpO1xuICAgIGJ1aWxkRGlyZWN0b3J5ID0gbWtkdGVtcFN5bmMoam9pbih0bXBkaXIoKSwgXCJuZXh0anMtc3RhdGljLWFzc2V0cy1cIikpO1xuICAgIGNvbnN0IHN0YXRpY0RpciA9IGpvaW4oYnVpbGREaXJlY3RvcnksIFwiLm5leHRcIiwgXCJzdGF0aWNcIik7XG4gICAgbWtkaXJTeW5jKHN0YXRpY0RpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgd3JpdGVGaWxlU3luYyhqb2luKHN0YXRpY0RpciwgXCJjaHVuay5qc1wiKSwgXCIvLyBjaHVua1wiKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBybVN5bmMoYnVpbGREaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gY3JlYXRlU3RhdGljQXNzZXRzKHByb3BzOiB7XG4gICAgYmFzZVBhdGg/OiBzdHJpbmc7XG4gICAgZGVzdGluYXRpb25LZXlQcmVmaXg/OiBzdHJpbmc7XG4gIH0pIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc1N0YXRpY0Fzc2V0cyhzdGFjaywgXCJOZXh0anNTdGF0aWNBc3NldHNcIiwge1xuICAgICAgYnVpbGREaXJlY3RvcnksXG4gICAgICBidWlsZElkOiBcInRlc3QtYnVpbGQtaWRcIixcbiAgICAgIGJhc2VQYXRoOiBwcm9wcy5iYXNlUGF0aCxcbiAgICAgIG92ZXJyaWRlczpcbiAgICAgICAgcHJvcHMuZGVzdGluYXRpb25LZXlQcmVmaXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGJ1Y2tldERlcGxveW1lbnRQcm9wczoge1xuICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBwcm9wcy5kZXN0aW5hdGlvbktleVByZWZpeCxcbiAgICAgICAgICAgICAgfSBhcyBhbnksXG4gICAgICAgICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgZGVzY3JpYmUoXCJrZXlQcmVmaXhcIiwgKCkgPT4ge1xuICAgIGl0KFwiaXMgZW1wdHkgd2hlbiBubyBiYXNlUGF0aCBpcyBzZXRcIiwgKCkgPT4ge1xuICAgICAgZXhwZWN0KGNyZWF0ZVN0YXRpY0Fzc2V0cyh7fSkua2V5UHJlZml4KS50b0JlKFwiXCIpO1xuICAgIH0pO1xuXG4gICAgaXQoXCJzdHJpcHMgc3Vycm91bmRpbmcgc2xhc2hlcyBmcm9tIGJhc2VQYXRoXCIsICgpID0+IHtcbiAgICAgIGV4cGVjdChjcmVhdGVTdGF0aWNBc3NldHMoeyBiYXNlUGF0aDogXCIvYmFzZS9cIiB9KS5rZXlQcmVmaXgpLnRvQmUoXCJiYXNlXCIpO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIG92ZXJyaWRlIGlzIHNwcmVhZCBsYXN0IGludG8gQnVja2V0RGVwbG95bWVudCwgc28gaXQgZGVjaWRlcyB3aGVyZVxuICAgIC8vIHRoZSBvYmplY3RzIGFjdHVhbGx5IGxhbmQuIENvbnN1bWVycyByZWFkaW5nIGFzc2V0cyBiYWNrIG91dCBvZiB0aGVcbiAgICAvLyBidWNrZXQgaGF2ZSB0byBzZWUgdGhhdCwgbm90IHRoZSBiYXNlUGF0aCBwcm9wLlxuICAgIGl0KFwicmVmbGVjdHMgYSBkZXN0aW5hdGlvbktleVByZWZpeCBvdmVycmlkZSByYXRoZXIgdGhhbiBiYXNlUGF0aFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGNyZWF0ZVN0YXRpY0Fzc2V0cyh7XG4gICAgICAgICAgYmFzZVBhdGg6IFwiL2Jhc2VcIixcbiAgICAgICAgICBkZXN0aW5hdGlvbktleVByZWZpeDogXCJicmFuY2gteFwiLFxuICAgICAgICB9KS5rZXlQcmVmaXgsXG4gICAgICApLnRvQmUoXCJicmFuY2gteFwiKTtcbiAgICB9KTtcblxuICAgIGl0KFwiaXMgZW1wdHkgd2hlbiBhbiBvdmVycmlkZSBjbGVhcnMgdGhlIHByZWZpeFwiLCAoKSA9PiB7XG4gICAgICBleHBlY3QoXG4gICAgICAgIGNyZWF0ZVN0YXRpY0Fzc2V0cyh7IGJhc2VQYXRoOiBcIi9iYXNlXCIsIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBcIlwiIH0pXG4gICAgICAgICAgLmtleVByZWZpeCxcbiAgICAgICkudG9CZShcIlwiKTtcbiAgICB9KTtcbiAgfSk7XG59KTtcbiJdfQ==
|
|
@@ -8,6 +8,8 @@ import { OptionalNextjsCacheProps } from "../generated-structs/OptionalNextjsCac
|
|
|
8
8
|
import { NextjsBuild } from "../nextjs-build/nextjs-build";
|
|
9
9
|
import { NextjsCache, NextjsCacheOverrides } from "../nextjs-cache";
|
|
10
10
|
import { NextjsComputeBaseProps } from "../nextjs-compute/nextjs-compute-base-props";
|
|
11
|
+
import { NextjsFunctions, NextjsFunctionsOverrides, NextjsFunctionsProps } from "../nextjs-compute/nextjs-functions";
|
|
12
|
+
import { NextjsImageFunction, NextjsImageFunctionOverrides, NextjsImageFunctionProps } from "../nextjs-compute/nextjs-image-function";
|
|
11
13
|
import { NextjsStaticAssets, NextjsStaticAssetsOverrides, NextjsStaticAssetsProps } from "../nextjs-static-assets";
|
|
12
14
|
/**
|
|
13
15
|
* Base overrides for the props passed to constructs within root/top-level Next.js constructs
|
|
@@ -17,6 +19,15 @@ export interface NextjsBaseConstructOverrides {
|
|
|
17
19
|
readonly nextjsCacheProps?: OptionalNextjsCacheProps;
|
|
18
20
|
readonly nextjsStaticAssetsProps?: NextjsStaticAssetsProps;
|
|
19
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Adds the overrides that only apply to the two Functions `NextjsType`s. The
|
|
24
|
+
* Containers types serve `_next/image` from the standalone server itself and
|
|
25
|
+
* have no Lambda functions to configure, so they would silently ignore these.
|
|
26
|
+
*/
|
|
27
|
+
export interface NextjsFunctionsConstructOverrides extends NextjsBaseConstructOverrides {
|
|
28
|
+
readonly nextjsFunctionsProps?: NextjsFunctionsProps;
|
|
29
|
+
readonly nextjsImageFunctionProps?: NextjsImageFunctionProps;
|
|
30
|
+
}
|
|
20
31
|
/**
|
|
21
32
|
* Base overrides for constructs shared between all root/top-level Next.js constructs.
|
|
22
33
|
*/
|
|
@@ -26,7 +37,28 @@ export interface NextjsBaseOverrides {
|
|
|
26
37
|
}
|
|
27
38
|
export interface NextjsBaseProps {
|
|
28
39
|
/**
|
|
29
|
-
* Prefix to the URI path the app will be served at.
|
|
40
|
+
* Prefix to the URI path the app will be served at. Also namespaces the
|
|
41
|
+
* static assets in S3, so it doubles as a way to host multiple apps or
|
|
42
|
+
* branches out of one bucket.
|
|
43
|
+
*
|
|
44
|
+
* How this relates to the `basePath` in your app's `next.config.js` depends
|
|
45
|
+
* on the construct, and synth fails on a combination that can't serve the
|
|
46
|
+
* app:
|
|
47
|
+
*
|
|
48
|
+
* - `NextjsGlobalFunctions`/`NextjsGlobalContainers`: leave this unset and it
|
|
49
|
+
* follows your app's `basePath`, which is what you want — CloudFront serves
|
|
50
|
+
* static assets from S3 using the request path as the object key, so the two
|
|
51
|
+
* have to be identical and a mismatch 404s all of them. Setting a different
|
|
52
|
+
* value throws.
|
|
53
|
+
* - `NextjsRegionalFunctions`: if you set this, the app's `basePath` must end
|
|
54
|
+
* with it — either equal to it, or prefixed by the stage or base path
|
|
55
|
+
* mapping API Gateway strips before matching resources (`basePath:
|
|
56
|
+
* "/prod/base"` with this set to `"/base"`). Leaving it unset while the app
|
|
57
|
+
* sets one is correct and common — an app served at the default `prod` stage
|
|
58
|
+
* sets `basePath: "/prod"` and leaves this alone.
|
|
59
|
+
* - `NextjsRegionalContainers`: only namespaces the S3 bucket. The ALB sends
|
|
60
|
+
* every path to the container, which serves its own static assets, so this
|
|
61
|
+
* is unconstrained.
|
|
30
62
|
* @example "/my-base-path"
|
|
31
63
|
*/
|
|
32
64
|
readonly basePath?: string;
|
|
@@ -106,8 +138,24 @@ export declare abstract class NextjsBaseConstruct extends Construct {
|
|
|
106
138
|
abstract get url(): string;
|
|
107
139
|
protected readonly nextjsType: NextjsType;
|
|
108
140
|
protected readonly baseProps: NextjsBaseConstructProps;
|
|
109
|
-
protected readonly constructOverrides?:
|
|
141
|
+
protected readonly constructOverrides?: NextjsFunctionsConstructOverrides;
|
|
142
|
+
/**
|
|
143
|
+
* The `basePath` everything downstream is built from: the `basePath` prop when
|
|
144
|
+
* set, otherwise the app's own `basePath` for the `NextjsType`s where the two
|
|
145
|
+
* are necessarily the same. Normalized to a bare path segment, `undefined` for
|
|
146
|
+
* no `basePath`. Use this instead of `baseProps.basePath`.
|
|
147
|
+
*/
|
|
148
|
+
protected readonly resolvedBasePath?: string;
|
|
110
149
|
constructor(scope: Construct, id: string, props: NextjsBaseConstructProps, nextjsType: NextjsType);
|
|
150
|
+
/**
|
|
151
|
+
* For the Global `NextjsType`s the key prefix isn't a free choice: it has to be
|
|
152
|
+
* `basePath` (see `resolveBasePath`). A `destinationKeyPrefix` override that
|
|
153
|
+
* moves the objects elsewhere has no way to tell the distribution about it —
|
|
154
|
+
* unlike the image Lambda and `NextjsApi`, which read
|
|
155
|
+
* `NextjsStaticAssets.keyPrefix` — so fail at synth rather than 404 every
|
|
156
|
+
* static request.
|
|
157
|
+
*/
|
|
158
|
+
private validateStaticAssetsKeyPrefix;
|
|
111
159
|
/**
|
|
112
160
|
* Finds construct overrides (if present) on props for any `NextjsType`
|
|
113
161
|
*/
|
|
@@ -119,4 +167,16 @@ export declare abstract class NextjsBaseConstruct extends Construct {
|
|
|
119
167
|
private createNextjsBuild;
|
|
120
168
|
private createNextjsCache;
|
|
121
169
|
private createNextjsStaticAssets;
|
|
170
|
+
/**
|
|
171
|
+
* Shared by `NextjsGlobalFunctions` and `NextjsRegionalFunctions`.
|
|
172
|
+
*/
|
|
173
|
+
protected createNextjsFunctions(overrides?: NextjsFunctionsOverrides): NextjsFunctions;
|
|
174
|
+
/**
|
|
175
|
+
* Shared by `NextjsGlobalFunctions` and `NextjsRegionalFunctions`, the only
|
|
176
|
+
* two `NextjsType`s for which `NextjsBuild` produces an image optimization
|
|
177
|
+
* asset. Only called when the dedicated image optimization Lambda is
|
|
178
|
+
* enabled, which is what makes the missing-asset check below an invariant
|
|
179
|
+
* violation rather than a supported configuration.
|
|
180
|
+
*/
|
|
181
|
+
protected createNextjsImageFunction(overrides?: NextjsImageFunctionOverrides): NextjsImageFunction;
|
|
122
182
|
}
|
|
@@ -6,27 +6,68 @@ const constructs_1 = require("constructs");
|
|
|
6
6
|
const constants_1 = require("../constants");
|
|
7
7
|
const nextjs_build_1 = require("../nextjs-build/nextjs-build");
|
|
8
8
|
const nextjs_cache_1 = require("../nextjs-cache");
|
|
9
|
+
const nextjs_functions_1 = require("../nextjs-compute/nextjs-functions");
|
|
10
|
+
const nextjs_image_function_1 = require("../nextjs-compute/nextjs-image-function");
|
|
9
11
|
const nextjs_static_assets_1 = require("../nextjs-static-assets");
|
|
12
|
+
const base_path_1 = require("../utils/base-path");
|
|
10
13
|
/**
|
|
11
14
|
* Base class for all Next.js root constructs
|
|
12
15
|
*/
|
|
13
16
|
class NextjsBaseConstruct extends constructs_1.Construct {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBaseConstruct", version: "0.
|
|
17
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsBaseConstruct", version: "0.6.0" };
|
|
15
18
|
nextjsBuild;
|
|
16
19
|
nextjsStaticAssets;
|
|
17
20
|
nextjsCache;
|
|
18
21
|
nextjsType;
|
|
19
22
|
// use baseProps instead of props so that child classes can use props
|
|
20
23
|
baseProps;
|
|
24
|
+
// Widest shape of the per-`NextjsType` overrides. The public interface each
|
|
25
|
+
// root construct accepts is what actually gates which keys are settable.
|
|
21
26
|
constructOverrides;
|
|
27
|
+
/**
|
|
28
|
+
* The `basePath` everything downstream is built from: the `basePath` prop when
|
|
29
|
+
* set, otherwise the app's own `basePath` for the `NextjsType`s where the two
|
|
30
|
+
* are necessarily the same. Normalized to a bare path segment, `undefined` for
|
|
31
|
+
* no `basePath`. Use this instead of `baseProps.basePath`.
|
|
32
|
+
*/
|
|
33
|
+
resolvedBasePath;
|
|
22
34
|
constructor(scope, id, props, nextjsType) {
|
|
23
35
|
super(scope, id);
|
|
24
36
|
this.baseProps = props;
|
|
25
37
|
this.nextjsType = nextjsType;
|
|
26
38
|
this.constructOverrides = this.getConstructOverrides(nextjsType);
|
|
27
39
|
this.nextjsBuild = this.createNextjsBuild();
|
|
40
|
+
// A basePath that doesn't line up with the app's own deploys cleanly and
|
|
41
|
+
// then 404s static assets, so reconcile the two up front and fail at synth
|
|
42
|
+
// on a combination that can't work.
|
|
43
|
+
this.resolvedBasePath = (0, base_path_1.resolveBasePath)(nextjsType, props.basePath, this.nextjsBuild.nextConfigBasePath);
|
|
28
44
|
this.nextjsCache = this.createNextjsCache();
|
|
29
45
|
this.nextjsStaticAssets = this.createNextjsStaticAssets();
|
|
46
|
+
this.validateStaticAssetsKeyPrefix();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* For the Global `NextjsType`s the key prefix isn't a free choice: it has to be
|
|
50
|
+
* `basePath` (see `resolveBasePath`). A `destinationKeyPrefix` override that
|
|
51
|
+
* moves the objects elsewhere has no way to tell the distribution about it —
|
|
52
|
+
* unlike the image Lambda and `NextjsApi`, which read
|
|
53
|
+
* `NextjsStaticAssets.keyPrefix` — so fail at synth rather than 404 every
|
|
54
|
+
* static request.
|
|
55
|
+
*/
|
|
56
|
+
validateStaticAssetsKeyPrefix() {
|
|
57
|
+
if (this.nextjsType !== constants_1.NextjsType.GLOBAL_FUNCTIONS &&
|
|
58
|
+
this.nextjsType !== constants_1.NextjsType.GLOBAL_CONTAINERS) {
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
const expected = this.resolvedBasePath ?? "";
|
|
62
|
+
const actual = this.nextjsStaticAssets.keyPrefix;
|
|
63
|
+
if (actual !== expected) {
|
|
64
|
+
throw new Error(`${constants_1.LOG_PREFIX} static assets key prefix mismatch for NextjsType.${this.nextjsType}: ` +
|
|
65
|
+
`the assets are uploaded under ${actual ? `"${actual}"` : "the bucket root"} ` +
|
|
66
|
+
`but CloudFront will request them under ${expected ? `"${expected}"` : "the bucket root"}, ` +
|
|
67
|
+
"using the request path as the S3 object key, so every `_next/static` and `public/` request would 404. " +
|
|
68
|
+
"Drop the `destinationKeyPrefix` override, or set it to the same value as `basePath`. " +
|
|
69
|
+
"To namespace a shared bucket, use `basePath` — it prefixes the keys and the URLs together.");
|
|
70
|
+
}
|
|
30
71
|
}
|
|
31
72
|
/**
|
|
32
73
|
* Finds construct overrides (if present) on props for any `NextjsType`
|
|
@@ -83,11 +124,48 @@ class NextjsBaseConstruct extends constructs_1.Construct {
|
|
|
83
124
|
bucket: this.baseProps.staticAssetsBucket,
|
|
84
125
|
buildDirectory: this.baseProps.buildDirectory,
|
|
85
126
|
buildId: this.nextjsBuild.buildId,
|
|
86
|
-
basePath: this.
|
|
127
|
+
basePath: this.resolvedBasePath,
|
|
87
128
|
overrides: this.baseProps.overrides?.nextjsStaticAssets,
|
|
88
129
|
...this.constructOverrides?.nextjsStaticAssetsProps,
|
|
89
130
|
});
|
|
90
131
|
}
|
|
132
|
+
/**
|
|
133
|
+
* Shared by `NextjsGlobalFunctions` and `NextjsRegionalFunctions`.
|
|
134
|
+
*/
|
|
135
|
+
createNextjsFunctions(overrides) {
|
|
136
|
+
return new nextjs_functions_1.NextjsFunctions(this, "NextjsFunctions", {
|
|
137
|
+
...this.computeBaseProps(),
|
|
138
|
+
overrides: {
|
|
139
|
+
...overrides,
|
|
140
|
+
dockerImageFunctionProps: {
|
|
141
|
+
...overrides?.dockerImageFunctionProps,
|
|
142
|
+
vpc: this.baseProps.vpc,
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
...this.constructOverrides?.nextjsFunctionsProps,
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Shared by `NextjsGlobalFunctions` and `NextjsRegionalFunctions`, the only
|
|
150
|
+
* two `NextjsType`s for which `NextjsBuild` produces an image optimization
|
|
151
|
+
* asset. Only called when the dedicated image optimization Lambda is
|
|
152
|
+
* enabled, which is what makes the missing-asset check below an invariant
|
|
153
|
+
* violation rather than a supported configuration.
|
|
154
|
+
*/
|
|
155
|
+
createNextjsImageFunction(overrides) {
|
|
156
|
+
if (!this.nextjsBuild.imageOptimizationAssetPath) {
|
|
157
|
+
throw new Error(`Missing NextjsBuild.imageOptimizationAssetPath for NextjsType.${this.nextjsType}`);
|
|
158
|
+
}
|
|
159
|
+
return new nextjs_image_function_1.NextjsImageFunction(this, "NextjsImageFunction", {
|
|
160
|
+
nextjsType: this.nextjsType,
|
|
161
|
+
imageOptimizationAssetPath: this.nextjsBuild.imageOptimizationAssetPath,
|
|
162
|
+
staticAssetsBucket: this.nextjsStaticAssets.bucket,
|
|
163
|
+
staticAssetsKeyPrefix: this.nextjsStaticAssets.keyPrefix,
|
|
164
|
+
vpc: this.baseProps.vpc,
|
|
165
|
+
overrides,
|
|
166
|
+
...this.constructOverrides?.nextjsImageFunctionProps,
|
|
167
|
+
});
|
|
168
|
+
}
|
|
91
169
|
}
|
|
92
170
|
exports.NextjsBaseConstruct = NextjsBaseConstruct;
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWJhc2UtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jvb3QtY29uc3RydWN0cy9uZXh0anMtYmFzZS1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUdBLDJDQUF1QztBQUN2Qyw0Q0FBMEM7QUFHMUMsK0RBQTJEO0FBQzNELGtEQUFvRTtBQUVwRSxrRUFJaUM7QUE2RmpDOztHQUVHO0FBQ0gsTUFBc0IsbUJBQW9CLFNBQVEsc0JBQVM7O0lBQ3pELFdBQVcsQ0FBYztJQUN6QixrQkFBa0IsQ0FBcUI7SUFDdkMsV0FBVyxDQUFjO0lBSU4sVUFBVSxDQUFhO0lBQzFDLHFFQUFxRTtJQUNsRCxTQUFTLENBQTJCO0lBQ3BDLGtCQUFrQixDQUFnQztJQUVyRSxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUErQixFQUMvQixVQUFzQjtRQUV0QixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1FBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzVDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUIsQ0FBQyxVQUFzQjtRQUNsRCxNQUFNLGVBQWUsR0FBK0I7WUFDbEQsQ0FBQyxzQkFBVSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsd0JBQXdCO1lBQ3hELENBQUMsc0JBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLHVCQUF1QjtZQUN0RCxDQUFDLHNCQUFVLENBQUMsbUJBQW1CLENBQUMsRUFBRSwwQkFBMEI7WUFDNUQsQ0FBQyxzQkFBVSxDQUFDLGtCQUFrQixDQUFDLEVBQUUseUJBQXlCO1NBQzNELENBQUM7UUFDRixNQUFNLEdBQUcsR0FBRyxlQUFlLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDeEMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUNJLENBQUM7UUFDdEMsSUFBSSxTQUFTLElBQUksR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQ2xDLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBaUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsT0FBTztJQUNULENBQUM7SUFFRDs7T0FFRztJQUNPLGdCQUFnQjtRQUN4QixPQUFPO1lBQ0wsZUFBZSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZTtZQUMvQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXO1lBQ3pDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCO1lBQ3JELE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU87WUFDakMsY0FBYyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYztZQUM3QyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IscUJBQXFCLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBcUI7U0FDOUQsQ0FBQztJQUNKLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsT0FBTyxJQUFJLDBCQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUMxQyxZQUFZLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZO1lBQ3pDLGNBQWMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWM7WUFDN0MsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVM7WUFDbkMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsZ0JBQWdCO1NBQzdDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsT0FBTyxJQUFJLDBCQUFXLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRTtZQUMxQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQ2pDLFdBQVcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVc7WUFDdkMsWUFBWSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWTtZQUMzQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsV0FBVztZQUNoRCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGlCQUFpQjtZQUNuRCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxnQkFBZ0I7U0FDN0MsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixPQUFPLElBQUkseUNBQWtCLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQ3hELE1BQU0sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLGtCQUFrQjtZQUN6QyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxjQUFjO1lBQzdDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU87WUFDakMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtZQUNqQyxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsa0JBQWtCO1lBQ3ZELEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLHVCQUF1QjtTQUNwRCxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTVGSCxrREE2RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJVGFibGVWMiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZHluYW1vZGJcIjtcbmltcG9ydCB7IElWcGMgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjMlwiO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxOZXh0anNCdWlsZFByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzQnVpbGRQcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxOZXh0anNDYWNoZVByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzQ2FjaGVQcm9wc1wiO1xuaW1wb3J0IHsgTmV4dGpzQnVpbGQgfSBmcm9tIFwiLi4vbmV4dGpzLWJ1aWxkL25leHRqcy1idWlsZFwiO1xuaW1wb3J0IHsgTmV4dGpzQ2FjaGUsIE5leHRqc0NhY2hlT3ZlcnJpZGVzIH0gZnJvbSBcIi4uL25leHRqcy1jYWNoZVwiO1xuaW1wb3J0IHsgTmV4dGpzQ29tcHV0ZUJhc2VQcm9wcyB9IGZyb20gXCIuLi9uZXh0anMtY29tcHV0ZS9uZXh0anMtY29tcHV0ZS1iYXNlLXByb3BzXCI7XG5pbXBvcnQge1xuICBOZXh0anNTdGF0aWNBc3NldHMsXG4gIE5leHRqc1N0YXRpY0Fzc2V0c092ZXJyaWRlcyxcbiAgTmV4dGpzU3RhdGljQXNzZXRzUHJvcHMsXG59IGZyb20gXCIuLi9uZXh0anMtc3RhdGljLWFzc2V0c1wiO1xuXG4vKipcbiAqIEJhc2Ugb3ZlcnJpZGVzIGZvciB0aGUgcHJvcHMgcGFzc2VkIHRvIGNvbnN0cnVjdHMgd2l0aGluIHJvb3QvdG9wLWxldmVsIE5leHQuanMgY29uc3RydWN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Jhc2VDb25zdHJ1Y3RPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNCdWlsZFByb3BzPzogT3B0aW9uYWxOZXh0anNCdWlsZFByb3BzO1xuICByZWFkb25seSBuZXh0anNDYWNoZVByb3BzPzogT3B0aW9uYWxOZXh0anNDYWNoZVByb3BzO1xuICByZWFkb25seSBuZXh0anNTdGF0aWNBc3NldHNQcm9wcz86IE5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzO1xufVxuXG4vKipcbiAqIEJhc2Ugb3ZlcnJpZGVzIGZvciBjb25zdHJ1Y3RzIHNoYXJlZCBiZXR3ZWVuIGFsbCByb290L3RvcC1sZXZlbCBOZXh0LmpzIGNvbnN0cnVjdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQmFzZU92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc0NhY2hlPzogTmV4dGpzQ2FjaGVPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc1N0YXRpY0Fzc2V0cz86IE5leHRqc1N0YXRpY0Fzc2V0c092ZXJyaWRlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNCYXNlUHJvcHMge1xuICAvKipcbiAgICogUHJlZml4IHRvIHRoZSBVUkkgcGF0aCB0aGUgYXBwIHdpbGwgYmUgc2VydmVkIGF0LlxuICAgKiBAZXhhbXBsZSBcIi9teS1iYXNlLXBhdGhcIlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZVBhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb21tYW5kIHRvIGdlbmVyYXRlIG9wdGltaXplZCB2ZXJzaW9uIG9mIHlvdXIgTmV4dC5qcyBhcHAgaW4gY29udGFpbmVyO1xuICAgKiBAZGVmYXVsdCBcIm5wbSBydW4gYnVpbGRcIlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb21tYW5kPzogc3RyaW5nO1xuICAvKipcbiAgICogRGlyZWN0b3J5IHdoZXJlIHRoZSBOZXh0LmpzIGFwcGxpY2F0aW9uIGlzIGxvY2F0ZWQgZm9yIGxvY2FsIGJ1aWxkcy5cbiAgICogVGhpcyBzaG91bGQgY29udGFpbiB0aGUgcGFja2FnZS5qc29uIGFuZCBOZXh0LmpzIGFwcGxpY2F0aW9uIGZpbGVzLlxuICAgKiBUaGlzIGlzIHdoZXJlIHtAbGluayBOZXh0anNCYXNlUHJvcHMuYnVpbGRDb21tYW5kfSBpcyBydW4uXG4gICAqIEBleGFtcGxlIGpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIndlYlwiKSBvciBcIi9wYXRoL3RvL25leHRqcy9hcHBcIlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGREaXJlY3Rvcnk6IHN0cmluZztcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIFMzIGJ1Y2tldCBmb3IgY2FjaGUgc3RvcmFnZS4gV2hlbiBwcm92aWRlZCwgY2RrLW5leHRqc1xuICAgKiB3aWxsIHVzZSB0aGlzIGJ1Y2tldCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZS4gQ2FjaGUgb2JqZWN0cyBhcmVcbiAgICogcHJlZml4ZWQgd2l0aCBgYnVpbGRJZGAgc28gbXVsdGlwbGUgZGVwbG95bWVudHMgY2FuIHNhZmVseSBzaGFyZSBvbmUgYnVja2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVCdWNrZXQ/OiBJQnVja2V0O1xuICAvKipcbiAgICogUGF0aCB0byBBUEkgUm91dGUgSGFuZGxlciB0aGF0IHJldHVybnMgSFRUUCAyMDAgdG8gZW5zdXJlIGNvbXB1dGUgaGVhbHRoLlxuICAgKiBAZXhhbXBsZSBcIi9hcGkvaGVhbHRoXCJcbiAgICogQGV4YW1wbGVcbiAgICogLy8gYXBpL2hlYWx0aC9yb3V0ZS50c1xuICAgKiBpbXBvcnQgeyBOZXh0UmVzcG9uc2UgfSBmcm9tIFwibmV4dC9zZXJ2ZXJcIjtcbiAgICpcbiAgICogZXhwb3J0IGZ1bmN0aW9uIEdFVCgpIHtcbiAgICogICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24oXCJcIik7XG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IGhlYWx0aENoZWNrUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogQnJpbmcgeW91ciBvd24gRHluYW1vREIgdGFibGUgZm9yIHJldmFsaWRhdGlvbiBtZXRhZGF0YS4gV2hlbiBwcm92aWRlZCxcbiAgICogY2RrLW5leHRqcyB3aWxsIHVzZSB0aGlzIHRhYmxlIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgb25lLiBUaGUgdGFibGVcbiAgICogbXVzdCBoYXZlIGBwa2AgKFN0cmluZykgYXMgcGFydGl0aW9uIGtleSBhbmQgYHNrYCAoU3RyaW5nKSBhcyBzb3J0IGtleS5cbiAgICogRW50cmllcyBhcmUgcGFydGl0aW9uZWQgYnkgYGJ1aWxkSWRgIHNvIG11bHRpcGxlIGRlcGxveW1lbnRzIGNhbiBzYWZlbHlcbiAgICogc2hhcmUgb25lIHRhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmV2YWxpZGF0aW9uVGFibGU/OiBJVGFibGVWMjtcbiAgLyoqXG4gICAqIFNraXBzIHJ1bm5pbmcgYG5leHQgYnVpbGRgLiBJZiBgdHJ1ZWAsIHlvdSBhcmUgcmVzcG9uc2libGUgZm9yIHJ1bm5pbmdcbiAgICogYG5leHQgYnVpbGRgIGJlZm9yZSB0aGlzIGNvbnN0cnVjdCBpcyBzeW50aGVzaXplZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNraXBCdWlsZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBTMyBidWNrZXQgZm9yIHN0YXRpYyBhc3NldHMuIFdoZW4gcHJvdmlkZWQsIGNkay1uZXh0anNcbiAgICogd2lsbCBkZXBsb3kgc3RhdGljIGFzc2V0cyB0byB0aGlzIGJ1Y2tldCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZS5cbiAgICogVXNlIHdpdGggYGJhc2VQYXRoYCB0byBpc29sYXRlIGFzc2V0cyBwZXIgYnJhbmNoIHdoZW4gc2hhcmluZyBhIGJ1Y2tldC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0J1Y2tldD86IElCdWNrZXQ7XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBWUEMuXG4gICAqIElmIHByb3ZpZGVkLCB3aWxsIGJlIHBhc3NlZCB2aWEgb3ZlcnJpZGVzIHRvIHRoZSBFQ1MgQ2x1c3RlciAoZm9yIGNvbnRhaW5lci1iYXNlZCBjb25zdHJ1Y3RzKVxuICAgKiBvciB0byB0aGUgTGFtYmRhIGZ1bmN0aW9uIChmb3IgZnVuY3Rpb24tYmFzZWQgY29uc3RydWN0cykuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgRUNTIENsdXN0ZXIgd2lsbCBjcmVhdGUgYSBWUEMgYXV0b21hdGljYWxseSBmb3IgY29udGFpbmVycyxcbiAgICogYW5kIExhbWJkYSBmdW5jdGlvbnMgd2lsbCBydW4gb3V0c2lkZSBhIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IElWcGM7XG59XG5cbi8qKlxuICogUmVxdWlyZWQgYmVjYXVzZSBpZiB3ZSBhZGQgYG92ZXJyaWRlc2Agb250byBgTmV4dGpzQmFzZVByb3BzYCB3ZSBnZXQganNpaVxuICogZXJyb3I6IGBJbnRlcmZhY2UgLi4uIHJlLWRlY2xhcmVzIG1lbWJlciBcIm92ZXJyaWRlc1wiYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Jhc2VDb25zdHJ1Y3RQcm9wcyBleHRlbmRzIE5leHRqc0Jhc2VQcm9wcyB7XG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc0Jhc2VPdmVycmlkZXM7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIE5leHQuanMgcm9vdCBjb25zdHJ1Y3RzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZXh0anNCYXNlQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgbmV4dGpzQnVpbGQ6IE5leHRqc0J1aWxkO1xuICBuZXh0anNTdGF0aWNBc3NldHM6IE5leHRqc1N0YXRpY0Fzc2V0cztcbiAgbmV4dGpzQ2FjaGU6IE5leHRqc0NhY2hlO1xuXG4gIGFic3RyYWN0IGdldCB1cmwoKTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBuZXh0anNUeXBlOiBOZXh0anNUeXBlO1xuICAvLyB1c2UgYmFzZVByb3BzIGluc3RlYWQgb2YgcHJvcHMgc28gdGhhdCBjaGlsZCBjbGFzc2VzIGNhbiB1c2UgcHJvcHNcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJhc2VQcm9wczogTmV4dGpzQmFzZUNvbnN0cnVjdFByb3BzO1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29uc3RydWN0T3ZlcnJpZGVzPzogTmV4dGpzQmFzZUNvbnN0cnVjdE92ZXJyaWRlcztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcHJvcHM6IE5leHRqc0Jhc2VDb25zdHJ1Y3RQcm9wcyxcbiAgICBuZXh0anNUeXBlOiBOZXh0anNUeXBlLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIHRoaXMuYmFzZVByb3BzID0gcHJvcHM7XG4gICAgdGhpcy5uZXh0anNUeXBlID0gbmV4dGpzVHlwZTtcbiAgICB0aGlzLmNvbnN0cnVjdE92ZXJyaWRlcyA9IHRoaXMuZ2V0Q29uc3RydWN0T3ZlcnJpZGVzKG5leHRqc1R5cGUpO1xuXG4gICAgdGhpcy5uZXh0anNCdWlsZCA9IHRoaXMuY3JlYXRlTmV4dGpzQnVpbGQoKTtcbiAgICB0aGlzLm5leHRqc0NhY2hlID0gdGhpcy5jcmVhdGVOZXh0anNDYWNoZSgpO1xuICAgIHRoaXMubmV4dGpzU3RhdGljQXNzZXRzID0gdGhpcy5jcmVhdGVOZXh0anNTdGF0aWNBc3NldHMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBjb25zdHJ1Y3Qgb3ZlcnJpZGVzIChpZiBwcmVzZW50KSBvbiBwcm9wcyBmb3IgYW55IGBOZXh0anNUeXBlYFxuICAgKi9cbiAgcHJpdmF0ZSBnZXRDb25zdHJ1Y3RPdmVycmlkZXMobmV4dGpzVHlwZTogTmV4dGpzVHlwZSkge1xuICAgIGNvbnN0IG5leHRqc1R5cGVUb0tleTogUmVjb3JkPE5leHRqc1R5cGUsIHN0cmluZz4gPSB7XG4gICAgICBbTmV4dGpzVHlwZS5HTE9CQUxfQ09OVEFJTkVSU106IFwibmV4dGpzR2xvYmFsQ29udGFpbmVyc1wiLFxuICAgICAgW05leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OU106IFwibmV4dGpzR2xvYmFsRnVuY3Rpb25zXCIsXG4gICAgICBbTmV4dGpzVHlwZS5SRUdJT05BTF9DT05UQUlORVJTXTogXCJuZXh0anNSZWdpb25hbENvbnRhaW5lcnNcIixcbiAgICAgIFtOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OU106IFwibmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNcIixcbiAgICB9O1xuICAgIGNvbnN0IGtleSA9IG5leHRqc1R5cGVUb0tleVtuZXh0anNUeXBlXTtcbiAgICBjb25zdCBvdmVycmlkZXMgPSB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXMgYXNcbiAgICAgIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkO1xuICAgIGlmIChvdmVycmlkZXMgJiYga2V5IGluIG92ZXJyaWRlcykge1xuICAgICAgcmV0dXJuIG92ZXJyaWRlc1trZXldIGFzIE5leHRqc0Jhc2VDb25zdHJ1Y3RPdmVycmlkZXM7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY29tcHV0ZSBiYXNlIHByb3BzIGZvciBib3RoIExhbWJkYSBmdW5jdGlvbnMgYW5kIGNvbnRhaW5lcnNcbiAgICovXG4gIHByb3RlY3RlZCBjb21wdXRlQmFzZVByb3BzKCk6IE5leHRqc0NvbXB1dGVCYXNlUHJvcHMge1xuICAgIHJldHVybiB7XG4gICAgICBoZWFsdGhDaGVja1BhdGg6IHRoaXMuYmFzZVByb3BzLmhlYWx0aENoZWNrUGF0aCxcbiAgICAgIGNhY2hlQnVja2V0OiB0aGlzLm5leHRqc0NhY2hlLmNhY2hlQnVja2V0LFxuICAgICAgcmV2YWxpZGF0aW9uVGFibGU6IHRoaXMubmV4dGpzQ2FjaGUucmV2YWxpZGF0aW9uVGFibGUsXG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBidWlsZERpcmVjdG9yeTogdGhpcy5iYXNlUHJvcHMuYnVpbGREaXJlY3RvcnksXG4gICAgICBuZXh0anNUeXBlOiB0aGlzLm5leHRqc1R5cGUsXG4gICAgICByZWxhdGl2ZVBhdGhUb1BhY2thZ2U6IHRoaXMubmV4dGpzQnVpbGQucmVsYXRpdmVQYXRoVG9QYWNrYWdlLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0J1aWxkKCk6IE5leHRqc0J1aWxkIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0J1aWxkKHRoaXMsIFwiTmV4dGpzQnVpbGRcIiwge1xuICAgICAgYnVpbGRDb21tYW5kOiB0aGlzLmJhc2VQcm9wcy5idWlsZENvbW1hbmQsXG4gICAgICBidWlsZERpcmVjdG9yeTogdGhpcy5iYXNlUHJvcHMuYnVpbGREaXJlY3RvcnksXG4gICAgICBuZXh0anNUeXBlOiB0aGlzLm5leHRqc1R5cGUsXG4gICAgICBza2lwQnVpbGQ6IHRoaXMuYmFzZVByb3BzLnNraXBCdWlsZCxcbiAgICAgIC4uLnRoaXMuY29uc3RydWN0T3ZlcnJpZGVzPy5uZXh0anNCdWlsZFByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNDYWNoZSgpOiBOZXh0anNDYWNoZSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNDYWNoZSh0aGlzLCBcIk5leHRqc0NhY2hlXCIsIHtcbiAgICAgIGJ1aWxkSWQ6IHRoaXMubmV4dGpzQnVpbGQuYnVpbGRJZCxcbiAgICAgIGNhY2hlQnVja2V0OiB0aGlzLmJhc2VQcm9wcy5jYWNoZUJ1Y2tldCxcbiAgICAgIGluaXRDYWNoZURpcjogdGhpcy5uZXh0anNCdWlsZC5pbml0Q2FjaGVEaXIsXG4gICAgICBvdmVycmlkZXM6IHRoaXMuYmFzZVByb3BzLm92ZXJyaWRlcz8ubmV4dGpzQ2FjaGUsXG4gICAgICByZXZhbGlkYXRpb25UYWJsZTogdGhpcy5iYXNlUHJvcHMucmV2YWxpZGF0aW9uVGFibGUsXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdE92ZXJyaWRlcz8ubmV4dGpzQ2FjaGVQcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzU3RhdGljQXNzZXRzKCk6IE5leHRqc1N0YXRpY0Fzc2V0cyB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNTdGF0aWNBc3NldHModGhpcywgXCJOZXh0anNTdGF0aWNBc3NldHNcIiwge1xuICAgICAgYnVja2V0OiB0aGlzLmJhc2VQcm9wcy5zdGF0aWNBc3NldHNCdWNrZXQsXG4gICAgICBidWlsZERpcmVjdG9yeTogdGhpcy5iYXNlUHJvcHMuYnVpbGREaXJlY3RvcnksXG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBiYXNlUGF0aDogdGhpcy5iYXNlUHJvcHMuYmFzZVBhdGgsXG4gICAgICBvdmVycmlkZXM6IHRoaXMuYmFzZVByb3BzLm92ZXJyaWRlcz8ubmV4dGpzU3RhdGljQXNzZXRzLFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
171
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWJhc2UtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jvb3QtY29uc3RydWN0cy9uZXh0anMtYmFzZS1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUdBLDJDQUF1QztBQUN2Qyw0Q0FBc0Q7QUFHdEQsK0RBQTJEO0FBQzNELGtEQUFvRTtBQUVwRSx5RUFJNEM7QUFDNUMsbUZBSWlEO0FBQ2pELGtFQUlpQztBQUNqQyxrREFBcUQ7QUE0SHJEOztHQUVHO0FBQ0gsTUFBc0IsbUJBQW9CLFNBQVEsc0JBQVM7O0lBQ3pELFdBQVcsQ0FBYztJQUN6QixrQkFBa0IsQ0FBcUI7SUFDdkMsV0FBVyxDQUFjO0lBSU4sVUFBVSxDQUFhO0lBQzFDLHFFQUFxRTtJQUNsRCxTQUFTLENBQTJCO0lBQ3ZELDRFQUE0RTtJQUM1RSx5RUFBeUU7SUFDdEQsa0JBQWtCLENBQXFDO0lBQzFFOzs7OztPQUtHO0lBQ2dCLGdCQUFnQixDQUFVO0lBRTdDLFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQStCLEVBQy9CLFVBQXNCO1FBRXRCLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUM7UUFDN0IsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVqRSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQzVDLHlFQUF5RTtRQUN6RSwyRUFBMkU7UUFDM0Usb0NBQW9DO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFBLDJCQUFlLEVBQ3JDLFVBQVUsRUFDVixLQUFLLENBQUMsUUFBUSxFQUNkLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLENB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b0JBQ3RDLEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7aUJBQ3hCO2FBQ0Y7WUFDRCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxvQkFBb0I7U0FDakQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNPLHlCQUF5QixDQUNqQyxTQUF3QztRQUV4QyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1lBQ2pELE1BQU0sSUFBSSxLQUFLLENBQ2IsaUVBQWlFLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FDbkYsQ0FBQztRQUNKLENBQUM7UUFDRCxPQUFPLElBQUksMkNBQW1CLENBQUMsSUFBSSxFQUFFLHFCQUFxQixFQUFFO1lBQzFELFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQiwwQkFBMEIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLDBCQUEwQjtZQUN2RSxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUNsRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUztZQUN4RCxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHO1lBQ3ZCLFNBQVM7WUFDVCxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSx3QkFBd0I7U0FDckQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF4TEgsa0RBeUxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVRhYmxlVjIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWR5bmFtb2RiXCI7XG5pbXBvcnQgeyBJVnBjIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lYzJcIjtcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTE9HX1BSRUZJWCwgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzQnVpbGRQcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbE5leHRqc0J1aWxkUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzQ2FjaGVQcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbE5leHRqc0NhY2hlUHJvcHNcIjtcbmltcG9ydCB7IE5leHRqc0J1aWxkIH0gZnJvbSBcIi4uL25leHRqcy1idWlsZC9uZXh0anMtYnVpbGRcIjtcbmltcG9ydCB7IE5leHRqc0NhY2hlLCBOZXh0anNDYWNoZU92ZXJyaWRlcyB9IGZyb20gXCIuLi9uZXh0anMtY2FjaGVcIjtcbmltcG9ydCB7IE5leHRqc0NvbXB1dGVCYXNlUHJvcHMgfSBmcm9tIFwiLi4vbmV4dGpzLWNvbXB1dGUvbmV4dGpzLWNvbXB1dGUtYmFzZS1wcm9wc1wiO1xuaW1wb3J0IHtcbiAgTmV4dGpzRnVuY3Rpb25zLFxuICBOZXh0anNGdW5jdGlvbnNPdmVycmlkZXMsXG4gIE5leHRqc0Z1bmN0aW9uc1Byb3BzLFxufSBmcm9tIFwiLi4vbmV4dGpzLWNvbXB1dGUvbmV4dGpzLWZ1bmN0aW9uc1wiO1xuaW1wb3J0IHtcbiAgTmV4dGpzSW1hZ2VGdW5jdGlvbixcbiAgTmV4dGpzSW1hZ2VGdW5jdGlvbk92ZXJyaWRlcyxcbiAgTmV4dGpzSW1hZ2VGdW5jdGlvblByb3BzLFxufSBmcm9tIFwiLi4vbmV4dGpzLWNvbXB1dGUvbmV4dGpzLWltYWdlLWZ1bmN0aW9uXCI7XG5pbXBvcnQge1xuICBOZXh0anNTdGF0aWNBc3NldHMsXG4gIE5leHRqc1N0YXRpY0Fzc2V0c092ZXJyaWRlcyxcbiAgTmV4dGpzU3RhdGljQXNzZXRzUHJvcHMsXG59IGZyb20gXCIuLi9uZXh0anMtc3RhdGljLWFzc2V0c1wiO1xuaW1wb3J0IHsgcmVzb2x2ZUJhc2VQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL2Jhc2UtcGF0aFwiO1xuXG4vKipcbiAqIEJhc2Ugb3ZlcnJpZGVzIGZvciB0aGUgcHJvcHMgcGFzc2VkIHRvIGNvbnN0cnVjdHMgd2l0aGluIHJvb3QvdG9wLWxldmVsIE5leHQuanMgY29uc3RydWN0c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Jhc2VDb25zdHJ1Y3RPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNCdWlsZFByb3BzPzogT3B0aW9uYWxOZXh0anNCdWlsZFByb3BzO1xuICByZWFkb25seSBuZXh0anNDYWNoZVByb3BzPzogT3B0aW9uYWxOZXh0anNDYWNoZVByb3BzO1xuICByZWFkb25seSBuZXh0anNTdGF0aWNBc3NldHNQcm9wcz86IE5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzO1xufVxuXG4vKipcbiAqIEFkZHMgdGhlIG92ZXJyaWRlcyB0aGF0IG9ubHkgYXBwbHkgdG8gdGhlIHR3byBGdW5jdGlvbnMgYE5leHRqc1R5cGVgcy4gVGhlXG4gKiBDb250YWluZXJzIHR5cGVzIHNlcnZlIGBfbmV4dC9pbWFnZWAgZnJvbSB0aGUgc3RhbmRhbG9uZSBzZXJ2ZXIgaXRzZWxmIGFuZFxuICogaGF2ZSBubyBMYW1iZGEgZnVuY3Rpb25zIHRvIGNvbmZpZ3VyZSwgc28gdGhleSB3b3VsZCBzaWxlbnRseSBpZ25vcmUgdGhlc2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzRnVuY3Rpb25zQ29uc3RydWN0T3ZlcnJpZGVzIGV4dGVuZHMgTmV4dGpzQmFzZUNvbnN0cnVjdE92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc0Z1bmN0aW9uc1Byb3BzPzogTmV4dGpzRnVuY3Rpb25zUHJvcHM7XG4gIHJlYWRvbmx5IG5leHRqc0ltYWdlRnVuY3Rpb25Qcm9wcz86IE5leHRqc0ltYWdlRnVuY3Rpb25Qcm9wcztcbn1cblxuLyoqXG4gKiBCYXNlIG92ZXJyaWRlcyBmb3IgY29uc3RydWN0cyBzaGFyZWQgYmV0d2VlbiBhbGwgcm9vdC90b3AtbGV2ZWwgTmV4dC5qcyBjb25zdHJ1Y3RzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Jhc2VPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNDYWNoZT86IE5leHRqc0NhY2hlT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNTdGF0aWNBc3NldHM/OiBOZXh0anNTdGF0aWNBc3NldHNPdmVycmlkZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFByZWZpeCB0byB0aGUgVVJJIHBhdGggdGhlIGFwcCB3aWxsIGJlIHNlcnZlZCBhdC4gQWxzbyBuYW1lc3BhY2VzIHRoZVxuICAgKiBzdGF0aWMgYXNzZXRzIGluIFMzLCBzbyBpdCBkb3VibGVzIGFzIGEgd2F5IHRvIGhvc3QgbXVsdGlwbGUgYXBwcyBvclxuICAgKiBicmFuY2hlcyBvdXQgb2Ygb25lIGJ1Y2tldC5cbiAgICpcbiAgICogSG93IHRoaXMgcmVsYXRlcyB0byB0aGUgYGJhc2VQYXRoYCBpbiB5b3VyIGFwcCdzIGBuZXh0LmNvbmZpZy5qc2AgZGVwZW5kc1xuICAgKiBvbiB0aGUgY29uc3RydWN0LCBhbmQgc3ludGggZmFpbHMgb24gYSBjb21iaW5hdGlvbiB0aGF0IGNhbid0IHNlcnZlIHRoZVxuICAgKiBhcHA6XG4gICAqXG4gICAqIC0gYE5leHRqc0dsb2JhbEZ1bmN0aW9uc2AvYE5leHRqc0dsb2JhbENvbnRhaW5lcnNgOiBsZWF2ZSB0aGlzIHVuc2V0IGFuZCBpdFxuICAgKiAgIGZvbGxvd3MgeW91ciBhcHAncyBgYmFzZVBhdGhgLCB3aGljaCBpcyB3aGF0IHlvdSB3YW50IOKAlCBDbG91ZEZyb250IHNlcnZlc1xuICAgKiAgIHN0YXRpYyBhc3NldHMgZnJvbSBTMyB1c2luZyB0aGUgcmVxdWVzdCBwYXRoIGFzIHRoZSBvYmplY3Qga2V5LCBzbyB0aGUgdHdvXG4gICAqICAgaGF2ZSB0byBiZSBpZGVudGljYWwgYW5kIGEgbWlzbWF0Y2ggNDA0cyBhbGwgb2YgdGhlbS4gU2V0dGluZyBhIGRpZmZlcmVudFxuICAgKiAgIHZhbHVlIHRocm93cy5cbiAgICogLSBgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNgOiBpZiB5b3Ugc2V0IHRoaXMsIHRoZSBhcHAncyBgYmFzZVBhdGhgIG11c3QgZW5kXG4gICAqICAgd2l0aCBpdCDigJQgZWl0aGVyIGVxdWFsIHRvIGl0LCBvciBwcmVmaXhlZCBieSB0aGUgc3RhZ2Ugb3IgYmFzZSBwYXRoXG4gICAqICAgbWFwcGluZyBBUEkgR2F0ZXdheSBzdHJpcHMgYmVmb3JlIG1hdGNoaW5nIHJlc291cmNlcyAoYGJhc2VQYXRoOlxuICAgKiAgIFwiL3Byb2QvYmFzZVwiYCB3aXRoIHRoaXMgc2V0IHRvIGBcIi9iYXNlXCJgKS4gTGVhdmluZyBpdCB1bnNldCB3aGlsZSB0aGUgYXBwXG4gICAqICAgc2V0cyBvbmUgaXMgY29ycmVjdCBhbmQgY29tbW9uIOKAlCBhbiBhcHAgc2VydmVkIGF0IHRoZSBkZWZhdWx0IGBwcm9kYCBzdGFnZVxuICAgKiAgIHNldHMgYGJhc2VQYXRoOiBcIi9wcm9kXCJgIGFuZCBsZWF2ZXMgdGhpcyBhbG9uZS5cbiAgICogLSBgTmV4dGpzUmVnaW9uYWxDb250YWluZXJzYDogb25seSBuYW1lc3BhY2VzIHRoZSBTMyBidWNrZXQuIFRoZSBBTEIgc2VuZHNcbiAgICogICBldmVyeSBwYXRoIHRvIHRoZSBjb250YWluZXIsIHdoaWNoIHNlcnZlcyBpdHMgb3duIHN0YXRpYyBhc3NldHMsIHNvIHRoaXNcbiAgICogICBpcyB1bmNvbnN0cmFpbmVkLlxuICAgKiBAZXhhbXBsZSBcIi9teS1iYXNlLXBhdGhcIlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZVBhdGg/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBDb21tYW5kIHRvIGdlbmVyYXRlIG9wdGltaXplZCB2ZXJzaW9uIG9mIHlvdXIgTmV4dC5qcyBhcHAgaW4gY29udGFpbmVyO1xuICAgKiBAZGVmYXVsdCBcIm5wbSBydW4gYnVpbGRcIlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRDb21tYW5kPzogc3RyaW5nO1xuICAvKipcbiAgICogRGlyZWN0b3J5IHdoZXJlIHRoZSBOZXh0LmpzIGFwcGxpY2F0aW9uIGlzIGxvY2F0ZWQgZm9yIGxvY2FsIGJ1aWxkcy5cbiAgICogVGhpcyBzaG91bGQgY29udGFpbiB0aGUgcGFja2FnZS5qc29uIGFuZCBOZXh0LmpzIGFwcGxpY2F0aW9uIGZpbGVzLlxuICAgKiBUaGlzIGlzIHdoZXJlIHtAbGluayBOZXh0anNCYXNlUHJvcHMuYnVpbGRDb21tYW5kfSBpcyBydW4uXG4gICAqIEBleGFtcGxlIGpvaW4oaW1wb3J0Lm1ldGEuZGlybmFtZSwgXCIuLlwiLCBcIndlYlwiKSBvciBcIi9wYXRoL3RvL25leHRqcy9hcHBcIlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGREaXJlY3Rvcnk6IHN0cmluZztcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIFMzIGJ1Y2tldCBmb3IgY2FjaGUgc3RvcmFnZS4gV2hlbiBwcm92aWRlZCwgY2RrLW5leHRqc1xuICAgKiB3aWxsIHVzZSB0aGlzIGJ1Y2tldCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZS4gQ2FjaGUgb2JqZWN0cyBhcmVcbiAgICogcHJlZml4ZWQgd2l0aCBgYnVpbGRJZGAgc28gbXVsdGlwbGUgZGVwbG95bWVudHMgY2FuIHNhZmVseSBzaGFyZSBvbmUgYnVja2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVCdWNrZXQ/OiBJQnVja2V0O1xuICAvKipcbiAgICogUGF0aCB0byBBUEkgUm91dGUgSGFuZGxlciB0aGF0IHJldHVybnMgSFRUUCAyMDAgdG8gZW5zdXJlIGNvbXB1dGUgaGVhbHRoLlxuICAgKiBAZXhhbXBsZSBcIi9hcGkvaGVhbHRoXCJcbiAgICogQGV4YW1wbGVcbiAgICogLy8gYXBpL2hlYWx0aC9yb3V0ZS50c1xuICAgKiBpbXBvcnQgeyBOZXh0UmVzcG9uc2UgfSBmcm9tIFwibmV4dC9zZXJ2ZXJcIjtcbiAgICpcbiAgICogZXhwb3J0IGZ1bmN0aW9uIEdFVCgpIHtcbiAgICogICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24oXCJcIik7XG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IGhlYWx0aENoZWNrUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogQnJpbmcgeW91ciBvd24gRHluYW1vREIgdGFibGUgZm9yIHJldmFsaWRhdGlvbiBtZXRhZGF0YS4gV2hlbiBwcm92aWRlZCxcbiAgICogY2RrLW5leHRqcyB3aWxsIHVzZSB0aGlzIHRhYmxlIGluc3RlYWQgb2YgY3JlYXRpbmcgYSBuZXcgb25lLiBUaGUgdGFibGVcbiAgICogbXVzdCBoYXZlIGBwa2AgKFN0cmluZykgYXMgcGFydGl0aW9uIGtleSBhbmQgYHNrYCAoU3RyaW5nKSBhcyBzb3J0IGtleS5cbiAgICogRW50cmllcyBhcmUgcGFydGl0aW9uZWQgYnkgYGJ1aWxkSWRgIHNvIG11bHRpcGxlIGRlcGxveW1lbnRzIGNhbiBzYWZlbHlcbiAgICogc2hhcmUgb25lIHRhYmxlLlxuICAgKi9cbiAgcmVhZG9ubHkgcmV2YWxpZGF0aW9uVGFibGU/OiBJVGFibGVWMjtcbiAgLyoqXG4gICAqIFNraXBzIHJ1bm5pbmcgYG5leHQgYnVpbGRgLiBJZiBgdHJ1ZWAsIHlvdSBhcmUgcmVzcG9uc2libGUgZm9yIHJ1bm5pbmdcbiAgICogYG5leHQgYnVpbGRgIGJlZm9yZSB0aGlzIGNvbnN0cnVjdCBpcyBzeW50aGVzaXplZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNraXBCdWlsZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBTMyBidWNrZXQgZm9yIHN0YXRpYyBhc3NldHMuIFdoZW4gcHJvdmlkZWQsIGNkay1uZXh0anNcbiAgICogd2lsbCBkZXBsb3kgc3RhdGljIGFzc2V0cyB0byB0aGlzIGJ1Y2tldCBpbnN0ZWFkIG9mIGNyZWF0aW5nIGEgbmV3IG9uZS5cbiAgICogVXNlIHdpdGggYGJhc2VQYXRoYCB0byBpc29sYXRlIGFzc2V0cyBwZXIgYnJhbmNoIHdoZW4gc2hhcmluZyBhIGJ1Y2tldC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRpY0Fzc2V0c0J1Y2tldD86IElCdWNrZXQ7XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBWUEMuXG4gICAqIElmIHByb3ZpZGVkLCB3aWxsIGJlIHBhc3NlZCB2aWEgb3ZlcnJpZGVzIHRvIHRoZSBFQ1MgQ2x1c3RlciAoZm9yIGNvbnRhaW5lci1iYXNlZCBjb25zdHJ1Y3RzKVxuICAgKiBvciB0byB0aGUgTGFtYmRhIGZ1bmN0aW9uIChmb3IgZnVuY3Rpb24tYmFzZWQgY29uc3RydWN0cykuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgRUNTIENsdXN0ZXIgd2lsbCBjcmVhdGUgYSBWUEMgYXV0b21hdGljYWxseSBmb3IgY29udGFpbmVycyxcbiAgICogYW5kIExhbWJkYSBmdW5jdGlvbnMgd2lsbCBydW4gb3V0c2lkZSBhIFZQQy5cbiAgICovXG4gIHJlYWRvbmx5IHZwYz86IElWcGM7XG59XG5cbi8qKlxuICogUmVxdWlyZWQgYmVjYXVzZSBpZiB3ZSBhZGQgYG92ZXJyaWRlc2Agb250byBgTmV4dGpzQmFzZVByb3BzYCB3ZSBnZXQganNpaVxuICogZXJyb3I6IGBJbnRlcmZhY2UgLi4uIHJlLWRlY2xhcmVzIG1lbWJlciBcIm92ZXJyaWRlc1wiYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0Jhc2VDb25zdHJ1Y3RQcm9wcyBleHRlbmRzIE5leHRqc0Jhc2VQcm9wcyB7XG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc0Jhc2VPdmVycmlkZXM7XG59XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgYWxsIE5leHQuanMgcm9vdCBjb25zdHJ1Y3RzXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOZXh0anNCYXNlQ29uc3RydWN0IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgbmV4dGpzQnVpbGQ6IE5leHRqc0J1aWxkO1xuICBuZXh0anNTdGF0aWNBc3NldHM6IE5leHRqc1N0YXRpY0Fzc2V0cztcbiAgbmV4dGpzQ2FjaGU6IE5leHRqc0NhY2hlO1xuXG4gIGFic3RyYWN0IGdldCB1cmwoKTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBuZXh0anNUeXBlOiBOZXh0anNUeXBlO1xuICAvLyB1c2UgYmFzZVByb3BzIGluc3RlYWQgb2YgcHJvcHMgc28gdGhhdCBjaGlsZCBjbGFzc2VzIGNhbiB1c2UgcHJvcHNcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJhc2VQcm9wczogTmV4dGpzQmFzZUNvbnN0cnVjdFByb3BzO1xuICAvLyBXaWRlc3Qgc2hhcGUgb2YgdGhlIHBlci1gTmV4dGpzVHlwZWAgb3ZlcnJpZGVzLiBUaGUgcHVibGljIGludGVyZmFjZSBlYWNoXG4gIC8vIHJvb3QgY29uc3RydWN0IGFjY2VwdHMgaXMgd2hhdCBhY3R1YWxseSBnYXRlcyB3aGljaCBrZXlzIGFyZSBzZXR0YWJsZS5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnN0cnVjdE92ZXJyaWRlcz86IE5leHRqc0Z1bmN0aW9uc0NvbnN0cnVjdE92ZXJyaWRlcztcbiAgLyoqXG4gICAqIFRoZSBgYmFzZVBhdGhgIGV2ZXJ5dGhpbmcgZG93bnN0cmVhbSBpcyBidWlsdCBmcm9tOiB0aGUgYGJhc2VQYXRoYCBwcm9wIHdoZW5cbiAgICogc2V0LCBvdGhlcndpc2UgdGhlIGFwcCdzIG93biBgYmFzZVBhdGhgIGZvciB0aGUgYE5leHRqc1R5cGVgcyB3aGVyZSB0aGUgdHdvXG4gICAqIGFyZSBuZWNlc3NhcmlseSB0aGUgc2FtZS4gTm9ybWFsaXplZCB0byBhIGJhcmUgcGF0aCBzZWdtZW50LCBgdW5kZWZpbmVkYCBmb3JcbiAgICogbm8gYGJhc2VQYXRoYC4gVXNlIHRoaXMgaW5zdGVhZCBvZiBgYmFzZVByb3BzLmJhc2VQYXRoYC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSByZXNvbHZlZEJhc2VQYXRoPzogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogTmV4dGpzQmFzZUNvbnN0cnVjdFByb3BzLFxuICAgIG5leHRqc1R5cGU6IE5leHRqc1R5cGUsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgdGhpcy5iYXNlUHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLm5leHRqc1R5cGUgPSBuZXh0anNUeXBlO1xuICAgIHRoaXMuY29uc3RydWN0T3ZlcnJpZGVzID0gdGhpcy5nZXRDb25zdHJ1Y3RPdmVycmlkZXMobmV4dGpzVHlwZSk7XG5cbiAgICB0aGlzLm5leHRqc0J1aWxkID0gdGhpcy5jcmVhdGVOZXh0anNCdWlsZCgpO1xuICAgIC8vIEEgYmFzZVBhdGggdGhhdCBkb2Vzbid0IGxpbmUgdXAgd2l0aCB0aGUgYXBwJ3Mgb3duIGRlcGxveXMgY2xlYW5seSBhbmRcbiAgICAvLyB0aGVuIDQwNHMgc3RhdGljIGFzc2V0cywgc28gcmVjb25jaWxlIHRoZSB0d28gdXAgZnJvbnQgYW5kIGZhaWwgYXQgc3ludGhcbiAgICAvLyBvbiBhIGNvbWJpbmF0aW9uIHRoYXQgY2FuJ3Qgd29yay5cbiAgICB0aGlzLnJlc29sdmVkQmFzZVBhdGggPSByZXNvbHZlQmFzZVBhdGgoXG4gICAgICBuZXh0anNUeXBlLFxuICAgICAgcHJvcHMuYmFzZVBhdGgsXG4gICAgICB0aGlzLm5leHRqc0J1aWxkLm5leHRDb25maWdCYXNlUGF0aCxcbiAgICApO1xuICAgIHRoaXMubmV4dGpzQ2FjaGUgPSB0aGlzLmNyZWF0ZU5leHRqc0NhY2hlKCk7XG4gICAgdGhpcy5uZXh0anNTdGF0aWNBc3NldHMgPSB0aGlzLmNyZWF0ZU5leHRqc1N0YXRpY0Fzc2V0cygpO1xuICAgIHRoaXMudmFsaWRhdGVTdGF0aWNBc3NldHNLZXlQcmVmaXgoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgdGhlIEdsb2JhbCBgTmV4dGpzVHlwZWBzIHRoZSBrZXkgcHJlZml4IGlzbid0IGEgZnJlZSBjaG9pY2U6IGl0IGhhcyB0byBiZVxuICAgKiBgYmFzZVBhdGhgIChzZWUgYHJlc29sdmVCYXNlUGF0aGApLiBBIGBkZXN0aW5hdGlvbktleVByZWZpeGAgb3ZlcnJpZGUgdGhhdFxuICAgKiBtb3ZlcyB0aGUgb2JqZWN0cyBlbHNld2hlcmUgaGFzIG5vIHdheSB0byB0ZWxsIHRoZSBkaXN0cmlidXRpb24gYWJvdXQgaXQg4oCUXG4gICAqIHVubGlrZSB0aGUgaW1hZ2UgTGFtYmRhIGFuZCBgTmV4dGpzQXBpYCwgd2hpY2ggcmVhZFxuICAgKiBgTmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeGAg4oCUIHNvIGZhaWwgYXQgc3ludGggcmF0aGVyIHRoYW4gNDA0IGV2ZXJ5XG4gICAqIHN0YXRpYyByZXF1ZXN0LlxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZVN0YXRpY0Fzc2V0c0tleVByZWZpeCgpOiB2b2lkIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLm5leHRqc1R5cGUgIT09IE5leHRqc1R5cGUuR0xPQkFMX0ZVTkNUSU9OUyAmJlxuICAgICAgdGhpcy5uZXh0anNUeXBlICE9PSBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5yZXNvbHZlZEJhc2VQYXRoID8/IFwiXCI7XG4gICAgY29uc3QgYWN0dWFsID0gdGhpcy5uZXh0anNTdGF0aWNBc3NldHMua2V5UHJlZml4O1xuICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke0xPR19QUkVGSVh9IHN0YXRpYyBhc3NldHMga2V5IHByZWZpeCBtaXNtYXRjaCBmb3IgTmV4dGpzVHlwZS4ke3RoaXMubmV4dGpzVHlwZX06IGAgK1xuICAgICAgICAgIGB0aGUgYXNzZXRzIGFyZSB1cGxvYWRlZCB1bmRlciAke2FjdHVhbCA/IGBcIiR7YWN0dWFsfVwiYCA6IFwidGhlIGJ1Y2tldCByb290XCJ9IGAgK1xuICAgICAgICAgIGBidXQgQ2xvdWRGcm9udCB3aWxsIHJlcXVlc3QgdGhlbSB1bmRlciAke2V4cGVjdGVkID8gYFwiJHtleHBlY3RlZH1cImAgOiBcInRoZSBidWNrZXQgcm9vdFwifSwgYCArXG4gICAgICAgICAgXCJ1c2luZyB0aGUgcmVxdWVzdCBwYXRoIGFzIHRoZSBTMyBvYmplY3Qga2V5LCBzbyBldmVyeSBgX25leHQvc3RhdGljYCBhbmQgYHB1YmxpYy9gIHJlcXVlc3Qgd291bGQgNDA0LiBcIiArXG4gICAgICAgICAgXCJEcm9wIHRoZSBgZGVzdGluYXRpb25LZXlQcmVmaXhgIG92ZXJyaWRlLCBvciBzZXQgaXQgdG8gdGhlIHNhbWUgdmFsdWUgYXMgYGJhc2VQYXRoYC4gXCIgK1xuICAgICAgICAgIFwiVG8gbmFtZXNwYWNlIGEgc2hhcmVkIGJ1Y2tldCwgdXNlIGBiYXNlUGF0aGAg4oCUIGl0IHByZWZpeGVzIHRoZSBrZXlzIGFuZCB0aGUgVVJMcyB0b2dldGhlci5cIixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGNvbnN0cnVjdCBvdmVycmlkZXMgKGlmIHByZXNlbnQpIG9uIHByb3BzIGZvciBhbnkgYE5leHRqc1R5cGVgXG4gICAqL1xuICBwcml2YXRlIGdldENvbnN0cnVjdE92ZXJyaWRlcyhuZXh0anNUeXBlOiBOZXh0anNUeXBlKSB7XG4gICAgY29uc3QgbmV4dGpzVHlwZVRvS2V5OiBSZWNvcmQ8TmV4dGpzVHlwZSwgc3RyaW5nPiA9IHtcbiAgICAgIFtOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTXTogXCJuZXh0anNHbG9iYWxDb250YWluZXJzXCIsXG4gICAgICBbTmV4dGpzVHlwZS5HTE9CQUxfRlVOQ1RJT05TXTogXCJuZXh0anNHbG9iYWxGdW5jdGlvbnNcIixcbiAgICAgIFtOZXh0anNUeXBlLlJFR0lPTkFMX0NPTlRBSU5FUlNdOiBcIm5leHRqc1JlZ2lvbmFsQ29udGFpbmVyc1wiLFxuICAgICAgW05leHRqc1R5cGUuUkVHSU9OQUxfRlVOQ1RJT05TXTogXCJuZXh0anNSZWdpb25hbEZ1bmN0aW9uc1wiLFxuICAgIH07XG4gICAgY29uc3Qga2V5ID0gbmV4dGpzVHlwZVRvS2V5W25leHRqc1R5cGVdO1xuICAgIGNvbnN0IG92ZXJyaWRlcyA9IHRoaXMuYmFzZVByb3BzLm92ZXJyaWRlcyBhc1xuICAgICAgUmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ7XG4gICAgaWYgKG92ZXJyaWRlcyAmJiBrZXkgaW4gb3ZlcnJpZGVzKSB7XG4gICAgICByZXR1cm4gb3ZlcnJpZGVzW2tleV0gYXMgTmV4dGpzRnVuY3Rpb25zQ29uc3RydWN0T3ZlcnJpZGVzO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNvbXB1dGUgYmFzZSBwcm9wcyBmb3IgYm90aCBMYW1iZGEgZnVuY3Rpb25zIGFuZCBjb250YWluZXJzXG4gICAqL1xuICBwcm90ZWN0ZWQgY29tcHV0ZUJhc2VQcm9wcygpOiBOZXh0anNDb21wdXRlQmFzZVByb3BzIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGVhbHRoQ2hlY2tQYXRoOiB0aGlzLmJhc2VQcm9wcy5oZWFsdGhDaGVja1BhdGgsXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5uZXh0anNDYWNoZS5jYWNoZUJ1Y2tldCxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLm5leHRqc0NhY2hlLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgYnVpbGRJZDogdGhpcy5uZXh0anNCdWlsZC5idWlsZElkLFxuICAgICAgYnVpbGREaXJlY3Rvcnk6IHRoaXMuYmFzZVByb3BzLmJ1aWxkRGlyZWN0b3J5LFxuICAgICAgbmV4dGpzVHlwZTogdGhpcy5uZXh0anNUeXBlLFxuICAgICAgcmVsYXRpdmVQYXRoVG9QYWNrYWdlOiB0aGlzLm5leHRqc0J1aWxkLnJlbGF0aXZlUGF0aFRvUGFja2FnZSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNCdWlsZCgpOiBOZXh0anNCdWlsZCB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNCdWlsZCh0aGlzLCBcIk5leHRqc0J1aWxkXCIsIHtcbiAgICAgIGJ1aWxkQ29tbWFuZDogdGhpcy5iYXNlUHJvcHMuYnVpbGRDb21tYW5kLFxuICAgICAgYnVpbGREaXJlY3Rvcnk6IHRoaXMuYmFzZVByb3BzLmJ1aWxkRGlyZWN0b3J5LFxuICAgICAgbmV4dGpzVHlwZTogdGhpcy5uZXh0anNUeXBlLFxuICAgICAgc2tpcEJ1aWxkOiB0aGlzLmJhc2VQcm9wcy5za2lwQnVpbGQsXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdE92ZXJyaWRlcz8ubmV4dGpzQnVpbGRQcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzQ2FjaGUoKTogTmV4dGpzQ2FjaGUge1xuICAgIHJldHVybiBuZXcgTmV4dGpzQ2FjaGUodGhpcywgXCJOZXh0anNDYWNoZVwiLCB7XG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5iYXNlUHJvcHMuY2FjaGVCdWNrZXQsXG4gICAgICBpbml0Q2FjaGVEaXI6IHRoaXMubmV4dGpzQnVpbGQuaW5pdENhY2hlRGlyLFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXM/Lm5leHRqc0NhY2hlLFxuICAgICAgcmV2YWxpZGF0aW9uVGFibGU6IHRoaXMuYmFzZVByb3BzLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc0NhY2hlUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc1N0YXRpY0Fzc2V0cygpOiBOZXh0anNTdGF0aWNBc3NldHMge1xuICAgIHJldHVybiBuZXcgTmV4dGpzU3RhdGljQXNzZXRzKHRoaXMsIFwiTmV4dGpzU3RhdGljQXNzZXRzXCIsIHtcbiAgICAgIGJ1Y2tldDogdGhpcy5iYXNlUHJvcHMuc3RhdGljQXNzZXRzQnVja2V0LFxuICAgICAgYnVpbGREaXJlY3Rvcnk6IHRoaXMuYmFzZVByb3BzLmJ1aWxkRGlyZWN0b3J5LFxuICAgICAgYnVpbGRJZDogdGhpcy5uZXh0anNCdWlsZC5idWlsZElkLFxuICAgICAgYmFzZVBhdGg6IHRoaXMucmVzb2x2ZWRCYXNlUGF0aCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzPy5uZXh0anNTdGF0aWNBc3NldHMsXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdE92ZXJyaWRlcz8ubmV4dGpzU3RhdGljQXNzZXRzUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2hhcmVkIGJ5IGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgIGFuZCBgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZU5leHRqc0Z1bmN0aW9ucyhcbiAgICBvdmVycmlkZXM/OiBOZXh0anNGdW5jdGlvbnNPdmVycmlkZXMsXG4gICk6IE5leHRqc0Z1bmN0aW9ucyB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNGdW5jdGlvbnModGhpcywgXCJOZXh0anNGdW5jdGlvbnNcIiwge1xuICAgICAgLi4udGhpcy5jb21wdXRlQmFzZVByb3BzKCksXG4gICAgICBvdmVycmlkZXM6IHtcbiAgICAgICAgLi4ub3ZlcnJpZGVzLFxuICAgICAgICBkb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHM6IHtcbiAgICAgICAgICAuLi5vdmVycmlkZXM/LmRvY2tlckltYWdlRnVuY3Rpb25Qcm9wcyxcbiAgICAgICAgICB2cGM6IHRoaXMuYmFzZVByb3BzLnZwYyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdE92ZXJyaWRlcz8ubmV4dGpzRnVuY3Rpb25zUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2hhcmVkIGJ5IGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgIGFuZCBgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNgLCB0aGUgb25seVxuICAgKiB0d28gYE5leHRqc1R5cGVgcyBmb3Igd2hpY2ggYE5leHRqc0J1aWxkYCBwcm9kdWNlcyBhbiBpbWFnZSBvcHRpbWl6YXRpb25cbiAgICogYXNzZXQuIE9ubHkgY2FsbGVkIHdoZW4gdGhlIGRlZGljYXRlZCBpbWFnZSBvcHRpbWl6YXRpb24gTGFtYmRhIGlzXG4gICAqIGVuYWJsZWQsIHdoaWNoIGlzIHdoYXQgbWFrZXMgdGhlIG1pc3NpbmctYXNzZXQgY2hlY2sgYmVsb3cgYW4gaW52YXJpYW50XG4gICAqIHZpb2xhdGlvbiByYXRoZXIgdGhhbiBhIHN1cHBvcnRlZCBjb25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZU5leHRqc0ltYWdlRnVuY3Rpb24oXG4gICAgb3ZlcnJpZGVzPzogTmV4dGpzSW1hZ2VGdW5jdGlvbk92ZXJyaWRlcyxcbiAgKTogTmV4dGpzSW1hZ2VGdW5jdGlvbiB7XG4gICAgaWYgKCF0aGlzLm5leHRqc0J1aWxkLmltYWdlT3B0aW1pemF0aW9uQXNzZXRQYXRoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNaXNzaW5nIE5leHRqc0J1aWxkLmltYWdlT3B0aW1pemF0aW9uQXNzZXRQYXRoIGZvciBOZXh0anNUeXBlLiR7dGhpcy5uZXh0anNUeXBlfWAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IE5leHRqc0ltYWdlRnVuY3Rpb24odGhpcywgXCJOZXh0anNJbWFnZUZ1bmN0aW9uXCIsIHtcbiAgICAgIG5leHRqc1R5cGU6IHRoaXMubmV4dGpzVHlwZSxcbiAgICAgIGltYWdlT3B0aW1pemF0aW9uQXNzZXRQYXRoOiB0aGlzLm5leHRqc0J1aWxkLmltYWdlT3B0aW1pemF0aW9uQXNzZXRQYXRoLFxuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBzdGF0aWNBc3NldHNLZXlQcmVmaXg6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmtleVByZWZpeCxcbiAgICAgIHZwYzogdGhpcy5iYXNlUHJvcHMudnBjLFxuICAgICAgb3ZlcnJpZGVzLFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc0ltYWdlRnVuY3Rpb25Qcm9wcyxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -2,13 +2,13 @@ import { Distribution } from "aws-cdk-lib/aws-cloudfront";
|
|
|
2
2
|
import { ICluster } from "aws-cdk-lib/aws-ecs";
|
|
3
3
|
import { IApplicationLoadBalancer } from "aws-cdk-lib/aws-elasticloadbalancingv2";
|
|
4
4
|
import { Construct } from "constructs";
|
|
5
|
+
import { NextjsBaseConstructOverrides, NextjsBaseOverrides, NextjsBaseConstruct, NextjsBaseProps } from "./nextjs-base-construct";
|
|
5
6
|
import { OptionalNextjsContainersProps } from "../generated-structs/OptionalNextjsContainersProps";
|
|
6
7
|
import { OptionalNextjsDistributionProps } from "../generated-structs/OptionalNextjsDistributionProps";
|
|
7
8
|
import { OptionalNextjsPostDeployProps } from "../generated-structs/OptionalNextjsPostDeployProps";
|
|
8
9
|
import { NextjsContainers, NextjsContainersOverrides } from "../nextjs-compute/nextjs-containers";
|
|
9
10
|
import { NextjsDistribution, NextjsDistributionOverrides } from "../nextjs-distribution";
|
|
10
11
|
import { NextjsPostDeploy, NextjsPostDeployOverrides } from "../nextjs-post-deploy";
|
|
11
|
-
import { NextjsBaseConstructOverrides, NextjsBaseOverrides, NextjsBaseConstruct, NextjsBaseProps } from "./nextjs-base-construct";
|
|
12
12
|
export interface NextjsGlobalContainersConstructOverrides extends NextjsBaseConstructOverrides {
|
|
13
13
|
readonly nextjsContainersProps?: OptionalNextjsContainersProps;
|
|
14
14
|
readonly nextjsDistributionProps?: OptionalNextjsDistributionProps;
|
|
@@ -58,6 +58,11 @@ export declare class NextjsGlobalContainers extends NextjsBaseConstruct {
|
|
|
58
58
|
nextjsContainers: NextjsContainers;
|
|
59
59
|
nextjsDistribution: NextjsDistribution;
|
|
60
60
|
nextjsPostDeploy: NextjsPostDeploy;
|
|
61
|
+
/**
|
|
62
|
+
* Public URL of the app, including `basePath` — the app only answers under
|
|
63
|
+
* that prefix, and it's derived from the app's own `basePath` when the prop is
|
|
64
|
+
* left unset, so it's there whether or not you asked for it.
|
|
65
|
+
*/
|
|
61
66
|
get url(): string;
|
|
62
67
|
private props;
|
|
63
68
|
constructor(scope: Construct, id: string, props: NextjsGlobalContainersProps);
|
|
@@ -6,10 +6,11 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
|
6
6
|
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
|
|
7
7
|
const aws_ssm_1 = require("aws-cdk-lib/aws-ssm");
|
|
8
8
|
const constants_1 = require("../constants");
|
|
9
|
+
const nextjs_base_construct_1 = require("./nextjs-base-construct");
|
|
9
10
|
const nextjs_containers_1 = require("../nextjs-compute/nextjs-containers");
|
|
10
11
|
const nextjs_distribution_1 = require("../nextjs-distribution");
|
|
11
12
|
const nextjs_post_deploy_1 = require("../nextjs-post-deploy");
|
|
12
|
-
const
|
|
13
|
+
const base_path_1 = require("../utils/base-path");
|
|
13
14
|
/**
|
|
14
15
|
* Deploy Next.js globally distributed with containers. Uses [CloudFront
|
|
15
16
|
* Distribution](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html)
|
|
@@ -17,12 +18,17 @@ const nextjs_base_construct_1 = require("./nextjs-base-construct");
|
|
|
17
18
|
* for containers.
|
|
18
19
|
*/
|
|
19
20
|
class NextjsGlobalContainers extends nextjs_base_construct_1.NextjsBaseConstruct {
|
|
20
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalContainers", version: "0.
|
|
21
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalContainers", version: "0.6.0" };
|
|
21
22
|
nextjsContainers;
|
|
22
23
|
nextjsDistribution;
|
|
23
24
|
nextjsPostDeploy;
|
|
25
|
+
/**
|
|
26
|
+
* Public URL of the app, including `basePath` — the app only answers under
|
|
27
|
+
* that prefix, and it's derived from the app's own `basePath` when the prop is
|
|
28
|
+
* left unset, so it's there whether or not you asked for it.
|
|
29
|
+
*/
|
|
24
30
|
get url() {
|
|
25
|
-
return `https://${this.nextjsDistribution.distribution.domainName}
|
|
31
|
+
return (0, base_path_1.joinPath)(`https://${this.nextjsDistribution.distribution.domainName}`, this.resolvedBasePath);
|
|
26
32
|
}
|
|
27
33
|
props;
|
|
28
34
|
constructor(scope, id, props) {
|
|
@@ -104,7 +110,7 @@ class NextjsGlobalContainers extends nextjs_base_construct_1.NextjsBaseConstruct
|
|
|
104
110
|
createNextjsDistribution() {
|
|
105
111
|
return new nextjs_distribution_1.NextjsDistribution(this, "NextjsDistribution", {
|
|
106
112
|
assetsBucket: this.nextjsStaticAssets.bucket,
|
|
107
|
-
basePath: this.
|
|
113
|
+
basePath: this.resolvedBasePath,
|
|
108
114
|
certificate: this.nextjsContainers.albFargateService.certificate,
|
|
109
115
|
distribution: this.props.distribution,
|
|
110
116
|
loadBalancer: this.nextjsContainers.albFargateService.loadBalancer,
|
|
@@ -127,4 +133,4 @@ class NextjsGlobalContainers extends nextjs_base_construct_1.NextjsBaseConstruct
|
|
|
127
133
|
}
|
|
128
134
|
}
|
|
129
135
|
exports.NextjsGlobalContainers = NextjsGlobalContainers;
|
|
130
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWdsb2JhbC1jb250YWluZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jvb3QtY29uc3RydWN0cy9uZXh0anMtZ2xvYmFsLWNvbnRhaW5lcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZDQUFvQztBQUlwQyxpREFBc0Q7QUFDdEQsaURBQXNEO0FBRXRELDRDQUEwQztBQUkxQywyRUFHNkM7QUFDN0MsZ0VBR2dDO0FBQ2hDLDhEQUcrQjtBQUMvQixtRUFLaUM7QUE0Q2pDOzs7OztHQUtHO0FBQ0gsTUFBYSxzQkFBdUIsU0FBUSwyQ0FBbUI7O0lBQzdELGdCQUFnQixDQUFtQjtJQUNuQyxrQkFBa0IsQ0FBcUI7SUFDdkMsZ0JBQWdCLENBQW1CO0lBQ25DLElBQUksR0FBRztRQUNMLE9BQU8sV0FBVyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQ3RFLENBQUM7SUFFTyxLQUFLLENBQThCO0lBRTNDLFlBQ0UsS0FBZ0IsRUFDaEIsRUFBVSxFQUNWLEtBQWtDO1FBRWxDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssRUFBRSxzQkFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDdEQsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1FBQ3RELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUMxRCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7O09BYUc7SUFDSywwQkFBMEI7UUFDaEMsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFF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QjtZQUNuRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQjtZQUNuRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHNCQUFzQixFQUFFLHVCQUF1QjtTQUN6RSxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sc0JBQXNCO1FBQzVCLE9BQU8sSUFBSSxxQ0FBZ0IsQ0FBQyxJQUFJLEVBQUUsa0JBQWtCLEVBQUU7WUFDcEQsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTztZQUNqQyxZQUFZLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVk7WUFDbEQsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVztZQUN6QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQjtZQUNyRCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUNsRCxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCO1lBQ2pELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLEVBQUUscUJBQXFCO1NBQ3ZFLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBL0hILHdEQWdJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN0YWNrIH0gZnJvbSBcImF3cy1jZGstbGliXCI7XG5pbXBvcnQgeyBEaXN0cmlidXRpb24gfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWNsb3VkZnJvbnRcIjtcbmltcG9ydCB7IElDbHVzdGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lY3NcIjtcbmltcG9ydCB7IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2MlwiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzQ29udGFpbmVyc1Byb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzQ29udGFpbmVyc1Byb3BzXCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc0Rpc3RyaWJ1dGlvblByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzXCI7XG5pbXBvcnQge1xuICBOZXh0anNDb250YWluZXJzLFxuICBOZXh0anNDb250YWluZXJzT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLWNvbXB1dGUvbmV4dGpzLWNvbnRhaW5lcnNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Rpc3RyaWJ1dGlvbixcbiAgTmV4dGpzRGlzdHJpYnV0aW9uT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLWRpc3RyaWJ1dGlvblwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzUG9zdERlcGxveSxcbiAgTmV4dGpzUG9zdERlcGxveU92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1wb3N0LWRlcGxveVwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdE92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZU92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdCxcbiAgTmV4dGpzQmFzZVByb3BzLFxufSBmcm9tIFwiLi9uZXh0anMtYmFzZS1jb25zdHJ1Y3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNHbG9iYWxDb250YWluZXJzQ29uc3RydWN0T3ZlcnJpZGVzIGV4dGVuZHMgTmV4dGpzQmFzZUNvbnN0cnVjdE92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc0NvbnRhaW5lcnNQcm9wcz86IE9wdGlvbmFsTmV4dGpzQ29udGFpbmVyc1Byb3BzO1xuICByZWFkb25seSBuZXh0anNEaXN0cmlidXRpb25Qcm9wcz86IE9wdGlvbmFsTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3lQcm9wcz86IE9wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzO1xufVxuXG4vKipcbiAqIE92ZXJyaWRlcyBmb3IgYE5leHRqc0dsb2JhbENvbnRhaW5lcnNgLiBPdmVycmlkZXMgYXJlIGxvd2VyIGxldmVsIHRoYW5cbiAqIHByb3BzIGFuZCBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIENESyBDb25zdHJ1Y3RzIGdpdmluZyB5b3UgbW9yZSBjb250cm9sLiBJdCdzXG4gKiByZWNvbW1lbmRlZCB0byB1c2UgY2F1dGlvbiBhbmQgcmV2aWV3IHNvdXJjZSBjb2RlIHNvIHlvdSBrbm93IGhvdyB0aGV5J3JlIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzR2xvYmFsQ29udGFpbmVyc092ZXJyaWRlcyBleHRlbmRzIE5leHRqc0Jhc2VPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNHbG9iYWxDb250YWluZXJzPzogTmV4dGpzR2xvYmFsQ29udGFpbmVyc0NvbnN0cnVjdE92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzQ29udGFpbmVycz86IE5leHRqc0NvbnRhaW5lcnNPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc0Rpc3RyaWJ1dGlvbj86IE5leHRqc0Rpc3RyaWJ1dGlvbk92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzUG9zdERlcGxveT86IE5leHRqc1Bvc3REZXBsb3lPdmVycmlkZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzR2xvYmFsQ29udGFpbmVyc1Byb3BzIGV4dGVuZHMgTmV4dGpzQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIEFwcGxpY2F0aW9uIExvYWQgQmFsYW5jZXIuIFdoZW4gcHJvdmlkZWQsIGl0IGlzIHBhc3NlZFxuICAgKiBkaXJlY3RseSB0byBgQXBwbGljYXRpb25Mb2FkQmFsYW5jZWRGYXJnYXRlU2VydmljZWAuIElmIHRoZSBBTEIgYWxyZWFkeVxuICAgKiBoYXMgYSBsaXN0ZW5lciBvbiBwb3J0IDgwLCBjYWxsIGByZW1vdmVBdXRvQ3JlYXRlZExpc3RlbmVyKClgIGFmdGVyXG4gICAqIGNvbnN0cnVjdGlvbiB0byBhdm9pZCBkZXBsb3ltZW50IGZhaWx1cmVzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWxiPzogSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyO1xuICAvKipcbiAgICogQnJpbmcgeW91ciBvd24gZGlzdHJpYnV0aW9uLiBDYW4gYmUgdXNlZCB3aXRoIGBiYXNlUGF0aGAgdG8gaG9zdCBtdWx0aXBsZVxuICAgKiBhcHBzIG9uIHRoZSBzYW1lIENsb3VkRnJvbnQgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uPzogRGlzdHJpYnV0aW9uO1xuICAvKipcbiAgICogQnJpbmcgeW91ciBvd24gRUNTIGNsdXN0ZXIuIFdoZW4gcHJvdmlkZWQsIGNkay1uZXh0anMgd2lsbCBza2lwIGNyZWF0aW5nXG4gICAqIGEgbmV3IGNsdXN0ZXIgYW5kIFZQQyBnYXRld2F5IGVuZHBvaW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGVjc0NsdXN0ZXI/OiBJQ2x1c3RlcjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHByb3BzIG9mIGFueSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNHbG9iYWxDb250YWluZXJzT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIERlcGxveSBOZXh0LmpzIGdsb2JhbGx5IGRpc3RyaWJ1dGVkIHdpdGggY29udGFpbmVycy4gVXNlcyBbQ2xvdWRGcm9udFxuICogRGlzdHJpYnV0aW9uXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uQ2xvdWRGcm9udC9sYXRlc3QvRGV2ZWxvcGVyR3VpZGUvZGlzdHJpYnV0aW9uLXdvcmtpbmctd2l0aC5odG1sKVxuICogYXMgQ29udGVudCBEZWxpdmVyeSBOZXR3b3JrIChDRE4pIGZvciBnbG9iYWwgZGlzdHJpYnV0aW9uIGFuZCBbQVdTIEZhcmdhdGVdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25FQ1MvbGF0ZXN0L2RldmVsb3Blcmd1aWRlL0FXU19GYXJnYXRlLmh0bWwpXG4gKiBmb3IgY29udGFpbmVycy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc0dsb2JhbENvbnRhaW5lcnMgZXh0ZW5kcyBOZXh0anNCYXNlQ29uc3RydWN0IHtcbiAgbmV4dGpzQ29udGFpbmVyczogTmV4dGpzQ29udGFpbmVycztcbiAgbmV4dGpzRGlzdHJpYnV0aW9uOiBOZXh0anNEaXN0cmlidXRpb247XG4gIG5leHRqc1Bvc3REZXBsb3k6IE5leHRqc1Bvc3REZXBsb3k7XG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYGh0dHBzOi8vJHt0aGlzLm5leHRqc0Rpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb24uZG9tYWluTmFtZX1gO1xuICB9XG5cbiAgcHJpdmF0ZSBwcm9wczogTmV4dGpzR2xvYmFsQ29udGFpbmVyc1Byb3BzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogTmV4dGpzR2xvYmFsQ29udGFpbmVyc1Byb3BzLFxuICApIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzLCBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICB0aGlzLm5leHRqc0NvbnRhaW5lcnMgPSB0aGlzLmNyZWF0ZU5leHRqc0NvbnRhaW5lcnMoKTtcbiAgICB0aGlzLm5leHRqc0Rpc3RyaWJ1dGlvbiA9IHRoaXMuY3JlYXRlTmV4dGpzRGlzdHJpYnV0aW9uKCk7XG4gICAgdGhpcy53aXJlQ2xvdWRGcm9udEludmFsaWRhdGlvbigpO1xuICAgIHRoaXMubmV4dGpzUG9zdERlcGxveSA9IHRoaXMuY3JlYXRlTmV4dGpzUG9zdERlcGxveSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyB0aGUgdGFzayByb2xlIHBlcm1pc3Npb24gdG8gaW52YWxpZGF0ZSB0aGUgZGlzdHJpYnV0aW9uIGFuZCBwYXNzZXNcbiAgICogYWxvbmcgYSB3YXkgdG8gbG9vayB1cCBpdHMgSUQsIHNvIG9uLWRlbWFuZCByZXZhbGlkYXRpb25cbiAgICogKHJldmFsaWRhdGVUYWcvcmV2YWxpZGF0ZVBhdGgpIGNhbiBldmljdCBzdGFsZSByZXNwb25zZXMgZnJvbSB0aGUgQ0ROXG4gICAqIGVkZ2UgY2FjaGUsIG5vdCBqdXN0IHRoZSBvcmlnaW4ncyBTMy9EeW5hbW9EQiBjYWNoZS5cbiAgICpcbiAgICogVGhlIGRpc3RyaWJ1dGlvbiBJRCBpcyBwdWJsaXNoZWQgdG8gYW4gU1NNIFBhcmFtZXRlciAod2hvc2UgKm5hbWUqIGlzXG4gICAqIHN0YXRpYyBhbmQgc2FmZSB0byBlbWJlZCBpbiB0aGUgdGFzaydzIGVudmlyb25tZW50KSByYXRoZXIgdGhhbiBwYXNzZWRcbiAgICogZGlyZWN0bHksIGFuZCB0aGUgSUFNIGdyYW50IGlzIHNjb3BlZCB0byBhbGwgZGlzdHJpYnV0aW9ucyBpbiB0aGlzXG4gICAqIGFjY291bnQvcmVnaW9uIHJhdGhlciB0aGFuIHRoaXMgc3BlY2lmaWMgb25lLiBTZWUgdGhlIGVxdWl2YWxlbnQgbWV0aG9kXG4gICAqIGluIGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgIGZvciB3aHk6IHRoZSBzYW1lIHBhdHRlcm4gaXMgdXNlZCBoZXJlIGZvclxuICAgKiBjb25zaXN0ZW5jeSwgZXZlbiB0aG91Z2ggY29udGFpbmVycycgZGlzdHJpYnV0aW9uIChBTEItb3JpZ2luLWJhc2VkKVxuICAgKiBkb2Vzbid0IGhpdCB0aGUgY2lyY3VsYXIgQ2xvdWRGb3JtYXRpb24gZGVwZW5kZW5jeSBmdW5jdGlvbnMnIGRvZXMuXG4gICAqL1xuICBwcml2YXRlIHdpcmVDbG91ZEZyb250SW52YWxpZGF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgeyB0YXNrRGVmaW5pdGlvbiB9ID0gdGhpcy5uZXh0anNDb250YWluZXJzLmFsYkZhcmdhdGVTZXJ2aWNlO1xuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbklkUGFyYW1ldGVyTmFtZSA9IGBjZGstbmV4dGpzLWRpc3RyaWJ1dGlvbi1pZC0ke3RoaXMubm9kZS5hZGRyfWA7XG5cbiAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHRoaXMsIFwiRGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJcIiwge1xuICAgICAgcGFyYW1ldGVyTmFtZTogZGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJOYW1lLFxuICAgICAgc3RyaW5nVmFsdWU6IHRoaXMubmV4dGpzRGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25JZCxcbiAgICB9KTtcblxuICAgIHRhc2tEZWZpbml0aW9uLmFkZFRvVGFza1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wic3NtOkdldFBhcmFtZXRlclwiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgICAgICAgIHNlcnZpY2U6IFwic3NtXCIsXG4gICAgICAgICAgICByZXNvdXJjZTogXCJwYXJhbWV0ZXJcIixcbiAgICAgICAgICAgIHJlc291cmNlTmFtZTogZGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJOYW1lLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcbiAgICB0YXNrRGVmaW5pdGlvbi5hZGRUb1Rhc2tSb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcImNsb3VkZnJvbnQ6Q3JlYXRlSW52YWxpZGF0aW9uXCJdLFxuICAgICAgICAvLyBTY29wZWQgdG8gYWxsIGRpc3RyaWJ1dGlvbnMgKG5vdCBqdXN0IHRoaXMgb25lKSBmb3IgY29uc2lzdGVuY3lcbiAgICAgICAgLy8gd2l0aCBOZXh0anNHbG9iYWxGdW5jdGlvbnMsIHdoaWNoIGNhbid0IHNjb3BlIHRoaXMgdG8gaXRzIHNwZWNpZmljXG4gICAgICAgIC8vIGRpc3RyaWJ1dGlvbiBkdWUgdG8gYSBjaXJjdWxhciBDbG91ZEZvcm1hdGlvbiBkZXBlbmRlbmN5IChzZWUgdGhlXG4gICAgICAgIC8vIGNsYXNzIGRvYyBjb21tZW50IGFib3ZlIGFuZCB0aGUgZXF1aXZhbGVudCBtZXRob2QgdGhlcmUpLiBIZW5jZVxuICAgICAgICAvLyB0aGUgU1NNIHBhcmFtZXRlciBpbmRpcmVjdGlvbiBhYm92ZSBmb3IgbG9va2luZyB1cCB0aGUgSUQgYXRcbiAgICAgICAgLy8gcnVudGltZSBpbnN0ZWFkIG9mIHN5bnRoIHRpbWUuXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIHN0YWNrLmZvcm1hdEFybih7XG4gICAgICAgICAgICBzZXJ2aWNlOiBcImNsb3VkZnJvbnRcIixcbiAgICAgICAgICAgIHJlZ2lvbjogXCJcIixcbiAgICAgICAgICAgIHJlc291cmNlOiBcImRpc3RyaWJ1dGlvblwiLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiBcIipcIixcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdGFza0RlZmluaXRpb24uZGVmYXVsdENvbnRhaW5lcj8uYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUVcIixcbiAgICAgIGRpc3RyaWJ1dGlvbklkUGFyYW1ldGVyTmFtZSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNDb250YWluZXJzKCk6IE5leHRqc0NvbnRhaW5lcnMge1xuICAgIC8vIENyZWF0ZSBjb250YWluZXJzIHdpdGggbG9jYWwgYnVpbGQgb3V0cHV0XG4gICAgcmV0dXJuIG5ldyBOZXh0anNDb250YWluZXJzKHRoaXMsIFwiTmV4dGpzQ29udGFpbmVyc1wiLCB7XG4gICAgICAuLi50aGlzLmNvbXB1dGVCYXNlUHJvcHMoKSxcbiAgICAgIGFsYjogdGhpcy5wcm9wcy5hbGIsXG4gICAgICBlY3NDbHVzdGVyOiB0aGlzLnByb3BzLmVjc0NsdXN0ZXIsXG4gICAgICByZWxhdGl2ZUVudHJ5cG9pbnRQYXRoOiB0aGlzLm5leHRqc0J1aWxkLnJlbGF0aXZlUGF0aFRvRW50cnlwb2ludCxcbiAgICAgIG92ZXJyaWRlczoge1xuICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzQ29udGFpbmVycyxcbiAgICAgICAgZWNzQ2x1c3RlclByb3BzOiB7XG4gICAgICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0NvbnRhaW5lcnM/LmVjc0NsdXN0ZXJQcm9wcyxcbiAgICAgICAgICB2cGM6IHRoaXMuYmFzZVByb3BzLnZwYyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzR2xvYmFsQ29udGFpbmVycz8ubmV4dGpzQ29udGFpbmVyc1Byb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNEaXN0cmlidXRpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNEaXN0cmlidXRpb24odGhpcywgXCJOZXh0anNEaXN0cmlidXRpb25cIiwge1xuICAgICAgYXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBiYXNlUGF0aDogdGhpcy5wcm9wcy5iYXNlUGF0aCxcbiAgICAgIGNlcnRpZmljYXRlOiB0aGlzLm5leHRqc0NvbnRhaW5lcnMuYWxiRmFyZ2F0ZVNlcnZpY2UuY2VydGlmaWNhdGUsXG4gICAgICBkaXN0cmlidXRpb246IHRoaXMucHJvcHMuZGlzdHJpYnV0aW9uLFxuICAgICAgbG9hZEJhbGFuY2VyOiB0aGlzLm5leHRqc0NvbnRhaW5lcnMuYWxiRmFyZ2F0ZVNlcnZpY2UubG9hZEJhbGFuY2VyLFxuICAgICAgbmV4dGpzVHlwZTogdGhpcy5uZXh0anNUeXBlLFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzRGlzdHJpYnV0aW9uLFxuICAgICAgcHVibGljRGlyRW50cmllczogdGhpcy5uZXh0anNCdWlsZC5wdWJsaWNEaXJFbnRyaWVzLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0dsb2JhbENvbnRhaW5lcnM/Lm5leHRqc0Rpc3RyaWJ1dGlvblByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNQb3N0RGVwbG95KCk6IE5leHRqc1Bvc3REZXBsb3kge1xuICAgIHJldHVybiBuZXcgTmV4dGpzUG9zdERlcGxveSh0aGlzLCBcIk5leHRqc1Bvc3REZXBsb3lcIiwge1xuICAgICAgYnVpbGRJZDogdGhpcy5uZXh0anNCdWlsZC5idWlsZElkLFxuICAgICAgZGlzdHJpYnV0aW9uOiB0aGlzLm5leHRqc0Rpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb24sXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5uZXh0anNDYWNoZS5jYWNoZUJ1Y2tldCxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLm5leHRqc0NhY2hlLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNQb3N0RGVwbG95LFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0dsb2JhbENvbnRhaW5lcnM/Lm5leHRqc1Bvc3REZXBsb3lQcm9wcyxcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
136
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWdsb2JhbC1jb250YWluZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jvb3QtY29uc3RydWN0cy9uZXh0anMtZ2xvYmFsLWNvbnRhaW5lcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDZDQUFvQztBQUlwQyxpREFBc0Q7QUFDdEQsaURBQXNEO0FBRXRELDRDQUEwQztBQUMxQyxtRUFLaUM7QUFJakMsMkVBRzZDO0FBQzdDLGdFQUdnQztBQUNoQyw4REFHK0I7QUFDL0Isa0RBQThDO0FBNEM5Qzs7Ozs7R0FLRztBQUNILE1BQWEsc0JBQXVCLFNBQVEsMkNBQW1COztJQUM3RCxnQkFBZ0IsQ0FBbUI7SUFDbkMsa0JBQWtCLENBQXFCO0lBQ3ZDLGdCQUFnQixDQUFtQjtJQUNuQzs7OztPQUlHO0lBQ0gsSUFBSSxHQUFHO1FBQ0wsT0FBTyxJQUFBLG9CQUFRLEVBQ2IsV0FBVyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLFVBQVUsRUFBRSxFQUM1RCxJQUFJLENBQUMsZ0JBQWdCLENBQ3RCLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUE4QjtJQUUzQyxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUFrQztRQUVsQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsc0JBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3RELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3hELENBQUM7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LENBQUMsVUFBVTtZQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsa0JBQWtCO1lBQ25ELGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCO1lBQ25ELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCO1NBQ3pFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsT0FBTyxJQUFJLHFDQUFnQixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNwRCxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQ2pDLFlBQVksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWTtZQUNsRCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXO1lBQ3pDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCO1lBQ3JELGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO1lBQ2xELFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0I7WUFDakQsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxxQkFBcUI7U0FDdkUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUF2SUgsd0RBd0lDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IERpc3RyaWJ1dGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgSUNsdXN0ZXIgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWVjc1wiO1xuaW1wb3J0IHsgSUFwcGxpY2F0aW9uTG9hZEJhbGFuY2VyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyXCI7XG5pbXBvcnQgeyBQb2xpY3lTdGF0ZW1lbnQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0IHsgU3RyaW5nUGFyYW1ldGVyIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc21cIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHtcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdE92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZU92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdCxcbiAgTmV4dGpzQmFzZVByb3BzLFxufSBmcm9tIFwiLi9uZXh0anMtYmFzZS1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzQ29udGFpbmVyc1Byb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzQ29udGFpbmVyc1Byb3BzXCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc0Rpc3RyaWJ1dGlvblByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzXCI7XG5pbXBvcnQge1xuICBOZXh0anNDb250YWluZXJzLFxuICBOZXh0anNDb250YWluZXJzT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLWNvbXB1dGUvbmV4dGpzLWNvbnRhaW5lcnNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Rpc3RyaWJ1dGlvbixcbiAgTmV4dGpzRGlzdHJpYnV0aW9uT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLWRpc3RyaWJ1dGlvblwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzUG9zdERlcGxveSxcbiAgTmV4dGpzUG9zdERlcGxveU92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1wb3N0LWRlcGxveVwiO1xuaW1wb3J0IHsgam9pblBhdGggfSBmcm9tIFwiLi4vdXRpbHMvYmFzZS1wYXRoXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzR2xvYmFsQ29udGFpbmVyc0NvbnN0cnVjdE92ZXJyaWRlcyBleHRlbmRzIE5leHRqc0Jhc2VDb25zdHJ1Y3RPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNDb250YWluZXJzUHJvcHM/OiBPcHRpb25hbE5leHRqc0NvbnRhaW5lcnNQcm9wcztcbiAgcmVhZG9ubHkgbmV4dGpzRGlzdHJpYnV0aW9uUHJvcHM/OiBPcHRpb25hbE5leHRqc0Rpc3RyaWJ1dGlvblByb3BzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95UHJvcHM/OiBPcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wcztcbn1cblxuLyoqXG4gKiBPdmVycmlkZXMgZm9yIGBOZXh0anNHbG9iYWxDb250YWluZXJzYC4gT3ZlcnJpZGVzIGFyZSBsb3dlciBsZXZlbCB0aGFuXG4gKiBwcm9wcyBhbmQgYXJlIHBhc3NlZCBkaXJlY3RseSB0byBDREsgQ29uc3RydWN0cyBnaXZpbmcgeW91IG1vcmUgY29udHJvbC4gSXQnc1xuICogcmVjb21tZW5kZWQgdG8gdXNlIGNhdXRpb24gYW5kIHJldmlldyBzb3VyY2UgY29kZSBzbyB5b3Uga25vdyBob3cgdGhleSdyZSB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0dsb2JhbENvbnRhaW5lcnNPdmVycmlkZXMgZXh0ZW5kcyBOZXh0anNCYXNlT3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgbmV4dGpzR2xvYmFsQ29udGFpbmVycz86IE5leHRqc0dsb2JhbENvbnRhaW5lcnNDb25zdHJ1Y3RPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc0NvbnRhaW5lcnM/OiBOZXh0anNDb250YWluZXJzT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNEaXN0cmlidXRpb24/OiBOZXh0anNEaXN0cmlidXRpb25PdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3k/OiBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0dsb2JhbENvbnRhaW5lcnNQcm9wcyBleHRlbmRzIE5leHRqc0Jhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyLiBXaGVuIHByb3ZpZGVkLCBpdCBpcyBwYXNzZWRcbiAgICogZGlyZWN0bHkgdG8gYEFwcGxpY2F0aW9uTG9hZEJhbGFuY2VkRmFyZ2F0ZVNlcnZpY2VgLiBJZiB0aGUgQUxCIGFscmVhZHlcbiAgICogaGFzIGEgbGlzdGVuZXIgb24gcG9ydCA4MCwgY2FsbCBgcmVtb3ZlQXV0b0NyZWF0ZWRMaXN0ZW5lcigpYCBhZnRlclxuICAgKiBjb25zdHJ1Y3Rpb24gdG8gYXZvaWQgZGVwbG95bWVudCBmYWlsdXJlcy5cbiAgICovXG4gIHJlYWRvbmx5IGFsYj86IElBcHBsaWNhdGlvbkxvYWRCYWxhbmNlcjtcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIGRpc3RyaWJ1dGlvbi4gQ2FuIGJlIHVzZWQgd2l0aCBgYmFzZVBhdGhgIHRvIGhvc3QgbXVsdGlwbGVcbiAgICogYXBwcyBvbiB0aGUgc2FtZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IERpc3RyaWJ1dGlvbjtcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIEVDUyBjbHVzdGVyLiBXaGVuIHByb3ZpZGVkLCBjZGstbmV4dGpzIHdpbGwgc2tpcCBjcmVhdGluZ1xuICAgKiBhIG5ldyBjbHVzdGVyIGFuZCBWUEMgZ2F0ZXdheSBlbmRwb2ludHMuXG4gICAqL1xuICByZWFkb25seSBlY3NDbHVzdGVyPzogSUNsdXN0ZXI7XG4gIC8qKlxuICAgKiBPdmVycmlkZSBwcm9wcyBvZiBhbnkgY29uc3RydWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogTmV4dGpzR2xvYmFsQ29udGFpbmVyc092ZXJyaWRlcztcbn1cblxuLyoqXG4gKiBEZXBsb3kgTmV4dC5qcyBnbG9iYWxseSBkaXN0cmlidXRlZCB3aXRoIGNvbnRhaW5lcnMuIFVzZXMgW0Nsb3VkRnJvbnRcbiAqIERpc3RyaWJ1dGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13b3JraW5nLXdpdGguaHRtbClcbiAqIGFzIENvbnRlbnQgRGVsaXZlcnkgTmV0d29yayAoQ0ROKSBmb3IgZ2xvYmFsIGRpc3RyaWJ1dGlvbiBhbmQgW0FXUyBGYXJnYXRlXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQW1hem9uRUNTL2xhdGVzdC9kZXZlbG9wZXJndWlkZS9BV1NfRmFyZ2F0ZS5odG1sKVxuICogZm9yIGNvbnRhaW5lcnMuXG4gKi9cbmV4cG9ydCBjbGFzcyBOZXh0anNHbG9iYWxDb250YWluZXJzIGV4dGVuZHMgTmV4dGpzQmFzZUNvbnN0cnVjdCB7XG4gIG5leHRqc0NvbnRhaW5lcnM6IE5leHRqc0NvbnRhaW5lcnM7XG4gIG5leHRqc0Rpc3RyaWJ1dGlvbjogTmV4dGpzRGlzdHJpYnV0aW9uO1xuICBuZXh0anNQb3N0RGVwbG95OiBOZXh0anNQb3N0RGVwbG95O1xuICAvKipcbiAgICogUHVibGljIFVSTCBvZiB0aGUgYXBwLCBpbmNsdWRpbmcgYGJhc2VQYXRoYCDigJQgdGhlIGFwcCBvbmx5IGFuc3dlcnMgdW5kZXJcbiAgICogdGhhdCBwcmVmaXgsIGFuZCBpdCdzIGRlcml2ZWQgZnJvbSB0aGUgYXBwJ3Mgb3duIGBiYXNlUGF0aGAgd2hlbiB0aGUgcHJvcCBpc1xuICAgKiBsZWZ0IHVuc2V0LCBzbyBpdCdzIHRoZXJlIHdoZXRoZXIgb3Igbm90IHlvdSBhc2tlZCBmb3IgaXQuXG4gICAqL1xuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGpvaW5QYXRoKFxuICAgICAgYGh0dHBzOi8vJHt0aGlzLm5leHRqc0Rpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb24uZG9tYWluTmFtZX1gLFxuICAgICAgdGhpcy5yZXNvbHZlZEJhc2VQYXRoLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNHbG9iYWxDb250YWluZXJzUHJvcHM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBOZXh0anNHbG9iYWxDb250YWluZXJzUHJvcHMsXG4gICkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMsIE5leHRqc1R5cGUuR0xPQkFMX0NPTlRBSU5FUlMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMubmV4dGpzQ29udGFpbmVycyA9IHRoaXMuY3JlYXRlTmV4dGpzQ29udGFpbmVycygpO1xuICAgIHRoaXMubmV4dGpzRGlzdHJpYnV0aW9uID0gdGhpcy5jcmVhdGVOZXh0anNEaXN0cmlidXRpb24oKTtcbiAgICB0aGlzLndpcmVDbG91ZEZyb250SW52YWxpZGF0aW9uKCk7XG4gICAgdGhpcy5uZXh0anNQb3N0RGVwbG95ID0gdGhpcy5jcmVhdGVOZXh0anNQb3N0RGVwbG95KCk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHRoZSB0YXNrIHJvbGUgcGVybWlzc2lvbiB0byBpbnZhbGlkYXRlIHRoZSBkaXN0cmlidXRpb24gYW5kIHBhc3Nlc1xuICAgKiBhbG9uZyBhIHdheSB0byBsb29rIHVwIGl0cyBJRCwgc28gb24tZGVtYW5kIHJldmFsaWRhdGlvblxuICAgKiAocmV2YWxpZGF0ZVRhZy9yZXZhbGlkYXRlUGF0aCkgY2FuIGV2aWN0IHN0YWxlIHJlc3BvbnNlcyBmcm9tIHRoZSBDRE5cbiAgICogZWRnZSBjYWNoZSwgbm90IGp1c3QgdGhlIG9yaWdpbidzIFMzL0R5bmFtb0RCIGNhY2hlLlxuICAgKlxuICAgKiBUaGUgZGlzdHJpYnV0aW9uIElEIGlzIHB1Ymxpc2hlZCB0byBhbiBTU00gUGFyYW1ldGVyICh3aG9zZSAqbmFtZSogaXNcbiAgICogc3RhdGljIGFuZCBzYWZlIHRvIGVtYmVkIGluIHRoZSB0YXNrJ3MgZW52aXJvbm1lbnQpIHJhdGhlciB0aGFuIHBhc3NlZFxuICAgKiBkaXJlY3RseSwgYW5kIHRoZSBJQU0gZ3JhbnQgaXMgc2NvcGVkIHRvIGFsbCBkaXN0cmlidXRpb25zIGluIHRoaXNcbiAgICogYWNjb3VudC9yZWdpb24gcmF0aGVyIHRoYW4gdGhpcyBzcGVjaWZpYyBvbmUuIFNlZSB0aGUgZXF1aXZhbGVudCBtZXRob2RcbiAgICogaW4gYE5leHRqc0dsb2JhbEZ1bmN0aW9uc2AgZm9yIHdoeTogdGhlIHNhbWUgcGF0dGVybiBpcyB1c2VkIGhlcmUgZm9yXG4gICAqIGNvbnNpc3RlbmN5LCBldmVuIHRob3VnaCBjb250YWluZXJzJyBkaXN0cmlidXRpb24gKEFMQi1vcmlnaW4tYmFzZWQpXG4gICAqIGRvZXNuJ3QgaGl0IHRoZSBjaXJjdWxhciBDbG91ZEZvcm1hdGlvbiBkZXBlbmRlbmN5IGZ1bmN0aW9ucycgZG9lcy5cbiAgICovXG4gIHByaXZhdGUgd2lyZUNsb3VkRnJvbnRJbnZhbGlkYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZih0aGlzKTtcbiAgICBjb25zdCB7IHRhc2tEZWZpbml0aW9uIH0gPSB0aGlzLm5leHRqc0NvbnRhaW5lcnMuYWxiRmFyZ2F0ZVNlcnZpY2U7XG4gICAgY29uc3QgZGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJOYW1lID0gYGNkay1uZXh0anMtZGlzdHJpYnV0aW9uLWlkLSR7dGhpcy5ub2RlLmFkZHJ9YDtcblxuICAgIG5ldyBTdHJpbmdQYXJhbWV0ZXIodGhpcywgXCJEaXN0cmlidXRpb25JZFBhcmFtZXRlclwiLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiBkaXN0cmlidXRpb25JZFBhcmFtZXRlck5hbWUsXG4gICAgICBzdHJpbmdWYWx1ZTogdGhpcy5uZXh0anNEaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbklkLFxuICAgIH0pO1xuXG4gICAgdGFza0RlZmluaXRpb24uYWRkVG9UYXNrUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJzc206R2V0UGFyYW1ldGVyXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgc2VydmljZTogXCJzc21cIixcbiAgICAgICAgICAgIHJlc291cmNlOiBcInBhcmFtZXRlclwiLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiBkaXN0cmlidXRpb25JZFBhcmFtZXRlck5hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHRhc2tEZWZpbml0aW9uLmFkZFRvVGFza1JvbGVQb2xpY3koXG4gICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1wiY2xvdWRmcm9udDpDcmVhdGVJbnZhbGlkYXRpb25cIl0sXG4gICAgICAgIC8vIFNjb3BlZCB0byBhbGwgZGlzdHJpYnV0aW9ucyAobm90IGp1c3QgdGhpcyBvbmUpIGZvciBjb25zaXN0ZW5jeVxuICAgICAgICAvLyB3aXRoIE5leHRqc0dsb2JhbEZ1bmN0aW9ucywgd2hpY2ggY2FuJ3Qgc2NvcGUgdGhpcyB0byBpdHMgc3BlY2lmaWNcbiAgICAgICAgLy8gZGlzdHJpYnV0aW9uIGR1ZSB0byBhIGNpcmN1bGFyIENsb3VkRm9ybWF0aW9uIGRlcGVuZGVuY3kgKHNlZSB0aGVcbiAgICAgICAgLy8gY2xhc3MgZG9jIGNvbW1lbnQgYWJvdmUgYW5kIHRoZSBlcXVpdmFsZW50IG1ldGhvZCB0aGVyZSkuIEhlbmNlXG4gICAgICAgIC8vIHRoZSBTU00gcGFyYW1ldGVyIGluZGlyZWN0aW9uIGFib3ZlIGZvciBsb29raW5nIHVwIHRoZSBJRCBhdFxuICAgICAgICAvLyBydW50aW1lIGluc3RlYWQgb2Ygc3ludGggdGltZS5cbiAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgICAgICAgIHNlcnZpY2U6IFwiY2xvdWRmcm9udFwiLFxuICAgICAgICAgICAgcmVnaW9uOiBcIlwiLFxuICAgICAgICAgICAgcmVzb3VyY2U6IFwiZGlzdHJpYnV0aW9uXCIsXG4gICAgICAgICAgICByZXNvdXJjZU5hbWU6IFwiKlwiLFxuICAgICAgICAgIH0pLFxuICAgICAgICBdLFxuICAgICAgfSksXG4gICAgKTtcbiAgICB0YXNrRGVmaW5pdGlvbi5kZWZhdWx0Q29udGFpbmVyPy5hZGRFbnZpcm9ubWVudChcbiAgICAgIFwiQ0RLX05FWFRKU19ESVNUUklCVVRJT05fSURfUEFSQU1fTkFNRVwiLFxuICAgICAgZGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJOYW1lLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0NvbnRhaW5lcnMoKTogTmV4dGpzQ29udGFpbmVycyB7XG4gICAgLy8gQ3JlYXRlIGNvbnRhaW5lcnMgd2l0aCBsb2NhbCBidWlsZCBvdXRwdXRcbiAgICByZXR1cm4gbmV3IE5leHRqc0NvbnRhaW5lcnModGhpcywgXCJOZXh0anNDb250YWluZXJzXCIsIHtcbiAgICAgIC4uLnRoaXMuY29tcHV0ZUJhc2VQcm9wcygpLFxuICAgICAgYWxiOiB0aGlzLnByb3BzLmFsYixcbiAgICAgIGVjc0NsdXN0ZXI6IHRoaXMucHJvcHMuZWNzQ2x1c3RlcixcbiAgICAgIHJlbGF0aXZlRW50cnlwb2ludFBhdGg6IHRoaXMubmV4dGpzQnVpbGQucmVsYXRpdmVQYXRoVG9FbnRyeXBvaW50LFxuICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNDb250YWluZXJzLFxuICAgICAgICBlY3NDbHVzdGVyUHJvcHM6IHtcbiAgICAgICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzQ29udGFpbmVycz8uZWNzQ2x1c3RlclByb3BzLFxuICAgICAgICAgIHZwYzogdGhpcy5iYXNlUHJvcHMudnBjLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNHbG9iYWxDb250YWluZXJzPy5uZXh0anNDb250YWluZXJzUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0Rpc3RyaWJ1dGlvbigpIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0Rpc3RyaWJ1dGlvbih0aGlzLCBcIk5leHRqc0Rpc3RyaWJ1dGlvblwiLCB7XG4gICAgICBhc3NldHNCdWNrZXQ6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmJ1Y2tldCxcbiAgICAgIGJhc2VQYXRoOiB0aGlzLnJlc29sdmVkQmFzZVBhdGgsXG4gICAgICBjZXJ0aWZpY2F0ZTogdGhpcy5uZXh0anNDb250YWluZXJzLmFsYkZhcmdhdGVTZXJ2aWNlLmNlcnRpZmljYXRlLFxuICAgICAgZGlzdHJpYnV0aW9uOiB0aGlzLnByb3BzLmRpc3RyaWJ1dGlvbixcbiAgICAgIGxvYWRCYWxhbmNlcjogdGhpcy5uZXh0anNDb250YWluZXJzLmFsYkZhcmdhdGVTZXJ2aWNlLmxvYWRCYWxhbmNlcixcbiAgICAgIG5leHRqc1R5cGU6IHRoaXMubmV4dGpzVHlwZSxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0Rpc3RyaWJ1dGlvbixcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IHRoaXMubmV4dGpzQnVpbGQucHVibGljRGlyRW50cmllcyxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNHbG9iYWxDb250YWluZXJzPy5uZXh0anNEaXN0cmlidXRpb25Qcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzUG9zdERlcGxveSgpOiBOZXh0anNQb3N0RGVwbG95IHtcbiAgICByZXR1cm4gbmV3IE5leHRqc1Bvc3REZXBsb3kodGhpcywgXCJOZXh0anNQb3N0RGVwbG95XCIsIHtcbiAgICAgIGJ1aWxkSWQ6IHRoaXMubmV4dGpzQnVpbGQuYnVpbGRJZCxcbiAgICAgIGRpc3RyaWJ1dGlvbjogdGhpcy5uZXh0anNEaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uLFxuICAgICAgY2FjaGVCdWNrZXQ6IHRoaXMubmV4dGpzQ2FjaGUuY2FjaGVCdWNrZXQsXG4gICAgICByZXZhbGlkYXRpb25UYWJsZTogdGhpcy5uZXh0anNDYWNoZS5yZXZhbGlkYXRpb25UYWJsZSxcbiAgICAgIHN0YXRpY0Fzc2V0c0J1Y2tldDogdGhpcy5uZXh0anNTdGF0aWNBc3NldHMuYnVja2V0LFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzUG9zdERlcGxveSxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNHbG9iYWxDb250YWluZXJzPy5uZXh0anNQb3N0RGVwbG95UHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { Distribution } from "aws-cdk-lib/aws-cloudfront";
|
|
2
2
|
import { Construct } from "constructs";
|
|
3
|
+
import { NextjsFunctionsConstructOverrides, NextjsBaseOverrides, NextjsBaseConstruct, NextjsBaseProps } from "./nextjs-base-construct";
|
|
3
4
|
import { OptionalNextjsDistributionProps } from "../generated-structs/OptionalNextjsDistributionProps";
|
|
4
5
|
import { OptionalNextjsPostDeployProps } from "../generated-structs/OptionalNextjsPostDeployProps";
|
|
5
|
-
import { NextjsFunctions, NextjsFunctionsOverrides
|
|
6
|
+
import { NextjsFunctions, NextjsFunctionsOverrides } from "../nextjs-compute/nextjs-functions";
|
|
7
|
+
import { NextjsImageFunction, NextjsImageFunctionOverrides } from "../nextjs-compute/nextjs-image-function";
|
|
6
8
|
import { NextjsDistribution, NextjsDistributionOverrides } from "../nextjs-distribution";
|
|
7
9
|
import { NextjsPostDeploy, NextjsPostDeployOverrides } from "../nextjs-post-deploy";
|
|
8
|
-
|
|
9
|
-
export interface NextjsGlobalFunctionsConstructOverrides extends NextjsBaseConstructOverrides {
|
|
10
|
-
readonly nextjsFunctionsProps?: NextjsFunctionsProps;
|
|
10
|
+
export interface NextjsGlobalFunctionsConstructOverrides extends NextjsFunctionsConstructOverrides {
|
|
11
11
|
readonly nextjsDistributionProps?: OptionalNextjsDistributionProps;
|
|
12
12
|
readonly nextjsPostDeployProps?: OptionalNextjsPostDeployProps;
|
|
13
13
|
}
|
|
@@ -19,6 +19,7 @@ export interface NextjsGlobalFunctionsConstructOverrides extends NextjsBaseConst
|
|
|
19
19
|
export interface NextjsGlobalFunctionsOverrides extends NextjsBaseOverrides {
|
|
20
20
|
readonly nextjsGlobalFunctions?: NextjsGlobalFunctionsConstructOverrides;
|
|
21
21
|
readonly nextjsFunctions?: NextjsFunctionsOverrides;
|
|
22
|
+
readonly nextjsImageFunction?: NextjsImageFunctionOverrides;
|
|
22
23
|
readonly nextjsDistribution?: NextjsDistributionOverrides;
|
|
23
24
|
readonly nextjsPostDeploy?: NextjsPostDeployOverrides;
|
|
24
25
|
}
|
|
@@ -41,8 +42,19 @@ export interface NextjsGlobalFunctionsProps extends NextjsBaseProps {
|
|
|
41
42
|
*/
|
|
42
43
|
export declare class NextjsGlobalFunctions extends NextjsBaseConstruct {
|
|
43
44
|
nextjsFunctions: NextjsFunctions;
|
|
45
|
+
/**
|
|
46
|
+
* Only created when the (experimental, unsupported) dedicated image
|
|
47
|
+
* optimization Lambda is enabled. `_next/image` is otherwise served by
|
|
48
|
+
* {@link nextjsFunctions}.
|
|
49
|
+
*/
|
|
50
|
+
nextjsImageFunction?: NextjsImageFunction;
|
|
44
51
|
nextjsDistribution: NextjsDistribution;
|
|
45
52
|
nextjsPostDeploy: NextjsPostDeploy;
|
|
53
|
+
/**
|
|
54
|
+
* Public URL of the app, including `basePath` — the app only answers under
|
|
55
|
+
* that prefix, and it's derived from the app's own `basePath` when the prop is
|
|
56
|
+
* left unset, so it's there whether or not you asked for it.
|
|
57
|
+
*/
|
|
46
58
|
get url(): string;
|
|
47
59
|
private props;
|
|
48
60
|
constructor(scope: Construct, id: string, props: NextjsGlobalFunctionsProps);
|
|
@@ -62,7 +74,6 @@ export declare class NextjsGlobalFunctions extends NextjsBaseConstruct {
|
|
|
62
74
|
* specific (not-yet-known-at-synth-time) distribution.
|
|
63
75
|
*/
|
|
64
76
|
private wireCloudFrontInvalidation;
|
|
65
|
-
private createNextjsFunctions;
|
|
66
77
|
private createNextjsDistribution;
|
|
67
78
|
private createNextjsPostDeploy;
|
|
68
79
|
}
|