json-tots
Version:
Template of Templates, a.k.a Template Should Eat Itself
113 lines (111 loc) • 4.55 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _regenerator = _interopRequireDefault(require("@babel/runtime-corejs3/regenerator"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/toConsumableArray"));
var _defineProperty = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/define-property"));
var _forEach = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/for-each"));
var _getOwnPropertyNames = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/object/get-own-property-names"));
var _concat = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/concat"));
var _map = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/map"));
var _stringify = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/json/stringify"));
var F = require('functional-pipelines');
// JSON.stringify return empty object for Error otherwise
if (!('toJSON' in Error.prototype)) {
(0, _defineProperty["default"])(Error.prototype, 'toJSON', {
value: function value() {
var _context;
var alt = {};
(0, _forEach["default"])(_context = (0, _getOwnPropertyNames["default"])(this)).call(_context, function (key) {
alt[key] = this[key];
}, this);
return alt;
},
configurable: true,
writable: true
});
}
function log() {
var _console, _context2;
for (var _len = arguments.length, params = new Array(_len), _key = 0; _key < _len; _key++) {
params[_key] = arguments[_key];
}
(_console = console).log.apply(_console, (0, _toConsumableArray2["default"])(serialize.apply(void 0, (0, _concat["default"])(_context2 = [4]).call(_context2, params))));
}
function peek() {
for (var _len2 = arguments.length, params = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
params[_key2] = arguments[_key2];
}
log.apply(void 0, params);
return params.length === 1 ? params[0] : params;
}
function logLine() {
var _console2, _context3;
for (var _len3 = arguments.length, params = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
params[_key3] = arguments[_key3];
}
(_console2 = console).log.apply(_console2, (0, _toConsumableArray2["default"])(serialize.apply(void 0, (0, _concat["default"])(_context3 = [0]).call(_context3, params))));
}
function error() {
var _console3, _context4, _context5;
for (var _len4 = arguments.length, params = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {
params[_key4] = arguments[_key4];
}
(_console3 = console).error.apply(_console3, (0, _concat["default"])(_context4 = ['Error:']).call(_context4, (0, _toConsumableArray2["default"])(serialize.apply(void 0, (0, _concat["default"])(_context5 = [4]).call(_context5, params)))));
}
function serialize(indent) {
for (var _len5 = arguments.length, params = new Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
params[_key5 - 1] = arguments[_key5];
}
return (0, _map["default"])(params).call(params, stringify(indent));
}
var stringify = function stringify(indent) {
return function (value) {
return F.isString(value) ? value : (0, _stringify["default"])(value, null, indent);
};
};
var repeat = function repeat(str) {
return function (count) {
var _marked = /*#__PURE__*/_regenerator["default"].mark(generate);
function generate() {
return _regenerator["default"].wrap(function generate$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
if (!count) {
_context6.next = 6;
break;
}
_context6.next = 3;
return str;
case 3:
count--;
_context6.next = 0;
break;
case 6:
case "end":
return _context6.stop();
}
}
}, _marked);
}
return (0, _toConsumableArray2["default"])(generate()).join('');
};
};
var line = function line(count) {
var sym = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '-';
return console.log(repeat(sym)(count));
};
module.exports = {
log: log,
peek: peek,
error: error,
repeat: repeat,
logLine: logLine,
line: line,
time: function time(label) {
return console.time(label);
},
timeEnd: function timeEnd(label) {
return console.timeEnd(label);
}
};