cli-block
Version:
Create nice looking CLI Blocks
188 lines • 7.22 kB
JavaScript
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.breakText = exports.truncateText = exports.centerText = exports.stylizeValue = exports.defineValueType = exports.isTrue = exports.isPath = exports.isNull = exports.isBooleanish = exports.isBoolean = exports.isColor = exports.isObject = exports.isArray = exports.isNumeric = exports.isNumber = exports.isString = exports.isUndefined = exports.spacedText = exports.spaces = exports.toStringValue = exports.objectToString = exports.strWidth = void 0;
// Logging Helpers
const mono_str_width_1 = __importDefault(require("mono-str-width"));
const tools_1 = require("@sil/tools");
exports.strWidth = mono_str_width_1.default;
const util_1 = require("../util");
const color_1 = require("@sil/color");
const objectToString = (obj) => {
let str = "";
Object.keys(obj).forEach((item) => {
let value = obj[item];
if (typeof value == "number")
value = (0, tools_1.toRoundNumber)(value, 0);
str = str + `${(0, util_1.blue)(item)}${value} `;
});
return str;
};
exports.objectToString = objectToString;
const toStringValue = (value) => {
if (typeof value == "string")
return value;
else if (typeof value == "number")
return `${value}`;
else if (typeof value == "boolean")
return `${value ? "true" : "false"}`;
else if (value == null)
return "";
else if (typeof value == "object")
return (0, exports.objectToString)(value);
else
return value.join("");
};
exports.toStringValue = toStringValue;
const spaces = (num, value = null) => {
let width = value;
if (typeof value !== "number")
width = (0, mono_str_width_1.default)((0, exports.toStringValue)(value));
let spaces = [];
for (let i = 0; i < (value ? num - width : num); i++) {
spaces.push(" ");
}
return spaces.join("");
};
exports.spaces = spaces;
const spacedText = (num, value) => {
return `${value} ${(0, exports.spaces)(num, (0, mono_str_width_1.default)((0, exports.toStringValue)(value)) + 1)}`;
};
exports.spacedText = spacedText;
const ValueType = {
STRING: "string",
NUMBER: "number",
COLOR: "color",
ARRAY: "array",
OBJECT: "object",
BOOLEAN: "boolean",
PATH: "path",
UNDEFINED: "undefined",
NULL: "null",
};
const isUndefined = (value) => (!value || value == undefined || value == null) && value !== 0;
exports.isUndefined = isUndefined;
const isString = (value) => typeof value == "string";
exports.isString = isString;
const isNumber = (value) => typeof value == "number" &&
(value == 0 || ((!(0, exports.isString)(value) || !(0, exports.isArray)(value)) && !isNaN(value)));
exports.isNumber = isNumber;
const isNumeric = (value) => (0, exports.isNumber)(value) || `${value}` === `${parseFloat(value)}`;
exports.isNumeric = isNumeric;
const isArray = (value) => Array.isArray(value) && value instanceof Array;
exports.isArray = isArray;
const isObject = (value) => typeof value == "object" && !(0, exports.isArray)(value) && !(0, exports.isUndefined)(value);
exports.isObject = isObject;
const isColor = (value) => (0, color_1.isCOLOR)(value);
exports.isColor = isColor;
const isBoolean = (value) => typeof value == "boolean";
exports.isBoolean = isBoolean;
const isBooleanish = (value) => (0, exports.isBoolean)(value) ||
((0, exports.isString)(value) &&
(value.toLowerCase() === "true" || value.toLowerCase() === "false"));
exports.isBooleanish = isBooleanish;
const isNull = (value) => (value == null || value == "null") && value !== undefined && value !== "";
exports.isNull = isNull;
const isPath = (value) => (0, exports.isString)(value) && value.includes("/");
exports.isPath = isPath;
const isTrue = (value) => {
if ((0, exports.isBoolean)(value))
return !!value;
if ((0, exports.isBooleanish)(value) && value.toLowerCase() == "true")
return true;
return false;
};
exports.isTrue = isTrue;
const defineValueType = (value) => {
if ((0, exports.isNull)(value))
return ValueType.NULL;
if ((0, exports.isUndefined)(value))
return ValueType.UNDEFINED;
if ((0, exports.isNumeric)(value))
return ValueType.NUMBER;
if ((0, exports.isArray)(value))
return ValueType.ARRAY;
if ((0, exports.isObject)(value))
return ValueType.OBJECT;
if ((0, exports.isBooleanish)(value))
return ValueType.BOOLEAN;
if ((0, exports.isPath)(value))
return ValueType.PATH;
if ((0, exports.isColor)(value))
return ValueType.COLOR;
if ((0, exports.isString)(value))
return ValueType.STRING;
};
exports.defineValueType = defineValueType;
const stylizeValue = (value) => {
switch ((0, exports.defineValueType)(value)) {
case ValueType.NULL:
return `${(0, util_1.italic)("null")}`;
case ValueType.UNDEFINED:
return ``;
case ValueType.ARRAY:
return value.join(", ");
case ValueType.OBJECT:
return Object.keys(value).join(", ");
case ValueType.NUMBER:
return `${(0, util_1.yellow)(value)}`;
case ValueType.BOOLEAN:
return (0, exports.isTrue)(value) ? `${(0, util_1.green)("True")}` : `${(0, util_1.red)("False")}`;
case ValueType.PATH:
return `${(0, util_1.blue)().italic(value)}`;
case ValueType.COLOR:
return `${(0, util_1.color)(`▶`, (0, color_1.toHex)(value))} ${value}`;
default:
case ValueType.STRING:
return value;
}
};
exports.stylizeValue = stylizeValue;
const centerText = (value, num) => {
let values = [];
let isEven = (0, mono_str_width_1.default)(value) % 2 == 0 ? true : false;
num = (num - (0, mono_str_width_1.default)(value)) / 2;
for (let i = 0; i < num; i++)
values.push(" ");
values.push(value);
for (let i = 0; i < num - (isEven ? 0 : 1); i++)
values.push(" ");
return values.join("");
};
exports.centerText = centerText;
const truncateText = (value, width, affix = "") => {
if (typeof value !== "string")
return value;
if ((0, mono_str_width_1.default)(value) > width) {
let valueArray = value.split("");
return valueArray.slice(0, width - affix.length).join("") + affix;
}
else
return value;
};
exports.truncateText = truncateText;
const breakText = (value, width) => {
if (typeof value !== "string")
return value;
let sentences = [];
if ((0, mono_str_width_1.default)(value) > width) {
let words = value.split(" ");
let sentence = "";
words.forEach((word, i) => {
if ((0, mono_str_width_1.default)(sentence + " " + word) < width) {
sentence = sentence + " " + word;
}
else {
sentences.push(sentence);
sentence = word;
}
});
return sentences;
}
else
return [value];
};
exports.breakText = breakText;
//# sourceMappingURL=helpers.js.map
;