UNPKG

projen

Version:

CDK for software projects

109 lines • 19.3 kB
"use strict"; 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 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); } 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; } } exports.GitHub = GitHub; _a = JSII_RTTI_SYMBOL_1; GitHub[_a] = { fqn: "projen.github.GitHub", version: "0.99.51" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi9naXRodWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSx5REFBMkQ7QUFFM0QsNkNBQTBDO0FBRTFDLDJEQUF1RDtBQUN2RCw2REFBeUQ7QUFFekQsK0NBQTJDO0FBRTNDLHVDQUFvQztBQUNwQywrQ0FBb0Q7QUFFcEQsbUVBQThEO0FBRTlELDJEQUFzRDtBQUN0RCwyQ0FBNkM7QUFDN0MsNENBQXlDO0FBc0h6QyxNQUFhLE1BQU8sU0FBUSxxQkFBUztJQUNuQzs7O09BR0c7SUFDSSxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQWdCO1FBQy9CLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBWSxFQUFlLEVBQUUsQ0FBQyxDQUFDLFlBQVksTUFBTSxDQUFDO1FBQ3BFLE9BQU8sT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQStCRCxZQUFtQixPQUFnQixFQUFFLFVBQXlCLEVBQUU7UUFDOUQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLHdDQUFxQixFQUFFLENBQUM7UUFFM0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDO1FBRWxELElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUV4QyxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsSUFBSSxPQUFPLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztZQUMzRCxNQUFNLElBQUksS0FBSyxDQUNiLHVFQUF1RSxDQUN4RSxDQUFDO1FBQ0osQ0FBQztRQUVELGNBQWM7UUFDZCxJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxzQ0FBaUIsQ0FBQyx1QkFBdUIsQ0FBQztnQkFDakUs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Q0FBQyxZQUFZLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDO0lBQ3hFLENBQUM7O0FBeElILHdCQXlJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdpdEh1YkFjdGlvbnNQcm92aWRlciB9IGZyb20gXCIuL2FjdGlvbnMtcHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIHsgRGVwZW5kYWJvdE9wdGlvbnMgfSBmcm9tIFwiLi9kZXBlbmRhYm90XCI7XG5pbXBvcnQgeyBEZXBlbmRhYm90IH0gZnJvbSBcIi4vZGVwZW5kYWJvdFwiO1xuaW1wb3J0IHR5cGUgeyBEZXBlbmRlbmN5UmV2aWV3T3B0aW9ucyB9IGZyb20gXCIuL2RlcGVuZGVuY3ktcmV2aWV3XCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5UmV2aWV3IH0gZnJvbSBcIi4vZGVwZW5kZW5jeS1yZXZpZXdcIjtcbmltcG9ydCB7IEdpdGh1YkNyZWRlbnRpYWxzIH0gZnJvbSBcIi4vZ2l0aHViLWNyZWRlbnRpYWxzXCI7XG5pbXBvcnQgdHlwZSB7IE1lcmdlUXVldWVPcHRpb25zIH0gZnJvbSBcIi4vbWVyZ2UtcXVldWVcIjtcbmltcG9ydCB7IE1lcmdlUXVldWUgfSBmcm9tIFwiLi9tZXJnZS1xdWV1ZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXJnaWZ5T3B0aW9ucyB9IGZyb20gXCIuL21lcmdpZnlcIjtcbmltcG9ydCB7IE1lcmdpZnkgfSBmcm9tIFwiLi9tZXJnaWZ5XCI7XG5pbXBvcnQgeyBQdWxsUmVxdWVzdFRlbXBsYXRlIH0gZnJvbSBcIi4vcHItdGVtcGxhdGVcIjtcbmltcG9ydCB0eXBlIHsgUHVsbFJlcXVlc3RCYWNrcG9ydE9wdGlvbnMgfSBmcm9tIFwiLi9wdWxsLXJlcXVlc3QtYmFja3BvcnRcIjtcbmltcG9ydCB7IFB1bGxSZXF1ZXN0QmFja3BvcnQgfSBmcm9tIFwiLi9wdWxsLXJlcXVlc3QtYmFja3BvcnRcIjtcbmltcG9ydCB0eXBlIHsgUHVsbFJlcXVlc3RMaW50T3B0aW9ucyB9IGZyb20gXCIuL3B1bGwtcmVxdWVzdC1saW50XCI7XG5pbXBvcnQgeyBQdWxsUmVxdWVzdExpbnQgfSBmcm9tIFwiLi9wdWxsLXJlcXVlc3QtbGludFwiO1xuaW1wb3J0IHsgR2l0aHViV29ya2Zsb3cgfSBmcm9tIFwiLi93b3JrZmxvd3NcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgR2l0SHViT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG1lcmdpZnkgc2hvdWxkIGJlIGVuYWJsZWQgb24gdGhpcyByZXBvc2l0b3J5IG9yIG5vdC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVyZ2lmeT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIE1lcmdpZnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBtZXJnaWZ5T3B0aW9ucz86IE1lcmdpZnlPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGEgbWVyZ2UgcXVldWUgc2hvdWxkIGJlIHVzZWQgb24gdGhpcyByZXBvc2l0b3J5IHRvIG1lcmdlIHB1bGwgcmVxdWVzdHMuXG4gICAqIFJlcXVpcmVzIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgcmVwb3NpdG9yaWVzIGJyYW5jaCBwcm90ZWN0aW9uIHJ1bGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbWVyZ2VRdWV1ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIE1lcmdlUXVldWUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBtZXJnZVF1ZXVlT3B0aW9ucz86IE1lcmdlUXVldWVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIEdpdEh1YiB3b3JrZmxvd3MuIElmIHRoaXMgaXMgc2V0IHRvIGBmYWxzZWAsIHdvcmtmbG93cyB3aWxsIG5vdCBiZSBjcmVhdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZGQgYSB3b3JrZmxvdyB0aGF0IGFsbG93cyBiYWNrcG9ydCBvZiBQUnMgdG8gb3RoZXIgYnJhbmNoZXMgdXNpbmcgbGFiZWxzLlxuICAgKiBXaGVuIG9wZW5pbmcgYSBuZXcgUFIgYWRkIGEgYmFja3BvcnQgbGFiZWwgdG8gaXQsXG4gICAqIGFuZCB0aGUgUFIgd2lsbCBiZSBiYWNrcG9ydGVkIHRvIHRoZSB0YXJnZXQgYnJhbmNoZXMgb25jZSB0aGUgUFIgaXMgbWVyZ2VkLlxuICAgKlxuICAgKiBTaG91bGQgbm90IGJlIHVzZWQgdG9nZXRoZXIgd2l0aCBtZXJnaWZ5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3RCYWNrcG9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIHB1bGwgcmVxdWVzdCBiYWNrcG9ydC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzZWUgZGVmYXVsdHMgaW4gYFB1bGxSZXF1ZXN0QmFja3BvcnRPcHRpb25zYFxuICAgKi9cbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3RCYWNrcG9ydE9wdGlvbnM/OiBQdWxsUmVxdWVzdEJhY2twb3J0T3B0aW9ucztcblxuICAvKipcbiAgICogQWRkIGEgd29ya2Zsb3cgdGhhdCBwZXJmb3JtcyBiYXNpYyBjaGVja3MgZm9yIHB1bGwgcmVxdWVzdHMsIGxpa2VcbiAgICogdmFsaWRhdGluZyB0aGF0IFBScyBmb2xsb3cgQ29udmVudGlvbmFsIENvbW1pdHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0TGludD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGNvbmZpZ3VyaW5nIGEgcHVsbCByZXF1ZXN0IGxpbnRlci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzZWUgZGVmYXVsdHMgaW4gYFB1bGxSZXF1ZXN0TGludE9wdGlvbnNgXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdExpbnRPcHRpb25zPzogUHVsbFJlcXVlc3RMaW50T3B0aW9ucztcblxuICAvKipcbiAgICogQ2hvb3NlIGEgbWV0aG9kIG9mIHByb3ZpZGluZyBHaXRIdWIgQVBJIGFjY2VzcyBmb3IgcHJvamVuIHdvcmtmbG93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB1c2UgYSBwZXJzb25hbCBhY2Nlc3MgdG9rZW4gbmFtZWQgUFJPSkVOX0dJVEhVQl9UT0tFTlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVuQ3JlZGVudGlhbHM/OiBHaXRodWJDcmVkZW50aWFscztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgYSBzZWNyZXQgd2hpY2ggaW5jbHVkZXMgYSBHaXRIdWIgUGVyc29uYWwgQWNjZXNzIFRva2VuIHRvIGJlXG4gICAqIHVzZWQgYnkgcHJvamVuIHdvcmtmbG93cy4gVGhpcyB0b2tlbiBuZWVkcyB0byBoYXZlIHRoZSBgcmVwb2AsIGB3b3JrZmxvd3NgXG4gICAqIGFuZCBgcGFja2FnZXNgIHNjb3BlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIlBST0pFTl9HSVRIVUJfVE9LRU5cIlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBgcHJvamVuQ3JlZGVudGlhbHNgXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5Ub2tlblNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogRG93bmxvYWQgZmlsZXMgaW4gTEZTIGluIHdvcmtmbG93c1xuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlIGlmIHRoZSBhc3NvY2lhdGVkIHByb2plY3QgaGFzIGBsZnNQYXR0ZXJuc2AsIGBmYWxzZWAgb3RoZXJ3aXNlXG4gICAqL1xuICByZWFkb25seSBkb3dubG9hZExmcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB0aGUgZGVwZW5kZW5jeS1yZXZpZXctYWN0aW9uIHdvcmtmbG93IG9uIHB1bGwgcmVxdWVzdHMuXG4gICAqXG4gICAqIEFkZHMgYSBzZXBhcmF0ZSB3b3JrZmxvdyB0aGF0IHJ1bnMgYGFjdGlvbnMvZGVwZW5kZW5jeS1yZXZpZXctYWN0aW9uYFxuICAgKiB0byBzY2FuIHB1bGwgcmVxdWVzdHMgZm9yIG5ld2x5IGludHJvZHVjZWQgdnVsbmVyYWJsZSBvciBub24tY29tcGxpYW50XG4gICAqIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY3lSZXZpZXc/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciB0aGUgZGVwZW5kZW5jeSByZXZpZXcgd29ya2Zsb3cuXG4gICAqXG4gICAqIE9ubHkgdXNlZCB3aGVuIGBkZXBlbmRlbmN5UmV2aWV3YCBpcyBgdHJ1ZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmN5UmV2aWV3T3B0aW9ucz86IERlcGVuZGVuY3lSZXZpZXdPcHRpb25zO1xufVxuXG5leHBvcnQgY2xhc3MgR2l0SHViIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGBHaXRIdWJgIGNvbXBvbmVudCBvZiBhIHByb2plY3Qgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIHByb2plY3RcbiAgICogZG9lcyBub3QgaGF2ZSBhIEdpdEh1YiBjb21wb25lbnQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG9mKHByb2plY3Q6IFByb2plY3QpOiBHaXRIdWIgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzR2l0SHViID0gKGM6IENvbXBvbmVudCk6IGMgaXMgR2l0SHViID0+IGMgaW5zdGFuY2VvZiBHaXRIdWI7XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maW5kKGlzR2l0SHViKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYE1lcmdpZnlgIGNvbXBvbmVudCBjb25maWd1cmVkIG9uIHRoaXMgcmVwb3NpdG9yeVxuICAgKiBUaGlzIGlzIGB1bmRlZmluZWRgIGlmIE1lcmdpZnkgaXMgbm90IGVuYWJsZWQgZm9yIHRoaXMgcmVwb3NpdG9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZXJnaWZ5PzogTWVyZ2lmeTtcblxuICAvKipcbiAgICogVGhlIGBNZXJnZVF1ZXVlYCBjb21wb25lbnQgY29uZmlndXJlZCBvbiB0aGlzIHJlcG9zaXRvcnlcbiAgICogVGhpcyBpcyBgdW5kZWZpbmVkYCBpZiBtZXJnZSBxdWV1ZXMgYXJlIG5vdCBlbmFibGVkIGZvciB0aGlzIHJlcG9zaXRvcnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbWVyZ2VRdWV1ZT86IE1lcmdlUXVldWU7XG5cbiAgLyoqXG4gICAqIEFyZSB3b3JrZmxvd3MgZW5hYmxlZD9cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB3b3JrZmxvd3NFbmFibGVkOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHaXRIdWIgQVBJIGF1dGhlbnRpY2F0aW9uIG1ldGhvZCB1c2VkIGJ5IHByb2plbiB3b3JrZmxvd3MuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcHJvamVuQ3JlZGVudGlhbHM6IEdpdGh1YkNyZWRlbnRpYWxzO1xuXG4gIC8qKlxuICAgKiBUaGUgR2l0SHViIEFjdGlvbnMgcHJvdmlkZXIgdXNlZCB0byBtYW5hZ2UgdGhlIHZlcnNpb25zIG9mIGFjdGlvbnMgdXNlZCBpbiBzdGVwc1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFjdGlvbnM6IEdpdEh1YkFjdGlvbnNQcm92aWRlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kb3dubG9hZExmcz86IGJvb2xlYW47XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IEdpdEh1Yk9wdGlvbnMgPSB7fSkge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy5hY3Rpb25zID0gbmV3IEdpdEh1YkFjdGlvbnNQcm92aWRlcigpO1xuXG4gICAgdGhpcy53b3JrZmxvd3NFbmFibGVkID0gb3B0aW9ucy53b3JrZmxvd3MgPz8gdHJ1ZTtcblxuICAgIHRoaXMuX2Rvd25sb2FkTGZzID0gb3B0aW9ucy5kb3dubG9hZExmcztcblxuICAgIGlmIChvcHRpb25zLnByb2plbkNyZWRlbnRpYWxzICYmIG9wdGlvbnMucHJvamVuVG9rZW5TZWNyZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJwcm9qZW5Ub2tlblNlY3JldCBpcyBkZXByZWNhdGVkLCBwbGVhc2UgdXNlIHByb2plbkNyZWRlbnRpYWxzIGluc3RlYWRcIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQGRlcHJlY2F0ZWRcbiAgICBpZiAob3B0aW9ucy5wcm9qZW5Ub2tlblNlY3JldCkge1xuICAgICAgdGhpcy5wcm9qZW5DcmVkZW50aWFscyA9IEdpdGh1YkNyZWRlbnRpYWxzLmZyb21QZXJzb25hbEFjY2Vzc1Rva2VuKHtcbiAgICAgICAgc2VjcmV0OiBvcHRpb25zLnByb2plblRva2VuU2VjcmV0LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnByb2plbkNyZWRlbnRpYWxzKSB7XG4gICAgICB0aGlzLnByb2plbkNyZWRlbnRpYWxzID0gb3B0aW9ucy5wcm9qZW5DcmVkZW50aWFscztcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZGVmYXVsdFxuICAgICAgdGhpcy5wcm9qZW5DcmVkZW50aWFscyA9IEdpdGh1YkNyZWRlbnRpYWxzLmZyb21QZXJzb25hbEFjY2Vzc1Rva2VuKHtcbiAgICAgICAgc2VjcmV0OiBcIlBST0pFTl9HSVRIVUJfVE9LRU5cIixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1lcmdpZnkgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5tZXJnaWZ5ID0gbmV3IE1lcmdpZnkodGhpcywgb3B0aW9ucy5tZXJnaWZ5T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubWVyZ2VRdWV1ZSA/PyBmYWxzZSkge1xuICAgICAgdGhpcy5tZXJnZVF1ZXVlID0gbmV3IE1lcmdlUXVldWUodGhpcywgb3B0aW9ucy5tZXJnZVF1ZXVlT3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucHVsbFJlcXVlc3RMaW50ID8/IHRydWUpIHtcbiAgICAgIG5ldyBQdWxsUmVxdWVzdExpbnQodGhpcywgb3B0aW9ucy5wdWxsUmVxdWVzdExpbnRPcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wdWxsUmVxdWVzdEJhY2twb3J0ID8/IGZhbHNlKSB7XG4gICAgICBpZiAob3B0aW9ucy5tZXJnaWZ5KSB7XG4gICAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIud2FybihcbiAgICAgICAgICBcInB1bGxSZXF1ZXN0QmFja3BvcnQgc2hvdWxkIG5vdCBiZSB1c2VkIHdpdGggbWVyZ2lmeSBhcyBtZXJnaWZ5IHByb3ZpZGVzIGl0cyBvd24gYmFja3BvcnQgZnVuY3Rpb25hbGl0eS4gUGxlYXNlIGRpc2FibGUgcHVsbFJlcXVlc3RCYWNrcG9ydCBvciBtZXJnaWZ5LlwiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgbmV3IFB1bGxSZXF1ZXN0QmFja3BvcnQodGhpcywgb3B0aW9ucy5wdWxsUmVxdWVzdEJhY2twb3J0T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuZGVwZW5kZW5jeVJldmlldyA/PyBmYWxzZSkge1xuICAgICAgbmV3IERlcGVuZGVuY3lSZXZpZXcodGhpcywgb3B0aW9ucy5kZXBlbmRlbmN5UmV2aWV3T3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFsbCB3b3JrZmxvd3MuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHdvcmtmbG93cygpOiBHaXRodWJXb3JrZmxvd1tdIHtcbiAgICBjb25zdCBpc1dvcmtmbG93ID0gKGM6IENvbXBvbmVudCk6IGMgaXMgR2l0aHViV29ya2Zsb3cgPT5cbiAgICAgIGMgaW5zdGFuY2VvZiBHaXRodWJXb3JrZmxvdztcbiAgICByZXR1cm4gdGhpcy5wcm9qZWN0LmNvbXBvbmVudHNcbiAgICAgIC5maWx0ZXIoaXNXb3JrZmxvdylcbiAgICAgIC5zb3J0KCh3MSwgdzIpID0+IHcxLm5hbWUubG9jYWxlQ29tcGFyZSh3Mi5uYW1lKSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHdvcmtmbG93IHRvIHRoZSBwcm9qZWN0LlxuICAgKiBAcGFyYW0gbmFtZSBOYW1lIG9mIHRoZSB3b3JrZmxvd1xuICAgKiBAcmV0dXJucyBhIEdpdGh1YldvcmtmbG93IGluc3RhbmNlXG4gICAqL1xuICBwdWJsaWMgYWRkV29ya2Zsb3cobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgd29ya2Zsb3cgPSBuZXcgR2l0aHViV29ya2Zsb3codGhpcywgbmFtZSk7XG4gICAgcmV0dXJuIHdvcmtmbG93O1xuICB9XG5cbiAgcHVibGljIGFkZFB1bGxSZXF1ZXN0VGVtcGxhdGUoLi4uY29udGVudDogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gbmV3IFB1bGxSZXF1ZXN0VGVtcGxhdGUodGhpcywgeyBsaW5lczogY29udGVudCB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhZGREZXBlbmRhYm90KG9wdGlvbnM/OiBEZXBlbmRhYm90T3B0aW9ucykge1xuICAgIHJldHVybiBuZXcgRGVwZW5kYWJvdCh0aGlzLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kcyBhIEdpdEh1YiB3b3JrZmxvdyBieSBuYW1lLiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSB3b3JrZmxvdyBjYW5ub3QgYmUgZm91bmQuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBHaXRIdWIgd29ya2Zsb3dcbiAgICovXG4gIHB1YmxpYyB0cnlGaW5kV29ya2Zsb3cobmFtZTogc3RyaW5nKTogdW5kZWZpbmVkIHwgR2l0aHViV29ya2Zsb3cge1xuICAgIHJldHVybiB0aGlzLndvcmtmbG93cy5maW5kKCh3KSA9PiB3Lm5hbWUgPT09IG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgZG93bmxvYWRpbmcgZnJvbSBMRlMgaXMgZW5hYmxlZCBmb3IgdGhpcyBHaXRIdWIgcHJvamVjdFxuICAgKi9cbiAgcHVibGljIGdldCBkb3dubG9hZExmcygpIHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxvYWRMZnMgPz8gdGhpcy5wcm9qZWN0LmdpdGF0dHJpYnV0ZXMuaGFzTGZzUGF0dGVybnM7XG4gIH1cbn1cbiJdfQ==