@react-querybuilder/core 8.14.4 → 8.16.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 (123) hide show
  1. package/README.md +114 -53
  2. package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +288 -22
  3. package/dist/cjs/react-querybuilder_core.cjs.development.js +796 -77
  4. package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
  5. package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +288 -22
  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-CeJSNn37.mjs → convertQuery-BeJJH9BI.mjs} +2 -2
  9. package/dist/convertQuery-BeJJH9BI.mjs.map +1 -0
  10. package/dist/{convertQuery-J8LpTG-7.js → convertQuery-Lx2HQa0m.js} +2 -2
  11. package/dist/convertQuery-Lx2HQa0m.js.map +1 -0
  12. package/dist/formatQuery.d.mts +89 -2
  13. package/dist/formatQuery.d.ts +89 -2
  14. package/dist/formatQuery.js +775 -66
  15. package/dist/formatQuery.js.map +1 -1
  16. package/dist/formatQuery.mjs +768 -67
  17. package/dist/formatQuery.mjs.map +1 -1
  18. package/dist/{import-BwQqExpO.d.mts → import-BHlzBLM_.d.mts} +2 -2
  19. package/dist/{import-CrJf23Nf.d.ts → import-C6imciDf.d.ts} +2 -2
  20. package/dist/{index-CYT4Saz-.d.mts → index-Cjapnb-H.d.ts} +161 -10
  21. package/dist/{index-DBlQeLax.d.ts → index-D-Iej37L.d.mts} +161 -10
  22. package/dist/{objectUtils-ButT0Mng.js → objectUtils-Bzug_QfX.js} +2 -2
  23. package/dist/objectUtils-Bzug_QfX.js.map +1 -0
  24. package/dist/{objectUtils-C0WB-8ex.mjs → objectUtils-D96eEEzL.mjs} +2 -2
  25. package/dist/objectUtils-D96eEEzL.mjs.map +1 -0
  26. package/dist/parseCEL.d.mts +2 -2
  27. package/dist/parseCEL.d.ts +2 -2
  28. package/dist/parseCEL.js +35 -35
  29. package/dist/parseCEL.js.map +1 -1
  30. package/dist/parseCEL.mjs +35 -35
  31. package/dist/parseCEL.mjs.map +1 -1
  32. package/dist/parseCypher.d.mts +49 -0
  33. package/dist/parseCypher.d.ts +49 -0
  34. package/dist/parseCypher.js +578 -0
  35. package/dist/parseCypher.js.map +1 -0
  36. package/dist/parseCypher.mjs +575 -0
  37. package/dist/parseCypher.mjs.map +1 -0
  38. package/dist/parseGremlin.d.mts +35 -0
  39. package/dist/parseGremlin.d.ts +35 -0
  40. package/dist/parseGremlin.js +192 -0
  41. package/dist/parseGremlin.js.map +1 -0
  42. package/dist/parseGremlin.mjs +191 -0
  43. package/dist/parseGremlin.mjs.map +1 -0
  44. package/dist/parseJSONata.d.mts +2 -2
  45. package/dist/parseJSONata.d.ts +2 -2
  46. package/dist/parseJSONata.js +11 -11
  47. package/dist/parseJSONata.js.map +1 -1
  48. package/dist/parseJSONata.mjs +11 -11
  49. package/dist/parseJSONata.mjs.map +1 -1
  50. package/dist/parseJsonLogic.d.mts +2 -2
  51. package/dist/parseJsonLogic.d.ts +2 -2
  52. package/dist/parseJsonLogic.js +6 -6
  53. package/dist/parseJsonLogic.js.map +1 -1
  54. package/dist/parseJsonLogic.mjs +6 -6
  55. package/dist/parseJsonLogic.mjs.map +1 -1
  56. package/dist/parseMongoDB.d.mts +2 -2
  57. package/dist/parseMongoDB.d.ts +2 -2
  58. package/dist/parseMongoDB.js +6 -6
  59. package/dist/parseMongoDB.js.map +1 -1
  60. package/dist/parseMongoDB.mjs +6 -6
  61. package/dist/parseMongoDB.mjs.map +1 -1
  62. package/dist/parseSPARQL.d.mts +34 -0
  63. package/dist/parseSPARQL.d.ts +34 -0
  64. package/dist/parseSPARQL.js +253 -0
  65. package/dist/parseSPARQL.js.map +1 -0
  66. package/dist/parseSPARQL.mjs +251 -0
  67. package/dist/parseSPARQL.mjs.map +1 -0
  68. package/dist/parseSQL.d.mts +2 -2
  69. package/dist/parseSQL.d.ts +2 -2
  70. package/dist/parseSQL.js +16 -16
  71. package/dist/parseSQL.js.map +1 -1
  72. package/dist/parseSQL.mjs +16 -16
  73. package/dist/parseSQL.mjs.map +1 -1
  74. package/dist/parseSpEL.d.mts +2 -2
  75. package/dist/parseSpEL.d.ts +2 -2
  76. package/dist/parseSpEL.js +10 -10
  77. package/dist/parseSpEL.js.map +1 -1
  78. package/dist/parseSpEL.mjs +10 -10
  79. package/dist/parseSpEL.mjs.map +1 -1
  80. package/dist/{prepareQueryObjects-DO3qXriW.js → prepareQueryObjects-BoG5Rt8z.js} +6 -6
  81. package/dist/prepareQueryObjects-BoG5Rt8z.js.map +1 -0
  82. package/dist/{prepareQueryObjects-BfMlS4ql.mjs → prepareQueryObjects-uA10ZpZX.mjs} +6 -6
  83. package/dist/prepareQueryObjects-uA10ZpZX.mjs.map +1 -0
  84. package/dist/query-builder.css +1 -1
  85. package/dist/query-builder.css.map +1 -1
  86. package/dist/react-querybuilder_core.d.mts +288 -22
  87. package/dist/react-querybuilder_core.legacy-esm.d.ts +288 -22
  88. package/dist/react-querybuilder_core.legacy-esm.js +833 -108
  89. package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
  90. package/dist/react-querybuilder_core.mjs +788 -78
  91. package/dist/react-querybuilder_core.mjs.map +1 -1
  92. package/dist/react-querybuilder_core.production.d.mts +288 -22
  93. package/dist/react-querybuilder_core.production.mjs +1 -1
  94. package/dist/react-querybuilder_core.production.mjs.map +1 -1
  95. package/dist/styles/_main.scss +4 -0
  96. package/dist/transformQuery.d.mts +1 -1
  97. package/dist/transformQuery.d.ts +1 -1
  98. package/dist/transformQuery.js +1 -1
  99. package/dist/transformQuery.mjs +1 -1
  100. package/dist/{utils-BlMGIhvx.mjs → utils-ChLG90DP.mjs} +3 -3
  101. package/dist/utils-ChLG90DP.mjs.map +1 -0
  102. package/dist/{utils-CZRhzje-.js → utils-Qwkq2Q0F.js} +3 -3
  103. package/dist/utils-Qwkq2Q0F.js.map +1 -0
  104. package/formatQuery/package.json +1 -1
  105. package/package.json +53 -14
  106. package/parseCEL/package.json +1 -1
  107. package/parseCypher/package.json +4 -0
  108. package/parseGremlin/package.json +4 -0
  109. package/parseJSONata/package.json +1 -1
  110. package/parseJsonLogic/package.json +1 -1
  111. package/parseMongoDB/package.json +1 -1
  112. package/parseSPARQL/package.json +4 -0
  113. package/parseSQL/package.json +1 -1
  114. package/parseSpEL/package.json +1 -1
  115. package/transformQuery/package.json +1 -1
  116. package/dist/convertQuery-CeJSNn37.mjs.map +0 -1
  117. package/dist/convertQuery-J8LpTG-7.js.map +0 -1
  118. package/dist/objectUtils-ButT0Mng.js.map +0 -1
  119. package/dist/objectUtils-C0WB-8ex.mjs.map +0 -1
  120. package/dist/prepareQueryObjects-BfMlS4ql.mjs.map +0 -1
  121. package/dist/prepareQueryObjects-DO3qXriW.js.map +0 -1
  122. package/dist/utils-BlMGIhvx.mjs.map +0 -1
  123. package/dist/utils-CZRhzje-.js.map +0 -1
