cdk-nextjs
Version:
Deploy Next.js apps on AWS with CDK
112 lines • 23.7 kB
JavaScript
"use strict";
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.NextjsBaseConstruct = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const constructs_1 = require("constructs");
const constants_1 = require("../constants");
const nextjs_assets_deployment_1 = require("../nextjs-assets-deployment");
const nextjs_build_1 = require("../nextjs-build/nextjs-build");
const nextjs_file_system_1 = require("../nextjs-file-system");
const nextjs_post_deploy_1 = require("../nextjs-post-deploy");
const nextjs_static_assets_1 = require("../nextjs-static-assets");
const nextjs_vpc_1 = require("../nextjs-vpc");
const handle_deprecated_properties_1 = require("../utils/handle-deprecated-properties");
/**
* Base class for all Next.js root constructs
*/
class NextjsBaseConstruct extends constructs_1.Construct {
constructor(scope, id, props, nextjsType) {
super(scope, id);
this.baseProps = (0, handle_deprecated_properties_1.handleDeprecatedProperties)(props);
this.nextjsType = nextjsType;
this.constructOverrides = this.getConstructOverrides(nextjsType);
this.nextjsBuild = this.createNextjsBuild();
this.nextjsStaticAssets = this.createNextjsStaticAssets();
this.nextjsVpc = this.createVpc();
this.nextjsFileSystem = this.createNextjsFileSystem();
this.nextjsAssetsDeployment = this.createNextjsAssetsDeployment();
this.nextjsPostDeploy = this.createNextjsPostDeploy();
}
/**
* Finds construct overrides (if present) on props for any `NextjsType`
*/
getConstructOverrides(nextjsType) {
const nextjsTypeToKey = {
[constants_1.NextjsType.GLOBAL_CONTAINERS]: "nextjsGlobalContainers",
[constants_1.NextjsType.GLOBAL_FUNCTIONS]: "nextjsGlobalFunctions",
[constants_1.NextjsType.REGIONAL_CONTAINERS]: "nextjsRegionalContainers",
[constants_1.NextjsType.REGIONAL_FUNCTIONS]: "nextjsRegionalFunctions",
};
const key = nextjsTypeToKey[nextjsType];
const overrides = this.baseProps.overrides;
if (overrides && key in overrides) {
return overrides[key];
}
return;
}
createNextjsBuild() {
return new nextjs_build_1.NextjsBuild(this, "NextjsBuild", {
buildCommand: this.baseProps.buildCommand,
buildContext: this.baseProps.buildContext,
nextjsType: this.nextjsType,
relativePathToPackage: this.baseProps.relativePathToPackage,
overrides: this.baseProps.overrides?.nextjsBuild,
...this.constructOverrides?.nextjsBuildProps,
});
}
createNextjsStaticAssets() {
return new nextjs_static_assets_1.NextjsStaticAssets(this, "NextjsStaticAssets", {
overrides: this.baseProps.overrides?.nextjsStaticAssets,
...this.constructOverrides?.nextjsStaticAssetsProps,
});
}
createVpc() {
return new nextjs_vpc_1.NextjsVpc(this, "NextjsVpc", {
nextjsType: this.nextjsType,
overrides: this.baseProps.overrides?.nextjsVpc,
...this.constructOverrides?.nextjsVpcProps,
});
}
createNextjsFileSystem() {
return new nextjs_file_system_1.NextjsFileSystem(this, "NextjsFileSystem", {
vpc: this.nextjsVpc.vpc,
overrides: this.baseProps.overrides?.nextjsFileSystem,
...this.constructOverrides?.nextjsFileSystemProps,
});
}
createNextjsAssetsDeployment() {
return new nextjs_assets_deployment_1.NextjsAssetsDeployment(this, "NextjsAssetsDeployment", {
accessPoint: this.nextjsFileSystem.accessPoint,
basePath: this.baseProps.basePath,
buildId: this.nextjsBuild.buildId,
buildImageDigest: this.nextjsBuild.buildImageDigest,
dockerImageCode: this.nextjsBuild.imageForNextjsAssetsDeployment,
nextjsType: this.nextjsType,
overrides: this.baseProps.overrides?.nextjsAssetsDeployment,
relativePathToPackage: this.baseProps.relativePathToPackage,
staticAssetsBucket: this.nextjsStaticAssets.bucket,
vpc: this.nextjsVpc.vpc,
...this.constructOverrides?.nextjsAssetsDeploymentProps,
});
}
createNextjsPostDeploy() {
const nextjsPostDeploy = new nextjs_post_deploy_1.NextjsPostDeploy(this, "NextjsPostDeploy", {
accessPoint: this.nextjsFileSystem.accessPoint,
buildId: this.nextjsBuild.buildId,
buildImageDigest: this.nextjsBuild.buildImageDigest,
overrides: this.baseProps.overrides?.nextjsPostDeploy,
relativePathToPackage: this.baseProps.relativePathToPackage,
staticAssetsBucket: this.nextjsStaticAssets.bucket,
vpc: this.nextjsVpc.vpc,
...this.constructOverrides?.nextjsPostDeployProps,
});
// ensure NextjsAssetsDeployment finishes before NextjsPostDeploy
nextjsPostDeploy.node.addDependency(this.nextjsAssetsDeployment);
return nextjsPostDeploy;
}
}
exports.NextjsBaseConstruct = NextjsBaseConstruct;
_a = JSII_RTTI_SYMBOL_1;
NextjsBaseConstruct[_a] = { fqn: "cdk-nextjs.NextjsBaseConstruct", version: "0.4.10" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dGpzLWJhc2UtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Jvb3QtY29uc3RydWN0cy9uZXh0anMtYmFzZS1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBdUM7QUFDdkMsNENBQTBDO0FBTTFDLDBFQUdxQztBQUNyQywrREFHc0M7QUFDdEMsOERBRytCO0FBQy9CLDhEQUcrQjtBQUMvQixrRUFJaUM7QUFDakMsOENBQThEO0FBQzlELHdGQUFtRjtBQXdHbkY7O0dBRUc7QUFDSCxNQUFzQixtQkFBb0IsU0FBUSxzQkFBUztJQWV6RCxZQUNFLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixLQUErQixFQUMvQixVQUFzQjtRQUV0QixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBQSx5REFBMEIsRUFBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBRWpFLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFDbEUsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO0lBQ3hELENBQUM7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QXFCO1lBQzNELGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO1lBQ2xELEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7WUFDdkIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsMkJBQTJCO1NBQ3hELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxzQkFBc0I7UUFDNUIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLHFDQUFnQixDQUFDLElBQUksRUFBRSxrQkFBa0IsRUFBRTtZQUN0RSxXQUFXLEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVc7WUFDOUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTztZQUNqQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQjtZQUNuRCxTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsZ0JBQWdCO1lBQ3JELHFCQUFxQixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMscUJBQXFCO1lBQzNELGtCQUFrQixFQUFFLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNO1lBQ2xELEdBQUcsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUc7WUFDdkIsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUscUJBQXFCO1NBQ2xELENBQUMsQ0FBQztRQUNILGlFQUFpRTtRQUNqRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sZ0JBQWdCLENBQUM7SUFDMUIsQ0FBQzs7QUF0SEgsa0RBdUhDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IE5leHRqc1R5cGUgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc0Fzc2V0c0RlcGxveW1lbnRQcm9wcyB9IGZyb20gXCIuLi9nZW5lcmF0ZWQtc3RydWN0cy9PcHRpb25hbE5leHRqc0Fzc2V0c0RlcGxveW1lbnRQcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxOZXh0anNCdWlsZFByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzQnVpbGRQcm9wc1wiO1xuaW1wb3J0IHsgT3B0aW9uYWxOZXh0anNGaWxlU3lzdGVtUHJvcHMgfSBmcm9tIFwiLi4vZ2VuZXJhdGVkLXN0cnVjdHMvT3B0aW9uYWxOZXh0anNGaWxlU3lzdGVtUHJvcHNcIjtcbmltcG9ydCB7IE9wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzXCI7XG5pbXBvcnQgeyBPcHRpb25hbE5leHRqc1ZwY1Byb3BzIH0gZnJvbSBcIi4uL2dlbmVyYXRlZC1zdHJ1Y3RzL09wdGlvbmFsTmV4dGpzVnBjUHJvcHNcIjtcbmltcG9ydCB7XG4gIE5leHRqc0Fzc2V0c0RlcGxveW1lbnQsXG4gIE5leHRqc0Fzc2V0RGVwbG95bWVudE92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1hc3NldHMtZGVwbG95bWVudFwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzQnVpbGQsXG4gIE5leHRqc0J1aWxkT3ZlcnJpZGVzLFxufSBmcm9tIFwiLi4vbmV4dGpzLWJ1aWxkL25leHRqcy1idWlsZFwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzRmlsZVN5c3RlbSxcbiAgTmV4dGpzRmlsZVN5c3RlbU92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1maWxlLXN5c3RlbVwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzUG9zdERlcGxveSxcbiAgTmV4dGpzUG9zdERlcGxveU92ZXJyaWRlcyxcbn0gZnJvbSBcIi4uL25leHRqcy1wb3N0LWRlcGxveVwiO1xuaW1wb3J0IHtcbiAgTmV4dGpzU3RhdGljQXNzZXRzLFxuICBOZXh0anNTdGF0aWNBc3NldHNPdmVycmlkZXMsXG4gIE5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzLFxufSBmcm9tIFwiLi4vbmV4dGpzLXN0YXRpYy1hc3NldHNcIjtcbmltcG9ydCB7IE5leHRqc1ZwYywgTmV4dGpzVnBjT3ZlcnJpZGVzIH0gZnJvbSBcIi4uL25leHRqcy12cGNcIjtcbmltcG9ydCB7IGhhbmRsZURlcHJlY2F0ZWRQcm9wZXJ0aWVzIH0gZnJvbSBcIi4uL3V0aWxzL2hhbmRsZS1kZXByZWNhdGVkLXByb3BlcnRpZXNcIjtcblxuLyoqXG4gKiBCYXNlIG92ZXJyaWRlcyBmb3IgdGhlIHByb3BzIHBhc3NlZCB0byBjb25zdHJ1Y3RzIHdpdGhpbiByb290L3RvcC1sZXZlbCBOZXh0LmpzIGNvbnN0cnVjdHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOZXh0anNCYXNlQ29uc3RydWN0T3ZlcnJpZGVzIHtcbiAgcmVhZG9ubHkgbmV4dGpzQnVpbGRQcm9wcz86IE9wdGlvbmFsTmV4dGpzQnVpbGRQcm9wcztcbiAgcmVhZG9ubHkgbmV4dGpzVnBjUHJvcHM/OiBPcHRpb25hbE5leHRqc1ZwY1Byb3BzO1xuICByZWFkb25seSBuZXh0anNGaWxlU3lzdGVtUHJvcHM/OiBPcHRpb25hbE5leHRqc0ZpbGVTeXN0ZW1Qcm9wcztcbiAgcmVhZG9ubHkgbmV4dGpzQXNzZXRzRGVwbG95bWVudFByb3BzPzogT3B0aW9uYWxOZXh0anNBc3NldHNEZXBsb3ltZW50UHJvcHM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3lQcm9wcz86IE9wdGlvbmFsTmV4dGpzUG9zdERlcGxveVByb3BzO1xuICByZWFkb25seSBuZXh0anNTdGF0aWNBc3NldHNQcm9wcz86IE5leHRqc1N0YXRpY0Fzc2V0c1Byb3BzO1xufVxuXG4vKipcbiAqIEJhc2Ugb3ZlcnJpZGVzIGZvciBjb25zdHJ1Y3RzIHNoYXJlZCBiZXR3ZWVuIGFsbCByb290L3RvcC1sZXZlbCBOZXh0LmpzIGNvbnN0cnVjdHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQmFzZU92ZXJyaWRlcyB7XG4gIHJlYWRvbmx5IG5leHRqc0J1aWxkPzogTmV4dGpzQnVpbGRPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc0ZpbGVTeXN0ZW0/OiBOZXh0anNGaWxlU3lzdGVtT3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNWcGM/OiBOZXh0anNWcGNPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc0Fzc2V0c0RlcGxveW1lbnQ/OiBOZXh0anNBc3NldERlcGxveW1lbnRPdmVycmlkZXM7XG4gIHJlYWRvbmx5IG5leHRqc1Bvc3REZXBsb3k/OiBOZXh0anNQb3N0RGVwbG95T3ZlcnJpZGVzO1xuICByZWFkb25seSBuZXh0anNTdGF0aWNBc3NldHM/OiBOZXh0anNTdGF0aWNBc3NldHNPdmVycmlkZXM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFByZWZpeCB0byB0aGUgVVJJIHBhdGggdGhlIGFwcCB3aWxsIGJlIHNlcnZlZCBhdC5cbiAgICogQGV4YW1wbGUgXCIvbXktYmFzZS1wYXRoXCJcbiAgICovXG4gIHJlYWRvbmx5IGJhc2VQYXRoPzogc3RyaW5nO1xuICAvKipcbiAgICogQ29tbWFuZCB0byBnZW5lcmF0ZSBvcHRpbWl6ZWQgdmVyc2lvbiBvZiB5b3VyIE5leHQuanMgYXBwIGluIGNvbnRhaW5lcjtcbiAgICogQGRlZmF1bHQgXCJucG0gcnVuIGJ1aWxkXCJcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQ29tbWFuZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFtCdWlsZCBjb250ZXh0XShodHRwczovL2RvY3MuZG9ja2VyLmNvbS9idWlsZC9idWlsZGluZy9jb250ZXh0LykgZm9yXG4gICAqIGBkb2NrZXIgYnVpbGRgLiBUaGlzIGRpcmVjdG9yeSBzaG91bGQgY29udGFpbiB5b3VyIGxvY2tmaWxlIChpLmUuXG4gICAqIHBucG0tbG9jay55YW1sKSBmb3IgeW91ciBOZXh0LmpzIGFwcC4gSWYgeW91J3JlIG5vdCBpbiBhIG1vbm9yZXBvLCB0aGVuXG4gICAqIHRoaXMgd2lsbCBiZSB0aGUgc2FtZSBkaXJlY3RvcnkgYXMgeW91ciBOZXh0LmpzIGFwcC4gSWYgeW91IGFyZSBpbiBhXG4gICAqIG1vbm9yZXBvLCB0aGVuIHRoaXMgdmFsdWUgc2hvdWxkIGJlIHRoZSByb290IG9mIHlvdXIgbW9ub3JlcG8uIFlvdSB0aGVuXG4gICAqIG11c3QgcGFzcyB0aGUgcmVsYXRpdmUgcGF0aCB0byB5b3VyIE5leHQuanMgYXBwIHZpYSB7QGxpbmsgTmV4dGpzQmFzZVByb3BzLnJlbGF0aXZlUGF0aFRvUGFja2FnZX1cbiAgICpcbiAgICogTm90ZSwgYnkgZGVmYXVsdCBjZGstbmV4dGpzJyBgYnVpbGRlci5Eb2NrZXJmaWxlYCBpcyB1c2VkIHRvIGJ1aWxkIHlvdXJcbiAgICogTmV4dC5qcyBhcHAuIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgYnkgc3BlY2lmeWluZyBgb3ZlcnJpZGVzLntuZXh0anMuLi59Lm5leHRqc0J1aWxkUHJvcHMuYnVpbGRlckltYWdlUHJvcHMuZmlsZWAuXG4gICAqIElmIHlvdSBvdmVycmlkZSB0aGUgZGVmYXVsdCwgdGhlbiB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBlbnN1cmluZyB0aGVcbiAgICogRG9ja2VyZmlsZSBpcyBpbiB0aGUgYnVpbGQgY29udGV4dCBkaXJlY3RvcnkgYmVmb3JlIGNkay1uZXh0anMgY29uc3RydWN0XG4gICAqIGlzIGluc3RhbnRpYXRlZC5cbiAgICogQGV4YW1wbGUgam9pbihpbXBvcnQubWV0YS5kaXJuYW1lLCBcIi4uXCIpIChtb25vcmVwbylcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkQ29udGV4dDogc3RyaW5nO1xuICAvKipcbiAgICogUGF0aCB0byBBUEkgUm91dGUgSGFuZGxlciB0aGF0IHJldHVybnMgSFRUUCAyMDAgdG8gZW5zdXJlIGNvbXB1dGUgaGVhbHRoLlxuICAgKiBAZXhhbXBsZSBcIi9hcGkvaGVhbHRoXCJcbiAgICogQGV4YW1wbGVcbiAgICogLy8gYXBpL2hlYWx0aC9yb3V0ZS50c1xuICAgKiBpbXBvcnQgeyBOZXh0UmVzcG9uc2UgfSBmcm9tIFwibmV4dC9zZXJ2ZXJcIjtcbiAgICpcbiAgICogZXhwb3J0IGZ1bmN0aW9uIEdFVCgpIHtcbiAgICogICByZXR1cm4gTmV4dFJlc3BvbnNlLmpzb24oXCJcIik7XG4gICAqIH1cbiAgICovXG4gIHJlYWRvbmx5IGhlYWx0aENoZWNrUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogVXNlIHRoaXMgaWYgYnVpbGRpbmcgaW4gbW9ub3JlcG8uIFRoaXMgaXMgdGhlIHJlbGF0aXZlIHBhdGggZnJvbVxuICAgKiB7QGxpbmsgTmV4dGpzQmFzZVByb3BzLmJ1aWxkQ29udGV4dH0gb3Igcm9vdCB3b3Jrc3BhY2UgdG8gbmVzdGVkIHBhY2thZ2VcbiAgICogY29udGFpbmluZyBOZXh0LmpzIGFwcC4gU2VlIGV4YW1wbGUgYmVsb3c6XG4gICAqXG4gICAqIExldCdzIHNheSB5b3UgaGF2ZSBhIG1vbm9yZXBvIHdpdGggdGhlIGZvbGxvd2luZyBmb2xkZXIgc3RydWN0dXJlOlxuICAgKiAtIG15LW1vbm9yZXBvL1xuICAgKiAgIC0gcGFja2FnZXMvXG4gICAqICAgICAtIHVpL1xuICAgKiAgICAgICAtIHBhY2thZ2UuanNvbiAobmVzdGVkKVxuICAgKiAgIC0gcGFja2FnZS5qc29uIChyb290KVxuICAgKlxuICAgKiBBbmQgeW91ciBOZXh0LmpzIGFwcCBkaXJlY3RvcnkgaXMgdGhlIHVpIGZvbGRlci4gVGhlbiB5b3Ugd291bGQgc2V0IHtAbGluayBOZXh0anNCYXNlUHJvcHMuYnVpbGRDb250ZXh0fVxuICAgKiB0byBgXCIvYWJzb2x1dGUvcGF0aC90by9teS1tb25vcmVwb1wiYCBhbmQge0BsaW5rIE5leHRqc0Jhc2VQcm9wcy5yZWxhdGl2ZVBhdGhUb1BhY2thZ2V9XG4gICAqIHRvIGBcIi4vcGFja2FnZXMvdWlcImAuXG4gICAqXG4gICAqIE5vdGUsIHNldHRpbmcge0BsaW5rIE5leHRqc0Jhc2VQcm9wcy5idWlsZENvbnRleHR9IHRvIHRoZSByb290IG9mIHlvdXJcbiAgICogbW9ub3JlcG8gd2lsbCBpbnZhbGlkYXRlIGNvbnRhaW5lciBydW50aW1lIChpLmUuIGRvY2tlcikgYnVpbGQgY2FjaGUgd2hlbiBhbnkgZmlsZSBpc1xuICAgKiBjaGFuZ2VkIGluIHlvdXIgbW9ub3JlcG8uIFRoaXMgaXMgc2xvd3MgZG93biBkZXBsb3ltZW50cy4gQ2hlY2tvdXQgaG93IHlvdVxuICAgKiBjYW4gdXNlIFt0dXJib10oaHR0cHM6Ly90dXJiby5idWlsZC8pIGluIFtEZXBsb3lpbmcgd2l0aCBEb2NrZXIgR3VpZGVdKGh0dHBzOi8vdHVyYm8uYnVpbGQvcmVwby9kb2NzL2hhbmRib29rL2RlcGxveWluZy13aXRoLWRvY2tlcilcbiAgICogaW4gdGhlIGNkay1uZXh0anMvZXhhbXBsZXMvdHVyYm8uXG4gICAqXG4gICAqIEBleGFtcGxlIFwiLi9wYWNrYWdlcy91aVwiXG4gICAqL1xuICByZWFkb25seSByZWxhdGl2ZVBhdGhUb1BhY2thZ2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgcmVsYXRpdmVQYXRoVG9QYWNrYWdlXG4gICAqL1xuICByZWFkb25seSByZWxhdGl2ZVBhdGhUb1dvcmtzcGFjZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXF1aXJlZCBiZWNhdXNlIGlmIHdlIGFkZCBgb3ZlcnJpZGVzYCBvbnRvIGBOZXh0anNCYXNlUHJvcHNgIHdlIGdldCBqc2lpXG4gKiBlcnJvcjogYEludGVyZmFjZSAuLi4gcmUtZGVjbGFyZXMgbWVtYmVyIFwib3ZlcnJpZGVzXCJgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmV4dGpzQmFzZUNvbnN0cnVjdFByb3BzIGV4dGVuZHMgTmV4dGpzQmFzZVByb3BzIHtcbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogTmV4dGpzQmFzZU92ZXJyaWRlcztcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgTmV4dC5qcyByb290IGNvbnN0cnVjdHNcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE5leHRqc0Jhc2VDb25zdHJ1Y3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBuZXh0anNCdWlsZDogTmV4dGpzQnVpbGQ7XG4gIG5leHRqc1N0YXRpY0Fzc2V0czogTmV4dGpzU3RhdGljQXNzZXRzO1xuICBuZXh0anNWcGM6IE5leHRqc1ZwYztcbiAgbmV4dGpzRmlsZVN5c3RlbTogTmV4dGpzRmlsZVN5c3RlbTtcbiAgbmV4dGpzQXNzZXRzRGVwbG95bWVudDogTmV4dGpzQXNzZXRzRGVwbG95bWVudDtcbiAgbmV4dGpzUG9zdERlcGxveTogTmV4dGpzUG9zdERlcGxveTtcblxuICBhYnN0cmFjdCBnZXQgdXJsKCk6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbmV4dGpzVHlwZTogTmV4dGpzVHlwZTtcbiAgLy8gdXNlIGJhc2VQcm9wcyBpbnN0ZWFkIG9mIHByb3BzIHNvIHRoYXQgY2hpbGQgY2xhc3NlcyBjYW4gdXNlIHByb3BzXG4gIHByb3RlY3RlZCByZWFkb25seSBiYXNlUHJvcHM6IE5leHRqc0Jhc2VDb25zdHJ1Y3RQcm9wcztcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnN0cnVjdE92ZXJyaWRlcz86IE5leHRqc0Jhc2VDb25zdHJ1Y3RPdmVycmlkZXM7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHByb3BzOiBOZXh0anNCYXNlQ29uc3RydWN0UHJvcHMsXG4gICAgbmV4dGpzVHlwZTogTmV4dGpzVHlwZSxcbiAgKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICB0aGlzLmJhc2VQcm9wcyA9IGhhbmRsZURlcHJlY2F0ZWRQcm9wZXJ0aWVzKHByb3BzKTtcbiAgICB0aGlzLm5leHRqc1R5cGUgPSBuZXh0anNUeXBlO1xuICAgIHRoaXMuY29uc3RydWN0T3ZlcnJpZGVzID0gdGhpcy5nZXRDb25zdHJ1Y3RPdmVycmlkZXMobmV4dGpzVHlwZSk7XG5cbiAgICB0aGlzLm5leHRqc0J1aWxkID0gdGhpcy5jcmVhdGVOZXh0anNCdWlsZCgpO1xuICAgIHRoaXMubmV4dGpzU3RhdGljQXNzZXRzID0gdGhpcy5jcmVhdGVOZXh0anNTdGF0aWNBc3NldHMoKTtcbiAgICB0aGlzLm5leHRqc1ZwYyA9IHRoaXMuY3JlYXRlVnBjKCk7XG4gICAgdGhpcy5uZXh0anNGaWxlU3lzdGVtID0gdGhpcy5jcmVhdGVOZXh0anNGaWxlU3lzdGVtKCk7XG4gICAgdGhpcy5uZXh0anNBc3NldHNEZXBsb3ltZW50ID0gdGhpcy5jcmVhdGVOZXh0anNBc3NldHNEZXBsb3ltZW50KCk7XG4gICAgdGhpcy5uZXh0anNQb3N0RGVwbG95ID0gdGhpcy5jcmVhdGVOZXh0anNQb3N0RGVwbG95KCk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgY29uc3RydWN0IG92ZXJyaWRlcyAoaWYgcHJlc2VudCkgb24gcHJvcHMgZm9yIGFueSBgTmV4dGpzVHlwZWBcbiAgICovXG4gIHByaXZhdGUgZ2V0Q29uc3RydWN0T3ZlcnJpZGVzKG5leHRqc1R5cGU6IE5leHRqc1R5cGUpIHtcbiAgICBjb25zdCBuZXh0anNUeXBlVG9LZXk6IFJlY29yZDxOZXh0anNUeXBlLCBzdHJpbmc+ID0ge1xuICAgICAgW05leHRqc1R5cGUuR0xPQkFMX0NPTlRBSU5FUlNdOiBcIm5leHRqc0dsb2JhbENvbnRhaW5lcnNcIixcbiAgICAgIFtOZXh0anNUeXBlLkdMT0JBTF9GVU5DVElPTlNdOiBcIm5leHRqc0dsb2JhbEZ1bmN0aW9uc1wiLFxuICAgICAgW05leHRqc1R5cGUuUkVHSU9OQUxfQ09OVEFJTkVSU106IFwibmV4dGpzUmVnaW9uYWxDb250YWluZXJzXCIsXG4gICAgICBbTmV4dGpzVHlwZS5SRUdJT05BTF9GVU5DVElPTlNdOiBcIm5leHRqc1JlZ2lvbmFsRnVuY3Rpb25zXCIsXG4gICAgfTtcbiAgICBjb25zdCBrZXkgPSBuZXh0anNUeXBlVG9LZXlbbmV4dGpzVHlwZV07XG4gICAgY29uc3Qgb3ZlcnJpZGVzID0gdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzIGFzXG4gICAgICB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBpZiAob3ZlcnJpZGVzICYmIGtleSBpbiBvdmVycmlkZXMpIHtcbiAgICAgIHJldHVybiBvdmVycmlkZXNba2V5XSBhcyBOZXh0anNCYXNlQ29uc3RydWN0T3ZlcnJpZGVzO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0J1aWxkKCk6IE5leHRqc0J1aWxkIHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0J1aWxkKHRoaXMsIFwiTmV4dGpzQnVpbGRcIiwge1xuICAgICAgYnVpbGRDb21tYW5kOiB0aGlzLmJhc2VQcm9wcy5idWlsZENvbW1hbmQsXG4gICAgICBidWlsZENvbnRleHQ6IHRoaXMuYmFzZVByb3BzLmJ1aWxkQ29udGV4dCxcbiAgICAgIG5leHRqc1R5cGU6IHRoaXMubmV4dGpzVHlwZSxcbiAgICAgIHJlbGF0aXZlUGF0aFRvUGFja2FnZTogdGhpcy5iYXNlUHJvcHMucmVsYXRpdmVQYXRoVG9QYWNrYWdlLFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXM/Lm5leHRqc0J1aWxkLFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc0J1aWxkUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc1N0YXRpY0Fzc2V0cygpOiBOZXh0anNTdGF0aWNBc3NldHMge1xuICAgIHJldHVybiBuZXcgTmV4dGpzU3RhdGljQXNzZXRzKHRoaXMsIFwiTmV4dGpzU3RhdGljQXNzZXRzXCIsIHtcbiAgICAgIG92ZXJyaWRlczogdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzPy5uZXh0anNTdGF0aWNBc3NldHMsXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdE92ZXJyaWRlcz8ubmV4dGpzU3RhdGljQXNzZXRzUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVZwYygpOiBOZXh0anNWcGMge1xuICAgIHJldHVybiBuZXcgTmV4dGpzVnBjKHRoaXMsIFwiTmV4dGpzVnBjXCIsIHtcbiAgICAgIG5leHRqc1R5cGU6IHRoaXMubmV4dGpzVHlwZSxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzPy5uZXh0anNWcGMsXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdE92ZXJyaWRlcz8ubmV4dGpzVnBjUHJvcHMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZU5leHRqc0ZpbGVTeXN0ZW0oKTogTmV4dGpzRmlsZVN5c3RlbSB7XG4gICAgcmV0dXJuIG5ldyBOZXh0anNGaWxlU3lzdGVtKHRoaXMsIFwiTmV4dGpzRmlsZVN5c3RlbVwiLCB7XG4gICAgICB2cGM6IHRoaXMubmV4dGpzVnBjLnZwYyxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzPy5uZXh0anNGaWxlU3lzdGVtLFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc0ZpbGVTeXN0ZW1Qcm9wcyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTmV4dGpzQXNzZXRzRGVwbG95bWVudCgpOiBOZXh0anNBc3NldHNEZXBsb3ltZW50IHtcbiAgICByZXR1cm4gbmV3IE5leHRqc0Fzc2V0c0RlcGxveW1lbnQodGhpcywgXCJOZXh0anNBc3NldHNEZXBsb3ltZW50XCIsIHtcbiAgICAgIGFjY2Vzc1BvaW50OiB0aGlzLm5leHRqc0ZpbGVTeXN0ZW0uYWNjZXNzUG9pbnQsXG4gICAgICBiYXNlUGF0aDogdGhpcy5iYXNlUHJvcHMuYmFzZVBhdGgsXG4gICAgICBidWlsZElkOiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSWQsXG4gICAgICBidWlsZEltYWdlRGlnZXN0OiB0aGlzLm5leHRqc0J1aWxkLmJ1aWxkSW1hZ2VEaWdlc3QsXG4gICAgICBkb2NrZXJJbWFnZUNvZGU6IHRoaXMubmV4dGpzQnVpbGQuaW1hZ2VGb3JOZXh0anNBc3NldHNEZXBsb3ltZW50LFxuICAgICAgbmV4dGpzVHlwZTogdGhpcy5uZXh0anNUeXBlLFxuICAgICAgb3ZlcnJpZGVzOiB0aGlzLmJhc2VQcm9wcy5vdmVycmlkZXM/Lm5leHRqc0Fzc2V0c0RlcGxveW1lbnQsXG4gICAgICByZWxhdGl2ZVBhdGhUb1BhY2thZ2U6IHRoaXMuYmFzZVByb3BzLnJlbGF0aXZlUGF0aFRvUGFja2FnZSxcbiAgICAgIHN0YXRpY0Fzc2V0c0J1Y2tldDogdGhpcy5uZXh0anNTdGF0aWNBc3NldHMuYnVja2V0LFxuICAgICAgdnBjOiB0aGlzLm5leHRqc1ZwYy52cGMsXG4gICAgICAuLi50aGlzLmNvbnN0cnVjdE92ZXJyaWRlcz8ubmV4dGpzQXNzZXRzRGVwbG95bWVudFByb3BzLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVOZXh0anNQb3N0RGVwbG95KCk6IE5leHRqc1Bvc3REZXBsb3kge1xuICAgIGNvbnN0IG5leHRqc1Bvc3REZXBsb3kgPSBuZXcgTmV4dGpzUG9zdERlcGxveSh0aGlzLCBcIk5leHRqc1Bvc3REZXBsb3lcIiwge1xuICAgICAgYWNjZXNzUG9pbnQ6IHRoaXMubmV4dGpzRmlsZVN5c3RlbS5hY2Nlc3NQb2ludCxcbiAgICAgIGJ1aWxkSWQ6IHRoaXMubmV4dGpzQnVpbGQuYnVpbGRJZCxcbiAgICAgIGJ1aWxkSW1hZ2VEaWdlc3Q6IHRoaXMubmV4dGpzQnVpbGQuYnVpbGRJbWFnZURpZ2VzdCxcbiAgICAgIG92ZXJyaWRlczogdGhpcy5iYXNlUHJvcHMub3ZlcnJpZGVzPy5uZXh0anNQb3N0RGVwbG95LFxuICAgICAgcmVsYXRpdmVQYXRoVG9QYWNrYWdlOiB0aGlzLmJhc2VQcm9wcy5yZWxhdGl2ZVBhdGhUb1BhY2thZ2UsXG4gICAgICBzdGF0aWNBc3NldHNCdWNrZXQ6IHRoaXMubmV4dGpzU3RhdGljQXNzZXRzLmJ1Y2tldCxcbiAgICAgIHZwYzogdGhpcy5uZXh0anNWcGMudnBjLFxuICAgICAgLi4udGhpcy5jb25zdHJ1Y3RPdmVycmlkZXM/Lm5leHRqc1Bvc3REZXBsb3lQcm9wcyxcbiAgICB9KTtcbiAgICAvLyBlbnN1cmUgTmV4dGpzQXNzZXRzRGVwbG95bWVudCBmaW5pc2hlcyBiZWZvcmUgTmV4dGpzUG9zdERlcGxveVxuICAgIG5leHRqc1Bvc3REZXBsb3kubm9kZS5hZGREZXBlbmRlbmN5KHRoaXMubmV4dGpzQXNzZXRzRGVwbG95bWVudCk7XG4gICAgcmV0dXJuIG5leHRqc1Bvc3REZXBsb3k7XG4gIH1cbn1cbiJdfQ==