@react-querybuilder/core 8.9.1 → 8.10.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 (106) hide show
  1. package/dist/arrayUtils-C9sO4qLO.mjs +50 -0
  2. package/dist/arrayUtils-C9sO4qLO.mjs.map +1 -0
  3. package/dist/arrayUtils-QxZOZTf6.js +73 -0
  4. package/dist/arrayUtils-QxZOZTf6.js.map +1 -0
  5. package/dist/basic-BmpEwexQ.d.mts +363 -0
  6. package/dist/basic-CDDA-KZa.d.ts +363 -0
  7. package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +569 -1252
  8. package/dist/cjs/react-querybuilder_core.cjs.development.js +430 -140
  9. package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
  10. package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +569 -1252
  11. package/dist/cjs/react-querybuilder_core.cjs.production.js +1 -1
  12. package/dist/cjs/react-querybuilder_core.cjs.production.js.map +1 -1
  13. package/dist/convertQuery-BUgyz1GA.mjs +75 -0
  14. package/dist/convertQuery-BUgyz1GA.mjs.map +1 -0
  15. package/dist/export-Ccjfea21.d.mts +453 -0
  16. package/dist/{export-DyrnTh6K.d.ts → export-GUuxJ7zR.d.ts} +3 -2
  17. package/dist/formatQuery.d.mts +668 -0
  18. package/dist/formatQuery.d.ts +3 -2
  19. package/dist/formatQuery.js +217 -87
  20. package/dist/formatQuery.js.map +1 -1
  21. package/dist/formatQuery.mjs +2496 -0
  22. package/dist/formatQuery.mjs.map +1 -0
  23. package/dist/{import-Cksobmln.d.ts → import-D-hm1phN.d.ts} +2 -2
  24. package/dist/import-Dxevzw_-.d.mts +28 -0
  25. package/dist/isRuleGroup-CGe_rb2w.mjs +40 -0
  26. package/dist/isRuleGroup-CGe_rb2w.mjs.map +1 -0
  27. package/dist/isRuleGroup-DqAs2x4E.js.map +1 -1
  28. package/dist/{optGroupUtils-CXLgyg2i.js → optGroupUtils-B0hTpodo.js} +114 -1
  29. package/dist/optGroupUtils-B0hTpodo.js.map +1 -0
  30. package/dist/optGroupUtils-DrubUpx0.mjs +185 -0
  31. package/dist/optGroupUtils-DrubUpx0.mjs.map +1 -0
  32. package/dist/parseCEL.d.mts +315 -0
  33. package/dist/parseCEL.d.ts +292 -11
  34. package/dist/parseCEL.js +114 -30
  35. package/dist/parseCEL.js.map +1 -1
  36. package/dist/parseCEL.mjs +2631 -0
  37. package/dist/parseCEL.mjs.map +1 -0
  38. package/dist/parseJSONata.d.mts +37 -0
  39. package/dist/parseJSONata.d.ts +3 -2
  40. package/dist/parseJSONata.js +49 -77
  41. package/dist/parseJSONata.js.map +1 -1
  42. package/dist/parseJSONata.mjs +267 -0
  43. package/dist/parseJSONata.mjs.map +1 -0
  44. package/dist/parseJsonLogic.d.mts +37 -0
  45. package/dist/parseJsonLogic.d.ts +4 -3
  46. package/dist/parseJsonLogic.js +5 -6
  47. package/dist/parseJsonLogic.js.map +1 -1
  48. package/dist/parseJsonLogic.mjs +190 -0
  49. package/dist/parseJsonLogic.mjs.map +1 -0
  50. package/dist/parseMongoDB.d.mts +80 -0
  51. package/dist/parseMongoDB.d.ts +3 -2
  52. package/dist/parseMongoDB.js +15 -16
  53. package/dist/parseMongoDB.js.map +1 -1
  54. package/dist/parseMongoDB.mjs +266 -0
  55. package/dist/parseMongoDB.mjs.map +1 -0
  56. package/dist/parseNumber-B_-sR6d5.mjs +24 -0
  57. package/dist/parseNumber-B_-sR6d5.mjs.map +1 -0
  58. package/dist/{parseNumber-Bcys1kOH.js → parseNumber-D4iQDxK-.js} +1 -1
  59. package/dist/{parseNumber-Bcys1kOH.js.map → parseNumber-D4iQDxK-.js.map} +1 -1
  60. package/dist/parseSQL.d.mts +38 -0
  61. package/dist/parseSQL.d.ts +3 -2
  62. package/dist/parseSQL.js +11 -15
  63. package/dist/parseSQL.js.map +1 -1
  64. package/dist/parseSQL.mjs +6622 -0
  65. package/dist/parseSQL.mjs.map +1 -0
  66. package/dist/parseSpEL.d.mts +35 -0
  67. package/dist/parseSpEL.d.ts +3 -2
  68. package/dist/parseSpEL.js +7 -9
  69. package/dist/parseSpEL.js.map +1 -1
  70. package/dist/parseSpEL.mjs +272 -0
  71. package/dist/parseSpEL.mjs.map +1 -0
  72. package/dist/{prepareQueryObjects-BqFEs4eV.js → prepareQueryObjects-BOUWfel5.js} +4 -5
  73. package/dist/prepareQueryObjects-BOUWfel5.js.map +1 -0
  74. package/dist/prepareQueryObjects-CJNpnGcJ.mjs +153 -0
  75. package/dist/prepareQueryObjects-CJNpnGcJ.mjs.map +1 -0
  76. package/dist/query-builder-layout.css +1 -1
  77. package/dist/query-builder-layout.css.map +1 -1
  78. package/dist/query-builder.css +1 -1
  79. package/dist/query-builder.css.map +1 -1
  80. package/dist/react-querybuilder_core.d.mts +569 -1252
  81. package/dist/react-querybuilder_core.legacy-esm.d.ts +569 -1252
  82. package/dist/react-querybuilder_core.legacy-esm.js +430 -136
  83. package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
  84. package/dist/react-querybuilder_core.mjs +426 -141
  85. package/dist/react-querybuilder_core.mjs.map +1 -1
  86. package/dist/react-querybuilder_core.production.d.mts +569 -1252
  87. package/dist/react-querybuilder_core.production.mjs +1 -1
  88. package/dist/react-querybuilder_core.production.mjs.map +1 -1
  89. package/dist/styles/_layout.scss +61 -17
  90. package/dist/styles/_main.scss +17 -4
  91. package/dist/{transformQuery-FL_nlpp5.js → transformQuery-CWDPogO5.js} +1 -1
  92. package/dist/{transformQuery-FL_nlpp5.js.map → transformQuery-CWDPogO5.js.map} +1 -1
  93. package/dist/transformQuery-DHvtgDgZ.mjs +41 -0
  94. package/dist/transformQuery-DHvtgDgZ.mjs.map +1 -0
  95. package/dist/transformQuery.d.mts +118 -0
  96. package/dist/transformQuery.d.ts +1 -1
  97. package/dist/transformQuery.js +1 -1
  98. package/dist/transformQuery.mjs +4 -0
  99. package/package.json +78 -28
  100. package/dist/arrayUtils-D5EoIsKP.js +0 -164
  101. package/dist/arrayUtils-D5EoIsKP.js.map +0 -1
  102. package/dist/basic-C8xXKHIA.d.ts +0 -1235
  103. package/dist/objectUtils-BBZSfZJz.js +0 -17
  104. package/dist/objectUtils-BBZSfZJz.js.map +0 -1
  105. package/dist/optGroupUtils-CXLgyg2i.js.map +0 -1
  106. package/dist/prepareQueryObjects-BqFEs4eV.js.map +0 -1
