UNPKG

projen

Version:

CDK for software projects

117 lines • 20.6 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 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