basant307/AI_Governance_Project
045
1/**2 * Obliterator Iter Function3 * ==========================4 *5 * Function coercing values to an iterator. It can be quite useful when needing6 * to handle iterables and iterators the same way.7 */8var Iterator = require('./iterator.js');9var support = require('./support.js');10 11var ARRAY_BUFFER_SUPPORT = support.ARRAY_BUFFER_SUPPORT;12var SYMBOL_SUPPORT = support.SYMBOL_SUPPORT;13 14function iterOrNull(target) {15 // Indexed sequence16 if (17 typeof target === 'string' ||18 Array.isArray(target) ||19 (ARRAY_BUFFER_SUPPORT && ArrayBuffer.isView(target))20 )21 return Iterator.fromSequence(target);22 23 // Invalid value24 if (typeof target !== 'object' || target === null) return null;25 26 // Iterable27 if (SYMBOL_SUPPORT && typeof target[Symbol.iterator] === 'function')28 return target[Symbol.iterator]();29 30 // Iterator duck-typing31 if (typeof target.next === 'function') return target;32 33 // Invalid object34 return null;35}36 37module.exports = function iter(target) {38 var iterator = iterOrNull(target);39 40 if (!iterator)41 throw new Error(42 'obliterator: target is not iterable nor a valid iterator.'43 );44 45 return iterator;46};47 