feat(core,error): add error args to err

This commit is contained in:
braks
2024-02-02 16:58:56 +01:00
committed by Braks
parent aaf106938f
commit f36fa770c2
2 changed files with 15 additions and 7 deletions

View File

@@ -73,6 +73,6 @@ export { useConnection } from './composables/useConnection'
export { useHandleConnections } from './composables/useHandleConnections'
export { useNodesData } from './composables/useNodesData'
export { VueFlowError, ErrorCode } from './utils/errors'
export { VueFlowError, ErrorCode, isErrorOfType } from './utils/errors'
export * from './types'

View File

@@ -35,15 +35,23 @@ const messages = {
[ErrorCode.EDGE_NOT_FOUND]: (id: string) => `Edge not found\nEdge: ${id}`,
} as const
export class VueFlowError<T extends ErrorCode = ErrorCode> extends Error {
type ErrorArgs<T extends ErrorCode> = (typeof messages)[T] extends (...args: any[]) => string
? Parameters<(typeof messages)[T]>
: never
export class VueFlowError<T extends ErrorCode = ErrorCode, Args extends ErrorArgs<T> = ErrorArgs<T>> extends Error {
name = 'VueFlowError'
code: T
constructor(
code: T,
...args: (typeof messages)[T] extends (...args: any[]) => string ? Parameters<(typeof messages)[T]> : never
) {
args: Args
constructor(code: T, ...args: Args) {
// @ts-expect-error - TS doesn't know that the message is a key of messages
super(messages[code]?.(...args))
this.code = code
this.args = args
}
}
export function isErrorOfType<T extends ErrorCode>(error: VueFlowError, code: T): error is VueFlowError<T> {
return error.code === code
}