feat: group_by/group_by_exp/find/find_exp from Jekyll, #443

This commit is contained in:
Jun Yang
2024-04-14 19:34:07 +08:00
parent 258780e9a8
commit 2b713b721d
29 changed files with 775 additions and 35 deletions
+7 -7
View File
@@ -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]))
}