UNPKG

codingame-connector

Version:
274 lines (212 loc) 7.78 kB
'use strict'; 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();