5b1: name the line and the offset in the input a parse refusal sits at

This commit is contained in:
2026-09-03 14:37:39 +02:00
parent becc023b51
commit d3888129b0
10 changed files with 146 additions and 66 deletions
+9 -1
View File
@@ -17,13 +17,16 @@ export type ConvertErrorCode =
export type ConvertErrorPath = readonly (number | string)[]
export type SourcePosition = { line: number; offset: number }
export type ConvertError = {
code: ConvertErrorCode
message: string
path: ConvertErrorPath
position?: SourcePosition
}
export type ConvertFault = Omit<ConvertError, 'path'>
export type ConvertFault = Omit<ConvertError, 'path' | 'position'>
export type Result<T> = { error: ConvertError; ok: false } | { ok: true; value: T }
@@ -35,6 +38,11 @@ export function faulted<T>(fault: ConvertFault, path: ConvertErrorPath): Result<
return failure(fault.code, fault.message, path)
}
export function positioned<T>(result: Result<T>, position: SourcePosition): Result<T> {
if (result.ok || result.error.position !== undefined) return result
return { error: { ...result.error, position }, ok: false }
}
export function success<T>(value: T): Result<T> {
return { ok: true, value }
}