@@ -412,6 +412,8 @@ const standardClassnames = {
412
412
  dndCopy: "dndCopy",
413
413
  dndGroup: "dndGroup",
414
414
  dndDropNotAllowed: "dndDropNotAllowed",
415
+ dndPreviewPosition: "dndPreviewPosition",
416
+ dndHidden: "dndHidden",
415
417
  dragHandle: "queryBuilder-dragHandle",
416
418
  disabled: "queryBuilder-disabled",
417
419
  muted: "queryBuilder-muted",
@@ -468,6 +470,8 @@ const defaultControlClassnames = {
468
470
  dndGroup: "",
469
471
  dndCopy: "",
470
472
  dndDropNotAllowed: "",
473
+ dndPreviewPosition: "",
474
+ dndHidden: "",
471
475
  disabled: "",
472
476
  valueListItem: "",
473
477
  branches: "",
@@ -612,7 +616,7 @@ const toArray = (a, { retainEmptyStrings } = {}) => Array.isArray(a) ? a.map((v)
612
616
  const nullFreeArray = (arr) => arr.every((el) => el === false || (el !== null && el !== void 0 ? el : false) !== false);
613
617
  //#endregion
614
618
  //#region src/utils/clsx.ts
615
- // istanbul ignore next
619
+ /* v8 ignore start -- @preserve */
616
620
  function toVal(mix) {
617
621
  let k;
618
622
  let y;
@@ -632,12 +636,13 @@ function toVal(mix) {
632
636
  }
633
637
  return str;
634
638
  }
639
+ /* v8 ignore stop -- @preserve */
635
640
  /**
636
641
  * Vendored/adapted version of the `clsx` package.
637
642
  *
638
643
  * **NOTE:** Prefer the official package from npm outside the context of React Query Builder.
639
644
  */
640
- // istanbul ignore next
645
+ // v8 ignore next
641
646
  function clsx(...args) {
642
647
  let i = 0;
643
648
  let tmp;
@@ -655,7 +660,7 @@ function clsx(...args) {
655
660
  /**
656
661
  * Converts a value to lowercase if it's a string, otherwise returns the value as is.
657
662
  */
658
- // istanbul ignore next
663
+ // v8 ignore next
659
664
  const lc = (v) => typeof v === "string" ? v.toLowerCase() : v;
660
665
  /**
661
666
  * Regex matching numeric strings. Passes for positive/negative integers, decimals,
@@ -689,7 +694,7 @@ const isRuleGroupType = (rg) => isRuleGroup(rg) && typeof rg.combinator === "str
689
694
  */
690
695
  const isRuleGroupTypeIC = (rg) => isRuleGroup(rg) && rg.combinator === void 0;
691
696
  //#endregion
692
- //#region \0@oxc-project+runtime@0.122.0/helpers/typeof.js
697
+ //#region \0@oxc-project+runtime@0.127.0/helpers/typeof.js
693
698
  function _typeof(o) {
694
699
  "@babel/helpers - typeof";
695
700
  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
@@ -699,7 +704,7 @@ function _typeof(o) {
699
704
  }, _typeof(o);
700
705
  }
701
706
  //#endregion
702
- //#region \0@oxc-project+runtime@0.122.0/helpers/toPrimitive.js
707
+ //#region \0@oxc-project+runtime@0.127.0/helpers/toPrimitive.js
703
708
  function toPrimitive(t, r) {
704
709
  if ("object" != _typeof(t) || !t) return t;
705
710
  var e = t[Symbol.toPrimitive];
@@ -711,13 +716,13 @@ function toPrimitive(t, r) {
711
716
  return ("string" === r ? String : Number)(t);
712
717
  }
713
718
  //#endregion
714
- //#region \0@oxc-project+runtime@0.122.0/helpers/toPropertyKey.js
719
+ //#region \0@oxc-project+runtime@0.127.0/helpers/toPropertyKey.js
715
720
  function toPropertyKey(t) {
716
721
  var i = toPrimitive(t, "string");
717
722
  return "symbol" == _typeof(i) ? i : i + "";
718
723
  }
719
724
  //#endregion
720
- //#region \0@oxc-project+runtime@0.122.0/helpers/defineProperty.js
725
+ //#region \0@oxc-project+runtime@0.127.0/helpers/defineProperty.js
721
726
  function _defineProperty(e, r, t) {
722
727
  return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
723
728
  value: t,
@@ -727,7 +732,7 @@ function _defineProperty(e, r, t) {
727
732
  }) : e[r] = t, e;
728
733
  }
729
734
  //#endregion
730
- //#region \0@oxc-project+runtime@0.122.0/helpers/objectSpread2.js
735
+ //#region \0@oxc-project+runtime@0.127.0/helpers/objectSpread2.js
731
736
  function ownKeys(e, r) {
732
737
  var t = Object.keys(e);
733
738
  if (Object.getOwnPropertySymbols) {
@@ -750,7 +755,7 @@ function _objectSpread2(e) {
750
755
  return e;
751
756
  }
752
757
  //#endregion
753
- //#region \0@oxc-project+runtime@0.122.0/helpers/objectWithoutPropertiesLoose.js
758
+ //#region \0@oxc-project+runtime@0.127.0/helpers/objectWithoutPropertiesLoose.js
754
759
  function _objectWithoutPropertiesLoose(r, e) {
755
760
  if (null == r) return {};
756
761
  var t = {};
@@ -761,7 +766,7 @@ function _objectWithoutPropertiesLoose(r, e) {
761
766
  return t;
762
767
  }
763
768
  //#endregion
764
- //#region \0@oxc-project+runtime@0.122.0/helpers/objectWithoutProperties.js
769
+ //#region \0@oxc-project+runtime@0.127.0/helpers/objectWithoutProperties.js
765
770
  function _objectWithoutProperties(e, t) {
766
771
  if (null == e) return {};
767
772
  var o, r, i = _objectWithoutPropertiesLoose(e, t);
@@ -860,8 +865,9 @@ const defaultValidator = (query) => {
860
865
  * Replace this with your custom rule validator.
861
866
  */
862
867
  const validateRule = (rule) => {
863
- // istanbul ignore else
868
+ /* v8 ignore start -- @preserve */
864
869
  if (rule.id) result[rule.id];
870
+ /* v8 ignore stop -- @preserve */
865
871
  };
866
872
  const validateGroup = (rg) => {
867
873
  const reasons = [];
@@ -872,7 +878,7 @@ const defaultValidator = (query) => {
872
878
  if (invalidICs) reasons.push(groupInvalidReasons.invalidIndependentCombinators);
873
879
  }
874
880
  if (isRuleGroupType(rg) && !defaultCombinators.map((c) => c.name).includes(rg.combinator) && rg.rules.length > 1) reasons.push(groupInvalidReasons.invalidCombinator);
875
- /* istanbul ignore else */
881
+ /* v8 ignore else -- @preserve */
876
882
  if (rg.id) result[rg.id] = reasons.length > 0 ? {
877
883
  valid: false,
878
884
  reasons
@@ -1040,7 +1046,7 @@ function getFirstOption(arr) {
1040
1046
  var _og$options$0$value;
1041
1047
  return (_og$options$0$value = og.options[0].value) !== null && _og$options$0$value !== void 0 ? _og$options$0$value : og.options[0].name;
1042
1048
  }
1043
- // istanbul ignore next
1049
+ // v8 ignore next
1044
1050
  return null;
1045
1051
  }
1046
1052
  return (_arr$0$value = arr[0].value) !== null && _arr$0$value !== void 0 ? _arr$0$value : arr[0].name;
@@ -1088,7 +1094,7 @@ const uniqOptList = (originalArray) => {
1088
1094
  return uniqByIdentifier(originalArray.map((o) => toFullOption(o)));
1089
1095
  };
1090
1096
  const prepareOptionList = (props) => {
1091
- // istanbul ignore next
1097
+ // v8 ignore next
1092
1098
  const { optionList: optionListPropOriginal, baseOption = {}, labelMap = {}, placeholder: { placeholderName = "~", placeholderLabel = defaultPlaceholderLabel, placeholderGroupLabel = defaultPlaceholderLabel } = {}, autoSelectOption = true } = props;
1093
1099
  const defaultOption = {
1094
1100
  id: placeholderName,
@@ -1113,11 +1119,13 @@ const prepareOptionList = (props) => {
1113
1119
  optionsMap = autoSelectOption ? op : _objectSpread2(_objectSpread2({}, op), {}, { [placeholderName]: defaultOption });
1114
1120
  } else if (isFlexibleOptionGroupArray(optionList)) for (const og of optionList) for (const opt of og.options) {
1115
1121
  var _opt$value3;
1116
- optionsMap[(_opt$value3 = opt.value) !== null && _opt$value3 !== void 0 ? _opt$value3 : opt.name] = toFullOption(opt, baseOption);
1122
+ optionsMap[(_opt$value3 = opt.value) !== null && _opt$value3 !== void 0 ? _opt$value3 :
1123
+ /* v8 ignore start -- @preserve */ opt.name] = toFullOption(opt, baseOption);
1117
1124
  }
1118
1125
  else for (const opt of optionList) {
1119
1126
  var _opt$value4;
1120
- optionsMap[(_opt$value4 = opt.value) !== null && _opt$value4 !== void 0 ? _opt$value4 : opt.name] = toFullOption(opt, baseOption);
1127
+ optionsMap[(_opt$value4 = opt.value) !== null && _opt$value4 !== void 0 ? _opt$value4 :
1128
+ /* v8 ignore start -- @preserve */ opt.name] = toFullOption(opt, baseOption);
1121
1129
  }
1122
1130
  return {
1123
1131
  defaultOption,
@@ -1133,7 +1141,8 @@ const filterByComparator = (field, operator, fieldToCompare) => {
1133
1141
  const fullFieldToCompare = toFullOption(fieldToCompare);
1134
1142
  if (fullField.value === fullFieldToCompare.value) return false;
1135
1143
  if (typeof fullField.comparator === "string") return fullField[fullField.comparator] === fullFieldToCompare[fullField.comparator];
1136
- return (_fullField$comparator = (_fullField$comparator2 = fullField.comparator) === null || _fullField$comparator2 === void 0 ? void 0 : _fullField$comparator2.call(fullField, fullFieldToCompare, operator)) !== null && _fullField$comparator !== void 0 ? _fullField$comparator : false;
1144
+ return (_fullField$comparator = (_fullField$comparator2 = fullField.comparator) === null || _fullField$comparator2 === void 0 ? void 0 : _fullField$comparator2.call(fullField, fullFieldToCompare, operator)) !== null && _fullField$comparator !== void 0 ? _fullField$comparator :
1145
+ /* v8 ignore start -- @preserve */ false;
1137
1146
  };
1138
1147
  /**
1139
1148
  * For a given {@link FullField}, returns the `fields` list filtered for
@@ -1150,7 +1159,8 @@ const filterFieldsByComparator = (field, fields, operator) => {
1150
1159
  if (!field.comparator) {
1151
1160
  const filterOutSameField = (f) => {
1152
1161
  var _f$value, _field$value;
1153
- return ((_f$value = f.value) !== null && _f$value !== void 0 ? _f$value : f.name) !== ((_field$value = field.value) !== null && _field$value !== void 0 ? _field$value : field.name);
1162
+ return ((_f$value = f.value) !== null && _f$value !== void 0 ? _f$value : /* v8 ignore start -- @preserve */ f.name) !== ((_field$value = field.value) !== null && _field$value !== void 0 ? _field$value :
1163
+ /* v8 ignore start -- @preserve */ field.name);
1154
1164
  };
1155
1165
  if (isFlexibleOptionGroupArray(fields)) return fields.map((og) => _objectSpread2(_objectSpread2({}, og), {}, { options: og.options.filter((v) => filterOutSameField(v)) }));
1156
1166
  return fields.filter((v) => filterOutSameField(v));
@@ -1226,7 +1236,7 @@ const isRuleOrGroupValid = (rg, validationResult, validator) => {
1226
1236
  if (typeof validator === "function" && !isRuleGroup(rg)) {
1227
1237
  const vr = validator(rg);
1228
1238
  if (typeof vr === "boolean") return vr;
1229
- // istanbul ignore else
1239
+ // v8 ignore else
1230
1240
  if (isValidationResult(vr)) return vr.valid;
1231
1241
  }
1232
1242
  return true;
@@ -1340,7 +1350,7 @@ const numerifyValues = (rg, options) => _objectSpread2(_objectSpread2({}, rg), {
1340
1350
  if (Array.isArray(r.value)) return _objectSpread2(_objectSpread2({}, r), {}, { value: r.value.map((v) => parseNumber(v, { parseNumbers })) });
1341
1351
  const valAsArray = toArray(r.value, { retainEmptyStrings: true }).map((v) => parseNumber(v, { parseNumbers }));
1342
1352
  if (valAsArray.every((v) => typeof v === "number")) {
1343
- // istanbul ignore else
1353
+ // v8 ignore else
1344
1354
  if (valAsArray.length > 1) return _objectSpread2(_objectSpread2({}, r), {}, { value: valAsArray });
1345
1355
  else if (valAsArray.length === 1) return _objectSpread2(_objectSpread2({}, r), {}, { value: valAsArray[0] });
1346
1356
  }
@@ -1441,7 +1451,9 @@ const translationMatchFilter = (key, keyToTest, conditions) => keyToTest.startsW
1441
1451
  */
1442
1452
  const getNLTranslataion = (key, translations, conditions = []) => {
1443
1453
  var _ref, _translations$key, _ref2, _ref3, _Object$entries$find$, _Object$entries$find, _Object$entries$find2;
1444
- return conditions.length === 0 ? (_ref = (_translations$key = translations[key]) !== null && _translations$key !== void 0 ? _translations$key : defaultNLTranslations[key]) !== null && _ref !== void 0 ? _ref : "" : (_ref2 = (_ref3 = (_Object$entries$find$ = (_Object$entries$find = Object.entries(translations).find(([keyToTest]) => translationMatchFilter(key, keyToTest, conditions))) === null || _Object$entries$find === void 0 ? void 0 : _Object$entries$find[1]) !== null && _Object$entries$find$ !== void 0 ? _Object$entries$find$ : (_Object$entries$find2 = Object.entries(defaultNLTranslations).find(([keyToTest]) => translationMatchFilter(key, keyToTest, conditions))) === null || _Object$entries$find2 === void 0 ? void 0 : _Object$entries$find2[1]) !== null && _ref3 !== void 0 ? _ref3 : defaultNLTranslations[key]) !== null && _ref2 !== void 0 ? _ref2 : "";
1454
+ return conditions.length === 0 ? (_ref = (_translations$key = translations[key]) !== null && _translations$key !== void 0 ? _translations$key : defaultNLTranslations[key]) !== null && _ref !== void 0 ? _ref :
1455
+ /* v8 ignore start -- @preserve */ "" : (_ref2 = (_ref3 = (_Object$entries$find$ = (_Object$entries$find = Object.entries(translations).find(([keyToTest]) => translationMatchFilter(key, keyToTest, conditions))) === null || _Object$entries$find === void 0 ? void 0 : _Object$entries$find[1]) !== null && _Object$entries$find$ !== void 0 ? _Object$entries$find$ : (_Object$entries$find2 = Object.entries(defaultNLTranslations).find(([keyToTest]) => translationMatchFilter(key, keyToTest, conditions))) === null || _Object$entries$find2 === void 0 ? void 0 : _Object$entries$find2[1]) !== null && _ref3 !== void 0 ? _ref3 : defaultNLTranslations[key]) !== null && _ref2 !== void 0 ? _ref2 :
1456
+ /* v8 ignore next -- @preserve */ "";
1445
1457
  };
1446
1458
  /**
1447
1459
  * Transforms
@@ -1498,7 +1510,7 @@ const defaultRuleGroupProcessorCEL = (ruleGroup, options) => {
1498
1510
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
1499
1511
  const processRuleGroup = (rg, outermost) => {
1500
1512
  var _rg$id;
1501
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return outermost ? fallbackExpression : "";
1513
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermost ? fallbackExpression : "";
1502
1514
  const processedRules = [];
1503
1515
  let precedingCombinator = "";
1504
1516
  let firstRule = true;
@@ -1546,7 +1558,7 @@ const defaultRuleGroupProcessorCEL = (ruleGroup, options) => {
1546
1558
  //#endregion
1547
1559
  //#region src/utils/formatQuery/defaultRuleProcessorCEL.ts
1548
1560
  const shouldNegate$2 = (op) => op.startsWith("not") || op.startsWith("doesnot");
1549
- const escapeDoubleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`);
1561
+ const escapeDoubleQuotes$1 = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`);
1550
1562
  /**
1551
1563
  * Default rule processor used by {@link formatQuery} for "cel" format.
1552
1564
  *
@@ -1585,19 +1597,19 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
1585
1597
  case "==":
1586
1598
  case "!=":
1587
1599
  case ">":
1588
- case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`}`;
1600
+ case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`}`;
1589
1601
  case "contains":
1590
- case "doesnotcontain": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.contains(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
1602
+ case "doesnotcontain": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.contains(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`})`;
1591
1603
  case "beginswith":
1592
- case "doesnotbeginwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.startsWith(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
1604
+ case "doesnotbeginwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.startsWith(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`})`;
1593
1605
  case "endswith":
1594
- case "doesnotendwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.endsWith(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
1606
+ case "doesnotendwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.endsWith(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`})`;
1595
1607
  case "null": return `${field} == null`;
1596
1608
  case "notnull": return `${field} != null`;
1597
1609
  case "in":
1598
1610
  case "notin": {
1599
1611
  const [prefix, suffix] = shouldNegate$2(operatorTL) ? ["!(", ")"] : ["", ""];
1600
- return `${prefix}${field} in [${toArray(value).map((val) => valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `"${escapeDoubleQuotes(val, escapeQuotes)}"`).join(", ")}]${suffix}`;
1612
+ return `${prefix}${field} in [${toArray(value).map((val) => valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `"${escapeDoubleQuotes$1(val, escapeQuotes)}"`).join(", ")}]${suffix}`;
1601
1613
  }
1602
1614
  case "between":
1603
1615
  case "notbetween": {
@@ -1607,8 +1619,8 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
1607
1619
  const shouldParseNumbers = !(parseNumbers === false);
1608
1620
  const firstNum = shouldRenderAsNumber(first, shouldParseNumbers) ? parseNumber(first, { parseNumbers: shouldParseNumbers }) : NaN;
1609
1621
  const secondNum = shouldRenderAsNumber(second, shouldParseNumbers) ? parseNumber(second, { parseNumbers: shouldParseNumbers }) : NaN;
1610
- let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `"${escapeDoubleQuotes(first, escapeQuotes)}"` : firstNum;
1611
- let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `"${escapeDoubleQuotes(second, escapeQuotes)}"` : secondNum;
1622
+ let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `"${escapeDoubleQuotes$1(first, escapeQuotes)}"` : firstNum;
1623
+ let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `"${escapeDoubleQuotes$1(second, escapeQuotes)}"` : secondNum;
1612
1624
  if (!preserveValueOrder && firstValue === firstNum && secondValue === secondNum && secondNum < firstNum) {
1613
1625
  const tempNum = secondNum;
1614
1626
  secondValue = firstNum;
@@ -1638,7 +1650,7 @@ const defaultRuleGroupProcessorMongoDBQuery = (ruleGroup, options, meta) => {
1638
1650
  const { inExpressionContext } = context !== null && context !== void 0 ? context : {};
1639
1651
  const processRuleGroup = (rg, outermost) => {
1640
1652
  var _rg$id;
1641
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return outermost ? mongoDbFallback : false;
1653
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermost ? mongoDbFallback : false;
1642
1654
  const combinator = `$${lc(rg.combinator)}`;
1643
1655
  let hasChildRules = false;
1644
1656
  const expressions = rg.rules.map((rule) => {
@@ -1804,7 +1816,7 @@ const defaultRuleGroupProcessorSpEL = (ruleGroup, options) => {
1804
1816
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
1805
1817
  const processRuleGroup = (rg, outermost) => {
1806
1818
  var _rg$id;
1807
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return outermost ? fallbackExpression : "";
1819
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermost ? fallbackExpression : "";
1808
1820
  const processedRules = [];
1809
1821
  let precedingCombinator = "";
1810
1822
  let firstRule = true;
@@ -1853,7 +1865,7 @@ const defaultRuleGroupProcessorSpEL = (ruleGroup, options) => {
1853
1865
  //#region src/utils/formatQuery/defaultRuleProcessorSpEL.ts
1854
1866
  const shouldNegate$1 = (op) => op.startsWith("not") || op.startsWith("doesnot");
1855
1867
  const wrapInNegation = (clause, negate) => negate ? `!(${clause})` : clause;
1856
- const escapeSingleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`'`, `\\'`);
1868
+ const escapeSingleQuotes$2 = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`'`, `\\'`);
1857
1869
  /**
1858
1870
  * Default rule processor used by {@link formatQuery} for "spel" format.
1859
1871
  *
@@ -1891,20 +1903,20 @@ const defaultRuleProcessorSpEL = (rule, opts = {}) => {
1891
1903
  case "==":
1892
1904
  case "!=":
1893
1905
  case ">":
1894
- case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? trimIfString(value) : `'${escapeSingleQuotes(value, escapeQuotes)}'`}`;
1906
+ case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? trimIfString(value) : `'${escapeSingleQuotes$2(value, escapeQuotes)}'`}`;
1895
1907
  case "contains":
1896
- case "doesnotcontain": return wrapInNegation(`${field} matches ${valueIsField || useBareValue ? trimIfString(value) : `'${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
1908
+ case "doesnotcontain": return wrapInNegation(`${field} matches ${valueIsField || useBareValue ? trimIfString(value) : `'${escapeSingleQuotes$2(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
1897
1909
  case "beginswith":
1898
- case "doesnotbeginwith": return wrapInNegation(`${field} matches ${valueIsField ? `'^'.concat(${trimIfString(value)})` : `'${typeof value === "string" && !value.startsWith("^") || useBareValue ? "^" : ""}${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
1910
+ case "doesnotbeginwith": return wrapInNegation(`${field} matches ${valueIsField ? `'^'.concat(${trimIfString(value)})` : `'${typeof value === "string" && !value.startsWith("^") || useBareValue ? "^" : ""}${escapeSingleQuotes$2(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
1899
1911
  case "endswith":
1900
- case "doesnotendwith": return wrapInNegation(`${field} matches ${valueIsField ? `${trimIfString(value)}.concat('$')` : `'${escapeSingleQuotes(value, escapeQuotes)}${typeof value === "string" && !value.endsWith("$") || useBareValue ? "$" : ""}'`}`, shouldNegate$1(operatorTL));
1912
+ case "doesnotendwith": return wrapInNegation(`${field} matches ${valueIsField ? `${trimIfString(value)}.concat('$')` : `'${escapeSingleQuotes$2(value, escapeQuotes)}${typeof value === "string" && !value.endsWith("$") || useBareValue ? "$" : ""}'`}`, shouldNegate$1(operatorTL));
1901
1913
  case "null": return `${field} == null`;
1902
1914
  case "notnull": return `${field} != null`;
1903
1915
  case "in":
1904
1916
  case "notin": {
1905
1917
  const negate = shouldNegate$1(operatorTL) ? "!" : "";
1906
1918
  const valueAsArray = toArray(value);
1907
- return valueAsArray.length > 0 ? `${negate}(${valueAsArray.map((val) => `${field} == ${valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `'${escapeSingleQuotes(val, escapeQuotes)}'`}`).join(" or ")})` : "";
1919
+ return valueAsArray.length > 0 ? `${negate}(${valueAsArray.map((val) => `${field} == ${valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `'${escapeSingleQuotes$2(val, escapeQuotes)}'`}`).join(" or ")})` : "";
1908
1920
  }
1909
1921
  case "between":
1910
1922
  case "notbetween": {
@@ -1914,8 +1926,8 @@ const defaultRuleProcessorSpEL = (rule, opts = {}) => {
1914
1926
  const shouldParseNumbers = !(parseNumbers === false);
1915
1927
  const firstNum = shouldRenderAsNumber(first, shouldParseNumbers) ? parseNumber(first, { parseNumbers: shouldParseNumbers }) : NaN;
1916
1928
  const secondNum = shouldRenderAsNumber(second, shouldParseNumbers) ? parseNumber(second, { parseNumbers: shouldParseNumbers }) : NaN;
1917
- let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `'${escapeSingleQuotes(first, escapeQuotes)}'` : firstNum;
1918
- let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `'${escapeSingleQuotes(second, escapeQuotes)}'` : secondNum;
1929
+ let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `'${escapeSingleQuotes$2(first, escapeQuotes)}'` : firstNum;
1930
+ let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `'${escapeSingleQuotes$2(second, escapeQuotes)}'` : secondNum;
1919
1931
  if (!preserveValueOrder && firstValue === firstNum && secondValue === secondNum && secondNum < firstNum) {
1920
1932
  const tempNum = secondNum;
1921
1933
  secondValue = firstNum;
@@ -1984,6 +1996,71 @@ const defaultValueProcessorByRule = ({ operator, value, valueSource }, { escapeQ
1984
1996
  return valueIsField ? wrapFieldName(value) : shouldRenderAsNumber(value, parseNumbers) ? `${trimIfString(value)}` : `${wrapAndEscape(value)}`;
1985
1997
  };
1986
1998
  //#endregion
1999
+ //#region src/utils/formatQuery/defaultRuleGroupProcessorCypher.ts
2000
+ /**
2001
+ * Maps a {@link DefaultCombinatorName} to a Cypher combinator keyword.
2002
+ *
2003
+ * @group Export
2004
+ */
2005
+ const cypherCombinatorMap = {
2006
+ and: "AND",
2007
+ or: "OR"
2008
+ };
2009
+ /**
2010
+ * Rule group processor used by {@link formatQuery} for "cypher" and "gql" formats.
2011
+ *
2012
+ * @group Export
2013
+ */
2014
+ const defaultRuleGroupProcessorCypher = (ruleGroup, options) => {
2015
+ const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
2016
+ const processRuleGroup = (rg, outermost) => {
2017
+ var _rg$id;
2018
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermost ? fallbackExpression : "";
2019
+ const processedRules = [];
2020
+ let precedingCombinator = "";
2021
+ let firstRule = true;
2022
+ for (const rule of rg.rules) {
2023
+ var _rule$valueSource;
2024
+ if (typeof rule === "string") {
2025
+ precedingCombinator = cypherCombinatorMap[rule];
2026
+ continue;
2027
+ }
2028
+ if (isRuleGroup(rule)) {
2029
+ const processedGroup = processRuleGroup(rule);
2030
+ if (processedGroup) {
2031
+ if (!firstRule && precedingCombinator) {
2032
+ processedRules.push(precedingCombinator);
2033
+ precedingCombinator = "";
2034
+ }
2035
+ firstRule = false;
2036
+ processedRules.push(processedGroup);
2037
+ }
2038
+ continue;
2039
+ }
2040
+ const [validationResult, fieldValidator] = validateRule(rule);
2041
+ if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
2042
+ const fieldData = getOption(fields, rule.field);
2043
+ const processedRule = ruleProcessor(rule, _objectSpread2(_objectSpread2({}, options), {}, {
2044
+ parseNumbers: getParseNumberBoolean(fieldData === null || fieldData === void 0 ? void 0 : fieldData.inputType),
2045
+ escapeQuotes: ((_rule$valueSource = rule.valueSource) !== null && _rule$valueSource !== void 0 ? _rule$valueSource : "value") === "value",
2046
+ fieldData
2047
+ }));
2048
+ if (processedRule) {
2049
+ if (!firstRule && precedingCombinator) {
2050
+ processedRules.push(precedingCombinator);
2051
+ precedingCombinator = "";
2052
+ }
2053
+ firstRule = false;
2054
+ processedRules.push(processedRule);
2055
+ }
2056
+ }
2057
+ const expression = processedRules.join(isRuleGroupType(rg) ? ` ${cypherCombinatorMap[rg.combinator]} ` : " ");
2058
+ const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "NOT " : ""}(`, ")"] : ["", ""];
2059
+ return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
2060
+ };
2061
+ return processRuleGroup(ruleGroup, true);
2062
+ };
2063
+ //#endregion
1987
2064
  //#region src/utils/formatQuery/defaultRuleProcessorDrizzle.ts
1988
2065
  /**
1989
2066
  * Default rule processor used by {@link formatQuery} for the "drizzle" format.
@@ -1991,22 +2068,22 @@ const defaultValueProcessorByRule = ({ operator, value, valueSource }, { escapeQ
1991
2068
  * @group Export
1992
2069
  */
1993
2070
  const defaultRuleProcessorDrizzle = (rule, _options) => {
1994
- const opts = _options !== null && _options !== void 0 ? _options : ( /* istanbul ignore next */ {});
1995
- // istanbul ignore next
2071
+ const opts = _options !== null && _options !== void 0 ? _options : /* v8 ignore start -- @preserve */ {};
2072
+ // v8 ignore next
1996
2073
  const { parseNumbers, preserveValueOrder, context = {} } = opts;
1997
2074
  const { columns, drizzleOperators, useRawFields } = context;
1998
- if (!columns || !drizzleOperators) return;
2075
+ if (!columns || !drizzleOperators) return void 0;
1999
2076
  const { between, eq, gt, gte, inArray, isNotNull, isNull, like, lt, lte, ne, notBetween, notInArray, notLike, sql } = drizzleOperators;
2000
2077
  const { field, operator, value, valueSource } = rule;
2001
2078
  const column = useRawFields && /[a-z][a-z0-9]*/i.test(field) ? sql.raw(field) : columns[field];
2002
2079
  const operatorLC = lc(operator);
2003
2080
  const valueIsField = valueSource === "field";
2004
2081
  const asFieldOrValue = (v) => valueIsField ? columns[v] : v;
2005
- if (!column) return;
2082
+ if (!column) return void 0;
2006
2083
  const matchEval = processMatchMode(rule);
2007
2084
  if (matchEval === false) return;
2008
2085
  else if (matchEval) {
2009
- if (opts.preset !== "postgresql") return;
2086
+ if (opts.preset !== "postgresql") return void 0;
2010
2087
  const { mode, threshold } = matchEval;
2011
2088
  const arrayElementAlias = "elem_alias";
2012
2089
  const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(transformQuery(rule.value, { ruleProcessor: (r) => _objectSpread2(_objectSpread2({}, r), {}, { field: arrayElementAlias }) }), _objectSpread2(_objectSpread2({}, opts), {}, { context: _objectSpread2(_objectSpread2({}, opts.context), {}, { useRawFields: true }) }));
@@ -2086,12 +2163,12 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
2086
2163
  */
2087
2164
  const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns, drizzleOperators) => {
2088
2165
  const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap } = options;
2089
- if (!columns || !drizzleOperators) return;
2166
+ if (!columns || !drizzleOperators) return void 0;
2090
2167
  const { and, not, or } = drizzleOperators;
2091
2168
  const ruleProcessor = defaultRuleProcessorDrizzle;
2092
2169
  const processRuleGroup = (rg, _outermost) => {
2093
2170
  var _rg$id;
2094
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return;
2171
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return;
2095
2172
  const processedRules = rg.rules.map((rule) => {
2096
2173
  if (isRuleGroup(rule)) return processRuleGroup(rule);
2097
2174
  const [validationResult, fieldValidator] = validateRule(rule);
@@ -2123,7 +2200,7 @@ const defaultRuleGroupProcessorElasticSearch = (ruleGroup, options) => {
2123
2200
  const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
2124
2201
  const processRuleGroup = (rg) => {
2125
2202
  var _rg$id;
2126
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return false;
2203
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return false;
2127
2204
  const processedRules = rg.rules.map((rule) => {
2128
2205
  if (isRuleGroup(rule)) return processRuleGroup(rule);
2129
2206
  const [validationResult, fieldValidator] = validateRule(rule);
@@ -2141,6 +2218,69 @@ const defaultRuleGroupProcessorElasticSearch = (ruleGroup, options) => {
2141
2218
  return processedRuleGroup === false ? {} : processedRuleGroup;
2142
2219
  };
2143
2220
  //#endregion
2221
+ //#region src/utils/formatQuery/defaultRuleGroupProcessorGremlin.ts
2222
+ /**
2223
+ * Rule group processor used by {@link formatQuery} for "gremlin" format.
2224
+ *
2225
+ * At the top level, filter rules produce chained `.has()` steps (implicit AND).
2226
+ * Nested groups use `.and()` / `.or()` / `.not()` compound traversals with
2227
+ * `__` anonymous traversal prefixes.
2228
+ *
2229
+ * @group Export
2230
+ */
2231
+ const defaultRuleGroupProcessorGremlin = (ruleGroup, options) => {
2232
+ var _ruleGroup$id;
2233
+ const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
2234
+ const validateAndProcess = (rule) => {
2235
+ var _rule$valueSource;
2236
+ // v8 ignore next -- @preserve
2237
+ if (typeof rule === "string" || isRuleGroup(rule)) return void 0;
2238
+ const [validationResult, fieldValidator] = validateRule(rule);
2239
+ if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return;
2240
+ const fieldData = getOption(fields, rule.field);
2241
+ return ruleProcessor(rule, _objectSpread2(_objectSpread2({}, options), {}, {
2242
+ parseNumbers: getParseNumberBoolean(fieldData === null || fieldData === void 0 ? void 0 : fieldData.inputType),
2243
+ escapeQuotes: ((_rule$valueSource = rule.valueSource) !== null && _rule$valueSource !== void 0 ? _rule$valueSource : "value") === "value",
2244
+ fieldData
2245
+ }));
2246
+ };
2247
+ /** Recursively processes a nested group into `.and()`/`.or()`/`.not()` form. */
2248
+ const processNested = (rg) => {
2249
+ var _rg$id, _combinator;
2250
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return "";
2251
+ const predicates = [];
2252
+ for (const rule of rg.rules) {
2253
+ if (typeof rule === "string") continue;
2254
+ if (isRuleGroup(rule)) {
2255
+ const nested = processNested(rule);
2256
+ if (nested) predicates.push(nested);
2257
+ continue;
2258
+ }
2259
+ const processed = validateAndProcess(rule);
2260
+ if (processed) predicates.push(processed);
2261
+ }
2262
+ if (predicates.length === 0) return "";
2263
+ const combinator = (_combinator = rg.combinator) !== null && _combinator !== void 0 ? _combinator : "and";
2264
+ const prefix = rg.not ? "not" : combinator;
2265
+ if (predicates.length === 1 && !rg.not) return predicates[0];
2266
+ return `.${prefix}(${predicates.map((p) => p.startsWith(".") ? `__${p}` : p).join(", ")})`;
2267
+ };
2268
+ if (!isRuleOrGroupValid(ruleGroup, validationMap[(_ruleGroup$id = ruleGroup.id) !== null && _ruleGroup$id !== void 0 ? _ruleGroup$id : /* v8 ignore start -- @preserve */ ""])) return fallbackExpression;
2269
+ const steps = [];
2270
+ for (const rule of ruleGroup.rules) {
2271
+ if (typeof rule === "string") continue;
2272
+ if (isRuleGroup(rule)) {
2273
+ const compound = processNested(rule);
2274
+ if (compound) steps.push(compound);
2275
+ continue;
2276
+ }
2277
+ const processed = validateAndProcess(rule);
2278
+ if (processed) steps.push(processed);
2279
+ }
2280
+ if (steps.length === 0) return fallbackExpression;
2281
+ return steps.join("");
2282
+ };
2283
+ //#endregion
2144
2284
  //#region src/utils/formatQuery/defaultRuleGroupProcessorJSONata.ts
2145
2285
  /**
2146
2286
  * Rule group processor used by {@link formatQuery} for "jsonata" format.
@@ -2151,7 +2291,7 @@ const defaultRuleGroupProcessorJSONata = (ruleGroup, options) => {
2151
2291
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
2152
2292
  const processRuleGroup = (rg, outermost) => {
2153
2293
  var _rg$id;
2154
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return outermost ? fallbackExpression : "";
2294
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermost ? fallbackExpression : "";
2155
2295
  const processedRules = [];
2156
2296
  let precedingCombinator = "";
2157
2297
  let firstRule = true;
@@ -2208,7 +2348,7 @@ const defaultRuleGroupProcessorJsonLogic = (ruleGroup, options) => {
2208
2348
  const query = convertFromIC(ruleGroup);
2209
2349
  const processRuleGroup = (rg, _outermost) => {
2210
2350
  var _rg$id;
2211
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return false;
2351
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return false;
2212
2352
  const processedRules = rg.rules.map((rule) => {
2213
2353
  if (isRuleGroup(rule)) return processRuleGroup(rule);
2214
2354
  const [validationResult, fieldValidator] = validateRule(rule);
@@ -2236,7 +2376,7 @@ const defaultRuleGroupProcessorLDAP = (ruleGroup, options) => {
2236
2376
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
2237
2377
  const processRuleGroup = (rg, outermost) => {
2238
2378
  var _rg$id;
2239
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return outermost ? fallbackExpression : "";
2379
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermost ? fallbackExpression : "";
2240
2380
  const rules = rg.rules.map((rule) => {
2241
2381
  var _rule$valueSource;
2242
2382
  if (isRuleGroup(rule)) return processRuleGroup(rule);
@@ -2270,7 +2410,7 @@ const defaultRuleGroupProcessorMongoDB = (ruleGroup, options, meta) => {
2270
2410
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
2271
2411
  const processRuleGroup = (rg, outermost) => {
2272
2412
  var _rg$id;
2273
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return outermost ? fallbackExpression : "";
2413
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermost ? fallbackExpression : "";
2274
2414
  const combinator = `"$${lc(rg.combinator)}"`;
2275
2415
  let hasChildRules = false;
2276
2416
  const expressions = rg.rules.map((rule) => {
@@ -2307,7 +2447,7 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
2307
2447
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, translations, validateRule, validationMap } = options;
2308
2448
  const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
2309
2449
  var _rg$id, _rg2$combinator2, _translations2;
2310
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
2450
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermostOrLonelyInGroup ? fallbackExpression : /* v8 ignore next -- @preserve */ "";
2311
2451
  const rg2 = isRuleGroupTypeIC(rg) && rg.rules.some((r) => typeof r === "string" && lc(r) === "xor") ? convertFromIC(rg) : rg;
2312
2452
  const processedRules = [];
2313
2453
  let precedingCombinator = "";
@@ -2321,8 +2461,9 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
2321
2461
  }
2322
2462
  if (isRuleGroup(rule)) {
2323
2463
  var _rg2$combinator;
2324
- const processedGroup = processRuleGroup(rule, rg2.rules.length === 1 && !(rg2.not || /^xor$/i.test((_rg2$combinator = rg2.combinator) !== null && _rg2$combinator !== void 0 ? _rg2$combinator : "")));
2325
- // istanbul ignore else
2464
+ const processedGroup = processRuleGroup(rule, rg2.rules.length === 1 && !(rg2.not || /^xor$/i.test((_rg2$combinator = rg2.combinator) !== null && _rg2$combinator !== void 0 ? _rg2$combinator :
2465
+ /* v8 ignore start -- @preserve */ "")));
2466
+ // v8 ignore else
2326
2467
  if (processedGroup) {
2327
2468
  if (!firstRule && precedingCombinator) {
2328
2469
  processedRules.push(precedingCombinator);
@@ -2396,7 +2537,7 @@ const defaultRuleGroupProcessorParameterized = (ruleGroup, options) => {
2396
2537
  if (!isPojo(processedRule)) return "";
2397
2538
  const { sql, params: customParams } = processedRule;
2398
2539
  if (typeof sql !== "string" || !sql) return "";
2399
- // istanbul ignore else
2540
+ // v8 ignore else
2400
2541
  if (format === "parameterized" && Array.isArray(customParams)) params.push(...customParams);
2401
2542
  else if (format === "parameterized_named" && isPojo(customParams)) {
2402
2543
  var _fieldParams$get;
@@ -2407,7 +2548,7 @@ const defaultRuleGroupProcessorParameterized = (ruleGroup, options) => {
2407
2548
  };
2408
2549
  const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
2409
2550
  var _rg$id;
2410
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
2551
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermostOrLonelyInGroup ? fallbackExpression : /* v8 ignore next -- @preserve */ "";
2411
2552
  const processedRules = [];
2412
2553
  let precedingCombinator = "";
2413
2554
  let firstRule = true;
@@ -2418,7 +2559,7 @@ const defaultRuleGroupProcessorParameterized = (ruleGroup, options) => {
2418
2559
  }
2419
2560
  if (isRuleGroup(rule)) {
2420
2561
  const processedGroup = processRuleGroup(rule, rg.rules.length === 1);
2421
- // istanbul ignore else
2562
+ // v8 ignore else
2422
2563
  if (processedGroup) {
2423
2564
  if (!firstRule && precedingCombinator) {
2424
2565
  processedRules.push(precedingCombinator);
@@ -2468,7 +2609,7 @@ const defaultRuleGroupProcessorPrisma = (ruleGroup, options) => {
2468
2609
  const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
2469
2610
  const processRuleGroup = (rg, outermost) => {
2470
2611
  var _rg$id;
2471
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return outermost ? prismaFallback : void 0;
2612
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermost ? prismaFallback : void 0;
2472
2613
  const combinator = rg.combinator.toUpperCase();
2473
2614
  let hasChildRules = false;
2474
2615
  const expressions = rg.rules.map((rule) => {
@@ -2501,13 +2642,13 @@ const defaultRuleGroupProcessorPrisma = (ruleGroup, options) => {
2501
2642
  * @group Export
2502
2643
  */
2503
2644
  const defaultRuleGroupProcessorSequelize = (ruleGroup, options) => {
2504
- // istanbul ignore next
2645
+ // v8 ignore next
2505
2646
  const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap, context = {} } = options;
2506
2647
  const { sequelizeOperators: Op } = context;
2507
- if (!Op) return;
2648
+ if (!Op) return void 0;
2508
2649
  const processRuleGroup = (rg, _outermost) => {
2509
2650
  var _rg$id;
2510
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return;
2651
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return;
2511
2652
  const combinator = rg.combinator.toUpperCase();
2512
2653
  let hasChildRules = false;
2513
2654
  const expressions = rg.rules.map((rule) => {
@@ -2527,13 +2668,71 @@ const defaultRuleGroupProcessorSequelize = (ruleGroup, options) => {
2527
2668
  fieldData
2528
2669
  }));
2529
2670
  }).filter(Boolean);
2530
- if (expressions.length === 0) return;
2671
+ if (expressions.length === 0) return void 0;
2531
2672
  const result = expressions.length === 1 && !hasChildRules ? expressions[0] : { [lc(combinator) === "or" ? Op.or : Op.and]: expressions };
2532
2673
  return rg.not ? { [Op.not]: result } : result;
2533
2674
  };
2534
2675
  return processRuleGroup(convertFromIC(ruleGroup), true);
2535
2676
  };
2536
2677
  //#endregion
2678
+ //#region src/utils/formatQuery/defaultRuleGroupProcessorSPARQL.ts
2679
+ /**
2680
+ * Rule group processor used by {@link formatQuery} for "sparql" format.
2681
+ *
2682
+ * SPARQL uses the same combinators as CEL (`&&` / `||`) and `!()` for negation.
2683
+ *
2684
+ * @group Export
2685
+ */
2686
+ const defaultRuleGroupProcessorSPARQL = (ruleGroup, options) => {
2687
+ const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
2688
+ const processRuleGroup = (rg, outermost) => {
2689
+ var _rg$id;
2690
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermost ? fallbackExpression : "";
2691
+ const processedRules = [];
2692
+ let precedingCombinator = "";
2693
+ let firstRule = true;
2694
+ for (const rule of rg.rules) {
2695
+ var _rule$valueSource;
2696
+ if (typeof rule === "string") {
2697
+ precedingCombinator = celCombinatorMap[rule];
2698
+ continue;
2699
+ }
2700
+ if (isRuleGroup(rule)) {
2701
+ const processedGroup = processRuleGroup(rule);
2702
+ if (processedGroup) {
2703
+ if (!firstRule && precedingCombinator) {
2704
+ processedRules.push(precedingCombinator);
2705
+ precedingCombinator = "";
2706
+ }
2707
+ firstRule = false;
2708
+ processedRules.push(processedGroup);
2709
+ }
2710
+ continue;
2711
+ }
2712
+ const [validationResult, fieldValidator] = validateRule(rule);
2713
+ if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
2714
+ const fieldData = getOption(fields, rule.field);
2715
+ const processedRule = ruleProcessor(rule, _objectSpread2(_objectSpread2({}, options), {}, {
2716
+ parseNumbers: getParseNumberBoolean(fieldData === null || fieldData === void 0 ? void 0 : fieldData.inputType),
2717
+ escapeQuotes: ((_rule$valueSource = rule.valueSource) !== null && _rule$valueSource !== void 0 ? _rule$valueSource : "value") === "value",
2718
+ fieldData
2719
+ }));
2720
+ if (processedRule) {
2721
+ if (!firstRule && precedingCombinator) {
2722
+ processedRules.push(precedingCombinator);
2723
+ precedingCombinator = "";
2724
+ }
2725
+ firstRule = false;
2726
+ processedRules.push(processedRule);
2727
+ }
2728
+ }
2729
+ const expression = processedRules.join(isRuleGroupType(rg) ? ` ${celCombinatorMap[rg.combinator]} ` : " ");
2730
+ const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "!" : ""}(`, ")"] : ["", ""];
2731
+ return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
2732
+ };
2733
+ return processRuleGroup(ruleGroup, true);
2734
+ };
2735
+ //#endregion
2537
2736
  //#region src/utils/formatQuery/defaultRuleGroupProcessorSQL.ts
2538
2737
  /**
2539
2738
  * Default rule processor used by {@link formatQuery} for "sql" format.
@@ -2544,7 +2743,7 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
2544
2743
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
2545
2744
  const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
2546
2745
  var _rg$id;
2547
- if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
2746
+ if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermostOrLonelyInGroup ? fallbackExpression : /* v8 ignore next -- @preserve */ "";
2548
2747
  const processedRules = [];
2549
2748
  let precedingCombinator = "";
2550
2749
  let firstRule = true;
@@ -2556,7 +2755,7 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
2556
2755
  }
2557
2756
  if (isRuleGroup(rule)) {
2558
2757
  const processedGroup = processRuleGroup(rule, rg.rules.length === 1);
2559
- // istanbul ignore else
2758
+ // v8 ignore else
2560
2759
  if (processedGroup) {
2561
2760
  if (!firstRule && precedingCombinator) {
2562
2761
  processedRules.push(precedingCombinator);
@@ -2591,6 +2790,377 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
2591
2790
  return processRuleGroup(ruleGroup, true);
2592
2791
  };
2593
2792
  //#endregion
2793
+ //#region src/utils/formatQuery/defaultRuleGroupProcessorDiagnostics.ts
2794
+ const numericInputTypes = new Set([
2795
+ "number",
2796
+ "range",
2797
+ "bigint"
2798
+ ]);
2799
+ const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
2800
+ const timeRegex = /^\d{2}:\d{2}(:\d{2}(\.\d+)?)?$/;
2801
+ const monthRegex = /^\d{4}-\d{2}$/;
2802
+ const weekRegex = /^\d{4}-W\d{2}$/;
2803
+ const colorRegex = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i;
2804
+ const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
2805
+ const isValidDateComponents = (y, m, d) => {
2806
+ const date = new Date(Date.UTC(y, m - 1, d));
2807
+ return date.getUTCFullYear() === y && date.getUTCMonth() === m - 1 && date.getUTCDate() === d;
2808
+ };
2809
+ const isValidTimeComponents = (s) => {
2810
+ const parts = s.split(":");
2811
+ const h = Number(parts[0]);
2812
+ const m = Number(parts[1]);
2813
+ const sec = parts[2] ? Number.parseFloat(parts[2]) : 0;
2814
+ return h >= 0 && h <= 23 && m >= 0 && m <= 59 && sec >= 0 && sec < 60;
2815
+ };
2816
+ /**
2817
+ * Checks whether a value is compatible with the given {@link FullField.inputType}.
2818
+ * Returns a diagnostic code string if there is a mismatch, or `undefined` if OK.
2819
+ */
2820
+ const checkValueTypeMismatch = (value, inputType) => {
2821
+ if (value === null || value === void 0 || value === "") return void 0;
2822
+ if (numericInputTypes.has(inputType)) {
2823
+ const v = typeof value === "string" ? value.trim() : value;
2824
+ if (typeof v === "number" || typeof v === "bigint") return void 0;
2825
+ if (typeof v === "string" && numericRegex.test(v)) return void 0;
2826
+ return "VALUE_TYPE_MISMATCH";
2827
+ }
2828
+ if (inputType === "date") {
2829
+ if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
2830
+ const v = value.trim();
2831
+ if (!dateRegex.test(v)) return "VALUE_TYPE_MISMATCH";
2832
+ const [y, m, d] = v.split("-").map(Number);
2833
+ return isValidDateComponents(y, m, d) ? void 0 : "VALUE_TYPE_MISMATCH";
2834
+ }
2835
+ if (inputType === "datetime-local") {
2836
+ if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
2837
+ const base = value.trim().replace(/(Z|[+-]\d{2}:?\d{2}|[+-]\d{2})$/, "");
2838
+ const tIndex = base.indexOf("T");
2839
+ if (tIndex === -1) return "VALUE_TYPE_MISMATCH";
2840
+ const datePart = base.slice(0, tIndex);
2841
+ const timePart = base.slice(tIndex + 1);
2842
+ if (!dateRegex.test(datePart) || !timeRegex.test(timePart)) return "VALUE_TYPE_MISMATCH";
2843
+ const [y, m, d] = datePart.split("-").map(Number);
2844
+ if (!isValidDateComponents(y, m, d)) return "VALUE_TYPE_MISMATCH";
2845
+ return isValidTimeComponents(timePart) ? void 0 : "VALUE_TYPE_MISMATCH";
2846
+ }
2847
+ if (inputType === "time") {
2848
+ if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
2849
+ const v = value.trim();
2850
+ if (!timeRegex.test(v)) return "VALUE_TYPE_MISMATCH";
2851
+ return isValidTimeComponents(v) ? void 0 : "VALUE_TYPE_MISMATCH";
2852
+ }
2853
+ if (inputType === "month") {
2854
+ if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
2855
+ const v = value.trim();
2856
+ if (!monthRegex.test(v)) return "VALUE_TYPE_MISMATCH";
2857
+ const m = Number(v.slice(5));
2858
+ return m >= 1 && m <= 12 ? void 0 : "VALUE_TYPE_MISMATCH";
2859
+ }
2860
+ if (inputType === "week") {
2861
+ if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
2862
+ const v = value.trim();
2863
+ if (!weekRegex.test(v)) return "VALUE_TYPE_MISMATCH";
2864
+ const w = Number(v.slice(6));
2865
+ return w >= 1 && w <= 53 ? void 0 : "VALUE_TYPE_MISMATCH";
2866
+ }
2867
+ if (inputType === "color") {
2868
+ if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
2869
+ return colorRegex.test(value.trim()) ? void 0 : "VALUE_TYPE_MISMATCH";
2870
+ }
2871
+ if (inputType === "url") {
2872
+ if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
2873
+ try {
2874
+ new URL(value.trim());
2875
+ return;
2876
+ } catch (_unused) {
2877
+ return "VALUE_TYPE_MISMATCH";
2878
+ }
2879
+ }
2880
+ if (inputType === "email") {
2881
+ if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
2882
+ return emailRegex.test(value.trim()) ? void 0 : "VALUE_TYPE_MISMATCH";
2883
+ }
2884
+ };
2885
+ /**
2886
+ * Rule group processor used by {@link formatQuery} for "diagnostics" format.
2887
+ *
2888
+ * Produces a {@link DiagnosticsResult} containing an annotated copy of the query
2889
+ * tree (`query`) with `valid`, `reasons`, `path`, and `level` properties on every
2890
+ * rule and group; a flat `diagnostics` array; aggregate `stats`; and a per-field
2891
+ * `fieldSummary`.
2892
+ *
2893
+ * @group Export
2894
+ */
2895
+ const defaultRuleGroupProcessorDiagnostics = (ruleGroup, options) => {
2896
+ const { fields: fieldsOption, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap } = options;
2897
+ const diagnostics = [];
2898
+ const stats = {
2899
+ totalRules: 0,
2900
+ totalGroups: 0,
2901
+ validRules: 0,
2902
+ invalidRules: 0,
2903
+ validGroups: 0,
2904
+ invalidGroups: 0
2905
+ };
2906
+ const fieldSummary = {};
2907
+ const uniqueFields = toFlatOptionArray(fieldsOption);
2908
+ const fieldsByName = /* @__PURE__ */ new Map();
2909
+ for (const f of uniqueFields) fieldsByName.set(f.name, f);
2910
+ const hasFieldsConfig = fieldsByName.size > 0;
2911
+ const processRuleGroup = (rg, path) => {
2912
+ var _rg$id;
2913
+ stats.totalGroups++;
2914
+ const level = path.length;
2915
+ const groupValidationEntry = validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : ""];
2916
+ const groupSelfValid = isRuleOrGroupValid(rg, groupValidationEntry);
2917
+ const groupReasons = getReasons(groupValidationEntry);
2918
+ if (rg.muted) {
2919
+ var _rg$id2;
2920
+ diagnostics.push({
2921
+ id: (_rg$id2 = rg.id) !== null && _rg$id2 !== void 0 ? _rg$id2 : "",
2922
+ path,
2923
+ code: "MUTED",
2924
+ message: "Group is muted",
2925
+ source: "muted"
2926
+ });
2927
+ } else if (!groupSelfValid && groupValidationEntry !== void 0) {
2928
+ var _rg$id3;
2929
+ diagnostics.push({
2930
+ id: (_rg$id3 = rg.id) !== null && _rg$id3 !== void 0 ? _rg$id3 : "",
2931
+ path,
2932
+ code: "CUSTOM_VALIDATOR",
2933
+ message: groupReasons ? `Invalid: ${groupReasons.join(", ")}` : "Group failed validation",
2934
+ source: "query-validator"
2935
+ });
2936
+ }
2937
+ let allChildrenValid = true;
2938
+ let ruleIndex = 0;
2939
+ const annotatedRules = [];
2940
+ for (const rule of rg.rules) {
2941
+ var _getReasons;
2942
+ if (typeof rule === "string") {
2943
+ annotatedRules.push(rule);
2944
+ ruleIndex++;
2945
+ continue;
2946
+ }
2947
+ const childPath = [...path, ruleIndex];
2948
+ if (isRuleGroup(rule)) {
2949
+ const annotatedGroup = processRuleGroup(rule, childPath);
2950
+ if (!annotatedGroup.valid) allChildrenValid = false;
2951
+ annotatedRules.push(annotatedGroup);
2952
+ ruleIndex++;
2953
+ continue;
2954
+ }
2955
+ stats.totalRules++;
2956
+ const childLevel = childPath.length;
2957
+ const [validationResult, fieldValidator] = validateRule(rule);
2958
+ const ruleValid = isRuleOrGroupValid(rule, validationResult, fieldValidator) && rule.field !== placeholderFieldName && rule.operator !== placeholderOperatorName && !(placeholderValueName !== void 0 && rule.value === placeholderValueName);
2959
+ collectRuleDiagnostics(rule, childPath, validationResult, fieldValidator, ruleValid, diagnostics, placeholderFieldName, placeholderOperatorName, placeholderValueName, hasFieldsConfig, fieldsByName);
2960
+ if (!ruleValid) {
2961
+ allChildrenValid = false;
2962
+ stats.invalidRules++;
2963
+ } else stats.validRules++;
2964
+ const fieldName = rule.field;
2965
+ if (!fieldSummary[fieldName]) fieldSummary[fieldName] = {
2966
+ ruleCount: 0,
2967
+ invalidCount: 0
2968
+ };
2969
+ fieldSummary[fieldName].ruleCount++;
2970
+ if (!ruleValid) fieldSummary[fieldName].invalidCount++;
2971
+ const ruleReasons = (_getReasons = getReasons(validationResult)) !== null && _getReasons !== void 0 ? _getReasons : getFieldValidatorReasons(rule, fieldValidator);
2972
+ const annotatedRule = _objectSpread2(_objectSpread2(_objectSpread2({}, rule), {}, { valid: ruleValid }, ruleReasons ? { reasons: ruleReasons } : null), {}, {
2973
+ path: childPath,
2974
+ level: childLevel
2975
+ });
2976
+ annotatedRules.push(annotatedRule);
2977
+ ruleIndex++;
2978
+ }
2979
+ const groupValid = groupSelfValid && allChildrenValid;
2980
+ if (groupValid) stats.validGroups++;
2981
+ else stats.invalidGroups++;
2982
+ if (isRuleGroupType(rg)) return _objectSpread2(_objectSpread2(_objectSpread2({}, rg), {}, { valid: groupValid }, groupReasons ? { reasons: groupReasons } : null), {}, {
2983
+ path,
2984
+ level,
2985
+ rules: annotatedRules
2986
+ });
2987
+ return _objectSpread2(_objectSpread2(_objectSpread2({}, rg), {}, { valid: groupValid }, groupReasons ? { reasons: groupReasons } : null), {}, {
2988
+ path,
2989
+ level,
2990
+ rules: annotatedRules
2991
+ });
2992
+ };
2993
+ const query = processRuleGroup(ruleGroup, []);
2994
+ if (hasFieldsConfig) {
2995
+ const referencedFields = new Set(Object.keys(fieldSummary));
2996
+ for (const [fieldName] of fieldsByName) if (!referencedFields.has(fieldName)) diagnostics.push({
2997
+ id: "",
2998
+ path: [],
2999
+ code: "UNREFERENCED_FIELD",
3000
+ message: `Field "${fieldName}" is defined in the fields config but not used in the query`,
3001
+ source: "field-check"
3002
+ });
3003
+ }
3004
+ return {
3005
+ query,
3006
+ diagnostics,
3007
+ stats,
3008
+ fieldSummary
3009
+ };
3010
+ };
3011
+ /**
3012
+ * Collects diagnostic entries for a single rule.
3013
+ */
3014
+ const collectRuleDiagnostics = (rule, path, validationResult, fieldValidator, ruleValid, diagnostics, placeholderFieldName, placeholderOperatorName, placeholderValueName, hasFieldsConfig, fieldsByName) => {
3015
+ var _rule$id;
3016
+ const id = (_rule$id = rule.id) !== null && _rule$id !== void 0 ? _rule$id : "";
3017
+ if (rule.muted) diagnostics.push({
3018
+ id,
3019
+ path,
3020
+ code: "MUTED",
3021
+ message: "Rule is muted",
3022
+ source: "muted"
3023
+ });
3024
+ if (rule.field === placeholderFieldName) diagnostics.push({
3025
+ id,
3026
+ path,
3027
+ code: "PLACEHOLDER_FIELD",
3028
+ message: "Rule has a placeholder field",
3029
+ source: "placeholder"
3030
+ });
3031
+ if (rule.operator === placeholderOperatorName) diagnostics.push({
3032
+ id,
3033
+ path,
3034
+ code: "PLACEHOLDER_OPERATOR",
3035
+ message: "Rule has a placeholder operator",
3036
+ source: "placeholder"
3037
+ });
3038
+ if (placeholderValueName !== void 0 && rule.value === placeholderValueName) diagnostics.push({
3039
+ id,
3040
+ path,
3041
+ code: "PLACEHOLDER_VALUE",
3042
+ message: "Rule has a placeholder value",
3043
+ source: "placeholder"
3044
+ });
3045
+ if (!rule.muted && rule.field !== placeholderFieldName && rule.operator !== placeholderOperatorName && !(placeholderValueName !== void 0 && rule.value === placeholderValueName)) {
3046
+ if (typeof validationResult === "boolean" && !validationResult) diagnostics.push({
3047
+ id,
3048
+ path,
3049
+ code: "CUSTOM_VALIDATOR",
3050
+ message: "Rule failed validation",
3051
+ source: "query-validator"
3052
+ });
3053
+ else if (typeof validationResult !== "boolean" && isValidationResult(validationResult) && !validationResult.valid) {
3054
+ const reasons = validationResult.reasons;
3055
+ diagnostics.push({
3056
+ id,
3057
+ path,
3058
+ code: "CUSTOM_VALIDATOR",
3059
+ message: reasons ? `Invalid: ${reasons.join(", ")}` : "Rule failed validation",
3060
+ source: "query-validator"
3061
+ });
3062
+ } else if (!ruleValid && typeof fieldValidator === "function") {
3063
+ const vr = fieldValidator(rule);
3064
+ const reasons = typeof vr !== "boolean" && isValidationResult(vr) && !vr.valid ? vr.reasons : void 0;
3065
+ diagnostics.push({
3066
+ id,
3067
+ path,
3068
+ code: "CUSTOM_VALIDATOR",
3069
+ message: reasons ? `Invalid: ${reasons.join(", ")}` : "Rule failed field validation",
3070
+ source: "field-validator"
3071
+ });
3072
+ }
3073
+ }
3074
+ if (hasFieldsConfig && !fieldsByName.has(rule.field) && rule.field !== placeholderFieldName) diagnostics.push({
3075
+ id,
3076
+ path,
3077
+ code: "UNDEFINED_FIELD",
3078
+ message: `Field "${rule.field}" is not defined in the fields config`,
3079
+ source: "field-check"
3080
+ });
3081
+ if (hasFieldsConfig) {
3082
+ const fieldDef = fieldsByName.get(rule.field);
3083
+ if (fieldDef === null || fieldDef === void 0 ? void 0 : fieldDef.inputType) {
3084
+ const mismatchCode = checkValueTypeMismatch(rule.value, fieldDef.inputType);
3085
+ if (mismatchCode) diagnostics.push({
3086
+ id,
3087
+ path,
3088
+ code: mismatchCode,
3089
+ message: `Value "${rule.value}" is not compatible with input type "${fieldDef.inputType}"`,
3090
+ source: "type-check"
3091
+ });
3092
+ }
3093
+ }
3094
+ };
3095
+ /**
3096
+ * Extracts `reasons` from a validation result, if present.
3097
+ */
3098
+ const getReasons = (validationResult) => {
3099
+ if (typeof validationResult !== "boolean" && isValidationResult(validationResult) && !validationResult.valid && validationResult.reasons) return validationResult.reasons;
3100
+ };
3101
+ /**
3102
+ * Runs a field-level validator and extracts `reasons` if present.
3103
+ */
3104
+ const getFieldValidatorReasons = (rule, fieldValidator) => {
3105
+ if (typeof fieldValidator === "function") {
3106
+ const vr = fieldValidator(rule);
3107
+ if (typeof vr !== "boolean" && isValidationResult(vr) && !vr.valid && vr.reasons) return vr.reasons;
3108
+ }
3109
+ };
3110
+ //#endregion
3111
+ //#region src/utils/formatQuery/defaultRuleProcessorCypher.ts
3112
+ const escapeSingleQuotes$1 = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll("'", "\\'");
3113
+ /**
3114
+ * Default rule processor used by {@link formatQuery} for "cypher" and "gql" formats.
3115
+ *
3116
+ * @group Export
3117
+ */
3118
+ const defaultRuleProcessorCypher = (rule, opts = {}) => {
3119
+ const { escapeQuotes, parseNumbers } = opts;
3120
+ const { field, operator, value, valueSource } = rule;
3121
+ const valueIsField = valueSource === "field";
3122
+ const operatorTL = operator.toLowerCase();
3123
+ const fmtVal = (v) => {
3124
+ if (v === null || v === void 0) return "null";
3125
+ if (typeof v === "boolean" || typeof v === "bigint") return String(v);
3126
+ if (valueIsField) return trimIfString(v);
3127
+ if (typeof v === "number" || shouldRenderAsNumber(v, parseNumbers)) return trimIfString(v);
3128
+ return `'${escapeSingleQuotes$1(v, escapeQuotes)}'`;
3129
+ };
3130
+ switch (operatorTL) {
3131
+ case "=": return `${field} = ${fmtVal(value)}`;
3132
+ case "!=":
3133
+ case "<>": return `${field} <> ${fmtVal(value)}`;
3134
+ case "<":
3135
+ case ">":
3136
+ case "<=":
3137
+ case ">=": return `${field} ${operatorTL} ${fmtVal(value)}`;
3138
+ case "contains": return `${field} CONTAINS ${fmtVal(value)}`;
3139
+ case "doesnotcontain": return `NOT ${field} CONTAINS ${fmtVal(value)}`;
3140
+ case "beginswith": return `${field} STARTS WITH ${fmtVal(value)}`;
3141
+ case "doesnotbeginwith": return `NOT ${field} STARTS WITH ${fmtVal(value)}`;
3142
+ case "endswith": return `${field} ENDS WITH ${fmtVal(value)}`;
3143
+ case "doesnotendwith": return `NOT ${field} ENDS WITH ${fmtVal(value)}`;
3144
+ case "null": return `${field} IS NULL`;
3145
+ case "notnull": return `${field} IS NOT NULL`;
3146
+ case "in":
3147
+ case "notin": {
3148
+ const values = toArray(value).map(fmtVal);
3149
+ if (!values.length) return "";
3150
+ return `${operatorTL === "notin" ? "NOT " : ""}${field} IN [${values.join(", ")}]`;
3151
+ }
3152
+ case "between":
3153
+ case "notbetween": {
3154
+ const arr = toArray(value);
3155
+ if (arr.length < 2) return "";
3156
+ const [low, high] = [fmtVal(arr[0]), fmtVal(arr[1])];
3157
+ const expr = `${low} <= ${field} AND ${field} <= ${high}`;
3158
+ return operatorTL === "notbetween" ? `NOT (${expr})` : expr;
3159
+ }
3160
+ default: return `${field} ${operator} ${fmtVal(value)}`;
3161
+ }
3162
+ };
3163
+ //#endregion
2594
3164
  //#region src/utils/formatQuery/defaultRuleProcessorElasticSearch.ts
2595
3165
  const rangeOperatorMap = {
2596
3166
  "<": "lt",
@@ -2740,6 +3310,68 @@ const defaultRuleProcessorElasticSearch = (rule, options = {}) => {
2740
3310
  return false;
2741
3311
  };
2742
3312
  //#endregion
3313
+ //#region src/utils/formatQuery/defaultRuleProcessorGremlin.ts
3314
+ const escapeSingleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll("'", "\\'");
3315
+ /**
3316
+ * Default rule processor used by {@link formatQuery} for "gremlin" format.
3317
+ *
3318
+ * Each rule becomes a `.has()` step (or `.hasNot()`/`.has()` for null checks).
3319
+ *
3320
+ * @group Export
3321
+ */
3322
+ const defaultRuleProcessorGremlin = (rule, opts = {}) => {
3323
+ const { escapeQuotes, parseNumbers } = opts;
3324
+ const { field, operator, value, valueSource } = rule;
3325
+ const valueIsField = valueSource === "field";
3326
+ const operatorTL = operator.toLowerCase();
3327
+ const prop = field.includes(".") ? field.split(".").pop() : field;
3328
+ const fmtVal = (v) => {
3329
+ if (v === null || v === void 0) return "null";
3330
+ if (typeof v === "boolean" || typeof v === "bigint") return String(v);
3331
+ if (valueIsField) return trimIfString(v);
3332
+ if (typeof v === "number" || shouldRenderAsNumber(v, parseNumbers)) return trimIfString(v);
3333
+ return `'${escapeSingleQuotes(v, escapeQuotes)}'`;
3334
+ };
3335
+ switch (operatorTL) {
3336
+ case "=": return `.has('${prop}', ${fmtVal(value)})`;
3337
+ case "!=":
3338
+ case "<>": return `.has('${prop}', neq(${fmtVal(value)}))`;
3339
+ case "<": return `.has('${prop}', lt(${fmtVal(value)}))`;
3340
+ case ">": return `.has('${prop}', gt(${fmtVal(value)}))`;
3341
+ case "<=": return `.has('${prop}', lte(${fmtVal(value)}))`;
3342
+ case ">=": return `.has('${prop}', gte(${fmtVal(value)}))`;
3343
+ case "contains": return `.has('${prop}', containing(${fmtVal(value)}))`;
3344
+ case "doesnotcontain": return `.has('${prop}', notContaining(${fmtVal(value)}))`;
3345
+ case "beginswith": return `.has('${prop}', startingWith(${fmtVal(value)}))`;
3346
+ case "doesnotbeginwith": return `.has('${prop}', notStartingWith(${fmtVal(value)}))`;
3347
+ case "endswith": return `.has('${prop}', endingWith(${fmtVal(value)}))`;
3348
+ case "doesnotendwith": return `.has('${prop}', notEndingWith(${fmtVal(value)}))`;
3349
+ case "null": return `.hasNot('${prop}')`;
3350
+ case "notnull": return `.has('${prop}')`;
3351
+ case "in": {
3352
+ const items = toArray(value).map(fmtVal);
3353
+ if (!items.length) return "";
3354
+ return `.has('${prop}', within(${items.join(", ")}))`;
3355
+ }
3356
+ case "notin": {
3357
+ const items = toArray(value).map(fmtVal);
3358
+ if (!items.length) return "";
3359
+ return `.has('${prop}', without(${items.join(", ")}))`;
3360
+ }
3361
+ case "between": {
3362
+ const arr = toArray(value);
3363
+ if (arr.length < 2) return "";
3364
+ return `.has('${prop}', between(${fmtVal(arr[0])}, ${fmtVal(arr[1])}))`;
3365
+ }
3366
+ case "notbetween": {
3367
+ const arr = toArray(value);
3368
+ if (arr.length < 2) return "";
3369
+ return `.has('${prop}', outside(${fmtVal(arr[0])}, ${fmtVal(arr[1])}))`;
3370
+ }
3371
+ default: return `.has('${prop}', ${fmtVal(value)})`;
3372
+ }
3373
+ };
3374
+ //#endregion
2743
3375
  //#region src/utils/formatQuery/defaultRuleProcessorJSONata.ts
2744
3376
  const shouldNegate = (op) => op.startsWith("not") || op.startsWith("doesnot");
2745
3377
  const quote = (v, escapeQuotes) => `"${typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`)}"`;
@@ -2964,12 +3596,12 @@ const defaultRuleProcessorLDAP = (rule, options = {}) => {
2964
3596
  return negateIf(`(&(${field}>=${ldapEscape(firstValue)})(${field}<=${ldapEscape(secondValue)}))`, operatorLC === "notbetween");
2965
3597
  }
2966
3598
  }
2967
- // istanbul ignore next
3599
+ // v8 ignore next
2968
3600
  return "";
2969
3601
  };
2970
3602
  //#endregion
2971
3603
  //#region src/utils/formatQuery/defaultValueProcessorNL.ts
2972
- const escapeStringValueQuotes = (v, quoteChar, escapeQuotes) => escapeQuotes && typeof v === "string" ? v.replaceAll(`${quoteChar}`, `${quoteChar}${quoteChar}`) : v;
3604
+ const escapeStringValueQuotes = (v, quoteChar, escapeQuotes) => escapeQuotes && typeof v === "string" ? v.replaceAll(`${quoteChar}`, `${quoteChar}${quoteChar}`) : /* v8 ignore next -- @preserve */ v;
2973
3605
  /**
2974
3606
  * Default value processor used by {@link formatQuery} for "natural_language" format.
2975
3607
  *
@@ -2988,7 +3620,7 @@ const defaultValueProcessorNL = (rule, opts = {}) => {
2988
3620
  quoteFieldNamesWith,
2989
3621
  fieldIdentifierSeparator
2990
3622
  });
2991
- const t = translations !== null && translations !== void 0 ? translations : ( /* istanbul ignore next */ {});
3623
+ const t = translations !== null && translations !== void 0 ? translations : /* v8 ignore start -- @preserve */ {};
2992
3624
  const orTL = (_t$or = t.or) !== null && _t$or !== void 0 ? _t$or : "or";
2993
3625
  const trueTL = (_t$true = t.true) !== null && _t$true !== void 0 ? _t$true : "true";
2994
3626
  const falseTL = (_t$false = t.false) !== null && _t$false !== void 0 ? _t$false : "false";
@@ -3000,7 +3632,8 @@ const defaultValueProcessorNL = (rule, opts = {}) => {
3000
3632
  if (!valueIsField) return defaultValueProcessorByRule(rule, opts);
3001
3633
  const valueAsArray = toArray(rule.value, { retainEmptyStrings: true }).slice(0, 2).map((v) => {
3002
3634
  var _getOption$label, _getOption, _ref;
3003
- return wrapFieldName((_getOption$label = (_getOption = getOption((_ref = fields) !== null && _ref !== void 0 ? _ref : [], v)) === null || _getOption === void 0 ? void 0 : _getOption.label) !== null && _getOption$label !== void 0 ? _getOption$label : v);
3635
+ return wrapFieldName((_getOption$label = (_getOption = getOption((_ref = fields) !== null && _ref !== void 0 ? _ref :
3636
+ /* v8 ignore start -- @preserve */ [], v)) === null || _getOption === void 0 ? void 0 : _getOption.label) !== null && _getOption$label !== void 0 ? _getOption$label : v);
3004
3637
  });
3005
3638
  if (valueAsArray.length < 2 || !isValidValue(valueAsArray[0]) || !isValidValue(valueAsArray[1])) return "";
3006
3639
  return defaultValueProcessorByRule(_objectSpread2(_objectSpread2({}, rule), {}, { value: valueAsArray }), opts);
@@ -3011,14 +3644,16 @@ const defaultValueProcessorNL = (rule, opts = {}) => {
3011
3644
  if (valueAsArray.length === 0) return "";
3012
3645
  const valStringArray = valueAsArray.map((v) => {
3013
3646
  var _getOption$label2, _getOption2, _ref2;
3014
- return valueIsField ? wrapFieldName((_getOption$label2 = (_getOption2 = getOption((_ref2 = fields) !== null && _ref2 !== void 0 ? _ref2 : [], v)) === null || _getOption2 === void 0 ? void 0 : _getOption2.label) !== null && _getOption$label2 !== void 0 ? _getOption$label2 : v) : shouldRenderAsNumber(v, parseNumbers) ? `${trimIfString(v)}` : `${wrapAndEscape(v)}`;
3647
+ return valueIsField ? wrapFieldName((_getOption$label2 = (_getOption2 = getOption((_ref2 = fields) !== null && _ref2 !== void 0 ? _ref2 :
3648
+ /* v8 ignore start -- @preserve */ [], v)) === null || _getOption2 === void 0 ? void 0 : _getOption2.label) !== null && _getOption$label2 !== void 0 ? _getOption$label2 : v) : shouldRenderAsNumber(v, parseNumbers) ? `${trimIfString(v)}` : `${wrapAndEscape(v)}`;
3015
3649
  });
3016
3650
  if (valStringArray.length === 1) return valStringArray[0];
3017
3651
  return `(${`${valStringArray.slice(0, -1).join(", ")}${valStringArray.length > 2 ? "," : ""} ${orTL} ${valStringArray.at(-1)}`})`;
3018
3652
  }
3019
3653
  }
3020
3654
  if (typeof rule.value === "boolean") return rule.value ? trueTL : falseTL;
3021
- return valueIsField ? wrapFieldName((_getOption$label3 = (_getOption3 = getOption((_ref3 = fields) !== null && _ref3 !== void 0 ? _ref3 : [], rule.value)) === null || _getOption3 === void 0 ? void 0 : _getOption3.label) !== null && _getOption$label3 !== void 0 ? _getOption$label3 : rule.value) : shouldRenderAsNumber(rule.value, parseNumbers) ? `${trimIfString(rule.value)}` : `${wrapAndEscape(rule.value)}`;
3655
+ return valueIsField ? wrapFieldName((_getOption$label3 = (_getOption3 = getOption((_ref3 = fields) !== null && _ref3 !== void 0 ? _ref3 :
3656
+ /* v8 ignore start -- @preserve */ [], rule.value)) === null || _getOption3 === void 0 ? void 0 : _getOption3.label) !== null && _getOption$label3 !== void 0 ? _getOption$label3 : rule.value) : shouldRenderAsNumber(rule.value, parseNumbers) ? `${trimIfString(rule.value)}` : `${wrapAndEscape(rule.value)}`;
3022
3657
  };
3023
3658
  //#endregion
3024
3659
  //#region src/utils/formatQuery/defaultRuleProcessorNL.ts
@@ -3047,7 +3682,7 @@ const defaultExportOperatorMap = {
3047
3682
  between: ["is between", "is between the values in"],
3048
3683
  notbetween: ["is not between", "is not between the values in"]
3049
3684
  };
3050
- /* istanbul ignore next */
3685
+ /* v8 ignore next -- @preserve */
3051
3686
  const defaultGetOperators = () => [];
3052
3687
  /**
3053
3688
  * Default operator processor used by {@link formatQuery} for "natural_language" format.
@@ -3057,7 +3692,7 @@ const defaultGetOperators = () => [];
3057
3692
  const defaultOperatorProcessorNL = (rule, opts = {}) => {
3058
3693
  var _getOption, _getOperators, _opts$fieldData, _ref, _operatorMap;
3059
3694
  const { field, operator, valueSource = "value" } = rule;
3060
- // istanbul ignore next
3695
+ // v8 ignore next
3061
3696
  const { getOperators = defaultGetOperators, operatorMap: operatorMapParam = defaultExportOperatorMap } = opts;
3062
3697
  const mergedOperatorMap = new Map(Object.entries(defaultExportOperatorMap));
3063
3698
  for (const [key, value] of Object.entries(operatorMapParam)) mergedOperatorMap.set(lc(key), value);
@@ -3071,7 +3706,7 @@ const defaultOperatorProcessorNL = (rule, opts = {}) => {
3071
3706
  name: field,
3072
3707
  value: field,
3073
3708
  label: field
3074
- } })) !== null && _getOperators !== void 0 ? _getOperators : []), normalizedOperator)) !== null && _getOption !== void 0 ? _getOption : {
3709
+ } })) !== null && _getOperators !== void 0 ? _getOperators : /* v8 ignore start -- @preserve */ []), normalizedOperator)) !== null && _getOption !== void 0 ? _getOption : {
3075
3710
  name: normalizedOperator,
3076
3711
  value: normalizedOperator,
3077
3712
  label: normalizedOperator
@@ -3087,8 +3722,8 @@ const defaultOperatorProcessorNL = (rule, opts = {}) => {
3087
3722
  const defaultRuleProcessorNL = (rule, opts) => {
3088
3723
  var _fieldData$label;
3089
3724
  const { field, operator } = rule;
3090
- // istanbul ignore next
3091
- const { fieldData, quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator = "", quoteValuesWith = `'`, operatorProcessor = defaultOperatorProcessorNL, valueProcessor = defaultValueProcessorNL, concatOperator = "||", wordOrder = "SVO" } = opts !== null && opts !== void 0 ? opts : ( /* istanbul ignore next */ {});
3725
+ // v8 ignore next
3726
+ const { fieldData, quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator = "", quoteValuesWith = `'`, operatorProcessor = defaultOperatorProcessorNL, valueProcessor = defaultValueProcessorNL, concatOperator = "||", wordOrder = "SVO" } = opts !== null && opts !== void 0 ? opts : /* v8 ignore start -- @preserve */ {};
3092
3727
  const processedField = getQuotedFieldName((_fieldData$label = fieldData === null || fieldData === void 0 ? void 0 : fieldData.label) !== null && _fieldData$label !== void 0 ? _fieldData$label : field, {
3093
3728
  quoteFieldNamesWith,
3094
3729
  fieldIdentifierSeparator
@@ -3187,7 +3822,7 @@ const defaultRuleProcessorSQL = (rule, opts = {}) => {
3187
3822
  * @group Export
3188
3823
  */
3189
3824
  const defaultRuleProcessorParameterized = (rule, opts, meta) => {
3190
- // istanbul ignore next
3825
+ // v8 ignore next
3191
3826
  const { fieldData, format, getNextNamedParam, parseNumbers, paramPrefix, paramsKeepPrefix, numberedParams, quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator, concatOperator, operatorProcessor = defaultOperatorProcessorSQL, valueProcessor = defaultValueProcessorByRule } = opts !== null && opts !== void 0 ? opts : {};
3192
3827
  const { processedParams = [] } = meta !== null && meta !== void 0 ? meta : {};
3193
3828
  const parameterized = format === "parameterized";
@@ -3206,13 +3841,13 @@ const defaultRuleProcessorParameterized = (rule, opts, meta) => {
3206
3841
  });
3207
3842
  const ruleField = wrapFieldName(rule.field);
3208
3843
  const matchEval = processMatchMode(rule);
3844
+ /* v8 ignore start -- @preserve */
3209
3845
  if (matchEval === false) return;
3210
3846
  else if (matchEval) {
3211
3847
  if ((opts === null || opts === void 0 ? void 0 : opts.preset) !== "postgresql") return finalize("");
3212
3848
  const { mode, threshold } = matchEval;
3213
3849
  const arrayElementAlias = "elem_alias";
3214
3850
  const { sql: nestedSQL, params: nestedParams } = defaultRuleGroupProcessorParameterized(transformQuery(rule.value, { ruleProcessor: (r) => _objectSpread2(_objectSpread2({}, r), {}, { field: arrayElementAlias }) }), _objectSpread2(_objectSpread2({}, opts), {}, { fields: [] }));
3215
- // istanbul ignore else
3216
3851
  if (Array.isArray(nestedParams)) params.push(...nestedParams);
3217
3852
  else Object.assign(paramsNamed, nestedParams);
3218
3853
  switch (mode) {
@@ -3227,6 +3862,7 @@ const defaultRuleProcessorParameterized = (rule, opts, meta) => {
3227
3862
  }
3228
3863
  }
3229
3864
  }
3865
+ /* v8 ignore stop -- @preserve */
3230
3866
  const value = valueProcessor(rule, {
3231
3867
  parseNumbers,
3232
3868
  quoteFieldNamesWith,
@@ -3267,7 +3903,7 @@ const defaultRuleProcessorParameterized = (rule, opts, meta) => {
3267
3903
  }
3268
3904
  let paramValue = rule.value;
3269
3905
  if (typeof rule.value === "string") if (shouldRenderAsNumber(rule.value, parseNumbers)) paramValue = parseNumber(rule.value, { parseNumbers });
3270
- else paramValue = /^'.*'$/g.test(value) ? value.replaceAll(/(^'|'$)/g, "") : value;
3906
+ else paramValue = /^'.*'$/g.test(value) ? value.replaceAll(/(^'|'$)/g, "") : /* v8 ignore next -- @preserve */ value;
3271
3907
  let paramName = "";
3272
3908
  if (parameterized) params.push(paramValue);
3273
3909
  else {
@@ -3286,9 +3922,9 @@ const processNumber = (value, fallback, parseNumbers) => shouldRenderAsNumber(va
3286
3922
  */
3287
3923
  const defaultRuleProcessorPrisma = (rule, options = {}) => {
3288
3924
  const { field, operator, value, valueSource } = rule;
3289
- // istanbul ignore next
3925
+ // v8 ignore next
3290
3926
  const { parseNumbers, preserveValueOrder } = options;
3291
- if (valueSource === "field" || processMatchMode(rule)) return;
3927
+ if (valueSource === "field" || processMatchMode(rule)) return void 0;
3292
3928
  const operatorLC = lc(operator);
3293
3929
  switch (operatorLC) {
3294
3930
  case "=": return { [field]: processNumber(value, value, parseNumbers) };
@@ -3346,13 +3982,16 @@ const defaultRuleProcessorPrisma = (rule, options = {}) => {
3346
3982
  */
3347
3983
  const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder, context = {} } = {}) => {
3348
3984
  const { sequelizeOperators: Op, sequelizeCol: col, sequelizeFn: fn } = context;
3349
- if (processMatchMode(rule)) return;
3985
+ if (processMatchMode(rule)) return void 0;
3350
3986
  const { field, operator, value, valueSource } = rule;
3351
3987
  const valueIsField = valueSource === "field";
3352
3988
  const operatorLC = lc(operator);
3353
3989
  if (!Op || valueIsField && (!col || !fn && [
3990
+ "contains",
3354
3991
  "doesnotcontain",
3992
+ "beginswith",
3355
3993
  "doesnotbeginwith",
3994
+ "endswith",
3356
3995
  "doesnotendwith"
3357
3996
  ].includes(operatorLC))) return;
3358
3997
  switch (operatorLC) {
@@ -3372,9 +4011,9 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
3372
4011
  }[operatorLC];
3373
4012
  return { [field]: valueIsField && operatorLC === "=" ? { [Op.col]: value } : { [sequelizeOperator]: valueIsField ? col(value) : shouldRenderAsNumber(value, parseNumbers) ? parseNumber(value, { parseNumbers: "strict" }) : value } };
3374
4013
  }
3375
- case "contains": return { [field]: { [Op.substring]: valueIsField ? col(value) : `${value}` } };
3376
- case "beginswith": return { [field]: { [Op.startsWith]: valueIsField ? col(value) : `${value}` } };
3377
- case "endswith": return { [field]: { [Op.endsWith]: valueIsField ? col(value) : `${value}` } };
4014
+ case "contains": return { [field]: { [valueIsField ? Op.like : Op.substring]: valueIsField ? fn("CONCAT", "%", col(value), "%") : `${value}` } };
4015
+ case "beginswith": return { [field]: { [valueIsField ? Op.like : Op.startsWith]: valueIsField ? fn("CONCAT", col(value), "%") : `${value}` } };
4016
+ case "endswith": return { [field]: { [valueIsField ? Op.like : Op.endsWith]: valueIsField ? fn("CONCAT", "%", col(value)) : `${value}` } };
3378
4017
  case "doesnotcontain": return { [field]: { [Op.notLike]: valueIsField ? fn("CONCAT", "%", col(value), "%") : `%${value}%` } };
3379
4018
  case "doesnotbeginwith": return { [field]: { [Op.notLike]: valueIsField ? fn("CONCAT", col(value), "%") : `${value}%` } };
3380
4019
  case "doesnotendwith": return { [field]: { [Op.notLike]: valueIsField ? fn("CONCAT", "%", col(value)) : `%${value}` } };
@@ -3404,6 +4043,69 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
3404
4043
  }
3405
4044
  };
3406
4045
  //#endregion
4046
+ //#region src/utils/formatQuery/defaultRuleProcessorSPARQL.ts
4047
+ const escapeDoubleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`);
4048
+ /**
4049
+ * Default rule processor used by {@link formatQuery} for "sparql" format.
4050
+ *
4051
+ * @group Export
4052
+ */
4053
+ const defaultRuleProcessorSPARQL = (rule, opts = {}) => {
4054
+ const { escapeQuotes, parseNumbers } = opts;
4055
+ const { field, operator, value, valueSource } = rule;
4056
+ const valueIsField = valueSource === "field";
4057
+ const operatorTL = operator.toLowerCase();
4058
+ const fmtVal = (v) => {
4059
+ var _JSON$stringify;
4060
+ if (v === null || v === void 0) return "\"\"";
4061
+ if (typeof v === "boolean") return `"${v}"^^xsd:boolean`;
4062
+ if (typeof v === "bigint") return String(v);
4063
+ if (valueIsField) return trimIfString(v);
4064
+ if (typeof v === "number" || shouldRenderAsNumber(v, parseNumbers)) return trimIfString(v);
4065
+ const s = typeof v === "string" ? v : (_JSON$stringify = JSON.stringify(v)) !== null && _JSON$stringify !== void 0 ? _JSON$stringify : "";
4066
+ if (s.startsWith("?") || s.startsWith("<") || s.includes(":")) return s;
4067
+ return `"${escapeDoubleQuotes(s, escapeQuotes)}"`;
4068
+ };
4069
+ switch (operatorTL) {
4070
+ case "=":
4071
+ case "!=":
4072
+ case "<":
4073
+ case ">":
4074
+ case "<=":
4075
+ case ">=": return `${field} ${operatorTL} ${fmtVal(value)}`;
4076
+ case "<>": return `${field} != ${fmtVal(value)}`;
4077
+ case "contains": return `CONTAINS(${field}, ${fmtVal(value)})`;
4078
+ case "doesnotcontain": return `!CONTAINS(${field}, ${fmtVal(value)})`;
4079
+ case "beginswith": return `STRSTARTS(${field}, ${fmtVal(value)})`;
4080
+ case "doesnotbeginwith": return `!STRSTARTS(${field}, ${fmtVal(value)})`;
4081
+ case "endswith": return `STRENDS(${field}, ${fmtVal(value)})`;
4082
+ case "doesnotendwith": return `!STRENDS(${field}, ${fmtVal(value)})`;
4083
+ case "null": return `!BOUND(${field})`;
4084
+ case "notnull": return `BOUND(${field})`;
4085
+ case "in": {
4086
+ const items = toArray(value).map(fmtVal);
4087
+ if (!items.length) return "";
4088
+ return items.map((item) => `${field} = ${item}`).join(" || ");
4089
+ }
4090
+ case "notin": {
4091
+ const items = toArray(value).map(fmtVal);
4092
+ if (!items.length) return "";
4093
+ return items.map((item) => `${field} != ${item}`).join(" && ");
4094
+ }
4095
+ case "between": {
4096
+ const arr = toArray(value);
4097
+ if (arr.length < 2) return "";
4098
+ return `${field} >= ${fmtVal(arr[0])} && ${field} <= ${fmtVal(arr[1])}`;
4099
+ }
4100
+ case "notbetween": {
4101
+ const arr = toArray(value);
4102
+ if (arr.length < 2) return "";
4103
+ return `(${field} < ${fmtVal(arr[0])} || ${field} > ${fmtVal(arr[1])})`;
4104
+ }
4105
+ default: return `${field} ${operator} ${fmtVal(value)}`;
4106
+ }
4107
+ };
4108
+ //#endregion
3407
4109
  //#region src/utils/formatQuery/formatQuery.ts
3408
4110
  /**
3409
4111
  * A collection of option presets for {@link formatQuery}, specifically for SQL-based formats.
@@ -3450,9 +4152,14 @@ const defaultRuleProcessors = {
3450
4152
  prisma: defaultRuleProcessorPrisma,
3451
4153
  sequelize: defaultRuleProcessorSequelize,
3452
4154
  spel: defaultRuleProcessorSpEL,
3453
- sql: defaultRuleProcessorSQL
4155
+ sql: defaultRuleProcessorSQL,
4156
+ cypher: defaultRuleProcessorCypher,
4157
+ gql: defaultRuleProcessorCypher,
4158
+ sparql: defaultRuleProcessorSPARQL,
4159
+ gremlin: defaultRuleProcessorGremlin,
4160
+ diagnostics: defaultRuleProcessorSQL
3454
4161
  };
3455
- /* istanbul ignore next */
4162
+ /* v8 ignore next -- @preserve */
3456
4163
  const defaultOperatorProcessor = (r) => r.operator;
3457
4164
  const defaultOperatorProcessors = {
3458
4165
  cel: defaultOperatorProcessor,
@@ -3471,13 +4178,20 @@ const defaultOperatorProcessors = {
3471
4178
  prisma: defaultOperatorProcessor,
3472
4179
  sequelize: defaultOperatorProcessor,
3473
4180
  spel: defaultOperatorProcessor,
3474
- sql: defaultOperatorProcessorSQL
4181
+ sql: defaultOperatorProcessorSQL,
4182
+ cypher: defaultOperatorProcessor,
4183
+ gql: defaultOperatorProcessor,
4184
+ sparql: defaultOperatorProcessor,
4185
+ gremlin: defaultOperatorProcessor,
4186
+ diagnostics: defaultOperatorProcessor
3475
4187
  };
3476
4188
  const defaultFallbackExpressions = {
3477
4189
  cel: "1 == 1",
3478
4190
  ldap: "",
3479
4191
  mongodb: "\"$and\":[{\"$expr\":true}]",
3480
4192
  natural_language: "1 is 1",
4193
+ sparql: "1 = 1",
4194
+ gremlin: "",
3481
4195
  spel: "1 == 1",
3482
4196
  sql: "(1 = 1)"
3483
4197
  };
@@ -3540,31 +4254,34 @@ function formatQuery(ruleGroup, optionParam = {}) {
3540
4254
  const fields = toFullOptionList(optObj.fields);
3541
4255
  const getOperators = (f, m) => {
3542
4256
  var _getOperators_option;
3543
- return toFullOptionList((_getOperators_option = getOperators_option(f, m)) !== null && _getOperators_option !== void 0 ? _getOperators_option : []);
4257
+ return toFullOptionList((_getOperators_option = getOperators_option(f, m)) !== null && _getOperators_option !== void 0 ? _getOperators_option :
4258
+ /* v8 ignore start -- @preserve */ []);
3544
4259
  };
3545
4260
  const fallbackExpression = (_ref4 = fallbackExpression_option !== null && fallbackExpression_option !== void 0 ? fallbackExpression_option : defaultFallbackExpressions[format]) !== null && _ref4 !== void 0 ? _ref4 : defaultFallbackExpressions.sql;
3546
4261
  let validationMap = {};
3547
- // istanbul ignore else
4262
+ // v8 ignore else
3548
4263
  if (typeof validator === "function") {
3549
4264
  const validationResult = validator(ruleGroup);
3550
4265
  if (typeof validationResult === "boolean") {
3551
- // istanbul ignore else
3552
- if (!validationResult) return format === "parameterized" ? {
3553
- sql: fallbackExpression,
3554
- params: []
3555
- } : format === "parameterized_named" ? {
3556
- sql: fallbackExpression,
3557
- params: {}
3558
- } : format === "mongodb" ? `{${fallbackExpression}}` : format === "mongodb_query" ? mongoDbFallback : format === "prisma" ? prismaFallback : format === "jsonlogic" ? false : format === "elasticsearch" ? {} : format === "drizzle" || format === "sequelize" ? void 0 : fallbackExpression;
4266
+ // v8 ignore else
4267
+ if (!validationResult) {
4268
+ if (format !== "diagnostics") return format === "parameterized" ? {
4269
+ sql: fallbackExpression,
4270
+ params: []
4271
+ } : format === "parameterized_named" ? {
4272
+ sql: fallbackExpression,
4273
+ params: {}
4274
+ } : format === "mongodb" ? `{${fallbackExpression}}` : format === "mongodb_query" ? mongoDbFallback : format === "prisma" ? prismaFallback : format === "jsonlogic" ? false : format === "elasticsearch" ? {} : format === "drizzle" || format === "sequelize" ? void 0 : fallbackExpression;
4275
+ }
3559
4276
  } else validationMap = validationResult;
3560
4277
  }
3561
4278
  const validatorMap = {};
3562
4279
  const uniqueFields = toFlatOptionArray(fields);
3563
4280
  for (const f of uniqueFields)
3564
- // istanbul ignore else
4281
+ // v8 ignore else
3565
4282
  if (typeof f.validator === "function") {
3566
4283
  var _f$value;
3567
- validatorMap[(_f$value = f.value) !== null && _f$value !== void 0 ? _f$value : f.name] = f.validator;
4284
+ validatorMap[(_f$value = f.value) !== null && _f$value !== void 0 ? _f$value : /* v8 ignore start -- @preserve */ f.name] = f.validator;
3568
4285
  }
3569
4286
  const validateRule = (rule) => {
3570
4287
  let validationResult;
@@ -3574,7 +4291,7 @@ function formatQuery(ruleGroup, optionParam = {}) {
3574
4291
  const fieldArr = uniqueFields.filter((f) => f.name === rule.field);
3575
4292
  if (fieldArr.length > 0) {
3576
4293
  const field = fieldArr[0];
3577
- // istanbul ignore else
4294
+ // v8 ignore else
3578
4295
  if (typeof field.validator === "function") fieldValidator = field.validator;
3579
4296
  }
3580
4297
  }
@@ -3617,6 +4334,11 @@ function formatQuery(ruleGroup, optionParam = {}) {
3617
4334
  case "prisma": return defaultRuleGroupProcessorPrisma(ruleGroup, finalOptions);
3618
4335
  case "drizzle": return defaultRuleGroupProcessorDrizzle(ruleGroup, finalOptions);
3619
4336
  case "sequelize": return defaultRuleGroupProcessorSequelize(ruleGroup, finalOptions);
4337
+ case "cypher":
4338
+ case "gql": return defaultRuleGroupProcessorCypher(ruleGroup, finalOptions);
4339
+ case "sparql": return defaultRuleGroupProcessorSPARQL(ruleGroup, finalOptions);
4340
+ case "gremlin": return defaultRuleGroupProcessorGremlin(ruleGroup, finalOptions);
4341
+ case "diagnostics": return defaultRuleGroupProcessorDiagnostics(ruleGroup, finalOptions);
3620
4342
  default: return "";
3621
4343
  }
3622
4344
  }
@@ -3767,6 +4489,7 @@ const generateAccessibleDescription = (params) => pathsAreEqual([], params.path)
3767
4489
  //#endregion
3768
4490
  //#region src/utils/generateID.ts
3769
4491
  const cryptoModule = globalThis.crypto;
4492
+ const uuidV4regex = /^[\da-f]{8}-[\da-f]{4}-4[\da-f]{3}-[89ab][\da-f]{3}-[\da-f]{12}$/i;
3770
4493
  /**
3771
4494
  * Default `id` generator. Generates a valid v4 UUID. Uses `crypto.randomUUID()`
3772
4495
  * when available, otherwise uses an alternate method based on `getRandomValues`.
@@ -3776,11 +4499,11 @@ const cryptoModule = globalThis.crypto;
3776
4499
  * ```
3777
4500
  * @returns Valid v4 UUID
3778
4501
  */
3779
- // istanbul ignore next
4502
+ // v8 ignore next
3780
4503
  let generateID = () => "00-0-4-2-000".replaceAll(/[^-]/g, (s) => ((Math.random() + Math.trunc(s)) * 65536 >> Number.parseInt(s)).toString(16).padStart(4, "0"));
3781
- // istanbul ignore else
4504
+ // v8 ignore else
3782
4505
  if (cryptoModule) {
3783
- // istanbul ignore else
4506
+ // v8 ignore else
3784
4507
  if (typeof cryptoModule.randomUUID === "function") generateID = () => cryptoModule.randomUUID();
3785
4508
  else if (typeof cryptoModule.getRandomValues === "function") {
3786
4509
  const position19vals = "89ab";
@@ -3814,7 +4537,7 @@ const dummyFD$1 = {
3814
4537
  */
3815
4538
  const getMatchModesUtil = (fieldData, getMatchModes) => {
3816
4539
  var _fd$matchModes, _matchModes$map;
3817
- const fd = fieldData ? toFullOption(fieldData) : dummyFD$1;
4540
+ const fd = fieldData ? toFullOption(fieldData) : /* v8 ignore next -- @preserve */ dummyFD$1;
3818
4541
  let matchModes = (_fd$matchModes = fd.matchModes) !== null && _fd$matchModes !== void 0 ? _fd$matchModes : false;
3819
4542
  if (!matchModes && getMatchModes) matchModes = getMatchModes(fd.value, { fieldData: fd });
3820
4543
  if (matchModes === true) return defaultMatchModes;
@@ -3883,7 +4606,7 @@ const getValueSourcesUtil = (fieldData, operator, getValueSources) => {
3883
4606
  const mergeAnyTranslations = (base, ...otherTranslations) => {
3884
4607
  const result = _objectSpread2({}, base);
3885
4608
  for (const translations of otherTranslations)
3886
- // istanbul ignore else
4609
+ // v8 ignore else
3887
4610
  if (translations) for (const key of objectKeys(translations)) {
3888
4611
  if (isUnsafeKey(key)) continue;
3889
4612
  if (result[key]) result[key] = _objectSpread2(_objectSpread2({}, result[key]), translations[key]);
@@ -3945,6 +4668,8 @@ const mergeClassnames = (...args) => ({
3945
4668
  dndCopy: joinClassnamesByName("dndCopy", args),
3946
4669
  dndGroup: joinClassnamesByName("dndGroup", args),
3947
4670
  dndDropNotAllowed: joinClassnamesByName("dndDropNotAllowed", args),
4671
+ dndPreviewPosition: joinClassnamesByName("dndPreviewPosition", args),
4672
+ dndHidden: joinClassnamesByName("dndHidden", args),
3948
4673
  disabled: joinClassnamesByName("disabled", args),
3949
4674
  valueListItem: joinClassnamesByName("valueListItem", args),
3950
4675
  matchMode: joinClassnamesByName("matchMode", args),
@@ -4023,7 +4748,7 @@ const regenerateIDs = (subject, { idGenerator = generateID } = {}) => {
4023
4748
  if (!isPojo(subject)) return subject;
4024
4749
  if (!isRuleGroup(subject)) return structuredClone(_objectSpread2(_objectSpread2({}, subject), {}, { id: idGenerator() }));
4025
4750
  const newGroup = _objectSpread2(_objectSpread2({}, subject), {}, { id: idGenerator() });
4026
- // istanbul ignore else
4751
+ // v8 ignore else
4027
4752
  if (Array.isArray(newGroup.rules)) newGroup.rules = subject.rules.map((r) => typeof r === "string" ? r : isRuleGroup(r) ? regenerateIDs(r, { idGenerator }) : regenerateID(r, { idGenerator }));
4028
4753
  return newGroup;
4029
4754
  };
@@ -4332,6 +5057,6 @@ const groupInPlace = (query, sourcePathOrID, targetPathOrID, options = {}) => {
4332
5057
  return query;
4333
5058
  };
4334
5059
  //#endregion
4335
- export { LogType, TestID, add, addInPlace, bigIntJsonParseReviver, bigIntJsonStringifyReplacer, celCombinatorMap, clsx, convertFromIC, convertQuery, convertToIC, defaultCELValueProcessor, defaultCombinatorLabelMap, defaultCombinators, defaultCombinatorsExtended, defaultControlClassnames, defaultExportOperatorMap, defaultJoinChar, defaultMatchModes, defaultMongoDBValueProcessor, defaultNLTranslations, defaultOperatorLabelMap, defaultOperatorNegationMap, defaultOperatorProcessorNL, defaultOperatorProcessorSQL, defaultOperators, defaultPlaceholderFieldGroupLabel, defaultPlaceholderFieldLabel, defaultPlaceholderFieldName, defaultPlaceholderLabel, defaultPlaceholderName, defaultPlaceholderOperatorGroupLabel, defaultPlaceholderOperatorLabel, defaultPlaceholderOperatorName, defaultPlaceholderValueGroupLabel, defaultPlaceholderValueLabel, defaultPlaceholderValueName, defaultRuleGroupProcessorCEL, defaultRuleGroupProcessorDrizzle, defaultRuleGroupProcessorElasticSearch, defaultRuleGroupProcessorJSONata, defaultRuleGroupProcessorJsonLogic, defaultRuleGroupProcessorLDAP, defaultRuleGroupProcessorMongoDB, defaultRuleGroupProcessorMongoDBQuery, defaultRuleGroupProcessorNL, defaultRuleGroupProcessorParameterized, defaultRuleGroupProcessorPrisma, defaultRuleGroupProcessorSQL, defaultRuleGroupProcessorSequelize, defaultRuleGroupProcessorSpEL, defaultRuleProcessorCEL, defaultRuleProcessorDrizzle, defaultRuleProcessorElasticSearch, defaultRuleProcessorJSONata, defaultRuleProcessorJsonLogic, defaultRuleProcessorLDAP, defaultRuleProcessorMongoDB, defaultRuleProcessorMongoDBQuery, defaultRuleProcessorNL, defaultRuleProcessorParameterized, defaultRuleProcessorPrisma, defaultRuleProcessorSQL, defaultRuleProcessorSequelize, defaultRuleProcessorSpEL, defaultSpELValueProcessor, defaultTranslations, defaultValidator, defaultValueProcessor, defaultValueProcessorByRule, defaultValueProcessorCELByRule, defaultValueProcessorMongoDBByRule, defaultValueProcessorNL, defaultValueProcessorSpELByRule, filterFieldsByComparator, findID, findPath, formatQuery, formatQueryOptionPresets, generateAccessibleDescription, generateID, getCommonAncestorPath, getFirstOption, getMatchModesUtil, getNLTranslataion, getOption, getParentPath, getParseNumberMethod, getPathOfID, getQuoteFieldNamesWithArray, getQuotedFieldName, getValidationClassNames, getValueSourcesUtil, group, groupInPlace, groupInvalidReasons, insert, insertInPlace, isAncestor, isFlexibleOptionArray, isFlexibleOptionGroupArray, isFullOptionArray, isFullOptionGroupArray, isOptionGroupArray, isPojo, isRuleGroup, isRuleGroupType, isRuleGroupTypeIC, isRuleOrGroupValid, isRuleType, isUnsafeKey, isValidValue, isValidationResult, isValueProcessorLegacy, joinWith, jsonLogicAdditionalOperators, lc, mapSQLOperator, mergeAnyTranslation, mergeAnyTranslations, mergeClassnames, mongoDbFallback, mongoOperators, move, moveInPlace, normalizeConstituentWordOrder, nullFreeArray, nullOrUndefinedOrEmpty, numericRegex, numerifyValues, objectEntries, objectKeys, parseNumber, pathIsDisabled, pathsAreEqual, preferAnyProp, preferFlagProps, preferProp, prepareOptionList, prepareRule, prepareRuleGroup, prepareRuleOrGroup, prismaFallback, prismaOperators, processMatchMode, queryBuilderFlagDefaults, regenerateID, regenerateIDs, remove, removeInPlace, rootPath, shouldRenderAsNumber, splitBy, sqlDialectPresets, standardClassnames, toArray, toFlatOptionArray, toFullOption, toFullOptionList, toFullOptionMap, transformQuery, trimIfString, uniqByIdentifier, uniqByName, uniqOptGroups, uniqOptList, update, updateInPlace };
5060
+ export { LogType, TestID, add, addInPlace, bigIntJsonParseReviver, bigIntJsonStringifyReplacer, celCombinatorMap, clsx, convertFromIC, convertQuery, convertToIC, cypherCombinatorMap, defaultCELValueProcessor, defaultCombinatorLabelMap, defaultCombinators, defaultCombinatorsExtended, defaultControlClassnames, defaultExportOperatorMap, defaultJoinChar, defaultMatchModes, defaultMongoDBValueProcessor, defaultNLTranslations, defaultOperatorLabelMap, defaultOperatorNegationMap, defaultOperatorProcessorNL, defaultOperatorProcessorSQL, defaultOperators, defaultPlaceholderFieldGroupLabel, defaultPlaceholderFieldLabel, defaultPlaceholderFieldName, defaultPlaceholderLabel, defaultPlaceholderName, defaultPlaceholderOperatorGroupLabel, defaultPlaceholderOperatorLabel, defaultPlaceholderOperatorName, defaultPlaceholderValueGroupLabel, defaultPlaceholderValueLabel, defaultPlaceholderValueName, defaultRuleGroupProcessorCEL, defaultRuleGroupProcessorCypher, defaultRuleGroupProcessorDiagnostics, defaultRuleGroupProcessorDrizzle, defaultRuleGroupProcessorElasticSearch, defaultRuleGroupProcessorGremlin, defaultRuleGroupProcessorJSONata, defaultRuleGroupProcessorJsonLogic, defaultRuleGroupProcessorLDAP, defaultRuleGroupProcessorMongoDB, defaultRuleGroupProcessorMongoDBQuery, defaultRuleGroupProcessorNL, defaultRuleGroupProcessorParameterized, defaultRuleGroupProcessorPrisma, defaultRuleGroupProcessorSPARQL, defaultRuleGroupProcessorSQL, defaultRuleGroupProcessorSequelize, defaultRuleGroupProcessorSpEL, defaultRuleProcessorCEL, defaultRuleProcessorCypher, defaultRuleProcessorDrizzle, defaultRuleProcessorElasticSearch, defaultRuleProcessorGremlin, defaultRuleProcessorJSONata, defaultRuleProcessorJsonLogic, defaultRuleProcessorLDAP, defaultRuleProcessorMongoDB, defaultRuleProcessorMongoDBQuery, defaultRuleProcessorNL, defaultRuleProcessorParameterized, defaultRuleProcessorPrisma, defaultRuleProcessorSPARQL, defaultRuleProcessorSQL, defaultRuleProcessorSequelize, defaultRuleProcessorSpEL, defaultSpELValueProcessor, defaultTranslations, defaultValidator, defaultValueProcessor, defaultValueProcessorByRule, defaultValueProcessorCELByRule, defaultValueProcessorMongoDBByRule, defaultValueProcessorNL, defaultValueProcessorSpELByRule, filterFieldsByComparator, findID, findPath, formatQuery, formatQueryOptionPresets, generateAccessibleDescription, generateID, getCommonAncestorPath, getFirstOption, getMatchModesUtil, getNLTranslataion, getOption, getParentPath, getParseNumberMethod, getPathOfID, getQuoteFieldNamesWithArray, getQuotedFieldName, getValidationClassNames, getValueSourcesUtil, group, groupInPlace, groupInvalidReasons, insert, insertInPlace, isAncestor, isFlexibleOptionArray, isFlexibleOptionGroupArray, isFullOptionArray, isFullOptionGroupArray, isOptionGroupArray, isPojo, isRuleGroup, isRuleGroupType, isRuleGroupTypeIC, isRuleOrGroupValid, isRuleType, isUnsafeKey, isValidValue, isValidationResult, isValueProcessorLegacy, joinWith, jsonLogicAdditionalOperators, lc, mapSQLOperator, mergeAnyTranslation, mergeAnyTranslations, mergeClassnames, mongoDbFallback, mongoOperators, move, moveInPlace, normalizeConstituentWordOrder, nullFreeArray, nullOrUndefinedOrEmpty, numericRegex, numerifyValues, objectEntries, objectKeys, parseNumber, pathIsDisabled, pathsAreEqual, preferAnyProp, preferFlagProps, preferProp, prepareOptionList, prepareRule, prepareRuleGroup, prepareRuleOrGroup, prismaFallback, prismaOperators, processMatchMode, queryBuilderFlagDefaults, regenerateID, regenerateIDs, remove, removeInPlace, rootPath, shouldRenderAsNumber, splitBy, sqlDialectPresets, standardClassnames, toArray, toFlatOptionArray, toFullOption, toFullOptionList, toFullOptionMap, transformQuery, trimIfString, uniqByIdentifier, uniqByName, uniqOptGroups, uniqOptList, update, updateInPlace, uuidV4regex };
4336
5061
 
4337
5062
  //# sourceMappingURL=react-querybuilder_core.legacy-esm.js.map