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
|
@@ -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
|
|
9
|
+
const nextjs_base_construct_1 = require("./nextjs-base-construct");
|
|
10
10
|
const nextjs_distribution_1 = require("../nextjs-distribution");
|
|
11
11
|
const nextjs_post_deploy_1 = require("../nextjs-post-deploy");
|
|
12
|
-
const
|
|
12
|
+
const base_path_1 = require("../utils/base-path");
|
|
13
|
+
const experimental_flags_1 = require("../utils/experimental-flags");
|
|
13
14
|
/**
|
|
14
15
|
* Deploy Next.js globally distributed with functions. Uses [CloudFront
|
|
15
16
|
* Distribution](https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/distribution-working-with.html)
|
|
@@ -17,18 +18,32 @@ const nextjs_base_construct_1 = require("./nextjs-base-construct");
|
|
|
17
18
|
* for functions.
|
|
18
19
|
*/
|
|
19
20
|
class NextjsGlobalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct {
|
|
20
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalFunctions", version: "0.
|
|
21
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsGlobalFunctions", version: "0.6.0" };
|
|
21
22
|
nextjsFunctions;
|
|
23
|
+
/**
|
|
24
|
+
* Only created when the (experimental, unsupported) dedicated image
|
|
25
|
+
* optimization Lambda is enabled. `_next/image` is otherwise served by
|
|
26
|
+
* {@link nextjsFunctions}.
|
|
27
|
+
*/
|
|
28
|
+
nextjsImageFunction;
|
|
22
29
|
nextjsDistribution;
|
|
23
30
|
nextjsPostDeploy;
|
|
31
|
+
/**
|
|
32
|
+
* Public URL of the app, including `basePath` — the app only answers under
|
|
33
|
+
* that prefix, and it's derived from the app's own `basePath` when the prop is
|
|
34
|
+
* left unset, so it's there whether or not you asked for it.
|
|
35
|
+
*/
|
|
24
36
|
get url() {
|
|
25
|
-
return `https://${this.nextjsDistribution.distribution.domainName}
|
|
37
|
+
return (0, base_path_1.joinPath)(`https://${this.nextjsDistribution.distribution.domainName}`, this.resolvedBasePath);
|
|
26
38
|
}
|
|
27
39
|
props;
|
|
28
40
|
constructor(scope, id, props) {
|
|
29
41
|
super(scope, id, props, constants_1.NextjsType.GLOBAL_FUNCTIONS);
|
|
30
42
|
this.props = props;
|
|
31
|
-
this.nextjsFunctions = this.createNextjsFunctions();
|
|
43
|
+
this.nextjsFunctions = this.createNextjsFunctions(this.props.overrides?.nextjsFunctions);
|
|
44
|
+
if ((0, experimental_flags_1.useDedicatedImageFunction)()) {
|
|
45
|
+
this.nextjsImageFunction = this.createNextjsImageFunction(this.props.overrides?.nextjsImageFunction);
|
|
46
|
+
}
|
|
32
47
|
this.nextjsDistribution = this.createNextjsDistribution();
|
|
33
48
|
this.wireCloudFrontInvalidation();
|
|
34
49
|
this.nextjsPostDeploy = this.createNextjsPostDeploy();
|
|
@@ -83,25 +98,12 @@ class NextjsGlobalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct
|
|
|
83
98
|
}));
|
|
84
99
|
this.nextjsFunctions.function.addEnvironment("CDK_NEXTJS_DISTRIBUTION_ID_PARAM_NAME", distributionIdParameterName);
|
|
85
100
|
}
|
|
86
|
-
createNextjsFunctions() {
|
|
87
|
-
// Create functions with local build output
|
|
88
|
-
return new nextjs_functions_1.NextjsFunctions(this, "NextjsFunctions", {
|
|
89
|
-
...this.computeBaseProps(),
|
|
90
|
-
overrides: {
|
|
91
|
-
...this.props.overrides?.nextjsFunctions,
|
|
92
|
-
dockerImageFunctionProps: {
|
|
93
|
-
...this.props.overrides?.nextjsFunctions?.dockerImageFunctionProps,
|
|
94
|
-
vpc: this.baseProps.vpc,
|
|
95
|
-
},
|
|
96
|
-
},
|
|
97
|
-
...this.props.overrides?.nextjsGlobalFunctions?.nextjsFunctionsProps,
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
101
|
createNextjsDistribution() {
|
|
101
102
|
return new nextjs_distribution_1.NextjsDistribution(this, "NextjsDistribution", {
|
|
102
103
|
assetsBucket: this.nextjsStaticAssets.bucket,
|
|
103
|
-
basePath: this.
|
|
104
|
+
basePath: this.resolvedBasePath,
|
|
104
105
|
functionUrl: this.nextjsFunctions.functionUrl,
|
|
106
|
+
imageFunctionUrl: this.nextjsImageFunction?.functionUrl,
|
|
105
107
|
nextjsType: this.nextjsType,
|
|
106
108
|
overrides: this.props.overrides?.nextjsDistribution,
|
|
107
109
|
publicDirEntries: this.nextjsBuild.publicDirEntries,
|
|
@@ -121,4 +123,4 @@ class NextjsGlobalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct
|
|
|
121
123
|
}
|
|
122
124
|
}
|
|
123
125
|
exports.NextjsGlobalFunctions = NextjsGlobalFunctions;
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWdsb2JhbC1mdW5jdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm9vdC1jb25zdHJ1Y3RzL25leHRqcy1nbG9iYWwtZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBb0M7QUFFcEMsaURBQXNEO0FBQ3RELGlEQUFzRDtBQUV0RCw0Q0FBMEM7QUFHMUMseUVBSTRDO0FBQzVDLGdFQUdnQztBQUNoQyw4REFHK0I7QUFDL0IsbUVBS2lDO0FBZ0NqQzs7Ozs7R0FLRztBQUNILE1BQWEscUJBQXNCLFNBQVEsMkNBQW1COztJQUM1RCxlQUFlLENBQWtCO0lBQ2pDLGtCQUFrQixDQUFxQjtJQUN2QyxnQkFBZ0IsQ0FBbUI7SUFDbkMsSUFBSSxHQUFHO1FBQ0wsT0FBTyxXQUFXLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEUsQ0FBQztJQUVPLEtBQUssQ0FBNkI7SUFFMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsc0JBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQywwQkFBMEIsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7Ozs7O09BY0c7SUFDSywwQkFBMEI7UUFDaEMsTUFBTSxLQUFLLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsTUFBTSwyQkFBMkIsR0FBRyw4QkFBOEIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUVuRixJQUFJLHlCQUFlLENBQUMsSUFBSSxFQUFFLHlCQUF5QixFQUFFO1lBQ25ELGFBQWEsRUFBRSwyQkFBMkI7WUFDMUMsV0FBVyxFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsY0FBYztTQUNqRSxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzNDLElBQUkseUJBQWUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQztZQUM3QixTQUFTLEVBQUU7Z0JBQ1QsS0FBSyxDQUFDLFNBQVMsQ0FBQztvQkFDZCxPQUFPLEVBQUUsS0FBSztvQkFDZCxRQUFRLEVBQUUsV0FBVztvQkFDckIsWUFBWSxFQUFFLDJCQUEyQjtpQkFDMUMsQ0FBQzthQUNIO1NBQ0YsQ0FBQyxDQUNILENBQUM7UUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxlQUFlLENBQzNDLElBQUkseUJBQWUsQ0FBQztZQUNsQixPQUFPLEVBQUUsQ0FBQywrQkFBK0IsQ0FBQztZQUMxQyxvRUFBb0U7WUFDcEUsb0VBQW9FO1lBQ3BFLGlFQUFpRTtZQUNqRSxpRUFBaUU7WUFDakUsZ0VBQWdFO1lBQ2hFLFNBQVMsRUFBRTtnQkFDVCxLQUFLLENBQUMsU0FBUyxDQUFDO29CQUNkLE9BQU8sRUFBRSxZQUFZO29CQUNyQixNQUFNLEVBQUUsRUFBRTtvQkFDVixRQUFRLEVBQUUsY0FBYztvQkFDeEIsWUFBWSxFQUFFLEdBQUc7aUJBQ2xCLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUMxQyx1Q0FBdUMsRUFDdkMsMkJBQTJCLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRU8scUJBQXFCO1FBQzNCLDJDQUEyQztRQUMzQyxPQUFPLElBQUksa0NBQWUsQ0FBQyxJQUFJLEVBQUUsaUJBQWlCLEVBQUU7WUFDbEQsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUIsU0FBUyxFQUFFO2dCQUNULEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZUFBZTtnQkFDeEMsd0JBQXdCLEVBQUU7b0JBQ3hCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZUFBZSxFQUFFLHdCQUF3QjtvQkFDbEUsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRztpQkFDeEI7YUFDRjtZQUNELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CO1NBQ3JFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyx3QkFBd0I7UUFDOUIsT0FBTyxJQUFJLHdDQUFrQixDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUN4RCxZQUFZLEVBQUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU07WUFDNUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUTtZQUNqQyxXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXO1lBQzdDLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsa0JBQWtCO1lBQ25ELGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCO1lBQ25ELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCO1NBQ3hFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsT0FBTyxJQUFJLHFDQUFnQixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNwRCxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQ2pDLFlBQVksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWTtZQUNsRCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXO1lBQ3pDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCO1lBQ3JELGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO1lBQ2xELFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0I7WUFDakQsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUI7U0FDdEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUFySEgsc0RBc0hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IERpc3RyaWJ1dGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNEaXN0cmlidXRpb25Qcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxOZXh0anNQb3N0RGVwbG95UHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNQb3N0RGVwbG95UHJvcHNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Z1bmN0aW9ucyxcbiAgTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzLFxuICBOZXh0anNGdW5jdGlvbnNQcm9wcyxcbn0gZnJvbSBcIi4uL25leHRqcy1jb21wdXRlL25leHRqcy1mdW5jdGlvbnNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Rpc3RyaWJ1dGlvbixcbiAgTmV4dGpzRGlzdHJpYnV0aW9uT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLWRpc3RyaWJ1dGlvblwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzUG9zdERlcGxveSxcbiAgTmV4dGpzUG9zdERlcGxveU92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1wb3N0LWRlcGxveVwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdE92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZU92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdCxcbiAgTmV4dGpzQmFzZVByb3BzLFxufSBmcm9tIFwiLi9uZXh0anMtYmFzZS1jb25zdHJ1Y3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNHbG9iYWxGdW5jdGlvbnNDb25zdHJ1Y3RPdmVycmlkZXMgZXh0ZW5kcyBOZXh0anNCYXNlQ29uc3RydWN0T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgbmV4dGpzRnVuY3Rpb25zUHJvcHM/OiBOZXh0anNGdW5jdGlvbnNQcm9wcztcbiAgcmVhZG9ubHkgbmV4dGpzRGlzdHJpYnV0aW9uUHJvcHM/OiBPcHRpb25hbE5leHRqc0Rpc3RyaWJ1dGlvblByb3BzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95UHJvcHM/OiBPcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wcztcbn1cblxuLyoqXG4gKiBPdmVycmlkZXMgZm9yIGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgLiBPdmVycmlkZXMgYXJlIGxvd2VyIGxldmVsIHRoYW5cbiAqIHByb3BzIGFuZCBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIENESyBDb25zdHJ1Y3RzIGdpdmluZyB5b3UgbW9yZSBjb250cm9sLiBJdCdzXG4gKiByZWNvbW1lbmRlZCB0byB1c2UgY2F1dGlvbiBhbmQgcmV2aWV3IHNvdXJjZSBjb2RlIHNvIHlvdSBrbm93IGhvdyB0aGV5J3JlIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzR2xvYmFsRnVuY3Rpb25zT3ZlcnJpZGVzIGV4dGVuZHMgTmV4dGpzQmFzZU92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc0dsb2JhbEZ1bmN0aW9ucz86IE5leHRqc0dsb2JhbEZ1bmN0aW9uc0NvbnN0cnVjdE92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzRnVuY3Rpb25zPzogTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNEaXN0cmlidXRpb24/OiBOZXh0anNEaXN0cmlidXRpb25PdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3k/OiBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc0dsb2JhbEZ1bmN0aW9uc1Byb3BzIGV4dGVuZHMgTmV4dGpzQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIEJyaW5nIHlvdXIgb3duIGRpc3RyaWJ1dGlvbi4gQ2FuIGJlIHVzZWQgd2l0aCBgYmFzZVBhdGhgIHRvIGhvc3QgbXVsdGlwbGVcbiAgICogYXBwcyBvbiB0aGUgc2FtZSBDbG91ZEZyb250IGRpc3RyaWJ1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbj86IERpc3RyaWJ1dGlvbjtcbiAgLyoqXG4gICAqIE92ZXJyaWRlIHByb3BzIG9mIGFueSBjb25zdHJ1Y3QuXG4gICAqL1xuICByZWFkb25seSBvdmVycmlkZXM/OiBOZXh0anNHbG9iYWxGdW5jdGlvbnNPdmVycmlkZXM7XG59XG5cbi8qKlxuICogRGVwbG95IE5leHQuanMgZ2xvYmFsbHkgZGlzdHJpYnV0ZWQgd2l0aCBmdW5jdGlvbnMuIFVzZXMgW0Nsb3VkRnJvbnRcbiAqIERpc3RyaWJ1dGlvbl0oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvbkNsb3VkRnJvbnQvbGF0ZXN0L0RldmVsb3Blckd1aWRlL2Rpc3RyaWJ1dGlvbi13b3JraW5nLXdpdGguaHRtbClcbiAqIGFzIENvbnRlbnQgRGVsaXZlcnkgTmV0d29yayAoQ0ROKSBmb3IgZ2xvYmFsIGRpc3RyaWJ1dGlvbiBhbmQgW0FXUyBMYW1iZGEgRnVuY3Rpb25zXShodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vbGFtYmRhL2xhdGVzdC9kZy93ZWxjb21lLmh0bWwpXG4gKiBmb3IgZnVuY3Rpb25zLlxuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzR2xvYmFsRnVuY3Rpb25zIGV4dGVuZHMgTmV4dGpzQmFzZUNvbnN0cnVjdCB7XG4gIG5leHRqc0Z1bmN0aW9uczogTmV4dGpzRnVuY3Rpb25zO1xuICBuZXh0anNEaXN0cmlidXRpb246IE5leHRqc0Rpc3RyaWJ1dGlvbjtcbiAgbmV4dGpzUG9zdERlcGxveTogTmV4dGpzUG9zdERlcGxveTtcbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBgaHR0cHM6Ly8ke3RoaXMubmV4dGpzRGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbi5kb21haW5OYW1lfWA7XG4gIH1cblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNHbG9iYWxGdW5jdGlvbnNQcm9wcztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV4dGpzR2xvYmFsRnVuY3Rpb25zUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzLCBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zID0gdGhpcy5jcmVhdGVOZXh0anNGdW5jdGlvbnMoKTtcbiAgICB0aGlzLm5leHRqc0Rpc3RyaWJ1dGlvbiA9IHRoaXMuY3JlYXRlTmV4dGpzRGlzdHJpYnV0aW9uKCk7XG4gICAgdGhpcy53aXJlQ2xvdWRGcm9udEludmFsaWRhdGlvbigpO1xuICAgIHRoaXMubmV4dGpzUG9zdERlcGxveSA9IHRoaXMuY3JlYXRlTmV4dGpzUG9zdERlcGxveSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50cyB0aGUgZnVuY3Rpb24gcGVybWlzc2lvbiB0byBpbnZhbGlkYXRlIHRoZSBkaXN0cmlidXRpb24gYW5kIHBhc3Nlc1xuICAgKiBhbG9uZyBhIHdheSB0byBsb29rIHVwIGl0cyBJRCwgc28gb24tZGVtYW5kIHJldmFsaWRhdGlvblxuICAgKiAocmV2YWxpZGF0ZVRhZy9yZXZhbGlkYXRlUGF0aCkgY2FuIGV2aWN0IHN0YWxlIHJlc3BvbnNlcyBmcm9tIHRoZSBDRE5cbiAgICogZWRnZSBjYWNoZSwgbm90IGp1c3QgdGhlIG9yaWdpbidzIFMzL0R5bmFtb0RCIGNhY2hlLlxuICAgKlxuICAgKiBUaGUgZGlzdHJpYnV0aW9uIElEIGNhbid0IGJlIHBhc3NlZCBhcyBhIHBsYWluIGVudiB2YXIgb3Igc2NvcGVkIElBTVxuICAgKiByZXNvdXJjZSBBUk46IHRoZSBkaXN0cmlidXRpb24ncyBvcmlnaW4gcmVmZXJlbmNlcyB0aGlzIGZ1bmN0aW9uJ3MgVVJMLFxuICAgKiBzbyBtYWtpbmcgdGhlIGZ1bmN0aW9uJ3Mgcm9sZS9lbnZpcm9ubWVudCByZWZlcmVuY2UgdGhlIGRpc3RyaWJ1dGlvbidzXG4gICAqIElEIGluIHJldHVybiB3b3VsZCBjcmVhdGUgYSBjaXJjdWxhciBDbG91ZEZvcm1hdGlvbiBkZXBlbmRlbmN5LiBJbnN0ZWFkLFxuICAgKiB0aGUgSUQgaXMgcHVibGlzaGVkIHRvIGFuIFNTTSBQYXJhbWV0ZXIgKHdob3NlICpuYW1lKiBpcyBzdGF0aWMgYW5kIHNhZmVcbiAgICogdG8gZW1iZWQpIHRoYXQgdGhlIGZ1bmN0aW9uIHJlYWRzIGF0IHJ1bnRpbWUsIGFuZCB0aGUgSUFNIGdyYW50IGlzXG4gICAqIHNjb3BlZCB0byBhbGwgZGlzdHJpYnV0aW9ucyBpbiB0aGlzIGFjY291bnQvcmVnaW9uIHJhdGhlciB0aGFuIHRoaXNcbiAgICogc3BlY2lmaWMgKG5vdC15ZXQta25vd24tYXQtc3ludGgtdGltZSkgZGlzdHJpYnV0aW9uLlxuICAgKi9cbiAgcHJpdmF0ZSB3aXJlQ2xvdWRGcm9udEludmFsaWRhdGlvbigpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFjayA9IFN0YWNrLm9mKHRoaXMpO1xuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbklkUGFyYW1ldGVyTmFtZSA9IGBjZGstbmV4dGpzLWRpc3RyaWJ1dGlvbi1pZC0ke3RoaXMubm9kZS5hZGRyfWA7XG5cbiAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHRoaXMsIFwiRGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJcIiwge1xuICAgICAgcGFyYW1ldGVyTmFtZTogZGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJOYW1lLFxuICAgICAgc3RyaW5nVmFsdWU6IHRoaXMubmV4dGpzRGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb25JZCxcbiAgICB9KTtcblxuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJzc206R2V0UGFyYW1ldGVyXCJdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgc2VydmljZTogXCJzc21cIixcbiAgICAgICAgICAgIHJlc291cmNlOiBcInBhcmFtZXRlclwiLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiBkaXN0cmlidXRpb25JZFBhcmFtZXRlck5hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBhY3Rpb25zOiBbXCJjbG91ZGZyb250OkNyZWF0ZUludmFsaWRhdGlvblwiXSxcbiAgICAgICAgLy8gQ2FuJ3Qgc2NvcGUgdGhpcyB0byB0aGUgc3BlY2lmaWMgZGlzdHJpYnV0aW9uOiB0aGUgZGlzdHJpYnV0aW9uJ3NcbiAgICAgICAgLy8gb3JpZ2luIGFscmVhZHkgZGVwZW5kcyBvbiB0aGlzIGZ1bmN0aW9uICh2aWEgaXRzIEZ1bmN0aW9uVXJsKSwgc29cbiAgICAgICAgLy8gcmVmZXJlbmNpbmcgdGhlIGRpc3RyaWJ1dGlvbidzIElEIGhlcmUgd291bGQgY3JlYXRlIGEgY2lyY3VsYXJcbiAgICAgICAgLy8gQ2xvdWRGb3JtYXRpb24gZGVwZW5kZW5jeS4gSGVuY2UgdGhlIFNTTSBwYXJhbWV0ZXIgaW5kaXJlY3Rpb25cbiAgICAgICAgLy8gYWJvdmUgZm9yIGxvb2tpbmcgdXAgdGhlIElEIGF0IHJ1bnRpbWUgaW5zdGVhZCBvZiBzeW50aCB0aW1lLlxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICBzdGFjay5mb3JtYXRBcm4oe1xuICAgICAgICAgICAgc2VydmljZTogXCJjbG91ZGZyb250XCIsXG4gICAgICAgICAgICByZWdpb246IFwiXCIsXG4gICAgICAgICAgICByZXNvdXJjZTogXCJkaXN0cmlidXRpb25cIixcbiAgICAgICAgICAgIHJlc291cmNlTmFtZTogXCIqXCIsXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICApO1xuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uLmFkZEVudmlyb25tZW50KFxuICAgICAgXCJDREtfTkVYVEpTX0RJU1RSSUJVVElPTl9JRF9QQVJBTV9OQU1FXCIsXG4gICAgICBkaXN0cmlidXRpb25JZFBhcmFtZXRlck5hbWUsXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzRnVuY3Rpb25zKCk6IE5leHRqc0Z1bmN0aW9ucyB7XG4gICAgLy8gQ3JlYXRlIGZ1bmN0aW9ucyB3aXRoIGxvY2FsIGJ1aWxkIG91dHB1dFxuICAgIHJldHVybiBuZXcgTmV4dGpzRnVuY3Rpb25zKHRoaXMsIFwiTmV4dGpzRnVuY3Rpb25zXCIsIHtcbiAgICAgIC4uLnRoaXMuY29tcHV0ZUJhc2VQcm9wcygpLFxuICAgICAgb3ZlcnJpZGVzOiB7XG4gICAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNGdW5jdGlvbnMsXG4gICAgICAgIGRvY2tlckltYWdlRnVuY3Rpb25Qcm9wczoge1xuICAgICAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNGdW5jdGlvbnM/LmRvY2tlckltYWdlRnVuY3Rpb25Qcm9wcyxcbiAgICAgICAgICB2cGM6IHRoaXMuYmFzZVByb3BzLnZwYyxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzR2xvYmFsRnVuY3Rpb25zPy5uZXh0anNGdW5jdGlvbnNQcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzRGlzdHJpYnV0aW9uKCkge1xuICAgIHJldHVybiBuZXcgTmV4dGpzRGlzdHJpYnV0aW9uKHRoaXMsIFwiTmV4dGpzRGlzdHJpYnV0aW9uXCIsIHtcbiAgICAgIGFzc2V0c0J1Y2tldDogdGhpcy5uZXh0anNTdGF0aWNBc3NldHMuYnVja2V0LFxuICAgICAgYmFzZVBhdGg6IHRoaXMuYmFzZVByb3BzLmJhc2VQYXRoLFxuICAgICAgZnVuY3Rpb25Vcmw6IHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uVXJsLFxuICAgICAgbmV4dGpzVHlwZTogdGhpcy5uZXh0anNUeXBlLFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzRGlzdHJpYnV0aW9uLFxuICAgICAgcHVibGljRGlyRW50cmllczogdGhpcy5uZXh0anNCdWlsZC5wdWJsaWNEaXJFbnRyaWVzLFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0dsb2JhbEZ1bmN0aW9ucz8ubmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc1Bvc3REZXBsb3koKTogTmV4dGpzUG9zdERlcGxveSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNQb3N0RGVwbG95KHRoaXMsIFwiTmV4dGpzUG9zdERlcGxveVwiLCB7XG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBkaXN0cmlidXRpb246IHRoaXMubmV4dGpzRGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbixcbiAgICAgIGNhY2hlQnVja2V0OiB0aGlzLm5leHRqc0NhY2hlLmNhY2hlQnVja2V0LFxuICAgICAgcmV2YWxpZGF0aW9uVGFibGU6IHRoaXMubmV4dGpzQ2FjaGUucmV2YWxpZGF0aW9uVGFibGUsXG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXQ6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmJ1Y2tldCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc1Bvc3REZXBsb3ksXG4gICAgICAuLi50aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzR2xvYmFsRnVuY3Rpb25zPy5uZXh0anNQb3N0RGVwbG95UHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWdsb2JhbC1mdW5jdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcm9vdC1jb25zdHJ1Y3RzL25leHRqcy1nbG9iYWwtZnVuY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSw2Q0FBb0M7QUFFcEMsaURBQXNEO0FBQ3RELGlEQUFzRDtBQUV0RCw0Q0FBMEM7QUFDMUMsbUVBS2lDO0FBV2pDLGdFQUdnQztBQUNoQyw4REFHK0I7QUFDL0Isa0RBQThDO0FBQzlDLG9FQUF3RTtBQWdDeEU7Ozs7O0dBS0c7QUFDSCxNQUFhLHFCQUFzQixTQUFRLDJDQUFtQjs7SUFDNUQsZUFBZSxDQUFrQjtJQUNqQzs7OztPQUlHO0lBQ0gsbUJBQW1CLENBQXVCO0lBQzFDLGtCQUFrQixDQUFxQjtJQUN2QyxnQkFBZ0IsQ0FBbUI7SUFDbkM7Ozs7T0FJRztJQUNILElBQUksR0FBRztRQUNMLE9BQU8sSUFBQSxvQkFBUSxFQUNiLFdBQVcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsRUFDNUQsSUFBSSxDQUFDLGdCQUFnQixDQUN0QixDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBNkI7SUFFMUMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsc0JBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUMvQyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxlQUFlLENBQ3RDLENBQUM7UUFDRixJQUFJLElBQUEsOENBQXlCLEdBQUUsRUFBRSxDQUFDO1lBQ2hDLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQ3ZELElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLG1CQUFtQixDQUMxQyxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQztRQUMxRCxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7OztPQWNHO0lBQ0ssMEJBQTBCO1FBQ2hDLE1BQU0sS0FBSyxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLE1BQU0sMkJBQTJCLEdBQUcsOEJBQThCLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFbkYsSUFBSSx5QkFBZSxDQUFDLElBQUksRUFBRSx5QkFBeUIsRUFBRTtZQUNuRCxhQUFhLEVBQUUsMkJBQTJCO1lBQzFDLFdBQVcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLGNBQWM7U0FDakUsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMzQyxJQUFJLHlCQUFlLENBQUM7WUFDbEIsT0FBTyxFQUFFLENBQUMsa0JBQWtCLENBQUM7WUFDN0IsU0FBUyxFQUFFO2dCQUNULEtBQUssQ0FBQyxTQUFTLENBQUM7b0JBQ2QsT0FBTyxFQUFFLEtBQUs7b0JBQ2QsUUFBUSxFQUFFLFdBQVc7b0JBQ3JCLFlBQVksRUFBRSwyQkFBMkI7aUJBQzFDLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FDSCxDQUFDO1FBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUMzQyxJQUFJLHlCQUFlLENBQUM7WUFDbEIsT0FBTyxFQUFFLENBQUMsK0JBQStCLENBQUM7WUFDMUMsb0VBQW9FO1lBQ3BFLG9FQUFvRTtZQUNwRSxpRUFBaUU7WUFDakUsaUVBQWlFO1lBQ2pFLGdFQUFnRTtZQUNoRSxTQUFTLEVBQUU7Z0JBQ1QsS0FBSyxDQUFDLFNBQVMsQ0FBQztvQkFDZCxPQUFPLEVBQUUsWUFBWTtvQkFDckIsTUFBTSxFQUFFLEVBQUU7b0JBQ1YsUUFBUSxFQUFFLGNBQWM7b0JBQ3hCLFlBQVksRUFBRSxHQUFHO2lCQUNsQixDQUFDO2FBQ0g7U0FDRixDQUFDLENBQ0gsQ0FBQztRQUNGLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FDMUMsdUNBQXVDLEVBQ3ZDLDJCQUEyQixDQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVPLHdCQUF3QjtRQUM5QixPQUFPLElBQUksd0NBQWtCLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQ3hELFlBQVksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUM1QyxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUMvQixXQUFXLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxXQUFXO1lBQzdDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxXQUFXO1lBQ3ZELFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsa0JBQWtCO1lBQ25ELGdCQUFnQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCO1lBQ25ELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUscUJBQXFCLEVBQUUsdUJBQXVCO1NBQ3hFLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsT0FBTyxJQUFJLHFDQUFnQixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUNwRCxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPO1lBQ2pDLFlBQVksRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWTtZQUNsRCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXO1lBQ3pDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCO1lBQ3JELGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO1lBQ2xELFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxnQkFBZ0I7WUFDakQsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxxQkFBcUIsRUFBRSxxQkFBcUI7U0FDdEUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7QUE1SEgsc0RBNkhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU3RhY2sgfSBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCB7IERpc3RyaWJ1dGlvbiB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtY2xvdWRmcm9udFwiO1xuaW1wb3J0IHsgUG9saWN5U3RhdGVtZW50IH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0IHsgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Z1bmN0aW9uc0NvbnN0cnVjdE92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZU92ZXJyaWRlcyxcbiAgTmV4dGpzQmFzZUNvbnN0cnVjdCxcbiAgTmV4dGpzQmFzZVByb3BzLFxufSBmcm9tIFwiLi9uZXh0anMtYmFzZS1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzRGlzdHJpYnV0aW9uUHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNEaXN0cmlidXRpb25Qcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxOZXh0anNQb3N0RGVwbG95UHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNQb3N0RGVwbG95UHJvcHNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Z1bmN0aW9ucyxcbiAgTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLWNvbXB1dGUvbmV4dGpzLWZ1bmN0aW9uc1wiO1xuaW1wb3J0IHtcbiAgTmV4dGpzSW1hZ2VGdW5jdGlvbixcbiAgTmV4dGpzSW1hZ2VGdW5jdGlvbk92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1jb21wdXRlL25leHRqcy1pbWFnZS1mdW5jdGlvblwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzRGlzdHJpYnV0aW9uLFxuICBOZXh0anNEaXN0cmlidXRpb25PdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtZGlzdHJpYnV0aW9uXCI7XG5pbXBvcnQge1xuICBOZXh0anNQb3N0RGVwbG95LFxuICBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLXBvc3QtZGVwbG95XCI7XG5pbXBvcnQgeyBqb2luUGF0aCB9IGZyb20gXCIuLi91dGlscy9iYXNlLXBhdGhcIjtcbmltcG9ydCB7IHVzZURlZGljYXRlZEltYWdlRnVuY3Rpb24gfSBmcm9tIFwiLi4vdXRpbHMvZXhwZXJpbWVudGFsLWZsYWdzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzR2xvYmFsRnVuY3Rpb25zQ29uc3RydWN0T3ZlcnJpZGVzIGV4dGVuZHMgTmV4dGpzRnVuY3Rpb25zQ29uc3RydWN0T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgbmV4dGpzRGlzdHJpYnV0aW9uUHJvcHM/OiBPcHRpb25hbE5leHRqc0Rpc3RyaWJ1dGlvblByb3BzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95UHJvcHM/OiBPcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wcztcbn1cblxuLyoqXG4gKiBPdmVycmlkZXMgZm9yIGBOZXh0anNHbG9iYWxGdW5jdGlvbnNgLiBPdmVycmlkZXMgYXJlIGxvd2VyIGxldmVsIHRoYW5cbiAqIHByb3BzIGFuZCBhcmUgcGFzc2VkIGRpcmVjdGx5IHRvIENESyBDb25zdHJ1Y3RzIGdpdmluZyB5b3UgbW9yZSBjb250cm9sLiBJdCdzXG4gKiByZWNvbW1lbmRlZCB0byB1c2UgY2F1dGlvbiBhbmQgcmV2aWV3IHNvdXJjZSBjb2RlIHNvIHlvdSBrbm93IGhvdyB0aGV5J3JlIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzR2xvYmFsRnVuY3Rpb25zT3ZlcnJpZGVzIGV4dGVuZHMgTmV4dGpzQmFzZU92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc0dsb2JhbEZ1bmN0aW9ucz86IE5leHRqc0dsb2JhbEZ1bmN0aW9uc0NvbnN0cnVjdE92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzRnVuY3Rpb25zPzogTmV4dGpzRnVuY3Rpb25zT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNJbWFnZUZ1bmN0aW9uPzogTmV4dGpzSW1hZ2VGdW5jdGlvbk92ZXJyaWRlcztcbiAgcmVhZG9ubHkgbmV4dGpzRGlzdHJpYnV0aW9uPzogTmV4dGpzRGlzdHJpYnV0aW9uT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95PzogTmV4dGpzUG9zdERlcGxveU92ZXJyaWRlcztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZXh0anNHbG9iYWxGdW5jdGlvbnNQcm9wcyBleHRlbmRzIE5leHRqc0Jhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBCcmluZyB5b3VyIG93biBkaXN0cmlidXRpb24uIENhbiBiZSB1c2VkIHdpdGggYGJhc2VQYXRoYCB0byBob3N0IG11bHRpcGxlXG4gICAqIGFwcHMgb24gdGhlIHNhbWUgQ2xvdWRGcm9udCBkaXN0cmlidXRpb24uXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb24/OiBEaXN0cmlidXRpb247XG4gIC8qKlxuICAgKiBPdmVycmlkZSBwcm9wcyBvZiBhbnkgY29uc3RydWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogTmV4dGpzR2xvYmFsRnVuY3Rpb25zT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIERlcGxveSBOZXh0LmpzIGdsb2JhbGx5IGRpc3RyaWJ1dGVkIHdpdGggZnVuY3Rpb25zLiBVc2VzIFtDbG91ZEZyb250XG4gKiBEaXN0cmlidXRpb25dKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25DbG91ZEZyb250L2xhdGVzdC9EZXZlbG9wZXJHdWlkZS9kaXN0cmlidXRpb24td29ya2luZy13aXRoLmh0bWwpXG4gKiBhcyBDb250ZW50IERlbGl2ZXJ5IE5ldHdvcmsgKENETikgZm9yIGdsb2JhbCBkaXN0cmlidXRpb24gYW5kIFtBV1MgTGFtYmRhIEZ1bmN0aW9uc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2xhbWJkYS9sYXRlc3QvZGcvd2VsY29tZS5odG1sKVxuICogZm9yIGZ1bmN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIE5leHRqc0dsb2JhbEZ1bmN0aW9ucyBleHRlbmRzIE5leHRqc0Jhc2VDb25zdHJ1Y3Qge1xuICBuZXh0anNGdW5jdGlvbnM6IE5leHRqc0Z1bmN0aW9ucztcbiAgLyoqXG4gICAqIE9ubHkgY3JlYXRlZCB3aGVuIHRoZSAoZXhwZXJpbWVudGFsLCB1bnN1cHBvcnRlZCkgZGVkaWNhdGVkIGltYWdlXG4gICAqIG9wdGltaXphdGlvbiBMYW1iZGEgaXMgZW5hYmxlZC4gYF9uZXh0L2ltYWdlYCBpcyBvdGhlcndpc2Ugc2VydmVkIGJ5XG4gICAqIHtAbGluayBuZXh0anNGdW5jdGlvbnN9LlxuICAgKi9cbiAgbmV4dGpzSW1hZ2VGdW5jdGlvbj86IE5leHRqc0ltYWdlRnVuY3Rpb247XG4gIG5leHRqc0Rpc3RyaWJ1dGlvbjogTmV4dGpzRGlzdHJpYnV0aW9uO1xuICBuZXh0anNQb3N0RGVwbG95OiBOZXh0anNQb3N0RGVwbG95O1xuICAvKipcbiAgICogUHVibGljIFVSTCBvZiB0aGUgYXBwLCBpbmNsdWRpbmcgYGJhc2VQYXRoYCDigJQgdGhlIGFwcCBvbmx5IGFuc3dlcnMgdW5kZXJcbiAgICogdGhhdCBwcmVmaXgsIGFuZCBpdCdzIGRlcml2ZWQgZnJvbSB0aGUgYXBwJ3Mgb3duIGBiYXNlUGF0aGAgd2hlbiB0aGUgcHJvcCBpc1xuICAgKiBsZWZ0IHVuc2V0LCBzbyBpdCdzIHRoZXJlIHdoZXRoZXIgb3Igbm90IHlvdSBhc2tlZCBmb3IgaXQuXG4gICAqL1xuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGpvaW5QYXRoKFxuICAgICAgYGh0dHBzOi8vJHt0aGlzLm5leHRqc0Rpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb24uZG9tYWluTmFtZX1gLFxuICAgICAgdGhpcy5yZXNvbHZlZEJhc2VQYXRoLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNHbG9iYWxGdW5jdGlvbnNQcm9wcztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogTmV4dGpzR2xvYmFsRnVuY3Rpb25zUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzLCBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zID0gdGhpcy5jcmVhdGVOZXh0anNGdW5jdGlvbnMoXG4gICAgICB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzRnVuY3Rpb25zLFxuICAgICk7XG4gICAgaWYgKHVzZURlZGljYXRlZEltYWdlRnVuY3Rpb24oKSkge1xuICAgICAgdGhpcy5uZXh0anNJbWFnZUZ1bmN0aW9uID0gdGhpcy5jcmVhdGVOZXh0anNJbWFnZUZ1bmN0aW9uKFxuICAgICAgICB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzSW1hZ2VGdW5jdGlvbixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMubmV4dGpzRGlzdHJpYnV0aW9uID0gdGhpcy5jcmVhdGVOZXh0anNEaXN0cmlidXRpb24oKTtcbiAgICB0aGlzLndpcmVDbG91ZEZyb250SW52YWxpZGF0aW9uKCk7XG4gICAgdGhpcy5uZXh0anNQb3N0RGVwbG95ID0gdGhpcy5jcmVhdGVOZXh0anNQb3N0RGVwbG95KCk7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnRzIHRoZSBmdW5jdGlvbiBwZXJtaXNzaW9uIHRvIGludmFsaWRhdGUgdGhlIGRpc3RyaWJ1dGlvbiBhbmQgcGFzc2VzXG4gICAqIGFsb25nIGEgd2F5IHRvIGxvb2sgdXAgaXRzIElELCBzbyBvbi1kZW1hbmQgcmV2YWxpZGF0aW9uXG4gICAqIChyZXZhbGlkYXRlVGFnL3JldmFsaWRhdGVQYXRoKSBjYW4gZXZpY3Qgc3RhbGUgcmVzcG9uc2VzIGZyb20gdGhlIENETlxuICAgKiBlZGdlIGNhY2hlLCBub3QganVzdCB0aGUgb3JpZ2luJ3MgUzMvRHluYW1vREIgY2FjaGUuXG4gICAqXG4gICAqIFRoZSBkaXN0cmlidXRpb24gSUQgY2FuJ3QgYmUgcGFzc2VkIGFzIGEgcGxhaW4gZW52IHZhciBvciBzY29wZWQgSUFNXG4gICAqIHJlc291cmNlIEFSTjogdGhlIGRpc3RyaWJ1dGlvbidzIG9yaWdpbiByZWZlcmVuY2VzIHRoaXMgZnVuY3Rpb24ncyBVUkwsXG4gICAqIHNvIG1ha2luZyB0aGUgZnVuY3Rpb24ncyByb2xlL2Vudmlyb25tZW50IHJlZmVyZW5jZSB0aGUgZGlzdHJpYnV0aW9uJ3NcbiAgICogSUQgaW4gcmV0dXJuIHdvdWxkIGNyZWF0ZSBhIGNpcmN1bGFyIENsb3VkRm9ybWF0aW9uIGRlcGVuZGVuY3kuIEluc3RlYWQsXG4gICAqIHRoZSBJRCBpcyBwdWJsaXNoZWQgdG8gYW4gU1NNIFBhcmFtZXRlciAod2hvc2UgKm5hbWUqIGlzIHN0YXRpYyBhbmQgc2FmZVxuICAgKiB0byBlbWJlZCkgdGhhdCB0aGUgZnVuY3Rpb24gcmVhZHMgYXQgcnVudGltZSwgYW5kIHRoZSBJQU0gZ3JhbnQgaXNcbiAgICogc2NvcGVkIHRvIGFsbCBkaXN0cmlidXRpb25zIGluIHRoaXMgYWNjb3VudC9yZWdpb24gcmF0aGVyIHRoYW4gdGhpc1xuICAgKiBzcGVjaWZpYyAobm90LXlldC1rbm93bi1hdC1zeW50aC10aW1lKSBkaXN0cmlidXRpb24uXG4gICAqL1xuICBwcml2YXRlIHdpcmVDbG91ZEZyb250SW52YWxpZGF0aW9uKCk6IHZvaWQge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgY29uc3QgZGlzdHJpYnV0aW9uSWRQYXJhbWV0ZXJOYW1lID0gYGNkay1uZXh0anMtZGlzdHJpYnV0aW9uLWlkLSR7dGhpcy5ub2RlLmFkZHJ9YDtcblxuICAgIG5ldyBTdHJpbmdQYXJhbWV0ZXIodGhpcywgXCJEaXN0cmlidXRpb25JZFBhcmFtZXRlclwiLCB7XG4gICAgICBwYXJhbWV0ZXJOYW1lOiBkaXN0cmlidXRpb25JZFBhcmFtZXRlck5hbWUsXG4gICAgICBzdHJpbmdWYWx1ZTogdGhpcy5uZXh0anNEaXN0cmlidXRpb24uZGlzdHJpYnV0aW9uLmRpc3RyaWJ1dGlvbklkLFxuICAgIH0pO1xuXG4gICAgdGhpcy5uZXh0anNGdW5jdGlvbnMuZnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcInNzbTpHZXRQYXJhbWV0ZXJcIl0sXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIHN0YWNrLmZvcm1hdEFybih7XG4gICAgICAgICAgICBzZXJ2aWNlOiBcInNzbVwiLFxuICAgICAgICAgICAgcmVzb3VyY2U6IFwicGFyYW1ldGVyXCIsXG4gICAgICAgICAgICByZXNvdXJjZU5hbWU6IGRpc3RyaWJ1dGlvbklkUGFyYW1ldGVyTmFtZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdGhpcy5uZXh0anNGdW5jdGlvbnMuZnVuY3Rpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIGFjdGlvbnM6IFtcImNsb3VkZnJvbnQ6Q3JlYXRlSW52YWxpZGF0aW9uXCJdLFxuICAgICAgICAvLyBDYW4ndCBzY29wZSB0aGlzIHRvIHRoZSBzcGVjaWZpYyBkaXN0cmlidXRpb246IHRoZSBkaXN0cmlidXRpb24nc1xuICAgICAgICAvLyBvcmlnaW4gYWxyZWFkeSBkZXBlbmRzIG9uIHRoaXMgZnVuY3Rpb24gKHZpYSBpdHMgRnVuY3Rpb25VcmwpLCBzb1xuICAgICAgICAvLyByZWZlcmVuY2luZyB0aGUgZGlzdHJpYnV0aW9uJ3MgSUQgaGVyZSB3b3VsZCBjcmVhdGUgYSBjaXJjdWxhclxuICAgICAgICAvLyBDbG91ZEZvcm1hdGlvbiBkZXBlbmRlbmN5LiBIZW5jZSB0aGUgU1NNIHBhcmFtZXRlciBpbmRpcmVjdGlvblxuICAgICAgICAvLyBhYm92ZSBmb3IgbG9va2luZyB1cCB0aGUgSUQgYXQgcnVudGltZSBpbnN0ZWFkIG9mIHN5bnRoIHRpbWUuXG4gICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgIHN0YWNrLmZvcm1hdEFybih7XG4gICAgICAgICAgICBzZXJ2aWNlOiBcImNsb3VkZnJvbnRcIixcbiAgICAgICAgICAgIHJlZ2lvbjogXCJcIixcbiAgICAgICAgICAgIHJlc291cmNlOiBcImRpc3RyaWJ1dGlvblwiLFxuICAgICAgICAgICAgcmVzb3VyY2VOYW1lOiBcIipcIixcbiAgICAgICAgICB9KSxcbiAgICAgICAgXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdGhpcy5uZXh0anNGdW5jdGlvbnMuZnVuY3Rpb24uYWRkRW52aXJvbm1lbnQoXG4gICAgICBcIkNES19ORVhUSlNfRElTVFJJQlVUSU9OX0lEX1BBUkFNX05BTUVcIixcbiAgICAgIGRpc3RyaWJ1dGlvbklkUGFyYW1ldGVyTmFtZSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNEaXN0cmlidXRpb24oKSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNEaXN0cmlidXRpb24odGhpcywgXCJOZXh0anNEaXN0cmlidXRpb25cIiwge1xuICAgICAgYXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBiYXNlUGF0aDogdGhpcy5yZXNvbHZlZEJhc2VQYXRoLFxuICAgICAgZnVuY3Rpb25Vcmw6IHRoaXMubmV4dGpzRnVuY3Rpb25zLmZ1bmN0aW9uVXJsLFxuICAgICAgaW1hZ2VGdW5jdGlvblVybDogdGhpcy5uZXh0anNJbWFnZUZ1bmN0aW9uPy5mdW5jdGlvblVybCxcbiAgICAgIG5leHRqc1R5cGU6IHRoaXMubmV4dGpzVHlwZSxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0Rpc3RyaWJ1dGlvbixcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IHRoaXMubmV4dGpzQnVpbGQucHVibGljRGlyRW50cmllcyxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNHbG9iYWxGdW5jdGlvbnM/Lm5leHRqc0Rpc3RyaWJ1dGlvblByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNQb3N0RGVwbG95KCk6IE5leHRqc1Bvc3REZXBsb3kge1xuICAgIHJldHVybiBuZXcgTmV4dGpzUG9zdERlcGxveSh0aGlzLCBcIk5leHRqc1Bvc3REZXBsb3lcIiwge1xuICAgICAgYnVpbGRJZDogdGhpcy5uZXh0anNCdWlsZC5idWlsZElkLFxuICAgICAgZGlzdHJpYnV0aW9uOiB0aGlzLm5leHRqc0Rpc3RyaWJ1dGlvbi5kaXN0cmlidXRpb24sXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5uZXh0anNDYWNoZS5jYWNoZUJ1Y2tldCxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLm5leHRqc0NhY2hlLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNQb3N0RGVwbG95LFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0dsb2JhbEZ1bmN0aW9ucz8ubmV4dGpzUG9zdERlcGxveVByb3BzLFxuICAgIH0pO1xuICB9XG59XG4iXX0=
|
|
@@ -13,7 +13,7 @@ const nextjs_post_deploy_1 = require("../nextjs-post-deploy");
|
|
|
13
13
|
* for containers.
|
|
14
14
|
*/
|
|
15
15
|
class NextjsRegionalContainers extends nextjs_base_construct_1.NextjsBaseConstruct {
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalContainers", version: "0.6.0" };
|
|
17
17
|
nextjsContainers;
|
|
18
18
|
nextjsPostDeploy;
|
|
19
19
|
get url() {
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { Construct } from "constructs";
|
|
2
2
|
import { NextjsApi, NextjsApiOverrides, NextjsApiProps } from "../nextjs-api";
|
|
3
|
-
import { NextjsBaseConstruct, NextjsBaseProps,
|
|
3
|
+
import { NextjsBaseConstruct, NextjsBaseProps, NextjsFunctionsConstructOverrides, NextjsBaseOverrides } from "./nextjs-base-construct";
|
|
4
4
|
import { OptionalNextjsPostDeployProps } from "../generated-structs/OptionalNextjsPostDeployProps";
|
|
5
|
-
import { NextjsFunctions, NextjsFunctionsOverrides
|
|
5
|
+
import { NextjsFunctions, NextjsFunctionsOverrides } from "../nextjs-compute/nextjs-functions";
|
|
6
|
+
import { NextjsImageFunction, NextjsImageFunctionOverrides } from "../nextjs-compute/nextjs-image-function";
|
|
6
7
|
import { NextjsPostDeploy, NextjsPostDeployOverrides } from "../nextjs-post-deploy";
|
|
7
|
-
export interface NextjsRegionalFunctionsConstructOverrides extends
|
|
8
|
-
readonly nextjsFunctionsProps?: NextjsFunctionsProps;
|
|
8
|
+
export interface NextjsRegionalFunctionsConstructOverrides extends NextjsFunctionsConstructOverrides {
|
|
9
9
|
readonly nextjsApiProps?: NextjsApiProps;
|
|
10
10
|
readonly nextjsPostDeployProps?: OptionalNextjsPostDeployProps;
|
|
11
11
|
}
|
|
@@ -17,6 +17,7 @@ export interface NextjsRegionalFunctionsConstructOverrides extends NextjsBaseCon
|
|
|
17
17
|
export interface NextjsRegionalFunctionsOverrides extends NextjsBaseOverrides {
|
|
18
18
|
readonly nextjsRegionalFunctions?: NextjsRegionalFunctionsConstructOverrides;
|
|
19
19
|
readonly nextjsFunctions?: NextjsFunctionsOverrides;
|
|
20
|
+
readonly nextjsImageFunction?: NextjsImageFunctionOverrides;
|
|
20
21
|
readonly nextjsApi?: NextjsApiOverrides;
|
|
21
22
|
readonly nextjsPostDeploy?: NextjsPostDeployOverrides;
|
|
22
23
|
}
|
|
@@ -32,12 +33,17 @@ export interface NextjsRegionalFunctionsProps extends NextjsBaseProps {
|
|
|
32
33
|
*/
|
|
33
34
|
export declare class NextjsRegionalFunctions extends NextjsBaseConstruct {
|
|
34
35
|
nextjsFunctions: NextjsFunctions;
|
|
36
|
+
/**
|
|
37
|
+
* Only created when the (experimental, unsupported) dedicated image
|
|
38
|
+
* optimization Lambda is enabled. `_next/image` is otherwise served by
|
|
39
|
+
* {@link nextjsFunctions}.
|
|
40
|
+
*/
|
|
41
|
+
nextjsImageFunction?: NextjsImageFunction;
|
|
35
42
|
nextjsApi: NextjsApi;
|
|
36
43
|
nextjsPostDeploy: NextjsPostDeploy;
|
|
37
44
|
get url(): string;
|
|
38
45
|
private props;
|
|
39
46
|
constructor(scope: Construct, id: string, props: NextjsRegionalFunctionsProps);
|
|
40
|
-
private createNextjsFunctions;
|
|
41
47
|
private createNextjsApi;
|
|
42
48
|
private createNextjsPostDeploy;
|
|
43
49
|
}
|
|
@@ -2,51 +2,47 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.NextjsRegionalFunctions = void 0;
|
|
4
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
|
-
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
6
5
|
const constants_1 = require("../constants");
|
|
7
6
|
const nextjs_api_1 = require("../nextjs-api");
|
|
8
7
|
const nextjs_base_construct_1 = require("./nextjs-base-construct");
|
|
9
|
-
const nextjs_functions_1 = require("../nextjs-compute/nextjs-functions");
|
|
10
8
|
const nextjs_post_deploy_1 = require("../nextjs-post-deploy");
|
|
9
|
+
const experimental_flags_1 = require("../utils/experimental-flags");
|
|
11
10
|
/**
|
|
12
11
|
* Deploy Next.js regionally with functions. Uses API Gateway REST API
|
|
13
12
|
* for routing requests and AWS Lambda Functions for server-side rendering.
|
|
14
13
|
*/
|
|
15
14
|
class NextjsRegionalFunctions extends nextjs_base_construct_1.NextjsBaseConstruct {
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.
|
|
15
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "cdk-nextjs.NextjsRegionalFunctions", version: "0.6.0" };
|
|
17
16
|
nextjsFunctions;
|
|
17
|
+
/**
|
|
18
|
+
* Only created when the (experimental, unsupported) dedicated image
|
|
19
|
+
* optimization Lambda is enabled. `_next/image` is otherwise served by
|
|
20
|
+
* {@link nextjsFunctions}.
|
|
21
|
+
*/
|
|
22
|
+
nextjsImageFunction;
|
|
18
23
|
nextjsApi;
|
|
19
24
|
nextjsPostDeploy;
|
|
20
25
|
get url() {
|
|
21
|
-
return
|
|
26
|
+
return this.nextjsApi.url;
|
|
22
27
|
}
|
|
23
28
|
props;
|
|
24
29
|
constructor(scope, id, props) {
|
|
25
30
|
super(scope, id, props, constants_1.NextjsType.REGIONAL_FUNCTIONS);
|
|
26
31
|
this.props = props;
|
|
27
|
-
this.nextjsFunctions = this.createNextjsFunctions();
|
|
32
|
+
this.nextjsFunctions = this.createNextjsFunctions(this.props.overrides?.nextjsFunctions);
|
|
33
|
+
if ((0, experimental_flags_1.useDedicatedImageFunction)()) {
|
|
34
|
+
this.nextjsImageFunction = this.createNextjsImageFunction(this.props.overrides?.nextjsImageFunction);
|
|
35
|
+
}
|
|
28
36
|
this.nextjsApi = this.createNextjsApi();
|
|
29
37
|
this.nextjsPostDeploy = this.createNextjsPostDeploy();
|
|
30
38
|
}
|
|
31
|
-
createNextjsFunctions() {
|
|
32
|
-
// Create functions with local build output
|
|
33
|
-
return new nextjs_functions_1.NextjsFunctions(this, "NextjsFunctions", {
|
|
34
|
-
...this.computeBaseProps(),
|
|
35
|
-
overrides: {
|
|
36
|
-
...this.props.overrides?.nextjsFunctions,
|
|
37
|
-
dockerImageFunctionProps: {
|
|
38
|
-
...this.props.overrides?.nextjsFunctions?.dockerImageFunctionProps,
|
|
39
|
-
vpc: this.baseProps.vpc,
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
...this.props.overrides?.nextjsRegionalFunctions?.nextjsFunctionsProps,
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
39
|
createNextjsApi() {
|
|
46
40
|
return new nextjs_api_1.NextjsApi(this, "NextjsApi", {
|
|
47
41
|
staticAssetsBucket: this.nextjsStaticAssets.bucket,
|
|
42
|
+
staticAssetsKeyPrefix: this.nextjsStaticAssets.keyPrefix,
|
|
48
43
|
serverFunction: this.nextjsFunctions.function,
|
|
49
|
-
|
|
44
|
+
imageFunction: this.nextjsImageFunction?.function,
|
|
45
|
+
basePath: this.resolvedBasePath,
|
|
50
46
|
overrides: this.props.overrides?.nextjsApi,
|
|
51
47
|
publicDirEntries: this.nextjsBuild.publicDirEntries,
|
|
52
48
|
...this.props.overrides?.nextjsRegionalFunctions?.nextjsApiProps,
|
|
@@ -64,4 +60,4 @@ class NextjsRegionalFunctions extends nextjs_base_construct_1.NextjsBaseConstruc
|
|
|
64
60
|
}
|
|
65
61
|
}
|
|
66
62
|
exports.NextjsRegionalFunctions = NextjsRegionalFunctions;
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLXJlZ2lvbmFsLWZ1bmN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9yb290LWNvbnN0cnVjdHMvbmV4dGpzLXJlZ2lvbmFsLWZ1bmN0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQ0EsNENBQTBDO0FBQzFDLDhDQUE4RTtBQUM5RSxtRUFLaUM7QUFVakMsOERBRytCO0FBQy9CLG9FQUF3RTtBQTJCeEU7OztHQUdHO0FBQ0gsTUFBYSx1QkFBd0IsU0FBUSwyQ0FBbUI7O0lBQzlELGVBQWUsQ0FBa0I7SUFDakM7Ozs7T0FJRztJQUNILG1CQUFtQixDQUF1QjtJQUMxQyxTQUFTLENBQVk7SUFDckIsZ0JBQWdCLENBQW1CO0lBQ25DLElBQUksR0FBRztRQUNMLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDNUIsQ0FBQztJQUVPLEtBQUssQ0FBK0I7SUFFNUMsWUFDRSxLQUFnQixFQUNoQixFQUFVLEVBQ1YsS0FBbUM7UUFFbkMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLHNCQUFVLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUVuQixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDL0MsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUN0QyxDQUFDO1FBQ0YsSUFBSSxJQUFBLDhDQUF5QixHQUFFLEVBQUUsQ0FBQztZQUNoQyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FDMUMsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN4QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUM7SUFDeEQsQ0FBQztJQUVPLGVBQWU7UUFDckIsT0FBTyxJQUFJLHNCQUFTLENBQUMsSUFBSSxFQUFFLFdBQVcsRUFBRTtZQUN0QyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUNsRCxxQkFBcUIsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUztZQUN4RCxjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRO1lBQzdDLGFBQWEsRUFBRSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsUUFBUTtZQUNqRCxRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsU0FBUztZQUMxQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQjtZQUNuRCxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLHVCQUF1QixFQUFFLGNBQWM7U0FDakUsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLHNCQUFzQjtRQUM1QixPQUFPLElBQUkscUNBQWdCLENBQUMsSUFBSSxFQUFFLGtCQUFrQixFQUFFO1lBQ3BELE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU87WUFDakMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVztZQUN6QyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQjtZQUNyRCxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTTtZQUNsRCxTQUFTLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCO1lBQ2pELEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCO1NBQ3hFLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBMURILDBEQTJEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBOZXh0anNUeXBlIH0gZnJvbSBcIi4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgTmV4dGpzQXBpLCBOZXh0anNBcGlPdmVycmlkZXMsIE5leHRqc0FwaVByb3BzIH0gZnJvbSBcIi4uL25leHRqcy1hcGlcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Jhc2VDb25zdHJ1Y3QsXG4gIE5leHRqc0Jhc2VQcm9wcyxcbiAgTmV4dGpzRnVuY3Rpb25zQ29uc3RydWN0T3ZlcnJpZGVzLFxuICBOZXh0anNCYXNlT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi9uZXh0anMtYmFzZS1jb25zdHJ1Y3RcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzXCI7XG5pbXBvcnQge1xuICBOZXh0anNGdW5jdGlvbnMsXG4gIE5leHRqc0Z1bmN0aW9uc092ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1jb21wdXRlL25leHRqcy1mdW5jdGlvbnNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0ltYWdlRnVuY3Rpb24sXG4gIE5leHRqc0ltYWdlRnVuY3Rpb25PdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtY29tcHV0ZS9uZXh0anMtaW1hZ2UtZnVuY3Rpb25cIjtcbmltcG9ydCB7XG4gIE5leHRqc1Bvc3REZXBsb3ksXG4gIE5leHRqc1Bvc3REZXBsb3lPdmVycmlkZXMsXG59IGZyb20gXCIuLi9uZXh0anMtcG9zdC1kZXBsb3lcIjtcbmltcG9ydCB7IHVzZURlZGljYXRlZEltYWdlRnVuY3Rpb24gfSBmcm9tIFwiLi4vdXRpbHMvZXhwZXJpbWVudGFsLWZsYWdzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNDb25zdHJ1Y3RPdmVycmlkZXMgZXh0ZW5kcyBOZXh0anNGdW5jdGlvbnNDb25zdHJ1Y3RPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNBcGlQcm9wcz86IE5leHRqc0FwaVByb3BzO1xuICByZWFkb25seSBuZXh0anNQb3N0RGVwbG95UHJvcHM/OiBPcHRpb25hbE5leHRqc1Bvc3REZXBsb3lQcm9wcztcbn1cblxuLyoqXG4gKiBPdmVycmlkZXMgZm9yIGBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc2AuIE92ZXJyaWRlcyBhcmUgbG93ZXIgbGV2ZWwgdGhhblxuICogcHJvcHMgYW5kIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gQ0RLIENvbnN0cnVjdHMgZ2l2aW5nIHlvdSBtb3JlIGNvbnRyb2wuIEl0J3NcbiAqIHJlY29tbWVuZGVkIHRvIHVzZSBjYXV0aW9uIGFuZCByZXZpZXcgc291cmNlIGNvZGUgc28geW91IGtub3cgaG93IHRoZXkncmUgdXNlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc092ZXJyaWRlcyBleHRlbmRzIE5leHRqc0Jhc2VPdmVycmlkZXMge1xuICByZWFkb25seSBuZXh0anNSZWdpb25hbEZ1bmN0aW9ucz86IE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zQ29uc3RydWN0T3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNGdW5jdGlvbnM/OiBOZXh0anNGdW5jdGlvbnNPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc0ltYWdlRnVuY3Rpb24/OiBOZXh0anNJbWFnZUZ1bmN0aW9uT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNBcGk/OiBOZXh0anNBcGlPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3k/OiBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zUHJvcHMgZXh0ZW5kcyBOZXh0anNCYXNlUHJvcHMge1xuICAvKipcbiAgICogT3ZlcnJpZGUgcHJvcHMgb2YgYW55IGNvbnN0cnVjdC5cbiAgICovXG4gIHJlYWRvbmx5IG92ZXJyaWRlcz86IE5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zT3ZlcnJpZGVzO1xufVxuXG4vKipcbiAqIERlcGxveSBOZXh0LmpzIHJlZ2lvbmFsbHkgd2l0aCBmdW5jdGlvbnMuIFVzZXMgQVBJIEdhdGV3YXkgUkVTVCBBUElcbiAqIGZvciByb3V0aW5nIHJlcXVlc3RzIGFuZCBBV1MgTGFtYmRhIEZ1bmN0aW9ucyBmb3Igc2VydmVyLXNpZGUgcmVuZGVyaW5nLlxuICovXG5leHBvcnQgY2xhc3MgTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnMgZXh0ZW5kcyBOZXh0anNCYXNlQ29uc3RydWN0IHtcbiAgbmV4dGpzRnVuY3Rpb25zOiBOZXh0anNGdW5jdGlvbnM7XG4gIC8qKlxuICAgKiBPbmx5IGNyZWF0ZWQgd2hlbiB0aGUgKGV4cGVyaW1lbnRhbCwgdW5zdXBwb3J0ZWQpIGRlZGljYXRlZCBpbWFnZVxuICAgKiBvcHRpbWl6YXRpb24gTGFtYmRhIGlzIGVuYWJsZWQuIGBfbmV4dC9pbWFnZWAgaXMgb3RoZXJ3aXNlIHNlcnZlZCBieVxuICAgKiB7QGxpbmsgbmV4dGpzRnVuY3Rpb25zfS5cbiAgICovXG4gIG5leHRqc0ltYWdlRnVuY3Rpb24/OiBOZXh0anNJbWFnZUZ1bmN0aW9uO1xuICBuZXh0anNBcGk6IE5leHRqc0FwaTtcbiAgbmV4dGpzUG9zdERlcGxveTogTmV4dGpzUG9zdERlcGxveTtcbiAgZ2V0IHVybCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLm5leHRqc0FwaS51cmw7XG4gIH1cblxuICBwcml2YXRlIHByb3BzOiBOZXh0anNSZWdpb25hbEZ1bmN0aW9uc1Byb3BzO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBwcm9wczogTmV4dGpzUmVnaW9uYWxGdW5jdGlvbnNQcm9wcyxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcywgTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIHRoaXMubmV4dGpzRnVuY3Rpb25zID0gdGhpcy5jcmVhdGVOZXh0anNGdW5jdGlvbnMoXG4gICAgICB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzRnVuY3Rpb25zLFxuICAgICk7XG4gICAgaWYgKHVzZURlZGljYXRlZEltYWdlRnVuY3Rpb24oKSkge1xuICAgICAgdGhpcy5uZXh0anNJbWFnZUZ1bmN0aW9uID0gdGhpcy5jcmVhdGVOZXh0anNJbWFnZUZ1bmN0aW9uKFxuICAgICAgICB0aGlzLnByb3BzLm92ZXJyaWRlcz8ubmV4dGpzSW1hZ2VGdW5jdGlvbixcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMubmV4dGpzQXBpID0gdGhpcy5jcmVhdGVOZXh0anNBcGkoKTtcbiAgICB0aGlzLm5leHRqc1Bvc3REZXBsb3kgPSB0aGlzLmNyZWF0ZU5leHRqc1Bvc3REZXBsb3koKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzQXBpKCkge1xuICAgIHJldHVybiBuZXcgTmV4dGpzQXBpKHRoaXMsIFwiTmV4dGpzQXBpXCIsIHtcbiAgICAgIHN0YXRpY0Fzc2V0c0J1Y2tldDogdGhpcy5uZXh0anNTdGF0aWNBc3NldHMuYnVja2V0LFxuICAgICAgc3RhdGljQXNzZXRzS2V5UHJlZml4OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5rZXlQcmVmaXgsXG4gICAgICBzZXJ2ZXJGdW5jdGlvbjogdGhpcy5uZXh0anNGdW5jdGlvbnMuZnVuY3Rpb24sXG4gICAgICBpbWFnZUZ1bmN0aW9uOiB0aGlzLm5leHRqc0ltYWdlRnVuY3Rpb24/LmZ1bmN0aW9uLFxuICAgICAgYmFzZVBhdGg6IHRoaXMucmVzb2x2ZWRCYXNlUGF0aCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc0FwaSxcbiAgICAgIHB1YmxpY0RpckVudHJpZXM6IHRoaXMubmV4dGpzQnVpbGQucHVibGljRGlyRW50cmllcyxcbiAgICAgIC4uLnRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNSZWdpb25hbEZ1bmN0aW9ucz8ubmV4dGpzQXBpUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc1Bvc3REZXBsb3koKTogTmV4dGpzUG9zdERlcGxveSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNQb3N0RGVwbG95KHRoaXMsIFwiTmV4dGpzUG9zdERlcGxveVwiLCB7XG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBjYWNoZUJ1Y2tldDogdGhpcy5uZXh0anNDYWNoZS5jYWNoZUJ1Y2tldCxcbiAgICAgIHJldmFsaWRhdGlvblRhYmxlOiB0aGlzLm5leHRqc0NhY2hlLnJldmFsaWRhdGlvblRhYmxlLFxuICAgICAgc3RhdGljQXNzZXRzQnVja2V0OiB0aGlzLm5leHRqc1N0YXRpY0Fzc2V0cy5idWNrZXQsXG4gICAgICBvdmVycmlkZXM6IHRoaXMucHJvcHMub3ZlcnJpZGVzPy5uZXh0anNQb3N0RGVwbG95LFxuICAgICAgLi4udGhpcy5wcm9wcy5vdmVycmlkZXM/Lm5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zPy5uZXh0anNQb3N0RGVwbG95UHJvcHMsXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { NextjsType } from "../constants";
|
|
2
|
+
/**
|
|
3
|
+
* Reduces a `basePath` to a bare path segment so values that address the same
|
|
4
|
+
* path ("/base", "base", "/base/") compare equal and can be concatenated
|
|
5
|
+
* without doubling separators.
|
|
6
|
+
*/
|
|
7
|
+
export declare function normalizeBasePath(basePath?: string): string;
|
|
8
|
+
/**
|
|
9
|
+
* Joins path parts with a single "/", normalizing each (so no leading or
|
|
10
|
+
* trailing slash survives, including on the result) and dropping the empty
|
|
11
|
+
* ones, so an unset `basePath` or key prefix leaves the rest untouched.
|
|
12
|
+
*/
|
|
13
|
+
export declare function joinPath(...parts: (string | undefined)[]): string;
|
|
14
|
+
/**
|
|
15
|
+
* Read the Next.js app's own `basePath` out of `required-server-files.json`,
|
|
16
|
+
* which `next build` writes into `.next` with the fully resolved config (so
|
|
17
|
+
* this picks up a `basePath` computed in `next.config.js`, not only a literal
|
|
18
|
+
* one). Normalized, empty when the app sets none.
|
|
19
|
+
*
|
|
20
|
+
* Degrades to `""` rather than throwing, since an unreadable file shouldn't
|
|
21
|
+
* fail a deployment that would otherwise work. It warns because `""` is
|
|
22
|
+
* indistinguishable from an app that genuinely sets no `basePath`: the
|
|
23
|
+
* `NextjsType`s that derive `basePath` from the app would quietly not derive
|
|
24
|
+
* it and 404 every static asset.
|
|
25
|
+
*/
|
|
26
|
+
export declare function readNextConfigBasePath(dotNextPath: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Settles on the single `basePath` the infrastructure should be built around,
|
|
29
|
+
* given the CDK `basePath` prop and the Next.js app's own `basePath`
|
|
30
|
+
* (`NextjsBuild.nextConfigBasePath`), throwing at synth if the two can't serve
|
|
31
|
+
* the app together. Returns a normalized value, or `undefined` for no
|
|
32
|
+
* `basePath` at all; consumers that need a leading slash add their own.
|
|
33
|
+
*
|
|
34
|
+
* The two inputs are genuinely different things — the prop is where the
|
|
35
|
+
* infrastructure serves the app from (and which S3 key prefix the static assets
|
|
36
|
+
* land under), the config is the prefix the app emits its own links and asset
|
|
37
|
+
* hrefs under — so how strictly they have to line up, and whether one can stand
|
|
38
|
+
* in for the other, depends on how the `NextjsType` routes static requests.
|
|
39
|
+
*/
|
|
40
|
+
export declare function resolveBasePath(nextjsType: NextjsType, propBasePath?: string, nextConfigBasePath?: string): string | undefined;
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeBasePath = normalizeBasePath;
|
|
4
|
+
exports.joinPath = joinPath;
|
|
5
|
+
exports.readNextConfigBasePath = readNextConfigBasePath;
|
|
6
|
+
exports.resolveBasePath = resolveBasePath;
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
|
+
const constants_1 = require("../constants");
|
|
10
|
+
/**
|
|
11
|
+
* Reduces a `basePath` to a bare path segment so values that address the same
|
|
12
|
+
* path ("/base", "base", "/base/") compare equal and can be concatenated
|
|
13
|
+
* without doubling separators.
|
|
14
|
+
*/
|
|
15
|
+
function normalizeBasePath(basePath) {
|
|
16
|
+
return (basePath || "").replace(/^\/+/, "").replace(/\/+$/, "");
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Joins path parts with a single "/", normalizing each (so no leading or
|
|
20
|
+
* trailing slash survives, including on the result) and dropping the empty
|
|
21
|
+
* ones, so an unset `basePath` or key prefix leaves the rest untouched.
|
|
22
|
+
*/
|
|
23
|
+
function joinPath(...parts) {
|
|
24
|
+
return parts.map(normalizeBasePath).filter(Boolean).join("/");
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Read the Next.js app's own `basePath` out of `required-server-files.json`,
|
|
28
|
+
* which `next build` writes into `.next` with the fully resolved config (so
|
|
29
|
+
* this picks up a `basePath` computed in `next.config.js`, not only a literal
|
|
30
|
+
* one). Normalized, empty when the app sets none.
|
|
31
|
+
*
|
|
32
|
+
* Degrades to `""` rather than throwing, since an unreadable file shouldn't
|
|
33
|
+
* fail a deployment that would otherwise work. It warns because `""` is
|
|
34
|
+
* indistinguishable from an app that genuinely sets no `basePath`: the
|
|
35
|
+
* `NextjsType`s that derive `basePath` from the app would quietly not derive
|
|
36
|
+
* it and 404 every static asset.
|
|
37
|
+
*/
|
|
38
|
+
function readNextConfigBasePath(dotNextPath) {
|
|
39
|
+
const requiredServerFiles = (0, node_path_1.join)(dotNextPath, "required-server-files.json");
|
|
40
|
+
const fallback = (reason) => {
|
|
41
|
+
console.warn(`${constants_1.LOG_PREFIX} ${reason}. Assuming your Next.js app sets no \`basePath\`: ` +
|
|
42
|
+
"if it does set one, static assets will 404 and any `basePath` prop " +
|
|
43
|
+
"mismatch reported at synth will name the wrong value.");
|
|
44
|
+
return "";
|
|
45
|
+
};
|
|
46
|
+
if (!(0, node_fs_1.existsSync)(requiredServerFiles)) {
|
|
47
|
+
return fallback(`"required-server-files.json" not found at ${requiredServerFiles}`);
|
|
48
|
+
}
|
|
49
|
+
try {
|
|
50
|
+
const { config } = JSON.parse((0, node_fs_1.readFileSync)(requiredServerFiles, "utf-8"));
|
|
51
|
+
return normalizeBasePath(config?.basePath);
|
|
52
|
+
}
|
|
53
|
+
catch (error) {
|
|
54
|
+
return fallback(`Could not read basePath from ${requiredServerFiles}: ${error}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
function quote(basePath) {
|
|
58
|
+
return basePath ? `"/${basePath}"` : "unset";
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Settles on the single `basePath` the infrastructure should be built around,
|
|
62
|
+
* given the CDK `basePath` prop and the Next.js app's own `basePath`
|
|
63
|
+
* (`NextjsBuild.nextConfigBasePath`), throwing at synth if the two can't serve
|
|
64
|
+
* the app together. Returns a normalized value, or `undefined` for no
|
|
65
|
+
* `basePath` at all; consumers that need a leading slash add their own.
|
|
66
|
+
*
|
|
67
|
+
* The two inputs are genuinely different things — the prop is where the
|
|
68
|
+
* infrastructure serves the app from (and which S3 key prefix the static assets
|
|
69
|
+
* land under), the config is the prefix the app emits its own links and asset
|
|
70
|
+
* hrefs under — so how strictly they have to line up, and whether one can stand
|
|
71
|
+
* in for the other, depends on how the `NextjsType` routes static requests.
|
|
72
|
+
*/
|
|
73
|
+
function resolveBasePath(nextjsType, propBasePath, nextConfigBasePath) {
|
|
74
|
+
const prop = normalizeBasePath(propBasePath);
|
|
75
|
+
const config = normalizeBasePath(nextConfigBasePath);
|
|
76
|
+
if (prop === config) {
|
|
77
|
+
return prop || undefined;
|
|
78
|
+
}
|
|
79
|
+
const mismatch = `${constants_1.LOG_PREFIX} basePath mismatch for NextjsType.${nextjsType}: the \`basePath\` prop is ${quote(prop)} ` +
|
|
80
|
+
`but your Next.js app's config sets \`basePath\` to ${quote(config)}. `;
|
|
81
|
+
switch (nextjsType) {
|
|
82
|
+
case constants_1.NextjsType.GLOBAL_FUNCTIONS:
|
|
83
|
+
case constants_1.NextjsType.GLOBAL_CONTAINERS:
|
|
84
|
+
// `NextjsDistribution` builds its behaviors as `/${basePath}/_next/static*`
|
|
85
|
+
// and CloudFront hands an S3 origin the request path verbatim as the
|
|
86
|
+
// object key, so the only value that can serve the app is the prefix the
|
|
87
|
+
// app itself emits. That leaves the prop no room to differ, which makes
|
|
88
|
+
// the app's config the single source of truth worth deriving from.
|
|
89
|
+
if (!prop) {
|
|
90
|
+
return config;
|
|
91
|
+
}
|
|
92
|
+
throw new Error(mismatch +
|
|
93
|
+
"CloudFront serves static assets straight from S3 using the request path as the object key, so a mismatch means every `_next/static` and `public/` request 404s. " +
|
|
94
|
+
"Either set both to the same value, or drop the prop — left unset, it follows your app's `basePath`.");
|
|
95
|
+
case constants_1.NextjsType.REGIONAL_FUNCTIONS:
|
|
96
|
+
// Deliberately not derived: API Gateway mounts resources below the stage
|
|
97
|
+
// and strips it before invoking the app, so an app whose basePath is the
|
|
98
|
+
// stage name (or a custom domain base path mapping that gets stripped the
|
|
99
|
+
// same way) is correct precisely because the prop stays unset.
|
|
100
|
+
if (!prop) {
|
|
101
|
+
return undefined;
|
|
102
|
+
}
|
|
103
|
+
// The prop only has to be the tail of what the app emits, not all of it,
|
|
104
|
+
// because the stripped prefix is part of the app's `basePath` but never
|
|
105
|
+
// part of the resource path: an app at the `prod` stage nested under
|
|
106
|
+
// "/base" sets `basePath: "/prod/base"` and the prop to "/base". Checked
|
|
107
|
+
// on a path boundary so "/prod/base" doesn't accept a prop of "se".
|
|
108
|
+
if (config.endsWith(`/${prop}`)) {
|
|
109
|
+
return prop;
|
|
110
|
+
}
|
|
111
|
+
// Anything else never works: the prop moves every resource, including the
|
|
112
|
+
// `ANY` catch-all, under a path the app never links to.
|
|
113
|
+
throw new Error(mismatch +
|
|
114
|
+
"The `basePath` prop nests every API Gateway resource under that path, including the catch-all, so the app has to emit its links under the same prefix or every request 404s. " +
|
|
115
|
+
'Either set your app\'s `basePath` to end with the prop (optionally prefixed by the stage or base path mapping API Gateway strips, e.g. `basePath: "/prod/base"` with a prop of "/base"), or leave the prop unset — unset is what you want when the app\'s `basePath` is the API Gateway stage name, since the stage isn\'t part of the resource path.');
|
|
116
|
+
case constants_1.NextjsType.REGIONAL_CONTAINERS:
|
|
117
|
+
// The ALB forwards every path to the container, which serves its own
|
|
118
|
+
// static assets, so here `basePath` only namespaces the S3 bucket and has
|
|
119
|
+
// no routing meaning that could disagree with the app.
|
|
120
|
+
return prop || undefined;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wYXRoLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2Jhc2UtcGF0aC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVNBLDhDQUVDO0FBT0QsNEJBRUM7QUFjRCx3REF1QkM7QUFtQkQsMENBNERDO0FBeElELHFDQUFtRDtBQUNuRCx5Q0FBaUM7QUFDakMsNENBQXNEO0FBRXREOzs7O0dBSUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxRQUFpQjtJQUNqRCxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILFNBQWdCLFFBQVEsQ0FBQyxHQUFHLEtBQTZCO0lBQ3ZELE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsU0FBZ0Isc0JBQXNCLENBQUMsV0FBbUI7SUFDeEQsTUFBTSxtQkFBbUIsR0FBRyxJQUFBLGdCQUFJLEVBQUMsV0FBVyxFQUFFLDRCQUE0QixDQUFDLENBQUM7SUFDNUUsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFjLEVBQUUsRUFBRTtRQUNsQyxPQUFPLENBQUMsSUFBSSxDQUNWLEdBQUcsc0JBQVUsSUFBSSxNQUFNLG9EQUFvRDtZQUN6RSxxRUFBcUU7WUFDckUsdURBQXVELENBQzFELENBQUM7UUFDRixPQUFPLEVBQUUsQ0FBQztJQUNaLENBQUMsQ0FBQztJQUNGLElBQUksQ0FBQyxJQUFBLG9CQUFVLEVBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDO1FBQ3JDLE9BQU8sUUFBUSxDQUNiLDZDQUE2QyxtQkFBbUIsRUFBRSxDQUNuRSxDQUFDO0lBQ0osQ0FBQztJQUNELElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUEsc0JBQVksRUFBQyxtQkFBbUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQzFFLE9BQU8saUJBQWlCLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzdDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxRQUFRLENBQ2IsZ0NBQWdDLG1CQUFtQixLQUFLLEtBQUssRUFBRSxDQUNoRSxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxRQUFnQjtJQUM3QixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO0FBQy9DLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxTQUFnQixlQUFlLENBQzdCLFVBQXNCLEVBQ3RCLFlBQXFCLEVBQ3JCLGtCQUEyQjtJQUUzQixNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM3QyxNQUFNLE1BQU0sR0FBRyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQ3JELElBQUksSUFBSSxLQUFLLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxJQUFJLFNBQVMsQ0FBQztJQUMzQixDQUFDO0lBRUQsTUFBTSxRQUFRLEdBQ1osR0FBRyxzQkFBVSxxQ0FBcUMsVUFBVSw4QkFBOEIsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHO1FBQ3hHLHNEQUFzRCxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQztJQUUxRSxRQUFRLFVBQVUsRUFBRSxDQUFDO1FBQ25CLEtBQUssc0JBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqQyxLQUFLLHNCQUFVLENBQUMsaUJBQWlCO1lBQy9CLDRFQUE0RTtZQUM1RSxxRUFBcUU7WUFDckUseUVBQXlFO1lBQ3pFLHdFQUF3RTtZQUN4RSxtRUFBbUU7WUFDbkUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUM7WUFDRCxNQUFNLElBQUksS0FBSyxDQUNiLFFBQVE7Z0JBQ04sa0tBQWtLO2dCQUNsSyxxR0FBcUcsQ0FDeEcsQ0FBQztRQUNKLEtBQUssc0JBQVUsQ0FBQyxrQkFBa0I7WUFDaEMseUVBQXlFO1lBQ3pFLHlFQUF5RTtZQUN6RSwwRUFBMEU7WUFDMUUsK0RBQStEO1lBQy9ELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixPQUFPLFNBQVMsQ0FBQztZQUNuQixDQUFDO1lBQ0QseUVBQXlFO1lBQ3pFLHdFQUF3RTtZQUN4RSxxRUFBcUU7WUFDckUseUVBQXlFO1lBQ3pFLG9FQUFvRTtZQUNwRSxJQUFJLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0JBQ2hDLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELDBFQUEwRTtZQUMxRSx3REFBd0Q7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FDYixRQUFRO2dCQUNOLCtLQUErSztnQkFDL0ssdVZBQXVWLENBQzFWLENBQUM7UUFDSixLQUFLLHNCQUFVLENBQUMsbUJBQW1CO1lBQ2pDLHFFQUFxRTtZQUNyRSwwRUFBMEU7WUFDMUUsdURBQXVEO1lBQ3ZELE9BQU8sSUFBSSxJQUFJLFNBQVMsQ0FBQztJQUM3QixDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgTE9HX1BSRUZJWCwgTmV4dGpzVHlwZSB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcblxuLyoqXG4gKiBSZWR1Y2VzIGEgYGJhc2VQYXRoYCB0byBhIGJhcmUgcGF0aCBzZWdtZW50IHNvIHZhbHVlcyB0aGF0IGFkZHJlc3MgdGhlIHNhbWVcbiAqIHBhdGggKFwiL2Jhc2VcIiwgXCJiYXNlXCIsIFwiL2Jhc2UvXCIpIGNvbXBhcmUgZXF1YWwgYW5kIGNhbiBiZSBjb25jYXRlbmF0ZWRcbiAqIHdpdGhvdXQgZG91Ymxpbmcgc2VwYXJhdG9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUJhc2VQYXRoKGJhc2VQYXRoPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIChiYXNlUGF0aCB8fCBcIlwiKS5yZXBsYWNlKC9eXFwvKy8sIFwiXCIpLnJlcGxhY2UoL1xcLyskLywgXCJcIik7XG59XG5cbi8qKlxuICogSm9pbnMgcGF0aCBwYXJ0cyB3aXRoIGEgc2luZ2xlIFwiL1wiLCBub3JtYWxpemluZyBlYWNoIChzbyBubyBsZWFkaW5nIG9yXG4gKiB0cmFpbGluZyBzbGFzaCBzdXJ2aXZlcywgaW5jbHVkaW5nIG9uIHRoZSByZXN1bHQpIGFuZCBkcm9wcGluZyB0aGUgZW1wdHlcbiAqIG9uZXMsIHNvIGFuIHVuc2V0IGBiYXNlUGF0aGAgb3Iga2V5IHByZWZpeCBsZWF2ZXMgdGhlIHJlc3QgdW50b3VjaGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gam9pblBhdGgoLi4ucGFydHM6IChzdHJpbmcgfCB1bmRlZmluZWQpW10pOiBzdHJpbmcge1xuICByZXR1cm4gcGFydHMubWFwKG5vcm1hbGl6ZUJhc2VQYXRoKS5maWx0ZXIoQm9vbGVhbikuam9pbihcIi9cIik7XG59XG5cbi8qKlxuICogUmVhZCB0aGUgTmV4dC5qcyBhcHAncyBvd24gYGJhc2VQYXRoYCBvdXQgb2YgYHJlcXVpcmVkLXNlcnZlci1maWxlcy5qc29uYCxcbiAqIHdoaWNoIGBuZXh0IGJ1aWxkYCB3cml0ZXMgaW50byBgLm5leHRgIHdpdGggdGhlIGZ1bGx5IHJlc29sdmVkIGNvbmZpZyAoc29cbiAqIHRoaXMgcGlja3MgdXAgYSBgYmFzZVBhdGhgIGNvbXB1dGVkIGluIGBuZXh0LmNvbmZpZy5qc2AsIG5vdCBvbmx5IGEgbGl0ZXJhbFxuICogb25lKS4gTm9ybWFsaXplZCwgZW1wdHkgd2hlbiB0aGUgYXBwIHNldHMgbm9uZS5cbiAqXG4gKiBEZWdyYWRlcyB0byBgXCJcImAgcmF0aGVyIHRoYW4gdGhyb3dpbmcsIHNpbmNlIGFuIHVucmVhZGFibGUgZmlsZSBzaG91bGRuJ3RcbiAqIGZhaWwgYSBkZXBsb3ltZW50IHRoYXQgd291bGQgb3RoZXJ3aXNlIHdvcmsuIEl0IHdhcm5zIGJlY2F1c2UgYFwiXCJgIGlzXG4gKiBpbmRpc3Rpbmd1aXNoYWJsZSBmcm9tIGFuIGFwcCB0aGF0IGdlbnVpbmVseSBzZXRzIG5vIGBiYXNlUGF0aGA6IHRoZVxuICogYE5leHRqc1R5cGVgcyB0aGF0IGRlcml2ZSBgYmFzZVBhdGhgIGZyb20gdGhlIGFwcCB3b3VsZCBxdWlldGx5IG5vdCBkZXJpdmVcbiAqIGl0IGFuZCA0MDQgZXZlcnkgc3RhdGljIGFzc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVhZE5leHRDb25maWdCYXNlUGF0aChkb3ROZXh0UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVxdWlyZWRTZXJ2ZXJGaWxlcyA9IGpvaW4oZG90TmV4dFBhdGgsIFwicmVxdWlyZWQtc2VydmVyLWZpbGVzLmpzb25cIik7XG4gIGNvbnN0IGZhbGxiYWNrID0gKHJlYXNvbjogc3RyaW5nKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYCR7TE9HX1BSRUZJWH0gJHtyZWFzb259LiBBc3N1bWluZyB5b3VyIE5leHQuanMgYXBwIHNldHMgbm8gXFxgYmFzZVBhdGhcXGA6IGAgK1xuICAgICAgICBcImlmIGl0IGRvZXMgc2V0IG9uZSwgc3RhdGljIGFzc2V0cyB3aWxsIDQwNCBhbmQgYW55IGBiYXNlUGF0aGAgcHJvcCBcIiArXG4gICAgICAgIFwibWlzbWF0Y2ggcmVwb3J0ZWQgYXQgc3ludGggd2lsbCBuYW1lIHRoZSB3cm9uZyB2YWx1ZS5cIixcbiAgICApO1xuICAgIHJldHVybiBcIlwiO1xuICB9O1xuICBpZiAoIWV4aXN0c1N5bmMocmVxdWlyZWRTZXJ2ZXJGaWxlcykpIHtcbiAgICByZXR1cm4gZmFsbGJhY2soXG4gICAgICBgXCJyZXF1aXJlZC1zZXJ2ZXItZmlsZXMuanNvblwiIG5vdCBmb3VuZCBhdCAke3JlcXVpcmVkU2VydmVyRmlsZXN9YCxcbiAgICApO1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgeyBjb25maWcgfSA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHJlcXVpcmVkU2VydmVyRmlsZXMsIFwidXRmLThcIikpO1xuICAgIHJldHVybiBub3JtYWxpemVCYXNlUGF0aChjb25maWc/LmJhc2VQYXRoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsbGJhY2soXG4gICAgICBgQ291bGQgbm90IHJlYWQgYmFzZVBhdGggZnJvbSAke3JlcXVpcmVkU2VydmVyRmlsZXN9OiAke2Vycm9yfWAsXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBxdW90ZShiYXNlUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGJhc2VQYXRoID8gYFwiLyR7YmFzZVBhdGh9XCJgIDogXCJ1bnNldFwiO1xufVxuXG4vKipcbiAqIFNldHRsZXMgb24gdGhlIHNpbmdsZSBgYmFzZVBhdGhgIHRoZSBpbmZyYXN0cnVjdHVyZSBzaG91bGQgYmUgYnVpbHQgYXJvdW5kLFxuICogZ2l2ZW4gdGhlIENESyBgYmFzZVBhdGhgIHByb3AgYW5kIHRoZSBOZXh0LmpzIGFwcCdzIG93biBgYmFzZVBhdGhgXG4gKiAoYE5leHRqc0J1aWxkLm5leHRDb25maWdCYXNlUGF0aGApLCB0aHJvd2luZyBhdCBzeW50aCBpZiB0aGUgdHdvIGNhbid0IHNlcnZlXG4gKiB0aGUgYXBwIHRvZ2V0aGVyLiBSZXR1cm5zIGEgbm9ybWFsaXplZCB2YWx1ZSwgb3IgYHVuZGVmaW5lZGAgZm9yIG5vXG4gKiBgYmFzZVBhdGhgIGF0IGFsbDsgY29uc3VtZXJzIHRoYXQgbmVlZCBhIGxlYWRpbmcgc2xhc2ggYWRkIHRoZWlyIG93bi5cbiAqXG4gKiBUaGUgdHdvIGlucHV0cyBhcmUgZ2VudWluZWx5IGRpZmZlcmVudCB0aGluZ3Mg4oCUIHRoZSBwcm9wIGlzIHdoZXJlIHRoZVxuICogaW5mcmFzdHJ1Y3R1cmUgc2VydmVzIHRoZSBhcHAgZnJvbSAoYW5kIHdoaWNoIFMzIGtleSBwcmVmaXggdGhlIHN0YXRpYyBhc3NldHNcbiAqIGxhbmQgdW5kZXIpLCB0aGUgY29uZmlnIGlzIHRoZSBwcmVmaXggdGhlIGFwcCBlbWl0cyBpdHMgb3duIGxpbmtzIGFuZCBhc3NldFxuICogaHJlZnMgdW5kZXIg4oCUIHNvIGhvdyBzdHJpY3RseSB0aGV5IGhhdmUgdG8gbGluZSB1cCwgYW5kIHdoZXRoZXIgb25lIGNhbiBzdGFuZFxuICogaW4gZm9yIHRoZSBvdGhlciwgZGVwZW5kcyBvbiBob3cgdGhlIGBOZXh0anNUeXBlYCByb3V0ZXMgc3RhdGljIHJlcXVlc3RzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUJhc2VQYXRoKFxuICBuZXh0anNUeXBlOiBOZXh0anNUeXBlLFxuICBwcm9wQmFzZVBhdGg/OiBzdHJpbmcsXG4gIG5leHRDb25maWdCYXNlUGF0aD86IHN0cmluZyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IHByb3AgPSBub3JtYWxpemVCYXNlUGF0aChwcm9wQmFzZVBhdGgpO1xuICBjb25zdCBjb25maWcgPSBub3JtYWxpemVCYXNlUGF0aChuZXh0Q29uZmlnQmFzZVBhdGgpO1xuICBpZiAocHJvcCA9PT0gY29uZmlnKSB7XG4gICAgcmV0dXJuIHByb3AgfHwgdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgbWlzbWF0Y2ggPVxuICAgIGAke0xPR19QUkVGSVh9IGJhc2VQYXRoIG1pc21hdGNoIGZvciBOZXh0anNUeXBlLiR7bmV4dGpzVHlwZX06IHRoZSBcXGBiYXNlUGF0aFxcYCBwcm9wIGlzICR7cXVvdGUocHJvcCl9IGAgK1xuICAgIGBidXQgeW91ciBOZXh0LmpzIGFwcCdzIGNvbmZpZyBzZXRzIFxcYGJhc2VQYXRoXFxgIHRvICR7cXVvdGUoY29uZmlnKX0uIGA7XG5cbiAgc3dpdGNoIChuZXh0anNUeXBlKSB7XG4gICAgY2FzZSBOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlM6XG4gICAgY2FzZSBOZXh0anNUeXBlLkdMT0JBTF9DT05UQUlORVJTOlxuICAgICAgLy8gYE5leHRqc0Rpc3RyaWJ1dGlvbmAgYnVpbGRzIGl0cyBiZWhhdmlvcnMgYXMgYC8ke2Jhc2VQYXRofS9fbmV4dC9zdGF0aWMqYFxuICAgICAgLy8gYW5kIENsb3VkRnJvbnQgaGFuZHMgYW4gUzMgb3JpZ2luIHRoZSByZXF1ZXN0IHBhdGggdmVyYmF0aW0gYXMgdGhlXG4gICAgICAvLyBvYmplY3Qga2V5LCBzbyB0aGUgb25seSB2YWx1ZSB0aGF0IGNhbiBzZXJ2ZSB0aGUgYXBwIGlzIHRoZSBwcmVmaXggdGhlXG4gICAgICAvLyBhcHAgaXRzZWxmIGVtaXRzLiBUaGF0IGxlYXZlcyB0aGUgcHJvcCBubyByb29tIHRvIGRpZmZlciwgd2hpY2ggbWFrZXNcbiAgICAgIC8vIHRoZSBhcHAncyBjb25maWcgdGhlIHNpbmdsZSBzb3VyY2Ugb2YgdHJ1dGggd29ydGggZGVyaXZpbmcgZnJvbS5cbiAgICAgIGlmICghcHJvcCkge1xuICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgfVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBtaXNtYXRjaCArXG4gICAgICAgICAgXCJDbG91ZEZyb250IHNlcnZlcyBzdGF0aWMgYXNzZXRzIHN0cmFpZ2h0IGZyb20gUzMgdXNpbmcgdGhlIHJlcXVlc3QgcGF0aCBhcyB0aGUgb2JqZWN0IGtleSwgc28gYSBtaXNtYXRjaCBtZWFucyBldmVyeSBgX25leHQvc3RhdGljYCBhbmQgYHB1YmxpYy9gIHJlcXVlc3QgNDA0cy4gXCIgK1xuICAgICAgICAgIFwiRWl0aGVyIHNldCBib3RoIHRvIHRoZSBzYW1lIHZhbHVlLCBvciBkcm9wIHRoZSBwcm9wIOKAlCBsZWZ0IHVuc2V0LCBpdCBmb2xsb3dzIHlvdXIgYXBwJ3MgYGJhc2VQYXRoYC5cIixcbiAgICAgICk7XG4gICAgY2FzZSBOZXh0anNUeXBlLlJFR0lPTkFMX0ZVTkNUSU9OUzpcbiAgICAgIC8vIERlbGliZXJhdGVseSBub3QgZGVyaXZlZDogQVBJIEdhdGV3YXkgbW91bnRzIHJlc291cmNlcyBiZWxvdyB0aGUgc3RhZ2VcbiAgICAgIC8vIGFuZCBzdHJpcHMgaXQgYmVmb3JlIGludm9raW5nIHRoZSBhcHAsIHNvIGFuIGFwcCB3aG9zZSBiYXNlUGF0aCBpcyB0aGVcbiAgICAgIC8vIHN0YWdlIG5hbWUgKG9yIGEgY3VzdG9tIGRvbWFpbiBiYXNlIHBhdGggbWFwcGluZyB0aGF0IGdldHMgc3RyaXBwZWQgdGhlXG4gICAgICAvLyBzYW1lIHdheSkgaXMgY29ycmVjdCBwcmVjaXNlbHkgYmVjYXVzZSB0aGUgcHJvcCBzdGF5cyB1bnNldC5cbiAgICAgIGlmICghcHJvcCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgLy8gVGhlIHByb3Agb25seSBoYXMgdG8gYmUgdGhlIHRhaWwgb2Ygd2hhdCB0aGUgYXBwIGVtaXRzLCBub3QgYWxsIG9mIGl0LFxuICAgICAgLy8gYmVjYXVzZSB0aGUgc3RyaXBwZWQgcHJlZml4IGlzIHBhcnQgb2YgdGhlIGFwcCdzIGBiYXNlUGF0aGAgYnV0IG5ldmVyXG4gICAgICAvLyBwYXJ0IG9mIHRoZSByZXNvdXJjZSBwYXRoOiBhbiBhcHAgYXQgdGhlIGBwcm9kYCBzdGFnZSBuZXN0ZWQgdW5kZXJcbiAgICAgIC8vIFwiL2Jhc2VcIiBzZXRzIGBiYXNlUGF0aDogXCIvcHJvZC9iYXNlXCJgIGFuZCB0aGUgcHJvcCB0byBcIi9iYXNlXCIuIENoZWNrZWRcbiAgICAgIC8vIG9uIGEgcGF0aCBib3VuZGFyeSBzbyBcIi9wcm9kL2Jhc2VcIiBkb2Vzbid0IGFjY2VwdCBhIHByb3Agb2YgXCJzZVwiLlxuICAgICAgaWYgKGNvbmZpZy5lbmRzV2l0aChgLyR7cHJvcH1gKSkge1xuICAgICAgICByZXR1cm4gcHJvcDtcbiAgICAgIH1cbiAgICAgIC8vIEFueXRoaW5nIGVsc2UgbmV2ZXIgd29ya3M6IHRoZSBwcm9wIG1vdmVzIGV2ZXJ5IHJlc291cmNlLCBpbmNsdWRpbmcgdGhlXG4gICAgICAvLyBgQU5ZYCBjYXRjaC1hbGwsIHVuZGVyIGEgcGF0aCB0aGUgYXBwIG5ldmVyIGxpbmtzIHRvLlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBtaXNtYXRjaCArXG4gICAgICAgICAgXCJUaGUgYGJhc2VQYXRoYCBwcm9wIG5lc3RzIGV2ZXJ5IEFQSSBHYXRld2F5IHJlc291cmNlIHVuZGVyIHRoYXQgcGF0aCwgaW5jbHVkaW5nIHRoZSBjYXRjaC1hbGwsIHNvIHRoZSBhcHAgaGFzIHRvIGVtaXQgaXRzIGxpbmtzIHVuZGVyIHRoZSBzYW1lIHByZWZpeCBvciBldmVyeSByZXF1ZXN0IDQwNHMuIFwiICtcbiAgICAgICAgICAnRWl0aGVyIHNldCB5b3VyIGFwcFxcJ3MgYGJhc2VQYXRoYCB0byBlbmQgd2l0aCB0aGUgcHJvcCAob3B0aW9uYWxseSBwcmVmaXhlZCBieSB0aGUgc3RhZ2Ugb3IgYmFzZSBwYXRoIG1hcHBpbmcgQVBJIEdhdGV3YXkgc3RyaXBzLCBlLmcuIGBiYXNlUGF0aDogXCIvcHJvZC9iYXNlXCJgIHdpdGggYSBwcm9wIG9mIFwiL2Jhc2VcIiksIG9yIGxlYXZlIHRoZSBwcm9wIHVuc2V0IOKAlCB1bnNldCBpcyB3aGF0IHlvdSB3YW50IHdoZW4gdGhlIGFwcFxcJ3MgYGJhc2VQYXRoYCBpcyB0aGUgQVBJIEdhdGV3YXkgc3RhZ2UgbmFtZSwgc2luY2UgdGhlIHN0YWdlIGlzblxcJ3QgcGFydCBvZiB0aGUgcmVzb3VyY2UgcGF0aC4nLFxuICAgICAgKTtcbiAgICBjYXNlIE5leHRqc1R5cGUuUkVHSU9OQUxfQ09OVEFJTkVSUzpcbiAgICAgIC8vIFRoZSBBTEIgZm9yd2FyZHMgZXZlcnkgcGF0aCB0byB0aGUgY29udGFpbmVyLCB3aGljaCBzZXJ2ZXMgaXRzIG93blxuICAgICAgLy8gc3RhdGljIGFzc2V0cywgc28gaGVyZSBgYmFzZVBhdGhgIG9ubHkgbmFtZXNwYWNlcyB0aGUgUzMgYnVja2V0IGFuZCBoYXNcbiAgICAgIC8vIG5vIHJvdXRpbmcgbWVhbmluZyB0aGF0IGNvdWxkIGRpc2FncmVlIHdpdGggdGhlIGFwcC5cbiAgICAgIHJldHVybiBwcm9wIHx8IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|