the-utils
Version:
Set of tools to keep simple things simple
166 lines (133 loc) • 4.96 kB
JavaScript
;
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;