UNPKG

inventoresed

Version:

Z-Wave driver written entirely in JavaScript/TypeScript

51 lines (46 loc) 1.13 kB
import { padVersion } from "@zwave-js/shared"; import { add_operation, apply, RulesLogic } from "json-logic-js"; import * as semver from "semver"; import { parse } from "./LogicParser"; function tryOr<T extends (...args: any[]) => any>( operation: T, onError: ReturnType<T>, ): T { return ((...args: any[]) => { try { return operation(...args); } catch { return onError; } }) as any as T; } add_operation( "ver >=", tryOr((a, b) => semver.gte(padVersion(a), padVersion(b)), false), ); add_operation( "ver >", tryOr((a, b) => semver.gt(padVersion(a), padVersion(b)), false), ); add_operation( "ver <=", tryOr((a, b) => semver.lte(padVersion(a), padVersion(b)), false), ); add_operation( "ver <", tryOr((a, b) => semver.lt(padVersion(a), padVersion(b)), false), ); add_operation( "ver ===", tryOr((a, b) => semver.eq(padVersion(a), padVersion(b)), false), ); export function parseLogic(logic: string): RulesLogic { return parse(logic); } export function evaluate( logic: string, context: unknown, ): string | number | boolean { const rules = parseLogic(logic); return apply(rules, context); }