projen
Version:
CDK for software projects
183 lines • 22.7 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || (function () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.AwsCdkDeps = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const semver = __importStar(require("semver"));
const component_1 = require("../component");
const dependencies_1 = require("../dependencies");
/**
* Manages dependencies on the AWS CDK.
*/
class AwsCdkDeps extends component_1.Component {
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.awscdk.AwsCdkDeps", version: "0.103.12" };
/**
* The dependency requirement for AWS CDK (e.g. `^2.0.0`).
*/
cdkVersion;
/**
* The dependency requirement for the CDK CLI (e.g. '^2.3.4').
*
* Will return `^2` if the version was unspecified by the user.
*/
cdkCliVersion;
/**
* The minimum version of the AWS CDK (e.g. `2.0.0`).
*/
cdkMinimumVersion;
/**
* The major version of the AWS CDK (e.g. 1, 2, ...)
*/
cdkMajorVersion;
dependencyType;
_packageNames;
constructor(project, options) {
super(project);
this.dependencyType = options.dependencyType;
this._packageNames = this.packageNames();
const framework = determineFrameworkVersion(options);
this.cdkCliVersion = options.cdkCliVersion ?? "^2";
this.cdkVersion = framework.range;
this.cdkMajorVersion = framework.major;
this.cdkMinimumVersion = framework.minimum;
if (this.cdkMajorVersion !== 2) {
throw new Error(`AWS CDK v${this.cdkMajorVersion} is not supported. Use "cdkVersion" 2.x (AWS CDK v1 has reached end-of-support).`);
}
this.addFrameworkDependency();
// constructs library
this.addConstructsDependency(options.constructsVersion);
}
preSynthesize() {
// Log a warning if any AWS CDK v1-only deps are found in the dependencies.
const depNames = Array.from(new Set(this.project.deps.all.map((dep) => dep.name)));
const v1Deps = depNames
.filter((dep) => [PACKAGE_AWS_CDK_VERSION.V1].includes(cdkVersionOfPackage(dep)))
.sort();
if (this.cdkMajorVersion === 2 && v1Deps.length > 0) {
this.project.logger.warn(`WARNING: Found CDK v1 deps in your project, even though your "cdkVersion" is 2.x: [${v1Deps.join(", ")}]. Check out https://docs.aws.amazon.com/cdk/v2/guide/migrating-v2.html for more information about using CDK v2 dependencies.`);
}
}
addConstructsDependency(requestedVersion) {
if (requestedVersion && !semver.parse(requestedVersion)) {
throw new Error(`"constructsVersion" cannot be parsed as a semver version: ${requestedVersion}`);
}
const versionRequirement = `^${requestedVersion ?? "10.5.1"}`;
const constructsMajorVersion = semver.minVersion(versionRequirement)?.major;
if (!constructsMajorVersion) {
throw new Error(`Cannot determine major version of constructs version '${versionRequirement}'`);
}
if (constructsMajorVersion !== 10) {
throw new Error("AWS CDK 2.x requires constructs 10.x");
}
// First remove the version added by projen
this.project.deps.removeDependency("constructs", dependencies_1.DependencyType.BUILD);
// Add the version for CDK
this.project.deps.addDependency(`${this._packageNames.constructs}@${versionRequirement}`, this.dependencyType);
return versionRequirement;
}
/**
* Adds a dependency on the AWS CDK framework (`aws-cdk-lib` for V2).
*/
addFrameworkDependency() {
this.project.deps.addDependency(`${this._packageNames.coreV2}@${this.cdkVersion}`, this.dependencyType);
}
}
exports.AwsCdkDeps = AwsCdkDeps;
/**
* Which AWS CDK version a construct library package belongs to.
*/
var PACKAGE_AWS_CDK_VERSION;
(function (PACKAGE_AWS_CDK_VERSION) {
PACKAGE_AWS_CDK_VERSION["V1"] = "v1";
PACKAGE_AWS_CDK_VERSION["V2"] = "v2";
PACKAGE_AWS_CDK_VERSION["EITHER"] = "either";
PACKAGE_AWS_CDK_VERSION["UNKNOWN"] = "unknown";
})(PACKAGE_AWS_CDK_VERSION || (PACKAGE_AWS_CDK_VERSION = {}));
function cdkVersionOfPackage(packageName) {
if (packageName === "aws-cdk-lib") {
return PACKAGE_AWS_CDK_VERSION.V2;
}
else if (packageName.startsWith("@aws-cdk/")) {
if (packageName.endsWith("-alpha")) {
return PACKAGE_AWS_CDK_VERSION.V2;
}
else if (AWS_CDK_V1_V2_SCOPED_PACKAGES.includes(packageName)) {
return PACKAGE_AWS_CDK_VERSION.EITHER;
}
else {
return PACKAGE_AWS_CDK_VERSION.V1;
}
}
else {
return PACKAGE_AWS_CDK_VERSION.UNKNOWN;
}
}
/**
* A list of all known packages in the "@aws-cdk/" scope that are published
* both for v1 and v2.
*/
const AWS_CDK_V1_V2_SCOPED_PACKAGES = [
// aws/aws-cdk
// @see https://github.com/aws/aws-cdk/tree/main/packages/%40aws-cdk
"@aws-cdk/assert", // EOL package
"@aws-cdk/cfn-property-mixins",
"@aws-cdk/cfnspec", // EOL package
"@aws-cdk/cx-api",
"@aws-cdk/mixins-preview",
"@aws-cdk/region-info",
// aws/aws-cdk-cli
// @see https://github.com/aws/aws-cdk-cli/tree/main/packages/%40aws-cdk
"@aws-cdk/cdk-assets-lib",
"@aws-cdk/cli-plugin-contract",
"@aws-cdk/cloud-assembly-api",
"@aws-cdk/cloud-assembly-schema",
"@aws-cdk/cloudformation-diff",
"@aws-cdk/integ-runner",
"@aws-cdk/toolkit-lib",
];
function determineFrameworkVersion(options) {
const ver = semver.parse(options.cdkVersion);
if (!ver) {
throw new Error(`"cdkVersion" cannot be parsed as a semver version: ${options.cdkVersion}`);
}
return {
minimum: ver.format(),
range: options.cdkVersionPinning
? options.cdkVersion
: `^${options.cdkVersion}`,
major: ver.major,
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzY2RrLWRlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXdzY2RrL2F3c2Nkay1kZXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsNENBQXlDO0FBQ3pDLGtEQUFpRDtBQWtFakQ7O0dBRUc7QUFDSCxNQUFzQixVQUFXLFNBQVEscUJBQVM7O0lBQ2hEOztPQUVHO0lBQ2EsVUFBVSxDQUFTO0lBRW5DOzs7O09BSUc7SUFDYSxhQUFhLENBQVM7SUFFdEM7O09BRUc7SUFDYSxpQkFBaUIsQ0FBUztJQUUxQzs7T0FFRztJQUNhLGVBQWUsQ0FBUztJQUV2QixjQUFjLENBQWlCO0lBRS9CLGFBQWEsQ0FBcUI7SUFFbkQsWUFBWSxPQUFnQixFQUFFLE9BQTBCO1FBQ3RELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUM3QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV6QyxNQUFNLFNBQVMsR0FBRyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDO1FBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsZUFBZSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDdkMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFFM0MsSUFBSSxJQUFJLENBQUMsZUFBZSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sSUFBSSxLQUFLLENBQ2IsWUFBWSxJQUFJLENBQUMsZUFBZSxrRkFBa0YsQ0FDbkgsQ0FBQztRQUNKLENB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RCxPQUFPO1FBQ0wsT0FBTyxFQUFFLEdBQUcsQ0FBQyxNQUFNLEVBQUU7UUFDckIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7WUFDOUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVO1lBQ3BCLENBQUMsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUU7UUFDNUIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO0tBQ2pCLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSBcIi4uL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBgQXdzQ2RrRGVwc2BcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBd3NDZGtEZXBzQ29tbW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNaW5pbXVtIHZlcnNpb24gb2YgdGhlIEFXUyBDREsgdG8gZGVwZW5kIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIjIuMTg5LjFcIlxuICAgKi9cbiAgcmVhZG9ubHkgY2RrVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIHJhbmdlIG9mIHRoZSBBV1MgQ0RLIENMSSB0byBkZXBlbmQgb24uXG4gICAqXG4gICAqIENhbiBiZSBlaXRoZXIgYSBzcGVjaWZpYyB2ZXJzaW9uLCBvciBhbiBOUE0gdmVyc2lvbiByYW5nZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhlIGxhdGVzdCAyLnggdmVyc2lvbiB3aWxsIGJlIGluc3RhbGxlZDsgeW91IGNhbiB1c2UgdGhpc1xuICAgKiBvcHRpb24gdG8gcmVzdHJpY3QgaXQgdG8gYSBzcGVjaWZpYyB2ZXJzaW9uIG9yIHZlcnNpb24gcmFuZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiXjJcIlxuICAgKi9cbiAgcmVhZG9ubHkgY2RrQ2xpVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogTWluaW11bSB2ZXJzaW9uIG9mIHRoZSBgY29uc3RydWN0c2AgbGlicmFyeSB0byBkZXBlbmQgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZm9yIENESyAxLnggdGhlIGRlZmF1bHQgaXMgXCIzLjIuMjdcIiwgZm9yIENESyAyLnggdGhlIGRlZmF1bHQgaXNcbiAgICogXCIxMC41LjFcIi5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnN0cnVjdHNWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgcGlubmVkIHZlcnNpb24gaW5zdGVhZCBvZiBjYXJldCB2ZXJzaW9uIGZvciBDREsuXG4gICAqXG4gICAqIFlvdSBjYW4gdXNlIHRoaXMgdG8gcHJldmVudCBtaXhlZCB2ZXJzaW9ucyBmb3IgeW91ciBDREsgZGVwZW5kZW5jaWVzIGFuZCB0byBwcmV2ZW50IGF1dG8tdXBkYXRlcy5cbiAgICogSWYgeW91IHVzZSBleHBlcmltZW50YWwgZmVhdHVyZXMgdGhpcyB3aWxsIGxldCB5b3UgZGVmaW5lIHRoZSBtb21lbnQgeW91IGluY2x1ZGUgYnJlYWtpbmcgY2hhbmdlcy5cbiAgICovXG4gIHJlYWRvbmx5IGNka1ZlcnNpb25QaW5uaW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBd3NDZGtEZXBzT3B0aW9ucyBleHRlbmRzIEF3c0Nka0RlcHNDb21tb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGRlcGVuZGVuY3kgdG8gdXNlIGZvciBydW50aW1lIEFXUyBDREsgYW5kIGBjb25zdHJ1Y3RzYCBtb2R1bGVzLlxuICAgKlxuICAgKiBGb3IgbGlicmFyaWVzLCB1c2UgcGVlciBkZXBlbmRlbmNpZXMgYW5kIGZvciBhcHBzIHVzZSBydW50aW1lIGRlcGVuZGVuY2llcy5cbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY3lUeXBlOiBEZXBlbmRlbmN5VHlwZTtcbn1cblxuLyoqXG4gKiBMYW5ndWFnZS1zcGVjaWZpYyBBV1MgQ0RLIHBhY2thZ2UgbmFtZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQXdzQ2RrUGFja2FnZU5hbWVzIHtcbiAgLyoqXG4gICAqIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBjb3JlIGZyYW1ld29yayBwYWNrYWdlIGZvciBDREt2MlxuICAgKi9cbiAgcmVhZG9ubHkgY29yZVYyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgY29uc3RydWN0cyBsaWJyYXJ5IHBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IGNvbnN0cnVjdHM6IHN0cmluZztcbn1cblxuLyoqXG4gKiBNYW5hZ2VzIGRlcGVuZGVuY2llcyBvbiB0aGUgQVdTIENESy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEF3c0Nka0RlcHMgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIGRlcGVuZGVuY3kgcmVxdWlyZW1lbnQgZm9yIEFXUyBDREsgKGUuZy4gYF4yLjAuMGApLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNka1ZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlcGVuZGVuY3kgcmVxdWlyZW1lbnQgZm9yIHRoZSBDREsgQ0xJIChlLmcuICdeMi4zLjQnKS5cbiAgICpcbiAgICogV2lsbCByZXR1cm4gYF4yYCBpZiB0aGUgdmVyc2lvbiB3YXMgdW5zcGVjaWZpZWQgYnkgdGhlIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2RrQ2xpVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSB2ZXJzaW9uIG9mIHRoZSBBV1MgQ0RLIChlLmcuIGAyLjAuMGApLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNka01pbmltdW1WZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtYWpvciB2ZXJzaW9uIG9mIHRoZSBBV1MgQ0RLIChlLmcuIDEsIDIsIC4uLilcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjZGtNYWpvclZlcnNpb246IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlcGVuZGVuY3lUeXBlOiBEZXBlbmRlbmN5VHlwZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wYWNrYWdlTmFtZXM6IEF3c0Nka1BhY2thZ2VOYW1lcztcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBBd3NDZGtEZXBzT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy5kZXBlbmRlbmN5VHlwZSA9IG9wdGlvbnMuZGVwZW5kZW5jeVR5cGU7XG4gICAgdGhpcy5fcGFja2FnZU5hbWVzID0gdGhpcy5wYWNrYWdlTmFtZXMoKTtcblxuICAgIGNvbnN0IGZyYW1ld29yayA9IGRldGVybWluZUZyYW1ld29ya1ZlcnNpb24ob3B0aW9ucyk7XG5cbiAgICB0aGlzLmNka0NsaVZlcnNpb24gPSBvcHRpb25zLmNka0NsaVZlcnNpb24gPz8gXCJeMlwiO1xuICAgIHRoaXMuY2RrVmVyc2lvbiA9IGZyYW1ld29yay5yYW5nZTtcbiAgICB0aGlzLmNka01ham9yVmVyc2lvbiA9IGZyYW1ld29yay5tYWpvcjtcbiAgICB0aGlzLmNka01pbmltdW1WZXJzaW9uID0gZnJhbWV3b3JrLm1pbmltdW07XG5cbiAgICBpZiAodGhpcy5jZGtNYWpvclZlcnNpb24gIT09IDIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEFXUyBDREsgdiR7dGhpcy5jZGtNYWpvclZlcnNpb259IGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBcImNka1ZlcnNpb25cIiAyLnggKEFXUyBDREsgdjEgaGFzIHJlYWNoZWQgZW5kLW9mLXN1cHBvcnQpLmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRnJhbWV3b3JrRGVwZW5kZW5jeSgpO1xuXG4gICAgLy8gY29uc3RydWN0cyBsaWJyYXJ5XG4gICAgdGhpcy5hZGRDb25zdHJ1Y3RzRGVwZW5kZW5jeShvcHRpb25zLmNvbnN0cnVjdHNWZXJzaW9uKTtcbiAgfVxuXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCk6IHZvaWQge1xuICAgIC8vIExvZyBhIHdhcm5pbmcgaWYgYW55IEFXUyBDREsgdjEtb25seSBkZXBzIGFyZSBmb3VuZCBpbiB0aGUgZGVwZW5kZW5jaWVzLlxuICAgIGNvbnN0IGRlcE5hbWVzID0gQXJyYXkuZnJvbShcbiAgICAgIG5ldyBTZXQodGhpcy5wcm9qZWN0LmRlcHMuYWxsLm1hcCgoZGVwKSA9PiBkZXAubmFtZSkpLFxuICAgICk7XG4gICAgY29uc3QgdjFEZXBzID0gZGVwTmFtZXNcbiAgICAgIC5maWx0ZXIoKGRlcCkgPT5cbiAgICAgICAgW1BBQ0tBR0VfQVdTX0NES19WRVJTSU9OLlYxXS5pbmNsdWRlcyhjZGtWZXJzaW9uT2ZQYWNrYWdlKGRlcCkpLFxuICAgICAgKVxuICAgICAgLnNvcnQoKTtcbiAgICBpZiAodGhpcy5jZGtNYWpvclZlcnNpb24gPT09IDIgJiYgdjFEZXBzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIud2FybihcbiAgICAgICAgYFdBUk5JTkc6IEZvdW5kIENESyB2MSBkZXBzIGluIHlvdXIgcHJvamVjdCwgZXZlbiB0aG91Z2ggeW91ciBcImNka1ZlcnNpb25cIiBpcyAyLng6IFske3YxRGVwcy5qb2luKFxuICAgICAgICAgIFwiLCBcIixcbiAgICAgICAgKX1dLiBDaGVjayBvdXQgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2Nkay92Mi9ndWlkZS9taWdyYXRpbmctdjIuaHRtbCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB1c2luZyBDREsgdjIgZGVwZW5kZW5jaWVzLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29uc3RydWN0c0RlcGVuZGVuY3kocmVxdWVzdGVkVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHJlcXVlc3RlZFZlcnNpb24gJiYgIXNlbXZlci5wYXJzZShyZXF1ZXN0ZWRWZXJzaW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgXCJjb25zdHJ1Y3RzVmVyc2lvblwiIGNhbm5vdCBiZSBwYXJzZWQgYXMgYSBzZW12ZXIgdmVyc2lvbjogJHtyZXF1ZXN0ZWRWZXJzaW9ufWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHZlcnNpb25SZXF1aXJlbWVudCA9IGBeJHtyZXF1ZXN0ZWRWZXJzaW9uID8/IFwiMTAuNS4xXCJ9YDtcblxuICAgIGNvbnN0IGNvbnN0cnVjdHNNYWpvclZlcnNpb24gPSBzZW12ZXIubWluVmVyc2lvbih2ZXJzaW9uUmVxdWlyZW1lbnQpPy5tYWpvcjtcbiAgICBpZiAoIWNvbnN0cnVjdHNNYWpvclZlcnNpb24pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYENhbm5vdCBkZXRlcm1pbmUgbWFqb3IgdmVyc2lvbiBvZiBjb25zdHJ1Y3RzIHZlcnNpb24gJyR7dmVyc2lvblJlcXVpcmVtZW50fSdgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoY29uc3RydWN0c01ham9yVmVyc2lvbiAhPT0gMTApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkFXUyBDREsgMi54IHJlcXVpcmVzIGNvbnN0cnVjdHMgMTAueFwiKTtcbiAgICB9XG5cbiAgICAvLyBGaXJzdCByZW1vdmUgdGhlIHZlcnNpb24gYWRkZWQgYnkgcHJvamVuXG4gICAgdGhpcy5wcm9qZWN0LmRlcHMucmVtb3ZlRGVwZW5kZW5jeShcImNvbnN0cnVjdHNcIiwgRGVwZW5kZW5jeVR5cGUuQlVJTEQpO1xuXG4gICAgLy8gQWRkIHRoZSB2ZXJzaW9uIGZvciBDREtcbiAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KFxuICAgICAgYCR7dGhpcy5fcGFja2FnZU5hbWVzLmNvbnN0cnVjdHN9QCR7dmVyc2lvblJlcXVpcmVtZW50fWAsXG4gICAgICB0aGlzLmRlcGVuZGVuY3lUeXBlLFxuICAgICk7XG5cbiAgICByZXR1cm4gdmVyc2lvblJlcXVpcmVtZW50O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBkZXBlbmRlbmN5IG9uIHRoZSBBV1MgQ0RLIGZyYW1ld29yayAoYGF3cy1jZGstbGliYCBmb3IgVjIpLlxuICAgKi9cbiAgcHJpdmF0ZSBhZGRGcmFtZXdvcmtEZXBlbmRlbmN5KCkge1xuICAgIHRoaXMucHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koXG4gICAgICBgJHt0aGlzLl9wYWNrYWdlTmFtZXMuY29yZVYyfUAke3RoaXMuY2RrVmVyc2lvbn1gLFxuICAgICAgdGhpcy5kZXBlbmRlbmN5VHlwZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgcGFja2FnZSBuYW1pbmcgaW4gdmFyaW91cyBsYW5ndWFnZXNcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwYWNrYWdlTmFtZXMoKTogQXdzQ2RrUGFja2FnZU5hbWVzO1xufVxuXG4vKipcbiAqIFdoaWNoIEFXUyBDREsgdmVyc2lvbiBhIGNvbnN0cnVjdCBsaWJyYXJ5IHBhY2thZ2UgYmVsb25ncyB0by5cbiAqL1xuZW51bSBQQUNLQUdFX0FXU19DREtfVkVSU0lPTiB7XG4gIFYxID0gXCJ2MVwiLFxuICBWMiA9IFwidjJcIixcbiAgRUlUSEVSID0gXCJlaXRoZXJcIiwgLy8gVGhpcyBwYWNrYWdlIGhhcyBiZWVuIHB1Ymxpc2hlZCBib3RoIGZvciB2MSBhbmQgdjIuXG4gIFVOS05PV04gPSBcInVua25vd25cIixcbn1cblxuZnVuY3Rpb24gY2RrVmVyc2lvbk9mUGFja2FnZShwYWNrYWdlTmFtZTogc3RyaW5nKSB7XG4gIGlmIChwYWNrYWdlTmFtZSA9PT0gXCJhd3MtY2RrLWxpYlwiKSB7XG4gICAgcmV0dXJuIFBBQ0tBR0VfQVdTX0NES19WRVJTSU9OLlYyO1xuICB9IGVsc2UgaWYgKHBhY2thZ2VOYW1lLnN0YXJ0c1dpdGgoXCJAYXdzLWNkay9cIikpIHtcbiAgICBpZiAocGFja2FnZU5hbWUuZW5kc1dpdGgoXCItYWxwaGFcIikpIHtcbiAgICAgIHJldHVybiBQQUNLQUdFX0FXU19DREtfVkVSU0lPTi5WMjtcbiAgICB9IGVsc2UgaWYgKEFXU19DREtfVjFfVjJfU0NPUEVEX1BBQ0tBR0VTLmluY2x1ZGVzKHBhY2thZ2VOYW1lKSkge1xuICAgICAgcmV0dXJuIFBBQ0tBR0VfQVdTX0NES19WRVJTSU9OLkVJVEhFUjtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFBBQ0tBR0VfQVdTX0NES19WRVJTSU9OLlYxO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gUEFDS0FHRV9BV1NfQ0RLX1ZFUlNJT04uVU5LTk9XTjtcbiAgfVxufVxuXG4vKipcbiAqIEEgbGlzdCBvZiBhbGwga25vd24gcGFja2FnZXMgaW4gdGhlIFwiQGF3cy1jZGsvXCIgc2NvcGUgdGhhdCBhcmUgcHVibGlzaGVkXG4gKiBib3RoIGZvciB2MSBhbmQgdjIuXG4gKi9cbmNvbnN0IEFXU19DREtfVjFfVjJfU0NPUEVEX1BBQ0tBR0VTID0gW1xuICAvLyBhd3MvYXdzLWNka1xuICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay90cmVlL21haW4vcGFja2FnZXMvJTQwYXdzLWNka1xuICBcIkBhd3MtY2RrL2Fzc2VydFwiLCAvLyBFT0wgcGFja2FnZVxuICBcIkBhd3MtY2RrL2Nmbi1wcm9wZXJ0eS1taXhpbnNcIixcbiAgXCJAYXdzLWNkay9jZm5zcGVjXCIsIC8vIEVPTCBwYWNrYWdlXG4gIFwiQGF3cy1jZGsvY3gtYXBpXCIsXG4gIFwiQGF3cy1jZGsvbWl4aW5zLXByZXZpZXdcIixcbiAgXCJAYXdzLWNkay9yZWdpb24taW5mb1wiLFxuXG4gIC8vIGF3cy9hd3MtY2RrLWNsaVxuICAvLyBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay1jbGkvdHJlZS9tYWluL3BhY2thZ2VzLyU0MGF3cy1jZGtcbiAgXCJAYXdzLWNkay9jZGstYXNzZXRzLWxpYlwiLFxuICBcIkBhd3MtY2RrL2NsaS1wbHVnaW4tY29udHJhY3RcIixcbiAgXCJAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGlcIixcbiAgXCJAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWFcIixcbiAgXCJAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmXCIsXG4gIFwiQGF3cy1jZGsvaW50ZWctcnVubmVyXCIsXG4gIFwiQGF3cy1jZGsvdG9vbGtpdC1saWJcIixcbl07XG5cbmZ1bmN0aW9uIGRldGVybWluZUZyYW1ld29ya1ZlcnNpb24ob3B0aW9uczogQXdzQ2RrRGVwc09wdGlvbnMpIHtcbiAgY29uc3QgdmVyID0gc2VtdmVyLnBhcnNlKG9wdGlvbnMuY2RrVmVyc2lvbik7XG4gIGlmICghdmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFwiY2RrVmVyc2lvblwiIGNhbm5vdCBiZSBwYXJzZWQgYXMgYSBzZW12ZXIgdmVyc2lvbjogJHtvcHRpb25zLmNka1ZlcnNpb259YCxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtaW5pbXVtOiB2ZXIuZm9ybWF0KCksXG4gICAgcmFuZ2U6IG9wdGlvbnMuY2RrVmVyc2lvblBpbm5pbmdcbiAgICAgID8gb3B0aW9ucy5jZGtWZXJzaW9uXG4gICAgICA6IGBeJHtvcHRpb25zLmNka1ZlcnNpb259YCxcbiAgICBtYWpvcjogdmVyLm1ham9yLFxuICB9O1xufVxuIl19