UNPKG

projen

Version:

CDK for software projects

145 lines • 23.1 kB
"use strict"; 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"); const runner_options_1 = require("../runner-options"); class GitHub extends component_1.Component { static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHub", version: "0.103.12" }; /** * 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); } /** * The `Mergify` component configured on this repository * This is `undefined` if Mergify is not enabled for this repository. */ mergify; /** * The `MergeQueue` component configured on this repository * This is `undefined` if merge queues are not enabled for this repository. */ mergeQueue; /** * Are workflows enabled? */ workflowsEnabled; /** * GitHub API authentication method used by projen workflows. */ projenCredentials; /** * The GitHub Actions provider used to manage the versions of actions used in steps */ actions; _downloadLfs; _checkoutSubmodules; _workflowRunsOn; _workflowRunsOnGroup; 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; this._workflowRunsOn = options.workflowRunsOn; this._workflowRunsOnGroup = options.workflowRunsOnGroup; 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; } /** * Resolves the `runsOn`/`runsOnGroup` config for a job, falling back to the * project's global runner selection (`workflowRunsOn`/`workflowRunsOnGroup`) * when `options` does not specify one. * @param options per-job runner selection that takes precedence over the * project's global default */ runsOnConfig(options = {}) { return (0, runner_options_1.filteredRunsOnOptions)(options.runsOn ?? this._workflowRunsOn, options.runsOnGroup ?? this._workflowRunsOnGroup); } } exports.GitHub = GitHub; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2dpdGh1Yi9naXRodWIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLHlEQUEyRDtBQUUzRCw2Q0FBMEM7QUFFMUMsMkRBQXVEO0FBQ3ZELDZEQUF5RDtBQUV6RCwrQ0FBMkM7QUFFM0MsdUNBQW9DO0FBQ3BDLCtDQUFvRDtBQUVwRCxtRUFBOEQ7QUFFOUQsMkRBQXNEO0FBQ3RELHFEQUFzRDtBQUN0RCwyQ0FBNkM7QUFDN0MsNENBQXlDO0FBT3pDLHNEQUEwRDtBQW1JMUQsTUFBYSxNQUFPLFNBQVEscUJBQVM7O0lBQ25DOzs7T0FHRztJQUNJLE1BQU0sQ0FBQyxFQUFFLENBQUMsT0FBZ0I7UUFDL0IsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFZLEVBQWUsRUFBRSxDQUFDLENBQUMsWUFBWSxNQUFNLENBQUM7UUFDcEUsT0FBTyxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ2EsT0FBTyxDQUFXO0lBRWxDOzs7T0FHRztJQUNhLFVBQVUsQ0FBYztJQUV4Qzs7T0FFRztJQUNhLGdCQUFnQixDQUFVO0lBRTFDOztPQUVHO0lBQ2EsaUJBQWlCLENBQW9CO0lBRXJEOztPQUVHO0lBQ2EsT0FBTyxDQUF3QjtJQUU5QixZQUFZLENBQVc7SUFDdkIsbUJBQW1CLENBQXNCO0lBQ3pDLGVBQWUsQ0FBWTtJQUMzQixvQkFBb0IsQ0FBc0I7SUFFM0QsWUFBbUIsT0FBZ0IsRUFBRSxVQUF5QixFQUFFO1FBQzlELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVmLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSx3Q0FBcUIsRUFBRSxDQUFDO1FBRTNDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQztRQUVsRCxJQUFJLENBQUMsWUFBWSxHQUFHLE9B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QUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxJQUFJLENBQUMsQ0FBQztJQUNyRCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFdBQVc7UUFDcEIsT0FBTyxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQztJQUN4RSxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGtCQUFrQjtRQUMzQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsSUFBSSxtQ0FBa0IsQ0FBQyxRQUFRLENBQUM7SUFDakUsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLFlBQVksQ0FBQyxVQUF5QixFQUFFO1FBQzdDLE9BQU8sSUFBQSxzQ0FBcUIsRUFDMUIsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsZUFBZSxFQUN0QyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FDakQsQ0FBQztJQUNKLENBQUM7O0FBeEpILHdCQXlKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdpdEh1YkFjdGlvbnNQcm92aWRlciB9IGZyb20gXCIuL2FjdGlvbnMtcHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIHsgRGVwZW5kYWJvdE9wdGlvbnMgfSBmcm9tIFwiLi9kZXBlbmRhYm90XCI7XG5pbXBvcnQgeyBEZXBlbmRhYm90IH0gZnJvbSBcIi4vZGVwZW5kYWJvdFwiO1xuaW1wb3J0IHR5cGUgeyBEZXBlbmRlbmN5UmV2aWV3T3B0aW9ucyB9IGZyb20gXCIuL2RlcGVuZGVuY3ktcmV2aWV3XCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5UmV2aWV3IH0gZnJvbSBcIi4vZGVwZW5kZW5jeS1yZXZpZXdcIjtcbmltcG9ydCB7IEdpdGh1YkNyZWRlbnRpYWxzIH0gZnJvbSBcIi4vZ2l0aHViLWNyZWRlbnRpYWxzXCI7XG5pbXBvcnQgdHlwZSB7IE1lcmdlUXVldWVPcHRpb25zIH0gZnJvbSBcIi4vbWVyZ2UtcXVldWVcIjtcbmltcG9ydCB7IE1lcmdlUXVldWUgfSBmcm9tIFwiLi9tZXJnZS1xdWV1ZVwiO1xuaW1wb3J0IHR5cGUgeyBNZXJnaWZ5T3B0aW9ucyB9IGZyb20gXCIuL21lcmdpZnlcIjtcbmltcG9ydCB7IE1lcmdpZnkgfSBmcm9tIFwiLi9tZXJnaWZ5XCI7XG5pbXBvcnQgeyBQdWxsUmVxdWVzdFRlbXBsYXRlIH0gZnJvbSBcIi4vcHItdGVtcGxhdGVcIjtcbmltcG9ydCB0eXBlIHsgUHVsbFJlcXVlc3RCYWNrcG9ydE9wdGlvbnMgfSBmcm9tIFwiLi9wdWxsLXJlcXVlc3QtYmFja3BvcnRcIjtcbmltcG9ydCB7IFB1bGxSZXF1ZXN0QmFja3BvcnQgfSBmcm9tIFwiLi9wdWxsLXJlcXVlc3QtYmFja3BvcnRcIjtcbmltcG9ydCB0eXBlIHsgUHVsbFJlcXVlc3RMaW50T3B0aW9ucyB9IGZyb20gXCIuL3B1bGwtcmVxdWVzdC1saW50XCI7XG5pbXBvcnQgeyBQdWxsUmVxdWVzdExpbnQgfSBmcm9tIFwiLi9wdWxsLXJlcXVlc3QtbGludFwiO1xuaW1wb3J0IHsgQ2hlY2tvdXRTdWJtb2R1bGVzIH0gZnJvbSBcIi4vd29ya2Zsb3ctc3RlcHNcIjtcbmltcG9ydCB7IEdpdGh1YldvcmtmbG93IH0gZnJvbSBcIi4vd29ya2Zsb3dzXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IFByb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdFwiO1xuaW1wb3J0IHR5cGUge1xuICBHcm91cFJ1bm5lck9wdGlvbnMsXG4gIFJ1bnNPbkNvbmZpZyxcbiAgUnVuc09uT3B0aW9ucyxcbn0gZnJvbSBcIi4uL3J1bm5lci1vcHRpb25zXCI7XG5pbXBvcnQgeyBmaWx0ZXJlZFJ1bnNPbk9wdGlvbnMgfSBmcm9tIFwiLi4vcnVubmVyLW9wdGlvbnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBHaXRIdWJPcHRpb25zIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgbWVyZ2lmeSBzaG91bGQgYmUgZW5hYmxlZCBvbiB0aGlzIHJlcG9zaXRvcnkgb3Igbm90LlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBtZXJnaWZ5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgTWVyZ2lmeS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG1lcmdpZnlPcHRpb25zPzogTWVyZ2lmeU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgYSBtZXJnZSBxdWV1ZSBzaG91bGQgYmUgdXNlZCBvbiB0aGlzIHJlcG9zaXRvcnkgdG8gbWVyZ2UgcHVsbCByZXF1ZXN0cy5cbiAgICogUmVxdWlyZXMgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIG9mIHRoZSByZXBvc2l0b3JpZXMgYnJhbmNoIHByb3RlY3Rpb24gcnVsZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBtZXJnZVF1ZXVlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgTWVyZ2VRdWV1ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IG1lcmdlUXVldWVPcHRpb25zPzogTWVyZ2VRdWV1ZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgR2l0SHViIHdvcmtmbG93cy4gSWYgdGhpcyBpcyBzZXQgdG8gYGZhbHNlYCwgd29ya2Zsb3dzIHdpbGwgbm90IGJlIGNyZWF0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFkZCBhIHdvcmtmbG93IHRoYXQgYWxsb3dzIGJhY2twb3J0IG9mIFBScyB0byBvdGhlciBicmFuY2hlcyB1c2luZyBsYWJlbHMuXG4gICAqIFdoZW4gb3BlbmluZyBhIG5ldyBQUiBhZGQgYSBiYWNrcG9ydCBsYWJlbCB0byBpdCxcbiAgICogYW5kIHRoZSBQUiB3aWxsIGJlIGJhY2twb3J0ZWQgdG8gdGhlIHRhcmdldCBicmFuY2hlcyBvbmNlIHRoZSBQUiBpcyBtZXJnZWQuXG4gICAqXG4gICAqIFNob3VsZCBub3QgYmUgdXNlZCB0b2dldGhlciB3aXRoIG1lcmdpZnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdEJhY2twb3J0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgcHVsbCByZXF1ZXN0IGJhY2twb3J0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlZSBkZWZhdWx0cyBpbiBgUHVsbFJlcXVlc3RCYWNrcG9ydE9wdGlvbnNgXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdEJhY2twb3J0T3B0aW9ucz86IFB1bGxSZXF1ZXN0QmFja3BvcnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBZGQgYSB3b3JrZmxvdyB0aGF0IHBlcmZvcm1zIGJhc2ljIGNoZWNrcyBmb3IgcHVsbCByZXF1ZXN0cywgbGlrZVxuICAgKiB2YWxpZGF0aW5nIHRoYXQgUFJzIGZvbGxvdyBDb252ZW50aW9uYWwgQ29tbWl0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3RMaW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgY29uZmlndXJpbmcgYSBwdWxsIHJlcXVlc3QgbGludGVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHNlZSBkZWZhdWx0cyBpbiBgUHVsbFJlcXVlc3RMaW50T3B0aW9uc2BcbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0TGludE9wdGlvbnM/OiBQdWxsUmVxdWVzdExpbnRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBDaG9vc2UgYSBtZXRob2Qgb2YgcHJvdmlkaW5nIEdpdEh1YiBBUEkgYWNjZXNzIGZvciBwcm9qZW4gd29ya2Zsb3dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHVzZSBhIHBlcnNvbmFsIGFjY2VzcyB0b2tlbiBuYW1lZCBQUk9KRU5fR0lUSFVCX1RPS0VOXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5DcmVkZW50aWFscz86IEdpdGh1YkNyZWRlbnRpYWxzO1xuXG4gIC8qKlxuICAgKiBEb3dubG9hZCBmaWxlcyBpbiBMRlMgaW4gd29ya2Zsb3dzXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWUgaWYgdGhlIGFzc29jaWF0ZWQgcHJvamVjdCBoYXMgYGxmc1BhdHRlcm5zYCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIHJlYWRvbmx5IGRvd25sb2FkTGZzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRW5hYmxlIHRoZSBkZXBlbmRlbmN5LXJldmlldy1hY3Rpb24gd29ya2Zsb3cgb24gcHVsbCByZXF1ZXN0cy5cbiAgICpcbiAgICogQWRkcyBhIHNlcGFyYXRlIHdvcmtmbG93IHRoYXQgcnVucyBgYWN0aW9ucy9kZXBlbmRlbmN5LXJldmlldy1hY3Rpb25gXG4gICAqIHRvIHNjYW4gcHVsbCByZXF1ZXN0cyBmb3IgbmV3bHkgaW50cm9kdWNlZCB2dWxuZXJhYmxlIG9yIG5vbi1jb21wbGlhbnRcbiAgICogZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jeVJldmlldz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIHRoZSBkZXBlbmRlbmN5IHJldmlldyB3b3JrZmxvdy5cbiAgICpcbiAgICogT25seSB1c2VkIHdoZW4gYGRlcGVuZGVuY3lSZXZpZXdgIGlzIGB0cnVlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGVuY3lSZXZpZXdPcHRpb25zPzogRGVwZW5kZW5jeVJldmlld09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY2hlY2tvdXQgR2l0IHN1Ym1vZHVsZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IENoZWNrb3V0U3VibW9kdWxlcy5ESVNBQkxFRFxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tvdXRTdWJtb2R1bGVzPzogQ2hlY2tvdXRTdWJtb2R1bGVzO1xuXG4gIC8qKlxuICAgKiBHaXRodWIgUnVubmVyIHNlbGVjdGlvbiBsYWJlbHNcbiAgICogQGRlZmF1bHQgW1widWJ1bnR1LWxhdGVzdFwiXVxuICAgKiBAZGVzY3JpcHRpb24gRGVmaW5lcyBhIHRhcmdldCBSdW5uZXIgYnkgbGFiZWxzIGZvciBhbGwgd29ya2Zsb3dzLlxuICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiBvbiBhIHBlci1jb21wb25lbnQgYmFzaXMuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiBib3RoIGB3b3JrZmxvd1J1bnNPbmAgYW5kIGB3b3JrZmxvd1J1bnNPbkdyb3VwYCBhcmUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd1J1bnNPbj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHaXRodWIgUnVubmVyIEdyb3VwIHNlbGVjdGlvbiBvcHRpb25zXG4gICAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIGEgdGFyZ2V0IFJ1bm5lciBHcm91cCBieSBuYW1lIGFuZC9vciBsYWJlbHMgZm9yIGFsbCB3b3JrZmxvd3MuXG4gICAqIENhbiBiZSBvdmVycmlkZGVuIG9uIGEgcGVyLWNvbXBvbmVudCBiYXNpcy5cbiAgICogQHRocm93cyB7RXJyb3J9IGlmIGJvdGggYHdvcmtmbG93UnVuc09uYCBhbmQgYHdvcmtmbG93UnVuc09uR3JvdXBgIGFyZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93UnVuc09uR3JvdXA/OiBHcm91cFJ1bm5lck9wdGlvbnM7XG59XG5cbmV4cG9ydCBjbGFzcyBHaXRIdWIgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgYEdpdEh1YmAgY29tcG9uZW50IG9mIGEgcHJvamVjdCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgcHJvamVjdFxuICAgKiBkb2VzIG5vdCBoYXZlIGEgR2l0SHViIGNvbXBvbmVudC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YocHJvamVjdDogUHJvamVjdCk6IEdpdEh1YiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgaXNHaXRIdWIgPSAoYzogQ29tcG9uZW50KTogYyBpcyBHaXRIdWIgPT4gYyBpbnN0YW5jZW9mIEdpdEh1YjtcbiAgICByZXR1cm4gcHJvamVjdC5jb21wb25lbnRzLmZpbmQoaXNHaXRIdWIpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBgTWVyZ2lmeWAgY29tcG9uZW50IGNvbmZpZ3VyZWQgb24gdGhpcyByZXBvc2l0b3J5XG4gICAqIFRoaXMgaXMgYHVuZGVmaW5lZGAgaWYgTWVyZ2lmeSBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyByZXBvc2l0b3J5LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1lcmdpZnk/OiBNZXJnaWZ5O1xuXG4gIC8qKlxuICAgKiBUaGUgYE1lcmdlUXVldWVgIGNvbXBvbmVudCBjb25maWd1cmVkIG9uIHRoaXMgcmVwb3NpdG9yeVxuICAgKiBUaGlzIGlzIGB1bmRlZmluZWRgIGlmIG1lcmdlIHF1ZXVlcyBhcmUgbm90IGVuYWJsZWQgZm9yIHRoaXMgcmVwb3NpdG9yeS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBtZXJnZVF1ZXVlPzogTWVyZ2VRdWV1ZTtcblxuICAvKipcbiAgICogQXJlIHdvcmtmbG93cyBlbmFibGVkP1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHdvcmtmbG93c0VuYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEdpdEh1YiBBUEkgYXV0aGVudGljYXRpb24gbWV0aG9kIHVzZWQgYnkgcHJvamVuIHdvcmtmbG93cy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwcm9qZW5DcmVkZW50aWFsczogR2l0aHViQ3JlZGVudGlhbHM7XG5cbiAgLyoqXG4gICAqIFRoZSBHaXRIdWIgQWN0aW9ucyBwcm92aWRlciB1c2VkIHRvIG1hbmFnZSB0aGUgdmVyc2lvbnMgb2YgYWN0aW9ucyB1c2VkIGluIHN0ZXBzXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYWN0aW9uczogR2l0SHViQWN0aW9uc1Byb3ZpZGVyO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25sb2FkTGZzPzogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hlY2tvdXRTdWJtb2R1bGVzPzogQ2hlY2tvdXRTdWJtb2R1bGVzO1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3JrZmxvd1J1bnNPbj86IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IF93b3JrZmxvd1J1bnNPbkdyb3VwPzogR3JvdXBSdW5uZXJPcHRpb25zO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBHaXRIdWJPcHRpb25zID0ge30pIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMuYWN0aW9ucyA9IG5ldyBHaXRIdWJBY3Rpb25zUHJvdmlkZXIoKTtcblxuICAgIHRoaXMud29ya2Zsb3dzRW5hYmxlZCA9IG9wdGlvbnMud29ya2Zsb3dzID8/IHRydWU7XG5cbiAgICB0aGlzLl9kb3dubG9hZExmcyA9IG9wdGlvbnMuZG93bmxvYWRMZnM7XG4gICAgdGhpcy5fY2hlY2tvdXRTdWJtb2R1bGVzID0gb3B0aW9ucy5jaGVja291dFN1Ym1vZHVsZXM7XG4gICAgdGhpcy5fd29ya2Zsb3dSdW5zT24gPSBvcHRpb25zLndvcmtmbG93UnVuc09uO1xuICAgIHRoaXMuX3dvcmtmbG93UnVuc09uR3JvdXAgPSBvcHRpb25zLndvcmtmbG93UnVuc09uR3JvdXA7XG5cbiAgICBpZiAob3B0aW9ucy5wcm9qZW5DcmVkZW50aWFscykge1xuICAgICAgdGhpcy5wcm9qZW5DcmVkZW50aWFscyA9IG9wdGlvbnMucHJvamVuQ3JlZGVudGlhbHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHRcbiAgICAgIHRoaXMucHJvamVuQ3JlZGVudGlhbHMgPSBHaXRodWJDcmVkZW50aWFscy5mcm9tUGVyc29uYWxBY2Nlc3NUb2tlbih7XG4gICAgICAgIHNlY3JldDogXCJQUk9KRU5fR0lUSFVCX1RPS0VOXCIsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5tZXJnaWZ5ID8/IHRydWUpIHtcbiAgICAgIHRoaXMubWVyZ2lmeSA9IG5ldyBNZXJnaWZ5KHRoaXMsIG9wdGlvbnMubWVyZ2lmeU9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLm1lcmdlUXVldWUgPz8gZmFsc2UpIHtcbiAgICAgIHRoaXMubWVyZ2VRdWV1ZSA9IG5ldyBNZXJnZVF1ZXVlKHRoaXMsIG9wdGlvbnMubWVyZ2VRdWV1ZU9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnB1bGxSZXF1ZXN0TGludCA/PyB0cnVlKSB7XG4gICAgICBuZXcgUHVsbFJlcXVlc3RMaW50KHRoaXMsIG9wdGlvbnMucHVsbFJlcXVlc3RMaW50T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucHVsbFJlcXVlc3RCYWNrcG9ydCA/PyBmYWxzZSkge1xuICAgICAgaWYgKG9wdGlvbnMubWVyZ2lmeSkge1xuICAgICAgICB0aGlzLnByb2plY3QubG9nZ2VyLndhcm4oXG4gICAgICAgICAgXCJwdWxsUmVxdWVzdEJhY2twb3J0IHNob3VsZCBub3QgYmUgdXNlZCB3aXRoIG1lcmdpZnkgYXMgbWVyZ2lmeSBwcm92aWRlcyBpdHMgb3duIGJhY2twb3J0IGZ1bmN0aW9uYWxpdHkuIFBsZWFzZSBkaXNhYmxlIHB1bGxSZXF1ZXN0QmFja3BvcnQgb3IgbWVyZ2lmeS5cIixcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIG5ldyBQdWxsUmVxdWVzdEJhY2twb3J0KHRoaXMsIG9wdGlvbnMucHVsbFJlcXVlc3RCYWNrcG9ydE9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmRlcGVuZGVuY3lSZXZpZXcgPz8gZmFsc2UpIHtcbiAgICAgIG5ldyBEZXBlbmRlbmN5UmV2aWV3KHRoaXMsIG9wdGlvbnMuZGVwZW5kZW5jeVJldmlld09wdGlvbnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBbGwgd29ya2Zsb3dzLlxuICAgKi9cbiAgcHVibGljIGdldCB3b3JrZmxvd3MoKTogR2l0aHViV29ya2Zsb3dbXSB7XG4gICAgY29uc3QgaXNXb3JrZmxvdyA9IChjOiBDb21wb25lbnQpOiBjIGlzIEdpdGh1YldvcmtmbG93ID0+XG4gICAgICBjIGluc3RhbmNlb2YgR2l0aHViV29ya2Zsb3c7XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdC5jb21wb25lbnRzXG4gICAgICAuZmlsdGVyKGlzV29ya2Zsb3cpXG4gICAgICAuc29ydCgodzEsIHcyKSA9PiB3MS5uYW1lLmxvY2FsZUNvbXBhcmUodzIubmFtZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB3b3JrZmxvdyB0byB0aGUgcHJvamVjdC5cbiAgICogQHBhcmFtIG5hbWUgTmFtZSBvZiB0aGUgd29ya2Zsb3dcbiAgICogQHJldHVybnMgYSBHaXRodWJXb3JrZmxvdyBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIGFkZFdvcmtmbG93KG5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IHdvcmtmbG93ID0gbmV3IEdpdGh1YldvcmtmbG93KHRoaXMsIG5hbWUpO1xuICAgIHJldHVybiB3b3JrZmxvdztcbiAgfVxuXG4gIHB1YmxpYyBhZGRQdWxsUmVxdWVzdFRlbXBsYXRlKC4uLmNvbnRlbnQ6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIG5ldyBQdWxsUmVxdWVzdFRlbXBsYXRlKHRoaXMsIHsgbGluZXM6IGNvbnRlbnQgfSk7XG4gIH1cblxuICBwdWJsaWMgYWRkRGVwZW5kYWJvdChvcHRpb25zPzogRGVwZW5kYWJvdE9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmV3IERlcGVuZGFib3QodGhpcywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgYSBHaXRIdWIgd29ya2Zsb3cgYnkgbmFtZS4gUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgd29ya2Zsb3cgY2Fubm90IGJlIGZvdW5kLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgR2l0SHViIHdvcmtmbG93XG4gICAqL1xuICBwdWJsaWMgdHJ5RmluZFdvcmtmbG93KG5hbWU6IHN0cmluZyk6IHVuZGVmaW5lZCB8IEdpdGh1YldvcmtmbG93IHtcbiAgICByZXR1cm4gdGhpcy53b3JrZmxvd3MuZmluZCgodykgPT4gdy5uYW1lID09PSBuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIGRvd25sb2FkaW5nIGZyb20gTEZTIGlzIGVuYWJsZWQgZm9yIHRoaXMgR2l0SHViIHByb2plY3RcbiAgICovXG4gIHB1YmxpYyBnZXQgZG93bmxvYWRMZnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25sb2FkTGZzID8/IHRoaXMucHJvamVjdC5naXRhdHRyaWJ1dGVzLmhhc0xmc1BhdHRlcm5zO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgY2hlY2tpbmcgb3V0IEdpdCBzdWJtb2R1bGVzIGlzIGVuYWJsZWQgZm9yIHRoaXMgR2l0SHViIHByb2plY3QuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGNoZWNrb3V0U3VibW9kdWxlcygpOiBDaGVja291dFN1Ym1vZHVsZXMge1xuICAgIHJldHVybiB0aGlzLl9jaGVja291dFN1Ym1vZHVsZXMgPz8gQ2hlY2tvdXRTdWJtb2R1bGVzLkRJU0FCTEVEO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmVzIHRoZSBgcnVuc09uYC9gcnVuc09uR3JvdXBgIGNvbmZpZyBmb3IgYSBqb2IsIGZhbGxpbmcgYmFjayB0byB0aGVcbiAgICogcHJvamVjdCdzIGdsb2JhbCBydW5uZXIgc2VsZWN0aW9uIChgd29ya2Zsb3dSdW5zT25gL2B3b3JrZmxvd1J1bnNPbkdyb3VwYClcbiAgICogd2hlbiBgb3B0aW9uc2AgZG9lcyBub3Qgc3BlY2lmeSBvbmUuXG4gICAqIEBwYXJhbSBvcHRpb25zIHBlci1qb2IgcnVubmVyIHNlbGVjdGlvbiB0aGF0IHRha2VzIHByZWNlZGVuY2Ugb3ZlciB0aGVcbiAgICogcHJvamVjdCdzIGdsb2JhbCBkZWZhdWx0XG4gICAqL1xuICBwdWJsaWMgcnVuc09uQ29uZmlnKG9wdGlvbnM6IFJ1bnNPbk9wdGlvbnMgPSB7fSk6IFJ1bnNPbkNvbmZpZyB7XG4gICAgcmV0dXJuIGZpbHRlcmVkUnVuc09uT3B0aW9ucyhcbiAgICAgIG9wdGlvbnMucnVuc09uID8/IHRoaXMuX3dvcmtmbG93UnVuc09uLFxuICAgICAgb3B0aW9ucy5ydW5zT25Hcm91cCA/PyB0aGlzLl93b3JrZmxvd1J1bnNPbkdyb3VwLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==