@react-querybuilder/core 8.15.0 → 8.16.1

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 (92) hide show
  1. package/README.md +114 -53
  2. package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +95 -17
  3. package/dist/cjs/react-querybuilder_core.cjs.development.js +425 -24
  4. package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
  5. package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +95 -17
  6. package/dist/cjs/react-querybuilder_core.cjs.production.js +1 -1
  7. package/dist/cjs/react-querybuilder_core.cjs.production.js.map +1 -1
  8. package/dist/convertQuery-BeJJH9BI.mjs.map +1 -1
  9. package/dist/convertQuery-Lx2HQa0m.js.map +1 -1
  10. package/dist/formatQuery.d.mts +72 -2
  11. package/dist/formatQuery.d.ts +72 -2
  12. package/dist/formatQuery.js +425 -24
  13. package/dist/formatQuery.js.map +1 -1
  14. package/dist/formatQuery.mjs +418 -25
  15. package/dist/formatQuery.mjs.map +1 -1
  16. package/dist/{import-0wp72lLT.d.mts → import-BC_bAKQ8.d.mts} +2 -2
  17. package/dist/{import-yRVJh7E1.d.ts → import-D1KnXhkQ.d.ts} +2 -2
  18. package/dist/{index-D5TXNIzF.d.ts → index-AAZg4Uh1.d.mts} +15 -8
  19. package/dist/{index-Lht_Wq3V.d.mts → index-Ds06V0zO.d.ts} +15 -8
  20. package/dist/objectUtils-Bzug_QfX.js.map +1 -1
  21. package/dist/objectUtils-D96eEEzL.mjs.map +1 -1
  22. package/dist/parseCEL.d.mts +2 -2
  23. package/dist/parseCEL.d.ts +2 -2
  24. package/dist/parseCEL.js.map +1 -1
  25. package/dist/parseCEL.mjs.map +1 -1
  26. package/dist/parseCypher.d.mts +49 -0
  27. package/dist/parseCypher.d.ts +49 -0
  28. package/dist/parseCypher.js +578 -0
  29. package/dist/parseCypher.js.map +1 -0
  30. package/dist/parseCypher.mjs +575 -0
  31. package/dist/parseCypher.mjs.map +1 -0
  32. package/dist/parseGremlin.d.mts +35 -0
  33. package/dist/parseGremlin.d.ts +35 -0
  34. package/dist/parseGremlin.js +192 -0
  35. package/dist/parseGremlin.js.map +1 -0
  36. package/dist/parseGremlin.mjs +191 -0
  37. package/dist/parseGremlin.mjs.map +1 -0
  38. package/dist/parseJSONata.d.mts +2 -2
  39. package/dist/parseJSONata.d.ts +2 -2
  40. package/dist/parseJSONata.js.map +1 -1
  41. package/dist/parseJSONata.mjs.map +1 -1
  42. package/dist/parseJsonLogic.d.mts +2 -2
  43. package/dist/parseJsonLogic.d.ts +2 -2
  44. package/dist/parseJsonLogic.js.map +1 -1
  45. package/dist/parseJsonLogic.mjs.map +1 -1
  46. package/dist/parseMongoDB.d.mts +2 -2
  47. package/dist/parseMongoDB.d.ts +2 -2
  48. package/dist/parseMongoDB.js.map +1 -1
  49. package/dist/parseMongoDB.mjs.map +1 -1
  50. package/dist/parseSPARQL.d.mts +34 -0
  51. package/dist/parseSPARQL.d.ts +34 -0
  52. package/dist/parseSPARQL.js +253 -0
  53. package/dist/parseSPARQL.js.map +1 -0
  54. package/dist/parseSPARQL.mjs +251 -0
  55. package/dist/parseSPARQL.mjs.map +1 -0
  56. package/dist/parseSQL.d.mts +2 -2
  57. package/dist/parseSQL.d.ts +2 -2
  58. package/dist/parseSQL.js.map +1 -1
  59. package/dist/parseSQL.mjs.map +1 -1
  60. package/dist/parseSpEL.d.mts +2 -2
  61. package/dist/parseSpEL.d.ts +2 -2
  62. package/dist/parseSpEL.js.map +1 -1
  63. package/dist/parseSpEL.mjs.map +1 -1
  64. package/dist/prepareQueryObjects-BoG5Rt8z.js.map +1 -1
  65. package/dist/prepareQueryObjects-uA10ZpZX.mjs.map +1 -1
  66. package/dist/react-querybuilder_core.d.mts +95 -17
  67. package/dist/react-querybuilder_core.legacy-esm.d.ts +95 -17
  68. package/dist/react-querybuilder_core.legacy-esm.js +435 -37
  69. package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
  70. package/dist/react-querybuilder_core.mjs +418 -25
  71. package/dist/react-querybuilder_core.mjs.map +1 -1
  72. package/dist/react-querybuilder_core.production.d.mts +95 -17
  73. package/dist/react-querybuilder_core.production.mjs +1 -1
  74. package/dist/react-querybuilder_core.production.mjs.map +1 -1
  75. package/dist/transformQuery.d.mts +1 -1
  76. package/dist/transformQuery.d.ts +1 -1
  77. package/dist/transformQuery.js.map +1 -1
  78. package/dist/transformQuery.mjs.map +1 -1
  79. package/dist/utils-ChLG90DP.mjs.map +1 -1
  80. package/dist/utils-Qwkq2Q0F.js.map +1 -1
  81. package/formatQuery/package.json +1 -1
  82. package/package.json +51 -7
  83. package/parseCEL/package.json +1 -1
  84. package/parseCypher/package.json +4 -0
  85. package/parseGremlin/package.json +4 -0
  86. package/parseJSONata/package.json +1 -1
  87. package/parseJsonLogic/package.json +1 -1
  88. package/parseMongoDB/package.json +1 -1
  89. package/parseSPARQL/package.json +4 -0
  90. package/parseSQL/package.json +1 -1
  91. package/parseSpEL/package.json +1 -1
  92. package/transformQuery/package.json +1 -1
