From 59cd5552c109ddaaac31b95cc3e4651db6dedf68 Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Sun, 15 Nov 2026 10:14:06 +0800 Subject: [PATCH] fix(parsers): keep each ParseFailure constructor's kind in its return type (#10746) --- src/domain/parseFailure.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/domain/parseFailure.ts b/src/domain/parseFailure.ts index bdea0cd537..5e974775b2 100644 --- a/src/domain/parseFailure.ts +++ b/src/domain/parseFailure.ts @@ -65,10 +65,10 @@ type ParseFailureSite = Pick & { readonly cause?: unknown; }; -const failureWith = ( - failure: ParseFailure, +const failureWith = ( + failure: Extract, cause: unknown, -): ParseFailureError => +): ParseFailureError => new ParseFailureError(failure, cause === undefined ? undefined : { cause }); /** The bytes violate the format's structure. */ @@ -76,7 +76,7 @@ export const malformedInput = ( format: string, detail: string, { cause, ...at }: ParseFailureSite = {}, -): ParseFailureError => +): ParseFailureError<"malformed"> => failureWith({ kind: "malformed", format, detail, ...at }, cause); /** A declared structure starts in the bytes but ends past them. */ @@ -84,7 +84,7 @@ export const truncatedInput = ( format: string, detail: string, { cause, ...at }: ParseFailureSite = {}, -): ParseFailureError => +): ParseFailureError<"truncated"> => failureWith({ kind: "truncated", format, detail, ...at }, cause); /** The bytes use a form outside this decoder's coverage. */ @@ -96,7 +96,7 @@ export const unsupportedInput = ( undecodedContent = false, ...at }: ParseFailureSite & { readonly undecodedContent?: boolean } = {}, -): ParseFailureError => +): ParseFailureError<"unsupported"> => failureWith( { kind: "unsupported", format, detail, ...at, undecodedContent }, cause, @@ -108,7 +108,7 @@ export const decodeLimit = ( detail: string, limit: { readonly name: string; readonly maximum: number }, { cause, ...at }: ParseFailureSite = {}, -): ParseFailureError => +): ParseFailureError<"limit"> => failureWith({ kind: "limit", format, detail, ...at, limit }, cause); /**