UNPKG

@blueprintjs/core

Version:
266 lines (264 loc) 25.1 kB
/* * Copyright 2016 Palantir Technologies, Inc. All rights reserved. * Licensed under the BSD-3 License as modified (the “License”); you may obtain a copy * of the license at https://github.com/palantir/blueprint/blob/master/LICENSE * and https://github.com/palantir/blueprint/blob/master/PATENTS */ "use strict"; exports.KeyCodes = { 8: "backspace", 9: "tab", 13: "enter", 20: "capslock", 27: "esc", 32: "space", 33: "pageup", 34: "pagedown", 35: "end", 36: "home", 37: "left", 38: "up", 39: "right", 40: "down", 45: "ins", 46: "del", // number keys 48: "0", 49: "1", 50: "2", 51: "3", 52: "4", 53: "5", 54: "6", 55: "7", 56: "8", 57: "9", // alphabet 65: "a", 66: "b", 67: "c", 68: "d", 69: "e", 70: "f", 71: "g", 72: "h", 73: "i", 74: "j", 75: "k", 76: "l", 77: "m", 78: "n", 79: "o", 80: "p", 81: "q", 82: "r", 83: "s", 84: "t", 85: "u", 86: "v", 87: "w", 88: "x", 89: "y", 90: "z", // punctuation 106: "*", 107: "+", 109: "-", 110: ".", 111: "/", 186: ";", 187: "=", 188: ",", 189: "-", 190: ".", 191: "/", 192: "`", 219: "[", 220: "\\", 221: "]", 222: "\'", }; exports.Modifiers = { 16: "shift", 17: "ctrl", 18: "alt", 91: "meta", 93: "meta", 224: "meta", }; exports.ModifierBitMasks = { alt: 1, ctrl: 2, meta: 4, shift: 8, }; exports.Aliases = { cmd: "meta", command: "meta", escape: "esc", minus: "-", mod: /Mac|iPod|iPhone|iPad/.test(navigator.platform) ? "meta" : "ctrl", option: "alt", plus: "+", return: "enter", win: "meta", }; // alph sorting is unintuitive here // tslint:disable object-literal-sort-keys exports.ShiftKeys = { "~": "`", "!": "1", "@": "2", "#": "3", "$": "4", "%": "5", "^": "6", "&": "7", "*": "8", "(": "9", ")": "0", "_": "-", "+": "=", "{": "[", "}": "]", "|": "\\", ":": ";", "\"": "\'", "<": ",", ">": ".", "?": "/", }; // tslint:enable object-literal-sort-keys /* tslint:enable:object-literal-key-quotes */ // Function keys for (var i = 1; i <= 12; ++i) { exports.KeyCodes[111 + i] = "f" + i; } // Numpad for (var i = 0; i <= 9; ++i) { exports.KeyCodes[96 + i] = "num" + i.toString(); } function comboMatches(a, b) { return a.modifiers === b.modifiers && a.key === b.key; } exports.comboMatches = comboMatches; /** * Converts a key combo string into a key combo object. Key combos include * zero or more modifier keys, such as `shift` or `alt`, and exactly one * action key, such as `A`, `enter`, or `left`. * * For action keys that require a shift, e.g. `@` or `|`, we inlude the * necessary `shift` modifier and automatically convert the action key to the * unshifted version. For example, `@` is equivalent to `shift+2`. */ exports.parseKeyCombo = function (combo) { var pieces = combo.replace(/\s/g, "").toLowerCase().split("+"); var modifiers = 0; var key = null; for (var _i = 0, pieces_1 = pieces; _i < pieces_1.length; _i++) { var piece = pieces_1[_i]; if (piece === "") { throw new Error("Failed to parse key combo \"" + combo + "\".\n Valid key combos look like \"cmd + plus\", \"shift+p\", or \"!\""); } if (exports.Aliases[piece] != null) { piece = exports.Aliases[piece]; } if (exports.ModifierBitMasks[piece] != null) { modifiers += exports.ModifierBitMasks[piece]; } else if (exports.ShiftKeys[piece] != null) { // tslint:disable-next-line no-string-literal modifiers += exports.ModifierBitMasks["shift"]; key = exports.ShiftKeys[piece]; } else { key = piece.toLowerCase(); } } return { modifiers: modifiers, key: key }; }; /** * PhantomJS's webkit totally messes up keyboard events, so we have do this * fancy little dance with the event data to determine which key was pressed * for unit tests. */ var normalizeKeyCode = function (e) { return (e.which === 0 && e.key != null) ? e.key.charCodeAt(0) : e.which; }; /** * Converts a keyboard event into a valid combo prop string */ exports.getKeyComboString = function (e) { var keys = []; // modifiers first if (e.ctrlKey) { keys.push("ctrl"); } if (e.altKey) { keys.push("alt"); } if (e.shiftKey) { keys.push("shift"); } if (e.metaKey) { keys.push("meta"); } var which = normalizeKeyCode(e); if (exports.Modifiers[which] != null) { } else if (exports.KeyCodes[which] != null) { keys.push(exports.KeyCodes[which]); } else { keys.push(String.fromCharCode(which).toLowerCase()); } // join keys with plusses return keys.join(" + "); }; /** * Determines the key combo object from the given keyboard event. Again, a key * combo includes zero or more modifiers (represented by a bitmask) and one * action key, which we determine from the `e.which` property of the keyboard * event. */ exports.getKeyCombo = function (e) { var key = null; var which = normalizeKeyCode(e); if (exports.Modifiers[which] != null) { } else if (exports.KeyCodes[which] != null) { key = exports.KeyCodes[which]; } else { key = String.fromCharCode(which).toLowerCase(); } var modifiers = 0; // tslint:disable no-string-literal if (e.altKey) { modifiers += exports.ModifierBitMasks["alt"]; } if (e.ctrlKey) { modifiers += exports.ModifierBitMasks["ctrl"]; } if (e.metaKey) { modifiers += exports.ModifierBitMasks["meta"]; } if (e.shiftKey) { modifiers += exports.ModifierBitMasks["shift"]; } // tslint:enable return { modifiers: modifiers, key: key }; }; /** * Splits a key combo string into its constituent key values and looks up * aliases, such as `return` -> `enter`. * * Unlike the parseKeyCombo method, this method does NOT convert shifted * action keys. So `"@"` will NOT be converted to `["shift", "2"]`). */ exports.normalizeKeyCombo = function (combo) { var keys = combo.replace(/\s/g, "").split("+"); return keys.map(function (key) { return exports.Aliases[key] != null ? exports.Aliases[key] : key; }); }; /* tslint:enable:no-string-literal */ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzL2hvdGtleXMvaG90a2V5UGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHOztBQWNVLGdCQUFRLEdBQUc7SUFDcEIsQ0FBQyxFQUFFLFdBQVc7SUFDZCxDQUFDLEVBQUUsS0FBSztJQUNSLEVBQUUsRUFBRSxPQUFPO0lBQ1gsRUFBRSxFQUFFLFVBQVU7SUFDZCxFQUFFLEVBQUUsS0FBSztJQUNULEVBQUUsRUFBRSxPQUFPO0lBQ1gsRUFBRSxFQUFFLFFBQVE7SUFDWixFQUFFLEVBQUUsVUFBVTtJQUNkLEVBQUUsRUFBRSxLQUFLO0lBQ1QsRUFBRSxFQUFFLE1BQU07SUFDVixFQUFFLEVBQUUsTUFBTTtJQUNWLEVBQUUsRUFBRSxJQUFJO0lBQ1IsRUFBRSxFQUFFLE9BQU87SUFDWCxFQUFFLEVBQUUsTUFBTTtJQUNWLEVBQUUsRUFBRSxLQUFLO0lBQ1QsRUFBRSxFQUFFLEtBQUs7SUFDVCxjQUFjO0lBQ2QsRUFBRSxFQUFHLEdBQUc7SUFDUixFQUFFLEVBQUcsR0FBRztJQUNSLEVBQUUsRUFBRyxHQUFHO0lBQ1IsRUFBRSxFQUFHLEdBQUc7SUFDUixFQUFFLEVBQUcsR0FBRztJQUNSLEVBQUUsRUFBRyxHQUFHO0lBQ1IsRUFBRSxFQUFHLEdBQUc7SUFDUixFQUFFLEVBQUcsR0FBRztJQUNSLEVBQUUsRUFBRyxHQUFHO0lBQ1IsRUFBRSxFQUFHLEdBQUc7SUFDUixXQUFXO0lBQ1gsRUFBRSxFQUFHLEdBQUc7SUFDUixFQUFFLEVBQUcsR0FBRztJQUNSLEVBQUUsRUFBRyxHQUFHO0lBQ1IsRUFBRSxFQUFHLEdBQUc7SUFDUixFQUFFLEVBQUcsR0FBRztJQUNSLEVBQUUsRUFBRyxHQUFHO0lBQ1IsRUFBRSxFQUFHLEdBQUc7SUFDUixFQUFFLEVBQUcsR0FBRztJQUNSLEVBQUUsRUFBRyxHQUFHO0lBQ1IsRUFBRSxFQUFHLEdBQUc7SUFDUixFQUFFLEVBQUcsR0FBRztJQUNSLEVBQUUsRUFBRyxH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Q0FBQyxVQUFDLEdBQUcsSUFBSyxPQUFBLGVBQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEdBQUcsZUFBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsRUFBekMsQ0FBeUMsQ0FBQyxDQUFDO0FBQ3hFLENBQUMsQ0FBQztBQUNGLHFDQUFxQyIsImZpbGUiOiJjb21wb25lbnRzL2hvdGtleXMvaG90a2V5UGFyc2VyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE2IFBhbGFudGlyIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRC0zIExpY2Vuc2UgYXMgbW9kaWZpZWQgKHRoZSDigJxMaWNlbnNl4oCdKTsgeW91IG1heSBvYnRhaW4gYSBjb3B5XG4gKiBvZiB0aGUgbGljZW5zZSBhdCBodHRwczovL2dpdGh1Yi5jb20vcGFsYW50aXIvYmx1ZXByaW50L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcGFsYW50aXIvYmx1ZXByaW50L2Jsb2IvbWFzdGVyL1BBVEVOVFNcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIElLZXlDb2RlVGFibGUge1xuICAgIFtjb2RlOiBudW1iZXJdOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUtleUNvZGVSZXZlcnNlVGFibGUge1xuICAgIFtrZXk6IHN0cmluZ106IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJS2V5TWFwIHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjb25zdCBLZXlDb2RlcyA9IHtcbiAgICA4OiBcImJhY2tzcGFjZVwiLFxuICAgIDk6IFwidGFiXCIsXG4gICAgMTM6IFwiZW50ZXJcIixcbiAgICAyMDogXCJjYXBzbG9ja1wiLFxuICAgIDI3OiBcImVzY1wiLFxuICAgIDMyOiBcInNwYWNlXCIsXG4gICAgMzM6IFwicGFnZXVwXCIsXG4gICAgMzQ6IFwicGFnZWRvd25cIixcbiAgICAzNTogXCJlbmRcIixcbiAgICAzNjogXCJob21lXCIsXG4gICAgMzc6IFwibGVmdFwiLFxuICAgIDM4OiBcInVwXCIsXG4gICAgMzk6IFwicmlnaHRcIixcbiAgICA0MDogXCJkb3duXCIsXG4gICAgNDU6IFwiaW5zXCIsXG4gICAgNDY6IFwiZGVsXCIsXG4gICAgLy8gbnVtYmVyIGtleXNcbiAgICA0OCA6IFwiMFwiLFxuICAgIDQ5IDogXCIxXCIsXG4gICAgNTAgOiBcIjJcIixcbiAgICA1MSA6IFwiM1wiLFxuICAgIDUyIDogXCI0XCIsXG4gICAgNTMgOiBcIjVcIixcbiAgICA1NCA6IFwiNlwiLFxuICAgIDU1IDogXCI3XCIsXG4gICAgNTYgOiBcIjhcIixcbiAgICA1NyA6IFwiOVwiLFxuICAgIC8vIGFscGhhYmV0XG4gICAgNjUgOiBcImFcIixcbiAgICA2NiA6IFwiYlwiLFxuICAgIDY3IDogXCJjXCIsXG4gICAgNjggOiBcImRcIixcbiAgICA2OSA6IFwiZVwiLFxuICAgIDcwIDogXCJmXCIsXG4gICAgNzEgOiBcImdcIixcbiAgICA3MiA6IFwiaFwiLFxuICAgIDczIDogXCJpXCIsXG4gICAgNzQgOiBcImpcIixcbiAgICA3NSA6IFwia1wiLFxuICAgIDc2IDogXCJsXCIsXG4gICAgNzcgOiBcIm1cIixcbiAgICA3OCA6IFwiblwiLFxuICAgIDc5IDogXCJvXCIsXG4gICAgODAgOiBcInBcIixcbiAgICA4MSA6IFwicVwiLFxuICAgIDgyIDogXCJyXCIsXG4gICAgODMgOiBcInNcIixcbiAgICA4NCA6IFwidFwiLFxuICAgIDg1IDogXCJ1XCIsXG4gICAgODYgOiBcInZcIixcbiAgICA4NyA6IFwid1wiLFxuICAgIDg4IDogXCJ4XCIsXG4gICAgODkgOiBcInlcIixcbiAgICA5MCA6IFwielwiLFxuICAgIC8vIHB1bmN0dWF0aW9uXG4gICAgMTA2OiBcIipcIixcbiAgICAxMDc6IFwiK1wiLFxuICAgIDEwOTogXCItXCIsXG4gICAgMTEwOiBcIi5cIixcbiAgICAxMTE6IFwiL1wiLFxuICAgIDE4NjogXCI7XCIsXG4gICAgMTg3OiBcIj1cIixcbiAgICAxODg6IFwiLFwiLFxuICAgIDE4OTogXCItXCIsXG4gICAgMTkwOiBcIi5cIixcbiAgICAxOTE6IFwiL1wiLFxuICAgIDE5MjogXCJgXCIsXG4gICAgMjE5OiBcIltcIixcbiAgICAyMjA6IFwiXFxcXFwiLFxuICAgIDIyMTogXCJdXCIsXG4gICAgMjIyOiBcIlxcJ1wiLFxufSBhcyBJS2V5Q29kZVRhYmxlO1xuXG5leHBvcnQgY29uc3QgTW9kaWZpZXJzID0ge1xuICAgIDE2OiBcInNoaWZ0XCIsXG4gICAgMTc6IFwiY3RybFwiLFxuICAgIDE4OiBcImFsdFwiLFxuICAgIDkxOiBcIm1ldGFcIixcbiAgICA5MzogXCJtZXRhXCIsXG4gICAgMjI0OiBcIm1ldGFcIixcbn0gYXMgSUtleUNvZGVUYWJsZTtcblxuZXhwb3J0IGNvbnN0IE1vZGlmaWVyQml0TWFza3MgPSB7XG4gICAgYWx0OiAxLFxuICAgIGN0cmw6IDIsXG4gICAgbWV0YTogNCxcbiAgICBzaGlmdDogOCxcbn0gYXMgSUtleUNvZGVSZXZlcnNlVGFibGU7XG5cbmV4cG9ydCBjb25zdCBBbGlhc2VzID0ge1xuICAgIGNtZDogXCJtZXRhXCIsXG4gICAgY29tbWFuZDogXCJtZXRhXCIsXG4gICAgZXNjYXBlOiBcImVzY1wiLFxuICAgIG1pbnVzOiBcIi1cIixcbiAgICBtb2Q6IC9NYWN8aVBvZHxpUGhvbmV8aVBhZC8udGVzdChuYXZpZ2F0b3IucGxhdGZvcm0pID8gXCJtZXRhXCIgOiBcImN0cmxcIixcbiAgICBvcHRpb246IFwiYWx0XCIsXG4gICAgcGx1czogXCIrXCIsXG4gICAgcmV0dXJuOiBcImVudGVyXCIsXG4gICAgd2luOiBcIm1ldGFcIixcbn0gYXMgSUtleU1hcDtcblxuLy8gYWxwaCBzb3J0aW5nIGlzIHVuaW50dWl0aXZlIGhlcmVcbi8vIHRzbGludDpkaXNhYmxlIG9iamVjdC1saXRlcmFsLXNvcnQta2V5c1xuZXhwb3J0IGNvbnN0IFNoaWZ0S2V5cyA9IHtcbiAgICBcIn5cIjogXCJgXCIsXG4gICAgXCIhXCI6IFwiMVwiLFxuICAgIFwiQFwiOiBcIjJcIixcbiAgICBcIiNcIjogXCIzXCIsXG4gICAgXCIkXCI6IFwiNFwiLFxuICAgIFwiJVwiOiBcIjVcIixcbiAgICBcIl5cIjogXCI2XCIsXG4gICAgXCImXCI6IFwiN1wiLFxuICAgIFwiKlwiOiBcIjhcIixcbiAgICBcIihcIjogXCI5XCIsXG4gICAgXCIpXCI6IFwiMFwiLFxuICAgIFwiX1wiOiBcIi1cIixcbiAgICBcIitcIjogXCI9XCIsXG4gICAgXCJ7XCI6IFwiW1wiLFxuICAgIFwifVwiOiBcIl1cIixcbiAgICBcInxcIjogXCJcXFxcXCIsXG4gICAgXCI6XCI6IFwiO1wiLFxuICAgIFwiXFxcIlwiOiBcIlxcJ1wiLFxuICAgIFwiPFwiOiBcIixcIixcbiAgICBcIj5cIjogXCIuXCIsXG4gICAgXCI/XCI6IFwiL1wiLFxufSBhcyBJS2V5TWFwO1xuLy8gdHNsaW50OmVuYWJsZSBvYmplY3QtbGl0ZXJhbC1zb3J0LWtleXNcblxuLyogdHNsaW50OmVuYWJsZTpvYmplY3QtbGl0ZXJhbC1rZXktcXVvdGVzICovXG5cbi8vIEZ1bmN0aW9uIGtleXNcbmZvciAobGV0IGkgPSAxOyBpIDw9IDEyOyArK2kpIHtcbiAgICBLZXlDb2Rlc1sxMTEgKyBpXSA9IFwiZlwiICsgaTtcbn1cblxuLy8gTnVtcGFkXG5mb3IgKGxldCBpID0gMDsgaSA8PSA5OyArK2kpIHtcbiAgICBLZXlDb2Rlc1s5NiArIGldID0gXCJudW1cIiArIGkudG9TdHJpbmcoKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJS2V5Q29tYm8ge1xuICAgIGtleT86IHN0cmluZztcbiAgICBtb2RpZmllcnM6IG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJvTWF0Y2hlcyhhOiBJS2V5Q29tYm8sIGI6IElLZXlDb21ibykge1xuICAgIHJldHVybiBhLm1vZGlmaWVycyA9PT0gYi5tb2RpZmllcnMgJiYgYS5rZXkgPT09IGIua2V5O1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEga2V5IGNvbWJvIHN0cmluZyBpbnRvIGEga2V5IGNvbWJvIG9iamVjdC4gS2V5IGNvbWJvcyBpbmNsdWRlXG4gKiB6ZXJvIG9yIG1vcmUgbW9kaWZpZXIga2V5cywgc3VjaCBhcyBgc2hpZnRgIG9yIGBhbHRgLCBhbmQgZXhhY3RseSBvbmVcbiAqIGFjdGlvbiBrZXksIHN1Y2ggYXMgYEFgLCBgZW50ZXJgLCBvciBgbGVmdGAuXG4gKlxuICogRm9yIGFjdGlvbiBrZXlzIHRoYXQgcmVxdWlyZSBhIHNoaWZ0LCBlLmcuIGBAYCBvciBgfGAsIHdlIGlubHVkZSB0aGVcbiAqIG5lY2Vzc2FyeSBgc2hpZnRgIG1vZGlmaWVyIGFuZCBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgdGhlIGFjdGlvbiBrZXkgdG8gdGhlXG4gKiB1bnNoaWZ0ZWQgdmVyc2lvbi4gRm9yIGV4YW1wbGUsIGBAYCBpcyBlcXVpdmFsZW50IHRvIGBzaGlmdCsyYC5cbiAqL1xuZXhwb3J0IGNvbnN0IHBhcnNlS2V5Q29tYm8gPSAoY29tYm86IHN0cmluZyk6IElLZXlDb21ibyA9PiB7XG4gICAgY29uc3QgcGllY2VzID0gY29tYm8ucmVwbGFjZSgvXFxzL2csIFwiXCIpLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIrXCIpO1xuICAgIGxldCBtb2RpZmllcnMgPSAwO1xuICAgIGxldCBrZXkgPSBudWxsIGFzIHN0cmluZztcbiAgICBmb3IgKGxldCBwaWVjZSBvZiBwaWVjZXMpIHtcbiAgICAgICAgaWYgKHBpZWNlID09PSBcIlwiKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBwYXJzZSBrZXkgY29tYm8gXCIke2NvbWJvfVwiLlxuICAgICAgICAgICAgICAgIFZhbGlkIGtleSBjb21ib3MgbG9vayBsaWtlIFwiY21kICsgcGx1c1wiLCBcInNoaWZ0K3BcIiwgb3IgXCIhXCJgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBbGlhc2VzW3BpZWNlXSAhPSBudWxsKSB7XG4gICAgICAgICAgICBwaWVjZSA9IEFsaWFzZXNbcGllY2VdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKE1vZGlmaWVyQml0TWFza3NbcGllY2VdICE9IG51bGwpIHtcbiAgICAgICAgICAgIG1vZGlmaWVycyArPSBNb2RpZmllckJpdE1hc2tzW3BpZWNlXTtcbiAgICAgICAgfSBlbHNlIGlmIChTaGlmdEtleXNbcGllY2VdICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZSBuby1zdHJpbmctbGl0ZXJhbFxuICAgICAgICAgICAgbW9kaWZpZXJzICs9IE1vZGlmaWVyQml0TWFza3NbXCJzaGlmdFwiXTtcbiAgICAgICAgICAgIGtleSA9IFNoaWZ0S2V5c1twaWVjZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBrZXkgPSBwaWVjZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7IG1vZGlmaWVycywga2V5IH07XG59O1xuXG4vKipcbiAqIFBoYW50b21KUydzIHdlYmtpdCB0b3RhbGx5IG1lc3NlcyB1cCBrZXlib2FyZCBldmVudHMsIHNvIHdlIGhhdmUgZG8gdGhpc1xuICogZmFuY3kgbGl0dGxlIGRhbmNlIHdpdGggdGhlIGV2ZW50IGRhdGEgdG8gZGV0ZXJtaW5lIHdoaWNoIGtleSB3YXMgcHJlc3NlZFxuICogZm9yIHVuaXQgdGVzdHMuXG4gKi9cbmNvbnN0IG5vcm1hbGl6ZUtleUNvZGUgPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgIHJldHVybiAoZS53aGljaCA9PT0gMCAmJiBlLmtleSAhPSBudWxsKSA/IGUua2V5LmNoYXJDb2RlQXQoMCkgOiBlLndoaWNoO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGtleWJvYXJkIGV2ZW50IGludG8gYSB2YWxpZCBjb21ibyBwcm9wIHN0cmluZ1xuICovXG5leHBvcnQgY29uc3QgZ2V0S2V5Q29tYm9TdHJpbmcgPSAoZTogS2V5Ym9hcmRFdmVudCk6IHN0cmluZyA9PiB7XG4gICAgY29uc3Qga2V5cyA9IFtdIGFzIHN0cmluZ1tdO1xuXG4gICAgLy8gbW9kaWZpZXJzIGZpcnN0XG4gICAgaWYgKGUuY3RybEtleSkgeyBrZXlzLnB1c2goXCJjdHJsXCIpOyB9XG4gICAgaWYgKGUuYWx0S2V5KSB7IGtleXMucHVzaChcImFsdFwiKTsgfVxuICAgIGlmIChlLnNoaWZ0S2V5KSB7IGtleXMucHVzaChcInNoaWZ0XCIpOyB9XG4gICAgaWYgKGUubWV0YUtleSkgeyBrZXlzLnB1c2goXCJtZXRhXCIpOyB9XG5cbiAgICBjb25zdCB3aGljaCA9IG5vcm1hbGl6ZUtleUNvZGUoZSk7XG4gICAgaWYgKE1vZGlmaWVyc1t3aGljaF0gIT0gbnVsbCkge1xuICAgICAgICAvLyBubyBhY3Rpb24ga2V5XG4gICAgfSBlbHNlIGlmIChLZXlDb2Rlc1t3aGljaF0gIT0gbnVsbCkge1xuICAgICAgICBrZXlzLnB1c2goS2V5Q29kZXNbd2hpY2hdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBrZXlzLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh3aGljaCkudG9Mb3dlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgLy8gam9pbiBrZXlzIHdpdGggcGx1c3Nlc1xuICAgIHJldHVybiBrZXlzLmpvaW4oXCIgKyBcIik7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgdGhlIGtleSBjb21ibyBvYmplY3QgZnJvbSB0aGUgZ2l2ZW4ga2V5Ym9hcmQgZXZlbnQuIEFnYWluLCBhIGtleVxuICogY29tYm8gaW5jbHVkZXMgemVybyBvciBtb3JlIG1vZGlmaWVycyAocmVwcmVzZW50ZWQgYnkgYSBiaXRtYXNrKSBhbmQgb25lXG4gKiBhY3Rpb24ga2V5LCB3aGljaCB3ZSBkZXRlcm1pbmUgZnJvbSB0aGUgYGUud2hpY2hgIHByb3BlcnR5IG9mIHRoZSBrZXlib2FyZFxuICogZXZlbnQuXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRLZXlDb21ibyA9IChlOiBLZXlib2FyZEV2ZW50KTogSUtleUNvbWJvID0+IHtcbiAgICBsZXQga2V5ID0gbnVsbCBhcyBzdHJpbmc7XG4gICAgY29uc3Qgd2hpY2ggPSBub3JtYWxpemVLZXlDb2RlKGUpO1xuICAgIGlmIChNb2RpZmllcnNbd2hpY2hdICE9IG51bGwpIHtcbiAgICAgICAgLy8ga2VlcCBrZXkgbnVsbFxuICAgIH0gZWxzZSBpZiAoS2V5Q29kZXNbd2hpY2hdICE9IG51bGwpIHtcbiAgICAgICAga2V5ID0gS2V5Q29kZXNbd2hpY2hdO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGtleSA9IFN0cmluZy5mcm9tQ2hhckNvZGUod2hpY2gpLnRvTG93ZXJDYXNlKCk7XG4gICAgfVxuXG4gICAgbGV0IG1vZGlmaWVycyA9IDA7XG4gICAgLy8gdHNsaW50OmRpc2FibGUgbm8tc3RyaW5nLWxpdGVyYWxcbiAgICBpZiAoZS5hbHRLZXkpIHsgbW9kaWZpZXJzICs9IE1vZGlmaWVyQml0TWFza3NbXCJhbHRcIl07IH1cbiAgICBpZiAoZS5jdHJsS2V5KSB7IG1vZGlmaWVycyArPSBNb2RpZmllckJpdE1hc2tzW1wiY3RybFwiXTsgfVxuICAgIGlmIChlLm1ldGFLZXkpIHsgbW9kaWZpZXJzICs9IE1vZGlmaWVyQml0TWFza3NbXCJtZXRhXCJdOyB9XG4gICAgaWYgKGUuc2hpZnRLZXkpIHsgbW9kaWZpZXJzICs9IE1vZGlmaWVyQml0TWFza3NbXCJzaGlmdFwiXTsgfVxuICAgIC8vIHRzbGludDplbmFibGVcblxuICAgIHJldHVybiB7IG1vZGlmaWVycywga2V5IH07XG59O1xuXG4vKipcbiAqIFNwbGl0cyBhIGtleSBjb21ibyBzdHJpbmcgaW50byBpdHMgY29uc3RpdHVlbnQga2V5IHZhbHVlcyBhbmQgbG9va3MgdXBcbiAqIGFsaWFzZXMsIHN1Y2ggYXMgYHJldHVybmAgLT4gYGVudGVyYC5cbiAqXG4gKiBVbmxpa2UgdGhlIHBhcnNlS2V5Q29tYm8gbWV0aG9kLCB0aGlzIG1ldGhvZCBkb2VzIE5PVCBjb252ZXJ0IHNoaWZ0ZWRcbiAqIGFjdGlvbiBrZXlzLiBTbyBgXCJAXCJgIHdpbGwgTk9UIGJlIGNvbnZlcnRlZCB0byBgW1wic2hpZnRcIiwgXCIyXCJdYCkuXG4gKi9cbmV4cG9ydCBjb25zdCBub3JtYWxpemVLZXlDb21ibyA9IChjb21ibzogc3RyaW5nKTogc3RyaW5nW10gPT4ge1xuICAgIGNvbnN0IGtleXMgPSBjb21iby5yZXBsYWNlKC9cXHMvZywgXCJcIikuc3BsaXQoXCIrXCIpO1xuICAgIHJldHVybiBrZXlzLm1hcCgoa2V5KSA9PiBBbGlhc2VzW2tleV0gIT0gbnVsbCA/IEFsaWFzZXNba2V5XSA6IGtleSk7XG59O1xuLyogdHNsaW50OmVuYWJsZTpuby1zdHJpbmctbGl0ZXJhbCAqL1xuIl0sInNvdXJjZVJvb3QiOiIvc291cmNlLyJ9