@@ -83,7 +83,7 @@ const defaultRuleGroupProcessorCEL = (ruleGroup, options) => {
83
83
  //#endregion
84
84
  //#region src/utils/formatQuery/defaultRuleProcessorCEL.ts
85
85
  const shouldNegate$2 = (op) => op.startsWith("not") || op.startsWith("doesnot");
86
- const escapeDoubleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`);
86
+ const escapeDoubleQuotes$1 = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`);
87
87
  /**
88
88
  * Default rule processor used by {@link formatQuery} for "cel" format.
89
89
  *
@@ -125,19 +125,19 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
125
125
  case "==":
126
126
  case "!=":
127
127
  case ">":
128
- case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? require_utils.trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`}`;
128
+ case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? require_utils.trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`}`;
129
129
  case "contains":
130
- case "doesnotcontain": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.contains(${valueIsField ? require_utils.trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
130
+ case "doesnotcontain": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.contains(${valueIsField ? require_utils.trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`})`;
131
131
  case "beginswith":
132
- case "doesnotbeginwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.startsWith(${valueIsField ? require_utils.trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
132
+ case "doesnotbeginwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.startsWith(${valueIsField ? require_utils.trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`})`;
133
133
  case "endswith":
134
- case "doesnotendwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.endsWith(${valueIsField ? require_utils.trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
134
+ case "doesnotendwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.endsWith(${valueIsField ? require_utils.trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`})`;
135
135
  case "null": return `${field} == null`;
136
136
  case "notnull": return `${field} != null`;
137
137
  case "in":
138
138
  case "notin": {
139
139
  const [prefix, suffix] = shouldNegate$2(operatorTL) ? ["!(", ")"] : ["", ""];
140
- return `${prefix}${field} in [${require_utils.toArray(value).map((val) => valueIsField || require_utils.shouldRenderAsNumber(val, parseNumbers) ? `${require_utils.trimIfString(val)}` : `"${escapeDoubleQuotes(val, escapeQuotes)}"`).join(", ")}]${suffix}`;
140
+ return `${prefix}${field} in [${require_utils.toArray(value).map((val) => valueIsField || require_utils.shouldRenderAsNumber(val, parseNumbers) ? `${require_utils.trimIfString(val)}` : `"${escapeDoubleQuotes$1(val, escapeQuotes)}"`).join(", ")}]${suffix}`;
141
141
  }
142
142
  case "between":
143
143
  case "notbetween": {
@@ -147,8 +147,8 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
147
147
  const shouldParseNumbers = !(parseNumbers === false);
148
148
  const firstNum = require_utils.shouldRenderAsNumber(first, shouldParseNumbers) ? require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers }) : NaN;
149
149
  const secondNum = require_utils.shouldRenderAsNumber(second, shouldParseNumbers) ? require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers }) : NaN;
150
- let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `"${escapeDoubleQuotes(first, escapeQuotes)}"` : firstNum;
151
- let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `"${escapeDoubleQuotes(second, escapeQuotes)}"` : secondNum;
150
+ let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `"${escapeDoubleQuotes$1(first, escapeQuotes)}"` : firstNum;
151
+ let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `"${escapeDoubleQuotes$1(second, escapeQuotes)}"` : secondNum;
152
152
  if (!preserveValueOrder && firstValue === firstNum && secondValue === secondNum && secondNum < firstNum) {
153
153
  const tempNum = secondNum;
154
154
  secondValue = firstNum;
@@ -404,7 +404,7 @@ const defaultRuleGroupProcessorSpEL = (ruleGroup, options) => {
404
404
  //#region src/utils/formatQuery/defaultRuleProcessorSpEL.ts
405
405
  const shouldNegate$1 = (op) => op.startsWith("not") || op.startsWith("doesnot");
406
406
  const wrapInNegation = (clause, negate) => negate ? `!(${clause})` : clause;
407
- const escapeSingleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`'`, `\\'`);
407
+ const escapeSingleQuotes$2 = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`'`, `\\'`);
408
408
  /**
409
409
  * Default rule processor used by {@link formatQuery} for "spel" format.
410
410
  *
@@ -445,20 +445,20 @@ const defaultRuleProcessorSpEL = (rule, opts = {}) => {
445
445
  case "==":
446
446
  case "!=":
447
447
  case ">":
448
- case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? require_utils.trimIfString(value) : `'${escapeSingleQuotes(value, escapeQuotes)}'`}`;
448
+ case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? require_utils.trimIfString(value) : `'${escapeSingleQuotes$2(value, escapeQuotes)}'`}`;
449
449
  case "contains":
450
- case "doesnotcontain": return wrapInNegation(`${field} matches ${valueIsField || useBareValue ? require_utils.trimIfString(value) : `'${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
450
+ case "doesnotcontain": return wrapInNegation(`${field} matches ${valueIsField || useBareValue ? require_utils.trimIfString(value) : `'${escapeSingleQuotes$2(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
451
451
  case "beginswith":
452
- case "doesnotbeginwith": return wrapInNegation(`${field} matches ${valueIsField ? `'^'.concat(${require_utils.trimIfString(value)})` : `'${typeof value === "string" && !value.startsWith("^") || useBareValue ? "^" : ""}${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
452
+ case "doesnotbeginwith": return wrapInNegation(`${field} matches ${valueIsField ? `'^'.concat(${require_utils.trimIfString(value)})` : `'${typeof value === "string" && !value.startsWith("^") || useBareValue ? "^" : ""}${escapeSingleQuotes$2(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
453
453
  case "endswith":
454
- case "doesnotendwith": return wrapInNegation(`${field} matches ${valueIsField ? `${require_utils.trimIfString(value)}.concat('$')` : `'${escapeSingleQuotes(value, escapeQuotes)}${typeof value === "string" && !value.endsWith("$") || useBareValue ? "$" : ""}'`}`, shouldNegate$1(operatorTL));
454
+ case "doesnotendwith": return wrapInNegation(`${field} matches ${valueIsField ? `${require_utils.trimIfString(value)}.concat('$')` : `'${escapeSingleQuotes$2(value, escapeQuotes)}${typeof value === "string" && !value.endsWith("$") || useBareValue ? "$" : ""}'`}`, shouldNegate$1(operatorTL));
455
455
  case "null": return `${field} == null`;
456
456
  case "notnull": return `${field} != null`;
457
457
  case "in":
458
458
  case "notin": {
459
459
  const negate = shouldNegate$1(operatorTL) ? "!" : "";
460
460
  const valueAsArray = require_utils.toArray(value);
461
- return valueAsArray.length > 0 ? `${negate}(${valueAsArray.map((val) => `${field} == ${valueIsField || require_utils.shouldRenderAsNumber(val, parseNumbers) ? `${require_utils.trimIfString(val)}` : `'${escapeSingleQuotes(val, escapeQuotes)}'`}`).join(" or ")})` : "";
461
+ return valueAsArray.length > 0 ? `${negate}(${valueAsArray.map((val) => `${field} == ${valueIsField || require_utils.shouldRenderAsNumber(val, parseNumbers) ? `${require_utils.trimIfString(val)}` : `'${escapeSingleQuotes$2(val, escapeQuotes)}'`}`).join(" or ")})` : "";
462
462
  }
463
463
  case "between":
464
464
  case "notbetween": {
@@ -468,8 +468,8 @@ const defaultRuleProcessorSpEL = (rule, opts = {}) => {
468
468
  const shouldParseNumbers = !(parseNumbers === false);
469
469
  const firstNum = require_utils.shouldRenderAsNumber(first, shouldParseNumbers) ? require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers }) : NaN;
470
470
  const secondNum = require_utils.shouldRenderAsNumber(second, shouldParseNumbers) ? require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers }) : NaN;
471
- let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `'${escapeSingleQuotes(first, escapeQuotes)}'` : firstNum;
472
- let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `'${escapeSingleQuotes(second, escapeQuotes)}'` : secondNum;
471
+ let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `'${escapeSingleQuotes$2(first, escapeQuotes)}'` : firstNum;
472
+ let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `'${escapeSingleQuotes$2(second, escapeQuotes)}'` : secondNum;
473
473
  if (!preserveValueOrder && firstValue === firstNum && secondValue === secondNum && secondNum < firstNum) {
474
474
  const tempNum = secondNum;
475
475
  secondValue = firstNum;
@@ -524,7 +524,7 @@ const defaultValueProcessorByRule = ({ operator, value, valueSource }, { escapeQ
524
524
  valsOneAndTwoOnly[0] = secondNum;
525
525
  valsOneAndTwoOnly[1] = firstNum;
526
526
  }
527
- return (valueIsField ? valsOneAndTwoOnly.map((v) => wrapFieldName(v)) : valsOneAndTwoOnly.every((v) => require_utils.shouldRenderAsNumber(v, parseNumbers)) ? valsOneAndTwoOnly.map((v) => require_utils.parseNumber(v, { parseNumbers: "strict" })) : valsOneAndTwoOnly.map((v) => wrapAndEscape(v))).join(` ${translations?.and ?? "and"} `);
527
+ return (valueIsField ? valsOneAndTwoOnly.map((v) => wrapFieldName(v)) : valsOneAndTwoOnly.every((v) => require_utils.shouldRenderAsNumber(v, parseNumbers)) ? valsOneAndTwoOnly.map((v) => require_utils.parseNumber(v, { parseNumbers: "strict" })) : valsOneAndTwoOnly.map((v) => wrapAndEscape(v))).join(` ${translations?.betweenAnd ?? translations?.and ?? "and"} `);
528
528
  }
529
529
  case "contains":
530
530
  case "doesnotcontain": return valueIsField ? concat(quoteValue("%"), wrapFieldName(value), quoteValue("%")) : quoteValue(`%${escapeValue(value)}%`);
@@ -537,6 +537,70 @@ const defaultValueProcessorByRule = ({ operator, value, valueSource }, { escapeQ
537
537
  return valueIsField ? wrapFieldName(value) : require_utils.shouldRenderAsNumber(value, parseNumbers) ? `${require_utils.trimIfString(value)}` : `${wrapAndEscape(value)}`;
538
538
  };
539
539
  //#endregion
540
+ //#region src/utils/formatQuery/defaultRuleGroupProcessorCypher.ts
541
+ /**
542
+ * Maps a {@link DefaultCombinatorName} to a Cypher combinator keyword.
543
+ *
544
+ * @group Export
545
+ */
546
+ const cypherCombinatorMap = {
547
+ and: "AND",
548
+ or: "OR"
549
+ };
550
+ /**
551
+ * Rule group processor used by {@link formatQuery} for "cypher" and "gql" formats.
552
+ *
553
+ * @group Export
554
+ */
555
+ const defaultRuleGroupProcessorCypher = (ruleGroup, options) => {
556
+ const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
557
+ const processRuleGroup = (rg, outermost) => {
558
+ if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermost ? fallbackExpression : "";
559
+ const processedRules = [];
560
+ let precedingCombinator = "";
561
+ let firstRule = true;
562
+ for (const rule of rg.rules) {
563
+ if (typeof rule === "string") {
564
+ precedingCombinator = cypherCombinatorMap[rule];
565
+ continue;
566
+ }
567
+ if (require_objectUtils.isRuleGroup(rule)) {
568
+ const processedGroup = processRuleGroup(rule);
569
+ if (processedGroup) {
570
+ if (!firstRule && precedingCombinator) {
571
+ processedRules.push(precedingCombinator);
572
+ precedingCombinator = "";
573
+ }
574
+ firstRule = false;
575
+ processedRules.push(processedGroup);
576
+ }
577
+ continue;
578
+ }
579
+ const [validationResult, fieldValidator] = validateRule(rule);
580
+ if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
581
+ const fieldData = require_utils.getOption(fields, rule.field);
582
+ const processedRule = ruleProcessor(rule, {
583
+ ...options,
584
+ parseNumbers: getParseNumberBoolean(fieldData?.inputType),
585
+ escapeQuotes: (rule.valueSource ?? "value") === "value",
586
+ fieldData
587
+ });
588
+ if (processedRule) {
589
+ if (!firstRule && precedingCombinator) {
590
+ processedRules.push(precedingCombinator);
591
+ precedingCombinator = "";
592
+ }
593
+ firstRule = false;
594
+ processedRules.push(processedRule);
595
+ }
596
+ }
597
+ const expression = processedRules.join(require_objectUtils.isRuleGroupType(rg) ? ` ${cypherCombinatorMap[rg.combinator]} ` : " ");
598
+ const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "NOT " : ""}(`, ")"] : ["", ""];
599
+ return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
600
+ };
601
+ return processRuleGroup(ruleGroup, true);
602
+ };
603
+ //#endregion
540
604
  //#region src/utils/formatQuery/defaultRuleProcessorDrizzle.ts
541
605
  /**
542
606
  * Default rule processor used by {@link formatQuery} for the "drizzle" format.
@@ -704,6 +768,67 @@ const defaultRuleGroupProcessorElasticSearch = (ruleGroup, options) => {
704
768
  return processedRuleGroup === false ? {} : processedRuleGroup;
705
769
  };
706
770
  //#endregion
771
+ //#region src/utils/formatQuery/defaultRuleGroupProcessorGremlin.ts
772
+ /**
773
+ * Rule group processor used by {@link formatQuery} for "gremlin" format.
774
+ *
775
+ * At the top level, filter rules produce chained `.has()` steps (implicit AND).
776
+ * Nested groups use `.and()` / `.or()` / `.not()` compound traversals with
777
+ * `__` anonymous traversal prefixes.
778
+ *
779
+ * @group Export
780
+ */
781
+ const defaultRuleGroupProcessorGremlin = (ruleGroup, options) => {
782
+ const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
783
+ const validateAndProcess = (rule) => {
784
+ // v8 ignore next -- @preserve
785
+ if (typeof rule === "string" || require_objectUtils.isRuleGroup(rule)) return void 0;
786
+ const [validationResult, fieldValidator] = validateRule(rule);
787
+ if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return;
788
+ const fieldData = require_utils.getOption(fields, rule.field);
789
+ return ruleProcessor(rule, {
790
+ ...options,
791
+ parseNumbers: getParseNumberBoolean(fieldData?.inputType),
792
+ escapeQuotes: (rule.valueSource ?? "value") === "value",
793
+ fieldData
794
+ });
795
+ };
796
+ /** Recursively processes a nested group into `.and()`/`.or()`/`.not()` form. */
797
+ const processNested = (rg) => {
798
+ if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return "";
799
+ const predicates = [];
800
+ for (const rule of rg.rules) {
801
+ if (typeof rule === "string") continue;
802
+ if (require_objectUtils.isRuleGroup(rule)) {
803
+ const nested = processNested(rule);
804
+ if (nested) predicates.push(nested);
805
+ continue;
806
+ }
807
+ const processed = validateAndProcess(rule);
808
+ if (processed) predicates.push(processed);
809
+ }
810
+ if (predicates.length === 0) return "";
811
+ const combinator = rg.combinator ?? "and";
812
+ const prefix = rg.not ? "not" : combinator;
813
+ if (predicates.length === 1 && !rg.not) return predicates[0];
814
+ return `.${prefix}(${predicates.map((p) => p.startsWith(".") ? `__${p}` : p).join(", ")})`;
815
+ };
816
+ if (!isRuleOrGroupValid(ruleGroup, validationMap[ruleGroup.id ?? ""])) return fallbackExpression;
817
+ const steps = [];
818
+ for (const rule of ruleGroup.rules) {
819
+ if (typeof rule === "string") continue;
820
+ if (require_objectUtils.isRuleGroup(rule)) {
821
+ const compound = processNested(rule);
822
+ if (compound) steps.push(compound);
823
+ continue;
824
+ }
825
+ const processed = validateAndProcess(rule);
826
+ if (processed) steps.push(processed);
827
+ }
828
+ if (steps.length === 0) return fallbackExpression;
829
+ return steps.join("");
830
+ };
831
+ //#endregion
707
832
  //#region src/utils/formatQuery/defaultRuleGroupProcessorJSONata.ts
708
833
  /**
709
834
  * Rule group processor used by {@link formatQuery} for "jsonata" format.
@@ -874,7 +999,7 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
874
999
  let firstRule = true;
875
1000
  for (const rule of rg2.rules) {
876
1001
  if (typeof rule === "string") {
877
- precedingCombinator = `, ${translations[rule] ?? rule} `;
1002
+ precedingCombinator = `${translations.ruleSeparator ?? ", "}${translations[rule] ?? rule} `;
878
1003
  continue;
879
1004
  }
880
1005
  if (require_objectUtils.isRuleGroup(rule)) {
@@ -916,7 +1041,8 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
916
1041
  const [prefixTL, suffixTL] = ["groupPrefix", "groupSuffix"].map((key) => rg2.not ? isXOR ? require_utils.getNLTranslataion(key, translations, ["not", "xor"]) : require_utils.getNLTranslataion(key, translations, ["not"]) : isXOR ? require_utils.getNLTranslataion(key, translations, ["xor"]) : require_utils.getNLTranslataion(key, translations));
917
1042
  const prefix = mustWrap ? `${prefixTL} (`.trim() : "";
918
1043
  const suffix = mustWrap ? `) ${suffixTL}`.trim() : "";
919
- return `${prefix}${processedRules.join(require_objectUtils.isRuleGroupType(rg2) ? `, ${translations[combinator] ?? combinator} ` : "")}${suffix}`;
1044
+ const sep = translations.ruleSeparator ?? ", ";
1045
+ return `${prefix}${processedRules.join(require_objectUtils.isRuleGroupType(rg2) ? `${sep}${translations[combinator] ?? combinator} ` : "")}${suffix}`;
920
1046
  };
921
1047
  return processRuleGroup(ruleGroup, true);
922
1048
  };
@@ -1091,6 +1217,63 @@ const defaultRuleGroupProcessorSequelize = (ruleGroup, options) => {
1091
1217
  return processRuleGroup(require_convertQuery.convertFromIC(ruleGroup), true);
1092
1218
  };
1093
1219
  //#endregion
1220
+ //#region src/utils/formatQuery/defaultRuleGroupProcessorSPARQL.ts
1221
+ /**
1222
+ * Rule group processor used by {@link formatQuery} for "sparql" format.
1223
+ *
1224
+ * SPARQL uses the same combinators as CEL (`&&` / `||`) and `!()` for negation.
1225
+ *
1226
+ * @group Export
1227
+ */
1228
+ const defaultRuleGroupProcessorSPARQL = (ruleGroup, options) => {
1229
+ const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
1230
+ const processRuleGroup = (rg, outermost) => {
1231
+ if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermost ? fallbackExpression : "";
1232
+ const processedRules = [];
1233
+ let precedingCombinator = "";
1234
+ let firstRule = true;
1235
+ for (const rule of rg.rules) {
1236
+ if (typeof rule === "string") {
1237
+ precedingCombinator = require_utils.celCombinatorMap[rule];
1238
+ continue;
1239
+ }
1240
+ if (require_objectUtils.isRuleGroup(rule)) {
1241
+ const processedGroup = processRuleGroup(rule);
1242
+ if (processedGroup) {
1243
+ if (!firstRule && precedingCombinator) {
1244
+ processedRules.push(precedingCombinator);
1245
+ precedingCombinator = "";
1246
+ }
1247
+ firstRule = false;
1248
+ processedRules.push(processedGroup);
1249
+ }
1250
+ continue;
1251
+ }
1252
+ const [validationResult, fieldValidator] = validateRule(rule);
1253
+ if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
1254
+ const fieldData = require_utils.getOption(fields, rule.field);
1255
+ const processedRule = ruleProcessor(rule, {
1256
+ ...options,
1257
+ parseNumbers: getParseNumberBoolean(fieldData?.inputType),
1258
+ escapeQuotes: (rule.valueSource ?? "value") === "value",
1259
+ fieldData
1260
+ });
1261
+ if (processedRule) {
1262
+ if (!firstRule && precedingCombinator) {
1263
+ processedRules.push(precedingCombinator);
1264
+ precedingCombinator = "";
1265
+ }
1266
+ firstRule = false;
1267
+ processedRules.push(processedRule);
1268
+ }
1269
+ }
1270
+ const expression = processedRules.join(require_objectUtils.isRuleGroupType(rg) ? ` ${require_utils.celCombinatorMap[rg.combinator]} ` : " ");
1271
+ const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "!" : ""}(`, ")"] : ["", ""];
1272
+ return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
1273
+ };
1274
+ return processRuleGroup(ruleGroup, true);
1275
+ };
1276
+ //#endregion
1094
1277
  //#region src/utils/formatQuery/defaultRuleGroupProcessorSQL.ts
