"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); /** * @module object */ /** * Transforms an object into a Map * * @param {Object|Map} object * @return {Map} */ var toMap = function toMap(object) { if (object instanceof Map) { return object; } var map = new Map(); for (var key in object) { map.set(key, object[key]); } return map; }; exports.toMap = toMap; /** * Same as Object.assign, but doesn't override the value if !== undefined * * @param {Object} target * @param {Object} object * @return {Object} target */ var union = function union(target) { Array.from(arguments).slice(1).forEach(function (object) { if (object) { for (var key in object) { if (target[key] === undefined) { target[key] = object[key]; } } } }); return target; }; exports.union = union; /** * Clones an object * * @param {Object} object * @return {Object} target */ var clone = function clone(object) { return Object.assign({}, object); }; exports.clone = clone; /** * Filter an object by the keys * * @param {Object} object * @param {Array} keys * @return {Object} */ var filterKeys = function filterKeys(object, keys) { var filteredObject = {}; keys.forEach(function (k) { filteredObject[k] = object[k]; }); return filteredObject; }; exports.filterKeys = filterKeys; /** * Same a map + join * * @param {Object} object * @param {Array} keys * @return {Object} */ var mapJoin = function mapJoin(object, separator, callback) { if (typeof separator === "function") { callback = separator; separator = ""; } object = exports.map(object, callback); return exports.join(object, separator); }; exports.mapJoin = mapJoin; // Array-like functions var _commonObjectArray = function _commonObjectArray(propertyName, object, callback, thisArg) { if (!thisArg) { thisArg = object; } /*#if DEV*/ if (object[propertyName]) { throw new Error("call " + propertyName + " !"); } /*#/if*/ return Object.keys(object)[propertyName](function (key) { return callback.call(thisArg, object[key], key); }); }; /** * The entries() method returns a new Iterator that contains the key/value pairs for each index in the Object. * * @param {Object|Map} object * @return {Iterator} */ var entries = function entries(object) { var keys = Object.keys(object), i = 0; return Object.freeze({ next: function next() { if (i >= keys.length) { return Object.freeze({ done: true }); } return Object.freeze({ value: [keys[i], object[keys[i++]]], done: false }); } }); }; exports.entries = entries; /** * The filter() method creates a new object with all elements that pass the test implemented by the provided function. * * @param {Object} object * @param {Function} callback * @param {*=} thisArg * @return {Object} */ var filter = function filter(object, callback, thisArg) { var keys = _commonObjectArray.call(null, "filter", object, callback, thisArg); return exports.filterKeys(object, keys); }; exports.filter = filter; /** * The find() method returns a value in the object, * if an element in the object satisfies the provided testing function. Otherwise undefined is returned. * * @param {Object} object * @param {Function} callback * @param {*=} thisArg * @return {*} */ var find = function find(object, callback, thisArg) { var key = exports.findIndex.apply(null, arguments); return key && object[key]; }; exports.find = find; /** * The findIndex() method returns an key in the object, * if an element in the object satisfies the provided testing function. Otherwise undefined is returned. * * @function * @param {Object} object * @param {Function} callback * @param {*=} thisArg * @return {String|undefined} */ var findIndex = _commonObjectArray.bind(null, "find"); exports.findIndex = findIndex; /** * The forEach() method executes a provided function once per object element. * * @function * @param {Object|Map} object * @param {Function} callback * @param {*} thisArg * @return {*} */ var forEach = _commonObjectArray.bind(null, "forEach"); exports.forEach = forEach; /** * The join() method joins all elements of an object into a string. * * @param {Object} object * @param {String} separator * @return {String} */ var join = function join(object, separator) { return Object.keys(object).map(function (key) { return object[key]; }).join(separator); }; exports.join = join; /** * The map() method creates a new object with the results of calling a provided function on every element in this object. * * @param {Object} object * @param {Function} callback * @param {*=} thisArg * @return {*} */ var map = function map(object, callback, thisArg) { var mappedObject = {}; exports.forEach(object, function (value, key) { mappedObject[key] = callback.apply(this, arguments); }); return mappedObject; }; exports.map = map; /** * The reduce() method applies a function against an accumulator * and each value of the object (from left-to-right) has to reduce it to a single value. * * @param {Object} object * @param {Function} callback * @param {*=} initialValue * @return {*} */ var reduce = function reduce(object, callback, initialValue) { return Object.keys(object).reduce(function (previousValue, currentValue, index, array) { return callback(previousValue, object[currentValue], currentValue, object); }, initialValue); }; exports.reduce = reduce; /** * The reduceRight() method applies a function against an accumulator * and each value of the object (from right-to-left) as to reduce it to a single value. * * @param {Object} object * @param {Function} callback * @param {*=} initialValue * @return {*} */ var reduceRight = function reduceRight(object, callback, initialValue) { return Object.keys(object).reduceRight(function (previousValue, currentValue, index, array) { return callback(previousValue, object[currentValue], currentValue, object); }, initialValue); }; exports.reduceRight = reduceRight; /** * The some() method tests whether some element in the object passes the test implemented by the provided function. * * @function * @param {Object} object * @param {Function} callback * @param {*=} thisArg * @return {Boolean} */ var some = _commonObjectArray.bind(null, "some"); exports.some = some; //# sourceMappingURL=object.js.map