foop
Version:
interfaces that describe their intentions.
60 lines (51 loc) • 6.34 kB
JavaScript
/**
* {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/values mozilla-array-values}
* {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries mozilla-array-entries}
* {@link https://github.com/mobxjs/mobx/blob/master/src/utils/iterable.ts mobx-array-to-iteratable}
* {@link https://github.com/leebyron/iterall/ mobx-inspiration-iterall}
* @see {@link mozilla-array-values}
* @see {@link mozilla-array-entries}
* @see {@link mobx-array-to-iteratable}
* @see {@link mobx-inspiration-iterall}
* @memberOf cast
*
* @see Chainable[Symbol.Iterator] much preferred
*
* @TODO `Array.prototype.values ? x => Array.prototype.values.call(x)`
* @TODO examples
* @TODO tests
*/
var ENV_COMPAT = require('../env/compat')
if (ENV_COMPAT) {
var SymbolIterator = require('../symbols/iterator')
var addHiddenFinalProp = require('../util/defineFinal')
// @@iterating
var IS_ITERATING_MARKER = '__$$iterating'
function arrayToIterator(array) {
// returning an array for entries(), values() etc for maps was a mis-interpretation of the specs..,
// yet it is quite convenient to be able to use the response both as array directly and as iterator
// it is suboptimal, but alas...
// invariant(array[IS_ITERATING_MARKER] !== true, 'Illegal state: cannot recycle array as iterator')
addHiddenFinalProp(array, IS_ITERATING_MARKER, true)
var idx = -1
addHiddenFinalProp(array, 'next', function next() {
idx++
return {
done: idx >= this.length,
value: idx < this.length ? this[idx] : undefined,
}
})
return array
}
function declareIterator(prototType, iteratorFactory) {
addHiddenFinalProp(prototType, SymbolIterator, iteratorFactory)
}
// @TODO improve
module.exports = {declareIterator: declareIterator, arrayToIterator: arrayToIterator}
}
else {
var invoke = require('../fp/invoke')
var ArrayEntries = require('../native/arrayEntries')
module.exports = invoke(ArrayEntries, 'call')
}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlUb0l0ZXJhdG9yLmpzIiwic291cmNlcyI6WyJhcnJheVRvSXRlcmF0b3IuanMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB7QGxpbmsgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvQXJyYXkvdmFsdWVzIG1vemlsbGEtYXJyYXktdmFsdWVzfVxuICoge0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0FycmF5L2VudHJpZXMgbW96aWxsYS1hcnJheS1lbnRyaWVzfVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9tb2J4anMvbW9ieC9ibG9iL21hc3Rlci9zcmMvdXRpbHMvaXRlcmFibGUudHMgbW9ieC1hcnJheS10by1pdGVyYXRhYmxlfVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sZWVieXJvbi9pdGVyYWxsLyBtb2J4LWluc3BpcmF0aW9uLWl0ZXJhbGx9XG4gKiBAc2VlIHtAbGluayBtb3ppbGxhLWFycmF5LXZhbHVlc31cbiAqIEBzZWUge0BsaW5rIG1vemlsbGEtYXJyYXktZW50cmllc31cbiAqIEBzZWUge0BsaW5rIG1vYngtYXJyYXktdG8taXRlcmF0YWJsZX1cbiAqIEBzZWUge0BsaW5rIG1vYngtaW5zcGlyYXRpb24taXRlcmFsbH1cbiAqIEBtZW1iZXJPZiBjYXN0XG4gKlxuICogQHNlZSBDaGFpbmFibGVbU3ltYm9sLkl0ZXJhdG9yXSBtdWNoIHByZWZlcnJlZFxuICpcbiAqIEBUT0RPIGBBcnJheS5wcm90b3R5cGUudmFsdWVzID8geCA9PiBBcnJheS5wcm90b3R5cGUudmFsdWVzLmNhbGwoeClgXG4gKiBAVE9ETyBleGFtcGxlc1xuICogQFRPRE8gdGVzdHNcbiAqL1xuXG5jb25zdCBFTlZfQ09NUEFUID0gcmVxdWlyZSgnLi4vZW52L2NvbXBhdCcpXG5cbmlmIChFTlZfQ09NUEFUKSB7XG4gIGNvbnN0IFN5bWJvbEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vc3ltYm9scy9pdGVyYXRvcicpXG4gIGNvbnN0IGFkZEhpZGRlbkZpbmFsUHJvcCA9IHJlcXVpcmUoJy4uL3V0aWwvZGVmaW5lRmluYWwnKVxuXG4gIC8vIEBAaXRlcmF0aW5nXG4gIGNvbnN0IElTX0lURVJBVElOR19NQVJLRVIgPSAnX18kJGl0ZXJhdGluZydcblxuICBmdW5jdGlvbiBhcnJheVRvSXRlcmF0b3IoYXJyYXkpIHtcbiAgICAvLyByZXR1cm5pbmcgYW4gYXJyYXkgZm9yIGVudHJpZXMoKSwgdmFsdWVzKCkgZXRjIGZvciBtYXBzIHdhcyBhIG1pcy1pbnRlcnByZXRhdGlvbiBvZiB0aGUgc3BlY3MuLixcbiAgICAvLyB5ZXQgaXQgaXMgcXVpdGUgY29udmVuaWVudCB0byBiZSBhYmxlIHRvIHVzZSB0aGUgcmVzcG9uc2UgYm90aCBhcyBhcnJheSBkaXJlY3RseSBhbmQgYXMgaXRlcmF0b3JcbiAgICAvLyBpdCBpcyBzdWJvcHRpbWFsLCBidXQgYWxhcy4uLlxuICAgIC8vIGludmFyaWFudChhcnJheVtJU19JVEVSQVRJTkdfTUFSS0VSXSAhPT0gdHJ1ZSwgJ0lsbGVnYWwgc3RhdGU6IGNhbm5vdCByZWN5Y2xlIGFycmF5IGFzIGl0ZXJhdG9yJylcbiAgICBhZGRIaWRkZW5GaW5hbFByb3AoYXJyYXksIElTX0lURVJBVElOR19NQVJLRVIsIHRydWUpXG5cbiAgICBsZXQgaWR4ID0gLTFcbiAgICBhZGRIaWRkZW5GaW5hbFByb3AoYXJyYXksICduZXh0JywgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGlkeCsrXG4gICAgICByZXR1cm4ge1xuICAgICAgICBkb25lOiBpZHggPj0gdGhpcy5sZW5ndGgsXG4gICAgICAgIHZhbHVlOiBpZHggPCB0aGlzLmxlbmd0aCA/IHRoaXNbaWR4XSA6IHVuZGVmaW5lZCxcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBhcnJheVxuICB9XG5cbiAgZnVuY3Rpb24gZGVjbGFyZUl0ZXJhdG9yKHByb3RvdFR5cGUsIGl0ZXJhdG9yRmFjdG9yeSkge1xuICAgIGFkZEhpZGRlbkZpbmFsUHJvcChwcm90b3RUeXBlLCBTeW1ib2xJdGVyYXRvciwgaXRlcmF0b3JGYWN0b3J5KVxuICB9XG5cbiAgLy8gQFRPRE8gaW1wcm92ZVxuICBtb2R1bGUuZXhwb3J0cyA9IHtkZWNsYXJlSXRlcmF0b3IsIGFycmF5VG9JdGVyYXRvcn1cbn1cbmVsc2Uge1xuICBjb25zdCBpbnZva2UgPSByZXF1aXJlKCcuLi9mcC9pbnZva2UnKVxuICBjb25zdCBBcnJheUVudHJpZXMgPSByZXF1aXJlKCcuLi9uYXRpdmUvYXJyYXlFbnRyaWVzJylcblxuICBtb2R1bGUuZXhwb3J0cyA9IGludm9rZShBcnJheUVudHJpZXMsICdjYWxsJylcbn1cbiJdLCJuYW1lcyI6WyJjb25zdCIsImxldCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQUEsR0FBSyxDQUFDLFVBQVUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDOztBQUUzQyxJQUFJLFVBQVUsRUFBRTtFQUNkQSxHQUFLLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQztFQUNyREEsR0FBSyxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQzs7O0VBR3pEQSxHQUFLLENBQUMsbUJBQW1CLEdBQUcsZUFBZTs7RUFFM0MsU0FBUyxlQUFlLENBQUMsS0FBSyxFQUFFOzs7OztJQUs5QixrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxDQUFDOztJQUVwREMsR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFDWixrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsSUFBSSxHQUFHO01BQ2hELEdBQUcsRUFBRTtNQUNMLE9BQU87UUFDTCxJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksQ0FBQyxNQUFNO1FBQ3hCLEtBQUssRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUztPQUNqRDtLQUNGLENBQUM7SUFDRixPQUFPLEtBQUs7R0FDYjs7RUFFRCxTQUFTLGVBQWUsQ0FBQyxVQUFVLEVBQUUsZUFBZSxFQUFFO0lBQ3BELGtCQUFrQixDQUFDLFVBQVUsRUFBRSxjQUFjLEVBQUUsZUFBZSxDQUFDO0dBQ2hFOzs7RUFHRCxNQUFNLENBQUMsT0FBTyxHQUFHLENBQUMsaUJBQUEsZUFBZSxFQUFFLGlCQUFBLGVBQWUsQ0FBQztDQUNwRDtLQUNJO0VBQ0hELEdBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztFQUN0Q0EsR0FBSyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsd0JBQXdCLENBQUM7O0VBRXRELE1BQU0sQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUM7Q0FDOUM7In0=