UNPKG

@inixiative/json-rules

Version:

TypeScript-first JSON rules engine with intuitive syntax and detailed error messages

1 lines 29.4 kB
{"version":3,"sources":["../src/operator.ts","../src/date.ts","../src/field.ts","../src/check.ts"],"names":["Operator","ArrayOperator","DateOperator","dayjs","utc","timezone","isSameOrBefore","isSameOrAfter","checkDate","condition","data","context","fieldValue","get","fieldDate","getError","op","dates","parseCompareDates","compareDate","endDate","dayName","allowedDays","d","day","excludedDays","startDate","parseDateWithTimezone","value","date","valueStr","fieldStr","offset","match","checkField","needsValue","getValue","isEmpty","check","conditions","all","any","checkArray","checkIfThenElse","error","errors","result","arrayValue","defaultMsg","requiresCondition","requiresCount","matches","failures","some","isObject","results","item","r"],"mappings":"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","file":"index.cjs","sourcesContent":["export enum Operator {\n equals = 'equals',\n notEquals = 'notEquals',\n lessThan = 'lessThan',\n lessThanEquals = 'lessThanEquals',\n greaterThan = 'greaterThan',\n greaterThanEquals = 'greaterThanEquals',\n contains = 'contains',\n notContains = 'notContains',\n in = 'in',\n notIn = 'notIn',\n matches = 'matches',\n notMatches = 'notMatches',\n between = 'between',\n notBetween = 'notBetween',\n isEmpty = 'isEmpty',\n notEmpty = 'notEmpty',\n exists = 'exists',\n notExists = 'notExists',\n startsWith = 'startsWith',\n endsWith = 'endsWith',\n}\n\nexport enum ArrayOperator {\n all = 'all',\n any = 'any',\n none = 'none',\n atLeast = 'atLeast',\n atMost = 'atMost',\n exactly = 'exactly',\n empty = 'empty',\n notEmpty = 'notEmpty',\n}\n\nexport enum DateOperator {\n before = 'before',\n after = 'after',\n onOrBefore = 'onOrBefore',\n onOrAfter = 'onOrAfter',\n between = 'between',\n notBetween = 'notBetween',\n dayIn = 'dayIn', // e.g., ['monday', 'tuesday', 'friday']\n dayNotIn = 'dayNotIn',\n}\n","import { get } from 'lodash';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\nimport isSameOrBefore from 'dayjs/plugin/isSameOrBefore';\nimport isSameOrAfter from 'dayjs/plugin/isSameOrAfter';\nimport type { DateRule } from './types';\nimport { DateOperator } from './operator';\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(isSameOrBefore);\ndayjs.extend(isSameOrAfter);\n\nexport const checkDate = (condition: DateRule, data: any, context: any): boolean | string => {\n const fieldValue = get(data, condition.field);\n \n if (!fieldValue) throw new Error(`${condition.field} is null or undefined`);\n \n const fieldDate = dayjs(fieldValue);\n \n if (!fieldDate.isValid()) throw new Error(`${condition.field} is not a valid date: ${fieldValue}`);\n \n const getError = (op: string) => condition.error || `${condition.field} ${op}`;\n \n // Parse comparison dates with timezone context - pass the original string to preserve offset info\n const dates = parseCompareDates(condition, data, context, fieldDate, fieldValue);\n const compareDate = dates[0];\n const endDate = dates[1];\n \n switch (condition.dateOperator) {\n case DateOperator.before:\n return fieldDate.isBefore(compareDate) || getError(`must be before ${compareDate.format()}`);\n \n case DateOperator.after:\n return fieldDate.isAfter(compareDate) || getError(`must be after ${compareDate.format()}`);\n \n case DateOperator.onOrBefore:\n return fieldDate.isSameOrBefore(compareDate) || getError(`must be on or before ${compareDate.format()}`);\n \n case DateOperator.onOrAfter:\n return fieldDate.isSameOrAfter(compareDate) || getError(`must be on or after ${compareDate.format()}`);\n \n case DateOperator.between:\n return (fieldDate.isSameOrAfter(compareDate) && fieldDate.isSameOrBefore(endDate!)) || \n getError(`must be between ${compareDate.format()} and ${endDate!.format()}`);\n \n case DateOperator.notBetween:\n return (fieldDate.isBefore(compareDate) || fieldDate.isAfter(endDate!)) || \n getError(`must not be between ${compareDate.format()} and ${endDate!.format()}`);\n \n case DateOperator.dayIn:\n if (!Array.isArray(condition.value)) throw new Error('dayIn operator requires an array of day names');\n const dayName = fieldDate.format('dddd').toLowerCase();\n const allowedDays = condition.value.map(d => d.toLowerCase());\n return allowedDays.includes(dayName) || getError(`must be on ${allowedDays.join(' or ')}`);\n \n case DateOperator.dayNotIn:\n if (!Array.isArray(condition.value)) throw new Error('dayNotIn operator requires an array of day names');\n const day = fieldDate.format('dddd').toLowerCase();\n const excludedDays = condition.value.map(d => d.toLowerCase());\n return !excludedDays.includes(day) || getError(`must not be on ${excludedDays.join(' or ')}`);\n \n default:\n throw new Error('Unknown date operator');\n }\n}\n\nconst parseCompareDates = (condition: DateRule, data: any, context: any, fieldDate: dayjs.Dayjs, fieldValue: string): [dayjs.Dayjs, dayjs.Dayjs | undefined] => {\n const requiresTwoDates = [DateOperator.between, DateOperator.notBetween];\n \n if (requiresTwoDates.includes(condition.dateOperator)) {\n if (!Array.isArray(condition.value) || condition.value.length !== 2) \n throw new Error(`${condition.dateOperator} operator requires an array of two dates`);\n const startDate = parseDateWithTimezone(condition.value[0], fieldValue);\n const endDate = parseDateWithTimezone(condition.value[1], fieldValue);\n if (!startDate.isValid()) throw new Error(`Invalid start date: ${condition.value[0]}`);\n if (!endDate.isValid()) throw new Error(`Invalid end date: ${condition.value[1]}`);\n return [startDate, endDate];\n }\n \n const requiresOneDate = [\n DateOperator.before,\n DateOperator.after,\n DateOperator.onOrBefore,\n DateOperator.onOrAfter\n ];\n \n if (requiresOneDate.includes(condition.dateOperator)) {\n let value;\n if (condition.value !== undefined) {\n value = condition.value;\n } else if (condition.path) {\n // Support $.path for current element\n if (condition.path.startsWith('$.')) {\n value = get(data, condition.path.substring(2));\n } else {\n value = get(context, condition.path);\n }\n } else {\n throw new Error('No value or path specified for date comparison');\n }\n const date = parseDateWithTimezone(value, fieldValue);\n if (!date.isValid()) throw new Error(`Invalid comparison date: ${value}`);\n return [date, undefined];\n }\n \n return [dayjs(), undefined]; // Won't be used for dayIn/dayNotIn\n}\n\nconst parseDateWithTimezone = (value: any, fieldValue: string): dayjs.Dayjs => {\n const valueStr = String(value);\n \n // Check if value has explicit timezone information\n const hasTimezone = valueStr.includes('Z') || \n (valueStr.includes('T') && (valueStr.includes('+') || valueStr.match(/T.*-\\d{2}:/)));\n \n if (hasTimezone) return dayjs(value);\n \n // No timezone info in value - interpret in field's timezone\n // Extract offset from field value\n const fieldStr = String(fieldValue);\n let offset = 0;\n \n if (fieldStr.includes('+') || (fieldStr.includes('T') && fieldStr.match(/T.*-\\d{2}:/))) {\n // Field has explicit offset like +11:00 or -08:00\n const match = fieldStr.match(/([+-])(\\d{2}):(\\d{2})/);\n if (match) {\n const sign = match[1] === '+' ? 1 : -1;\n offset = sign * (parseInt(match[2]) * 60 + parseInt(match[3]));\n }\n } else if (!fieldStr.includes('Z')) {\n // Field has no timezone, assume local time (offset 0)\n offset = 0;\n }\n // If field has Z, it's UTC (offset 0)\n \n // Create a date representing the same local time as the field's timezone\n if (valueStr.match(/^\\d{4}-\\d{2}-\\d{2}$/)) {\n // For date-only, we want midnight in the field's timezone\n const localMidnight = dayjs(value + 'T00:00:00');\n return localMidnight.subtract(offset, 'minute');\n }\n \n // For datetime without timezone, interpret as local time in field's timezone\n const localTime = dayjs(value);\n return localTime.subtract(offset, 'minute');\n}","import { get, isEmpty } from 'lodash';\nimport type { Rule } from './types';\nimport { Operator } from './operator';\n\nexport const checkField = (condition: Rule, data: any, context: any): boolean | string => {\n // Use data for field access (current element) but context remains available for path references\n const fieldValue = get(data, condition.field);\n \n // Operators that don't need a value\n const noValueOps = [Operator.isEmpty, Operator.notEmpty, Operator.exists, Operator.notExists];\n const needsValue = !noValueOps.includes(condition.operator);\n const value = needsValue ? getValue(condition, data, context) : undefined;\n \n const getError = (op: string) => condition.error || `${condition.field} ${op}${needsValue ? ' ' + JSON.stringify(value) : ''}`;\n\n switch (condition.operator) {\n case Operator.equals:\n return fieldValue === value || getError(`must equal`);\n case Operator.notEquals:\n return fieldValue !== value || getError(`must not equal`);\n case Operator.lessThan:\n return fieldValue < value || getError(`must be less than`);\n case Operator.lessThanEquals:\n return fieldValue <= value || getError(`must be less than or equal to`);\n case Operator.greaterThan:\n return fieldValue > value || getError(`must be greater than`);\n case Operator.greaterThanEquals:\n return fieldValue >= value || getError(`must be greater than or equal to`);\n case Operator.in:\n return value?.includes(fieldValue) || getError(`must be one of`);\n case Operator.notIn:\n return !value?.includes(fieldValue) || getError(`must not be one of`);\n case Operator.contains:\n return fieldValue?.includes(value) || getError(`must contain`);\n case Operator.notContains:\n return !fieldValue?.includes(value) || getError(`must not contain`);\n case Operator.matches:\n return !!fieldValue?.match(value) || getError(`must match pattern`);\n case Operator.notMatches:\n return !fieldValue?.match(value) || getError(`must not match pattern`);\n case Operator.between:\n if (!Array.isArray(value) || value.length !== 2) \n throw new Error('between operator requires an array of two values');\n return (fieldValue >= value[0] && fieldValue <= value[1]) || getError(`must be between`);\n case Operator.notBetween:\n if (!Array.isArray(value) || value.length !== 2) \n throw new Error('notBetween operator requires an array of two values');\n return (fieldValue < value[0] || fieldValue > value[1]) || getError(`must not be between`);\n case Operator.isEmpty:\n return isEmpty(fieldValue) || getError(`must be empty`);\n case Operator.notEmpty:\n return !isEmpty(fieldValue) || getError(`must not be empty`);\n case Operator.exists:\n return fieldValue !== undefined || getError(`must exist`);\n case Operator.notExists:\n return fieldValue === undefined || getError(`must not exist`);\n case Operator.startsWith:\n return fieldValue?.startsWith?.(value) || getError(`must start with`);\n case Operator.endsWith:\n return fieldValue?.endsWith?.(value) || getError(`must end with`);\n default:\n throw new Error('Unknown operator');\n }\n};\n\nconst getValue = (condition: Rule, data: any, context: any): any => {\n if (condition.value !== undefined) return condition.value;\n if (condition.path) {\n // Special case: if path starts with \"$.\" use data (current element)\n if (condition.path.startsWith('$.')) {\n return get(data, condition.path.substring(2));\n }\n // Otherwise use context (root data)\n return get(context, condition.path);\n }\n throw new Error('No value or path specified');\n};","import { get, some, isObject } from 'lodash';\nimport type { Condition, ArrayRule } from './types';\nimport { ArrayOperator } from './operator';\nimport { checkDate } from './date';\nimport { checkField } from './field';\n\nexport const check = (conditions: Condition, data: any, context: any = data): boolean | string => {\n if (typeof conditions === 'boolean') return conditions;\n if ('all' in conditions) return all(conditions.all, data, context, conditions.error);\n if ('any' in conditions) return any(conditions.any, data, context, conditions.error);\n if ('arrayOperator' in conditions) return checkArray(conditions, data, context);\n if ('dateOperator' in conditions) return checkDate(conditions, data, context);\n if ('field' in conditions) return checkField(conditions, data, context);\n if ('if' in conditions) return checkIfThenElse(conditions, data, context);\n\n return false;\n}\n\nconst all = (conditions: Condition[], data: any, context: any, error?: string): boolean | string => {\n const errors: string[] = [];\n \n for (const condition of conditions) {\n const result = check(condition, data, context);\n if (result !== true) {\n // Handle both string errors and false boolean results\n if (typeof result === 'string') {\n errors.push(result);\n } else {\n // For boolean false, include it in the error message\n errors.push('false');\n }\n }\n }\n\n if (!errors.length) return true;\n if (error) return error;\n if (errors.length === 1) return errors[0];\n return `All conditions must pass: ${errors.join(' AND ')}`;\n}\n\nconst any = (conditions: Condition[], data: any, context: any, error?: string): boolean | string => {\n const errors: string[] = [];\n\n for (const condition of conditions) {\n const result = check(condition, data, context);\n if (typeof result !== 'string') return true;\n errors.push(result);\n }\n\n if (error) return error;\n if (errors.length === 1) return errors[0];\n return `At least one condition must pass: ${errors.join(' OR ')}`;\n}\n\nconst checkIfThenElse = (condition: any, data: any, context: any): boolean | string => {\n const ifResult = check(condition.if, data, context);\n \n if (ifResult === true) return check(condition.then, data, context);\n return condition.else ? check(condition.else, data, context) : true;\n}\n\nconst checkArray = (condition: ArrayRule, data: any, context: any): boolean | string => {\n const arrayValue = get(context, condition.field);\n \n if (!Array.isArray(arrayValue)) throw new Error(`${condition.field} must be an array`);\n \n const getError = (defaultMsg: string) => condition.error || `${condition.field} ${defaultMsg}`;\n \n // Operators that require a condition\n const requiresCondition = [\n ArrayOperator.all, \n ArrayOperator.any, \n ArrayOperator.none,\n ArrayOperator.atLeast,\n ArrayOperator.atMost,\n ArrayOperator.exactly\n ];\n \n // Operators that require a count\n const requiresCount = [\n ArrayOperator.atLeast,\n ArrayOperator.atMost,\n ArrayOperator.exactly\n ];\n \n if (requiresCondition.includes(condition.arrayOperator) && !condition.condition) \n throw new Error(`${condition.arrayOperator} requires a condition to check against array elements`);\n \n if (requiresCount.includes(condition.arrayOperator) && condition.count === undefined) \n throw new Error(`${condition.arrayOperator} requires a count`);\n \n // For operators that check elements, compute matches\n let matches = 0;\n let failures = 0;\n \n if (requiresCondition.includes(condition.arrayOperator)) {\n // Check if array contains any objects\n if (!some(arrayValue, isObject)) \n throw new Error(`${condition.field} contains only primitive values. Use 'in' or 'contains' operators instead of array operators for primitive arrays`);\n \n // Pass item as data (for relative field access) but keep original context (for path access)\n const results = arrayValue.map(item => check(condition.condition!, item, context));\n matches = results.filter(r => r === true).length;\n failures = results.filter(r => typeof r === 'string').length;\n }\n \n switch (condition.arrayOperator) {\n case ArrayOperator.empty:\n return !arrayValue.length || getError('must be empty');\n \n case ArrayOperator.notEmpty:\n return !!arrayValue.length || getError('must not be empty');\n \n case ArrayOperator.all:\n return matches === arrayValue.length || getError(`all elements must match (${failures} failed)`);\n \n case ArrayOperator.any:\n return !!matches || getError('at least one element must match');\n \n case ArrayOperator.none:\n return !matches || getError(`no elements should match (${matches} matched)`);\n \n case ArrayOperator.atLeast:\n return matches >= condition.count! || getError(`at least ${condition.count} elements must match (${matches} matched)`);\n \n case ArrayOperator.atMost:\n return matches <= condition.count! || getError(`at most ${condition.count} elements must match (${matches} matched)`);\n \n case ArrayOperator.exactly:\n return matches === condition.count! || getError(`exactly ${condition.count} elements must match (${matches} matched)`);\n \n default:\n throw new Error('Unknown array operator');\n }\n}"]}