From f36fa770c2e26ef1b0939fa44c977d595d029900 Mon Sep 17 00:00:00 2001 From: braks <78412429+bcakmakoglu@users.noreply.github.com> Date: Fri, 2 Feb 2024 16:58:56 +0100 Subject: [PATCH] feat(core,error): add error args to err --- packages/core/src/index.ts | 2 +- packages/core/src/utils/errors.ts | 20 ++++++++++++++------ 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index f45f6dfa..e2c46a41 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -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' diff --git a/packages/core/src/utils/errors.ts b/packages/core/src/utils/errors.ts index 60fa8ceb..84b2562a 100644 --- a/packages/core/src/utils/errors.ts +++ b/packages/core/src/utils/errors.ts @@ -35,15 +35,23 @@ const messages = { [ErrorCode.EDGE_NOT_FOUND]: (id: string) => `Edge not found\nEdge: ${id}`, } as const -export class VueFlowError extends Error { +type ErrorArgs = (typeof messages)[T] extends (...args: any[]) => string + ? Parameters<(typeof messages)[T]> + : never + +export class VueFlowError = ErrorArgs> 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(error: VueFlowError, code: T): error is VueFlowError { + return error.code === code +}