paranormal
Version:
Phenomenal Code Examples
489 lines (366 loc) • 13.9 kB
JavaScript
'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;