json-tots
Version:
Template of Templates, a.k.a Template Should Eat Itself
214 lines (212 loc) • 7.04 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
var _parseInt2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/parse-int"));
var _slice = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/slice"));
var _parseFloat2 = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/parse-float"));
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 _includes = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/includes"));
var _trim = _interopRequireDefault(require("@babel/runtime-corejs3/core-js-stable/instance/trim"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/toConsumableArray"));
/* eslint-disable no-magic-numbers */
var jp = require('jsonpath');
var F = require('functional-pipelines');
var _uuid = require('uuid');
var md5 = require('md5');
var sx = require('./strings');
// eslint-disable-next-line no-template-curly-in-string
var castingFunctionError = sx.lazyTemplate('Error: value: [${value}] is not a valid ${type}');
module.exports = {
take: function take(_take) {
return function (values) {
return (0, _toConsumableArray2["default"])(F.take((0, _parseInt2["default"])(_take, 10) || Number.POSITIVE_INFINITY, values));
};
},
skip: function skip(_skip) {
return function (values) {
return (0, _toConsumableArray2["default"])(F.skip((0, _parseInt2["default"])(_skip, 10) || 0, values));
};
},
slice: (0, _slice["default"])(F),
split: function split(delimiter) {
return function (str) {
return str.split(delimiter);
};
},
asDate: function asDate(value) {
return new Date(value);
},
asInt: function asInt(value) {
var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;
return (0, _parseInt2["default"])(value, base);
},
asFloat: function asFloat(value) {
var base = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 10;
return (0, _parseFloat2["default"])(value, base);
},
asBool: function asBool(value) {
return value === 'true' ? true : value === 'false' ? false : null;
},
asArray: function asArray(value) {
var delimiter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
return value.split(delimiter);
},
orNull: function orNull(value) {
return value || null;
},
of: function of(key) {
return function (o) {
return o[key] !== undefined ? o[key] : F.reduced(o);
};
},
// eslint-disable-next-line eqeqeq
has: function has(path) {
return function (o) {
return jp.value(o, path) != undefined ? o : F.reduced(o);
};
},
flatten: F.flatten,
doubleFlatten: function doubleFlatten(enumerable) {
return F.flatten((0, _map["default"])(F).call(F, F.flatten, enumerable));
},
isNaN: isNaN,
now: function now() {
return new Date();
},
nowAsISO6601: function nowAsISO6601() {
return new Date().toISOString();
},
nowAsDateString: function nowAsDateString() {
return new Date().toDateString();
},
// nowAsFormat:
uuid: function uuid() {
return _uuid.v4();
},
hash: function hash(payload) {
return md5((0, _stringify["default"])(payload, null, 0));
},
toBool: function toBool(value) {
var _context;
return (0, _includes["default"])(_context = ['true', 'yes', 'y']).call(_context, value ? value.toLowerCase() : value);
},
toInteger: function toInteger(value) {
var result = (0, _parseInt2["default"])(value, 10);
return isNaN(result) ? castingFunctionError({
value: value,
type: 'integer'
}) : result;
},
toFloat: function toFloat(value) {
var result = (0, _parseFloat2["default"])(value, 10);
return isNaN(result) ? castingFunctionError({
value: value,
type: 'float'
}) : result;
},
toString: function toString(value) {
return value.toString();
},
stringify: function stringify(value) {
var keys = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
var indent = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 2;
return (0, _stringify["default"])(value, keys, indent);
},
ellipsis: function ellipsis(maxLen) {
return function (str) {
return "".concat((0, _slice["default"])(str).call(str, 0, maxLen - 3), "...");
};
},
toNull: function toNull(value) {
var _context2;
return (0, _includes["default"])(_context2 = ['null', 'nil']).call(_context2, value ? value.toLowerCase() : value) ? null : value;
},
trim: function trim(str) {
return (0, _trim["default"])(str).call(str);
},
toLowerCase: function toLowerCase(value) {
return value ? value.toLowerCase() : value;
},
toUpperCase: function toUpperCase(value) {
return value ? value.toUpperCase() : value;
},
not: function not(value) {
return !value;
},
equals: function equals(source) {
return function (target) {
return target === source;
};
},
gt: function gt(source) {
return function (target) {
return target > source;
};
},
gte: function gte(source) {
return function (target) {
return target >= source;
};
},
lt: function lt(source) {
return function (target) {
return target < source;
};
},
lte: function lte(source) {
return function (target) {
return target <= source;
};
},
inList: function inList(lst) {
return function (target) {
var _context3;
return (0, _includes["default"])(_context3 = JSON.parse(lst)).call(_context3, target);
};
},
isEven: function isEven(source) {
return source % 2 === 0;
},
isOdd: function isOdd(source) {
return source % 2 !== 0;
},
add: function add(source) {
return function (target) {
return (0, _parseFloat2["default"])(source, 10) + target;
};
},
sub: function sub(source) {
return function (target) {
return target - (0, _parseFloat2["default"])(source, 10);
};
},
div: function div(source) {
return function (target) {
return target / (0, _parseFloat2["default"])(source, 10);
};
},
remainder: function remainder(source) {
return function (target) {
return target / (0, _parseFloat2["default"])(source, 10);
};
},
pow: function pow(source) {
return function (target) {
return Math.pow(target, (0, _parseFloat2["default"])(source, 10));
};
},
mul: function mul(source) {
return function (target) {
return (0, _parseFloat2["default"])(source, 10) * target;
};
},
matches: function matches(source) {
return function (target) {
return new RegExp(target).test(source);
};
},
reducer: F.reduced,
unreduced: F.unreduced,
done: F.reduced,
undone: F.unreduced
};