| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 | 'use strict';var once = require('once');var helpers = require('./helpers');function mapSeries(values, iterator, extensions, done) {  // Allow for extensions to not be specified  if (typeof extensions === 'function') {    done = extensions;    extensions = {};  }  // Handle no callback case  if (typeof done !== 'function') {    done = helpers.noop;  }  done = once(done);  // Will throw if non-object  var keys = Object.keys(values);  var length = keys.length;  var idx = 0;  // Return the same type as passed in  var results = helpers.initializeResults(values);  var exts = helpers.defaultExtensions(extensions);  var key = keys[idx];  next(key);  function next(key) {    var value = values[key];    var storage = exts.create(value, key) || {};    exts.before(storage);    iterator(value, key, once(handler));    function handler(err, result) {      if (err) {        exts.error(err, storage);        return done(err, results);      }      exts.after(result, storage);      results[key] = result;      if (++idx >= length) {        done(err, results);      } else {        next(keys[idx]);      }    }  }}module.exports = mapSeries;
 |