moltres-utils
Version:
Utils for Moltres apps
145 lines (119 loc) • 3.97 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 _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
;