UNPKG

@2fd/command

Version:

Modular command line tool

184 lines (183 loc) 6.74 kB
"use strict"; var __extends = (this && this.__extends) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; var util_1 = require('util'); exports.TAB_SIZE = 4; function commandSort(commandA, commandB) { var namespaceA = commandA.indexOf(':') >= 0; var namespaceB = commandB.indexOf(':') >= 0; if (namespaceA && !namespaceB) { return 1; } else if (!namespaceA && namespaceB) { return -1; } else { return commandA.localeCompare(commandB); } } exports.commandSort = commandSort; function toString(obj) { return Object.prototype.toString.call(obj); } exports.toString = toString; ; function repeat(str, len) { if (str.repeat) return str.repeat(len); var result = ''; while (len > 0) { result += str; len--; } return result; } exports.repeat = repeat; exports.RESET = '\u001b[0m'; exports.CSS_TO_COMMAND = { 'font-weight:bold': '\u001b[1m', 'font-weight:normal': '\u001b[2m', 'font-style:italic': '\u001b[3m', 'text-decoration:underline': '\u001b[4m', 'visibility:hidden': '\u001b[8m', 'text-decoration:line-through': '\u001b[9m', 'color:black': '\u001b[30m', 'color:red': '\u001b[31m', 'color:green': '\u001b[32m', 'color:yellow': '\u001b[33m', 'color:blue': '\u001b[34m', 'color:magenta': '\u001b[35m', 'color:cyan': '\u001b[36m', 'color:white': '\u001b[37m', 'color:gray': '\u001b[90m', 'color:grey': '\u001b[90m', 'background:black': '\u001b[40m', 'background:red': '\u001b[41m', 'background:green': '\u001b[42m', 'background:yellow': '\u001b[43m', 'background:blue': '\u001b[44m', 'background:magenta': '\u001b[45m', 'background:cyan': '\u001b[46m', 'background:white': '\u001b[47m', 'background-color:black': '\u001b[40m', 'background-color:red': '\u001b[41m', 'background-color:green': '\u001b[42m', 'background-color:yellow': '\u001b[43m', 'background-color:blue': '\u001b[44m', 'background-color:magenta': '\u001b[45m', 'background-color:cyan': '\u001b[46m', 'background-color:white': '\u001b[47m', }; var Formatter = (function () { function Formatter(reset) { if (reset === void 0) { reset = ''; } this.reset = this.translate(reset); } Formatter.prototype.translate = function (styles) { return ''; }; /** * The first argument is a string that contains zero or more placeholders. * Each placeholder is replaced with the converted value from its * corresponding argument. Supported placeholders are: * %s - Formats the value as a string. * %d - Formats the value as a number (both integer and float). * %i - Formats the value as an integer. * %f - Formats the value as an integer. * %c - Formats the output string according to CSS styles you provide. * %j | %o | %O - JSON. Replaced with the string '[Circular]' if the argument contains circular references * %% - single percent sign ('%'). This does not consume an argument. * * @see https://nodejs.org/api/util.html#util_util_format_format * @see https://developer.chrome.com/devtools/docs/console-api#consolelogobject-object */ Formatter.prototype.format = function (str) { var _this = this; var replacements = []; for (var _i = 1; _i < arguments.length; _i++) { replacements[_i - 1] = arguments[_i]; } var finalReplacement = []; replacements = replacements.slice(); var finalStr = str.replace(/(%+[c|j|i|f|o|O|d|s|%])/g, function (match) { // ignore if no more replacements if (replacements.length === 0) return match; // ignore if match is escaped if (match.length % 2 === 1) return match; // extract replacement value var replacement = replacements.shift(); var placeholder = match.slice(-2); var percentages = match.slice(0, -2); switch (placeholder) { case '%o': // chrome object placeholder case '%O': finalReplacement.push(replacement); placeholder = '%j'; break; case '%c': finalReplacement.push(_this.translate(replacement)); placeholder = '%s'; break; case '%d': typeof replacement === 'object' ? finalReplacement.push(NaN) : finalReplacement.push(Number(replacement)); break; case '%i': typeof replacement === 'object' ? finalReplacement.push(NaN) : finalReplacement.push(parseInt(replacement)); placeholder = '%d'; break; case '%f': typeof replacement === 'object' ? finalReplacement.push(NaN) : finalReplacement.push(parseFloat(replacement)); placeholder = '%d'; break; case '%j': // node object placeholder case '%s': finalReplacement.push(replacement); break; default: replacements.push(replacement); } return percentages + placeholder; }); // native format return util_1.format.apply(void 0, [finalStr + this.reset].concat(finalReplacement)); }; return Formatter; }()); exports.Formatter = Formatter; var ColorFormatter = (function (_super) { __extends(ColorFormatter, _super); function ColorFormatter() { _super.apply(this, arguments); this.reset = exports.RESET; } ColorFormatter.prototype.translate = function (styles) { if (typeof styles !== 'string') return this.reset || ''; var commandStyles = styles .split(';') .map(function (value) { var css = value .replace(/\s+/g, '') .replace(/\/\*[.*]\*\//g, '') .toLowerCase(); if (exports.CSS_TO_COMMAND[css]) return exports.CSS_TO_COMMAND[css]; return ''; }) .join(''); return this.reset + commandStyles; }; return ColorFormatter; }(Formatter)); exports.ColorFormatter = ColorFormatter;