1095
1278
  /**
1096
1279
  * Default rule processor used by {@link formatQuery} for "sql" format.
@@ -1466,6 +1649,59 @@ const getFieldValidatorReasons = (rule, fieldValidator) => {
1466
1649
  }
1467
1650
  };
1468
1651
  //#endregion
1652
+ //#region src/utils/formatQuery/defaultRuleProcessorCypher.ts
1653
+ const escapeSingleQuotes$1 = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll("'", "\\'");
1654
+ /**
1655
+ * Default rule processor used by {@link formatQuery} for "cypher" and "gql" formats.
1656
+ *
1657
+ * @group Export
1658
+ */
1659
+ const defaultRuleProcessorCypher = (rule, opts = {}) => {
1660
+ const { escapeQuotes, parseNumbers } = opts;
1661
+ const { field, operator, value, valueSource } = rule;
1662
+ const valueIsField = valueSource === "field";
1663
+ const operatorTL = operator.toLowerCase();
1664
+ const fmtVal = (v) => {
1665
+ if (v === null || v === void 0) return "null";
1666
+ if (typeof v === "boolean" || typeof v === "bigint") return String(v);
1667
+ if (valueIsField) return require_utils.trimIfString(v);
1668
+ if (typeof v === "number" || require_utils.shouldRenderAsNumber(v, parseNumbers)) return require_utils.trimIfString(v);
1669
+ return `'${escapeSingleQuotes$1(v, escapeQuotes)}'`;
1670
+ };
1671
+ switch (operatorTL) {
1672
+ case "=": return `${field} = ${fmtVal(value)}`;
1673
+ case "!=":
1674
+ case "<>": return `${field} <> ${fmtVal(value)}`;
1675
+ case "<":
1676
+ case ">":
1677
+ case "<=":
1678
+ case ">=": return `${field} ${operatorTL} ${fmtVal(value)}`;
1679
+ case "contains": return `${field} CONTAINS ${fmtVal(value)}`;
1680
+ case "doesnotcontain": return `NOT ${field} CONTAINS ${fmtVal(value)}`;
1681
+ case "beginswith": return `${field} STARTS WITH ${fmtVal(value)}`;
1682
+ case "doesnotbeginwith": return `NOT ${field} STARTS WITH ${fmtVal(value)}`;
1683
+ case "endswith": return `${field} ENDS WITH ${fmtVal(value)}`;
1684
+ case "doesnotendwith": return `NOT ${field} ENDS WITH ${fmtVal(value)}`;
1685
+ case "null": return `${field} IS NULL`;
1686
+ case "notnull": return `${field} IS NOT NULL`;
1687
+ case "in":
1688
+ case "notin": {
1689
+ const values = require_utils.toArray(value).map(fmtVal);
1690
+ if (!values.length) return "";
1691
+ return `${operatorTL === "notin" ? "NOT " : ""}${field} IN [${values.join(", ")}]`;
1692
+ }
1693
+ case "between":
1694
+ case "notbetween": {
1695
+ const arr = require_utils.toArray(value);
1696
+ if (arr.length < 2) return "";
1697
+ const [low, high] = [fmtVal(arr[0]), fmtVal(arr[1])];
1698
+ const expr = `${low} <= ${field} AND ${field} <= ${high}`;
1699
+ return operatorTL === "notbetween" ? `NOT (${expr})` : expr;
1700
+ }
1701
+ default: return `${field} ${operator} ${fmtVal(value)}`;
1702
+ }
1703
+ };
1704
+ //#endregion
1469
1705
  //#region src/utils/formatQuery/defaultRuleProcessorElasticSearch.ts
