@lakutata/core
Version:
Lakutata Framework Core
69 lines (64 loc) • 1.61 kB
text/typescript
import pupa = require('pupa')
import {format} from 'util'
export abstract class Exception extends Error {
public abstract district: string
public abstract errno: number | string
public readonly appId: string = process.env.appId ? process.env.appId : 'Unknown'
public readonly appName: string = process.env.appName ? process.env.appName : 'Unknown'
public readonly errMsg: string
public readonly err: string
constructor(errArgs: string[] | string) {
super()
const _errArgs: string[] = Array.isArray(errArgs) ? errArgs : [errArgs]
this.message = (() => {
let errorMessage: string | null = null
try {
const argumentRegExs: RegExp[] = []
for (const errArg of _errArgs) {
argumentRegExs.push(new RegExp(errArg))
}
for (const template of this.templates()) {
const str = pupa(template, _errArgs)
let satisfied: boolean = true
try {
argumentRegExs.forEach(argumentRegEx => {
if (satisfied) {
if (!argumentRegEx.test(str)) satisfied = false
}
})
} catch (e) {
satisfied = false
}
if (satisfied) {
errorMessage = str
break
}
}
} catch (e) {
errorMessage = null
}
if (errorMessage) {
return errorMessage
} else {
return format.apply(format, _errArgs)
}
})()
this.errMsg = this.message
this.err = this.name
}
/**
* 获取错误名称
* @returns {string}
*/
public get name(): string {
return this.constructor.name
}
/**
* 设定错误信息模板
* @returns {string[]}
* @protected
*/
protected templates(): string[] {
return []
}
}