You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

59 lines
1.7 KiB

var _ = require('lodash');
var Emitter = require('events').EventEmitter;
var path = require('path');
var grunt = require('grunt');
var BowerAssets = function(bower, cwd) {
this.bower = bower;
this.cwd = cwd;
this.config = bower.config.json;
};
BowerAssets.prototype = Object.create(Emitter.prototype);
BowerAssets.prototype.constructor = BowerAssets;
BowerAssets.prototype.get = function() {
var bower = this.bower;
var bowerConfig = grunt.file.readJSON(path.join(this.cwd, this.config));
var exportsOverride = bowerConfig.exportsOverride;
var paths = bower.commands.list({paths: true});
paths.on('data', function(data) {
this.emit('data', this.mergePaths(data, exportsOverride ? exportsOverride : {}));
}.bind(this));
paths.on('error', function(err) {
this.emit('error', err);
}.bind(this));
return this;
};
BowerAssets.prototype.mergePaths = function(allPaths, overrides) {
var bowerAssets = {'__untyped__': {}};
var cwd = this.cwd;
var componentsLocation = this.bower.config.directory;
_(allPaths).each(function(pkgPaths, pkg) {
var pkgOverrides = overrides[pkg];
if (pkgOverrides) {
_(pkgOverrides).each(function(overriddenPaths, assetType) {
bowerAssets[assetType] = bowerAssets[assetType] || {};
var pkgPath = path.join(componentsLocation, pkg);
var basePath = path.join(cwd, pkgPath);
bowerAssets[assetType][pkg] = _(grunt.file.expand({cwd: basePath}, overriddenPaths)).map(function(expandedPath) {
return path.join(pkgPath, expandedPath);
});
});
} else {
if (!_.isArray(pkgPaths)) {
pkgPaths = [ pkgPaths ];
}
bowerAssets['__untyped__'][pkg] = pkgPaths;
}
}, this);
return bowerAssets;
};
module.exports = BowerAssets;