Skip to content

Commit f36fa77

Browse files
committed
feat(core,error): add error args to err
1 parent aaf1069 commit f36fa77

File tree

2 files changed

+15
-7
lines changed

2 files changed

+15
-7
lines changed

packages/core/src/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,6 @@ export { useConnection } from './composables/useConnection'
7373
export { useHandleConnections } from './composables/useHandleConnections'
7474
export { useNodesData } from './composables/useNodesData'
7575

76-
export { VueFlowError, ErrorCode } from './utils/errors'
76+
export { VueFlowError, ErrorCode, isErrorOfType } from './utils/errors'
7777

7878
export * from './types'

packages/core/src/utils/errors.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,23 @@ const messages = {
3535
[ErrorCode.EDGE_NOT_FOUND]: (id: string) => `Edge not found\nEdge: ${id}`,
3636
} as const
3737

38-
export class VueFlowError<T extends ErrorCode = ErrorCode> extends Error {
38+
type ErrorArgs<T extends ErrorCode> = (typeof messages)[T] extends (...args: any[]) => string
39+
? Parameters<(typeof messages)[T]>
40+
: never
41+
42+
export class VueFlowError<T extends ErrorCode = ErrorCode, Args extends ErrorArgs<T> = ErrorArgs<T>> extends Error {
43+
name = 'VueFlowError'
3944
code: T
40-
constructor(
41-
code: T,
42-
...args: (typeof messages)[T] extends (...args: any[]) => string ? Parameters<(typeof messages)[T]> : never
43-
) {
45+
args: Args
46+
47+
constructor(code: T, ...args: Args) {
4448
// @ts-expect-error - TS doesn't know that the message is a key of messages
4549
super(messages[code]?.(...args))
46-
4750
this.code = code
51+
this.args = args
4852
}
4953
}
54+
55+
export function isErrorOfType<T extends ErrorCode>(error: VueFlowError, code: T): error is VueFlowError<T> {
56+
return error.code === code
57+
}

0 commit comments

Comments
 (0)