projen
Version:
CDK for software projects
105 lines • 17.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 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 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;
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);
}
}
/**
* 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;
}
}
exports.GitHub = GitHub;
_a = JSII_RTTI_SYMBOL_1;
GitHub[_a] = { fqn: "projen.github.GitHub", version: "0.99.16" };
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi9naXRodWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5REFBMkQ7QUFDM0QsNkNBQTZEO0FBQzdELDZEQUF5RDtBQUN6RCwrQ0FBOEQ7QUFDOUQsdUNBQW9EO0FBQ3BELCtDQUFvRDtBQUNwRCxtRUFHaUM7QUFDakMsMkRBQThFO0FBQzlFLDJDQUE2QztBQUM3Qyw0Q0FBeUM7QUFrR3pDLE1BQWEsTUFBTyxTQUFRLHFCQUFTO0lBQ25DOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFZLEVBQWUsRUFBRSxDQUFDLENBQUMsWUFBWSxNQUFNLENBQUM7UUFDcEUsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBK0JELFlBQW1CLE9BQWdCLEVBQUUsVUFBeUIsRUFBRTtRQUM5RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksd0NBQXFCLEVBQUUsQ0FBQztRQUUzQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUM7UUFFbEQsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBRXhDLElBQUksT0FBTyxDQUFDLGlCQUFpQixJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNELE1BQU0sSUFBSSxLQUFLLENBQ2IsdUVBQXVFLENBQ3hFLENBQUM7UUFDSixDQUFDO1FBRUQsY0FBYztRQUNkLElBQUksT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLHNDQUFpQixDQUFDLHVCQUF1QixDQUFDO2dCQUNqRSxNQUFNLEVBQUUsT0FB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fSBmcm9tIFwiLi9hY3Rpb25zLXByb3ZpZGVyXCI7XG5pbXBvcnQgeyBEZXBlbmRhYm90LCBEZXBlbmRhYm90T3B0aW9ucyB9IGZyb20gXCIuL2RlcGVuZGFib3RcIjtcbmltcG9ydCB7IEdpdGh1YkNyZWRlbnRpYWxzIH0gZnJvbSBcIi4vZ2l0aHViLWNyZWRlbnRpYWxzXCI7XG5pbXBvcnQgeyBNZXJnZVF1ZXVlLCBNZXJnZVF1ZXVlT3B0aW9ucyB9IGZyb20gXCIuL21lcmdlLXF1ZXVlXCI7XG5pbXBvcnQgeyBNZXJnaWZ5LCBNZXJnaWZ5T3B0aW9ucyB9IGZyb20gXCIuL21lcmdpZnlcIjtcbmltcG9ydCB7IFB1bGxSZXF1ZXN0VGVtcGxhdGUgfSBmcm9tIFwiLi9wci10ZW1wbGF0ZVwiO1xuaW1wb3J0IHtcbiAgUHVsbFJlcXVlc3RCYWNrcG9ydCxcbiAgUHVsbFJlcXVlc3RCYWNrcG9ydE9wdGlvbnMsXG59IGZyb20gXCIuL3B1bGwtcmVxdWVzdC1iYWNrcG9ydFwiO1xuaW1wb3J0IHsgUHVsbFJlcXVlc3RMaW50LCBQdWxsUmVxdWVzdExpbnRPcHRpb25zIH0gZnJvbSBcIi4vcHVsbC1yZXF1ZXN0LWxpbnRcIjtcbmltcG9ydCB7IEdpdGh1YldvcmtmbG93IH0gZnJvbSBcIi4vd29ya2Zsb3dzXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBQcm9qZWN0IH0gZnJvbSBcIi4uL3Byb2plY3RcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHaXRIdWJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgbWVyZ2lmeSBzaG91bGQgYmUgZW5hYmxlZCBvbiB0aGlzIHJlcG9zaXRvcnkgb3Igbm90LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBtZXJnaWZ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgTWVyZ2lmeS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG1lcmdpZnlPcHRpb25zPzogTWVyZ2lmeU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBtZXJnZSBxdWV1ZSBzaG91bGQgYmUgdXNlZCBvbiB0aGlzIHJlcG9zaXRvcnkgdG8gbWVyZ2UgcHVsbCByZXF1ZXN0cy5cbiAgICogUmVxdWlyZXMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9mIHRoZSByZXBvc2l0b3JpZXMgYnJhbmNoIHByb3RlY3Rpb24gcnVsZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBtZXJnZVF1ZXVlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgTWVyZ2VRdWV1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG1lcmdlUXVldWVPcHRpb25zPzogTWVyZ2VRdWV1ZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgR2l0SHViIHdvcmtmbG93cy4gSWYgdGhpcyBpcyBzZXQgdG8gYGZhbHNlYCwgd29ya2Zsb3dzIHdpbGwgbm90IGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZCBhIHdvcmtmbG93IHRoYXQgYWxsb3dzIGJhY2twb3J0IG9mIFBScyB0byBvdGhlciBicmFuY2hlcyB1c2luZyBsYWJlbHMuXG4gICAqIFdoZW4gb3BlbmluZyBhIG5ldyBQUiBhZGQgYSBiYWNrcG9ydCBsYWJlbCB0byBpdCxcbiAgICogYW5kIHRoZSBQUiB3aWxsIGJlIGJhY2twb3J0ZWQgdG8gdGhlIHRhcmdldCBicmFuY2hlcyBvbmNlIHRoZSBQUiBpcyBtZXJnZWQuXG4gICAqXG4gICAqIFNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIG1lcmdpZnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdEJhY2twb3J0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgcHVsbCByZXF1ZXN0IGJhY2twb3J0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlZSBkZWZhdWx0cyBpbiBgUHVsbFJlcXVlc3RCYWNrcG9ydE9wdGlvbnNgXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdEJhY2twb3J0T3B0aW9ucz86IFB1bGxSZXF1ZXN0QmFja3BvcnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBZGQgYSB3b3JrZmxvdyB0aGF0IHBlcmZvcm1zIGJhc2ljIGNoZWNrcyBmb3IgcHVsbCByZXF1ZXN0cywgbGlrZVxuICAgKiB2YWxpZGF0aW5nIHRoYXQgUFJzIGZvbGxvdyBDb252ZW50aW9uYWwgQ29tbWl0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3RMaW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYSBwdWxsIHJlcXVlc3QgbGludGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlZSBkZWZhdWx0cyBpbiBgUHVsbFJlcXVlc3RMaW50T3B0aW9uc2BcbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0TGludE9wdGlvbnM/OiBQdWxsUmVxdWVzdExpbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBDaG9vc2UgYSBtZXRob2Qgb2YgcHJvdmlkaW5nIEdpdEh1YiBBUEkgYWNjZXNzIGZvciBwcm9qZW4gd29ya2Zsb3dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVzZSBhIHBlcnNvbmFsIGFjY2VzcyB0b2tlbiBuYW1lZCBQUk9KRU5fR0lUSFVCX1RPS0VOXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5DcmVkZW50aWFscz86IEdpdGh1YkNyZWRlbnRpYWxzO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiBhIHNlY3JldCB3aGljaCBpbmNsdWRlcyBhIEdpdEh1YiBQZXJzb25hbCBBY2Nlc3MgVG9rZW4gdG8gYmVcbiAgICogdXNlZCBieSBwcm9qZW4gd29ya2Zsb3dzLiBUaGlzIHRva2VuIG5lZWRzIHRvIGhhdmUgdGhlIGByZXBvYCwgYHdvcmtmbG93c2BcbiAgICogYW5kIGBwYWNrYWdlc2Agc2NvcGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiUFJPSkVOX0dJVEhVQl9UT0tFTlwiXG4gICAqIEBkZXByZWNhdGVkIC0gdXNlIGBwcm9qZW5DcmVkZW50aWFsc2BcbiAgICovXG4gIHJlYWRvbmx5IHByb2plblRva2VuU2VjcmV0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEb3dubG9hZCBmaWxlcyBpbiBMRlMgaW4gd29ya2Zsb3dzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUgaWYgdGhlIGFzc29jaWF0ZWQgcHJvamVjdCBoYXMgYGxmc1BhdHRlcm5zYCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIHJlYWRvbmx5IGRvd25sb2FkTGZzPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNsYXNzIEdpdEh1YiBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBgR2l0SHViYCBjb21wb25lbnQgb2YgYSBwcm9qZWN0IG9yIGB1bmRlZmluZWRgIGlmIHRoZSBwcm9qZWN0XG4gICAqIGRvZXMgbm90IGhhdmUgYSBHaXRIdWIgY29tcG9uZW50LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBvZihwcm9qZWN0OiBQcm9qZWN0KTogR2l0SHViIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc0dpdEh1YiA9IChjOiBDb21wb25lbnQpOiBjIGlzIEdpdEh1YiA9PiBjIGluc3RhbmNlb2YgR2l0SHViO1xuICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc0dpdEh1Yik7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGBNZXJnaWZ5YCBjb21wb25lbnQgY29uZmlndXJlZCBvbiB0aGlzIHJlcG9zaXRvcnlcbiAgICogVGhpcyBpcyBgdW5kZWZpbmVkYCBpZiBNZXJnaWZ5IGlzIG5vdCBlbmFibGVkIGZvciB0aGlzIHJlcG9zaXRvcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWVyZ2lmeT86IE1lcmdpZnk7XG5cbiAgLyoqXG4gICAqIFRoZSBgTWVyZ2VRdWV1ZWAgY29tcG9uZW50IGNvbmZpZ3VyZWQgb24gdGhpcyByZXBvc2l0b3J5XG4gICAqIFRoaXMgaXMgYHVuZGVmaW5lZGAgaWYgbWVyZ2UgcXVldWVzIGFyZSBub3QgZW5hYmxlZCBmb3IgdGhpcyByZXBvc2l0b3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1lcmdlUXVldWU/OiBNZXJnZVF1ZXVlO1xuXG4gIC8qKlxuICAgKiBBcmUgd29ya2Zsb3dzIGVuYWJsZWQ/XG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya2Zsb3dzRW5hYmxlZDogYm9vbGVhbjtcblxuICAvKipcbiAgICogR2l0SHViIEFQSSBhdXRoZW50aWNhdGlvbiBtZXRob2QgdXNlZCBieSBwcm9qZW4gd29ya2Zsb3dzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHByb2plbkNyZWRlbnRpYWxzOiBHaXRodWJDcmVkZW50aWFscztcblxuICAvKipcbiAgICogVGhlIEdpdEh1YiBBY3Rpb25zIHByb3ZpZGVyIHVzZWQgdG8gbWFuYWdlIHRoZSB2ZXJzaW9ucyBvZiBhY3Rpb25zIHVzZWQgaW4gc3RlcHNcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhY3Rpb25zOiBHaXRIdWJBY3Rpb25zUHJvdmlkZXI7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZG93bmxvYWRMZnM/OiBib29sZWFuO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBHaXRIdWJPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMuYWN0aW9ucyA9IG5ldyBHaXRIdWJBY3Rpb25zUHJvdmlkZXIoKTtcblxuICAgIHRoaXMud29ya2Zsb3dzRW5hYmxlZCA9IG9wdGlvbnMud29ya2Zsb3dzID8/IHRydWU7XG5cbiAgICB0aGlzLl9kb3dubG9hZExmcyA9IG9wdGlvbnMuZG93bmxvYWRMZnM7XG5cbiAgICBpZiAob3B0aW9ucy5wcm9qZW5DcmVkZW50aWFscyAmJiBvcHRpb25zLnByb2plblRva2VuU2VjcmV0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwicHJvamVuVG9rZW5TZWNyZXQgaXMgZGVwcmVjYXRlZCwgcGxlYXNlIHVzZSBwcm9qZW5DcmVkZW50aWFscyBpbnN0ZWFkXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEBkZXByZWNhdGVkXG4gICAgaWYgKG9wdGlvbnMucHJvamVuVG9rZW5TZWNyZXQpIHtcbiAgICAgIHRoaXMucHJvamVuQ3JlZGVudGlhbHMgPSBHaXRodWJDcmVkZW50aWFscy5mcm9tUGVyc29uYWxBY2Nlc3NUb2tlbih7XG4gICAgICAgIHNlY3JldDogb3B0aW9ucy5wcm9qZW5Ub2tlblNlY3JldCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcm9qZW5DcmVkZW50aWFscykge1xuICAgICAgdGhpcy5wcm9qZW5DcmVkZW50aWFscyA9IG9wdGlvbnMucHJvamVuQ3JlZGVudGlhbHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHRcbiAgICAgIHRoaXMucHJvamVuQ3JlZGVudGlhbHMgPSBHaXRodWJDcmVkZW50aWFscy5mcm9tUGVyc29uYWxBY2Nlc3NUb2tlbih7XG4gICAgICAgIHNlY3JldDogXCJQUk9KRU5fR0lUSFVCX1RPS0VOXCIsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tZXJnaWZ5ID8/IHRydWUpIHtcbiAgICAgIHRoaXMubWVyZ2lmeSA9IG5ldyBNZXJnaWZ5KHRoaXMsIG9wdGlvbnMubWVyZ2lmeU9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1lcmdlUXVldWUgPz8gZmFsc2UpIHtcbiAgICAgIHRoaXMubWVyZ2VRdWV1ZSA9IG5ldyBNZXJnZVF1ZXVlKHRoaXMsIG9wdGlvbnMubWVyZ2VRdWV1ZU9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnB1bGxSZXF1ZXN0TGludCA/PyB0cnVlKSB7XG4gICAgICBuZXcgUHVsbFJlcXVlc3RMaW50KHRoaXMsIG9wdGlvbnMucHVsbFJlcXVlc3RMaW50T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucHVsbFJlcXVlc3RCYWNrcG9ydCA/PyBmYWxzZSkge1xuICAgICAgaWYgKG9wdGlvbnMubWVyZ2lmeSkge1xuICAgICAgICB0aGlzLnByb2plY3QubG9nZ2VyLndhcm4oXG4gICAgICAgICAgXCJwdWxsUmVxdWVzdEJhY2twb3J0IHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIG1lcmdpZnkgYXMgbWVyZ2lmeSBwcm92aWRlcyBpdHMgb3duIGJhY2twb3J0IGZ1bmN0aW9uYWxpdHkuIFBsZWFzZSBkaXNhYmxlIHB1bGxSZXF1ZXN0QmFja3BvcnQgb3IgbWVyZ2lmeS5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5ldyBQdWxsUmVxdWVzdEJhY2twb3J0KHRoaXMsIG9wdGlvbnMucHVsbFJlcXVlc3RCYWNrcG9ydE9wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwgd29ya2Zsb3dzLlxuICAgKi9cbiAgcHVibGljIGdldCB3b3JrZmxvd3MoKTogR2l0aHViV29ya2Zsb3dbXSB7XG4gICAgY29uc3QgaXNXb3JrZmxvdyA9IChjOiBDb21wb25lbnQpOiBjIGlzIEdpdGh1YldvcmtmbG93ID0+XG4gICAgICBjIGluc3RhbmNlb2YgR2l0aHViV29ya2Zsb3c7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdC5jb21wb25lbnRzXG4gICAgICAuZmlsdGVyKGlzV29ya2Zsb3cpXG4gICAgICAuc29ydCgodzEsIHcyKSA9PiB3MS5uYW1lLmxvY2FsZUNvbXBhcmUodzIubmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB3b3JrZmxvdyB0byB0aGUgcHJvamVjdC5cbiAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgd29ya2Zsb3dcbiAgICogQHJldHVybnMgYSBHaXRodWJXb3JrZmxvdyBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIGFkZFdvcmtmbG93KG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHdvcmtmbG93ID0gbmV3IEdpdGh1YldvcmtmbG93KHRoaXMsIG5hbWUpO1xuICAgIHJldHVybiB3b3JrZmxvdztcbiAgfVxuXG4gIHB1YmxpYyBhZGRQdWxsUmVxdWVzdFRlbXBsYXRlKC4uLmNvbnRlbnQ6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIG5ldyBQdWxsUmVxdWVzdFRlbXBsYXRlKHRoaXMsIHsgbGluZXM6IGNvbnRlbnQgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkRGVwZW5kYWJvdChvcHRpb25zPzogRGVwZW5kYWJvdE9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IERlcGVuZGFib3QodGhpcywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYSBHaXRIdWIgd29ya2Zsb3cgYnkgbmFtZS4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgd29ya2Zsb3cgY2Fubm90IGJlIGZvdW5kLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgR2l0SHViIHdvcmtmbG93XG4gICAqL1xuICBwdWJsaWMgdHJ5RmluZFdvcmtmbG93KG5hbWU6IHN0cmluZyk6IHVuZGVmaW5lZCB8IEdpdGh1YldvcmtmbG93IHtcbiAgICByZXR1cm4gdGhpcy53b3JrZmxvd3MuZmluZCgodykgPT4gdy5uYW1lID09PSBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGRvd25sb2FkaW5nIGZyb20gTEZTIGlzIGVuYWJsZWQgZm9yIHRoaXMgR2l0SHViIHByb2plY3RcbiAgICovXG4gIHB1YmxpYyBnZXQgZG93bmxvYWRMZnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25sb2FkTGZzID8/IHRoaXMucHJvamVjdC5naXRhdHRyaWJ1dGVzLmhhc0xmc1BhdHRlcm5zO1xuICB9XG59XG4iXX0=