backendless-coderunner
Version:
Backendless CodeRunner for Node.js
76 lines (66 loc) • 2.07 kB
JavaScript
const argsUtil = require('./args')
/**
* @typedef {Object} ExceptionWrapper
* @property {String} ___jsonclass
* @property {Number} code
* @property {Number} httpStatusCode
* @property {String} exceptionClass
* @property {String} exceptionMessage
*/
/**
* @param {String} requestId
* @param {Object} context
* @param {?Error|ExceptionWrapper|String} err
* @param {*} args
* @returns {Object}
*/
exports.invocationResult = function(requestId, context, err, args) {
return {
___jsonclass : 'com.backendless.coderunner.commons.protocol.InvocationResult',
requestId,
httpResponseStatusCode: context.response && context.response.statusCode,
httpResponseHeaders : context.response && context.response.headers,
httpResponseCookies : context.response && context.response.cookies,
arguments : args,
exception : err && exports.exception(err),
}
}
/**
* @param {*} args
* @returns {Array}
*/
exports.encodeArguments = function(args) {
return args !== undefined ? argsUtil.encode(args) : []
}
/**
* @param {?Error|ExceptionWrapper|String} err
* @returns {Object}
*/
exports.exception = function(err) {
const errCode = typeof err.code === 'number' ? err.code : 0
const httpStatusCode = typeof err.httpStatusCode === 'number' ? err.httpStatusCode : -1
let message = err.exceptionMessage || err.message || err
if (typeof message !== 'string') {
message = JSON.stringify(message)
}
return {
___jsonclass : err.___jsonclass || 'com.backendless.commons.exception.ExceptionWrapper',
code : errCode,
httpStatusCode : httpStatusCode,
exceptionClass : err.exceptionClass || 'java.lang.Exception',
exceptionMessage: message
}
}
/**
* @param {?Error|ExceptionWrapper|String} err
* @param {?*=} result
* @returns {Object}
*/
exports.executionResult = function(err, result) {
return {
___jsonclass: 'com.backendless.servercode.ExecutionResult',
result : result,
exception : err && exports.exception(err)
}
}