@ama-team/voxengine-sdk
Version:
Bundle of helper functions and classes for VoxEngine scenario scripts
64 lines (61 loc) • 1.77 kB
JavaScript
var DefaultHandlers = [
Object.prototype.toString,
Array.prototype.toString,
Function.prototype.toString,
Error.prototype.toString
]
var Renderer = {
/**
* @param {*} value
* @param {boolean} expanded Whether to return expanded or short representation
* @return {string}
*/
any: function (value, expanded) {
var type = typeof value
switch (type) {
case 'function':
return value.name ? '<Function: ' + value.name + '>' : '<Function>'
case 'undefined':
return '<undefined>'
case 'number':
case 'boolean':
case 'string':
case 'symbol':
return value
default:
// explicitly doing nothing
}
return value instanceof Error ? Renderer.error(value, expanded) : Renderer.object(value, expanded)
},
/**
* @param {Error} value
* @param {boolean} expanded Whether to return expanded or short representation
* @return {string}
*/
error: function (value, expanded) {
if (expanded) {
return [Renderer.error(value, false), 'Stack:', value.stack].join('\r\n')
}
if (DefaultHandlers.indexOf(value.toString) === -1) {
return '<' + value.toString() + '>'
}
return '<' + (value.name || '<unknown error>') + ': ' + (value.message || '<no message>') + '>'
},
/**
* @param {object} value
* @param {boolean} expanded Whether to return expanded or short representation
* @return {string}
*/
object: function (value, expanded) {
if (value === null) {
return '<null>'
}
if (typeof value.toString === 'function' && DefaultHandlers.indexOf(value.toString) === -1 && !expanded) {
return value.toString()
}
return JSON.stringify(value)
}
}
module.exports = {
Renderer: Renderer
}