@@ -1,8 +1,8 @@
1
1
  const require_isRuleGroup = require('./isRuleGroup-DqAs2x4E.js');
2
- const require_arrayUtils = require('./arrayUtils-D5EoIsKP.js');
3
- const require_parseNumber = require('./parseNumber-Bcys1kOH.js');
4
- const require_transformQuery = require('./transformQuery-FL_nlpp5.js');
5
- const require_optGroupUtils = require('./optGroupUtils-CXLgyg2i.js');
2
+ const require_optGroupUtils = require('./optGroupUtils-B0hTpodo.js');
3
+ const require_arrayUtils = require('./arrayUtils-QxZOZTf6.js');
4
+ const require_parseNumber = require('./parseNumber-D4iQDxK-.js');
5
+ const require_transformQuery = require('./transformQuery-CWDPogO5.js');
6
6
  const require_convertQuery = require('./convertQuery-DAqoID3O.js');
7
7
  let immer = require("immer");
8
8
  immer = require_isRuleGroup.__toESM(immer);
@@ -14,9 +14,11 @@ immer = require_isRuleGroup.__toESM(immer);
14
14
  const isValidationResult = (vr) => require_isRuleGroup.isPojo(vr) && typeof vr.valid === "boolean";
15
15
  /**
16
16
  * Determines if a rule or group is valid based on a validation result (if defined)
17
- * or a validator function. Returns `true` if neither are defined.
17
+ * or a validator function. Returns `true` if neither are defined and the `muted`
18
+ * property is not `true`.
18
19
  */
