Current usage of errcode is not intuitive. example: ```ts throw new errcode(new Error('error in foo'), ERR_FOO, { foo: bar }) ``` Prefer an implementation like: ```ts export class CodeError<T extends Record<string, any>> extends Error { code: string props: T constructor(message: string, code: string, props?: T) { super(message) this.code = code this.props = props ?? {} as T } } ``` with usage then like: ```ts throw new CodeError('error in foo', ERR_FOO, { foo: bar }) ```