| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 | 'use strict';var InternalStateModule = require('../internals/internal-state');var createIteratorConstructor = require('../internals/iterator-create-constructor');var createIterResultObject = require('../internals/create-iter-result-object');var isNullOrUndefined = require('../internals/is-null-or-undefined');var isObject = require('../internals/is-object');var defineBuiltInAccessor = require('../internals/define-built-in-accessor');var DESCRIPTORS = require('../internals/descriptors');var INCORRECT_RANGE = 'Incorrect Iterator.range arguments';var NUMERIC_RANGE_ITERATOR = 'NumericRangeIterator';var setInternalState = InternalStateModule.set;var getInternalState = InternalStateModule.getterFor(NUMERIC_RANGE_ITERATOR);var $RangeError = RangeError;var $TypeError = TypeError;var $RangeIterator = createIteratorConstructor(function NumericRangeIterator(start, end, option, type, zero, one) {  // TODO: Drop the first `typeof` check after removing legacy methods in `core-js@4`  if (typeof start != type || (end !== Infinity && end !== -Infinity && typeof end != type)) {    throw new $TypeError(INCORRECT_RANGE);  }  if (start === Infinity || start === -Infinity) {    throw new $RangeError(INCORRECT_RANGE);  }  var ifIncrease = end > start;  var inclusiveEnd = false;  var step;  if (option === undefined) {    step = undefined;  } else if (isObject(option)) {    step = option.step;    inclusiveEnd = !!option.inclusive;  } else if (typeof option == type) {    step = option;  } else {    throw new $TypeError(INCORRECT_RANGE);  }  if (isNullOrUndefined(step)) {    step = ifIncrease ? one : -one;  }  if (typeof step != type) {    throw new $TypeError(INCORRECT_RANGE);  }  if (step === Infinity || step === -Infinity || (step === zero && start !== end)) {    throw new $RangeError(INCORRECT_RANGE);  }  // eslint-disable-next-line no-self-compare -- NaN check  var hitsEnd = start !== start || end !== end || step !== step || (end > start) !== (step > zero);  setInternalState(this, {    type: NUMERIC_RANGE_ITERATOR,    start: start,    end: end,    step: step,    inclusive: inclusiveEnd,    hitsEnd: hitsEnd,    currentCount: zero,    zero: zero  });  if (!DESCRIPTORS) {    this.start = start;    this.end = end;    this.step = step;    this.inclusive = inclusiveEnd;  }}, NUMERIC_RANGE_ITERATOR, function next() {  var state = getInternalState(this);  if (state.hitsEnd) return createIterResultObject(undefined, true);  var start = state.start;  var end = state.end;  var step = state.step;  var currentYieldingValue = start + (step * state.currentCount++);  if (currentYieldingValue === end) state.hitsEnd = true;  var inclusiveEnd = state.inclusive;  var endCondition;  if (end > start) {    endCondition = inclusiveEnd ? currentYieldingValue > end : currentYieldingValue >= end;  } else {    endCondition = inclusiveEnd ? end > currentYieldingValue : end >= currentYieldingValue;  }  if (endCondition) {    state.hitsEnd = true;    return createIterResultObject(undefined, true);  } return createIterResultObject(currentYieldingValue, false);});var addGetter = function (key) {  defineBuiltInAccessor($RangeIterator.prototype, key, {    get: function () {      return getInternalState(this)[key];    },    set: function () { /* empty */ },    configurable: true,    enumerable: false  });};if (DESCRIPTORS) {  addGetter('start');  addGetter('end');  addGetter('inclusive');  addGetter('step');}module.exports = $RangeIterator;
 |