@react-querybuilder/core 8.18.0 → 8.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +21 -13
  2. package/dist/cjs/react-querybuilder_core.cjs.development.js +200 -199
  3. package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
  4. package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +21 -13
  5. package/dist/cjs/react-querybuilder_core.cjs.production.js +1 -1
  6. package/dist/cjs/react-querybuilder_core.cjs.production.js.map +1 -1
  7. package/dist/{convertQuery-BoMPXL7_.js → convertQuery-BJKNgecE.js} +2 -2
  8. package/dist/{convertQuery-BoMPXL7_.js.map → convertQuery-BJKNgecE.js.map} +1 -1
  9. package/dist/{convertQuery-CQwOrjQr.mjs → convertQuery-J1CaoDxe.mjs} +2 -2
  10. package/dist/{convertQuery-CQwOrjQr.mjs.map → convertQuery-J1CaoDxe.mjs.map} +1 -1
  11. package/dist/formatQuery.d.mts +2 -2
  12. package/dist/formatQuery.d.ts +2 -2
  13. package/dist/formatQuery.js +195 -197
  14. package/dist/formatQuery.js.map +1 -1
  15. package/dist/formatQuery.mjs +195 -197
  16. package/dist/formatQuery.mjs.map +1 -1
  17. package/dist/{objectUtils-DxVaGCdg.js → objectUtils-DBJI82bl.js} +2 -2
  18. package/dist/objectUtils-DBJI82bl.js.map +1 -0
  19. package/dist/{objectUtils-D-w8MzpZ.mjs → objectUtils-ZvPkF6u6.mjs} +2 -2
  20. package/dist/objectUtils-ZvPkF6u6.mjs.map +1 -0
  21. package/dist/parseCEL.js +3 -3
  22. package/dist/parseCEL.js.map +1 -1
  23. package/dist/parseCEL.mjs +3 -3
  24. package/dist/parseCEL.mjs.map +1 -1
  25. package/dist/parseCypher.js.map +1 -1
  26. package/dist/parseCypher.mjs.map +1 -1
  27. package/dist/parseGremlin.js.map +1 -1
  28. package/dist/parseGremlin.mjs.map +1 -1
  29. package/dist/parseJSONata.js +2 -2
  30. package/dist/parseJSONata.js.map +1 -1
  31. package/dist/parseJSONata.mjs +2 -2
  32. package/dist/parseJSONata.mjs.map +1 -1
  33. package/dist/parseJsonLogic.js +4 -4
  34. package/dist/parseJsonLogic.js.map +1 -1
  35. package/dist/parseJsonLogic.mjs +4 -4
  36. package/dist/parseJsonLogic.mjs.map +1 -1
  37. package/dist/parseMongoDB.js +4 -4
  38. package/dist/parseMongoDB.js.map +1 -1
  39. package/dist/parseMongoDB.mjs +4 -4
  40. package/dist/parseMongoDB.mjs.map +1 -1
  41. package/dist/parseSPARQL.js.map +1 -1
  42. package/dist/parseSPARQL.mjs.map +1 -1
  43. package/dist/parseSQL.js +3 -3
  44. package/dist/parseSQL.js.map +1 -1
  45. package/dist/parseSQL.mjs +3 -3
  46. package/dist/parseSQL.mjs.map +1 -1
  47. package/dist/parseSpEL.js +3 -3
  48. package/dist/parseSpEL.js.map +1 -1
  49. package/dist/parseSpEL.mjs +3 -3
  50. package/dist/parseSpEL.mjs.map +1 -1
  51. package/dist/{prepareQueryObjects-BXf5aV-A.mjs → prepareQueryObjects-Cd_tt4oy.mjs} +3 -3
  52. package/dist/{prepareQueryObjects-BXf5aV-A.mjs.map → prepareQueryObjects-Cd_tt4oy.mjs.map} +1 -1
  53. package/dist/{prepareQueryObjects-gRQqiBPR.js → prepareQueryObjects-DaAXX792.js} +3 -3
  54. package/dist/{prepareQueryObjects-gRQqiBPR.js.map → prepareQueryObjects-DaAXX792.js.map} +1 -1
  55. package/dist/react-querybuilder_core.d.mts +21 -13
  56. package/dist/react-querybuilder_core.legacy-esm.d.ts +21 -13
  57. package/dist/react-querybuilder_core.legacy-esm.js +198 -197
  58. package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
  59. package/dist/react-querybuilder_core.mjs +200 -199
  60. package/dist/react-querybuilder_core.mjs.map +1 -1
  61. package/dist/react-querybuilder_core.production.d.mts +21 -13
  62. package/dist/react-querybuilder_core.production.mjs +1 -1
  63. package/dist/react-querybuilder_core.production.mjs.map +1 -1
  64. package/dist/transformQuery.js +1 -1
  65. package/dist/transformQuery.mjs +1 -1
  66. package/dist/{utils-ZlKseh1X.js → utils-BpaOtylk.js} +3 -3
  67. package/dist/utils-BpaOtylk.js.map +1 -0
  68. package/dist/{utils-01WaTGBL.mjs → utils-CJRGiPb-.mjs} +3 -3
  69. package/dist/utils-CJRGiPb-.mjs.map +1 -0
  70. package/package.json +8 -8
  71. package/dist/objectUtils-D-w8MzpZ.mjs.map +0 -1
  72. package/dist/objectUtils-DxVaGCdg.js.map +0 -1
  73. package/dist/utils-01WaTGBL.mjs.map +0 -1
  74. package/dist/utils-ZlKseh1X.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"formatQuery.js","names":["isPojo","isRuleGroup","celCombinatorMap","isRuleGroup","getOption","isRuleGroupType","shouldNegate","escapeDoubleQuotes","lc","shouldRenderAsNumber","processMatchMode","transformQuery","trimIfString","toArray","nullOrUndefinedOrEmpty","parseNumber","lc","isRuleGroup","getOption","convertFromIC","processNumber","shouldRenderAsNumber","parseNumber","processMatchMode","transformQuery","mongoOperators","lc","toArray","isValidValue","isRuleGroup","getOption","isRuleGroupType","shouldNegate","escapeSingleQuotes","lc","shouldRenderAsNumber","processMatchMode","transformQuery","trimIfString","toArray","nullOrUndefinedOrEmpty","parseNumber","escapeStringValueQuotes","lc","getQuotedFieldName","toArray","shouldRenderAsNumber","trimIfString","isValidValue","parseNumber","isRuleGroup","getOption","isRuleGroupType","lc","shouldRenderAsNumber","parseNumber","processMatchMode","transformQuery","toArray","isValidValue","isRuleGroup","getOption","convertFromIC","isRuleGroup","getOption","convertFromIC","isRuleGroup","getOption","isRuleGroup","getOption","isRuleGroupType","convertFromIC","isRuleGroup","getOption","isRuleGroup","getOption","convertFromIC","lc","isRuleGroup","getOption","convertFromIC","isRuleGroupTypeIC","lc","convertFromIC","isRuleGroup","getOption","getNLTranslataion","isRuleGroupType","getOption","isPojo","isRuleGroup","isRuleGroupType","isRuleGroup","getOption","convertFromIC","isRuleGroup","getOption","lc","convertFromIC","celCombinatorMap","isRuleGroup","getOption","isRuleGroupType","isRuleGroup","getOption","isRuleGroupType","lc","shouldRenderAsNumber","parseNumber","toArray","isValidValue","isRuleGroup","getOption","convertFromIC","numericRegex","toFlatOptionArray","isRuleGroup","isRuleGroupType","escapeSingleQuotes","trimIfString","shouldRenderAsNumber","toArray","negateIfNotOp","shouldRenderAsNumber","parseNumber","lc","processMatchMode","transformQuery","toArray","isValidValue","trimIfString","shouldRenderAsNumber","toArray","shouldRenderAsNumber","getQuotedFieldName","processMatchMode","transformQuery","lc","trimIfString","toArray","nullOrUndefinedOrEmpty","parseNumber","shouldRenderAsNumber","parseNumber","processMatchMode","isRuleGroup","lc","toArray","isValidValue","trimIfString","lc","nullOrUndefinedOrEmpty","processMatchMode","toArray","shouldRenderAsNumber","parseNumber","lc","getQuotedFieldName","toArray","getOption","isValidValue","shouldRenderAsNumber","trimIfString","lc","toArray","getOption","toFullOptionList","getQuotedFieldName","processMatchMode","normalizeConstituentWordOrder","lc","mapSQLOperator","getQuotedFieldName","processMatchMode","transformQuery","getQuotedFieldName","processMatchMode","transformQuery","lc","toArray","shouldRenderAsNumber","parseNumber","shouldRenderAsNumber","parseNumber","processMatchMode","lc","prismaOperators","toArray","isValidValue","processMatchMode","lc","shouldRenderAsNumber","parseNumber","toArray","isValidValue","trimIfString","shouldRenderAsNumber","toArray","lc","getParseNumberMethod","isValueProcessorLegacy","getQuoteFieldNamesWithArray","toFullOptionList","toFlatOptionArray","numerifyValues","bigIntJsonStringifyReplacer"],"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/defaultRuleProcessorDrizzle.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/defaultRuleProcessorTanStackDB.ts","../src/utils/formatQuery/defaultRuleGroupProcessorTanStackDB.ts","../src/utils/formatQuery/defaultRuleGroupProcessorDiagnostics.ts","../src/utils/formatQuery/defaultRuleProcessorCypher.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/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, shouldRenderAsNumber } from './utils';\n\nconst shouldNegate = (op: string) => op.startsWith('not') || op.startsWith('doesnot');\n\n// oxlint-disable-next-line no-explicit-any\nconst escapeDoubleQuotes = (v: any, 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 const valueIsField = valueSource === 'field';\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 // TODO?: Randomize this alias\n const arrayElementAlias = 'elem_alias';\n\n const celQuery = transformQuery(rule.value as RuleGroupType, {\n ruleProcessor: r => ({ ...r, field: `${arrayElementAlias}${r.field ? `.${r.field}` : ''}` }),\n });\n const nestedArrayFilter = defaultRuleGroupProcessorCEL(\n celQuery,\n opts as FormatQueryFinalOptions\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\n// oxlint-disable-next-line no-explicit-any\nconst escapeSingleQuotes = (v: any, 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 const valueIsField = valueSource === 'field';\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 return wrapInNegation(\n `${field} matches ${\n valueIsField || useBareValue\n ? trimIfString(value)\n : `'${escapeSingleQuotes(value, escapeQuotes)}'`\n }`,\n shouldNegate(operatorTL)\n );\n\n case 'beginswith':\n case 'doesnotbeginwith': {\n const valueTL = valueIsField\n ? `'^'.concat(${trimIfString(value)})`\n : `'${\n (typeof value === 'string' && !value.startsWith('^')) || useBareValue ? '^' : ''\n }${escapeSingleQuotes(value, escapeQuotes)}'`;\n return wrapInNegation(`${field} matches ${valueTL}`, shouldNegate(operatorTL));\n }\n\n case 'endswith':\n case 'doesnotendwith': {\n const valueTL = valueIsField\n ? `${trimIfString(value)}.concat('$')`\n : `'${escapeSingleQuotes(value, escapeQuotes)}${\n (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 { getQuotedFieldName, isValidValue, shouldRenderAsNumber } from './utils';\n\n// oxlint-disable-next-line no-explicit-any\nconst escapeStringValueQuotes = (v: any, 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 wrapValueWith = ['', ''],\n translations,\n } = {}\n) => {\n const valueIsField = valueSource === 'field';\n const operatorLowerCase = lc(operator);\n const quoteChar = quoteValuesWith || \"'\";\n\n // oxlint-disable no-explicit-any\n const quoteValue = (v: any) =>\n `${wrapValueWith[0]}${quoteChar}${v}${quoteChar}${wrapValueWith[1]}`;\n const escapeValue = (v: any) => escapeStringValueQuotes(v, quoteChar, escapeQuotes);\n const wrapAndEscape = (v: any) => quoteValue(escapeValue(v));\n // oxlint-enable no-explicit-any\n const wrapFieldName = (v: string) =>\n getQuotedFieldName(v, { quoteFieldNamesWith, fieldIdentifierSeparator });\n const concat = (...values: string[]) =>\n concatOperator.toUpperCase() === 'CONCAT'\n ? `CONCAT(${values.join(', ')})`\n : values.join(` ${concatOperator} `);\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 ? concat(quoteValue('%'), wrapFieldName(value), quoteValue('%'))\n : quoteValue(`%${escapeValue(value)}%`);\n\n case 'beginswith':\n case 'doesnotbeginwith':\n return valueIsField\n ? concat(wrapFieldName(value), quoteValue('%'))\n : quoteValue(`${escapeValue(value)}%`);\n\n case 'endswith':\n case 'doesnotendwith':\n return valueIsField\n ? concat(quoteValue('%'), wrapFieldName(value))\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, 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 { isValidValue, processMatchMode, shouldRenderAsNumber } 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) => (valueIsField ? columns[v] : v);\n\n // Parse value as number when applicable\n const maybeParseNumber = (v: string) => {\n if (valueIsField || !parseNumbers) return asFieldOrValue(v);\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 // TODO?: Randomize this alias\n const arrayElementAlias = 'elem_alias';\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 });\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 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 !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 { 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';\nimport { defaultRuleProcessorDrizzle } from './defaultRuleProcessorDrizzle';\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<\n (columns: Record<string, Column> | Table, drizzleOperators: Operators) => SQL | undefined\n> =\n (ruleGroup, options, _meta) =>\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 } = options;\n\n if (!columns || !drizzleOperators) return undefined;\n\n const { and, not, or } = drizzleOperators;\n\n const ruleProcessor = defaultRuleProcessorDrizzle;\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 };\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 */\n// TODO?: make this configurable\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, WhereOptions } 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 * Rule group processor used by {@link formatQuery} for \"sequelize\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorSequelize: RuleGroupProcessor<WhereOptions | undefined> = (\n ruleGroup,\n options\n) => {\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 = (rg: RuleGroupType, _outermost?: boolean): WhereOptions | 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 { RuleProcessor } from '../../types';\nimport { toArray } from '../arrayUtils';\nimport { lc } from '../misc';\nimport { parseNumber } from '../parseNumber';\nimport type { TanStackDbWhereCallbackReturnType } 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): TanStackDbWhereCallbackReturnType | 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 // oxlint-disable-next-line typescript/no-explicit-any\n const asFieldOrValue = (v: any) => (valueIsField ? resolveField(v) : v);\n\n // Parse value as number when applicable\n // oxlint-disable-next-line typescript/no-explicit-any\n const maybeParseNumber = (v: any) => {\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 { RuleGroupProcessor, RuleGroupType } from '../../types';\nimport { convertFromIC } from '../convertQuery';\nimport { isRuleGroup } from '../isRuleGroup';\nimport { isRuleOrGroupValid } from '../isRuleOrGroupValid';\nimport { getOption } from '../optGroupUtils';\nimport { defaultRuleProcessorTanStackDB } from './defaultRuleProcessorTanStackDB';\nimport type {\n TanStackDbWhereCallback,\n TanStackDbWhereCallbackReturnType,\n TsDbOperators,\n} 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 } = options;\n\n const ops = context.tanStackDbOperators as TsDbOperators;\n\n if (!ops) return undefined as unknown as TanStackDbWhereCallbackReturnType;\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 ruleProcessor = defaultRuleProcessorTanStackDB;\n\n const processRuleGroup = (rg: RuleGroupType): TanStackDbWhereCallbackReturnType | 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: TanStackDbWhereCallbackReturnType[] = 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\n// oxlint-disable-next-line no-explicit-any\nconst escapeSingleQuotes = (v: any, 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);\n if (typeof v === 'number' || shouldRenderAsNumber(v, parseNumbers)) return trimIfString(v);\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 {\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\n// oxlint-disable-next-line typescript/no-explicit-any\nconst valueRenderer = (v: any, 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\n// oxlint-disable-next-line no-explicit-any\nconst escapeSingleQuotes = (v: any, 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);\n if (typeof v === 'number' || shouldRenderAsNumber(v, parseNumbers)) return trimIfString(v);\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\n// oxlint-disable-next-line no-explicit-any\nconst quote = (v: any, 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: string) =>\n getQuotedFieldName(f, { 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: string, 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: string) =>\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 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 !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 // oxlint-disable no-explicit-any\n const quoteValue = (v: any) => `${quoteChar}${v}${quoteChar}`;\n const escapeValue = (v: any) => escapeStringValueQuotes(v, quoteChar, escapeQuotes);\n const wrapAndEscape = (v: any) => quoteValue(escapeValue(v));\n // oxlint-enable no-explicit-any\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 { getQuotedFieldName, mapSQLOperator, processMatchMode } 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 // TODO?: Randomize this alias\n const arrayElementAlias = 'elem_alias';\n\n const nestedArrayFilter = defaultRuleGroupProcessorSQL(\n transformQuery(rule.value as RuleGroupType, {\n ruleProcessor: r => ({ ...r, field: arrayElementAlias }),\n }),\n opts as FormatQueryFinalOptions\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 { getQuotedFieldName, processMatchMode, shouldRenderAsNumber } 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 // TODO?: test for this so we don't have to ignore it\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 // TODO?: Randomize this alias\n const arrayElementAlias = 'elem_alias';\n\n const { sql: nestedSQL, params: nestedParams } = defaultRuleGroupProcessorParameterized(\n transformQuery(rule.value as RuleGroupType, {\n ruleProcessor: r => ({ ...r, field: arrayElementAlias }),\n }),\n { ...(opts as FormatQueryFinalOptions), fields: [] as FullField[] }\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 === '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\n// oxlint-disable-next-line no-explicit-any\nconst escapeDoubleQuotes = (v: any, 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));\n if (typeof v === 'number' || shouldRenderAsNumber(v, parseNumbers)) return trimIfString(v);\n const s =\n typeof v === 'string' ? v : /* v8 ignore next -- @preserve */ (JSON.stringify(v) ?? '');\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 { 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 { 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} 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>;\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) as FullOptionList<FullField>;\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;\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;\n }\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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"}
