projen
Version:
CDK for software projects
109 lines • 24 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Cdk8sDeps = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const semver = require("semver");
const component_1 = require("../component");
const dependencies_1 = require("../dependencies");
/**
* Manages dependencies on the CDK8s.
*/
class Cdk8sDeps extends component_1.Component {
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;
_a = JSII_RTTI_SYMBOL_1;
Cdk8sDeps[_a] = { fqn: "projen.cdk8s.Cdk8sDeps", version: "0.99.51" };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2RrOHMtZGVwcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jZGs4cy9jZGs4cy1kZXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUNBQWlDO0FBQ2pDLDRDQUF5QztBQUN6QyxrREFBaUQ7QUFnSWpEOztHQUVHO0FBQ0gsTUFBc0IsU0FBVSxTQUFRLHFCQUFTO0lBb0IvQyxZQUFZLE9BQWdCLEVBQUUsT0FBeUI7UUFDckQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQzdDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBRXpDLE1BQU0sU0FBUyxHQUFHLHlCQUF5QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXJELElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUNwQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQztRQUN6QyxJQUFJLENBQUMsbUJBQW1CLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQztRQUU3QyxxQkFBcUI7UUFDckIsSUFBSSxDQUFDLHVCQUF1QixDQUMxQixPQUFPLENBQUMsaUJBQWlCLEVBQ3pCLE9BQU8sQ0FBQyx3QkFBd0IsQ0FDakMsQ0FBQztRQUVGLElBQUksQ0FBQyxzQkFBc0IsQ0FDekIsT0FBTyxDQUFDLFlBQVksRUFDcEIsT0FBTyxDQUFDLG1CQUFtQixDQUM1QixDQUFDO1FBRUYsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMvQixJQUFJLENBQUMsbUJBQW1CLENBQ3RCLE9BQU8sQ0FBQyxlQUFlLEVBQ3ZCLE9BQU8sQ0FBQyxzQkFBc0IsQ0FDL0IsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFLENBQUM7WUFDOUIsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLGVBQWUsSUFBSSxFQUFFLENBQUM7WUFDckQsSUFBSSxDQUFDLHNCQUFzQixDQUN6QixjQUFjLEVBQ2QsT0FBTyxDQUFDLGdCQUFnQjtZQUN4QixzREFBc0Q7WUFDdEQsT0FBTyxDQUFDLHVCQUF1QixDQUNoQyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFPTyxxQkFBcUIsQ0FDM0IsZ0JBQW9DLEVBQ3BDLFNBQWlCLEVBQ2pCLFNBQWlCLEVBQ2pCLE9BQWlCO1FBRWpCLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzVFLE1BQU0sT0FBTyxHQUFHLEdBQUcsZ0JBQWdCLElBQUksY0FBYyxFQUFFLENBQUM7UUFDeEQsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxFQUFFLENBQUM7UUFDbEUsT0FBTyxrQkFBa0IsQ0FBQztJQUM1QixDQUFDO0lBRU8sc0JBQXNCLENBQzVCLGNBQXNCLEVBQ3RCLGdCQUFvQyxFQUNwQyxPQUFpQjtRQUVqQixNQUFNLGtCQUFrQixHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FDbkQsZ0JBQWdCLEVBQ2hCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsT0FBTyxDQUNSLENBQUM7UUFFRixNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsRUFBRSxLQUFLLENBQUM7UUFDM0UsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7WUFDM0IsTUFBTSxJQUFJLEtBQUssQ0FDYix5REFBeUQsa0JBQWtCLEdBQUcsQ0FDL0UsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQ3RELEdBQUcsRUFDSCxjQUFjLENBQUMsUUFBUSxFQUFFLENBQzFCLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQzdCLEdBQUcsWUFBWSxJQUFJLGtCQUFrQixFQUFFLEVBQ3ZDLElBQUksQ0FBQyxjQUFjLENBQ3BCLENBQUM7UUFFRixPQUFPLGtCQUFrQixDQUFDO0lBQzVCLENBQUM7SUFFTyxtQkFBbUIsQ0FDekIsZ0JBQW9DLEVBQ3BDLE9BQWlCO1FBRWpCLE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUNuRCxnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLFFBQVEsRUFDUixPQUFPLENBQ1IsQ0FBQztRQUVGLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUMxRSxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUMxQixNQUFNLElBQUksS0FBSyxDQUNiLG9EQUFvRCxrQkFBa0IsR0FBRyxDQUMxRSxDQUFDO1FBQ0osQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FDN0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsSUFBSSxrQkFBa0IsRUFBRSxFQUN6RCw2QkFBYyxDQUFDLEtBQUssQ0FDckIsQ0FBQztRQUVGLE9BQU8sa0JBQWtCLENBQUM7SUFDNUIsQ0FBQztJQUVPLHNCQUFzQixDQUM1QixnQkFBb0MsRUFDcEMsT0FBaUI7UUFFakIsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMscUJBQXFCLENBQ25ELGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsUUFBUSxFQUNSLE9BQU8sQ0FDUixDQUFDO1FBRUYsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLEVBQUUsS0FBSyxDQUFDO1FBQ3ZFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQ2Isb0RBQW9ELGtCQUFrQixHQUFHLENBQzFFLENBQUM7UUFDSixDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUM3QixHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLGtCQUFrQixFQUFFLEVBQ25ELElBQUksQ0FBQyxjQUFjLENBQ3BCLENBQUM7UUFFRixPQUFPLGtCQUFrQixDQUFDO0lBQzVCLENBQUM7SUFFTyx1QkFBdUIsQ0FDN0IsZ0JBQW9DLEVBQ3BDLE9BQWlCO1FBRWpCLElBQUksZ0JBQWdCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQztZQUN4RCxNQUFNLElBQUksS0FBSyxDQUNiLDZEQUE2RCxnQkFBZ0IsRUFBRSxDQUNoRixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUNuRCxnQkFBZ0IsRUFDaEIsUUFBUSxFQUNSLFNBQVMsRUFDVCxPQUFPLENBQ1IsQ0FBQztRQUVGLE1BQU0sc0JBQXNCLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEtBQUssQ0FBQztRQUM1RSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztZQUM1QixNQUFNLElBQUksS0FBSyxDQUNiLHlEQUF5RCxrQkFBa0IsR0FBRyxDQUMvRSxDQUFDO1FBQ0osQ0FBQztRQUVELFFBQVEsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDL0IsS0FBSyxDQUFDO2dCQUNKLElBQUksc0JBQXNCLEtBQUssQ0FBQyxFQUFFLENBQUM7b0JBQ2pDLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztnQkFDekQsQ0FBQztnQkFDRCxNQUFNO1lBRVIsS0FBSyxDQUFDO2dCQUNKLElBQUksc0JBQXNCLEtBQUssRUFBRSxFQUFFLENBQUM7b0JBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQztnQkFDMUQsQ0FBQztnQkFDRCxNQUFNO1FBQ1YsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FDN0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsSUFBSSxrQkFBa0IsRUFBRSxFQUN4RCxJQUFJLENBQUMsY0FBYyxDQUNwQixDQUFDO1FBRUYsT0FBTyxrQkFBa0IsQ0FBQztJQUM1QixDQUFDOztBQTdNSCw4QkE4TUM7OztBQUVELFNBQVMseUJBQXlCLENBQUMsT0FBeUI7SUFDMUQsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDL0MsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ1QsTUFBTSxJQUFJLEtBQUssQ0FDYix3REFBd0QsT0FBTyxDQUFDLFlBQVksRUFBRSxDQUMvRSxDQUFDO0lBQ0osQ0FBQztJQUVELE9BQU87UUFDTCxPQUFPLEVBQUUsR0FBRyxDQUFDLE1BQU0sRUFBRTtRQUNyQixLQUFLLEVBQUUsT0FBTyxDQUFDLG1CQUFtQjtZQUNoQyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVk7WUFDdEIsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLFlBQVksRUFBRTtRQUM5QixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7S0FDakIsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSBcInNlbXZlclwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgRGVwZW5kZW5jeVR5cGUgfSBmcm9tIFwiLi4vZGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgdHlwZSB7IFByb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdFwiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGBDZGs4c0RlcHNgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrOHNEZXBzQ29tbW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNaW5pbXVtIHZlcnNpb24gb2YgdGhlIGNkazhzIHRvIGRlcGVuZCBvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgXCIyLjMuMzNcIlxuICAgKi9cbiAgcmVhZG9ubHkgY2RrOHNWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1pbmltdW0gdmVyc2lvbiBvZiB0aGUgY2RrOHMtY2xpIHRvIGRlcGVuZCBvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgXCIyLjAuMjhcIlxuICAgKi9cbiAgcmVhZG9ubHkgY2RrOHNDbGlWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIHZlcnNpb24gb2YgdGhlIGBjb25zdHJ1Y3RzYCBsaWJyYXJ5IHRvIGRlcGVuZCBvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgXCIxMC4xLjQyXCJcbiAgICovXG4gIHJlYWRvbmx5IGNvbnN0cnVjdHNWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgcGlubmVkIHZlcnNpb24gaW5zdGVhZCBvZiBjYXJldCB2ZXJzaW9uIGZvciBjZGs4cy5cbiAgICpcbiAgICogWW91IGNhbiB1c2UgdGhpcyB0byBwcmV2ZW50IHlhcm4gdG8gbWl4IHZlcnNpb25zIGZvciB5b3VyIENESzhzIHBhY2thZ2UgYW5kIHRvIHByZXZlbnQgYXV0by11cGRhdGVzLlxuICAgKiBJZiB5b3UgdXNlIGV4cGVyaW1lbnRhbCBmZWF0dXJlcyB0aGlzIHdpbGwgbGV0IHlvdSBkZWZpbmUgdGhlIG1vbWVudCB5b3UgaW5jbHVkZSBicmVha2luZyBjaGFuZ2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2RrOHNWZXJzaW9uUGlubmluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZSBwaW5uZWQgdmVyc2lvbiBpbnN0ZWFkIG9mIGNhcmV0IHZlcnNpb24gZm9yIGNkazhzLWNsaS5cbiAgICpcbiAgICogWW91IGNhbiB1c2UgdGhpcyB0byBwcmV2ZW50IHlhcm4gdG8gbWl4IHZlcnNpb25zIGZvciB5b3VyIENESzhzIHBhY2thZ2UgYW5kIHRvIHByZXZlbnQgYXV0by11cGRhdGVzLlxuICAgKiBJZiB5b3UgdXNlIGV4cGVyaW1lbnRhbCBmZWF0dXJlcyB0aGlzIHdpbGwgbGV0IHlvdSBkZWZpbmUgdGhlIG1vbWVudCB5b3UgaW5jbHVkZSBicmVha2luZyBjaGFuZ2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY2RrOHNDbGlWZXJzaW9uUGlubmluZz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZSBwaW5uZWQgdmVyc2lvbiBpbnN0ZWFkIG9mIGNhcmV0IHZlcnNpb24gZm9yIGNvbnN0cnVjdHMuXG4gICAqXG4gICAqIFlvdSBjYW4gdXNlIHRoaXMgdG8gcHJldmVudCB5YXJuIHRvIG1peCB2ZXJzaW9ucyBmb3IgeW91ciBjb25zcnVjdHMgcGFja2FnZSBhbmQgdG8gcHJldmVudCBhdXRvLXVwZGF0ZXMuXG4gICAqIElmIHlvdSB1c2UgZXhwZXJpbWVudGFsIGZlYXR1cmVzIHRoaXMgd2lsbCBsZXQgeW91IGRlZmluZSB0aGUgbW9tZW50IHlvdSBpbmNsdWRlIGJyZWFraW5nIGNoYW5nZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjb25zdHJ1Y3RzVmVyc2lvblBpbm5pbmc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGNkazhzLXBsdXNcbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2RrOHNQbHVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGNkazhzLXBsdXMgbGlicmFyeSBkZXBlbmRzIG9mIEt1YmVybmV0ZXMgbWlub3IgdmVyc2lvblxuICAgKiBGb3IgZXhhbXBsZSwgY2RrOHMtcGx1cy0yMiB0YXJnZXRzIGt1YmVybmV0ZXMgdmVyc2lvbiAxLjIyLjBcbiAgICogY2RrOHMtcGx1cy0yMSB0YXJnZXRzIGt1YmVybmV0ZXMgdmVyc2lvbiAxLjIxLjBcbiAgICpcbiAgICogQGRlZmF1bHQgMjJcbiAgICovXG4gIHJlYWRvbmx5IGs4c01pbm9yVmVyc2lvbj86IG51bWJlcjtcblxuICAvKipcbiAgICogTWluaW11bSB2ZXJzaW9uIG9mIHRoZSBjZGs4cy1wbHVzLVhYIHRvIGRlcGVuZCBvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgXCIyLjAuMC1yYy4yNlwiXG4gICAqL1xuICByZWFkb25seSBjZGs4c1BsdXNWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBVc2UgcGlubmVkIHZlcnNpb24gaW5zdGVhZCBvZiBjYXJldCB2ZXJzaW9uIGZvciBjZGs4cy1wbHVzLTE3LlxuICAgKlxuICAgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIHByZXZlbnQgeWFybiB0byBtaXggdmVyc2lvbnMgZm9yIHlvdXIgQ0RLOHMgcGFja2FnZSBhbmQgdG8gcHJldmVudCBhdXRvLXVwZGF0ZXMuXG4gICAqIElmIHlvdSB1c2UgZXhwZXJpbWVudGFsIGZlYXR1cmVzIHRoaXMgd2lsbCBsZXQgeW91IGRlZmluZSB0aGUgbW9tZW50IHlvdSBpbmNsdWRlIGJyZWFraW5nIGNoYW5nZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjZGs4c1BsdXNWZXJzaW9uUGlubmluZz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrOHNEZXBzT3B0aW9ucyBleHRlbmRzIENkazhzRGVwc0NvbW1vbk9wdGlvbnMge1xuICAvKipcbiAgICogVGhlIHR5cGUgb2YgZGVwZW5kZW5jeSB0byB1c2UgZm9yIHJ1bnRpbWUgQ0RLOHMgYW5kIGBjb25zdHJ1Y3RzYCBtb2R1bGVzLlxuICAgKlxuICAgKiBGb3IgbGlicmFyaWVzLCB1c2UgcGVlciBkZXBlbmRlbmNpZXMgYW5kIGZvciBhcHBzIHVzZSBydW50aW1lIGRlcGVuZGVuY2llcy5cbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY3lUeXBlOiBEZXBlbmRlbmN5VHlwZTtcblxuICAvKipcbiAgICogQWRkIGNkazhzLWNsaSBvbmx5IHRvIE5vZGUgcHJvamVjdHNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNkazhzQ2xpRGVwZW5kZW5jeTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDZGs4c1BhY2thZ2VOYW1lcyB7XG4gIC8qKlxuICAgKiBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgY29yZSBmcmFtZXdvcmsgcGFja2FnZVxuICAgKi9cbiAgcmVhZG9ubHkgY2RrOHM6IHN0cmluZztcbiAgLyoqXG4gICAqIEZ1bGx5IHF1YWxpZmllZCBuYW1lIG9mIHRoZSBjbGllbnQgcGFja2FnZS5cbiAgICogVXNlZCBvbmx5IG9uIE5vZGUgcHJvamVjdHNcbiAgICovXG4gIHJlYWRvbmx5IGNkazhzQ2xpZW50Pzogc3RyaW5nO1xuICAvKipcbiAgICogRnVsbHkgcXVhbGlmaWVkIG5hbWUgb2YgdGhlIGNvbnN0cnVjdHMgbGlicmFyeSBwYWNrYWdlXG4gICAqL1xuICByZWFkb25seSBjb25zdHJ1Y3RzOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBGdWxseSBxdWFsaWZpZWQgbmFtZSBvZiB0aGUgY2RrOXMtcGx1cy1YWCBsaWJyYXJ5IHBhY2thZ2VcbiAgICovXG4gIHJlYWRvbmx5IGNkazhzUGx1czogc3RyaW5nO1xufVxuXG4vKipcbiAqIE1hbmFnZXMgZGVwZW5kZW5jaWVzIG9uIHRoZSBDREs4cy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENkazhzRGVwcyBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgZGVwZW5kZW5jeSByZXF1aXJlbWVudCBmb3IgQ0RLOHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2RrOHNWZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHZlcnNpb24gb2YgdGhlIENESzhzIChlLmcuIGAyLjAuMGApXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2RrOHNNaW5pbXVtVmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbWFqb3IgdmVyc2lvbiBvZiB0aGUgQ0RLOHMgKGUuZy4gMSwgMiwgLi4uKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNkazhzTWFqb3JWZXJzaW9uOiBudW1iZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXBlbmRlbmN5VHlwZTogRGVwZW5kZW5jeVR5cGU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcGFja2FnZU5hbWVzOiBDZGs4c1BhY2thZ2VOYW1lcztcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBDZGs4c0RlcHNPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLmRlcGVuZGVuY3lUeXBlID0gb3B0aW9ucy5kZXBlbmRlbmN5VHlwZTtcbiAgICB0aGlzLl9wYWNrYWdlTmFtZXMgPSB0aGlzLnBhY2thZ2VOYW1lcygpO1xuXG4gICAgY29uc3QgZnJhbWV3b3JrID0gZGV0ZXJtaW5lRnJhbWV3b3JrVmVyc2lvbihvcHRpb25zKTtcblxuICAgIHRoaXMuY2RrOHNWZXJzaW9uID0gZnJhbWV3b3JrLnJhbmdlO1xuICAgIHRoaXMuY2RrOHNNYWpvclZlcnNpb24gPSBmcmFtZXdvcmsubWFqb3I7XG4gICAgdGhpcy5jZGs4c01pbmltdW1WZXJzaW9uID0gZnJhbWV3b3JrLm1pbmltdW07XG5cbiAgICAvLyBjb25zdHJ1Y3RzIGxpYnJhcnlcbiAgICB0aGlzLmFkZENvbnN0cnVjdHNEZXBlbmRlbmN5KFxuICAgICAgb3B0aW9ucy5jb25zdHJ1Y3RzVmVyc2lvbixcbiAgICAgIG9wdGlvbnMuY29uc3RydWN0c1ZlcnNpb25QaW5uaW5nLFxuICAgICk7XG5cbiAgICB0aGlzLmFkZEZyYW1ld29ya0RlcGVuZGVuY3koXG4gICAgICBvcHRpb25zLmNkazhzVmVyc2lvbixcbiAgICAgIG9wdGlvbnMuY2RrOHNWZXJzaW9uUGlubmluZyxcbiAgICApO1xuXG4gICAgaWYgKG9wdGlvbnMuY2RrOHNDbGlEZXBlbmRlbmN5KSB7XG4gICAgICB0aGlzLmFkZENsaWVudERlcGVuZGVuY3koXG4gICAgICAgIG9wdGlvbnMuY2RrOHNDbGlWZXJzaW9uLFxuICAgICAgICBvcHRpb25zLmNkazhzQ2xpVmVyc2lvblBpbm5pbmcsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNkazhzUGx1cyA/PyB0cnVlKSB7XG4gICAgICBjb25zdCBrOE1pbm9yVmVyc2lvbiA9IG9wdGlvbnMuazhzTWlub3JWZXJzaW9uID8/IDIyO1xuICAgICAgdGhpcy5hZGRDZGs4c1BsdXNEZXBlbmRlbmN5KFxuICAgICAgICBrOE1pbm9yVmVyc2lvbixcbiAgICAgICAgb3B0aW9ucy5jZGs4c1BsdXNWZXJzaW9uLFxuICAgICAgICAvLyAocHJvamVjdCBpbnN0YW5jZW9mIENkazhzUHl0aG9uQXBwKSA/IHRydWUgOiBmYWxzZSxcbiAgICAgICAgb3B0aW9ucy5jZGs4c1BsdXNWZXJzaW9uUGlubmluZyxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhIGNvbmZpZ3VyYXRpb24gb2JqZWN0IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgcGFja2FnZSBuYW1pbmcgaW4gdmFyaW91cyBsYW5ndWFnZXNcbiAgICovXG4gIHByb3RlY3RlZCBhYnN0cmFjdCBwYWNrYWdlTmFtZXMoKTogQ2RrOHNQYWNrYWdlTmFtZXM7XG5cbiAgcHJpdmF0ZSBnZXRWZXJzaW9uUmVxdWlyZW1lbnQoXG4gICAgcmVxdWVzdGVkVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHYxVmVyc2lvbjogc3RyaW5nLFxuICAgIHYyVmVyc2lvbjogc3RyaW5nLFxuICAgIHBpbm5pbmc/OiBib29sZWFuLFxuICApIHtcbiAgICBjb25zdCBkZWZhdWx0VmVyc2lvbiA9IHRoaXMuY2RrOHNNYWpvclZlcnNpb24gPT09IDEgPyB2MVZlcnNpb24gOiB2MlZlcnNpb247XG4gICAgY29uc3QgdmVyc2lvbiA9IGAke3JlcXVlc3RlZFZlcnNpb24gPz8gZGVmYXVsdFZlcnNpb259YDtcbiAgICBjb25zdCB2ZXJzaW9uUmVxdWlyZW1lbnQgPSBwaW5uaW5nID8gYCR7dmVyc2lvbn1gIDogYF4ke3ZlcnNpb259YDtcbiAgICByZXR1cm4gdmVyc2lvblJlcXVpcmVtZW50O1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDZGs4c1BsdXNEZXBlbmRlbmN5KFxuICAgIGs4TWlub3JWZXJzaW9uOiBudW1iZXIsXG4gICAgcmVxdWVzdGVkVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHBpbm5pbmc/OiBib29sZWFuLFxuICApIHtcbiAgICBjb25zdCB2ZXJzaW9uUmVxdWlyZW1lbnQgPSB0aGlzLmdldFZlcnNpb25SZXF1aXJlbWVudChcbiAgICAgIHJlcXVlc3RlZFZlcnNpb24sXG4gICAgICBcIjEuMC4wLWJldGEuMjIyXCIsXG4gICAgICBcIjIuMC4wLXJjLjI2XCIsXG4gICAgICBwaW5uaW5nLFxuICAgICk7XG5cbiAgICBjb25zdCBjZGs4c1BsdXNNYWpvclZlcnNpb24gPSBzZW12ZXIubWluVmVyc2lvbih2ZXJzaW9uUmVxdWlyZW1lbnQpPy5tYWpvcjtcbiAgICBpZiAoIWNkazhzUGx1c01ham9yVmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGRldGVybWluZSBtYWpvciB2ZXJzaW9uIG9mIGNkazhzLXBsdXMgdmVyc2lvbiAnJHt2ZXJzaW9uUmVxdWlyZW1lbnR9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNkazhzUGx1c0xpYiA9IHRoaXMuX3BhY2thZ2VOYW1lcy5jZGs4c1BsdXMuY29uY2F0KFxuICAgICAgXCItXCIsXG4gICAgICBrOE1pbm9yVmVyc2lvbi50b1N0cmluZygpLFxuICAgICk7XG4gICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShcbiAgICAgIGAke2NkazhzUGx1c0xpYn1AJHt2ZXJzaW9uUmVxdWlyZW1lbnR9YCxcbiAgICAgIHRoaXMuZGVwZW5kZW5jeVR5cGUsXG4gICAgKTtcblxuICAgIHJldHVybiB2ZXJzaW9uUmVxdWlyZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGFkZENsaWVudERlcGVuZGVuY3koXG4gICAgcmVxdWVzdGVkVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHBpbm5pbmc/OiBib29sZWFuLFxuICApIHtcbiAgICBjb25zdCB2ZXJzaW9uUmVxdWlyZW1lbnQgPSB0aGlzLmdldFZlcnNpb25SZXF1aXJlbWVudChcbiAgICAgIHJlcXVlc3RlZFZlcnNpb24sXG4gICAgICBcIjEuMS4zNFwiLFxuICAgICAgXCIyLjAuMjhcIixcbiAgICAgIHBpbm5pbmcsXG4gICAgKTtcblxuICAgIGNvbnN0IGNkazhzQ2xpTWFqb3JWZXJzaW9uID0gc2VtdmVyLm1pblZlcnNpb24odmVyc2lvblJlcXVpcmVtZW50KT8ubWFqb3I7XG4gICAgaWYgKCFjZGs4c0NsaU1ham9yVmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGRldGVybWluZSBtYWpvciB2ZXJzaW9uIG9mIGNkazhzIHZlcnNpb24gJyR7dmVyc2lvblJlcXVpcmVtZW50fSdgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KFxuICAgICAgYCR7dGhpcy5fcGFja2FnZU5hbWVzLmNkazhzQ2xpZW50fUAke3ZlcnNpb25SZXF1aXJlbWVudH1gLFxuICAgICAgRGVwZW5kZW5jeVR5cGUuQlVJTEQsXG4gICAgKTtcblxuICAgIHJldHVybiB2ZXJzaW9uUmVxdWlyZW1lbnQ7XG4gIH1cblxuICBwcml2YXRlIGFkZEZyYW1ld29ya0RlcGVuZGVuY3koXG4gICAgcmVxdWVzdGVkVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHBpbm5pbmc/OiBib29sZWFuLFxuICApIHtcbiAgICBjb25zdCB2ZXJzaW9uUmVxdWlyZW1lbnQgPSB0aGlzLmdldFZlcnNpb25SZXF1aXJlbWVudChcbiAgICAgIHJlcXVlc3RlZFZlcnNpb24sXG4gICAgICBcIjEuNi4zM1wiLFxuICAgICAgXCIyLjMuMzNcIixcbiAgICAgIHBpbm5pbmcsXG4gICAgKTtcblxuICAgIGNvbnN0IGNkazhzTWFqb3JWZXJzaW9uID0gc2VtdmVyLm1pblZlcnNpb24odmVyc2lvblJlcXVpcmVtZW50KT8ubWFqb3I7XG4gICAgaWYgKCFjZGs4c01ham9yVmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGRldGVybWluZSBtYWpvciB2ZXJzaW9uIG9mIGNkazhzIHZlcnNpb24gJyR7dmVyc2lvblJlcXVpcmVtZW50fSdgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KFxuICAgICAgYCR7dGhpcy5fcGFja2FnZU5hbWVzLmNkazhzfUAke3ZlcnNpb25SZXF1aXJlbWVudH1gLFxuICAgICAgdGhpcy5kZXBlbmRlbmN5VHlwZSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHZlcnNpb25SZXF1aXJlbWVudDtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29uc3RydWN0c0RlcGVuZGVuY3koXG4gICAgcmVxdWVzdGVkVmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHBpbm5pbmc/OiBib29sZWFuLFxuICApIHtcbiAgICBpZiAocmVxdWVzdGVkVmVyc2lvbiAmJiAhc2VtdmVyLnBhcnNlKHJlcXVlc3RlZFZlcnNpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBcImNvbnN0cnVjdHNWZXJzaW9uXCIgY2Fubm90IGJlIHBhcnNlZCBhcyBhIHNlbXZlciB2ZXJzaW9uOiAke3JlcXVlc3RlZFZlcnNpb259YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgdmVyc2lvblJlcXVpcmVtZW50ID0gdGhpcy5nZXRWZXJzaW9uUmVxdWlyZW1lbnQoXG4gICAgICByZXF1ZXN0ZWRWZXJzaW9uLFxuICAgICAgXCIzLjQuMzlcIixcbiAgICAgIFwiMTAuMS40MlwiLFxuICAgICAgcGlubmluZyxcbiAgICApO1xuXG4gICAgY29uc3QgY29uc3RydWN0c01ham9yVmVyc2lvbiA9IHNlbXZlci5taW5WZXJzaW9uKHZlcnNpb25SZXF1aXJlbWVudCk/Lm1ham9yO1xuICAgIGlmICghY29uc3RydWN0c01ham9yVmVyc2lvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgQ2Fubm90IGRldGVybWluZSBtYWpvciB2ZXJzaW9uIG9mIGNvbnN0cnVjdHMgdmVyc2lvbiAnJHt2ZXJzaW9uUmVxdWlyZW1lbnR9J2AsXG4gICAgICApO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5jZGs4c01ham9yVmVyc2lvbikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICBpZiAoY29uc3RydWN0c01ham9yVmVyc2lvbiAhPT0gMykge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFXUyBDREsgMS54IHJlcXVpcmVzIGNvbnN0cnVjdHMgMy54XCIpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIGlmIChjb25zdHJ1Y3RzTWFqb3JWZXJzaW9uICE9PSAxMCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkFXUyBDREsgMi54IHJlcXVpcmVzIGNvbnN0cnVjdHMgMTAueFwiKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KFxuICAgICAgYCR7dGhpcy5fcGFja2FnZU5hbWVzLmNvbnN0cnVjdHN9QCR7dmVyc2lvblJlcXVpcmVtZW50fWAsXG4gICAgICB0aGlzLmRlcGVuZGVuY3lUeXBlLFxuICAgICk7XG5cbiAgICByZXR1cm4gdmVyc2lvblJlcXVpcmVtZW50O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGVybWluZUZyYW1ld29ya1ZlcnNpb24ob3B0aW9uczogQ2RrOHNEZXBzT3B0aW9ucykge1xuICBjb25zdCB2ZXIgPSBzZW12ZXIucGFyc2Uob3B0aW9ucy5jZGs4c1ZlcnNpb24pO1xuICBpZiAoIXZlcikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBcImNkazhzVmVyc2lvblwiIGNhbm5vdCBiZSBwYXJzZWQgYXMgYSBzZW12ZXIgdmVyc2lvbjogJHtvcHRpb25zLmNkazhzVmVyc2lvbn1gLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG1pbmltdW06IHZlci5mb3JtYXQoKSxcbiAgICByYW5nZTogb3B0aW9ucy5jZGs4c1ZlcnNpb25QaW5uaW5nXG4gICAgICA/IG9wdGlvbnMuY2RrOHNWZXJzaW9uXG4gICAgICA6IGBeJHtvcHRpb25zLmNkazhzVmVyc2lvbn1gLFxuICAgIG1ham9yOiB2ZXIubWFqb3IsXG4gIH07XG59XG4iXX0=