ember-cli
Version:
Command line tool for developing ambitious ember.js apps
69 lines (54 loc) • 1.8 kB
JavaScript
var fs = require('fs');
var path = require('path');
var Writer = require('broccoli-writer');
var walkSync = require('walk-sync');
var rimraf = require('rimraf');
var mkdirp = require('mkdirp');
var symlinkOrCopy = require('symlink-or-copy');
Remover.prototype = Object.create(Writer.prototype);
Remover.prototype.constructor = Remover;
function Remover (inputTree, options) {
if (!(this instanceof Remover)) return new Remover(inputTree, options);
options = options || {};
this.inputTree = inputTree;
for (var key in options) {
if (options.hasOwnProperty(key)) {
this[key] = options[key]
}
}
};
Remover.prototype._linkDeeply = function _linkDeeply(source, destination) {
var entries = walkSync(source);
for (var i = 0, l = entries.length; i < l; i++) {
var relativePath = entries[i];
if (relativePath[relativePath.length - 1] === '/') {
mkdirp.sync(destination + '/' + relativePath)
} else {
var linkPath = source + '/' + relativePath;
var stats = fs.lstatSync(linkPath);
if (stats.isSymbolicLink()) {
linkPath = fs.readlinkSync(linkPath);
}
symlinkOrCopy.sync(path.resolve(process.cwd(), linkPath), destination + '/' + relativePath)
}
}
};
Remover.prototype._remove = function (directory, source) {
rimraf.sync(path.join(directory, source));
};
Remover.prototype.write = function (readTree, destDir) {
var self = this
return readTree(this.inputTree).then(function(srcDir) {
self._linkDeeply(srcDir, destDir);
var many = self.files || self.paths;
var single = self.srcFile || self.path;
if (many) {
many.forEach(function(file) {
self._remove(destDir, file);
});
} else {
self._remove(destDir, single);
}
});
};
module.exports = Remover;