codingame-connector
Version:
An interface for Codingame website
274 lines (212 loc) • 7.78 kB
JavaScript
var _regenerator = require('babel-runtime/regenerator');
var _regenerator2 = _interopRequireDefault(_regenerator);
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _asyncIterator2 = require('babel-runtime/helpers/asyncIterator');
var _asyncIterator3 = _interopRequireDefault(_asyncIterator2);
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _commander = require('commander');
var _commander2 = _interopRequireDefault(_commander);
var _safe = require('colors/safe');
var _safe2 = _interopRequireDefault(_safe);
var _ansiEscapes = require('ansi-escapes');
var _ansiEscapes2 = _interopRequireDefault(_ansiEscapes);
var _configure = require('./configure.js');
var _configure2 = _interopRequireDefault(_configure);
var _utils = require('./utils.js');
var _utils2 = _interopRequireDefault(_utils);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/**
* @file Main entry point of Codingame's Connector
* @author woshilapin <woshilapin@tuziwo.info>
*/
_safe2.default.setTheme({
"success": ['green', 'bold'],
"fail": ['red', 'bold']
});
/**
* Start the watching process of the bundle file
*
* @name watch
* @function
*/
var watch = function () {
var _ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2() {
var bundle, watcher;
return _regenerator2.default.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
_context2.next = 2;
return _configure2.default.get('bundle');
case 2:
bundle = _context2.sent;
watcher = _fs2.default.watch(bundle, {
"persistent": false,
"recursive": false,
"encoding": 'utf8'
});
watcher.on('change', function () {
var _ref2 = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(event) {
var _ref3, _ref4, exercise, tests, language, _bundle, parameters, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, result;
return _regenerator2.default.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
if (!(event === 'change')) {
_context.next = 59;
break;
}
process.stdout.write(_ansiEscapes2.default.clearScreen);
_context.next = 4;
return _promise2.default.all([_configure2.default.get('exercise'), _configure2.default.get('tests'), _configure2.default.get('language'), _configure2.default.get('bundle', 'file')]);
case 4:
_ref3 = _context.sent;
_ref4 = (0, _slicedToArray3.default)(_ref3, 4);
exercise = _ref4[0];
tests = _ref4[1];
language = _ref4[2];
_bundle = _ref4[3];
parameters = {
"exercise": exercise,
"tests": tests,
"language": language,
"bundle": _bundle.data
};
_context.prev = 11;
// ESlint complains about 'for await loops'
// https://github.com/babel/babel-eslint/issues/415
_iteratorNormalCompletion = true;
_didIteratorError = false;
_iteratorError = undefined;
_context.prev = 15;
_iterator = (0, _asyncIterator3.default)(_utils2.default.tests(parameters));
case 17:
_context.next = 19;
return _iterator.next();
case 19:
_step = _context.sent;
_iteratorNormalCompletion = _step.done;
_context.next = 23;
return _step.value;
case 23:
_value = _context.sent;
if (_iteratorNormalCompletion) {
_context.next = 30;
break;
}
result = _value;
// eslint-disable-line semi
console.log('(' + _safe2.default.success('\u2713') + ') test ' + result.test);
case 27:
_iteratorNormalCompletion = true;
_context.next = 17;
break;
case 30:
_context.next = 36;
break;
case 32:
_context.prev = 32;
_context.t0 = _context['catch'](15);
_didIteratorError = true;
_iteratorError = _context.t0;
case 36:
_context.prev = 36;
_context.prev = 37;
if (!(!_iteratorNormalCompletion && _iterator.return)) {
_context.next = 41;
break;
}
_context.next = 41;
return _iterator.return();
case 41:
_context.prev = 41;
if (!_didIteratorError) {
_context.next = 44;
break;
}
throw _iteratorError;
case 44:
return _context.finish(41);
case 45:
return _context.finish(36);
case 46:
console.log();
console.log(_safe2.default.bold('Congratulations!'));
_context.next = 55;
break;
case 50:
_context.prev = 50;
_context.t1 = _context['catch'](11);
console.warn('(' + _safe2.default.fail('\u2717') + ') test ' + _context.t1.test + '\n' + _context.t1.message);
console.log();
console.log(_safe2.default.bold('Fix it and try again!'));
case 55:
_context.prev = 55;
watcher.close();
watch();
return _context.finish(55);
case 59:
case 'end':
return _context.stop();
}
}
}, _callee, this, [[11, 50, 55, 59], [15, 32, 36, 46], [37,, 41, 45]]);
}));
return function (_x) {
return _ref2.apply(this, arguments);
};
}());
case 5:
case 'end':
return _context2.stop();
}
}
}, _callee2, this);
}));
function watch() {
return _ref.apply(this, arguments);
}
return watch;
}();
// Read program options and arguments
var defaultconfiguration = '.codingamerc';
_commander2.default.description('Watch for change on a program and test it against Codingame').option('-c, --configuration <path>', 'Configuration file [default=' + defaultconfiguration + ']', defaultconfiguration).parse(process.argv);
_promise2.default.resolve(_commander2.default)
// Load configuration file
.then(function (commander) {
return _configure2.default.load(commander.configuration, {});
})
// Log in Codingame
.then(function () {
return _utils2.default.login();
}, _utils2.default.kill)
// Launch wathing task
.then((0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3() {
var bundle;
return _regenerator2.default.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
_context3.next = 2;
return _configure2.default.get('bundle');
case 2:
bundle = _context3.sent;
process.stdout.write(_ansiEscapes2.default.clearScreen);
console.log('...watching \'' + bundle + '\'...');
watch();
case 6:
case 'end':
return _context3.stop();
}
}
}, _callee3, this);
})), _utils2.default.kill);
// Hold the process running instead of terminating
process.stdin.resume();
;