1470
1706
  const rangeOperatorMap = {
1471
1707
  "<": "lt",
@@ -1617,6 +1853,68 @@ const defaultRuleProcessorElasticSearch = (rule, options = {}) => {
1617
1853
  return false;
1618
1854
  };
1619
1855
  //#endregion
1856
+ //#region src/utils/formatQuery/defaultRuleProcessorGremlin.ts
1857
+ const escapeSingleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll("'", "\\'");
1858
+ /**
1859
+ * Default rule processor used by {@link formatQuery} for "gremlin" format.
1860
+ *
1861
+ * Each rule becomes a `.has()` step (or `.hasNot()`/`.has()` for null checks).
1862
+ *
1863
+ * @group Export
1864
+ */
1865
+ const defaultRuleProcessorGremlin = (rule, opts = {}) => {
1866
+ const { escapeQuotes, parseNumbers } = opts;
1867
+ const { field, operator, value, valueSource } = rule;
1868
+ const valueIsField = valueSource === "field";
1869
+ const operatorTL = operator.toLowerCase();
1870
+ const prop = field.includes(".") ? field.split(".").pop() : field;
1871
+ const fmtVal = (v) => {
1872
+ if (v === null || v === void 0) return "null";
1873
+ if (typeof v === "boolean" || typeof v === "bigint") return String(v);
1874
+ if (valueIsField) return require_utils.trimIfString(v);
1875
+ if (typeof v === "number" || require_utils.shouldRenderAsNumber(v, parseNumbers)) return require_utils.trimIfString(v);
1876
+ return `'${escapeSingleQuotes(v, escapeQuotes)}'`;
1877
+ };
1878
+ switch (operatorTL) {
1879
+ case "=": return `.has('${prop}', ${fmtVal(value)})`;
1880
+ case "!=":
1881
+ case "<>": return `.has('${prop}', neq(${fmtVal(value)}))`;
1882
+ case "<": return `.has('${prop}', lt(${fmtVal(value)}))`;
1883
+ case ">": return `.has('${prop}', gt(${fmtVal(value)}))`;
1884
+ case "<=": return `.has('${prop}', lte(${fmtVal(value)}))`;
1885
+ case ">=": return `.has('${prop}', gte(${fmtVal(value)}))`;
1886
+ case "contains": return `.has('${prop}', containing(${fmtVal(value)}))`;
1887
+ case "doesnotcontain": return `.has('${prop}', notContaining(${fmtVal(value)}))`;
1888
+ case "beginswith": return `.has('${prop}', startingWith(${fmtVal(value)}))`;
1889
+ case "doesnotbeginwith": return `.has('${prop}', notStartingWith(${fmtVal(value)}))`;
1890
+ case "endswith": return `.has('${prop}', endingWith(${fmtVal(value)}))`;
1891
+ case "doesnotendwith": return `.has('${prop}', notEndingWith(${fmtVal(value)}))`;
1892
+ case "null": return `.hasNot('${prop}')`;
1893
+ case "notnull": return `.has('${prop}')`;
1894
+ case "in": {
1895
+ const items = require_utils.toArray(value).map(fmtVal);
1896
+ if (!items.length) return "";
1897
+ return `.has('${prop}', within(${items.join(", ")}))`;
1898
+ }
1899
+ case "notin": {
1900
+ const items = require_utils.toArray(value).map(fmtVal);
1901
+ if (!items.length) return "";
1902
+ return `.has('${prop}', without(${items.join(", ")}))`;
1903
+ }
1904
+ case "between": {
1905
+ const arr = require_utils.toArray(value);
1906
+ if (arr.length < 2) return "";
1907
+ return `.has('${prop}', between(${fmtVal(arr[0])}, ${fmtVal(arr[1])}))`;
1908
+ }
1909
+ case "notbetween": {
1910
+ const arr = require_utils.toArray(value);
1911
+ if (arr.length < 2) return "";
1912
+ return `.has('${prop}', outside(${fmtVal(arr[0])}, ${fmtVal(arr[1])}))`;
1913
+ }
1914
+ default: return `.has('${prop}', ${fmtVal(value)})`;
1915
+ }
1916
+ };
1917
+ //#endregion
1620
1918
  //#region src/utils/formatQuery/defaultRuleProcessorJSONata.ts
1621
1919
  const shouldNegate = (op) => op.startsWith("not") || op.startsWith("doesnot");
1622
1920
  const quote = (v, escapeQuotes) => `"${typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`)}"`;
