UNPKG

@ocubist/error-alchemy

Version:

A powerful Node.js error-handling-framework with custom error types for easy debugging, enhanced error management, strong zod-support and useful quality-of-life-functionality for asserting and validating values.

49 lines (42 loc) 1.44 kB
import { SynthesizedError } from "../../transmuted-errors/SynthesizedError"; import { Transmuter } from "../Transmuter/types"; import { Synthesizer, SynthesizerMiddlewareChain } from "./types"; /** * Flattens a nested middleware chain into a single array of transmuters. * * @param {SynthesizerMiddlewareChain} middlewareChain - The nested middleware chain to flatten. * @returns {Transmuter[]} The flattened array of transmuters. */ export function flattenMiddlewareChain( middlewareChain: SynthesizerMiddlewareChain ) { const result: Transmuter[] = []; middlewareChain.forEach((mw) => { if (Array.isArray(mw)) { result.push(...flattenMiddlewareChain(mw)); } else if (Synthesizer.safeParse(mw).success) { result.push(...(mw as Synthesizer).middlewareChain); } else { result.push(mw as Transmuter); } }); return result; } /** * Executes a series of transmuters on an error, one by one, until an error is transmuted into a SynthesizedError. * * @param {unknown} err - The error to process. * @param {Transmuter[]} transmuters - The array of transmuters to execute. * @returns {unknown} The final processed error. */ export const executeSynthesizerMiddlewareOneByOne = ( err: unknown, transmuters: Transmuter[] ) => { let result = err; for (const mw of transmuters) { result = mw.execute(result); if (result instanceof SynthesizedError) break; } return result; };