codingame-connector
Version:
An interface for Codingame website
106 lines (91 loc) • 2.93 kB
JavaScript
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);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var name = "fail-compile";
/**
* Attempt to parse the body of a successful request to Codingame test API.
* This function will try to map a response for a failed test because the compilation of bundle failed.
*
* @function parse
* @param {Object} body Body of the response
* @returns {Promise<CodingameError>} Reject with a CodingameError if parsing was successful
* @throws {Error} Throw is parsing failed
* @instance
*/
/**
* @file Module 'codingame/parsers/failcompile'
* @author woshilapin <woshilapin@tuziwo.info>
*/
/**
* Parse failed response from Codingame when test found a value different from the compile.
*
* The typical response in this case if of the following form.
* ```json
* {
* "success": {
* "error": {
* message": `SyntaxError: EOL while scanning string literal`,
* "stacktrace": [{
* "location": `ANSWER`,
* "container": `Answer.py`,
* "function": ` not in a function`,
* "line": 26
* }]
* }
* }
* }
* ```
* @module codingame/parsers/failcompile
*/
var parse = function parse(body) {
try {
var _body$error = body["error"],
message = _body$error["message"],
stacktrace = _body$error["stacktrace"];
if (Array.isArray(stacktrace)) {
message += "\n";
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = undefined;
try {
for (var _iterator = (0, _getIterator3.default)(stacktrace), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var st = _step.value;
message += "\t" + st.container + ":" + st.line + ":" + st.function;
}
} catch (err) {
_didIteratorError = true;
_iteratorError = err;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var error = new _error2.default(message);
return _promise2.default.reject(error);
} else {
throw "Stacktrace in the error should be an array";
}
} catch (error) {
var _message = "The body is not of response type '" + name + "'\n";
_message += error.message;
throw new Error(_message);
}
};
exports.default = {
"name": name,
"parse": parse
};
;