@@ -1871,6 +2169,8 @@ const defaultValueProcessorNL = (rule, opts = {}) => {
1871
2169
  const orTL = t.or ?? "or";
1872
2170
  const trueTL = t.true ?? "true";
1873
2171
  const falseTL = t.false ?? "false";
2172
+ const listSep = t.listSeparator ?? ", ";
2173
+ const useOxfordComma = !t.listSeparator;
1874
2174
  switch (operatorLowerCase) {
1875
2175
  case "null":
1876
2176
  case "notnull": return "";
@@ -1890,7 +2190,8 @@ const defaultValueProcessorNL = (rule, opts = {}) => {
1890
2190
  if (valueAsArray.length === 0) return "";
1891
2191
  const valStringArray = valueAsArray.map((v) => valueIsField ? wrapFieldName(require_utils.getOption(fields ?? [], v)?.label ?? v) : require_utils.shouldRenderAsNumber(v, parseNumbers) ? `${require_utils.trimIfString(v)}` : `${wrapAndEscape(v)}`);
1892
2192
  if (valStringArray.length === 1) return valStringArray[0];
1893
- return `(${`${valStringArray.slice(0, -1).join(", ")}${valStringArray.length > 2 ? "," : ""} ${orTL} ${valStringArray.at(-1)}`})`;
2193
+ const oxfordComma = useOxfordComma && valStringArray.length > 2 ? "," : "";
2194
+ return `(${`${valStringArray.slice(0, -1).join(listSep)}${oxfordComma} ${orTL} ${valStringArray.at(-1)}`})`;
1894
2195
  }
1895
2196
  }
1896
2197
  if (typeof rule.value === "boolean") return rule.value ? trueTL : falseTL;
@@ -2003,7 +2304,14 @@ const defaultRuleProcessorNL = (rule, opts) => {
2003
2304
  V: operatorProcessor(rule, opts),
2004
2305
  O: value
2005
2306
  };
2006
- return require_utils.normalizeConstituentWordOrder(wordOrder).map((term) => `${wordOrderMap[term]}`).join(" ").trim();
2307
+ const translations = opts?.translations ?? {};
2308
+ const suffixMap = {
2309
+ S: translations.afterSubject ?? " ",
2310
+ V: translations.afterVerb ?? " ",
2311
+ O: translations.afterObject ?? " "
2312
+ };
2313
+ const wordOrderTuple = require_utils.normalizeConstituentWordOrder(wordOrder).filter((term) => wordOrderMap[term] !== "");
2314
+ return wordOrderTuple.map((term, i) => `${wordOrderMap[term]}${i < wordOrderTuple.length - 1 ? suffixMap[term] : ""}`).join("").trim();
2007
2315
  };