1
+ {"version":3,"file":"formatQuery.js","names":["isPojo","isRuleGroup","celCombinatorMap","isRuleGroup","getOption","isRuleGroupType","shouldNegate","escapeDoubleQuotes","lc","shouldRenderAsNumber","processMatchMode","transformQuery","trimIfString","toArray","nullOrUndefinedOrEmpty","parseNumber","lc","isRuleGroup","getOption","convertFromIC","processNumber","shouldRenderAsNumber","parseNumber","processMatchMode","transformQuery","mongoOperators","lc","toArray","isValidValue","isRuleGroup","getOption","isRuleGroupType","shouldNegate","escapeSingleQuotes","lc","shouldRenderAsNumber","processMatchMode","transformQuery","trimIfString","toArray","nullOrUndefinedOrEmpty","parseNumber","escapeStringValueQuotes","lc","getQuotedFieldName","toArray","shouldRenderAsNumber","trimIfString","isValidValue","parseNumber","isRuleGroup","getOption","isRuleGroupType","isRuleGroup","getOption","convertFromIC","isRuleGroup","getOption","convertFromIC","isRuleGroup","getOption","isRuleGroup","getOption","isRuleGroupType","convertFromIC","isRuleGroup","getOption","isRuleGroup","getOption","convertFromIC","lc","isRuleGroup","getOption","convertFromIC","isRuleGroupTypeIC","lc","convertFromIC","isRuleGroup","getOption","getNLTranslataion","isRuleGroupType","getOption","isPojo","isRuleGroup","isRuleGroupType","isRuleGroup","getOption","convertFromIC","isRuleGroup","getOption","lc","convertFromIC","celCombinatorMap","isRuleGroup","getOption","isRuleGroupType","isRuleGroup","getOption","isRuleGroupType","isRuleGroup","getOption","convertFromIC","numericRegex","toFlatOptionArray","isRuleGroup","isRuleGroupType","escapeSingleQuotes","trimIfString","shouldRenderAsNumber","toArray","lc","shouldRenderAsNumber","parseNumber","processMatchMode","transformQuery","toArray","isValidValue","negateIfNotOp","shouldRenderAsNumber","parseNumber","lc","processMatchMode","transformQuery","toArray","isValidValue","trimIfString","shouldRenderAsNumber","toArray","shouldRenderAsNumber","getQuotedFieldName","processMatchMode","transformQuery","lc","trimIfString","toArray","nullOrUndefinedOrEmpty","parseNumber","shouldRenderAsNumber","parseNumber","processMatchMode","isRuleGroup","lc","toArray","isValidValue","trimIfString","lc","nullOrUndefinedOrEmpty","processMatchMode","toArray","shouldRenderAsNumber","parseNumber","lc","getQuotedFieldName","toArray","getOption","isValidValue","shouldRenderAsNumber","trimIfString","lc","toArray","getOption","toFullOptionList","getQuotedFieldName","processMatchMode","normalizeConstituentWordOrder","lc","mapSQLOperator","getQuotedFieldName","processMatchMode","transformQuery","getQuotedFieldName","processMatchMode","transformQuery","lc","toArray","shouldRenderAsNumber","parseNumber","shouldRenderAsNumber","parseNumber","processMatchMode","lc","prismaOperators","toArray","isValidValue","processMatchMode","lc","shouldRenderAsNumber","parseNumber","toArray","isValidValue","trimIfString","shouldRenderAsNumber","toArray","lc","shouldRenderAsNumber","parseNumber","toArray","isValidValue","lc","getParseNumberMethod","isValueProcessorLegacy","getQuoteFieldNamesWithArray","toFullOptionList","toFlatOptionArray","numerifyValues","bigIntJsonStringifyReplacer"],"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, 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 const valueIsField = valueSource === 'field';\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 // TODO?: Randomize this alias\n const arrayElementAlias = 'elem_alias';\n\n const celQuery = transformQuery(rule.value as RuleGroupType, {\n ruleProcessor: r => ({ ...r, field: `${arrayElementAlias}${r.field ? `.${r.field}` : ''}` }),\n });\n const nestedArrayFilter = defaultRuleGroupProcessorCEL(\n celQuery,\n opts as FormatQueryFinalOptions\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 const valueIsField = valueSource === 'field';\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 return wrapInNegation(\n `${field} matches ${\n valueIsField || useBareValue\n ? trimIfString(value)\n : `'${escapeSingleQuotes(value, escapeQuotes)}'`\n }`,\n shouldNegate(operatorTL)\n );\n\n case 'beginswith':\n case 'doesnotbeginwith': {\n const valueTL = valueIsField\n ? `'^'.concat(${trimIfString(value)})`\n : `'${\n (typeof value === 'string' && !value.startsWith('^')) || useBareValue ? '^' : ''\n }${escapeSingleQuotes(value, escapeQuotes)}'`;\n return wrapInNegation(`${field} matches ${valueTL}`, shouldNegate(operatorTL));\n }\n\n case 'endswith':\n case 'doesnotendwith': {\n const valueTL = valueIsField\n ? `${trimIfString(value)}.concat('$')`\n : `'${escapeSingleQuotes(value, escapeQuotes)}${\n (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 { 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 : 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 wrapValueWith = ['', ''],\n translations,\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 concat = (...values: string[]) =>\n concatOperator.toUpperCase() === 'CONCAT'\n ? `CONCAT(${values.join(', ')})`\n : values.join(` ${concatOperator} `);\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 ? concat(quoteValue('%'), wrapFieldName(value), quoteValue('%'))\n : quoteValue(`%${escapeValue(value)}%`);\n\n case 'beginswith':\n case 'doesnotbeginwith':\n return valueIsField\n ? concat(wrapFieldName(value), quoteValue('%'))\n : quoteValue(`${escapeValue(value)}%`);\n\n case 'endswith':\n case 'doesnotendwith':\n return valueIsField\n ? concat(quoteValue('%'), wrapFieldName(value))\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 * 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<\n (columns: Record<string, Column> | Table, drizzleOperators: Operators) => SQL | undefined\n> =\n (ruleGroup, options, _meta) =>\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 };\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 */\n// TODO?: make this configurable\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, WhereOptions } 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 * Rule group processor used by {@link formatQuery} for \"sequelize\" format.\n *\n * @group Export\n */\nexport const defaultRuleGroupProcessorSequelize: RuleGroupProcessor<WhereOptions | undefined> = (\n ruleGroup,\n options\n) => {\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 = (rg: RuleGroupType, _outermost?: boolean): WhereOptions | 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 {\n TanStackDbWhereCallback,\n TanStackDbWhereCallbackReturnType,\n TsDbOperators,\n} 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 as unknown as TanStackDbWhereCallbackReturnType;\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): TanStackDbWhereCallbackReturnType | 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: TanStackDbWhereCallbackReturnType[] = 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 { isValidValue, processMatchMode, shouldRenderAsNumber } 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 // TODO?: Randomize this alias\n const arrayElementAlias = 'elem_alias';\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 });\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 { getQuotedFieldName, mapSQLOperator, processMatchMode } 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 // TODO?: Randomize this alias\n const arrayElementAlias = 'elem_alias';\n\n const nestedArrayFilter = defaultRuleGroupProcessorSQL(\n transformQuery(rule.value as RuleGroupType, {\n ruleProcessor: r => ({ ...r, field: arrayElementAlias }),\n }),\n opts as FormatQueryFinalOptions\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 { getQuotedFieldName, processMatchMode, shouldRenderAsNumber } 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 // TODO?: test for this so we don't have to ignore it\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 // TODO?: Randomize this alias\n const arrayElementAlias = 'elem_alias';\n\n const { sql: nestedSQL, params: nestedParams } = defaultRuleGroupProcessorParameterized(\n transformQuery(rule.value as RuleGroupType, {\n ruleProcessor: r => ({ ...r, field: arrayElementAlias }),\n }),\n { ...(opts as FormatQueryFinalOptions), fields: [] as FullField[] }\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 === '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 const s =\n typeof v === 'string' ? v : /* v8 ignore next -- @preserve */ (JSON.stringify(v) ?? '');\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 { TanStackDbWhereCallbackReturnType } 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): TanStackDbWhereCallbackReturnType | 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 { 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} 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>;\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) as FullOptionList<FullField>;\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;\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;\n }\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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"}