codingame-connector
Version:
An interface for Codingame website
98 lines (75 loc) • 2.74 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _getIterator2 = require('babel-runtime/core-js/get-iterator');
var _getIterator3 = _interopRequireDefault(_getIterator2);
var _promise = require('babel-runtime/core-js/promise');
var _promise2 = _interopRequireDefault(_promise);
var _error = require('./error.js');
var _error2 = _interopRequireDefault(_error);
var _frames = require('./parsers/frames.js');
var _frames2 = _interopRequireDefault(_frames);
var _failcompile = require('./parsers/failcompile.js');
var _failcompile2 = _interopRequireDefault(_failcompile);
var _failexpected = require('./parsers/failexpected.js');
var _failexpected2 = _interopRequireDefault(_failexpected);
var _success = require('./parsers/success.js');
var _success2 = _interopRequireDefault(_success);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var parsers = []; /**
* @file Module 'codingame/parse'
* @author woshilapin <woshilapin@tuziwo.info>
*/
/**
* Parse response coming from Codingame's services
* @module codingame/parse
*/
parsers.push(_frames2.default);
parsers.push(_failcompile2.default);
parsers.push(_failexpected2.default);
parsers.push(_success2.default);
/**
* Parse response coming from tests sent to Codingame website
*
* @name parse
* @function
* @param {Object} response Body of the response
* @returns {Promise<Object|CodingameError>} Resolve if test is a success, reject with a CodingameError if test failed or parsing was impossible
*/
var parse = function parse(response) {
var body = response.success;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = (0, _getIterator3.default)(parsers), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var parser = _step.value;
try {
var promise = parser.parse(body);
return _promise2.default.resolve(promise); // Resume loop if no Error has been thrown
} catch (error) {
continue;
}
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var message = 'Unknown error. Codingame may have changed its API. Please contact \'codingame-connector\' developer.';
var error = new Error(message);
return _promise2.default.reject(error);
};
exports.default = {
"parse": parse
};