aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2022-01-13 17:58:36 +0530
committerAkshay Nair <phenax5@gmail.com>2022-01-13 17:59:03 +0530
commite26086fef3cf142cffd145836a4c7c12cfeb9656 (patch)
tree3db5cbe208ac30b9281599fa61dbe6c910fe4163 /src
parent1a281a717fe5bab2694bf51c1b03a7569d8facb4 (diff)
downloadelxr-e26086fef3cf142cffd145836a4c7c12cfeb9656.tar.gz
elxr-e26086fef3cf142cffd145836a4c7c12cfeb9656.zip
refactor: propertymatch changed to use single expression (group)
Diffstat (limited to 'src')
-rw-r--r--src/eval/index.ts8
-rw-r--r--src/parser/index.ts2
-rw-r--r--src/types.ts2
3 files changed, 6 insertions, 6 deletions
diff --git a/src/eval/index.ts b/src/eval/index.ts
index 075ff81..0579579 100644
--- a/src/eval/index.ts
+++ b/src/eval/index.ts
@@ -82,10 +82,10 @@ const checkExpr = <T>(
)
},
- PropertyMatch: ({ name, exprs }) =>
+ PropertyMatch: ({ name, expr }) =>
pipe(
Object.prototype.hasOwnProperty.call(item ?? {}, name)
- ? checkExpr(Expr.Group({ exprs }), item[name], list, index)
+ ? checkExpr(expr, item[name], list, index)
: [],
res => (res.length > 0 ? [group(item, index)] : []), // FIXME: doesn't allow nested matching
skip(1),
@@ -146,8 +146,8 @@ export const find = <T>([startO, exprs, endO]: ListExpr, list: T[]): any => {
Truthy: _ => !!x,
Falsey: _ => !x,
Group: ({ exprs }) => exprs.every(e => check(e)(x, i, ls)),
- PropertyMatch: ({ name, exprs }) =>
- name in x && exprs.every(e => check(e)(x[name], i, ls)),
+ PropertyMatch: ({ name, expr }) =>
+ name in x && check(expr)(x[name], i, ls),
OneOrMore: ({ expr }) => {
// TODO: Nested quantified expression
const x = pipe(
diff --git a/src/parser/index.ts b/src/parser/index.ts
index 3943848..e815334 100644
--- a/src/parser/index.ts
+++ b/src/parser/index.ts
@@ -76,7 +76,7 @@ const objectProperty = (input: string) =>
pair(propertyName, many0(expressionP)),
symbol(']'),
),
- ([name, exprs]) => Expr.PropertyMatch({ name, exprs }),
+ ([name, exprs]) => Expr.PropertyMatch({ name, expr: Expr.Group({ exprs }) }),
),
)
diff --git a/src/types.ts b/src/types.ts
index ac577a1..b09bde5 100644
--- a/src/types.ts
+++ b/src/types.ts
@@ -25,7 +25,7 @@ export type Expr = Union<{
Truthy: _,
Falsey: _,
Group: { exprs: Expr[] },
- PropertyMatch: { name: string, exprs: Expr[] },
+ PropertyMatch: { name: string, expr: Expr },
Literal: Literal,
}>
export const Expr = constructors<Expr>()