@react-querybuilder/core 8.9.2 → 8.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{arrayUtils-BF1P8iHS.mjs → arrayUtils-A_OXU9W1.mjs} +3 -75
- package/dist/arrayUtils-A_OXU9W1.mjs.map +1 -0
- package/dist/arrayUtils-QxZOZTf6.js +73 -0
- package/dist/arrayUtils-QxZOZTf6.js.map +1 -0
- package/dist/basic-DEc65Kng.d.mts +363 -0
- package/dist/basic-Dd_M2f3M.d.ts +363 -0
- package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +806 -1366
- package/dist/cjs/react-querybuilder_core.cjs.development.js +455 -116
- package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
- package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +806 -1366
- package/dist/cjs/react-querybuilder_core.cjs.production.js +1 -1
- package/dist/cjs/react-querybuilder_core.cjs.production.js.map +1 -1
- package/dist/{convertQuery-H7RhQiIc.mjs → convertQuery-CqX3rPvj.mjs} +3 -3
- package/dist/{convertQuery-H7RhQiIc.mjs.map → convertQuery-CqX3rPvj.mjs.map} +1 -1
- package/dist/{export-DyrnTh6K.d.ts → export-Dy4FckB-.d.ts} +7 -6
- package/dist/{export-r-V7bU31.d.mts → export-t1V2N8pz.d.mts} +7 -6
- package/dist/formatQuery.d.mts +3 -2
- package/dist/formatQuery.d.ts +3 -2
- package/dist/formatQuery.js +217 -87
- package/dist/formatQuery.js.map +1 -1
- package/dist/formatQuery.mjs +217 -87
- package/dist/formatQuery.mjs.map +1 -1
- package/dist/{import-Cksobmln.d.ts → import-Cz8canKo.d.mts} +3 -3
- package/dist/{import-BwbbP4oU.d.mts → import-DtS9Ocx5.d.ts} +3 -3
- package/dist/{isRuleGroup-CnhYpLOM.mjs → isRuleGroup-CYcfPgbg.mjs} +2 -2
- package/dist/{isRuleGroup-CnhYpLOM.mjs.map → isRuleGroup-CYcfPgbg.mjs.map} +1 -1
- package/dist/lexer-C53tqS2p.js +406 -0
- package/dist/lexer-C53tqS2p.js.map +1 -0
- package/dist/{optGroupUtils-CXLgyg2i.js → optGroupUtils-B0hTpodo.js} +114 -1
- package/dist/optGroupUtils-B0hTpodo.js.map +1 -0
- package/dist/{optGroupUtils-Duv-M8rf.mjs → optGroupUtils-VeZ3k7-1.mjs} +86 -3
- package/dist/optGroupUtils-VeZ3k7-1.mjs.map +1 -0
- package/dist/parseCEL.d.mts +292 -11
- package/dist/parseCEL.d.ts +292 -11
- package/dist/parseCEL.js +874 -1125
- package/dist/parseCEL.js.map +1 -1
- package/dist/parseCEL.mjs +828 -1126
- package/dist/parseCEL.mjs.map +1 -1
- package/dist/parseJSONata.d.mts +3 -2
- package/dist/parseJSONata.d.ts +3 -2
- package/dist/parseJSONata.js +49 -77
- package/dist/parseJSONata.js.map +1 -1
- package/dist/parseJSONata.mjs +4 -5
- package/dist/parseJSONata.mjs.map +1 -1
- package/dist/parseJsonLogic.d.mts +4 -3
- package/dist/parseJsonLogic.d.ts +4 -3
- package/dist/parseJsonLogic.js +5 -6
- package/dist/parseJsonLogic.js.map +1 -1
- package/dist/parseJsonLogic.mjs +5 -6
- package/dist/parseJsonLogic.mjs.map +1 -1
- package/dist/parseMongoDB.d.mts +3 -2
- package/dist/parseMongoDB.d.ts +3 -2
- package/dist/parseMongoDB.js +15 -16
- package/dist/parseMongoDB.js.map +1 -1
- package/dist/parseMongoDB.mjs +5 -6
- package/dist/parseMongoDB.mjs.map +1 -1
- package/dist/{parseNumber-BtGKa58z.mjs → parseNumber-CXdMVNFx.mjs} +2 -2
- package/dist/{parseNumber-BtGKa58z.mjs.map → parseNumber-CXdMVNFx.mjs.map} +1 -1
- package/dist/{parseNumber-Bcys1kOH.js → parseNumber-D4iQDxK-.js} +1 -1
- package/dist/{parseNumber-Bcys1kOH.js.map → parseNumber-D4iQDxK-.js.map} +1 -1
- package/dist/parseSQL.d.mts +3 -2
- package/dist/parseSQL.d.ts +3 -2
- package/dist/parseSQL.js +2691 -3036
- package/dist/parseSQL.js.map +1 -1
- package/dist/parseSQL.mjs +2691 -3037
- package/dist/parseSQL.mjs.map +1 -1
- package/dist/parseSpEL.d.mts +3 -2
- package/dist/parseSpEL.d.ts +3 -2
- package/dist/parseSpEL.js +7 -9
- package/dist/parseSpEL.js.map +1 -1
- package/dist/parseSpEL.mjs +5 -6
- package/dist/parseSpEL.mjs.map +1 -1
- package/dist/{prepareQueryObjects-BqFEs4eV.js → prepareQueryObjects-BOUWfel5.js} +4 -5
- package/dist/prepareQueryObjects-BOUWfel5.js.map +1 -0
- package/dist/{prepareQueryObjects-CS6Wmhmf.mjs → prepareQueryObjects-DPCC-iHp.mjs} +6 -7
- package/dist/prepareQueryObjects-DPCC-iHp.mjs.map +1 -0
- package/dist/query-builder-layout.css +1 -1
- package/dist/query-builder-layout.css.map +1 -1
- package/dist/query-builder.css +1 -1
- package/dist/query-builder.css.map +1 -1
- package/dist/react-querybuilder_core.d.mts +806 -1366
- package/dist/react-querybuilder_core.legacy-esm.d.ts +806 -1366
- package/dist/react-querybuilder_core.legacy-esm.js +455 -114
- package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
- package/dist/react-querybuilder_core.mjs +448 -117
- package/dist/react-querybuilder_core.mjs.map +1 -1
- package/dist/react-querybuilder_core.production.d.mts +806 -1366
- package/dist/react-querybuilder_core.production.mjs +1 -1
- package/dist/react-querybuilder_core.production.mjs.map +1 -1
- package/dist/styles/_layout.scss +61 -17
- package/dist/styles/_main.scss +22 -4
- package/dist/{transformQuery-FL_nlpp5.js → transformQuery-CWDPogO5.js} +1 -1
- package/dist/{transformQuery-FL_nlpp5.js.map → transformQuery-CWDPogO5.js.map} +1 -1
- package/dist/{transformQuery-DdMvmrCh.mjs → transformQuery-DCCpjtyq.mjs} +3 -3
- package/dist/{transformQuery-DdMvmrCh.mjs.map → transformQuery-DCCpjtyq.mjs.map} +1 -1
- package/dist/transformQuery.d.mts +1 -1
- package/dist/transformQuery.d.ts +1 -1
- package/dist/transformQuery.js +1 -1
- package/dist/transformQuery.mjs +2 -2
- package/package.json +14 -12
- package/dist/arrayUtils-BF1P8iHS.mjs.map +0 -1
- package/dist/arrayUtils-D5EoIsKP.js +0 -164
- package/dist/arrayUtils-D5EoIsKP.js.map +0 -1
- package/dist/basic-BfD-7CN3.d.mts +0 -1235
- package/dist/basic-C8xXKHIA.d.ts +0 -1235
- package/dist/objectUtils-BBZSfZJz.js +0 -17
- package/dist/objectUtils-BBZSfZJz.js.map +0 -1
- package/dist/objectUtils-BtWdcZVG.mjs +0 -11
- package/dist/objectUtils-BtWdcZVG.mjs.map +0 -1
- package/dist/optGroupUtils-CXLgyg2i.js.map +0 -1
- package/dist/optGroupUtils-Duv-M8rf.mjs.map +0 -1
- package/dist/prepareQueryObjects-BqFEs4eV.js.map +0 -1
- package/dist/prepareQueryObjects-CS6Wmhmf.mjs.map +0 -1
package/dist/formatQuery.mjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { convertFromIC } from "./convertQuery-
|
|
1
|
+
import { d as defaultPlaceholderOperatorName, i as toFlatOptionArray, o as toFullOptionList, t as getOption, u as defaultPlaceholderFieldName } from "./optGroupUtils-VeZ3k7-1.mjs";
|
|
2
|
+
import { i as trimIfString, n as splitBy, r as toArray, t as joinWith } from "./arrayUtils-A_OXU9W1.mjs";
|
|
3
|
+
import { a as lc, i as isPojo, n as isRuleGroupType, o as nullOrUndefinedOrEmpty, r as isRuleGroupTypeIC, s as numericRegex, t as isRuleGroup } from "./isRuleGroup-CYcfPgbg.mjs";
|
|
4
|
+
import { t as parseNumber } from "./parseNumber-CXdMVNFx.mjs";
|
|
5
|
+
import { t as transformQuery } from "./transformQuery-DCCpjtyq.mjs";
|
|
6
|
+
import { t as convertFromIC } from "./convertQuery-CqX3rPvj.mjs";
|
|
7
7
|
import { produce } from "immer";
|
|
8
8
|
|
|
9
9
|
//#region src/utils/isRuleOrGroupValid.ts
|
|
@@ -13,9 +13,11 @@ import { produce } from "immer";
|
|
|
13
13
|
const isValidationResult = (vr) => isPojo(vr) && typeof vr.valid === "boolean";
|
|
14
14
|
/**
|
|
15
15
|
* Determines if a rule or group is valid based on a validation result (if defined)
|
|
16
|
-
* or a validator function. Returns `true` if neither are defined
|
|
16
|
+
* or a validator function. Returns `true` if neither are defined and the `muted`
|
|
17
|
+
* property is not `true`.
|
|
17
18
|
*/
|
|
18
19
|
const isRuleOrGroupValid = (rg, validationResult, validator) => {
|
|
20
|
+
if (rg.muted) return false;
|
|
19
21
|
if (typeof validationResult === "boolean") return validationResult;
|
|
20
22
|
if (isValidationResult(validationResult)) return validationResult.valid;
|
|
21
23
|
if (typeof validator === "function" && !isRuleGroup(rg)) {
|
|
@@ -289,19 +291,45 @@ const defaultRuleGroupProcessorCEL = (ruleGroup, options) => {
|
|
|
289
291
|
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
290
292
|
const processRuleGroup = (rg, outermost) => {
|
|
291
293
|
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermost ? fallbackExpression : "";
|
|
292
|
-
const
|
|
293
|
-
|
|
294
|
-
|
|
294
|
+
const processedRules = [];
|
|
295
|
+
let precedingCombinator = "";
|
|
296
|
+
let firstRule = true;
|
|
297
|
+
for (const rule of rg.rules) {
|
|
298
|
+
if (typeof rule === "string") {
|
|
299
|
+
precedingCombinator = celCombinatorMap[rule];
|
|
300
|
+
continue;
|
|
301
|
+
}
|
|
302
|
+
if (isRuleGroup(rule)) {
|
|
303
|
+
const processedGroup = processRuleGroup(rule);
|
|
304
|
+
if (processedGroup) {
|
|
305
|
+
if (!firstRule && precedingCombinator) {
|
|
306
|
+
processedRules.push(precedingCombinator);
|
|
307
|
+
precedingCombinator = "";
|
|
308
|
+
}
|
|
309
|
+
firstRule = false;
|
|
310
|
+
processedRules.push(processedGroup);
|
|
311
|
+
}
|
|
312
|
+
continue;
|
|
313
|
+
}
|
|
295
314
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
296
|
-
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName)
|
|
315
|
+
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
297
316
|
const fieldData = getOption(fields, rule.field);
|
|
298
|
-
|
|
317
|
+
const processedRule = ruleProcessor(rule, {
|
|
299
318
|
...options,
|
|
300
319
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
301
320
|
escapeQuotes: (rule.valueSource ?? "value") === "value",
|
|
302
321
|
fieldData
|
|
303
322
|
});
|
|
304
|
-
|
|
323
|
+
if (processedRule) {
|
|
324
|
+
if (!firstRule && precedingCombinator) {
|
|
325
|
+
processedRules.push(precedingCombinator);
|
|
326
|
+
precedingCombinator = "";
|
|
327
|
+
}
|
|
328
|
+
firstRule = false;
|
|
329
|
+
processedRules.push(processedRule);
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
const expression = processedRules.join(isRuleGroupType(rg) ? ` ${celCombinatorMap[rg.combinator]} ` : " ");
|
|
305
333
|
const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "!" : ""}(`, ")"] : ["", ""];
|
|
306
334
|
return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
|
|
307
335
|
};
|
|
@@ -328,11 +356,10 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
|
|
|
328
356
|
else if (matchEval) {
|
|
329
357
|
const { mode, threshold } = matchEval;
|
|
330
358
|
const arrayElementAlias = "elem_alias";
|
|
331
|
-
const
|
|
359
|
+
const nestedArrayFilter = defaultRuleGroupProcessorCEL(transformQuery(rule.value, { ruleProcessor: (r) => ({
|
|
332
360
|
...r,
|
|
333
361
|
field: `${arrayElementAlias}${r.field ? `.${r.field}` : ""}`
|
|
334
|
-
}) });
|
|
335
|
-
const nestedArrayFilter = defaultRuleGroupProcessorCEL(celQuery, opts);
|
|
362
|
+
}) }), opts);
|
|
336
363
|
switch (mode) {
|
|
337
364
|
case "all": return `${field}.all(${arrayElementAlias}, ${nestedArrayFilter})`;
|
|
338
365
|
case "none":
|
|
@@ -366,8 +393,7 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
|
|
|
366
393
|
case "in":
|
|
367
394
|
case "notin": {
|
|
368
395
|
const [prefix, suffix] = shouldNegate$2(operatorTL) ? ["!(", ")"] : ["", ""];
|
|
369
|
-
|
|
370
|
-
return `${prefix}${field} in [${valueAsArray.map((val) => valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `"${escapeDoubleQuotes(val, escapeQuotes)}"`).join(", ")}]${suffix}`;
|
|
396
|
+
return `${prefix}${field} in [${toArray(value).map((val) => valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `"${escapeDoubleQuotes(val, escapeQuotes)}"`).join(", ")}]${suffix}`;
|
|
371
397
|
}
|
|
372
398
|
case "between":
|
|
373
399
|
case "notbetween": {
|
|
@@ -587,19 +613,45 @@ const defaultRuleGroupProcessorSpEL = (ruleGroup, options) => {
|
|
|
587
613
|
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
588
614
|
const processRuleGroup = (rg, outermost) => {
|
|
589
615
|
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermost ? fallbackExpression : "";
|
|
590
|
-
const
|
|
591
|
-
|
|
592
|
-
|
|
616
|
+
const processedRules = [];
|
|
617
|
+
let precedingCombinator = "";
|
|
618
|
+
let firstRule = true;
|
|
619
|
+
for (const rule of rg.rules) {
|
|
620
|
+
if (typeof rule === "string") {
|
|
621
|
+
precedingCombinator = rule;
|
|
622
|
+
continue;
|
|
623
|
+
}
|
|
624
|
+
if (isRuleGroup(rule)) {
|
|
625
|
+
const processedGroup = processRuleGroup(rule);
|
|
626
|
+
if (processedGroup) {
|
|
627
|
+
if (!firstRule && precedingCombinator) {
|
|
628
|
+
processedRules.push(precedingCombinator);
|
|
629
|
+
precedingCombinator = "";
|
|
630
|
+
}
|
|
631
|
+
firstRule = false;
|
|
632
|
+
processedRules.push(processedGroup);
|
|
633
|
+
}
|
|
634
|
+
continue;
|
|
635
|
+
}
|
|
593
636
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
594
|
-
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName)
|
|
637
|
+
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
595
638
|
const fieldData = getOption(fields, rule.field);
|
|
596
|
-
|
|
639
|
+
const processedRule = ruleProcessor(rule, {
|
|
597
640
|
...options,
|
|
598
641
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
599
642
|
escapeQuotes: (rule.valueSource ?? "value") === "value",
|
|
600
643
|
fieldData
|
|
601
644
|
});
|
|
602
|
-
|
|
645
|
+
if (processedRule) {
|
|
646
|
+
if (!firstRule && precedingCombinator) {
|
|
647
|
+
processedRules.push(precedingCombinator);
|
|
648
|
+
precedingCombinator = "";
|
|
649
|
+
}
|
|
650
|
+
firstRule = false;
|
|
651
|
+
processedRules.push(processedRule);
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
const expression = processedRules.join(isRuleGroupType(rg) ? ` ${rg.combinator} ` : " ");
|
|
603
655
|
const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "!" : ""}(`, ")"] : ["", ""];
|
|
604
656
|
return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
|
|
605
657
|
};
|
|
@@ -655,15 +707,9 @@ const defaultRuleProcessorSpEL = (rule, opts = {}) => {
|
|
|
655
707
|
case "contains":
|
|
656
708
|
case "doesnotcontain": return wrapInNegation(`${field} matches ${valueIsField || useBareValue ? trimIfString(value) : `'${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
|
|
657
709
|
case "beginswith":
|
|
658
|
-
case "doesnotbeginwith": {
|
|
659
|
-
const valueTL = valueIsField ? `'^'.concat(${trimIfString(value)})` : `'${typeof value === "string" && !value.startsWith("^") || useBareValue ? "^" : ""}${escapeSingleQuotes(value, escapeQuotes)}'`;
|
|
660
|
-
return wrapInNegation(`${field} matches ${valueTL}`, shouldNegate$1(operatorTL));
|
|
661
|
-
}
|
|
710
|
+
case "doesnotbeginwith": return wrapInNegation(`${field} matches ${valueIsField ? `'^'.concat(${trimIfString(value)})` : `'${typeof value === "string" && !value.startsWith("^") || useBareValue ? "^" : ""}${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
|
|
662
711
|
case "endswith":
|
|
663
|
-
case "doesnotendwith": {
|
|
664
|
-
const valueTL = valueIsField ? `${trimIfString(value)}.concat('$')` : `'${escapeSingleQuotes(value, escapeQuotes)}${typeof value === "string" && !value.endsWith("$") || useBareValue ? "$" : ""}'`;
|
|
665
|
-
return wrapInNegation(`${field} matches ${valueTL}`, shouldNegate$1(operatorTL));
|
|
666
|
-
}
|
|
712
|
+
case "doesnotendwith": return wrapInNegation(`${field} matches ${valueIsField ? `${trimIfString(value)}.concat('$')` : `'${escapeSingleQuotes(value, escapeQuotes)}${typeof value === "string" && !value.endsWith("$") || useBareValue ? "$" : ""}'`}`, shouldNegate$1(operatorTL));
|
|
667
713
|
case "null": return `${field} == null`;
|
|
668
714
|
case "notnull": return `${field} != null`;
|
|
669
715
|
case "in":
|
|
@@ -776,11 +822,10 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
|
776
822
|
if (opts.preset !== "postgresql") return;
|
|
777
823
|
const { mode, threshold } = matchEval;
|
|
778
824
|
const arrayElementAlias = "elem_alias";
|
|
779
|
-
const
|
|
825
|
+
const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(transformQuery(rule.value, { ruleProcessor: (r) => ({
|
|
780
826
|
...r,
|
|
781
827
|
field: arrayElementAlias
|
|
782
|
-
}) })
|
|
783
|
-
const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(sqlQuery, {
|
|
828
|
+
}) }), {
|
|
784
829
|
...opts,
|
|
785
830
|
context: {
|
|
786
831
|
...opts.context,
|
|
@@ -866,7 +911,6 @@ const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns
|
|
|
866
911
|
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap } = options;
|
|
867
912
|
if (!columns || !drizzleOperators) return;
|
|
868
913
|
const { and, not, or } = drizzleOperators;
|
|
869
|
-
const query = isRuleGroupType(ruleGroup) ? ruleGroup : convertFromIC(ruleGroup);
|
|
870
914
|
const ruleProcessor = defaultRuleProcessorDrizzle;
|
|
871
915
|
const processRuleGroup = (rg, _outermost) => {
|
|
872
916
|
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return;
|
|
@@ -890,7 +934,7 @@ const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns
|
|
|
890
934
|
const ruleGroupSQL = rg.combinator === "or" ? or(...processedRules) : and(...processedRules);
|
|
891
935
|
return rg.not ? not(ruleGroupSQL) : ruleGroupSQL;
|
|
892
936
|
};
|
|
893
|
-
return processRuleGroup(
|
|
937
|
+
return processRuleGroup(convertFromIC(ruleGroup), true);
|
|
894
938
|
};
|
|
895
939
|
|
|
896
940
|
//#endregion
|
|
@@ -902,7 +946,6 @@ const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns
|
|
|
902
946
|
*/
|
|
903
947
|
const defaultRuleGroupProcessorElasticSearch = (ruleGroup, options) => {
|
|
904
948
|
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
905
|
-
const query = convertFromIC(ruleGroup);
|
|
906
949
|
const processRuleGroup = (rg) => {
|
|
907
950
|
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return false;
|
|
908
951
|
const processedRules = rg.rules.map((rule) => {
|
|
@@ -919,7 +962,7 @@ const defaultRuleGroupProcessorElasticSearch = (ruleGroup, options) => {
|
|
|
919
962
|
if (processedRules.length === 0) return false;
|
|
920
963
|
return { bool: rg.not ? { must_not: /^or$/i.test(rg.combinator) ? { bool: { should: processedRules } } : processedRules } : { [/^or$/i.test(rg.combinator) ? "should" : "must"]: processedRules } };
|
|
921
964
|
};
|
|
922
|
-
const processedRuleGroup = processRuleGroup(
|
|
965
|
+
const processedRuleGroup = processRuleGroup(convertFromIC(ruleGroup));
|
|
923
966
|
return processedRuleGroup === false ? {} : processedRuleGroup;
|
|
924
967
|
};
|
|
925
968
|
|
|
@@ -934,19 +977,45 @@ const defaultRuleGroupProcessorJSONata = (ruleGroup, options) => {
|
|
|
934
977
|
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
935
978
|
const processRuleGroup = (rg, outermost) => {
|
|
936
979
|
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermost ? fallbackExpression : "";
|
|
937
|
-
const
|
|
938
|
-
|
|
939
|
-
|
|
980
|
+
const processedRules = [];
|
|
981
|
+
let precedingCombinator = "";
|
|
982
|
+
let firstRule = true;
|
|
983
|
+
for (const rule of rg.rules) {
|
|
984
|
+
if (typeof rule === "string") {
|
|
985
|
+
precedingCombinator = rule;
|
|
986
|
+
continue;
|
|
987
|
+
}
|
|
988
|
+
if (isRuleGroup(rule)) {
|
|
989
|
+
const processedGroup = processRuleGroup(rule);
|
|
990
|
+
if (processedGroup) {
|
|
991
|
+
if (!firstRule && precedingCombinator) {
|
|
992
|
+
processedRules.push(precedingCombinator);
|
|
993
|
+
precedingCombinator = "";
|
|
994
|
+
}
|
|
995
|
+
firstRule = false;
|
|
996
|
+
processedRules.push(processedGroup);
|
|
997
|
+
}
|
|
998
|
+
continue;
|
|
999
|
+
}
|
|
940
1000
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
941
|
-
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName)
|
|
1001
|
+
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
942
1002
|
const fieldData = getOption(fields, rule.field);
|
|
943
|
-
|
|
1003
|
+
const processedRule = ruleProcessor(rule, {
|
|
944
1004
|
...options,
|
|
945
1005
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
946
1006
|
escapeQuotes: (rule.valueSource ?? "value") === "value",
|
|
947
1007
|
fieldData
|
|
948
1008
|
});
|
|
949
|
-
|
|
1009
|
+
if (processedRule) {
|
|
1010
|
+
if (!firstRule && precedingCombinator) {
|
|
1011
|
+
processedRules.push(precedingCombinator);
|
|
1012
|
+
precedingCombinator = "";
|
|
1013
|
+
}
|
|
1014
|
+
firstRule = false;
|
|
1015
|
+
processedRules.push(processedRule);
|
|
1016
|
+
}
|
|
1017
|
+
}
|
|
1018
|
+
const expression = processedRules.join(isRuleGroupType(rg) ? ` ${rg.combinator} ` : " ");
|
|
950
1019
|
const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "$not" : ""}(`, ")"] : ["", ""];
|
|
951
1020
|
return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
|
|
952
1021
|
};
|
|
@@ -992,7 +1061,6 @@ const defaultRuleGroupProcessorJsonLogic = (ruleGroup, options) => {
|
|
|
992
1061
|
*/
|
|
993
1062
|
const defaultRuleGroupProcessorLDAP = (ruleGroup, options) => {
|
|
994
1063
|
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
995
|
-
const query = convertFromIC(ruleGroup);
|
|
996
1064
|
const processRuleGroup = (rg, outermost) => {
|
|
997
1065
|
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermost ? fallbackExpression : "";
|
|
998
1066
|
const rules = rg.rules.map((rule) => {
|
|
@@ -1012,7 +1080,7 @@ const defaultRuleGroupProcessorLDAP = (ruleGroup, options) => {
|
|
|
1012
1080
|
const [prefix, suffix] = rules.length > 1 ? [`${notPrefix}(${rg.combinator === "or" ? "|" : "&"}`, `)${notSuffix}`] : [notPrefix, notSuffix];
|
|
1013
1081
|
return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
|
|
1014
1082
|
};
|
|
1015
|
-
return processRuleGroup(
|
|
1083
|
+
return processRuleGroup(convertFromIC(ruleGroup), true);
|
|
1016
1084
|
};
|
|
1017
1085
|
|
|
1018
1086
|
//#endregion
|
|
@@ -1067,20 +1135,46 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
|
|
|
1067
1135
|
const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
|
|
1068
1136
|
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
|
|
1069
1137
|
const rg2 = isRuleGroupTypeIC(rg) && rg.rules.some((r) => typeof r === "string" && lc(r) === "xor") ? convertFromIC(rg) : rg;
|
|
1070
|
-
const processedRules =
|
|
1071
|
-
|
|
1072
|
-
|
|
1138
|
+
const processedRules = [];
|
|
1139
|
+
let precedingCombinator = "";
|
|
1140
|
+
let firstRule = true;
|
|
1141
|
+
for (const rule of rg2.rules) {
|
|
1142
|
+
if (typeof rule === "string") {
|
|
1143
|
+
precedingCombinator = `, ${translations[rule] ?? rule} `;
|
|
1144
|
+
continue;
|
|
1145
|
+
}
|
|
1146
|
+
if (isRuleGroup(rule)) {
|
|
1147
|
+
const processedGroup = processRuleGroup(rule, rg2.rules.length === 1 && !(rg2.not || /^xor$/i.test(rg2.combinator ?? "")));
|
|
1148
|
+
// istanbul ignore else
|
|
1149
|
+
if (processedGroup) {
|
|
1150
|
+
if (!firstRule && precedingCombinator) {
|
|
1151
|
+
processedRules.push(precedingCombinator);
|
|
1152
|
+
precedingCombinator = "";
|
|
1153
|
+
}
|
|
1154
|
+
firstRule = false;
|
|
1155
|
+
processedRules.push(processedGroup);
|
|
1156
|
+
}
|
|
1157
|
+
continue;
|
|
1158
|
+
}
|
|
1073
1159
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1074
|
-
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName)
|
|
1160
|
+
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
1075
1161
|
const escapeQuotes = (rule.valueSource ?? "value") === "value";
|
|
1076
1162
|
const fieldData = getOption(fields, rule.field);
|
|
1077
|
-
|
|
1163
|
+
const processedRule = ruleProcessor(rule, {
|
|
1078
1164
|
...options,
|
|
1079
1165
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
1080
1166
|
escapeQuotes,
|
|
1081
1167
|
fieldData
|
|
1082
1168
|
});
|
|
1083
|
-
|
|
1169
|
+
if (processedRule) {
|
|
1170
|
+
if (!firstRule && precedingCombinator) {
|
|
1171
|
+
processedRules.push(precedingCombinator);
|
|
1172
|
+
precedingCombinator = "";
|
|
1173
|
+
}
|
|
1174
|
+
firstRule = false;
|
|
1175
|
+
processedRules.push(processedRule);
|
|
1176
|
+
}
|
|
1177
|
+
}
|
|
1084
1178
|
if (processedRules.length === 0) return fallbackExpression;
|
|
1085
1179
|
const isXOR = lc(rg2.combinator ?? "") === "xor";
|
|
1086
1180
|
const combinator = isXOR ? rg2.combinator.slice(1) : rg2.combinator;
|
|
@@ -1088,7 +1182,7 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
|
|
|
1088
1182
|
const [prefixTL, suffixTL] = ["groupPrefix", "groupSuffix"].map((key) => rg2.not ? isXOR ? getNLTranslataion(key, translations, ["not", "xor"]) : getNLTranslataion(key, translations, ["not"]) : isXOR ? getNLTranslataion(key, translations, ["xor"]) : getNLTranslataion(key, translations));
|
|
1089
1183
|
const prefix = mustWrap ? `${prefixTL} (`.trim() : "";
|
|
1090
1184
|
const suffix = mustWrap ? `) ${suffixTL}`.trim() : "";
|
|
1091
|
-
return `${prefix}${processedRules.
|
|
1185
|
+
return `${prefix}${processedRules.join(isRuleGroupType(rg2) ? `, ${translations[combinator] ?? combinator} ` : "")}${suffix}`;
|
|
1092
1186
|
};
|
|
1093
1187
|
return processRuleGroup(ruleGroup, true);
|
|
1094
1188
|
};
|
|
@@ -1138,11 +1232,37 @@ const defaultRuleGroupProcessorParameterized = (ruleGroup, options) => {
|
|
|
1138
1232
|
};
|
|
1139
1233
|
const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
|
|
1140
1234
|
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
|
|
1141
|
-
const processedRules =
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1235
|
+
const processedRules = [];
|
|
1236
|
+
let precedingCombinator = "";
|
|
1237
|
+
let firstRule = true;
|
|
1238
|
+
for (const rule of rg.rules) {
|
|
1239
|
+
if (typeof rule === "string") {
|
|
1240
|
+
precedingCombinator = rule;
|
|
1241
|
+
continue;
|
|
1242
|
+
}
|
|
1243
|
+
if (isRuleGroup(rule)) {
|
|
1244
|
+
const processedGroup = processRuleGroup(rule, rg.rules.length === 1);
|
|
1245
|
+
// istanbul ignore else
|
|
1246
|
+
if (processedGroup) {
|
|
1247
|
+
if (!firstRule && precedingCombinator) {
|
|
1248
|
+
processedRules.push(precedingCombinator);
|
|
1249
|
+
precedingCombinator = "";
|
|
1250
|
+
}
|
|
1251
|
+
firstRule = false;
|
|
1252
|
+
processedRules.push(processedGroup);
|
|
1253
|
+
}
|
|
1254
|
+
continue;
|
|
1255
|
+
}
|
|
1256
|
+
const processedRule = processRule(rule);
|
|
1257
|
+
if (processedRule) {
|
|
1258
|
+
if (!firstRule && precedingCombinator) {
|
|
1259
|
+
processedRules.push(precedingCombinator);
|
|
1260
|
+
precedingCombinator = "";
|
|
1261
|
+
}
|
|
1262
|
+
firstRule = false;
|
|
1263
|
+
processedRules.push(processedRule);
|
|
1264
|
+
}
|
|
1265
|
+
}
|
|
1146
1266
|
if (processedRules.length === 0) return fallbackExpression;
|
|
1147
1267
|
return `${rg.not ? "NOT " : ""}(${processedRules.join(isRuleGroupType(rg) ? ` ${rg.combinator} ` : " ")})`;
|
|
1148
1268
|
};
|
|
@@ -1251,20 +1371,46 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
|
|
|
1251
1371
|
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
1252
1372
|
const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
|
|
1253
1373
|
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
|
|
1254
|
-
const processedRules =
|
|
1255
|
-
|
|
1256
|
-
|
|
1374
|
+
const processedRules = [];
|
|
1375
|
+
let precedingCombinator = "";
|
|
1376
|
+
let firstRule = true;
|
|
1377
|
+
for (const rule of rg.rules) {
|
|
1378
|
+
if (typeof rule === "string") {
|
|
1379
|
+
precedingCombinator = rule;
|
|
1380
|
+
continue;
|
|
1381
|
+
}
|
|
1382
|
+
if (isRuleGroup(rule)) {
|
|
1383
|
+
const processedGroup = processRuleGroup(rule, rg.rules.length === 1);
|
|
1384
|
+
// istanbul ignore else
|
|
1385
|
+
if (processedGroup) {
|
|
1386
|
+
if (!firstRule && precedingCombinator) {
|
|
1387
|
+
processedRules.push(precedingCombinator);
|
|
1388
|
+
precedingCombinator = "";
|
|
1389
|
+
}
|
|
1390
|
+
firstRule = false;
|
|
1391
|
+
processedRules.push(processedGroup);
|
|
1392
|
+
}
|
|
1393
|
+
continue;
|
|
1394
|
+
}
|
|
1257
1395
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1258
|
-
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName)
|
|
1396
|
+
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
1259
1397
|
const escapeQuotes = (rule.valueSource ?? "value") === "value";
|
|
1260
1398
|
const fieldData = getOption(fields, rule.field);
|
|
1261
|
-
|
|
1399
|
+
const processedRule = ruleProcessor(rule, {
|
|
1262
1400
|
...options,
|
|
1263
1401
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
1264
1402
|
escapeQuotes,
|
|
1265
1403
|
fieldData
|
|
1266
1404
|
});
|
|
1267
|
-
|
|
1405
|
+
if (processedRule) {
|
|
1406
|
+
if (!firstRule && precedingCombinator) {
|
|
1407
|
+
processedRules.push(precedingCombinator);
|
|
1408
|
+
precedingCombinator = "";
|
|
1409
|
+
}
|
|
1410
|
+
firstRule = false;
|
|
1411
|
+
processedRules.push(processedRule);
|
|
1412
|
+
}
|
|
1413
|
+
}
|
|
1268
1414
|
if (processedRules.length === 0) return fallbackExpression;
|
|
1269
1415
|
return `${rg.not ? "NOT " : ""}(${processedRules.join(isRuleGroupType(rg) ? ` ${rg.combinator} ` : " ")})`;
|
|
1270
1416
|
};
|
|
@@ -1542,10 +1688,7 @@ const defaultRuleProcessorJsonLogic = (rule, options = {}) => {
|
|
|
1542
1688
|
case "null":
|
|
1543
1689
|
case "notnull": return { [`${operatorLC === "notnull" ? "!" : "="}=`]: [fieldObject, null] };
|
|
1544
1690
|
case "in":
|
|
1545
|
-
case "notin": {
|
|
1546
|
-
const valueAsArray = toArray(value).map((v) => fieldOrNumberRenderer(v));
|
|
1547
|
-
return negateIfNotOp(operatorLC, { in: [fieldObject, valueAsArray] });
|
|
1548
|
-
}
|
|
1691
|
+
case "notin": return negateIfNotOp(operatorLC, { in: [fieldObject, toArray(value).map((v) => fieldOrNumberRenderer(v))] });
|
|
1549
1692
|
case "between":
|
|
1550
1693
|
case "notbetween": {
|
|
1551
1694
|
const valueAsArray = toArray(value);
|
|
@@ -1576,20 +1719,11 @@ const defaultRuleProcessorJsonLogic = (rule, options = {}) => {
|
|
|
1576
1719
|
return false;
|
|
1577
1720
|
}
|
|
1578
1721
|
case "contains":
|
|
1579
|
-
case "doesnotcontain": {
|
|
1580
|
-
const jsonRule = { in: [fieldOrNumberRenderer(value), fieldObject] };
|
|
1581
|
-
return negateIfNotOp(operatorLC, jsonRule);
|
|
1582
|
-
}
|
|
1722
|
+
case "doesnotcontain": return negateIfNotOp(operatorLC, { in: [fieldOrNumberRenderer(value), fieldObject] });
|
|
1583
1723
|
case "beginswith":
|
|
1584
|
-
case "doesnotbeginwith": {
|
|
1585
|
-
const jsonRule = { startsWith: [fieldObject, fieldOrNumberRenderer(value)] };
|
|
1586
|
-
return negateIfNotOp(operatorLC, jsonRule);
|
|
1587
|
-
}
|
|
1724
|
+
case "doesnotbeginwith": return negateIfNotOp(operatorLC, { startsWith: [fieldObject, fieldOrNumberRenderer(value)] });
|
|
1588
1725
|
case "endswith":
|
|
1589
|
-
case "doesnotendwith": {
|
|
1590
|
-
const jsonRule = { endsWith: [fieldObject, fieldOrNumberRenderer(value)] };
|
|
1591
|
-
return negateIfNotOp(operatorLC, jsonRule);
|
|
1592
|
-
}
|
|
1726
|
+
case "doesnotendwith": return negateIfNotOp(operatorLC, { endsWith: [fieldObject, fieldOrNumberRenderer(value)] });
|
|
1593
1727
|
}
|
|
1594
1728
|
return false;
|
|
1595
1729
|
};
|
|
@@ -1624,10 +1758,7 @@ const defaultRuleProcessorLDAP = (rule, options = {}) => {
|
|
|
1624
1758
|
case "null":
|
|
1625
1759
|
case "notnull": return negateIf(`(${field}=*)`, operatorLC === "notnull");
|
|
1626
1760
|
case "in":
|
|
1627
|
-
case "notin": {
|
|
1628
|
-
const valueAsArray = toArray(value);
|
|
1629
|
-
return negateIf(`(|${valueAsArray.map((val) => `(${field}=${ldapEscape(val)})`).join("")})`, operatorLC === "notin");
|
|
1630
|
-
}
|
|
1761
|
+
case "notin": return negateIf(`(|${toArray(value).map((val) => `(${field}=${ldapEscape(val)})`).join("")})`, operatorLC === "notin");
|
|
1631
1762
|
case "between":
|
|
1632
1763
|
case "notbetween": {
|
|
1633
1764
|
const valueAsArray = toArray(value);
|
|
@@ -1795,10 +1926,9 @@ const defaultRuleProcessorNL = (rule, opts) => {
|
|
|
1795
1926
|
});
|
|
1796
1927
|
const operatorLC = lc(operator);
|
|
1797
1928
|
if ((operatorLC === "in" || operatorLC === "notin" || operatorLC === "between" || operatorLC === "notbetween") && !value) return "";
|
|
1798
|
-
const processedOperator = operatorProcessor(rule, opts);
|
|
1799
1929
|
const wordOrderMap = {
|
|
1800
1930
|
S: processedField,
|
|
1801
|
-
V:
|
|
1931
|
+
V: operatorProcessor(rule, opts),
|
|
1802
1932
|
O: value
|
|
1803
1933
|
};
|
|
1804
1934
|
return normalizeConstituentWordOrder(wordOrder).map((term) => `${wordOrderMap[term]}`).join(" ").trim();
|