feat(core,error): add error args to err
This commit is contained in:
@@ -73,6 +73,6 @@ export { useConnection } from './composables/useConnection'
|
|||||||
export { useHandleConnections } from './composables/useHandleConnections'
|
export { useHandleConnections } from './composables/useHandleConnections'
|
||||||
export { useNodesData } from './composables/useNodesData'
|
export { useNodesData } from './composables/useNodesData'
|
||||||
|
|
||||||
export { VueFlowError, ErrorCode } from './utils/errors'
|
export { VueFlowError, ErrorCode, isErrorOfType } from './utils/errors'
|
||||||
|
|
||||||
export * from './types'
|
export * from './types'
|
||||||
|
|||||||
@@ -35,15 +35,23 @@ const messages = {
|
|||||||
[ErrorCode.EDGE_NOT_FOUND]: (id: string) => `Edge not found\nEdge: ${id}`,
|
[ErrorCode.EDGE_NOT_FOUND]: (id: string) => `Edge not found\nEdge: ${id}`,
|
||||||
} as const
|
} 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
|
code: T
|
||||||
constructor(
|
args: Args
|
||||||
code: T,
|
|
||||||
...args: (typeof messages)[T] extends (...args: any[]) => string ? Parameters<(typeof messages)[T]> : never
|
constructor(code: T, ...args: Args) {
|
||||||
) {
|
|
||||||
// @ts-expect-error - TS doesn't know that the message is a key of messages
|
// @ts-expect-error - TS doesn't know that the message is a key of messages
|
||||||
super(messages[code]?.(...args))
|
super(messages[code]?.(...args))
|
||||||
|
|
||||||
this.code = code
|
this.code = code
|
||||||
|
this.args = args
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function isErrorOfType<T extends ErrorCode>(error: VueFlowError, code: T): error is VueFlowError<T> {
|
||||||
|
return error.code === code
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user