motion
Version:
motion - moving development forward
237 lines (175 loc) • 6.37 kB
JavaScript
exports.__esModule = true;
exports.init = init;
exports.banner = banner;
exports.resume = resume;
exports.stop = stop;
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) { var callNext = step.bind(null, 'next'); var callThrow = step.bind(null, 'throw'); 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 { Promise.resolve(value).then(callNext, callThrow); } } callNext(); }); }; }
var _chalk = require('chalk');
var _chalk2 = _interopRequireDefault(_chalk);
var _server = require('./server');
var _server2 = _interopRequireDefault(_server);
var _shutdown = require('./shutdown');
var _shutdown2 = _interopRequireDefault(_shutdown);
var _open = require('open');
var _open2 = _interopRequireDefault(_open);
var _keypress = require('keypress');
var _keypress2 = _interopRequireDefault(_keypress);
var _libRequires = require('./lib/requires');
var _libFns = require('./lib/fns');
var _libLog = require('./lib/log');
var _libLog2 = _interopRequireDefault(_libLog);
var _libOpenInBrowser = require('./lib/openInBrowser');
var _libOpenInBrowser2 = _interopRequireDefault(_libOpenInBrowser);
var _libHandleError = require('./lib/handleError');
var _libHandleError2 = _interopRequireDefault(_libHandleError);
var _libEditor = require('./lib/editor');
var _libEditor2 = _interopRequireDefault(_libEditor);
var _opts = require('./opts');
var _opts2 = _interopRequireDefault(_opts);
var _bundler = require('./bundler');
var _bundler2 = _interopRequireDefault(_bundler);
var _builder = require('./builder');
var _builder2 = _interopRequireDefault(_builder);
var _startup = require('./startup');
var _cache = require('./cache');
var _cache2 = _interopRequireDefault(_cache);
var proc = process; // cache for keypress
var stopped = false;
function init() {
if (!proc.stdin.setRawMode) return;
start();
banner();
}
function promptItem(message, color) {
return '' + message.slice(0, 4) + _chalk2['default'].bold(message[4]) + message.slice(5);
}
var starts = function starts(a, b) {
return a % b == 0;
};
function promptLayout(messages, _ref) {
var _ref$perLine = _ref.perLine;
var perLine = _ref$perLine === undefined ? 2 : _ref$perLine;
var _ref$prefix = _ref.prefix;
var prefix = _ref$prefix === undefined ? ' › ' : _ref$prefix;
var _ref$pad = _ref.pad;
var pad = _ref$pad === undefined ? 12 : _ref$pad;
var item = function item(str, color) {
return promptItem(_libFns._.padEnd('' + prefix + str, pad));
};
return messages.map(function (message, i) {
return starts(i, perLine) ? _chalk2['default'].yellow('\n' + item(message)) : _chalk2['default'].dim(item(message));
}).join('');
}
function banner() {
var newLine = "\n";
var userEditor = process.env.VISUAL || process.env.EDITOR;
print(('\n http://' + _server2['default'].url()).green);
var messages = ['Open', 'Verbose', 'Build', 'Editor', 'Rebundle'];
if (_opts2['default']('build') && _opts2['default']('watch')) messages.push('Upload');
// print(' Shortcuts')
print(promptLayout(messages, { perLine: 3 }));
print();
resume();
}
function start() {
var OPTS = _opts2['default']();
if (!proc.stdin.isTTY || OPTS.build && !OPTS.watch) return;
_keypress2['default'](proc.stdin);
var building = false;
// listen for the "keypress" event
proc.stdin.on('keypress', _asyncToGenerator(function* (ch, key) {
if (!key) return;
if (stopped) return;
_libLog2['default']('keypress', key.name);
try {
switch (key.name) {
case 'return':
// show banner again
banner();
break;
case 'b':
yield _builder2['default'].build();
break;
case 'o':
// open browser
_libOpenInBrowser2['default'](true);
break;
case 'e':
// open editor
try {
_libEditor2['default']('.');
} catch (e) {
print('Error running your editor, make sure your shell EDITOR variable is set');
}
break;
case 'r':
// bundler
print(' Bundling internals / npm packages...'.dim);
yield _bundler2['default'].all({ force: true });
print(' Bundled!\n'.green.bold);
break;
case 'v':
// verbose logging
_opts2['default'].set('debug', !_opts2['default']('debug'));
_libLog2['default'].setLogging();
print(_opts2['default']('debug') ? 'Set to log verbose'.yellow : 'Set to log quiet'.yellow, "\n");
break;
case 'u':
// upload
if (building) return;
if (_opts2['default']('run')) {
building = true;
print('\n Building for production...');
yield _startup.build({ once: true });
building = false;
}
if (_opts2['default']('build') && _opts2['default']('watch')) {
var Surge = _surge();
var _surge = Surge({ platform: 'motion.love', input: proc.stdin, output: proc.stdout });
print('\n Publishing to surge...');
stop();
proc.stdout.isTTY = false;
_surge.publish({
postPublish: function postPublish() {
print('🚀🚀🚀🚀');
resume();
}
})({});
proc.stdout.isTTY = true;
}
break;
case 'd':
print("---------opts---------");
_opts2['default'].debug();
print("\n---------cache---------");
_cache2['default'].debug();
break;
}
} catch (e) {
_libHandleError2['default'](e);
}
// exit
if (key.ctrl && key.name == 'c') {
_shutdown2['default'].now();
}
}));
resume();
}
function resume() {
// listen for keys
proc.stdin.setRawMode(true);
proc.stdin.resume();
stopped = false;
}
function stop() {
proc.stdin.setRawMode(false);
proc.stdin.pause();
stopped = true;
}
exports['default'] = {
init: init,
banner: banner,
resume: resume,
stop: stop
};