projen
Version:
CDK for software projects
160 lines • 21.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.Renovatebot = exports.RenovatebotMinimumReleaseAgeBehaviour = exports.RenovatebotScheduleInterval = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const component_1 = require("./component");
const dependencies_1 = require("./dependencies");
const workflows_1 = require("./github/workflows");
const json_1 = require("./json");
/**
* How often to check for new versions and raise pull requests for version
* updates.
*
* @see https://docs.renovatebot.com/presets-schedule/
*/
var RenovatebotScheduleInterval;
(function (RenovatebotScheduleInterval) {
/**
* Run at any time
*/
RenovatebotScheduleInterval["ANY_TIME"] = "at any time";
/**
* Weekly schedule on early monday mornings
*/
RenovatebotScheduleInterval["EARLY_MONDAYS"] = "before 3am on Monday";
/**
* Schedule daily
*/
RenovatebotScheduleInterval["DAILY"] = "before 2am";
/**
* Schedule weekly
*/
RenovatebotScheduleInterval["WEEKLY"] = "before 3am on Monday";
/**
* Schedule monthly
*/
RenovatebotScheduleInterval["MONTHLY"] = "before 3am on the first day of the month";
/**
* Schedule quarterly
*/
RenovatebotScheduleInterval["QUARTERLY"] = "every 3 months on the first day of the month";
/**
* Schedule for weekends
*/
RenovatebotScheduleInterval["WEEKENDS"] = "every weekend";
/**
* Schedule for weekdays
*/
RenovatebotScheduleInterval["WEEKDAYS"] = "every weekday";
})(RenovatebotScheduleInterval || (exports.RenovatebotScheduleInterval = RenovatebotScheduleInterval = {}));
/**
* Behaviour when a release timestamp is missing for `minimumReleaseAge`.
*
* @see https://docs.renovatebot.com/configuration-options/#minimumreleaseagebehaviour
*/
var RenovatebotMinimumReleaseAgeBehaviour;
(function (RenovatebotMinimumReleaseAgeBehaviour) {
/**
* A release without a timestamp is not treated as stable.
*/
RenovatebotMinimumReleaseAgeBehaviour["TIMESTAMP_REQUIRED"] = "timestamp-required";
/**
* A release without a timestamp is treated as stable.
*/
RenovatebotMinimumReleaseAgeBehaviour["TIMESTAMP_OPTIONAL"] = "timestamp-optional";
})(RenovatebotMinimumReleaseAgeBehaviour || (exports.RenovatebotMinimumReleaseAgeBehaviour = RenovatebotMinimumReleaseAgeBehaviour = {}));
/**
* Defines renovatebot configuration for projen project.
*
* Ignores the versions controlled by Projen.
*/
class Renovatebot extends component_1.Component {
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Renovatebot", version: "0.104.8" };
/**
* The file holding the renovatebot configuration
*/
file;
_project;
explicitIgnores;
scheduleInterval;
labels;
marker;
overrideConfig;
minimumReleaseAge;
minimumReleaseAgeBehaviour;
constructor(project, options = {}) {
super(project);
this._project = project;
this.explicitIgnores = options.ignore ?? [];
this.labels = options.labels;
this.scheduleInterval = options.scheduleInterval ?? [
RenovatebotScheduleInterval.ANY_TIME,
];
(options.ignoreProjen ?? true) && this.explicitIgnores.push("projen");
this.overrideConfig = options.overrideConfig ?? {};
this.marker = options.marker ?? true;
this.minimumReleaseAge = options.minimumReleaseAge;
this.minimumReleaseAgeBehaviour = options.minimumReleaseAgeBehaviour;
this.file = new json_1.JsonFile(this._project, "renovate.json5", {
obj: () => this.createRenovateConfiguration(),
committed: true,
marker: this.marker,
});
}
createRenovateConfiguration() {
const renovateIgnore = [
...new Set(this._project.deps.all
.filter((dep) => dep.version || dep.type === dependencies_1.DependencyType.OVERRIDE)
.map((dep) => dep.name)
.concat(this.explicitIgnores)),
];
// Ignore updates to dependencies in generated GitHub workflows.
const workflows = this._project.components
.filter((component) => component instanceof workflows_1.GithubWorkflow && component.file !== undefined)
.sort((w1, w2) => w1.name.localeCompare(w2.name));
if (workflows.length > 0) {
const actions = workflows
.flatMap((workflow) => Object.values(workflow.jobs))
.flatMap((job) => job.steps)
.map((step) => step?.uses?.split("@")[0])
.filter((actionName) => !!actionName);
const reusableWorkflows = workflows
.flatMap((workflow) => Object.values(workflow.jobs))
.flatMap((job) => job.uses)
.map((reusableWorkflow) => reusableWorkflow?.split("@")[0]);
renovateIgnore.push(...new Set(actions));
renovateIgnore.push(...new Set(reusableWorkflows));
}
const extendsPresets = [
":preserveSemverRanges",
"config:recommended",
"group:allNonMajor",
"group:recommended",
"group:monorepos",
];
// Add Biome custom manager if Biome is configured
// Lazy require to avoid circular dependency (renovatebot -> biome -> project -> renovatebot)
const { Biome } = require("./javascript/biome/biome"); // eslint-disable-line @typescript-eslint/no-require-imports
if (Biome.of(this._project)) {
extendsPresets.push("customManagers:biomeVersions");
}
return {
labels: this.labels,
schedule: this.scheduleInterval,
minimumReleaseAge: this.minimumReleaseAge,
minimumReleaseAgeBehaviour: this.minimumReleaseAgeBehaviour,
extends: extendsPresets,
packageRules: [
{
matchDepTypes: ["devDependencies"],
matchUpdateTypes: ["patch", "minor"],
groupName: "devDependencies (non-major)",
},
],
ignoreDeps: renovateIgnore,
...this.overrideConfig,
};
}
}
exports.Renovatebot = Renovatebot;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVub3ZhdGVib3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVub3ZhdGVib3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDJDQUF3QztBQUN4QyxpREFBZ0Q7QUFDaEQsa0RBQW9EO0FBRXBELGlDQUFrQztBQXFFbEM7Ozs7O0dBS0c7QUFDSCxJQUFZLDJCQXdDWDtBQXhDRCxXQUFZLDJCQUEyQjtJQUNyQzs7T0FFRztJQUNILHVEQUF3QixDQUFBO0lBRXhCOztPQUVHO0lBQ0gscUVBQXNDLENBQUE7SUFFdEM7O09BRUc7SUFDSCxtREFBb0IsQ0FBQTtJQUVwQjs7T0FFRztJQUNILDhEQUFzQixDQUFBO0lBRXRCOztPQUVHO0lBQ0gsbUZBQW9ELENBQUE7SUFFcEQ7O09BRUc7SUFDSCx5RkFBMEQsQ0FBQTtJQUUxRDs7T0FFRztJQUNILHlEQUEwQixDQUFBO0lBRTFCOztPQUVHO0lBQ0gseURBQTBCLENBQUE7QUFDNUIsQ0FBQyxFQXhDVywyQkFBMkIsMkNBQTNCLDJCQUEyQixRQXdDdEM7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxxQ0FVWDtBQVZELFdBQVkscUNBQXFDO0lBQy9DOztPQUVHO0lBQ0gsa0ZBQXlDLENBQUE7SUFFekM7O09BRUc7SUFDSCxrRkFBeUMsQ0FBQTtBQUMzQyxDQUFDLEVBVlcscUNBQXFDLHFEQUFyQyxxQ0FBcUMsUUFVaEQ7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxXQUFZLFNBQVEscUJBQVM7O0lBQ3hDOztPQUVHO0lBQ2EsSUFBSSxDQUFXO0lBRWQsUUFBUSxDQUFVO0lBRWxCLGVBQWUsQ0FBVztJQUUxQixnQkFBZ0IsQ0FBVztJQUUzQixNQUFNLENBQVk7SUFFbEIsTUFBTSxDQUFXO0lBRWpCLGNBQWMsQ0FBTztJQUVyQixpQkFBaUIsQ0FBVTtJQUUzQiwwQkFBMEIsQ0FBeUM7SUFFcEYsWUFBWSxPQUFnQixFQUFFLFVBQThCLEVBQUU7UUFDNUQsS0FBSyxDQUFDLE9BQU8sQ0FB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QVMsRUFBRSw2QkFBNkI7aUJBQ3pDO2FBQ0Y7WUFDRCxVQUFVLEVBQUUsY0FBYztZQUMxQixHQUFHLElBQUksQ0FBQyxjQUFjO1NBQ3ZCLENBQUM7SUFDSixDQUFDOztBQTVHSCxrQ0E2R0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSBcIi4vZGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgeyBHaXRodWJXb3JrZmxvdyB9IGZyb20gXCIuL2dpdGh1Yi93b3JrZmxvd3NcIjtcbmltcG9ydCB0eXBlIHsgSm9iLCBKb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdyB9IGZyb20gXCIuL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWxcIjtcbmltcG9ydCB7IEpzb25GaWxlIH0gZnJvbSBcIi4vanNvblwiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4vcHJvamVjdFwiO1xuXG4vKipcbiAqIE9wdGlvbnMgZm9yIFJlbm92YXRlYm90XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVub3ZhdGVib3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIEhvdyBvZnRlbiB0byBjaGVjayBmb3IgbmV3IHZlcnNpb25zIGFuZCByYWlzZSBwdWxsIHJlcXVlc3RzLlxuICAgKlxuICAgKiBDYW4gYmUgZ2l2ZW4gaW4gQ1JPTiBvciBMQVRFUiBmb3JtYXQsIGFuZCB1c2UgbXVsdGlwbGUgc2NoZWR1bGVzXG4gICAqIChlLmcuIGRpZmZlcmVudCBmb3Igd2Vla2RheXMgYW5kIHdlZWtlbmRzKS4gTXVsdGlwbGUgcnVsZXMgYXJlXG4gICAqIGhhbmRsZXMgYXMgT1IuXG4gICAqXG4gICAqIFNvbWUgbm9ybWFsIHNjaGVkdWxpbmcgdmFsdWVzIGRlZmluZWQgaW4gZW51bSBgUmVub3ZhdGVib3RTY2hlZHVsZUludGVydmFsYC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy8jc2NoZWR1bGVcbiAgICogQGRlZmF1bHQgW1wiYXQgYW55IHRpbWVcIl1cbiAgICovXG4gIHJlYWRvbmx5IHNjaGVkdWxlSW50ZXJ2YWw/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogWW91IGNhbiB1c2UgdGhlIGBpZ25vcmVgIG9wdGlvbiB0byBjdXN0b21pemUgd2hpY2ggZGVwZW5kZW5jaWVzIGFyZSB1cGRhdGVkLlxuICAgKiBUaGUgaWdub3JlIG9wdGlvbiBzdXBwb3J0cyBqdXN0IHBhY2thZ2UgbmFtZS5cbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJZ25vcmVzIHVwZGF0ZXMgdG8gYHByb2plbmAuXG4gICAqXG4gICAqIFRoaXMgaXMgcmVxdWlyZWQgc2luY2UgcHJvamVuIHVwZGF0ZXMgbWF5IGNhdXNlIGNoYW5nZXMgaW4gY29tbWl0dGVkIGZpbGVzXG4gICAqIGFuZCBhbnRpLXRhbXBlciBjaGVja3Mgd2lsbCBmYWlsLlxuICAgKlxuICAgKiBQcm9qZW4gdXBncmFkZXMgYXJlIGNvdmVyZWQgdGhyb3VnaCB0aGUgYFByb2plblVwZ3JhZGVgIGNsYXNzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVQcm9qZW4/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIGxhYmVscyB0byBhcHBseSB0byB0aGUgY3JlYXRlZCBQUidzLlxuICAgKi9cbiAgcmVhZG9ubHkgbGFiZWxzPzogc3RyaW5nW107XG5cbiAgcmVhZG9ubHkgb3ZlcnJpZGVDb25maWc/OiBhbnk7XG5cbiAgcmVhZG9ubHkgbWFya2VyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTWluaW11bSByZWxlYXNlIGFnZSBmb3IgcGFja2FnZXMgYmVmb3JlIFJlbm92YXRlIHdpbGwgcHJvcG9zZSBhbiB1cGRhdGUuXG4gICAqXG4gICAqIFRoaXMgaXMgYSBzdXBwbHkgY2hhaW4gc2VjdXJpdHkgZmVhdHVyZSB0byBhdm9pZCB1cGRhdGluZyB0byBuZXdseSBwdWJsaXNoZWQsXG4gICAqIHBvdGVudGlhbGx5IG1hbGljaW91cyB2ZXJzaW9ucy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy8jbWluaW11bXJlbGVhc2VhZ2VcbiAgICogQGRlZmF1bHQgLSBubyBtaW5pbXVtIHJlbGVhc2UgYWdlXG4gICAqL1xuICByZWFkb25seSBtaW5pbXVtUmVsZWFzZUFnZT86IHN0cmluZztcblxuICAvKipcbiAgICogQ29udHJvbHMgd2hldGhlciBhIHJlbGVhc2UgdGltZXN0YW1wIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgYG1pbmltdW1SZWxlYXNlQWdlYC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL2RvY3MucmVub3ZhdGVib3QuY29tL2NvbmZpZ3VyYXRpb24tb3B0aW9ucy8jbWluaW11bXJlbGVhc2VhZ2ViZWhhdmlvdXJcbiAgICogQGRlZmF1bHQgUmVub3ZhdGVib3RNaW5pbXVtUmVsZWFzZUFnZUJlaGF2aW91ci5USU1FU1RBTVBfUkVRVUlSRURcbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1SZWxlYXNlQWdlQmVoYXZpb3VyPzogUmVub3ZhdGVib3RNaW5pbXVtUmVsZWFzZUFnZUJlaGF2aW91cjtcbn1cblxuLyoqXG4gKiBIb3cgb2Z0ZW4gdG8gY2hlY2sgZm9yIG5ldyB2ZXJzaW9ucyBhbmQgcmFpc2UgcHVsbCByZXF1ZXN0cyBmb3IgdmVyc2lvblxuICogdXBkYXRlcy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vcHJlc2V0cy1zY2hlZHVsZS9cbiAqL1xuZXhwb3J0IGVudW0gUmVub3ZhdGVib3RTY2hlZHVsZUludGVydmFsIHtcbiAgLyoqXG4gICAqIFJ1biBhdCBhbnkgdGltZVxuICAgKi9cbiAgQU5ZX1RJTUUgPSBcImF0IGFueSB0aW1lXCIsXG5cbiAgLyoqXG4gICAqIFdlZWtseSBzY2hlZHVsZSBvbiBlYXJseSBtb25kYXkgbW9ybmluZ3NcbiAgICovXG4gIEVBUkxZX01PTkRBWVMgPSBcImJlZm9yZSAzYW0gb24gTW9uZGF5XCIsXG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlIGRhaWx5XG4gICAqL1xuICBEQUlMWSA9IFwiYmVmb3JlIDJhbVwiLFxuXG4gIC8qKlxuICAgKiBTY2hlZHVsZSB3ZWVrbHlcbiAgICovXG4gIFdFRUtMWSA9IEVBUkxZX01PTkRBWVMsXG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlIG1vbnRobHlcbiAgICovXG4gIE1PTlRITFkgPSBcImJlZm9yZSAzYW0gb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcIixcblxuICAvKipcbiAgICogU2NoZWR1bGUgcXVhcnRlcmx5XG4gICAqL1xuICBRVUFSVEVSTFkgPSBcImV2ZXJ5IDMgbW9udGhzIG9uIHRoZSBmaXJzdCBkYXkgb2YgdGhlIG1vbnRoXCIsXG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlIGZvciB3ZWVrZW5kc1xuICAgKi9cbiAgV0VFS0VORFMgPSBcImV2ZXJ5IHdlZWtlbmRcIixcblxuICAvKipcbiAgICogU2NoZWR1bGUgZm9yIHdlZWtkYXlzXG4gICAqL1xuICBXRUVLREFZUyA9IFwiZXZlcnkgd2Vla2RheVwiLFxufVxuXG4vKipcbiAqIEJlaGF2aW91ciB3aGVuIGEgcmVsZWFzZSB0aW1lc3RhbXAgaXMgbWlzc2luZyBmb3IgYG1pbmltdW1SZWxlYXNlQWdlYC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vY29uZmlndXJhdGlvbi1vcHRpb25zLyNtaW5pbXVtcmVsZWFzZWFnZWJlaGF2aW91clxuICovXG5leHBvcnQgZW51bSBSZW5vdmF0ZWJvdE1pbmltdW1SZWxlYXNlQWdlQmVoYXZpb3VyIHtcbiAgLyoqXG4gICAqIEEgcmVsZWFzZSB3aXRob3V0IGEgdGltZXN0YW1wIGlzIG5vdCB0cmVhdGVkIGFzIHN0YWJsZS5cbiAgICovXG4gIFRJTUVTVEFNUF9SRVFVSVJFRCA9IFwidGltZXN0YW1wLXJlcXVpcmVkXCIsXG5cbiAgLyoqXG4gICAqIEEgcmVsZWFzZSB3aXRob3V0IGEgdGltZXN0YW1wIGlzIHRyZWF0ZWQgYXMgc3RhYmxlLlxuICAgKi9cbiAgVElNRVNUQU1QX09QVElPTkFMID0gXCJ0aW1lc3RhbXAtb3B0aW9uYWxcIixcbn1cblxuLyoqXG4gKiBEZWZpbmVzIHJlbm92YXRlYm90IGNvbmZpZ3VyYXRpb24gZm9yIHByb2plbiBwcm9qZWN0LlxuICpcbiAqIElnbm9yZXMgdGhlIHZlcnNpb25zIGNvbnRyb2xsZWQgYnkgUHJvamVuLlxuICovXG5leHBvcnQgY2xhc3MgUmVub3ZhdGVib3QgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIGZpbGUgaG9sZGluZyB0aGUgcmVub3ZhdGVib3QgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZpbGU6IEpzb25GaWxlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb2plY3Q6IFByb2plY3Q7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBleHBsaWNpdElnbm9yZXM6IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc2NoZWR1bGVJbnRlcnZhbDogc3RyaW5nW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBsYWJlbHM/OiBzdHJpbmdbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1hcmtlcj86IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSByZWFkb25seSBvdmVycmlkZUNvbmZpZz86IGFueTtcblxuICBwcml2YXRlIHJlYWRvbmx5IG1pbmltdW1SZWxlYXNlQWdlPzogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWluaW11bVJlbGVhc2VBZ2VCZWhhdmlvdXI/OiBSZW5vdmF0ZWJvdE1pbmltdW1SZWxlYXNlQWdlQmVoYXZpb3VyO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IFJlbm92YXRlYm90T3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLl9wcm9qZWN0ID0gcHJvamVjdDtcbiAgICB0aGlzLmV4cGxpY2l0SWdub3JlcyA9IG9wdGlvbnMuaWdub3JlID8/IFtdO1xuICAgIHRoaXMubGFiZWxzID0gb3B0aW9ucy5sYWJlbHM7XG4gICAgdGhpcy5zY2hlZHVsZUludGVydmFsID0gb3B0aW9ucy5zY2hlZHVsZUludGVydmFsID8/IFtcbiAgICAgIFJlbm92YXRlYm90U2NoZWR1bGVJbnRlcnZhbC5BTllfVElNRSxcbiAgICBdO1xuICAgIChvcHRpb25zLmlnbm9yZVByb2plbiA/PyB0cnVlKSAmJiB0aGlzLmV4cGxpY2l0SWdub3Jlcy5wdXNoKFwicHJvamVuXCIpO1xuICAgIHRoaXMub3ZlcnJpZGVDb25maWcgPSBvcHRpb25zLm92ZXJyaWRlQ29uZmlnID8/IHt9O1xuICAgIHRoaXMubWFya2VyID0gb3B0aW9ucy5tYXJrZXIgPz8gdHJ1ZTtcbiAgICB0aGlzLm1pbmltdW1SZWxlYXNlQWdlID0gb3B0aW9ucy5taW5pbXVtUmVsZWFzZUFnZTtcbiAgICB0aGlzLm1pbmltdW1SZWxlYXNlQWdlQmVoYXZpb3VyID0gb3B0aW9ucy5taW5pbXVtUmVsZWFzZUFnZUJlaGF2aW91cjtcblxuICAgIHRoaXMuZmlsZSA9IG5ldyBKc29uRmlsZSh0aGlzLl9wcm9qZWN0LCBcInJlbm92YXRlLmpzb241XCIsIHtcbiAgICAgIG9iajogKCkgPT4gdGhpcy5jcmVhdGVSZW5vdmF0ZUNvbmZpZ3VyYXRpb24oKSxcbiAgICAgIGNvbW1pdHRlZDogdHJ1ZSxcbiAgICAgIG1hcmtlcjogdGhpcy5tYXJrZXIsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZVJlbm92YXRlQ29uZmlndXJhdGlvbigpIHtcbiAgICBjb25zdCByZW5vdmF0ZUlnbm9yZSA9IFtcbiAgICAgIC4uLm5ldyBTZXQoXG4gICAgICAgIHRoaXMuX3Byb2plY3QuZGVwcy5hbGxcbiAgICAgICAgICAuZmlsdGVyKChkZXApID0+IGRlcC52ZXJzaW9uIHx8IGRlcC50eXBlID09PSBEZXBlbmRlbmN5VHlwZS5PVkVSUklERSlcbiAgICAgICAgICAubWFwKChkZXApID0+IGRlcC5uYW1lKVxuICAgICAgICAgIC5jb25jYXQodGhpcy5leHBsaWNpdElnbm9yZXMpLFxuICAgICAgKSxcbiAgICBdO1xuXG4gICAgLy8gSWdub3JlIHVwZGF0ZXMgdG8gZGVwZW5kZW5jaWVzIGluIGdlbmVyYXRlZCBHaXRIdWIgd29ya2Zsb3dzLlxuICAgIGNvbnN0IHdvcmtmbG93cyA9IHRoaXMuX3Byb2plY3QuY29tcG9uZW50c1xuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGNvbXBvbmVudCk6IGNvbXBvbmVudCBpcyBHaXRodWJXb3JrZmxvdyA9PlxuICAgICAgICAgIGNvbXBvbmVudCBpbnN0YW5jZW9mIEdpdGh1YldvcmtmbG93ICYmIGNvbXBvbmVudC5maWxlICE9PSB1bmRlZmluZWQsXG4gICAgICApXG4gICAgICAuc29ydCgodzEsIHcyKSA9PiB3MS5uYW1lLmxvY2FsZUNvbXBhcmUodzIubmFtZSkpO1xuICAgIGlmICh3b3JrZmxvd3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgYWN0aW9uczogc3RyaW5nW10gPSB3b3JrZmxvd3NcbiAgICAgICAgLmZsYXRNYXAoKHdvcmtmbG93KSA9PiBPYmplY3QudmFsdWVzKHdvcmtmbG93LmpvYnMpKVxuICAgICAgICAuZmxhdE1hcCgoam9iKSA9PiAoam9iIGFzIEpvYikuc3RlcHMpXG4gICAgICAgIC5tYXAoKHN0ZXApID0+IHN0ZXA/LnVzZXM/LnNwbGl0KFwiQFwiKVswXSlcbiAgICAgICAgLmZpbHRlcigoYWN0aW9uTmFtZSkgPT4gISFhY3Rpb25OYW1lKSBhcyBzdHJpbmdbXTtcblxuICAgICAgY29uc3QgcmV1c2FibGVXb3JrZmxvd3M6IHN0cmluZ1tdID0gd29ya2Zsb3dzXG4gICAgICAgIC5mbGF0TWFwKCh3b3JrZmxvdykgPT4gT2JqZWN0LnZhbHVlcyh3b3JrZmxvdy5qb2JzKSlcbiAgICAgICAgLmZsYXRNYXAoKGpvYikgPT4gKGpvYiBhcyBKb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdykudXNlcylcbiAgICAgICAgLm1hcCgocmV1c2FibGVXb3JrZmxvdykgPT4gcmV1c2FibGVXb3JrZmxvdz8uc3BsaXQoXCJAXCIpWzBdKTtcblxuICAgICAgcmVub3ZhdGVJZ25vcmUucHVzaCguLi5uZXcgU2V0KGFjdGlvbnMpKTtcbiAgICAgIHJlbm92YXRlSWdub3JlLnB1c2goLi4ubmV3IFNldChyZXVzYWJsZVdvcmtmbG93cykpO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dGVuZHNQcmVzZXRzID0gW1xuICAgICAgXCI6cHJlc2VydmVTZW12ZXJSYW5nZXNcIixcbiAgICAgIFwiY29uZmlnOnJlY29tbWVuZGVkXCIsXG4gICAgICBcImdyb3VwOmFsbE5vbk1ham9yXCIsXG4gICAgICBcImdyb3VwOnJlY29tbWVuZGVkXCIsXG4gICAgICBcImdyb3VwOm1vbm9yZXBvc1wiLFxuICAgIF07XG5cbiAgICAvLyBBZGQgQmlvbWUgY3VzdG9tIG1hbmFnZXIgaWYgQmlvbWUgaXMgY29uZmlndXJlZFxuICAgIC8vIExhenkgcmVxdWlyZSB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmN5IChyZW5vdmF0ZWJvdCAtPiBiaW9tZSAtPiBwcm9qZWN0IC0+IHJlbm92YXRlYm90KVxuICAgIGNvbnN0IHsgQmlvbWUgfSA9IHJlcXVpcmUoXCIuL2phdmFzY3JpcHQvYmlvbWUvYmlvbWVcIik7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuICAgIGlmIChCaW9tZS5vZih0aGlzLl9wcm9qZWN0KSkge1xuICAgICAgZXh0ZW5kc1ByZXNldHMucHVzaChcImN1c3RvbU1hbmFnZXJzOmJpb21lVmVyc2lvbnNcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGxhYmVsczogdGhpcy5sYWJlbHMsXG4gICAgICBzY2hlZHVsZTogdGhpcy5zY2hlZHVsZUludGVydmFsLFxuICAgICAgbWluaW11bVJlbGVhc2VBZ2U6IHRoaXMubWluaW11bVJlbGVhc2VBZ2UsXG4gICAgICBtaW5pbXVtUmVsZWFzZUFnZUJlaGF2aW91cjogdGhpcy5taW5pbXVtUmVsZWFzZUFnZUJlaGF2aW91cixcbiAgICAgIGV4dGVuZHM6IGV4dGVuZHNQcmVzZXRzLFxuICAgICAgcGFja2FnZVJ1bGVzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBtYXRjaERlcFR5cGVzOiBbXCJkZXZEZXBlbmRlbmNpZXNcIl0sXG4gICAgICAgICAgbWF0Y2hVcGRhdGVUeXBlczogW1wicGF0Y2hcIiwgXCJtaW5vclwiXSxcbiAgICAgICAgICBncm91cE5hbWU6IFwiZGV2RGVwZW5kZW5jaWVzIChub24tbWFqb3IpXCIsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgaWdub3JlRGVwczogcmVub3ZhdGVJZ25vcmUsXG4gICAgICAuLi50aGlzLm92ZXJyaWRlQ29uZmlnLFxuICAgIH07XG4gIH1cbn1cbiJdfQ==