1 | ;
|
2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
4 | return new (P || (P = Promise))(function (resolve, reject) {
|
5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
8 | step((generator = generator.apply(thisArg, _arguments || [])).next());
|
9 | });
|
10 | };
|
11 | Object.defineProperty(exports, "__esModule", { value: true });
|
12 | const assert = require("assert");
|
13 | const convert_1 = require("../convert");
|
14 | const apply_edit_adapter_1 = require("./apply-edit-adapter");
|
15 | const languageclient_1 = require("../languageclient");
|
16 | class CodeActionAdapter {
|
17 | /** @returns A {Boolean} indicating this adapter can adapt the server based on the given serverCapabilities. */
|
18 | static canAdapt(serverCapabilities) {
|
19 | return serverCapabilities.codeActionProvider === true;
|
20 | }
|
21 | /**
|
22 | * Public: Retrieves code actions for a given editor, range, and context (diagnostics). Throws an error if
|
23 | * codeActionProvider is not a registered capability.
|
24 | *
|
25 | * @param connection A {LanguageClientConnection} to the language server that provides highlights.
|
26 | * @param serverCapabilities The {ServerCapabilities} of the language server that will be used.
|
27 | * @param editor The Atom {TextEditor} containing the diagnostics.
|
28 | * @param range The Atom {Range} to fetch code actions for.
|
29 | * @param linterMessages An {Array<linter$Message>} to fetch code actions for. This is typically a list of messages
|
30 | * intersecting `range`.
|
31 | * @returns A {Promise} of an {Array} of {atomIde$CodeAction}s to display.
|
32 | */
|
33 | static getCodeActions(connection, serverCapabilities, linterAdapter, editor, range, linterMessages, filterActions = (actions) => actions, onApply = () => Promise.resolve(true)) {
|
34 | return __awaiter(this, void 0, void 0, function* () {
|
35 | if (linterAdapter == null) {
|
36 | return [];
|
37 | }
|
38 | assert(serverCapabilities.codeActionProvider, "Must have the textDocument/codeAction capability");
|
39 | const params = createCodeActionParams(linterAdapter, editor, range, linterMessages);
|
40 | const actions = filterActions(yield connection.codeAction(params));
|
41 | if (actions === null) {
|
42 | return [];
|
43 | }
|
44 | return actions.map((action) => CodeActionAdapter.createCodeAction(action, connection, onApply));
|
45 | });
|
46 | }
|
47 | static createCodeAction(action, connection, onApply) {
|
48 | return {
|
49 | apply() {
|
50 | return __awaiter(this, void 0, void 0, function* () {
|
51 | if (!(yield onApply(action))) {
|
52 | return;
|
53 | }
|
54 | if (languageclient_1.CodeAction.is(action)) {
|
55 | CodeActionAdapter.applyWorkspaceEdit(action.edit);
|
56 | yield CodeActionAdapter.executeCommand(action.command, connection);
|
57 | }
|
58 | else {
|
59 | yield CodeActionAdapter.executeCommand(action, connection);
|
60 | }
|
61 | });
|
62 | },
|
63 | getTitle() {
|
64 | return Promise.resolve(action.title);
|
65 | },
|
66 | dispose() { },
|
67 | };
|
68 | }
|
69 | static applyWorkspaceEdit(edit) {
|
70 | if (languageclient_1.WorkspaceEdit.is(edit)) {
|
71 | apply_edit_adapter_1.default.onApplyEdit({ edit });
|
72 | }
|
73 | }
|
74 | static executeCommand(command, connection) {
|
75 | return __awaiter(this, void 0, void 0, function* () {
|
76 | if (languageclient_1.Command.is(command)) {
|
77 | yield connection.executeCommand({
|
78 | command: command.command,
|
79 | arguments: command.arguments,
|
80 | });
|
81 | }
|
82 | });
|
83 | }
|
84 | }
|
85 | exports.default = CodeActionAdapter;
|
86 | function createCodeActionParams(linterAdapter, editor, range, linterMessages) {
|
87 | let diagnostics;
|
88 | if (linterMessages.length === 0) {
|
89 | diagnostics = [];
|
90 | }
|
91 | else {
|
92 | // TODO compile time dispatch using function names
|
93 | diagnostics = areLinterMessages(linterMessages)
|
94 | ? linterAdapter.getLSDiagnosticsForMessages(linterMessages)
|
95 | : linterAdapter.getLSDiagnosticsForIdeDiagnostics(linterMessages, editor);
|
96 | }
|
97 | return {
|
98 | textDocument: convert_1.default.editorToTextDocumentIdentifier(editor),
|
99 | range: convert_1.default.atomRangeToLSRange(range),
|
100 | context: {
|
101 | diagnostics,
|
102 | },
|
103 | };
|
104 | }
|
105 | function areLinterMessages(linterMessages) {
|
106 | if ("excerpt" in linterMessages[0]) {
|
107 | return true;
|
108 | }
|
109 | return false;
|
110 | }
|
111 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS1hY3Rpb24tYWRhcHRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9hZGFwdGVycy9jb2RlLWFjdGlvbi1hZGFwdGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBS0EsaUNBQWlDO0FBQ2pDLHdDQUFnQztBQUNoQyw2REFBbUQ7QUFDbkQsc0RBUTBCO0FBRzFCLE1BQXFCLGlCQUFpQjtJQUNwQywrR0FBK0c7SUFDeEcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxrQkFBc0M7UUFDM0QsT0FBTyxrQkFBa0IsQ0FBQyxrQkFBa0IsS0FBSyxJQUFJLENBQUE7SUFDdkQsQ0FBQztJQUVEOzs7Ozs7Ozs7OztPQVdHO0lBQ0ksTUFBTSxDQUFPLGNBQWMsQ0FDaEMsVUFBb0MsRUFDcEMsa0JBQXNDLEVBQ3RDLGFBQXFFLEVBQ3JFLE1BQWtCLEVBQ2xCLEtBQVksRUFDWixjQUF1RCxFQUN2RCxnQkFBK0YsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFDbkgsVUFBOEQsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7O1lBRXpGLElBQUksYUFBYSxJQUFJLElBQUksRUFBRTtnQkFDekIsT0FBTyxFQUFFLENBQUE7YUFDVjtZQUNELE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsRUFBRSxrREFBa0QsQ0FBQyxDQUFBO1lBRWpHLE1BQU0sTUFBTSxHQUFHLHNCQUFzQixDQUFDLGFBQWEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLGNBQWMsQ0FBQyxDQUFBO1lBQ25GLE1BQU0sT0FBTyxHQUFHLGFBQWEsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtZQUNsRSxJQUFJLE9BQU8sS0FBSyxJQUFJLEVBQUU7Z0JBQ3BCLE9BQU8sRUFBRSxDQUFBO2FBQ1Y7WUFDRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLGlCQUFpQixDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUNqRyxDQUFDO0tBQUE7SUFFTyxNQUFNLENBQUMsZ0JBQWdCLENBQzdCLE1BQTRCLEVBQzVCLFVBQW9DLEVBQ3BDLE9BQTJEO1FBRTNELE9BQU87WUFDQyxLQUFLOztvQkFDVCxJQUFJLENBQUMsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFO3dCQUM1QixPQUFNO3FCQUNQO29CQUNELElBQUksMkJBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUU7d0JBQ3pCLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTt3QkFDakQsTUFBTSxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQTtxQkFDbkU7eUJBQU07d0JBQ0wsTUFBTSxpQkFBaUIsQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLFVBQVUsQ0FBQyxDQUFBO3FCQUMzRDtnQkFDSCxDQUFDO2FBQUE7WUFDRCxRQUFRO2dCQUNOLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUE7WUFDdEMsQ0FBQztZQUNELE9BQU8sS0FBVSxDQUFDO1NBQ25CLENBQUE7SUFDSCxDQUFDO0lBRU8sTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQStCO1FBQy9ELElBQUksOEJBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUIsNEJBQWdCLENBQUMsV0FBVyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtTQUN2QztJQUNILENBQUM7SUFFTyxNQUFNLENBQU8sY0FBYyxDQUFDLE9BQVksRUFBRSxVQUFvQzs7WUFDcEYsSUFBSSx3QkFBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDdkIsTUFBTSxVQUFVLENBQUMsY0FBYyxDQUFDO29CQUM5QixPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87b0JBQ3hCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztpQkFDN0IsQ0FBQyxDQUFBO2FBQ0g7UUFDSCxDQUFDO0tBQUE7Q0FDRjtBQS9FRCxvQ0ErRUM7QUFFRCxTQUFTLHNCQUFzQixDQUM3QixhQUF5RCxFQUN6RCxNQUFrQixFQUNsQixLQUFZLEVBQ1osY0FBdUQ7SUFFdkQsSUFBSSxXQUF5QixDQUFBO0lBQzdCLElBQUksY0FBYyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDL0IsV0FBVyxHQUFHLEVBQUUsQ0FBQTtLQUNqQjtTQUFNO1FBQ0wsa0RBQWtEO1FBQ2xELFdBQVcsR0FBRyxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7WUFDN0MsQ0FBQyxDQUFDLGFBQWEsQ0FBQywyQkFBMkIsQ0FBQyxjQUFrQyxDQUFDO1lBQy9FLENBQUMsQ0FBRSxhQUFzQyxDQUFDLGlDQUFpQyxDQUN2RSxjQUFzQyxFQUN0QyxNQUFNLENBQ1AsQ0FBQTtLQUNOO0lBQ0QsT0FBTztRQUNMLFlBQVksRUFBRSxpQkFBTyxDQUFDLDhCQUE4QixDQUFDLE1BQU0sQ0FBQztRQUM1RCxLQUFLLEVBQUUsaUJBQU8sQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUM7UUFDeEMsT0FBTyxFQUFFO1lBQ1AsV0FBVztTQUNaO0tBQ0YsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLGlCQUFpQixDQUFDLGNBQXVEO0lBQ2hGLElBQUksU0FBUyxJQUFJLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNsQyxPQUFPLElBQUksQ0FBQTtLQUNaO0lBQ0QsT0FBTyxLQUFLLENBQUE7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgKiBhcyBhdG9tSWRlIGZyb20gXCJhdG9tLWlkZS1iYXNlXCJcbmltcG9ydCAqIGFzIGxpbnRlciBmcm9tIFwiYXRvbS9saW50ZXJcIlxuaW1wb3J0IExpbnRlclB1c2hWMkFkYXB0ZXIgZnJvbSBcIi4vbGludGVyLXB1c2gtdjItYWRhcHRlclwiXG4vKiBlc2xpbnQtZGlzYWJsZSBpbXBvcnQvbm8tZGVwcmVjYXRlZCAqL1xuaW1wb3J0IElkZURpYWdub3N0aWNBZGFwdGVyIGZyb20gXCIuL2RpYWdub3N0aWMtYWRhcHRlclwiXG5pbXBvcnQgYXNzZXJ0ID0gcmVxdWlyZShcImFzc2VydFwiKVxuaW1wb3J0IENvbnZlcnQgZnJvbSBcIi4uL2NvbnZlcnRcIlxuaW1wb3J0IEFwcGx5RWRpdEFkYXB0ZXIgZnJvbSBcIi4vYXBwbHktZWRpdC1hZGFwdGVyXCJcbmltcG9ydCB7XG4gIENvZGVBY3Rpb24sXG4gIENvZGVBY3Rpb25QYXJhbXMsXG4gIENvbW1hbmQsXG4gIERpYWdub3N0aWMsXG4gIExhbmd1YWdlQ2xpZW50Q29ubmVjdGlvbixcbiAgU2VydmVyQ2FwYWJpbGl0aWVzLFxuICBXb3Jrc3BhY2VFZGl0LFxufSBmcm9tIFwiLi4vbGFuZ3VhZ2VjbGllbnRcIlxuaW1wb3J0IHsgUmFuZ2UsIFRleHRFZGl0b3IgfSBmcm9tIFwiYXRvbVwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvZGVBY3Rpb25BZGFwdGVyIHtcbiAgLyoqIEByZXR1cm5zIEEge0Jvb2xlYW59IGluZGljYXRpbmcgdGhpcyBhZGFwdGVyIGNhbiBhZGFwdCB0aGUgc2VydmVyIGJhc2VkIG9uIHRoZSBnaXZlbiBzZXJ2ZXJDYXBhYmlsaXRpZXMuICovXG4gIHB1YmxpYyBzdGF0aWMgY2FuQWRhcHQoc2VydmVyQ2FwYWJpbGl0aWVzOiBTZXJ2ZXJDYXBhYmlsaXRpZXMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gc2VydmVyQ2FwYWJpbGl0aWVzLmNvZGVBY3Rpb25Qcm92aWRlciA9PT0gdHJ1ZVxuICB9XG5cbiAgLyoqXG4gICAqIFB1YmxpYzogUmV0cmlldmVzIGNvZGUgYWN0aW9ucyBmb3IgYSBnaXZlbiBlZGl0b3IsIHJhbmdlLCBhbmQgY29udGV4dCAoZGlhZ25vc3RpY3MpLiBUaHJvd3MgYW4gZXJyb3IgaWZcbiAgICogY29kZUFjdGlvblByb3ZpZGVyIGlzIG5vdCBhIHJlZ2lzdGVyZWQgY2FwYWJpbGl0eS5cbiAgICpcbiAgICogQHBhcmFtIGNvbm5lY3Rpb24gQSB7TGFuZ3VhZ2VDbGllbnRDb25uZWN0aW9ufSB0byB0aGUgbGFuZ3VhZ2Ugc2VydmVyIHRoYXQgcHJvdmlkZXMgaGlnaGxpZ2h0cy5cbiAgICogQHBhcmFtIHNlcnZlckNhcGFiaWxpdGllcyBUaGUge1NlcnZlckNhcGFiaWxpdGllc30gb2YgdGhlIGxhbmd1YWdlIHNlcnZlciB0aGF0IHdpbGwgYmUgdXNlZC5cbiAgICogQHBhcmFtIGVkaXRvciBUaGUgQXRvbSB7VGV4dEVkaXRvcn0gY29udGFpbmluZyB0aGUgZGlhZ25vc3RpY3MuXG4gICAqIEBwYXJhbSByYW5nZSBUaGUgQXRvbSB7UmFuZ2V9IHRvIGZldGNoIGNvZGUgYWN0aW9ucyBmb3IuXG4gICAqIEBwYXJhbSBsaW50ZXJNZXNzYWdlcyBBbiB7QXJyYXk8bGludGVyJE1lc3NhZ2U+fSB0byBmZXRjaCBjb2RlIGFjdGlvbnMgZm9yLiBUaGlzIGlzIHR5cGljYWxseSBhIGxpc3Qgb2YgbWVzc2FnZXNcbiAgICogICBpbnRlcnNlY3RpbmcgYHJhbmdlYC5cbiAgICogQHJldHVybnMgQSB7UHJvbWlzZX0gb2YgYW4ge0FycmF5fSBvZiB7YXRvbUlkZSRDb2RlQWN0aW9ufXMgdG8gZGlzcGxheS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgZ2V0Q29kZUFjdGlvbnMoXG4gICAgY29ubmVjdGlvbjogTGFuZ3VhZ2VDbGllbnRDb25uZWN0aW9uLFxuICAgIHNlcnZlckNhcGFiaWxpdGllczogU2VydmVyQ2FwYWJpbGl0aWVzLFxuICAgIGxpbnRlckFkYXB0ZXI6IExpbnRlclB1c2hWMkFkYXB0ZXIgfCBJZGVEaWFnbm9zdGljQWRhcHRlciB8IHVuZGVmaW5lZCxcbiAgICBlZGl0b3I6IFRleHRFZGl0b3IsXG4gICAgcmFuZ2U6IFJhbmdlLFxuICAgIGxpbnRlck1lc3NhZ2VzOiBsaW50ZXIuTWVzc2FnZVtdIHwgYXRvbUlkZS5EaWFnbm9zdGljW10sXG4gICAgZmlsdGVyQWN0aW9uczogKGFjdGlvbnM6IChDb21tYW5kIHwgQ29kZUFjdGlvbilbXSB8IG51bGwpID0+IChDb21tYW5kIHwgQ29kZUFjdGlvbilbXSB8IG51bGwgPSAoYWN0aW9ucykgPT4gYWN0aW9ucyxcbiAgICBvbkFwcGx5OiAoYWN0aW9uOiBDb21tYW5kIHwgQ29kZUFjdGlvbikgPT4gUHJvbWlzZTxib29sZWFuPiA9ICgpID0+IFByb21pc2UucmVzb2x2ZSh0cnVlKVxuICApOiBQcm9taXNlPGF0b21JZGUuQ29kZUFjdGlvbltdPiB7XG4gICAgaWYgKGxpbnRlckFkYXB0ZXIgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICAgIGFzc2VydChzZXJ2ZXJDYXBhYmlsaXRpZXMuY29kZUFjdGlvblByb3ZpZGVyLCBcIk11c3QgaGF2ZSB0aGUgdGV4dERvY3VtZW50L2NvZGVBY3Rpb24gY2FwYWJpbGl0eVwiKVxuXG4gICAgY29uc3QgcGFyYW1zID0gY3JlYXRlQ29kZUFjdGlvblBhcmFtcyhsaW50ZXJBZGFwdGVyLCBlZGl0b3IsIHJhbmdlLCBsaW50ZXJNZXNzYWdlcylcbiAgICBjb25zdCBhY3Rpb25zID0gZmlsdGVyQWN0aW9ucyhhd2FpdCBjb25uZWN0aW9uLmNvZGVBY3Rpb24ocGFyYW1zKSlcbiAgICBpZiAoYWN0aW9ucyA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuICAgIHJldHVybiBhY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiBDb2RlQWN0aW9uQWRhcHRlci5jcmVhdGVDb2RlQWN0aW9uKGFjdGlvbiwgY29ubmVjdGlvbiwgb25BcHBseSkpXG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjcmVhdGVDb2RlQWN0aW9uKFxuICAgIGFjdGlvbjogQ29tbWFuZCB8IENvZGVBY3Rpb24sXG4gICAgY29ubmVjdGlvbjogTGFuZ3VhZ2VDbGllbnRDb25uZWN0aW9uLFxuICAgIG9uQXBwbHk6IChhY3Rpb246IENvbW1hbmQgfCBDb2RlQWN0aW9uKSA9PiBQcm9taXNlPGJvb2xlYW4+XG4gICk6IGF0b21JZGUuQ29kZUFjdGlvbiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFzeW5jIGFwcGx5KCkge1xuICAgICAgICBpZiAoIShhd2FpdCBvbkFwcGx5KGFjdGlvbikpKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKENvZGVBY3Rpb24uaXMoYWN0aW9uKSkge1xuICAgICAgICAgIENvZGVBY3Rpb25BZGFwdGVyLmFwcGx5V29ya3NwYWNlRWRpdChhY3Rpb24uZWRpdClcbiAgICAgICAgICBhd2FpdCBDb2RlQWN0aW9uQWRhcHRlci5leGVjdXRlQ29tbWFuZChhY3Rpb24uY29tbWFuZCwgY29ubmVjdGlvbilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhd2FpdCBDb2RlQWN0aW9uQWRhcHRlci5leGVjdXRlQ29tbWFuZChhY3Rpb24sIGNvbm5lY3Rpb24pXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBnZXRUaXRsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFjdGlvbi50aXRsZSlcbiAgICAgIH0sXG4gICAgICBkaXNwb3NlKCk6IHZvaWQge30sXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlXb3Jrc3BhY2VFZGl0KGVkaXQ6IFdvcmtzcGFjZUVkaXQgfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICBpZiAoV29ya3NwYWNlRWRpdC5pcyhlZGl0KSkge1xuICAgICAgQXBwbHlFZGl0QWRhcHRlci5vbkFwcGx5RWRpdCh7IGVkaXQgfSlcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhc3luYyBleGVjdXRlQ29tbWFuZChjb21tYW5kOiBhbnksIGNvbm5lY3Rpb246IExhbmd1YWdlQ2xpZW50Q29ubmVjdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChDb21tYW5kLmlzKGNvbW1hbmQpKSB7XG4gICAgICBhd2FpdCBjb25uZWN0aW9uLmV4ZWN1dGVDb21tYW5kKHtcbiAgICAgICAgY29tbWFuZDogY29tbWFuZC5jb21tYW5kLFxuICAgICAgICBhcmd1bWVudHM6IGNvbW1hbmQuYXJndW1lbnRzLFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29kZUFjdGlvblBhcmFtcyhcbiAgbGludGVyQWRhcHRlcjogTGludGVyUHVzaFYyQWRhcHRlciB8IElkZURpYWdub3N0aWNBZGFwdGVyLFxuICBlZGl0b3I6IFRleHRFZGl0b3IsXG4gIHJhbmdlOiBSYW5nZSxcbiAgbGludGVyTWVzc2FnZXM6IGxpbnRlci5NZXNzYWdlW10gfCBhdG9tSWRlLkRpYWdub3N0aWNbXVxuKTogQ29kZUFjdGlvblBhcmFtcyB7XG4gIGxldCBkaWFnbm9zdGljczogRGlhZ25vc3RpY1tdXG4gIGlmIChsaW50ZXJNZXNzYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICBkaWFnbm9zdGljcyA9IFtdXG4gIH0gZWxzZSB7XG4gICAgLy8gVE9ETyBjb21waWxlIHRpbWUgZGlzcGF0Y2ggdXNpbmcgZnVuY3Rpb24gbmFtZXNcbiAgICBkaWFnbm9zdGljcyA9IGFyZUxpbnRlck1lc3NhZ2VzKGxpbnRlck1lc3NhZ2VzKVxuICAgICAgPyBsaW50ZXJBZGFwdGVyLmdldExTRGlhZ25vc3RpY3NGb3JNZXNzYWdlcyhsaW50ZXJNZXNzYWdlcyBhcyBsaW50ZXIuTWVzc2FnZVtdKVxuICAgICAgOiAobGludGVyQWRhcHRlciBhcyBJZGVEaWFnbm9zdGljQWRhcHRlcikuZ2V0TFNEaWFnbm9zdGljc0ZvcklkZURpYWdub3N0aWNzKFxuICAgICAgICAgIGxpbnRlck1lc3NhZ2VzIGFzIGF0b21JZGUuRGlhZ25vc3RpY1tdLFxuICAgICAgICAgIGVkaXRvclxuICAgICAgICApXG4gIH1cbiAgcmV0dXJuIHtcbiAgICB0ZXh0RG9jdW1lbnQ6IENvbnZlcnQuZWRpdG9yVG9UZXh0RG9jdW1lbnRJZGVudGlmaWVyKGVkaXRvciksXG4gICAgcmFuZ2U6IENvbnZlcnQuYXRvbVJhbmdlVG9MU1JhbmdlKHJhbmdlKSxcbiAgICBjb250ZXh0OiB7XG4gICAgICBkaWFnbm9zdGljcyxcbiAgICB9LFxuICB9XG59XG5cbmZ1bmN0aW9uIGFyZUxpbnRlck1lc3NhZ2VzKGxpbnRlck1lc3NhZ2VzOiBsaW50ZXIuTWVzc2FnZVtdIHwgYXRvbUlkZS5EaWFnbm9zdGljW10pOiBib29sZWFuIHtcbiAgaWYgKFwiZXhjZXJwdFwiIGluIGxpbnRlck1lc3NhZ2VzWzBdKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cbiJdfQ== |
\ | No newline at end of file |