sb-babel-cli
Version:
A smarter babel-cli
124 lines (99 loc) • 4.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _sbFs = require('sb-fs');
var _sbFs2 = _interopRequireDefault(_sbFs);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
var _mkdirp = require('mkdirp');
var _mkdirp2 = _interopRequireDefault(_mkdirp);
var _rimraf = require('rimraf');
var _rimraf2 = _interopRequireDefault(_rimraf);
var _sbPromisify = require('sb-promisify');
var _sbPromisify2 = _interopRequireDefault(_sbPromisify);
var _pMapSeries = require('p-map-series');
var _pMapSeries2 = _interopRequireDefault(_pMapSeries);
var _anymatch = require('anymatch');
var _anymatch2 = _interopRequireDefault(_anymatch);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _asyncToGenerator(fn) { return function () { var gen = fn.apply(this, arguments); return new Promise(function (resolve, reject) { function step(key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { return Promise.resolve(value).then(function (value) { step("next", value); }, function (err) { step("throw", err); }); } } return step("next"); }); }; }
var rimrafAsync = (0, _sbPromisify2.default)(_rimraf2.default);
var mkdirpAsync = (0, _sbPromisify2.default)(_mkdirp2.default);
exports.default = function () {
var _ref = _asyncToGenerator(function* (_ref2) {
var rootDirectory = _ref2.rootDirectory,
sourceDirectory = _ref2.sourceDirectory,
outputDirectory = _ref2.outputDirectory,
ignored = _ref2.ignored,
keepExtraFiles = _ref2.keepExtraFiles,
filesToKeep = _ref2.filesToKeep,
callback = _ref2.callback;
var contents = yield _sbFs2.default.readdir(sourceDirectory);
var outputStats = void 0;
var outputDirectoryExists = false;
try {
outputStats = yield _sbFs2.default.stat(outputDirectory);
} catch (_) {
/* No Op */
}
if (outputStats && !outputStats.isDirectory()) {
yield rimrafAsync(outputDirectory);
outputStats = null;
}
if (outputStats && outputStats.isDirectory()) {
outputDirectoryExists = true;
}
var outputContents = outputStats ? yield _sbFs2.default.readdir(outputDirectory) : [];
if (!keepExtraFiles) {
var whitelist = filesToKeep(contents);
var filesToDelete = outputContents.filter(function (item) {
return !whitelist.includes(item);
}).map(function (item) {
return _path2.default.resolve(outputDirectory, item);
});
yield (0, _pMapSeries2.default)(filesToDelete, function (item) {
return rimrafAsync(item);
});
}
yield (0, _pMapSeries2.default)(contents, function () {
var _ref3 = _asyncToGenerator(function* (fileName) {
var filePath = _path2.default.join(sourceDirectory, fileName);
var stat = yield _sbFs2.default.lstat(filePath);
if (stat.isSymbolicLink()) {
// NOTE: We ignore symlinks
return;
}
if ((0, _anymatch2.default)(ignored, fileName) || (0, _anymatch2.default)(ignored, filePath) || (0, _anymatch2.default)(ignored, _path2.default.relative(rootDirectory, filePath))) {
// NOTE: We ignore ignored files
return;
}
if (stat.isFile()) {
if (!fileName.endsWith('.js')) return;
if (!outputDirectoryExists) {
yield mkdirpAsync(outputDirectory);
outputDirectoryExists = true;
}
yield callback(filePath, _path2.default.join(outputDirectory, fileName), stat);
} else if (stat.isDirectory()) {
yield iterate({
rootDirectory: rootDirectory,
sourceDirectory: _path2.default.join(sourceDirectory, fileName),
outputDirectory: _path2.default.join(outputDirectory, fileName),
ignored: ignored,
keepExtraFiles: keepExtraFiles,
filesToKeep: filesToKeep,
callback: callback
});
}
});
return function (_x2) {
return _ref3.apply(this, arguments);
};
}());
});
function iterate(_x) {
return _ref.apply(this, arguments);
}
return iterate;
}();