From e246f2341ee13926f4273c6d634cef4fe07f040e Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sat, 8 Jan 2022 21:12:20 +0530 Subject: feat(parse): implements object property matching parser --- src/parser/utils.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'src/parser/utils.ts') diff --git a/src/parser/utils.ts b/src/parser/utils.ts index debff22..9e05286 100644 --- a/src/parser/utils.ts +++ b/src/parser/utils.ts @@ -40,14 +40,14 @@ export const many0 = (parser: Parser): Parser> => ) export const many1 = (parser: Parser): Parser> => - flow( + recoverInput(flow( many0(parser), chain(([res, inp]) => res.length > 0 ? right([res, inp]) : left([`many1 failed to parse at ${inp}`, inp]), ), - ) + )) const recoverInput = (p: Parser): Parser => @@ -123,6 +123,8 @@ export const matchString = ? right([s, input.slice(s.length)]) : left([`Expected ${s} but got ${input.slice(0, 1)}`, input]) +export const oneOf = (xs: string[]): Parser => or(xs.map(matchString)) + export const symbol = (s: string): Parser => delimited(whitespaces0, matchString(s), whitespaces0) -- cgit v1.3.1