projen
Version:
CDK for software projects
154 lines • 25.8 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.Cdk8sDeps = 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 CDK8s.
*/
class Cdk8sDeps extends component_1.Component {
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.cdk8s.Cdk8sDeps", version: "0.103.12" };
/**
* The dependency requirement for CDK8s.
*/
cdk8sVersion;
/**
* The minimum version of the CDK8s (e.g. `2.0.0`)
*/
cdk8sMinimumVersion;
/**
* The major version of the CDK8s (e.g. 1, 2, ...)
*/
cdk8sMajorVersion;
dependencyType;
_packageNames;
constructor(project, options) {
super(project);
this.dependencyType = options.dependencyType;
this._packageNames = this.packageNames();
const framework = determineFrameworkVersion(options);
this.cdk8sVersion = framework.range;
this.cdk8sMajorVersion = framework.major;
this.cdk8sMinimumVersion = framework.minimum;
// constructs library
this.addConstructsDependency(options.constructsVersion, options.constructsVersionPinning);
this.addFrameworkDependency(options.cdk8sVersion, options.cdk8sVersionPinning);
if (options.cdk8sCliDependency) {
this.addClientDependency(options.cdk8sCliVersion, options.cdk8sCliVersionPinning);
}
if (options.cdk8sPlus ?? true) {
const k8MinorVersion = options.k8sMinorVersion ?? 22;
this.addCdk8sPlusDependency(k8MinorVersion, options.cdk8sPlusVersion,
// (project instanceof Cdk8sPythonApp) ? true : false,
options.cdk8sPlusVersionPinning);
}
}
getVersionRequirement(requestedVersion, v1Version, v2Version, pinning) {
const defaultVersion = this.cdk8sMajorVersion === 1 ? v1Version : v2Version;
const version = `${requestedVersion ?? defaultVersion}`;
const versionRequirement = pinning ? `${version}` : `^${version}`;
return versionRequirement;
}
addCdk8sPlusDependency(k8MinorVersion, requestedVersion, pinning) {
const versionRequirement = this.getVersionRequirement(requestedVersion, "1.0.0-beta.222", "2.0.0-rc.26", pinning);
const cdk8sPlusMajorVersion = semver.minVersion(versionRequirement)?.major;
if (!cdk8sPlusMajorVersion) {
throw new Error(`Cannot determine major version of cdk8s-plus version '${versionRequirement}'`);
}
const cdk8sPlusLib = this._packageNames.cdk8sPlus.concat("-", k8MinorVersion.toString());
this.project.deps.addDependency(`${cdk8sPlusLib}@${versionRequirement}`, this.dependencyType);
return versionRequirement;
}
addClientDependency(requestedVersion, pinning) {
const versionRequirement = this.getVersionRequirement(requestedVersion, "1.1.34", "2.0.28", pinning);
const cdk8sCliMajorVersion = semver.minVersion(versionRequirement)?.major;
if (!cdk8sCliMajorVersion) {
throw new Error(`Cannot determine major version of cdk8s version '${versionRequirement}'`);
}
this.project.deps.addDependency(`${this._packageNames.cdk8sClient}@${versionRequirement}`, dependencies_1.DependencyType.BUILD);
return versionRequirement;
}
addFrameworkDependency(requestedVersion, pinning) {
const versionRequirement = this.getVersionRequirement(requestedVersion, "1.6.33", "2.3.33", pinning);
const cdk8sMajorVersion = semver.minVersion(versionRequirement)?.major;
if (!cdk8sMajorVersion) {
throw new Error(`Cannot determine major version of cdk8s version '${versionRequirement}'`);
}
this.project.deps.addDependency(`${this._packageNames.cdk8s}@${versionRequirement}`, this.dependencyType);
return versionRequirement;
}
addConstructsDependency(requestedVersion, pinning) {
if (requestedVersion && !semver.parse(requestedVersion)) {
throw new Error(`"constructsVersion" cannot be parsed as a semver version: ${requestedVersion}`);
}
const versionRequirement = this.getVersionRequirement(requestedVersion, "3.4.39", "10.1.42", pinning);
const constructsMajorVersion = semver.minVersion(versionRequirement)?.major;
if (!constructsMajorVersion) {
throw new Error(`Cannot determine major version of constructs version '${versionRequirement}'`);
}
switch (this.cdk8sMajorVersion) {
case 1:
if (constructsMajorVersion !== 3) {
throw new Error("AWS CDK 1.x requires constructs 3.x");
}
break;
case 2:
if (constructsMajorVersion !== 10) {
throw new Error("AWS CDK 2.x requires constructs 10.x");
}
break;
}
this.project.deps.addDependency(`${this._packageNames.constructs}@${versionRequirement}`, this.dependencyType);
return versionRequirement;
}
}
exports.Cdk8sDeps = Cdk8sDeps;
function determineFrameworkVersion(options) {
const ver = semver.parse(options.cdk8sVersion);
if (!ver) {
throw new Error(`"cdk8sVersion" cannot be parsed as a semver version: ${options.cdk8sVersion}`);
}
return {
minimum: ver.format(),
range: options.cdk8sVersionPinning
? options.cdk8sVersion
: `^${options.cdk8sVersion}`,
major: ver.major,
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrOHMtZGVwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jZGs4cy9jZGs4cy1kZXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQ0FBaUM7QUFDakMsNENBQXlDO0FBQ3pDLGtEQUFpRDtBQWdJakQ7O0dBRUc7QUFDSCxNQUFzQixTQUFVLFNBQVEscUJBQVM7O0lBQy9DOztPQUVHO0lBQ2EsWUFBWSxDQUFTO0lBRXJDOztPQUVHO0lBQ2EsbUJBQW1CLENBQVM7SUFFNUM7O09BRUc7SUFDYSxpQkFBaUIsQ0FBUztJQUV6QixjQUFjLENBQWlCO0lBRS9CLGFBQWEsQ0FBb0I7SUFFbEQsWUFBWSxPQUFnQixFQUFFLE9BQXlCO1FBQ3JELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztRQUM3QyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUV6QyxNQUFNLFNBQVMsR0FBRyx5QkFBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVyRCxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDcEMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7UUFDekMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUM7UUFFN0MscUJBQXFCO1FBQ3JCLElBQUksQ0FBQyx1QkFBdUIsQ0FDMUIsT0FBTyxDQUFDLGlCQUFpQixFQUN6QixPQUFPLENBQUMsd0JBQXdCLENBQ2pDLENBQUM7UUFFRixJQUFJLENBQUMsc0JBQXNCLENBQ3pCLE9BQU8sQ0FBQyxZQUFZLEVBQ3BCLE9BQU8sQ0FBQyxtQkFBbUIsQ0FDNUIsQ0FBQztRQUVGLElBQUksT0FBTyxDQUFDLGtCQUFrQixFQUFF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Q0QsTUFBTTtZQUVSLEtBQUssQ0FBQztnQkFDSixJQUFJLHNCQUFzQixLQUFLLEVBQUUsRUFBRSxDQUFDO29CQUNsQyxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7Z0JBQzFELENBQUM7Z0JBQ0QsTUFBTTtRQUNWLENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQzdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLElBQUksa0JBQWtCLEVBQUUsRUFDeEQsSUFBSSxDQUFDLGNBQWMsQ0FDcEIsQ0FBQztRQUVGLE9BQU8sa0JBQWtCLENBQUM7SUFDNUIsQ0FBQzs7QUE3TUgsOEJBOE1DO0FBRUQsU0FBUyx5QkFBeUIsQ0FBQyxPQUF5QjtJQUMxRCxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUMvQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDVCxNQUFNLElBQUksS0FBSyxDQUNiLHdEQUF3RCxPQUFPLENBQUMsWUFBWSxFQUFFLENBQy9FLENBQUM7SUFDSixDQUFDO0lBRUQsT0FBTztRQUNMLE9BQU8sRUFBRSxHQUFHLENBQUMsTUFBTSxFQUFFO1FBQ3JCLEtBQUssRUFBRSxPQUFPLENBQUMsbUJBQW1CO1lBQ2hDLENBQUMsQ0FBQyxPQUFPLENBQUMsWUFBWTtZQUN0QixDQUFDLENBQUMsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFO1FBQzlCLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztLQUNqQixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHNlbXZlciBmcm9tIFwic2VtdmVyXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSB9IGZyb20gXCIuLi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYENkazhzRGVwc2BcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZGs4c0RlcHNDb21tb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIE1pbmltdW0gdmVyc2lvbiBvZiB0aGUgY2RrOHMgdG8gZGVwZW5kIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIjIuMy4zM1wiXG4gICAqL1xuICByZWFkb25seSBjZGs4c1ZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogTWluaW11bSB2ZXJzaW9uIG9mIHRoZSBjZGs4cy1jbGkgdG8gZGVwZW5kIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIjIuMC4yOFwiXG4gICAqL1xuICByZWFkb25seSBjZGs4c0NsaVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gdmVyc2lvbiBvZiB0aGUgYGNvbnN0cnVjdHNgIGxpYnJhcnkgdG8gZGVwZW5kIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIjEwLjEuNDJcIlxuICAgKi9cbiAgcmVhZG9ubHkgY29uc3RydWN0c1ZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSBwaW5uZWQgdmVyc2lvbiBpbnN0ZWFkIG9mIGNhcmV0IHZlcnNpb24gZm9yIGNkazhzLlxuICAgKlxuICAgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIHByZXZlbnQgeWFybiB0byBtaXggdmVyc2lvbnMgZm9yIHlvdXIgQ0RLOHMgcGFja2FnZSBhbmQgdG8gcHJldmVudCBhdXRvLXVwZGF0ZXMuXG4gICAqIElmIHlvdSB1c2UgZXhwZXJpbWVudGFsIGZlYXR1cmVzIHRoaXMgd2lsbCBsZXQgeW91IGRlZmluZSB0aGUgbW9tZW50IHlvdSBpbmNsdWRlIGJyZWFraW5nIGNoYW5nZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjZGs4c1ZlcnNpb25QaW5uaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlIHBpbm5lZCB2ZXJzaW9uIGluc3RlYWQgb2YgY2FyZXQgdmVyc2lvbiBmb3IgY2RrOHMtY2xpLlxuICAgKlxuICAgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIHByZXZlbnQgeWFybiB0byBtaXggdmVyc2lvbnMgZm9yIHlvdXIgQ0RLOHMgcGFja2FnZSBhbmQgdG8gcHJldmVudCBhdXRvLXVwZGF0ZXMuXG4gICAqIElmIHlvdSB1c2UgZXhwZXJpbWVudGFsIGZlYXR1cmVzIHRoaXMgd2lsbCBsZXQgeW91IGRlZmluZSB0aGUgbW9tZW50IHlvdSBpbmNsdWRlIGJyZWFraW5nIGNoYW5nZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjZGs4c0NsaVZlcnNpb25QaW5uaW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlIHBpbm5lZCB2ZXJzaW9uIGluc3RlYWQgb2YgY2FyZXQgdmVyc2lvbiBmb3IgY29uc3RydWN0cy5cbiAgICpcbiAgICogWW91IGNhbiB1c2UgdGhpcyB0byBwcmV2ZW50IHlhcm4gdG8gbWl4IHZlcnNpb25zIGZvciB5b3VyIGNvbnNydWN0cyBwYWNrYWdlIGFuZCB0byBwcmV2ZW50IGF1dG8tdXBkYXRlcy5cbiAgICogSWYgeW91IHVzZSBleHBlcmltZW50YWwgZmVhdHVyZXMgdGhpcyB3aWxsIGxldCB5b3UgZGVmaW5lIHRoZSBtb21lbnQgeW91IGluY2x1ZGUgYnJlYWtpbmcgY2hhbmdlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNvbnN0cnVjdHNWZXJzaW9uUGlubmluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgY2RrOHMtcGx1c1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjZGs4c1BsdXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgY2RrOHMtcGx1cyBsaWJyYXJ5IGRlcGVuZHMgb2YgS3ViZXJuZXRlcyBtaW5vciB2ZXJzaW9uXG4gICAqIEZvciBleGFtcGxlLCBjZGs4cy1wbHVzLTIyIHRhcmdldHMga3ViZXJuZXRlcyB2ZXJzaW9uIDEuMjIuMFxuICAgKiBjZGs4cy1wbHVzLTIxIHRhcmdldHMga3ViZXJuZXRlcyB2ZXJzaW9uIDEuMjEuMFxuICAgKlxuICAgKiBAZGVmYXVsdCAyMlxuICAgKi9cbiAgcmVhZG9ubHkgazhzTWlub3JWZXJzaW9uPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIHZlcnNpb24gb2YgdGhlIGNkazhzLXBsdXMtWFggdG8gZGVwZW5kIG9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIjIuMC4wLXJjLjI2XCJcbiAgICovXG4gIHJlYWRvbmx5IGNkazhzUGx1c1ZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVzZSBwaW5uZWQgdmVyc2lvbiBpbnN0ZWFkIG9mIGNhcmV0IHZlcnNpb24gZm9yIGNkazhzLXBsdXMtMTcuXG4gICAqXG4gICAqIFlvdSBjYW4gdXNlIHRoaXMgdG8gcHJldmVudCB5YXJuIHRvIG1peCB2ZXJzaW9ucyBmb3IgeW91ciBDREs4cyBwYWNrYWdlIGFuZCB0byBwcmV2ZW50IGF1dG8tdXBkYXRlcy5cbiAgICogSWYgeW91IHVzZSBleHBlcmltZW50YWwgZmVhdHVyZXMgdGhpcyB3aWxsIGxldCB5b3UgZGVmaW5lIHRoZSBtb21lbnQgeW91IGluY2x1ZGUgYnJlYWtpbmcgY2hhbmdlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNkazhzUGx1c1ZlcnNpb25QaW5uaW5nPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZGs4c0RlcHNPcHRpb25zIGV4dGVuZHMgQ2RrOHNEZXBzQ29tbW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBkZXBlbmRlbmN5IHRvIHVzZSBmb3IgcnVudGltZSBDREs4cyBhbmQgYGNvbnN0cnVjdHNgIG1vZHVsZXMuXG4gICAqXG4gICAqIEZvciBsaWJyYXJpZXMsIHVzZSBwZWVyIGRlcGVuZGVuY2llcyBhbmQgZm9yIGFwcHMgdXNlIHJ1bnRpbWUgZGVwZW5kZW5jaWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jeVR5cGU6IERlcGVuZGVuY3lUeXBlO1xuXG4gIC8qKlxuICAgKiBBZGQgY2RrOHMtY2xpIG9ubHkgdG8gTm9kZSBwcm9qZWN0c1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2RrOHNDbGlEZXBlbmRlbmN5OiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENkazhzUGFja2FnZU5hbWVzIHtcbiAgLyoqXG4gICAqIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBjb3JlIGZyYW1ld29yayBwYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBjZGs4czogc3RyaW5nO1xuICAvKipcbiAgICogRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGNsaWVudCBwYWNrYWdlLlxuICAgKiBVc2VkIG9ubHkgb24gTm9kZSBwcm9qZWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgY2RrOHNDbGllbnQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgY29uc3RydWN0cyBsaWJyYXJ5IHBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IGNvbnN0cnVjdHM6IHN0cmluZztcbiAgLyoqXG4gICAqIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBjZGs5cy1wbHVzLVhYIGxpYnJhcnkgcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgY2RrOHNQbHVzOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTWFuYWdlcyBkZXBlbmRlbmNpZXMgb24gdGhlIENESzhzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2RrOHNEZXBzIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSBkZXBlbmRlbmN5IHJlcXVpcmVtZW50IGZvciBDREs4cy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjZGs4c1ZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gdmVyc2lvbiBvZiB0aGUgQ0RLOHMgKGUuZy4gYDIuMC4wYClcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjZGs4c01pbmltdW1WZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtYWpvciB2ZXJzaW9uIG9mIHRoZSBDREs4cyAoZS5nLiAxLCAyLCAuLi4pXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2RrOHNNYWpvclZlcnNpb246IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlcGVuZGVuY3lUeXBlOiBEZXBlbmRlbmN5VHlwZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9wYWNrYWdlTmFtZXM6IENkazhzUGFja2FnZU5hbWVzO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IENkazhzRGVwc09wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMuZGVwZW5kZW5jeVR5cGUgPSBvcHRpb25zLmRlcGVuZGVuY3lUeXBlO1xuICAgIHRoaXMuX3BhY2thZ2VOYW1lcyA9IHRoaXMucGFja2FnZU5hbWVzKCk7XG5cbiAgICBjb25zdCBmcmFtZXdvcmsgPSBkZXRlcm1pbmVGcmFtZXdvcmtWZXJzaW9uKG9wdGlvbnMpO1xuXG4gICAgdGhpcy5jZGs4c1ZlcnNpb24gPSBmcmFtZXdvcmsucmFuZ2U7XG4gICAgdGhpcy5jZGs4c01ham9yVmVyc2lvbiA9IGZyYW1ld29yay5tYWpvcjtcbiAgICB0aGlzLmNkazhzTWluaW11bVZlcnNpb24gPSBmcmFtZXdvcmsubWluaW11bTtcblxuICAgIC8vIGNvbnN0cnVjdHMgbGlicmFyeVxuICAgIHRoaXMuYWRkQ29uc3RydWN0c0RlcGVuZGVuY3koXG4gICAgICBvcHRpb25zLmNvbnN0cnVjdHNWZXJzaW9uLFxuICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RzVmVyc2lvblBpbm5pbmcsXG4gICAgKTtcblxuICAgIHRoaXMuYWRkRnJhbWV3b3JrRGVwZW5kZW5jeShcbiAgICAgIG9wdGlvbnMuY2RrOHNWZXJzaW9uLFxuICAgICAgb3B0aW9ucy5jZGs4c1ZlcnNpb25QaW5uaW5nLFxuICAgICk7XG5cbiAgICBpZiAob3B0aW9ucy5jZGs4c0NsaURlcGVuZGVuY3kpIHtcbiAgICAgIHRoaXMuYWRkQ2xpZW50RGVwZW5kZW5jeShcbiAgICAgICAgb3B0aW9ucy5jZGs4c0NsaVZlcnNpb24sXG4gICAgICAgIG9wdGlvbnMuY2RrOHNDbGlWZXJzaW9uUGlubmluZyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY2RrOHNQbHVzID8/IHRydWUpIHtcbiAgICAgIGNvbnN0IGs4TWlub3JWZXJzaW9uID0gb3B0aW9ucy5rOHNNaW5vclZlcnNpb24gPz8gMjI7XG4gICAgICB0aGlzLmFkZENkazhzUGx1c0RlcGVuZGVuY3koXG4gICAgICAgIGs4TWlub3JWZXJzaW9uLFxuICAgICAgICBvcHRpb25zLmNkazhzUGx1c1ZlcnNpb24sXG4gICAgICAgIC8vIChwcm9qZWN0IGluc3RhbmNlb2YgQ2RrOHNQeXRob25BcHApID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICBvcHRpb25zLmNkazhzUGx1c1ZlcnNpb25QaW5uaW5nLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGEgY29uZmlndXJhdGlvbiBvYmplY3Qgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdlIG5hbWluZyBpbiB2YXJpb3VzIGxhbmd1YWdlc1xuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHBhY2thZ2VOYW1lcygpOiBDZGs4c1BhY2thZ2VOYW1lcztcblxuICBwcml2YXRlIGdldFZlcnNpb25SZXF1aXJlbWVudChcbiAgICByZXF1ZXN0ZWRWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgdjFWZXJzaW9uOiBzdHJpbmcsXG4gICAgdjJWZXJzaW9uOiBzdHJpbmcsXG4gICAgcGlubmluZz86IGJvb2xlYW4sXG4gICkge1xuICAgIGNvbnN0IGRlZmF1bHRWZXJzaW9uID0gdGhpcy5jZGs4c01ham9yVmVyc2lvbiA9PT0gMSA/IHYxVmVyc2lvbiA6IHYyVmVyc2lvbjtcbiAgICBjb25zdCB2ZXJzaW9uID0gYCR7cmVxdWVzdGVkVmVyc2lvbiA/PyBkZWZhdWx0VmVyc2lvbn1gO1xuICAgIGNvbnN0IHZlcnNpb25SZXF1aXJlbWVudCA9IHBpbm5pbmcgPyBgJHt2ZXJzaW9ufWAgOiBgXiR7dmVyc2lvbn1gO1xuICAgIHJldHVybiB2ZXJzaW9uUmVxdWlyZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGFkZENkazhzUGx1c0RlcGVuZGVuY3koXG4gICAgazhNaW5vclZlcnNpb246IG51bWJlcixcbiAgICByZXF1ZXN0ZWRWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcGlubmluZz86IGJvb2xlYW4sXG4gICkge1xuICAgIGNvbnN0IHZlcnNpb25SZXF1aXJlbWVudCA9IHRoaXMuZ2V0VmVyc2lvblJlcXVpcmVtZW50KFxuICAgICAgcmVxdWVzdGVkVmVyc2lvbixcbiAgICAgIFwiMS4wLjAtYmV0YS4yMjJcIixcbiAgICAgIFwiMi4wLjAtcmMuMjZcIixcbiAgICAgIHBpbm5pbmcsXG4gICAgKTtcblxuICAgIGNvbnN0IGNkazhzUGx1c01ham9yVmVyc2lvbiA9IHNlbXZlci5taW5WZXJzaW9uKHZlcnNpb25SZXF1aXJlbWVudCk/Lm1ham9yO1xuICAgIGlmICghY2RrOHNQbHVzTWFqb3JWZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgZGV0ZXJtaW5lIG1ham9yIHZlcnNpb24gb2YgY2RrOHMtcGx1cyB2ZXJzaW9uICcke3ZlcnNpb25SZXF1aXJlbWVudH0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY2RrOHNQbHVzTGliID0gdGhpcy5fcGFja2FnZU5hbWVzLmNkazhzUGx1cy5jb25jYXQoXG4gICAgICBcIi1cIixcbiAgICAgIGs4TWlub3JWZXJzaW9uLnRvU3RyaW5nKCksXG4gICAgKTtcbiAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KFxuICAgICAgYCR7Y2RrOHNQbHVzTGlifUAke3ZlcnNpb25SZXF1aXJlbWVudH1gLFxuICAgICAgdGhpcy5kZXBlbmRlbmN5VHlwZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHZlcnNpb25SZXF1aXJlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ2xpZW50RGVwZW5kZW5jeShcbiAgICByZXF1ZXN0ZWRWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcGlubmluZz86IGJvb2xlYW4sXG4gICkge1xuICAgIGNvbnN0IHZlcnNpb25SZXF1aXJlbWVudCA9IHRoaXMuZ2V0VmVyc2lvblJlcXVpcmVtZW50KFxuICAgICAgcmVxdWVzdGVkVmVyc2lvbixcbiAgICAgIFwiMS4xLjM0XCIsXG4gICAgICBcIjIuMC4yOFwiLFxuICAgICAgcGlubmluZyxcbiAgICApO1xuXG4gICAgY29uc3QgY2RrOHNDbGlNYWpvclZlcnNpb24gPSBzZW12ZXIubWluVmVyc2lvbih2ZXJzaW9uUmVxdWlyZW1lbnQpPy5tYWpvcjtcbiAgICBpZiAoIWNkazhzQ2xpTWFqb3JWZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgZGV0ZXJtaW5lIG1ham9yIHZlcnNpb24gb2YgY2RrOHMgdmVyc2lvbiAnJHt2ZXJzaW9uUmVxdWlyZW1lbnR9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koXG4gICAgICBgJHt0aGlzLl9wYWNrYWdlTmFtZXMuY2RrOHNDbGllbnR9QCR7dmVyc2lvblJlcXVpcmVtZW50fWAsXG4gICAgICBEZXBlbmRlbmN5VHlwZS5CVUlMRCxcbiAgICApO1xuXG4gICAgcmV0dXJuIHZlcnNpb25SZXF1aXJlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkRnJhbWV3b3JrRGVwZW5kZW5jeShcbiAgICByZXF1ZXN0ZWRWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcGlubmluZz86IGJvb2xlYW4sXG4gICkge1xuICAgIGNvbnN0IHZlcnNpb25SZXF1aXJlbWVudCA9IHRoaXMuZ2V0VmVyc2lvblJlcXVpcmVtZW50KFxuICAgICAgcmVxdWVzdGVkVmVyc2lvbixcbiAgICAgIFwiMS42LjMzXCIsXG4gICAgICBcIjIuMy4zM1wiLFxuICAgICAgcGlubmluZyxcbiAgICApO1xuXG4gICAgY29uc3QgY2RrOHNNYWpvclZlcnNpb24gPSBzZW12ZXIubWluVmVyc2lvbih2ZXJzaW9uUmVxdWlyZW1lbnQpPy5tYWpvcjtcbiAgICBpZiAoIWNkazhzTWFqb3JWZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgZGV0ZXJtaW5lIG1ham9yIHZlcnNpb24gb2YgY2RrOHMgdmVyc2lvbiAnJHt2ZXJzaW9uUmVxdWlyZW1lbnR9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIHRoaXMucHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koXG4gICAgICBgJHt0aGlzLl9wYWNrYWdlTmFtZXMuY2RrOHN9QCR7dmVyc2lvblJlcXVpcmVtZW50fWAsXG4gICAgICB0aGlzLmRlcGVuZGVuY3lUeXBlLFxuICAgICk7XG5cbiAgICByZXR1cm4gdmVyc2lvblJlcXVpcmVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDb25zdHJ1Y3RzRGVwZW5kZW5jeShcbiAgICByZXF1ZXN0ZWRWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcGlubmluZz86IGJvb2xlYW4sXG4gICkge1xuICAgIGlmIChyZXF1ZXN0ZWRWZXJzaW9uICYmICFzZW12ZXIucGFyc2UocmVxdWVzdGVkVmVyc2lvbikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYFwiY29uc3RydWN0c1ZlcnNpb25cIiBjYW5ub3QgYmUgcGFyc2VkIGFzIGEgc2VtdmVyIHZlcnNpb246ICR7cmVxdWVzdGVkVmVyc2lvbn1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZXJzaW9uUmVxdWlyZW1lbnQgPSB0aGlzLmdldFZlcnNpb25SZXF1aXJlbWVudChcbiAgICAgIHJlcXVlc3RlZFZlcnNpb24sXG4gICAgICBcIjMuNC4zOVwiLFxuICAgICAgXCIxMC4xLjQyXCIsXG4gICAgICBwaW5uaW5nLFxuICAgICk7XG5cbiAgICBjb25zdCBjb25zdHJ1Y3RzTWFqb3JWZXJzaW9uID0gc2VtdmVyLm1pblZlcnNpb24odmVyc2lvblJlcXVpcmVtZW50KT8ubWFqb3I7XG4gICAgaWYgKCFjb25zdHJ1Y3RzTWFqb3JWZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBDYW5ub3QgZGV0ZXJtaW5lIG1ham9yIHZlcnNpb24gb2YgY29uc3RydWN0cyB2ZXJzaW9uICcke3ZlcnNpb25SZXF1aXJlbWVudH0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLmNkazhzTWFqb3JWZXJzaW9uKSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIGlmIChjb25zdHJ1Y3RzTWFqb3JWZXJzaW9uICE9PSAzKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQVdTIENESyAxLnggcmVxdWlyZXMgY29uc3RydWN0cyAzLnhcIik7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgaWYgKGNvbnN0cnVjdHNNYWpvclZlcnNpb24gIT09IDEwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQVdTIENESyAyLnggcmVxdWlyZXMgY29uc3RydWN0cyAxMC54XCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIHRoaXMucHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koXG4gICAgICBgJHt0aGlzLl9wYWNrYWdlTmFtZXMuY29uc3RydWN0c31AJHt2ZXJzaW9uUmVxdWlyZW1lbnR9YCxcbiAgICAgIHRoaXMuZGVwZW5kZW5jeVR5cGUsXG4gICAgKTtcblxuICAgIHJldHVybiB2ZXJzaW9uUmVxdWlyZW1lbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0ZXJtaW5lRnJhbWV3b3JrVmVyc2lvbihvcHRpb25zOiBDZGs4c0RlcHNPcHRpb25zKSB7XG4gIGNvbnN0IHZlciA9IHNlbXZlci5wYXJzZShvcHRpb25zLmNkazhzVmVyc2lvbik7XG4gIGlmICghdmVyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYFwiY2RrOHNWZXJzaW9uXCIgY2Fubm90IGJlIHBhcnNlZCBhcyBhIHNlbXZlciB2ZXJzaW9uOiAke29wdGlvbnMuY2RrOHNWZXJzaW9ufWAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWluaW11bTogdmVyLmZvcm1hdCgpLFxuICAgIHJhbmdlOiBvcHRpb25zLmNkazhzVmVyc2lvblBpbm5pbmdcbiAgICAgID8gb3B0aW9ucy5jZGs4c1ZlcnNpb25cbiAgICAgIDogYF4ke29wdGlvbnMuY2RrOHNWZXJzaW9ufWAsXG4gICAgbWFqb3I6IHZlci5tYWpvcixcbiAgfTtcbn1cbiJdfQ==