@react-querybuilder/core 8.11.1 → 8.12.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/{basic-BeKPP0_1.d.ts → basic-DbvrfPNz.d.mts} +39 -4
- package/dist/{basic-B4vXboTG.d.mts → basic-o1-sYjK6.d.ts} +39 -4
- package/dist/chunk-BxBTb9qk.js +39 -0
- package/dist/chunk-DrjzjjTJ.mjs +23 -0
- package/dist/chunk-Dv2ph0Ay.js +23 -0
- package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +131 -53
- package/dist/cjs/react-querybuilder_core.cjs.development.js +36 -39
- package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
- package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +131 -53
- 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-CqX3rPvj.mjs → convertQuery-Cj4t-LT4.mjs} +2 -2
- package/dist/{convertQuery-CqX3rPvj.mjs.map → convertQuery-Cj4t-LT4.mjs.map} +1 -1
- package/dist/{convertQuery-DAqoID3O.js → convertQuery-DuY_BJHy.js} +3 -3
- package/dist/{convertQuery-DAqoID3O.js.map → convertQuery-DuY_BJHy.js.map} +1 -1
- package/dist/{export-BjRt-qrK.d.mts → export-CCULKoP4.d.mts} +2 -2
- package/dist/{export-CQB0nuvW.d.ts → export-WDHFbiPz.d.ts} +2 -2
- package/dist/formatQuery.d.mts +15 -3
- package/dist/formatQuery.d.ts +15 -3
- package/dist/formatQuery.js +172 -425
- package/dist/formatQuery.js.map +1 -1
- package/dist/formatQuery.mjs +4 -257
- package/dist/formatQuery.mjs.map +1 -1
- package/dist/{import-Dvayhrgj.d.ts → import-BSWb9Vgd.d.ts} +2 -2
- package/dist/{import-Bc_p8ls9.d.mts → import-CLyHpgk8.d.mts} +2 -2
- package/dist/{isRuleGroup-CYcfPgbg.mjs → isRuleGroup-BcfwGaIN.mjs} +1 -1
- package/dist/{isRuleGroup-CYcfPgbg.mjs.map → isRuleGroup-BcfwGaIN.mjs.map} +1 -1
- package/dist/{isRuleGroup-DqAs2x4E.js → isRuleGroup-Do9KKsmt.js} +2 -40
- package/dist/{isRuleGroup-DqAs2x4E.js.map → isRuleGroup-Do9KKsmt.js.map} +1 -1
- package/dist/parseCEL.d.mts +32 -7
- package/dist/parseCEL.d.ts +32 -7
- package/dist/parseCEL.js +181 -12
- package/dist/parseCEL.js.map +1 -1
- package/dist/parseCEL.mjs +174 -8
- 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 +6 -5
- package/dist/parseJSONata.js.map +1 -1
- package/dist/parseJSONata.mjs +3 -3
- package/dist/parseJsonLogic.d.mts +3 -3
- package/dist/parseJsonLogic.d.ts +3 -3
- package/dist/parseJsonLogic.js +10 -11
- package/dist/parseJsonLogic.js.map +1 -1
- package/dist/parseJsonLogic.mjs +4 -5
- 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 +20 -21
- package/dist/parseMongoDB.js.map +1 -1
- package/dist/parseMongoDB.mjs +4 -5
- 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 +10 -13
- package/dist/parseSQL.js.map +1 -1
- package/dist/parseSQL.mjs +3 -5
- 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 +7 -7
- package/dist/parseSpEL.js.map +1 -1
- package/dist/parseSpEL.mjs +3 -4
- package/dist/parseSpEL.mjs.map +1 -1
- package/dist/{prepareQueryObjects-DPCC-iHp.mjs → prepareQueryObjects-BfnyRV5t.mjs} +4 -3
- package/dist/{prepareQueryObjects-DPCC-iHp.mjs.map → prepareQueryObjects-BfnyRV5t.mjs.map} +1 -1
- package/dist/{prepareQueryObjects-BOUWfel5.js → prepareQueryObjects-DCtJJrF5.js} +14 -13
- package/dist/prepareQueryObjects-DCtJJrF5.js.map +1 -0
- package/dist/react-querybuilder_core.d.mts +131 -53
- package/dist/react-querybuilder_core.legacy-esm.d.ts +131 -53
- package/dist/react-querybuilder_core.legacy-esm.js +43 -21
- package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
- package/dist/react-querybuilder_core.mjs +36 -14
- package/dist/react-querybuilder_core.mjs.map +1 -1
- package/dist/react-querybuilder_core.production.d.mts +131 -53
- package/dist/react-querybuilder_core.production.mjs +1 -1
- package/dist/react-querybuilder_core.production.mjs.map +1 -1
- package/dist/{transformQuery-DCCpjtyq.mjs → transformQuery-Bq4iyYsE.mjs} +9 -2
- package/dist/{transformQuery-DCCpjtyq.mjs.map → transformQuery-Bq4iyYsE.mjs.map} +1 -1
- package/dist/{transformQuery-CWDPogO5.js → transformQuery-DvJTAvkh.js} +10 -3
- package/dist/{transformQuery-CWDPogO5.js.map → transformQuery-DvJTAvkh.js.map} +1 -1
- package/dist/transformQuery.d.mts +1 -1
- package/dist/transformQuery.d.ts +1 -1
- package/dist/transformQuery.js +2 -2
- package/dist/transformQuery.mjs +2 -2
- package/dist/utils-CoYbYnVo.js +706 -0
- package/dist/utils-CoYbYnVo.js.map +1 -0
- package/dist/utils-DxH23QtE.mjs +514 -0
- package/dist/utils-DxH23QtE.mjs.map +1 -0
- package/package.json +15 -15
- package/dist/arrayUtils-A_OXU9W1.mjs +0 -50
- package/dist/arrayUtils-A_OXU9W1.mjs.map +0 -1
- package/dist/arrayUtils-QxZOZTf6.js +0 -73
- package/dist/arrayUtils-QxZOZTf6.js.map +0 -1
- package/dist/optGroupUtils-B0hTpodo.js +0 -251
- package/dist/optGroupUtils-B0hTpodo.js.map +0 -1
- package/dist/optGroupUtils-VeZ3k7-1.mjs +0 -185
- package/dist/optGroupUtils-VeZ3k7-1.mjs.map +0 -1
- package/dist/parseNumber-CXdMVNFx.mjs +0 -24
- package/dist/parseNumber-CXdMVNFx.mjs.map +0 -1
- package/dist/parseNumber-D4iQDxK-.js +0 -31
- package/dist/parseNumber-D4iQDxK-.js.map +0 -1
- package/dist/prepareQueryObjects-BOUWfel5.js.map +0 -1
package/dist/formatQuery.js
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
const require_convertQuery = require('./convertQuery-DAqoID3O.js');
|
|
1
|
+
const require_chunk = require('./chunk-BxBTb9qk.js');
|
|
2
|
+
const require_utils = require('./utils-CoYbYnVo.js');
|
|
3
|
+
const require_isRuleGroup = require('./isRuleGroup-Do9KKsmt.js');
|
|
4
|
+
const require_transformQuery = require('./transformQuery-DvJTAvkh.js');
|
|
5
|
+
const require_convertQuery = require('./convertQuery-DuY_BJHy.js');
|
|
7
6
|
let immer = require("immer");
|
|
8
|
-
immer = require_isRuleGroup.__toESM(immer);
|
|
9
7
|
|
|
10
8
|
//#region src/utils/isRuleOrGroupValid.ts
|
|
11
9
|
/**
|
|
@@ -30,257 +28,6 @@ const isRuleOrGroupValid = (rg, validationResult, validator) => {
|
|
|
30
28
|
return true;
|
|
31
29
|
};
|
|
32
30
|
|
|
33
|
-
//#endregion
|
|
34
|
-
//#region src/utils/getParseNumberMethod.ts
|
|
35
|
-
const getParseNumberMethod = ({ parseNumbers, inputType }) => {
|
|
36
|
-
if (typeof parseNumbers === "string") {
|
|
37
|
-
const [method, level] = parseNumbers.split("-");
|
|
38
|
-
if (level === "limited") return inputType === "number" ? method : false;
|
|
39
|
-
return method;
|
|
40
|
-
}
|
|
41
|
-
return parseNumbers ? "strict" : false;
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
//#endregion
|
|
45
|
-
//#region src/utils/formatQuery/utils.ts
|
|
46
|
-
/**
|
|
47
|
-
* Maps a {@link DefaultOperatorName} to a SQL operator.
|
|
48
|
-
*
|
|
49
|
-
* @group Export
|
|
50
|
-
*/
|
|
51
|
-
const mapSQLOperator = (rqbOperator) => {
|
|
52
|
-
switch (require_isRuleGroup.lc(rqbOperator)) {
|
|
53
|
-
case "null": return "is null";
|
|
54
|
-
case "notnull": return "is not null";
|
|
55
|
-
case "notin": return "not in";
|
|
56
|
-
case "notbetween": return "not between";
|
|
57
|
-
case "contains":
|
|
58
|
-
case "beginswith":
|
|
59
|
-
case "endswith": return "like";
|
|
60
|
-
case "doesnotcontain":
|
|
61
|
-
case "doesnotbeginwith":
|
|
62
|
-
case "doesnotendwith": return "not like";
|
|
63
|
-
default: return rqbOperator;
|
|
64
|
-
}
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Maps a (lowercase) {@link DefaultOperatorName} to a MongoDB operator.
|
|
68
|
-
*
|
|
69
|
-
* @group Export
|
|
70
|
-
*/
|
|
71
|
-
const mongoOperators = {
|
|
72
|
-
"=": "$eq",
|
|
73
|
-
"!=": "$ne",
|
|
74
|
-
"<": "$lt",
|
|
75
|
-
"<=": "$lte",
|
|
76
|
-
">": "$gt",
|
|
77
|
-
">=": "$gte",
|
|
78
|
-
in: "$in",
|
|
79
|
-
notin: "$nin",
|
|
80
|
-
notIn: "$nin"
|
|
81
|
-
};
|
|
82
|
-
/**
|
|
83
|
-
* Maps a (lowercase) {@link DefaultOperatorName} to a Prisma ORM operator.
|
|
84
|
-
*
|
|
85
|
-
* @group Export
|
|
86
|
-
*/
|
|
87
|
-
const prismaOperators = {
|
|
88
|
-
"=": "equals",
|
|
89
|
-
"!=": "not",
|
|
90
|
-
"<": "lt",
|
|
91
|
-
"<=": "lte",
|
|
92
|
-
">": "gt",
|
|
93
|
-
">=": "gte",
|
|
94
|
-
in: "in",
|
|
95
|
-
notin: "notIn"
|
|
96
|
-
};
|
|
97
|
-
/**
|
|
98
|
-
* Maps a {@link DefaultCombinatorName} to a CEL combinator.
|
|
99
|
-
*
|
|
100
|
-
* @group Export
|
|
101
|
-
*/
|
|
102
|
-
const celCombinatorMap = {
|
|
103
|
-
and: "&&",
|
|
104
|
-
or: "||"
|
|
105
|
-
};
|
|
106
|
-
/**
|
|
107
|
-
* Register these operators with `jsonLogic` before applying the result
|
|
108
|
-
* of `formatQuery(query, 'jsonlogic')`.
|
|
109
|
-
*
|
|
110
|
-
* @example
|
|
111
|
-
* ```
|
|
112
|
-
* for (const [op, func] of Object.entries(jsonLogicAdditionalOperators)) {
|
|
113
|
-
* jsonLogic.add_operation(op, func);
|
|
114
|
-
* }
|
|
115
|
-
* jsonLogic.apply({ "startsWith": [{ "var": "firstName" }, "Stev"] }, data);
|
|
116
|
-
* ```
|
|
117
|
-
*
|
|
118
|
-
* @group Export
|
|
119
|
-
*/
|
|
120
|
-
const jsonLogicAdditionalOperators = {
|
|
121
|
-
startsWith: (a, b) => typeof a === "string" && a.startsWith(b),
|
|
122
|
-
endsWith: (a, b) => typeof a === "string" && a.endsWith(b)
|
|
123
|
-
};
|
|
124
|
-
/**
|
|
125
|
-
* Converts all `string`-type `value` properties of a query object into `number` where appropriate.
|
|
126
|
-
*
|
|
127
|
-
* Used by {@link formatQuery} for the `json*` formats when `parseNumbers` is `true`.
|
|
128
|
-
*
|
|
129
|
-
* @group Export
|
|
130
|
-
*/
|
|
131
|
-
const numerifyValues = (rg, options) => ({
|
|
132
|
-
...rg,
|
|
133
|
-
rules: rg.rules.map((r) => {
|
|
134
|
-
if (typeof r === "string") return r;
|
|
135
|
-
if (require_isRuleGroup.isRuleGroup(r)) return numerifyValues(r, options);
|
|
136
|
-
const fieldData = require_optGroupUtils.getOption(options.fields, r.field);
|
|
137
|
-
const parseNumbers = getParseNumberMethod({
|
|
138
|
-
parseNumbers: options.parseNumbers,
|
|
139
|
-
inputType: fieldData?.inputType
|
|
140
|
-
});
|
|
141
|
-
if (Array.isArray(r.value)) return {
|
|
142
|
-
...r,
|
|
143
|
-
value: r.value.map((v) => require_parseNumber.parseNumber(v, { parseNumbers }))
|
|
144
|
-
};
|
|
145
|
-
const valAsArray = require_arrayUtils.toArray(r.value, { retainEmptyStrings: true }).map((v) => require_parseNumber.parseNumber(v, { parseNumbers }));
|
|
146
|
-
if (valAsArray.every((v) => typeof v === "number")) {
|
|
147
|
-
// istanbul ignore else
|
|
148
|
-
if (valAsArray.length > 1) return {
|
|
149
|
-
...r,
|
|
150
|
-
value: valAsArray
|
|
151
|
-
};
|
|
152
|
-
else if (valAsArray.length === 1) return {
|
|
153
|
-
...r,
|
|
154
|
-
value: valAsArray[0]
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
return r;
|
|
158
|
-
})
|
|
159
|
-
});
|
|
160
|
-
/**
|
|
161
|
-
* Determines whether a value is _anything_ except an empty `string` or `NaN`.
|
|
162
|
-
*
|
|
163
|
-
* @group Export
|
|
164
|
-
*/
|
|
165
|
-
const isValidValue = (value) => typeof value === "string" && value.length > 0 || typeof value === "number" && !Number.isNaN(value) || typeof value !== "string" && typeof value !== "number";
|
|
166
|
-
/**
|
|
167
|
-
* Determines whether {@link formatQuery} should render the given value as a number.
|
|
168
|
-
* As long as `parseNumbers` is `true`, `number` and `bigint` values will return `true` and
|
|
169
|
-
* `string` values will return `true` if they test positive against {@link numericRegex}.
|
|
170
|
-
*
|
|
171
|
-
* @group Export
|
|
172
|
-
*/
|
|
173
|
-
const shouldRenderAsNumber = (value, parseNumbers) => !!parseNumbers && (typeof value === "number" || typeof value === "bigint" || typeof value === "string" && require_isRuleGroup.numericRegex.test(value));
|
|
174
|
-
/**
|
|
175
|
-
* Used by {@link formatQuery} to determine whether the given value processor is a
|
|
176
|
-
* "legacy" value processor by counting the number of arguments. Legacy value
|
|
177
|
-
* processors take 3 arguments (not counting any arguments with default values), while
|
|
178
|
-
* rule-based value processors take no more than 2 arguments.
|
|
179
|
-
*
|
|
180
|
-
* @group Export
|
|
181
|
-
*/
|
|
182
|
-
const isValueProcessorLegacy = (valueProcessor) => valueProcessor.length >= 3;
|
|
183
|
-
/**
|
|
184
|
-
* Converts the `quoteFieldNamesWith` option into an array of two strings.
|
|
185
|
-
* If the option is a string, the array elements are both that string.
|
|
186
|
-
*
|
|
187
|
-
* @default
|
|
188
|
-
* ['', '']
|
|
189
|
-
*
|
|
190
|
-
* @group Export
|
|
191
|
-
*/
|
|
192
|
-
const getQuoteFieldNamesWithArray = (quoteFieldNamesWith = ["", ""]) => Array.isArray(quoteFieldNamesWith) ? quoteFieldNamesWith : typeof quoteFieldNamesWith === "string" ? [quoteFieldNamesWith, quoteFieldNamesWith] : quoteFieldNamesWith ?? ["", ""];
|
|
193
|
-
/**
|
|
194
|
-
* Given a field name and relevant {@link ValueProcessorOptions}, returns the field name
|
|
195
|
-
* wrapped in the configured quote character(s).
|
|
196
|
-
*
|
|
197
|
-
* @group Export
|
|
198
|
-
*/
|
|
199
|
-
const getQuotedFieldName = (fieldName, { quoteFieldNamesWith, fieldIdentifierSeparator }) => {
|
|
200
|
-
const [qPre, qPost] = getQuoteFieldNamesWithArray(quoteFieldNamesWith);
|
|
201
|
-
return typeof fieldIdentifierSeparator === "string" && fieldIdentifierSeparator.length > 0 ? require_arrayUtils.joinWith(require_arrayUtils.splitBy(fieldName, fieldIdentifierSeparator).map((part) => `${qPre}${part}${qPost}`), fieldIdentifierSeparator) : `${qPre}${fieldName}${qPost}`;
|
|
202
|
-
};
|
|
203
|
-
const defaultWordOrder = [
|
|
204
|
-
"S",
|
|
205
|
-
"V",
|
|
206
|
-
"O"
|
|
207
|
-
];
|
|
208
|
-
/**
|
|
209
|
-
* Given a [Constituent word order](https://en.wikipedia.org/wiki/Word_order#Constituent_word_orders)
|
|
210
|
-
* like "svo" or "sov", returns a permutation of `["S", "V", "O"]` based on the first occurrence of
|
|
211
|
-
* each letter in the input string (case insensitive). This widens the valid input from abbreviations
|
|
212
|
-
* like "svo" to more expressive strings like "subject-verb-object" or "sub ver obj". Any missing
|
|
213
|
-
* letters are appended in the default order "SVO" (e.g., "object" would yield `["O", "S", "V"]`).
|
|
214
|
-
*
|
|
215
|
-
* @group Export
|
|
216
|
-
*/
|
|
217
|
-
const normalizeConstituentWordOrder = (input) => {
|
|
218
|
-
const result = [];
|
|
219
|
-
const letterSet = new Set(defaultWordOrder);
|
|
220
|
-
for (const char of input.toUpperCase()) if (letterSet.has(char)) {
|
|
221
|
-
result.push(char);
|
|
222
|
-
letterSet.delete(char);
|
|
223
|
-
if (letterSet.size === 0) break;
|
|
224
|
-
}
|
|
225
|
-
for (const letter of defaultWordOrder) if (letterSet.has(letter)) result.push(letter);
|
|
226
|
-
return result;
|
|
227
|
-
};
|
|
228
|
-
/**
|
|
229
|
-
* Default translations used by {@link formatQuery} for "natural_language" format.
|
|
230
|
-
*
|
|
231
|
-
* @group Export
|
|
232
|
-
*/
|
|
233
|
-
const defaultNLTranslations = {
|
|
234
|
-
groupPrefix: "",
|
|
235
|
-
groupPrefix_not_xor: "either zero or more than one of",
|
|
236
|
-
groupPrefix_xor: "exactly one of",
|
|
237
|
-
groupSuffix: "is true",
|
|
238
|
-
groupSuffix_not: "is not true"
|
|
239
|
-
};
|
|
240
|
-
/**
|
|
241
|
-
* Note: This function assumes `conditions.length > 0`
|
|
242
|
-
*/
|
|
243
|
-
const translationMatchFilter = (key, keyToTest, conditions) => keyToTest.startsWith(key) && conditions.every((c) => keyToTest.includes(`_${c}`) && keyToTest.match(/_/g)?.length === conditions.length);
|
|
244
|
-
/**
|
|
245
|
-
* Used by {@link formatQuery} to get a translation based on certain conditions
|
|
246
|
-
* for the "natural_language" format.
|
|
247
|
-
*
|
|
248
|
-
* @group Export
|
|
249
|
-
*/
|
|
250
|
-
const getNLTranslataion = (key, translations, conditions = []) => conditions.length === 0 ? translations[key] ?? defaultNLTranslations[key] ?? "" : Object.entries(translations).find(([keyToTest]) => translationMatchFilter(key, keyToTest, conditions))?.[1] ?? Object.entries(defaultNLTranslations).find(([keyToTest]) => translationMatchFilter(key, keyToTest, conditions))?.[1] ?? defaultNLTranslations[key] ?? "";
|
|
251
|
-
const processMatchMode = (rule) => {
|
|
252
|
-
const { mode, threshold } = rule.match ?? {};
|
|
253
|
-
if (mode) {
|
|
254
|
-
if (!require_isRuleGroup.isRuleGroup(rule.value)) return false;
|
|
255
|
-
const matchModeLC = require_isRuleGroup.lc(mode);
|
|
256
|
-
const matchModeCoerced = matchModeLC === "atleast" && threshold === 1 ? "some" : matchModeLC === "atmost" && threshold === 0 ? "none" : matchModeLC;
|
|
257
|
-
if ((matchModeCoerced === "atleast" || matchModeCoerced === "atmost" || matchModeCoerced === "exactly") && (typeof threshold !== "number" || threshold < 0)) return false;
|
|
258
|
-
return {
|
|
259
|
-
mode: matchModeCoerced,
|
|
260
|
-
threshold
|
|
261
|
-
};
|
|
262
|
-
}
|
|
263
|
-
};
|
|
264
|
-
/**
|
|
265
|
-
* "Replacer" method for JSON.stringify's second argument. Converts `bigint` values to
|
|
266
|
-
* objects with a `$bigint` property having a value of a string representation of
|
|
267
|
-
* the actual `bigint`-type value.
|
|
268
|
-
*
|
|
269
|
-
* Inverse of {@link bigIntJsonParseReviver}.
|
|
270
|
-
*
|
|
271
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#use_within_json
|
|
272
|
-
*/
|
|
273
|
-
const bigIntJsonStringifyReplacer = (_key, value) => typeof value === "bigint" ? { $bigint: value.toString() } : value;
|
|
274
|
-
/**
|
|
275
|
-
* "Reviver" method for JSON.parse's second argument. Converts objects having a single
|
|
276
|
-
* `$bigint: string` property to an actual `bigint` value.
|
|
277
|
-
*
|
|
278
|
-
* Inverse of {@link bigIntJsonStringifyReplacer}.
|
|
279
|
-
*
|
|
280
|
-
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#use_within_json
|
|
281
|
-
*/
|
|
282
|
-
const bigIntJsonParseReviver = (_key, value) => require_isRuleGroup.isPojo(value) && Object.keys(value).length === 1 && typeof value.$bigint === "string" ? BigInt(value.$bigint) : value;
|
|
283
|
-
|
|
284
31
|
//#endregion
|
|
285
32
|
//#region src/utils/formatQuery/defaultRuleGroupProcessorCEL.ts
|
|
286
33
|
/**
|
|
@@ -297,7 +44,7 @@ const defaultRuleGroupProcessorCEL = (ruleGroup, options) => {
|
|
|
297
44
|
let firstRule = true;
|
|
298
45
|
for (const rule of rg.rules) {
|
|
299
46
|
if (typeof rule === "string") {
|
|
300
|
-
precedingCombinator = celCombinatorMap[rule];
|
|
47
|
+
precedingCombinator = require_utils.celCombinatorMap[rule];
|
|
301
48
|
continue;
|
|
302
49
|
}
|
|
303
50
|
if (require_isRuleGroup.isRuleGroup(rule)) {
|
|
@@ -314,7 +61,7 @@ const defaultRuleGroupProcessorCEL = (ruleGroup, options) => {
|
|
|
314
61
|
}
|
|
315
62
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
316
63
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
317
|
-
const fieldData =
|
|
64
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
318
65
|
const processedRule = ruleProcessor(rule, {
|
|
319
66
|
...options,
|
|
320
67
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
@@ -330,7 +77,7 @@ const defaultRuleGroupProcessorCEL = (ruleGroup, options) => {
|
|
|
330
77
|
processedRules.push(processedRule);
|
|
331
78
|
}
|
|
332
79
|
}
|
|
333
|
-
const expression = processedRules.join(require_isRuleGroup.isRuleGroupType(rg) ? ` ${celCombinatorMap[rg.combinator]} ` : " ");
|
|
80
|
+
const expression = processedRules.join(require_isRuleGroup.isRuleGroupType(rg) ? ` ${require_utils.celCombinatorMap[rg.combinator]} ` : " ");
|
|
334
81
|
const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "!" : ""}(`, ")"] : ["", ""];
|
|
335
82
|
return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
|
|
336
83
|
};
|
|
@@ -351,8 +98,8 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
|
|
|
351
98
|
const { field, operator, value, valueSource } = rule;
|
|
352
99
|
const valueIsField = valueSource === "field";
|
|
353
100
|
const operatorTL = require_isRuleGroup.lc(operator === "=" ? "==" : operator);
|
|
354
|
-
const useBareValue = typeof value === "number" || typeof value === "boolean" || typeof value === "bigint" || shouldRenderAsNumber(value, parseNumbers);
|
|
355
|
-
const matchEval = processMatchMode(rule);
|
|
101
|
+
const useBareValue = typeof value === "number" || typeof value === "boolean" || typeof value === "bigint" || require_utils.shouldRenderAsNumber(value, parseNumbers);
|
|
102
|
+
const matchEval = require_utils.processMatchMode(rule);
|
|
356
103
|
if (matchEval === false) return "";
|
|
357
104
|
else if (matchEval) {
|
|
358
105
|
const { mode, threshold } = matchEval;
|
|
@@ -382,28 +129,28 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
|
|
|
382
129
|
case "==":
|
|
383
130
|
case "!=":
|
|
384
131
|
case ">":
|
|
385
|
-
case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ?
|
|
132
|
+
case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? require_utils.trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`}`;
|
|
386
133
|
case "contains":
|
|
387
|
-
case "doesnotcontain": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.contains(${valueIsField ?
|
|
134
|
+
case "doesnotcontain": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.contains(${valueIsField ? require_utils.trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
|
|
388
135
|
case "beginswith":
|
|
389
|
-
case "doesnotbeginwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.startsWith(${valueIsField ?
|
|
136
|
+
case "doesnotbeginwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.startsWith(${valueIsField ? require_utils.trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
|
|
390
137
|
case "endswith":
|
|
391
|
-
case "doesnotendwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.endsWith(${valueIsField ?
|
|
138
|
+
case "doesnotendwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.endsWith(${valueIsField ? require_utils.trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
|
|
392
139
|
case "null": return `${field} == null`;
|
|
393
140
|
case "notnull": return `${field} != null`;
|
|
394
141
|
case "in":
|
|
395
142
|
case "notin": {
|
|
396
143
|
const [prefix, suffix] = shouldNegate$2(operatorTL) ? ["!(", ")"] : ["", ""];
|
|
397
|
-
return `${prefix}${field} in [${
|
|
144
|
+
return `${prefix}${field} in [${require_utils.toArray(value).map((val) => valueIsField || require_utils.shouldRenderAsNumber(val, parseNumbers) ? `${require_utils.trimIfString(val)}` : `"${escapeDoubleQuotes(val, escapeQuotes)}"`).join(", ")}]${suffix}`;
|
|
398
145
|
}
|
|
399
146
|
case "between":
|
|
400
147
|
case "notbetween": {
|
|
401
|
-
const valueAsArray =
|
|
148
|
+
const valueAsArray = require_utils.toArray(value);
|
|
402
149
|
if (valueAsArray.length >= 2 && !require_isRuleGroup.nullOrUndefinedOrEmpty(valueAsArray[0]) && !require_isRuleGroup.nullOrUndefinedOrEmpty(valueAsArray[1])) {
|
|
403
150
|
const [first, second] = valueAsArray;
|
|
404
151
|
const shouldParseNumbers = !(parseNumbers === false);
|
|
405
|
-
const firstNum = shouldRenderAsNumber(first, shouldParseNumbers) ?
|
|
406
|
-
const secondNum = shouldRenderAsNumber(second, shouldParseNumbers) ?
|
|
152
|
+
const firstNum = require_utils.shouldRenderAsNumber(first, shouldParseNumbers) ? require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
153
|
+
const secondNum = require_utils.shouldRenderAsNumber(second, shouldParseNumbers) ? require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
407
154
|
let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `"${escapeDoubleQuotes(first, escapeQuotes)}"` : firstNum;
|
|
408
155
|
let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `"${escapeDoubleQuotes(second, escapeQuotes)}"` : secondNum;
|
|
409
156
|
if (!preserveValueOrder && firstValue === firstNum && secondValue === secondNum && secondNum < firstNum) {
|
|
@@ -448,7 +195,7 @@ const defaultRuleGroupProcessorMongoDBQuery = (ruleGroup, options, meta) => {
|
|
|
448
195
|
}
|
|
449
196
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
450
197
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return false;
|
|
451
|
-
const fieldData =
|
|
198
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
452
199
|
return ruleProcessor(rule, {
|
|
453
200
|
...options,
|
|
454
201
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
@@ -462,7 +209,7 @@ const defaultRuleGroupProcessorMongoDBQuery = (ruleGroup, options, meta) => {
|
|
|
462
209
|
|
|
463
210
|
//#endregion
|
|
464
211
|
//#region src/utils/formatQuery/defaultRuleProcessorMongoDBQuery.ts
|
|
465
|
-
const processNumber$1 = (value, fallback, parseNumbers = false) => shouldRenderAsNumber(value, parseNumbers || typeof value === "bigint") ? Number(
|
|
212
|
+
const processNumber$1 = (value, fallback, parseNumbers = false) => require_utils.shouldRenderAsNumber(value, parseNumbers || typeof value === "bigint") ? Number(require_utils.parseNumber(value, { parseNumbers: "strict" })) : fallback;
|
|
466
213
|
/**
|
|
467
214
|
* Default rule processor used by {@link formatQuery} for "mongodb_query" format.
|
|
468
215
|
*
|
|
@@ -473,7 +220,7 @@ const defaultRuleProcessorMongoDBQuery = (rule, options = {}) => {
|
|
|
473
220
|
const { parseNumbers, preserveValueOrder, context } = options;
|
|
474
221
|
const valueIsField = valueSource === "field";
|
|
475
222
|
const { avoidFieldsAsKeys } = context ?? {};
|
|
476
|
-
const matchEval = processMatchMode(rule);
|
|
223
|
+
const matchEval = require_utils.processMatchMode(rule);
|
|
477
224
|
if (matchEval === false) return;
|
|
478
225
|
else if (matchEval) {
|
|
479
226
|
const { mode, threshold } = matchEval;
|
|
@@ -512,7 +259,7 @@ const defaultRuleProcessorMongoDBQuery = (rule, options = {}) => {
|
|
|
512
259
|
case "atleast":
|
|
513
260
|
case "atmost":
|
|
514
261
|
case "exactly": {
|
|
515
|
-
const op = mode === "atleast" ? mongoOperators[">="] : mode === "atmost" ? mongoOperators["<="] : mongoOperators["="];
|
|
262
|
+
const op = mode === "atleast" ? require_utils.mongoOperators[">="] : mode === "atmost" ? require_utils.mongoOperators["<="] : require_utils.mongoOperators["="];
|
|
516
263
|
if (threshold > 0 && threshold < 1) return { $expr: { [op]: [filteredCount, { $multiply: [totalCount, threshold] }] } };
|
|
517
264
|
return { $expr: { [op]: [filteredCount, threshold] } };
|
|
518
265
|
}
|
|
@@ -527,7 +274,7 @@ const defaultRuleProcessorMongoDBQuery = (rule, options = {}) => {
|
|
|
527
274
|
case "!=":
|
|
528
275
|
case ">":
|
|
529
276
|
case ">=": {
|
|
530
|
-
const mongoOperator = mongoOperators[operatorLC];
|
|
277
|
+
const mongoOperator = require_utils.mongoOperators[operatorLC];
|
|
531
278
|
return valueIsField ? { [mongoOperator]: [`$${field}`, `$${value}`] } : avoidFieldsAsKeys ? { $and: [{ $ne: [`$${field}`, null] }, { [mongoOperator]: [`$${field}`, processNumber$1(value, value, parseNumbers)] }] } : { [field]: { [mongoOperator]: processNumber$1(value, value, parseNumbers) } };
|
|
532
279
|
}
|
|
533
280
|
case "contains": return valueIsField ? { $where: `this.${field}.includes(this.${value})` } : avoidFieldsAsKeys ? { $regexMatch: {
|
|
@@ -558,13 +305,13 @@ const defaultRuleProcessorMongoDBQuery = (rule, options = {}) => {
|
|
|
558
305
|
case "notnull": return avoidFieldsAsKeys ? { $ne: [`$${field}`, null] } : { [field]: { $ne: null } };
|
|
559
306
|
case "in":
|
|
560
307
|
case "notin": {
|
|
561
|
-
const valueAsArray =
|
|
562
|
-
return valueIsField ? { $where: `${operatorLC === "notin" ? "!" : ""}[${valueAsArray.map((val) => `this.${val}`).join(",")}].includes(this.${field})` } : avoidFieldsAsKeys ? operatorLC === "notin" ? { $not: { [mongoOperators.in]: [`$${field}`, valueAsArray.map((val) => processNumber$1(val, val, parseNumbers))] } } : { [mongoOperators[operatorLC]]: [`$${field}`, valueAsArray.map((val) => processNumber$1(val, val, parseNumbers))] } : { [field]: { [mongoOperators[operatorLC]]: valueAsArray.map((val) => processNumber$1(val, val, parseNumbers)) } };
|
|
308
|
+
const valueAsArray = require_utils.toArray(value);
|
|
309
|
+
return valueIsField ? { $where: `${operatorLC === "notin" ? "!" : ""}[${valueAsArray.map((val) => `this.${val}`).join(",")}].includes(this.${field})` } : avoidFieldsAsKeys ? operatorLC === "notin" ? { $not: { [require_utils.mongoOperators.in]: [`$${field}`, valueAsArray.map((val) => processNumber$1(val, val, parseNumbers))] } } : { [require_utils.mongoOperators[operatorLC]]: [`$${field}`, valueAsArray.map((val) => processNumber$1(val, val, parseNumbers))] } : { [field]: { [require_utils.mongoOperators[operatorLC]]: valueAsArray.map((val) => processNumber$1(val, val, parseNumbers)) } };
|
|
563
310
|
}
|
|
564
311
|
case "between":
|
|
565
312
|
case "notbetween": {
|
|
566
|
-
const valueAsArray =
|
|
567
|
-
if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
|
|
313
|
+
const valueAsArray = require_utils.toArray(value);
|
|
314
|
+
if (valueAsArray.length >= 2 && require_utils.isValidValue(valueAsArray[0]) && require_utils.isValidValue(valueAsArray[1])) {
|
|
568
315
|
const [first, second] = valueAsArray;
|
|
569
316
|
const firstNum = processNumber$1(first, NaN, true);
|
|
570
317
|
const secondNum = processNumber$1(second, NaN, true);
|
|
@@ -636,7 +383,7 @@ const defaultRuleGroupProcessorSpEL = (ruleGroup, options) => {
|
|
|
636
383
|
}
|
|
637
384
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
638
385
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
639
|
-
const fieldData =
|
|
386
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
640
387
|
const processedRule = ruleProcessor(rule, {
|
|
641
388
|
...options,
|
|
642
389
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
@@ -674,8 +421,8 @@ const defaultRuleProcessorSpEL = (rule, opts = {}) => {
|
|
|
674
421
|
const { escapeQuotes, parseNumbers, preserveValueOrder } = opts;
|
|
675
422
|
const valueIsField = valueSource === "field";
|
|
676
423
|
const operatorTL = require_isRuleGroup.lc(operator === "=" ? "==" : operator);
|
|
677
|
-
const useBareValue = typeof value === "number" || typeof value === "boolean" || typeof value === "bigint" || shouldRenderAsNumber(value, parseNumbers);
|
|
678
|
-
const matchEval = processMatchMode(rule);
|
|
424
|
+
const useBareValue = typeof value === "number" || typeof value === "boolean" || typeof value === "bigint" || require_utils.shouldRenderAsNumber(value, parseNumbers);
|
|
425
|
+
const matchEval = require_utils.processMatchMode(rule);
|
|
679
426
|
if (matchEval === false) return "";
|
|
680
427
|
else if (matchEval) {
|
|
681
428
|
const { mode, threshold } = matchEval;
|
|
@@ -704,29 +451,29 @@ const defaultRuleProcessorSpEL = (rule, opts = {}) => {
|
|
|
704
451
|
case "==":
|
|
705
452
|
case "!=":
|
|
706
453
|
case ">":
|
|
707
|
-
case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ?
|
|
454
|
+
case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? require_utils.trimIfString(value) : `'${escapeSingleQuotes(value, escapeQuotes)}'`}`;
|
|
708
455
|
case "contains":
|
|
709
|
-
case "doesnotcontain": return wrapInNegation(`${field} matches ${valueIsField || useBareValue ?
|
|
456
|
+
case "doesnotcontain": return wrapInNegation(`${field} matches ${valueIsField || useBareValue ? require_utils.trimIfString(value) : `'${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
|
|
710
457
|
case "beginswith":
|
|
711
|
-
case "doesnotbeginwith": return wrapInNegation(`${field} matches ${valueIsField ? `'^'.concat(${
|
|
458
|
+
case "doesnotbeginwith": return wrapInNegation(`${field} matches ${valueIsField ? `'^'.concat(${require_utils.trimIfString(value)})` : `'${typeof value === "string" && !value.startsWith("^") || useBareValue ? "^" : ""}${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
|
|
712
459
|
case "endswith":
|
|
713
|
-
case "doesnotendwith": return wrapInNegation(`${field} matches ${valueIsField ? `${
|
|
460
|
+
case "doesnotendwith": return wrapInNegation(`${field} matches ${valueIsField ? `${require_utils.trimIfString(value)}.concat('$')` : `'${escapeSingleQuotes(value, escapeQuotes)}${typeof value === "string" && !value.endsWith("$") || useBareValue ? "$" : ""}'`}`, shouldNegate$1(operatorTL));
|
|
714
461
|
case "null": return `${field} == null`;
|
|
715
462
|
case "notnull": return `${field} != null`;
|
|
716
463
|
case "in":
|
|
717
464
|
case "notin": {
|
|
718
465
|
const negate$1 = shouldNegate$1(operatorTL) ? "!" : "";
|
|
719
|
-
const valueAsArray =
|
|
720
|
-
return valueAsArray.length > 0 ? `${negate$1}(${valueAsArray.map((val) => `${field} == ${valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${
|
|
466
|
+
const valueAsArray = require_utils.toArray(value);
|
|
467
|
+
return valueAsArray.length > 0 ? `${negate$1}(${valueAsArray.map((val) => `${field} == ${valueIsField || require_utils.shouldRenderAsNumber(val, parseNumbers) ? `${require_utils.trimIfString(val)}` : `'${escapeSingleQuotes(val, escapeQuotes)}'`}`).join(" or ")})` : "";
|
|
721
468
|
}
|
|
722
469
|
case "between":
|
|
723
470
|
case "notbetween": {
|
|
724
|
-
const valueAsArray =
|
|
471
|
+
const valueAsArray = require_utils.toArray(value);
|
|
725
472
|
if (valueAsArray.length >= 2 && !require_isRuleGroup.nullOrUndefinedOrEmpty(valueAsArray[0]) && !require_isRuleGroup.nullOrUndefinedOrEmpty(valueAsArray[1])) {
|
|
726
473
|
const [first, second] = valueAsArray;
|
|
727
474
|
const shouldParseNumbers = !(parseNumbers === false);
|
|
728
|
-
const firstNum = shouldRenderAsNumber(first, shouldParseNumbers) ?
|
|
729
|
-
const secondNum = shouldRenderAsNumber(second, shouldParseNumbers) ?
|
|
475
|
+
const firstNum = require_utils.shouldRenderAsNumber(first, shouldParseNumbers) ? require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
476
|
+
const secondNum = require_utils.shouldRenderAsNumber(second, shouldParseNumbers) ? require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
730
477
|
let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `'${escapeSingleQuotes(first, escapeQuotes)}'` : firstNum;
|
|
731
478
|
let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `'${escapeSingleQuotes(second, escapeQuotes)}'` : secondNum;
|
|
732
479
|
if (!preserveValueOrder && firstValue === firstNum && secondValue === secondNum && secondNum < firstNum) {
|
|
@@ -756,7 +503,7 @@ const defaultValueProcessorByRule = ({ operator, value, valueSource }, { escapeQ
|
|
|
756
503
|
const quoteValue = (v) => `${wrapValueWith[0]}${quoteChar}${v}${quoteChar}${wrapValueWith[1]}`;
|
|
757
504
|
const escapeValue = (v) => escapeStringValueQuotes$1(v, quoteChar, escapeQuotes);
|
|
758
505
|
const wrapAndEscape = (v) => quoteValue(escapeValue(v));
|
|
759
|
-
const wrapFieldName = (v) => getQuotedFieldName(v, {
|
|
506
|
+
const wrapFieldName = (v) => require_utils.getQuotedFieldName(v, {
|
|
760
507
|
quoteFieldNamesWith,
|
|
761
508
|
fieldIdentifierSeparator
|
|
762
509
|
});
|
|
@@ -766,17 +513,17 @@ const defaultValueProcessorByRule = ({ operator, value, valueSource }, { escapeQ
|
|
|
766
513
|
case "notnull": return "";
|
|
767
514
|
case "in":
|
|
768
515
|
case "notin": {
|
|
769
|
-
const valueAsArray =
|
|
770
|
-
if (valueAsArray.length > 0) return `(${valueAsArray.map((v) => valueIsField ? wrapFieldName(v) : shouldRenderAsNumber(v, parseNumbers) ? `${
|
|
516
|
+
const valueAsArray = require_utils.toArray(value);
|
|
517
|
+
if (valueAsArray.length > 0) return `(${valueAsArray.map((v) => valueIsField ? wrapFieldName(v) : require_utils.shouldRenderAsNumber(v, parseNumbers) ? `${require_utils.trimIfString(v)}` : `${wrapAndEscape(v)}`).join(", ")})`;
|
|
771
518
|
return "";
|
|
772
519
|
}
|
|
773
520
|
case "between":
|
|
774
521
|
case "notbetween": {
|
|
775
|
-
const valueAsArray =
|
|
776
|
-
if (valueAsArray.length < 2 || !isValidValue(valueAsArray[0]) || !isValidValue(valueAsArray[1])) return "";
|
|
522
|
+
const valueAsArray = require_utils.toArray(value, { retainEmptyStrings: true });
|
|
523
|
+
if (valueAsArray.length < 2 || !require_utils.isValidValue(valueAsArray[0]) || !require_utils.isValidValue(valueAsArray[1])) return "";
|
|
777
524
|
const [first, second] = valueAsArray;
|
|
778
|
-
const firstNum = shouldRenderAsNumber(first, parseNumbers) ?
|
|
779
|
-
const secondNum = shouldRenderAsNumber(second, parseNumbers) ?
|
|
525
|
+
const firstNum = require_utils.shouldRenderAsNumber(first, parseNumbers) ? require_utils.parseNumber(first, { parseNumbers: "strict" }) : NaN;
|
|
526
|
+
const secondNum = require_utils.shouldRenderAsNumber(second, parseNumbers) ? require_utils.parseNumber(second, { parseNumbers: "strict" }) : NaN;
|
|
780
527
|
const firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : first : firstNum;
|
|
781
528
|
const secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : second : secondNum;
|
|
782
529
|
const valsOneAndTwoOnly = [firstValue, secondValue];
|
|
@@ -784,7 +531,7 @@ const defaultValueProcessorByRule = ({ operator, value, valueSource }, { escapeQ
|
|
|
784
531
|
valsOneAndTwoOnly[0] = secondNum;
|
|
785
532
|
valsOneAndTwoOnly[1] = firstNum;
|
|
786
533
|
}
|
|
787
|
-
return (valueIsField ? valsOneAndTwoOnly.map((v) => wrapFieldName(v)) : valsOneAndTwoOnly.every((v) => shouldRenderAsNumber(v, parseNumbers)) ? valsOneAndTwoOnly.map((v) =>
|
|
534
|
+
return (valueIsField ? valsOneAndTwoOnly.map((v) => wrapFieldName(v)) : valsOneAndTwoOnly.every((v) => require_utils.shouldRenderAsNumber(v, parseNumbers)) ? valsOneAndTwoOnly.map((v) => require_utils.parseNumber(v, { parseNumbers: "strict" })) : valsOneAndTwoOnly.map((v) => wrapAndEscape(v))).join(` ${translations?.and ?? "and"} `);
|
|
788
535
|
}
|
|
789
536
|
case "contains":
|
|
790
537
|
case "doesnotcontain": return valueIsField ? concat(quoteValue("%"), wrapFieldName(value), quoteValue("%")) : quoteValue(`%${escapeValue(value)}%`);
|
|
@@ -794,7 +541,7 @@ const defaultValueProcessorByRule = ({ operator, value, valueSource }, { escapeQ
|
|
|
794
541
|
case "doesnotendwith": return valueIsField ? concat(quoteValue("%"), wrapFieldName(value)) : quoteValue(`%${escapeValue(value)}`);
|
|
795
542
|
}
|
|
796
543
|
if (typeof value === "boolean") return value ? "TRUE" : "FALSE";
|
|
797
|
-
return valueIsField ? wrapFieldName(value) : shouldRenderAsNumber(value, parseNumbers) ? `${
|
|
544
|
+
return valueIsField ? wrapFieldName(value) : require_utils.shouldRenderAsNumber(value, parseNumbers) ? `${require_utils.trimIfString(value)}` : `${wrapAndEscape(value)}`;
|
|
798
545
|
};
|
|
799
546
|
|
|
800
547
|
//#endregion
|
|
@@ -817,7 +564,7 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
|
817
564
|
const valueIsField = valueSource === "field";
|
|
818
565
|
const asFieldOrValue = (v) => valueIsField ? columns[v] : v;
|
|
819
566
|
if (!column) return;
|
|
820
|
-
const matchEval = processMatchMode(rule);
|
|
567
|
+
const matchEval = require_utils.processMatchMode(rule);
|
|
821
568
|
if (matchEval === false) return;
|
|
822
569
|
else if (matchEval) {
|
|
823
570
|
if (opts.preset !== "postgresql") return;
|
|
@@ -862,18 +609,18 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
|
862
609
|
case "notnull": return isNotNull(column);
|
|
863
610
|
case "in":
|
|
864
611
|
case "notin": {
|
|
865
|
-
const valueAsArray =
|
|
612
|
+
const valueAsArray = require_utils.toArray(value).map((v) => asFieldOrValue(v));
|
|
866
613
|
return operatorLC === "notin" ? notInArray(column, valueAsArray) : inArray(column, valueAsArray);
|
|
867
614
|
}
|
|
868
615
|
case "between":
|
|
869
616
|
case "notbetween": {
|
|
870
|
-
const valueAsArray =
|
|
871
|
-
if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
|
|
617
|
+
const valueAsArray = require_utils.toArray(value);
|
|
618
|
+
if (valueAsArray.length >= 2 && require_utils.isValidValue(valueAsArray[0]) && require_utils.isValidValue(valueAsArray[1])) {
|
|
872
619
|
let [first, second] = valueAsArray;
|
|
873
620
|
const shouldParseNumbers = !(parseNumbers === false);
|
|
874
|
-
if (!valueIsField && shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
875
|
-
const firstNum =
|
|
876
|
-
const secondNum =
|
|
621
|
+
if (!valueIsField && require_utils.shouldRenderAsNumber(first, shouldParseNumbers) && require_utils.shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
622
|
+
const firstNum = require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
623
|
+
const secondNum = require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
877
624
|
if (!preserveValueOrder && secondNum < firstNum) {
|
|
878
625
|
const tempNum = secondNum;
|
|
879
626
|
second = firstNum;
|
|
@@ -919,7 +666,7 @@ const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns
|
|
|
919
666
|
if (require_isRuleGroup.isRuleGroup(rule)) return processRuleGroup(rule);
|
|
920
667
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
921
668
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return;
|
|
922
|
-
const fieldData =
|
|
669
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
923
670
|
return ruleProcessor(rule, {
|
|
924
671
|
...options,
|
|
925
672
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
@@ -953,7 +700,7 @@ const defaultRuleGroupProcessorElasticSearch = (ruleGroup, options) => {
|
|
|
953
700
|
if (require_isRuleGroup.isRuleGroup(rule)) return processRuleGroup(rule);
|
|
954
701
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
955
702
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return false;
|
|
956
|
-
const fieldData =
|
|
703
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
957
704
|
return ruleProcessor(rule, {
|
|
958
705
|
...options,
|
|
959
706
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
@@ -1000,7 +747,7 @@ const defaultRuleGroupProcessorJSONata = (ruleGroup, options) => {
|
|
|
1000
747
|
}
|
|
1001
748
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1002
749
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
1003
|
-
const fieldData =
|
|
750
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
1004
751
|
const processedRule = ruleProcessor(rule, {
|
|
1005
752
|
...options,
|
|
1006
753
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
@@ -1039,7 +786,7 @@ const defaultRuleGroupProcessorJsonLogic = (ruleGroup, options) => {
|
|
|
1039
786
|
if (require_isRuleGroup.isRuleGroup(rule)) return processRuleGroup(rule);
|
|
1040
787
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1041
788
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return false;
|
|
1042
|
-
const fieldData =
|
|
789
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
1043
790
|
return ruleProcessor(rule, {
|
|
1044
791
|
...options,
|
|
1045
792
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
@@ -1068,7 +815,7 @@ const defaultRuleGroupProcessorLDAP = (ruleGroup, options) => {
|
|
|
1068
815
|
if (require_isRuleGroup.isRuleGroup(rule)) return processRuleGroup(rule);
|
|
1069
816
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1070
817
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return "";
|
|
1071
|
-
const fieldData =
|
|
818
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
1072
819
|
return ruleProcessor(rule, {
|
|
1073
820
|
...options,
|
|
1074
821
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
@@ -1111,7 +858,7 @@ const defaultRuleGroupProcessorMongoDB = (ruleGroup, options, meta) => {
|
|
|
1111
858
|
}
|
|
1112
859
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1113
860
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return "";
|
|
1114
|
-
const fieldData =
|
|
861
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
1115
862
|
return ruleProcessor(rule, {
|
|
1116
863
|
...options,
|
|
1117
864
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
@@ -1160,7 +907,7 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
|
|
|
1160
907
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1161
908
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
1162
909
|
const escapeQuotes = (rule.valueSource ?? "value") === "value";
|
|
1163
|
-
const fieldData =
|
|
910
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
1164
911
|
const processedRule = ruleProcessor(rule, {
|
|
1165
912
|
...options,
|
|
1166
913
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
@@ -1180,7 +927,7 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
|
|
|
1180
927
|
const isXOR = require_isRuleGroup.lc(rg2.combinator ?? "") === "xor";
|
|
1181
928
|
const combinator = isXOR ? rg2.combinator.slice(1) : rg2.combinator;
|
|
1182
929
|
const mustWrap = rg2.not || !outermostOrLonelyInGroup || isXOR && processedRules.length > 1;
|
|
1183
|
-
const [prefixTL, suffixTL] = ["groupPrefix", "groupSuffix"].map((key) => rg2.not ? isXOR ? getNLTranslataion(key, translations, ["not", "xor"]) : getNLTranslataion(key, translations, ["not"]) : isXOR ? getNLTranslataion(key, translations, ["xor"]) : getNLTranslataion(key, translations));
|
|
930
|
+
const [prefixTL, suffixTL] = ["groupPrefix", "groupSuffix"].map((key) => rg2.not ? isXOR ? require_utils.getNLTranslataion(key, translations, ["not", "xor"]) : require_utils.getNLTranslataion(key, translations, ["not"]) : isXOR ? require_utils.getNLTranslataion(key, translations, ["xor"]) : require_utils.getNLTranslataion(key, translations));
|
|
1184
931
|
const prefix = mustWrap ? `${prefixTL} (`.trim() : "";
|
|
1185
932
|
const suffix = mustWrap ? `) ${suffixTL}`.trim() : "";
|
|
1186
933
|
return `${prefix}${processedRules.join(require_isRuleGroup.isRuleGroupType(rg2) ? `, ${translations[combinator] ?? combinator} ` : "")}${suffix}`;
|
|
@@ -1211,7 +958,7 @@ const defaultRuleGroupProcessorParameterized = (ruleGroup, options) => {
|
|
|
1211
958
|
const processRule = (rule) => {
|
|
1212
959
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1213
960
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return "";
|
|
1214
|
-
const fieldData =
|
|
961
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
1215
962
|
const fieldParamNames = Object.fromEntries([...fieldParams.entries()].map(([f, s]) => [f, [...s]]));
|
|
1216
963
|
const processedRule = ruleProcessor(rule, {
|
|
1217
964
|
...options,
|
|
@@ -1307,7 +1054,7 @@ const defaultRuleGroupProcessorPrisma = (ruleGroup, options) => {
|
|
|
1307
1054
|
}
|
|
1308
1055
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1309
1056
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return;
|
|
1310
|
-
const fieldData =
|
|
1057
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
1311
1058
|
return ruleProcessor(rule, {
|
|
1312
1059
|
...options,
|
|
1313
1060
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
@@ -1347,7 +1094,7 @@ const defaultRuleGroupProcessorSequelize = (ruleGroup, options) => {
|
|
|
1347
1094
|
}
|
|
1348
1095
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1349
1096
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return;
|
|
1350
|
-
const fieldData =
|
|
1097
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
1351
1098
|
return ruleProcessor(rule, {
|
|
1352
1099
|
...options,
|
|
1353
1100
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
@@ -1396,7 +1143,7 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
|
|
|
1396
1143
|
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1397
1144
|
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
1398
1145
|
const escapeQuotes = (rule.valueSource ?? "value") === "value";
|
|
1399
|
-
const fieldData =
|
|
1146
|
+
const fieldData = require_utils.getOption(fields, rule.field);
|
|
1400
1147
|
const processedRule = ruleProcessor(rule, {
|
|
1401
1148
|
...options,
|
|
1402
1149
|
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
@@ -1439,7 +1186,7 @@ const getTextScript = (f, o, v) => {
|
|
|
1439
1186
|
const script = `doc['${f}'].value.${textFunctionMap[o] ?? o}(doc['${v}'].value)`;
|
|
1440
1187
|
return o.startsWith("d") ? `!${script}` : script;
|
|
1441
1188
|
};
|
|
1442
|
-
const valueRenderer = (v, parseNumbers) => typeof v === "boolean" ? v : shouldRenderAsNumber(v, parseNumbers) ?
|
|
1189
|
+
const valueRenderer = (v, parseNumbers) => typeof v === "boolean" ? v : require_utils.shouldRenderAsNumber(v, parseNumbers) ? require_utils.parseNumber(v, { parseNumbers }) : v;
|
|
1443
1190
|
/**
|
|
1444
1191
|
* Default rule processor used by {@link formatQuery} for "elasticsearch" format.
|
|
1445
1192
|
*
|
|
@@ -1449,9 +1196,9 @@ const defaultRuleProcessorElasticSearch = (rule, options = {}) => {
|
|
|
1449
1196
|
const { field, operator, value, valueSource } = rule;
|
|
1450
1197
|
const { parseNumbers, preserveValueOrder } = options;
|
|
1451
1198
|
const operatorLC = require_isRuleGroup.lc(operator);
|
|
1452
|
-
if (processMatchMode(rule)) return false;
|
|
1199
|
+
if (require_utils.processMatchMode(rule)) return false;
|
|
1453
1200
|
if (valueSource === "field") {
|
|
1454
|
-
if (
|
|
1201
|
+
if (require_utils.toArray(value).some((v) => typeof v !== "string")) return false;
|
|
1455
1202
|
const fieldForScript = escapeSQ(field);
|
|
1456
1203
|
switch (operatorLC) {
|
|
1457
1204
|
case "=":
|
|
@@ -1466,7 +1213,7 @@ const defaultRuleProcessorElasticSearch = (rule, options = {}) => {
|
|
|
1466
1213
|
}
|
|
1467
1214
|
case "in":
|
|
1468
1215
|
case "notin": {
|
|
1469
|
-
const valueAsArray =
|
|
1216
|
+
const valueAsArray = require_utils.toArray(value);
|
|
1470
1217
|
if (valueAsArray.length > 0) {
|
|
1471
1218
|
const arr = valueAsArray.map((v) => ({ bool: { filter: { script: { script: `doc['${fieldForScript}'].value == doc['${v}'].value` } } } }));
|
|
1472
1219
|
return { bool: operatorLC === "in" ? { should: arr } : { must_not: arr } };
|
|
@@ -1475,7 +1222,7 @@ const defaultRuleProcessorElasticSearch = (rule, options = {}) => {
|
|
|
1475
1222
|
}
|
|
1476
1223
|
case "between":
|
|
1477
1224
|
case "notbetween": {
|
|
1478
|
-
const valueAsArray =
|
|
1225
|
+
const valueAsArray = require_utils.toArray(value);
|
|
1479
1226
|
if (valueAsArray.length >= 2 && valueAsArray[0] && valueAsArray[1]) {
|
|
1480
1227
|
const script = `doc['${fieldForScript}'].value >= doc['${valueAsArray[0]}'].value && doc['${fieldForScript}'].value <= doc['${valueAsArray[1]}'].value`;
|
|
1481
1228
|
return { bool: { filter: { script: { script: operatorLC === "notbetween" ? `!(${script})` : script } } } };
|
|
@@ -1505,7 +1252,7 @@ const defaultRuleProcessorElasticSearch = (rule, options = {}) => {
|
|
|
1505
1252
|
case "notnull": return { exists: { field } };
|
|
1506
1253
|
case "in":
|
|
1507
1254
|
case "notin": {
|
|
1508
|
-
const valueAsArray =
|
|
1255
|
+
const valueAsArray = require_utils.toArray(value).map((v) => valueRenderer(v, parseNumbers));
|
|
1509
1256
|
if (valueAsArray.length > 0) {
|
|
1510
1257
|
const arr = valueAsArray.map((v) => ({ term: { [field]: valueRenderer(v, parseNumbers) } }));
|
|
1511
1258
|
return { bool: operatorLC === "in" ? { should: arr } : { must_not: arr } };
|
|
@@ -1514,13 +1261,13 @@ const defaultRuleProcessorElasticSearch = (rule, options = {}) => {
|
|
|
1514
1261
|
}
|
|
1515
1262
|
case "between":
|
|
1516
1263
|
case "notbetween": {
|
|
1517
|
-
const valueAsArray =
|
|
1518
|
-
if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
|
|
1264
|
+
const valueAsArray = require_utils.toArray(value);
|
|
1265
|
+
if (valueAsArray.length >= 2 && require_utils.isValidValue(valueAsArray[0]) && require_utils.isValidValue(valueAsArray[1])) {
|
|
1519
1266
|
let [first, second] = valueAsArray;
|
|
1520
1267
|
const shouldParseNumbers = !(parseNumbers === false);
|
|
1521
|
-
if (shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
1522
|
-
const firstNum =
|
|
1523
|
-
const secondNum =
|
|
1268
|
+
if (require_utils.shouldRenderAsNumber(first, shouldParseNumbers) && require_utils.shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
1269
|
+
const firstNum = require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
1270
|
+
const secondNum = require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
1524
1271
|
if (!preserveValueOrder && secondNum < firstNum) {
|
|
1525
1272
|
const tempNum = secondNum;
|
|
1526
1273
|
second = firstNum;
|
|
@@ -1562,12 +1309,12 @@ const defaultRuleProcessorJSONata = (rule, options = {}) => {
|
|
|
1562
1309
|
const { field, operator, value, valueSource } = rule;
|
|
1563
1310
|
const { escapeQuotes, parseNumbers, preserveValueOrder, quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator = "" } = options;
|
|
1564
1311
|
const valueIsField = valueSource === "field";
|
|
1565
|
-
const useBareValue = typeof value === "number" || typeof value === "boolean" || typeof value === "bigint" || shouldRenderAsNumber(value, parseNumbers);
|
|
1566
|
-
const qfn = (f) => getQuotedFieldName(f, {
|
|
1312
|
+
const useBareValue = typeof value === "number" || typeof value === "boolean" || typeof value === "bigint" || require_utils.shouldRenderAsNumber(value, parseNumbers);
|
|
1313
|
+
const qfn = (f) => require_utils.getQuotedFieldName(f, {
|
|
1567
1314
|
quoteFieldNamesWith,
|
|
1568
1315
|
fieldIdentifierSeparator
|
|
1569
1316
|
});
|
|
1570
|
-
const matchEval = processMatchMode(rule);
|
|
1317
|
+
const matchEval = require_utils.processMatchMode(rule);
|
|
1571
1318
|
if (matchEval === false) return;
|
|
1572
1319
|
else if (matchEval) {
|
|
1573
1320
|
const { mode, threshold } = matchEval;
|
|
@@ -1596,28 +1343,28 @@ const defaultRuleProcessorJSONata = (rule, options = {}) => {
|
|
|
1596
1343
|
case "=":
|
|
1597
1344
|
case "!=":
|
|
1598
1345
|
case ">":
|
|
1599
|
-
case ">=": return `${qfn(field)} ${operatorLC} ${valueIsField ? qfn(
|
|
1346
|
+
case ">=": return `${qfn(field)} ${operatorLC} ${valueIsField ? qfn(require_utils.trimIfString(value)) : useBareValue ? require_utils.trimIfString(value) : quote(value, escapeQuotes)}`;
|
|
1600
1347
|
case "contains":
|
|
1601
|
-
case "doesnotcontain": return negate(`$contains(${qfn(field)}, ${valueIsField ? qfn(
|
|
1348
|
+
case "doesnotcontain": return negate(`$contains(${qfn(field)}, ${valueIsField ? qfn(require_utils.trimIfString(value)) : quote(value, escapeQuotes)})`, shouldNegate(operatorLC));
|
|
1602
1349
|
case "beginswith":
|
|
1603
|
-
case "doesnotbeginwith": return negate(valueIsField ? `$substring(${qfn(field)}, 0, $length(${qfn(
|
|
1350
|
+
case "doesnotbeginwith": return negate(valueIsField ? `$substring(${qfn(field)}, 0, $length(${qfn(require_utils.trimIfString(value))})) = ${qfn(require_utils.trimIfString(value))}` : `$contains(${qfn(field)}, /^${escapeStringRegex(value)}/)`, shouldNegate(operatorLC));
|
|
1604
1351
|
case "endswith":
|
|
1605
|
-
case "doesnotendwith": return negate(valueIsField ? `$substring(${qfn(field)}, $length(${qfn(field)}) - $length(${qfn(
|
|
1352
|
+
case "doesnotendwith": return negate(valueIsField ? `$substring(${qfn(field)}, $length(${qfn(field)}) - $length(${qfn(require_utils.trimIfString(value))})) = ${qfn(require_utils.trimIfString(value))}` : `$contains(${qfn(field)}, /${escapeStringRegex(value)}$/)`, shouldNegate(operatorLC));
|
|
1606
1353
|
case "null": return `${qfn(field)} = null`;
|
|
1607
1354
|
case "notnull": return `${qfn(field)} != null`;
|
|
1608
1355
|
case "in":
|
|
1609
1356
|
case "notin": {
|
|
1610
|
-
const valueAsArray =
|
|
1611
|
-
return negate(`${qfn(field)} in [${valueAsArray.map((val) => valueIsField ? `${qfn(
|
|
1357
|
+
const valueAsArray = require_utils.toArray(value);
|
|
1358
|
+
return negate(`${qfn(field)} in [${valueAsArray.map((val) => valueIsField ? `${qfn(require_utils.trimIfString(val))}` : require_utils.shouldRenderAsNumber(val, parseNumbers) ? `${require_utils.trimIfString(val)}` : quote(val, escapeQuotes)).join(", ")}]`, shouldNegate(operatorLC));
|
|
1612
1359
|
}
|
|
1613
1360
|
case "between":
|
|
1614
1361
|
case "notbetween": {
|
|
1615
|
-
const valueAsArray =
|
|
1362
|
+
const valueAsArray = require_utils.toArray(value);
|
|
1616
1363
|
if (valueAsArray.length < 2 || require_isRuleGroup.nullOrUndefinedOrEmpty(valueAsArray[0]) || require_isRuleGroup.nullOrUndefinedOrEmpty(valueAsArray[1])) return "";
|
|
1617
1364
|
const [first, second] = valueAsArray;
|
|
1618
1365
|
const shouldParseNumbers = !(parseNumbers === false);
|
|
1619
|
-
const firstNum = shouldRenderAsNumber(first, shouldParseNumbers) ?
|
|
1620
|
-
const secondNum = shouldRenderAsNumber(second, shouldParseNumbers) ?
|
|
1366
|
+
const firstNum = require_utils.shouldRenderAsNumber(first, shouldParseNumbers) ? require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
1367
|
+
const secondNum = require_utils.shouldRenderAsNumber(second, shouldParseNumbers) ? require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
1621
1368
|
let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : first : firstNum;
|
|
1622
1369
|
let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : second : secondNum;
|
|
1623
1370
|
if (!preserveValueOrder && firstValue === firstNum && secondValue === secondNum && secondNum < firstNum) {
|
|
@@ -1625,7 +1372,7 @@ const defaultRuleProcessorJSONata = (rule, options = {}) => {
|
|
|
1625
1372
|
secondValue = firstNum;
|
|
1626
1373
|
firstValue = tempNum;
|
|
1627
1374
|
}
|
|
1628
|
-
const renderAsNumbers = shouldRenderAsNumber(first, parseNumbers) && shouldRenderAsNumber(second, parseNumbers);
|
|
1375
|
+
const renderAsNumbers = require_utils.shouldRenderAsNumber(first, parseNumbers) && require_utils.shouldRenderAsNumber(second, parseNumbers);
|
|
1629
1376
|
const getValueString = (raw, val) => valueIsField ? qfn(raw) : renderAsNumbers ? val : quote(val, escapeQuotes);
|
|
1630
1377
|
const expression = `${qfn(field)} >= ${getValueString(first, firstValue)} and ${qfn(field)} <= ${getValueString(second, secondValue)}`;
|
|
1631
1378
|
return operatorLC === "between" ? `(${expression})` : negate(expression, true);
|
|
@@ -1648,8 +1395,8 @@ const defaultRuleProcessorJsonLogic = (rule, options = {}) => {
|
|
|
1648
1395
|
const { parseNumbers, preserveValueOrder } = options;
|
|
1649
1396
|
const valueIsField = valueSource === "field";
|
|
1650
1397
|
const fieldObject = { var: field };
|
|
1651
|
-
const fieldOrNumberRenderer = (v) => valueIsField ? { var: `${v}` } : shouldRenderAsNumber(v, parseNumbers) ?
|
|
1652
|
-
const matchEval = processMatchMode(rule);
|
|
1398
|
+
const fieldOrNumberRenderer = (v) => valueIsField ? { var: `${v}` } : require_utils.shouldRenderAsNumber(v, parseNumbers) ? require_utils.parseNumber(v, { parseNumbers }) : v;
|
|
1399
|
+
const matchEval = require_utils.processMatchMode(rule);
|
|
1653
1400
|
if (matchEval === false) return false;
|
|
1654
1401
|
else if (matchEval) {
|
|
1655
1402
|
const { mode, threshold } = matchEval;
|
|
@@ -1689,16 +1436,16 @@ const defaultRuleProcessorJsonLogic = (rule, options = {}) => {
|
|
|
1689
1436
|
case "null":
|
|
1690
1437
|
case "notnull": return { [`${operatorLC === "notnull" ? "!" : "="}=`]: [fieldObject, null] };
|
|
1691
1438
|
case "in":
|
|
1692
|
-
case "notin": return negateIfNotOp(operatorLC, { in: [fieldObject,
|
|
1439
|
+
case "notin": return negateIfNotOp(operatorLC, { in: [fieldObject, require_utils.toArray(value).map((v) => fieldOrNumberRenderer(v))] });
|
|
1693
1440
|
case "between":
|
|
1694
1441
|
case "notbetween": {
|
|
1695
|
-
const valueAsArray =
|
|
1696
|
-
if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
|
|
1442
|
+
const valueAsArray = require_utils.toArray(value);
|
|
1443
|
+
if (valueAsArray.length >= 2 && require_utils.isValidValue(valueAsArray[0]) && require_utils.isValidValue(valueAsArray[1])) {
|
|
1697
1444
|
let [first, second] = valueAsArray;
|
|
1698
1445
|
const shouldParseNumbers = !(parseNumbers === false);
|
|
1699
|
-
if (!valueIsField && shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
1700
|
-
const firstNum =
|
|
1701
|
-
const secondNum =
|
|
1446
|
+
if (!valueIsField && require_utils.shouldRenderAsNumber(first, shouldParseNumbers) && require_utils.shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
1447
|
+
const firstNum = require_utils.parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
1448
|
+
const secondNum = require_utils.parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
1702
1449
|
if (!preserveValueOrder && secondNum < firstNum) {
|
|
1703
1450
|
const tempNum = secondNum;
|
|
1704
1451
|
second = firstNum;
|
|
@@ -1732,7 +1479,7 @@ const defaultRuleProcessorJsonLogic = (rule, options = {}) => {
|
|
|
1732
1479
|
//#endregion
|
|
1733
1480
|
//#region src/utils/formatQuery/defaultRuleProcessorLDAP.ts
|
|
1734
1481
|
const negateIf = (clause, negate$1) => negate$1 ? `(!${clause})` : `${clause}`;
|
|
1735
|
-
const ldapEscape = (s) => `${
|
|
1482
|
+
const ldapEscape = (s) => `${require_utils.trimIfString(s)}`.replaceAll(/[()&|=<>~*\\/]/g, (m) => `\\${m.codePointAt(0).toString(16)}`);
|
|
1736
1483
|
/**
|
|
1737
1484
|
* Default rule processor used by {@link formatQuery} for "ldap" format.
|
|
1738
1485
|
*
|
|
@@ -1742,7 +1489,7 @@ const defaultRuleProcessorLDAP = (rule, options = {}) => {
|
|
|
1742
1489
|
const { field, operator, value, valueSource } = rule;
|
|
1743
1490
|
const { preserveValueOrder } = options;
|
|
1744
1491
|
const operatorLC = require_isRuleGroup.lc(operator);
|
|
1745
|
-
if (valueSource === "field" || require_isRuleGroup.nullOrUndefinedOrEmpty(value) && operatorLC !== "null" && operatorLC !== "notnull" || processMatchMode(rule)) return "";
|
|
1492
|
+
if (valueSource === "field" || require_isRuleGroup.nullOrUndefinedOrEmpty(value) && operatorLC !== "null" && operatorLC !== "notnull" || require_utils.processMatchMode(rule)) return "";
|
|
1746
1493
|
switch (operatorLC) {
|
|
1747
1494
|
case "=":
|
|
1748
1495
|
case "!=": return negateIf(`(${field}=${ldapEscape(value)})`, operatorLC === "!=");
|
|
@@ -1759,14 +1506,14 @@ const defaultRuleProcessorLDAP = (rule, options = {}) => {
|
|
|
1759
1506
|
case "null":
|
|
1760
1507
|
case "notnull": return negateIf(`(${field}=*)`, operatorLC === "notnull");
|
|
1761
1508
|
case "in":
|
|
1762
|
-
case "notin": return negateIf(`(|${
|
|
1509
|
+
case "notin": return negateIf(`(|${require_utils.toArray(value).map((val) => `(${field}=${ldapEscape(val)})`).join("")})`, operatorLC === "notin");
|
|
1763
1510
|
case "between":
|
|
1764
1511
|
case "notbetween": {
|
|
1765
|
-
const valueAsArray =
|
|
1512
|
+
const valueAsArray = require_utils.toArray(value);
|
|
1766
1513
|
if (valueAsArray.length < 2 || require_isRuleGroup.nullOrUndefinedOrEmpty(valueAsArray[0]) || require_isRuleGroup.nullOrUndefinedOrEmpty(valueAsArray[1])) return "";
|
|
1767
1514
|
const [first, second] = valueAsArray;
|
|
1768
|
-
const firstNum = shouldRenderAsNumber(first, true) ?
|
|
1769
|
-
const secondNum = shouldRenderAsNumber(second, true) ?
|
|
1515
|
+
const firstNum = require_utils.shouldRenderAsNumber(first, true) ? require_utils.parseNumber(first, { parseNumbers: true }) : NaN;
|
|
1516
|
+
const secondNum = require_utils.shouldRenderAsNumber(second, true) ? require_utils.parseNumber(second, { parseNumbers: true }) : NaN;
|
|
1770
1517
|
let firstValue = Number.isNaN(firstNum) ? first : firstNum;
|
|
1771
1518
|
let secondValue = Number.isNaN(secondNum) ? second : secondNum;
|
|
1772
1519
|
if (!preserveValueOrder && firstValue === firstNum && secondValue === secondNum && secondNum < firstNum) {
|
|
@@ -1797,7 +1544,7 @@ const defaultValueProcessorNL = (rule, opts = {}) => {
|
|
|
1797
1544
|
const quoteValue = (v) => `${quoteChar}${v}${quoteChar}`;
|
|
1798
1545
|
const escapeValue = (v) => escapeStringValueQuotes(v, quoteChar, escapeQuotes);
|
|
1799
1546
|
const wrapAndEscape = (v) => quoteValue(escapeValue(v));
|
|
1800
|
-
const wrapFieldName = (v) => getQuotedFieldName(v, {
|
|
1547
|
+
const wrapFieldName = (v) => require_utils.getQuotedFieldName(v, {
|
|
1801
1548
|
quoteFieldNamesWith,
|
|
1802
1549
|
fieldIdentifierSeparator
|
|
1803
1550
|
});
|
|
@@ -1811,8 +1558,8 @@ const defaultValueProcessorNL = (rule, opts = {}) => {
|
|
|
1811
1558
|
case "between":
|
|
1812
1559
|
case "notbetween": {
|
|
1813
1560
|
if (!valueIsField) return defaultValueProcessorByRule(rule, opts);
|
|
1814
|
-
const valueAsArray =
|
|
1815
|
-
if (valueAsArray.length < 2 || !isValidValue(valueAsArray[0]) || !isValidValue(valueAsArray[1])) return "";
|
|
1561
|
+
const valueAsArray = require_utils.toArray(rule.value, { retainEmptyStrings: true }).slice(0, 2).map((v) => wrapFieldName(require_utils.getOption(fields ?? [], v)?.label ?? v));
|
|
1562
|
+
if (valueAsArray.length < 2 || !require_utils.isValidValue(valueAsArray[0]) || !require_utils.isValidValue(valueAsArray[1])) return "";
|
|
1816
1563
|
return defaultValueProcessorByRule({
|
|
1817
1564
|
...rule,
|
|
1818
1565
|
value: valueAsArray
|
|
@@ -1820,14 +1567,14 @@ const defaultValueProcessorNL = (rule, opts = {}) => {
|
|
|
1820
1567
|
}
|
|
1821
1568
|
case "in":
|
|
1822
1569
|
case "notin": {
|
|
1823
|
-
const valueAsArray =
|
|
1570
|
+
const valueAsArray = require_utils.toArray(rule.value);
|
|
1824
1571
|
if (valueAsArray.length === 0) return "";
|
|
1825
|
-
const valStringArray = valueAsArray.map((v) => valueIsField ? wrapFieldName(
|
|
1572
|
+
const valStringArray = valueAsArray.map((v) => valueIsField ? wrapFieldName(require_utils.getOption(fields ?? [], v)?.label ?? v) : require_utils.shouldRenderAsNumber(v, parseNumbers) ? `${require_utils.trimIfString(v)}` : `${wrapAndEscape(v)}`);
|
|
1826
1573
|
return `${valStringArray.slice(0, -1).join(", ")}${valStringArray.length > 2 ? "," : ""} ${orTL} ${valStringArray.at(-1)}`;
|
|
1827
1574
|
}
|
|
1828
1575
|
}
|
|
1829
1576
|
if (typeof rule.value === "boolean") return rule.value ? trueTL : falseTL;
|
|
1830
|
-
return valueIsField ? wrapFieldName(
|
|
1577
|
+
return valueIsField ? wrapFieldName(require_utils.getOption(fields ?? [], rule.value)?.label ?? rule.value) : require_utils.shouldRenderAsNumber(rule.value, parseNumbers) ? `${require_utils.trimIfString(rule.value)}` : `${wrapAndEscape(rule.value)}`;
|
|
1831
1578
|
};
|
|
1832
1579
|
|
|
1833
1580
|
//#endregion
|
|
@@ -1871,7 +1618,7 @@ const defaultOperatorProcessorNL = (rule, opts = {}) => {
|
|
|
1871
1618
|
const mapOperatorMap = new Map(Object.entries(defaultExportOperatorMap));
|
|
1872
1619
|
for (const [key, value] of Object.entries(operatorMapParam)) mapOperatorMap.set(require_isRuleGroup.lc(key), value);
|
|
1873
1620
|
const operatorMap = Object.fromEntries(mapOperatorMap);
|
|
1874
|
-
const { value: operatorNL, label } =
|
|
1621
|
+
const { value: operatorNL, label } = require_utils.getOption(require_utils.toFullOptionList(getOperators(field, { fieldData: opts.fieldData ?? {
|
|
1875
1622
|
name: field,
|
|
1876
1623
|
value: field,
|
|
1877
1624
|
label: field
|
|
@@ -1892,17 +1639,17 @@ const defaultRuleProcessorNL = (rule, opts) => {
|
|
|
1892
1639
|
const { field, operator } = rule;
|
|
1893
1640
|
// istanbul ignore next
|
|
1894
1641
|
const { fieldData, quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator = "", quoteValuesWith = `'`, operatorProcessor = defaultOperatorProcessorNL, valueProcessor = defaultValueProcessorNL, concatOperator = "||", wordOrder = "SVO" } = opts ?? ( /* istanbul ignore next */ {});
|
|
1895
|
-
const processedField = getQuotedFieldName(fieldData?.label ?? field, {
|
|
1642
|
+
const processedField = require_utils.getQuotedFieldName(fieldData?.label ?? field, {
|
|
1896
1643
|
quoteFieldNamesWith,
|
|
1897
1644
|
fieldIdentifierSeparator
|
|
1898
1645
|
});
|
|
1899
|
-
const matchEval = processMatchMode(rule);
|
|
1646
|
+
const matchEval = require_utils.processMatchMode(rule);
|
|
1900
1647
|
if (matchEval === false) return "";
|
|
1901
1648
|
else if (matchEval) {
|
|
1902
1649
|
const { mode, threshold } = matchEval;
|
|
1903
1650
|
const nestedArrayFilter = defaultRuleGroupProcessorNL(rule.value, {
|
|
1904
1651
|
...opts,
|
|
1905
|
-
fields:
|
|
1652
|
+
fields: require_utils.toFullOptionList(fieldData?.subproperties ?? [])
|
|
1906
1653
|
});
|
|
1907
1654
|
const hsp = (fieldData?.subproperties?.length ?? 0) > 0;
|
|
1908
1655
|
switch (mode) {
|
|
@@ -1932,7 +1679,7 @@ const defaultRuleProcessorNL = (rule, opts) => {
|
|
|
1932
1679
|
V: operatorProcessor(rule, opts),
|
|
1933
1680
|
O: value
|
|
1934
1681
|
};
|
|
1935
|
-
return normalizeConstituentWordOrder(wordOrder).map((term) => `${wordOrderMap[term]}`).join(" ").trim();
|
|
1682
|
+
return require_utils.normalizeConstituentWordOrder(wordOrder).map((term) => `${wordOrderMap[term]}`).join(" ").trim();
|
|
1936
1683
|
};
|
|
1937
1684
|
|
|
1938
1685
|
//#endregion
|
|
@@ -1942,7 +1689,7 @@ const defaultRuleProcessorNL = (rule, opts) => {
|
|
|
1942
1689
|
*
|
|
1943
1690
|
* @group Export
|
|
1944
1691
|
*/
|
|
1945
|
-
const defaultOperatorProcessorSQL = (rule) => require_isRuleGroup.lc(mapSQLOperator(rule.operator));
|
|
1692
|
+
const defaultOperatorProcessorSQL = (rule) => require_isRuleGroup.lc(require_utils.mapSQLOperator(rule.operator));
|
|
1946
1693
|
/**
|
|
1947
1694
|
* Default rule processor used by {@link formatQuery} for "sql" format.
|
|
1948
1695
|
*
|
|
@@ -1950,12 +1697,12 @@ const defaultOperatorProcessorSQL = (rule) => require_isRuleGroup.lc(mapSQLOpera
|
|
|
1950
1697
|
*/
|
|
1951
1698
|
const defaultRuleProcessorSQL = (rule, opts = {}) => {
|
|
1952
1699
|
const { quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator = "", quoteValuesWith = `'`, operatorProcessor = defaultOperatorProcessorSQL, valueProcessor = defaultValueProcessorByRule, concatOperator = "||" } = opts;
|
|
1953
|
-
const wrapFieldName = (v) => getQuotedFieldName(v, {
|
|
1700
|
+
const wrapFieldName = (v) => require_utils.getQuotedFieldName(v, {
|
|
1954
1701
|
quoteFieldNamesWith,
|
|
1955
1702
|
fieldIdentifierSeparator
|
|
1956
1703
|
});
|
|
1957
1704
|
const ruleField = wrapFieldName(rule.field);
|
|
1958
|
-
const matchEval = processMatchMode(rule);
|
|
1705
|
+
const matchEval = require_utils.processMatchMode(rule);
|
|
1959
1706
|
if (matchEval === false) return;
|
|
1960
1707
|
else if (matchEval) {
|
|
1961
1708
|
if (opts?.preset !== "postgresql") return "";
|
|
@@ -2012,12 +1759,12 @@ const defaultRuleProcessorParameterized = (rule, opts, meta) => {
|
|
|
2012
1759
|
sql,
|
|
2013
1760
|
params: paramsNamed
|
|
2014
1761
|
};
|
|
2015
|
-
const wrapFieldName = (v) => getQuotedFieldName(v, {
|
|
1762
|
+
const wrapFieldName = (v) => require_utils.getQuotedFieldName(v, {
|
|
2016
1763
|
quoteFieldNamesWith,
|
|
2017
1764
|
fieldIdentifierSeparator
|
|
2018
1765
|
});
|
|
2019
1766
|
const ruleField = wrapFieldName(rule.field);
|
|
2020
|
-
const matchEval = processMatchMode(rule);
|
|
1767
|
+
const matchEval = require_utils.processMatchMode(rule);
|
|
2021
1768
|
if (matchEval === false) return;
|
|
2022
1769
|
else if (matchEval) {
|
|
2023
1770
|
if (opts?.preset !== "postgresql") return finalize("");
|
|
@@ -2059,20 +1806,20 @@ const defaultRuleProcessorParameterized = (rule, opts, meta) => {
|
|
|
2059
1806
|
else if (sqlOperatorLowerCase === "is null" || sqlOperatorLowerCase === "is not null") return finalize(`${qPre}${rule.field}${qPost} ${sqlOperator}`);
|
|
2060
1807
|
else if (rule.valueSource === "field") return finalize(`${qPre}${rule.field}${qPost} ${sqlOperator} ${value}`.trim());
|
|
2061
1808
|
else if (sqlOperatorLowerCase === "in" || sqlOperatorLowerCase === "not in") {
|
|
2062
|
-
const splitValue =
|
|
1809
|
+
const splitValue = require_utils.toArray(rule.value);
|
|
2063
1810
|
if (parameterized) {
|
|
2064
|
-
for (const v of splitValue) params.push(shouldRenderAsNumber(v, parseNumbers) ?
|
|
1811
|
+
for (const v of splitValue) params.push(require_utils.shouldRenderAsNumber(v, parseNumbers) ? require_utils.parseNumber(v, { parseNumbers }) : v);
|
|
2065
1812
|
return finalize(`${qPre}${rule.field}${qPost} ${sqlOperator} (${splitValue.map((_v, i) => numberedParams ? `${paramPrefix}${processedParams.length + 1 + splitValue.length - (splitValue.length - i)}` : "?").join(", ")})`);
|
|
2066
1813
|
}
|
|
2067
1814
|
const inParams = [];
|
|
2068
1815
|
for (const v of splitValue) {
|
|
2069
1816
|
const thisParamName = getNextNamedParam(rule.field);
|
|
2070
1817
|
inParams.push(`${paramPrefix}${thisParamName}`);
|
|
2071
|
-
paramsNamed[`${paramsKeepPrefix ? paramPrefix : ""}${thisParamName}`] = shouldRenderAsNumber(v, parseNumbers) ?
|
|
1818
|
+
paramsNamed[`${paramsKeepPrefix ? paramPrefix : ""}${thisParamName}`] = require_utils.shouldRenderAsNumber(v, parseNumbers) ? require_utils.parseNumber(v, { parseNumbers }) : v;
|
|
2072
1819
|
}
|
|
2073
1820
|
return finalize(`${qPre}${rule.field}${qPost} ${sqlOperator} (${inParams.join(", ")})`);
|
|
2074
1821
|
} else if (sqlOperatorLowerCase === "between" || sqlOperatorLowerCase === "not between") {
|
|
2075
|
-
const [first, second] =
|
|
1822
|
+
const [first, second] = require_utils.toArray(rule.value, { retainEmptyStrings: true }).slice(0, 2).map((v) => require_utils.shouldRenderAsNumber(v, parseNumbers) ? require_utils.parseNumber(v, { parseNumbers }) : v);
|
|
2076
1823
|
if (parameterized) {
|
|
2077
1824
|
params.push(first, second);
|
|
2078
1825
|
return finalize(`${qPre}${rule.field}${qPost} ${sqlOperator} ${numberedParams ? `${paramPrefix}${processedParams.length + 1}` : "?"} and ${numberedParams ? `${paramPrefix}${processedParams.length + 2}` : "?"}`);
|
|
@@ -2084,7 +1831,7 @@ const defaultRuleProcessorParameterized = (rule, opts, meta) => {
|
|
|
2084
1831
|
return finalize(`${qPre}${rule.field}${qPost} ${sqlOperator} ${paramPrefix}${firstParamName} and ${paramPrefix}${secondParamName}`);
|
|
2085
1832
|
}
|
|
2086
1833
|
let paramValue = rule.value;
|
|
2087
|
-
if (typeof rule.value === "string") if (shouldRenderAsNumber(rule.value, parseNumbers)) paramValue =
|
|
1834
|
+
if (typeof rule.value === "string") if (require_utils.shouldRenderAsNumber(rule.value, parseNumbers)) paramValue = require_utils.parseNumber(rule.value, { parseNumbers });
|
|
2088
1835
|
else paramValue = /^'.*'$/g.test(value) ? value.replaceAll(/(^'|'$)/g, "") : value;
|
|
2089
1836
|
let paramName = "";
|
|
2090
1837
|
if (parameterized) params.push(paramValue);
|
|
@@ -2097,7 +1844,7 @@ const defaultRuleProcessorParameterized = (rule, opts, meta) => {
|
|
|
2097
1844
|
|
|
2098
1845
|
//#endregion
|
|
2099
1846
|
//#region src/utils/formatQuery/defaultRuleProcessorPrisma.ts
|
|
2100
|
-
const processNumber = (value, fallback, parseNumbers) => shouldRenderAsNumber(value, !!parseNumbers || typeof value === "bigint") ? Number(
|
|
1847
|
+
const processNumber = (value, fallback, parseNumbers) => require_utils.shouldRenderAsNumber(value, !!parseNumbers || typeof value === "bigint") ? Number(require_utils.parseNumber(value, { parseNumbers: !!parseNumbers })) : fallback;
|
|
2101
1848
|
/**
|
|
2102
1849
|
* Default rule processor used by {@link formatQuery} for "prisma" format.
|
|
2103
1850
|
*
|
|
@@ -2107,7 +1854,7 @@ const defaultRuleProcessorPrisma = (rule, options = {}) => {
|
|
|
2107
1854
|
const { field, operator, value, valueSource } = rule;
|
|
2108
1855
|
// istanbul ignore next
|
|
2109
1856
|
const { parseNumbers, preserveValueOrder } = options;
|
|
2110
|
-
if (valueSource === "field" || processMatchMode(rule)) return;
|
|
1857
|
+
if (valueSource === "field" || require_utils.processMatchMode(rule)) return;
|
|
2111
1858
|
const operatorLC = require_isRuleGroup.lc(operator);
|
|
2112
1859
|
switch (operatorLC) {
|
|
2113
1860
|
case "=": return { [field]: processNumber(value, value, parseNumbers) };
|
|
@@ -2116,7 +1863,7 @@ const defaultRuleProcessorPrisma = (rule, options = {}) => {
|
|
|
2116
1863
|
case "<=":
|
|
2117
1864
|
case ">":
|
|
2118
1865
|
case ">=": {
|
|
2119
|
-
const prismaOperator = prismaOperators[operatorLC];
|
|
1866
|
+
const prismaOperator = require_utils.prismaOperators[operatorLC];
|
|
2120
1867
|
return { [field]: { [prismaOperator]: processNumber(value, value, parseNumbers) } };
|
|
2121
1868
|
}
|
|
2122
1869
|
case "contains": return { [field]: { contains: value } };
|
|
@@ -2129,17 +1876,17 @@ const defaultRuleProcessorPrisma = (rule, options = {}) => {
|
|
|
2129
1876
|
case "notnull": return { [field]: { not: null } };
|
|
2130
1877
|
case "in":
|
|
2131
1878
|
case "notin": {
|
|
2132
|
-
const valueAsArray =
|
|
2133
|
-
return { [field]: { [prismaOperators[operatorLC]]: valueAsArray.map((val) => processNumber(val, val, parseNumbers)) } };
|
|
1879
|
+
const valueAsArray = require_utils.toArray(value);
|
|
1880
|
+
return { [field]: { [require_utils.prismaOperators[operatorLC]]: valueAsArray.map((val) => processNumber(val, val, parseNumbers)) } };
|
|
2134
1881
|
}
|
|
2135
1882
|
case "between":
|
|
2136
1883
|
case "notbetween": {
|
|
2137
|
-
const valueAsArray =
|
|
2138
|
-
if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
|
|
1884
|
+
const valueAsArray = require_utils.toArray(value);
|
|
1885
|
+
if (valueAsArray.length >= 2 && require_utils.isValidValue(valueAsArray[0]) && require_utils.isValidValue(valueAsArray[1])) {
|
|
2139
1886
|
const [first, second] = valueAsArray;
|
|
2140
1887
|
const shouldParseNumbers = !(parseNumbers === false);
|
|
2141
|
-
const firstNum = shouldRenderAsNumber(first, shouldParseNumbers) ?
|
|
2142
|
-
const secondNum = shouldRenderAsNumber(second, shouldParseNumbers) ?
|
|
1888
|
+
const firstNum = require_utils.shouldRenderAsNumber(first, shouldParseNumbers) ? require_utils.parseNumber(first, { parseNumbers }) : NaN;
|
|
1889
|
+
const secondNum = require_utils.shouldRenderAsNumber(second, shouldParseNumbers) ? require_utils.parseNumber(second, { parseNumbers }) : NaN;
|
|
2143
1890
|
let firstValue = Number.isNaN(firstNum) ? first : firstNum;
|
|
2144
1891
|
let secondValue = Number.isNaN(secondNum) ? second : secondNum;
|
|
2145
1892
|
if (!preserveValueOrder && firstValue === firstNum && secondValue === secondNum && secondNum < firstNum) {
|
|
@@ -2166,7 +1913,7 @@ const defaultRuleProcessorPrisma = (rule, options = {}) => {
|
|
|
2166
1913
|
*/
|
|
2167
1914
|
const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder, context = {} } = {}) => {
|
|
2168
1915
|
const { sequelizeOperators: Op, sequelizeCol: col, sequelizeFn: fn } = context;
|
|
2169
|
-
if (processMatchMode(rule)) return;
|
|
1916
|
+
if (require_utils.processMatchMode(rule)) return;
|
|
2170
1917
|
const { field, operator, value, valueSource } = rule;
|
|
2171
1918
|
const valueIsField = valueSource === "field";
|
|
2172
1919
|
const operatorLC = require_isRuleGroup.lc(operator);
|
|
@@ -2190,7 +1937,7 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
|
|
|
2190
1937
|
">": Op.gt,
|
|
2191
1938
|
">=": Op.gte
|
|
2192
1939
|
}[operatorLC];
|
|
2193
|
-
return { [field]: valueIsField && operatorLC === "=" ? { [Op.col]: value } : { [sequelizeOperator]: valueIsField ? col(value) : shouldRenderAsNumber(value, parseNumbers) ?
|
|
1940
|
+
return { [field]: valueIsField && operatorLC === "=" ? { [Op.col]: value } : { [sequelizeOperator]: valueIsField ? col(value) : require_utils.shouldRenderAsNumber(value, parseNumbers) ? require_utils.parseNumber(value, { parseNumbers: "strict" }) : value } };
|
|
2194
1941
|
}
|
|
2195
1942
|
case "contains": return { [field]: { [Op.substring]: valueIsField ? col(value) : `${value}` } };
|
|
2196
1943
|
case "beginswith": return { [field]: { [Op.startsWith]: valueIsField ? col(value) : `${value}` } };
|
|
@@ -2202,16 +1949,16 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
|
|
|
2202
1949
|
case "notnull": return { [field]: { [Op.not]: null } };
|
|
2203
1950
|
case "in":
|
|
2204
1951
|
case "notin": {
|
|
2205
|
-
const valueAsArray =
|
|
2206
|
-
return { [field]: { [operatorLC === "in" ? Op.in : Op.notIn]: valueAsArray.map((val) => valueIsField ? col(val) : shouldRenderAsNumber(val, parseNumbers) ?
|
|
1952
|
+
const valueAsArray = require_utils.toArray(value);
|
|
1953
|
+
return { [field]: { [operatorLC === "in" ? Op.in : Op.notIn]: valueAsArray.map((val) => valueIsField ? col(val) : require_utils.shouldRenderAsNumber(val, parseNumbers) ? require_utils.parseNumber(val, { parseNumbers: "strict" }) : val) } };
|
|
2207
1954
|
}
|
|
2208
1955
|
case "between":
|
|
2209
1956
|
case "notbetween": {
|
|
2210
|
-
const valueAsArray =
|
|
2211
|
-
if (valueAsArray.length < 2 || !isValidValue(valueAsArray[0]) || !isValidValue(valueAsArray[1])) return;
|
|
1957
|
+
const valueAsArray = require_utils.toArray(value, { retainEmptyStrings: true });
|
|
1958
|
+
if (valueAsArray.length < 2 || !require_utils.isValidValue(valueAsArray[0]) || !require_utils.isValidValue(valueAsArray[1])) return;
|
|
2212
1959
|
const [first, second] = valueAsArray;
|
|
2213
|
-
const firstNum = shouldRenderAsNumber(first, parseNumbers) ?
|
|
2214
|
-
const secondNum = shouldRenderAsNumber(second, parseNumbers) ?
|
|
1960
|
+
const firstNum = require_utils.shouldRenderAsNumber(first, parseNumbers) ? require_utils.parseNumber(first, { parseNumbers: "strict" }) : NaN;
|
|
1961
|
+
const secondNum = require_utils.shouldRenderAsNumber(second, parseNumbers) ? require_utils.parseNumber(second, { parseNumbers: "strict" }) : NaN;
|
|
2215
1962
|
const firstValue = Number.isNaN(firstNum) ? first : firstNum;
|
|
2216
1963
|
const secondValue = Number.isNaN(secondNum) ? second : secondNum;
|
|
2217
1964
|
const valsOneAndTwoOnly = [firstValue, secondValue];
|
|
@@ -2219,7 +1966,7 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
|
|
|
2219
1966
|
valsOneAndTwoOnly[0] = secondNum;
|
|
2220
1967
|
valsOneAndTwoOnly[1] = firstNum;
|
|
2221
1968
|
}
|
|
2222
|
-
return { [field]: { [operatorLC === "between" ? Op.between : Op.notBetween]: valueIsField ? valsOneAndTwoOnly.map((v) => col(v)) : valsOneAndTwoOnly.every((v) => shouldRenderAsNumber(v, parseNumbers)) ? valsOneAndTwoOnly.map((v) =>
|
|
1969
|
+
return { [field]: { [operatorLC === "between" ? Op.between : Op.notBetween]: valueIsField ? valsOneAndTwoOnly.map((v) => col(v)) : valsOneAndTwoOnly.every((v) => require_utils.shouldRenderAsNumber(v, parseNumbers)) ? valsOneAndTwoOnly.map((v) => require_utils.parseNumber(v, { parseNumbers: "strict" })) : valsOneAndTwoOnly } };
|
|
2223
1970
|
}
|
|
2224
1971
|
}
|
|
2225
1972
|
};
|
|
@@ -2312,8 +2059,8 @@ const defaultFormatQueryOptions = {
|
|
|
2312
2059
|
paramsKeepPrefix: false,
|
|
2313
2060
|
numberedParams: false,
|
|
2314
2061
|
preserveValueOrder: false,
|
|
2315
|
-
placeholderFieldName:
|
|
2316
|
-
placeholderOperatorName:
|
|
2062
|
+
placeholderFieldName: require_utils.defaultPlaceholderFieldName,
|
|
2063
|
+
placeholderOperatorName: require_utils.defaultPlaceholderOperatorName,
|
|
2317
2064
|
quoteValuesWith: "'",
|
|
2318
2065
|
concatOperator: "||",
|
|
2319
2066
|
preset: "ansi",
|
|
@@ -2353,17 +2100,17 @@ function formatQuery(ruleGroup, optionParam = {}) {
|
|
|
2353
2100
|
const format = require_isRuleGroup.lc(optObj.format);
|
|
2354
2101
|
const { fallbackExpression: fallbackExpression_option, getOperators: getOperators_option, operatorProcessor: operatorProcessor_option, parseNumbers, quoteFieldNamesWith: quoteFieldNamesWith_option, ruleGroupProcessor: ruleGroupProcessor_option, ruleProcessor: ruleProcessor_option, validator, valueProcessor: valueProcessor_option, context } = optObj;
|
|
2355
2102
|
const getParseNumberBoolean = (inputType) => {
|
|
2356
|
-
return typeof getParseNumberMethod({
|
|
2103
|
+
return typeof require_utils.getParseNumberMethod({
|
|
2357
2104
|
parseNumbers,
|
|
2358
2105
|
inputType
|
|
2359
2106
|
}) === "string" ? true : typeof parseNumbers === "boolean" ? parseNumbers : void 0;
|
|
2360
2107
|
};
|
|
2361
2108
|
const operatorProcessor = typeof operatorProcessor_option === "function" ? operatorProcessor_option : defaultOperatorProcessors[format] ?? defaultOperatorProcessor;
|
|
2362
|
-
const valueProcessor = typeof valueProcessor_option === "function" ? isValueProcessorLegacy(valueProcessor_option) ? (r) => valueProcessor_option(r.field, r.operator, r.value, r.valueSource) : valueProcessor_option : format === "natural_language" ? defaultValueProcessorNL : valueProcessorCanActAsRuleProcessor.has(format) ? ruleProcessor_option ?? defaultRuleProcessors[format] : defaultValueProcessorByRule;
|
|
2109
|
+
const valueProcessor = typeof valueProcessor_option === "function" ? require_utils.isValueProcessorLegacy(valueProcessor_option) ? (r) => valueProcessor_option(r.field, r.operator, r.value, r.valueSource) : valueProcessor_option : format === "natural_language" ? defaultValueProcessorNL : valueProcessorCanActAsRuleProcessor.has(format) ? ruleProcessor_option ?? defaultRuleProcessors[format] : defaultValueProcessorByRule;
|
|
2363
2110
|
const ruleProcessor = (typeof ruleProcessor_option === "function" ? ruleProcessor_option : null) ?? (valueProcessorCanActAsRuleProcessor.has(format) && typeof ruleProcessor_option !== "function" && valueProcessor_option ? valueProcessor : null) ?? defaultRuleProcessors[format] ?? defaultRuleProcessorSQL;
|
|
2364
|
-
const quoteFieldNamesWith = getQuoteFieldNamesWithArray(quoteFieldNamesWith_option);
|
|
2365
|
-
const fields =
|
|
2366
|
-
const getOperators = (f, m) =>
|
|
2111
|
+
const quoteFieldNamesWith = require_utils.getQuoteFieldNamesWithArray(quoteFieldNamesWith_option);
|
|
2112
|
+
const fields = require_utils.toFullOptionList(optObj.fields);
|
|
2113
|
+
const getOperators = (f, m) => require_utils.toFullOptionList(getOperators_option(f, m) ?? []);
|
|
2367
2114
|
const fallbackExpression = fallbackExpression_option ?? defaultFallbackExpressions[format] ?? defaultFallbackExpressions.sql;
|
|
2368
2115
|
let validationMap = {};
|
|
2369
2116
|
// istanbul ignore else
|
|
@@ -2381,7 +2128,7 @@ function formatQuery(ruleGroup, optionParam = {}) {
|
|
|
2381
2128
|
} else validationMap = validationResult;
|
|
2382
2129
|
}
|
|
2383
2130
|
const validatorMap = {};
|
|
2384
|
-
const uniqueFields =
|
|
2131
|
+
const uniqueFields = require_utils.toFlatOptionArray(fields);
|
|
2385
2132
|
for (const f of uniqueFields)
|
|
2386
2133
|
// istanbul ignore else
|
|
2387
2134
|
if (typeof f.validator === "function") validatorMap[f.value ?? f.name] = f.validator;
|
|
@@ -2418,9 +2165,9 @@ function formatQuery(ruleGroup, optionParam = {}) {
|
|
|
2418
2165
|
switch (format) {
|
|
2419
2166
|
case "json":
|
|
2420
2167
|
case "json_without_ids": {
|
|
2421
|
-
const rg = parseNumbers ? (0, immer.produce)(ruleGroup, (g) => numerifyValues(g, finalOptions)) : ruleGroup;
|
|
2422
|
-
if (format === "json_without_ids") return JSON.stringify(rg, (key, value) => key === "id" || key === "path" ? void 0 : bigIntJsonStringifyReplacer(key, value));
|
|
2423
|
-
return JSON.stringify(rg, bigIntJsonStringifyReplacer, 2);
|
|
2168
|
+
const rg = parseNumbers ? (0, immer.produce)(ruleGroup, (g) => require_utils.numerifyValues(g, finalOptions)) : ruleGroup;
|
|
2169
|
+
if (format === "json_without_ids") return JSON.stringify(rg, (key, value) => key === "id" || key === "path" ? void 0 : require_utils.bigIntJsonStringifyReplacer(key, value));
|
|
2170
|
+
return JSON.stringify(rg, require_utils.bigIntJsonStringifyReplacer, 2);
|
|
2424
2171
|
}
|
|
2425
2172
|
case "sql": return defaultRuleGroupProcessorSQL(ruleGroup, finalOptions);
|
|
2426
2173
|
case "parameterized":
|
|
@@ -2493,13 +2240,13 @@ const defaultValueProcessorMongoDBByRule = defaultRuleProcessorMongoDB;
|
|
|
2493
2240
|
const defaultValueProcessorSpELByRule = defaultRuleProcessorSpEL;
|
|
2494
2241
|
|
|
2495
2242
|
//#endregion
|
|
2496
|
-
exports.bigIntJsonParseReviver = bigIntJsonParseReviver;
|
|
2497
|
-
exports.bigIntJsonStringifyReplacer = bigIntJsonStringifyReplacer;
|
|
2498
|
-
exports.celCombinatorMap = celCombinatorMap;
|
|
2243
|
+
exports.bigIntJsonParseReviver = require_utils.bigIntJsonParseReviver;
|
|
2244
|
+
exports.bigIntJsonStringifyReplacer = require_utils.bigIntJsonStringifyReplacer;
|
|
2245
|
+
exports.celCombinatorMap = require_utils.celCombinatorMap;
|
|
2499
2246
|
exports.defaultCELValueProcessor = defaultCELValueProcessor;
|
|
2500
2247
|
exports.defaultExportOperatorMap = defaultExportOperatorMap;
|
|
2501
2248
|
exports.defaultMongoDBValueProcessor = defaultMongoDBValueProcessor;
|
|
2502
|
-
exports.defaultNLTranslations = defaultNLTranslations;
|
|
2249
|
+
exports.defaultNLTranslations = require_utils.defaultNLTranslations;
|
|
2503
2250
|
exports.defaultOperatorProcessorNL = defaultOperatorProcessorNL;
|
|
2504
2251
|
exports.defaultOperatorProcessorSQL = defaultOperatorProcessorSQL;
|
|
2505
2252
|
exports.defaultRuleGroupProcessorCEL = defaultRuleGroupProcessorCEL;
|
|
@@ -2539,20 +2286,20 @@ exports.defaultValueProcessorNL = defaultValueProcessorNL;
|
|
|
2539
2286
|
exports.defaultValueProcessorSpELByRule = defaultValueProcessorSpELByRule;
|
|
2540
2287
|
exports.formatQuery = formatQuery;
|
|
2541
2288
|
exports.formatQueryOptionPresets = formatQueryOptionPresets;
|
|
2542
|
-
exports.getNLTranslataion = getNLTranslataion;
|
|
2543
|
-
exports.getQuoteFieldNamesWithArray = getQuoteFieldNamesWithArray;
|
|
2544
|
-
exports.getQuotedFieldName = getQuotedFieldName;
|
|
2545
|
-
exports.isValidValue = isValidValue;
|
|
2546
|
-
exports.isValueProcessorLegacy = isValueProcessorLegacy;
|
|
2547
|
-
exports.jsonLogicAdditionalOperators = jsonLogicAdditionalOperators;
|
|
2548
|
-
exports.mapSQLOperator = mapSQLOperator;
|
|
2289
|
+
exports.getNLTranslataion = require_utils.getNLTranslataion;
|
|
2290
|
+
exports.getQuoteFieldNamesWithArray = require_utils.getQuoteFieldNamesWithArray;
|
|
2291
|
+
exports.getQuotedFieldName = require_utils.getQuotedFieldName;
|
|
2292
|
+
exports.isValidValue = require_utils.isValidValue;
|
|
2293
|
+
exports.isValueProcessorLegacy = require_utils.isValueProcessorLegacy;
|
|
2294
|
+
exports.jsonLogicAdditionalOperators = require_utils.jsonLogicAdditionalOperators;
|
|
2295
|
+
exports.mapSQLOperator = require_utils.mapSQLOperator;
|
|
2549
2296
|
exports.mongoDbFallback = mongoDbFallback;
|
|
2550
|
-
exports.mongoOperators = mongoOperators;
|
|
2551
|
-
exports.normalizeConstituentWordOrder = normalizeConstituentWordOrder;
|
|
2552
|
-
exports.numerifyValues = numerifyValues;
|
|
2297
|
+
exports.mongoOperators = require_utils.mongoOperators;
|
|
2298
|
+
exports.normalizeConstituentWordOrder = require_utils.normalizeConstituentWordOrder;
|
|
2299
|
+
exports.numerifyValues = require_utils.numerifyValues;
|
|
2553
2300
|
exports.prismaFallback = prismaFallback;
|
|
2554
|
-
exports.prismaOperators = prismaOperators;
|
|
2555
|
-
exports.processMatchMode = processMatchMode;
|
|
2556
|
-
exports.shouldRenderAsNumber = shouldRenderAsNumber;
|
|
2301
|
+
exports.prismaOperators = require_utils.prismaOperators;
|
|
2302
|
+
exports.processMatchMode = require_utils.processMatchMode;
|
|
2303
|
+
exports.shouldRenderAsNumber = require_utils.shouldRenderAsNumber;
|
|
2557
2304
|
exports.sqlDialectPresets = sqlDialectPresets;
|
|
2558
2305
|
//# sourceMappingURL=formatQuery.js.map
|