code: function start(itemList, options, done) {
  
    if (_.isFunction(options)) {
      done = options;
      options = {};
    }
  
    if (!_.isArray(itemList)) {
      itemList = [itemList];
    }
  
    if (options.context || options.cwd) {
      options.cwd = options.context || options.cwd;
      process.chdir(options.cwd);
    }
  
    if (options.verbose) {
      console.log("\nstart aem-clientlib-generator");
      console.log("  working directory: " + process.cwd());
    }
    options.dry && console.log("\nDRY MODE - without write options!");
  
    async.eachSeries(itemList, function (item, processItemDone) {
      processItem(item, options, processItemDone);
    }, done);
  }
docs: Iterate through the given array of clientlib configuration objects and
  process them asynchronously.
  @param {Array<ClientLibItem>} itemList - array of clientlib configuration items
  @param {Object} [options] - global configuration options
  @param {Function} done - to be called if everything is done