UNPKG

monaco-editor

Version:
84 lines (83 loc) 3.54 kB
/*--------------------------------------------------------------------------------------------- * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ import { toDisposable } from '../../../base/common/lifecycle.js'; import { validateConstraints } from '../../../base/common/types.js'; import { createDecorator } from '../../instantiation/common/instantiation.js'; import { LinkedList } from '../../../base/common/linkedList.js'; export var ICommandService = createDecorator('commandService'); export var CommandsRegistry = new /** @class */ (function () { function class_1() { this._commands = new Map(); } class_1.prototype.registerCommand = function (idOrCommand, handler) { var _this = this; if (!idOrCommand) { throw new Error("invalid command"); } if (typeof idOrCommand === 'string') { if (!handler) { throw new Error("invalid command"); } return this.registerCommand({ id: idOrCommand, handler: handler }); } // add argument validation if rich command metadata is provided if (idOrCommand.description) { var constraints_1 = []; for (var _i = 0, _a = idOrCommand.description.args; _i < _a.length; _i++) { var arg = _a[_i]; constraints_1.push(arg.constraint); } var actualHandler_1 = idOrCommand.handler; idOrCommand.handler = function (accessor) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } validateConstraints(args, constraints_1); return actualHandler_1.apply(void 0, [accessor].concat(args)); }; } // find a place to store the command var id = idOrCommand.id; var commands = this._commands.get(id); if (!commands) { commands = new LinkedList(); this._commands.set(id, commands); } var removeFn = commands.unshift(idOrCommand); return toDisposable(function () { removeFn(); if (_this._commands.get(id).isEmpty()) { _this._commands.delete(id); } }); }; class_1.prototype.registerCommandAlias = function (oldId, newId) { return CommandsRegistry.registerCommand(oldId, function (accessor) { var args = []; for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } var _a; (_a = accessor.get(ICommandService)).executeCommand.apply(_a, [newId].concat(args)); }); }; class_1.prototype.getCommand = function (id) { var list = this._commands.get(id); if (!list || list.isEmpty()) { return undefined; } return list.iterator().next().value; }; class_1.prototype.getCommands = function () { var _this = this; var result = Object.create(null); this._commands.forEach(function (value, key) { result[key] = _this.getCommand(key); }); return result; }; return class_1; }());