UNPKG

paranormal

Version:
489 lines (366 loc) 13.9 kB
'use strict'; exports.__esModule = true; var _promise = require('babel-runtime/core-js/promise'); var _promise2 = _interopRequireDefault(_promise); var _map = require('babel-runtime/core-js/map'); var _map2 = _interopRequireDefault(_map); var _regenerator = require('babel-runtime/regenerator'); var _regenerator2 = _interopRequireDefault(_regenerator); var _getIterator2 = require('babel-runtime/core-js/get-iterator'); var _getIterator3 = _interopRequireDefault(_getIterator2); var _from = require('babel-runtime/core-js/array/from'); var _from2 = _interopRequireDefault(_from); var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _Watcher = require('./Watcher'); var _Watcher2 = _interopRequireDefault(_Watcher); var _Example = require('./Example'); var _Example2 = _interopRequireDefault(_Example); var _App = require('./App'); var _App2 = _interopRequireDefault(_App); var _fs = require('./utils/fs'); var fs = _interopRequireWildcard(_fs); var _constants = require('./utils/constants'); var constants = _interopRequireWildcard(_constants); var _path = require('path'); var _path2 = _interopRequireDefault(_path); var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk); var _parcel = require('./utils/parcel'); var parcel = _interopRequireWildcard(_parcel); var _stripIndent = require('strip-indent'); var _stripIndent2 = _interopRequireDefault(_stripIndent); var _lodash = require('lodash.debounce'); var _lodash2 = _interopRequireDefault(_lodash); require('../types'); 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 Runner = function () { function Runner(opts) { var _this = this; (0, _classCallCheck3.default)(this, Runner); this.update = (0, _lodash2.default)((0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee() { var queue, _iterator, _isArray, _i, _ref2, action; return _regenerator2.default.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: if (!(!_this.ready || _this.updating || !_this.queue.length)) { _context.next = 2; break; } return _context.abrupt('return'); case 2: _this.updating = true; queue = _this.queue.splice(0); _iterator = queue, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : (0, _getIterator3.default)(_iterator); case 5: if (!_isArray) { _context.next = 11; break; } if (!(_i >= _iterator.length)) { _context.next = 8; break; } return _context.abrupt('break', 31); case 8: _ref2 = _iterator[_i++]; _context.next = 15; break; case 11: _i = _iterator.next(); if (!_i.done) { _context.next = 14; break; } return _context.abrupt('break', 31); case 14: _ref2 = _i.value; case 15: action = _ref2; if (!(action.kind === 'add')) { _context.next = 21; break; } _context.next = 19; return _this.addExample(action.filePath); case 19: _context.next = 29; break; case 21: if (!(action.kind === 'remove')) { _context.next = 26; break; } _context.next = 24; return _this.removeExample(action.filePath); case 24: _context.next = 29; break; case 26: if (!(action.kind === 'change')) { _context.next = 29; break; } _context.next = 29; return _this.changeExample(action.filePath); case 29: _context.next = 5; break; case 31: _context.next = 33; return _this.app.build((0, _from2.default)(_this.examples.values())); case 33: _this.updating = false; if (!_this.queue.length) { _context.next = 37; break; } _context.next = 37; return _this.update(); case 37: case 'end': return _context.stop(); } } }, _callee, _this); })), 0); this.onAdd = function (filePath) { if (_this.matches(filePath)) { _this.queue.push({ kind: 'add', filePath }); _this.update(); } }; this.onRemove = function () { var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(filePath) { return _regenerator2.default.wrap(function _callee2$(_context2) { while (1) { switch (_context2.prev = _context2.next) { case 0: if (!_this.matches(filePath)) { _context2.next = 4; break; } _this.queue.push({ kind: 'remove', filePath }); _context2.next = 4; return _this.update(); case 4: case 'end': return _context2.stop(); } } }, _callee2, _this); })); return function (_x) { return _ref3.apply(this, arguments); }; }(); this.onChange = function () { var _ref4 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee3(filePath) { return _regenerator2.default.wrap(function _callee3$(_context3) { while (1) { switch (_context3.prev = _context3.next) { case 0: if (!_this.matches(filePath)) { _context3.next = 4; break; } _this.queue.push({ kind: 'change', filePath }); _context3.next = 4; return _this.update(); case 4: case 'end': return _context3.stop(); } } }, _callee3, _this); })); return function (_x2) { return _ref4.apply(this, arguments); }; }(); this.cwd = opts.cwd; this.dirName = _path2.default.dirname(this.cwd); this.tempDir = fs.tempdir(); this.outDir = _path2.default.join(this.cwd, 'dist'); this.watcher = new _Watcher2.default(); this.examples = new _map2.default(); this.app = new _App2.default({ tempDir: this.tempDir }); this.queue = []; this.updating = false; this.watching = false; this.ready = false; } Runner.prototype.run = function () { var _ref5 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee5(opts) { var _this2 = this; var examplePaths; return _regenerator2.default.wrap(function _callee5$(_context5) { while (1) { switch (_context5.prev = _context5.next) { case 0: if (opts.watch) { this.watching = true; this.watcher.on('add', this.onAdd); this.watcher.on('remove', this.onRemove); this.watcher.on('change', this.onChange); this.watcher.watch(this.cwd); } _context5.next = 3; return fs.findGlobPatterns(this.cwd, this.getExampleGlobPatterns()); case 3: examplePaths = _context5.sent; _context5.next = 6; return _promise2.default.all(examplePaths.map(function () { var _ref6 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee4(examplePath) { return _regenerator2.default.wrap(function _callee4$(_context4) { while (1) { switch (_context4.prev = _context4.next) { case 0: _context4.next = 2; return _this2.addExample(examplePath); case 2: case 'end': return _context4.stop(); } } }, _callee4, _this2); })); return function (_x4) { return _ref6.apply(this, arguments); }; }())); case 6: _context5.next = 8; return this.app.build((0, _from2.default)(this.examples.values())); case 8: this.ready = true; if (!opts.watch) { _context5.next = 16; break; } _context5.next = 12; return this.update(); case 12: _context5.next = 14; return parcel.serve(this.app.indexPath, _path2.default.join(this.cwd, 'dist')); case 14: _context5.next = 18; break; case 16: _context5.next = 18; return parcel.build(this.app.indexPath, _path2.default.join(this.cwd, 'dist')); case 18: case 'end': return _context5.stop(); } } }, _callee5, this); })); function run(_x3) { return _ref5.apply(this, arguments); } return run; }(); Runner.prototype.addExample = function () { var _ref7 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee6(examplePath) { var example; return _regenerator2.default.wrap(function _callee6$(_context6) { while (1) { switch (_context6.prev = _context6.next) { case 0: example = new _Example2.default({ cwd: this.cwd, tempDir: this.tempDir, filePath: examplePath }); if (this.ready) { console.log(_chalk2.default.green(`Example: "${example.title}" (added)`)); } else { console.log(_chalk2.default.cyan(`Example: "${example.title}"`)); } _context6.next = 4; return example.build(); case 4: this.examples.set(examplePath, example); case 5: case 'end': return _context6.stop(); } } }, _callee6, this); })); function addExample(_x5) { return _ref7.apply(this, arguments); } return addExample; }(); Runner.prototype.removeExample = function () { var _ref8 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee7(examplePath) { var example; return _regenerator2.default.wrap(function _callee7$(_context7) { while (1) { switch (_context7.prev = _context7.next) { case 0: example = this.examples.get(examplePath); if (example) { _context7.next = 3; break; } return _context7.abrupt('return'); case 3: console.log(_chalk2.default.red(`Example: "${example.title}" (removed)`)); this.examples.delete(examplePath); _context7.next = 7; return example.delete(); case 7: case 'end': return _context7.stop(); } } }, _callee7, this); })); function removeExample(_x6) { return _ref8.apply(this, arguments); } return removeExample; }(); Runner.prototype.changeExample = function () { var _ref9 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee8(examplePath) { var example; return _regenerator2.default.wrap(function _callee8$(_context8) { while (1) { switch (_context8.prev = _context8.next) { case 0: example = this.examples.get(examplePath); if (example) { _context8.next = 3; break; } return _context8.abrupt('return'); case 3: console.log(_chalk2.default.cyan(`Example: "${example.title}" (changed)`)); case 4: case 'end': return _context8.stop(); } } }, _callee8, this); })); function changeExample(_x7) { return _ref9.apply(this, arguments); } return changeExample; }(); Runner.prototype.matches = function matches(filePath) { return fs.matchesGlobPatterns(this.cwd, filePath, this.getExampleGlobPatterns()); }; Runner.prototype.getExampleGlobPatterns = function getExampleGlobPatterns() { return [constants.DEFAULT_EXAMPLES_GLOB, constants.IGNORE_NODE_MODULES_GLOB, `!${_path2.default.relative(this.cwd, this.outDir)}/**`, `!.cache/**`]; }; return Runner; }(); exports.default = Runner;