UNPKG

the-utils

Version:

Set of tools to keep simple things simple

166 lines (133 loc) 4.96 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.obj = exports.deepChangeKey = exports.changeKey = exports.createFilter = undefined; var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); var _defineProperty2 = require('babel-runtime/helpers/defineProperty'); var _defineProperty3 = _interopRequireDefault(_defineProperty2); var _extends3 = require('babel-runtime/helpers/extends'); var _extends4 = _interopRequireDefault(_extends3); var _typeof2 = require('babel-runtime/helpers/typeof'); var _typeof3 = _interopRequireDefault(_typeof2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // ========= Object var isObject = function isObject(o) { return (typeof o === 'undefined' ? 'undefined' : (0, _typeof3.default)(o)) === 'object' && o !== null && o !== undefined && Object.prototype.toString.call(o) === '[object Object]'; }; var has = function has(o, property) { return isObject(o) && Object.prototype.hasOwnProperty.call(o, property); }; var get = function get(o, property, defaultValue) { return o !== undefined && has(o, property) ? o[property] : defaultValue; }; var set = function set(o, property, value) { return (0, _extends4.default)({}, o, (0, _defineProperty3.default)({}, property, value)); }; var isEmpty = function isEmpty(o) { return !(isObject(o) && o.constructor === Object && (0, _keys2.default)(o).length > 0); }; var toArray = function toArray(o) { return isObject(o) ? (0, _keys2.default)(o).map(function (t) { return o[t]; }) : []; }; var deep = function deep(obj, props, defaultValue) { // If we have reached an undefined/null property // then stop executing and return the default value. // If no default is provided it will return undefined. if (obj === undefined || obj === null) { return defaultValue; } // If the path array has no more elements, we've reached // the intended property and return its value if (props.length === 0) { return obj; } // Prepare our found property and path array for recursion var foundSoFar = obj[props[0]]; var remainingProps = props.slice(1); return deep(foundSoFar, remainingProps, defaultValue); }; var deepGet = function deepGet(obj, props, defaultValue) { // If we have reached an undefined/null property // then stop executing and return the default value. // If no default is provided it will return undefined. if (obj === undefined || obj === null) { return defaultValue; } // If the path array has no more elements, we've reached // the intended property and return its value if (props.length === 0) { return obj; } // Prepare our found property and path array for recursion var foundSoFar = obj[props[0]]; var remainingProps = props.slice(1); return deepGet(foundSoFar, remainingProps, defaultValue); }; var toArrayFilter = function toArrayFilter(o, r) { return isObject(o) ? (0, _keys2.default)(o).filter(function (t) { return r.test(t); }).map(function (t) { return o[t]; }) : []; }; var filterKeys = function filterKeys(o, r) { return isObject(o) ? (0, _keys2.default)(o).filter(function (t) { return r.test(t); }).reduce(function (n, t) { return set(n, t, o[t]); }, {}) : {}; }; var cast = function cast(fields, props) { var items = isObject(fields) ? (0, _keys2.default)(fields) : []; var item = items.reduce(function (acc, val) { return set(acc, val, get(props, val, fields[val])); }, {}); if (has(props, '_id')) { set(item, '_id', get(props, '_id', 0)); // item['_id'] = get(props, '_id', 0) } return item; }; var createFilter = exports.createFilter = function createFilter(fields, props) { return (0, _keys2.default)(fields).reduce(function (acc, val) { return has(props, val) ? set(acc, val, get(props, val, fields[val])) : acc; }, {}); }; var changeKey = exports.changeKey = function changeKey(o, key, f) { var def = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; return set(o, key, f(get(o, key, def))); }; var deepChangeKey = exports.deepChangeKey = function deepChangeKey(o, key, f) { var def = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : ''; return (0, _keys2.default)(o).reduce(function (a, c) { return set(a, c, changeKey(o[c], key, f, def)); }, {}); }; var toURL = function toURL(o) { return (0, _keys2.default)(o).map(function (k) { return encodeURIComponent(k) + '=' + encodeURIComponent(o[k]); }).join('&'); }; // ========= Exports var obj = exports.obj = { has: has, get: get, set: set, deep: deep, deepGet: deepGet, changeKey: changeKey, deepChangeKey: deepChangeKey, isEmpty: isEmpty, toArray: toArray, toArrayFilter: toArrayFilter, cast: cast, createFilter: createFilter, filterKeys: filterKeys, isObject: isObject, toURL: toURL }; exports.default = obj;