UNPKG

@lenne.tech/gluegun-menu

Version:
171 lines 13.7 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Menu = void 0; /** * Menu for gluegun */ class Menu { /** * Constructor for integration of toolbox */ constructor(toolbox) { this.toolbox = toolbox; this.optionsCache = {}; } /** * Show menu */ showMenu(parentCommands, options) { return __awaiter(this, void 0, void 0, function* () { if (options && options.setCache && (!!options.showHelp || !!options.helpLabel || !!options.backLabel || !!options.cancelLabel || !!options.byeMessage || !!options.hideBack)) { // save everything except level, headline & setCache this.optionsCache = Object.assign({}, options); delete this.optionsCache.level; delete this.optionsCache.headline; delete this.optionsCache.setCache; } options = Object.assign(Object.assign({}, this.optionsCache), options); const messages = { back: options.backLabel || '[ back ]', bye: options.byeMessage || 'Take care 👋', cancel: options.cancelLabel || '[ cancel ]', help: options.helpLabel || '[ help ]', }; // Toolbox feature const { print, prompt, runtime: { brand, commands }, } = this.toolbox; // Prepare parent command parentCommands = parentCommands ? parentCommands.trim() : ''; // Process options const { headline, level } = Object.assign({ headline: parentCommands ? `${parentCommands.charAt(0).toUpperCase() + parentCommands.slice(1)} commands` : '', level: parentCommands ? parentCommands.split(' ').length : 0, }, options); // Headline if (headline) { print.info(print.colors.cyan(headline)); } // Get main commands let mainCommands = commands .filter((c) => // Get only children of current command c.commandPath.join(' ').startsWith(parentCommands) // Get only direct children of current command && c.commandPath.length === level + 1 // Help will be added as additional command && !['help'].includes(c.commandPath[0]) // Don't show CLI brand command && !(level === 0 && [brand].includes(c.commandPath[0]))) .map(c => c.commandPath[level] + (c.description ? ` (${c.description})` : '')) .sort(); // Additional commands if (options.showHelp !== false) { mainCommands = [messages.help].concat(mainCommands); } if (level && options.hideBack !== true) { mainCommands.push(messages.back); } mainCommands.push(messages.cancel); // Select command const { commandName } = yield prompt.ask({ choices: mainCommands.slice(0), message: 'Select command', name: 'commandName', type: 'select', }); // Check command if (!commandName) { print.error('No command selected!'); return; } switch (commandName) { case messages.back: { // Get command let command = commands.filter((c) => c.commandPath.join(' ') === parentCommands .trim() .replace(/\s\(.*\)$/, '') .split(' ') .slice(0, -1) .join(' '))[0]; if (!command) { command = commands[0]; } // Run command try { this.toolbox.parameters.options.fromGluegunMenu = true; yield command.run(this.toolbox); process.exit(); } catch (e) { // Abort via CTRL-C if (!e) { console.log(messages.bye); } else { // Throw error throw e; } } break; } case messages.cancel: { print.info(messages.bye); return; } case messages.help: { print.printCommands(this.toolbox, level ? parentCommands.split(' ') : undefined); break; } default: { // Get command const command = commands.filter((c) => c.commandPath.join(' ') === `${parentCommands} ${commandName}`.trim().replace(/\s\(.*\)$/, ''))[0]; // Run command try { this.toolbox.parameters.options.fromGluegunMenu = true; yield command.run(this.toolbox); process.exit(); } catch (e) { // Abort via CTRL-C if (!e) { console.log(messages.bye); } else { // Throw error throw e; } } } } }); } } exports.Menu = Menu; /** * Extend toolbox */ exports.default = (toolbox) => { // Add menu toolbox.menu = new Menu(toolbox); // Add the function to query whether the command was started from the menu toolbox.fromMenu = () => { return toolbox.parameters.options.fromGluegunMenu; }; }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5leHRlbnNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZXh0ZW5zaW9ucy9tZW51LmV4dGVuc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFFQTs7R0FFRztBQUNILE1BQWEsSUFBSTtJQUVmOztPQUVHO0lBQ0gsWUFBc0IsT0FBdUI7UUFBdkIsWUFBTyxHQUFQLE9BQU8sQ0FBZ0I7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxFQUFFLENBQUM7SUFDekIsQ0FBQztJQUVEOztPQUVHO0lBQ1UsUUFBUSxDQUNuQixjQUF1QixFQUN2QixPQVVDOztZQUVELElBQ0UsT0FBTzttQkFDSixPQUFPLENBQUMsUUFBUTttQkFDaEIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVE7dUJBQ2pCLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUzt1QkFDbkIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTO3VCQUNuQixDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVc7dUJBQ3JCLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVTt1QkFDcEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFDeEIsQ0FBQztnQkFDRCxvREFBb0Q7Z0JBQ3BELElBQUksQ0FBQyxZQUFZLHFCQUFRLE9BQU8sQ0FBRSxDQUFDO2dCQUNuQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO2dCQUMvQixPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO2dCQUNsQyxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO1lBQ3BDLENBQUM7WUFFRCxPQUFPLG1DQUNGLElBQUksQ0FBQyxZQUFZLEdBQ2pCLE9BQU8sQ0FDWCxDQUFDO1lBQ0YsTUFBTSxRQUFRLEdBQUc7Z0JBQ2YsSUFBSSxFQUFFLE9BQU8sQ0FBQyxTQUFTLElBQUksVUFBVTtnQkFDckMsR0FBRyxFQUFFLE9BQU8sQ0FBQyxV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