{"version":3,"file":"formatQuery.mjs","names":["shouldNegate","escapeDoubleQuotes","processNumber","shouldNegate","escapeSingleQuotes","escapeStringValueQuotes","escapeSingleQuotes","negateIfNotOp"],"sources":["../src/utils/isRuleOrGroupValid.ts","../src/utils/formatQuery/defaultRuleGroupProcessorCEL.ts","../src/utils/formatQuery/defaultRuleProcessorCEL.ts","../src/utils/formatQuery/defaultRuleGroupProcessorMongoDBQuery.ts","../src/utils/formatQuery/defaultRuleProcessorMongoDBQuery.ts","../src/utils/formatQuery/defaultRuleProcessorMongoDB.ts","../src/utils/formatQuery/defaultRuleGroupProcessorSpEL.ts","../src/utils/formatQuery/defaultRuleProcessorSpEL.ts","../src/utils/formatQuery/defaultValueProcessorByRule.ts","../src/utils/formatQuery/defaultRuleGroupProcessorCypher.ts","../src/utils/formatQuery/defaultRuleGroupProcessorDrizzle.ts","../src/utils/formatQuery/defaultRuleGroupProcessorElasticSearch.ts","../src/utils/formatQuery/defaultRuleGroupProcessorGremlin.ts","../src/utils/formatQuery/defaultRuleGroupProcessorJSONata.ts","../src/utils/formatQuery/defaultRuleGroupProcessorJsonLogic.ts","../src/utils/formatQuery/defaultRuleGroupProcessorLDAP.ts","../src/utils/formatQuery/defaultRuleGroupProcessorMongoDB.ts","../src/utils/formatQuery/defaultRuleGroupProcessorNL.ts","../src/utils/formatQuery/defaultRuleGroupProcessorParameterized.ts","../src/utils/formatQuery/defaultRuleGroupProcessorPrisma.ts","../src/utils/formatQuery/defaultRuleGroupProcessorSequelize.ts","../src/utils/formatQuery/defaultRuleGroupProcessorSPARQL.ts","../src/utils/formatQuery/defaultRuleGroupProcessorSQL.ts","../src/utils/formatQuery/defaultRuleGroupProcessorTanStackDB.ts","../src/utils/formatQuery/defaultRuleGroupProcessorDiagnostics.ts","../src/utils/formatQuery/defaultRuleProcessorCypher.ts","../src/utils/formatQuery/defaultRuleProcessorDrizzle.ts","../src/utils/formatQuery/defaultRuleProcessorElasticSearch.ts","../src/utils/formatQuery/defaultRuleProcessorGremlin.ts","../src/utils/formatQuery/defaultRuleProcessorJSONata.ts","../src/utils/formatQuery/defaultRuleProcessorJsonLogic.ts","../src/utils/formatQuery/defaultRuleProcessorLDAP.ts","../src/utils/formatQuery/defaultValueProcessorNL.ts","../src/utils/formatQuery/defaultRuleProcessorNL.ts","../src/utils/formatQuery/defaultRuleProcessorSQL.ts","../src/utils/formatQuery/defaultRuleProcessorParameterized.ts","../src/utils/formatQuery/defaultRuleProcessorPrisma.ts","../src/utils/formatQuery/defaultRuleProcessorSequelize.ts","../src/utils/formatQuery/defaultRuleProcessorSPARQL.ts","../src/utils/formatQuery/defaultRuleProcessorTanStackDB.ts","../src/utils/formatQuery/formatQuery.ts","../src/utils/formatQuery/index.ts"],"sourcesContent":["import type { RuleGroupTypeAny, RuleType, RuleValidator, ValidationResult } from '../types';\nimport { isRuleGroup } from './isRuleGroup';\nimport { isPojo } from './misc';\n\n/**\n * Determines if an object is useful as a validation result.\n */\nexport const isValidationResult = (vr?: ValidationResult): vr is ValidationResult =>\n  isPojo(vr) && typeof vr.valid === 'boolean';\n\n/**\n * Determines if a rule or group is valid based on a validation result (if defined)\n * or a validator function. Returns `true` if neither are defined and the `muted`\n * property is not `true`.\n */\nexport const isRuleOrGroupValid = (\n  rg: RuleType | RuleGroupTypeAny,\n  validationResult?: boolean | ValidationResult,\n  validator?: RuleValidator\n): boolean => {\n  if (rg.muted) {\n    return false;\n  }\n  if (typeof validationResult === 'boolean') {\n    return validationResult;\n  }\n  if (isValidationResult(validationResult)) {\n    return validationResult.valid;\n  }\n  if (typeof validator === 'function' && !isRuleGroup(rg)) {\n    const vr = validator(rg);\n    if (typeof vr === 'boolean') {\n      return vr;\n    }\n    // v8 ignore else\n    if (isValidationResult(vr)) {\n      return vr.valid;\n    }\n  }\n  return true;\n};\n","import type { DefaultCombinatorName, RuleGroupProcessor, RuleGroupTypeAny } from '../../types';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\nimport { celCombinatorMap } from './utils';\n\n/**\n * Rule group processor used by {@link formatQuery} for \"cel\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorCEL: RuleGroupProcessor<string> = (ruleGroup, options) => {\n  const {\n    fields,\n    fallbackExpression,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const processRuleGroup = (rg: RuleGroupTypeAny, outermost?: boolean): string => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return outermost ? fallbackExpression : '';\n    }\n\n    const processedRules = [];\n    let precedingCombinator = '';\n    let firstRule = true;\n\n    for (const rule of rg.rules) {\n      // Independent combinators\n      if (typeof rule === 'string') {\n        precedingCombinator = celCombinatorMap[rule as DefaultCombinatorName];\n        continue;\n      }\n\n      // Groups\n      if (isRuleGroup(rule)) {\n        const processedGroup = processRuleGroup(rule);\n        if (processedGroup) {\n          if (!firstRule && precedingCombinator) {\n            processedRules.push(precedingCombinator);\n            precedingCombinator = '';\n          }\n          firstRule = false;\n          processedRules.push(processedGroup);\n        }\n        continue;\n      }\n\n      // Rules\n      const [validationResult, fieldValidator] = validateRule(rule);\n      if (\n        !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n        rule.field === placeholderFieldName ||\n        rule.operator === placeholderOperatorName ||\n        /* v8 ignore next -- @preserve */\n        (placeholderValueName !== undefined && rule.value === placeholderValueName)\n      ) {\n        continue;\n      }\n\n      const fieldData = getOption(fields, rule.field);\n      const processedRule = ruleProcessor(rule, {\n        ...options,\n        parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n        escapeQuotes: (rule.valueSource ?? 'value') === 'value',\n        fieldData,\n      });\n\n      if (processedRule) {\n        if (!firstRule && precedingCombinator) {\n          processedRules.push(precedingCombinator);\n          precedingCombinator = '';\n        }\n        firstRule = false;\n        processedRules.push(processedRule);\n      }\n    }\n\n    const expression = processedRules.join(\n      isRuleGroupType(rg) ? ` ${celCombinatorMap[rg.combinator as DefaultCombinatorName]} ` : ' '\n    );\n\n    const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? '!' : ''}(`, ')'] : ['', ''];\n\n    return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;\n  };\n\n  return processRuleGroup(ruleGroup, true);\n};\n","import type { FormatQueryFinalOptions, RuleGroupType, RuleProcessor } from '../../types';\nimport { toArray, trimIfString } from '../arrayUtils';\nimport { lc, nullOrUndefinedOrEmpty } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport { transformQuery } from '../transformQuery';\nimport { defaultRuleGroupProcessorCEL } from './defaultRuleGroupProcessorCEL';\nimport { processMatchMode, getSubqueryElementAlias, shouldRenderAsNumber } from './utils';\n\nconst shouldNegate = (op: string) => op.startsWith('not') || op.startsWith('doesnot');\n\nconst escapeDoubleQuotes = (v: unknown, escapeQuotes?: boolean) =>\n  typeof v !== 'string' || !escapeQuotes ? `${v}` : v.replaceAll(`\"`, `\\\\\"`);\n\n/**\n * Default rule processor used by {@link formatQuery} for \"cel\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorCEL: RuleProcessor = (\n  rule,\n  // v8 ignore next\n  opts = {}\n) => {\n  const { escapeQuotes, parseNumbers, preserveValueOrder } = opts;\n  const { field, operator, value, valueSource } = rule;\n  // Paradigm A: parameters render as bare variable references (like field sources),\n  // since CEL has no external bind-parameter concept.\n  const valueIsField = valueSource === 'field' || valueSource === 'parameter';\n  const operatorTL = lc(operator === '=' ? '==' : operator);\n  const useBareValue =\n    typeof value === 'number' ||\n    typeof value === 'boolean' ||\n    typeof value === 'bigint' ||\n    shouldRenderAsNumber(value, parseNumbers);\n\n  const matchEval = processMatchMode(rule);\n\n  if (matchEval === false) {\n    return '';\n  } else if (matchEval) {\n    const { mode, threshold } = matchEval;\n\n    const subqueryDepth = opts.subqueryDepth ?? 0;\n    const arrayElementAlias = getSubqueryElementAlias(subqueryDepth);\n\n    const celQuery = transformQuery(rule.value as RuleGroupType, {\n      ruleProcessor: r => ({ ...r, field: `${arrayElementAlias}${r.field ? `.${r.field}` : ''}` }),\n    });\n    const nestedArrayFilter = defaultRuleGroupProcessorCEL(celQuery, {\n      ...(opts as FormatQueryFinalOptions),\n      subqueryDepth: subqueryDepth + 1,\n    });\n\n    switch (mode) {\n      case 'all':\n        return `${field}.all(${arrayElementAlias}, ${nestedArrayFilter})`;\n\n      case 'none':\n      case 'some':\n        return `${mode === 'none' ? '!' : ''}${field}.exists(${arrayElementAlias}, ${nestedArrayFilter})`;\n\n      case 'atleast':\n      case 'atmost':\n      case 'exactly': {\n        const totalCount = `double(${field}.size())`;\n        const filteredCount = `${field}.filter(${arrayElementAlias}, ${nestedArrayFilter}).size()`;\n\n        const op = mode === 'atleast' ? '>=' : mode === 'atmost' ? '<=' : '==';\n\n        if (threshold > 0 && threshold < 1) {\n          return `double(${filteredCount}) ${op} (${totalCount} * ${threshold})`;\n        }\n        return `${filteredCount} ${op} ${threshold}`;\n      }\n    }\n  }\n\n  switch (operatorTL) {\n    case '<':\n    case '<=':\n    case '==':\n    case '!=':\n    case '>':\n    case '>=':\n      return `${field} ${operatorTL} ${\n        valueIsField || useBareValue\n          ? trimIfString(value)\n          : `\"${escapeDoubleQuotes(value, escapeQuotes)}\"`\n      }`;\n\n    case 'contains':\n    case 'doesnotcontain': {\n      const negate = shouldNegate(operatorTL) ? '!' : '';\n      return `${negate}${field}.contains(${\n        valueIsField ? trimIfString(value) : `\"${escapeDoubleQuotes(value, escapeQuotes)}\"`\n      })`;\n    }\n\n    case 'beginswith':\n    case 'doesnotbeginwith': {\n      const negate = shouldNegate(operatorTL) ? '!' : '';\n      return `${negate}${field}.startsWith(${\n        valueIsField ? trimIfString(value) : `\"${escapeDoubleQuotes(value, escapeQuotes)}\"`\n      })`;\n    }\n\n    case 'endswith':\n    case 'doesnotendwith': {\n      const negate = shouldNegate(operatorTL) ? '!' : '';\n      return `${negate}${field}.endsWith(${\n        valueIsField ? trimIfString(value) : `\"${escapeDoubleQuotes(value, escapeQuotes)}\"`\n      })`;\n    }\n\n    case 'null':\n      return `${field} == null`;\n\n    case 'notnull':\n      return `${field} != null`;\n\n    case 'in':\n    case 'notin': {\n      const [prefix, suffix] = shouldNegate(operatorTL) ? ['!(', ')'] : ['', ''];\n      const valueAsArray = toArray(value);\n      return `${prefix}${field} in [${valueAsArray\n        .map(val =>\n          valueIsField || shouldRenderAsNumber(val, parseNumbers)\n            ? `${trimIfString(val)}`\n            : `\"${escapeDoubleQuotes(val, escapeQuotes)}\"`\n        )\n        .join(', ')}]${suffix}`;\n    }\n\n    case 'between':\n    case 'notbetween': {\n      const valueAsArray = toArray(value);\n      if (\n        valueAsArray.length >= 2 &&\n        !nullOrUndefinedOrEmpty(valueAsArray[0]) &&\n        !nullOrUndefinedOrEmpty(valueAsArray[1])\n      ) {\n        const [first, second] = valueAsArray;\n        // For backwards compatibility, default to parsing numbers for between operators\n        // unless parseNumbers is explicitly set to false\n        const shouldParseNumbers = !(parseNumbers === false);\n        const firstNum = shouldRenderAsNumber(first, shouldParseNumbers)\n          ? parseNumber(first, { parseNumbers: shouldParseNumbers })\n          : Number.NaN;\n        const secondNum = shouldRenderAsNumber(second, shouldParseNumbers)\n          ? parseNumber(second, { parseNumbers: shouldParseNumbers })\n          : Number.NaN;\n        let firstValue = Number.isNaN(firstNum)\n          ? valueIsField\n            ? `${first}`\n            : `\"${escapeDoubleQuotes(first, escapeQuotes)}\"`\n          : firstNum;\n        let secondValue = Number.isNaN(secondNum)\n          ? valueIsField\n            ? `${second}`\n            : `\"${escapeDoubleQuotes(second, escapeQuotes)}\"`\n          : secondNum;\n\n        if (\n          !preserveValueOrder &&\n          firstValue === firstNum &&\n          secondValue === secondNum &&\n          secondNum < firstNum\n        ) {\n          const tempNum = secondNum;\n          secondValue = firstNum;\n          firstValue = tempNum;\n        }\n\n        return operatorTL === 'between'\n          ? `(${field} >= ${firstValue} && ${field} <= ${secondValue})`\n          : `(${field} < ${firstValue} || ${field} > ${secondValue})`;\n      } else {\n        return '';\n      }\n    }\n  }\n  return '';\n};\n","import type { RuleGroupProcessor, RuleGroupType } from '../../types';\nimport { convertFromIC } from '../convertQuery';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { lc } from '../misc';\nimport { getOption } from '../optGroupUtils';\n\n/**\n * Default fallback object used by {@link formatQuery} for \"mongodb_query\" format.\n *\n * @group Export\n */\nexport const mongoDbFallback = { $and: [{ $expr: true }] } as const;\n\n/**\n * Rule group processor used by {@link formatQuery} for \"mongodb_query\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorMongoDBQuery: RuleGroupProcessor = (\n  ruleGroup,\n  options,\n  meta\n) => {\n  const {\n    context,\n    fields,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const { inExpressionContext } = (context ?? {}) as { inExpressionContext?: boolean };\n\n  const processRuleGroup = (rg: RuleGroupType, outermost?: boolean) => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return outermost ? mongoDbFallback : false;\n    }\n\n    const combinator = `$${lc(rg.combinator)}`;\n    let hasChildRules = false;\n\n    const expressions: Record<string, unknown>[] = rg.rules\n      .map(rule => {\n        if (isRuleGroup(rule)) {\n          const processedRuleGroup = processRuleGroup(rule);\n          if (processedRuleGroup) {\n            hasChildRules = true;\n            return processedRuleGroup;\n          }\n          return false;\n        }\n        const [validationResult, fieldValidator] = validateRule(rule);\n        if (\n          !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n          rule.field === placeholderFieldName ||\n          rule.operator === placeholderOperatorName ||\n          /* v8 ignore next -- @preserve */\n          (placeholderValueName !== undefined && rule.value === placeholderValueName)\n        ) {\n          return false;\n        }\n        const fieldData = getOption(fields, rule.field);\n        return ruleProcessor(\n          rule,\n          {\n            ...options,\n            parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n            fieldData,\n          },\n          meta\n        );\n      })\n      .filter(Boolean);\n\n    const result =\n      expressions.length > 0\n        ? expressions.length === 1 && !hasChildRules\n          ? expressions[0]\n          : { [combinator]: expressions }\n        : mongoDbFallback;\n\n    return rg.not ? (inExpressionContext ? { $not: result } : { $nor: [result] }) : result;\n  };\n\n  return processRuleGroup(convertFromIC(ruleGroup), true);\n};\n","import type { FormatQueryFinalOptions, RuleGroupType, RuleProcessor } from '../../types';\nimport { toArray } from '../arrayUtils';\nimport { lc } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport { transformQuery } from '../transformQuery';\nimport { defaultRuleGroupProcessorMongoDBQuery } from './defaultRuleGroupProcessorMongoDBQuery';\nimport { isValidValue, mongoOperators, processMatchMode, shouldRenderAsNumber } from './utils';\n\nconst processNumber = <T>(value: unknown, fallback: T, parseNumbers = false) =>\n  shouldRenderAsNumber(value, parseNumbers || typeof value === 'bigint')\n    ? Number(parseNumber(value, { parseNumbers: 'strict' }))\n    : fallback;\n\n/**\n * Default rule processor used by {@link formatQuery} for \"mongodb_query\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorMongoDBQuery: RuleProcessor = (\n  rule,\n  // v8 ignore next\n  options = {}\n) => {\n  const { field, operator, value, valueSource } = rule;\n  const { parseNumbers, preserveValueOrder, context } = options;\n  const valueIsField = valueSource === 'field';\n\n  const { avoidFieldsAsKeys } = (context ?? {}) as { avoidFieldsAsKeys?: boolean };\n\n  const matchEval = processMatchMode(rule);\n\n  if (matchEval === false) {\n    return undefined;\n  } else if (matchEval) {\n    const { mode, threshold } = matchEval;\n\n    const totalCount = { $size: { $ifNull: [`$${field}`, []] } };\n    const subQueryNoAggCtx = defaultRuleGroupProcessorMongoDBQuery(\n      transformQuery(value as RuleGroupType, {\n        ruleProcessor: r => ({ ...r, field: r.field ? `${field}.${r.field}` : field }),\n      }),\n      {\n        ...(options as FormatQueryFinalOptions),\n        // We have to override `ruleProcessor` in case original `format` is \"mongodb\"\n        ruleProcessor: defaultRuleProcessorMongoDBQuery,\n        context: { ...options.context, avoidFieldsAsKeys: false },\n      }\n    );\n    const subQueryWithAggCtx = defaultRuleGroupProcessorMongoDBQuery(\n      transformQuery(value as RuleGroupType, {\n        ruleProcessor: r => ({ ...r, field: r.field ? `$item.${r.field}` : '$item' }),\n      }),\n      {\n        ...(options as FormatQueryFinalOptions),\n        // We have to override `ruleProcessor` in case original `format` is \"mongodb\"\n        ruleProcessor: defaultRuleProcessorMongoDBQuery,\n        context: { ...options.context, avoidFieldsAsKeys: true, inExpressionContext: true },\n      }\n    );\n\n    const filteredCount = {\n      $size: {\n        $ifNull: [\n          { $filter: { input: `$${field}`, as: 'item', cond: { $and: [subQueryWithAggCtx] } } },\n          [],\n        ],\n      },\n    };\n\n    switch (mode) {\n      case 'all':\n        return { $expr: { $eq: [filteredCount, totalCount] } };\n\n      case 'none':\n        return { $nor: [subQueryNoAggCtx] };\n\n      case 'some':\n        return subQueryNoAggCtx;\n\n      case 'atleast':\n      case 'atmost':\n      case 'exactly': {\n        const op =\n          mode === 'atleast'\n            ? mongoOperators['>=']\n            : mode === 'atmost'\n              ? mongoOperators['<=']\n              : mongoOperators['='];\n\n        if (threshold > 0 && threshold < 1) {\n          return { $expr: { [op]: [filteredCount, { $multiply: [totalCount, threshold] }] } };\n        }\n        return { $expr: { [op]: [filteredCount, threshold] } };\n      }\n    }\n  }\n\n  if (operator === '=' && !valueIsField) {\n    return avoidFieldsAsKeys\n      ? { $eq: [`$${field}`, processNumber(value, value, parseNumbers)] }\n      : { [field]: processNumber(value, value, parseNumbers) };\n  }\n\n  const operatorLC = lc(operator);\n  switch (operatorLC) {\n    case '<':\n    case '<=':\n    case '=':\n    case '!=':\n    case '>':\n    case '>=': {\n      const mongoOperator = mongoOperators[operatorLC];\n      return valueIsField\n        ? { [mongoOperator]: [`$${field}`, `$${value}`] }\n        : avoidFieldsAsKeys\n          ? {\n              $and: [\n                { $ne: [`$${field}`, null] },\n                { [mongoOperator]: [`$${field}`, processNumber(value, value, parseNumbers)] },\n              ],\n            }\n          : { [field]: { [mongoOperator]: processNumber(value, value, parseNumbers) } };\n    }\n\n    case 'contains':\n      return valueIsField\n        ? { $where: `this.${field}.includes(this.${value})` }\n        : avoidFieldsAsKeys\n          ? { $regexMatch: { input: `$${field}`, regex: value } }\n          : { [field]: { $regex: value } };\n\n    case 'beginswith':\n      return valueIsField\n        ? { $where: `this.${field}.startsWith(this.${value})` }\n        : avoidFieldsAsKeys\n          ? { $regexMatch: { input: `$${field}`, regex: `^${value}` } }\n          : { [field]: { $regex: `^${value}` } };\n\n    case 'endswith':\n      return valueIsField\n        ? { $where: `this.${field}.endsWith(this.${value})` }\n        : avoidFieldsAsKeys\n          ? { $regexMatch: { input: `$${field}`, regex: `${value}$` } }\n          : { [field]: { $regex: `${value}$` } };\n\n    case 'doesnotcontain':\n      return valueIsField\n        ? { $where: `!this.${field}.includes(this.${value})` }\n        : avoidFieldsAsKeys\n          ? { $not: { $regexMatch: { input: `$${field}`, regex: value } } }\n          : { [field]: { $not: { $regex: value } } };\n\n    case 'doesnotbeginwith':\n      return valueIsField\n        ? { $where: `!this.${field}.startsWith(this.${value})` }\n        : avoidFieldsAsKeys\n          ? { $not: { $regexMatch: { input: `$${field}`, regex: `^${value}` } } }\n          : { [field]: { $not: { $regex: `^${value}` } } };\n\n    case 'doesnotendwith':\n      return valueIsField\n        ? { $where: `!this.${field}.endsWith(this.${value})` }\n        : avoidFieldsAsKeys\n          ? { $not: { $regexMatch: { input: `$${field}`, regex: `${value}$` } } }\n          : { [field]: { $not: { $regex: `${value}$` } } };\n\n    case 'null':\n      return avoidFieldsAsKeys ? { $eq: [`$${field}`, null] } : { [field]: null };\n\n    case 'notnull':\n      return avoidFieldsAsKeys ? { $ne: [`$${field}`, null] } : { [field]: { $ne: null } };\n\n    case 'in':\n    case 'notin': {\n      const valueAsArray = toArray(value);\n      return valueIsField\n        ? {\n            $where: `${operatorLC === 'notin' ? '!' : ''}[${valueAsArray\n              .map(val => `this.${val}`)\n              .join(',')}].includes(this.${field})`,\n          }\n        : avoidFieldsAsKeys\n          ? operatorLC === 'notin'\n            ? {\n                $not: {\n                  [mongoOperators.in]: [\n                    `$${field}`,\n                    valueAsArray.map(val => processNumber(val, val, parseNumbers)),\n                  ],\n                },\n              }\n            : {\n                [mongoOperators[operatorLC]]: [\n                  `$${field}`,\n                  valueAsArray.map(val => processNumber(val, val, parseNumbers)),\n                ],\n              }\n          : {\n              [field]: {\n                [mongoOperators[operatorLC]]: valueAsArray.map(val =>\n                  processNumber(val, val, parseNumbers)\n                ),\n              },\n            };\n    }\n\n    case 'between':\n    case 'notbetween': {\n      const valueAsArray = toArray(value);\n      if (\n        valueAsArray.length >= 2 &&\n        isValidValue(valueAsArray[0]) &&\n        isValidValue(valueAsArray[1])\n      ) {\n        const [first, second] = valueAsArray;\n        const firstNum = processNumber(first, Number.NaN, true);\n        const secondNum = processNumber(second, Number.NaN, true);\n        let firstValue = valueIsField ? first : Number.isNaN(firstNum) ? first : firstNum;\n        let secondValue = valueIsField ? second : Number.isNaN(secondNum) ? second : secondNum;\n        if (\n          !preserveValueOrder &&\n          firstValue === firstNum &&\n          secondValue === secondNum &&\n          secondNum < firstNum\n        ) {\n          const tempNum = secondNum;\n          secondValue = firstNum;\n          firstValue = tempNum;\n        }\n\n        if (operatorLC === 'between') {\n          return valueIsField\n            ? { $gte: [`$${field}`, `$${firstValue}`], $lte: [`$${field}`, `$${secondValue}`] }\n            : avoidFieldsAsKeys\n              ? {\n                  $and: [{ $gte: [`$${field}`, firstValue] }, { $lte: [`$${field}`, secondValue] }],\n                }\n              : { [field]: { $gte: firstValue, $lte: secondValue } };\n        } else {\n          return valueIsField\n            ? {\n                $or: [\n                  { $lt: [`$${field}`, `$${firstValue}`] },\n                  { $gt: [`$${field}`, `$${secondValue}`] },\n                ],\n              }\n            : avoidFieldsAsKeys\n              ? {\n                  $or: [{ $lt: [`$${field}`, firstValue] }, { $gt: [`$${field}`, secondValue] }],\n                }\n              : { $or: [{ [field]: { $lt: firstValue } }, { [field]: { $gt: secondValue } }] };\n        }\n      } else {\n        return '';\n      }\n    }\n  }\n  return '';\n};\n","import type { RuleProcessor } from '../../types';\nimport { defaultRuleProcessorMongoDBQuery } from './defaultRuleProcessorMongoDBQuery';\n\n/**\n * Default rule processor used by {@link formatQuery} for \"mongodb\" format.\n *\n * Note that the \"mongodb\" format is deprecated in favor of the \"mongodb_query\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorMongoDB: RuleProcessor = (rule, options) => {\n  const queryObj = defaultRuleProcessorMongoDBQuery(rule, options);\n  return queryObj ? JSON.stringify(queryObj) : '';\n};\n","import type { RuleGroupProcessor, RuleGroupTypeAny } from '../../types';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\n\n/**\n * Default rule processor used by {@link formatQuery} for \"spel\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorSpEL: RuleGroupProcessor<string> = (ruleGroup, options) => {\n  const {\n    fields,\n    fallbackExpression,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const processRuleGroup = (rg: RuleGroupTypeAny, outermost?: boolean): string => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return outermost ? fallbackExpression : '';\n    }\n\n    const processedRules = [];\n    let precedingCombinator = '';\n    let firstRule = true;\n\n    for (const rule of rg.rules) {\n      // Independent combinators\n      if (typeof rule === 'string') {\n        precedingCombinator = rule;\n        continue;\n      }\n\n      // Groups\n      if (isRuleGroup(rule)) {\n        const processedGroup = processRuleGroup(rule);\n        if (processedGroup) {\n          if (!firstRule && precedingCombinator) {\n            processedRules.push(precedingCombinator);\n            precedingCombinator = '';\n          }\n          firstRule = false;\n          processedRules.push(processedGroup);\n        }\n        continue;\n      }\n\n      // Rules\n      const [validationResult, fieldValidator] = validateRule(rule);\n      if (\n        !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n        rule.field === placeholderFieldName ||\n        rule.operator === placeholderOperatorName ||\n        /* v8 ignore next -- @preserve */\n        (placeholderValueName !== undefined && rule.value === placeholderValueName)\n      ) {\n        continue;\n      }\n\n      const fieldData = getOption(fields, rule.field);\n      const processedRule = ruleProcessor(rule, {\n        ...options,\n        parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n        escapeQuotes: (rule.valueSource ?? 'value') === 'value',\n        fieldData,\n      });\n\n      if (processedRule) {\n        if (!firstRule && precedingCombinator) {\n          processedRules.push(precedingCombinator);\n          precedingCombinator = '';\n        }\n        firstRule = false;\n        processedRules.push(processedRule);\n      }\n    }\n\n    const expression = processedRules.join(isRuleGroupType(rg) ? ` ${rg.combinator} ` : ' ');\n\n    const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? '!' : ''}(`, ')'] : ['', ''];\n\n    return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;\n  };\n\n  return processRuleGroup(ruleGroup, true);\n};\n","import type { FormatQueryFinalOptions, RuleGroupType, RuleProcessor } from '../../types';\nimport { toArray, trimIfString } from '../arrayUtils';\nimport { lc, nullOrUndefinedOrEmpty } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport { transformQuery } from '../transformQuery';\nimport { defaultRuleGroupProcessorSpEL } from './defaultRuleGroupProcessorSpEL';\nimport { processMatchMode, shouldRenderAsNumber } from './utils';\n\nconst shouldNegate = (op: string) => op.startsWith('not') || op.startsWith('doesnot');\n\nconst wrapInNegation = (clause: string, negate: boolean) => (negate ? `!(${clause})` : clause);\n\nconst escapeSingleQuotes = (v: unknown, escapeQuotes?: boolean) =>\n  typeof v !== 'string' || !escapeQuotes ? `${v}` : v.replaceAll(`'`, `\\\\'`);\n\n/**\n * Default rule processor used by {@link formatQuery} for \"spel\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorSpEL: RuleProcessor = (\n  rule,\n  // v8 ignore next\n  opts = {}\n) => {\n  const { field, operator, value, valueSource } = rule;\n  const { escapeQuotes, parseNumbers, preserveValueOrder } = opts;\n  // Paradigm A: parameters render as bare variable references (like field sources),\n  // since SpEL has no external bind-parameter concept.\n  const valueIsField = valueSource === 'field' || valueSource === 'parameter';\n  const operatorTL = lc(operator === '=' ? '==' : operator);\n  const useBareValue =\n    typeof value === 'number' ||\n    typeof value === 'boolean' ||\n    typeof value === 'bigint' ||\n    shouldRenderAsNumber(value, parseNumbers);\n\n  const matchEval = processMatchMode(rule);\n\n  if (matchEval === false) {\n    return '';\n  } else if (matchEval) {\n    const { mode, threshold } = matchEval;\n\n    const nestedArrayFilter = defaultRuleGroupProcessorSpEL(\n      transformQuery(rule.value as RuleGroupType, {\n        ruleProcessor: r => ({ ...r, field: r.field || '#this' }),\n      }),\n      opts as FormatQueryFinalOptions\n    );\n\n    const totalCount = `${field}.size()`;\n    const filteredCount = `${field}.?[${nestedArrayFilter}].size()`;\n\n    switch (mode) {\n      case 'all':\n        return `${filteredCount} == ${totalCount}`;\n\n      case 'none':\n        return `${filteredCount} == 0`;\n\n      case 'some':\n        return `${filteredCount} >= 1`;\n\n      case 'atleast':\n      case 'atmost':\n      case 'exactly': {\n        const op = mode === 'atleast' ? '>=' : mode === 'atmost' ? '<=' : '==';\n\n        if (threshold > 0 && threshold < 1) {\n          return `${filteredCount} ${op} (${totalCount} * ${threshold})`;\n        }\n        return `${filteredCount} ${op} ${threshold}`;\n      }\n    }\n  }\n\n  switch (operatorTL) {\n    case '<':\n    case '<=':\n    case '==':\n    case '!=':\n    case '>':\n    case '>=':\n      return `${field} ${operatorTL} ${\n        valueIsField || useBareValue\n          ? trimIfString(value)\n          : `'${escapeSingleQuotes(value, escapeQuotes)}'`\n      }`;\n\n    case 'contains':\n    case 'doesnotcontain': {\n      const valueTL = valueIsField\n        ? `'.*'.concat(${trimIfString(value)}).concat('.*')`\n        : `'.*${escapeSingleQuotes(value, escapeQuotes)}.*'`;\n\n      return wrapInNegation(`${field} matches ${valueTL}`, shouldNegate(operatorTL));\n    }\n\n    case 'beginswith':\n    case 'doesnotbeginwith': {\n      const valueTL = valueIsField\n        ? `'^'.concat(${trimIfString(value)}).concat('.*')`\n        : `'${(typeof value === 'string' && !value.startsWith('^')) || useBareValue ? '^' : ''}${escapeSingleQuotes(value, escapeQuotes)}.*'`;\n\n      return wrapInNegation(`${field} matches ${valueTL}`, shouldNegate(operatorTL));\n    }\n\n    case 'endswith':\n    case 'doesnotendwith': {\n      const valueTL = valueIsField\n        ? `'.*'.concat(${trimIfString(value)}).concat('$')`\n        : `'.*${escapeSingleQuotes(value, escapeQuotes)}${(typeof value === 'string' && !value.endsWith('$')) || useBareValue ? '$' : ''}'`;\n\n      return wrapInNegation(`${field} matches ${valueTL}`, shouldNegate(operatorTL));\n    }\n\n    case 'null':\n      return `${field} == null`;\n\n    case 'notnull':\n      return `${field} != null`;\n\n    case 'in':\n    case 'notin': {\n      const negate = shouldNegate(operatorTL) ? '!' : '';\n      const valueAsArray = toArray(value);\n      return valueAsArray.length > 0\n        ? `${negate}(${valueAsArray\n            .map(\n              val =>\n                `${field} == ${\n                  valueIsField || shouldRenderAsNumber(val, parseNumbers)\n                    ? `${trimIfString(val)}`\n                    : `'${escapeSingleQuotes(val, escapeQuotes)}'`\n                }`\n            )\n            .join(' or ')})`\n        : '';\n    }\n\n    case 'between':\n    case 'notbetween': {\n      const valueAsArray = toArray(value);\n      if (\n        valueAsArray.length >= 2 &&\n        !nullOrUndefinedOrEmpty(valueAsArray[0]) &&\n        !nullOrUndefinedOrEmpty(valueAsArray[1])\n      ) {\n        const [first, second] = valueAsArray;\n        // For backwards compatibility in SpEL format, between operators should parse numbers\n        // unless parseNumbers is explicitly set to false\n        const shouldParseNumbers = !(parseNumbers === false);\n        const firstNum = shouldRenderAsNumber(first, shouldParseNumbers)\n          ? parseNumber(first, { parseNumbers: shouldParseNumbers })\n          : Number.NaN;\n        const secondNum = shouldRenderAsNumber(second, shouldParseNumbers)\n          ? parseNumber(second, { parseNumbers: shouldParseNumbers })\n          : Number.NaN;\n        let firstValue = Number.isNaN(firstNum)\n          ? valueIsField\n            ? `${first}`\n            : `'${escapeSingleQuotes(first, escapeQuotes)}'`\n          : firstNum;\n        let secondValue = Number.isNaN(secondNum)\n          ? valueIsField\n            ? `${second}`\n            : `'${escapeSingleQuotes(second, escapeQuotes)}'`\n          : secondNum;\n        if (\n          !preserveValueOrder &&\n          firstValue === firstNum &&\n          secondValue === secondNum &&\n          secondNum < firstNum\n        ) {\n          const tempNum = secondNum;\n          secondValue = firstNum;\n          firstValue = tempNum;\n        }\n        return operatorTL === 'between'\n          ? `(${field} >= ${firstValue} and ${field} <= ${secondValue})`\n          : `(${field} < ${firstValue} or ${field} > ${secondValue})`;\n      } else {\n        return '';\n      }\n    }\n  }\n\n  return '';\n};\n","import type { ValueProcessorByRule } from '../../types';\nimport { toArray, trimIfString } from '../arrayUtils';\nimport { lc } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport {\n  getQuotedFieldName,\n  isValidValue,\n  shouldRenderAsNumber,\n  withParamPrefix,\n  wrapLikeFragment,\n} from './utils';\n\nconst escapeStringValueQuotes = (v: unknown, quoteChar: string, escapeQuotes?: boolean) =>\n  escapeQuotes && typeof v === 'string'\n    ? v.replaceAll(`${quoteChar}`, `${quoteChar}${quoteChar}`)\n    : v;\n\n/**\n * Default value processor used by {@link formatQuery} for \"sql\" format.\n *\n * @group Export\n */\nexport const defaultValueProcessorByRule: ValueProcessorByRule = (\n  { operator, value, valueSource },\n  // v8 ignore next - defaultRuleProcessorSQL always provides options\n  {\n    escapeQuotes,\n    parseNumbers,\n    preserveValueOrder,\n    quoteFieldNamesWith,\n    quoteValuesWith,\n    concatOperator = '||',\n    fieldIdentifierSeparator,\n    paramPrefix,\n    wrapValueWith = ['', ''] as [string, string],\n    translations,\n  } = {}\n) => {\n  // Parameter value sources render as a (prefix-aware) bind-variable reference.\n  if (valueSource === 'parameter') {\n    const operatorLowerCase = lc(operator);\n    if (operatorLowerCase === 'between' || operatorLowerCase === 'notbetween') {\n      const valueAsArray = toArray(value, { retainEmptyStrings: true });\n      if (\n        valueAsArray.length < 2 ||\n        !isValidValue(valueAsArray[0]) ||\n        !isValidValue(valueAsArray[1])\n      ) {\n        return '';\n      }\n      const [first, second] = valueAsArray;\n      // Note: `translations` should not be used for SQL.\n      // This is only here to support the \"natural_language\" format.\n      return [withParamPrefix(first, paramPrefix), withParamPrefix(second, paramPrefix)].join(\n        ` ${translations?.betweenAnd ?? translations?.and ?? 'and'} `\n      );\n    }\n    if (operatorLowerCase === 'in' || operatorLowerCase === 'notin') {\n      const valueAsArray = toArray(value);\n      if (valueAsArray.length === 0) {\n        return '';\n      }\n      return `(${valueAsArray.map(v => withParamPrefix(v, paramPrefix)).join(', ')})`;\n    }\n    const paramRef = withParamPrefix(value, paramPrefix);\n    // String-match operators concatenate `%` wildcards onto the bind-variable reference.\n    switch (operatorLowerCase) {\n      case 'contains':\n      case 'doesnotcontain':\n      case 'beginswith':\n      case 'doesnotbeginwith':\n      case 'endswith':\n      case 'doesnotendwith':\n        return wrapLikeFragment(paramRef, operatorLowerCase, {\n          concatOperator,\n          quoteValuesWith,\n          wrapValueWith,\n        });\n    }\n    return paramRef;\n  }\n\n  const valueIsField = valueSource === 'field';\n  const operatorLowerCase = lc(operator);\n  const quoteChar = quoteValuesWith || \"'\";\n\n  const quoteValue = (v: unknown) =>\n    `${wrapValueWith[0]}${quoteChar}${v}${quoteChar}${wrapValueWith[1]}`;\n  const escapeValue = (v: unknown) => escapeStringValueQuotes(v, quoteChar, escapeQuotes);\n  const wrapAndEscape = (v: unknown) => quoteValue(escapeValue(v));\n  const wrapFieldName = (v: unknown) =>\n    getQuotedFieldName(v as string, { quoteFieldNamesWith, fieldIdentifierSeparator });\n  const likeOpts = { concatOperator, quoteValuesWith, wrapValueWith };\n\n  switch (operatorLowerCase) {\n    case 'null':\n    case 'notnull': {\n      return '';\n    }\n\n    case 'in':\n    case 'notin': {\n      const valueAsArray = toArray(value);\n      if (valueAsArray.length > 0) {\n        return `(${valueAsArray\n          .map(v =>\n            valueIsField\n              ? wrapFieldName(v)\n              : shouldRenderAsNumber(v, parseNumbers)\n                ? `${trimIfString(v)}`\n                : `${wrapAndEscape(v)}`\n          )\n          .join(', ')})`;\n      }\n      return '';\n    }\n\n    case 'between':\n    case 'notbetween': {\n      const valueAsArray = toArray(value, { retainEmptyStrings: true });\n      if (\n        valueAsArray.length < 2 ||\n        !isValidValue(valueAsArray[0]) ||\n        !isValidValue(valueAsArray[1])\n      ) {\n        return '';\n      }\n\n      const [first, second] = valueAsArray;\n\n      const firstNum = shouldRenderAsNumber(first, parseNumbers)\n        ? parseNumber(first, { parseNumbers: 'strict' })\n        : Number.NaN;\n      const secondNum = shouldRenderAsNumber(second, parseNumbers)\n        ? parseNumber(second, { parseNumbers: 'strict' })\n        : Number.NaN;\n      const firstValue = Number.isNaN(firstNum) ? (valueIsField ? `${first}` : first) : firstNum;\n      const secondValue = Number.isNaN(secondNum)\n        ? valueIsField\n          ? `${second}`\n          : second\n        : secondNum;\n\n      const valsOneAndTwoOnly = [firstValue, secondValue];\n      if (\n        !preserveValueOrder &&\n        firstValue === firstNum &&\n        secondValue === secondNum &&\n        secondNum < firstNum\n      ) {\n        valsOneAndTwoOnly[0] = secondNum;\n        valsOneAndTwoOnly[1] = firstNum;\n      }\n\n      return (\n        (\n          valueIsField\n            ? valsOneAndTwoOnly.map(v => wrapFieldName(v))\n            : valsOneAndTwoOnly.every(v => shouldRenderAsNumber(v, parseNumbers))\n              ? valsOneAndTwoOnly.map(v => parseNumber(v, { parseNumbers: 'strict' }))\n              : valsOneAndTwoOnly.map(v => wrapAndEscape(v))\n        )\n          // Note: `translations` should not be used for SQL.\n          // This is only here to support the \"natural_language\" format.\n          .join(` ${translations?.betweenAnd ?? translations?.and ?? 'and'} `)\n      );\n    }\n\n    case 'contains':\n    case 'doesnotcontain':\n      return valueIsField\n        ? wrapLikeFragment(wrapFieldName(value), operatorLowerCase, likeOpts)\n        : quoteValue(`%${escapeValue(value)}%`);\n\n    case 'beginswith':\n    case 'doesnotbeginwith':\n      return valueIsField\n        ? wrapLikeFragment(wrapFieldName(value), operatorLowerCase, likeOpts)\n        : quoteValue(`${escapeValue(value)}%`);\n\n    case 'endswith':\n    case 'doesnotendwith':\n      return valueIsField\n        ? wrapLikeFragment(wrapFieldName(value), operatorLowerCase, likeOpts)\n        : quoteValue(`%${escapeValue(value)}`);\n  }\n\n  if (typeof value === 'boolean') {\n    return value ? 'TRUE' : 'FALSE';\n  }\n\n  return valueIsField\n    ? wrapFieldName(value)\n    : shouldRenderAsNumber(value, parseNumbers)\n      ? `${trimIfString(value)}`\n      : `${wrapAndEscape(value)}`;\n};\n","import type { DefaultCombinatorName, RuleGroupProcessor, RuleGroupTypeAny } from '../../types';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\n\n/**\n * Maps a {@link DefaultCombinatorName} to a Cypher combinator keyword.\n *\n * @group Export\n */\nexport const cypherCombinatorMap: {\n  and: 'AND';\n  or: 'OR';\n} = {\n  and: 'AND',\n  or: 'OR',\n} satisfies Record<DefaultCombinatorName, 'AND' | 'OR'>;\n\n/**\n * Rule group processor used by {@link formatQuery} for \"cypher\" and \"gql\" formats.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorCypher: RuleGroupProcessor<string> = (ruleGroup, options) => {\n  const {\n    fields,\n    fallbackExpression,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const processRuleGroup = (rg: RuleGroupTypeAny, outermost?: boolean): string => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return outermost ? fallbackExpression : '';\n    }\n\n    const processedRules = [];\n    let precedingCombinator = '';\n    let firstRule = true;\n\n    for (const rule of rg.rules) {\n      // Independent combinators\n      if (typeof rule === 'string') {\n        precedingCombinator = cypherCombinatorMap[rule as DefaultCombinatorName];\n        continue;\n      }\n\n      // Groups\n      if (isRuleGroup(rule)) {\n        const processedGroup = processRuleGroup(rule);\n        if (processedGroup) {\n          if (!firstRule && precedingCombinator) {\n            processedRules.push(precedingCombinator);\n            precedingCombinator = '';\n          }\n          firstRule = false;\n          processedRules.push(processedGroup);\n        }\n        continue;\n      }\n\n      // Rules\n      const [validationResult, fieldValidator] = validateRule(rule);\n      if (\n        !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n        rule.field === placeholderFieldName ||\n        rule.operator === placeholderOperatorName ||\n        /* v8 ignore next -- @preserve */\n        (placeholderValueName !== undefined && rule.value === placeholderValueName)\n      ) {\n        continue;\n      }\n\n      const fieldData = getOption(fields, rule.field);\n      const processedRule = ruleProcessor(rule, {\n        ...options,\n        parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n        escapeQuotes: (rule.valueSource ?? 'value') === 'value',\n        fieldData,\n      });\n\n      if (processedRule) {\n        if (!firstRule && precedingCombinator) {\n          processedRules.push(precedingCombinator);\n          precedingCombinator = '';\n        }\n        firstRule = false;\n        processedRules.push(processedRule);\n      }\n    }\n\n    const expression = processedRules.join(\n      isRuleGroupType(rg) ? ` ${cypherCombinatorMap[rg.combinator as DefaultCombinatorName]} ` : ' '\n    );\n\n    const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? 'NOT ' : ''}(`, ')'] : ['', ''];\n\n    return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;\n  };\n\n  return processRuleGroup(ruleGroup, true);\n};\n","import type { Column, Operators, SQL, Table } from 'drizzle-orm';\nimport type { RuleGroupProcessor, RuleGroupType } from '../../types';\nimport { convertFromIC } from '../convertQuery';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\n\n/**\n * Minimal structural shape of Drizzle's `Operators` object. Declared locally so the public type\n * surface of this package never references `drizzle-orm`, which is an optional peer dependency.\n * (Referencing it would force consumers to install it to typecheck without `skipLibCheck`.)\n *\n * @group Export\n */\nexport interface DrizzleOperatorsLike {\n  // oxlint-disable-next-line typescript/no-explicit-any\n  and: (...conditions: any[]) => any;\n  // oxlint-disable-next-line typescript/no-explicit-any\n  or: (...conditions: any[]) => any;\n  // oxlint-disable-next-line typescript/no-explicit-any\n  not: (...conditions: any[]) => any;\n}\n\n/**\n * Return type of {@link defaultRuleGroupProcessorDrizzle}—the function assignable to the `where`\n * property in the Drizzle relational queries API. The Drizzle `SQL` result type is inferred from\n * the caller's own operators object, so it stays exact without importing `drizzle-orm` here.\n *\n * @group Export\n */\nexport type DrizzleWhereCallback = <Ops extends DrizzleOperatorsLike>(\n  columns: object,\n  drizzleOperators: Ops\n) => ReturnType<Ops['and']>;\n\n/**\n * Default rule group processor used by {@link formatQuery} for the \"drizzle\" format. The returned\n * function can be assigned to the `where` property in the Drizzle relational queries API.\n *\n * @example\n * const where = formatQuery(query, 'drizzle');\n * const results = db.query.users.findMany({ where });\n *\n * @returns Function that takes a Drizzle table config and an object of Drizzle operators.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorDrizzle: RuleGroupProcessor<DrizzleWhereCallback> = (\n  ruleGroup,\n  options,\n  _meta\n) =>\n  ((columns: Table | Record<string, Column>, drizzleOperators: Operators) => {\n    const {\n      fields,\n      getParseNumberBoolean,\n      placeholderFieldName,\n      placeholderOperatorName,\n      placeholderValueName,\n      validateRule,\n      validationMap,\n      ruleProcessor,\n    } = options;\n\n    if (!columns || !drizzleOperators) return undefined;\n\n    const { and, not, or } = drizzleOperators;\n\n    const processRuleGroup = (rg: RuleGroupType, _outermost?: boolean): SQL | undefined => {\n      if (\n        !isRuleOrGroupValid(\n          rg,\n          validationMap[\n            rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n          ]\n        )\n      ) {\n        return undefined;\n      }\n\n      const processedRules = rg.rules\n        .map(rule => {\n          if (isRuleGroup(rule)) {\n            return processRuleGroup(rule);\n          }\n          const [validationResult, fieldValidator] = validateRule(rule);\n          if (\n            !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n            rule.field === placeholderFieldName ||\n            rule.operator === placeholderOperatorName ||\n            /* v8 ignore next -- @preserve */\n            (placeholderValueName !== undefined && rule.value === placeholderValueName)\n          ) {\n            return undefined;\n          }\n          const fieldData = getOption(fields, rule.field);\n          return ruleProcessor(rule, {\n            ...options,\n            parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n            fieldData,\n            context: { ...options.context, columns, drizzleOperators },\n          });\n        })\n        .filter(Boolean);\n\n      if (processedRules.length === 0) {\n        return undefined;\n      }\n\n      const ruleGroupSQL: SQL | undefined =\n        rg.combinator === 'or' ? or(...processedRules)! : and(...processedRules)!;\n\n      return rg.not ? not(ruleGroupSQL) : ruleGroupSQL;\n    };\n\n    return processRuleGroup(convertFromIC(ruleGroup), true);\n  }) as DrizzleWhereCallback;\n","import type { RuleGroupProcessor, RuleGroupType } from '../../types';\nimport { convertFromIC } from '../convertQuery';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\n\n/**\n * Rule group processor used by {@link formatQuery} for \"elasticsearch\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorElasticSearch: RuleGroupProcessor<Record<string, unknown>> = (\n  ruleGroup,\n  options\n) => {\n  const {\n    fields,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  // oxlint-disable-next-line typescript/no-explicit-any\n  const processRuleGroup = (rg: RuleGroupType): Record<string, any> | false => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return false;\n    }\n\n    const processedRules = rg.rules\n      .map(rule => {\n        if (isRuleGroup(rule)) {\n          return processRuleGroup(rule);\n        }\n        const [validationResult, fieldValidator] = validateRule(rule);\n        if (\n          !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n          rule.field === placeholderFieldName ||\n          rule.operator === placeholderOperatorName ||\n          /* v8 ignore next -- @preserve */\n          (placeholderValueName !== undefined && rule.value === placeholderValueName)\n        ) {\n          return false;\n        }\n        const fieldData = getOption(fields, rule.field);\n        return ruleProcessor(rule, {\n          ...options,\n          parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n          fieldData,\n        });\n      })\n      .filter(Boolean);\n\n    if (processedRules.length === 0) {\n      return false;\n    }\n\n    return {\n      bool: rg.not\n        ? {\n            must_not: /^or$/i.test(rg.combinator)\n              ? { bool: { should: processedRules } }\n              : processedRules,\n          }\n        : { [/^or$/i.test(rg.combinator) ? 'should' : 'must']: processedRules },\n    };\n  };\n\n  const processedRuleGroup = processRuleGroup(convertFromIC(ruleGroup));\n  return processedRuleGroup === false ? {} : processedRuleGroup;\n};\n","import type { RuleGroupProcessor, RuleGroupType, RuleGroupTypeAny } from '../../types';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\n\n/**\n * Rule group processor used by {@link formatQuery} for \"gremlin\" format.\n *\n * At the top level, filter rules produce chained `.has()` steps (implicit AND).\n * Nested groups use `.and()` / `.or()` / `.not()` compound traversals with\n * `__` anonymous traversal prefixes.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorGremlin: RuleGroupProcessor<string> = (\n  ruleGroup,\n  options\n) => {\n  const {\n    fields,\n    fallbackExpression,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const validateAndProcess = (rule: (typeof ruleGroup.rules)[number]) => {\n    // v8 ignore next -- @preserve\n    if (typeof rule === 'string' || isRuleGroup(rule)) return undefined;\n\n    const [validationResult, fieldValidator] = validateRule(rule);\n    if (\n      !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n      /* v8 ignore next 2 -- @preserve */\n      rule.field === placeholderFieldName ||\n      rule.operator === placeholderOperatorName ||\n      /* v8 ignore next -- @preserve */\n      (placeholderValueName !== undefined && rule.value === placeholderValueName)\n    ) {\n      return undefined;\n    }\n\n    const fieldData = getOption(fields, rule.field);\n    return ruleProcessor(rule, {\n      ...options,\n      parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n      escapeQuotes: (rule.valueSource ?? 'value') === 'value',\n      fieldData,\n    });\n  };\n\n  /** Recursively processes a nested group into `.and()`/`.or()`/`.not()` form. */\n  const processNested = (rg: RuleGroupTypeAny): string => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return '';\n    }\n\n    const predicates: string[] = [];\n\n    for (const rule of rg.rules) {\n      if (typeof rule === 'string') continue;\n\n      if (isRuleGroup(rule)) {\n        const nested = processNested(rule);\n        if (nested) predicates.push(nested);\n        continue;\n      }\n\n      const processed = validateAndProcess(rule);\n      if (processed) predicates.push(processed);\n    }\n\n    if (predicates.length === 0) return '';\n\n    const combinator = (rg as RuleGroupType).combinator ?? 'and';\n    const prefix = rg.not ? 'not' : combinator;\n\n    if (predicates.length === 1 && !rg.not) return predicates[0];\n\n    // Wrap each step with `__` anonymous traversal prefix when it starts with `.`\n    const args = predicates.map(p => (p.startsWith('.') ? `__${p}` : p)).join(', ');\n    return `.${prefix}(${args})`;\n  };\n\n  // Top level: chain steps directly (implicit AND for outermost group)\n  if (\n    !isRuleOrGroupValid(\n      ruleGroup,\n      validationMap[\n        ruleGroup.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n      ]\n    )\n  ) {\n    return fallbackExpression;\n  }\n\n  const steps: string[] = [];\n\n  for (const rule of ruleGroup.rules) {\n    if (typeof rule === 'string') continue;\n\n    if (isRuleGroup(rule)) {\n      const compound = processNested(rule);\n      if (compound) steps.push(compound);\n      continue;\n    }\n\n    const processed = validateAndProcess(rule);\n    if (processed) steps.push(processed);\n  }\n\n  if (steps.length === 0) return fallbackExpression;\n\n  return steps.join('');\n};\n","import type { RuleGroupProcessor, RuleGroupTypeAny } from '../../types';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\n\n/**\n * Rule group processor used by {@link formatQuery} for \"jsonata\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorJSONata: RuleGroupProcessor<string> = (\n  ruleGroup,\n  options\n) => {\n  const {\n    fields,\n    fallbackExpression,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const processRuleGroup = (rg: RuleGroupTypeAny, outermost?: boolean): string => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return outermost ? fallbackExpression : '';\n    }\n\n    const processedRules = [];\n    let precedingCombinator = '';\n    let firstRule = true;\n\n    for (const rule of rg.rules) {\n      // Independent combinators\n      if (typeof rule === 'string') {\n        precedingCombinator = rule;\n        continue;\n      }\n\n      // Groups\n      if (isRuleGroup(rule)) {\n        const processedGroup = processRuleGroup(rule);\n        if (processedGroup) {\n          if (!firstRule && precedingCombinator) {\n            processedRules.push(precedingCombinator);\n            precedingCombinator = '';\n          }\n          firstRule = false;\n          processedRules.push(processedGroup);\n        }\n        continue;\n      }\n\n      // Rules\n      const [validationResult, fieldValidator] = validateRule(rule);\n      if (\n        !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n        rule.field === placeholderFieldName ||\n        rule.operator === placeholderOperatorName ||\n        /* v8 ignore next -- @preserve */\n        (placeholderValueName !== undefined && rule.value === placeholderValueName)\n      ) {\n        continue;\n      }\n\n      const fieldData = getOption(fields, rule.field);\n      const processedRule = ruleProcessor(rule, {\n        ...options,\n        parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n        escapeQuotes: (rule.valueSource ?? 'value') === 'value',\n        fieldData,\n      });\n\n      if (processedRule) {\n        if (!firstRule && precedingCombinator) {\n          processedRules.push(precedingCombinator);\n          precedingCombinator = '';\n        }\n        firstRule = false;\n        processedRules.push(processedRule);\n      }\n    }\n\n    const expression = processedRules.join(isRuleGroupType(rg) ? ` ${rg.combinator} ` : ' ');\n\n    const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? '$not' : ''}(`, ')'] : ['', ''];\n\n    return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;\n  };\n\n  return processRuleGroup(ruleGroup, true);\n};\n","import type {\n  DefaultCombinatorName,\n  RQBJsonLogic,\n  RuleGroupProcessor,\n  RuleGroupType,\n} from '../../types';\nimport { convertFromIC } from '../convertQuery';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\n\n/**\n * Rule group processor used by {@link formatQuery} for \"jsonlogic\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorJsonLogic: RuleGroupProcessor<RQBJsonLogic> = (\n  ruleGroup,\n  options\n) => {\n  const {\n    fields,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const query = convertFromIC(ruleGroup);\n\n  const processRuleGroup = (rg: RuleGroupType, _outermost?: boolean): RQBJsonLogic => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return false;\n    }\n\n    const processedRules = rg.rules\n      .map(rule => {\n        if (isRuleGroup(rule)) {\n          return processRuleGroup(rule);\n        }\n        const [validationResult, fieldValidator] = validateRule(rule);\n        if (\n          !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n          rule.field === placeholderFieldName ||\n          rule.operator === placeholderOperatorName ||\n          /* v8 ignore next -- @preserve */\n          (placeholderValueName !== undefined && rule.value === placeholderValueName)\n        ) {\n          return false;\n        }\n        const fieldData = getOption(fields, rule.field);\n        return ruleProcessor(rule, {\n          ...options,\n          parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n          fieldData,\n        });\n      })\n      .filter(Boolean);\n\n    if (processedRules.length === 0) {\n      return false;\n    }\n\n    const jsonRuleGroup: RQBJsonLogic = { [rg.combinator]: processedRules } as {\n      [k in DefaultCombinatorName]: [RQBJsonLogic, RQBJsonLogic, ...RQBJsonLogic[]];\n    };\n\n    return rg.not ? { '!': jsonRuleGroup } : jsonRuleGroup;\n  };\n\n  return processRuleGroup(query, true);\n};\n","import type { RuleGroupProcessor, RuleGroupType } from '../../types';\nimport { convertFromIC } from '../convertQuery';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\n\n/**\n * Rule group processor used by {@link formatQuery} for \"ldap\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorLDAP: RuleGroupProcessor<string> = (ruleGroup, options) => {\n  const {\n    fields,\n    fallbackExpression,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const processRuleGroup = (rg: RuleGroupType, outermost?: boolean) => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return outermost ? fallbackExpression : '';\n    }\n\n    const rules: string[] = rg.rules\n      .map(rule => {\n        if (isRuleGroup(rule)) {\n          return processRuleGroup(rule);\n        }\n        const [validationResult, fieldValidator] = validateRule(rule);\n        if (\n          !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n          rule.field === placeholderFieldName ||\n          rule.operator === placeholderOperatorName ||\n          /* v8 ignore next -- @preserve */\n          (placeholderValueName !== undefined && rule.value === placeholderValueName)\n        ) {\n          return '';\n        }\n        const fieldData = getOption(fields, rule.field);\n        return ruleProcessor(rule, {\n          ...options,\n          parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n          escapeQuotes: (rule.valueSource ?? 'value') === 'value',\n          fieldData,\n        });\n      })\n      .filter(Boolean);\n\n    const expression = rules.join('');\n\n    const [notPrefix, notSuffix] = rg.not ? ['(!', ')'] : ['', ''];\n    const [prefix, suffix] =\n      rules.length > 1\n        ? [`${notPrefix}(${rg.combinator === 'or' ? '|' : '&'}`, `)${notSuffix}`]\n        : [notPrefix, notSuffix];\n\n    return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;\n  };\n\n  return processRuleGroup(convertFromIC(ruleGroup), true);\n};\n","import type { RuleGroupProcessor, RuleGroupType } from '../../types';\nimport { convertFromIC } from '../convertQuery';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { lc } from '../misc';\nimport { getOption } from '../optGroupUtils';\n\nconst isBracketed = (str: string) => str.startsWith('{') && str.endsWith('}');\n\n/**\n * Rule group processor used by {@link formatQuery} for \"mongodb\" format.\n *\n * Note that the \"mongodb\" format is deprecated in favor of the \"mongodb_query\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorMongoDB: RuleGroupProcessor<string> = (\n  ruleGroup,\n  options,\n  meta\n) => {\n  const {\n    fields,\n    fallbackExpression,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const processRuleGroup = (rg: RuleGroupType, outermost?: boolean) => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return outermost ? fallbackExpression : '';\n    }\n\n    const combinator = `\"$${lc(rg.combinator)}\"`;\n    let hasChildRules = false;\n\n    const expressions: string[] = rg.rules\n      .map(rule => {\n        if (isRuleGroup(rule)) {\n          const processedRuleGroup = processRuleGroup(rule);\n          if (processedRuleGroup) {\n            hasChildRules = true;\n            // Don't wrap in curly braces if the result already is.\n            return isBracketed(processedRuleGroup) ? processedRuleGroup : `{${processedRuleGroup}}`;\n          }\n          return '';\n        }\n        const [validationResult, fieldValidator] = validateRule(rule);\n        if (\n          !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n          rule.field === placeholderFieldName ||\n          rule.operator === placeholderOperatorName ||\n          /* v8 ignore next -- @preserve */\n          (placeholderValueName !== undefined && rule.value === placeholderValueName)\n        ) {\n          return '';\n        }\n        const fieldData = getOption(fields, rule.field);\n        return ruleProcessor(\n          rule,\n          {\n            ...options,\n            parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n            fieldData,\n          },\n          meta\n        );\n      })\n      .filter(Boolean);\n\n    const result =\n      expressions.length > 0\n        ? expressions.length === 1 && !hasChildRules\n          ? expressions[0]\n          : `${combinator}:[${expressions.join(',')}]`\n        : fallbackExpression;\n\n    return rg.not ? `\"$nor\":[${isBracketed(result) ? result : `{${result}}`}]` : result;\n  };\n\n  const processedQuery = processRuleGroup(convertFromIC(ruleGroup), true);\n  return isBracketed(processedQuery) ? processedQuery : `{${processedQuery}}`;\n};\n","import type { NLTranslationKey, RuleGroupProcessor, RuleGroupTypeAny } from '../../types';\nimport { convertFromIC } from '../convertQuery';\nimport { isRuleGroup, isRuleGroupType, isRuleGroupTypeIC } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { lc } from '../misc';\nimport { getOption } from '../optGroupUtils';\nimport { getNLTranslataion } from './utils';\n\n/**\n * Rule group processor used by {@link formatQuery} for \"natural_language\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorNL: RuleGroupProcessor<string> = (ruleGroup, options) => {\n  const {\n    fields,\n    fallbackExpression,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    translations,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const processRuleGroup = (rg: RuleGroupTypeAny, outermostOrLonelyInGroup?: boolean): string => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return outermostOrLonelyInGroup ? fallbackExpression : '';\n    }\n\n    const rg2 =\n      isRuleGroupTypeIC(rg) && rg.rules.some(r => typeof r === 'string' && lc(r) === 'xor')\n        ? convertFromIC(rg)\n        : rg;\n\n    const processedRules = [];\n    let precedingCombinator = '';\n    let firstRule = true;\n\n    for (const rule of rg2.rules) {\n      // Independent combinators\n      if (typeof rule === 'string') {\n        const sep = translations.ruleSeparator ?? ', ';\n        precedingCombinator = `${sep}${translations[rule as NLTranslationKey] ?? rule} `;\n        continue;\n      }\n\n      // Groups\n      if (isRuleGroup(rule)) {\n        const processedGroup = processRuleGroup(\n          rule,\n          rg2.rules.length === 1 &&\n            !(\n              rg2.not ||\n              /^xor$/i.test(\n                rg2.combinator ??\n                  /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n              )\n            )\n        );\n        // v8 ignore else\n        if (processedGroup) {\n          if (!firstRule && precedingCombinator) {\n            processedRules.push(precedingCombinator);\n            precedingCombinator = '';\n          }\n          firstRule = false;\n          processedRules.push(processedGroup);\n        }\n        continue;\n      }\n\n      // Basic rule validation\n      const [validationResult, fieldValidator] = validateRule(rule);\n      if (\n        !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n        rule.field === placeholderFieldName ||\n        rule.operator === placeholderOperatorName ||\n        /* v8 ignore next -- @preserve */\n        (placeholderValueName !== undefined && rule.value === placeholderValueName)\n      ) {\n        continue;\n      }\n\n      const escapeQuotes = (rule.valueSource ?? 'value') === 'value';\n\n      const fieldData = getOption(fields, rule.field);\n\n      const processedRule = ruleProcessor(rule, {\n        ...options,\n        parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n        escapeQuotes,\n        fieldData,\n      });\n\n      if (processedRule) {\n        if (!firstRule && precedingCombinator) {\n          processedRules.push(precedingCombinator);\n          precedingCombinator = '';\n        }\n        firstRule = false;\n        processedRules.push(processedRule);\n      }\n    }\n\n    if (processedRules.length === 0) {\n      return fallbackExpression;\n    }\n\n    const isXOR = lc(rg2.combinator ?? '') === 'xor';\n    const combinator = isXOR ? rg2.combinator!.slice(1) : rg2.combinator;\n    const mustWrap = rg2.not || !outermostOrLonelyInGroup || (isXOR && processedRules.length > 1);\n\n    const [prefixTL, suffixTL] = (['groupPrefix', 'groupSuffix'] as const).map(key =>\n      rg2.not\n        ? isXOR\n          ? getNLTranslataion(key, translations, ['not', 'xor'])\n          : getNLTranslataion(key, translations, ['not'])\n        : isXOR\n          ? getNLTranslataion(key, translations, ['xor'])\n          : getNLTranslataion(key, translations)\n    );\n\n    const prefix = mustWrap ? `${prefixTL} (`.trim() : '';\n    const suffix = mustWrap ? `) ${suffixTL}`.trim() : '';\n\n    const sep = translations.ruleSeparator ?? ', ';\n\n    return `${prefix}${processedRules.join(\n      isRuleGroupType(rg2)\n        ? `${sep}${translations[combinator as NLTranslationKey] ?? combinator} `\n        : ''\n    )}${suffix}`;\n  };\n\n  return processRuleGroup(ruleGroup, true);\n};\n","import type {\n  ParameterizedNamedSQL,\n  ParameterizedSQL,\n  RuleGroupProcessor,\n  RuleGroupTypeAny,\n  RuleType,\n} from '../../types';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { isPojo } from '../misc';\nimport { getOption } from '../optGroupUtils';\n\n/**\n * Rule group processor used by {@link formatQuery} for \"parameterized\" and\n * \"parameterized_named\" formats.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorParameterized: RuleGroupProcessor<\n  ParameterizedSQL | ParameterizedNamedSQL\n> = (ruleGroup, options) => {\n  const {\n    format,\n    fields,\n    fallbackExpression,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const parameterized = format === 'parameterized';\n  // oxlint-disable-next-line typescript/no-explicit-any\n  const params: any[] = [];\n  // oxlint-disable-next-line typescript/no-explicit-any\n  const paramsNamed: Record<string, any> = {};\n  const fieldParams: Map<string, Set<string>> = new Map();\n\n  const getNextNamedParam = (field: string) => {\n    if (!fieldParams.has(field)) {\n      fieldParams.set(field, new Set());\n    }\n    const nextNamedParam = `${field}_${fieldParams.get(field)!.size + 1}`;\n    fieldParams.get(field)!.add(nextNamedParam);\n    return nextNamedParam;\n  };\n\n  const processRule = (rule: RuleType) => {\n    const [validationResult, fieldValidator] = validateRule(rule);\n    if (\n      !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n      rule.field === placeholderFieldName ||\n      rule.operator === placeholderOperatorName ||\n      /* v8 ignore start -- @preserve */\n      (placeholderValueName !== undefined && rule.value === placeholderValueName)\n      /* v8 ignore stop -- @preserve */\n    ) {\n      return '';\n    }\n\n    const fieldData = getOption(fields, rule.field);\n\n    const fieldParamNames = Object.fromEntries(\n      ([...fieldParams.entries()] as [string, Set<string>][]).map(([f, s]) => [f, [...s]])\n    );\n\n    const processedRule = ruleProcessor(\n      rule,\n      {\n        ...options,\n        parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n        getNextNamedParam,\n        fieldParamNames,\n        fieldData,\n      },\n      { processedParams: params }\n    );\n\n    if (!isPojo(processedRule)) {\n      return '';\n    }\n\n    const { sql, params: customParams } = processedRule;\n\n    if (typeof sql !== 'string' || !sql) {\n      return '';\n    }\n\n    // v8 ignore else\n    if (format === 'parameterized' && Array.isArray(customParams)) {\n      params.push(...customParams);\n    } else if (format === 'parameterized_named' && isPojo(customParams)) {\n      Object.assign(paramsNamed, customParams);\n      // `getNextNamedParam` already adds new params to the list, but a custom\n      // rule processor might not call it so we need to make sure we add\n      // any new params here.\n      for (const p of Object.keys(customParams)) fieldParams.get(rule.field)?.add(p);\n    }\n\n    return sql;\n  };\n\n  const processRuleGroup = (rg: RuleGroupTypeAny, outermostOrLonelyInGroup?: boolean): string => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return outermostOrLonelyInGroup ? fallbackExpression : '';\n    }\n\n    const processedRules = [];\n    let precedingCombinator = '';\n    let firstRule = true;\n\n    for (const rule of rg.rules) {\n      // Independent combinators\n      if (typeof rule === 'string') {\n        precedingCombinator = rule;\n        continue;\n      }\n\n      // Groups\n      if (isRuleGroup(rule)) {\n        const processedGroup = processRuleGroup(rule, rg.rules.length === 1);\n        // v8 ignore else\n        if (processedGroup) {\n          if (!firstRule && precedingCombinator) {\n            processedRules.push(precedingCombinator);\n            precedingCombinator = '';\n          }\n          firstRule = false;\n          processedRules.push(processedGroup);\n        }\n        continue;\n      }\n\n      // Rules\n      const processedRule = processRule(rule);\n      if (processedRule) {\n        if (!firstRule && precedingCombinator) {\n          processedRules.push(precedingCombinator);\n          precedingCombinator = '';\n        }\n        firstRule = false;\n        processedRules.push(processedRule);\n      }\n    }\n\n    if (processedRules.length === 0) {\n      return fallbackExpression;\n    }\n\n    return `${rg.not ? 'NOT ' : ''}(${processedRules.join(isRuleGroupType(rg) ? ` ${rg.combinator} ` : ' ')})`;\n  };\n\n  if (parameterized) {\n    return { sql: processRuleGroup(ruleGroup, true), params };\n  }\n  return { sql: processRuleGroup(ruleGroup, true), params: paramsNamed };\n};\n","import type { RuleGroupProcessor, RuleGroupType } from '../../types';\nimport { convertFromIC } from '../convertQuery';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\n\n/**\n * Default fallback object used by {@link formatQuery} for \"prisma\" format.\n *\n * @group Export\n */\nexport const prismaFallback = {} as const;\n\n/**\n * Rule group processor used by {@link formatQuery} for \"prisma\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorPrisma: RuleGroupProcessor<\n  Record<string, unknown> | undefined\n> = (ruleGroup, options) => {\n  const {\n    fields,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const processRuleGroup = (rg: RuleGroupType, outermost?: boolean) => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return outermost ? prismaFallback : undefined;\n    }\n\n    const combinator = rg.combinator.toUpperCase();\n    let hasChildRules = false;\n\n    const expressions: Record<string, unknown>[] = rg.rules\n      .map(rule => {\n        if (isRuleGroup(rule)) {\n          const processedRuleGroup = processRuleGroup(rule);\n          if (processedRuleGroup) {\n            hasChildRules = true;\n            return processedRuleGroup;\n          }\n          return undefined;\n        }\n        const [validationResult, fieldValidator] = validateRule(rule);\n        if (\n          !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n          rule.field === placeholderFieldName ||\n          rule.operator === placeholderOperatorName ||\n          /* v8 ignore next -- @preserve */\n          (placeholderValueName !== undefined && rule.value === placeholderValueName)\n        ) {\n          return undefined;\n        }\n        const fieldData = getOption(fields, rule.field);\n        return ruleProcessor(rule, {\n          ...options,\n          parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n          fieldData,\n        });\n      })\n      .filter(Boolean);\n\n    return expressions.length > 0\n      ? expressions.length === 1 && !hasChildRules\n        ? expressions[0]\n        : { [combinator]: expressions }\n      : prismaFallback;\n  };\n\n  const result = processRuleGroup(convertFromIC(ruleGroup), true);\n\n  return ruleGroup.not ? { NOT: result } : result;\n};\n","import type { Op as _OpTypes } from 'sequelize';\nimport type { RuleGroupProcessor, RuleGroupType } from '../../types';\nimport { convertFromIC } from '../convertQuery';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { lc } from '../misc';\nimport { getOption } from '../optGroupUtils';\n\ntype OpTypes = typeof _OpTypes;\n\n/**\n * Structural stand-in for Sequelize's `WhereOptions`. Declared locally so the public type surface\n * of this package never references `sequelize`, which is an optional peer dependency.\n * (Referencing it would force consumers to install it to typecheck without `skipLibCheck`.)\n * Assignable to `WhereOptions` at the call site, e.g. `Model.findAll({ where })`.\n *\n * @group Export\n */\nexport interface SequelizeWhereOptionsLike {\n  [key: string | symbol]: unknown;\n}\n\n/**\n * Rule group processor used by {@link formatQuery} for \"sequelize\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorSequelize: RuleGroupProcessor<\n  SequelizeWhereOptionsLike | undefined\n> = (ruleGroup, options) => {\n  // v8 ignore next\n  const {\n    fields,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n    context = {},\n  } = options;\n\n  const { sequelizeOperators: Op } = context as {\n    sequelizeOperators: OpTypes;\n  };\n\n  if (!Op) return undefined;\n\n  const processRuleGroup = (\n    rg: RuleGroupType,\n    _outermost?: boolean\n  ): SequelizeWhereOptionsLike | undefined => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return undefined;\n    }\n\n    const combinator = rg.combinator.toUpperCase();\n    let hasChildRules = false;\n\n    const expressions: Record<string, unknown>[] = rg.rules\n      .map(rule => {\n        if (isRuleGroup(rule)) {\n          const processedRuleGroup = processRuleGroup(rule);\n          if (processedRuleGroup) {\n            hasChildRules = true;\n            return processedRuleGroup;\n          }\n          return undefined;\n        }\n        const [validationResult, fieldValidator] = validateRule(rule);\n        if (\n          !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n          rule.field === placeholderFieldName ||\n          rule.operator === placeholderOperatorName ||\n          /* v8 ignore next -- @preserve */\n          (placeholderValueName !== undefined && rule.value === placeholderValueName)\n        ) {\n          return undefined;\n        }\n        const fieldData = getOption(fields, rule.field);\n        return ruleProcessor(rule, {\n          ...options,\n          parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n          fieldData,\n        });\n      })\n      .filter(Boolean);\n\n    if (expressions.length === 0) return undefined;\n\n    const result =\n      expressions.length === 1 && !hasChildRules\n        ? expressions[0]\n        : { [lc(combinator) === 'or' ? Op.or : Op.and]: expressions };\n\n    return rg.not ? { [Op.not]: result } : result;\n  };\n\n  return processRuleGroup(convertFromIC(ruleGroup), true);\n};\n","import type { DefaultCombinatorName, RuleGroupProcessor, RuleGroupTypeAny } from '../../types';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\nimport { celCombinatorMap } from './utils';\n\n/**\n * Rule group processor used by {@link formatQuery} for \"sparql\" format.\n *\n * SPARQL uses the same combinators as CEL (`&&` / `||`) and `!()` for negation.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorSPARQL: RuleGroupProcessor<string> = (ruleGroup, options) => {\n  const {\n    fields,\n    fallbackExpression,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const processRuleGroup = (rg: RuleGroupTypeAny, outermost?: boolean): string => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return outermost ? fallbackExpression : '';\n    }\n\n    const processedRules = [];\n    let precedingCombinator = '';\n    let firstRule = true;\n\n    for (const rule of rg.rules) {\n      // Independent combinators\n      if (typeof rule === 'string') {\n        precedingCombinator = celCombinatorMap[rule as DefaultCombinatorName];\n        continue;\n      }\n\n      // Groups\n      if (isRuleGroup(rule)) {\n        const processedGroup = processRuleGroup(rule);\n        if (processedGroup) {\n          if (!firstRule && precedingCombinator) {\n            processedRules.push(precedingCombinator);\n            precedingCombinator = '';\n          }\n          firstRule = false;\n          processedRules.push(processedGroup);\n        }\n        continue;\n      }\n\n      // Rules\n      const [validationResult, fieldValidator] = validateRule(rule);\n      if (\n        !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n        rule.field === placeholderFieldName ||\n        rule.operator === placeholderOperatorName ||\n        /* v8 ignore next -- @preserve */\n        (placeholderValueName !== undefined && rule.value === placeholderValueName)\n      ) {\n        continue;\n      }\n\n      const fieldData = getOption(fields, rule.field);\n      const processedRule = ruleProcessor(rule, {\n        ...options,\n        parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n        escapeQuotes: (rule.valueSource ?? 'value') === 'value',\n        fieldData,\n      });\n\n      if (processedRule) {\n        if (!firstRule && precedingCombinator) {\n          processedRules.push(precedingCombinator);\n          precedingCombinator = '';\n        }\n        firstRule = false;\n        processedRules.push(processedRule);\n      }\n    }\n\n    const expression = processedRules.join(\n      isRuleGroupType(rg) ? ` ${celCombinatorMap[rg.combinator as DefaultCombinatorName]} ` : ' '\n    );\n\n    const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? '!' : ''}(`, ')'] : ['', ''];\n\n    return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;\n  };\n\n  return processRuleGroup(ruleGroup, true);\n};\n","import type { RuleGroupProcessor, RuleGroupTypeAny } from '../../types';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\n\n/**\n * Default rule processor used by {@link formatQuery} for \"sql\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorSQL: RuleGroupProcessor<string> = (ruleGroup, options) => {\n  const {\n    fields,\n    fallbackExpression,\n    getParseNumberBoolean,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    ruleProcessor,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const processRuleGroup = (rg: RuleGroupTypeAny, outermostOrLonelyInGroup?: boolean): string => {\n    if (\n      !isRuleOrGroupValid(\n        rg,\n        validationMap[\n          rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n        ]\n      )\n    ) {\n      return outermostOrLonelyInGroup ? fallbackExpression : '';\n    }\n\n    const processedRules = [];\n    let precedingCombinator = '';\n    let firstRule = true;\n\n    for (const rule of rg.rules) {\n      // Independent combinators\n      if (typeof rule === 'string') {\n        precedingCombinator = rule;\n        continue;\n      }\n\n      // Groups\n      if (isRuleGroup(rule)) {\n        const processedGroup = processRuleGroup(rule, rg.rules.length === 1);\n        // v8 ignore else\n        if (processedGroup) {\n          if (!firstRule && precedingCombinator) {\n            processedRules.push(precedingCombinator);\n            precedingCombinator = '';\n          }\n          firstRule = false;\n          processedRules.push(processedGroup);\n        }\n        continue;\n      }\n\n      // Basic rule validation\n      const [validationResult, fieldValidator] = validateRule(rule);\n      if (\n        !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n        rule.field === placeholderFieldName ||\n        rule.operator === placeholderOperatorName ||\n        (placeholderValueName !== undefined && rule.value === placeholderValueName)\n      ) {\n        continue;\n      }\n\n      const escapeQuotes = (rule.valueSource ?? 'value') === 'value';\n\n      const fieldData = getOption(fields, rule.field);\n\n      const processedRule = ruleProcessor(rule, {\n        ...options,\n        parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n        escapeQuotes,\n        fieldData,\n      });\n\n      if (processedRule) {\n        if (!firstRule && precedingCombinator) {\n          processedRules.push(precedingCombinator);\n          precedingCombinator = '';\n        }\n        firstRule = false;\n        processedRules.push(processedRule);\n      }\n    }\n\n    if (processedRules.length === 0) {\n      return fallbackExpression;\n    }\n\n    return `${rg.not ? 'NOT ' : ''}(${processedRules.join(isRuleGroupType(rg) ? ` ${rg.combinator} ` : ' ')})`;\n  };\n\n  return processRuleGroup(ruleGroup, true);\n};\n","import type { RuleGroupProcessor, RuleGroupType } from '../../types';\nimport { convertFromIC } from '../convertQuery';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\nimport type { TanStackDbWhereCallback, TsDbExpression, TsDbOperators } from './tanStackDbTypes.ts';\n\n/**\n * Default rule group processor used by {@link formatQuery} for the \"tanstack_db\" format.\n * Returns a `WhereCallback` suitable for TanStack DB's `.where()` method.\n *\n * @example\n * const where = formatQuery(query, { format: 'tanstack_db', context: { tanstackDb: tsdb } });\n * const results = useLiveQuery(q => q.from({ todo: todosCollection }).where(where));\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorTanStackDB: RuleGroupProcessor<TanStackDbWhereCallback> =\n  (ruleGroup, options) => refs => {\n    const {\n      fields,\n      getParseNumberBoolean,\n      placeholderFieldName,\n      placeholderOperatorName,\n      placeholderValueName,\n      validateRule,\n      validationMap,\n      context = {},\n      ruleProcessor,\n    } = options;\n\n    const ops = context.tanStackDbOperators as TsDbOperators;\n\n    if (!ops) return undefined;\n\n    const { and, eq, not, or } = ops;\n\n    const fallback = eq(1, 1);\n\n    // Grab ref keys for field resolution (first key is primary)\n    const refKeys = Object.keys(refs);\n\n    /* v8 ignore next -- @preserve */\n    if (refKeys.length === 0) return fallback;\n\n    const processRuleGroup = (rg: RuleGroupType): TsDbExpression | undefined => {\n      if (\n        !isRuleOrGroupValid(\n          rg,\n          validationMap[\n            rg.id ?? /* v8 ignore start -- @preserve */ '' /* v8 ignore stop -- @preserve */\n          ]\n        )\n      ) {\n        return undefined;\n      }\n\n      const processedRules: TsDbExpression[] = rg.rules\n        .map(rule => {\n          if (isRuleGroup(rule)) {\n            return processRuleGroup(rule);\n          }\n          const [validationResult, fieldValidator] = validateRule(rule);\n          if (\n            !isRuleOrGroupValid(rule, validationResult, fieldValidator) ||\n            rule.field === placeholderFieldName ||\n            rule.operator === placeholderOperatorName ||\n            /* v8 ignore next -- @preserve */\n            (placeholderValueName !== undefined && rule.value === placeholderValueName)\n          ) {\n            return undefined;\n          }\n          const fieldData = getOption(fields, rule.field);\n          return ruleProcessor(rule, {\n            ...options,\n            parseNumbers: getParseNumberBoolean(fieldData?.inputType),\n            fieldData,\n            context: {\n              ...context,\n              _tanstackDbRefs: refs,\n              _tanstackDbPrimaryRef: refKeys[0],\n            },\n          });\n        })\n        .filter(Boolean);\n\n      if (processedRules.length === 0) {\n        return fallback;\n      }\n\n      // Single expression: no wrapper needed\n      const ruleGroupExpr =\n        processedRules.length === 1\n          ? processedRules[0]\n          : rg.combinator === 'or'\n            ? or(...(processedRules as Parameters<typeof or>))\n            : and(...(processedRules as Parameters<typeof and>));\n\n      return rg.not ? not(ruleGroupExpr) : ruleGroupExpr;\n    };\n\n    return processRuleGroup(convertFromIC(ruleGroup)) ?? fallback;\n  };\n","import type {\n  DiagnosticEntry,\n  DiagnosticsFieldSummaryEntry,\n  DiagnosticsResult,\n  DiagnosticsStats,\n  FullField,\n  RuleGroupDiagnosticsResult,\n  RuleGroupICDiagnosticsArray,\n  RuleGroupICDiagnosticsResult,\n  RuleGroupProcessor,\n  RuleGroupTypeAny,\n  RuleDiagnosticsResult,\n  RuleType,\n  RuleValidator,\n  ValidationResult,\n} from '../../types';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isRuleOrGroupValid, isValidationResult } from '../isRuleOrGroupValid';\nimport { numericRegex } from '../misc';\nimport { toFlatOptionArray } from '../optGroupUtils';\n\nconst numericInputTypes = new Set(['number', 'range', 'bigint']);\n\nconst dateRegex = /^\\d{4}-\\d{2}-\\d{2}$/;\nconst timeRegex = /^\\d{2}:\\d{2}(:\\d{2}(\\.\\d+)?)?$/;\nconst monthRegex = /^\\d{4}-\\d{2}$/;\nconst weekRegex = /^\\d{4}-W\\d{2}$/;\nconst colorRegex = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i;\nconst emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\nconst isValidDateComponents = (y: number, m: number, d: number): boolean => {\n  const date = new Date(Date.UTC(y, m - 1, d));\n  return date.getUTCFullYear() === y && date.getUTCMonth() === m - 1 && date.getUTCDate() === d;\n};\n\nconst isValidTimeComponents = (s: string): boolean => {\n  const parts = s.split(':');\n  const h = Number(parts[0]);\n  const m = Number(parts[1]);\n  const sec = parts[2] ? Number.parseFloat(parts[2]) : 0;\n  return h >= 0 && h <= 23 && m >= 0 && m <= 59 && sec >= 0 && sec < 60;\n};\n\n/**\n * Checks whether a value is compatible with the given {@link FullField.inputType}.\n * Returns a diagnostic code string if there is a mismatch, or `undefined` if OK.\n */\nconst checkValueTypeMismatch = (value: unknown, inputType: string): string | undefined => {\n  if (value === null || value === undefined || value === '') return undefined;\n\n  if (numericInputTypes.has(inputType)) {\n    const v = typeof value === 'string' ? value.trim() : value;\n    if (typeof v === 'number' || typeof v === 'bigint') return undefined;\n    if (typeof v === 'string' && numericRegex.test(v)) return undefined;\n    return 'VALUE_TYPE_MISMATCH';\n  }\n\n  if (inputType === 'date') {\n    if (typeof value !== 'string') return 'VALUE_TYPE_MISMATCH';\n    const v = value.trim();\n    if (!dateRegex.test(v)) return 'VALUE_TYPE_MISMATCH';\n    const [y, m, d] = v.split('-').map(Number);\n    return isValidDateComponents(y, m, d) ? undefined : 'VALUE_TYPE_MISMATCH';\n  }\n\n  if (inputType === 'datetime-local') {\n    if (typeof value !== 'string') return 'VALUE_TYPE_MISMATCH';\n    // Strip optional timezone suffix (Z, ±hh:mm, ±hhmm, ±hh)\n    const base = value.trim().replace(/(Z|[+-]\\d{2}:?\\d{2}|[+-]\\d{2})$/, '');\n    const tIndex = base.indexOf('T');\n    if (tIndex === -1) return 'VALUE_TYPE_MISMATCH';\n    const datePart = base.slice(0, tIndex);\n    const timePart = base.slice(tIndex + 1);\n    if (!dateRegex.test(datePart) || !timeRegex.test(timePart)) return 'VALUE_TYPE_MISMATCH';\n    const [y, m, d] = datePart.split('-').map(Number);\n    if (!isValidDateComponents(y, m, d)) return 'VALUE_TYPE_MISMATCH';\n    return isValidTimeComponents(timePart) ? undefined : 'VALUE_TYPE_MISMATCH';\n  }\n\n  if (inputType === 'time') {\n    if (typeof value !== 'string') return 'VALUE_TYPE_MISMATCH';\n    const v = value.trim();\n    if (!timeRegex.test(v)) return 'VALUE_TYPE_MISMATCH';\n    return isValidTimeComponents(v) ? undefined : 'VALUE_TYPE_MISMATCH';\n  }\n\n  if (inputType === 'month') {\n    if (typeof value !== 'string') return 'VALUE_TYPE_MISMATCH';\n    const v = value.trim();\n    if (!monthRegex.test(v)) return 'VALUE_TYPE_MISMATCH';\n    const m = Number(v.slice(5));\n    return m >= 1 && m <= 12 ? undefined : 'VALUE_TYPE_MISMATCH';\n  }\n\n  if (inputType === 'week') {\n    if (typeof value !== 'string') return 'VALUE_TYPE_MISMATCH';\n    const v = value.trim();\n    if (!weekRegex.test(v)) return 'VALUE_TYPE_MISMATCH';\n    const w = Number(v.slice(6));\n    return w >= 1 && w <= 53 ? undefined : 'VALUE_TYPE_MISMATCH';\n  }\n\n  if (inputType === 'color') {\n    if (typeof value !== 'string') return 'VALUE_TYPE_MISMATCH';\n    return colorRegex.test(value.trim()) ? undefined : 'VALUE_TYPE_MISMATCH';\n  }\n\n  if (inputType === 'url') {\n    if (typeof value !== 'string') return 'VALUE_TYPE_MISMATCH';\n    try {\n      void new URL(value.trim());\n      return undefined;\n    } catch {\n      return 'VALUE_TYPE_MISMATCH';\n    }\n  }\n\n  if (inputType === 'email') {\n    if (typeof value !== 'string') return 'VALUE_TYPE_MISMATCH';\n    return emailRegex.test(value.trim()) ? undefined : 'VALUE_TYPE_MISMATCH';\n  }\n\n  return undefined;\n};\n\n/**\n * Rule group processor used by {@link formatQuery} for \"diagnostics\" format.\n *\n * Produces a {@link DiagnosticsResult} containing an annotated copy of the query\n * tree (`query`) with `valid`, `reasons`, `path`, and `level` properties on every\n * rule and group; a flat `diagnostics` array; aggregate `stats`; and a per-field\n * `fieldSummary`.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorDiagnostics: RuleGroupProcessor<DiagnosticsResult> = (\n  ruleGroup,\n  options\n) => {\n  const {\n    fields: fieldsOption,\n    placeholderFieldName,\n    placeholderOperatorName,\n    placeholderValueName,\n    validateRule,\n    validationMap,\n  } = options;\n\n  const diagnostics: DiagnosticEntry[] = [];\n  const stats: DiagnosticsStats = {\n    totalRules: 0,\n    totalGroups: 0,\n    validRules: 0,\n    invalidRules: 0,\n    validGroups: 0,\n    invalidGroups: 0,\n  };\n  const fieldSummary: Record<string, DiagnosticsFieldSummaryEntry> = {};\n\n  const uniqueFields = toFlatOptionArray(fieldsOption) satisfies FullField[];\n  const fieldsByName = new Map<string, FullField>();\n  for (const f of uniqueFields) {\n    fieldsByName.set(f.name, f);\n  }\n  const hasFieldsConfig = fieldsByName.size > 0;\n\n  const processRuleGroup = (\n    rg: RuleGroupTypeAny,\n    path: number[]\n  ): RuleGroupDiagnosticsResult | RuleGroupICDiagnosticsResult => {\n    stats.totalGroups++;\n    const level = path.length;\n    const groupValidationEntry = validationMap[rg.id ?? ''];\n    const groupSelfValid = isRuleOrGroupValid(rg, groupValidationEntry);\n\n    const groupReasons = getReasons(groupValidationEntry);\n\n    // Collect group-level diagnostics\n    if (rg.muted) {\n      diagnostics.push({\n        id: rg.id ?? '',\n        path,\n        code: 'MUTED',\n        message: 'Group is muted',\n        source: 'muted',\n      });\n    } else if (!groupSelfValid && groupValidationEntry !== undefined) {\n      diagnostics.push({\n        id: rg.id ?? '',\n        path,\n        code: 'CUSTOM_VALIDATOR',\n        message: groupReasons ? `Invalid: ${groupReasons.join(', ')}` : 'Group failed validation',\n        source: 'query-validator',\n      });\n    }\n\n    let allChildrenValid = true;\n    let ruleIndex = 0;\n    const annotatedRules: (\n      | RuleDiagnosticsResult\n      | RuleGroupDiagnosticsResult\n      | RuleGroupICDiagnosticsResult\n      | string\n    )[] = [];\n\n    for (const rule of rg.rules) {\n      // Independent combinators\n      if (typeof rule === 'string') {\n        annotatedRules.push(rule);\n        ruleIndex++;\n        continue;\n      }\n\n      const childPath = [...path, ruleIndex];\n\n      // Sub-groups\n      if (isRuleGroup(rule)) {\n        const annotatedGroup = processRuleGroup(rule, childPath);\n        if (!annotatedGroup.valid) {\n          allChildrenValid = false;\n        }\n        annotatedRules.push(annotatedGroup);\n        ruleIndex++;\n        continue;\n      }\n\n      // Rules\n      stats.totalRules++;\n      const childLevel = childPath.length;\n      const [validationResult, fieldValidator] = validateRule(rule);\n      const ruleValid =\n        isRuleOrGroupValid(rule, validationResult, fieldValidator) &&\n        rule.field !== placeholderFieldName &&\n        rule.operator !== placeholderOperatorName &&\n        !(placeholderValueName !== undefined && rule.value === placeholderValueName);\n\n      // Collect rule-level diagnostics\n      collectRuleDiagnostics(\n        rule,\n        childPath,\n        validationResult,\n        fieldValidator,\n        ruleValid,\n        diagnostics,\n        placeholderFieldName,\n        placeholderOperatorName,\n        placeholderValueName,\n        hasFieldsConfig,\n        fieldsByName\n      );\n\n      if (!ruleValid) {\n        allChildrenValid = false;\n        stats.invalidRules++;\n      } else {\n        stats.validRules++;\n      }\n\n      // Field summary\n      const fieldName = rule.field;\n      if (!fieldSummary[fieldName]) {\n        fieldSummary[fieldName] = { ruleCount: 0, invalidCount: 0 };\n      }\n      fieldSummary[fieldName].ruleCount++;\n      if (!ruleValid) {\n        fieldSummary[fieldName].invalidCount++;\n      }\n\n      const ruleReasons =\n        getReasons(validationResult) ?? getFieldValidatorReasons(rule, fieldValidator);\n\n      const annotatedRule: RuleDiagnosticsResult = {\n        ...rule,\n        valid: ruleValid,\n        ...(ruleReasons ? { reasons: ruleReasons } : null),\n        path: childPath,\n        level: childLevel,\n      };\n\n      annotatedRules.push(annotatedRule);\n      ruleIndex++;\n    }\n\n    const groupValid = groupSelfValid && allChildrenValid;\n\n    if (groupValid) {\n      stats.validGroups++;\n    } else {\n      stats.invalidGroups++;\n    }\n\n    if (isRuleGroupType(rg)) {\n      const result: RuleGroupDiagnosticsResult = {\n        ...rg,\n        valid: groupValid,\n        ...(groupReasons ? { reasons: groupReasons } : null),\n        path,\n        level,\n        rules: annotatedRules as (RuleDiagnosticsResult | RuleGroupDiagnosticsResult)[],\n      };\n      return result;\n    }\n\n    const result: RuleGroupICDiagnosticsResult = {\n      ...rg,\n      valid: groupValid,\n      ...(groupReasons ? { reasons: groupReasons } : null),\n      path,\n      level,\n      rules: annotatedRules as unknown as RuleGroupICDiagnosticsArray,\n    };\n    return result;\n  };\n\n  const query = processRuleGroup(ruleGroup, []);\n\n  // Add diagnostics for fields defined in config but not referenced in the query\n  if (hasFieldsConfig) {\n    const referencedFields = new Set(Object.keys(fieldSummary));\n    for (const [fieldName] of fieldsByName) {\n      if (!referencedFields.has(fieldName)) {\n        diagnostics.push({\n          id: '',\n          path: [],\n          code: 'UNREFERENCED_FIELD',\n          message: `Field \"${fieldName}\" is defined in the fields config but not used in the query`,\n          source: 'field-check',\n        });\n      }\n    }\n  }\n\n  return { query, diagnostics, stats, fieldSummary };\n};\n\n/**\n * Collects diagnostic entries for a single rule.\n */\nconst collectRuleDiagnostics = (\n  rule: RuleType,\n  path: number[],\n  validationResult: boolean | ValidationResult | undefined,\n  fieldValidator: RuleValidator | undefined,\n  ruleValid: boolean,\n  diagnostics: DiagnosticEntry[],\n  placeholderFieldName: string,\n  placeholderOperatorName: string,\n  placeholderValueName: string | undefined,\n  hasFieldsConfig: boolean,\n  fieldsByName: Map<string, FullField>\n): void => {\n  const id = rule.id ?? '';\n\n  if (rule.muted) {\n    diagnostics.push({\n      id,\n      path,\n      code: 'MUTED',\n      message: 'Rule is muted',\n      source: 'muted',\n    });\n  }\n\n  if (rule.field === placeholderFieldName) {\n    diagnostics.push({\n      id,\n      path,\n      code: 'PLACEHOLDER_FIELD',\n      message: 'Rule has a placeholder field',\n      source: 'placeholder',\n    });\n  }\n\n  if (rule.operator === placeholderOperatorName) {\n    diagnostics.push({\n      id,\n      path,\n      code: 'PLACEHOLDER_OPERATOR',\n      message: 'Rule has a placeholder operator',\n      source: 'placeholder',\n    });\n  }\n\n  if (placeholderValueName !== undefined && rule.value === placeholderValueName) {\n    diagnostics.push({\n      id,\n      path,\n      code: 'PLACEHOLDER_VALUE',\n      message: 'Rule has a placeholder value',\n      source: 'placeholder',\n    });\n  }\n\n  // Custom validator diagnostics (only if not already covered by other checks)\n  if (\n    !rule.muted &&\n    rule.field !== placeholderFieldName &&\n    rule.operator !== placeholderOperatorName &&\n    !(placeholderValueName !== undefined && rule.value === placeholderValueName)\n  ) {\n    if (typeof validationResult === 'boolean' && !validationResult) {\n      diagnostics.push({\n        id,\n        path,\n        code: 'CUSTOM_VALIDATOR',\n        message: 'Rule failed validation',\n        source: 'query-validator',\n      });\n    } else if (\n      typeof validationResult !== 'boolean' &&\n      isValidationResult(validationResult) &&\n      !validationResult.valid\n    ) {\n      const reasons = validationResult.reasons;\n      diagnostics.push({\n        id,\n        path,\n        code: 'CUSTOM_VALIDATOR',\n        message: reasons ? `Invalid: ${reasons.join(', ')}` : 'Rule failed validation',\n        source: 'query-validator',\n      });\n    } else if (!ruleValid && typeof fieldValidator === 'function') {\n      const vr = fieldValidator(rule);\n      const reasons =\n        typeof vr !== 'boolean' && isValidationResult(vr) && !vr.valid ? vr.reasons : undefined;\n      diagnostics.push({\n        id,\n        path,\n        code: 'CUSTOM_VALIDATOR',\n        message: reasons ? `Invalid: ${reasons.join(', ')}` : 'Rule failed field validation',\n        source: 'field-validator',\n      });\n    }\n  }\n\n  // Undefined field check\n  if (hasFieldsConfig && !fieldsByName.has(rule.field) && rule.field !== placeholderFieldName) {\n    diagnostics.push({\n      id,\n      path,\n      code: 'UNDEFINED_FIELD',\n      message: `Field \"${rule.field}\" is not defined in the fields config`,\n      source: 'field-check',\n    });\n  }\n\n  // Value/type mismatch check\n  if (hasFieldsConfig) {\n    const fieldDef = fieldsByName.get(rule.field);\n    if (fieldDef?.inputType) {\n      const mismatchCode = checkValueTypeMismatch(rule.value, fieldDef.inputType);\n      if (mismatchCode) {\n        diagnostics.push({\n          id,\n          path,\n          code: mismatchCode,\n          message: `Value \"${rule.value}\" is not compatible with input type \"${fieldDef.inputType}\"`,\n          source: 'type-check',\n        });\n      }\n    }\n  }\n};\n\n/**\n * Extracts `reasons` from a validation result, if present.\n */\nconst getReasons = (\n  validationResult: boolean | ValidationResult | undefined\n  // oxlint-disable-next-line typescript/no-explicit-any\n): any[] | undefined => {\n  if (\n    typeof validationResult !== 'boolean' &&\n    isValidationResult(validationResult) &&\n    !validationResult.valid &&\n    validationResult.reasons\n  ) {\n    return validationResult.reasons;\n  }\n  return undefined;\n};\n\n/**\n * Runs a field-level validator and extracts `reasons` if present.\n */\nconst getFieldValidatorReasons = (\n  rule: RuleType,\n  fieldValidator: RuleValidator | undefined\n  // oxlint-disable-next-line typescript/no-explicit-any\n): any[] | undefined => {\n  if (typeof fieldValidator === 'function') {\n    const vr = fieldValidator(rule);\n    if (typeof vr !== 'boolean' && isValidationResult(vr) && !vr.valid && vr.reasons) {\n      return vr.reasons;\n    }\n  }\n  return undefined;\n};\n","import type { RuleProcessor } from '../../types';\nimport { toArray, trimIfString } from '../arrayUtils';\nimport { shouldRenderAsNumber } from './utils';\n\nconst escapeSingleQuotes = (v: unknown, escapeQuotes?: boolean) =>\n  typeof v !== 'string' || !escapeQuotes ? `${v}` : v.replaceAll(\"'\", \"\\\\'\");\n\n/**\n * Default rule processor used by {@link formatQuery} for \"cypher\" and \"gql\" formats.\n *\n * @group Export\n */\nexport const defaultRuleProcessorCypher: RuleProcessor = (\n  rule,\n  // v8 ignore next\n  opts = {}\n) => {\n  const { escapeQuotes, parseNumbers } = opts;\n  const { field, operator, value, valueSource } = rule;\n  const valueIsField = valueSource === 'field';\n  const operatorTL = operator.toLowerCase();\n\n  const fmtVal = (v: unknown): string => {\n    if (v === null || v === undefined) return 'null';\n    if (typeof v === 'boolean' || typeof v === 'bigint') return String(v);\n    if (valueIsField) return trimIfString(v) as string;\n    if (typeof v === 'number' || shouldRenderAsNumber(v, parseNumbers))\n      return trimIfString(v) as string;\n    return `'${escapeSingleQuotes(v, escapeQuotes)}'`;\n  };\n\n  switch (operatorTL) {\n    case '=':\n      return `${field} = ${fmtVal(value)}`;\n    case '!=':\n    case '<>':\n      return `${field} <> ${fmtVal(value)}`;\n    case '<':\n    case '>':\n    case '<=':\n    case '>=':\n      return `${field} ${operatorTL} ${fmtVal(value)}`;\n    case 'contains':\n      return `${field} CONTAINS ${fmtVal(value)}`;\n    case 'doesnotcontain':\n      return `NOT ${field} CONTAINS ${fmtVal(value)}`;\n    case 'beginswith':\n      return `${field} STARTS WITH ${fmtVal(value)}`;\n    case 'doesnotbeginwith':\n      return `NOT ${field} STARTS WITH ${fmtVal(value)}`;\n    case 'endswith':\n      return `${field} ENDS WITH ${fmtVal(value)}`;\n    case 'doesnotendwith':\n      return `NOT ${field} ENDS WITH ${fmtVal(value)}`;\n    case 'null':\n      return `${field} IS NULL`;\n    case 'notnull':\n      return `${field} IS NOT NULL`;\n    case 'in':\n    case 'notin': {\n      const values = toArray(value).map(fmtVal);\n      if (!values.length) return '';\n      const prefix = operatorTL === 'notin' ? 'NOT ' : '';\n      return `${prefix}${field} IN [${values.join(', ')}]`;\n    }\n    case 'between':\n    case 'notbetween': {\n      const arr = toArray(value);\n      if (arr.length < 2) return '';\n      const [low, high] = [fmtVal(arr[0]), fmtVal(arr[1])];\n      const expr = `${low} <= ${field} AND ${field} <= ${high}`;\n      return operatorTL === 'notbetween' ? `NOT (${expr})` : expr;\n    }\n    default:\n      return `${field} ${operator} ${fmtVal(value)}`;\n  }\n};\n","import type { Column, Operators, SQL, SQLWrapper } from 'drizzle-orm';\nimport type { FormatQueryFinalOptions, RuleGroupType, RuleProcessor } from '../../types';\nimport { toArray } from '../arrayUtils';\nimport { lc } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport { transformQuery } from '../transformQuery';\nimport { defaultRuleGroupProcessorDrizzle } from './defaultRuleGroupProcessorDrizzle';\nimport {\n  getSubqueryElementAlias,\n  isValidValue,\n  processMatchMode,\n  shouldRenderAsNumber,\n} from './utils';\n\n/**\n * Default rule processor used by {@link formatQuery} for the \"drizzle\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorDrizzle: RuleProcessor = (rule, _options): SQL | undefined => {\n  const opts = _options ?? /* v8 ignore start -- @preserve */ {}; /* v8 ignore stop -- @preserve */\n  // v8 ignore next\n  const { parseNumbers, preserveValueOrder, context = {} } = opts;\n  const { columns, drizzleOperators, useRawFields } = context as {\n    columns: Record<string, Column>;\n    drizzleOperators: Operators;\n    useRawFields?: boolean;\n  };\n\n  if (!columns || !drizzleOperators) return undefined;\n\n  const {\n    between,\n    eq,\n    gt,\n    gte,\n    inArray,\n    isNotNull,\n    isNull,\n    like,\n    lt,\n    lte,\n    ne,\n    notBetween,\n    notInArray,\n    notLike,\n    sql,\n  } = drizzleOperators;\n\n  const { field, operator, value, valueSource } = rule;\n  const column =\n    useRawFields && /^[a-z_][a-z0-9_.]*$/i.test(field)\n      ? (sql.raw(field) as Exclude<SQLWrapper, SQL.Aliased | Column>)\n      : columns[field];\n  const operatorLC = lc(operator);\n\n  const valueIsField = valueSource === 'field';\n  const asFieldOrValue = (v: string | number) => (valueIsField ? columns[v] : v);\n\n  // Parse value as number when applicable\n  const maybeParseNumber = (v: unknown) => {\n    if (valueIsField || !parseNumbers) return asFieldOrValue(v as string);\n    return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;\n  };\n\n  if (!column) return undefined;\n\n  const matchEval = processMatchMode(rule);\n\n  if (matchEval === false) {\n    return undefined;\n  } else if (matchEval) {\n    // We only support PostgreSQL nested arrays\n    if (opts.preset !== 'postgresql') return undefined;\n\n    const { mode, threshold } = matchEval;\n\n    const subqueryDepth = opts.subqueryDepth ?? 0;\n    const arrayElementAlias = getSubqueryElementAlias(subqueryDepth);\n\n    const sqlQuery = transformQuery(rule.value as RuleGroupType, {\n      ruleProcessor: r => ({ ...r, field: arrayElementAlias }),\n    });\n\n    const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(sqlQuery, {\n      ...(opts as FormatQueryFinalOptions),\n      context: { ...opts.context, useRawFields: true },\n      subqueryDepth: subqueryDepth + 1,\n    });\n\n    switch (mode) {\n      case 'all':\n        return sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) = array_length(${column}, 1)`;\n\n      case 'none':\n        return sql`not exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;\n\n      case 'some':\n        return sql`exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;\n\n      case 'atleast':\n      case 'atmost':\n      case 'exactly': {\n        const op = mode === 'atleast' ? '>=' : mode === 'atmost' ? '<=' : '=';\n\n        return threshold > 0 && threshold < 1\n          ? sql`(select count(*)::float / array_length(${column}, 1) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}`\n          : sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}`;\n      }\n    }\n  }\n\n  switch (operatorLC) {\n    case '=':\n      return eq(column, maybeParseNumber(value));\n    case '!=':\n      return ne(column, maybeParseNumber(value));\n    case '>':\n      return gt(column, maybeParseNumber(value));\n    case '<':\n      return lt(column, maybeParseNumber(value));\n    case '>=':\n      return gte(column, maybeParseNumber(value));\n    case '<=':\n      return lte(column, maybeParseNumber(value));\n    case 'beginswith':\n    case 'doesnotbeginwith':\n      return (operatorLC === 'doesnotbeginwith' ? notLike : like)(\n        column as SQL,\n        valueIsField ? sql`${asFieldOrValue(value)} || '%'` : `${value}%`\n      );\n    case 'contains':\n    case 'doesnotcontain':\n      return (operatorLC === 'doesnotcontain' ? notLike : like)(\n        column as SQL,\n        valueIsField ? sql`'%' || ${asFieldOrValue(value)} || '%'` : `%${value}%`\n      );\n    case 'endswith':\n    case 'doesnotendwith':\n      return (operatorLC === 'doesnotendwith' ? notLike : like)(\n        column as SQL,\n        valueIsField ? sql`'%' || ${asFieldOrValue(value)}` : `%${value}`\n      );\n    case 'null':\n      return isNull(column);\n    case 'notnull':\n      return isNotNull(column);\n    case 'in':\n    case 'notin': {\n      const valueAsArray = toArray(value).map(v => maybeParseNumber(v));\n      return operatorLC === 'notin'\n        ? notInArray(column, valueAsArray)\n        : inArray(column, valueAsArray);\n    }\n    case 'between':\n    case 'notbetween': {\n      const valueAsArray = toArray(value);\n      if (\n        valueAsArray.length >= 2 &&\n        isValidValue(valueAsArray[0]) &&\n        isValidValue(valueAsArray[1])\n      ) {\n        type ColumnType = (typeof columns)[keyof typeof columns];\n        type ValueAsArray = (string | number | ColumnType)[];\n        let [first, second]: ValueAsArray = valueAsArray;\n        // For backwards compatibility, default to parsing numbers for between operators\n        // unless parseNumbers is explicitly set to false\n        const shouldParseNumbers = !(parseNumbers === false);\n        if (\n          !valueIsField &&\n          shouldRenderAsNumber(first, shouldParseNumbers) &&\n          shouldRenderAsNumber(second, shouldParseNumbers)\n        ) {\n          const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });\n          const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });\n          if (!preserveValueOrder && secondNum < firstNum) {\n            const tempNum = secondNum;\n            second = firstNum;\n            first = tempNum;\n          } else {\n            first = firstNum;\n            second = secondNum;\n          }\n        } else {\n          // v8 ignore else\n          if (valueIsField) {\n            first = asFieldOrValue(first);\n            second = asFieldOrValue(second);\n          }\n        }\n        return operatorLC === 'notbetween'\n          ? notBetween(column, first, second)\n          : between(column, first, second);\n      }\n      return undefined;\n    }\n    default:\n      return undefined;\n  }\n};\n","import type {\n  DefaultOperatorName,\n  FormatQueryFinalOptions,\n  RuleGroupType,\n  RuleProcessor,\n} from '../../types';\nimport { toArray } from '../arrayUtils';\nimport { lc } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport { transformQuery } from '../transformQuery';\nimport { defaultRuleGroupProcessorElasticSearch } from './defaultRuleGroupProcessorElasticSearch';\nimport { isValidValue, processMatchMode, shouldRenderAsNumber } from './utils';\n\ntype RangeOperator = 'gt' | 'gte' | 'lt' | 'lte';\ntype RangeRule = (\n  | { gt: string | number }\n  | { gte: string | number }\n  | { lt: string | number }\n  | { lte: string | number }\n) & { [k in RangeOperator]?: string | number };\ntype ElasticSearchRule =\n  | { range: Record<string, RangeRule> }\n  // oxlint-disable-next-line typescript/no-explicit-any\n  | { term: Record<string, any> }\n  | { exists: { field: string } }\n  | { regexp: { [k: string]: { value: string } } }\n  | { nested: { path: string; query: ElasticSearchQuery | ElasticSearchRule } };\ntype ElasticSearchQuery = {\n  bool:\n    | { filter: { script: { script: string } } }\n    | { must: ElasticSearchRule | ElasticSearchQuery | (ElasticSearchRule | ElasticSearchQuery)[] }\n    | {\n        must_not:\n          | ElasticSearchRule\n          | ElasticSearchQuery\n          | (ElasticSearchRule | ElasticSearchQuery)[];\n      }\n    | {\n        should: ElasticSearchRule | ElasticSearchQuery | (ElasticSearchRule | ElasticSearchQuery)[];\n      };\n};\n\nconst rangeOperatorMap = { '<': 'lt', '<=': 'lte', '>': 'gt', '>=': 'gte' } satisfies Record<\n  '<' | '<=' | '>' | '>=',\n  RangeOperator\n>;\n\nconst negateIfNotOp = (\n  op: string,\n  elasticSearchRule: ElasticSearchRule\n): ElasticSearchQuery | ElasticSearchRule =>\n  op.startsWith('not') || op.startsWith('doesnot')\n    ? { bool: { must_not: elasticSearchRule } }\n    : elasticSearchRule;\n\nconst escapeSQ = (s: string) => s?.replace(/('|\\\\)/g, `\\\\$1`);\n\nconst textFunctionMap: Partial<Record<Lowercase<DefaultOperatorName>, string>> = {\n  beginswith: 'startsWith',\n  doesnotbeginwith: 'startsWith',\n  doesnotcontain: 'contains',\n  doesnotendwith: 'endsWith',\n  endswith: 'endsWith',\n};\nconst getTextScript = (f: string, o: Lowercase<DefaultOperatorName>, v: string) => {\n  const script = `doc['${f}'].value.${textFunctionMap[o] ?? o}(doc['${v}'].value)`;\n  return o.startsWith('d') ? `!${script}` : script;\n};\n\nconst valueRenderer = (v: unknown, parseNumbers?: boolean) =>\n  typeof v === 'boolean'\n    ? v\n    : shouldRenderAsNumber(v, parseNumbers)\n      ? parseNumber(v, { parseNumbers })\n      : v;\n\n/**\n * Default rule processor used by {@link formatQuery} for \"elasticsearch\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorElasticSearch: RuleProcessor = (\n  rule,\n  options = {}\n): ElasticSearchQuery | ElasticSearchRule | false => {\n  const { field, operator, value, valueSource } = rule;\n  const { parseNumbers, preserveValueOrder } = options;\n  const operatorLC = lc(operator) as Lowercase<DefaultOperatorName>;\n\n  const matchEval = processMatchMode(rule);\n\n  if (matchEval === false) {\n    return false;\n  } else if (matchEval) {\n    const { mode } = matchEval;\n\n    const subQuery = defaultRuleGroupProcessorElasticSearch(\n      transformQuery(rule.value as RuleGroupType, {\n        ruleProcessor: r => ({ ...r, field: r.field ? `${field}.${r.field}` : field }),\n      }),\n      options as FormatQueryFinalOptions\n    ) as ElasticSearchQuery | ElasticSearchRule;\n\n    // If the subquery didn't produce valid output, return false\n    if (Object.keys(subQuery).length === 0) {\n      return false;\n    }\n\n    switch (mode) {\n      case 'some': {\n        return {\n          nested: {\n            path: field,\n            query: subQuery,\n          },\n        };\n      }\n\n      case 'none': {\n        return {\n          bool: {\n            must_not: {\n              nested: {\n                path: field,\n                query: subQuery,\n              },\n            },\n          },\n        };\n      }\n\n      // ElasticSearch nested queries match if _any_ nested document matches, so \"all\" is not supported\n      case 'all':\n      // Threshold modes require script-based filtering in ElasticSearch.\n      // We cannot easily express \"at least N matches\" with nested queries alone.\n      // For now, return false to indicate these modes are not fully supported.\n      // A full implementation would require aggregation or script queries.\n      case 'atleast':\n      case 'atmost':\n      case 'exactly': {\n        return false;\n      }\n    }\n  }\n\n  if (valueSource === 'field') {\n    // Bail out if not all values are strings\n    if (toArray(value).some(v => typeof v !== 'string')) return false;\n\n    const fieldForScript = escapeSQ(field);\n\n    switch (operatorLC) {\n      case '=':\n      case '!=':\n      case '>':\n      case '>=':\n      case '<':\n      case '<=': {\n        const operatorForScript = operatorLC === '=' ? '==' : operatorLC;\n        const valueForScript = escapeSQ(value);\n        return valueForScript\n          ? {\n              bool: {\n                filter: {\n                  script: {\n                    script: `doc['${fieldForScript}'].value ${operatorForScript} doc['${valueForScript}'].value`,\n                  },\n                },\n              },\n            }\n          : false;\n      }\n\n      case 'in':\n      case 'notin': {\n        const valueAsArray = toArray(value);\n        if (valueAsArray.length > 0) {\n          const arr = valueAsArray.map(v => ({\n            bool: {\n              filter: { script: { script: `doc['${fieldForScript}'].value == doc['${v}'].value` } },\n            },\n          }));\n          return { bool: operatorLC === 'in' ? { should: arr } : { must_not: arr } };\n        }\n        return false;\n      }\n\n      case 'between':\n      case 'notbetween': {\n        const valueAsArray = toArray(value);\n        if (valueAsArray.length >= 2 && valueAsArray[0] && valueAsArray[1]) {\n          const script = `doc['${fieldForScript}'].value >= doc['${valueAsArray[0]}'].value && doc['${fieldForScript}'].value <= doc['${valueAsArray[1]}'].value`;\n          return {\n            bool: {\n              filter: { script: { script: operatorLC === 'notbetween' ? `!(${script})` : script } },\n            },\n          };\n        }\n        return false;\n      }\n\n      case 'contains':\n      case 'doesnotcontain':\n      case 'beginswith':\n      case 'doesnotbeginwith':\n      case 'endswith':\n      case 'doesnotendwith': {\n        const valueForScript = escapeSQ(value);\n        if (!valueForScript) return false;\n        const script = getTextScript(fieldForScript, operatorLC, valueForScript);\n        return {\n          bool: {\n            filter: {\n              script: {\n                script,\n              },\n            },\n          },\n        };\n      }\n    }\n  }\n\n  switch (operatorLC) {\n    case '<':\n    case '<=':\n    case '>':\n    case '>=':\n      return {\n        range: {\n          [field]: {\n            [rangeOperatorMap[operatorLC]]: valueRenderer(value, parseNumbers),\n          } as RangeRule,\n        },\n      };\n\n    case '=':\n      return { term: { [field]: valueRenderer(value, parseNumbers) } };\n\n    case '!=':\n      return { bool: { must_not: { term: { [field]: valueRenderer(value, parseNumbers) } } } };\n\n    case 'null':\n      return { bool: { must_not: { exists: { field } } } };\n\n    case 'notnull':\n      return { exists: { field } };\n\n    case 'in':\n    case 'notin': {\n      const valueAsArray = toArray(value).map(v => valueRenderer(v, parseNumbers));\n      if (valueAsArray.length > 0) {\n        const arr = valueAsArray.map(v => ({ term: { [field]: valueRenderer(v, parseNumbers) } }));\n        return { bool: operatorLC === 'in' ? { should: arr } : { must_not: arr } };\n      }\n      return false;\n    }\n\n    case 'between':\n    case 'notbetween': {\n      const valueAsArray = toArray(value);\n      if (\n        valueAsArray.length >= 2 &&\n        isValidValue(valueAsArray[0]) &&\n        isValidValue(valueAsArray[1])\n      ) {\n        let [first, second] = valueAsArray;\n        // For backwards compatibility, default to parsing numbers for between operators\n        // unless parseNumbers is explicitly set to false\n        const shouldParseNumbers = !(parseNumbers === false);\n        if (\n          shouldRenderAsNumber(first, shouldParseNumbers) &&\n          shouldRenderAsNumber(second, shouldParseNumbers)\n        ) {\n          const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });\n          const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });\n          if (!preserveValueOrder && secondNum < firstNum) {\n            const tempNum = secondNum;\n            second = firstNum;\n            first = tempNum;\n          } else {\n            first = firstNum;\n            second = secondNum;\n          }\n        }\n        return negateIfNotOp(operatorLC, { range: { [field]: { gte: first, lte: second } } });\n      }\n      return false;\n    }\n\n    case 'contains':\n    case 'doesnotcontain':\n      return negateIfNotOp(operatorLC, { regexp: { [field]: { value: `.*${value}.*` } } });\n\n    case 'beginswith':\n    case 'doesnotbeginwith':\n      return negateIfNotOp(operatorLC, { regexp: { [field]: { value: `${value}.*` } } });\n\n    case 'endswith':\n    case 'doesnotendwith':\n      return negateIfNotOp(operatorLC, { regexp: { [field]: { value: `.*${value}` } } });\n  }\n  return false;\n};\n","import type { RuleProcessor } from '../../types';\nimport { toArray, trimIfString } from '../arrayUtils';\nimport { shouldRenderAsNumber } from './utils';\n\nconst escapeSingleQuotes = (v: unknown, escapeQuotes?: boolean) =>\n  typeof v !== 'string' || !escapeQuotes ? `${v}` : v.replaceAll(\"'\", \"\\\\'\");\n\n/**\n * Default rule processor used by {@link formatQuery} for \"gremlin\" format.\n *\n * Each rule becomes a `.has()` step (or `.hasNot()`/`.has()` for null checks).\n *\n * @group Export\n */\nexport const defaultRuleProcessorGremlin: RuleProcessor = (\n  rule,\n  // v8 ignore next\n  opts = {}\n) => {\n  const { escapeQuotes, parseNumbers } = opts;\n  const { field, operator, value, valueSource } = rule;\n  const valueIsField = valueSource === 'field';\n  const operatorTL = operator.toLowerCase();\n\n  // Gremlin uses the last segment of dotted field names as the property key\n  const prop = field.includes('.') ? field.split('.').pop()! : field;\n\n  const fmtVal = (v: unknown): string => {\n    if (v === null || v === undefined) return 'null';\n    if (typeof v === 'boolean' || typeof v === 'bigint') return String(v);\n    if (valueIsField) return trimIfString(v) as string;\n    if (typeof v === 'number' || shouldRenderAsNumber(v, parseNumbers))\n      return trimIfString(v) as string;\n    return `'${escapeSingleQuotes(v, escapeQuotes)}'`;\n  };\n\n  switch (operatorTL) {\n    case '=':\n      return `.has('${prop}', ${fmtVal(value)})`;\n    case '!=':\n    case '<>':\n      return `.has('${prop}', neq(${fmtVal(value)}))`;\n    case '<':\n      return `.has('${prop}', lt(${fmtVal(value)}))`;\n    case '>':\n      return `.has('${prop}', gt(${fmtVal(value)}))`;\n    case '<=':\n      return `.has('${prop}', lte(${fmtVal(value)}))`;\n    case '>=':\n      return `.has('${prop}', gte(${fmtVal(value)}))`;\n    case 'contains':\n      return `.has('${prop}', containing(${fmtVal(value)}))`;\n    case 'doesnotcontain':\n      return `.has('${prop}', notContaining(${fmtVal(value)}))`;\n    case 'beginswith':\n      return `.has('${prop}', startingWith(${fmtVal(value)}))`;\n    case 'doesnotbeginwith':\n      return `.has('${prop}', notStartingWith(${fmtVal(value)}))`;\n    case 'endswith':\n      return `.has('${prop}', endingWith(${fmtVal(value)}))`;\n    case 'doesnotendwith':\n      return `.has('${prop}', notEndingWith(${fmtVal(value)}))`;\n    case 'null':\n      return `.hasNot('${prop}')`;\n    case 'notnull':\n      return `.has('${prop}')`;\n    case 'in': {\n      const items = toArray(value).map(fmtVal);\n      if (!items.length) return '';\n      return `.has('${prop}', within(${items.join(', ')}))`;\n    }\n    case 'notin': {\n      const items = toArray(value).map(fmtVal);\n      if (!items.length) return '';\n      return `.has('${prop}', without(${items.join(', ')}))`;\n    }\n    case 'between': {\n      const arr = toArray(value);\n      if (arr.length < 2) return '';\n      return `.has('${prop}', between(${fmtVal(arr[0])}, ${fmtVal(arr[1])}))`;\n    }\n    case 'notbetween': {\n      const arr = toArray(value);\n      if (arr.length < 2) return '';\n      return `.has('${prop}', outside(${fmtVal(arr[0])}, ${fmtVal(arr[1])}))`;\n    }\n    default:\n      return `.has('${prop}', ${fmtVal(value)})`;\n  }\n};\n","import type { FormatQueryFinalOptions, RuleGroupType, RuleProcessor } from '../../types';\nimport { toArray, trimIfString } from '../arrayUtils';\nimport { lc, nullOrUndefinedOrEmpty } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport { transformQuery } from '../transformQuery';\nimport { defaultRuleGroupProcessorJSONata } from './defaultRuleGroupProcessorJSONata';\nimport { getQuotedFieldName, processMatchMode, shouldRenderAsNumber } from './utils';\n\nconst shouldNegate = (op: string) => op.startsWith('not') || op.startsWith('doesnot');\n\nconst quote = (v: unknown, escapeQuotes?: boolean) =>\n  `\"${typeof v !== 'string' || !escapeQuotes ? `${v}` : v.replaceAll(`\"`, `\\\\\"`)}\"`;\n\nconst negate = (clause: string, neg: boolean) => (neg ? `$not(${clause})` : clause);\n\nconst escapeStringRegex = (s: string) =>\n  `${s}`.replaceAll(/[/$()*+.?[\\\\\\]^{|}]/g, String.raw`\\$&`).replaceAll('-', String.raw`\\x2d`);\n\n/**\n * Default rule processor used by {@link formatQuery} for \"jsonata\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorJSONata: RuleProcessor = (\n  rule,\n  // v8 ignore next\n  options = {}\n) => {\n  const { field, operator, value, valueSource } = rule;\n  const {\n    escapeQuotes,\n    parseNumbers,\n    preserveValueOrder,\n    quoteFieldNamesWith = ['', ''] as [string, string],\n    fieldIdentifierSeparator = '',\n  } = options;\n\n  const valueIsField = valueSource === 'field';\n  const useBareValue =\n    typeof value === 'number' ||\n    typeof value === 'boolean' ||\n    typeof value === 'bigint' ||\n    shouldRenderAsNumber(value, parseNumbers);\n\n  const qfn = (f: unknown) =>\n    getQuotedFieldName(f as string, { quoteFieldNamesWith, fieldIdentifierSeparator });\n\n  const matchEval = processMatchMode(rule);\n\n  if (matchEval === false) {\n    return undefined;\n  } else if (matchEval) {\n    const { mode, threshold } = matchEval;\n\n    const totalCount = `$count(${qfn(field)})`;\n    const filteredCount = `$count($filter(${qfn(field)}, function($v) {${defaultRuleGroupProcessorJSONata(\n      transformQuery(value as RuleGroupType, {\n        ruleProcessor: r => ({ ...r, field: r.field ? `$v.${r.field}` : '$v' }),\n      }),\n      options as FormatQueryFinalOptions\n    )}}))`;\n\n    switch (mode) {\n      case 'all':\n        return `${filteredCount} = ${totalCount}`;\n\n      case 'none':\n        return `${filteredCount} = 0`;\n\n      case 'some':\n        return `${filteredCount} > 0`;\n\n      case 'atleast':\n      case 'atmost':\n      case 'exactly': {\n        const op = mode === 'atleast' ? '>=' : mode === 'atmost' ? '<=' : '=';\n\n        if (threshold > 0 && threshold < 1) {\n          return `${filteredCount} ${op} (${totalCount} * ${threshold})`;\n        }\n        return `${filteredCount} ${op} ${threshold}`;\n      }\n    }\n  }\n\n  const operatorLC = lc(operator);\n  switch (operatorLC) {\n    case '<':\n    case '<=':\n    case '=':\n    case '!=':\n    case '>':\n    case '>=':\n      return `${qfn(field)} ${operatorLC} ${\n        valueIsField\n          ? qfn(trimIfString(value))\n          : useBareValue\n            ? trimIfString(value)\n            : quote(value, escapeQuotes)\n      }`;\n\n    case 'contains':\n    case 'doesnotcontain':\n      return negate(\n        `$contains(${qfn(field)}, ${valueIsField ? qfn(trimIfString(value)) : quote(value, escapeQuotes)})`,\n        shouldNegate(operatorLC)\n      );\n\n    case 'beginswith':\n    case 'doesnotbeginwith':\n      return negate(\n        valueIsField\n          ? `$substring(${qfn(field)}, 0, $length(${qfn(trimIfString(value))})) = ${qfn(trimIfString(value))}`\n          : `$contains(${qfn(field)}, /^${escapeStringRegex(value)}/)`,\n        shouldNegate(operatorLC)\n      );\n\n    case 'endswith':\n    case 'doesnotendwith':\n      return negate(\n        valueIsField\n          ? `$substring(${qfn(field)}, $length(${qfn(field)}) - $length(${qfn(trimIfString(value))})) = ${qfn(trimIfString(value))}`\n          : `$contains(${qfn(field)}, /${escapeStringRegex(value)}$/)`,\n        shouldNegate(operatorLC)\n      );\n\n    case 'null':\n      return `${qfn(field)} = null`;\n\n    case 'notnull':\n      return `${qfn(field)} != null`;\n\n    case 'in':\n    case 'notin': {\n      const valueAsArray = toArray(value);\n      return negate(\n        `${qfn(field)} in [${valueAsArray\n          .map(val =>\n            valueIsField\n              ? `${qfn(trimIfString(val))}`\n              : shouldRenderAsNumber(val, parseNumbers)\n                ? `${trimIfString(val)}`\n                : quote(val, escapeQuotes)\n          )\n          .join(', ')}]`,\n        shouldNegate(operatorLC)\n      );\n    }\n\n    case 'between':\n    case 'notbetween': {\n      const valueAsArray = toArray(value);\n      if (\n        valueAsArray.length < 2 ||\n        nullOrUndefinedOrEmpty(valueAsArray[0]) ||\n        nullOrUndefinedOrEmpty(valueAsArray[1])\n      ) {\n        return '';\n      }\n\n      const [first, second] = valueAsArray;\n      // For backwards compatibility, default to parsing numbers for between operators\n      // unless parseNumbers is explicitly set to false\n      const shouldParseNumbers = !(parseNumbers === false);\n      const firstNum = shouldRenderAsNumber(first, shouldParseNumbers)\n        ? parseNumber(first, { parseNumbers: shouldParseNumbers })\n        : Number.NaN;\n      const secondNum = shouldRenderAsNumber(second, shouldParseNumbers)\n        ? parseNumber(second, { parseNumbers: shouldParseNumbers })\n        : Number.NaN;\n      let firstValue = Number.isNaN(firstNum) ? (valueIsField ? `${first}` : first) : firstNum;\n      let secondValue = Number.isNaN(secondNum) ? (valueIsField ? `${second}` : second) : secondNum;\n\n      if (\n        !preserveValueOrder &&\n        firstValue === firstNum &&\n        secondValue === secondNum &&\n        secondNum < firstNum\n      ) {\n        const tempNum = secondNum;\n        secondValue = firstNum;\n        firstValue = tempNum;\n      }\n\n      const renderAsNumbers =\n        shouldRenderAsNumber(first, parseNumbers) && shouldRenderAsNumber(second, parseNumbers);\n      const getValueString = (raw: unknown, val: string | number) =>\n        valueIsField ? qfn(raw) : renderAsNumbers ? val : quote(val, escapeQuotes);\n\n      const expression = `${qfn(field)} >= ${getValueString(first, firstValue)} and ${qfn(field)} <= ${getValueString(second, secondValue)}`;\n\n      return operatorLC === 'between' ? `(${expression})` : negate(expression, true);\n    }\n  }\n\n  return '';\n};\n","import type {\n  FormatQueryFinalOptions,\n  JsonLogicVar,\n  RQBJsonLogic,\n  RuleProcessor,\n} from '../../types';\nimport { toArray } from '../arrayUtils';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { lc } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport { defaultRuleGroupProcessorJsonLogic } from './defaultRuleGroupProcessorJsonLogic';\nimport { isValidValue, processMatchMode, shouldRenderAsNumber } from './utils';\n\nconst convertOperator = (op: '<' | '<=' | '=' | '!=' | '>' | '>=') =>\n  op\n    .replace(/^(=)$/, '$1=')\n    .replace(/^notnull$/i, '!=')\n    .replace(/^null$/i, '==') as '<' | '<=' | '==' | '!=' | '===' | '!==' | '>' | '>=';\n\nconst negateIfNotOp = (op: string, jsonRule: RQBJsonLogic) =>\n  op.startsWith('not') || op.startsWith('doesnot') ? { '!': jsonRule } : jsonRule;\n\n/**\n * Default rule processor used by {@link formatQuery} for \"jsonlogic\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorJsonLogic: RuleProcessor = (rule, options = {}): RQBJsonLogic => {\n  const { field, operator, value, valueSource } = rule;\n  const { parseNumbers, preserveValueOrder } = options;\n  const valueIsField = valueSource === 'field';\n  const fieldObject: JsonLogicVar = { var: field };\n  const fieldOrNumberRenderer = (v: unknown) =>\n    valueIsField\n      ? { var: `${v}` }\n      : shouldRenderAsNumber(v, parseNumbers)\n        ? parseNumber(v, { parseNumbers })\n        : v;\n\n  const matchEval = processMatchMode(rule);\n\n  if (matchEval === false) {\n    return false;\n  } else if (matchEval) {\n    const { mode, threshold } = matchEval;\n\n    switch (mode) {\n      case 'all':\n      case 'none':\n      case 'some':\n        return {\n          [mode]: [\n            { var: field },\n            value.rules.length === 1 && !isRuleGroup(value.rules[0])\n              ? defaultRuleProcessorJsonLogic(value.rules[0], options)\n              : defaultRuleGroupProcessorJsonLogic(value, options as FormatQueryFinalOptions),\n          ],\n        } as RQBJsonLogic;\n\n      case 'atleast':\n      case 'atmost':\n      case 'exactly': {\n        const op = mode === 'atleast' ? '>=' : mode === 'atmost' ? '<=' : '==';\n\n        const filteredCount = {\n          reduce: [\n            {\n              filter: [\n                { var: field },\n                value.rules.length === 1 && !isRuleGroup(value.rules[0])\n                  ? defaultRuleProcessorJsonLogic(value.rules[0], options)\n                  : defaultRuleGroupProcessorJsonLogic(value, options as FormatQueryFinalOptions),\n              ],\n            },\n            { '+': [1, { var: 'accumulator' }] },\n            0,\n          ],\n        };\n\n        if (threshold > 0 && threshold < 1) {\n          const totalCount = {\n            reduce: [{ var: field }, { '+': [1, { var: 'accumulator' }] }, 0],\n          };\n          return { [op]: [filteredCount, { '*': [totalCount, threshold] }] } as RQBJsonLogic;\n        }\n        return { [op]: [filteredCount, threshold] } as RQBJsonLogic;\n      }\n    }\n  }\n\n  const operatorLC = lc(operator);\n  switch (operatorLC) {\n    case '<':\n    case '<=':\n    case '=':\n    case '!=':\n    case '>':\n    case '>=':\n      return {\n        [convertOperator(operatorLC)]: [fieldObject, fieldOrNumberRenderer(value)],\n      } as RQBJsonLogic;\n\n    case 'null':\n    case 'notnull': {\n      return {\n        [`${operatorLC === 'notnull' ? '!' : '='}=`]: [fieldObject, null],\n      } as RQBJsonLogic;\n    }\n\n    case 'in':\n    case 'notin': {\n      const valueAsArray = toArray(value).map(v => fieldOrNumberRenderer(v));\n      return negateIfNotOp(operatorLC, { in: [fieldObject, valueAsArray] });\n    }\n\n    case 'between':\n    case 'notbetween': {\n      const valueAsArray = toArray(value);\n      if (\n        valueAsArray.length >= 2 &&\n        isValidValue(valueAsArray[0]) &&\n        isValidValue(valueAsArray[1])\n      ) {\n        type ValueAsArray = (string | number | { var: string | number })[];\n        let [first, second]: ValueAsArray = valueAsArray;\n        // For backwards compatibility, default to parsing numbers for between operators\n        // unless parseNumbers is explicitly set to false\n        const shouldParseNumbers = !(parseNumbers === false);\n        if (\n          !valueIsField &&\n          shouldRenderAsNumber(first, shouldParseNumbers) &&\n          shouldRenderAsNumber(second, shouldParseNumbers)\n        ) {\n          const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });\n          const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });\n          if (!preserveValueOrder && secondNum < firstNum) {\n            const tempNum = secondNum;\n            second = firstNum;\n            first = tempNum;\n          } else {\n            first = firstNum;\n            second = secondNum;\n          }\n        } else if (valueIsField) {\n          first = { var: first };\n          second = { var: second };\n        }\n        const jsonRule: RQBJsonLogic = { '<=': [first, fieldObject, second] };\n        return negateIfNotOp(operatorLC, jsonRule);\n      }\n      return false;\n    }\n\n    case 'contains':\n    case 'doesnotcontain': {\n      const jsonRule: RQBJsonLogic = {\n        in: [fieldOrNumberRenderer(value), fieldObject],\n      };\n      return negateIfNotOp(operatorLC, jsonRule);\n    }\n\n    case 'beginswith':\n    case 'doesnotbeginwith': {\n      const jsonRule: RQBJsonLogic = {\n        startsWith: [fieldObject, fieldOrNumberRenderer(value)],\n      };\n      return negateIfNotOp(operatorLC, jsonRule);\n    }\n\n    case 'endswith':\n    case 'doesnotendwith': {\n      const jsonRule: RQBJsonLogic = {\n        endsWith: [fieldObject, fieldOrNumberRenderer(value)],\n      };\n      return negateIfNotOp(operatorLC, jsonRule);\n    }\n  }\n  return false;\n};\n","import type { RuleProcessor } from '../../types';\nimport { toArray, trimIfString } from '../arrayUtils';\nimport { lc, nullOrUndefinedOrEmpty } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport { processMatchMode, shouldRenderAsNumber } from './utils';\n\nconst negateIf = (clause: string, negate: boolean) => (negate ? `(!${clause})` : `${clause}`);\n\nconst ldapEscape = (s: unknown) =>\n  `${trimIfString(s)}`.replaceAll(\n    /[()&|=<>~*\\\\/]/g,\n    (m: string) => `\\\\${m.codePointAt(0)!.toString(16)}`\n  );\n\n/**\n * Default rule processor used by {@link formatQuery} for \"ldap\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorLDAP: RuleProcessor = (\n  rule,\n  // v8 ignore next\n  options = {}\n) => {\n  const { field, operator, value, valueSource } = rule;\n  const { preserveValueOrder } = options;\n  const operatorLC = lc(operator);\n\n  // Bail out if...\n  if (\n    // This is a field comparison (which LDAP does not support), or\n    valueSource === 'field' ||\n    // `value` is null/undefined/empty and the operator is not unary, or\n    (nullOrUndefinedOrEmpty(value) && operatorLC !== 'null' && operatorLC !== 'notnull') ||\n    // a valid `match` property is found (match modes are not supported in this format)\n    processMatchMode(rule)\n  ) {\n    return '';\n  }\n\n  switch (operatorLC) {\n    case '=':\n    case '!=':\n      return negateIf(`(${field}=${ldapEscape(value)})`, operatorLC === '!=');\n\n    case '>':\n    case '>=':\n      return `(${field}>=${ldapEscape(value)})`;\n\n    case '<':\n    case '<=':\n      return `(${field}<=${ldapEscape(value)})`;\n\n    case 'contains':\n    case 'doesnotcontain':\n      return negateIf(`(${field}=*${ldapEscape(value)}*)`, operatorLC === 'doesnotcontain');\n\n    case 'beginswith':\n    case 'doesnotbeginwith':\n      return negateIf(`(${field}=${ldapEscape(value)}*)`, operatorLC === 'doesnotbeginwith');\n\n    case 'endswith':\n    case 'doesnotendwith':\n      return negateIf(`(${field}=*${ldapEscape(value)})`, operatorLC === 'doesnotendwith');\n\n    case 'null':\n    case 'notnull':\n      return negateIf(`(${field}=*)`, operatorLC === 'notnull');\n\n    case 'in':\n    case 'notin': {\n      const valueAsArray = toArray(value);\n      return negateIf(\n        `(|${valueAsArray.map(val => `(${field}=${ldapEscape(val)})`).join('')})`,\n        operatorLC === 'notin'\n      );\n    }\n\n    case 'between':\n    case 'notbetween': {\n      const valueAsArray = toArray(value);\n      if (\n        valueAsArray.length < 2 ||\n        nullOrUndefinedOrEmpty(valueAsArray[0]) ||\n        nullOrUndefinedOrEmpty(valueAsArray[1])\n      ) {\n        return '';\n      }\n\n      const [first, second] = valueAsArray;\n      const firstNum = shouldRenderAsNumber(first, true)\n        ? parseNumber(first, { parseNumbers: true })\n        : Number.NaN;\n      const secondNum = shouldRenderAsNumber(second, true)\n        ? parseNumber(second, { parseNumbers: true })\n        : Number.NaN;\n      let firstValue = Number.isNaN(firstNum) ? first : firstNum;\n      let secondValue = Number.isNaN(secondNum) ? second : secondNum;\n\n      if (\n        !preserveValueOrder &&\n        firstValue === firstNum &&\n        secondValue === secondNum &&\n        secondNum < firstNum\n      ) {\n        const tempNum = secondNum;\n        secondValue = firstNum;\n        firstValue = tempNum;\n      }\n\n      return negateIf(\n        `(&(${field}>=${ldapEscape(firstValue)})(${field}<=${ldapEscape(secondValue)}))`,\n        operatorLC === 'notbetween'\n      );\n    }\n  }\n\n  // v8 ignore next\n  return '';\n};\n","import type { FullField, ValueProcessorByRule } from '../../types';\nimport { toArray, trimIfString } from '../arrayUtils';\nimport { lc } from '../misc';\nimport { getOption } from '../optGroupUtils';\nimport { defaultValueProcessorByRule } from './defaultValueProcessorByRule';\nimport { getQuotedFieldName, isValidValue, shouldRenderAsNumber } from './utils';\n\nconst escapeStringValueQuotes = (v: unknown, quoteChar: string, escapeQuotes?: boolean) =>\n  escapeQuotes && typeof v === 'string'\n    ? v.replaceAll(`${quoteChar}`, `${quoteChar}${quoteChar}`)\n    : /* v8 ignore next -- @preserve */ v;\n\n/**\n * Default value processor used by {@link formatQuery} for \"natural_language\" format.\n *\n * @group Export\n */\nexport const defaultValueProcessorNL: ValueProcessorByRule = (\n  rule,\n  // v8 ignore next - defaultRuleProcessorNL always provides options\n  opts = {}\n) => {\n  const {\n    escapeQuotes,\n    fields,\n    parseNumbers,\n    quoteFieldNamesWith,\n    quoteValuesWith,\n    fieldIdentifierSeparator,\n    translations,\n  } = opts;\n  const valueIsField = rule.valueSource === 'field';\n  const operatorLowerCase = lc(rule.operator);\n  const quoteChar =\n    quoteValuesWith || /* v8 ignore start -- @preserve */ \"'\"; /* v8 ignore stop -- @preserve */\n\n  const quoteValue = (v: unknown) => `${quoteChar}${v}${quoteChar}`;\n  const escapeValue = (v: unknown) => escapeStringValueQuotes(v, quoteChar, escapeQuotes);\n  const wrapAndEscape = (v: unknown) => quoteValue(escapeValue(v));\n  const wrapFieldName = (v: string) =>\n    getQuotedFieldName(v, { quoteFieldNamesWith, fieldIdentifierSeparator });\n\n  const t = translations ?? /* v8 ignore start -- @preserve */ {}; /* v8 ignore stop -- @preserve */\n  const orTL = t.or ?? 'or';\n  const trueTL = t.true ?? 'true';\n  const falseTL = t.false ?? 'false';\n  const listSep = t.listSeparator ?? ', ';\n  const useOxfordComma = !t.listSeparator;\n\n  switch (operatorLowerCase) {\n    case 'null':\n    case 'notnull': {\n      return '';\n    }\n\n    case 'between':\n    case 'notbetween': {\n      if (!valueIsField) {\n        return defaultValueProcessorByRule(rule, opts);\n      }\n\n      const valueAsArray = toArray(rule.value, { retainEmptyStrings: true })\n        .slice(0, 2)\n        .map(v =>\n          wrapFieldName(\n            getOption(\n              (fields as FullField[]) ??\n                /* v8 ignore start -- @preserve */ [] /* v8 ignore stop -- @preserve */,\n              v\n            )?.label ?? v\n          )\n        );\n      if (\n        valueAsArray.length < 2 ||\n        !isValidValue(valueAsArray[0]) ||\n        !isValidValue(valueAsArray[1])\n      ) {\n        return '';\n      }\n      return defaultValueProcessorByRule({ ...rule, value: valueAsArray }, opts);\n    }\n\n    case 'in':\n    case 'notin': {\n      const valueAsArray = toArray(rule.value);\n      if (valueAsArray.length === 0) return '';\n      const valStringArray = valueAsArray.map(v =>\n        valueIsField\n          ? wrapFieldName(\n              getOption(\n                (fields as FullField[]) ??\n                  /* v8 ignore start -- @preserve */ [] /* v8 ignore stop -- @preserve */,\n                v\n              )?.label ?? v\n            )\n          : shouldRenderAsNumber(v, parseNumbers)\n            ? `${trimIfString(v)}`\n            : `${wrapAndEscape(v)}`\n      );\n      if (valStringArray.length === 1) {\n        return valStringArray[0];\n      }\n      const oxfordComma = useOxfordComma && valStringArray.length > 2 ? ',' : '';\n      const list = `${valStringArray.slice(0, -1).join(listSep)}${oxfordComma} ${orTL} ${valStringArray.at(-1)}`;\n      return `(${list})`;\n    }\n  }\n\n  if (typeof rule.value === 'boolean') {\n    return rule.value ? trueTL : falseTL;\n  }\n\n  return valueIsField\n    ? wrapFieldName(\n        getOption(\n          (fields as FullField[]) ??\n            /* v8 ignore start -- @preserve */ [] /* v8 ignore stop -- @preserve */,\n          rule.value\n        )?.label ?? rule.value\n      )\n    : shouldRenderAsNumber(rule.value, parseNumbers)\n      ? `${trimIfString(rule.value)}`\n      : `${wrapAndEscape(rule.value)}`;\n};\n","import type {\n  DefaultOperatorName,\n  ExportOperatorMap,\n  FormatQueryFinalOptions,\n  FullOption,\n  RuleProcessor,\n} from '../../types';\nimport { toArray } from '../arrayUtils';\nimport { lc } from '../misc';\nimport { getOption, toFullOptionList } from '../optGroupUtils';\nimport { defaultRuleGroupProcessorNL } from './defaultRuleGroupProcessorNL';\nimport { defaultValueProcessorNL } from './defaultValueProcessorNL';\nimport { getQuotedFieldName, normalizeConstituentWordOrder, processMatchMode } from './utils';\n\n/**\n * Default operator map used by {@link formatQuery} for \"natural_language\" format.\n *\n * @group Export\n */\nexport const defaultExportOperatorMap: ExportOperatorMap = {\n  '=': ['is', 'is the same as the value in'],\n  '!=': ['is not', 'is not the same as the value in'],\n  '<': ['is less than', 'is less than the value in'],\n  '>': ['is greater than', 'is greater than the value in'],\n  '<=': ['is less than or equal to', 'is less than or equal to the value in'],\n  '>=': ['is greater than or equal to', 'is greater than or equal to the value in'],\n  contains: ['contains', 'contains the value in'],\n  beginswith: ['starts with', 'starts with the value in'],\n  endswith: ['ends with', 'ends with the value in'],\n  doesnotcontain: ['does not contain', 'does not contain the value in'],\n  doesnotbeginwith: ['does not start with', 'does not start with the value in'],\n  doesnotendwith: ['does not end with', 'does not end with the value in'],\n  null: 'is null',\n  notnull: 'is not null',\n  in: ['is one of the values', 'is the same as a value in'],\n  notin: ['is not one of the values', 'is not the same as any value in'],\n  between: ['is between', 'is between the values in'],\n  notbetween: ['is not between', 'is not between the values in'],\n};\n\n/* v8 ignore next -- @preserve */\nconst defaultGetOperators = () => [];\n\n/**\n * Default operator processor used by {@link formatQuery} for \"natural_language\" format.\n *\n * @group Export\n */\nexport const defaultOperatorProcessorNL: RuleProcessor = (\n  rule,\n  // v8 ignore next\n  opts = {}\n) => {\n  const { field, operator, valueSource = 'value' } = rule;\n  // v8 ignore next\n  const {\n    getOperators = defaultGetOperators,\n    operatorMap: operatorMapParam = defaultExportOperatorMap,\n  } = opts;\n\n  // Build the merged operator map (default + custom overrides)\n  const mergedOperatorMap = new Map<string, string | [string, string]>(\n    Object.entries(defaultExportOperatorMap)\n  );\n  for (const [key, value] of Object.entries(operatorMapParam)) {\n    mergedOperatorMap.set(lc(key), value);\n  }\n  const operatorMap = Object.fromEntries(mergedOperatorMap);\n\n  // For single-valued in/notin, use the = or != operator labels for clarity\n  const operatorLC = lc(operator);\n\n  var normalizedOperator = operator;\n\n  const hasSingleValue = toArray(rule.value).length === 1;\n\n  if (operatorLC === 'in' && hasSingleValue) {\n    normalizedOperator = '=';\n  } else if (operatorLC === 'notin' && hasSingleValue) {\n    normalizedOperator = '!=';\n  }\n\n  const { value: operatorNL, label } = getOption(\n    toFullOptionList(\n      getOperators(field, {\n        fieldData: opts.fieldData ?? {\n          name: field,\n          value: field,\n          label: field,\n        },\n      }) ?? /* v8 ignore start -- @preserve */ [] /* v8 ignore stop -- @preserve */\n    ) as FullOption[],\n    normalizedOperator\n  ) ?? {\n    name: normalizedOperator,\n    value: normalizedOperator,\n    label: normalizedOperator,\n  };\n\n  // Retrieve the natural language translation for the operator\n  const operatorTL = operatorMap[operatorNL as DefaultOperatorName] ??\n    operatorMap[lc(operatorNL) as Lowercase<DefaultOperatorName>] ?? [label, label];\n\n  // Return field-aware translation (e.g., \"is\" vs \"is the same as the value in\")\n  return typeof operatorTL === 'string' ? operatorTL : operatorTL[valueSource === 'field' ? 1 : 0];\n};\n\n/**\n * Default rule processor used by {@link formatQuery} for \"natural_language\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorNL: RuleProcessor = (rule, opts) => {\n  const { field, operator } = rule;\n  // v8 ignore next\n  const {\n    fieldData,\n    quoteFieldNamesWith = ['', ''] as [string, string],\n    fieldIdentifierSeparator = '',\n    quoteValuesWith = `'`,\n    operatorProcessor = defaultOperatorProcessorNL,\n    valueProcessor = defaultValueProcessorNL,\n    concatOperator = '||',\n    wordOrder = 'SVO',\n  } = opts ?? /* v8 ignore start -- @preserve */ {}; /* v8 ignore stop -- @preserve */\n\n  const processedField = getQuotedFieldName(fieldData?.label ?? field, {\n    quoteFieldNamesWith,\n    fieldIdentifierSeparator,\n  });\n\n  const matchEval = processMatchMode(rule);\n\n  if (matchEval === false) {\n    return '';\n  } else if (matchEval) {\n    const { mode, threshold } = matchEval;\n\n    const nestedArrayFilter = defaultRuleGroupProcessorNL(rule.value, {\n      ...(opts as FormatQueryFinalOptions),\n      fields: toFullOptionList(fieldData?.subproperties ?? []),\n    });\n\n    // (H)as (S)ub(P)roperties\n    const hsp = (fieldData?.subproperties?.length ?? 0) > 0;\n\n    switch (mode) {\n      case 'all':\n        return `(${hsp ? 'for ' : ''}every item in ${processedField}${hsp ? ',' : ''} ${nestedArrayFilter})`;\n\n      case 'none':\n        return `(${hsp ? 'for ' : ''}no item in ${processedField}${hsp ? ',' : ''} ${nestedArrayFilter})`;\n\n      case 'some':\n        return `(${hsp ? 'for ' : ''}at least one item in ${processedField}${hsp ? ',' : ''} ${nestedArrayFilter})`;\n\n      case 'atleast':\n      case 'atmost':\n      case 'exactly': {\n        const mm = mode.replace('at', 'at ');\n        if (threshold > 0 && threshold < 1) {\n          return `(${hsp ? 'for ' : ''}${mm} ${threshold * 100}% of the items in ${processedField}${hsp ? ',' : ''} ${nestedArrayFilter})`;\n        }\n        return `(${hsp ? 'for ' : ''}${mm} ${threshold} of the items in ${processedField}${hsp ? ',' : ''} ${nestedArrayFilter})`;\n      }\n    }\n  }\n\n  const value = valueProcessor(rule, {\n    ...opts,\n    quoteFieldNamesWith,\n    fieldIdentifierSeparator,\n    quoteValuesWith,\n    concatOperator,\n  });\n\n  const operatorLC = lc(operator);\n  if (\n    (operatorLC === 'in' ||\n      operatorLC === 'notin' ||\n      operatorLC === 'between' ||\n      operatorLC === 'notbetween') &&\n    !value\n  ) {\n    return '';\n  }\n\n  const processedOperator = operatorProcessor(rule, opts);\n\n  const wordOrderMap = {\n    S: processedField,\n    V: processedOperator,\n    O: value,\n  };\n\n  const translations = opts?.translations ?? {};\n  const suffixMap: Record<string, string> = {\n    S: translations.afterSubject ?? ' ',\n    V: translations.afterVerb ?? ' ',\n    O: translations.afterObject ?? ' ',\n  };\n\n  const wordOrderTuple = normalizeConstituentWordOrder(wordOrder).filter(\n    term => wordOrderMap[term] !== ''\n  );\n  return wordOrderTuple\n    .map(\n      (term, i) => `${wordOrderMap[term]}${i < wordOrderTuple.length - 1 ? suffixMap[term] : ''}`\n    )\n    .join('')\n    .trim();\n};\n","import type { FormatQueryFinalOptions, RuleGroupType, RuleProcessor } from '../../types';\nimport { lc } from '../misc';\nimport { transformQuery } from '../transformQuery';\nimport { defaultRuleGroupProcessorSQL } from './defaultRuleGroupProcessorSQL';\nimport { defaultValueProcessorByRule } from './defaultValueProcessorByRule';\nimport {\n  getQuotedFieldName,\n  getSubqueryElementAlias,\n  mapSQLOperator,\n  processMatchMode,\n} from './utils';\n\n/**\n * Default operator processor used by {@link formatQuery} for \"sql\" and \"parameterized*\" formats.\n *\n * @group Export\n */\nexport const defaultOperatorProcessorSQL: RuleProcessor = rule => lc(mapSQLOperator(rule.operator));\n\n/**\n * Default rule processor used by {@link formatQuery} for \"sql\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorSQL: RuleProcessor = (rule, opts = {}) => {\n  const {\n    quoteFieldNamesWith = ['', ''] as [string, string],\n    fieldIdentifierSeparator = '',\n    quoteValuesWith = `'`,\n    operatorProcessor = defaultOperatorProcessorSQL,\n    valueProcessor = defaultValueProcessorByRule,\n    concatOperator = '||',\n  } = opts;\n\n  const wrapFieldName = (v: string) =>\n    getQuotedFieldName(v, { quoteFieldNamesWith, fieldIdentifierSeparator });\n\n  const ruleField = wrapFieldName(rule.field);\n\n  const matchEval = processMatchMode(rule);\n\n  if (matchEval === false) {\n    return undefined;\n  } else if (matchEval) {\n    // We only support PostgreSQL nested arrays\n    if (opts?.preset !== 'postgresql') return '';\n\n    const { mode, threshold } = matchEval;\n\n    const subqueryDepth = opts.subqueryDepth ?? 0;\n    const arrayElementAlias = getSubqueryElementAlias(subqueryDepth);\n\n    const nestedArrayFilter = defaultRuleGroupProcessorSQL(\n      transformQuery(rule.value as RuleGroupType, {\n        ruleProcessor: r => ({ ...r, field: arrayElementAlias }),\n      }),\n      { ...(opts as FormatQueryFinalOptions), subqueryDepth: subqueryDepth + 1 }\n    );\n\n    switch (mode) {\n      case 'all':\n        return `(select count(*) from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedArrayFilter}) = array_length(${ruleField}, 1)`;\n\n      case 'none':\n        return `not exists (select 1 from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedArrayFilter})`;\n\n      case 'some':\n        return `exists (select 1 from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedArrayFilter})`;\n\n      case 'atleast':\n      case 'atmost':\n      case 'exactly': {\n        const op = mode === 'atleast' ? '>=' : mode === 'atmost' ? '<=' : '=';\n\n        return `(select count(*)${threshold > 0 && threshold < 1 ? `::float / array_length(${ruleField}, 1)` : ''} from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedArrayFilter}) ${op} ${threshold}`;\n      }\n    }\n  }\n\n  const value = valueProcessor(rule, {\n    ...opts,\n    quoteFieldNamesWith,\n    fieldIdentifierSeparator,\n    quoteValuesWith,\n    concatOperator,\n  });\n\n  const operator = operatorProcessor(rule, opts);\n\n  const operatorLowerCase = lc(operator);\n  if (\n    (operatorLowerCase === 'in' ||\n      operatorLowerCase === 'not in' ||\n      operatorLowerCase === 'between' ||\n      operatorLowerCase === 'not between') &&\n    !value\n  ) {\n    return '';\n  }\n\n  return `${ruleField} ${operator} ${value}`.trim();\n};\n","import type { FormatQueryFinalOptions, FullField, RuleGroupType, RuleProcessor } from '../../types';\nimport { toArray } from '../arrayUtils';\nimport { lc } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport { transformQuery } from '../transformQuery';\nimport { defaultRuleGroupProcessorParameterized } from './defaultRuleGroupProcessorParameterized';\nimport { defaultOperatorProcessorSQL } from './defaultRuleProcessorSQL';\nimport { defaultValueProcessorByRule } from './defaultValueProcessorByRule';\nimport {\n  getQuotedFieldName,\n  getSubqueryElementAlias,\n  processMatchMode,\n  shouldRenderAsNumber,\n  stripParamPrefix,\n  withParamPrefix,\n  wrapLikeFragment,\n} from './utils';\n\n/**\n * Default rule processor used by {@link formatQuery} for \"parameterized\" and\n * \"parameterized_named\" formats.\n *\n * @group Export\n */\nexport const defaultRuleProcessorParameterized: RuleProcessor = (rule, opts, meta) => {\n  // v8 ignore next\n  const {\n    fieldData,\n    format,\n    getNextNamedParam,\n    parseNumbers,\n    paramPrefix,\n    paramsKeepPrefix,\n    numberedParams,\n    quoteFieldNamesWith = ['', ''] as [string, string],\n    fieldIdentifierSeparator,\n    concatOperator,\n    operatorProcessor = defaultOperatorProcessorSQL,\n    valueProcessor = defaultValueProcessorByRule,\n  } = opts ?? {};\n\n  const { processedParams = [] } = meta ?? {};\n\n  const parameterized = format === 'parameterized';\n  // oxlint-disable-next-line typescript/no-explicit-any\n  const params: any[] = [];\n  // oxlint-disable-next-line typescript/no-explicit-any\n  const paramsNamed: Record<string, any> = {};\n\n  const finalize = (sql: string) =>\n    parameterized ? { sql, params } : { sql, params: paramsNamed };\n\n  const wrapFieldName = (v: string) =>\n    getQuotedFieldName(v, { quoteFieldNamesWith, fieldIdentifierSeparator });\n\n  const ruleField = wrapFieldName(rule.field);\n\n  const matchEval = processMatchMode(rule);\n\n  /* v8 ignore start -- @preserve */\n  if (matchEval === false) {\n    return undefined;\n  } else if (matchEval) {\n    // We only support PostgreSQL nested arrays\n    if (opts?.preset !== 'postgresql') return finalize('');\n\n    const { mode, threshold } = matchEval;\n\n    const subqueryDepth = opts.subqueryDepth ?? 0;\n    const arrayElementAlias = getSubqueryElementAlias(subqueryDepth);\n\n    const { sql: nestedSQL, params: nestedParams } = defaultRuleGroupProcessorParameterized(\n      transformQuery(rule.value as RuleGroupType, {\n        ruleProcessor: r => ({ ...r, field: arrayElementAlias }),\n      }),\n      {\n        ...(opts as FormatQueryFinalOptions),\n        fields: [] as FullField[],\n        subqueryDepth: subqueryDepth + 1,\n      }\n    );\n    // Ignore the \"parameterized_named\" case because PostgreSQL doesn't support named parameters\n    if (Array.isArray(nestedParams)) {\n      params.push(...nestedParams);\n    } else {\n      Object.assign(paramsNamed, nestedParams);\n    }\n\n    switch (mode) {\n      case 'all':\n        return finalize(\n          `(select count(*) from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedSQL}) = array_length(${ruleField}, 1)`\n        );\n\n      case 'none':\n        return finalize(\n          `not exists (select 1 from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedSQL})`\n        );\n\n      case 'some':\n        return finalize(\n          `exists (select 1 from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedSQL})`\n        );\n\n      case 'atleast':\n      case 'atmost':\n      case 'exactly': {\n        const op = mode === 'atleast' ? '>=' : mode === 'atmost' ? '<=' : '=';\n\n        return finalize(\n          `(select count(*)${threshold > 0 && threshold < 1 ? `::float / array_length(${ruleField}, 1)` : ''} from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedSQL}) ${op} ${threshold}`\n        );\n      }\n    }\n  }\n  /* v8 ignore stop -- @preserve */\n\n  const value = valueProcessor(rule, {\n    parseNumbers,\n    quoteFieldNamesWith,\n    concatOperator,\n    fieldData,\n    format,\n  });\n\n  const sqlOperator = operatorProcessor(rule, opts);\n  const sqlOperatorLowerCase = lc(sqlOperator);\n  const [qPre, qPost] = quoteFieldNamesWith;\n\n  if (\n    (sqlOperatorLowerCase === 'in' ||\n      sqlOperatorLowerCase === 'not in' ||\n      sqlOperatorLowerCase === 'between' ||\n      sqlOperatorLowerCase === 'not between') &&\n    !value\n  ) {\n    return finalize('');\n  } else if (sqlOperatorLowerCase === 'is null' || sqlOperatorLowerCase === 'is not null') {\n    return finalize(`${qPre}${rule.field}${qPost} ${sqlOperator}`);\n  } else if (rule.valueSource === 'parameter') {\n    // Named-parameter reference: emit inline (binding supplied externally). For\n    // \"parameterized_named\", register the key(s) with a `null` placeholder so callers\n    // can see which bindings are expected (and so the key survives `JSON.stringify`,\n    // which drops `undefined`). Positional \"parameterized\" leaves `params` untouched\n    // to avoid desyncing placeholder indices.\n    const registerParam = (v: unknown) => {\n      const ref = withParamPrefix(v, paramPrefix);\n      if (!parameterized) {\n        paramsNamed[paramsKeepPrefix ? ref : stripParamPrefix(v, paramPrefix)] = null;\n      }\n      return ref;\n    };\n    if (sqlOperatorLowerCase === 'between' || sqlOperatorLowerCase === 'not between') {\n      const valueAsArray = toArray(rule.value, { retainEmptyStrings: true });\n      const [first, second] = valueAsArray.slice(0, 2);\n      return finalize(\n        `${qPre}${rule.field}${qPost} ${sqlOperator} ${registerParam(first)} and ${registerParam(second)}`.trim()\n      );\n    }\n    if (sqlOperatorLowerCase === 'in' || sqlOperatorLowerCase === 'not in') {\n      const splitValue = toArray(rule.value);\n      return finalize(\n        `${qPre}${rule.field}${qPost} ${sqlOperator} (${splitValue.map(v => registerParam(v)).join(', ')})`\n      );\n    }\n    // String-match operators concatenate `%` wildcards onto the bind-variable reference;\n    // `wrapLikeFragment` is a no-op for all other operators.\n    return finalize(\n      `${qPre}${rule.field}${qPost} ${sqlOperator} ${wrapLikeFragment(registerParam(rule.value), lc(rule.operator), { concatOperator })}`.trim()\n    );\n  } else if (rule.valueSource === 'field') {\n    return finalize(`${qPre}${rule.field}${qPost} ${sqlOperator} ${value}`.trim());\n  } else if (sqlOperatorLowerCase === 'in' || sqlOperatorLowerCase === 'not in') {\n    const splitValue = toArray(rule.value);\n    if (parameterized) {\n      for (const v of splitValue) {\n        params.push(shouldRenderAsNumber(v, parseNumbers) ? parseNumber(v, { parseNumbers }) : v);\n      }\n      return finalize(\n        `${qPre}${rule.field}${qPost} ${sqlOperator} (${splitValue\n          .map((_v, i) =>\n            numberedParams\n              ? `${paramPrefix}${processedParams.length + 1 + splitValue.length - (splitValue.length - i)}`\n              : '?'\n          )\n          .join(', ')})`\n      );\n    }\n    const inParams: string[] = [];\n    for (const v of splitValue) {\n      const thisParamName = getNextNamedParam!(rule.field);\n      inParams.push(`${paramPrefix}${thisParamName}`);\n      paramsNamed[`${paramsKeepPrefix ? paramPrefix : ''}${thisParamName}`] = shouldRenderAsNumber(\n        v,\n        parseNumbers\n      )\n        ? parseNumber(v, { parseNumbers })\n        : v;\n    }\n    return finalize(`${qPre}${rule.field}${qPost} ${sqlOperator} (${inParams.join(', ')})`);\n  } else if (sqlOperatorLowerCase === 'between' || sqlOperatorLowerCase === 'not between') {\n    const valueAsArray = toArray(rule.value, { retainEmptyStrings: true });\n    const [first, second] = valueAsArray\n      .slice(0, 2)\n      .map(v => (shouldRenderAsNumber(v, parseNumbers) ? parseNumber(v, { parseNumbers }) : v));\n    if (parameterized) {\n      params.push(first, second);\n      return finalize(\n        `${qPre}${rule.field}${qPost} ${sqlOperator} ${\n          numberedParams ? `${paramPrefix}${processedParams.length + 1}` : '?'\n        } and ${numberedParams ? `${paramPrefix}${processedParams.length + 2}` : '?'}`\n      );\n    }\n    const firstParamName = getNextNamedParam!(rule.field);\n    const secondParamName = getNextNamedParam!(rule.field);\n    paramsNamed[`${paramsKeepPrefix ? paramPrefix : ''}${firstParamName}`] = first;\n    paramsNamed[`${paramsKeepPrefix ? paramPrefix : ''}${secondParamName}`] = second;\n    return finalize(\n      `${qPre}${rule.field}${qPost} ${sqlOperator} ${paramPrefix}${firstParamName} and ${paramPrefix}${secondParamName}`\n    );\n  }\n\n  let paramValue = rule.value;\n  if (typeof rule.value === 'string') {\n    if (shouldRenderAsNumber(rule.value, parseNumbers)) {\n      paramValue = parseNumber(rule.value, { parseNumbers });\n    } else {\n      // Note that we're using `value` here, which has been processed through\n      // a `valueProcessor`, as opposed to `rule.value` which has not\n      paramValue = /^'.*'$/g.test(value)\n        ? value.replaceAll(/(^'|'$)/g, '')\n        : /* v8 ignore next -- @preserve */ value;\n    }\n  }\n\n  let paramName = '';\n  if (parameterized) {\n    params.push(paramValue);\n  } else {\n    paramName = getNextNamedParam!(rule.field);\n    paramsNamed[`${paramsKeepPrefix ? paramPrefix : ''}${paramName}`] = paramValue;\n  }\n\n  return finalize(\n    `${qPre}${rule.field}${qPost} ${sqlOperator} ${\n      parameterized\n        ? numberedParams\n          ? `${paramPrefix}${processedParams.length + 1}`\n          : '?'\n        : `${paramPrefix}${paramName}`\n    }`.trim()\n  );\n};\n","import type { ParseNumbersPropConfig, RuleProcessor } from '../../types';\nimport { toArray } from '../arrayUtils';\nimport { lc } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport { isValidValue, prismaOperators, processMatchMode, shouldRenderAsNumber } from './utils';\n\nconst processNumber = <T>(value: unknown, fallback: T, parseNumbers?: ParseNumbersPropConfig) =>\n  shouldRenderAsNumber(value, !!parseNumbers || typeof value === 'bigint')\n    ? Number(parseNumber(value, { parseNumbers: !!parseNumbers }))\n    : fallback;\n\n/**\n * Default rule processor used by {@link formatQuery} for \"prisma\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorPrisma: RuleProcessor = (\n  rule,\n  // v8 ignore next\n  options = {}\n) => {\n  const { field, operator, value, valueSource } = rule;\n  // v8 ignore next\n  const { parseNumbers, preserveValueOrder } = options;\n\n  // Neither field-to-field comparisons nor match modes are supported in this format\n  if (valueSource === 'field' || processMatchMode(rule)) return undefined;\n\n  const operatorLC = lc(operator);\n  switch (operatorLC) {\n    case '=':\n      return { [field]: processNumber(value, value, parseNumbers) };\n\n    case '!=':\n    case '<':\n    case '<=':\n    case '>':\n    case '>=': {\n      const prismaOperator = prismaOperators[operatorLC];\n      return {\n        [field]: {\n          [prismaOperator]: processNumber(value, value, parseNumbers),\n        },\n      };\n    }\n\n    case 'contains':\n      return { [field]: { contains: value } };\n\n    case 'beginswith':\n      return { [field]: { startsWith: value } };\n\n    case 'endswith':\n      return { [field]: { endsWith: value } };\n\n    case 'doesnotcontain':\n      return { NOT: { [field]: { contains: value } } };\n\n    case 'doesnotbeginwith':\n      return { NOT: { [field]: { startsWith: value } } };\n\n    case 'doesnotendwith':\n      return { NOT: { [field]: { endsWith: value } } };\n\n    case 'null':\n      return { [field]: null };\n\n    case 'notnull':\n      return { [field]: { not: null } };\n\n    case 'in':\n    case 'notin': {\n      const valueAsArray = toArray(value);\n      return {\n        [field]: {\n          [prismaOperators[operatorLC]]: valueAsArray.map(val =>\n            processNumber(val, val, parseNumbers)\n          ),\n        },\n      };\n    }\n\n    case 'between':\n    case 'notbetween': {\n      const valueAsArray = toArray(value);\n      if (\n        valueAsArray.length >= 2 &&\n        isValidValue(valueAsArray[0]) &&\n        isValidValue(valueAsArray[1])\n      ) {\n        const [first, second] = valueAsArray;\n        // For backwards compatibility, default to parsing numbers for between operators\n        // unless parseNumbers is explicitly set to false\n        const shouldParseNumbers = !(parseNumbers === false);\n        const firstNum = shouldRenderAsNumber(first, shouldParseNumbers)\n          ? parseNumber(first, { parseNumbers })\n          : Number.NaN;\n        const secondNum = shouldRenderAsNumber(second, shouldParseNumbers)\n          ? parseNumber(second, { parseNumbers })\n          : Number.NaN;\n        let firstValue = Number.isNaN(firstNum) ? first : firstNum;\n        let secondValue = Number.isNaN(secondNum) ? second : secondNum;\n        if (\n          !preserveValueOrder &&\n          firstValue === firstNum &&\n          secondValue === secondNum &&\n          secondNum < firstNum\n        ) {\n          const tempNum = secondNum;\n          secondValue = firstNum;\n          firstValue = tempNum;\n        }\n\n        return operatorLC === 'between'\n          ? { [field]: { gte: firstValue, lte: secondValue } }\n          : { OR: [{ [field]: { lt: firstValue } }, { [field]: { gt: secondValue } }] };\n      } else {\n        return '';\n      }\n    }\n  }\n  return '';\n};\n","import type { Op as _OpTypes, col as _colType, fn as _fnType } from 'sequelize';\nimport type { Simplify } from 'type-fest';\nimport type { RuleProcessor } from '../../types';\nimport { toArray } from '../arrayUtils';\nimport { lc } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport { isValidValue, processMatchMode, shouldRenderAsNumber } from './utils';\n\ntype OpTypes = Simplify<typeof _OpTypes>;\ntype ColType = typeof _colType;\ntype FnType = typeof _fnType;\n\n/**\n * Default rule processor used by {@link formatQuery} for the \"sequelize\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorSequelize: RuleProcessor = (\n  rule,\n  // v8 ignore next\n  { parseNumbers, preserveValueOrder, context = {} } = {}\n): Record<string, unknown> | undefined => {\n  const {\n    sequelizeOperators: Op,\n    sequelizeCol: col,\n    sequelizeFn: fn,\n  } = context as {\n    sequelizeOperators: OpTypes;\n    sequelizeCol?: ColType;\n    sequelizeFn?: FnType;\n  };\n\n  // Match modes are not supported in this format\n  if (processMatchMode(rule)) return undefined;\n\n  const { field, operator, value, valueSource } = rule;\n  const valueIsField = valueSource === 'field';\n\n  const operatorLC = lc(operator);\n\n  if (\n    // Bail out if we don't have the Op symbols\n    !Op ||\n    // ...or valueSource is 'field' and we don't have the `col` function,\n    (valueIsField &&\n      (!col ||\n        // ...or valueSource is 'field' and we don't have the `fn` function\n        // and the operator is a string-matching one\n        (!fn &&\n          [\n            'contains',\n            'doesnotcontain',\n            'beginswith',\n            'doesnotbeginwith',\n            'endswith',\n            'doesnotendwith',\n          ].includes(operatorLC))))\n  ) {\n    return undefined;\n  }\n\n  switch (operatorLC) {\n    case '=':\n    case '!=':\n    case '<':\n    case '<=':\n    case '>':\n    case '>=': {\n      const sequelizeOperator = {\n        '=': Op.eq,\n        '!=': Op.ne,\n        '<': Op.lt,\n        '<=': Op.lte,\n        '>': Op.gt,\n        '>=': Op.gte,\n      }[operatorLC];\n      return {\n        [field]:\n          valueIsField && operatorLC === '='\n            ? { [Op.col]: value }\n            : {\n                [sequelizeOperator]: valueIsField\n                  ? col!(value)\n                  : shouldRenderAsNumber(value, parseNumbers)\n                    ? parseNumber(value, { parseNumbers: 'strict' })\n                    : value,\n              },\n      };\n    }\n\n    case 'contains':\n      return {\n        [field]: {\n          [valueIsField ? Op.like : Op.substring]: valueIsField\n            ? fn!('CONCAT', '%', col!(value), '%')\n            : `${value}`,\n        },\n      };\n\n    case 'beginswith':\n      return {\n        [field]: {\n          [valueIsField ? Op.like : Op.startsWith]: valueIsField\n            ? fn!('CONCAT', col!(value), '%')\n            : `${value}`,\n        },\n      };\n\n    case 'endswith':\n      return {\n        [field]: {\n          [valueIsField ? Op.like : Op.endsWith]: valueIsField\n            ? fn!('CONCAT', '%', col!(value))\n            : `${value}`,\n        },\n      };\n\n    case 'doesnotcontain':\n      return {\n        [field]: {\n          [Op.notLike]: valueIsField ? fn!('CONCAT', '%', col!(value), '%') : `%${value}%`,\n        },\n      };\n\n    case 'doesnotbeginwith':\n      return {\n        [field]: { [Op.notLike]: valueIsField ? fn!('CONCAT', col!(value), '%') : `${value}%` },\n      };\n\n    case 'doesnotendwith':\n      return {\n        [field]: { [Op.notLike]: valueIsField ? fn!('CONCAT', '%', col!(value)) : `%${value}` },\n      };\n\n    case 'null':\n      return { [field]: { [Op.is]: null } };\n\n    case 'notnull':\n      return { [field]: { [Op.not]: null } };\n\n    case 'in':\n    case 'notin': {\n      const valueAsArray = toArray(value);\n      return {\n        [field]: {\n          [operatorLC === 'in' ? Op.in : Op.notIn]: valueAsArray.map(val =>\n            valueIsField\n              ? col!(val)\n              : shouldRenderAsNumber(val, parseNumbers)\n                ? parseNumber(val, { parseNumbers: 'strict' })\n                : val\n          ),\n        },\n      };\n    }\n\n    case 'between':\n    case 'notbetween': {\n      const valueAsArray = toArray(value, { retainEmptyStrings: true });\n      if (\n        valueAsArray.length < 2 ||\n        !isValidValue(valueAsArray[0]) ||\n        !isValidValue(valueAsArray[1])\n      ) {\n        return undefined;\n      }\n\n      const [first, second] = valueAsArray;\n\n      const firstNum = shouldRenderAsNumber(first, parseNumbers)\n        ? parseNumber(first, { parseNumbers: 'strict' })\n        : Number.NaN;\n      const secondNum = shouldRenderAsNumber(second, parseNumbers)\n        ? parseNumber(second, { parseNumbers: 'strict' })\n        : Number.NaN;\n      const firstValue = Number.isNaN(firstNum) ? first : firstNum;\n      const secondValue = Number.isNaN(secondNum) ? second : secondNum;\n      const valsOneAndTwoOnly = [firstValue, secondValue];\n      if (\n        !preserveValueOrder &&\n        firstValue === firstNum &&\n        secondValue === secondNum &&\n        secondNum < firstNum\n      ) {\n        valsOneAndTwoOnly[0] = secondNum;\n        valsOneAndTwoOnly[1] = firstNum;\n      }\n\n      return {\n        [field]: {\n          [operatorLC === 'between' ? Op.between : Op.notBetween]: valueIsField\n            ? valsOneAndTwoOnly.map(v => col!(v))\n            : valsOneAndTwoOnly.every(v => shouldRenderAsNumber(v, parseNumbers))\n              ? valsOneAndTwoOnly.map(v => parseNumber(v, { parseNumbers: 'strict' }))\n              : valsOneAndTwoOnly,\n        },\n      };\n    }\n  }\n  return undefined;\n};\n","import type { RuleProcessor } from '../../types';\nimport { toArray, trimIfString } from '../arrayUtils';\nimport { shouldRenderAsNumber } from './utils';\n\nconst escapeDoubleQuotes = (v: unknown, escapeQuotes?: boolean) =>\n  typeof v !== 'string' || !escapeQuotes ? `${v}` : v.replaceAll(`\"`, `\\\\\"`);\n\n/** Auto-prefix a SPARQL variable name with `?` unless it's already prefixed, a URI, or a prefixed name.\n *\n * @group Export\n */\nexport const sparqlVar = (name: string): string =>\n  /^[?<]/.test(name) || name.includes(':') ? name : `?${name}`;\n\n/**\n * Default rule processor used by {@link formatQuery} for \"sparql\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorSPARQL: RuleProcessor = (\n  rule,\n  // v8 ignore next\n  opts = {}\n) => {\n  const { escapeQuotes, parseNumbers } = opts;\n  const { field: rawField, operator, value, valueSource } = rule;\n  const valueIsField = valueSource === 'field';\n  const operatorTL = operator.toLowerCase();\n  const field = sparqlVar(rawField);\n\n  const fmtVal = (v: unknown): string => {\n    if (v === null || v === undefined) return '\"\"';\n    if (typeof v === 'boolean') return `\"${v}\"^^xsd:boolean`;\n    if (typeof v === 'bigint') return String(v);\n    if (valueIsField) return sparqlVar(trimIfString(v) as string);\n    if (typeof v === 'number' || shouldRenderAsNumber(v, parseNumbers))\n      return trimIfString(v) as string;\n    /* v8 ignore start -- @preserve */\n    const s = typeof v === 'string' ? v : (JSON.stringify(v) ?? '');\n    /* v8 ignore stop -- @preserve */\n    // Don't quote variable references or URIs\n    if (s.startsWith('?') || s.startsWith('<') || s.includes(':')) return s;\n    return `\"${escapeDoubleQuotes(s, escapeQuotes)}\"`;\n  };\n\n  switch (operatorTL) {\n    case '=':\n    case '!=':\n    case '<':\n    case '>':\n    case '<=':\n    case '>=':\n      return `${field} ${operatorTL} ${fmtVal(value)}`;\n    case '<>':\n      return `${field} != ${fmtVal(value)}`;\n    case 'contains':\n      return `CONTAINS(${field}, ${fmtVal(value)})`;\n    case 'doesnotcontain':\n      return `!CONTAINS(${field}, ${fmtVal(value)})`;\n    case 'beginswith':\n      return `STRSTARTS(${field}, ${fmtVal(value)})`;\n    case 'doesnotbeginwith':\n      return `!STRSTARTS(${field}, ${fmtVal(value)})`;\n    case 'endswith':\n      return `STRENDS(${field}, ${fmtVal(value)})`;\n    case 'doesnotendwith':\n      return `!STRENDS(${field}, ${fmtVal(value)})`;\n    case 'null':\n      return `!BOUND(${field})`;\n    case 'notnull':\n      return `BOUND(${field})`;\n    case 'in': {\n      const items = toArray(value).map(fmtVal);\n      if (!items.length) return '';\n      return `${field} IN (${items.join(', ')})`;\n    }\n    case 'notin': {\n      const items = toArray(value).map(fmtVal);\n      if (!items.length) return '';\n      return `${field} NOT IN (${items.join(', ')})`;\n    }\n    case 'between': {\n      const arr = toArray(value);\n      if (arr.length < 2) return '';\n      return `${field} >= ${fmtVal(arr[0])} && ${field} <= ${fmtVal(arr[1])}`;\n    }\n    case 'notbetween': {\n      const arr = toArray(value);\n      if (arr.length < 2) return '';\n      return `(${field} < ${fmtVal(arr[0])} || ${field} > ${fmtVal(arr[1])})`;\n    }\n    default:\n      return `${field} ${operator} ${fmtVal(value)}`;\n  }\n};\n","import type { RuleProcessor } from '../../types';\nimport { toArray } from '../arrayUtils';\nimport { lc } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport type { TsDbExpression } from './tanStackDbTypes.ts';\nimport { isValidValue, shouldRenderAsNumber } from './utils';\n\n/**\n * Default rule processor used by {@link formatQuery} for the \"tanstack_db\" format.\n *\n * @group Export\n */\nexport const defaultRuleProcessorTanStackDB: RuleProcessor = (\n  rule,\n  _options\n): TsDbExpression | undefined => {\n  const opts = _options ?? /* v8 ignore start -- @preserve */ {}; /* v8 ignore stop -- @preserve */\n  const { parseNumbers, preserveValueOrder, context = {} } = opts;\n  const ops = context.tanStackDbOperators;\n  const refs = context._tanstackDbRefs;\n  const primaryRef: string | undefined = context._tanstackDbPrimaryRef;\n\n  if (!ops || !refs || !primaryRef) return undefined;\n\n  const { and, eq, gt, gte, inArray, isNull, like, lt, lte, not } = ops;\n\n  // Resolve a field name to a ref column:\n  // - Dotted: \"todo.age\" → refs.todo.age\n  // - Bare: \"age\" → refs[primaryRef].age\n  const resolveField = (fieldName: string) => {\n    const dotIdx = fieldName.indexOf('.');\n    if (dotIdx > 0) {\n      const prefix = fieldName.slice(0, dotIdx);\n      const rest = fieldName.slice(dotIdx + 1);\n      if (refs[prefix]) return refs[prefix][rest];\n    }\n    // Bare field: use primary ref\n    return refs[primaryRef][fieldName];\n  };\n\n  const { field, operator, value, valueSource } = rule;\n  const column = resolveField(field);\n  const operatorLC = lc(operator);\n\n  const valueIsField = valueSource === 'field';\n  const asFieldOrValue = (v: unknown) => (valueIsField ? resolveField(v as string) : v);\n\n  // Parse value as number when applicable\n  const maybeParseNumber = (v: unknown) => {\n    if (valueIsField || !parseNumbers) return asFieldOrValue(v);\n    return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;\n  };\n\n  switch (operatorLC) {\n    case '=':\n      return eq(column, maybeParseNumber(value));\n    case '!=':\n      return not(eq(column, maybeParseNumber(value)));\n    case '>':\n      return gt(column, maybeParseNumber(value));\n    case '<':\n      return lt(column, maybeParseNumber(value));\n    case '>=':\n      return gte(column, maybeParseNumber(value));\n    case '<=':\n      return lte(column, maybeParseNumber(value));\n    case 'beginswith':\n    case 'doesnotbeginwith': {\n      const pattern = valueIsField ? undefined : `${value}%`;\n      const expr = like(column, pattern);\n      return operatorLC === 'doesnotbeginwith' ? not(expr) : expr;\n    }\n    case 'contains':\n    case 'doesnotcontain': {\n      const pattern = valueIsField ? undefined : `%${value}%`;\n      const expr = like(column, pattern);\n      return operatorLC === 'doesnotcontain' ? not(expr) : expr;\n    }\n    case 'endswith':\n    case 'doesnotendwith': {\n      const pattern = valueIsField ? undefined : `%${value}`;\n      const expr = like(column, pattern);\n      return operatorLC === 'doesnotendwith' ? not(expr) : expr;\n    }\n    case 'null':\n      return isNull(column);\n    case 'notnull':\n      return not(isNull(column));\n    case 'in':\n    case 'notin': {\n      const valueAsArray = toArray(value).map(v => maybeParseNumber(v));\n      const expr = inArray(column, valueAsArray);\n      return operatorLC === 'notin' ? not(expr) : expr;\n    }\n    case 'between':\n    case 'notbetween': {\n      const valueAsArray = toArray(value);\n      if (\n        valueAsArray.length >= 2 &&\n        isValidValue(valueAsArray[0]) &&\n        isValidValue(valueAsArray[1])\n      ) {\n        let [first, second] = valueAsArray;\n        const shouldParseNumbers = !(parseNumbers === false);\n        if (\n          !valueIsField &&\n          shouldRenderAsNumber(first, shouldParseNumbers) &&\n          shouldRenderAsNumber(second, shouldParseNumbers)\n        ) {\n          const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });\n          const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });\n          if (!preserveValueOrder && secondNum < firstNum) {\n            const tempNum = secondNum;\n            second = firstNum;\n            first = tempNum;\n          } else {\n            first = firstNum;\n            second = secondNum;\n          }\n        } else if (valueIsField) {\n          first = asFieldOrValue(first);\n          second = asFieldOrValue(second);\n        }\n        const expr = and(gte(column, first), lte(column, second));\n        return operatorLC === 'notbetween' ? not(expr) : expr;\n      }\n      return undefined;\n    }\n    default:\n      return undefined;\n  }\n};\n","import type { SetOptional } from 'type-fest';\nimport { defaultPlaceholderFieldName, defaultPlaceholderOperatorName } from '../../defaults';\nimport type {\n  DiagnosticsResult,\n  ExportFormat,\n  ExportObjectFormats,\n  FormatQueryFinalOptions,\n  FormatQueryOptions,\n  FullField,\n  FullOperator,\n  FullOptionList,\n  InputType,\n  ParameterizedNamedSQL,\n  ParameterizedSQL,\n  RQBJsonLogic,\n  RuleGroupProcessor,\n  RuleGroupTypeAny,\n  RuleProcessor,\n  RuleType,\n  RuleValidator,\n  SQLPreset,\n  ValidationMap,\n  ValidationResult,\n  ValueProcessorByRule,\n} from '../../types';\nimport { getParseNumberMethod } from '../getParseNumberMethod';\nimport { lc } from '../misc';\nimport { getOption, toFlatOptionArray, toFullOptionList } from '../optGroupUtils';\nimport { defaultRuleGroupProcessorCEL } from './defaultRuleGroupProcessorCEL';\nimport { defaultRuleGroupProcessorCypher } from './defaultRuleGroupProcessorCypher';\nimport { defaultRuleGroupProcessorDiagnostics } from './defaultRuleGroupProcessorDiagnostics';\nimport { defaultRuleGroupProcessorDrizzle } from './defaultRuleGroupProcessorDrizzle';\nimport { defaultRuleGroupProcessorElasticSearch } from './defaultRuleGroupProcessorElasticSearch';\nimport { defaultRuleGroupProcessorGremlin } from './defaultRuleGroupProcessorGremlin';\nimport { defaultRuleGroupProcessorJSONata } from './defaultRuleGroupProcessorJSONata';\nimport { defaultRuleGroupProcessorJsonLogic } from './defaultRuleGroupProcessorJsonLogic';\nimport { defaultRuleGroupProcessorLDAP } from './defaultRuleGroupProcessorLDAP';\nimport { defaultRuleGroupProcessorMongoDB } from './defaultRuleGroupProcessorMongoDB';\nimport {\n  defaultRuleGroupProcessorMongoDBQuery,\n  mongoDbFallback,\n} from './defaultRuleGroupProcessorMongoDBQuery';\nimport { defaultRuleGroupProcessorNL } from './defaultRuleGroupProcessorNL';\nimport { defaultRuleGroupProcessorParameterized } from './defaultRuleGroupProcessorParameterized';\nimport { defaultRuleGroupProcessorPrisma, prismaFallback } from './defaultRuleGroupProcessorPrisma';\nimport { defaultRuleGroupProcessorSequelize } from './defaultRuleGroupProcessorSequelize';\nimport { defaultRuleGroupProcessorSPARQL } from './defaultRuleGroupProcessorSPARQL';\nimport { defaultRuleGroupProcessorSpEL } from './defaultRuleGroupProcessorSpEL';\nimport { defaultRuleGroupProcessorSQL } from './defaultRuleGroupProcessorSQL';\nimport { defaultRuleGroupProcessorTanStackDB } from './defaultRuleGroupProcessorTanStackDB';\nimport { defaultRuleProcessorCEL } from './defaultRuleProcessorCEL';\nimport { defaultRuleProcessorCypher } from './defaultRuleProcessorCypher';\nimport { defaultRuleProcessorDrizzle } from './defaultRuleProcessorDrizzle';\nimport { defaultRuleProcessorElasticSearch } from './defaultRuleProcessorElasticSearch';\nimport { defaultRuleProcessorGremlin } from './defaultRuleProcessorGremlin';\nimport { defaultRuleProcessorJSONata } from './defaultRuleProcessorJSONata';\nimport { defaultRuleProcessorJsonLogic } from './defaultRuleProcessorJsonLogic';\nimport { defaultRuleProcessorLDAP } from './defaultRuleProcessorLDAP';\nimport { defaultRuleProcessorMongoDB } from './defaultRuleProcessorMongoDB';\nimport { defaultRuleProcessorMongoDBQuery } from './defaultRuleProcessorMongoDBQuery';\nimport { defaultOperatorProcessorNL, defaultRuleProcessorNL } from './defaultRuleProcessorNL';\nimport { defaultRuleProcessorParameterized } from './defaultRuleProcessorParameterized';\nimport { defaultRuleProcessorPrisma } from './defaultRuleProcessorPrisma';\nimport { defaultRuleProcessorSequelize } from './defaultRuleProcessorSequelize';\nimport { defaultRuleProcessorSPARQL } from './defaultRuleProcessorSPARQL';\nimport { defaultRuleProcessorSpEL } from './defaultRuleProcessorSpEL';\nimport { defaultOperatorProcessorSQL, defaultRuleProcessorSQL } from './defaultRuleProcessorSQL';\nimport { defaultRuleProcessorTanStackDB } from './defaultRuleProcessorTanStackDB';\nimport { defaultValueProcessorByRule } from './defaultValueProcessorByRule';\nimport { defaultValueProcessorNL } from './defaultValueProcessorNL';\nimport {\n  bigIntJsonStringifyReplacer,\n  getQuoteFieldNamesWithArray,\n  isValueProcessorLegacy,\n  numerifyValues,\n  stripParamPrefix,\n} from './utils';\n\n/**\n * A collection of option presets for {@link formatQuery}, specifically for SQL-based formats.\n *\n * @group Export\n */\nexport const sqlDialectPresets: Record<SQLPreset, FormatQueryOptions> = {\n  ansi: {}, // This should always be empty\n  sqlite: {\n    paramsKeepPrefix: true,\n  },\n  oracle: {},\n  mssql: {\n    concatOperator: '+',\n    quoteFieldNamesWith: ['[', ']'],\n    fieldIdentifierSeparator: '.',\n    paramPrefix: '@',\n  },\n  mysql: {\n    concatOperator: 'CONCAT',\n  },\n  postgresql: {\n    quoteFieldNamesWith: '\"',\n    numberedParams: true,\n    paramPrefix: '$',\n  },\n};\n\n/**\n * A collection of option presets for {@link formatQuery}.\n *\n * @group Export\n */\nexport const formatQueryOptionPresets: Record<string, FormatQueryOptions> = {\n  ...sqlDialectPresets,\n};\n\nconst defaultRuleProcessors = {\n  cel: defaultRuleProcessorCEL,\n  drizzle: defaultRuleProcessorDrizzle,\n  elasticsearch: defaultRuleProcessorElasticSearch,\n  json_without_ids: defaultRuleProcessorSQL,\n  json: defaultRuleProcessorSQL,\n  jsonata: defaultRuleProcessorJSONata,\n  jsonlogic: defaultRuleProcessorJsonLogic,\n  ldap: defaultRuleProcessorLDAP,\n  mongodb_query: defaultRuleProcessorMongoDBQuery,\n  mongodb: defaultRuleProcessorMongoDB,\n  natural_language: defaultRuleProcessorNL,\n  parameterized_named: defaultRuleProcessorParameterized,\n  parameterized: defaultRuleProcessorParameterized,\n  prisma: defaultRuleProcessorPrisma,\n  sequelize: defaultRuleProcessorSequelize,\n  spel: defaultRuleProcessorSpEL,\n  sql: defaultRuleProcessorSQL,\n  tanstack_db: defaultRuleProcessorTanStackDB,\n  cypher: defaultRuleProcessorCypher,\n  gql: defaultRuleProcessorCypher,\n  sparql: defaultRuleProcessorSPARQL,\n  gremlin: defaultRuleProcessorGremlin,\n  diagnostics: defaultRuleProcessorSQL,\n} satisfies Record<ExportFormat, RuleProcessor>;\n\n/* v8 ignore next -- @preserve */\nconst defaultOperatorProcessor: RuleProcessor = r => r.operator;\nconst defaultOperatorProcessors = {\n  cel: defaultOperatorProcessor,\n  drizzle: defaultOperatorProcessor,\n  elasticsearch: defaultOperatorProcessor,\n  json_without_ids: defaultOperatorProcessor,\n  json: defaultOperatorProcessor,\n  jsonata: defaultOperatorProcessor,\n  jsonlogic: defaultOperatorProcessor,\n  ldap: defaultOperatorProcessor,\n  mongodb_query: defaultOperatorProcessor,\n  mongodb: defaultOperatorProcessor,\n  natural_language: defaultOperatorProcessorNL,\n  parameterized_named: defaultOperatorProcessorSQL,\n  parameterized: defaultOperatorProcessorSQL,\n  prisma: defaultOperatorProcessor,\n  sequelize: defaultOperatorProcessor,\n  spel: defaultOperatorProcessor,\n  sql: defaultOperatorProcessorSQL,\n  tanstack_db: defaultOperatorProcessor,\n  cypher: defaultOperatorProcessor,\n  gql: defaultOperatorProcessor,\n  sparql: defaultOperatorProcessor,\n  gremlin: defaultOperatorProcessor,\n  diagnostics: defaultOperatorProcessor,\n} satisfies Record<ExportFormat, RuleProcessor>;\n\nconst defaultFallbackExpressions: Partial<Record<ExportFormat, string>> = {\n  cel: '1 == 1',\n  ldap: '',\n  mongodb: '\"$and\":[{\"$expr\":true}]',\n  natural_language: '1 is 1',\n  sparql: '1 = 1',\n  gremlin: '',\n  spel: '1 == 1',\n  sql: '(1 = 1)',\n};\n\ntype MostFormatQueryOptions = SetOptional<\n  Required<FormatQueryOptions>,\n  | 'context'\n  | 'fallbackExpression'\n  | 'operatorProcessor'\n  | 'ruleGroupProcessor'\n  | 'ruleProcessor'\n  | 'validator'\n  | 'valueProcessor'\n  | 'placeholderValueName'\n  | 'parseNumbers'\n  | 'getParameters'\n>;\n\nconst defaultFormatQueryOptions = {\n  format: 'json',\n  fields: [] as FullOptionList<FullField>,\n  quoteFieldNamesWith: ['', ''],\n  fieldIdentifierSeparator: '',\n  getOperators: () => [] as FullOptionList<FullOperator>,\n  paramPrefix: ':',\n  paramsKeepPrefix: false,\n  numberedParams: false,\n  preserveValueOrder: false,\n  placeholderFieldName: defaultPlaceholderFieldName,\n  placeholderOperatorName: defaultPlaceholderOperatorName,\n  quoteValuesWith: \"'\",\n  concatOperator: '||',\n  preset: 'ansi',\n  wordOrder: 'SVO',\n  translations: {},\n  operatorMap: {},\n} satisfies MostFormatQueryOptions;\n\nconst valueProcessorCanActAsRuleProcessor = new Set<ExportFormat>([\n  'cel',\n  'drizzle',\n  'elasticsearch',\n  'jsonata',\n  'jsonlogic',\n  'ldap',\n  'mongodb_query',\n  'mongodb',\n  'prisma',\n  'sequelize',\n  'spel',\n  'tanstack_db',\n]);\n\nconst sqlFormats = new Set<ExportFormat>([\n  'sql',\n  'parameterized',\n  'parameterized_named',\n  'drizzle',\n  'prisma',\n  'sequelize',\n]);\n\n/**\n * Generates a formatted (indented two spaces) JSON string from a query object.\n *\n * @group Export\n */\nfunction formatQuery(ruleGroup: RuleGroupTypeAny): string;\n/**\n * Generates a result based on the provided rule group processor.\n *\n * @group Export\n */\nfunction formatQuery<TResult = unknown>(\n  ruleGroup: RuleGroupTypeAny,\n  options: FormatQueryOptions & { ruleGroupProcessor: RuleGroupProcessor<TResult> }\n): TResult;\n/**\n * Generates a {@link index!ParameterizedSQL ParameterizedSQL} object from a query object.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: 'parameterized' | (FormatQueryOptions & { format: 'parameterized' })\n): ParameterizedSQL;\n/**\n * Generates a {@link index!ParameterizedNamedSQL ParameterizedNamedSQL} object from a query object.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: 'parameterized_named' | (FormatQueryOptions & { format: 'parameterized_named' })\n): ParameterizedNamedSQL;\n/**\n * Generates a {@link index!RQBJsonLogic JsonLogic} object from a query object.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: 'jsonlogic' | (FormatQueryOptions & { format: 'jsonlogic' })\n): RQBJsonLogic;\n/**\n * Generates an ElasticSearch query object from an RQB query object.\n *\n * NOTE: Support for the ElasticSearch format is experimental.\n * You may have better results exporting \"sql\" format then using\n * [ElasticSearch SQL](https://www.elastic.co/guide/en/elasticsearch/reference/current/xpack-sql.html).\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: 'elasticsearch' | (FormatQueryOptions & { format: 'elasticsearch' })\n  // oxlint-disable-next-line typescript/no-explicit-any\n): Record<string, any>;\n/**\n * Generates a MongoDB query object from an RQB query object.\n *\n * This is equivalent to the \"mongodb\" format, but returns a JSON object\n * instead of a string.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: 'mongodb_query' | (FormatQueryOptions & { format: 'mongodb_query' })\n  // oxlint-disable-next-line typescript/no-explicit-any\n): Record<string, any>;\n/**\n * Generates a JSON.stringify'd MongoDB query object from an RQB query object.\n *\n * This is equivalent to the \"mongodb_query\" format, but returns a string\n * instead of a JSON object.\n *\n * @deprecated Use the \"mongodb_query\" format for greater flexibility.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: 'mongodb' | (FormatQueryOptions & { format: 'mongodb' })\n): string;\n/**\n * Generates a Prisma ORM query object from an RQB query object.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: 'prisma' | (FormatQueryOptions & { format: 'prisma' })\n  // oxlint-disable-next-line typescript/no-explicit-any\n): Record<string, any>;\n/**\n * Generates a Drizzle ORM query function from an RQB query object. The function can\n * be assigned to the `where` property in the Drizzle relational queries API.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: 'drizzle' | (FormatQueryOptions & { format: 'drizzle' })\n): ReturnType<typeof defaultRuleGroupProcessorDrizzle>;\n/**\n * Generates a TanStack DB WhereCallback from an RQB query object. The callback can\n * be passed directly to TanStack DB's `.where()` method.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: 'tanstack_db' | (FormatQueryOptions & { format: 'tanstack_db' })\n): ReturnType<typeof defaultRuleGroupProcessorTanStackDB>;\n/**\n * be assigned to the `where` property in the Sequelize query functions.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: 'sequelize' | (FormatQueryOptions & { format: 'sequelize' })\n): ReturnType<typeof defaultRuleGroupProcessorSequelize>;\n/**\n * Generates a JSONata query string from an RQB query object.\n *\n * NOTE: Either `parseNumbers: \"strict-limited\"` or `parseNumbers: true`\n * are recommended for this format.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: 'jsonata' | (FormatQueryOptions & { format: 'jsonata' })\n): string;\n/**\n * Generates an LDAP query string from an RQB query object.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: 'ldap' | (FormatQueryOptions & { format: 'ldap' })\n): string;\n/**\n * Generates a {@link DiagnosticsResult} from a query object, containing an annotated\n * query tree, a flat diagnostics array, aggregate stats, and a per-field summary.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: 'diagnostics' | (FormatQueryOptions & { format: 'diagnostics' })\n): DiagnosticsResult;\n/**\n * Generates a formatted (indented two spaces) JSON string from a query object.\n *\n * @group Export\n */\nfunction formatQuery(ruleGroup: RuleGroupTypeAny, options: FormatQueryOptions): string;\n/**\n * Generates a query string in the requested format.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: Exclude<ExportFormat, ExportObjectFormats>\n): string;\n/**\n * Generates a query string in the requested format.\n *\n * @group Export\n */\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  options: FormatQueryOptions & { format: Exclude<ExportFormat, ExportObjectFormats> }\n): string;\nfunction formatQuery(\n  ruleGroup: RuleGroupTypeAny,\n  optionParam: FormatQueryOptions | ExportFormat = {}\n) {\n  const options = typeof optionParam === 'string' ? { format: lc(optionParam) } : optionParam;\n\n  const optObj: MostFormatQueryOptions = {\n    ...defaultFormatQueryOptions,\n    ...(!options.format || sqlFormats.has(options.format)\n      ? (sqlDialectPresets[options.preset ?? 'ansi'] ?? null)\n      : null),\n    ...options,\n    ...(!options.format &&\n      (Object.keys(sqlDialectPresets).includes(options.preset ?? '') ? { format: 'sql' } : null)),\n  };\n\n  const format = lc(optObj.format);\n\n  const {\n    fallbackExpression: fallbackExpression_option,\n    getOperators: getOperators_option,\n    operatorProcessor: operatorProcessor_option,\n    parseNumbers,\n    quoteFieldNamesWith: quoteFieldNamesWith_option,\n    ruleGroupProcessor: ruleGroupProcessor_option,\n    ruleProcessor: ruleProcessor_option,\n    validator,\n    valueProcessor: valueProcessor_option,\n    context,\n  } = optObj;\n\n  const getParseNumberBoolean = (inputType?: InputType | null): boolean | undefined => {\n    const parseNumberMethod = getParseNumberMethod({ parseNumbers, inputType });\n    return typeof parseNumberMethod === 'string'\n      ? true\n      : typeof parseNumbers === 'boolean'\n        ? parseNumbers\n        : undefined;\n  };\n\n  const operatorProcessor =\n    typeof operatorProcessor_option === 'function'\n      ? operatorProcessor_option\n      : (defaultOperatorProcessors[format] ?? defaultOperatorProcessor);\n\n  const valueProcessor: ValueProcessorByRule =\n    typeof valueProcessor_option === 'function'\n      ? isValueProcessorLegacy(valueProcessor_option)\n        ? r => valueProcessor_option(r.field, r.operator, r.value, r.valueSource)\n        : valueProcessor_option\n      : format === 'natural_language'\n        ? defaultValueProcessorNL\n        : valueProcessorCanActAsRuleProcessor.has(format)\n          ? (ruleProcessor_option ?? defaultRuleProcessors[format])\n          : defaultValueProcessorByRule;\n\n  const ruleProcessor =\n    (typeof ruleProcessor_option === 'function' ? ruleProcessor_option : null) ??\n    (valueProcessorCanActAsRuleProcessor.has(format) &&\n    typeof ruleProcessor_option !== 'function' &&\n    valueProcessor_option\n      ? valueProcessor\n      : null) ??\n    defaultRuleProcessors[format] ??\n    defaultRuleProcessorSQL;\n\n  const quoteFieldNamesWith = getQuoteFieldNamesWithArray(quoteFieldNamesWith_option);\n  const fields = toFullOptionList(optObj.fields);\n  const getOperators: FormatQueryOptions['getOperators'] = (f, m) =>\n    toFullOptionList(\n      getOperators_option(f, m) ??\n        /* v8 ignore start -- @preserve */ [] /* v8 ignore stop -- @preserve */\n    );\n\n  const fallbackExpression =\n    fallbackExpression_option ??\n    defaultFallbackExpressions[format] ??\n    defaultFallbackExpressions.sql!;\n\n  // #region Validation\n  let validationMap: ValidationMap = {};\n\n  // v8 ignore else\n  if (typeof validator === 'function') {\n    const validationResult = validator(ruleGroup);\n    if (typeof validationResult === 'boolean') {\n      // v8 ignore else\n      if (!validationResult) {\n        // The \"diagnostics\" format still annotates the full tree\n        // when the validator returns `false`.\n        if (format !== 'diagnostics') {\n          return format === 'parameterized'\n            ? { sql: fallbackExpression, params: [] }\n            : format === 'parameterized_named'\n              ? { sql: fallbackExpression, params: {} }\n              : format === 'mongodb'\n                ? `{${fallbackExpression}}`\n                : format === 'mongodb_query'\n                  ? mongoDbFallback\n                  : format === 'prisma'\n                    ? prismaFallback\n                    : format === 'jsonlogic'\n                      ? false\n                      : format === 'elasticsearch'\n                        ? {}\n                        : format === 'drizzle' || format === 'sequelize' || format === 'tanstack_db'\n                          ? undefined\n                          : fallbackExpression;\n        }\n      }\n    } else {\n      validationMap = validationResult;\n    }\n  }\n\n  const validatorMap: Record<string, RuleValidator> = {};\n  const uniqueFields = toFlatOptionArray(fields) satisfies FullField[];\n  for (const f of uniqueFields) {\n    // v8 ignore else\n    if (typeof f.validator === 'function') {\n      validatorMap[\n        f.value ?? /* v8 ignore start -- @preserve */ f.name /* v8 ignore stop -- @preserve */\n      ] = f.validator as RuleValidator;\n    }\n  }\n\n  const validateRule = (rule: RuleType) => {\n    let validationResult: boolean | ValidationResult | undefined;\n    let fieldValidator: RuleValidator | undefined;\n    if (rule.id) {\n      validationResult = validationMap[rule.id];\n    }\n    if (uniqueFields.length > 0) {\n      const fieldArr = uniqueFields.filter(f => f.name === rule.field);\n      if (fieldArr.length > 0) {\n        const field = fieldArr[0];\n        // v8 ignore else\n        if (typeof field.validator === 'function') {\n          fieldValidator = field.validator as RuleValidator;\n        }\n      }\n    }\n    // Invalidate rules referencing an unknown named parameter\n    if (rule.valueSource === 'parameter' && typeof optObj.getParameters === 'function') {\n      const fieldData = getOption(fields, rule.field) as FullField;\n      const validParamNames = new Set(\n        toFlatOptionArray(\n          toFullOptionList(optObj.getParameters(rule.field, rule.operator, { fieldData }))\n        ).map(p => stripParamPrefix(p.value, optObj.paramPrefix))\n      );\n      if (!validParamNames.has(stripParamPrefix(rule.value, optObj.paramPrefix))) {\n        validationResult = false;\n      }\n    }\n    return [validationResult, fieldValidator] as const;\n  };\n  // #endregion\n\n  const finalOptions: FormatQueryFinalOptions = {\n    ...optObj,\n    fallbackExpression,\n    fields,\n    format,\n    getOperators,\n    getParseNumberBoolean,\n    quoteFieldNamesWith,\n    operatorProcessor,\n    ruleProcessor,\n    valueProcessor,\n    validateRule,\n    validationMap,\n    context,\n  };\n\n  if (typeof ruleGroupProcessor_option === 'function') {\n    return ruleGroupProcessor_option(ruleGroup, finalOptions);\n  }\n\n  switch (format) {\n    case 'json':\n    case 'json_without_ids': {\n      const rg = parseNumbers ? numerifyValues(ruleGroup, finalOptions) : ruleGroup;\n      if (format === 'json_without_ids') {\n        return JSON.stringify(rg, (key, value) =>\n          // Remove `id` and `path` keys; leave everything else unchanged.\n          key === 'id' || key === 'path' ? undefined : bigIntJsonStringifyReplacer(key, value)\n        );\n      }\n      return JSON.stringify(rg, bigIntJsonStringifyReplacer, 2);\n    }\n\n    case 'sql':\n      return defaultRuleGroupProcessorSQL(ruleGroup, finalOptions);\n\n    case 'parameterized':\n    case 'parameterized_named':\n      return defaultRuleGroupProcessorParameterized(ruleGroup, finalOptions);\n\n    case 'mongodb':\n      return defaultRuleGroupProcessorMongoDB(ruleGroup, finalOptions);\n\n    case 'mongodb_query':\n      return defaultRuleGroupProcessorMongoDBQuery(ruleGroup, finalOptions);\n\n    case 'cel':\n      return defaultRuleGroupProcessorCEL(ruleGroup, finalOptions);\n\n    case 'spel':\n      return defaultRuleGroupProcessorSpEL(ruleGroup, finalOptions);\n\n    case 'jsonata':\n      return defaultRuleGroupProcessorJSONata(ruleGroup, finalOptions);\n\n    case 'jsonlogic':\n      return defaultRuleGroupProcessorJsonLogic(ruleGroup, finalOptions);\n\n    case 'elasticsearch':\n      return defaultRuleGroupProcessorElasticSearch(ruleGroup, finalOptions);\n\n    case 'natural_language':\n      return defaultRuleGroupProcessorNL(ruleGroup, finalOptions);\n\n    case 'ldap':\n      return defaultRuleGroupProcessorLDAP(ruleGroup, finalOptions);\n\n    case 'prisma':\n      return defaultRuleGroupProcessorPrisma(ruleGroup, finalOptions);\n\n    case 'drizzle':\n      return defaultRuleGroupProcessorDrizzle(ruleGroup, finalOptions);\n\n    case 'tanstack_db':\n      return defaultRuleGroupProcessorTanStackDB(ruleGroup, finalOptions);\n\n    case 'sequelize':\n      return defaultRuleGroupProcessorSequelize(ruleGroup, finalOptions);\n\n    case 'cypher':\n    case 'gql':\n      return defaultRuleGroupProcessorCypher(ruleGroup, finalOptions);\n\n    case 'sparql':\n      return defaultRuleGroupProcessorSPARQL(ruleGroup, finalOptions);\n\n    case 'gremlin':\n      return defaultRuleGroupProcessorGremlin(ruleGroup, finalOptions);\n\n    case 'diagnostics':\n      return defaultRuleGroupProcessorDiagnostics(ruleGroup, finalOptions);\n\n    default:\n      return '';\n  }\n}\n\nexport { formatQuery };\n","/**\n * Converts a given query object into one of the supported {@link index!ExportFormat ExportFormat} formats.\n *\n * @module formatQuery\n */\n\nimport type { RuleProcessor, ValueProcessorByRule, ValueProcessorLegacy } from '../../types';\nimport { defaultRuleProcessorCEL } from './defaultRuleProcessorCEL';\nimport { defaultRuleProcessorMongoDB } from './defaultRuleProcessorMongoDB';\nimport { defaultRuleProcessorSpEL } from './defaultRuleProcessorSpEL';\nimport { defaultValueProcessorByRule } from './defaultValueProcessorByRule';\n\nconst generateValueProcessor =\n  (vpbr: ValueProcessorByRule): ValueProcessorLegacy =>\n  (field, operator, value, valueSource) =>\n    vpbr({ field, operator, value, valueSource }, { parseNumbers: false });\n/**\n * Default value processor used by {@link formatQuery} for \"sql\" format.\n *\n * @deprecated Prefer {@link defaultValueProcessorByRule}.\n *\n * @group Export\n */\nexport const defaultValueProcessor: ValueProcessorLegacy = generateValueProcessor(\n  defaultValueProcessorByRule\n);\n/**\n * @deprecated Prefer {@link defaultRuleProcessorMongoDB}.\n *\n * @group Export\n */\nexport const defaultMongoDBValueProcessor: ValueProcessorLegacy = generateValueProcessor(\n  defaultRuleProcessorMongoDB\n);\n/**\n * @deprecated Prefer {@link defaultRuleProcessorCEL}.\n *\n * @group Export\n */\nexport const defaultCELValueProcessor: ValueProcessorLegacy =\n  generateValueProcessor(defaultRuleProcessorCEL);\n/**\n * @deprecated Prefer {@link defaultRuleProcessorSpEL}.\n *\n * @group Export\n */\nexport const defaultSpELValueProcessor: ValueProcessorLegacy =\n  generateValueProcessor(defaultRuleProcessorSpEL);\n\nexport * from './defaultRuleGroupProcessorCEL';\nexport * from './defaultRuleGroupProcessorCypher';\nexport * from './defaultRuleGroupProcessorDrizzle';\nexport * from './defaultRuleGroupProcessorElasticSearch';\nexport * from './defaultRuleGroupProcessorGremlin';\nexport * from './defaultRuleGroupProcessorJSONata';\nexport * from './defaultRuleGroupProcessorJsonLogic';\nexport * from './defaultRuleGroupProcessorLDAP';\nexport * from './defaultRuleGroupProcessorMongoDB';\nexport * from './defaultRuleGroupProcessorMongoDBQuery';\nexport * from './defaultRuleGroupProcessorNL';\nexport * from './defaultRuleGroupProcessorParameterized';\nexport * from './defaultRuleGroupProcessorPrisma';\nexport * from './defaultRuleGroupProcessorSequelize';\nexport * from './defaultRuleGroupProcessorSPARQL';\nexport * from './defaultRuleGroupProcessorSpEL';\nexport * from './defaultRuleGroupProcessorSQL';\nexport * from './defaultRuleGroupProcessorTanStackDB';\nexport * from './defaultRuleGroupProcessorDiagnostics';\nexport * from './defaultRuleProcessorCypher';\nexport * from './defaultRuleProcessorDrizzle';\nexport * from './defaultRuleProcessorElasticSearch';\nexport * from './defaultRuleProcessorGremlin';\nexport * from './defaultRuleProcessorJSONata';\nexport * from './defaultRuleProcessorJsonLogic';\nexport * from './defaultRuleProcessorLDAP';\nexport * from './defaultRuleProcessorMongoDBQuery';\nexport * from './defaultRuleProcessorNL';\nexport * from './defaultRuleProcessorParameterized';\nexport * from './defaultRuleProcessorPrisma';\nexport * from './defaultRuleProcessorSequelize';\nexport * from './defaultRuleProcessorSPARQL';\nexport * from './defaultRuleProcessorSQL';\nexport * from './defaultRuleProcessorTanStackDB';\nexport * from './defaultValueProcessorNL';\nexport * from './formatQuery';\nexport * from './utils';\nexport {\n  defaultRuleProcessorCEL,\n  defaultRuleProcessorMongoDB,\n  defaultRuleProcessorSpEL,\n  defaultValueProcessorByRule,\n};\n/**\n * @deprecated Renamed to {@link defaultRuleProcessorCEL}.\n *\n * @group Export\n */\nexport const defaultValueProcessorCELByRule: RuleProcessor = defaultRuleProcessorCEL;\n/**\n * @deprecated Renamed to {@link defaultRuleProcessorMongoDB}.\n *\n * @group Export\n */\nexport const defaultValueProcessorMongoDBByRule: RuleProcessor = defaultRuleProcessorMongoDB;\n/**\n * @deprecated Renamed to {@link defaultRuleProcessorSpEL}.\n *\n * @group Export\n */\nexport const defaultValueProcessorSpELByRule: RuleProcessor = defaultRuleProcessorSpEL;\n"],"mappings":"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"}