@react-querybuilder/core 8.14.4 → 8.15.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 +201 -8
- package/dist/cjs/react-querybuilder_core.cjs.development.js +394 -58
- package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
- package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +201 -8
- 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-CeJSNn37.mjs → convertQuery-BeJJH9BI.mjs} +2 -2
- package/dist/convertQuery-BeJJH9BI.mjs.map +1 -0
- package/dist/{convertQuery-J8LpTG-7.js → convertQuery-Lx2HQa0m.js} +2 -2
- package/dist/convertQuery-Lx2HQa0m.js.map +1 -0
- package/dist/formatQuery.d.mts +24 -2
- package/dist/formatQuery.d.ts +24 -2
- package/dist/formatQuery.js +373 -47
- package/dist/formatQuery.js.map +1 -1
- package/dist/formatQuery.mjs +373 -48
- package/dist/formatQuery.mjs.map +1 -1
- package/dist/{import-BwQqExpO.d.mts → import-0wp72lLT.d.mts} +2 -2
- package/dist/{import-CrJf23Nf.d.ts → import-yRVJh7E1.d.ts} +2 -2
- package/dist/{index-CYT4Saz-.d.mts → index-D5TXNIzF.d.ts} +149 -5
- package/dist/{index-DBlQeLax.d.ts → index-Lht_Wq3V.d.mts} +149 -5
- package/dist/{objectUtils-ButT0Mng.js → objectUtils-Bzug_QfX.js} +2 -2
- package/dist/objectUtils-Bzug_QfX.js.map +1 -0
- package/dist/{objectUtils-C0WB-8ex.mjs → objectUtils-D96eEEzL.mjs} +2 -2
- package/dist/objectUtils-D96eEEzL.mjs.map +1 -0
- package/dist/parseCEL.d.mts +2 -2
- package/dist/parseCEL.d.ts +2 -2
- package/dist/parseCEL.js +35 -35
- package/dist/parseCEL.js.map +1 -1
- package/dist/parseCEL.mjs +35 -35
- package/dist/parseCEL.mjs.map +1 -1
- package/dist/parseJSONata.d.mts +2 -2
- package/dist/parseJSONata.d.ts +2 -2
- package/dist/parseJSONata.js +11 -11
- package/dist/parseJSONata.js.map +1 -1
- package/dist/parseJSONata.mjs +11 -11
- 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 +6 -6
- package/dist/parseJsonLogic.js.map +1 -1
- package/dist/parseJsonLogic.mjs +6 -6
- 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 +6 -6
- package/dist/parseMongoDB.js.map +1 -1
- package/dist/parseMongoDB.mjs +6 -6
- package/dist/parseMongoDB.mjs.map +1 -1
- package/dist/parseSQL.d.mts +2 -2
- package/dist/parseSQL.d.ts +2 -2
- package/dist/parseSQL.js +16 -16
- package/dist/parseSQL.js.map +1 -1
- package/dist/parseSQL.mjs +16 -16
- 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 +10 -10
- package/dist/parseSpEL.js.map +1 -1
- package/dist/parseSpEL.mjs +10 -10
- package/dist/parseSpEL.mjs.map +1 -1
- package/dist/{prepareQueryObjects-DO3qXriW.js → prepareQueryObjects-BoG5Rt8z.js} +6 -6
- package/dist/prepareQueryObjects-BoG5Rt8z.js.map +1 -0
- package/dist/{prepareQueryObjects-BfMlS4ql.mjs → prepareQueryObjects-uA10ZpZX.mjs} +6 -6
- package/dist/prepareQueryObjects-uA10ZpZX.mjs.map +1 -0
- package/dist/query-builder.css +1 -1
- package/dist/query-builder.css.map +1 -1
- package/dist/react-querybuilder_core.d.mts +201 -8
- package/dist/react-querybuilder_core.legacy-esm.d.ts +201 -8
- package/dist/react-querybuilder_core.legacy-esm.js +433 -89
- package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
- package/dist/react-querybuilder_core.mjs +393 -59
- package/dist/react-querybuilder_core.mjs.map +1 -1
- package/dist/react-querybuilder_core.production.d.mts +201 -8
- package/dist/react-querybuilder_core.production.mjs +1 -1
- package/dist/react-querybuilder_core.production.mjs.map +1 -1
- package/dist/styles/_main.scss +4 -0
- 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-BlMGIhvx.mjs → utils-ChLG90DP.mjs} +3 -3
- package/dist/utils-ChLG90DP.mjs.map +1 -0
- package/dist/{utils-CZRhzje-.js → utils-Qwkq2Q0F.js} +3 -3
- package/dist/utils-Qwkq2Q0F.js.map +1 -0
- package/package.json +9 -14
- package/dist/convertQuery-CeJSNn37.mjs.map +0 -1
- package/dist/convertQuery-J8LpTG-7.js.map +0 -1
- package/dist/objectUtils-ButT0Mng.js.map +0 -1
- package/dist/objectUtils-C0WB-8ex.mjs.map +0 -1
- package/dist/prepareQueryObjects-BfMlS4ql.mjs.map +0 -1
- package/dist/prepareQueryObjects-DO3qXriW.js.map +0 -1
- package/dist/utils-BlMGIhvx.mjs.map +0 -1
- package/dist/utils-CZRhzje-.js.map +0 -1
package/dist/formatQuery.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { D as toArray, O as trimIfString, S as toFlatOptionArray, T as parseNumber, _ as shouldRenderAsNumber, a as getNLTranslataion, c as isValidValue, d as mapSQLOperator, f as mongoOperators, g as processMatchMode, h as prismaOperators, i as defaultNLTranslations, l as isValueProcessorLegacy, m as numerifyValues, n as bigIntJsonStringifyReplacer, o as getQuoteFieldNamesWithArray, p as normalizeConstituentWordOrder, r as celCombinatorMap, s as getQuotedFieldName, t as bigIntJsonParseReviver, u as jsonLogicAdditionalOperators, v as getParseNumberMethod, w as toFullOptionList, y as getOption } from "./utils-
|
|
2
|
-
import { a as isRuleGroupTypeIC, c as nullOrUndefinedOrEmpty, i as isRuleGroupType, o as isPojo, r as isRuleGroup, s as lc } from "./objectUtils-
|
|
1
|
+
import { D as toArray, O as trimIfString, S as toFlatOptionArray, T as parseNumber, _ as shouldRenderAsNumber, a as getNLTranslataion, c as isValidValue, d as mapSQLOperator, f as mongoOperators, g as processMatchMode, h as prismaOperators, i as defaultNLTranslations, l as isValueProcessorLegacy, m as numerifyValues, n as bigIntJsonStringifyReplacer, o as getQuoteFieldNamesWithArray, p as normalizeConstituentWordOrder, r as celCombinatorMap, s as getQuotedFieldName, t as bigIntJsonParseReviver, u as jsonLogicAdditionalOperators, v as getParseNumberMethod, w as toFullOptionList, y as getOption } from "./utils-ChLG90DP.mjs";
|
|
2
|
+
import { a as isRuleGroupTypeIC, c as nullOrUndefinedOrEmpty, i as isRuleGroupType, l as numericRegex, o as isPojo, r as isRuleGroup, s as lc } from "./objectUtils-D96eEEzL.mjs";
|
|
3
3
|
import { transformQuery } from "./transformQuery.mjs";
|
|
4
|
-
import { t as convertFromIC } from "./convertQuery-
|
|
4
|
+
import { t as convertFromIC } from "./convertQuery-BeJJH9BI.mjs";
|
|
5
5
|
//#region src/utils/isRuleOrGroupValid.ts
|
|
6
6
|
/**
|
|
7
7
|
* Determines if an object is useful as a validation result.
|
|
@@ -19,7 +19,7 @@ const isRuleOrGroupValid = (rg, validationResult, validator) => {
|
|
|
19
19
|
if (typeof validator === "function" && !isRuleGroup(rg)) {
|
|
20
20
|
const vr = validator(rg);
|
|
21
21
|
if (typeof vr === "boolean") return vr;
|
|
22
|
-
//
|
|
22
|
+
// v8 ignore else
|
|
23
23
|
if (isValidationResult(vr)) return vr.valid;
|
|
24
24
|
}
|
|
25
25
|
return true;
|
|
@@ -543,22 +543,22 @@ const defaultValueProcessorByRule = ({ operator, value, valueSource }, { escapeQ
|
|
|
543
543
|
* @group Export
|
|
544
544
|
*/
|
|
545
545
|
const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
546
|
-
const opts = _options ?? ( /*
|
|
547
|
-
//
|
|
546
|
+
const opts = _options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
547
|
+
// v8 ignore next
|
|
548
548
|
const { parseNumbers, preserveValueOrder, context = {} } = opts;
|
|
549
549
|
const { columns, drizzleOperators, useRawFields } = context;
|
|
550
|
-
if (!columns || !drizzleOperators) return;
|
|
550
|
+
if (!columns || !drizzleOperators) return void 0;
|
|
551
551
|
const { between, eq, gt, gte, inArray, isNotNull, isNull, like, lt, lte, ne, notBetween, notInArray, notLike, sql } = drizzleOperators;
|
|
552
552
|
const { field, operator, value, valueSource } = rule;
|
|
553
553
|
const column = useRawFields && /[a-z][a-z0-9]*/i.test(field) ? sql.raw(field) : columns[field];
|
|
554
554
|
const operatorLC = lc(operator);
|
|
555
555
|
const valueIsField = valueSource === "field";
|
|
556
556
|
const asFieldOrValue = (v) => valueIsField ? columns[v] : v;
|
|
557
|
-
if (!column) return;
|
|
557
|
+
if (!column) return void 0;
|
|
558
558
|
const matchEval = processMatchMode(rule);
|
|
559
559
|
if (matchEval === false) return;
|
|
560
560
|
else if (matchEval) {
|
|
561
|
-
if (opts.preset !== "postgresql") return;
|
|
561
|
+
if (opts.preset !== "postgresql") return void 0;
|
|
562
562
|
const { mode, threshold } = matchEval;
|
|
563
563
|
const arrayElementAlias = "elem_alias";
|
|
564
564
|
const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(transformQuery(rule.value, { ruleProcessor: (r) => ({
|
|
@@ -647,7 +647,7 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
|
647
647
|
*/
|
|
648
648
|
const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns, drizzleOperators) => {
|
|
649
649
|
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap } = options;
|
|
650
|
-
if (!columns || !drizzleOperators) return;
|
|
650
|
+
if (!columns || !drizzleOperators) return void 0;
|
|
651
651
|
const { and, not, or } = drizzleOperators;
|
|
652
652
|
const ruleProcessor = defaultRuleProcessorDrizzle;
|
|
653
653
|
const processRuleGroup = (rg, _outermost) => {
|
|
@@ -866,7 +866,7 @@ const defaultRuleGroupProcessorMongoDB = (ruleGroup, options, meta) => {
|
|
|
866
866
|
const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
|
|
867
867
|
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, translations, validateRule, validationMap } = options;
|
|
868
868
|
const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
|
|
869
|
-
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
|
|
869
|
+
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : /* v8 ignore next -- @preserve */ "";
|
|
870
870
|
const rg2 = isRuleGroupTypeIC(rg) && rg.rules.some((r) => typeof r === "string" && lc(r) === "xor") ? convertFromIC(rg) : rg;
|
|
871
871
|
const processedRules = [];
|
|
872
872
|
let precedingCombinator = "";
|
|
@@ -878,7 +878,7 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
|
|
|
878
878
|
}
|
|
879
879
|
if (isRuleGroup(rule)) {
|
|
880
880
|
const processedGroup = processRuleGroup(rule, rg2.rules.length === 1 && !(rg2.not || /^xor$/i.test(rg2.combinator ?? "")));
|
|
881
|
-
//
|
|
881
|
+
// v8 ignore else
|
|
882
882
|
if (processedGroup) {
|
|
883
883
|
if (!firstRule && precedingCombinator) {
|
|
884
884
|
processedRules.push(precedingCombinator);
|
|
@@ -954,7 +954,7 @@ const defaultRuleGroupProcessorParameterized = (ruleGroup, options) => {
|
|
|
954
954
|
if (!isPojo(processedRule)) return "";
|
|
955
955
|
const { sql, params: customParams } = processedRule;
|
|
956
956
|
if (typeof sql !== "string" || !sql) return "";
|
|
957
|
-
//
|
|
957
|
+
// v8 ignore else
|
|
958
958
|
if (format === "parameterized" && Array.isArray(customParams)) params.push(...customParams);
|
|
959
959
|
else if (format === "parameterized_named" && isPojo(customParams)) {
|
|
960
960
|
Object.assign(paramsNamed, customParams);
|
|
@@ -963,7 +963,7 @@ const defaultRuleGroupProcessorParameterized = (ruleGroup, options) => {
|
|
|
963
963
|
return sql;
|
|
964
964
|
};
|
|
965
965
|
const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
|
|
966
|
-
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
|
|
966
|
+
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : /* v8 ignore next -- @preserve */ "";
|
|
967
967
|
const processedRules = [];
|
|
968
968
|
let precedingCombinator = "";
|
|
969
969
|
let firstRule = true;
|
|
@@ -974,7 +974,7 @@ const defaultRuleGroupProcessorParameterized = (ruleGroup, options) => {
|
|
|
974
974
|
}
|
|
975
975
|
if (isRuleGroup(rule)) {
|
|
976
976
|
const processedGroup = processRuleGroup(rule, rg.rules.length === 1);
|
|
977
|
-
//
|
|
977
|
+
// v8 ignore else
|
|
978
978
|
if (processedGroup) {
|
|
979
979
|
if (!firstRule && precedingCombinator) {
|
|
980
980
|
processedRules.push(precedingCombinator);
|
|
@@ -1057,10 +1057,10 @@ const defaultRuleGroupProcessorPrisma = (ruleGroup, options) => {
|
|
|
1057
1057
|
* @group Export
|
|
1058
1058
|
*/
|
|
1059
1059
|
const defaultRuleGroupProcessorSequelize = (ruleGroup, options) => {
|
|
1060
|
-
//
|
|
1060
|
+
// v8 ignore next
|
|
1061
1061
|
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap, context = {} } = options;
|
|
1062
1062
|
const { sequelizeOperators: Op } = context;
|
|
1063
|
-
if (!Op) return;
|
|
1063
|
+
if (!Op) return void 0;
|
|
1064
1064
|
const processRuleGroup = (rg, _outermost) => {
|
|
1065
1065
|
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return;
|
|
1066
1066
|
const combinator = rg.combinator.toUpperCase();
|
|
@@ -1083,7 +1083,7 @@ const defaultRuleGroupProcessorSequelize = (ruleGroup, options) => {
|
|
|
1083
1083
|
fieldData
|
|
1084
1084
|
});
|
|
1085
1085
|
}).filter(Boolean);
|
|
1086
|
-
if (expressions.length === 0) return;
|
|
1086
|
+
if (expressions.length === 0) return void 0;
|
|
1087
1087
|
const result = expressions.length === 1 && !hasChildRules ? expressions[0] : { [lc(combinator) === "or" ? Op.or : Op.and]: expressions };
|
|
1088
1088
|
return rg.not ? { [Op.not]: result } : result;
|
|
1089
1089
|
};
|
|
@@ -1099,7 +1099,7 @@ const defaultRuleGroupProcessorSequelize = (ruleGroup, options) => {
|
|
|
1099
1099
|
const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
|
|
1100
1100
|
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
1101
1101
|
const processRuleGroup = (rg, outermostOrLonelyInGroup) => {
|
|
1102
|
-
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : "";
|
|
1102
|
+
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermostOrLonelyInGroup ? fallbackExpression : /* v8 ignore next -- @preserve */ "";
|
|
1103
1103
|
const processedRules = [];
|
|
1104
1104
|
let precedingCombinator = "";
|
|
1105
1105
|
let firstRule = true;
|
|
@@ -1110,7 +1110,7 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
|
|
|
1110
1110
|
}
|
|
1111
1111
|
if (isRuleGroup(rule)) {
|
|
1112
1112
|
const processedGroup = processRuleGroup(rule, rg.rules.length === 1);
|
|
1113
|
-
//
|
|
1113
|
+
// v8 ignore else
|
|
1114
1114
|
if (processedGroup) {
|
|
1115
1115
|
if (!firstRule && precedingCombinator) {
|
|
1116
1116
|
processedRules.push(precedingCombinator);
|
|
@@ -1146,6 +1146,325 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
|
|
|
1146
1146
|
return processRuleGroup(ruleGroup, true);
|
|
1147
1147
|
};
|
|
1148
1148
|
//#endregion
|
|
1149
|
+
//#region src/utils/formatQuery/defaultRuleGroupProcessorDiagnostics.ts
|
|
1150
|
+
const numericInputTypes = new Set([
|
|
1151
|
+
"number",
|
|
1152
|
+
"range",
|
|
1153
|
+
"bigint"
|
|
1154
|
+
]);
|
|
1155
|
+
const dateRegex = /^\d{4}-\d{2}-\d{2}$/;
|
|
1156
|
+
const timeRegex = /^\d{2}:\d{2}(:\d{2}(\.\d+)?)?$/;
|
|
1157
|
+
const monthRegex = /^\d{4}-\d{2}$/;
|
|
1158
|
+
const weekRegex = /^\d{4}-W\d{2}$/;
|
|
1159
|
+
const colorRegex = /^#([0-9a-f]{3}|[0-9a-f]{6})$/i;
|
|
1160
|
+
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
1161
|
+
const isValidDateComponents = (y, m, d) => {
|
|
1162
|
+
const date = new Date(Date.UTC(y, m - 1, d));
|
|
1163
|
+
return date.getUTCFullYear() === y && date.getUTCMonth() === m - 1 && date.getUTCDate() === d;
|
|
1164
|
+
};
|
|
1165
|
+
const isValidTimeComponents = (s) => {
|
|
1166
|
+
const parts = s.split(":");
|
|
1167
|
+
const h = Number(parts[0]);
|
|
1168
|
+
const m = Number(parts[1]);
|
|
1169
|
+
const sec = parts[2] ? Number.parseFloat(parts[2]) : 0;
|
|
1170
|
+
return h >= 0 && h <= 23 && m >= 0 && m <= 59 && sec >= 0 && sec < 60;
|
|
1171
|
+
};
|
|
1172
|
+
/**
|
|
1173
|
+
* Checks whether a value is compatible with the given {@link FullField.inputType}.
|
|
1174
|
+
* Returns a diagnostic code string if there is a mismatch, or `undefined` if OK.
|
|
1175
|
+
*/
|
|
1176
|
+
const checkValueTypeMismatch = (value, inputType) => {
|
|
1177
|
+
if (value === null || value === void 0 || value === "") return void 0;
|
|
1178
|
+
if (numericInputTypes.has(inputType)) {
|
|
1179
|
+
const v = typeof value === "string" ? value.trim() : value;
|
|
1180
|
+
if (typeof v === "number" || typeof v === "bigint") return void 0;
|
|
1181
|
+
if (typeof v === "string" && numericRegex.test(v)) return void 0;
|
|
1182
|
+
return "VALUE_TYPE_MISMATCH";
|
|
1183
|
+
}
|
|
1184
|
+
if (inputType === "date") {
|
|
1185
|
+
if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
|
|
1186
|
+
const v = value.trim();
|
|
1187
|
+
if (!dateRegex.test(v)) return "VALUE_TYPE_MISMATCH";
|
|
1188
|
+
const [y, m, d] = v.split("-").map(Number);
|
|
1189
|
+
return isValidDateComponents(y, m, d) ? void 0 : "VALUE_TYPE_MISMATCH";
|
|
1190
|
+
}
|
|
1191
|
+
if (inputType === "datetime-local") {
|
|
1192
|
+
if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
|
|
1193
|
+
const base = value.trim().replace(/(Z|[+-]\d{2}:?\d{2}|[+-]\d{2})$/, "");
|
|
1194
|
+
const tIndex = base.indexOf("T");
|
|
1195
|
+
if (tIndex === -1) return "VALUE_TYPE_MISMATCH";
|
|
1196
|
+
const datePart = base.slice(0, tIndex);
|
|
1197
|
+
const timePart = base.slice(tIndex + 1);
|
|
1198
|
+
if (!dateRegex.test(datePart) || !timeRegex.test(timePart)) return "VALUE_TYPE_MISMATCH";
|
|
1199
|
+
const [y, m, d] = datePart.split("-").map(Number);
|
|
1200
|
+
if (!isValidDateComponents(y, m, d)) return "VALUE_TYPE_MISMATCH";
|
|
1201
|
+
return isValidTimeComponents(timePart) ? void 0 : "VALUE_TYPE_MISMATCH";
|
|
1202
|
+
}
|
|
1203
|
+
if (inputType === "time") {
|
|
1204
|
+
if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
|
|
1205
|
+
const v = value.trim();
|
|
1206
|
+
if (!timeRegex.test(v)) return "VALUE_TYPE_MISMATCH";
|
|
1207
|
+
return isValidTimeComponents(v) ? void 0 : "VALUE_TYPE_MISMATCH";
|
|
1208
|
+
}
|
|
1209
|
+
if (inputType === "month") {
|
|
1210
|
+
if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
|
|
1211
|
+
const v = value.trim();
|
|
1212
|
+
if (!monthRegex.test(v)) return "VALUE_TYPE_MISMATCH";
|
|
1213
|
+
const m = Number(v.slice(5));
|
|
1214
|
+
return m >= 1 && m <= 12 ? void 0 : "VALUE_TYPE_MISMATCH";
|
|
1215
|
+
}
|
|
1216
|
+
if (inputType === "week") {
|
|
1217
|
+
if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
|
|
1218
|
+
const v = value.trim();
|
|
1219
|
+
if (!weekRegex.test(v)) return "VALUE_TYPE_MISMATCH";
|
|
1220
|
+
const w = Number(v.slice(6));
|
|
1221
|
+
return w >= 1 && w <= 53 ? void 0 : "VALUE_TYPE_MISMATCH";
|
|
1222
|
+
}
|
|
1223
|
+
if (inputType === "color") {
|
|
1224
|
+
if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
|
|
1225
|
+
return colorRegex.test(value.trim()) ? void 0 : "VALUE_TYPE_MISMATCH";
|
|
1226
|
+
}
|
|
1227
|
+
if (inputType === "url") {
|
|
1228
|
+
if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
|
|
1229
|
+
try {
|
|
1230
|
+
new URL(value.trim());
|
|
1231
|
+
return;
|
|
1232
|
+
} catch {
|
|
1233
|
+
return "VALUE_TYPE_MISMATCH";
|
|
1234
|
+
}
|
|
1235
|
+
}
|
|
1236
|
+
if (inputType === "email") {
|
|
1237
|
+
if (typeof value !== "string") return "VALUE_TYPE_MISMATCH";
|
|
1238
|
+
return emailRegex.test(value.trim()) ? void 0 : "VALUE_TYPE_MISMATCH";
|
|
1239
|
+
}
|
|
1240
|
+
};
|
|
1241
|
+
/**
|
|
1242
|
+
* Rule group processor used by {@link formatQuery} for "diagnostics" format.
|
|
1243
|
+
*
|
|
1244
|
+
* Produces a {@link DiagnosticsResult} containing an annotated copy of the query
|
|
1245
|
+
* tree (`query`) with `valid`, `reasons`, `path`, and `level` properties on every
|
|
1246
|
+
* rule and group; a flat `diagnostics` array; aggregate `stats`; and a per-field
|
|
1247
|
+
* `fieldSummary`.
|
|
1248
|
+
*
|
|
1249
|
+
* @group Export
|
|
1250
|
+
*/
|
|
1251
|
+
const defaultRuleGroupProcessorDiagnostics = (ruleGroup, options) => {
|
|
1252
|
+
const { fields: fieldsOption, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap } = options;
|
|
1253
|
+
const diagnostics = [];
|
|
1254
|
+
const stats = {
|
|
1255
|
+
totalRules: 0,
|
|
1256
|
+
totalGroups: 0,
|
|
1257
|
+
validRules: 0,
|
|
1258
|
+
invalidRules: 0,
|
|
1259
|
+
validGroups: 0,
|
|
1260
|
+
invalidGroups: 0
|
|
1261
|
+
};
|
|
1262
|
+
const fieldSummary = {};
|
|
1263
|
+
const uniqueFields = toFlatOptionArray(fieldsOption);
|
|
1264
|
+
const fieldsByName = /* @__PURE__ */ new Map();
|
|
1265
|
+
for (const f of uniqueFields) fieldsByName.set(f.name, f);
|
|
1266
|
+
const hasFieldsConfig = fieldsByName.size > 0;
|
|
1267
|
+
const processRuleGroup = (rg, path) => {
|
|
1268
|
+
stats.totalGroups++;
|
|
1269
|
+
const level = path.length;
|
|
1270
|
+
const groupValidationEntry = validationMap[rg.id ?? ""];
|
|
1271
|
+
const groupSelfValid = isRuleOrGroupValid(rg, groupValidationEntry);
|
|
1272
|
+
const groupReasons = getReasons(groupValidationEntry);
|
|
1273
|
+
if (rg.muted) diagnostics.push({
|
|
1274
|
+
id: rg.id ?? "",
|
|
1275
|
+
path,
|
|
1276
|
+
code: "MUTED",
|
|
1277
|
+
message: "Group is muted",
|
|
1278
|
+
source: "muted"
|
|
1279
|
+
});
|
|
1280
|
+
else if (!groupSelfValid && groupValidationEntry !== void 0) diagnostics.push({
|
|
1281
|
+
id: rg.id ?? "",
|
|
1282
|
+
path,
|
|
1283
|
+
code: "CUSTOM_VALIDATOR",
|
|
1284
|
+
message: groupReasons ? `Invalid: ${groupReasons.join(", ")}` : "Group failed validation",
|
|
1285
|
+
source: "query-validator"
|
|
1286
|
+
});
|
|
1287
|
+
let allChildrenValid = true;
|
|
1288
|
+
let ruleIndex = 0;
|
|
1289
|
+
const annotatedRules = [];
|
|
1290
|
+
for (const rule of rg.rules) {
|
|
1291
|
+
if (typeof rule === "string") {
|
|
1292
|
+
annotatedRules.push(rule);
|
|
1293
|
+
ruleIndex++;
|
|
1294
|
+
continue;
|
|
1295
|
+
}
|
|
1296
|
+
const childPath = [...path, ruleIndex];
|
|
1297
|
+
if (isRuleGroup(rule)) {
|
|
1298
|
+
const annotatedGroup = processRuleGroup(rule, childPath);
|
|
1299
|
+
if (!annotatedGroup.valid) allChildrenValid = false;
|
|
1300
|
+
annotatedRules.push(annotatedGroup);
|
|
1301
|
+
ruleIndex++;
|
|
1302
|
+
continue;
|
|
1303
|
+
}
|
|
1304
|
+
stats.totalRules++;
|
|
1305
|
+
const childLevel = childPath.length;
|
|
1306
|
+
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1307
|
+
const ruleValid = isRuleOrGroupValid(rule, validationResult, fieldValidator) && rule.field !== placeholderFieldName && rule.operator !== placeholderOperatorName && !(placeholderValueName !== void 0 && rule.value === placeholderValueName);
|
|
1308
|
+
collectRuleDiagnostics(rule, childPath, validationResult, fieldValidator, ruleValid, diagnostics, placeholderFieldName, placeholderOperatorName, placeholderValueName, hasFieldsConfig, fieldsByName);
|
|
1309
|
+
if (!ruleValid) {
|
|
1310
|
+
allChildrenValid = false;
|
|
1311
|
+
stats.invalidRules++;
|
|
1312
|
+
} else stats.validRules++;
|
|
1313
|
+
const fieldName = rule.field;
|
|
1314
|
+
if (!fieldSummary[fieldName]) fieldSummary[fieldName] = {
|
|
1315
|
+
ruleCount: 0,
|
|
1316
|
+
invalidCount: 0
|
|
1317
|
+
};
|
|
1318
|
+
fieldSummary[fieldName].ruleCount++;
|
|
1319
|
+
if (!ruleValid) fieldSummary[fieldName].invalidCount++;
|
|
1320
|
+
const ruleReasons = getReasons(validationResult) ?? getFieldValidatorReasons(rule, fieldValidator);
|
|
1321
|
+
const annotatedRule = {
|
|
1322
|
+
...rule,
|
|
1323
|
+
valid: ruleValid,
|
|
1324
|
+
...ruleReasons ? { reasons: ruleReasons } : null,
|
|
1325
|
+
path: childPath,
|
|
1326
|
+
level: childLevel
|
|
1327
|
+
};
|
|
1328
|
+
annotatedRules.push(annotatedRule);
|
|
1329
|
+
ruleIndex++;
|
|
1330
|
+
}
|
|
1331
|
+
const groupValid = groupSelfValid && allChildrenValid;
|
|
1332
|
+
if (groupValid) stats.validGroups++;
|
|
1333
|
+
else stats.invalidGroups++;
|
|
1334
|
+
if (isRuleGroupType(rg)) return {
|
|
1335
|
+
...rg,
|
|
1336
|
+
valid: groupValid,
|
|
1337
|
+
...groupReasons ? { reasons: groupReasons } : null,
|
|
1338
|
+
path,
|
|
1339
|
+
level,
|
|
1340
|
+
rules: annotatedRules
|
|
1341
|
+
};
|
|
1342
|
+
return {
|
|
1343
|
+
...rg,
|
|
1344
|
+
valid: groupValid,
|
|
1345
|
+
...groupReasons ? { reasons: groupReasons } : null,
|
|
1346
|
+
path,
|
|
1347
|
+
level,
|
|
1348
|
+
rules: annotatedRules
|
|
1349
|
+
};
|
|
1350
|
+
};
|
|
1351
|
+
const query = processRuleGroup(ruleGroup, []);
|
|
1352
|
+
if (hasFieldsConfig) {
|
|
1353
|
+
const referencedFields = new Set(Object.keys(fieldSummary));
|
|
1354
|
+
for (const [fieldName] of fieldsByName) if (!referencedFields.has(fieldName)) diagnostics.push({
|
|
1355
|
+
id: "",
|
|
1356
|
+
path: [],
|
|
1357
|
+
code: "UNREFERENCED_FIELD",
|
|
1358
|
+
message: `Field "${fieldName}" is defined in the fields config but not used in the query`,
|
|
1359
|
+
source: "field-check"
|
|
1360
|
+
});
|
|
1361
|
+
}
|
|
1362
|
+
return {
|
|
1363
|
+
query,
|
|
1364
|
+
diagnostics,
|
|
1365
|
+
stats,
|
|
1366
|
+
fieldSummary
|
|
1367
|
+
};
|
|
1368
|
+
};
|
|
1369
|
+
/**
|
|
1370
|
+
* Collects diagnostic entries for a single rule.
|
|
1371
|
+
*/
|
|
1372
|
+
const collectRuleDiagnostics = (rule, path, validationResult, fieldValidator, ruleValid, diagnostics, placeholderFieldName, placeholderOperatorName, placeholderValueName, hasFieldsConfig, fieldsByName) => {
|
|
1373
|
+
const id = rule.id ?? "";
|
|
1374
|
+
if (rule.muted) diagnostics.push({
|
|
1375
|
+
id,
|
|
1376
|
+
path,
|
|
1377
|
+
code: "MUTED",
|
|
1378
|
+
message: "Rule is muted",
|
|
1379
|
+
source: "muted"
|
|
1380
|
+
});
|
|
1381
|
+
if (rule.field === placeholderFieldName) diagnostics.push({
|
|
1382
|
+
id,
|
|
1383
|
+
path,
|
|
1384
|
+
code: "PLACEHOLDER_FIELD",
|
|
1385
|
+
message: "Rule has a placeholder field",
|
|
1386
|
+
source: "placeholder"
|
|
1387
|
+
});
|
|
1388
|
+
if (rule.operator === placeholderOperatorName) diagnostics.push({
|
|
1389
|
+
id,
|
|
1390
|
+
path,
|
|
1391
|
+
code: "PLACEHOLDER_OPERATOR",
|
|
1392
|
+
message: "Rule has a placeholder operator",
|
|
1393
|
+
source: "placeholder"
|
|
1394
|
+
});
|
|
1395
|
+
if (placeholderValueName !== void 0 && rule.value === placeholderValueName) diagnostics.push({
|
|
1396
|
+
id,
|
|
1397
|
+
path,
|
|
1398
|
+
code: "PLACEHOLDER_VALUE",
|
|
1399
|
+
message: "Rule has a placeholder value",
|
|
1400
|
+
source: "placeholder"
|
|
1401
|
+
});
|
|
1402
|
+
if (!rule.muted && rule.field !== placeholderFieldName && rule.operator !== placeholderOperatorName && !(placeholderValueName !== void 0 && rule.value === placeholderValueName)) {
|
|
1403
|
+
if (typeof validationResult === "boolean" && !validationResult) diagnostics.push({
|
|
1404
|
+
id,
|
|
1405
|
+
path,
|
|
1406
|
+
code: "CUSTOM_VALIDATOR",
|
|
1407
|
+
message: "Rule failed validation",
|
|
1408
|
+
source: "query-validator"
|
|
1409
|
+
});
|
|
1410
|
+
else if (typeof validationResult !== "boolean" && isValidationResult(validationResult) && !validationResult.valid) {
|
|
1411
|
+
const reasons = validationResult.reasons;
|
|
1412
|
+
diagnostics.push({
|
|
1413
|
+
id,
|
|
1414
|
+
path,
|
|
1415
|
+
code: "CUSTOM_VALIDATOR",
|
|
1416
|
+
message: reasons ? `Invalid: ${reasons.join(", ")}` : "Rule failed validation",
|
|
1417
|
+
source: "query-validator"
|
|
1418
|
+
});
|
|
1419
|
+
} else if (!ruleValid && typeof fieldValidator === "function") {
|
|
1420
|
+
const vr = fieldValidator(rule);
|
|
1421
|
+
const reasons = typeof vr !== "boolean" && isValidationResult(vr) && !vr.valid ? vr.reasons : void 0;
|
|
1422
|
+
diagnostics.push({
|
|
1423
|
+
id,
|
|
1424
|
+
path,
|
|
1425
|
+
code: "CUSTOM_VALIDATOR",
|
|
1426
|
+
message: reasons ? `Invalid: ${reasons.join(", ")}` : "Rule failed field validation",
|
|
1427
|
+
source: "field-validator"
|
|
1428
|
+
});
|
|
1429
|
+
}
|
|
1430
|
+
}
|
|
1431
|
+
if (hasFieldsConfig && !fieldsByName.has(rule.field) && rule.field !== placeholderFieldName) diagnostics.push({
|
|
1432
|
+
id,
|
|
1433
|
+
path,
|
|
1434
|
+
code: "UNDEFINED_FIELD",
|
|
1435
|
+
message: `Field "${rule.field}" is not defined in the fields config`,
|
|
1436
|
+
source: "field-check"
|
|
1437
|
+
});
|
|
1438
|
+
if (hasFieldsConfig) {
|
|
1439
|
+
const fieldDef = fieldsByName.get(rule.field);
|
|
1440
|
+
if (fieldDef?.inputType) {
|
|
1441
|
+
const mismatchCode = checkValueTypeMismatch(rule.value, fieldDef.inputType);
|
|
1442
|
+
if (mismatchCode) diagnostics.push({
|
|
1443
|
+
id,
|
|
1444
|
+
path,
|
|
1445
|
+
code: mismatchCode,
|
|
1446
|
+
message: `Value "${rule.value}" is not compatible with input type "${fieldDef.inputType}"`,
|
|
1447
|
+
source: "type-check"
|
|
1448
|
+
});
|
|
1449
|
+
}
|
|
1450
|
+
}
|
|
1451
|
+
};
|
|
1452
|
+
/**
|
|
1453
|
+
* Extracts `reasons` from a validation result, if present.
|
|
1454
|
+
*/
|
|
1455
|
+
const getReasons = (validationResult) => {
|
|
1456
|
+
if (typeof validationResult !== "boolean" && isValidationResult(validationResult) && !validationResult.valid && validationResult.reasons) return validationResult.reasons;
|
|
1457
|
+
};
|
|
1458
|
+
/**
|
|
1459
|
+
* Runs a field-level validator and extracts `reasons` if present.
|
|
1460
|
+
*/
|
|
1461
|
+
const getFieldValidatorReasons = (rule, fieldValidator) => {
|
|
1462
|
+
if (typeof fieldValidator === "function") {
|
|
1463
|
+
const vr = fieldValidator(rule);
|
|
1464
|
+
if (typeof vr !== "boolean" && isValidationResult(vr) && !vr.valid && vr.reasons) return vr.reasons;
|
|
1465
|
+
}
|
|
1466
|
+
};
|
|
1467
|
+
//#endregion
|
|
1149
1468
|
//#region src/utils/formatQuery/defaultRuleProcessorElasticSearch.ts
|
|
1150
1469
|
const rangeOperatorMap = {
|
|
1151
1470
|
"<": "lt",
|
|
@@ -1524,12 +1843,12 @@ const defaultRuleProcessorLDAP = (rule, options = {}) => {
|
|
|
1524
1843
|
return negateIf(`(&(${field}>=${ldapEscape(firstValue)})(${field}<=${ldapEscape(secondValue)}))`, operatorLC === "notbetween");
|
|
1525
1844
|
}
|
|
1526
1845
|
}
|
|
1527
|
-
//
|
|
1846
|
+
// v8 ignore next
|
|
1528
1847
|
return "";
|
|
1529
1848
|
};
|
|
1530
1849
|
//#endregion
|
|
1531
1850
|
//#region src/utils/formatQuery/defaultValueProcessorNL.ts
|
|
1532
|
-
const escapeStringValueQuotes = (v, quoteChar, escapeQuotes) => escapeQuotes && typeof v === "string" ? v.replaceAll(`${quoteChar}`, `${quoteChar}${quoteChar}`) : v;
|
|
1851
|
+
const escapeStringValueQuotes = (v, quoteChar, escapeQuotes) => escapeQuotes && typeof v === "string" ? v.replaceAll(`${quoteChar}`, `${quoteChar}${quoteChar}`) : /* v8 ignore next -- @preserve */ v;
|
|
1533
1852
|
/**
|
|
1534
1853
|
* Default value processor used by {@link formatQuery} for "natural_language" format.
|
|
1535
1854
|
*
|
|
@@ -1547,7 +1866,7 @@ const defaultValueProcessorNL = (rule, opts = {}) => {
|
|
|
1547
1866
|
quoteFieldNamesWith,
|
|
1548
1867
|
fieldIdentifierSeparator
|
|
1549
1868
|
});
|
|
1550
|
-
const t = translations ?? ( /*
|
|
1869
|
+
const t = translations ?? ( /* v8 ignore start -- @preserve */ {});
|
|
1551
1870
|
const orTL = t.or ?? "or";
|
|
1552
1871
|
const trueTL = t.true ?? "true";
|
|
1553
1872
|
const falseTL = t.false ?? "false";
|
|
@@ -1603,7 +1922,7 @@ const defaultExportOperatorMap = {
|
|
|
1603
1922
|
between: ["is between", "is between the values in"],
|
|
1604
1923
|
notbetween: ["is not between", "is not between the values in"]
|
|
1605
1924
|
};
|
|
1606
|
-
/*
|
|
1925
|
+
/* v8 ignore next -- @preserve */
|
|
1607
1926
|
const defaultGetOperators = () => [];
|
|
1608
1927
|
/**
|
|
1609
1928
|
* Default operator processor used by {@link formatQuery} for "natural_language" format.
|
|
@@ -1612,7 +1931,7 @@ const defaultGetOperators = () => [];
|
|
|
1612
1931
|
*/
|
|
1613
1932
|
const defaultOperatorProcessorNL = (rule, opts = {}) => {
|
|
1614
1933
|
const { field, operator, valueSource = "value" } = rule;
|
|
1615
|
-
//
|
|
1934
|
+
// v8 ignore next
|
|
1616
1935
|
const { getOperators = defaultGetOperators, operatorMap: operatorMapParam = defaultExportOperatorMap } = opts;
|
|
1617
1936
|
const mergedOperatorMap = new Map(Object.entries(defaultExportOperatorMap));
|
|
1618
1937
|
for (const [key, value] of Object.entries(operatorMapParam)) mergedOperatorMap.set(lc(key), value);
|
|
@@ -1641,8 +1960,8 @@ const defaultOperatorProcessorNL = (rule, opts = {}) => {
|
|
|
1641
1960
|
*/
|
|
1642
1961
|
const defaultRuleProcessorNL = (rule, opts) => {
|
|
1643
1962
|
const { field, operator } = rule;
|
|
1644
|
-
//
|
|
1645
|
-
const { fieldData, quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator = "", quoteValuesWith = `'`, operatorProcessor = defaultOperatorProcessorNL, valueProcessor = defaultValueProcessorNL, concatOperator = "||", wordOrder = "SVO" } = opts ?? ( /*
|
|
1963
|
+
// v8 ignore next
|
|
1964
|
+
const { fieldData, quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator = "", quoteValuesWith = `'`, operatorProcessor = defaultOperatorProcessorNL, valueProcessor = defaultValueProcessorNL, concatOperator = "||", wordOrder = "SVO" } = opts ?? ( /* v8 ignore start -- @preserve */ {});
|
|
1646
1965
|
const processedField = getQuotedFieldName(fieldData?.label ?? field, {
|
|
1647
1966
|
quoteFieldNamesWith,
|
|
1648
1967
|
fieldIdentifierSeparator
|
|
@@ -1748,7 +2067,7 @@ const defaultRuleProcessorSQL = (rule, opts = {}) => {
|
|
|
1748
2067
|
* @group Export
|
|
1749
2068
|
*/
|
|
1750
2069
|
const defaultRuleProcessorParameterized = (rule, opts, meta) => {
|
|
1751
|
-
//
|
|
2070
|
+
// v8 ignore next
|
|
1752
2071
|
const { fieldData, format, getNextNamedParam, parseNumbers, paramPrefix, paramsKeepPrefix, numberedParams, quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator, concatOperator, operatorProcessor = defaultOperatorProcessorSQL, valueProcessor = defaultValueProcessorByRule } = opts ?? {};
|
|
1753
2072
|
const { processedParams = [] } = meta ?? {};
|
|
1754
2073
|
const parameterized = format === "parameterized";
|
|
@@ -1767,6 +2086,7 @@ const defaultRuleProcessorParameterized = (rule, opts, meta) => {
|
|
|
1767
2086
|
});
|
|
1768
2087
|
const ruleField = wrapFieldName(rule.field);
|
|
1769
2088
|
const matchEval = processMatchMode(rule);
|
|
2089
|
+
/* v8 ignore start -- @preserve */
|
|
1770
2090
|
if (matchEval === false) return;
|
|
1771
2091
|
else if (matchEval) {
|
|
1772
2092
|
if (opts?.preset !== "postgresql") return finalize("");
|
|
@@ -1779,7 +2099,6 @@ const defaultRuleProcessorParameterized = (rule, opts, meta) => {
|
|
|
1779
2099
|
...opts,
|
|
1780
2100
|
fields: []
|
|
1781
2101
|
});
|
|
1782
|
-
// istanbul ignore else
|
|
1783
2102
|
if (Array.isArray(nestedParams)) params.push(...nestedParams);
|
|
1784
2103
|
else Object.assign(paramsNamed, nestedParams);
|
|
1785
2104
|
switch (mode) {
|
|
@@ -1794,6 +2113,7 @@ const defaultRuleProcessorParameterized = (rule, opts, meta) => {
|
|
|
1794
2113
|
}
|
|
1795
2114
|
}
|
|
1796
2115
|
}
|
|
2116
|
+
/* v8 ignore stop -- @preserve */
|
|
1797
2117
|
const value = valueProcessor(rule, {
|
|
1798
2118
|
parseNumbers,
|
|
1799
2119
|
quoteFieldNamesWith,
|
|
@@ -1834,7 +2154,7 @@ const defaultRuleProcessorParameterized = (rule, opts, meta) => {
|
|
|
1834
2154
|
}
|
|
1835
2155
|
let paramValue = rule.value;
|
|
1836
2156
|
if (typeof rule.value === "string") if (shouldRenderAsNumber(rule.value, parseNumbers)) paramValue = parseNumber(rule.value, { parseNumbers });
|
|
1837
|
-
else paramValue = /^'.*'$/g.test(value) ? value.replaceAll(/(^'|'$)/g, "") : value;
|
|
2157
|
+
else paramValue = /^'.*'$/g.test(value) ? value.replaceAll(/(^'|'$)/g, "") : /* v8 ignore next -- @preserve */ value;
|
|
1838
2158
|
let paramName = "";
|
|
1839
2159
|
if (parameterized) params.push(paramValue);
|
|
1840
2160
|
else {
|
|
@@ -1853,9 +2173,9 @@ const processNumber = (value, fallback, parseNumbers) => shouldRenderAsNumber(va
|
|
|
1853
2173
|
*/
|
|
1854
2174
|
const defaultRuleProcessorPrisma = (rule, options = {}) => {
|
|
1855
2175
|
const { field, operator, value, valueSource } = rule;
|
|
1856
|
-
//
|
|
2176
|
+
// v8 ignore next
|
|
1857
2177
|
const { parseNumbers, preserveValueOrder } = options;
|
|
1858
|
-
if (valueSource === "field" || processMatchMode(rule)) return;
|
|
2178
|
+
if (valueSource === "field" || processMatchMode(rule)) return void 0;
|
|
1859
2179
|
const operatorLC = lc(operator);
|
|
1860
2180
|
switch (operatorLC) {
|
|
1861
2181
|
case "=": return { [field]: processNumber(value, value, parseNumbers) };
|
|
@@ -1913,7 +2233,7 @@ const defaultRuleProcessorPrisma = (rule, options = {}) => {
|
|
|
1913
2233
|
*/
|
|
1914
2234
|
const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder, context = {} } = {}) => {
|
|
1915
2235
|
const { sequelizeOperators: Op, sequelizeCol: col, sequelizeFn: fn } = context;
|
|
1916
|
-
if (processMatchMode(rule)) return;
|
|
2236
|
+
if (processMatchMode(rule)) return void 0;
|
|
1917
2237
|
const { field, operator, value, valueSource } = rule;
|
|
1918
2238
|
const valueIsField = valueSource === "field";
|
|
1919
2239
|
const operatorLC = lc(operator);
|
|
@@ -2017,9 +2337,10 @@ const defaultRuleProcessors = {
|
|
|
2017
2337
|
prisma: defaultRuleProcessorPrisma,
|
|
2018
2338
|
sequelize: defaultRuleProcessorSequelize,
|
|
2019
2339
|
spel: defaultRuleProcessorSpEL,
|
|
2020
|
-
sql: defaultRuleProcessorSQL
|
|
2340
|
+
sql: defaultRuleProcessorSQL,
|
|
2341
|
+
diagnostics: defaultRuleProcessorSQL
|
|
2021
2342
|
};
|
|
2022
|
-
/*
|
|
2343
|
+
/* v8 ignore next -- @preserve */
|
|
2023
2344
|
const defaultOperatorProcessor = (r) => r.operator;
|
|
2024
2345
|
const defaultOperatorProcessors = {
|
|
2025
2346
|
cel: defaultOperatorProcessor,
|
|
@@ -2038,7 +2359,8 @@ const defaultOperatorProcessors = {
|
|
|
2038
2359
|
prisma: defaultOperatorProcessor,
|
|
2039
2360
|
sequelize: defaultOperatorProcessor,
|
|
2040
2361
|
spel: defaultOperatorProcessor,
|
|
2041
|
-
sql: defaultOperatorProcessorSQL
|
|
2362
|
+
sql: defaultOperatorProcessorSQL,
|
|
2363
|
+
diagnostics: defaultOperatorProcessor
|
|
2042
2364
|
};
|
|
2043
2365
|
const defaultFallbackExpressions = {
|
|
2044
2366
|
cel: "1 == 1",
|
|
@@ -2112,24 +2434,26 @@ function formatQuery(ruleGroup, optionParam = {}) {
|
|
|
2112
2434
|
const getOperators = (f, m) => toFullOptionList(getOperators_option(f, m) ?? []);
|
|
2113
2435
|
const fallbackExpression = fallbackExpression_option ?? defaultFallbackExpressions[format] ?? defaultFallbackExpressions.sql;
|
|
2114
2436
|
let validationMap = {};
|
|
2115
|
-
//
|
|
2437
|
+
// v8 ignore else
|
|
2116
2438
|
if (typeof validator === "function") {
|
|
2117
2439
|
const validationResult = validator(ruleGroup);
|
|
2118
2440
|
if (typeof validationResult === "boolean") {
|
|
2119
|
-
//
|
|
2120
|
-
if (!validationResult)
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2441
|
+
// v8 ignore else
|
|
2442
|
+
if (!validationResult) {
|
|
2443
|
+
if (format !== "diagnostics") return format === "parameterized" ? {
|
|
2444
|
+
sql: fallbackExpression,
|
|
2445
|
+
params: []
|
|
2446
|
+
} : format === "parameterized_named" ? {
|
|
2447
|
+
sql: fallbackExpression,
|
|
2448
|
+
params: {}
|
|
2449
|
+
} : format === "mongodb" ? `{${fallbackExpression}}` : format === "mongodb_query" ? mongoDbFallback : format === "prisma" ? prismaFallback : format === "jsonlogic" ? false : format === "elasticsearch" ? {} : format === "drizzle" || format === "sequelize" ? void 0 : fallbackExpression;
|
|
2450
|
+
}
|
|
2127
2451
|
} else validationMap = validationResult;
|
|
2128
2452
|
}
|
|
2129
2453
|
const validatorMap = {};
|
|
2130
2454
|
const uniqueFields = toFlatOptionArray(fields);
|
|
2131
2455
|
for (const f of uniqueFields)
|
|
2132
|
-
//
|
|
2456
|
+
// v8 ignore else
|
|
2133
2457
|
if (typeof f.validator === "function") validatorMap[f.value ?? f.name] = f.validator;
|
|
2134
2458
|
const validateRule = (rule) => {
|
|
2135
2459
|
let validationResult;
|
|
@@ -2139,7 +2463,7 @@ function formatQuery(ruleGroup, optionParam = {}) {
|
|
|
2139
2463
|
const fieldArr = uniqueFields.filter((f) => f.name === rule.field);
|
|
2140
2464
|
if (fieldArr.length > 0) {
|
|
2141
2465
|
const field = fieldArr[0];
|
|
2142
|
-
//
|
|
2466
|
+
// v8 ignore else
|
|
2143
2467
|
if (typeof field.validator === "function") fieldValidator = field.validator;
|
|
2144
2468
|
}
|
|
2145
2469
|
}
|
|
@@ -2183,6 +2507,7 @@ function formatQuery(ruleGroup, optionParam = {}) {
|
|
|
2183
2507
|
case "prisma": return defaultRuleGroupProcessorPrisma(ruleGroup, finalOptions);
|
|
2184
2508
|
case "drizzle": return defaultRuleGroupProcessorDrizzle(ruleGroup, finalOptions);
|
|
2185
2509
|
case "sequelize": return defaultRuleGroupProcessorSequelize(ruleGroup, finalOptions);
|
|
2510
|
+
case "diagnostics": return defaultRuleGroupProcessorDiagnostics(ruleGroup, finalOptions);
|
|
2186
2511
|
default: return "";
|
|
2187
2512
|
}
|
|
2188
2513
|
}
|
|
@@ -2237,6 +2562,6 @@ const defaultValueProcessorMongoDBByRule = defaultRuleProcessorMongoDB;
|
|
|
2237
2562
|
*/
|
|
2238
2563
|
const defaultValueProcessorSpELByRule = defaultRuleProcessorSpEL;
|
|
2239
2564
|
//#endregion
|
|
2240
|
-
export { bigIntJsonParseReviver, bigIntJsonStringifyReplacer, celCombinatorMap, defaultCELValueProcessor, defaultExportOperatorMap, defaultMongoDBValueProcessor, defaultNLTranslations, defaultOperatorProcessorNL, defaultOperatorProcessorSQL, defaultRuleGroupProcessorCEL, defaultRuleGroupProcessorDrizzle, defaultRuleGroupProcessorElasticSearch, defaultRuleGroupProcessorJSONata, defaultRuleGroupProcessorJsonLogic, defaultRuleGroupProcessorLDAP, defaultRuleGroupProcessorMongoDB, defaultRuleGroupProcessorMongoDBQuery, defaultRuleGroupProcessorNL, defaultRuleGroupProcessorParameterized, defaultRuleGroupProcessorPrisma, defaultRuleGroupProcessorSQL, defaultRuleGroupProcessorSequelize, defaultRuleGroupProcessorSpEL, defaultRuleProcessorCEL, defaultRuleProcessorDrizzle, defaultRuleProcessorElasticSearch, defaultRuleProcessorJSONata, defaultRuleProcessorJsonLogic, defaultRuleProcessorLDAP, defaultRuleProcessorMongoDB, defaultRuleProcessorMongoDBQuery, defaultRuleProcessorNL, defaultRuleProcessorParameterized, defaultRuleProcessorPrisma, defaultRuleProcessorSQL, defaultRuleProcessorSequelize, defaultRuleProcessorSpEL, defaultSpELValueProcessor, defaultValueProcessor, defaultValueProcessorByRule, defaultValueProcessorCELByRule, defaultValueProcessorMongoDBByRule, defaultValueProcessorNL, defaultValueProcessorSpELByRule, formatQuery, formatQueryOptionPresets, getNLTranslataion, getQuoteFieldNamesWithArray, getQuotedFieldName, isValidValue, isValueProcessorLegacy, jsonLogicAdditionalOperators, mapSQLOperator, mongoDbFallback, mongoOperators, normalizeConstituentWordOrder, numerifyValues, prismaFallback, prismaOperators, processMatchMode, shouldRenderAsNumber, sqlDialectPresets };
|
|
2565
|
+
export { bigIntJsonParseReviver, bigIntJsonStringifyReplacer, celCombinatorMap, defaultCELValueProcessor, defaultExportOperatorMap, defaultMongoDBValueProcessor, defaultNLTranslations, defaultOperatorProcessorNL, defaultOperatorProcessorSQL, defaultRuleGroupProcessorCEL, defaultRuleGroupProcessorDiagnostics, defaultRuleGroupProcessorDrizzle, defaultRuleGroupProcessorElasticSearch, defaultRuleGroupProcessorJSONata, defaultRuleGroupProcessorJsonLogic, defaultRuleGroupProcessorLDAP, defaultRuleGroupProcessorMongoDB, defaultRuleGroupProcessorMongoDBQuery, defaultRuleGroupProcessorNL, defaultRuleGroupProcessorParameterized, defaultRuleGroupProcessorPrisma, defaultRuleGroupProcessorSQL, defaultRuleGroupProcessorSequelize, defaultRuleGroupProcessorSpEL, defaultRuleProcessorCEL, defaultRuleProcessorDrizzle, defaultRuleProcessorElasticSearch, defaultRuleProcessorJSONata, defaultRuleProcessorJsonLogic, defaultRuleProcessorLDAP, defaultRuleProcessorMongoDB, defaultRuleProcessorMongoDBQuery, defaultRuleProcessorNL, defaultRuleProcessorParameterized, defaultRuleProcessorPrisma, defaultRuleProcessorSQL, defaultRuleProcessorSequelize, defaultRuleProcessorSpEL, defaultSpELValueProcessor, defaultValueProcessor, defaultValueProcessorByRule, defaultValueProcessorCELByRule, defaultValueProcessorMongoDBByRule, defaultValueProcessorNL, defaultValueProcessorSpELByRule, formatQuery, formatQueryOptionPresets, getNLTranslataion, getQuoteFieldNamesWithArray, getQuotedFieldName, isValidValue, isValueProcessorLegacy, jsonLogicAdditionalOperators, mapSQLOperator, mongoDbFallback, mongoOperators, normalizeConstituentWordOrder, numerifyValues, prismaFallback, prismaOperators, processMatchMode, shouldRenderAsNumber, sqlDialectPresets };
|
|
2241
2566
|
|
|
2242
2567
|
//# sourceMappingURL=formatQuery.mjs.map
|