projen
Version:
CDK for software projects
117 lines • 20.6 kB
JavaScript
;
var _a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.GitHub = void 0;
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
const actions_provider_1 = require("./actions-provider");
const dependabot_1 = require("./dependabot");
const dependency_review_1 = require("./dependency-review");
const github_credentials_1 = require("./github-credentials");
const merge_queue_1 = require("./merge-queue");
const mergify_1 = require("./mergify");
const pr_template_1 = require("./pr-template");
const pull_request_backport_1 = require("./pull-request-backport");
const pull_request_lint_1 = require("./pull-request-lint");
const workflow_steps_1 = require("./workflow-steps");
const workflows_1 = require("./workflows");
const component_1 = require("../component");
class GitHub extends component_1.Component {
/**
* Returns the `GitHub` component of a project or `undefined` if the project
* does not have a GitHub component.
*/
static of(project) {
const isGitHub = (c) => c instanceof GitHub;
return project.components.find(isGitHub);
}
constructor(project, options = {}) {
super(project);
this.actions = new actions_provider_1.GitHubActionsProvider();
this.workflowsEnabled = options.workflows ?? true;
this._downloadLfs = options.downloadLfs;
this._checkoutSubmodules = options.checkoutSubmodules;
if (options.projenCredentials && options.projenTokenSecret) {
throw new Error("projenTokenSecret is deprecated, please use projenCredentials instead");
}
// @deprecated
if (options.projenTokenSecret) {
this.projenCredentials = github_credentials_1.GithubCredentials.fromPersonalAccessToken({
secret: options.projenTokenSecret,
});
}
else if (options.projenCredentials) {
this.projenCredentials = options.projenCredentials;
}
else {
// default
this.projenCredentials = github_credentials_1.GithubCredentials.fromPersonalAccessToken({
secret: "PROJEN_GITHUB_TOKEN",
});
}
if (options.mergify ?? true) {
this.mergify = new mergify_1.Mergify(this, options.mergifyOptions);
}
if (options.mergeQueue ?? false) {
this.mergeQueue = new merge_queue_1.MergeQueue(this, options.mergeQueueOptions);
}
if (options.pullRequestLint ?? true) {
new pull_request_lint_1.PullRequestLint(this, options.pullRequestLintOptions);
}
if (options.pullRequestBackport ?? false) {
if (options.mergify) {
this.project.logger.warn("pullRequestBackport should not be used with mergify as mergify provides its own backport functionality. Please disable pullRequestBackport or mergify.");
}
new pull_request_backport_1.PullRequestBackport(this, options.pullRequestBackportOptions);
}
if (options.dependencyReview ?? false) {
new dependency_review_1.DependencyReview(this, options.dependencyReviewOptions);
}
}
/**
* All workflows.
*/
get workflows() {
const isWorkflow = (c) => c instanceof workflows_1.GithubWorkflow;
return this.project.components
.filter(isWorkflow)
.sort((w1, w2) => w1.name.localeCompare(w2.name));
}
/**
* Adds a workflow to the project.
* @param name Name of the workflow
* @returns a GithubWorkflow instance
*/
addWorkflow(name) {
const workflow = new workflows_1.GithubWorkflow(this, name);
return workflow;
}
addPullRequestTemplate(...content) {
return new pr_template_1.PullRequestTemplate(this, { lines: content });
}
addDependabot(options) {
return new dependabot_1.Dependabot(this, options);
}
/**
* Finds a GitHub workflow by name. Returns `undefined` if the workflow cannot be found.
* @param name The name of the GitHub workflow
*/
tryFindWorkflow(name) {
return this.workflows.find((w) => w.name === name);
}
/**
* Whether downloading from LFS is enabled for this GitHub project
*/
get downloadLfs() {
return this._downloadLfs ?? this.project.gitattributes.hasLfsPatterns;
}
/**
* Whether checking out Git submodules is enabled for this GitHub project.
*/
get checkoutSubmodules() {
return this._checkoutSubmodules ?? workflow_steps_1.CheckoutSubmodules.DISABLED;
}
}
exports.GitHub = GitHub;
_a = JSII_RTTI_SYMBOL_1;
GitHub[_a] = { fqn: "projen.github.GitHub", version: "0.99.64" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi9naXRodWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5REFBMkQ7QUFFM0QsNkNBQTBDO0FBRTFDLDJEQUF1RDtBQUN2RCw2REFBeUQ7QUFFekQsK0NBQTJDO0FBRTNDLHVDQUFvQztBQUNwQywrQ0FBb0Q7QUFFcEQsbUVBQThEO0FBRTlELDJEQUFzRDtBQUN0RCxxREFBc0Q7QUFDdEQsMkNBQTZDO0FBQzdDLDRDQUF5QztBQTZIekMsTUFBYSxNQUFPLFNBQVEscUJBQVM7SUFDbkM7OztPQUdHO0lBQ0ksTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFnQjtRQUMvQixNQUFNLFFBQVEsR0FBRyxDQUFDLENBQVksRUFBZSxFQUFFLENBQUMsQ0FBQyxZQUFZLE1BQU0sQ0FBQztRQUNwRSxPQUFPLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFnQ0QsWUFBbUIsT0FBZ0IsRUFBRSxVQUF5QixFQUFFO1FBQzlELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSx3Q0FBcUIsRUFBRSxDQUFDO1FBRTNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztRQUVsRCxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDeEMsSUFBSSxDQUFDLG1CQUFtQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztRQUV0RCxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzRCxNQUFNLElBQUksS0FBSyxDQUNiLHVFQUF1RSxDQUN4RSxDQUFDO1FBQ0osQ0FBQztRQUVELGNBQWM7UUFDZCxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxD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Q0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsV0FBVztRQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO0lBQ3hFLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsa0JBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixJQUFJLG1DQUFrQixDQUFDLFFBQVEsQ0FBQztJQUNqRSxDQUFDOztBQWpKSCx3QkFrSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHaXRIdWJBY3Rpb25zUHJvdmlkZXIgfSBmcm9tIFwiLi9hY3Rpb25zLXByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSB7IERlcGVuZGFib3RPcHRpb25zIH0gZnJvbSBcIi4vZGVwZW5kYWJvdFwiO1xuaW1wb3J0IHsgRGVwZW5kYWJvdCB9IGZyb20gXCIuL2RlcGVuZGFib3RcIjtcbmltcG9ydCB0eXBlIHsgRGVwZW5kZW5jeVJldmlld09wdGlvbnMgfSBmcm9tIFwiLi9kZXBlbmRlbmN5LXJldmlld1wiO1xuaW1wb3J0IHsgRGVwZW5kZW5jeVJldmlldyB9IGZyb20gXCIuL2RlcGVuZGVuY3ktcmV2aWV3XCI7XG5pbXBvcnQgeyBHaXRodWJDcmVkZW50aWFscyB9IGZyb20gXCIuL2dpdGh1Yi1jcmVkZW50aWFsc1wiO1xuaW1wb3J0IHR5cGUgeyBNZXJnZVF1ZXVlT3B0aW9ucyB9IGZyb20gXCIuL21lcmdlLXF1ZXVlXCI7XG5pbXBvcnQgeyBNZXJnZVF1ZXVlIH0gZnJvbSBcIi4vbWVyZ2UtcXVldWVcIjtcbmltcG9ydCB0eXBlIHsgTWVyZ2lmeU9wdGlvbnMgfSBmcm9tIFwiLi9tZXJnaWZ5XCI7XG5pbXBvcnQgeyBNZXJnaWZ5IH0gZnJvbSBcIi4vbWVyZ2lmeVwiO1xuaW1wb3J0IHsgUHVsbFJlcXVlc3RUZW1wbGF0ZSB9IGZyb20gXCIuL3ByLXRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSB7IFB1bGxSZXF1ZXN0QmFja3BvcnRPcHRpb25zIH0gZnJvbSBcIi4vcHVsbC1yZXF1ZXN0LWJhY2twb3J0XCI7XG5pbXBvcnQgeyBQdWxsUmVxdWVzdEJhY2twb3J0IH0gZnJvbSBcIi4vcHVsbC1yZXF1ZXN0LWJhY2twb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFB1bGxSZXF1ZXN0TGludE9wdGlvbnMgfSBmcm9tIFwiLi9wdWxsLXJlcXVlc3QtbGludFwiO1xuaW1wb3J0IHsgUHVsbFJlcXVlc3RMaW50IH0gZnJvbSBcIi4vcHVsbC1yZXF1ZXN0LWxpbnRcIjtcbmltcG9ydCB7IENoZWNrb3V0U3VibW9kdWxlcyB9IGZyb20gXCIuL3dvcmtmbG93LXN0ZXBzXCI7XG5pbXBvcnQgeyBHaXRodWJXb3JrZmxvdyB9IGZyb20gXCIuL3dvcmtmbG93c1wiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHaXRIdWJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgbWVyZ2lmeSBzaG91bGQgYmUgZW5hYmxlZCBvbiB0aGlzIHJlcG9zaXRvcnkgb3Igbm90LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBtZXJnaWZ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgTWVyZ2lmeS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG1lcmdpZnlPcHRpb25zPzogTWVyZ2lmeU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBtZXJnZSBxdWV1ZSBzaG91bGQgYmUgdXNlZCBvbiB0aGlzIHJlcG9zaXRvcnkgdG8gbWVyZ2UgcHVsbCByZXF1ZXN0cy5cbiAgICogUmVxdWlyZXMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9mIHRoZSByZXBvc2l0b3JpZXMgYnJhbmNoIHByb3RlY3Rpb24gcnVsZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBtZXJnZVF1ZXVlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgTWVyZ2VRdWV1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG1lcmdlUXVldWVPcHRpb25zPzogTWVyZ2VRdWV1ZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgR2l0SHViIHdvcmtmbG93cy4gSWYgdGhpcyBpcyBzZXQgdG8gYGZhbHNlYCwgd29ya2Zsb3dzIHdpbGwgbm90IGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZCBhIHdvcmtmbG93IHRoYXQgYWxsb3dzIGJhY2twb3J0IG9mIFBScyB0byBvdGhlciBicmFuY2hlcyB1c2luZyBsYWJlbHMuXG4gICAqIFdoZW4gb3BlbmluZyBhIG5ldyBQUiBhZGQgYSBiYWNrcG9ydCBsYWJlbCB0byBpdCxcbiAgICogYW5kIHRoZSBQUiB3aWxsIGJlIGJhY2twb3J0ZWQgdG8gdGhlIHRhcmdldCBicmFuY2hlcyBvbmNlIHRoZSBQUiBpcyBtZXJnZWQuXG4gICAqXG4gICAqIFNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIG1lcmdpZnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdEJhY2twb3J0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgcHVsbCByZXF1ZXN0IGJhY2twb3J0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlZSBkZWZhdWx0cyBpbiBgUHVsbFJlcXVlc3RCYWNrcG9ydE9wdGlvbnNgXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdEJhY2twb3J0T3B0aW9ucz86IFB1bGxSZXF1ZXN0QmFja3BvcnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBZGQgYSB3b3JrZmxvdyB0aGF0IHBlcmZvcm1zIGJhc2ljIGNoZWNrcyBmb3IgcHVsbCByZXF1ZXN0cywgbGlrZVxuICAgKiB2YWxpZGF0aW5nIHRoYXQgUFJzIGZvbGxvdyBDb252ZW50aW9uYWwgQ29tbWl0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3RMaW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYSBwdWxsIHJlcXVlc3QgbGludGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlZSBkZWZhdWx0cyBpbiBgUHVsbFJlcXVlc3RMaW50T3B0aW9uc2BcbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0TGludE9wdGlvbnM/OiBQdWxsUmVxdWVzdExpbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBDaG9vc2UgYSBtZXRob2Qgb2YgcHJvdmlkaW5nIEdpdEh1YiBBUEkgYWNjZXNzIGZvciBwcm9qZW4gd29ya2Zsb3dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVzZSBhIHBlcnNvbmFsIGFjY2VzcyB0b2tlbiBuYW1lZCBQUk9KRU5fR0lUSFVCX1RPS0VOXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5DcmVkZW50aWFscz86IEdpdGh1YkNyZWRlbnRpYWxzO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiBhIHNlY3JldCB3aGljaCBpbmNsdWRlcyBhIEdpdEh1YiBQZXJzb25hbCBBY2Nlc3MgVG9rZW4gdG8gYmVcbiAgICogdXNlZCBieSBwcm9qZW4gd29ya2Zsb3dzLiBUaGlzIHRva2VuIG5lZWRzIHRvIGhhdmUgdGhlIGByZXBvYCwgYHdvcmtmbG93c2BcbiAgICogYW5kIGBwYWNrYWdlc2Agc2NvcGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiUFJPSkVOX0dJVEhVQl9UT0tFTlwiXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGBwcm9qZW5DcmVkZW50aWFsc2BcbiAgICovXG4gIHJlYWRvbmx5IHByb2plblRva2VuU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEb3dubG9hZCBmaWxlcyBpbiBMRlMgaW4gd29ya2Zsb3dzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUgaWYgdGhlIGFzc29jaWF0ZWQgcHJvamVjdCBoYXMgYGxmc1BhdHRlcm5zYCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIHJlYWRvbmx5IGRvd25sb2FkTGZzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIHRoZSBkZXBlbmRlbmN5LXJldmlldy1hY3Rpb24gd29ya2Zsb3cgb24gcHVsbCByZXF1ZXN0cy5cbiAgICpcbiAgICogQWRkcyBhIHNlcGFyYXRlIHdvcmtmbG93IHRoYXQgcnVucyBgYWN0aW9ucy9kZXBlbmRlbmN5LXJldmlldy1hY3Rpb25gXG4gICAqIHRvIHNjYW4gcHVsbCByZXF1ZXN0cyBmb3IgbmV3bHkgaW50cm9kdWNlZCB2dWxuZXJhYmxlIG9yIG5vbi1jb21wbGlhbnRcbiAgICogZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jeVJldmlldz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSBkZXBlbmRlbmN5IHJldmlldyB3b3JrZmxvdy5cbiAgICpcbiAgICogT25seSB1c2VkIHdoZW4gYGRlcGVuZGVuY3lSZXZpZXdgIGlzIGB0cnVlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY3lSZXZpZXdPcHRpb25zPzogRGVwZW5kZW5jeVJldmlld09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY2hlY2tvdXQgR2l0IHN1Ym1vZHVsZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IENoZWNrb3V0U3VibW9kdWxlcy5ESVNBQkxFRFxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tvdXRTdWJtb2R1bGVzPzogQ2hlY2tvdXRTdWJtb2R1bGVzO1xufVxuXG5leHBvcnQgY2xhc3MgR2l0SHViIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGBHaXRIdWJgIGNvbXBvbmVudCBvZiBhIHByb2plY3Qgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIHByb2plY3RcbiAgICogZG9lcyBub3QgaGF2ZSBhIEdpdEh1YiBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHByb2plY3Q6IFByb2plY3QpOiBHaXRIdWIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzR2l0SHViID0gKGM6IENvbXBvbmVudCk6IGMgaXMgR2l0SHViID0+IGMgaW5zdGFuY2VvZiBHaXRIdWI7XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maW5kKGlzR2l0SHViKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYE1lcmdpZnlgIGNvbXBvbmVudCBjb25maWd1cmVkIG9uIHRoaXMgcmVwb3NpdG9yeVxuICAgKiBUaGlzIGlzIGB1bmRlZmluZWRgIGlmIE1lcmdpZnkgaXMgbm90IGVuYWJsZWQgZm9yIHRoaXMgcmVwb3NpdG9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZXJnaWZ5PzogTWVyZ2lmeTtcblxuICAvKipcbiAgICogVGhlIGBNZXJnZVF1ZXVlYCBjb21wb25lbnQgY29uZmlndXJlZCBvbiB0aGlzIHJlcG9zaXRvcnlcbiAgICogVGhpcyBpcyBgdW5kZWZpbmVkYCBpZiBtZXJnZSBxdWV1ZXMgYXJlIG5vdCBlbmFibGVkIGZvciB0aGlzIHJlcG9zaXRvcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWVyZ2VRdWV1ZT86IE1lcmdlUXVldWU7XG5cbiAgLyoqXG4gICAqIEFyZSB3b3JrZmxvd3MgZW5hYmxlZD9cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB3b3JrZmxvd3NFbmFibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHaXRIdWIgQVBJIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB1c2VkIGJ5IHByb2plbiB3b3JrZmxvd3MuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvamVuQ3JlZGVudGlhbHM6IEdpdGh1YkNyZWRlbnRpYWxzO1xuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIEFjdGlvbnMgcHJvdmlkZXIgdXNlZCB0byBtYW5hZ2UgdGhlIHZlcnNpb25zIG9mIGFjdGlvbnMgdXNlZCBpbiBzdGVwc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFjdGlvbnM6IEdpdEh1YkFjdGlvbnNQcm92aWRlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kb3dubG9hZExmcz86IGJvb2xlYW47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoZWNrb3V0U3VibW9kdWxlcz86IENoZWNrb3V0U3VibW9kdWxlcztcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogR2l0SHViT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLmFjdGlvbnMgPSBuZXcgR2l0SHViQWN0aW9uc1Byb3ZpZGVyKCk7XG5cbiAgICB0aGlzLndvcmtmbG93c0VuYWJsZWQgPSBvcHRpb25zLndvcmtmbG93cyA/PyB0cnVlO1xuXG4gICAgdGhpcy5fZG93bmxvYWRMZnMgPSBvcHRpb25zLmRvd25sb2FkTGZzO1xuICAgIHRoaXMuX2NoZWNrb3V0U3VibW9kdWxlcyA9IG9wdGlvbnMuY2hlY2tvdXRTdWJtb2R1bGVzO1xuXG4gICAgaWYgKG9wdGlvbnMucHJvamVuQ3JlZGVudGlhbHMgJiYgb3B0aW9ucy5wcm9qZW5Ub2tlblNlY3JldCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcInByb2plblRva2VuU2VjcmV0IGlzIGRlcHJlY2F0ZWQsIHBsZWFzZSB1c2UgcHJvamVuQ3JlZGVudGlhbHMgaW5zdGVhZFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBAZGVwcmVjYXRlZFxuICAgIGlmIChvcHRpb25zLnByb2plblRva2VuU2VjcmV0KSB7XG4gICAgICB0aGlzLnByb2plbkNyZWRlbnRpYWxzID0gR2l0aHViQ3JlZGVudGlhbHMuZnJvbVBlcnNvbmFsQWNjZXNzVG9rZW4oe1xuICAgICAgICBzZWNyZXQ6IG9wdGlvbnMucHJvamVuVG9rZW5TZWNyZXQsXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucHJvamVuQ3JlZGVudGlhbHMpIHtcbiAgICAgIHRoaXMucHJvamVuQ3JlZGVudGlhbHMgPSBvcHRpb25zLnByb2plbkNyZWRlbnRpYWxzO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkZWZhdWx0XG4gICAgICB0aGlzLnByb2plbkNyZWRlbnRpYWxzID0gR2l0aHViQ3JlZGVudGlhbHMuZnJvbVBlcnNvbmFsQWNjZXNzVG9rZW4oe1xuICAgICAgICBzZWNyZXQ6IFwiUFJPSkVOX0dJVEhVQl9UT0tFTlwiLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubWVyZ2lmeSA/PyB0cnVlKSB7XG4gICAgICB0aGlzLm1lcmdpZnkgPSBuZXcgTWVyZ2lmeSh0aGlzLCBvcHRpb25zLm1lcmdpZnlPcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tZXJnZVF1ZXVlID8/IGZhbHNlKSB7XG4gICAgICB0aGlzLm1lcmdlUXVldWUgPSBuZXcgTWVyZ2VRdWV1ZSh0aGlzLCBvcHRpb25zLm1lcmdlUXVldWVPcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wdWxsUmVxdWVzdExpbnQgPz8gdHJ1ZSkge1xuICAgICAgbmV3IFB1bGxSZXF1ZXN0TGludCh0aGlzLCBvcHRpb25zLnB1bGxSZXF1ZXN0TGludE9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnB1bGxSZXF1ZXN0QmFja3BvcnQgPz8gZmFsc2UpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lcmdpZnkpIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0LmxvZ2dlci53YXJuKFxuICAgICAgICAgIFwicHVsbFJlcXVlc3RCYWNrcG9ydCBzaG91bGQgbm90IGJlIHVzZWQgd2l0aCBtZXJnaWZ5IGFzIG1lcmdpZnkgcHJvdmlkZXMgaXRzIG93biBiYWNrcG9ydCBmdW5jdGlvbmFsaXR5LiBQbGVhc2UgZGlzYWJsZSBwdWxsUmVxdWVzdEJhY2twb3J0IG9yIG1lcmdpZnkuXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBuZXcgUHVsbFJlcXVlc3RCYWNrcG9ydCh0aGlzLCBvcHRpb25zLnB1bGxSZXF1ZXN0QmFja3BvcnRPcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5kZXBlbmRlbmN5UmV2aWV3ID8/IGZhbHNlKSB7XG4gICAgICBuZXcgRGVwZW5kZW5jeVJldmlldyh0aGlzLCBvcHRpb25zLmRlcGVuZGVuY3lSZXZpZXdPcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWxsIHdvcmtmbG93cy5cbiAgICovXG4gIHB1YmxpYyBnZXQgd29ya2Zsb3dzKCk6IEdpdGh1YldvcmtmbG93W10ge1xuICAgIGNvbnN0IGlzV29ya2Zsb3cgPSAoYzogQ29tcG9uZW50KTogYyBpcyBHaXRodWJXb3JrZmxvdyA9PlxuICAgICAgYyBpbnN0YW5jZW9mIEdpdGh1YldvcmtmbG93O1xuICAgIHJldHVybiB0aGlzLnByb2plY3QuY29tcG9uZW50c1xuICAgICAgLmZpbHRlcihpc1dvcmtmbG93KVxuICAgICAgLnNvcnQoKHcxLCB3MikgPT4gdzEubmFtZS5sb2NhbGVDb21wYXJlKHcyLm5hbWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgd29ya2Zsb3cgdG8gdGhlIHByb2plY3QuXG4gICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHdvcmtmbG93XG4gICAqIEByZXR1cm5zIGEgR2l0aHViV29ya2Zsb3cgaW5zdGFuY2VcbiAgICovXG4gIHB1YmxpYyBhZGRXb3JrZmxvdyhuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB3b3JrZmxvdyA9IG5ldyBHaXRodWJXb3JrZmxvdyh0aGlzLCBuYW1lKTtcbiAgICByZXR1cm4gd29ya2Zsb3c7XG4gIH1cblxuICBwdWJsaWMgYWRkUHVsbFJlcXVlc3RUZW1wbGF0ZSguLi5jb250ZW50OiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBuZXcgUHVsbFJlcXVlc3RUZW1wbGF0ZSh0aGlzLCB7IGxpbmVzOiBjb250ZW50IH0pO1xuICB9XG5cbiAgcHVibGljIGFkZERlcGVuZGFib3Qob3B0aW9ucz86IERlcGVuZGFib3RPcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBEZXBlbmRhYm90KHRoaXMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIGEgR2l0SHViIHdvcmtmbG93IGJ5IG5hbWUuIFJldHVybnMgYHVuZGVmaW5lZGAgaWYgdGhlIHdvcmtmbG93IGNhbm5vdCBiZSBmb3VuZC5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIEdpdEh1YiB3b3JrZmxvd1xuICAgKi9cbiAgcHVibGljIHRyeUZpbmRXb3JrZmxvdyhuYW1lOiBzdHJpbmcpOiB1bmRlZmluZWQgfCBHaXRodWJXb3JrZmxvdyB7XG4gICAgcmV0dXJuIHRoaXMud29ya2Zsb3dzLmZpbmQoKHcpID0+IHcubmFtZSA9PT0gbmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciBkb3dubG9hZGluZyBmcm9tIExGUyBpcyBlbmFibGVkIGZvciB0aGlzIEdpdEh1YiBwcm9qZWN0XG4gICAqL1xuICBwdWJsaWMgZ2V0IGRvd25sb2FkTGZzKCkge1xuICAgIHJldHVybiB0aGlzLl9kb3dubG9hZExmcyA/PyB0aGlzLnByb2plY3QuZ2l0YXR0cmlidXRlcy5oYXNMZnNQYXR0ZXJucztcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGNoZWNraW5nIG91dCBHaXQgc3VibW9kdWxlcyBpcyBlbmFibGVkIGZvciB0aGlzIEdpdEh1YiBwcm9qZWN0LlxuICAgKi9cbiAgcHVibGljIGdldCBjaGVja291dFN1Ym1vZHVsZXMoKTogQ2hlY2tvdXRTdWJtb2R1bGVzIHtcbiAgICByZXR1cm4gdGhpcy5fY2hlY2tvdXRTdWJtb2R1bGVzID8/IENoZWNrb3V0U3VibW9kdWxlcy5ESVNBQkxFRDtcbiAgfVxufVxuIl19