@react-querybuilder/core 8.17.0 → 8.19.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/cjs/react-querybuilder_core.cjs.development.d.ts +57 -16
- package/dist/cjs/react-querybuilder_core.cjs.development.js +212 -206
- package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
- package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +57 -16
- 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-BoMPXL7_.js → convertQuery-BJKNgecE.js} +2 -2
- package/dist/{convertQuery-BoMPXL7_.js.map → convertQuery-BJKNgecE.js.map} +1 -1
- package/dist/{convertQuery-CQwOrjQr.mjs → convertQuery-J1CaoDxe.mjs} +2 -2
- package/dist/{convertQuery-CQwOrjQr.mjs.map → convertQuery-J1CaoDxe.mjs.map} +1 -1
- package/dist/formatQuery.d.mts +5 -3
- package/dist/formatQuery.d.ts +5 -3
- package/dist/formatQuery.js +203 -203
- package/dist/formatQuery.js.map +1 -1
- package/dist/formatQuery.mjs +203 -203
- package/dist/formatQuery.mjs.map +1 -1
- package/dist/{import-CSHMjlid.d.ts → import-Qs1-kgv5.d.ts} +2 -2
- package/dist/{import-BQ5xaW6i.d.mts → import-ShTj5IdB.d.mts} +2 -2
- package/dist/{index-CREDWM32.d.ts → index-DlVg-QXo.d.mts} +32 -3
- package/dist/{index-CREDWM32.d.mts → index-DlVg-QXo.d.ts} +32 -3
- package/dist/{objectUtils-DxVaGCdg.js → objectUtils-DBJI82bl.js} +2 -2
- package/dist/objectUtils-DBJI82bl.js.map +1 -0
- package/dist/{objectUtils-D-w8MzpZ.mjs → objectUtils-ZvPkF6u6.mjs} +2 -2
- package/dist/objectUtils-ZvPkF6u6.mjs.map +1 -0
- package/dist/parseCEL.d.mts +7 -7
- package/dist/parseCEL.d.ts +7 -7
- package/dist/parseCEL.js +6 -6
- package/dist/parseCEL.js.map +1 -1
- package/dist/parseCEL.mjs +6 -6
- package/dist/parseCEL.mjs.map +1 -1
- package/dist/parseCypher.d.mts +1 -1
- package/dist/parseCypher.d.ts +1 -1
- package/dist/parseCypher.js.map +1 -1
- package/dist/parseCypher.mjs.map +1 -1
- package/dist/parseGremlin.d.mts +1 -1
- package/dist/parseGremlin.d.ts +1 -1
- package/dist/parseGremlin.js.map +1 -1
- package/dist/parseGremlin.mjs.map +1 -1
- package/dist/parseJSONata.d.mts +2 -2
- package/dist/parseJSONata.d.ts +2 -2
- package/dist/parseJSONata.js +2 -2
- package/dist/parseJSONata.js.map +1 -1
- package/dist/parseJSONata.mjs +2 -2
- package/dist/parseJSONata.mjs.map +1 -1
- package/dist/parseJsonLogic.d.mts +2 -2
- package/dist/parseJsonLogic.d.ts +2 -2
- package/dist/parseJsonLogic.js +11 -11
- package/dist/parseJsonLogic.js.map +1 -1
- package/dist/parseJsonLogic.mjs +11 -11
- package/dist/parseJsonLogic.mjs.map +1 -1
- package/dist/parseMongoDB.d.mts +2 -2
- package/dist/parseMongoDB.d.ts +2 -2
- package/dist/parseMongoDB.js +4 -4
- package/dist/parseMongoDB.js.map +1 -1
- package/dist/parseMongoDB.mjs +4 -4
- package/dist/parseMongoDB.mjs.map +1 -1
- package/dist/parseSPARQL.d.mts +1 -1
- package/dist/parseSPARQL.d.ts +1 -1
- package/dist/parseSPARQL.js.map +1 -1
- package/dist/parseSPARQL.mjs.map +1 -1
- package/dist/parseSQL.d.mts +2 -2
- package/dist/parseSQL.d.ts +2 -2
- package/dist/parseSQL.js +3 -3
- package/dist/parseSQL.js.map +1 -1
- package/dist/parseSQL.mjs +3 -3
- package/dist/parseSQL.mjs.map +1 -1
- package/dist/parseSpEL.d.mts +2 -2
- package/dist/parseSpEL.d.ts +2 -2
- package/dist/parseSpEL.js +3 -3
- package/dist/parseSpEL.js.map +1 -1
- package/dist/parseSpEL.mjs +3 -3
- package/dist/parseSpEL.mjs.map +1 -1
- package/dist/{prepareQueryObjects-BXf5aV-A.mjs → prepareQueryObjects-Cd_tt4oy.mjs} +3 -3
- package/dist/{prepareQueryObjects-BXf5aV-A.mjs.map → prepareQueryObjects-Cd_tt4oy.mjs.map} +1 -1
- package/dist/{prepareQueryObjects-gRQqiBPR.js → prepareQueryObjects-DaAXX792.js} +3 -3
- package/dist/{prepareQueryObjects-gRQqiBPR.js.map → prepareQueryObjects-DaAXX792.js.map} +1 -1
- package/dist/react-querybuilder_core.d.mts +57 -16
- package/dist/react-querybuilder_core.legacy-esm.d.ts +57 -16
- package/dist/react-querybuilder_core.legacy-esm.js +210 -204
- package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
- package/dist/react-querybuilder_core.mjs +212 -206
- package/dist/react-querybuilder_core.mjs.map +1 -1
- package/dist/react-querybuilder_core.production.d.mts +57 -16
- package/dist/react-querybuilder_core.production.mjs +1 -1
- package/dist/react-querybuilder_core.production.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 +1 -1
- package/dist/{utils-ZlKseh1X.js → utils-BpaOtylk.js} +3 -3
- package/dist/utils-BpaOtylk.js.map +1 -0
- package/dist/{utils-01WaTGBL.mjs → utils-CJRGiPb-.mjs} +3 -3
- package/dist/utils-CJRGiPb-.mjs.map +1 -0
- package/package.json +12 -12
- package/dist/objectUtils-D-w8MzpZ.mjs.map +0 -1
- package/dist/objectUtils-DxVaGCdg.js.map +0 -1
- package/dist/utils-01WaTGBL.mjs.map +0 -1
- package/dist/utils-ZlKseh1X.js.map +0 -1
package/dist/formatQuery.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_utils = require("./utils-
|
|
3
|
-
const require_objectUtils = require("./objectUtils-
|
|
2
|
+
const require_utils = require("./utils-BpaOtylk.js");
|
|
3
|
+
const require_objectUtils = require("./objectUtils-DBJI82bl.js");
|
|
4
4
|
const require_transformQuery = require("./transformQuery.js");
|
|
5
|
-
const require_convertQuery = require("./convertQuery-
|
|
5
|
+
const require_convertQuery = require("./convertQuery-BJKNgecE.js");
|
|
6
6
|
//#region src/utils/isRuleOrGroupValid.ts
|
|
7
7
|
/**
|
|
8
8
|
* Determines if an object is useful as a validation result.
|
|
@@ -114,7 +114,7 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
|
|
|
114
114
|
const totalCount = `double(${field}.size())`;
|
|
115
115
|
const filteredCount = `${field}.filter(${arrayElementAlias}, ${nestedArrayFilter}).size()`;
|
|
116
116
|
const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "==";
|
|
117
|
-
if (threshold > 0 && threshold < 1) return
|
|
117
|
+
if (threshold > 0 && threshold < 1) return `double(${filteredCount}) ${op} (${totalCount} * ${threshold})`;
|
|
118
118
|
return `${filteredCount} ${op} ${threshold}`;
|
|
119
119
|
}
|
|
120
120
|
}
|
|
@@ -601,106 +601,6 @@ const defaultRuleGroupProcessorCypher = (ruleGroup, options) => {
|
|
|
601
601
|
return processRuleGroup(ruleGroup, true);
|
|
602
602
|
};
|
|
603
603
|
//#endregion
|
|
604
|
-
//#region src/utils/formatQuery/defaultRuleProcessorDrizzle.ts
|
|
605
|
-
/**
|
|
606
|
-
* Default rule processor used by {@link formatQuery} for the "drizzle" format.
|
|
607
|
-
*
|
|
608
|
-
* @group Export
|
|
609
|
-
*/
|
|
610
|
-
const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
611
|
-
const opts = _options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
612
|
-
// v8 ignore next
|
|
613
|
-
const { parseNumbers, preserveValueOrder, context = {} } = opts;
|
|
614
|
-
const { columns, drizzleOperators, useRawFields } = context;
|
|
615
|
-
if (!columns || !drizzleOperators) return void 0;
|
|
616
|
-
const { between, eq, gt, gte, inArray, isNotNull, isNull, like, lt, lte, ne, notBetween, notInArray, notLike, sql } = drizzleOperators;
|
|
617
|
-
const { field, operator, value, valueSource } = rule;
|
|
618
|
-
const column = useRawFields && /[a-z][a-z0-9]*/i.test(field) ? sql.raw(field) : columns[field];
|
|
619
|
-
const operatorLC = require_objectUtils.lc(operator);
|
|
620
|
-
const valueIsField = valueSource === "field";
|
|
621
|
-
const asFieldOrValue = (v) => valueIsField ? columns[v] : v;
|
|
622
|
-
const maybeParseNumber = (v) => {
|
|
623
|
-
if (valueIsField || !parseNumbers) return asFieldOrValue(v);
|
|
624
|
-
return require_utils.shouldRenderAsNumber(v, true) ? require_utils.parseNumber(v, { parseNumbers: true }) : v;
|
|
625
|
-
};
|
|
626
|
-
if (!column) return void 0;
|
|
627
|
-
const matchEval = require_utils.processMatchMode(rule);
|
|
628
|
-
if (matchEval === false) return;
|
|
629
|
-
else if (matchEval) {
|
|
630
|
-
if (opts.preset !== "postgresql") return void 0;
|
|
631
|
-
const { mode, threshold } = matchEval;
|
|
632
|
-
const arrayElementAlias = "elem_alias";
|
|
633
|
-
const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(require_transformQuery.transformQuery(rule.value, { ruleProcessor: (r) => ({
|
|
634
|
-
...r,
|
|
635
|
-
field: arrayElementAlias
|
|
636
|
-
}) }), {
|
|
637
|
-
...opts,
|
|
638
|
-
context: {
|
|
639
|
-
...opts.context,
|
|
640
|
-
useRawFields: true
|
|
641
|
-
}
|
|
642
|
-
});
|
|
643
|
-
switch (mode) {
|
|
644
|
-
case "all": return sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) = array_length(${column}, 1)`;
|
|
645
|
-
case "none": return sql`not exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
|
|
646
|
-
case "some": return sql`exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
|
|
647
|
-
case "atleast":
|
|
648
|
-
case "atmost":
|
|
649
|
-
case "exactly": {
|
|
650
|
-
const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "=";
|
|
651
|
-
return threshold > 0 && threshold < 1 ? sql`(select count(*) / array_length(${column}, 1) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}` : sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}`;
|
|
652
|
-
}
|
|
653
|
-
}
|
|
654
|
-
}
|
|
655
|
-
switch (operatorLC) {
|
|
656
|
-
case "=": return eq(column, maybeParseNumber(value));
|
|
657
|
-
case "!=": return ne(column, maybeParseNumber(value));
|
|
658
|
-
case ">": return gt(column, maybeParseNumber(value));
|
|
659
|
-
case "<": return lt(column, maybeParseNumber(value));
|
|
660
|
-
case ">=": return gte(column, maybeParseNumber(value));
|
|
661
|
-
case "<=": return lte(column, maybeParseNumber(value));
|
|
662
|
-
case "beginswith":
|
|
663
|
-
case "doesnotbeginwith": return (operatorLC === "doesnotbeginwith" ? notLike : like)(column, valueIsField ? sql`${asFieldOrValue(value)} || '%'` : `${value}%`);
|
|
664
|
-
case "contains":
|
|
665
|
-
case "doesnotcontain": return (operatorLC === "doesnotcontain" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)} || '%'` : `%${value}%`);
|
|
666
|
-
case "endswith":
|
|
667
|
-
case "doesnotendwith": return (operatorLC === "doesnotendwith" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)}` : `%${value}`);
|
|
668
|
-
case "null": return isNull(column);
|
|
669
|
-
case "notnull": return isNotNull(column);
|
|
670
|
-
case "in":
|
|
671
|
-
case "notin": {
|
|
672
|
-
const valueAsArray = require_utils.toArray(value).map((v) => maybeParseNumber(v));
|
|
673
|
-
return operatorLC === "notin" ? notInArray(column, valueAsArray) : inArray(column, valueAsArray);
|
|
674
|
-
}
|
|
675
|
-
case "between":
|
|
676
|
-
case "notbetween": {
|
|
677
|
-
const valueAsArray = require_utils.toArray(value);
|
|
678
|
-
if (valueAsArray.length >= 2 && require_utils.isValidValue(valueAsArray[0]) && require_utils.isValidValue(valueAsArray[1])) {
|
|
679
|
-
let [first, second] = valueAsArray;
|
|
680
|
-
const shouldParseNumbers = !(parseNumbers === false);
|
|
681
|
-
if (!valueIsField && require_utils.shouldRenderAsNumber(first, shouldParseNumbers) && require_utils.shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
682
|
-
const firstNum = require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
683
|
-
const secondNum = require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
684
|
-
if (!preserveValueOrder && secondNum < firstNum) {
|
|
685
|
-
const tempNum = secondNum;
|
|
686
|
-
second = firstNum;
|
|
687
|
-
first = tempNum;
|
|
688
|
-
} else {
|
|
689
|
-
first = firstNum;
|
|
690
|
-
second = secondNum;
|
|
691
|
-
}
|
|
692
|
-
} else if (valueIsField) {
|
|
693
|
-
first = asFieldOrValue(first);
|
|
694
|
-
second = asFieldOrValue(second);
|
|
695
|
-
}
|
|
696
|
-
return operatorLC === "notbetween" ? notBetween(column, first, second) : between(column, first, second);
|
|
697
|
-
}
|
|
698
|
-
return;
|
|
699
|
-
}
|
|
700
|
-
default: return;
|
|
701
|
-
}
|
|
702
|
-
};
|
|
703
|
-
//#endregion
|
|
704
604
|
//#region src/utils/formatQuery/defaultRuleGroupProcessorDrizzle.ts
|
|
705
605
|
/**
|
|
706
606
|
* Default rule group processor used by {@link formatQuery} for the "drizzle" format. The returned
|
|
@@ -715,10 +615,9 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
|
715
615
|
* @group Export
|
|
716
616
|
*/
|
|
717
617
|
const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns, drizzleOperators) => {
|
|
718
|
-
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap } = options;
|
|
618
|
+
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, ruleProcessor } = options;
|
|
719
619
|
if (!columns || !drizzleOperators) return void 0;
|
|
720
620
|
const { and, not, or } = drizzleOperators;
|
|
721
|
-
const ruleProcessor = defaultRuleProcessorDrizzle;
|
|
722
621
|
const processRuleGroup = (rg, _outermost) => {
|
|
723
622
|
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return;
|
|
724
623
|
const processedRules = rg.rules.map((rule) => {
|
|
@@ -996,7 +895,7 @@ const defaultRuleGroupProcessorMongoDB = (ruleGroup, options, meta) => {
|
|
|
996
895
|
const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
|
|
997
896
|
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, translations, validateRule, validationMap } = options;
|
|
998
897
|
const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
|
|
999
|
-
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression :
|
|
898
|
+
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
|
|
1000
899
|
const rg2 = require_objectUtils.isRuleGroupTypeIC(rg) && rg.rules.some((r) => typeof r === "string" && require_objectUtils.lc(r) === "xor") ? require_convertQuery.convertFromIC(rg) : rg;
|
|
1001
900
|
const processedRules = [];
|
|
1002
901
|
let precedingCombinator = "";
|
|
@@ -1094,7 +993,7 @@ const defaultRuleGroupProcessorParameterized = (ruleGroup, options) => {
|
|
|
1094
993
|
return sql;
|
|
1095
994
|
};
|
|
1096
995
|
const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
|
|
1097
|
-
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression :
|
|
996
|
+
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
|
|
1098
997
|
const processedRules = [];
|
|
1099
998
|
let precedingCombinator = "";
|
|
1100
999
|
let firstRule = true;
|
|
@@ -1287,7 +1186,7 @@ const defaultRuleGroupProcessorSPARQL = (ruleGroup, options) => {
|
|
|
1287
1186
|
const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
|
|
1288
1187
|
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
1289
1188
|
const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
|
|
1290
|
-
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression :
|
|
1189
|
+
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
|
|
1291
1190
|
const processedRules = [];
|
|
1292
1191
|
let precedingCombinator = "";
|
|
1293
1192
|
let firstRule = true;
|
|
@@ -1334,96 +1233,6 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
|
|
|
1334
1233
|
return processRuleGroup(ruleGroup, true);
|
|
1335
1234
|
};
|
|
1336
1235
|
//#endregion
|
|
1337
|
-
//#region src/utils/formatQuery/defaultRuleProcessorTanStackDB.ts
|
|
1338
|
-
/**
|
|
1339
|
-
* Default rule processor used by {@link formatQuery} for the "tanstack_db" format.
|
|
1340
|
-
*
|
|
1341
|
-
* @group Export
|
|
1342
|
-
*/
|
|
1343
|
-
const defaultRuleProcessorTanStackDB = (rule, _options) => {
|
|
1344
|
-
const { parseNumbers, preserveValueOrder, context = {} } = _options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
1345
|
-
const ops = context.tanStackDbOperators;
|
|
1346
|
-
const refs = context._tanstackDbRefs;
|
|
1347
|
-
const primaryRef = context._tanstackDbPrimaryRef;
|
|
1348
|
-
if (!ops || !refs || !primaryRef) return void 0;
|
|
1349
|
-
const { and, eq, gt, gte, inArray, isNull, like, lt, lte, not } = ops;
|
|
1350
|
-
const resolveField = (fieldName) => {
|
|
1351
|
-
const dotIdx = fieldName.indexOf(".");
|
|
1352
|
-
if (dotIdx > 0) {
|
|
1353
|
-
const prefix = fieldName.slice(0, dotIdx);
|
|
1354
|
-
const rest = fieldName.slice(dotIdx + 1);
|
|
1355
|
-
if (refs[prefix]) return refs[prefix][rest];
|
|
1356
|
-
}
|
|
1357
|
-
return refs[primaryRef][fieldName];
|
|
1358
|
-
};
|
|
1359
|
-
const { field, operator, value, valueSource } = rule;
|
|
1360
|
-
const column = resolveField(field);
|
|
1361
|
-
const operatorLC = require_objectUtils.lc(operator);
|
|
1362
|
-
const valueIsField = valueSource === "field";
|
|
1363
|
-
const asFieldOrValue = (v) => valueIsField ? resolveField(v) : v;
|
|
1364
|
-
const maybeParseNumber = (v) => {
|
|
1365
|
-
if (valueIsField || !parseNumbers) return asFieldOrValue(v);
|
|
1366
|
-
return require_utils.shouldRenderAsNumber(v, true) ? require_utils.parseNumber(v, { parseNumbers: true }) : v;
|
|
1367
|
-
};
|
|
1368
|
-
switch (operatorLC) {
|
|
1369
|
-
case "=": return eq(column, maybeParseNumber(value));
|
|
1370
|
-
case "!=": return not(eq(column, maybeParseNumber(value)));
|
|
1371
|
-
case ">": return gt(column, maybeParseNumber(value));
|
|
1372
|
-
case "<": return lt(column, maybeParseNumber(value));
|
|
1373
|
-
case ">=": return gte(column, maybeParseNumber(value));
|
|
1374
|
-
case "<=": return lte(column, maybeParseNumber(value));
|
|
1375
|
-
case "beginswith":
|
|
1376
|
-
case "doesnotbeginwith": {
|
|
1377
|
-
const expr = like(column, valueIsField ? void 0 : `${value}%`);
|
|
1378
|
-
return operatorLC === "doesnotbeginwith" ? not(expr) : expr;
|
|
1379
|
-
}
|
|
1380
|
-
case "contains":
|
|
1381
|
-
case "doesnotcontain": {
|
|
1382
|
-
const expr = like(column, valueIsField ? void 0 : `%${value}%`);
|
|
1383
|
-
return operatorLC === "doesnotcontain" ? not(expr) : expr;
|
|
1384
|
-
}
|
|
1385
|
-
case "endswith":
|
|
1386
|
-
case "doesnotendwith": {
|
|
1387
|
-
const expr = like(column, valueIsField ? void 0 : `%${value}`);
|
|
1388
|
-
return operatorLC === "doesnotendwith" ? not(expr) : expr;
|
|
1389
|
-
}
|
|
1390
|
-
case "null": return isNull(column);
|
|
1391
|
-
case "notnull": return not(isNull(column));
|
|
1392
|
-
case "in":
|
|
1393
|
-
case "notin": {
|
|
1394
|
-
const expr = inArray(column, require_utils.toArray(value).map((v) => maybeParseNumber(v)));
|
|
1395
|
-
return operatorLC === "notin" ? not(expr) : expr;
|
|
1396
|
-
}
|
|
1397
|
-
case "between":
|
|
1398
|
-
case "notbetween": {
|
|
1399
|
-
const valueAsArray = require_utils.toArray(value);
|
|
1400
|
-
if (valueAsArray.length >= 2 && require_utils.isValidValue(valueAsArray[0]) && require_utils.isValidValue(valueAsArray[1])) {
|
|
1401
|
-
let [first, second] = valueAsArray;
|
|
1402
|
-
const shouldParseNumbers = !(parseNumbers === false);
|
|
1403
|
-
if (!valueIsField && require_utils.shouldRenderAsNumber(first, shouldParseNumbers) && require_utils.shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
1404
|
-
const firstNum = require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
1405
|
-
const secondNum = require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
1406
|
-
if (!preserveValueOrder && secondNum < firstNum) {
|
|
1407
|
-
const tempNum = secondNum;
|
|
1408
|
-
second = firstNum;
|
|
1409
|
-
first = tempNum;
|
|
1410
|
-
} else {
|
|
1411
|
-
first = firstNum;
|
|
1412
|
-
second = secondNum;
|
|
1413
|
-
}
|
|
1414
|
-
} else if (valueIsField) {
|
|
1415
|
-
first = asFieldOrValue(first);
|
|
1416
|
-
second = asFieldOrValue(second);
|
|
1417
|
-
}
|
|
1418
|
-
const expr = and(gte(column, first), lte(column, second));
|
|
1419
|
-
return operatorLC === "notbetween" ? not(expr) : expr;
|
|
1420
|
-
}
|
|
1421
|
-
return;
|
|
1422
|
-
}
|
|
1423
|
-
default: return;
|
|
1424
|
-
}
|
|
1425
|
-
};
|
|
1426
|
-
//#endregion
|
|
1427
1236
|
//#region src/utils/formatQuery/defaultRuleGroupProcessorTanStackDB.ts
|
|
1428
1237
|
/**
|
|
1429
1238
|
* Default rule group processor used by {@link formatQuery} for the "tanstack_db" format.
|
|
@@ -1436,7 +1245,7 @@ const defaultRuleProcessorTanStackDB = (rule, _options) => {
|
|
|
1436
1245
|
* @group Export
|
|
1437
1246
|
*/
|
|
1438
1247
|
const defaultRuleGroupProcessorTanStackDB = (ruleGroup, options) => (refs) => {
|
|
1439
|
-
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, context = {} } = options;
|
|
1248
|
+
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, context = {}, ruleProcessor } = options;
|
|
1440
1249
|
const ops = context.tanStackDbOperators;
|
|
1441
1250
|
if (!ops) return void 0;
|
|
1442
1251
|
const { and, eq, not, or } = ops;
|
|
@@ -1444,7 +1253,6 @@ const defaultRuleGroupProcessorTanStackDB = (ruleGroup, options) => (refs) => {
|
|
|
1444
1253
|
const refKeys = Object.keys(refs);
|
|
1445
1254
|
/* v8 ignore next -- @preserve */
|
|
1446
1255
|
if (refKeys.length === 0) return fallback;
|
|
1447
|
-
const ruleProcessor = defaultRuleProcessorTanStackDB;
|
|
1448
1256
|
const processRuleGroup = (rg) => {
|
|
1449
1257
|
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return;
|
|
1450
1258
|
const processedRules = rg.rules.map((rule) => {
|
|
@@ -1842,6 +1650,106 @@ const defaultRuleProcessorCypher = (rule, opts = {}) => {
|
|
|
1842
1650
|
}
|
|
1843
1651
|
};
|
|
1844
1652
|
//#endregion
|
|
1653
|
+
//#region src/utils/formatQuery/defaultRuleProcessorDrizzle.ts
|
|
1654
|
+
/**
|
|
1655
|
+
* Default rule processor used by {@link formatQuery} for the "drizzle" format.
|
|
1656
|
+
*
|
|
1657
|
+
* @group Export
|
|
1658
|
+
*/
|
|
1659
|
+
const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
1660
|
+
const opts = _options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
1661
|
+
// v8 ignore next
|
|
1662
|
+
const { parseNumbers, preserveValueOrder, context = {} } = opts;
|
|
1663
|
+
const { columns, drizzleOperators, useRawFields } = context;
|
|
1664
|
+
if (!columns || !drizzleOperators) return void 0;
|
|
1665
|
+
const { between, eq, gt, gte, inArray, isNotNull, isNull, like, lt, lte, ne, notBetween, notInArray, notLike, sql } = drizzleOperators;
|
|
1666
|
+
const { field, operator, value, valueSource } = rule;
|
|
1667
|
+
const column = useRawFields && /^[a-z_][a-z0-9_.]*$/i.test(field) ? sql.raw(field) : columns[field];
|
|
1668
|
+
const operatorLC = require_objectUtils.lc(operator);
|
|
1669
|
+
const valueIsField = valueSource === "field";
|
|
1670
|
+
const asFieldOrValue = (v) => valueIsField ? columns[v] : v;
|
|
1671
|
+
const maybeParseNumber = (v) => {
|
|
1672
|
+
if (valueIsField || !parseNumbers) return asFieldOrValue(v);
|
|
1673
|
+
return require_utils.shouldRenderAsNumber(v, true) ? require_utils.parseNumber(v, { parseNumbers: true }) : v;
|
|
1674
|
+
};
|
|
1675
|
+
if (!column) return void 0;
|
|
1676
|
+
const matchEval = require_utils.processMatchMode(rule);
|
|
1677
|
+
if (matchEval === false) return;
|
|
1678
|
+
else if (matchEval) {
|
|
1679
|
+
if (opts.preset !== "postgresql") return void 0;
|
|
1680
|
+
const { mode, threshold } = matchEval;
|
|
1681
|
+
const arrayElementAlias = "elem_alias";
|
|
1682
|
+
const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(require_transformQuery.transformQuery(rule.value, { ruleProcessor: (r) => ({
|
|
1683
|
+
...r,
|
|
1684
|
+
field: arrayElementAlias
|
|
1685
|
+
}) }), {
|
|
1686
|
+
...opts,
|
|
1687
|
+
context: {
|
|
1688
|
+
...opts.context,
|
|
1689
|
+
useRawFields: true
|
|
1690
|
+
}
|
|
1691
|
+
});
|
|
1692
|
+
switch (mode) {
|
|
1693
|
+
case "all": return sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) = array_length(${column}, 1)`;
|
|
1694
|
+
case "none": return sql`not exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
|
|
1695
|
+
case "some": return sql`exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
|
|
1696
|
+
case "atleast":
|
|
1697
|
+
case "atmost":
|
|
1698
|
+
case "exactly": {
|
|
1699
|
+
const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "=";
|
|
1700
|
+
return threshold > 0 && threshold < 1 ? sql`(select count(*)::float / array_length(${column}, 1) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}` : sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}`;
|
|
1701
|
+
}
|
|
1702
|
+
}
|
|
1703
|
+
}
|
|
1704
|
+
switch (operatorLC) {
|
|
1705
|
+
case "=": return eq(column, maybeParseNumber(value));
|
|
1706
|
+
case "!=": return ne(column, maybeParseNumber(value));
|
|
1707
|
+
case ">": return gt(column, maybeParseNumber(value));
|
|
1708
|
+
case "<": return lt(column, maybeParseNumber(value));
|
|
1709
|
+
case ">=": return gte(column, maybeParseNumber(value));
|
|
1710
|
+
case "<=": return lte(column, maybeParseNumber(value));
|
|
1711
|
+
case "beginswith":
|
|
1712
|
+
case "doesnotbeginwith": return (operatorLC === "doesnotbeginwith" ? notLike : like)(column, valueIsField ? sql`${asFieldOrValue(value)} || '%'` : `${value}%`);
|
|
1713
|
+
case "contains":
|
|
1714
|
+
case "doesnotcontain": return (operatorLC === "doesnotcontain" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)} || '%'` : `%${value}%`);
|
|
1715
|
+
case "endswith":
|
|
1716
|
+
case "doesnotendwith": return (operatorLC === "doesnotendwith" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)}` : `%${value}`);
|
|
1717
|
+
case "null": return isNull(column);
|
|
1718
|
+
case "notnull": return isNotNull(column);
|
|
1719
|
+
case "in":
|
|
1720
|
+
case "notin": {
|
|
1721
|
+
const valueAsArray = require_utils.toArray(value).map((v) => maybeParseNumber(v));
|
|
1722
|
+
return operatorLC === "notin" ? notInArray(column, valueAsArray) : inArray(column, valueAsArray);
|
|
1723
|
+
}
|
|
1724
|
+
case "between":
|
|
1725
|
+
case "notbetween": {
|
|
1726
|
+
const valueAsArray = require_utils.toArray(value);
|
|
1727
|
+
if (valueAsArray.length >= 2 && require_utils.isValidValue(valueAsArray[0]) && require_utils.isValidValue(valueAsArray[1])) {
|
|
1728
|
+
let [first, second] = valueAsArray;
|
|
1729
|
+
const shouldParseNumbers = !(parseNumbers === false);
|
|
1730
|
+
if (!valueIsField && require_utils.shouldRenderAsNumber(first, shouldParseNumbers) && require_utils.shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
1731
|
+
const firstNum = require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
1732
|
+
const secondNum = require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
1733
|
+
if (!preserveValueOrder && secondNum < firstNum) {
|
|
1734
|
+
const tempNum = secondNum;
|
|
1735
|
+
second = firstNum;
|
|
1736
|
+
first = tempNum;
|
|
1737
|
+
} else {
|
|
1738
|
+
first = firstNum;
|
|
1739
|
+
second = secondNum;
|
|
1740
|
+
}
|
|
1741
|
+
} else if (valueIsField) {
|
|
1742
|
+
first = asFieldOrValue(first);
|
|
1743
|
+
second = asFieldOrValue(second);
|
|
1744
|
+
}
|
|
1745
|
+
return operatorLC === "notbetween" ? notBetween(column, first, second) : between(column, first, second);
|
|
1746
|
+
}
|
|
1747
|
+
return;
|
|
1748
|
+
}
|
|
1749
|
+
default: return;
|
|
1750
|
+
}
|
|
1751
|
+
};
|
|
1752
|
+
//#endregion
|
|
1845
1753
|
//#region src/utils/formatQuery/defaultRuleProcessorElasticSearch.ts
|
|
1846
1754
|
const rangeOperatorMap = {
|
|
1847
1755
|
"<": "lt",
|
|
@@ -2491,7 +2399,7 @@ const defaultRuleProcessorSQL = (rule, opts = {}) => {
|
|
|
2491
2399
|
case "atmost":
|
|
2492
2400
|
case "exactly": {
|
|
2493
2401
|
const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "=";
|
|
2494
|
-
return `(select count(*)${threshold > 0 && threshold < 1 ?
|
|
2402
|
+
return `(select count(*)${threshold > 0 && threshold < 1 ? `::float / array_length(${ruleField}, 1)` : ""} from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedArrayFilter}) ${op} ${threshold}`;
|
|
2495
2403
|
}
|
|
2496
2404
|
}
|
|
2497
2405
|
}
|
|
@@ -2558,7 +2466,7 @@ const defaultRuleProcessorParameterized = (rule, opts, meta) => {
|
|
|
2558
2466
|
case "atmost":
|
|
2559
2467
|
case "exactly": {
|
|
2560
2468
|
const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "=";
|
|
2561
|
-
return finalize(`(select count(*)${threshold > 0 && threshold < 1 ?
|
|
2469
|
+
return finalize(`(select count(*)${threshold > 0 && threshold < 1 ? `::float / array_length(${ruleField}, 1)` : ""} from unnest(${ruleField}) as ${wrapFieldName(arrayElementAlias)} where ${nestedSQL}) ${op} ${threshold}`);
|
|
2562
2470
|
}
|
|
2563
2471
|
}
|
|
2564
2472
|
}
|
|
@@ -2811,6 +2719,96 @@ const defaultRuleProcessorSPARQL = (rule, opts = {}) => {
|
|
|
2811
2719
|
}
|
|
2812
2720
|
};
|
|
2813
2721
|
//#endregion
|
|
2722
|
+
//#region src/utils/formatQuery/defaultRuleProcessorTanStackDB.ts
|
|
2723
|
+
/**
|
|
2724
|
+
* Default rule processor used by {@link formatQuery} for the "tanstack_db" format.
|
|
2725
|
+
*
|
|
2726
|
+
* @group Export
|
|
2727
|
+
*/
|
|
2728
|
+
const defaultRuleProcessorTanStackDB = (rule, _options) => {
|
|
2729
|
+
const { parseNumbers, preserveValueOrder, context = {} } = _options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
2730
|
+
const ops = context.tanStackDbOperators;
|
|
2731
|
+
const refs = context._tanstackDbRefs;
|
|
2732
|
+
const primaryRef = context._tanstackDbPrimaryRef;
|
|
2733
|
+
if (!ops || !refs || !primaryRef) return void 0;
|
|
2734
|
+
const { and, eq, gt, gte, inArray, isNull, like, lt, lte, not } = ops;
|
|
2735
|
+
const resolveField = (fieldName) => {
|
|
2736
|
+
const dotIdx = fieldName.indexOf(".");
|
|
2737
|
+
if (dotIdx > 0) {
|
|
2738
|
+
const prefix = fieldName.slice(0, dotIdx);
|
|
2739
|
+
const rest = fieldName.slice(dotIdx + 1);
|
|
2740
|
+
if (refs[prefix]) return refs[prefix][rest];
|
|
2741
|
+
}
|
|
2742
|
+
return refs[primaryRef][fieldName];
|
|
2743
|
+
};
|
|
2744
|
+
const { field, operator, value, valueSource } = rule;
|
|
2745
|
+
const column = resolveField(field);
|
|
2746
|
+
const operatorLC = require_objectUtils.lc(operator);
|
|
2747
|
+
const valueIsField = valueSource === "field";
|
|
2748
|
+
const asFieldOrValue = (v) => valueIsField ? resolveField(v) : v;
|
|
2749
|
+
const maybeParseNumber = (v) => {
|
|
2750
|
+
if (valueIsField || !parseNumbers) return asFieldOrValue(v);
|
|
2751
|
+
return require_utils.shouldRenderAsNumber(v, true) ? require_utils.parseNumber(v, { parseNumbers: true }) : v;
|
|
2752
|
+
};
|
|
2753
|
+
switch (operatorLC) {
|
|
2754
|
+
case "=": return eq(column, maybeParseNumber(value));
|
|
2755
|
+
case "!=": return not(eq(column, maybeParseNumber(value)));
|
|
2756
|
+
case ">": return gt(column, maybeParseNumber(value));
|
|
2757
|
+
case "<": return lt(column, maybeParseNumber(value));
|
|
2758
|
+
case ">=": return gte(column, maybeParseNumber(value));
|
|
2759
|
+
case "<=": return lte(column, maybeParseNumber(value));
|
|
2760
|
+
case "beginswith":
|
|
2761
|
+
case "doesnotbeginwith": {
|
|
2762
|
+
const expr = like(column, valueIsField ? void 0 : `${value}%`);
|
|
2763
|
+
return operatorLC === "doesnotbeginwith" ? not(expr) : expr;
|
|
2764
|
+
}
|
|
2765
|
+
case "contains":
|
|
2766
|
+
case "doesnotcontain": {
|
|
2767
|
+
const expr = like(column, valueIsField ? void 0 : `%${value}%`);
|
|
2768
|
+
return operatorLC === "doesnotcontain" ? not(expr) : expr;
|
|
2769
|
+
}
|
|
2770
|
+
case "endswith":
|
|
2771
|
+
case "doesnotendwith": {
|
|
2772
|
+
const expr = like(column, valueIsField ? void 0 : `%${value}`);
|
|
2773
|
+
return operatorLC === "doesnotendwith" ? not(expr) : expr;
|
|
2774
|
+
}
|
|
2775
|
+
case "null": return isNull(column);
|
|
2776
|
+
case "notnull": return not(isNull(column));
|
|
2777
|
+
case "in":
|
|
2778
|
+
case "notin": {
|
|
2779
|
+
const expr = inArray(column, require_utils.toArray(value).map((v) => maybeParseNumber(v)));
|
|
2780
|
+
return operatorLC === "notin" ? not(expr) : expr;
|
|
2781
|
+
}
|
|
2782
|
+
case "between":
|
|
2783
|
+
case "notbetween": {
|
|
2784
|
+
const valueAsArray = require_utils.toArray(value);
|
|
2785
|
+
if (valueAsArray.length >= 2 && require_utils.isValidValue(valueAsArray[0]) && require_utils.isValidValue(valueAsArray[1])) {
|
|
2786
|
+
let [first, second] = valueAsArray;
|
|
2787
|
+
const shouldParseNumbers = !(parseNumbers === false);
|
|
2788
|
+
if (!valueIsField && require_utils.shouldRenderAsNumber(first, shouldParseNumbers) && require_utils.shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
2789
|
+
const firstNum = require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
2790
|
+
const secondNum = require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
2791
|
+
if (!preserveValueOrder && secondNum < firstNum) {
|
|
2792
|
+
const tempNum = secondNum;
|
|
2793
|
+
second = firstNum;
|
|
2794
|
+
first = tempNum;
|
|
2795
|
+
} else {
|
|
2796
|
+
first = firstNum;
|
|
2797
|
+
second = secondNum;
|
|
2798
|
+
}
|
|
2799
|
+
} else if (valueIsField) {
|
|
2800
|
+
first = asFieldOrValue(first);
|
|
2801
|
+
second = asFieldOrValue(second);
|
|
2802
|
+
}
|
|
2803
|
+
const expr = and(gte(column, first), lte(column, second));
|
|
2804
|
+
return operatorLC === "notbetween" ? not(expr) : expr;
|
|
2805
|
+
}
|
|
2806
|
+
return;
|
|
2807
|
+
}
|
|
2808
|
+
default: return;
|
|
2809
|
+
}
|
|
2810
|
+
};
|
|
2811
|
+
//#endregion
|
|
2814
2812
|
//#region src/utils/formatQuery/formatQuery.ts
|
|
2815
2813
|
/**
|
|
2816
2814
|
* A collection of option presets for {@link formatQuery}, specifically for SQL-based formats.
|
|
@@ -3060,6 +3058,8 @@ const generateValueProcessor = (vpbr) => (field, operator, value, valueSource) =
|
|
|
3060
3058
|
/**
|
|
3061
3059
|
* Default value processor used by {@link formatQuery} for "sql" format.
|
|
3062
3060
|
*
|
|
3061
|
+
* @deprecated Prefer {@link defaultValueProcessorByRule}.
|
|
3062
|
+
*
|
|
3063
3063
|
* @group Export
|
|
3064
3064
|
*/
|
|
3065
3065
|
const defaultValueProcessor = generateValueProcessor(defaultValueProcessorByRule);
|