moltres-utils
Version:
Utils for Moltres apps
140 lines (113 loc) • 3.85 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("core-js/modules/es6.array.for-each");
require("core-js/modules/es6.array.filter");
require("core-js/modules/web.dom.iterable");
require("core-js/modules/es6.array.iterator");
require("core-js/modules/es6.object.keys");
require("core-js/modules/es6.object.define-property");
var _isObject = _interopRequireDefault(require("./isObject"));
var _reflectOwnKeys = _interopRequireDefault(require("./reflectOwnKeys"));
var _toString = _interopRequireDefault(require("./toString"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
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; }
var iterAt = function iterAt(index, keys, object) {
if (index < keys.length && index >= 0) {
var key = keys[index];
return {
value: object[key],
key: key,
kdx: key,
done: false
};
}
return {
done: true
};
};
var prevIterAt = function prevIterAt(index, keys, object) {
if (index < keys.length && index >= 0) {
var key = keys[index];
return {
value: object[key],
key: key,
kdx: key,
done: false
};
}
};
/**
* Returns iterator for an object's keys and values.
*
* Note, iterates over object's own keys and symbols
*
* @function
* @since v0.0.11
* @category lang
* @param {*} object The array object to create an iterator for.
* @return {Iterator} A new iterator for the given object's keys and values
* @example
*
* objectIterator({
* write: 'more',
* tests: 'asap',
* [Symbol('like')]: 'now'
* })
* //=> {
* // next: () => ({
* // value: *,
* // done: boolean,
* // kdx: string,
* // key: string
* // })
* // }
*
* iter.next()
* //=> { value: 'more', key: 'write', kdx: 'write', done: false }
* iter.next()
* //=> { value: 'asap', key: 'tests', kdx: 'tests', done: false }
* iter.next()
* //=> { value: 'now', key: Symbol('like'), kdx: Symbol('like'), done: false }
* iter.next()
* //=> { done: true }
*/
var objectIterator = function objectIterator(object) {
var start = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'START';
if (!(0, _isObject.default)(object)) {
throw new TypeError("objectIterator expected object to be an Object. Instead received ".concat((0, _toString.default)(object)));
}
var keys = (0, _reflectOwnKeys.default)(object);
var index = 0;
if (start === 'END') {
index = keys.length;
}
return {
next: function next() {
var iter = iterAt(index, keys, object);
var prev = prevIterAt(index - 1, keys, object);
if (index < keys.length) {
index += 1;
}
return _objectSpread({}, iter, {
prev: prev
});
},
previous: function previous() {
var iter = iterAt(index - 1, keys, object);
var prev = prevIterAt(index, keys, object);
if (index >= 0) {
index -= 1;
}
return _objectSpread({}, iter, {
prev: prev
});
}
};
};
var _default = objectIterator;
exports.default = _default;
//# sourceMappingURL=objectIterator.js.map
;