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 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) (limited to 'src/parser/index.ts') 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), +) /* -- cgit v1.3.1