basant307/AI_Governance_Project
048
1'use strict';2 3Object.defineProperty(exports, "__esModule", {4 value: true5});6 7var _isArrayLike = require('./internal/isArrayLike.js');8 9var _isArrayLike2 = _interopRequireDefault(_isArrayLike);10 11var _breakLoop = require('./internal/breakLoop.js');12 13var _breakLoop2 = _interopRequireDefault(_breakLoop);14 15var _eachOfLimit = require('./eachOfLimit.js');16 17var _eachOfLimit2 = _interopRequireDefault(_eachOfLimit);18 19var _once = require('./internal/once.js');20 21var _once2 = _interopRequireDefault(_once);22 23var _onlyOnce = require('./internal/onlyOnce.js');24 25var _onlyOnce2 = _interopRequireDefault(_onlyOnce);26 27var _wrapAsync = require('./internal/wrapAsync.js');28 29var _wrapAsync2 = _interopRequireDefault(_wrapAsync);30 31var _awaitify = require('./internal/awaitify.js');32 33var _awaitify2 = _interopRequireDefault(_awaitify);34 35function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }36 37// eachOf implementation optimized for array-likes38function eachOfArrayLike(coll, iteratee, callback) {39 callback = (0, _once2.default)(callback);40 var index = 0,41 completed = 0,42 { length } = coll,43 canceled = false;44 if (length === 0) {45 callback(null);46 }47 48 function iteratorCallback(err, value) {49 if (err === false) {50 canceled = true;51 }52 if (canceled === true) return;53 if (err) {54 callback(err);55 } else if (++completed === length || value === _breakLoop2.default) {56 callback(null);57 }58 }59 60 for (; index < length; index++) {61 iteratee(coll[index], index, (0, _onlyOnce2.default)(iteratorCallback));62 }63}64 65// a generic version of eachOf which can handle array, object, and iterator cases.66function eachOfGeneric(coll, iteratee, callback) {67 return (0, _eachOfLimit2.default)(coll, Infinity, iteratee, callback);68}69 70/**71 * Like [`each`]{@link module:Collections.each}, except that it passes the key (or index) as the second argument72 * to the iteratee.73 *74 * @name eachOf75 * @static76 * @memberOf module:Collections77 * @method78 * @alias forEachOf79 * @category Collection80 * @see [async.each]{@link module:Collections.each}81 * @param {Array|Iterable|AsyncIterable|Object} coll - A collection to iterate over.82 * @param {AsyncFunction} iteratee - A function to apply to each83 * item in `coll`.84 * The `key` is the item's key, or index in the case of an array.85 * Invoked with (item, key, callback).86 * @param {Function} [callback] - A callback which is called when all87 * `iteratee` functions have finished, or an error occurs. Invoked with (err).88 * @returns {Promise} a promise, if a callback is omitted89 * @example90 *91 * // dev.json is a file containing a valid json object config for dev environment92 * // dev.json is a file containing a valid json object config for test environment93 * // prod.json is a file containing a valid json object config for prod environment94 * // invalid.json is a file with a malformed json object95 *96 * let configs = {}; //global variable97 * let validConfigFileMap = {dev: 'dev.json', test: 'test.json', prod: 'prod.json'};98 * let invalidConfigFileMap = {dev: 'dev.json', test: 'test.json', invalid: 'invalid.json'};99 *100 * // asynchronous function that reads a json file and parses the contents as json object101 * function parseFile(file, key, callback) {102 * fs.readFile(file, "utf8", function(err, data) {103 * if (err) return calback(err);104 * try {105 * configs[key] = JSON.parse(data);106 * } catch (e) {107 * return callback(e);108 * }109 * callback();110 * });111 * }112 *113 * // Using callbacks114 * async.forEachOf(validConfigFileMap, parseFile, function (err) {115 * if (err) {116 * console.error(err);117 * } else {118 * console.log(configs);119 * // configs is now a map of JSON data, e.g.120 * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}121 * }122 * });123 *124 * //Error handing125 * async.forEachOf(invalidConfigFileMap, parseFile, function (err) {126 * if (err) {127 * console.error(err);128 * // JSON parse error exception129 * } else {130 * console.log(configs);131 * }132 * });133 *134 * // Using Promises135 * async.forEachOf(validConfigFileMap, parseFile)136 * .then( () => {137 * console.log(configs);138 * // configs is now a map of JSON data, e.g.139 * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}140 * }).catch( err => {141 * console.error(err);142 * });143 *144 * //Error handing145 * async.forEachOf(invalidConfigFileMap, parseFile)146 * .then( () => {147 * console.log(configs);148 * }).catch( err => {149 * console.error(err);150 * // JSON parse error exception151 * });152 *153 * // Using async/await154 * async () => {155 * try {156 * let result = await async.forEachOf(validConfigFileMap, parseFile);157 * console.log(configs);158 * // configs is now a map of JSON data, e.g.159 * // { dev: //parsed dev.json, test: //parsed test.json, prod: //parsed prod.json}160 * }161 * catch (err) {162 * console.log(err);163 * }164 * }165 *166 * //Error handing167 * async () => {168 * try {169 * let result = await async.forEachOf(invalidConfigFileMap, parseFile);170 * console.log(configs);171 * }172 * catch (err) {173 * console.log(err);174 * // JSON parse error exception175 * }176 * }177 *178 */179function eachOf(coll, iteratee, callback) {180 var eachOfImplementation = (0, _isArrayLike2.default)(coll) ? eachOfArrayLike : eachOfGeneric;181 return eachOfImplementation(coll, (0, _wrapAsync2.default)(iteratee), callback);182}183 184exports.default = (0, _awaitify2.default)(eachOf, 3);185module.exports = exports.default;