From 4beee0399f3c79f992c5657585feb48c58cf4db9 Mon Sep 17 00:00:00 2001 From: Leons Aleksandrovs Date: Sun, 13 Jul 2025 12:43:43 +0300 Subject: [PATCH] TryCatch and utils --- tryCatch.ts | 32 ++++++++++++++++++++++++++++++++ utils.ts | 17 +++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 tryCatch.ts create mode 100644 utils.ts diff --git a/tryCatch.ts b/tryCatch.ts new file mode 100644 index 0000000..e6a17cb --- /dev/null +++ b/tryCatch.ts @@ -0,0 +1,32 @@ +// Types for the result object with discriminated union +type Success = { + data: T; + error: null; +}; + +type Failure = { + data: null; + error: E; +}; + +type Result = Success | Failure; + +// Main wrapper function +export async function tryCatch(promise: Promise): Promise> { + try { + const data = await promise; + return { data, error: null }; + } catch (error) { + return { data: null, error: error as E }; + } +} + +// function for sync +export function tryCatchSync(callback: () => T): Result { + try { + const data = callback(); + return { data, error: null }; + } catch (error) { + return { data: null, error: error as E }; + } +} diff --git a/utils.ts b/utils.ts new file mode 100644 index 0000000..ae1acef --- /dev/null +++ b/utils.ts @@ -0,0 +1,17 @@ +import { clsx, type ClassValue } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} + +export function normalizeLink(link: string) { + let tmp = link; + + // Remove double slashes + while (tmp.includes("//")) { + tmp = tmp.replaceAll("//", "/"); + } + + return tmp; +}