mirror of
https://github.com/harttle/liquidjs.git
synced 2026-09-18 14:00:39 -07:00
feat: group_by/group_by_exp/find/find_exp from Jekyll, #443
This commit is contained in:
@@ -43,12 +43,12 @@ export function * evalToken (token: Token | undefined, ctx: Context, lenient = f
|
||||
|
||||
function * evalPropertyAccessToken (token: PropertyAccessToken, ctx: Context, lenient: boolean): IterableIterator<unknown> {
|
||||
const props: string[] = []
|
||||
const variable = yield evalToken(token.variable, ctx, lenient)
|
||||
for (const prop of token.props) {
|
||||
props.push((yield evalToken(prop, ctx, false)) as unknown as string)
|
||||
}
|
||||
try {
|
||||
if (token.variable) {
|
||||
const variable = yield evalToken(token.variable, ctx, lenient)
|
||||
return yield ctx._getFromScope(variable, props)
|
||||
} else {
|
||||
return yield ctx._get(props)
|
||||
|
||||
@@ -10,8 +10,8 @@ export type OperatorHandler = UnaryOperatorHandler | BinaryOperatorHandler;
|
||||
export type Operators = Record<string, OperatorHandler>
|
||||
|
||||
export const defaultOperators: Operators = {
|
||||
'==': equal,
|
||||
'!=': (l: any, r: any) => !equal(l, r),
|
||||
'==': equals,
|
||||
'!=': (l: any, r: any) => !equals(l, r),
|
||||
'>': (l: any, r: any) => {
|
||||
if (isComparable(l)) return l.gt(r)
|
||||
if (isComparable(r)) return r.lt(l)
|
||||
@@ -34,7 +34,7 @@ export const defaultOperators: Operators = {
|
||||
},
|
||||
'contains': (l: any, r: any) => {
|
||||
l = toValue(l)
|
||||
if (isArray(l)) return l.some((i) => equal(i, r))
|
||||
if (isArray(l)) return l.some((i) => equals(i, r))
|
||||
if (isFunction(l?.indexOf)) return l.indexOf(toValue(r)) > -1
|
||||
return false
|
||||
},
|
||||
@@ -43,18 +43,18 @@ export const defaultOperators: Operators = {
|
||||
'or': (l: any, r: any, ctx: Context) => isTruthy(toValue(l), ctx) || isTruthy(toValue(r), ctx)
|
||||
}
|
||||
|
||||
function equal (lhs: any, rhs: any): boolean {
|
||||
export function equals (lhs: any, rhs: any): boolean {
|
||||
if (isComparable(lhs)) return lhs.equals(rhs)
|
||||
if (isComparable(rhs)) return rhs.equals(lhs)
|
||||
lhs = toValue(lhs)
|
||||
rhs = toValue(rhs)
|
||||
if (isArray(lhs)) {
|
||||
return isArray(rhs) && arrayEqual(lhs, rhs)
|
||||
return isArray(rhs) && arrayEquals(lhs, rhs)
|
||||
}
|
||||
return lhs === rhs
|
||||
}
|
||||
|
||||
function arrayEqual (lhs: any[], rhs: any[]): boolean {
|
||||
function arrayEquals (lhs: any[], rhs: any[]): boolean {
|
||||
if (lhs.length !== rhs.length) return false
|
||||
return !lhs.some((value, i) => !equal(value, rhs[i]))
|
||||
return !lhs.some((value, i) => !equals(value, rhs[i]))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user