directory-helpers
Version:
A collection of helper methods for working with directories
559 lines (452 loc) • 16.9 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = undefined;
var _typeof2 = require('babel-runtime/helpers/typeof');
var _typeof3 = _interopRequireDefault(_typeof2);
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _entries = require('babel-runtime/core-js/object/entries');
var _entries2 = _interopRequireDefault(_entries);
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');
var _classCallCheck3 = _interopRequireDefault(_classCallCheck2);
var _createClass2 = require('babel-runtime/helpers/createClass');
var _createClass3 = _interopRequireDefault(_createClass2);
var _path2 = require('path');
var _path = _interopRequireWildcard(_path2);
var _nodePromiseEs = require('node-promise-es6');
var _fsExtraPromiseEs = require('fs-extra-promise-es6');
var fse = _interopRequireWildcard(_fsExtraPromiseEs);
var _esnextAsync = require('esnext-async');
var _dedent = require('dedent');
var _dedent2 = _interopRequireDefault(_dedent);
var _resolve = require('resolve');
var _resolve2 = _interopRequireDefault(_resolve);
var _glob2 = require('glob');
var _glob3 = _interopRequireDefault(_glob2);
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } }
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var _default = function () {
function _default(basePath) {
(0, _classCallCheck3.default)(this, _default);
this.basePath = _path.resolve(basePath);
}
(0, _createClass3.default)(_default, [{
key: 'contains',
value: function contains(filePath) {
return !_path.relative(this.path(), this.path(filePath)).includes('..');
}
}, {
key: 'create',
value: function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee() {
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.next = 2;
return fse.mkdirs(this.basePath);
case 2:
case 'end':
return _context.stop();
}
}
}, _callee, this);
}));
function create() {
return _ref.apply(this, arguments);
}
return create;
}()
}, {
key: 'exec',
value: function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(command, params) {
var _ref3, stdout, stderr;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.prev = 0;
_context2.next = 3;
return _nodePromiseEs.childProcess.execFile(command, params, {
cwd: this.path()
});
case 3:
_ref3 = _context2.sent;
stdout = _ref3.stdout;
return _context2.abrupt('return', stdout.trim());
case 8:
_context2.prev = 8;
_context2.t0 = _context2['catch'](0);
stderr = _context2.t0.stderr;
throw new Error(stderr.trim());
case 12:
case 'end':
return _context2.stop();
}
}
}, _callee2, this, [[0, 8]]);
}));
function exec(_x, _x2) {
return _ref2.apply(this, arguments);
}
return exec;
}()
}, {
key: 'execJs',
value: function execJs(code) {
var _this = this;
return new _promise2.default(function (resolve, reject) {
var child = _nodePromiseEs.childProcess.spawn('dist-es6-run', { cwd: _this.path() });
child.stdin.write(code);
child.stdin.end();
var stdoutOutput = '';
child.stdout.on('data', function (output) {
stdoutOutput += output;
});
var stderrOutput = '';
child.stderr.on('data', function (output) {
stderrOutput += output;
});
child.on('close', function (exitCode) {
if (exitCode === 0) {
resolve(stdoutOutput.trim());
} else {
reject(stderrOutput.trim());
}
});
});
}
}, {
key: 'glob',
value: function () {
var _ref5 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(pattern, options) {
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return (0, _nodePromiseEs.promisify)(_glob3.default)(pattern, (0, _assign2.default)({}, options, {
cwd: this.path()
}));
case 2:
return _context3.abrupt('return', _context3.sent);
case 3:
case 'end':
return _context3.stop();
}
}
}, _callee3, this);
}));
function glob(_x3, _x4) {
return _ref5.apply(this, arguments);
}
return glob;
}()
}, {
key: 'path',
value: function path() {
for (var _len = arguments.length, components = Array(_len), _key = 0; _key < _len; _key++) {
components[_key] = arguments[_key];
}
return _path.resolve.apply(_path, [this.basePath].concat(components));
}
}, {
key: 'read',
value: function () {
var _ref6 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(filePath) {
var contents;
return _regenerator2.default.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_context4.next = 2;
return _nodePromiseEs.fs.readFile(this.path(filePath), 'utf8');
case 2:
contents = _context4.sent;
_context4.prev = 3;
return _context4.abrupt('return', JSON.parse(contents));
case 7:
_context4.prev = 7;
_context4.t0 = _context4['catch'](3);
return _context4.abrupt('return', contents);
case 10:
case 'end':
return _context4.stop();
}
}
}, _callee4, this, [[3, 7]]);
}));
function read(_x5) {
return _ref6.apply(this, arguments);
}
return read;
}()
}, {
key: 'remove',
value: function () {
var _ref7 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5() {
var _args5 = arguments;
return _regenerator2.default.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
_context5.next = 2;
return fse.remove(this.path.apply(this, _args5));
case 2:
case 'end':
return _context5.stop();
}
}
}, _callee5, this);
}));
function remove(_x6) {
return _ref7.apply(this, arguments);
}
return remove;
}()
}, {
key: 'resolve',
value: function () {
var _ref8 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6(request) {
var _this2 = this;
return _regenerator2.default.wrap(function _callee6$(_context6) {
while (1) {
switch (_context6.prev = _context6.next) {
case 0:
_context6.next = 2;
return new _promise2.default(function (resolve, reject) {
(0, _resolve2.default)(request, { basedir: _this2.path() }, function (error, result) {
if (error) {
reject(error);
} else {
resolve(result);
}
});
});
case 2:
return _context6.abrupt('return', _context6.sent);
case 3:
case 'end':
return _context6.stop();
}
}
}, _callee6, this);
}));
function resolve(_x7) {
return _ref8.apply(this, arguments);
}
return resolve;
}()
}, {
key: 'spawn',
value: function spawn(command) {
var params = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var child = _nodePromiseEs.childProcess.spawn('setsid', [command].concat((0, _toConsumableArray3.default)(params)), { cwd: this.path() });
var observable = new _esnextAsync.AwaitableObservable(function (observer) {
child.stdout.on('data', function (data) {
observer.next(data.toString());
});
child.stderr.on('data', function (data) {
observer.next(data.toString());
});
});
observable.process = child;
return observable;
}
}, {
key: 'start',
value: function () {
var _ref9 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee7() {
var waitPattern = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : /^/;
return _regenerator2.default.wrap(function _callee7$(_context7) {
while (1) {
switch (_context7.prev = _context7.next) {
case 0:
this.server = this.spawn('npm', ['start']);
this.server.forEach(function (output) {
process.stderr.write(output);
});
_context7.next = 4;
return this.server.filter(function (output) {
return output.match(waitPattern);
});
case 4:
case 'end':
return _context7.stop();
}
}
}, _callee7, this);
}));
function start(_x9) {
return _ref9.apply(this, arguments);
}
return start;
}()
}, {
key: 'stat',
value: function () {
var _ref10 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee8(filePath) {
return _regenerator2.default.wrap(function _callee8$(_context8) {
while (1) {
switch (_context8.prev = _context8.next) {
case 0:
_context8.next = 2;
return _nodePromiseEs.fs.stat(this.path(filePath));
case 2:
return _context8.abrupt('return', _context8.sent);
case 3:
case 'end':
return _context8.stop();
}
}
}, _callee8, this);
}));
function stat(_x11) {
return _ref10.apply(this, arguments);
}
return stat;
}()
}, {
key: 'stop',
value: function () {
var _ref11 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee9() {
var _this3 = this;
return _regenerator2.default.wrap(function _callee9$(_context9) {
while (1) {
switch (_context9.prev = _context9.next) {
case 0:
_context9.next = 2;
return new _promise2.default(function (resolve) {
_this3.server.process.on('close', resolve);
process.kill(-_this3.server.process.pid);
});
case 2:
case 'end':
return _context9.stop();
}
}
}, _callee9, this);
}));
function stop() {
return _ref11.apply(this, arguments);
}
return stop;
}()
}, {
key: 'symlink',
value: function () {
var _ref12 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee10(source, destination) {
return _regenerator2.default.wrap(function _callee10$(_context10) {
while (1) {
switch (_context10.prev = _context10.next) {
case 0:
_context10.next = 2;
return fse.ensureSymlink(this.path(source), this.path(destination));
case 2:
case 'end':
return _context10.stop();
}
}
}, _callee10, this);
}));
function symlink(_x12, _x13) {
return _ref12.apply(this, arguments);
}
return symlink;
}()
}, {
key: 'write',
value: function () {
var _ref13 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee11(files) {
var _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step$value, filePath, fileContents, absoluteFilePath;
return _regenerator2.default.wrap(function _callee11$(_context11) {
while (1) {
switch (_context11.prev = _context11.next) {
case 0:
_iteratorNormalCompletion = true;
_didIteratorError = false;
_iteratorError = undefined;
_context11.prev = 3;
_iterator = (0, _getIterator3.default)((0, _entries2.default)(files));
case 5:
if (_iteratorNormalCompletion = (_step = _iterator.next()).done) {
_context11.next = 20;
break;
}
_step$value = (0, _slicedToArray3.default)(_step.value, 2), filePath = _step$value[0], fileContents = _step$value[1];
absoluteFilePath = this.path(filePath);
_context11.next = 10;
return fse.ensureFile(absoluteFilePath);
case 10:
if (!((typeof fileContents === 'undefined' ? 'undefined' : (0, _typeof3.default)(fileContents)) === 'object')) {
_context11.next = 15;
break;
}
_context11.next = 13;
return fse.writeJson(absoluteFilePath, fileContents);
case 13:
_context11.next = 17;
break;
case 15:
_context11.next = 17;
return _nodePromiseEs.fs.writeFile(absoluteFilePath, (0, _dedent2.default)(fileContents) + '\n');
case 17:
_iteratorNormalCompletion = true;
_context11.next = 5;
break;
case 20:
_context11.next = 26;
break;
case 22:
_context11.prev = 22;
_context11.t0 = _context11['catch'](3);
_didIteratorError = true;
_iteratorError = _context11.t0;
case 26:
_context11.prev = 26;
_context11.prev = 27;
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
case 29:
_context11.prev = 29;
if (!_didIteratorError) {
_context11.next = 32;
break;
}
throw _iteratorError;
case 32:
return _context11.finish(29);
case 33:
return _context11.finish(26);
case 34:
case 'end':
return _context11.stop();
}
}
}, _callee11, this, [[3, 22, 26, 34], [27,, 29, 33]]);
}));
function write(_x14) {
return _ref13.apply(this, arguments);
}
return write;
}()
}]);
return _default;
}();
exports.default = _default;