projen
Version:
CDK for software projects
140 lines • 18.9 kB
JavaScript
;
var _a;
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 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 {
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 GitHub Action updates in Projen created workspaces
const github = this._project.github;
if (github?.workflowsEnabled) {
const actions = github.workflows
.flatMap((workflow) => Object.values(workflow.jobs))
.flatMap((job) => job.steps)
.map((step) => step?.uses?.split("@")[0])
.filter((actionName) => !!actionName);
const reusableWorkflows = github.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));
}
return {
labels: this.labels,
schedule: this.scheduleInterval,
minimumReleaseAge: this.minimumReleaseAge,
minimumReleaseAgeBehaviour: this.minimumReleaseAgeBehaviour,
extends: [
":preserveSemverRanges",
"config:recommended",
"group:allNonMajor",
"group:recommended",
"group:monorepos",
],
packageRules: [
{
matchDepTypes: ["devDependencies"],
matchUpdateTypes: ["patch", "minor"],
groupName: "devDependencies (non-major)",
},
],
ignoreDeps: renovateIgnore,
...this.overrideConfig,
};
}
}
exports.Renovatebot = Renovatebot;
_a = JSII_RTTI_SYMBOL_1;
Renovatebot[_a] = { fqn: "projen.Renovatebot", version: "0.99.51" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVub3ZhdGVib3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmVub3ZhdGVib3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSwyQ0FBd0M7QUFDeEMsaURBQWdEO0FBR2hELGlDQUFrQztBQXFFbEM7Ozs7O0dBS0c7QUFDSCxJQUFZLDJCQXdDWDtBQXhDRCxXQUFZLDJCQUEyQjtJQUNyQzs7T0FFRztJQUNILHVEQUF3QixDQUFBO0lBRXhCOztPQUVHO0lBQ0gscUVBQXNDLENBQUE7SUFFdEM7O09BRUc7SUFDSCxtREFBb0IsQ0FBQTtJQUVwQjs7T0FFRztJQUNILDhEQUFzQixDQUFBO0lBRXRCOztPQUVHO0lBQ0gsbUZBQW9ELENBQUE7SUFFcEQ7O09BRUc7SUFDSCx5RkFBMEQsQ0FBQTtJQUUxRDs7T0FFRztJQUNILHlEQUEwQixDQUFBO0lBRTFCOztPQUVHO0lBQ0gseURBQTBCLENBQUE7QUFDNUIsQ0FBQyxFQXhDVywyQkFBMkIsMkNBQTNCLDJCQUEyQixRQXdDdEM7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxxQ0FVWDtBQVZELFdBQVkscUNBQXFDO0lBQy9DOztPQUVHO0lBQ0gsa0ZBQXlDLENBQUE7SUFFekM7O09BRUc7SUFDSCxrRkFBeUMsQ0FBQTtBQUMzQyxDQUFDLEVBVlcscUNBQXFDLHFEQUFyQyxxQ0FBcUMsUUFVaEQ7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxXQUFZLFNBQVEscUJBQVM7SUFzQnhDLFlBQVksT0FBZ0IsRUFBRSxVQUE4QixFQUFFO1FBQzVELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDNUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxP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TTtZQUNuQixRQUFRLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtZQUMvQixpQkFBaUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCO1lBQ3pDLDBCQUEwQixFQUFFLElBQUksQ0FBQywwQkFBMEI7WUFDM0QsT0FBTyxFQUFFO2dCQUNQLHVCQUF1QjtnQkFDdkIsb0JBQW9CO2dCQUNwQixtQkFBbUI7Z0JBQ25CLG1CQUFtQjtnQkFDbkIsaUJBQWlCO2FBQ2xCO1lBQ0QsWUFBWSxFQUFFO2dCQUNaO29CQUNFLGFBQWEsRUFBRSxDQUFDLGlCQUFpQixDQUFDO29CQUNsQyxnQkFBZ0IsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7b0JBQ3BDLFNBQVMsRUFBRSw2QkFBNkI7aUJBQ3pDO2FBQ0Y7WUFDRCxVQUFVLEVBQUUsY0FBYztZQUMxQixHQUFHLElBQUksQ0FBQyxjQUFjO1NBQ3ZCLENBQUM7SUFDSixDQUFDOztBQTlGSCxrQ0ErRkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSBcIi4vZGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgdHlwZSB7IEdpdEh1YiB9IGZyb20gXCIuL2dpdGh1YlwiO1xuaW1wb3J0IHR5cGUgeyBKb2IsIEpvYkNhbGxpbmdSZXVzYWJsZVdvcmtmbG93IH0gZnJvbSBcIi4vZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgSnNvbkZpbGUgfSBmcm9tIFwiLi9qc29uXCI7XG5pbXBvcnQgdHlwZSB7IFByb2plY3QgfSBmcm9tIFwiLi9wcm9qZWN0XCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgUmVub3ZhdGVib3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5vdmF0ZWJvdE9wdGlvbnMge1xuICAvKipcbiAgICogSG93IG9mdGVuIHRvIGNoZWNrIGZvciBuZXcgdmVyc2lvbnMgYW5kIHJhaXNlIHB1bGwgcmVxdWVzdHMuXG4gICAqXG4gICAqIENhbiBiZSBnaXZlbiBpbiBDUk9OIG9yIExBVEVSIGZvcm1hdCwgYW5kIHVzZSBtdWx0aXBsZSBzY2hlZHVsZXNcbiAgICogKGUuZy4gZGlmZmVyZW50IGZvciB3ZWVrZGF5cyBhbmQgd2Vla2VuZHMpLiBNdWx0aXBsZSBydWxlcyBhcmVcbiAgICogaGFuZGxlcyBhcyBPUi5cbiAgICpcbiAgICogU29tZSBub3JtYWwgc2NoZWR1bGluZyB2YWx1ZXMgZGVmaW5lZCBpbiBlbnVtIGBSZW5vdmF0ZWJvdFNjaGVkdWxlSW50ZXJ2YWxgLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vY29uZmlndXJhdGlvbi1vcHRpb25zLyNzY2hlZHVsZVxuICAgKiBAZGVmYXVsdCBbXCJhdCBhbnkgdGltZVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZWR1bGVJbnRlcnZhbD86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHVzZSB0aGUgYGlnbm9yZWAgb3B0aW9uIHRvIGN1c3RvbWl6ZSB3aGljaCBkZXBlbmRlbmNpZXMgYXJlIHVwZGF0ZWQuXG4gICAqIFRoZSBpZ25vcmUgb3B0aW9uIHN1cHBvcnRzIGp1c3QgcGFja2FnZSBuYW1lLlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIElnbm9yZXMgdXBkYXRlcyB0byBgcHJvamVuYC5cbiAgICpcbiAgICogVGhpcyBpcyByZXF1aXJlZCBzaW5jZSBwcm9qZW4gdXBkYXRlcyBtYXkgY2F1c2UgY2hhbmdlcyBpbiBjb21taXR0ZWQgZmlsZXNcbiAgICogYW5kIGFudGktdGFtcGVyIGNoZWNrcyB3aWxsIGZhaWwuXG4gICAqXG4gICAqIFByb2plbiB1cGdyYWRlcyBhcmUgY292ZXJlZCB0aHJvdWdoIHRoZSBgUHJvamVuVXBncmFkZWAgY2xhc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVByb2plbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgbGFiZWxzIHRvIGFwcGx5IHRvIHRoZSBjcmVhdGVkIFBSJ3MuXG4gICAqL1xuICByZWFkb25seSBsYWJlbHM/OiBzdHJpbmdbXTtcblxuICByZWFkb25seSBvdmVycmlkZUNvbmZpZz86IGFueTtcblxuICByZWFkb25seSBtYXJrZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNaW5pbXVtIHJlbGVhc2UgYWdlIGZvciBwYWNrYWdlcyBiZWZvcmUgUmVub3ZhdGUgd2lsbCBwcm9wb3NlIGFuIHVwZGF0ZS5cbiAgICpcbiAgICogVGhpcyBpcyBhIHN1cHBseSBjaGFpbiBzZWN1cml0eSBmZWF0dXJlIHRvIGF2b2lkIHVwZGF0aW5nIHRvIG5ld2x5IHB1Ymxpc2hlZCxcbiAgICogcG90ZW50aWFsbHkgbWFsaWNpb3VzIHZlcnNpb25zLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vY29uZmlndXJhdGlvbi1vcHRpb25zLyNtaW5pbXVtcmVsZWFzZWFnZVxuICAgKiBAZGVmYXVsdCAtIG5vIG1pbmltdW0gcmVsZWFzZSBhZ2VcbiAgICovXG4gIHJlYWRvbmx5IG1pbmltdW1SZWxlYXNlQWdlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGV0aGVyIGEgcmVsZWFzZSB0aW1lc3RhbXAgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyBgbWluaW11bVJlbGVhc2VBZ2VgLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5yZW5vdmF0ZWJvdC5jb20vY29uZmlndXJhdGlvbi1vcHRpb25zLyNtaW5pbXVtcmVsZWFzZWFnZWJlaGF2aW91clxuICAgKiBAZGVmYXVsdCBSZW5vdmF0ZWJvdE1pbmltdW1SZWxlYXNlQWdlQmVoYXZpb3VyLlRJTUVTVEFNUF9SRVFVSVJFRFxuICAgKi9cbiAgcmVhZG9ubHkgbWluaW11bVJlbGVhc2VBZ2VCZWhhdmlvdXI/OiBSZW5vdmF0ZWJvdE1pbmltdW1SZWxlYXNlQWdlQmVoYXZpb3VyO1xufVxuXG4vKipcbiAqIEhvdyBvZnRlbiB0byBjaGVjayBmb3IgbmV3IHZlcnNpb25zIGFuZCByYWlzZSBwdWxsIHJlcXVlc3RzIGZvciB2ZXJzaW9uXG4gKiB1cGRhdGVzLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLnJlbm92YXRlYm90LmNvbS9wcmVzZXRzLXNjaGVkdWxlL1xuICovXG5leHBvcnQgZW51bSBSZW5vdmF0ZWJvdFNjaGVkdWxlSW50ZXJ2YWwge1xuICAvKipcbiAgICogUnVuIGF0IGFueSB0aW1lXG4gICAqL1xuICBBTllfVElNRSA9IFwiYXQgYW55IHRpbWVcIixcblxuICAvKipcbiAgICogV2Vla2x5IHNjaGVkdWxlIG9uIGVhcmx5IG1vbmRheSBtb3JuaW5nc1xuICAgKi9cbiAgRUFSTFlfTU9OREFZUyA9IFwiYmVmb3JlIDNhbSBvbiBNb25kYXlcIixcblxuICAvKipcbiAgICogU2NoZWR1bGUgZGFpbHlcbiAgICovXG4gIERBSUxZID0gXCJiZWZvcmUgMmFtXCIsXG5cbiAgLyoqXG4gICAqIFNjaGVkdWxlIHdlZWtseVxuICAgKi9cbiAgV0VFS0xZID0gRUFSTFlfTU9OREFZUyxcblxuICAvKipcbiAgICogU2NoZWR1bGUgbW9udGhseVxuICAgKi9cbiAgTU9OVEhMWSA9IFwiYmVmb3JlIDNhbSBvbiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aFwiLFxuXG4gIC8qKlxuICAgKiBTY2hlZHVsZSBxdWFydGVybHlcbiAgICovXG4gIFFVQVJURVJMWSA9IFwiZXZlcnkgMyBtb250aHMgb24gdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGhcIixcblxuICAvKipcbiAgICogU2NoZWR1bGUgZm9yIHdlZWtlbmRzXG4gICAqL1xuICBXRUVLRU5EUyA9IFwiZXZlcnkgd2Vla2VuZFwiLFxuXG4gIC8qKlxuICAgKiBTY2hlZHVsZSBmb3Igd2Vla2RheXNcbiAgICovXG4gIFdFRUtEQVlTID0gXCJldmVyeSB3ZWVrZGF5XCIsXG59XG5cbi8qKlxuICogQmVoYXZpb3VyIHdoZW4gYSByZWxlYXNlIHRpbWVzdGFtcCBpcyBtaXNzaW5nIGZvciBgbWluaW11bVJlbGVhc2VBZ2VgLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLnJlbm92YXRlYm90LmNvbS9jb25maWd1cmF0aW9uLW9wdGlvbnMvI21pbmltdW1yZWxlYXNlYWdlYmVoYXZpb3VyXG4gKi9cbmV4cG9ydCBlbnVtIFJlbm92YXRlYm90TWluaW11bVJlbGVhc2VBZ2VCZWhhdmlvdXIge1xuICAvKipcbiAgICogQSByZWxlYXNlIHdpdGhvdXQgYSB0aW1lc3RhbXAgaXMgbm90IHRyZWF0ZWQgYXMgc3RhYmxlLlxuICAgKi9cbiAgVElNRVNUQU1QX1JFUVVJUkVEID0gXCJ0aW1lc3RhbXAtcmVxdWlyZWRcIixcblxuICAvKipcbiAgICogQSByZWxlYXNlIHdpdGhvdXQgYSB0aW1lc3RhbXAgaXMgdHJlYXRlZCBhcyBzdGFibGUuXG4gICAqL1xuICBUSU1FU1RBTVBfT1BUSU9OQUwgPSBcInRpbWVzdGFtcC1vcHRpb25hbFwiLFxufVxuXG4vKipcbiAqIERlZmluZXMgcmVub3ZhdGVib3QgY29uZmlndXJhdGlvbiBmb3IgcHJvamVuIHByb2plY3QuXG4gKlxuICogSWdub3JlcyB0aGUgdmVyc2lvbnMgY29udHJvbGxlZCBieSBQcm9qZW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBSZW5vdmF0ZWJvdCBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgZmlsZSBob2xkaW5nIHRoZSByZW5vdmF0ZWJvdCBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZTogSnNvbkZpbGU7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfcHJvamVjdDogUHJvamVjdDtcblxuICBwcml2YXRlIHJlYWRvbmx5IGV4cGxpY2l0SWdub3Jlczogc3RyaW5nW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzY2hlZHVsZUludGVydmFsOiBzdHJpbmdbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IGxhYmVscz86IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFya2VyPzogYm9vbGVhbjtcblxuICBwcml2YXRlIHJlYWRvbmx5IG92ZXJyaWRlQ29uZmlnPzogYW55O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWluaW11bVJlbGVhc2VBZ2U/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBtaW5pbXVtUmVsZWFzZUFnZUJlaGF2aW91cj86IFJlbm92YXRlYm90TWluaW11bVJlbGVhc2VBZ2VCZWhhdmlvdXI7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogUmVub3ZhdGVib3RPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMuX3Byb2plY3QgPSBwcm9qZWN0O1xuICAgIHRoaXMuZXhwbGljaXRJZ25vcmVzID0gb3B0aW9ucy5pZ25vcmUgPz8gW107XG4gICAgdGhpcy5sYWJlbHMgPSBvcHRpb25zLmxhYmVscztcbiAgICB0aGlzLnNjaGVkdWxlSW50ZXJ2YWwgPSBvcHRpb25zLnNjaGVkdWxlSW50ZXJ2YWwgPz8gW1xuICAgICAgUmVub3ZhdGVib3RTY2hlZHVsZUludGVydmFsLkFOWV9USU1FLFxuICAgIF07XG4gICAgKG9wdGlvbnMuaWdub3JlUHJvamVuID8/IHRydWUpICYmIHRoaXMuZXhwbGljaXRJZ25vcmVzLnB1c2goXCJwcm9qZW5cIik7XG4gICAgdGhpcy5vdmVycmlkZUNvbmZpZyA9IG9wdGlvbnMub3ZlcnJpZGVDb25maWcgPz8ge307XG4gICAgdGhpcy5tYXJrZXIgPSBvcHRpb25zLm1hcmtlciA/PyB0cnVlO1xuICAgIHRoaXMubWluaW11bVJlbGVhc2VBZ2UgPSBvcHRpb25zLm1pbmltdW1SZWxlYXNlQWdlO1xuICAgIHRoaXMubWluaW11bVJlbGVhc2VBZ2VCZWhhdmlvdXIgPSBvcHRpb25zLm1pbmltdW1SZWxlYXNlQWdlQmVoYXZpb3VyO1xuXG4gICAgdGhpcy5maWxlID0gbmV3IEpzb25GaWxlKHRoaXMuX3Byb2plY3QsIFwicmVub3ZhdGUuanNvbjVcIiwge1xuICAgICAgb2JqOiAoKSA9PiB0aGlzLmNyZWF0ZVJlbm92YXRlQ29uZmlndXJhdGlvbigpLFxuICAgICAgY29tbWl0dGVkOiB0cnVlLFxuICAgICAgbWFya2VyOiB0aGlzLm1hcmtlcixcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlUmVub3ZhdGVDb25maWd1cmF0aW9uKCkge1xuICAgIGNvbnN0IHJlbm92YXRlSWdub3JlID0gW1xuICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgdGhpcy5fcHJvamVjdC5kZXBzLmFsbFxuICAgICAgICAgIC5maWx0ZXIoKGRlcCkgPT4gZGVwLnZlcnNpb24gfHwgZGVwLnR5cGUgPT09IERlcGVuZGVuY3lUeXBlLk9WRVJSSURFKVxuICAgICAgICAgIC5tYXAoKGRlcCkgPT4gZGVwLm5hbWUpXG4gICAgICAgICAgLmNvbmNhdCh0aGlzLmV4cGxpY2l0SWdub3JlcyksXG4gICAgICApLFxuICAgIF07XG5cbiAgICAvLyBJZ25vcmUgR2l0SHViIEFjdGlvbiB1cGRhdGVzIGluIFByb2plbiBjcmVhdGVkIHdvcmtzcGFjZXNcbiAgICBjb25zdCBnaXRodWI6IEdpdEh1YiA9ICh0aGlzLl9wcm9qZWN0IGFzIGFueSkuZ2l0aHViO1xuICAgIGlmIChnaXRodWI/LndvcmtmbG93c0VuYWJsZWQpIHtcbiAgICAgIGNvbnN0IGFjdGlvbnM6IHN0cmluZ1tdID0gZ2l0aHViLndvcmtmbG93c1xuICAgICAgICAuZmxhdE1hcCgod29ya2Zsb3cpID0+IE9iamVjdC52YWx1ZXMod29ya2Zsb3cuam9icykpXG4gICAgICAgIC5mbGF0TWFwKChqb2IpID0+IChqb2IgYXMgSm9iKS5zdGVwcylcbiAgICAgICAgLm1hcCgoc3RlcCkgPT4gc3RlcD8udXNlcz8uc3BsaXQoXCJAXCIpWzBdKVxuICAgICAgICAuZmlsdGVyKChhY3Rpb25OYW1lKSA9PiAhIWFjdGlvbk5hbWUpIGFzIHN0cmluZ1tdO1xuXG4gICAgICBjb25zdCByZXVzYWJsZVdvcmtmbG93czogc3RyaW5nW10gPSBnaXRodWIud29ya2Zsb3dzXG4gICAgICAgIC5mbGF0TWFwKCh3b3JrZmxvdykgPT4gT2JqZWN0LnZhbHVlcyh3b3JrZmxvdy5qb2JzKSlcbiAgICAgICAgLmZsYXRNYXAoKGpvYikgPT4gKGpvYiBhcyBKb2JDYWxsaW5nUmV1c2FibGVXb3JrZmxvdykudXNlcylcbiAgICAgICAgLm1hcCgocmV1c2FibGVXb3JrZmxvdykgPT4gcmV1c2FibGVXb3JrZmxvdz8uc3BsaXQoXCJAXCIpWzBdKTtcblxuICAgICAgcmVub3ZhdGVJZ25vcmUucHVzaCguLi5uZXcgU2V0KGFjdGlvbnMpKTtcbiAgICAgIHJlbm92YXRlSWdub3JlLnB1c2goLi4ubmV3IFNldChyZXVzYWJsZVdvcmtmbG93cykpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBsYWJlbHM6IHRoaXMubGFiZWxzLFxuICAgICAgc2NoZWR1bGU6IHRoaXMuc2NoZWR1bGVJbnRlcnZhbCxcbiAgICAgIG1pbmltdW1SZWxlYXNlQWdlOiB0aGlzLm1pbmltdW1SZWxlYXNlQWdlLFxuICAgICAgbWluaW11bVJlbGVhc2VBZ2VCZWhhdmlvdXI6IHRoaXMubWluaW11bVJlbGVhc2VBZ2VCZWhhdmlvdXIsXG4gICAgICBleHRlbmRzOiBbXG4gICAgICAgIFwiOnByZXNlcnZlU2VtdmVyUmFuZ2VzXCIsXG4gICAgICAgIFwiY29uZmlnOnJlY29tbWVuZGVkXCIsXG4gICAgICAgIFwiZ3JvdXA6YWxsTm9uTWFqb3JcIixcbiAgICAgICAgXCJncm91cDpyZWNvbW1lbmRlZFwiLFxuICAgICAgICBcImdyb3VwOm1vbm9yZXBvc1wiLFxuICAgICAgXSxcbiAgICAgIHBhY2thZ2VSdWxlczogW1xuICAgICAgICB7XG4gICAgICAgICAgbWF0Y2hEZXBUeXBlczogW1wiZGV2RGVwZW5kZW5jaWVzXCJdLFxuICAgICAgICAgIG1hdGNoVXBkYXRlVHlwZXM6IFtcInBhdGNoXCIsIFwibWlub3JcIl0sXG4gICAgICAgICAgZ3JvdXBOYW1lOiBcImRldkRlcGVuZGVuY2llcyAobm9uLW1ham9yKVwiLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGlnbm9yZURlcHM6IHJlbm92YXRlSWdub3JlLFxuICAgICAgLi4udGhpcy5vdmVycmlkZUNvbmZpZyxcbiAgICB9O1xuICB9XG59XG4iXX0=