You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
6.4 KiB
220 lines
6.4 KiB
6 years ago
|
"use strict";
|
||
|
|
||
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
||
|
|
||
|
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }
|
||
|
|
||
|
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); }
|
||
|
|
||
|
function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); }
|
||
|
|
||
|
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }
|
||
|
|
||
|
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
||
|
|
||
|
var _stringify = require('json-stringify-safe');
|
||
|
|
||
|
var isObject = function isObject(x) {
|
||
|
return x && _typeof(x) === 'object';
|
||
|
};
|
||
|
|
||
|
var stringify = function stringify(obj) {
|
||
|
return isObject(obj) ? obj.stack || _stringify(obj) : obj;
|
||
|
};
|
||
|
|
||
|
var deepFlatten = function deepFlatten(arr) {
|
||
|
var _ref;
|
||
|
|
||
|
return (_ref = []).concat.apply(_ref, _toConsumableArray(arr.map(function (v) {
|
||
|
return Array.isArray(v) ? deepFlatten(v) : v;
|
||
|
})));
|
||
|
};
|
||
|
/* Returns true if a promise is passed */
|
||
|
|
||
|
|
||
|
var isPromise = function isPromise(prom) {
|
||
|
return prom && typeof prom.then === 'function';
|
||
|
};
|
||
|
/* Lift a value or promise into a function */
|
||
|
|
||
|
|
||
|
var liftPromise = function liftPromise(fn, thing) {
|
||
|
return isPromise(thing) ? thing.then(fn) : fn(thing);
|
||
|
};
|
||
|
|
||
|
module.exports = {
|
||
|
/* Returns true if an object is passed */
|
||
|
isObject: isObject,
|
||
|
|
||
|
/* Returns true if a promise is passed */
|
||
|
isPromise: isPromise,
|
||
|
|
||
|
/* Lift a value or promise into a function */
|
||
|
liftPromise: liftPromise,
|
||
|
|
||
|
/* Returns the element found at the given path or undefined */
|
||
|
path: function path(obj) {
|
||
|
return function (path) {
|
||
|
return path.reduce(function (result, segment) {
|
||
|
return result && result[segment];
|
||
|
}, obj);
|
||
|
};
|
||
|
},
|
||
|
|
||
|
/* Picks a key from an object */
|
||
|
pick: function pick(key) {
|
||
|
return function (obj) {
|
||
|
return obj[key];
|
||
|
};
|
||
|
},
|
||
|
|
||
|
/* Pipe a value or promise through any number of unary functions */
|
||
|
pipe: function pipe() {
|
||
|
for (var _len = arguments.length, fns = new Array(_len), _key = 0; _key < _len; _key++) {
|
||
|
fns[_key] = arguments[_key];
|
||
|
}
|
||
|
|
||
|
return function (arg) {
|
||
|
return fns.reduce(function (acc, fn) {
|
||
|
return liftPromise(fn, acc);
|
||
|
}, arg);
|
||
|
};
|
||
|
},
|
||
|
|
||
|
/* Reduces an array */
|
||
|
reduce: function reduce(fn, def) {
|
||
|
return function (arr) {
|
||
|
return arr.reduce(fn, def);
|
||
|
};
|
||
|
},
|
||
|
|
||
|
/* Flattens an array of arrays to an array */
|
||
|
flatten: function flatten(arrData) {
|
||
|
return [].concat.apply([], arrData);
|
||
|
},
|
||
|
|
||
|
/* Deep flattens arrays */
|
||
|
deepFlatten: deepFlatten,
|
||
|
|
||
|
/* Maps a function over an array */
|
||
|
map: function map(fn) {
|
||
|
return function (x) {
|
||
|
return x.map(fn);
|
||
|
};
|
||
|
},
|
||
|
|
||
|
/* Filter an array using provided function */
|
||
|
filter: function filter(fn) {
|
||
|
return function (x) {
|
||
|
return x.filter(fn);
|
||
|
};
|
||
|
},
|
||
|
|
||
|
/* Returns identity */
|
||
|
identity: function identity(x) {
|
||
|
return x;
|
||
|
},
|
||
|
|
||
|
/* Wraps a value in an object with given key */
|
||
|
wrapWith: function wrapWith(x) {
|
||
|
return function (y) {
|
||
|
return _defineProperty({}, x, y);
|
||
|
};
|
||
|
},
|
||
|
|
||
|
/* Unwraps a value from an object with given key */
|
||
|
unwrapFrom: function unwrapFrom(x) {
|
||
|
return function (y) {
|
||
|
return y[x];
|
||
|
};
|
||
|
},
|
||
|
|
||
|
/* Resolves an array of Promises */
|
||
|
promiseAll: function promiseAll(x) {
|
||
|
return Promise.all(x);
|
||
|
},
|
||
|
|
||
|
/* Pass partial arguments and return a function that accepts the rest */
|
||
|
partial: function partial(fn) {
|
||
|
for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
|
||
|
args[_key2 - 1] = arguments[_key2];
|
||
|
}
|
||
|
|
||
|
return function () {
|
||
|
for (var _len3 = arguments.length, rest = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
||
|
rest[_key3] = arguments[_key3];
|
||
|
}
|
||
|
|
||
|
return fn.apply(void 0, args.concat(rest));
|
||
|
};
|
||
|
},
|
||
|
|
||
|
/* Item is in collection */
|
||
|
isIn: function isIn(collection, item) {
|
||
|
return collection.indexOf(item) !== -1;
|
||
|
},
|
||
|
|
||
|
/* Collection contains given path */
|
||
|
containsPath: function containsPath(collection, path) {
|
||
|
return collection.some(function (x) {
|
||
|
return path.match(new RegExp("/".concat(x, "/?$")));
|
||
|
});
|
||
|
},
|
||
|
|
||
|
/* Stringifies object or coerces to string */
|
||
|
stringify: stringify,
|
||
|
|
||
|
/* Tagged Stringify */
|
||
|
taggedStringify: function taggedStringify(strings) {
|
||
|
for (var _len4 = arguments.length, expr = new Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
|
||
|
expr[_key4 - 1] = arguments[_key4];
|
||
|
}
|
||
|
|
||
|
return strings.reduce(function (acc, curr, i) {
|
||
|
return acc + curr + (stringify(expr[i]) || '');
|
||
|
}, '');
|
||
|
},
|
||
|
|
||
|
/* Short circuits with given value on pred. Else calls function */
|
||
|
short: function short(pred, shorter) {
|
||
|
return function (fn) {
|
||
|
return function (value) {
|
||
|
return pred(value) ? shorter(value) : fn(value);
|
||
|
};
|
||
|
};
|
||
|
},
|
||
|
|
||
|
/* Check if object has given property */
|
||
|
hasProp: function hasProp(obj) {
|
||
|
return function (prop) {
|
||
|
return prop in obj;
|
||
|
};
|
||
|
},
|
||
|
|
||
|
/* Fetches last element from list */
|
||
|
last: function last(arr) {
|
||
|
return arr[arr.length - 1];
|
||
|
},
|
||
|
|
||
|
/* Uppercases first letter of word */
|
||
|
upperCaseFirstLetter: function upperCaseFirstLetter(word) {
|
||
|
return word[0].toUpperCase() + word.slice(1);
|
||
|
},
|
||
|
|
||
|
/* Lowercases first letter of word */
|
||
|
lowerCaseFirstLetter: function lowerCaseFirstLetter(word) {
|
||
|
return word[0].toLowerCase() + word.slice(1);
|
||
|
},
|
||
|
|
||
|
/* Creates an array or pushes to an existing one */
|
||
|
arrayOrPush: function arrayOrPush(obj, key, item) {
|
||
|
return Array.isArray(obj[key]) ? obj[key].push(item) : obj[key] = [item];
|
||
|
},
|
||
|
|
||
|
/* Assigns to key or creates a new object */
|
||
|
assignToObject: function assignToObject(obj, path) {
|
||
|
return function (key, value) {
|
||
|
return isObject(obj[path]) ? obj[path][key] = value : obj[path] = _defineProperty({}, key, value);
|
||
|
};
|
||
|
}
|
||
|
};
|