2008
2316
  //#endregion
2009
2317
  //#region src/utils/formatQuery/defaultRuleProcessorSQL.ts
@@ -2239,8 +2547,11 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
2239
2547
  const valueIsField = valueSource === "field";
2240
2548
  const operatorLC = require_objectUtils.lc(operator);
2241
2549
  if (!Op || valueIsField && (!col || !fn && [
2550
+ "contains",
2242
2551
  "doesnotcontain",
2552
+ "beginswith",
2243
2553
  "doesnotbeginwith",
2554
+ "endswith",
2244
2555
  "doesnotendwith"
2245
2556
  ].includes(operatorLC))) return;
2246
2557
  switch (operatorLC) {
@@ -2260,9 +2571,9 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
2260
2571
  }[operatorLC];
2261
2572
  return { [field]: valueIsField && operatorLC === "=" ? { [Op.col]: value } : { [sequelizeOperator]: valueIsField ? col(value) : require_utils.shouldRenderAsNumber(value, parseNumbers) ? require_utils.parseNumber(value, { parseNumbers: "strict" }) : value } };
2262
2573
  }
2263
- case "contains": return { [field]: { [Op.substring]: valueIsField ? col(value) : `${value}` } };
2264
- case "beginswith": return { [field]: { [Op.startsWith]: valueIsField ? col(value) : `${value}` } };
2265
- case "endswith": return { [field]: { [Op.endsWith]: valueIsField ? col(value) : `${value}` } };
2574
+ case "contains": return { [field]: { [valueIsField ? Op.like : Op.substring]: valueIsField ? fn("CONCAT", "%", col(value), "%") : `${value}` } };
2575
+ case "beginswith": return { [field]: { [valueIsField ? Op.like : Op.startsWith]: valueIsField ? fn("CONCAT", col(value), "%") : `${value}` } };
2576
+ case "endswith": return { [field]: { [valueIsField ? Op.like : Op.endsWith]: valueIsField ? fn("CONCAT", "%", col(value)) : `${value}` } };
2266
2577
  case "doesnotcontain": return { [field]: { [Op.notLike]: valueIsField ? fn("CONCAT", "%", col(value), "%") : `%${value}%` } };
