@react-querybuilder/core 8.14.0 → 8.14.2

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 (101) hide show
  1. package/dist/{basic-Dxm6jWFu.d.ts → basic-BXJVfD0P.d.ts} +68 -50
  2. package/dist/{basic-GFsWfi0Z.d.mts → basic-CNIjb6rI.d.mts} +68 -50
  3. package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +183 -127
  4. package/dist/cjs/react-querybuilder_core.cjs.development.js +311 -252
  5. package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
  6. package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +183 -127
  7. package/dist/cjs/react-querybuilder_core.cjs.production.js +1 -1
  8. package/dist/cjs/react-querybuilder_core.cjs.production.js.map +1 -1
  9. package/dist/{convertQuery-DAj92cbM.mjs → convertQuery-CeJSNn37.mjs} +30 -22
  10. package/dist/convertQuery-CeJSNn37.mjs.map +1 -0
  11. package/dist/convertQuery-J8LpTG-7.js +94 -0
  12. package/dist/convertQuery-J8LpTG-7.js.map +1 -0
  13. package/dist/{export-_wipiqJZ.d.mts → export-6x7MilFR.d.mts} +2 -3
  14. package/dist/{export-6VbkhCrf.d.ts → export-CpJOQuZv.d.ts} +2 -3
  15. package/dist/formatQuery.d.mts +4 -3
  16. package/dist/formatQuery.d.ts +4 -3
  17. package/dist/formatQuery.js +75 -107
  18. package/dist/formatQuery.js.map +1 -1
  19. package/dist/formatQuery.mjs +17 -49
  20. package/dist/formatQuery.mjs.map +1 -1
  21. package/dist/{import-D8M7awTx.d.ts → import-B5Iq8XmL.d.ts} +2 -3
  22. package/dist/{import-DRmutNSr.d.mts → import-Bltb2mT4.d.mts} +2 -3
  23. package/dist/objectUtils-ButT0Mng.js +105 -0
  24. package/dist/objectUtils-ButT0Mng.js.map +1 -0
  25. package/dist/{isRuleGroup-DztIOOKa.mjs → objectUtils-C0WB-8ex.mjs} +16 -5
  26. package/dist/objectUtils-C0WB-8ex.mjs.map +1 -0
  27. package/dist/parseCEL.d.mts +2 -2
  28. package/dist/parseCEL.d.ts +2 -2
  29. package/dist/parseCEL.js +14 -16
  30. package/dist/parseCEL.js.map +1 -1
  31. package/dist/parseCEL.mjs +7 -10
  32. package/dist/parseCEL.mjs.map +1 -1
  33. package/dist/parseJSONata.d.mts +2 -3
  34. package/dist/parseJSONata.d.ts +2 -3
  35. package/dist/parseJSONata.js +40 -5614
  36. package/dist/parseJSONata.js.map +1 -1
  37. package/dist/parseJSONata.mjs +11 -13
  38. package/dist/parseJSONata.mjs.map +1 -1
  39. package/dist/parseJsonLogic.d.mts +3 -4
  40. package/dist/parseJsonLogic.d.ts +3 -4
  41. package/dist/parseJsonLogic.js +47 -48
  42. package/dist/parseJsonLogic.js.map +1 -1
  43. package/dist/parseJsonLogic.mjs +19 -21
  44. package/dist/parseJsonLogic.mjs.map +1 -1
  45. package/dist/parseMongoDB.d.mts +2 -3
  46. package/dist/parseMongoDB.d.ts +2 -3
  47. package/dist/parseMongoDB.js +26 -27
  48. package/dist/parseMongoDB.js.map +1 -1
  49. package/dist/parseMongoDB.mjs +6 -8
  50. package/dist/parseMongoDB.mjs.map +1 -1
  51. package/dist/parseSQL.d.mts +2 -3
  52. package/dist/parseSQL.d.ts +2 -3
  53. package/dist/parseSQL.js +13 -15
  54. package/dist/parseSQL.js.map +1 -1
  55. package/dist/parseSQL.mjs +7 -10
  56. package/dist/parseSQL.mjs.map +1 -1
  57. package/dist/parseSpEL.d.mts +2 -3
  58. package/dist/parseSpEL.d.ts +2 -3
  59. package/dist/parseSpEL.js +13 -2702
  60. package/dist/parseSpEL.js.map +1 -1
  61. package/dist/parseSpEL.mjs +7 -9
  62. package/dist/parseSpEL.mjs.map +1 -1
  63. package/dist/{prepareQueryObjects-BBayjIn2.mjs → prepareQueryObjects-BfMlS4ql.mjs} +34 -18
  64. package/dist/prepareQueryObjects-BfMlS4ql.mjs.map +1 -0
  65. package/dist/{prepareQueryObjects-BxWvIPI4.js → prepareQueryObjects-DO3qXriW.js} +50 -35
  66. package/dist/prepareQueryObjects-DO3qXriW.js.map +1 -0
  67. package/dist/react-querybuilder_core.d.mts +183 -127
  68. package/dist/react-querybuilder_core.legacy-esm.d.ts +183 -127
  69. package/dist/react-querybuilder_core.legacy-esm.js +307 -280
  70. package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
  71. package/dist/react-querybuilder_core.mjs +299 -248
  72. package/dist/react-querybuilder_core.mjs.map +1 -1
  73. package/dist/react-querybuilder_core.production.d.mts +183 -127
  74. package/dist/react-querybuilder_core.production.mjs +1 -1
  75. package/dist/react-querybuilder_core.production.mjs.map +1 -1
  76. package/dist/transformQuery.d.mts +1 -2
  77. package/dist/transformQuery.d.ts +1 -2
  78. package/dist/transformQuery.js +45 -2
  79. package/dist/transformQuery.js.map +1 -0
  80. package/dist/transformQuery.mjs +44 -2
  81. package/dist/transformQuery.mjs.map +1 -0
  82. package/dist/{utils-nQU7WCM9.mjs → utils-BlMGIhvx.mjs} +32 -92
  83. package/dist/utils-BlMGIhvx.mjs.map +1 -0
  84. package/dist/{utils-CR1ToTMW.js → utils-CZRhzje-.js} +187 -265
  85. package/dist/utils-CZRhzje-.js.map +1 -0
  86. package/package.json +25 -17
  87. package/dist/chunk-U64pC571.js +0 -41
  88. package/dist/convertQuery-DAj92cbM.mjs.map +0 -1
  89. package/dist/convertQuery-DRldbzhZ.js +0 -87
  90. package/dist/convertQuery-DRldbzhZ.js.map +0 -1
  91. package/dist/isRuleGroup-Cjk1Q2mj.js +0 -82
  92. package/dist/isRuleGroup-Cjk1Q2mj.js.map +0 -1
  93. package/dist/isRuleGroup-DztIOOKa.mjs.map +0 -1
  94. package/dist/prepareQueryObjects-BBayjIn2.mjs.map +0 -1
  95. package/dist/prepareQueryObjects-BxWvIPI4.js.map +0 -1
  96. package/dist/transformQuery-ClBRfnFg.js +0 -54
  97. package/dist/transformQuery-ClBRfnFg.js.map +0 -1
  98. package/dist/transformQuery-DUpbpqjX.mjs +0 -48
  99. package/dist/transformQuery-DUpbpqjX.mjs.map +0 -1
  100. package/dist/utils-CR1ToTMW.js.map +0 -1
  101. package/dist/utils-nQU7WCM9.mjs.map +0 -1
@@ -1,8 +1,7 @@
1
- import { A as defaultOperatorNegationMap, D as joinWith, T as objectKeys } from "./utils-nQU7WCM9.mjs";
2
- import { i as isPojo, n as isRuleGroupType, t as isRuleGroup } from "./isRuleGroup-DztIOOKa.mjs";
3
- import { n as convertToIC } from "./convertQuery-DAj92cbM.mjs";
4
- import { n as fieldIsValidUtil, r as getFieldsArray, t as prepareRuleGroup } from "./prepareQueryObjects-BBayjIn2.mjs";
5
-
1
+ import { E as joinWith, k as defaultOperatorNegationMap } from "./utils-BlMGIhvx.mjs";
2
+ import { i as isRuleGroupType, n as objectKeys, o as isPojo, r as isRuleGroup } from "./objectUtils-C0WB-8ex.mjs";
3
+ import { n as convertToIC } from "./convertQuery-CeJSNn37.mjs";
4
+ import { n as fieldIsValidUtil, r as getFieldsArray, t as prepareRuleGroup } from "./prepareQueryObjects-BfMlS4ql.mjs";
6
5
  //#region src/utils/parseJsonLogic/utils.ts
7
6
  const isJsonLogicVar = (logic) => isPojo(logic) && "var" in logic;
8
7
  const isRQBJsonLogicVar = (logic) => isJsonLogicVar(logic) && typeof logic.var === "string";
@@ -27,7 +26,6 @@ const isJsonLogicBetweenExclusive = (logic) => isPojo(logic) && "<" in logic &&
27
26
  const isJsonLogicBetweenInclusive = (logic) => isPojo(logic) && "<=" in logic && Array.isArray(logic["<="]) && logic["<="].length === 3;
28
27
  const isRQBJsonLogicStartsWith = (logic) => isPojo(logic) && "startsWith" in logic;
29
28
  const isRQBJsonLogicEndsWith = (logic) => isPojo(logic) && "endsWith" in logic;
30
-
31
29
  //#endregion
32
30
  //#region src/utils/parseJsonLogic/parseJsonLogic.ts
