UNPKG

yamlify-object

Version:
120 lines 4.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var typeOf_js_1 = require("./typeOf.js"); var config_js_1 = require("./config.js"); var getPrefix_js_1 = require("./getPrefix.js"); /** * value types that not require indent after property name that include the value */ var NO_INDENT_TYPES = ['object', 'array']; function yamlifyObject(target, config) { var _a = (0, config_js_1.getConfig)(config), colors = _a.colors, prefix = _a.prefix, postfix = _a.postfix, dateToString = _a.dateToString, errorToString = _a.errorToString, indentChars = _a.indent; var seen = new Map(); /** * Object to yaml string formatter */ function objectProperty(obj, indentLength, inArray) { if (indentLength === void 0) { indentLength = 1; } if (inArray === void 0) { inArray = 0; } if (Object.keys(obj).length === 0) { return " ".concat(colors.base('{}')); } var str = '\n'; var objectPrefix = (0, getPrefix_js_1.getPrefix)(indentLength, indentChars); Object .keys(obj) .forEach(function (name) { var value = obj[name]; var type = (0, typeOf_js_1.typeOf)(value); var inArrayPrefix = (0, getPrefix_js_1.getPrefix)(inArray, ' '); var afterPropsIndent = NO_INDENT_TYPES.includes(type) ? '' : ' '; var valueString = checkCircular(value) ? " ".concat(colors.base('[Circular]')) : typifiedString(type, value, indentLength + 1, inArray); str += "".concat(inArrayPrefix).concat(objectPrefix).concat(colors.base("".concat(name, ":"))).concat(afterPropsIndent).concat(valueString, "\n"); }); return str.substring(0, str.length - 1); } /** * Array to yaml string formatter */ function arrayProperty(values, indentLength, inArray) { if (indentLength === void 0) { indentLength = 1; } if (inArray === void 0) { inArray = 0; } if (values.length === 0) { return " ".concat(colors.base('[]')); } var str = '\n'; var arrayPrefix = (0, getPrefix_js_1.getPrefix)(indentLength, indentChars); values .forEach(function (value) { var type = (0, typeOf_js_1.typeOf)(value); var inArrayPrefix = (0, getPrefix_js_1.getPrefix)(inArray, ' '); var valueString = checkCircular(value) ? colors.base('[Circular]') : typifiedString(type, value, indentLength, inArray + 1) .toString() .trimLeft(); str += "".concat(inArrayPrefix).concat(arrayPrefix).concat("".concat(colors.base('-'), " ")).concat(valueString, "\n"); }); return str.substring(0, str.length - 1); } function typifiedString(type, value, indentLength, inArray) { switch (type) { case 'array': return arrayProperty(value, indentLength, inArray); case 'object': return objectProperty(value, indentLength, inArray); case 'string': return colors.string(value); case 'symbol': return colors.symbol(value.toString()); case 'number': return colors.number(value); case 'boolean': return colors.boolean(value); case 'null': return colors.null('null'); case 'undefined': return colors.undefined('undefined'); case 'date': return colors.date(dateToString(value)); case 'error': return colors.error(errorToString(value, (0, getPrefix_js_1.getPrefix)(indentLength, indentChars))); case 'regexp': return colors.regexp(value.toString()); default: if (value && value.toString) { return value.toString(); } return Object.prototype.toString.call(value); } } function checkCircular(value) { if (!['object', 'array'].includes((0, typeOf_js_1.typeOf)(value))) { return false; } if (seen.has(value)) { return true; } seen.set(value, true); return false; } var string = ''; seen.set(target, true); if ((0, typeOf_js_1.typeOf)(target) === 'object' && Object.keys(target).length > 0) { string = objectProperty(target); } else if ((0, typeOf_js_1.typeOf)(target) === 'array' && target.length > 0) { string = arrayProperty(target); } if (string.length === 0) { return ''; } return "".concat(prefix).concat(string.slice(1)).concat(postfix); } exports.default = yamlifyObject; ; //# sourceMappingURL=index.js.map