2267
2578
  case "doesnotbeginwith": return { [field]: { [Op.notLike]: valueIsField ? fn("CONCAT", col(value), "%") : `${value}%` } };
2268
2579
  case "doesnotendwith": return { [field]: { [Op.notLike]: valueIsField ? fn("CONCAT", "%", col(value)) : `%${value}` } };
@@ -2292,6 +2603,74 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
2292
2603
  }
2293
2604
  };
2294
2605
  //#endregion
2606
+ //#region src/utils/formatQuery/defaultRuleProcessorSPARQL.ts
2607
+ const escapeDoubleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`);
2608
+ /** Auto-prefix a SPARQL variable name with `?` unless it's already prefixed, a URI, or a prefixed name.
2609
+ *
2610
+ * @group Export
2611
+ */
2612
+ const sparqlVar = (name) => /^[?<]/.test(name) || name.includes(":") ? name : `?${name}`;
2613
+ /**
2614
+ * Default rule processor used by {@link formatQuery} for "sparql" format.
2615
+ *
2616
+ * @group Export
2617
+ */
2618
+ const defaultRuleProcessorSPARQL = (rule, opts = {}) => {
2619
+ const { escapeQuotes, parseNumbers } = opts;
2620
+ const { field: rawField, operator, value, valueSource } = rule;
2621
+ const valueIsField = valueSource === "field";
2622
+ const operatorTL = operator.toLowerCase();
2623
+ const field = sparqlVar(rawField);
2624
+ const fmtVal = (v) => {
2625
+ if (v === null || v === void 0) return "\"\"";
2626
+ if (typeof v === "boolean") return `"${v}"^^xsd:boolean`;
2627
+ if (typeof v === "bigint") return String(v);
2628
+ if (valueIsField) return sparqlVar(require_utils.trimIfString(v));
2629
+ if (typeof v === "number" || require_utils.shouldRenderAsNumber(v, parseNumbers)) return require_utils.trimIfString(v);
2630
+ const s = typeof v === "string" ? v : JSON.stringify(v) ?? "";
2631
+ if (s.startsWith("?") || s.startsWith("<") || s.includes(":")) return s;
2632
+ return `"${escapeDoubleQuotes(s, escapeQuotes)}"`;
2633
+ };
2634
+ switch (operatorTL) {
2635
+ case "=":
2636
+ case "!=":
2637
+ case "<":
2638
+ case ">":
2639
+ case "<=":
2640
+ case ">=": return `${field} ${operatorTL} ${fmtVal(value)}`;
2641
+ case "<>": return `${field} != ${fmtVal(value)}`;
2642
+ case "contains": return `CONTAINS(${field}, ${fmtVal(value)})`;
2643
+ case "doesnotcontain": return `!CONTAINS(${field}, ${fmtVal(value)})`;
2644
+ case "beginswith": return `STRSTARTS(${field}, ${fmtVal(value)})`;
2645
+ case "doesnotbeginwith": return `!STRSTARTS(${field}, ${fmtVal(value)})`;
2646
+ case "endswith": return `STRENDS(${field}, ${fmtVal(value)})`;
2647
+ case "doesnotendwith": return `!STRENDS(${field}, ${fmtVal(value)})`;
2648
+ case "null": return `!BOUND(${field})`;
2649
+ case "notnull": return `BOUND(${field})`;
2650
+ case "in": {
2651
+ const items = require_utils.toArray(value).map(fmtVal);
2652
+ if (!items.length) return "";
2653
+ return `${field} IN (${items.join(", ")})`;
2654
+ }
2655
+ case "notin": {
2656
+ const items = require_utils.toArray(value).map(fmtVal);
2657
+ if (!items.length) return "";
2658
+ return `${field} NOT IN (${items.join(", ")})`;
2659
+ }
2660
+ case "between": {
2661
+ const arr = require_utils.toArray(value);
2662
+ if (arr.length < 2) return "";
2663
+ return `${field} >= ${fmtVal(arr[0])} && ${field} <= ${fmtVal(arr[1])}`;
2664
+ }
2665
+ case "notbetween": {
2666
+ const arr = require_utils.toArray(value);
2667
+ if (arr.length < 2) return "";
2668
+ return `(${field} < ${fmtVal(arr[0])} || ${field} > ${fmtVal(arr[1])})`;
2669
+ }
2670
+ default: return `${field} ${operator} ${fmtVal(value)}`;
2671
+ }
2672
+ };
2673
+ //#endregion
2295
2674
  //#region src/utils/formatQuery/formatQuery.ts
2296
2675
  /**
2297
2676
  * A collection of option presets for {@link formatQuery}, specifically for SQL-based formats.
@@ -2339,6 +2718,10 @@ const defaultRuleProcessors = {
2339
2718
  sequelize: defaultRuleProcessorSequelize,
2340
2719
  spel: defaultRuleProcessorSpEL,
2341
2720
  sql: defaultRuleProcessorSQL,
2721
+ cypher: defaultRuleProcessorCypher,
2722
+ gql: defaultRuleProcessorCypher,
2723
+ sparql: defaultRuleProcessorSPARQL,
2724
+ gremlin: defaultRuleProcessorGremlin,
2342
2725
  diagnostics: defaultRuleProcessorSQL
2343
2726
  };
2344
2727
  /* v8 ignore next -- @preserve */
@@ -2361,6 +2744,10 @@ const defaultOperatorProcessors = {
2361
2744
  sequelize: defaultOperatorProcessor,
2362
2745
  spel: defaultOperatorProcessor,
2363
2746
  sql: defaultOperatorProcessorSQL,
2747
+ cypher: defaultOperatorProcessor,
2748
+ gql: defaultOperatorProcessor,
2749
+ sparql: defaultOperatorProcessor,
2750
+ gremlin: defaultOperatorProcessor,
2364
2751
  diagnostics: defaultOperatorProcessor
2365
2752
  };
2366
2753
  const defaultFallbackExpressions = {
@@ -2368,6 +2755,8 @@ const defaultFallbackExpressions = {
2368
2755
  ldap: "",
2369
2756
  mongodb: "\"$and\":[{\"$expr\":true}]",
2370
2757
  natural_language: "1 is 1",
2758
+ sparql: "1 = 1",
2759
+ gremlin: "",
2371
2760
  spel: "1 == 1",
2372
2761
  sql: "(1 = 1)"
2373
2762
  };
@@ -2508,6 +2897,10 @@ function formatQuery(ruleGroup, optionParam = {}) {
2508
2897
  case "prisma": return defaultRuleGroupProcessorPrisma(ruleGroup, finalOptions);
2509
2898
  case "drizzle": return defaultRuleGroupProcessorDrizzle(ruleGroup, finalOptions);
2510
2899
  case "sequelize": return defaultRuleGroupProcessorSequelize(ruleGroup, finalOptions);
2900
+ case "cypher":
2901
+ case "gql": return defaultRuleGroupProcessorCypher(ruleGroup, finalOptions);
2902
+ case "sparql": return defaultRuleGroupProcessorSPARQL(ruleGroup, finalOptions);
2903
+ case "gremlin": return defaultRuleGroupProcessorGremlin(ruleGroup, finalOptions);
2511
2904
  case "diagnostics": return defaultRuleGroupProcessorDiagnostics(ruleGroup, finalOptions);
2512
2905
  default: return "";
2513
2906
  }
@@ -2566,6 +2959,7 @@ const defaultValueProcessorSpELByRule = defaultRuleProcessorSpEL;
2566
2959
  exports.bigIntJsonParseReviver = require_utils.bigIntJsonParseReviver;
2567
2960
  exports.bigIntJsonStringifyReplacer = require_utils.bigIntJsonStringifyReplacer;
2568
2961
  exports.celCombinatorMap = require_utils.celCombinatorMap;
2962
+ exports.cypherCombinatorMap = cypherCombinatorMap;
2569
2963
  exports.defaultCELValueProcessor = defaultCELValueProcessor;
2570
2964
  exports.defaultExportOperatorMap = defaultExportOperatorMap;
2571
2965
  exports.defaultMongoDBValueProcessor = defaultMongoDBValueProcessor;
@@ -2573,9 +2967,11 @@ exports.defaultNLTranslations = require_utils.defaultNLTranslations;
2573
2967
  exports.defaultOperatorProcessorNL = defaultOperatorProcessorNL;
2574
2968
  exports.defaultOperatorProcessorSQL = defaultOperatorProcessorSQL;
2575
2969
  exports.defaultRuleGroupProcessorCEL = defaultRuleGroupProcessorCEL;
2970
+ exports.defaultRuleGroupProcessorCypher = defaultRuleGroupProcessorCypher;
2576
2971
  exports.defaultRuleGroupProcessorDiagnostics = defaultRuleGroupProcessorDiagnostics;
2577
2972
  exports.defaultRuleGroupProcessorDrizzle = defaultRuleGroupProcessorDrizzle;
2578
2973
  exports.defaultRuleGroupProcessorElasticSearch = defaultRuleGroupProcessorElasticSearch;
2974
+ exports.defaultRuleGroupProcessorGremlin = defaultRuleGroupProcessorGremlin;
2579
2975
  exports.defaultRuleGroupProcessorJSONata = defaultRuleGroupProcessorJSONata;
2580
2976
  exports.defaultRuleGroupProcessorJsonLogic = defaultRuleGroupProcessorJsonLogic;
2581
2977
  exports.defaultRuleGroupProcessorLDAP = defaultRuleGroupProcessorLDAP;
@@ -2584,12 +2980,15 @@ exports.defaultRuleGroupProcessorMongoDBQuery = defaultRuleGroupProcessorMongoDB
2584
2980
  exports.defaultRuleGroupProcessorNL = defaultRuleGroupProcessorNL;
2585
2981
  exports.defaultRuleGroupProcessorParameterized = defaultRuleGroupProcessorParameterized;
2586
2982
  exports.defaultRuleGroupProcessorPrisma = defaultRuleGroupProcessorPrisma;
2983
+ exports.defaultRuleGroupProcessorSPARQL = defaultRuleGroupProcessorSPARQL;
2587
2984
  exports.defaultRuleGroupProcessorSQL = defaultRuleGroupProcessorSQL;
2588
2985
  exports.defaultRuleGroupProcessorSequelize = defaultRuleGroupProcessorSequelize;
2589
2986
  exports.defaultRuleGroupProcessorSpEL = defaultRuleGroupProcessorSpEL;
2590
2987
  exports.defaultRuleProcessorCEL = defaultRuleProcessorCEL;
2988
+ exports.defaultRuleProcessorCypher = defaultRuleProcessorCypher;
2591
2989
  exports.defaultRuleProcessorDrizzle = defaultRuleProcessorDrizzle;
2592
2990
  exports.defaultRuleProcessorElasticSearch = defaultRuleProcessorElasticSearch;
2991
+ exports.defaultRuleProcessorGremlin = defaultRuleProcessorGremlin;
2593
2992
  exports.defaultRuleProcessorJSONata = defaultRuleProcessorJSONata;
2594
2993
  exports.defaultRuleProcessorJsonLogic = defaultRuleProcessorJsonLogic;
2595
2994
  exports.defaultRuleProcessorLDAP = defaultRuleProcessorLDAP;
@@ -2598,6 +2997,7 @@ exports.defaultRuleProcessorMongoDBQuery = defaultRuleProcessorMongoDBQuery;
2598
2997
  exports.defaultRuleProcessorNL = defaultRuleProcessorNL;
2599
2998
  exports.defaultRuleProcessorParameterized = defaultRuleProcessorParameterized;
2600
2999
  exports.defaultRuleProcessorPrisma = defaultRuleProcessorPrisma;
3000
+ exports.defaultRuleProcessorSPARQL = defaultRuleProcessorSPARQL;
2601
3001
  exports.defaultRuleProcessorSQL = defaultRuleProcessorSQL;
2602
3002
  exports.defaultRuleProcessorSequelize = defaultRuleProcessorSequelize;
2603
3003
  exports.defaultRuleProcessorSpEL = defaultRuleProcessorSpEL;
@@ -2625,6 +3025,7 @@ exports.prismaFallback = prismaFallback;
2625
3025
  exports.prismaOperators = require_utils.prismaOperators;
2626
3026
  exports.processMatchMode = require_utils.processMatchMode;
2627
3027
  exports.shouldRenderAsNumber = require_utils.shouldRenderAsNumber;
3028
+ exports.sparqlVar = sparqlVar;
2628
3029
  exports.sqlDialectPresets = sqlDialectPresets;
2629
3030
 
2630
3031
  //# sourceMappingURL=formatQuery.js.map