From b3b2c39df680f88e1e6d3615245754ae5f0380d0 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sat, 8 Jan 2022 21:17:10 +0530 Subject: feat(eval): implements object property matching --- src/parser/index.ts | 30 ++++++++++++++++++++---------- src/parser/utils.ts | 16 +++++++++------- 2 files changed, 29 insertions(+), 17 deletions(-) (limited to 'src/parser') diff --git a/src/parser/index.ts b/src/parser/index.ts index 2f5781e..386fa94 100644 --- a/src/parser/index.ts +++ b/src/parser/index.ts @@ -30,8 +30,8 @@ const anyBool = mapTo(symbol('\\b'), _ => Expr.AnyBool(null)) const truthy = mapTo(symbol('\\T'), _ => Expr.Truthy(null)) const falsey = mapTo(symbol('\\F'), _ => Expr.Falsey(null)) -const wrapQuantifiers: (e: ParserResult) => ParserResult = - chain(([expr, input]) => +const wrapQuantifiers: (e: ParserResult) => ParserResult = chain( + ([expr, input]) => pipe( input, or([ @@ -41,7 +41,7 @@ const wrapQuantifiers: (e: ParserResult) => ParserResult = ]), orElse(_ => right([expr, input])), ), - ) +) const wrapAlt: (e: ParserResult) => ParserResult = chain( ([expr, input]) => @@ -63,12 +63,18 @@ export const propertyName: Parser = pipe( p => suffixed(p, whitespaces0), ) -const objectProperty = (input: string) => pipe( - input, - mapTo(delimited(symbol('['), pair(propertyName, many0(expressionP)), symbol(']')), ([name, exprs]) => - Expr.PropertyMatch({ name, exprs }), - ), -) +const objectProperty = (input: string) => + pipe( + input, + mapTo( + delimited( + symbol('['), + pair(propertyName, many0(expressionP)), + symbol(']'), + ), + ([name, exprs]) => Expr.PropertyMatch({ name, exprs }), + ), + ) const expressionP: Parser = (input: string) => pipe( @@ -90,7 +96,11 @@ const expressionP: Parser = (input: string) => wrapAlt, ) -export const parser: Parser = tuple3(optional(start), many1(expressionP), optional(end)) +export const parser: Parser = tuple3( + optional(start), + many1(expressionP), + optional(end), +) /* diff --git a/src/parser/utils.ts b/src/parser/utils.ts index 9e05286..841d77c 100644 --- a/src/parser/utils.ts +++ b/src/parser/utils.ts @@ -40,14 +40,16 @@ export const many0 = (parser: Parser): Parser> => ) export const many1 = (parser: Parser): Parser> => - recoverInput(flow( - many0(parser), - chain(([res, inp]) => - res.length > 0 - ? right([res, inp]) - : left([`many1 failed to parse at ${inp}`, inp]), + 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 => -- cgit v1.3.1