33
31
  const emptyRuleGroup = {
@@ -48,11 +46,11 @@ function parseJsonLogic(rqbJsonLogic, options = {}) {
48
46
  if (outermost && !isPojo(logic)) return false;
49
47
  const [key, keyValue] = Object.entries(logic || {})?.[0] ?? [];
50
48
  if (jsonLogicOperations && objectKeys(jsonLogicOperations).includes(key)) {
51
- const rule$1 = jsonLogicOperations[key](keyValue);
52
- return rule$1 ? outermost && !isRuleGroup(rule$1) ? {
49
+ const rule = jsonLogicOperations[key](keyValue);
50
+ return rule ? outermost && !isRuleGroup(rule) ? {
53
51
  combinator: "and",
54
- rules: [rule$1]
55
- } : rule$1 : false;
52
+ rules: [rule]
53
+ } : rule : false;
56
54
  }
57
55
  if (isJsonLogicAnd(logic)) return {
58
56
  combinator: "and",
@@ -63,25 +61,25 @@ function parseJsonLogic(rqbJsonLogic, options = {}) {
63
61
  rules: logic.or.map((l) => processLogic(l)).filter(Boolean)
64
62
  };
65
63
  else if (isJsonLogicNegation(logic)) {
66
- const rule$1 = processLogic(logic["!"]);
67
- if (rule$1) {
68
- if (!isRuleGroupType(rule$1) && (rule$1.operator === "between" || rule$1.operator === "in" || rule$1.operator === "contains" || rule$1.operator === "beginsWith" || rule$1.operator === "endsWith")) {
64
+ const rule = processLogic(logic["!"]);
65
+ if (rule) {
66
+ if (!isRuleGroupType(rule) && (rule.operator === "between" || rule.operator === "in" || rule.operator === "contains" || rule.operator === "beginsWith" || rule.operator === "endsWith")) {
69
67
  const newRule = {
70
- ...rule$1,
71
- operator: defaultOperatorNegationMap[rule$1.operator]
68
+ ...rule,
69
+ operator: defaultOperatorNegationMap[rule.operator]
72
70
  };
73
71
  if (outermost) return {
74
72
  combinator: "and",
75
73
  rules: [newRule]
76
74
  };
77
75
  return newRule;
78
- } else if (isJsonLogicBetweenExclusive(logic["!"]) || isRuleGroupType(rule$1)) return {
79
- ...rule$1,
76
+ } else if (isJsonLogicBetweenExclusive(logic["!"]) || isRuleGroupType(rule)) return {
77
+ ...rule,
80
78
  not: true
81
79
  };
82
80
  return {
83
81
  combinator: "and",
84
- rules: [rule$1],
82
+ rules: [rule],
85
83
  not: true
86
84
  };
87
85
  }
@@ -119,11 +117,11 @@ function parseJsonLogic(rqbJsonLogic, options = {}) {
119
117
  };
120
118
  } else if (isJsonLogicAll(logic) && isRQBJsonLogicVar(logic["all"][0]) || isJsonLogicNone(logic) && isRQBJsonLogicVar(logic["none"][0]) || isJsonLogicSome(logic) && isRQBJsonLogicVar(logic["some"][0])) {
121
119
  const match = { mode: isJsonLogicNone(logic) ? "none" : isJsonLogicSome(logic) ? "some" : "all" };
122
- const [{ var: field$1 }, operation] = logic[match.mode];
120
+ const [{ var: fld }, operation] = logic[match.mode];
123
121
  const matcher = processLogic(operation);
124
122
  if (!matcher) return false;
125
123
  rule = {
126
- field: field$1,
124
+ field: fld,
127
125
  operator: "=",
128
126
  match,
129
127
  value: isRuleGroup(matcher) ? matcher : {
@@ -183,7 +181,7 @@ function parseJsonLogic(rqbJsonLogic, options = {}) {
183
181
  const finalQuery = processLogic(logicRoot, true) || emptyRuleGroup;
184
182
  return prepare(options.independentCombinators ? convertToIC(finalQuery) : finalQuery);
185
183
  }
186
-
187
184
  //#endregion
188
185
  export { parseJsonLogic };
186
+
189
187
  //# sourceMappingURL=parseJsonLogic.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseJsonLogic.mjs","names":["emptyRuleGroup: DefaultRuleGroupType","rule","rule: DefaultRuleType | false","operator: DefaultOperatorName","value: any","valueSource: ValueSource | undefined","match: MatchConfig","field","finalQuery: DefaultRuleGroupType"],"sources":["../src/utils/parseJsonLogic/utils.ts","../src/utils/parseJsonLogic/parseJsonLogic.ts"],"sourcesContent":["import type {\n JsonLogicAll,\n JsonLogicAnd,\n JsonLogicDoubleNegation,\n JsonLogicEqual,\n JsonLogicGreaterThan,\n JsonLogicGreaterThanOrEqual,\n JsonLogicInArray,\n JsonLogicInString,\n JsonLogicLessThan,\n JsonLogicLessThanOrEqual,\n JsonLogicNegation,\n JsonLogicNone,\n JsonLogicNotEqual,\n JsonLogicOr,\n JsonLogicSome,\n JsonLogicStrictEqual,\n JsonLogicStrictNotEqual,\n JsonLogicVar,\n RQBJsonLogicEndsWith,\n RQBJsonLogicStartsWith,\n RQBJsonLogicVar,\n} from '../../types';\nimport { isPojo } from '../misc';\nimport type { JsonLogicBetweenExclusive, JsonLogicBetweenInclusive } from './types';\n\n// Standard JsonLogic operations\nexport const isJsonLogicVar = (\n logic: unknown\n): logic is JsonLogicVar<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'var' in logic;\nexport const isRQBJsonLogicVar = (logic: unknown): logic is RQBJsonLogicVar =>\n isJsonLogicVar(logic) && typeof logic.var === 'string';\nexport const isJsonLogicEqual = (logic: unknown): logic is JsonLogicEqual =>\n isPojo(logic) && '==' in logic;\nexport const isJsonLogicStrictEqual = (logic: unknown): logic is JsonLogicStrictEqual =>\n isPojo(logic) && '===' in logic;\nexport const isJsonLogicNotEqual = (logic: unknown): logic is JsonLogicNotEqual =>\n isPojo(logic) && '!=' in logic;\nexport const isJsonLogicStrictNotEqual = (logic: unknown): logic is JsonLogicStrictNotEqual =>\n isPojo(logic) && '!==' in logic;\nexport const isJsonLogicNegation = (logic: unknown): logic is JsonLogicNegation =>\n isPojo(logic) && '!' in logic;\nexport const isJsonLogicDoubleNegation = (logic: unknown): logic is JsonLogicDoubleNegation =>\n isPojo(logic) && '!!' in logic;\nexport const isJsonLogicOr = (\n logic: unknown\n): logic is JsonLogicOr<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'or' in logic;\nexport const isJsonLogicAnd = (\n logic: unknown\n): logic is JsonLogicAnd<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'and' in logic;\nexport const isJsonLogicGreaterThan = (\n logic: unknown\n): logic is JsonLogicGreaterThan<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '>' in logic;\nexport const isJsonLogicGreaterThanOrEqual = (\n logic: unknown\n): logic is JsonLogicGreaterThanOrEqual<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '>=' in logic;\nexport const isJsonLogicLessThan = (\n logic: unknown\n): logic is JsonLogicLessThan<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '<' in logic && logic['<'].length === 2;\nexport const isJsonLogicLessThanOrEqual = (\n logic: unknown\n): logic is JsonLogicLessThanOrEqual<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '<=' in logic && logic['<='].length === 2;\nexport const isJsonLogicInArray = (\n logic: unknown\n): logic is JsonLogicInArray<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'in' in logic && Array.isArray(logic.in[1]);\nexport const isJsonLogicInString = (\n logic: unknown\n): logic is JsonLogicInString<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'in' in logic && !Array.isArray(logic.in[1]);\nexport const isJsonLogicAll = (\n logic: unknown\n): logic is JsonLogicAll<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'all' in logic;\nexport const isJsonLogicNone = (\n logic: unknown\n): logic is JsonLogicNone<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'none' in logic;\nexport const isJsonLogicSome = (\n logic: unknown\n): logic is JsonLogicSome<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'some' in logic;\n\n// \"Between\" operations are special cases of '<' and '<='\nexport const isJsonLogicBetweenExclusive = (logic: unknown): logic is JsonLogicBetweenExclusive =>\n isPojo(logic) && '<' in logic && Array.isArray(logic['<']) && logic['<'].length === 3;\nexport const isJsonLogicBetweenInclusive = (logic: unknown): logic is JsonLogicBetweenInclusive =>\n isPojo(logic) && '<=' in logic && Array.isArray(logic['<=']) && logic['<='].length === 3;\n\n// RQB extensions\nexport const isRQBJsonLogicStartsWith = (logic: unknown): logic is RQBJsonLogicStartsWith =>\n isPojo(logic) && 'startsWith' in logic;\nexport const isRQBJsonLogicEndsWith = (logic: unknown): logic is RQBJsonLogicEndsWith =>\n isPojo(logic) && 'endsWith' in logic;\n\n// Type guards for unused JsonLogic operations\n\n// import type {\n// JsonLogicCat,\n// JsonLogicDifference,\n// JsonLogicFilter,\n// JsonLogicIf,\n// JsonLogicLog,\n// JsonLogicMap,\n// JsonLogicMax,\n// JsonLogicMerge,\n// JsonLogicMin,\n// JsonLogicMissing,\n// JsonLogicMissingSome,\n// JsonLogicProduct,\n// JsonLogicQuotient,\n// JsonLogicReduce,\n// JsonLogicRemainder,\n// JsonLogicSubstr,\n// JsonLogicSum,\n// } from '../../types';\n//\n// export const isJsonLogicMissing = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMissing<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'missing' in logic;\n// export const isJsonLogicMissingSome = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMissingSome<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'missing_some' in logic;\n// export const isJsonLogicIf = (logic: RQBJsonLogic): logic is JsonLogicIf =>\n// isPojo(logic) && 'if' in logic;\n// export const isJsonLogicMax = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMax<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'max' in logic;\n// export const isJsonLogicMin = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMin<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'min' in logic;\n// export const isJsonLogicSum = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicSum<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '+' in logic;\n// export const isJsonLogicDifference = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicDifference<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '-' in logic;\n// export const isJsonLogicProduct = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicProduct<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '*' in logic;\n// export const isJsonLogicQuotient = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicQuotient<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '/' in logic;\n// export const isJsonLogicRemainder = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicRemainder<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '%' in logic;\n// export const isJsonLogicMap = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMap<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'map' in logic;\n// export const isJsonLogicFilter = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicFilter<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'filter' in logic;\n// export const isJsonLogicReduce = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicReduce<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'reduce' in logic;\n// export const isJsonLogicMerge = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMerge<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'merge' in logic;\n// export const isJsonLogicCat = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicCat<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'cat' in logic;\n// export const isJsonLogicSubstr = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicSubstr<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'substr' in logic;\n// export const isJsonLogicLog = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicLog<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'log' in logic;\n","import type { Except } from 'type-fest';\nimport { defaultOperatorNegationMap } from '../../defaults';\nimport type {\n DefaultOperatorName,\n DefaultRuleGroupType,\n DefaultRuleGroupTypeAny,\n DefaultRuleGroupTypeIC,\n DefaultRuleType,\n MatchConfig,\n RQBJsonLogic,\n RQBJsonLogicVar,\n RuleGroupTypeAny,\n RuleType,\n ValueSource,\n} from '../../types';\nimport type { ParserCommonOptions } from '../../types/import';\nimport { joinWith } from '../arrayUtils';\nimport { convertToIC } from '../convertQuery';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isPojo } from '../misc';\nimport { objectKeys } from '../objectUtils';\nimport { fieldIsValidUtil, getFieldsArray } from '../parserUtils';\nimport { prepareRuleGroup } from '../prepareQueryObjects';\nimport {\n isJsonLogicAll,\n isJsonLogicAnd,\n isJsonLogicBetweenExclusive,\n isJsonLogicBetweenInclusive,\n isJsonLogicDoubleNegation,\n isJsonLogicEqual,\n isJsonLogicGreaterThan,\n isJsonLogicGreaterThanOrEqual,\n isJsonLogicInArray,\n isJsonLogicInString,\n isJsonLogicLessThan,\n isJsonLogicLessThanOrEqual,\n isJsonLogicNegation,\n isJsonLogicNone,\n isJsonLogicNotEqual,\n isJsonLogicOr,\n isJsonLogicSome,\n isJsonLogicStrictEqual,\n isJsonLogicStrictNotEqual,\n isRQBJsonLogicEndsWith,\n isRQBJsonLogicStartsWith,\n isRQBJsonLogicVar,\n} from './utils';\n\n/**\n * Options object for {@link parseJsonLogic}.\n */\nexport interface ParseJsonLogicOptions extends ParserCommonOptions {\n // oxlint-disable-next-line typescript/no-explicit-any\n jsonLogicOperations?: Record<string, (value: any) => RuleType | RuleGroupTypeAny | false>;\n}\n\nconst emptyRuleGroup: DefaultRuleGroupType = { combinator: 'and', rules: [] };\n\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseJsonLogic(rqbJsonLogic: string | RQBJsonLogic): DefaultRuleGroupType;\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: Except<ParseJsonLogicOptions, 'independentCombinators'> & {\n independentCombinators?: false;\n }\n): DefaultRuleGroupType;\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupTypeIC DefaultRuleGroupTypeIC}).\n */\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: Except<ParseJsonLogicOptions, 'independentCombinators'> & {\n independentCombinators: true;\n }\n): DefaultRuleGroupTypeIC;\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: ParseJsonLogicOptions = {}\n): DefaultRuleGroupTypeAny {\n const fieldsFlat = getFieldsArray(options.fields);\n const { getValueSources, listsAsArrays, jsonLogicOperations } = options;\n\n const fieldIsValid = (\n fieldName: string,\n operator: DefaultOperatorName,\n subordinateFieldName?: string\n ) =>\n fieldIsValidUtil({\n fieldName,\n fieldsFlat,\n operator,\n subordinateFieldName,\n getValueSources,\n });\n\n // Overload 1: Always return a rule group or false for the outermost logic object\n function processLogic(logic: RQBJsonLogic, outermost: true): DefaultRuleGroupType | false;\n // Overload 2: If not the outermost object, return value could also be a rule\n function processLogic(\n logic: RQBJsonLogic,\n outermost?: false\n ): DefaultRuleGroupType | DefaultRuleType | false;\n // Implementation\n function processLogic(\n logic: RQBJsonLogic,\n outermost?: boolean\n ): DefaultRuleGroupType | DefaultRuleType | false {\n // Bail if the outermost logic is not a plain object\n if (outermost && !isPojo(logic)) {\n return false;\n }\n const [key, keyValue] = Object.entries(logic || {})?.[0] ?? [];\n\n // Custom operations process logic\n if (jsonLogicOperations && objectKeys(jsonLogicOperations).includes(key)) {\n const rule = jsonLogicOperations[key](keyValue) as DefaultRuleType;\n return rule\n ? outermost && !isRuleGroup(rule)\n ? { combinator: 'and', rules: [rule] }\n : rule\n : false;\n }\n\n // Rule groups\n if (isJsonLogicAnd(logic)) {\n return {\n combinator: 'and',\n rules: logic.and.map(l => processLogic(l)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[],\n };\n } else if (isJsonLogicOr(logic)) {\n return {\n combinator: 'or',\n rules: logic.or.map(l => processLogic(l)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[],\n };\n } else if (isJsonLogicNegation(logic)) {\n const rule = processLogic(logic['!']);\n if (rule) {\n if (\n !isRuleGroupType(rule) &&\n (rule.operator === 'between' ||\n rule.operator === 'in' ||\n rule.operator === 'contains' ||\n rule.operator === 'beginsWith' ||\n rule.operator === 'endsWith')\n ) {\n const newRule = { ...rule, operator: defaultOperatorNegationMap[rule.operator] };\n if (outermost) {\n return { combinator: 'and', rules: [newRule] };\n }\n return newRule;\n } else if (isJsonLogicBetweenExclusive(logic['!']) || isRuleGroupType(rule)) {\n return { ...rule, not: true };\n }\n return { combinator: 'and', rules: [rule], not: true };\n }\n return false;\n } else if (isJsonLogicDoubleNegation(logic)) {\n const rule = processLogic(logic['!!']);\n return rule || false;\n }\n\n // All other keys represent rules\n let rule: DefaultRuleType | false = false;\n let field = '';\n let operator: DefaultOperatorName = '=';\n // oxlint-disable-next-line typescript/no-explicit-any\n let value: any = '';\n let valueSource: ValueSource | undefined = undefined;\n\n if (\n // Basic boolean operations\n isJsonLogicEqual(logic) ||\n isJsonLogicStrictEqual(logic) ||\n isJsonLogicNotEqual(logic) ||\n isJsonLogicStrictNotEqual(logic) ||\n isJsonLogicGreaterThan(logic) ||\n isJsonLogicGreaterThanOrEqual(logic) ||\n isJsonLogicLessThan(logic) ||\n isJsonLogicLessThanOrEqual(logic) ||\n isJsonLogicInString(logic) ||\n isRQBJsonLogicStartsWith(logic) ||\n isRQBJsonLogicEndsWith(logic)\n ) {\n const [first, second] = keyValue;\n if (isRQBJsonLogicVar(first) && !isPojo(second)) {\n field = first.var;\n value = second;\n } else if (!isPojo(first) && isRQBJsonLogicVar(second)) {\n field = second.var;\n value = first;\n } else if (isRQBJsonLogicVar(first) && isRQBJsonLogicVar(second)) {\n field = first.var;\n value = second.var;\n valueSource = 'field';\n } else {\n return false;\n }\n\n // Translate operator if necessary\n if (isJsonLogicEqual(logic) || isJsonLogicStrictEqual(logic)) {\n operator = value === null ? 'null' : '=';\n } else if (isJsonLogicNotEqual(logic) || isJsonLogicStrictNotEqual(logic)) {\n operator = value === null ? 'notNull' : '!=';\n } else if (isJsonLogicInString(logic)) {\n operator = 'contains';\n } else if (isRQBJsonLogicStartsWith(logic)) {\n operator = 'beginsWith';\n } else if (isRQBJsonLogicEndsWith(logic)) {\n operator = 'endsWith';\n } else {\n operator = key as DefaultOperatorName;\n }\n\n if (fieldIsValid(field, operator, valueSource === 'field' ? value : undefined)) {\n rule = { field, operator, value, valueSource };\n }\n } else if (\n (isJsonLogicAll(logic) && isRQBJsonLogicVar(logic['all'][0])) ||\n (isJsonLogicNone(logic) && isRQBJsonLogicVar(logic['none'][0])) ||\n (isJsonLogicSome(logic) && isRQBJsonLogicVar(logic['some'][0]))\n ) {\n // The array coverage functions must have a field as their first element.\n // Otherwise we'd be comparing values to values, which is not supported.\n const match: MatchConfig = {\n mode: isJsonLogicNone(logic) ? 'none' : isJsonLogicSome(logic) ? 'some' : 'all',\n };\n\n // oxlint-disable-next-line typescript/no-explicit-any\n const [{ var: field }, operation] = (logic as any)[match.mode];\n const matcher = processLogic(operation);\n\n // TODO: Support operations that evaluate array member properties\n if (!matcher) return false;\n\n rule = {\n field,\n operator: '=',\n match,\n value: isRuleGroup(matcher) ? matcher : { combinator: 'and', rules: [matcher] },\n };\n } else if (isJsonLogicBetweenExclusive(logic) && isRQBJsonLogicVar(logic['<'][1])) {\n field = logic['<'][1].var;\n const values = [logic['<'][0], logic['<'][2]];\n // istanbul ignore else\n if (\n values.every(v => isRQBJsonLogicVar(v)) ||\n values.every(el => typeof el === 'string') ||\n values.every(el => typeof el === 'number') ||\n values.every(el => typeof el === 'boolean')\n ) {\n return (\n processLogic({\n and: [{ '>': [{ var: field }, values[0]] }, { '<': [{ var: field }, values[1]] }],\n }) || /* istanbul ignore next */ false\n );\n }\n } else if (isJsonLogicBetweenInclusive(logic) && isRQBJsonLogicVar(logic['<='][1])) {\n field = logic['<='][1].var;\n operator = 'between';\n const values = [logic['<='][0], logic['<='][2]];\n if (logic['<='].every(v => isRQBJsonLogicVar(v))) {\n const vars = values as RQBJsonLogicVar[];\n valueSource = 'field';\n const fieldList = vars.map(el => el.var).filter(sf => fieldIsValid(field, operator, sf));\n value = listsAsArrays ? fieldList : joinWith(fieldList, ',');\n } else {\n // istanbul ignore else\n if (\n values.every(el => typeof el === 'string') ||\n values.every(el => typeof el === 'number') ||\n values.every(el => typeof el === 'boolean')\n ) {\n value = listsAsArrays\n ? values\n : joinWith(\n values.map(el => `${el}`),\n ','\n );\n }\n }\n\n if (fieldIsValid(field, operator) && value.length >= 2) {\n rule = { field, operator, value, valueSource };\n }\n } else if (isJsonLogicInArray(logic) && isRQBJsonLogicVar(keyValue[0])) {\n field = keyValue[0].var;\n operator = 'in';\n if (logic.in[1].every(v => isRQBJsonLogicVar(v))) {\n valueSource = 'field';\n const fieldList = logic.in[1]\n .map(el => el.var)\n .filter(sf => fieldIsValid(field, operator, sf));\n value = listsAsArrays ? fieldList : joinWith(fieldList, ',');\n } else {\n // istanbul ignore else\n if (\n logic.in[1].every(el => typeof el === 'string') ||\n logic.in[1].every(el => typeof el === 'number') ||\n logic.in[1].every(el => typeof el === 'boolean')\n ) {\n value = listsAsArrays\n ? logic.in[1]\n : joinWith(\n logic.in[1].map(el => `${el}`),\n ','\n );\n }\n }\n\n // istanbul ignore else\n if (value.length > 0) {\n rule = { field, operator, value, valueSource };\n }\n }\n\n return rule ? (outermost ? { combinator: 'and', rules: [rule] } : rule) : false;\n }\n\n const prepare = options.generateIDs ? prepareRuleGroup : <T>(g: T) => g;\n\n let logicRoot = rqbJsonLogic;\n if (typeof rqbJsonLogic === 'string') {\n try {\n logicRoot = JSON.parse(rqbJsonLogic);\n } catch {\n return prepare(emptyRuleGroup);\n }\n }\n\n const result = processLogic(logicRoot, true);\n const finalQuery: DefaultRuleGroupType = result || emptyRuleGroup;\n return prepare(\n options.independentCombinators ? convertToIC<DefaultRuleGroupTypeIC>(finalQuery) : finalQuery\n );\n}\n\nexport { parseJsonLogic };\n"],"mappings":";;;;;;AA2BA,MAAa,kBACX,UAEA,OAAO,MAAM,IAAI,SAAS;AAC5B,MAAa,qBAAqB,UAChC,eAAe,MAAM,IAAI,OAAO,MAAM,QAAQ;AAChD,MAAa,oBAAoB,UAC/B,OAAO,MAAM,IAAI,QAAQ;AAC3B,MAAa,0BAA0B,UACrC,OAAO,MAAM,IAAI,SAAS;AAC5B,MAAa,uBAAuB,UAClC,OAAO,MAAM,IAAI,QAAQ;AAC3B,MAAa,6BAA6B,UACxC,OAAO,MAAM,IAAI,SAAS;AAC5B,MAAa,uBAAuB,UAClC,OAAO,MAAM,IAAI,OAAO;AAC1B,MAAa,6BAA6B,UACxC,OAAO,MAAM,IAAI,QAAQ;AAC3B,MAAa,iBACX,UAEA,OAAO,MAAM,IAAI,QAAQ;AAC3B,MAAa,kBACX,UAEA,OAAO,MAAM,IAAI,SAAS;AAC5B,MAAa,0BACX,UAEA,OAAO,MAAM,IAAI,OAAO;AAC1B,MAAa,iCACX,UAEA,OAAO,MAAM,IAAI,QAAQ;AAC3B,MAAa,uBACX,UAEA,OAAO,MAAM,IAAI,OAAO,SAAS,MAAM,KAAK,WAAW;AACzD,MAAa,8BACX,UAEA,OAAO,MAAM,IAAI,QAAQ,SAAS,MAAM,MAAM,WAAW;AAC3D,MAAa,sBACX,UAEA,OAAO,MAAM,IAAI,QAAQ,SAAS,MAAM,QAAQ,MAAM,GAAG,GAAG;AAC9D,MAAa,uBACX,UAEA,OAAO,MAAM,IAAI,QAAQ,SAAS,CAAC,MAAM,QAAQ,MAAM,GAAG,GAAG;AAC/D,MAAa,kBACX,UAEA,OAAO,MAAM,IAAI,SAAS;AAC5B,MAAa,mBACX,UAEA,OAAO,MAAM,IAAI,UAAU;AAC7B,MAAa,mBACX,UAEA,OAAO,MAAM,IAAI,UAAU;AAG7B,MAAa,+BAA+B,UAC1C,OAAO,MAAM,IAAI,OAAO,SAAS,MAAM,QAAQ,MAAM,KAAK,IAAI,MAAM,KAAK,WAAW;AACtF,MAAa,+BAA+B,UAC1C,OAAO,MAAM,IAAI,QAAQ,SAAS,MAAM,QAAQ,MAAM,MAAM,IAAI,MAAM,MAAM,WAAW;AAGzF,MAAa,4BAA4B,UACvC,OAAO,MAAM,IAAI,gBAAgB;AACnC,MAAa,0BAA0B,UACrC,OAAO,MAAM,IAAI,cAAc;;;;AC5CjC,MAAMA,iBAAuC;CAAE,YAAY;CAAO,OAAO,EAAE;CAAE;AA8B7E,SAAS,eACP,cACA,UAAiC,EAAE,EACV;CACzB,MAAM,aAAa,eAAe,QAAQ,OAAO;CACjD,MAAM,EAAE,iBAAiB,eAAe,wBAAwB;CAEhE,MAAM,gBACJ,WACA,UACA,yBAEA,iBAAiB;EACf;EACA;EACA;EACA;EACA;EACD,CAAC;CAUJ,SAAS,aACP,OACA,WACgD;AAEhD,MAAI,aAAa,CAAC,OAAO,MAAM,CAC7B,QAAO;EAET,MAAM,CAAC,KAAK,YAAY,OAAO,QAAQ,SAAS,EAAE,CAAC,GAAG,MAAM,EAAE;AAG9D,MAAI,uBAAuB,WAAW,oBAAoB,CAAC,SAAS,IAAI,EAAE;GACxE,MAAMC,SAAO,oBAAoB,KAAK,SAAS;AAC/C,UAAOA,SACH,aAAa,CAAC,YAAYA,OAAK,GAC7B;IAAE,YAAY;IAAO,OAAO,CAACA,OAAK;IAAE,GACpCA,SACF;;AAIN,MAAI,eAAe,MAAM,CACvB,QAAO;GACL,YAAY;GACZ,OAAO,MAAM,IAAI,KAAI,MAAK,aAAa,EAAE,CAAC,CAAC,OAAO,QAAQ;GAI3D;WACQ,cAAc,MAAM,CAC7B,QAAO;GACL,YAAY;GACZ,OAAO,MAAM,GAAG,KAAI,MAAK,aAAa,EAAE,CAAC,CAAC,OAAO,QAAQ;GAI1D;WACQ,oBAAoB,MAAM,EAAE;GACrC,MAAMA,SAAO,aAAa,MAAM,KAAK;AACrC,OAAIA,QAAM;AACR,QACE,CAAC,gBAAgBA,OAAK,KACrBA,OAAK,aAAa,aACjBA,OAAK,aAAa,QAClBA,OAAK,aAAa,cAClBA,OAAK,aAAa,gBAClBA,OAAK,aAAa,aACpB;KACA,MAAM,UAAU;MAAE,GAAGA;MAAM,UAAU,2BAA2BA,OAAK;MAAW;AAChF,SAAI,UACF,QAAO;MAAE,YAAY;MAAO,OAAO,CAAC,QAAQ;MAAE;AAEhD,YAAO;eACE,4BAA4B,MAAM,KAAK,IAAI,gBAAgBA,OAAK,CACzE,QAAO;KAAE,GAAGA;KAAM,KAAK;KAAM;AAE/B,WAAO;KAAE,YAAY;KAAO,OAAO,CAACA,OAAK;KAAE,KAAK;KAAM;;AAExD,UAAO;aACE,0BAA0B,MAAM,CAEzC,QADa,aAAa,MAAM,MAAM,IACvB;EAIjB,IAAIC,OAAgC;EACpC,IAAI,QAAQ;EACZ,IAAIC,WAAgC;EAEpC,IAAIC,QAAa;EACjB,IAAIC,cAAuC;AAE3C,MAEE,iBAAiB,MAAM,IACvB,uBAAuB,MAAM,IAC7B,oBAAoB,MAAM,IAC1B,0BAA0B,MAAM,IAChC,uBAAuB,MAAM,IAC7B,8BAA8B,MAAM,IACpC,oBAAoB,MAAM,IAC1B,2BAA2B,MAAM,IACjC,oBAAoB,MAAM,IAC1B,yBAAyB,MAAM,IAC/B,uBAAuB,MAAM,EAC7B;GACA,MAAM,CAAC,OAAO,UAAU;AACxB,OAAI,kBAAkB,MAAM,IAAI,CAAC,OAAO,OAAO,EAAE;AAC/C,YAAQ,MAAM;AACd,YAAQ;cACC,CAAC,OAAO,MAAM,IAAI,kBAAkB,OAAO,EAAE;AACtD,YAAQ,OAAO;AACf,YAAQ;cACC,kBAAkB,MAAM,IAAI,kBAAkB,OAAO,EAAE;AAChE,YAAQ,MAAM;AACd,YAAQ,OAAO;AACf,kBAAc;SAEd,QAAO;AAIT,OAAI,iBAAiB,MAAM,IAAI,uBAAuB,MAAM,CAC1D,YAAW,UAAU,OAAO,SAAS;YAC5B,oBAAoB,MAAM,IAAI,0BAA0B,MAAM,CACvE,YAAW,UAAU,OAAO,YAAY;YAC/B,oBAAoB,MAAM,CACnC,YAAW;YACF,yBAAyB,MAAM,CACxC,YAAW;YACF,uBAAuB,MAAM,CACtC,YAAW;OAEX,YAAW;AAGb,OAAI,aAAa,OAAO,UAAU,gBAAgB,UAAU,QAAQ,OAAU,CAC5E,QAAO;IAAE;IAAO;IAAU;IAAO;IAAa;aAG/C,eAAe,MAAM,IAAI,kBAAkB,MAAM,OAAO,GAAG,IAC3D,gBAAgB,MAAM,IAAI,kBAAkB,MAAM,QAAQ,GAAG,IAC7D,gBAAgB,MAAM,IAAI,kBAAkB,MAAM,QAAQ,GAAG,EAC9D;GAGA,MAAMC,QAAqB,EACzB,MAAM,gBAAgB,MAAM,GAAG,SAAS,gBAAgB,MAAM,GAAG,SAAS,OAC3E;GAGD,MAAM,CAAC,EAAE,KAAKC,WAAS,aAAc,MAAc,MAAM;GACzD,MAAM,UAAU,aAAa,UAAU;AAGvC,OAAI,CAAC,QAAS,QAAO;AAErB,UAAO;IACL;IACA,UAAU;IACV;IACA,OAAO,YAAY,QAAQ,GAAG,UAAU;KAAE,YAAY;KAAO,OAAO,CAAC,QAAQ;KAAE;IAChF;aACQ,4BAA4B,MAAM,IAAI,kBAAkB,MAAM,KAAK,GAAG,EAAE;AACjF,WAAQ,MAAM,KAAK,GAAG;GACtB,MAAM,SAAS,CAAC,MAAM,KAAK,IAAI,MAAM,KAAK,GAAG;;AAE7C,OACE,OAAO,OAAM,MAAK,kBAAkB,EAAE,CAAC,IACvC,OAAO,OAAM,OAAM,OAAO,OAAO,SAAS,IAC1C,OAAO,OAAM,OAAM,OAAO,OAAO,SAAS,IAC1C,OAAO,OAAM,OAAM,OAAO,OAAO,UAAU,CAE3C,QACE,aAAa,EACX,KAAK,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,KAAK,OAAO,EAAE,OAAO,GAAG,EAAE,CAAC,EAClF,CAAC,IAA+B;aAG5B,4BAA4B,MAAM,IAAI,kBAAkB,MAAM,MAAM,GAAG,EAAE;AAClF,WAAQ,MAAM,MAAM,GAAG;AACvB,cAAW;GACX,MAAM,SAAS,CAAC,MAAM,MAAM,IAAI,MAAM,MAAM,GAAG;AAC/C,OAAI,MAAM,MAAM,OAAM,MAAK,kBAAkB,EAAE,CAAC,EAAE;IAChD,MAAM,OAAO;AACb,kBAAc;IACd,MAAM,YAAY,KAAK,KAAI,OAAM,GAAG,IAAI,CAAC,QAAO,OAAM,aAAa,OAAO,UAAU,GAAG,CAAC;AACxF,YAAQ,gBAAgB,YAAY,SAAS,WAAW,IAAI;cAI1D,OAAO,OAAM,OAAM,OAAO,OAAO,SAAS,IAC1C,OAAO,OAAM,OAAM,OAAO,OAAO,SAAS,IAC1C,OAAO,OAAM,OAAM,OAAO,OAAO,UAAU,CAE3C,SAAQ,gBACJ,SACA,SACE,OAAO,KAAI,OAAM,GAAG,KAAK,EACzB,IACD;AAIT,OAAI,aAAa,OAAO,SAAS,IAAI,MAAM,UAAU,EACnD,QAAO;IAAE;IAAO;IAAU;IAAO;IAAa;aAEvC,mBAAmB,MAAM,IAAI,kBAAkB,SAAS,GAAG,EAAE;AACtE,WAAQ,SAAS,GAAG;AACpB,cAAW;AACX,OAAI,MAAM,GAAG,GAAG,OAAM,MAAK,kBAAkB,EAAE,CAAC,EAAE;AAChD,kBAAc;IACd,MAAM,YAAY,MAAM,GAAG,GACxB,KAAI,OAAM,GAAG,IAAI,CACjB,QAAO,OAAM,aAAa,OAAO,UAAU,GAAG,CAAC;AAClD,YAAQ,gBAAgB,YAAY,SAAS,WAAW,IAAI;cAI1D,MAAM,GAAG,GAAG,OAAM,OAAM,OAAO,OAAO,SAAS,IAC/C,MAAM,GAAG,GAAG,OAAM,OAAM,OAAO,OAAO,SAAS,IAC/C,MAAM,GAAG,GAAG,OAAM,OAAM,OAAO,OAAO,UAAU,CAEhD,SAAQ,gBACJ,MAAM,GAAG,KACT,SACE,MAAM,GAAG,GAAG,KAAI,OAAM,GAAG,KAAK,EAC9B,IACD;;AAKT,OAAI,MAAM,SAAS,EACjB,QAAO;IAAE;IAAO;IAAU;IAAO;IAAa;;AAIlD,SAAO,OAAQ,YAAY;GAAE,YAAY;GAAO,OAAO,CAAC,KAAK;GAAE,GAAG,OAAQ;;CAG5E,MAAM,UAAU,QAAQ,cAAc,oBAAuB,MAAS;CAEtE,IAAI,YAAY;AAChB,KAAI,OAAO,iBAAiB,SAC1B,KAAI;AACF,cAAY,KAAK,MAAM,aAAa;SAC9B;AACN,SAAO,QAAQ,eAAe;;CAKlC,MAAMC,aADS,aAAa,WAAW,KAAK,IACO;AACnD,QAAO,QACL,QAAQ,yBAAyB,YAAoC,WAAW,GAAG,WACpF"}
1
+ {"version":3,"file":"parseJsonLogic.mjs","names":[],"sources":["../src/utils/parseJsonLogic/utils.ts","../src/utils/parseJsonLogic/parseJsonLogic.ts"],"sourcesContent":["import type {\n JsonLogicAll,\n JsonLogicAnd,\n JsonLogicDoubleNegation,\n JsonLogicEqual,\n JsonLogicGreaterThan,\n JsonLogicGreaterThanOrEqual,\n JsonLogicInArray,\n JsonLogicInString,\n JsonLogicLessThan,\n JsonLogicLessThanOrEqual,\n JsonLogicNegation,\n JsonLogicNone,\n JsonLogicNotEqual,\n JsonLogicOr,\n JsonLogicSome,\n JsonLogicStrictEqual,\n JsonLogicStrictNotEqual,\n JsonLogicVar,\n RQBJsonLogicEndsWith,\n RQBJsonLogicStartsWith,\n RQBJsonLogicVar,\n} from '../../types';\nimport { isPojo } from '../misc';\nimport type { JsonLogicBetweenExclusive, JsonLogicBetweenInclusive } from './types';\n\n// Standard JsonLogic operations\nexport const isJsonLogicVar = (\n logic: unknown\n): logic is JsonLogicVar<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'var' in logic;\nexport const isRQBJsonLogicVar = (logic: unknown): logic is RQBJsonLogicVar =>\n isJsonLogicVar(logic) && typeof logic.var === 'string';\nexport const isJsonLogicEqual = (logic: unknown): logic is JsonLogicEqual =>\n isPojo(logic) && '==' in logic;\nexport const isJsonLogicStrictEqual = (logic: unknown): logic is JsonLogicStrictEqual =>\n isPojo(logic) && '===' in logic;\nexport const isJsonLogicNotEqual = (logic: unknown): logic is JsonLogicNotEqual =>\n isPojo(logic) && '!=' in logic;\nexport const isJsonLogicStrictNotEqual = (logic: unknown): logic is JsonLogicStrictNotEqual =>\n isPojo(logic) && '!==' in logic;\nexport const isJsonLogicNegation = (logic: unknown): logic is JsonLogicNegation =>\n isPojo(logic) && '!' in logic;\nexport const isJsonLogicDoubleNegation = (logic: unknown): logic is JsonLogicDoubleNegation =>\n isPojo(logic) && '!!' in logic;\nexport const isJsonLogicOr = (\n logic: unknown\n): logic is JsonLogicOr<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'or' in logic;\nexport const isJsonLogicAnd = (\n logic: unknown\n): logic is JsonLogicAnd<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'and' in logic;\nexport const isJsonLogicGreaterThan = (\n logic: unknown\n): logic is JsonLogicGreaterThan<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '>' in logic;\nexport const isJsonLogicGreaterThanOrEqual = (\n logic: unknown\n): logic is JsonLogicGreaterThanOrEqual<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '>=' in logic;\nexport const isJsonLogicLessThan = (\n logic: unknown\n): logic is JsonLogicLessThan<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '<' in logic && logic['<'].length === 2;\nexport const isJsonLogicLessThanOrEqual = (\n logic: unknown\n): logic is JsonLogicLessThanOrEqual<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && '<=' in logic && logic['<='].length === 2;\nexport const isJsonLogicInArray = (\n logic: unknown\n): logic is JsonLogicInArray<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'in' in logic && Array.isArray(logic.in[1]);\nexport const isJsonLogicInString = (\n logic: unknown\n): logic is JsonLogicInString<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'in' in logic && !Array.isArray(logic.in[1]);\nexport const isJsonLogicAll = (\n logic: unknown\n): logic is JsonLogicAll<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'all' in logic;\nexport const isJsonLogicNone = (\n logic: unknown\n): logic is JsonLogicNone<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'none' in logic;\nexport const isJsonLogicSome = (\n logic: unknown\n): logic is JsonLogicSome<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n isPojo(logic) && 'some' in logic;\n\n// \"Between\" operations are special cases of '<' and '<='\nexport const isJsonLogicBetweenExclusive = (logic: unknown): logic is JsonLogicBetweenExclusive =>\n isPojo(logic) && '<' in logic && Array.isArray(logic['<']) && logic['<'].length === 3;\nexport const isJsonLogicBetweenInclusive = (logic: unknown): logic is JsonLogicBetweenInclusive =>\n isPojo(logic) && '<=' in logic && Array.isArray(logic['<=']) && logic['<='].length === 3;\n\n// RQB extensions\nexport const isRQBJsonLogicStartsWith = (logic: unknown): logic is RQBJsonLogicStartsWith =>\n isPojo(logic) && 'startsWith' in logic;\nexport const isRQBJsonLogicEndsWith = (logic: unknown): logic is RQBJsonLogicEndsWith =>\n isPojo(logic) && 'endsWith' in logic;\n\n// Type guards for unused JsonLogic operations\n\n// import type {\n// JsonLogicCat,\n// JsonLogicDifference,\n// JsonLogicFilter,\n// JsonLogicIf,\n// JsonLogicLog,\n// JsonLogicMap,\n// JsonLogicMax,\n// JsonLogicMerge,\n// JsonLogicMin,\n// JsonLogicMissing,\n// JsonLogicMissingSome,\n// JsonLogicProduct,\n// JsonLogicQuotient,\n// JsonLogicReduce,\n// JsonLogicRemainder,\n// JsonLogicSubstr,\n// JsonLogicSum,\n// } from '../../types';\n//\n// export const isJsonLogicMissing = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMissing<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'missing' in logic;\n// export const isJsonLogicMissingSome = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMissingSome<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'missing_some' in logic;\n// export const isJsonLogicIf = (logic: RQBJsonLogic): logic is JsonLogicIf =>\n// isPojo(logic) && 'if' in logic;\n// export const isJsonLogicMax = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMax<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'max' in logic;\n// export const isJsonLogicMin = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMin<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'min' in logic;\n// export const isJsonLogicSum = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicSum<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '+' in logic;\n// export const isJsonLogicDifference = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicDifference<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '-' in logic;\n// export const isJsonLogicProduct = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicProduct<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '*' in logic;\n// export const isJsonLogicQuotient = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicQuotient<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '/' in logic;\n// export const isJsonLogicRemainder = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicRemainder<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && '%' in logic;\n// export const isJsonLogicMap = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMap<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'map' in logic;\n// export const isJsonLogicFilter = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicFilter<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'filter' in logic;\n// export const isJsonLogicReduce = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicReduce<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'reduce' in logic;\n// export const isJsonLogicMerge = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicMerge<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'merge' in logic;\n// export const isJsonLogicCat = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicCat<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'cat' in logic;\n// export const isJsonLogicSubstr = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicSubstr<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'substr' in logic;\n// export const isJsonLogicLog = (\n// logic: RQBJsonLogic\n// ): logic is JsonLogicLog<RQBJsonLogicStartsWith | RQBJsonLogicEndsWith> =>\n// isPojo(logic) && 'log' in logic;\n","import type { Except } from 'type-fest';\nimport { defaultOperatorNegationMap } from '../../defaults';\nimport type {\n DefaultOperatorName,\n DefaultRuleGroupType,\n DefaultRuleGroupTypeAny,\n DefaultRuleGroupTypeIC,\n DefaultRuleType,\n MatchConfig,\n RQBJsonLogic,\n RQBJsonLogicVar,\n RuleGroupTypeAny,\n RuleType,\n ValueSource,\n} from '../../types';\nimport type { ParserCommonOptions } from '../../types/import';\nimport { joinWith } from '../arrayUtils';\nimport { convertToIC } from '../convertQuery';\nimport { isRuleGroup, isRuleGroupType } from '../isRuleGroup';\nimport { isPojo } from '../misc';\nimport { objectKeys } from '../objectUtils';\nimport { fieldIsValidUtil, getFieldsArray } from '../parserUtils';\nimport { prepareRuleGroup } from '../prepareQueryObjects';\nimport {\n isJsonLogicAll,\n isJsonLogicAnd,\n isJsonLogicBetweenExclusive,\n isJsonLogicBetweenInclusive,\n isJsonLogicDoubleNegation,\n isJsonLogicEqual,\n isJsonLogicGreaterThan,\n isJsonLogicGreaterThanOrEqual,\n isJsonLogicInArray,\n isJsonLogicInString,\n isJsonLogicLessThan,\n isJsonLogicLessThanOrEqual,\n isJsonLogicNegation,\n isJsonLogicNone,\n isJsonLogicNotEqual,\n isJsonLogicOr,\n isJsonLogicSome,\n isJsonLogicStrictEqual,\n isJsonLogicStrictNotEqual,\n isRQBJsonLogicEndsWith,\n isRQBJsonLogicStartsWith,\n isRQBJsonLogicVar,\n} from './utils';\n\n/**\n * Options object for {@link parseJsonLogic}.\n */\nexport interface ParseJsonLogicOptions extends ParserCommonOptions {\n // oxlint-disable-next-line typescript/no-explicit-any\n jsonLogicOperations?: Record<string, (value: any) => RuleType | RuleGroupTypeAny | false>;\n}\n\nconst emptyRuleGroup: DefaultRuleGroupType = { combinator: 'and', rules: [] };\n\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseJsonLogic(rqbJsonLogic: string | RQBJsonLogic): DefaultRuleGroupType;\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: Except<ParseJsonLogicOptions, 'independentCombinators'> & {\n independentCombinators?: false;\n }\n): DefaultRuleGroupType;\n/**\n * Converts a JsonLogic object into a query suitable for the\n * {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupTypeIC DefaultRuleGroupTypeIC}).\n */\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: Except<ParseJsonLogicOptions, 'independentCombinators'> & {\n independentCombinators: true;\n }\n): DefaultRuleGroupTypeIC;\nfunction parseJsonLogic(\n rqbJsonLogic: string | RQBJsonLogic,\n options: ParseJsonLogicOptions = {}\n): DefaultRuleGroupTypeAny {\n const fieldsFlat = getFieldsArray(options.fields);\n const { getValueSources, listsAsArrays, jsonLogicOperations } = options;\n\n const fieldIsValid = (\n fieldName: string,\n operator: DefaultOperatorName,\n subordinateFieldName?: string\n ) =>\n fieldIsValidUtil({\n fieldName,\n fieldsFlat,\n operator,\n subordinateFieldName,\n getValueSources,\n });\n\n // Overload 1: Always return a rule group or false for the outermost logic object\n function processLogic(logic: RQBJsonLogic, outermost: true): DefaultRuleGroupType | false;\n // Overload 2: If not the outermost object, return value could also be a rule\n function processLogic(\n logic: RQBJsonLogic,\n outermost?: false\n ): DefaultRuleGroupType | DefaultRuleType | false;\n // Implementation\n function processLogic(\n logic: RQBJsonLogic,\n outermost?: boolean\n ): DefaultRuleGroupType | DefaultRuleType | false {\n // Bail if the outermost logic is not a plain object\n if (outermost && !isPojo(logic)) {\n return false;\n }\n const [key, keyValue] = Object.entries(logic || {})?.[0] ?? [];\n\n // Custom operations process logic\n if (jsonLogicOperations && objectKeys(jsonLogicOperations).includes(key)) {\n const rule = jsonLogicOperations[key](keyValue) as DefaultRuleType;\n return rule\n ? outermost && !isRuleGroup(rule)\n ? { combinator: 'and', rules: [rule] }\n : rule\n : false;\n }\n\n // Rule groups\n if (isJsonLogicAnd(logic)) {\n return {\n combinator: 'and',\n rules: logic.and.map(l => processLogic(l)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[],\n };\n } else if (isJsonLogicOr(logic)) {\n return {\n combinator: 'or',\n rules: logic.or.map(l => processLogic(l)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[],\n };\n } else if (isJsonLogicNegation(logic)) {\n const rule = processLogic(logic['!']);\n if (rule) {\n if (\n !isRuleGroupType(rule) &&\n (rule.operator === 'between' ||\n rule.operator === 'in' ||\n rule.operator === 'contains' ||\n rule.operator === 'beginsWith' ||\n rule.operator === 'endsWith')\n ) {\n const newRule = { ...rule, operator: defaultOperatorNegationMap[rule.operator] };\n if (outermost) {\n return { combinator: 'and', rules: [newRule] };\n }\n return newRule;\n } else if (isJsonLogicBetweenExclusive(logic['!']) || isRuleGroupType(rule)) {\n return { ...rule, not: true };\n }\n return { combinator: 'and', rules: [rule], not: true };\n }\n return false;\n } else if (isJsonLogicDoubleNegation(logic)) {\n const rule = processLogic(logic['!!']);\n return rule || false;\n }\n\n // All other keys represent rules\n let rule: DefaultRuleType | false = false;\n let field = '';\n let operator: DefaultOperatorName = '=';\n // oxlint-disable-next-line typescript/no-explicit-any\n let value: any = '';\n let valueSource: ValueSource | undefined = undefined;\n\n if (\n // Basic boolean operations\n isJsonLogicEqual(logic) ||\n isJsonLogicStrictEqual(logic) ||\n isJsonLogicNotEqual(logic) ||\n isJsonLogicStrictNotEqual(logic) ||\n isJsonLogicGreaterThan(logic) ||\n isJsonLogicGreaterThanOrEqual(logic) ||\n isJsonLogicLessThan(logic) ||\n isJsonLogicLessThanOrEqual(logic) ||\n isJsonLogicInString(logic) ||\n isRQBJsonLogicStartsWith(logic) ||\n isRQBJsonLogicEndsWith(logic)\n ) {\n const [first, second] = keyValue;\n if (isRQBJsonLogicVar(first) && !isPojo(second)) {\n field = first.var;\n value = second;\n } else if (!isPojo(first) && isRQBJsonLogicVar(second)) {\n field = second.var;\n value = first;\n } else if (isRQBJsonLogicVar(first) && isRQBJsonLogicVar(second)) {\n field = first.var;\n value = second.var;\n valueSource = 'field';\n } else {\n return false;\n }\n\n // Translate operator if necessary\n if (isJsonLogicEqual(logic) || isJsonLogicStrictEqual(logic)) {\n operator = value === null ? 'null' : '=';\n } else if (isJsonLogicNotEqual(logic) || isJsonLogicStrictNotEqual(logic)) {\n operator = value === null ? 'notNull' : '!=';\n } else if (isJsonLogicInString(logic)) {\n operator = 'contains';\n } else if (isRQBJsonLogicStartsWith(logic)) {\n operator = 'beginsWith';\n } else if (isRQBJsonLogicEndsWith(logic)) {\n operator = 'endsWith';\n } else {\n operator = key as DefaultOperatorName;\n }\n\n if (fieldIsValid(field, operator, valueSource === 'field' ? value : undefined)) {\n rule = { field, operator, value, valueSource };\n }\n } else if (\n (isJsonLogicAll(logic) && isRQBJsonLogicVar(logic['all'][0])) ||\n (isJsonLogicNone(logic) && isRQBJsonLogicVar(logic['none'][0])) ||\n (isJsonLogicSome(logic) && isRQBJsonLogicVar(logic['some'][0]))\n ) {\n // The array coverage functions must have a field as their first element.\n // Otherwise we'd be comparing values to values, which is not supported.\n const match: MatchConfig = {\n mode: isJsonLogicNone(logic) ? 'none' : isJsonLogicSome(logic) ? 'some' : 'all',\n };\n\n // oxlint-disable-next-line typescript/no-explicit-any\n const [{ var: fld }, operation] = (logic as any)[match.mode];\n const matcher = processLogic(operation);\n\n // TODO: Support operations that evaluate array member properties\n if (!matcher) return false;\n\n rule = {\n field: fld,\n operator: '=',\n match,\n value: isRuleGroup(matcher) ? matcher : { combinator: 'and', rules: [matcher] },\n };\n } else if (isJsonLogicBetweenExclusive(logic) && isRQBJsonLogicVar(logic['<'][1])) {\n field = logic['<'][1].var;\n const values = [logic['<'][0], logic['<'][2]];\n // istanbul ignore else\n if (\n values.every(v => isRQBJsonLogicVar(v)) ||\n values.every(el => typeof el === 'string') ||\n values.every(el => typeof el === 'number') ||\n values.every(el => typeof el === 'boolean')\n ) {\n return (\n processLogic({\n and: [{ '>': [{ var: field }, values[0]] }, { '<': [{ var: field }, values[1]] }],\n }) || /* istanbul ignore next */ false\n );\n }\n } else if (isJsonLogicBetweenInclusive(logic) && isRQBJsonLogicVar(logic['<='][1])) {\n field = logic['<='][1].var;\n operator = 'between';\n const values = [logic['<='][0], logic['<='][2]];\n if (logic['<='].every(v => isRQBJsonLogicVar(v))) {\n const vars = values as RQBJsonLogicVar[];\n valueSource = 'field';\n const fieldList = vars.map(el => el.var).filter(sf => fieldIsValid(field, operator, sf));\n value = listsAsArrays ? fieldList : joinWith(fieldList, ',');\n } else {\n // istanbul ignore else\n if (\n values.every(el => typeof el === 'string') ||\n values.every(el => typeof el === 'number') ||\n values.every(el => typeof el === 'boolean')\n ) {\n value = listsAsArrays\n ? values\n : joinWith(\n values.map(el => `${el}`),\n ','\n );\n }\n }\n\n if (fieldIsValid(field, operator) && value.length >= 2) {\n rule = { field, operator, value, valueSource };\n }\n } else if (isJsonLogicInArray(logic) && isRQBJsonLogicVar(keyValue[0])) {\n field = keyValue[0].var;\n operator = 'in';\n if (logic.in[1].every(v => isRQBJsonLogicVar(v))) {\n valueSource = 'field';\n const fieldList = logic.in[1]\n .map(el => el.var)\n .filter(sf => fieldIsValid(field, operator, sf));\n value = listsAsArrays ? fieldList : joinWith(fieldList, ',');\n } else {\n // istanbul ignore else\n if (\n logic.in[1].every(el => typeof el === 'string') ||\n logic.in[1].every(el => typeof el === 'number') ||\n logic.in[1].every(el => typeof el === 'boolean')\n ) {\n value = listsAsArrays\n ? logic.in[1]\n : joinWith(\n logic.in[1].map(el => `${el}`),\n ','\n );\n }\n }\n\n // istanbul ignore else\n if (value.length > 0) {\n rule = { field, operator, value, valueSource };\n }\n }\n\n return rule ? (outermost ? { combinator: 'and', rules: [rule] } : rule) : false;\n }\n\n const prepare = options.generateIDs ? prepareRuleGroup : <T>(g: T) => g;\n\n let logicRoot = rqbJsonLogic;\n if (typeof rqbJsonLogic === 'string') {\n try {\n logicRoot = JSON.parse(rqbJsonLogic);\n } catch {\n return prepare(emptyRuleGroup);\n }\n }\n\n const result = processLogic(logicRoot, true);\n const finalQuery: DefaultRuleGroupType = result || emptyRuleGroup;\n return prepare(\n options.independentCombinators ? convertToIC<DefaultRuleGroupTypeIC>(finalQuery) : finalQuery\n );\n}\n\nexport { parseJsonLogic };\n"],"mappings":"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"}
@@ -1,8 +1,7 @@
1
- import { C as Except, _ as RuleGroupType, d as DefaultRuleGroupTypeIC, g as DefaultRuleGroupType, v as RuleType } from "./basic-GFsWfi0Z.mjs";
2
- import { t as ParserCommonOptions } from "./import-DRmutNSr.mjs";
1
+ import { C as Except, _ as RuleGroupType, d as DefaultRuleGroupTypeIC, g as DefaultRuleGroupType, v as RuleType } from "./basic-CNIjb6rI.mjs";
2
+ import { t as ParserCommonOptions } from "./import-Bltb2mT4.mjs";
3
3
 
4
4
  //#region src/utils/parseMongoDB/parseMongoDB.d.ts
5
-
6
5
  /**
7
6
  * Options object for {@link parseMongoDB}.
8
7
  */
@@ -1,8 +1,7 @@
1
- import { C as Except, _ as RuleGroupType, d as DefaultRuleGroupTypeIC, g as DefaultRuleGroupType, v as RuleType } from "./basic-Dxm6jWFu.js";
2
- import { t as ParserCommonOptions } from "./import-D8M7awTx.js";
1
+ import { C as Except, _ as RuleGroupType, d as DefaultRuleGroupTypeIC, g as DefaultRuleGroupType, v as RuleType } from "./basic-BXJVfD0P.js";
2
+ import { t as ParserCommonOptions } from "./import-B5Iq8XmL.js";
3
3
 
4
4
  //#region src/utils/parseMongoDB/parseMongoDB.d.ts
5
-
6
5
  /**
7
6
  * Options object for {@link parseMongoDB}.
8
7
  */
@@ -1,8 +1,8 @@
1
- const require_utils = require('./utils-CR1ToTMW.js');
2
- const require_isRuleGroup = require('./isRuleGroup-Cjk1Q2mj.js');
3
- const require_convertQuery = require('./convertQuery-DRldbzhZ.js');
4
- const require_prepareQueryObjects = require('./prepareQueryObjects-BxWvIPI4.js');
5
-
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_utils = require("./utils-CZRhzje-.js");
3
+ const require_objectUtils = require("./objectUtils-ButT0Mng.js");
4
+ const require_convertQuery = require("./convertQuery-J8LpTG-7.js");
5
+ const require_prepareQueryObjects = require("./prepareQueryObjects-DO3qXriW.js");
6
6
  //#region src/utils/parseMongoDB/utils.ts
7
7
  const getRegExStr = (re) => typeof re === "string" ? re : re.source;
8
8
  const isPrimitive = (v) => typeof v === "string" || typeof v === "number" || typeof v === "boolean";
@@ -14,7 +14,6 @@ const mongoDbToRqbOperatorMap = {
14
14
  $lt: "<",
15
15
  $lte: "<="
16
16
  };
17
-
18
17
  //#endregion
19
18
  //#region src/utils/parseMongoDB/parseMongoDB.ts
20
19
  const emptyRuleGroup = {
@@ -94,11 +93,11 @@ function parseMongoDB(mongoDbRules, options = {}) {
94
93
  let field = "";
95
94
  // istanbul ignore else
96
95
  if (key === "$and") {
97
- if (!Array.isArray(keyValue) || keyValue.length === 0 || !keyValue.every((v) => require_isRuleGroup.isPojo(v))) return false;
98
- if (keyValue.length === 2 && keyValue.every((kv) => require_utils.objectKeys(kv).length === 1)) {
96
+ if (!Array.isArray(keyValue) || keyValue.length === 0 || !keyValue.every((v) => require_objectUtils.isPojo(v))) return false;
97
+ if (keyValue.length === 2 && keyValue.every((kv) => require_objectUtils.objectKeys(kv).length === 1)) {
99
98
  const [rule1, rule2] = keyValue;
100
- const [ruleKey1, ruleKey2] = keyValue.map((kv) => require_utils.objectKeys(kv)[0]);
101
- if (ruleKey1 === ruleKey2 && require_isRuleGroup.isPojo(rule1[ruleKey1]) && require_utils.objectKeys(rule1[ruleKey1]).length === 1 && require_isRuleGroup.isPojo(rule2[ruleKey2]) && require_utils.objectKeys(rule2[ruleKey2]).length === 1 && ("$gte" in rule1[ruleKey1] && "$lte" in rule2[ruleKey2] && rule2[ruleKey2].$lte >= rule1[ruleKey1].$gte || "$lte" in rule1[ruleKey1] && "$gte" in rule2[ruleKey2] && rule1[ruleKey1].$lte >= rule2[ruleKey2].$gte)) {
99
+ const [ruleKey1, ruleKey2] = keyValue.map((kv) => require_objectUtils.objectKeys(kv)[0]);
100
+ if (ruleKey1 === ruleKey2 && require_objectUtils.isPojo(rule1[ruleKey1]) && require_objectUtils.objectKeys(rule1[ruleKey1]).length === 1 && require_objectUtils.isPojo(rule2[ruleKey2]) && require_objectUtils.objectKeys(rule2[ruleKey2]).length === 1 && ("$gte" in rule1[ruleKey1] && "$lte" in rule2[ruleKey2] && rule2[ruleKey2].$lte >= rule1[ruleKey1].$gte || "$lte" in rule1[ruleKey1] && "$gte" in rule2[ruleKey2] && rule1[ruleKey1].$lte >= rule2[ruleKey2].$gte)) {
102
101
  const [val1, val2] = [rule1[ruleKey1].$gte ?? rule1[ruleKey1].$lte, rule2[ruleKey2].$lte ?? rule2[ruleKey2].$gte];
103
102
  let value = listsAsArrays ? [val1, val2] : require_utils.joinWith([val1, val2], ",");
104
103
  if (val1 > val2) value = listsAsArrays ? [val2, val1] : require_utils.joinWith([val2, val1], ",");
@@ -115,11 +114,11 @@ function parseMongoDB(mongoDbRules, options = {}) {
115
114
  rules
116
115
  } : false;
117
116
  } else if (key === "$or") {
118
- if (!Array.isArray(keyValue) || keyValue.length === 0 || !keyValue.every((v) => require_isRuleGroup.isPojo(v))) return false;
119
- if (keyValue.length === 2 && keyValue.every((kv) => require_utils.objectKeys(kv).length === 1)) {
117
+ if (!Array.isArray(keyValue) || keyValue.length === 0 || !keyValue.every((v) => require_objectUtils.isPojo(v))) return false;
118
+ if (keyValue.length === 2 && keyValue.every((kv) => require_objectUtils.objectKeys(kv).length === 1)) {
120
119
  const [rule1, rule2] = keyValue;
121
- const [ruleKey1, ruleKey2] = keyValue.map((kv) => require_utils.objectKeys(kv)[0]);
122
- if (ruleKey1 === ruleKey2 && require_isRuleGroup.isPojo(rule1[ruleKey1]) && require_utils.objectKeys(rule1[ruleKey1]).length === 1 && require_isRuleGroup.isPojo(rule2[ruleKey2]) && require_utils.objectKeys(rule2[ruleKey2]).length === 1 && ("$gt" in rule1[ruleKey1] && "$lt" in rule2[ruleKey2] && rule1[ruleKey1].$gt >= rule2[ruleKey2].$lt || "$lt" in rule1[ruleKey1] && "$gt" in rule2[ruleKey2] && rule2[ruleKey2].$gt >= rule1[ruleKey1].$lt)) {
120
+ const [ruleKey1, ruleKey2] = keyValue.map((kv) => require_objectUtils.objectKeys(kv)[0]);
121
+ if (ruleKey1 === ruleKey2 && require_objectUtils.isPojo(rule1[ruleKey1]) && require_objectUtils.objectKeys(rule1[ruleKey1]).length === 1 && require_objectUtils.isPojo(rule2[ruleKey2]) && require_objectUtils.objectKeys(rule2[ruleKey2]).length === 1 && ("$gt" in rule1[ruleKey1] && "$lt" in rule2[ruleKey2] && rule1[ruleKey1].$gt >= rule2[ruleKey2].$lt || "$lt" in rule1[ruleKey1] && "$gt" in rule2[ruleKey2] && rule2[ruleKey2].$gt >= rule1[ruleKey1].$lt)) {
123
122
  const [val1, val2] = [rule1[ruleKey1].$gt ?? rule1[ruleKey1].$lt, rule2[ruleKey2].$lt ?? rule2[ruleKey2].$gt];
124
123
  let value = listsAsArrays ? [val1, val2] : `${val1},${val2}`;
125
124
  if (val1 > val2) value = listsAsArrays ? [val2, val1] : `${val2},${val1}`;
@@ -135,10 +134,10 @@ function parseMongoDB(mongoDbRules, options = {}) {
135
134
  combinator: "or",
136
135
  rules
137
136
  } : false;
138
- } else if (key === "$not" && require_isRuleGroup.isPojo(keyValue)) {
137
+ } else if (key === "$not" && require_objectUtils.isPojo(keyValue)) {
139
138
  const ruleOrGroup = processMongoDbQueryObject(keyValue);
140
139
  if (ruleOrGroup) {
141
- if (require_isRuleGroup.isRuleGroupType(ruleOrGroup)) return ruleOrGroup.not ? {
140
+ if (require_objectUtils.isRuleGroupType(ruleOrGroup)) return ruleOrGroup.not ? {
142
141
  combinator: "and",
143
142
  rules: [ruleOrGroup],
144
143
  not: true
@@ -157,7 +156,7 @@ function parseMongoDB(mongoDbRules, options = {}) {
157
156
  }
158
157
  return false;
159
158
  } else if (key === "$expr") {
160
- const op = require_utils.objectKeys(keyValue)[0];
159
+ const op = require_objectUtils.objectKeys(keyValue)[0];
161
160
  if (/^\$(eq|gte?|lte?|n?in)$/.test(op) && Array.isArray(keyValue[op]) && keyValue[op].length === 2 && typeof keyValue[op][0] === "string" && keyValue[op][0].startsWith("$")) {
162
161
  field = keyValue[op][0].replace(/^\$/, "");
163
162
  const val = keyValue[op][1];
@@ -188,7 +187,7 @@ function parseMongoDB(mongoDbRules, options = {}) {
188
187
  operator: "null",
189
188
  value: keyValue
190
189
  };
191
- } else if (require_isRuleGroup.isPojo(keyValue)) {
190
+ } else if (require_objectUtils.isPojo(keyValue)) {
192
191
  let betweenRule = false;
193
192
  let notRule = false;
194
193
  const allOps = [
@@ -199,14 +198,14 @@ function parseMongoDB(mongoDbRules, options = {}) {
199
198
  "n?in",
200
199
  "regex",
201
200
  "not",
202
- ...require_utils.objectKeys(additionalOperators).map((o) => o.replace(/^\$/, ""))
201
+ ...require_objectUtils.objectKeys(additionalOperators).map((o) => o.replace(/^\$/, ""))
203
202
  ];
204
- const acceptedOpsRegExp = /* @__PURE__ */ new RegExp(`^\\$(${allOps.join("|")})$`);
205
- const operators = require_utils.objectKeys(keyValue).filter((o) => acceptedOpsRegExp.test(o)).sort();
203
+ const acceptedOpsRegExp = new RegExp(`^\\$(${allOps.join("|")})$`);
204
+ const operators = require_objectUtils.objectKeys(keyValue).filter((o) => acceptedOpsRegExp.test(o)).sort();
206
205
  if (operators.length === 0) return false;
207
- if ("$not" in keyValue && require_isRuleGroup.isPojo(keyValue.$not)) {
206
+ if ("$not" in keyValue && require_objectUtils.isPojo(keyValue.$not)) {
208
207
  const invertedNotRule = processMongoDbQueryObject({ [field]: keyValue.$not });
209
- if (invertedNotRule) if (require_isRuleGroup.isRuleGroupType(invertedNotRule)) notRule = {
208
+ if (invertedNotRule) if (require_objectUtils.isRuleGroupType(invertedNotRule)) notRule = {
210
209
  ...invertedNotRule,
211
210
  not: true
212
211
  };
@@ -238,7 +237,7 @@ function parseMongoDB(mongoDbRules, options = {}) {
238
237
  return false;
239
238
  }
240
239
  function processMongoDbQueryObject(mongoDbQueryObject) {
241
- const rules = require_utils.objectKeys(mongoDbQueryObject).map((k) => processMongoDbQueryObjectKey(k, mongoDbQueryObject[k])).filter(Boolean);
240
+ const rules = require_objectUtils.objectKeys(mongoDbQueryObject).map((k) => processMongoDbQueryObjectKey(k, mongoDbQueryObject[k])).filter(Boolean);
242
241
  return rules.length === 1 ? rules[0] : rules.length > 1 ? {
243
242
  combinator: "and",
244
243
  rules
@@ -251,15 +250,15 @@ function parseMongoDB(mongoDbRules, options = {}) {
251
250
  } catch {
252
251
  return prepare(emptyRuleGroup);
253
252
  }
254
- if (!require_isRuleGroup.isPojo(mongoDbPOJO)) return prepare(emptyRuleGroup);
253
+ if (!require_objectUtils.isPojo(mongoDbPOJO)) return prepare(emptyRuleGroup);
255
254
  const result = processMongoDbQueryObject(mongoDbPOJO);
256
- const finalQuery = result ? require_isRuleGroup.isRuleGroupType(result) ? result : {
255
+ const finalQuery = result ? require_objectUtils.isRuleGroupType(result) ? result : {
257
256
  combinator: "and",
258
257
  rules: [result]
259
258
  } : emptyRuleGroup;
260
259
  return prepare(options.independentCombinators ? require_convertQuery.convertToIC(finalQuery) : finalQuery);
261
260
  }
262
-
263
261
  //#endregion
264
262
  exports.parseMongoDB = parseMongoDB;
263
+
265
264
  //# sourceMappingURL=parseMongoDB.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parseMongoDB.js","names":["mongoDbToRqbOperatorMap: Partial<\n Record<MongoDbSupportedOperators, DefaultOperatorName>\n>","emptyRuleGroup: DefaultRuleGroupType","getFieldsArray","fieldIsValidUtil","operator: DefaultOperatorName","value: any","joinWith","isPojo","objectKeys","isRuleGroupType","defaultOperatorNegationMap","betweenRule: DefaultRuleType | false","notRule: DefaultRuleType | DefaultRuleGroupType | false","prepareRuleGroup","finalQuery: DefaultRuleGroupType","convertToIC"],"sources":["../src/utils/parseMongoDB/utils.ts","../src/utils/parseMongoDB/parseMongoDB.ts"],"sourcesContent":["import type { DefaultOperatorName } from '../../types';\nimport type { MongoDbSupportedOperators } from './types';\n\nexport const getRegExStr = (re: string | RegExp): string =>\n typeof re === 'string' ? re : re.source;\n\n// oxlint-disable-next-line typescript/no-explicit-any\nexport const isPrimitive = (v: any): v is string | number | boolean =>\n typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean';\n\nexport const mongoDbToRqbOperatorMap: Partial<\n Record<MongoDbSupportedOperators, DefaultOperatorName>\n> = {\n $eq: '=',\n $ne: '!=',\n $gt: '>',\n $gte: '>=',\n $lt: '<',\n $lte: '<=',\n} satisfies Partial<Record<MongoDbSupportedOperators, DefaultOperatorName>>;\n","import type { Except } from 'type-fest';\nimport { defaultOperatorNegationMap } from '../../defaults';\nimport type {\n DefaultOperatorName,\n DefaultRuleGroupType,\n DefaultRuleGroupTypeAny,\n DefaultRuleGroupTypeIC,\n DefaultRuleType,\n RuleGroupType,\n RuleType,\n} from '../../types';\nimport type { ParserCommonOptions } from '../../types/import';\nimport { joinWith } from '../arrayUtils';\nimport { convertToIC } from '../convertQuery';\nimport { isRuleGroupType } from '../isRuleGroup';\nimport { isPojo } from '../misc';\nimport { objectKeys } from '../objectUtils';\nimport { fieldIsValidUtil, getFieldsArray } from '../parserUtils';\nimport { prepareRuleGroup } from '../prepareQueryObjects';\nimport type { MongoDbSupportedOperators } from './types';\nimport { getRegExStr, isPrimitive, mongoDbToRqbOperatorMap } from './utils';\n\n/**\n * Options object for {@link parseMongoDB}.\n */\nexport interface ParseMongoDbOptions extends ParserCommonOptions {\n /**\n * When `true`, MongoDB rules in the form of `{ fieldName: { $not: { <...rule> } } }`\n * will be parsed into a rule group with the `not` attribute set to `true`. By default\n * (i.e., when this attribute is `false`), such \"`$not`\" rules will be parsed into a\n * rule with a negated operator.\n *\n * For example, with `preventOperatorNegation` set to `true`, a MongoDB rule like this...\n *\n * ```ts\n * { fieldName: { $not: { $eq: 1 } } }\n * ```\n *\n * ...would yield a rule group like this:\n *\n * ```ts\n * {\n * combinator: 'and',\n * not: true,\n * rules: [{ field: 'fieldName', operator: '=', value: 1 }]\n * }\n * ```\n *\n * By default, the same MongoDB rule would yield a rule like this:\n *\n * ```ts\n * { field: 'fieldName', operator: '!=', value: 1 }\n * // negated operator ^\n * ```\n *\n * @default false\n */\n preventOperatorNegation?: boolean;\n /**\n * Map of additional operators to their respective processing functions. Operators\n * must begin with `\"$\"`. Processing functions should return either a {@link index!RuleType RuleType}\n * or {@link index!RuleGroupType RuleGroupType}.\n *\n * (The functions should _not_ return {@link index!RuleGroupTypeIC RuleGroupTypeIC}, even if using independent\n * combinators. If the `independentCombinators` option is `true`, `parseMongoDB`\n * will convert the final query to {@link index!RuleGroupTypeIC RuleGroupTypeIC} before returning it.)\n *\n * @default {}\n */\n additionalOperators?: Record<\n `$${string}`,\n (\n field: string,\n operator: string,\n // oxlint-disable-next-line typescript/no-explicit-any\n value: any,\n options: ParserCommonOptions\n ) => RuleType | RuleGroupType\n >;\n}\n\nconst emptyRuleGroup: DefaultRuleGroupType = { combinator: 'and', rules: [] };\n\n/**\n * Converts a MongoDB query object or parseable string into a query suitable\n * for the {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\n// oxlint-disable-next-line typescript/no-explicit-any\nfunction parseMongoDB(mongoDbRules: string | Record<string, any>): DefaultRuleGroupType;\n/**\n * Converts a MongoDB query object or parseable string into a query suitable\n * for the {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseMongoDB(\n // oxlint-disable-next-line typescript/no-explicit-any\n mongoDbRules: string | Record<string, any>,\n options: Except<ParseMongoDbOptions, 'independentCombinators'> & {\n independentCombinators?: false;\n }\n): DefaultRuleGroupType;\n/**\n * Converts a MongoDB query object or parseable string into a query suitable\n * for the {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupTypeIC DefaultRuleGroupTypeIC}).\n */\nfunction parseMongoDB(\n // oxlint-disable-next-line typescript/no-explicit-any\n mongoDbRules: string | Record<string, any>,\n options: Except<ParseMongoDbOptions, 'independentCombinators'> & {\n independentCombinators: true;\n }\n): DefaultRuleGroupTypeIC;\nfunction parseMongoDB(\n // oxlint-disable-next-line typescript/no-explicit-any\n mongoDbRules: string | Record<string, any>,\n options: ParseMongoDbOptions = {}\n): DefaultRuleGroupTypeAny {\n const listsAsArrays = !!options.listsAsArrays;\n const fieldsFlat = getFieldsArray(options.fields);\n const getValueSources = options.getValueSources;\n const additionalOperators = options.additionalOperators ?? {};\n const preventOperatorNegation = !!options.preventOperatorNegation;\n const { additionalOperators: _ao, ...otherOptions } = options;\n\n const fieldIsValid = (\n fieldName: string,\n operator: DefaultOperatorName,\n subordinateFieldName?: string\n ) =>\n fieldIsValidUtil({\n fieldName,\n fieldsFlat,\n operator,\n subordinateFieldName,\n getValueSources,\n });\n\n function processMongoDbQueryBooleanOperator(\n field: string,\n mdbOperator: MongoDbSupportedOperators,\n // oxlint-disable-next-line typescript/no-explicit-any\n keyValue: any\n ): DefaultRuleType | false {\n let operator: DefaultOperatorName = '=';\n // oxlint-disable-next-line typescript/no-explicit-any\n let value: any = '';\n\n // istanbul ignore else\n if (\n mdbOperator === '$eq' ||\n mdbOperator === '$ne' ||\n mdbOperator === '$gt' ||\n mdbOperator === '$gte' ||\n mdbOperator === '$lt' ||\n mdbOperator === '$lte'\n ) {\n if (mdbOperator === '$ne' && keyValue === null) {\n if (fieldIsValid(field, 'notNull')) {\n return { field, operator: 'notNull', value: null };\n }\n } else {\n operator = mongoDbToRqbOperatorMap[mdbOperator]!;\n if (fieldIsValid(field, operator)) {\n return { field, operator, value: keyValue };\n }\n }\n } else if (mdbOperator === '$regex' && /^[^$^]$|^[^^].*[^$]$/.test(getRegExStr(keyValue))) {\n if (fieldIsValid(field, 'contains')) {\n return {\n field,\n operator: 'contains',\n value: getRegExStr(keyValue),\n };\n }\n } else if (mdbOperator === '$regex' && /^\\^.*[^$]/.test(getRegExStr(keyValue))) {\n if (fieldIsValid(field, 'beginsWith')) {\n return {\n field,\n operator: 'beginsWith',\n value: getRegExStr(keyValue).replace(/^\\^/, ''),\n };\n }\n } else if (mdbOperator === '$regex' && /[^^].*\\$/.test(getRegExStr(keyValue))) {\n if (fieldIsValid(field, 'endsWith')) {\n return {\n field,\n operator: 'endsWith',\n value: getRegExStr(keyValue).replace(/\\$$/, ''),\n };\n }\n } else if (mdbOperator === '$in' && Array.isArray(keyValue)) {\n if (fieldIsValid(field, 'in')) {\n value = listsAsArrays\n ? keyValue\n : joinWith(\n keyValue.map(v => `${v}`),\n ','\n );\n return { field, operator: 'in', value };\n }\n } else if (mdbOperator === '$nin' && Array.isArray(keyValue) && fieldIsValid(field, 'notIn')) {\n value = listsAsArrays\n ? keyValue\n : joinWith(\n keyValue.map(v => `${v}`),\n ','\n );\n return { field, operator: 'notIn', value };\n }\n\n return false;\n }\n\n function processMongoDbQueryObjectKey(\n key: string,\n // oxlint-disable-next-line typescript/no-explicit-any\n keyValue: any\n ): DefaultRuleType | DefaultRuleGroupType | false {\n let field = '';\n\n // istanbul ignore else\n if (key === '$and') {\n if (!Array.isArray(keyValue) || keyValue.length === 0 || !keyValue.every(v => isPojo(v))) {\n return false;\n }\n\n // Check if this should result in a \"between\" clause\n if (keyValue.length === 2 && keyValue.every(kv => objectKeys(kv).length === 1)) {\n const [rule1, rule2] = keyValue;\n const [ruleKey1, ruleKey2] = keyValue.map(kv => objectKeys(kv)[0]);\n if (\n ruleKey1 === ruleKey2 &&\n isPojo(rule1[ruleKey1]) &&\n objectKeys(rule1[ruleKey1]).length === 1 &&\n isPojo(rule2[ruleKey2]) &&\n objectKeys(rule2[ruleKey2]).length === 1 &&\n (('$gte' in rule1[ruleKey1] &&\n '$lte' in rule2[ruleKey2] &&\n rule2[ruleKey2].$lte >= rule1[ruleKey1].$gte) ||\n ('$lte' in rule1[ruleKey1] &&\n '$gte' in rule2[ruleKey2] &&\n rule1[ruleKey1].$lte >= rule2[ruleKey2].$gte))\n ) {\n const [val1, val2] = [\n rule1[ruleKey1].$gte ?? rule1[ruleKey1].$lte,\n rule2[ruleKey2].$lte ?? rule2[ruleKey2].$gte,\n ];\n let value = listsAsArrays ? [val1, val2] : joinWith([val1, val2], ',');\n if (val1 > val2) {\n value = listsAsArrays ? [val2, val1] : joinWith([val2, val1], ',');\n }\n return { field: ruleKey1, operator: 'between', value };\n }\n }\n\n const rules = keyValue.map(l => processMongoDbQueryObject(l)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[];\n\n return rules.length > 0 ? { combinator: 'and', rules } : false;\n } else if (key === '$or') {\n if (!Array.isArray(keyValue) || keyValue.length === 0 || !keyValue.every(v => isPojo(v))) {\n return false;\n }\n\n // Check if this should result in \"notBetween\"\n if (keyValue.length === 2 && keyValue.every(kv => objectKeys(kv).length === 1)) {\n const [rule1, rule2] = keyValue;\n const [ruleKey1, ruleKey2] = keyValue.map(kv => objectKeys(kv)[0]);\n if (\n ruleKey1 === ruleKey2 &&\n isPojo(rule1[ruleKey1]) &&\n objectKeys(rule1[ruleKey1]).length === 1 &&\n isPojo(rule2[ruleKey2]) &&\n objectKeys(rule2[ruleKey2]).length === 1 &&\n (('$gt' in rule1[ruleKey1] &&\n '$lt' in rule2[ruleKey2] &&\n rule1[ruleKey1].$gt >= rule2[ruleKey2].$lt) ||\n ('$lt' in rule1[ruleKey1] &&\n '$gt' in rule2[ruleKey2] &&\n rule2[ruleKey2].$gt >= rule1[ruleKey1].$lt))\n ) {\n const [val1, val2] = [\n rule1[ruleKey1].$gt ?? rule1[ruleKey1].$lt,\n rule2[ruleKey2].$lt ?? rule2[ruleKey2].$gt,\n ];\n let value = listsAsArrays ? [val1, val2] : `${val1},${val2}`;\n if (val1 > val2) {\n value = listsAsArrays ? [val2, val1] : `${val2},${val1}`;\n }\n return { field: ruleKey1, operator: 'notBetween', value };\n }\n }\n\n const rules = keyValue.map(l => processMongoDbQueryObject(l)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[];\n\n return rules.length > 0 ? { combinator: 'or', rules } : false;\n } else if (key === '$not' && isPojo(keyValue)) {\n const ruleOrGroup = processMongoDbQueryObject(keyValue);\n if (ruleOrGroup) {\n if (isRuleGroupType(ruleOrGroup)) {\n return ruleOrGroup.not\n ? { combinator: 'and', rules: [ruleOrGroup], not: true }\n : { ...ruleOrGroup, not: true };\n }\n return preventOperatorNegation\n ? { combinator: 'and', rules: [ruleOrGroup], not: true }\n : { ...ruleOrGroup, operator: defaultOperatorNegationMap[ruleOrGroup.operator] };\n }\n return false;\n } else if (key === '$expr') {\n const op = objectKeys(keyValue)[0] as MongoDbSupportedOperators;\n if (\n /^\\$(eq|gte?|lte?|n?in)$/.test(op) &&\n Array.isArray(keyValue[op]) &&\n keyValue[op].length === 2 &&\n typeof keyValue[op][0] === 'string' &&\n keyValue[op][0].startsWith('$')\n ) {\n field = keyValue[op][0].replace(/^\\$/, '');\n const val = keyValue[op][1];\n if (\n (typeof val === 'string' && val.startsWith('$')) ||\n (Array.isArray(val) &&\n val.every(v => typeof v === 'string') &&\n val.every(v => v.startsWith('$')))\n ) {\n const valForProcessing = Array.isArray(val)\n ? val.map(v => v.replace(/^\\$/, ''))\n : val.replace(/^\\$/, '');\n const tempRule = processMongoDbQueryBooleanOperator(field, op, valForProcessing);\n if (tempRule) {\n if (\n typeof tempRule.value === 'string' &&\n !fieldIsValid(field, tempRule.operator, tempRule.value)\n ) {\n return false;\n }\n return { ...tempRule, valueSource: 'field' };\n }\n }\n return processMongoDbQueryBooleanOperator(field, op, keyValue[op][1]);\n }\n } else if (/^[^$]/.test(key)) {\n field = key;\n\n if (isPrimitive(keyValue)) {\n if (fieldIsValid(field, '=')) {\n return { field, operator: '=', value: keyValue };\n }\n } else if (keyValue === null) {\n if (fieldIsValid(field, 'null')) {\n return { field, operator: 'null', value: keyValue };\n }\n } else if (isPojo(keyValue)) {\n let betweenRule: DefaultRuleType | false = false;\n let notRule: DefaultRuleType | DefaultRuleGroupType | false = false;\n const additionalOpKeys = objectKeys(additionalOperators).map(o => o.replace(/^\\$/, ''));\n const allOps = ['eq', 'ne', 'gte?', 'lte?', 'n?in', 'regex', 'not', ...additionalOpKeys];\n const acceptedOpsRegExp = new RegExp(`^\\\\$(${allOps.join('|')})$`);\n\n const operators = objectKeys<Record<MongoDbSupportedOperators, unknown>>(keyValue)\n .filter(o => acceptedOpsRegExp.test(o))\n // oxlint-disable-next-line no-array-sort\n .sort();\n\n if (operators.length === 0) {\n return false;\n }\n\n if ('$not' in keyValue && isPojo(keyValue.$not)) {\n const invertedNotRule = processMongoDbQueryObject({ [field]: keyValue.$not });\n if (invertedNotRule) {\n if (isRuleGroupType(invertedNotRule)) {\n notRule = { ...invertedNotRule, not: true };\n } else {\n notRule = preventOperatorNegation\n ? { combinator: 'and', rules: [invertedNotRule], not: true }\n : {\n ...invertedNotRule,\n operator: defaultOperatorNegationMap[invertedNotRule.operator],\n };\n }\n }\n }\n\n if ('$gte' in keyValue && '$lte' in keyValue) {\n // This is (at least) a compact \"between\" clause\n betweenRule = {\n field,\n operator: 'between',\n value: listsAsArrays\n ? [keyValue.$gte, keyValue.$lte]\n : `${keyValue.$gte},${keyValue.$lte}`,\n };\n }\n\n const rules = operators\n // filter out $not\n .filter(op => !(notRule && op === '$not'))\n // filter out $gte and $lte if they were both present\n .filter(op => !(betweenRule && (op === '$gte' || op === '$lte')))\n .map(op =>\n op in additionalOperators && typeof additionalOperators[op] === 'function'\n ? additionalOperators[op](field, op, keyValue[op], otherOptions)\n : processMongoDbQueryBooleanOperator(field, op, keyValue[op])\n )\n .filter(Boolean) as (DefaultRuleGroupType | DefaultRuleType)[];\n\n if (notRule) {\n rules.unshift(notRule);\n }\n\n if (betweenRule) {\n rules.unshift(betweenRule);\n }\n\n if (rules.length === 0) {\n return false;\n }\n if (rules.length === 1) {\n return rules[0];\n }\n return { combinator: 'and', rules };\n }\n }\n\n return false;\n }\n\n function processMongoDbQueryObject(\n // oxlint-disable-next-line typescript/no-explicit-any\n mongoDbQueryObject: Record<string, any>\n ): DefaultRuleGroupType | DefaultRuleType | false {\n const rules = objectKeys(mongoDbQueryObject)\n .map(k => processMongoDbQueryObjectKey(k, mongoDbQueryObject[k]))\n .filter(Boolean) as DefaultRuleGroupType[];\n return rules.length === 1 ? rules[0] : rules.length > 1 ? { combinator: 'and', rules } : false;\n }\n\n const prepare = options.generateIDs ? prepareRuleGroup : <T>(g: T) => g;\n\n let mongoDbPOJO = mongoDbRules;\n if (typeof mongoDbRules === 'string') {\n try {\n mongoDbPOJO = JSON.parse(mongoDbRules);\n } catch {\n return prepare(emptyRuleGroup);\n }\n }\n\n // Bail if the mongoDbPOJO is not actually a POJO\n if (!isPojo(mongoDbPOJO)) {\n return prepare(emptyRuleGroup);\n }\n\n const result = processMongoDbQueryObject(mongoDbPOJO);\n const finalQuery: DefaultRuleGroupType = result\n ? isRuleGroupType(result)\n ? result\n : { combinator: 'and', rules: [result] }\n : emptyRuleGroup;\n return prepare(\n options.independentCombinators ? convertToIC<DefaultRuleGroupTypeIC>(finalQuery) : finalQuery\n );\n}\n\nexport { parseMongoDB };\n"],"mappings":"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"}
1
+ {"version":3,"file":"parseMongoDB.js","names":["getFieldsArray","fieldIsValidUtil","joinWith","isPojo","objectKeys","isRuleGroupType","defaultOperatorNegationMap","prepareRuleGroup","convertToIC"],"sources":["../src/utils/parseMongoDB/utils.ts","../src/utils/parseMongoDB/parseMongoDB.ts"],"sourcesContent":["import type { DefaultOperatorName } from '../../types';\nimport type { MongoDbSupportedOperators } from './types';\n\nexport const getRegExStr = (re: string | RegExp): string =>\n typeof re === 'string' ? re : re.source;\n\n// oxlint-disable-next-line typescript/no-explicit-any\nexport const isPrimitive = (v: any): v is string | number | boolean =>\n typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean';\n\nexport const mongoDbToRqbOperatorMap: Partial<\n Record<MongoDbSupportedOperators, DefaultOperatorName>\n> = {\n $eq: '=',\n $ne: '!=',\n $gt: '>',\n $gte: '>=',\n $lt: '<',\n $lte: '<=',\n} satisfies Partial<Record<MongoDbSupportedOperators, DefaultOperatorName>>;\n","import type { Except } from 'type-fest';\nimport { defaultOperatorNegationMap } from '../../defaults';\nimport type {\n DefaultOperatorName,\n DefaultRuleGroupType,\n DefaultRuleGroupTypeAny,\n DefaultRuleGroupTypeIC,\n DefaultRuleType,\n RuleGroupType,\n RuleType,\n} from '../../types';\nimport type { ParserCommonOptions } from '../../types/import';\nimport { joinWith } from '../arrayUtils';\nimport { convertToIC } from '../convertQuery';\nimport { isRuleGroupType } from '../isRuleGroup';\nimport { isPojo } from '../misc';\nimport { objectKeys } from '../objectUtils';\nimport { fieldIsValidUtil, getFieldsArray } from '../parserUtils';\nimport { prepareRuleGroup } from '../prepareQueryObjects';\nimport type { MongoDbSupportedOperators } from './types';\nimport { getRegExStr, isPrimitive, mongoDbToRqbOperatorMap } from './utils';\n\n/**\n * Options object for {@link parseMongoDB}.\n */\nexport interface ParseMongoDbOptions extends ParserCommonOptions {\n /**\n * When `true`, MongoDB rules in the form of `{ fieldName: { $not: { <...rule> } } }`\n * will be parsed into a rule group with the `not` attribute set to `true`. By default\n * (i.e., when this attribute is `false`), such \"`$not`\" rules will be parsed into a\n * rule with a negated operator.\n *\n * For example, with `preventOperatorNegation` set to `true`, a MongoDB rule like this...\n *\n * ```ts\n * { fieldName: { $not: { $eq: 1 } } }\n * ```\n *\n * ...would yield a rule group like this:\n *\n * ```ts\n * {\n * combinator: 'and',\n * not: true,\n * rules: [{ field: 'fieldName', operator: '=', value: 1 }]\n * }\n * ```\n *\n * By default, the same MongoDB rule would yield a rule like this:\n *\n * ```ts\n * { field: 'fieldName', operator: '!=', value: 1 }\n * // negated operator ^\n * ```\n *\n * @default false\n */\n preventOperatorNegation?: boolean;\n /**\n * Map of additional operators to their respective processing functions. Operators\n * must begin with `\"$\"`. Processing functions should return either a {@link index!RuleType RuleType}\n * or {@link index!RuleGroupType RuleGroupType}.\n *\n * (The functions should _not_ return {@link index!RuleGroupTypeIC RuleGroupTypeIC}, even if using independent\n * combinators. If the `independentCombinators` option is `true`, `parseMongoDB`\n * will convert the final query to {@link index!RuleGroupTypeIC RuleGroupTypeIC} before returning it.)\n *\n * @default {}\n */\n additionalOperators?: Record<\n `$${string}`,\n (\n field: string,\n operator: string,\n // oxlint-disable-next-line typescript/no-explicit-any\n value: any,\n options: ParserCommonOptions\n ) => RuleType | RuleGroupType\n >;\n}\n\nconst emptyRuleGroup: DefaultRuleGroupType = { combinator: 'and', rules: [] };\n\n/**\n * Converts a MongoDB query object or parseable string into a query suitable\n * for the {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\n// oxlint-disable-next-line typescript/no-explicit-any\nfunction parseMongoDB(mongoDbRules: string | Record<string, any>): DefaultRuleGroupType;\n/**\n * Converts a MongoDB query object or parseable string into a query suitable\n * for the {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupType DefaultRuleGroupType}).\n */\nfunction parseMongoDB(\n // oxlint-disable-next-line typescript/no-explicit-any\n mongoDbRules: string | Record<string, any>,\n options: Except<ParseMongoDbOptions, 'independentCombinators'> & {\n independentCombinators?: false;\n }\n): DefaultRuleGroupType;\n/**\n * Converts a MongoDB query object or parseable string into a query suitable\n * for the {@link index!QueryBuilder QueryBuilder} component's `query` or `defaultQuery` props\n * ({@link index!DefaultRuleGroupTypeIC DefaultRuleGroupTypeIC}).\n */\nfunction parseMongoDB(\n // oxlint-disable-next-line typescript/no-explicit-any\n mongoDbRules: string | Record<string, any>,\n options: Except<ParseMongoDbOptions, 'independentCombinators'> & {\n independentCombinators: true;\n }\n): DefaultRuleGroupTypeIC;\nfunction parseMongoDB(\n // oxlint-disable-next-line typescript/no-explicit-any\n mongoDbRules: string | Record<string, any>,\n options: ParseMongoDbOptions = {}\n): DefaultRuleGroupTypeAny {\n const listsAsArrays = !!options.listsAsArrays;\n const fieldsFlat = getFieldsArray(options.fields);\n const getValueSources = options.getValueSources;\n const additionalOperators = options.additionalOperators ?? {};\n const preventOperatorNegation = !!options.preventOperatorNegation;\n const { additionalOperators: _ao, ...otherOptions } = options;\n\n const fieldIsValid = (\n fieldName: string,\n operator: DefaultOperatorName,\n subordinateFieldName?: string\n ) =>\n fieldIsValidUtil({\n fieldName,\n fieldsFlat,\n operator,\n subordinateFieldName,\n getValueSources,\n });\n\n function processMongoDbQueryBooleanOperator(\n field: string,\n mdbOperator: MongoDbSupportedOperators,\n // oxlint-disable-next-line typescript/no-explicit-any\n keyValue: any\n ): DefaultRuleType | false {\n let operator: DefaultOperatorName = '=';\n // oxlint-disable-next-line typescript/no-explicit-any\n let value: any = '';\n\n // istanbul ignore else\n if (\n mdbOperator === '$eq' ||\n mdbOperator === '$ne' ||\n mdbOperator === '$gt' ||\n mdbOperator === '$gte' ||\n mdbOperator === '$lt' ||\n mdbOperator === '$lte'\n ) {\n if (mdbOperator === '$ne' && keyValue === null) {\n if (fieldIsValid(field, 'notNull')) {\n return { field, operator: 'notNull', value: null };\n }\n } else {\n operator = mongoDbToRqbOperatorMap[mdbOperator]!;\n if (fieldIsValid(field, operator)) {\n return { field, operator, value: keyValue };\n }\n }\n } else if (mdbOperator === '$regex' && /^[^$^]$|^[^^].*[^$]$/.test(getRegExStr(keyValue))) {\n if (fieldIsValid(field, 'contains')) {\n return {\n field,\n operator: 'contains',\n value: getRegExStr(keyValue),\n };\n }\n } else if (mdbOperator === '$regex' && /^\\^.*[^$]/.test(getRegExStr(keyValue))) {\n if (fieldIsValid(field, 'beginsWith')) {\n return {\n field,\n operator: 'beginsWith',\n value: getRegExStr(keyValue).replace(/^\\^/, ''),\n };\n }\n } else if (mdbOperator === '$regex' && /[^^].*\\$/.test(getRegExStr(keyValue))) {\n if (fieldIsValid(field, 'endsWith')) {\n return {\n field,\n operator: 'endsWith',\n value: getRegExStr(keyValue).replace(/\\$$/, ''),\n };\n }\n } else if (mdbOperator === '$in' && Array.isArray(keyValue)) {\n if (fieldIsValid(field, 'in')) {\n value = listsAsArrays\n ? keyValue\n : joinWith(\n keyValue.map(v => `${v}`),\n ','\n );\n return { field, operator: 'in', value };\n }\n } else if (mdbOperator === '$nin' && Array.isArray(keyValue) && fieldIsValid(field, 'notIn')) {\n value = listsAsArrays\n ? keyValue\n : joinWith(\n keyValue.map(v => `${v}`),\n ','\n );\n return { field, operator: 'notIn', value };\n }\n\n return false;\n }\n\n function processMongoDbQueryObjectKey(\n key: string,\n // oxlint-disable-next-line typescript/no-explicit-any\n keyValue: any\n ): DefaultRuleType | DefaultRuleGroupType | false {\n let field = '';\n\n // istanbul ignore else\n if (key === '$and') {\n if (!Array.isArray(keyValue) || keyValue.length === 0 || !keyValue.every(v => isPojo(v))) {\n return false;\n }\n\n // Check if this should result in a \"between\" clause\n if (keyValue.length === 2 && keyValue.every(kv => objectKeys(kv).length === 1)) {\n const [rule1, rule2] = keyValue;\n const [ruleKey1, ruleKey2] = keyValue.map(kv => objectKeys(kv)[0]);\n if (\n ruleKey1 === ruleKey2 &&\n isPojo(rule1[ruleKey1]) &&\n objectKeys(rule1[ruleKey1]).length === 1 &&\n isPojo(rule2[ruleKey2]) &&\n objectKeys(rule2[ruleKey2]).length === 1 &&\n (('$gte' in rule1[ruleKey1] &&\n '$lte' in rule2[ruleKey2] &&\n rule2[ruleKey2].$lte >= rule1[ruleKey1].$gte) ||\n ('$lte' in rule1[ruleKey1] &&\n '$gte' in rule2[ruleKey2] &&\n rule1[ruleKey1].$lte >= rule2[ruleKey2].$gte))\n ) {\n const [val1, val2] = [\n rule1[ruleKey1].$gte ?? rule1[ruleKey1].$lte,\n rule2[ruleKey2].$lte ?? rule2[ruleKey2].$gte,\n ];\n let value = listsAsArrays ? [val1, val2] : joinWith([val1, val2], ',');\n if (val1 > val2) {\n value = listsAsArrays ? [val2, val1] : joinWith([val2, val1], ',');\n }\n return { field: ruleKey1, operator: 'between', value };\n }\n }\n\n const rules = keyValue.map(l => processMongoDbQueryObject(l)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[];\n\n return rules.length > 0 ? { combinator: 'and', rules } : false;\n } else if (key === '$or') {\n if (!Array.isArray(keyValue) || keyValue.length === 0 || !keyValue.every(v => isPojo(v))) {\n return false;\n }\n\n // Check if this should result in \"notBetween\"\n if (keyValue.length === 2 && keyValue.every(kv => objectKeys(kv).length === 1)) {\n const [rule1, rule2] = keyValue;\n const [ruleKey1, ruleKey2] = keyValue.map(kv => objectKeys(kv)[0]);\n if (\n ruleKey1 === ruleKey2 &&\n isPojo(rule1[ruleKey1]) &&\n objectKeys(rule1[ruleKey1]).length === 1 &&\n isPojo(rule2[ruleKey2]) &&\n objectKeys(rule2[ruleKey2]).length === 1 &&\n (('$gt' in rule1[ruleKey1] &&\n '$lt' in rule2[ruleKey2] &&\n rule1[ruleKey1].$gt >= rule2[ruleKey2].$lt) ||\n ('$lt' in rule1[ruleKey1] &&\n '$gt' in rule2[ruleKey2] &&\n rule2[ruleKey2].$gt >= rule1[ruleKey1].$lt))\n ) {\n const [val1, val2] = [\n rule1[ruleKey1].$gt ?? rule1[ruleKey1].$lt,\n rule2[ruleKey2].$lt ?? rule2[ruleKey2].$gt,\n ];\n let value = listsAsArrays ? [val1, val2] : `${val1},${val2}`;\n if (val1 > val2) {\n value = listsAsArrays ? [val2, val1] : `${val2},${val1}`;\n }\n return { field: ruleKey1, operator: 'notBetween', value };\n }\n }\n\n const rules = keyValue.map(l => processMongoDbQueryObject(l)).filter(Boolean) as (\n | DefaultRuleType\n | DefaultRuleGroupType\n )[];\n\n return rules.length > 0 ? { combinator: 'or', rules } : false;\n } else if (key === '$not' && isPojo(keyValue)) {\n const ruleOrGroup = processMongoDbQueryObject(keyValue);\n if (ruleOrGroup) {\n if (isRuleGroupType(ruleOrGroup)) {\n return ruleOrGroup.not\n ? { combinator: 'and', rules: [ruleOrGroup], not: true }\n : { ...ruleOrGroup, not: true };\n }\n return preventOperatorNegation\n ? { combinator: 'and', rules: [ruleOrGroup], not: true }\n : { ...ruleOrGroup, operator: defaultOperatorNegationMap[ruleOrGroup.operator] };\n }\n return false;\n } else if (key === '$expr') {\n const op = objectKeys(keyValue)[0] as MongoDbSupportedOperators;\n if (\n /^\\$(eq|gte?|lte?|n?in)$/.test(op) &&\n Array.isArray(keyValue[op]) &&\n keyValue[op].length === 2 &&\n typeof keyValue[op][0] === 'string' &&\n keyValue[op][0].startsWith('$')\n ) {\n field = keyValue[op][0].replace(/^\\$/, '');\n const val = keyValue[op][1];\n if (\n (typeof val === 'string' && val.startsWith('$')) ||\n (Array.isArray(val) &&\n val.every(v => typeof v === 'string') &&\n val.every(v => v.startsWith('$')))\n ) {\n const valForProcessing = Array.isArray(val)\n ? val.map(v => v.replace(/^\\$/, ''))\n : val.replace(/^\\$/, '');\n const tempRule = processMongoDbQueryBooleanOperator(field, op, valForProcessing);\n if (tempRule) {\n if (\n typeof tempRule.value === 'string' &&\n !fieldIsValid(field, tempRule.operator, tempRule.value)\n ) {\n return false;\n }\n return { ...tempRule, valueSource: 'field' };\n }\n }\n return processMongoDbQueryBooleanOperator(field, op, keyValue[op][1]);\n }\n } else if (/^[^$]/.test(key)) {\n field = key;\n\n if (isPrimitive(keyValue)) {\n if (fieldIsValid(field, '=')) {\n return { field, operator: '=', value: keyValue };\n }\n } else if (keyValue === null) {\n if (fieldIsValid(field, 'null')) {\n return { field, operator: 'null', value: keyValue };\n }\n } else if (isPojo(keyValue)) {\n let betweenRule: DefaultRuleType | false = false;\n let notRule: DefaultRuleType | DefaultRuleGroupType | false = false;\n const additionalOpKeys = objectKeys(additionalOperators).map(o => o.replace(/^\\$/, ''));\n const allOps = ['eq', 'ne', 'gte?', 'lte?', 'n?in', 'regex', 'not', ...additionalOpKeys];\n const acceptedOpsRegExp = new RegExp(`^\\\\$(${allOps.join('|')})$`);\n\n const operators = objectKeys<Record<MongoDbSupportedOperators, unknown>>(keyValue)\n .filter(o => acceptedOpsRegExp.test(o))\n // oxlint-disable-next-line no-array-sort\n .sort();\n\n if (operators.length === 0) {\n return false;\n }\n\n if ('$not' in keyValue && isPojo(keyValue.$not)) {\n const invertedNotRule = processMongoDbQueryObject({ [field]: keyValue.$not });\n if (invertedNotRule) {\n if (isRuleGroupType(invertedNotRule)) {\n notRule = { ...invertedNotRule, not: true };\n } else {\n notRule = preventOperatorNegation\n ? { combinator: 'and', rules: [invertedNotRule], not: true }\n : {\n ...invertedNotRule,\n operator: defaultOperatorNegationMap[invertedNotRule.operator],\n };\n }\n }\n }\n\n if ('$gte' in keyValue && '$lte' in keyValue) {\n // This is (at least) a compact \"between\" clause\n betweenRule = {\n field,\n operator: 'between',\n value: listsAsArrays\n ? [keyValue.$gte, keyValue.$lte]\n : `${keyValue.$gte},${keyValue.$lte}`,\n };\n }\n\n const rules = operators\n // filter out $not\n .filter(op => !(notRule && op === '$not'))\n // filter out $gte and $lte if they were both present\n .filter(op => !(betweenRule && (op === '$gte' || op === '$lte')))\n .map(op =>\n op in additionalOperators && typeof additionalOperators[op] === 'function'\n ? additionalOperators[op](field, op, keyValue[op], otherOptions)\n : processMongoDbQueryBooleanOperator(field, op, keyValue[op])\n )\n .filter(Boolean) as (DefaultRuleGroupType | DefaultRuleType)[];\n\n if (notRule) {\n rules.unshift(notRule);\n }\n\n if (betweenRule) {\n rules.unshift(betweenRule);\n }\n\n if (rules.length === 0) {\n return false;\n }\n if (rules.length === 1) {\n return rules[0];\n }\n return { combinator: 'and', rules };\n }\n }\n\n return false;\n }\n\n function processMongoDbQueryObject(\n // oxlint-disable-next-line typescript/no-explicit-any\n mongoDbQueryObject: Record<string, any>\n ): DefaultRuleGroupType | DefaultRuleType | false {\n const rules = objectKeys(mongoDbQueryObject)\n .map(k => processMongoDbQueryObjectKey(k, mongoDbQueryObject[k]))\n .filter(Boolean) as DefaultRuleGroupType[];\n return rules.length === 1 ? rules[0] : rules.length > 1 ? { combinator: 'and', rules } : false;\n }\n\n const prepare = options.generateIDs ? prepareRuleGroup : <T>(g: T) => g;\n\n let mongoDbPOJO = mongoDbRules;\n if (typeof mongoDbRules === 'string') {\n try {\n mongoDbPOJO = JSON.parse(mongoDbRules);\n } catch {\n return prepare(emptyRuleGroup);\n }\n }\n\n // Bail if the mongoDbPOJO is not actually a POJO\n if (!isPojo(mongoDbPOJO)) {\n return prepare(emptyRuleGroup);\n }\n\n const result = processMongoDbQueryObject(mongoDbPOJO);\n const finalQuery: DefaultRuleGroupType = result\n ? isRuleGroupType(result)\n ? result\n : { combinator: 'and', rules: [result] }\n : emptyRuleGroup;\n return prepare(\n options.independentCombinators ? convertToIC<DefaultRuleGroupTypeIC>(finalQuery) : finalQuery\n );\n}\n\nexport { parseMongoDB };\n"],"mappings":"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"}
@@ -1,8 +1,7 @@
1
- import { A as defaultOperatorNegationMap, D as joinWith, T as objectKeys } from "./utils-nQU7WCM9.mjs";
2
- import { i as isPojo, n as isRuleGroupType } from "./isRuleGroup-DztIOOKa.mjs";
3
- import { n as convertToIC } from "./convertQuery-DAj92cbM.mjs";
4
- import { n as fieldIsValidUtil, r as getFieldsArray, t as prepareRuleGroup } from "./prepareQueryObjects-BBayjIn2.mjs";
5
-
1
+ import { E as joinWith, k as defaultOperatorNegationMap } from "./utils-BlMGIhvx.mjs";
2
+ import { i as isRuleGroupType, n as objectKeys, o as isPojo } from "./objectUtils-C0WB-8ex.mjs";
3
+ import { n as convertToIC } from "./convertQuery-CeJSNn37.mjs";
4
+ import { n as fieldIsValidUtil, r as getFieldsArray, t as prepareRuleGroup } from "./prepareQueryObjects-BfMlS4ql.mjs";
6
5
  //#region src/utils/parseMongoDB/utils.ts
7
6
  const getRegExStr = (re) => typeof re === "string" ? re : re.source;
8
7
  const isPrimitive = (v) => typeof v === "string" || typeof v === "number" || typeof v === "boolean";
@@ -14,7 +13,6 @@ const mongoDbToRqbOperatorMap = {
14
13
  $lt: "<",
15
14
  $lte: "<="
16
15
  };
17
-
18
16
  //#endregion
19
17
  //#region src/utils/parseMongoDB/parseMongoDB.ts
20
18
  const emptyRuleGroup = {
@@ -201,7 +199,7 @@ function parseMongoDB(mongoDbRules, options = {}) {
201
199
  "not",
202
200
  ...objectKeys(additionalOperators).map((o) => o.replace(/^\$/, ""))
203
201
  ];
204
- const acceptedOpsRegExp = /* @__PURE__ */ new RegExp(`^\\$(${allOps.join("|")})$`);
202
+ const acceptedOpsRegExp = new RegExp(`^\\$(${allOps.join("|")})$`);
205
203
  const operators = objectKeys(keyValue).filter((o) => acceptedOpsRegExp.test(o)).sort();
206
204
  if (operators.length === 0) return false;
207
205
  if ("$not" in keyValue && isPojo(keyValue.$not)) {
@@ -259,7 +257,7 @@ function parseMongoDB(mongoDbRules, options = {}) {
259
257
  } : emptyRuleGroup;
260
258
  return prepare(options.independentCombinators ? convertToIC(finalQuery) : finalQuery);
261
259
  }
262
-
263
260
  //#endregion
264
261
  export { parseMongoDB };
262
+
265
263
  //# sourceMappingURL=parseMongoDB.mjs.map