UNPKG

moltres-utils

Version:
140 lines (113 loc) 3.85 kB
"use strict"; 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