ember-cli
Version:
Command line tool for developing ambitious ember.js apps
58 lines (47 loc) • 1.65 kB
JavaScript
var fs = require('fs');
var path = require('path');
var mkdirp = require('mkdirp');
var rimraf = require('rimraf');
var Writer = require('broccoli-writer');
var symlinkOrCopySync = require('symlink-or-copy').sync;
function Mover (inputTree, options) {
if (!(this instanceof Mover)) return new Mover(inputTree, options);
options = options || {};
this.inputTree = inputTree;
for (var key in options) {
if (options.hasOwnProperty(key)) {
this[key] = options[key]
}
}
};
Mover.prototype.constructor = Mover;
Mover.prototype = Object.create(Writer.prototype);
Mover.prototype._copyFile = function (sourceDirectory, destinationDirectory, source, destination) {
var sourcePath = path.join(sourceDirectory, source);
var destinationPath = path.join(destinationDirectory, destination);
var destinationDirname = path.dirname(destinationPath);
rimraf.sync(destinationPath);
if (!fs.existsSync(destinationDirname)) {
mkdirp.sync(destinationDirname);
}
symlinkOrCopySync(sourcePath, destinationPath);
};
Mover.prototype.write = function (readTree, destDir) {
var self = this;
return readTree(this.inputTree).then(function(srcDir) {
if (Array.isArray(self.files)) {
self.files.forEach(function(file) {
self._copyFile(srcDir, destDir, file.srcFile, file.destFile);
});
} else if (self.files) {
for (var key in self.files) {
if (self.files.hasOwnProperty(key)) {
self._copyFile(srcDir, destDir, key, self.files[key]);
}
}
} else {
self._copyFile(srcDir, destDir, self.srcFile, self.destFile);
}
});
};
module.exports = Mover;