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.
 
 
 

57 lines
1.4 KiB

var _ = require('lodash');
var Emitter = require('events').EventEmitter;
var wrench = require('wrench');
var path = require('path');
var grunt = require('grunt');
var fs = require('fs');
var Copier = function(assets, options, report) {
this.assets = assets;
this.options = options;
this.report = report;
};
Copier.prototype = Object.create(Emitter.prototype);
Copier.prototype.constructor = Copier;
Copier.prototype.copy = function() {
var error;
_(this.assets).each(function(typedAssets, type) {
try {
this.copyAssets(type, typedAssets);
} catch (err) {
error = err;
this.emit('error', err);
return false;
}
}, this);
if (!error) {
this.emit('copied');
}
return this;
};
Copier.prototype.copyAssets = function(type, assets) {
_(assets).each(function(sources, pkg) {
_(sources).each(function(source) {
var destination;
var isFile = fs.statSync(source).isFile();
var destinationDir = path.join(this.options.targetDir, this.options.layout(type, pkg));
grunt.file.mkdir(destinationDir);
if (isFile) {
destination = path.join(destinationDir, path.basename(source));
grunt.file.copy(source, destination);
} else {
destination = destinationDir;
wrench.copyDirSyncRecursive(source, destination);
}
this.report(source, destination, isFile);
}, this);
}, this);
};
module.exports = Copier;