docs: function bowerMainFiles(destination, allDone) {
  			async.parallel({
  				map: bowerList('map'),
  				components: bowerList('paths')
  			}, function(err, lists) {
  				// Ensure all manual defined dependencies are contained in an array
  				if (dependencies) {
  					_.map(dependencies, function(value, key) {
  						dependencies[key] = ensureArray(value);
  					});
  				}
  
  				// Exclude devDependencies
  				var devDependencies = lists.map.pkgMeta.devDependencies;
  				if (devDependencies && !includeDev) {
  					excludes = excludes.concat(Object.keys(devDependencies));
  				}
  
  				// Resolve dependency graph to ensure correct order of components when concat them
  				var resolvedDependencies = resolveDependencies(lists.map);
  
  				// List of main files
  				var files = {};
  				var groupStats = {};
  
  				_.each(lists.components, function(component, name) {
  					if (includes.length && _.indexOf(includes, name) === -1) return;
  					if (excludes.length && _.indexOf(excludes, name) !== -1) return;
  
  					var mainFiles = findMainFiles(name, component, lists.map.dependencies[name]);
  					if (mainFiles.length) {
  						if (callback) mainFiles = callback(mainFiles, name);
  
  						var filteredMainFiles = mainFiles.filter(function(file) {
  							return isFileExtension(file, '.' + destination.assetType);
  						});
  						if (grunt.option('verbose')) {
  							groupStats[name]  = filteredMainFiles.map(_.partial(toFileStats, name));
  						}
  
  						files[name] = filteredMainFiles.map(grunt.file.read);
  					}
  					else {
  						// Try to find and concat minispade package: packages/_name_/lib/main.js
  						var pkg = getNpmPackage(name, component);
  						if (pkg) {
  							files[name] = pkg;
  						}
  						else {
  							grunt.log.error('Can’t detect any .' + destination.path + ' on main files for "' +
  								name + '" component. ' +
  								'You should explicitly define it via bower_concat’s mainFiles option. ' +
  								'See Readme for details.'
  								);
  						}
  					}
  				});
  
  				if (grunt.option('verbose')) {
  					logGroupStats(destination.assetType, resolvedDependencies, destination.path, groupStats);
  					grunt.verbose.writeln();
  				}
  
  				// Gather files by respecting the order of resolved dependencies
  				var modules = [];
  				_.each(resolvedDependencies, function(name) {
  					if (files[name]) {
  						modules = modules.concat(files[name]);
  					}
  				});
  
  				allDone(modules);
  			});
  		}