res.on('end', function() { try { data = JSON.parse(data); } catch(e) { console.error('Failed to parse data from Github: ' + e); debug.log('data was: ', data); return; } if( is.array(data) && (data.length === 0) ) { return; } debug.log('data = ', data); if(is.obj(data) && is.string(data.message) ) { debug.error('[' + repo + '] Message from server: ', data.message); return; } for (var i = 0; i < data.length; i+=1) { issue = data[i]; if (!(issue.number in obj.reported) || obj.reported[issue.number].updated_at !== issue.updated_at) { debug.log('Reporting issue ' + issue.number.toString()); obj.reported[issue.number] = issue; cb(util.format(obj.format, repo, issue.user.login, issue.title, issue.html_url )); } else { console.warn('Issue ' + issue.number.toString() + ' already reported.'); } } });
}).fail(function route_builder_req_handler_fail(err) { //debug.log('step'); if(err instanceof HTTPError) { res.status(err.code); res.json({ '$type': 'error', '$status': err.code, 'title': ''+err.message, 'content': { 'name': 'HTTPError', 'message': ''+err.message, 'code': err.code, 'stack': (is_production_mode ? undefined : parseStack(err)) } }); return; } if(is_production_mode) { res.status(500); // Internal Server Error res.json({ '$type': 'error', '$status': 500, 'title': 'Internal Server Error', 'content': { 'name': 'APIError', 'message': 'There was an API error.' } }); } else { var tmp = JSON.parse(JSON.stringify(err)); tmp.$type = 'error'; tmp.$status = 500; tmp.title = ''+err; tmp.content = {}; tmp.content.message = ''+err.message; if(err.name) { tmp.content.name = ''+err.name; } if(err.fileName) { tmp.content.fileName = ''+err.fileName; } if(err.lineNumber) { tmp.content.lineNumber = ''+err.lineNumber; } if(err.stack) { try { tmp.content.stack = parseStack(err); } catch(error) { tmp.content.stack = ''+err.stack; } } res.status(500); // Internal Server Error res.json(tmp); } debug.error(err); }).done();
return function error_handler_debuglog_(err, req, res, next) { var prefix = ''; if(req.id) { prefix += '[' + req.id + '] '; } debug.error( ('-- Exception --\n' + (err.stack || (is.obj(err) ? JSON.stringify(err, null, 2) : err)) + '\n----').split('\n').join('\n' + prefix) + '\n' ); if(go_next) { debug.assert(next).is('function'); next(err); } };
}).fail(function(err) { debug.error(err); }).done();
}).fail(function(err) { debug.error(err); process.exit(1); }).done();
function merge_settled_results(results) { //debug.log('step'); var no_reply = false; var body = {}; ARRAY(results).forEach(function merge_settled_results_foreach(result) { //debug.log('step'); //debug.log('result = ', result); debug.assert(result).is('object'); if(result.state === "fulfilled") { // Ignore undefined if(result.value === undefined) { no_reply = true; return; } debug.assert(result.value).is('object'); //debug.log('result.value = ', result.value); ARRAY(Object.keys(result.value)).forEach(function merge_settled_results_foreach_2(key) { //debug.log('step'); // Target does not have property yet if(!body.hasOwnProperty(key)) { //debug.log('result.value['+key+'] = ', result.value[key], ' as ', typeof result.value[key]); body[key] = result.value[key]; //debug.log('merged body['+key+'] = ', body[key], ' as ', typeof body[key]); return; } // Target property is an array if(is.array(result.value[key])) { if(is.array(body[key])) { body[key] = body[key].concat(result.value[key]); } else { body[key] = result.value[key]; } //debug.log('merged body['+key+'] = ', body[key], ' as ', typeof body[key]); return; } // Target property is an object if(is.object(result.value[key])) { //debug.log('body['+key+'] = ', body[key]); //debug.log('result.value['+key+'] = ', result.value[key]); body[key] = merge(body[key], result.value[key]); //debug.log('merged body['+key+'] = ', body[key], ' as ', typeof body[key]); return; } // Target property is string, number, boolean, etc body[key] = result.value[key]; //debug.log('merged body['+key+'] = ', body[key], ' as ', typeof body[key]); }); } else { if(!body.errors) { body.errors = []; } body.errors.push(result.reason); } }); if(body.errors) { if(is_production_mode) { debug.error("There was internal error(s): ", body.errors); throw new TypeError("Internal API Route Error"); } else { if(body.errors.length === 1) { debug.error("There was internal error: ", body.errors); throw body.errors[0]; } else { debug.error("There was internal errors: ", body.errors); throw body; } } } if(no_reply) { return; } return body; }