apemanerror
Version:
Error parser for apeman.
62 lines (52 loc) • 1.33 kB
JavaScript
/**
* Error object of apeman
* @class Apemanerror
*/
const argx = require('argx')
const uuid = require('uuid')
const defaults = require('defaults')
const ErrorCodes = require('./error_codes')
/** @lends Apemanerror */
class Apemanerror {
constructor (code, pointer, options) {
let args = argx(arguments)
code = args.shift('string|number')
pointer = args.shift('string') || '.'
options = args.pop('object') || {}
const s = this
let { trigger, context, namespace } = defaults(options, {
trigger: undefined,
context: {},
namespace: '/'
})
let id = uuid.v4()
let name = Apemanerror.nameOfCode(code)
return {
id,
code,
title: name,
detail: `Trigger by ${trigger}, with context: ${JSON.stringify(context)}`,
source: {
pointer: [ '/', String(namespace).replace(/\./g, '/'), pointer ].join('/').replace(/\/+/g, '/').replace(/\/$/, '')
},
meta: { name, trigger, context }
}
}
toJSON () {
const s = this
return Object.assign(s, this)
}
}
Object.assign(Apemanerror, {
nameOfCode (code) {
for (let name of Object.keys(ErrorCodes)) {
let hit = ErrorCodes[ name ] === code
if (hit) {
return name
}
}
return code
}
})
module.exports = Apemanerror