UNPKG

moltres-utils

Version:
145 lines (119 loc) 3.97 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 _indexEndOffset = _interopRequireDefault(require("./indexEndOffset")); var _isArrayLike = _interopRequireDefault(require("./isArrayLike")); 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, arrayLike) { if (index < arrayLike.length && index >= 0) { return { value: arrayLike[index], index: index, kdx: index, done: false }; } return { done: true }; }; var prevIterAt = function prevIterAt(index, arrayLike) { if (index < arrayLike.length && index >= 0) { return { value: arrayLike[index], index: index, kdx: index, done: false }; } }; /** * Returns iterator for an array like value. * * @function * @since v0.0.11 * @category lang * @param {*} arrayLike The array like value to create an iterator for. * @param {*} index The index to start at. * @return {Iterator} A new iterator for the given array like value * @example * * arrayLikeIterator(['write', 'more']) * //=> { * // next: () => ({ * // value: *, * // done: boolean, * // kdx: integer, * // index: integer * // }), * // previous: () => ({ * // value: *, * // done: boolean, * // kdx: integer, * // index: integer * // }) * // } * arrayLikeIterator('tests') * //=> { * // next: () => ({ * // value: *, * // done: boolean, * // kdx: integer, * // index: integer * // }) * // previous: () => ({ * // value: *, * // done: boolean, * // kdx: integer, * // index: integer * // }) * // } */ var arrayLikeIterator = function arrayLikeIterator(arrayLike) { var index = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; if (!(0, _isArrayLike.default)(arrayLike)) { throw new TypeError("arrayLikeIterator expected arrayLike to be an ArrayLike value. Instead received ".concat((0, _toString.default)(arrayLike))); } if (index === 'END') { index = arrayLike.length; } else if (index === 'START') { index = 0; } index = (0, _indexEndOffset.default)(index, arrayLike.length); return { next: function next() { var iter = iterAt(index, arrayLike); var prev = prevIterAt(index - 1, arrayLike); if (index < arrayLike.length) { index += 1; } return _objectSpread({}, iter, { prev: prev }); }, previous: function previous() { var iter = iterAt(index - 1, arrayLike); var prev = prevIterAt(index, arrayLike); if (index >= 0) { index -= 1; } return _objectSpread({}, iter, { prev: prev }); } }; }; var _default = arrayLikeIterator; exports.default = _default; //# sourceMappingURL=arrayLikeIterator.js.map