19
20
  const isRuleOrGroupValid = (rg, validationResult, validator) => {
21
+ if (rg.muted) return false;
20
22
  if (typeof validationResult === "boolean") return validationResult;
21
23
  if (isValidationResult(validationResult)) return validationResult.valid;
22
24
  if (typeof validator === "function" && !require_isRuleGroup.isRuleGroup(rg)) {
@@ -290,19 +292,45 @@ const defaultRuleGroupProcessorCEL = (ruleGroup, options) => {
290
292
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
291
293
  const processRuleGroup = (rg, outermost) => {
292
294
  if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermost ? fallbackExpression : "";
293
- const expression = rg.rules.map((rule) => {
294
- if (typeof rule === "string") return celCombinatorMap[rule];
295
- if (require_isRuleGroup.isRuleGroup(rule)) return processRuleGroup(rule);
295
+ const processedRules = [];
296
+ let precedingCombinator = "";
297
+ let firstRule = true;
298
+ for (const rule of rg.rules) {
299
+ if (typeof rule === "string") {
300
+ precedingCombinator = celCombinatorMap[rule];
301
+ continue;
302
+ }
303
+ if (require_isRuleGroup.isRuleGroup(rule)) {
304
+ const processedGroup = processRuleGroup(rule);
305
+ if (processedGroup) {
306
+ if (!firstRule && precedingCombinator) {
307
+ processedRules.push(precedingCombinator);
308
+ precedingCombinator = "";
309
+ }
310
+ firstRule = false;
311
+ processedRules.push(processedGroup);
312
+ }
313
+ continue;
314
+ }
296
315
  const [validationResult, fieldValidator] = validateRule(rule);
297
- if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return "";
316
+ if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
298
317
  const fieldData = require_optGroupUtils.getOption(fields, rule.field);
299
- return ruleProcessor(rule, {
318
+ const processedRule = ruleProcessor(rule, {
300
319
  ...options,
301
320
  parseNumbers: getParseNumberBoolean(fieldData?.inputType),
302
321
  escapeQuotes: (rule.valueSource ?? "value") === "value",
303
322
  fieldData
304
323
  });
305
- }).filter(Boolean).join(require_isRuleGroup.isRuleGroupType(rg) ? ` ${celCombinatorMap[rg.combinator]} ` : " ");
324
+ if (processedRule) {
325
+ if (!firstRule && precedingCombinator) {
326
+ processedRules.push(precedingCombinator);
327
+ precedingCombinator = "";
328
+ }
329
+ firstRule = false;
330
+ processedRules.push(processedRule);
331
+ }
332
+ }
333
+ const expression = processedRules.join(require_isRuleGroup.isRuleGroupType(rg) ? ` ${celCombinatorMap[rg.combinator]} ` : " ");
306
334
  const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "!" : ""}(`, ")"] : ["", ""];
307
335
  return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
308
336
  };
@@ -329,11 +357,10 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
329
357
  else if (matchEval) {
330
358
  const { mode, threshold } = matchEval;
331
359
  const arrayElementAlias = "elem_alias";
332
- const celQuery = require_transformQuery.transformQuery(rule.value, { ruleProcessor: (r) => ({
360
+ const nestedArrayFilter = defaultRuleGroupProcessorCEL(require_transformQuery.transformQuery(rule.value, { ruleProcessor: (r) => ({
333
361
  ...r,
334
362
  field: `${arrayElementAlias}${r.field ? `.${r.field}` : ""}`
335
- }) });
336
- const nestedArrayFilter = defaultRuleGroupProcessorCEL(celQuery, opts);
363
+ }) }), opts);
337
364
  switch (mode) {
338
365
  case "all": return `${field}.all(${arrayElementAlias}, ${nestedArrayFilter})`;
339
366
  case "none":
@@ -367,8 +394,7 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
367
394
  case "in":
368
395
  case "notin": {
369
396
  const [prefix, suffix] = shouldNegate$2(operatorTL) ? ["!(", ")"] : ["", ""];
370
- const valueAsArray = require_arrayUtils.toArray(value);
371
- return `${prefix}${field} in [${valueAsArray.map((val) => valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${require_arrayUtils.trimIfString(val)}` : `"${escapeDoubleQuotes(val, escapeQuotes)}"`).join(", ")}]${suffix}`;
397
+ return `${prefix}${field} in [${require_arrayUtils.toArray(value).map((val) => valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${require_arrayUtils.trimIfString(val)}` : `"${escapeDoubleQuotes(val, escapeQuotes)}"`).join(", ")}]${suffix}`;
372
398
  }
373
399
  case "between":
374
400
  case "notbetween": {
@@ -588,19 +614,45 @@ const defaultRuleGroupProcessorSpEL = (ruleGroup, options) => {
588
614
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
589
615
  const processRuleGroup = (rg, outermost) => {
590
616
  if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermost ? fallbackExpression : "";
591
- const expression = rg.rules.map((rule) => {
592
- if (typeof rule === "string") return rule;
593
- if (require_isRuleGroup.isRuleGroup(rule)) return processRuleGroup(rule);
617
+ const processedRules = [];
618
+ let precedingCombinator = "";
619
+ let firstRule = true;
620
+ for (const rule of rg.rules) {
621
+ if (typeof rule === "string") {
622
+ precedingCombinator = rule;
623
+ continue;
624
+ }
625
+ if (require_isRuleGroup.isRuleGroup(rule)) {
626
+ const processedGroup = processRuleGroup(rule);
627
+ if (processedGroup) {
628
+ if (!firstRule && precedingCombinator) {
629
+ processedRules.push(precedingCombinator);
630
+ precedingCombinator = "";
631
+ }
632
+ firstRule = false;
633
+ processedRules.push(processedGroup);
634
+ }
635
+ continue;
636
+ }
594
637
  const [validationResult, fieldValidator] = validateRule(rule);
595
- if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return "";
638
+ if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
596
639
  const fieldData = require_optGroupUtils.getOption(fields, rule.field);
597
- return ruleProcessor(rule, {
640
+ const processedRule = ruleProcessor(rule, {
598
641
  ...options,
599
642
  parseNumbers: getParseNumberBoolean(fieldData?.inputType),
600
643
  escapeQuotes: (rule.valueSource ?? "value") === "value",
601
644
  fieldData
602
645
  });
603
- }).filter(Boolean).join(require_isRuleGroup.isRuleGroupType(rg) ? ` ${rg.combinator} ` : " ");
646
+ if (processedRule) {
647
+ if (!firstRule && precedingCombinator) {
648
+ processedRules.push(precedingCombinator);
649
+ precedingCombinator = "";
650
+ }
651
+ firstRule = false;
652
+ processedRules.push(processedRule);
653
+ }
654
+ }
655
+ const expression = processedRules.join(require_isRuleGroup.isRuleGroupType(rg) ? ` ${rg.combinator} ` : " ");
604
656
  const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "!" : ""}(`, ")"] : ["", ""];
605
657
  return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
606
658
  };
@@ -656,15 +708,9 @@ const defaultRuleProcessorSpEL = (rule, opts = {}) => {
656
708
  case "contains":
657
709
  case "doesnotcontain": return wrapInNegation(`${field} matches ${valueIsField || useBareValue ? require_arrayUtils.trimIfString(value) : `'${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
658
710
  case "beginswith":
659
- case "doesnotbeginwith": {
660
- const valueTL = valueIsField ? `'^'.concat(${require_arrayUtils.trimIfString(value)})` : `'${typeof value === "string" && !value.startsWith("^") || useBareValue ? "^" : ""}${escapeSingleQuotes(value, escapeQuotes)}'`;
661
- return wrapInNegation(`${field} matches ${valueTL}`, shouldNegate$1(operatorTL));
662
- }
711
+ case "doesnotbeginwith": return wrapInNegation(`${field} matches ${valueIsField ? `'^'.concat(${require_arrayUtils.trimIfString(value)})` : `'${typeof value === "string" && !value.startsWith("^") || useBareValue ? "^" : ""}${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
663
712
  case "endswith":
664
- case "doesnotendwith": {
665
- const valueTL = valueIsField ? `${require_arrayUtils.trimIfString(value)}.concat('$')` : `'${escapeSingleQuotes(value, escapeQuotes)}${typeof value === "string" && !value.endsWith("$") || useBareValue ? "$" : ""}'`;
666
- return wrapInNegation(`${field} matches ${valueTL}`, shouldNegate$1(operatorTL));
667
- }
713
+ case "doesnotendwith": return wrapInNegation(`${field} matches ${valueIsField ? `${require_arrayUtils.trimIfString(value)}.concat('$')` : `'${escapeSingleQuotes(value, escapeQuotes)}${typeof value === "string" && !value.endsWith("$") || useBareValue ? "$" : ""}'`}`, shouldNegate$1(operatorTL));
668
714
  case "null": return `${field} == null`;
669
715
  case "notnull": return `${field} != null`;
670
716
  case "in":
@@ -777,11 +823,10 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
777
823
  if (opts.preset !== "postgresql") return;
778
824
  const { mode, threshold } = matchEval;
779
825
  const arrayElementAlias = "elem_alias";
780
- const sqlQuery = require_transformQuery.transformQuery(rule.value, { ruleProcessor: (r) => ({
826
+ const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(require_transformQuery.transformQuery(rule.value, { ruleProcessor: (r) => ({
781
827
  ...r,
782
828
  field: arrayElementAlias
783
- }) });
784
- const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(sqlQuery, {
829
+ }) }), {
785
830
  ...opts,
786
831
  context: {
787
832
  ...opts.context,
@@ -867,7 +912,6 @@ const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns
867
912
  const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap } = options;
868
913
  if (!columns || !drizzleOperators) return;
869
914
  const { and, not, or } = drizzleOperators;
870
- const query = require_isRuleGroup.isRuleGroupType(ruleGroup) ? ruleGroup : require_convertQuery.convertFromIC(ruleGroup);
871
915
  const ruleProcessor = defaultRuleProcessorDrizzle;
872
916
  const processRuleGroup = (rg, _outermost) => {
873
917
  if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return;
@@ -891,7 +935,7 @@ const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns
891
935
  const ruleGroupSQL = rg.combinator === "or" ? or(...processedRules) : and(...processedRules);
892
936
  return rg.not ? not(ruleGroupSQL) : ruleGroupSQL;
893
937
  };
894
- return processRuleGroup(query, true);
938
+ return processRuleGroup(require_convertQuery.convertFromIC(ruleGroup), true);
895
939
  };
896
940
 
897
941
  //#endregion
@@ -903,7 +947,6 @@ const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns
903
947
  */
904
948
  const defaultRuleGroupProcessorElasticSearch = (ruleGroup, options) => {
905
949
  const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
906
- const query = require_convertQuery.convertFromIC(ruleGroup);
907
950
  const processRuleGroup = (rg) => {
908
951
  if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return false;
909
952
  const processedRules = rg.rules.map((rule) => {
@@ -920,7 +963,7 @@ const defaultRuleGroupProcessorElasticSearch = (ruleGroup, options) => {
920
963
  if (processedRules.length === 0) return false;
921
964
  return { bool: rg.not ? { must_not: /^or$/i.test(rg.combinator) ? { bool: { should: processedRules } } : processedRules } : { [/^or$/i.test(rg.combinator) ? "should" : "must"]: processedRules } };
922
965
  };
923
- const processedRuleGroup = processRuleGroup(query);
966
+ const processedRuleGroup = processRuleGroup(require_convertQuery.convertFromIC(ruleGroup));
924
967
  return processedRuleGroup === false ? {} : processedRuleGroup;
925
968
  };
926
969
 
@@ -935,19 +978,45 @@ const defaultRuleGroupProcessorJSONata = (ruleGroup, options) => {
935
978
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
936
979
  const processRuleGroup = (rg, outermost) => {
937
980
  if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermost ? fallbackExpression : "";
938
- const expression = rg.rules.map((rule) => {
939
- if (typeof rule === "string") return rule;
940
- if (require_isRuleGroup.isRuleGroup(rule)) return processRuleGroup(rule);
981
+ const processedRules = [];
982
+ let precedingCombinator = "";
983
+ let firstRule = true;
984
+ for (const rule of rg.rules) {
985
+ if (typeof rule === "string") {
986
+ precedingCombinator = rule;
987
+ continue;
988
+ }
989
+ if (require_isRuleGroup.isRuleGroup(rule)) {
990
+ const processedGroup = processRuleGroup(rule);
991
+ if (processedGroup) {
992
+ if (!firstRule && precedingCombinator) {
993
+ processedRules.push(precedingCombinator);
994
+ precedingCombinator = "";
995
+ }
996
+ firstRule = false;
997
+ processedRules.push(processedGroup);
998
+ }
999
+ continue;
1000
+ }
941
1001
  const [validationResult, fieldValidator] = validateRule(rule);
942
- if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return "";
1002
+ if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
943
1003
  const fieldData = require_optGroupUtils.getOption(fields, rule.field);
944
- return ruleProcessor(rule, {
1004
+ const processedRule = ruleProcessor(rule, {
945
1005
  ...options,
946
1006
  parseNumbers: getParseNumberBoolean(fieldData?.inputType),
947
1007
  escapeQuotes: (rule.valueSource ?? "value") === "value",
948
1008
  fieldData
949
1009
  });
950
- }).filter(Boolean).join(require_isRuleGroup.isRuleGroupType(rg) ? ` ${rg.combinator} ` : " ");
1010
+ if (processedRule) {
1011
+ if (!firstRule && precedingCombinator) {
1012
+ processedRules.push(precedingCombinator);
1013
+ precedingCombinator = "";
1014
+ }
1015
+ firstRule = false;
1016
+ processedRules.push(processedRule);
1017
+ }
1018
+ }
1019
+ const expression = processedRules.join(require_isRuleGroup.isRuleGroupType(rg) ? ` ${rg.combinator} ` : " ");
951
1020
  const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "$not" : ""}(`, ")"] : ["", ""];
952
1021
  return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
953
1022
  };
@@ -993,7 +1062,6 @@ const defaultRuleGroupProcessorJsonLogic = (ruleGroup, options) => {
993
1062
  */
994
1063
  const defaultRuleGroupProcessorLDAP = (ruleGroup, options) => {
995
1064
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
996
- const query = require_convertQuery.convertFromIC(ruleGroup);
997
1065
  const processRuleGroup = (rg, outermost) => {
998
1066
  if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermost ? fallbackExpression : "";
999
1067
  const rules = rg.rules.map((rule) => {
@@ -1013,7 +1081,7 @@ const defaultRuleGroupProcessorLDAP = (ruleGroup, options) => {
1013
1081
  const [prefix, suffix] = rules.length > 1 ? [`${notPrefix}(${rg.combinator === "or" ? "|" : "&"}`, `)${notSuffix}`] : [notPrefix, notSuffix];
1014
1082
  return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
1015
1083
  };
1016
- return processRuleGroup(query, true);
1084
+ return processRuleGroup(require_convertQuery.convertFromIC(ruleGroup), true);
1017
1085
  };
1018
1086
 
1019
1087
  //#endregion
@@ -1068,20 +1136,46 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
1068
1136
  const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
1069
1137
  if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
1070
1138
  const rg2 = require_isRuleGroup.isRuleGroupTypeIC(rg) && rg.rules.some((r) => typeof r === "string" && require_isRuleGroup.lc(r) === "xor") ? require_convertQuery.convertFromIC(rg) : rg;
1071
- const processedRules = rg2.rules.map((rule) => {
1072
- if (typeof rule === "string") return `, ${translations[rule] ?? rule} `;
1073
- if (require_isRuleGroup.isRuleGroup(rule)) return processRuleGroup(rule, rg2.rules.length === 1 && !(rg2.not || /^xor$/i.test(rg2.combinator ?? "")));
1139
+ const processedRules = [];
1140
+ let precedingCombinator = "";
1141
+ let firstRule = true;
1142
+ for (const rule of rg2.rules) {
1143
+ if (typeof rule === "string") {
1144
+ precedingCombinator = `, ${translations[rule] ?? rule} `;
1145
+ continue;
1146
+ }
1147
+ if (require_isRuleGroup.isRuleGroup(rule)) {
1148
+ const processedGroup = processRuleGroup(rule, rg2.rules.length === 1 && !(rg2.not || /^xor$/i.test(rg2.combinator ?? "")));
1149
+ // istanbul ignore else
1150
+ if (processedGroup) {
1151
+ if (!firstRule && precedingCombinator) {
1152
+ processedRules.push(precedingCombinator);
1153
+ precedingCombinator = "";
1154
+ }
1155
+ firstRule = false;
1156
+ processedRules.push(processedGroup);
1157
+ }
1158
+ continue;
1159
+ }
1074
1160
  const [validationResult, fieldValidator] = validateRule(rule);
1075
- if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return "";
1161
+ if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
1076
1162
  const escapeQuotes = (rule.valueSource ?? "value") === "value";
1077
1163
  const fieldData = require_optGroupUtils.getOption(fields, rule.field);
1078
- return ruleProcessor(rule, {
1164
+ const processedRule = ruleProcessor(rule, {
1079
1165
  ...options,
1080
1166
  parseNumbers: getParseNumberBoolean(fieldData?.inputType),
1081
1167
  escapeQuotes,
1082
1168
  fieldData
1083
1169
  });
1084
- });
1170
+ if (processedRule) {
1171
+ if (!firstRule && precedingCombinator) {
1172
+ processedRules.push(precedingCombinator);
1173
+ precedingCombinator = "";
1174
+ }
1175
+ firstRule = false;
1176
+ processedRules.push(processedRule);
1177
+ }
1178
+ }
1085
1179
  if (processedRules.length === 0) return fallbackExpression;
1086
1180
  const isXOR = require_isRuleGroup.lc(rg2.combinator ?? "") === "xor";
1087
1181
  const combinator = isXOR ? rg2.combinator.slice(1) : rg2.combinator;
@@ -1089,7 +1183,7 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
1089
1183
  const [prefixTL, suffixTL] = ["groupPrefix", "groupSuffix"].map((key) => rg2.not ? isXOR ? getNLTranslataion(key, translations, ["not", "xor"]) : getNLTranslataion(key, translations, ["not"]) : isXOR ? getNLTranslataion(key, translations, ["xor"]) : getNLTranslataion(key, translations));
1090
1184
  const prefix = mustWrap ? `${prefixTL} (`.trim() : "";
1091
1185
  const suffix = mustWrap ? `) ${suffixTL}`.trim() : "";
1092
- return `${prefix}${processedRules.filter(Boolean).join(require_isRuleGroup.isRuleGroupType(rg2) ? `, ${translations[combinator] ?? combinator} ` : "")}${suffix}`;
1186
+ return `${prefix}${processedRules.join(require_isRuleGroup.isRuleGroupType(rg2) ? `, ${translations[combinator] ?? combinator} ` : "")}${suffix}`;
1093
1187
  };
1094
1188
  return processRuleGroup(ruleGroup, true);
1095
1189
  };
@@ -1139,11 +1233,37 @@ const defaultRuleGroupProcessorParameterized = (ruleGroup, options) => {
1139
1233
  };
1140
1234
  const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
1141
1235
  if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
1142
- const processedRules = rg.rules.map((rule) => {
1143
- if (typeof rule === "string") return rule;
1144
- if (require_isRuleGroup.isRuleGroup(rule)) return processRuleGroup(rule, rg.rules.length === 1);
1145
- return processRule(rule);
1146
- }).filter(Boolean);
1236
+ const processedRules = [];
1237
+ let precedingCombinator = "";
1238
+ let firstRule = true;
1239
+ for (const rule of rg.rules) {
1240
+ if (typeof rule === "string") {
1241
+ precedingCombinator = rule;
1242
+ continue;
1243
+ }
1244
+ if (require_isRuleGroup.isRuleGroup(rule)) {
1245
+ const processedGroup = processRuleGroup(rule, rg.rules.length === 1);
1246
+ // istanbul ignore else
1247
+ if (processedGroup) {
1248
+ if (!firstRule && precedingCombinator) {
1249
+ processedRules.push(precedingCombinator);
1250
+ precedingCombinator = "";
1251
+ }
1252
+ firstRule = false;
1253
+ processedRules.push(processedGroup);
1254
+ }
1255
+ continue;
1256
+ }
1257
+ const processedRule = processRule(rule);
1258
+ if (processedRule) {
1259
+ if (!firstRule && precedingCombinator) {
1260
+ processedRules.push(precedingCombinator);
1261
+ precedingCombinator = "";
1262
+ }
1263
+ firstRule = false;
1264
+ processedRules.push(processedRule);
1265
+ }
1266
+ }
1147
1267
  if (processedRules.length === 0) return fallbackExpression;
1148
1268
  return `${rg.not ? "NOT " : ""}(${processedRules.join(require_isRuleGroup.isRuleGroupType(rg) ? ` ${rg.combinator} ` : " ")})`;
1149
1269
  };
@@ -1252,20 +1372,46 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
1252
1372
  const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
1253
1373
  const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
1254
1374
  if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
1255
- const processedRules = rg.rules.map((rule) => {
1256
- if (typeof rule === "string") return rule;
1257
- if (require_isRuleGroup.isRuleGroup(rule)) return processRuleGroup(rule, rg.rules.length === 1);
1375
+ const processedRules = [];
1376
+ let precedingCombinator = "";
1377
+ let firstRule = true;
1378
+ for (const rule of rg.rules) {
1379
+ if (typeof rule === "string") {
1380
+ precedingCombinator = rule;
1381
+ continue;
1382
+ }
1383
+ if (require_isRuleGroup.isRuleGroup(rule)) {
1384
+ const processedGroup = processRuleGroup(rule, rg.rules.length === 1);
1385
+ // istanbul ignore else
1386
+ if (processedGroup) {
1387
+ if (!firstRule && precedingCombinator) {
1388
+ processedRules.push(precedingCombinator);
1389
+ precedingCombinator = "";
1390
+ }
1391
+ firstRule = false;
1392
+ processedRules.push(processedGroup);
1393
+ }
1394
+ continue;
1395
+ }
1258
1396
  const [validationResult, fieldValidator] = validateRule(rule);
1259
- if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return "";
1397
+ if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
1260
1398
  const escapeQuotes = (rule.valueSource ?? "value") === "value";
1261
1399
  const fieldData = require_optGroupUtils.getOption(fields, rule.field);
1262
- return ruleProcessor(rule, {
1400
+ const processedRule = ruleProcessor(rule, {
1263
1401
  ...options,
1264
1402
  parseNumbers: getParseNumberBoolean(fieldData?.inputType),
1265
1403
  escapeQuotes,
1266
1404
  fieldData
1267
1405
  });
1268
- }).filter(Boolean);
1406
+ if (processedRule) {
1407
+ if (!firstRule && precedingCombinator) {
1408
+ processedRules.push(precedingCombinator);
1409
+ precedingCombinator = "";
1410
+ }
1411
+ firstRule = false;
1412
+ processedRules.push(processedRule);
1413
+ }
1414
+ }
1269
1415
  if (processedRules.length === 0) return fallbackExpression;
1270
1416
  return `${rg.not ? "NOT " : ""}(${processedRules.join(require_isRuleGroup.isRuleGroupType(rg) ? ` ${rg.combinator} ` : " ")})`;
1271
1417
  };
@@ -1543,10 +1689,7 @@ const defaultRuleProcessorJsonLogic = (rule, options = {}) => {
1543
1689
  case "null":
1544
1690
  case "notnull": return { [`${operatorLC === "notnull" ? "!" : "="}=`]: [fieldObject, null] };
1545
1691
  case "in":
1546
- case "notin": {
1547
- const valueAsArray = require_arrayUtils.toArray(value).map((v) => fieldOrNumberRenderer(v));
1548
- return negateIfNotOp(operatorLC, { in: [fieldObject, valueAsArray] });
1549
- }
1692
+ case "notin": return negateIfNotOp(operatorLC, { in: [fieldObject, require_arrayUtils.toArray(value).map((v) => fieldOrNumberRenderer(v))] });
1550
1693
  case "between":
1551
1694
  case "notbetween": {
1552
1695
  const valueAsArray = require_arrayUtils.toArray(value);
@@ -1577,20 +1720,11 @@ const defaultRuleProcessorJsonLogic = (rule, options = {}) => {
1577
1720
  return false;
1578
1721
  }
1579
1722
  case "contains":
1580
- case "doesnotcontain": {
1581
- const jsonRule = { in: [fieldOrNumberRenderer(value), fieldObject] };
1582
- return negateIfNotOp(operatorLC, jsonRule);
1583
- }
1723
+ case "doesnotcontain": return negateIfNotOp(operatorLC, { in: [fieldOrNumberRenderer(value), fieldObject] });
1584
1724
  case "beginswith":
1585
- case "doesnotbeginwith": {
1586
- const jsonRule = { startsWith: [fieldObject, fieldOrNumberRenderer(value)] };
1587
- return negateIfNotOp(operatorLC, jsonRule);
1588
- }
1725
+ case "doesnotbeginwith": return negateIfNotOp(operatorLC, { startsWith: [fieldObject, fieldOrNumberRenderer(value)] });
1589
1726
  case "endswith":
1590
- case "doesnotendwith": {
1591
- const jsonRule = { endsWith: [fieldObject, fieldOrNumberRenderer(value)] };
1592
- return negateIfNotOp(operatorLC, jsonRule);
1593
- }
1727
+ case "doesnotendwith": return negateIfNotOp(operatorLC, { endsWith: [fieldObject, fieldOrNumberRenderer(value)] });
1594
1728
  }
1595
1729
  return false;
1596
1730
  };
@@ -1625,10 +1759,7 @@ const defaultRuleProcessorLDAP = (rule, options = {}) => {
1625
1759
  case "null":
1626
1760
  case "notnull": return negateIf(`(${field}=*)`, operatorLC === "notnull");
1627
1761
  case "in":
1628
- case "notin": {
1629
- const valueAsArray = require_arrayUtils.toArray(value);
1630
- return negateIf(`(|${valueAsArray.map((val) => `(${field}=${ldapEscape(val)})`).join("")})`, operatorLC === "notin");
1631
- }
1762
+ case "notin": return negateIf(`(|${require_arrayUtils.toArray(value).map((val) => `(${field}=${ldapEscape(val)})`).join("")})`, operatorLC === "notin");
1632
1763
  case "between":
1633
1764
  case "notbetween": {
1634
1765
  const valueAsArray = require_arrayUtils.toArray(value);
@@ -1796,10 +1927,9 @@ const defaultRuleProcessorNL = (rule, opts) => {
1796
1927
  });
1797
1928
  const operatorLC = require_isRuleGroup.lc(operator);
1798
1929
  if ((operatorLC === "in" || operatorLC === "notin" || operatorLC === "between" || operatorLC === "notbetween") && !value) return "";
1799
- const processedOperator = operatorProcessor(rule, opts);
1800
1930
  const wordOrderMap = {
1801
1931
  S: processedField,
1802
- V: processedOperator,
1932
+ V: operatorProcessor(rule, opts),
1803
1933
  O: value
1804
1934
  };
1805
1935
  return normalizeConstituentWordOrder(wordOrder).map((term) => `${wordOrderMap[term]}`).join(" ").trim();
@@ -2182,8 +2312,8 @@ const defaultFormatQueryOptions = {
2182
2312
  paramsKeepPrefix: false,
2183
2313
  numberedParams: false,
2184
2314
  preserveValueOrder: false,
2185
- placeholderFieldName: require_arrayUtils.defaultPlaceholderFieldName,
2186
- placeholderOperatorName: require_arrayUtils.defaultPlaceholderOperatorName,
2315
+ placeholderFieldName: require_optGroupUtils.defaultPlaceholderFieldName,
2316
+ placeholderOperatorName: require_optGroupUtils.defaultPlaceholderOperatorName,
2187
2317
  quoteValuesWith: "'",
2188
2318
  concatOperator: "||",
2189
2319
  preset: "ansi",