UNPKG

matrix-react-sdk

Version:
105 lines (102 loc) 15.3 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireDefault(require("react")); var _languageHandler = require("../languageHandler"); var _AutocompleteProvider = _interopRequireDefault(require("./AutocompleteProvider")); var _QueryMatcher = _interopRequireDefault(require("./QueryMatcher")); var _Components = require("./Components"); var _SlashCommands = require("../SlashCommands"); var _MatrixClientPeg = require("../MatrixClientPeg"); /* Copyright 2024 New Vector Ltd. Copyright 2018 Michael Telatynski <7t3chguy@gmail.com> Copyright 2017 Vector Creations Ltd Copyright 2017 New Vector Ltd Copyright 2016 Aviral Dasgupta SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ const COMMAND_RE = /(^\/\w*)(?: .*)?/g; class CommandProvider extends _AutocompleteProvider.default { constructor(room, renderingType) { super({ commandRegex: COMMAND_RE, renderingType }); (0, _defineProperty2.default)(this, "matcher", void 0); this.matcher = new _QueryMatcher.default(_SlashCommands.Commands, { keys: ["command", "args", "description"], funcs: [({ aliases }) => aliases.join(" ")], // aliases context: renderingType }); } async getCompletions(query, selection, force, limit = -1) { const { command, range } = this.getCurrentCommand(query, selection); if (!command) return []; const cli = _MatrixClientPeg.MatrixClientPeg.get(); let matches = []; // check if the full match differs from the first word (i.e. returns false if the command has args) if (command[0] !== command[1]) { // The input looks like a command with arguments, perform exact match const name = command[1].slice(1); // strip leading `/` if (_SlashCommands.CommandMap.has(name) && _SlashCommands.CommandMap.get(name).isEnabled(cli)) { // some commands, namely `me` don't suit having the usage shown whilst typing their arguments if (_SlashCommands.CommandMap.get(name).hideCompletionAfterSpace) return []; matches = [_SlashCommands.CommandMap.get(name)]; } } else { if (query === "/") { // If they have just entered `/` show everything // We exclude the limit on purpose to have a comprehensive list matches = _SlashCommands.Commands; } else { // otherwise fuzzy match against all of the fields matches = this.matcher.match(command[1], limit); } } return matches.filter(cmd => { const display = !cmd.renderingTypes || cmd.renderingTypes.includes(this.renderingType); return cmd.isEnabled(cli) && display; }).map(result => { let completion = result.getCommand() + " "; const usedAlias = result.aliases.find(alias => `/${alias}` === command[1]); // If the command (or an alias) is the same as the one they entered, we don't want to discard their arguments if (usedAlias || result.getCommand() === command[1]) { completion = command[0]; } return { completion, type: "command", component: /*#__PURE__*/_react.default.createElement(_Components.TextualCompletion, { title: `/${usedAlias || result.command}`, subtitle: result.args, description: (0, _languageHandler._t)(result.description) }), range: range }; }); } getName() { return "*️⃣ " + (0, _languageHandler._t)("composer|autocomplete|command_description"); } renderCompletions(completions) { return /*#__PURE__*/_react.default.createElement("div", { className: "mx_Autocomplete_Completion_container_pill", role: "presentation", "aria-label": (0, _languageHandler._t)("composer|autocomplete|command_a11y") }, completions); } } exports.default = CommandProvider; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwicmVxdWlyZSIsIl9sYW5ndWFnZUhhbmRsZXIiLCJfQXV0b2NvbXBsZXRlUHJvdmlkZXIiLCJfUXVlcnlNYXRjaGVyIiwiX0NvbXBvbmVudHMiLCJfU2xhc2hDb21tYW5kcyIsIl9NYXRyaXhDbGllbnRQZWciLCJDT01NQU5EX1JFIiwiQ29tbWFuZFByb3ZpZGVyIiwiQXV0b2NvbXBsZXRlUHJvdmlkZXIiLCJjb25zdHJ1Y3RvciIsInJvb20iLCJyZW5kZXJpbmdUeXBlIiwiY29tbWFuZFJlZ2V4IiwiX2RlZmluZVByb3BlcnR5MiIsImRlZmF1bHQiLCJtYXRjaGVyIiwiUXVlcnlNYXRjaGVyIiwiQ29tbWFuZHMiLCJrZXlzIiwiZnVuY3MiLCJhbGlhc2VzIiwiam9pbiIsImNvbnRleHQiLCJnZXRDb21wbGV0aW9ucyIsInF1ZXJ5Iiwic2VsZWN0aW9uIiwiZm9yY2UiLCJsaW1pdCIsImNvbW1hbmQiLCJyYW5nZSIsImdldEN1cnJlbnRDb21tYW5kIiwiY2xpIiwiTWF0cml4Q2xpZW50UGVnIiwiZ2V0IiwibWF0Y2hlcyIsIm5hbWUiLCJzbGljZSIsIkNvbW1hbmRNYXAiLCJoYXMiLCJpc0VuYWJsZWQiLCJoaWRlQ29tcGxldGlvbkFmdGVyU3BhY2UiLCJtYXRjaCIsImZpbHRlciIsImNtZCIsImRpc3BsYXkiLCJyZW5kZXJpbmdUeXBlcyIsImluY2x1ZGVzIiwibWFwIiwicmVzdWx0IiwiY29tcGxldGlvbiIsImdldENvbW1hbmQiLCJ1c2VkQWxpYXMiLCJmaW5kIiwiYWxpYXMiLCJ0eXBlIiwiY29tcG9uZW50IiwiY3JlYXRlRWxlbWVudCIsIlRleHR1YWxDb21wbGV0aW9uIiwidGl0bGUiLCJzdWJ0aXRsZSIsImFyZ3MiLCJkZXNjcmlwdGlvbiIsIl90IiwiZ2V0TmFtZSIsInJlbmRlckNvbXBsZXRpb25zIiwiY29tcGxldGlvbnMiLCJjbGFzc05hbWUiLCJyb2xlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hdXRvY29tcGxldGUvQ29tbWFuZFByb3ZpZGVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuQ29weXJpZ2h0IDIwMjQgTmV3IFZlY3RvciBMdGQuXG5Db3B5cmlnaHQgMjAxOCBNaWNoYWVsIFRlbGF0eW5za2kgPDd0M2NoZ3V5QGdtYWlsLmNvbT5cbkNvcHlyaWdodCAyMDE3IFZlY3RvciBDcmVhdGlvbnMgTHRkXG5Db3B5cmlnaHQgMjAxNyBOZXcgVmVjdG9yIEx0ZFxuQ29weXJpZ2h0IDIwMTYgQXZpcmFsIERhc2d1cHRhXG5cblNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBR1BMLTMuMC1vbmx5IE9SIEdQTC0zLjAtb25seVxuUGxlYXNlIHNlZSBMSUNFTlNFIGZpbGVzIGluIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIGZ1bGwgZGV0YWlscy5cbiovXG5cbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IFJvb20gfSBmcm9tIFwibWF0cml4LWpzLXNkay9zcmMvbWF0cml4XCI7XG5cbmltcG9ydCB7IF90IH0gZnJvbSBcIi4uL2xhbmd1YWdlSGFuZGxlclwiO1xuaW1wb3J0IEF1dG9jb21wbGV0ZVByb3ZpZGVyIGZyb20gXCIuL0F1dG9jb21wbGV0ZVByb3ZpZGVyXCI7XG5pbXBvcnQgUXVlcnlNYXRjaGVyIGZyb20gXCIuL1F1ZXJ5TWF0Y2hlclwiO1xuaW1wb3J0IHsgVGV4dHVhbENvbXBsZXRpb24gfSBmcm9tIFwiLi9Db21wb25lbnRzXCI7XG5pbXBvcnQgeyBJQ29tcGxldGlvbiwgSVNlbGVjdGlvblJhbmdlIH0gZnJvbSBcIi4vQXV0b2NvbXBsZXRlclwiO1xuaW1wb3J0IHsgQ29tbWFuZCwgQ29tbWFuZHMsIENvbW1hbmRNYXAgfSBmcm9tIFwiLi4vU2xhc2hDb21tYW5kc1wiO1xuaW1wb3J0IHsgVGltZWxpbmVSZW5kZXJpbmdUeXBlIH0gZnJvbSBcIi4uL2NvbnRleHRzL1Jvb21Db250ZXh0XCI7XG5pbXBvcnQgeyBNYXRyaXhDbGllbnRQZWcgfSBmcm9tIFwiLi4vTWF0cml4Q2xpZW50UGVnXCI7XG5cbmNvbnN0IENPTU1BTkRfUkUgPSAvKF5cXC9cXHcqKSg/OiAuKik/L2c7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbW1hbmRQcm92aWRlciBleHRlbmRzIEF1dG9jb21wbGV0ZVByb3ZpZGVyIHtcbiAgICBwdWJsaWMgbWF0Y2hlcjogUXVlcnlNYXRjaGVyPENvbW1hbmQ+O1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHJvb206IFJvb20sIHJlbmRlcmluZ1R5cGU/OiBUaW1lbGluZVJlbmRlcmluZ1R5cGUpIHtcbiAgICAgICAgc3VwZXIoeyBjb21tYW5kUmVnZXg6IENPTU1BTkRfUkUsIHJlbmRlcmluZ1R5cGUgfSk7XG4gICAgICAgIHRoaXMubWF0Y2hlciA9IG5ldyBRdWVyeU1hdGNoZXIoQ29tbWFuZHMsIHtcbiAgICAgICAgICAgIGtleXM6IFtcImNvbW1hbmRcIiwgXCJhcmdzXCIsIFwiZGVzY3JpcHRpb25cIl0sXG4gICAgICAgICAgICBmdW5jczogWyh7IGFsaWFzZXMgfSkgPT4gYWxpYXNlcy5qb2luKFwiIFwiKV0sIC8vIGFsaWFzZXNcbiAgICAgICAgICAgIGNvbnRleHQ6IHJlbmRlcmluZ1R5cGUsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRDb21wbGV0aW9ucyhcbiAgICAgICAgcXVlcnk6IHN0cmluZyxcbiAgICAgICAgc2VsZWN0aW9uOiBJU2VsZWN0aW9uUmFuZ2UsXG4gICAgICAgIGZvcmNlPzogYm9vbGVhbixcbiAgICAgICAgbGltaXQgPSAtMSxcbiAgICApOiBQcm9taXNlPElDb21wbGV0aW9uW10+IHtcbiAgICAgICAgY29uc3QgeyBjb21tYW5kLCByYW5nZSB9ID0gdGhpcy5nZXRDdXJyZW50Q29tbWFuZChxdWVyeSwgc2VsZWN0aW9uKTtcbiAgICAgICAgaWYgKCFjb21tYW5kKSByZXR1cm4gW107XG5cbiAgICAgICAgY29uc3QgY2xpID0gTWF0cml4Q2xpZW50UGVnLmdldCgpO1xuXG4gICAgICAgIGxldCBtYXRjaGVzOiBDb21tYW5kW10gPSBbXTtcbiAgICAgICAgLy8gY2hlY2sgaWYgdGhlIGZ1bGwgbWF0Y2ggZGlmZmVycyBmcm9tIHRoZSBmaXJzdCB3b3JkIChpLmUuIHJldHVybnMgZmFsc2UgaWYgdGhlIGNvbW1hbmQgaGFzIGFyZ3MpXG4gICAgICAgIGlmIChjb21tYW5kWzBdICE9PSBjb21tYW5kWzFdKSB7XG4gICAgICAgICAgICAvLyBUaGUgaW5wdXQgbG9va3MgbGlrZSBhIGNvbW1hbmQgd2l0aCBhcmd1bWVudHMsIHBlcmZvcm0gZXhhY3QgbWF0Y2hcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBjb21tYW5kWzFdLnNsaWNlKDEpOyAvLyBzdHJpcCBsZWFkaW5nIGAvYFxuICAgICAgICAgICAgaWYgKENvbW1hbmRNYXAuaGFzKG5hbWUpICYmIENvbW1hbmRNYXAuZ2V0KG5hbWUpIS5pc0VuYWJsZWQoY2xpKSkge1xuICAgICAgICAgICAgICAgIC8vIHNvbWUgY29tbWFuZHMsIG5hbWVseSBgbWVgIGRvbid0IHN1aXQgaGF2aW5nIHRoZSB1c2FnZSBzaG93biB3aGlsc3QgdHlwaW5nIHRoZWlyIGFyZ3VtZW50c1xuICAgICAgICAgICAgICAgIGlmIChDb21tYW5kTWFwLmdldChuYW1lKSEuaGlkZUNvbXBsZXRpb25BZnRlclNwYWNlKSByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgbWF0Y2hlcyA9IFtDb21tYW5kTWFwLmdldChuYW1lKSFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHF1ZXJ5ID09PSBcIi9cIikge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZXkgaGF2ZSBqdXN0IGVudGVyZWQgYC9gIHNob3cgZXZlcnl0aGluZ1xuICAgICAgICAgICAgICAgIC8vIFdlIGV4Y2x1ZGUgdGhlIGxpbWl0IG9uIHB1cnBvc2UgdG8gaGF2ZSBhIGNvbXByZWhlbnNpdmUgbGlzdFxuICAgICAgICAgICAgICAgIG1hdGNoZXMgPSBDb21tYW5kcztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGZ1enp5IG1hdGNoIGFnYWluc3QgYWxsIG9mIHRoZSBmaWVsZHNcbiAgICAgICAgICAgICAgICBtYXRjaGVzID0gdGhpcy5tYXRjaGVyLm1hdGNoKGNvbW1hbmRbMV0sIGxpbWl0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXRjaGVzXG4gICAgICAgICAgICAuZmlsdGVyKChjbWQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBkaXNwbGF5ID0gIWNtZC5yZW5kZXJpbmdUeXBlcyB8fCBjbWQucmVuZGVyaW5nVHlwZXMuaW5jbHVkZXModGhpcy5yZW5kZXJpbmdUeXBlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gY21kLmlzRW5hYmxlZChjbGkpICYmIGRpc3BsYXk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLm1hcCgocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGNvbXBsZXRpb24gPSByZXN1bHQuZ2V0Q29tbWFuZCgpICsgXCIgXCI7XG4gICAgICAgICAgICAgICAgY29uc3QgdXNlZEFsaWFzID0gcmVzdWx0LmFsaWFzZXMuZmluZCgoYWxpYXMpID0+IGAvJHthbGlhc31gID09PSBjb21tYW5kWzFdKTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY29tbWFuZCAob3IgYW4gYWxpYXMpIGlzIHRoZSBzYW1lIGFzIHRoZSBvbmUgdGhleSBlbnRlcmVkLCB3ZSBkb24ndCB3YW50IHRvIGRpc2NhcmQgdGhlaXIgYXJndW1lbnRzXG4gICAgICAgICAgICAgICAgaWYgKHVzZWRBbGlhcyB8fCByZXN1bHQuZ2V0Q29tbWFuZCgpID09PSBjb21tYW5kWzFdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb24gPSBjb21tYW5kWzBdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb24sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiY29tbWFuZFwiLFxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnQ6IChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxUZXh0dWFsQ29tcGxldGlvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlPXtgLyR7dXNlZEFsaWFzIHx8IHJlc3VsdC5jb21tYW5kfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGl0bGU9e3Jlc3VsdC5hcmdzfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uPXtfdChyZXN1bHQuZGVzY3JpcHRpb24pfVxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlISxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hbWUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIFwiKu+4j+KDoyBcIiArIF90KFwiY29tcG9zZXJ8YXV0b2NvbXBsZXRlfGNvbW1hbmRfZGVzY3JpcHRpb25cIik7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbmRlckNvbXBsZXRpb25zKGNvbXBsZXRpb25zOiBSZWFjdC5SZWFjdE5vZGVbXSk6IFJlYWN0LlJlYWN0Tm9kZSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwibXhfQXV0b2NvbXBsZXRlX0NvbXBsZXRpb25fY29udGFpbmVyX3BpbGxcIlxuICAgICAgICAgICAgICAgIHJvbGU9XCJwcmVzZW50YXRpb25cIlxuICAgICAgICAgICAgICAgIGFyaWEtbGFiZWw9e190KFwiY29tcG9zZXJ8YXV0b2NvbXBsZXRlfGNvbW1hbmRfYTExeVwiKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7Y29tcGxldGlvbnN9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKTtcbiAgICB9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBV0EsSUFBQUEsTUFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBR0EsSUFBQUMsZ0JBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLHFCQUFBLEdBQUFILHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFKLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBSSxXQUFBLEdBQUFKLE9BQUE7QUFFQSxJQUFBSyxjQUFBLEdBQUFMLE9BQUE7QUFFQSxJQUFBTSxnQkFBQSxHQUFBTixPQUFBO0FBckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQWNBLE1BQU1PLFVBQVUsR0FBRyxtQkFBbUI7QUFFdkIsTUFBTUMsZUFBZSxTQUFTQyw2QkFBb0IsQ0FBQztFQUd2REMsV0FBV0EsQ0FBQ0MsSUFBVSxFQUFFQyxhQUFxQyxFQUFFO0lBQ2xFLEtBQUssQ0FBQztNQUFFQyxZQUFZLEVBQUVOLFVBQVU7TUFBRUs7SUFBYyxDQUFDLENBQUM7SUFBQyxJQUFBRSxnQkFBQSxDQUFBQyxPQUFBO0lBQ25ELElBQUksQ0FBQ0MsT0FBTyxHQUFHLElBQUlDLHFCQUFZLENBQUNDLHVCQUFRLEVBQUU7TUFDdENDLElBQUksRUFBRSxDQUFDLFNBQVMsRUFBRSxNQUFNLEVBQUUsYUFBYSxDQUFDO01BQ3hDQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQUVDO01BQVEsQ0FBQyxLQUFLQSxPQUFPLENBQUNDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztNQUFFO01BQzdDQyxPQUFPLEVBQUVYO0lBQ2IsQ0FBQyxDQUFDO0VBQ047RUFFQSxNQUFhWSxjQUFjQSxDQUN2QkMsS0FBYSxFQUNiQyxTQUEwQixFQUMx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