@react-querybuilder/core 8.15.0 → 8.16.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/README.md +114 -53
- package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +89 -16
- package/dist/cjs/react-querybuilder_core.cjs.development.js +402 -19
- package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
- package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +89 -16
- package/dist/cjs/react-querybuilder_core.cjs.production.js +1 -1
- package/dist/cjs/react-querybuilder_core.cjs.production.js.map +1 -1
- package/dist/formatQuery.d.mts +67 -2
- package/dist/formatQuery.d.ts +67 -2
- package/dist/formatQuery.js +402 -19
- package/dist/formatQuery.js.map +1 -1
- package/dist/formatQuery.mjs +396 -20
- package/dist/formatQuery.mjs.map +1 -1
- package/dist/{import-0wp72lLT.d.mts → import-BHlzBLM_.d.mts} +2 -2
- package/dist/{import-yRVJh7E1.d.ts → import-C6imciDf.d.ts} +2 -2
- package/dist/{index-D5TXNIzF.d.ts → index-Cjapnb-H.d.ts} +14 -7
- package/dist/{index-Lht_Wq3V.d.mts → index-D-Iej37L.d.mts} +14 -7
- package/dist/parseCEL.d.mts +2 -2
- package/dist/parseCEL.d.ts +2 -2
- package/dist/parseCEL.js.map +1 -1
- package/dist/parseCEL.mjs.map +1 -1
- package/dist/parseCypher.d.mts +49 -0
- package/dist/parseCypher.d.ts +49 -0
- package/dist/parseCypher.js +578 -0
- package/dist/parseCypher.js.map +1 -0
- package/dist/parseCypher.mjs +575 -0
- package/dist/parseCypher.mjs.map +1 -0
- package/dist/parseGremlin.d.mts +35 -0
- package/dist/parseGremlin.d.ts +35 -0
- package/dist/parseGremlin.js +192 -0
- package/dist/parseGremlin.js.map +1 -0
- package/dist/parseGremlin.mjs +191 -0
- package/dist/parseGremlin.mjs.map +1 -0
- package/dist/parseJSONata.d.mts +2 -2
- package/dist/parseJSONata.d.ts +2 -2
- package/dist/parseJSONata.js.map +1 -1
- package/dist/parseJSONata.mjs.map +1 -1
- package/dist/parseJsonLogic.d.mts +2 -2
- package/dist/parseJsonLogic.d.ts +2 -2
- package/dist/parseJsonLogic.js.map +1 -1
- 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.map +1 -1
- package/dist/parseMongoDB.mjs.map +1 -1
- package/dist/parseSPARQL.d.mts +34 -0
- package/dist/parseSPARQL.d.ts +34 -0
- package/dist/parseSPARQL.js +253 -0
- package/dist/parseSPARQL.js.map +1 -0
- package/dist/parseSPARQL.mjs +251 -0
- package/dist/parseSPARQL.mjs.map +1 -0
- package/dist/parseSQL.d.mts +2 -2
- package/dist/parseSQL.d.ts +2 -2
- package/dist/parseSQL.js.map +1 -1
- 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.map +1 -1
- package/dist/parseSpEL.mjs.map +1 -1
- package/dist/prepareQueryObjects-BoG5Rt8z.js.map +1 -1
- package/dist/prepareQueryObjects-uA10ZpZX.mjs.map +1 -1
- package/dist/react-querybuilder_core.d.mts +89 -16
- package/dist/react-querybuilder_core.legacy-esm.d.ts +89 -16
- package/dist/react-querybuilder_core.legacy-esm.js +408 -27
- package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
- package/dist/react-querybuilder_core.mjs +396 -20
- package/dist/react-querybuilder_core.mjs.map +1 -1
- package/dist/react-querybuilder_core.production.d.mts +89 -16
- package/dist/react-querybuilder_core.production.mjs +1 -1
- package/dist/react-querybuilder_core.production.mjs.map +1 -1
- package/dist/transformQuery.d.mts +1 -1
- package/dist/transformQuery.d.ts +1 -1
- package/formatQuery/package.json +1 -1
- package/package.json +47 -3
- package/parseCEL/package.json +1 -1
- package/parseCypher/package.json +4 -0
- package/parseGremlin/package.json +4 -0
- package/parseJSONata/package.json +1 -1
- package/parseJsonLogic/package.json +1 -1
- package/parseMongoDB/package.json +1 -1
- package/parseSPARQL/package.json +4 -0
- package/parseSQL/package.json +1 -1
- package/parseSpEL/package.json +1 -1
- package/transformQuery/package.json +1 -1
|
@@ -1481,7 +1481,7 @@ const defaultRuleGroupProcessorCEL = (ruleGroup, options) => {
|
|
|
1481
1481
|
//#endregion
|
|
1482
1482
|
//#region src/utils/formatQuery/defaultRuleProcessorCEL.ts
|
|
1483
1483
|
const shouldNegate$2 = (op) => op.startsWith("not") || op.startsWith("doesnot");
|
|
1484
|
-
const escapeDoubleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`);
|
|
1484
|
+
const escapeDoubleQuotes$1 = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`);
|
|
1485
1485
|
/**
|
|
1486
1486
|
* Default rule processor used by {@link formatQuery} for "cel" format.
|
|
1487
1487
|
*
|
|
@@ -1523,19 +1523,19 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
|
|
|
1523
1523
|
case "==":
|
|
1524
1524
|
case "!=":
|
|
1525
1525
|
case ">":
|
|
1526
|
-
case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`}`;
|
|
1526
|
+
case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`}`;
|
|
1527
1527
|
case "contains":
|
|
1528
|
-
case "doesnotcontain": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.contains(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
|
|
1528
|
+
case "doesnotcontain": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.contains(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`})`;
|
|
1529
1529
|
case "beginswith":
|
|
1530
|
-
case "doesnotbeginwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.startsWith(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
|
|
1530
|
+
case "doesnotbeginwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.startsWith(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`})`;
|
|
1531
1531
|
case "endswith":
|
|
1532
|
-
case "doesnotendwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.endsWith(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
|
|
1532
|
+
case "doesnotendwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.endsWith(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`})`;
|
|
1533
1533
|
case "null": return `${field} == null`;
|
|
1534
1534
|
case "notnull": return `${field} != null`;
|
|
1535
1535
|
case "in":
|
|
1536
1536
|
case "notin": {
|
|
1537
1537
|
const [prefix, suffix] = shouldNegate$2(operatorTL) ? ["!(", ")"] : ["", ""];
|
|
1538
|
-
return `${prefix}${field} in [${toArray(value).map((val) => valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `"${escapeDoubleQuotes(val, escapeQuotes)}"`).join(", ")}]${suffix}`;
|
|
1538
|
+
return `${prefix}${field} in [${toArray(value).map((val) => valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `"${escapeDoubleQuotes$1(val, escapeQuotes)}"`).join(", ")}]${suffix}`;
|
|
1539
1539
|
}
|
|
1540
1540
|
case "between":
|
|
1541
1541
|
case "notbetween": {
|
|
@@ -1545,8 +1545,8 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
|
|
|
1545
1545
|
const shouldParseNumbers = !(parseNumbers === false);
|
|
1546
1546
|
const firstNum = shouldRenderAsNumber(first, shouldParseNumbers) ? parseNumber(first, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
1547
1547
|
const secondNum = shouldRenderAsNumber(second, shouldParseNumbers) ? parseNumber(second, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
1548
|
-
let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `"${escapeDoubleQuotes(first, escapeQuotes)}"` : firstNum;
|
|
1549
|
-
let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `"${escapeDoubleQuotes(second, escapeQuotes)}"` : secondNum;
|
|
1548
|
+
let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `"${escapeDoubleQuotes$1(first, escapeQuotes)}"` : firstNum;
|
|
1549
|
+
let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `"${escapeDoubleQuotes$1(second, escapeQuotes)}"` : secondNum;
|
|
1550
1550
|
if (!preserveValueOrder && firstValue === firstNum && secondValue === secondNum && secondNum < firstNum) {
|
|
1551
1551
|
const tempNum = secondNum;
|
|
1552
1552
|
secondValue = firstNum;
|
|
@@ -1802,7 +1802,7 @@ const defaultRuleGroupProcessorSpEL = (ruleGroup, options) => {
|
|
|
1802
1802
|
//#region src/utils/formatQuery/defaultRuleProcessorSpEL.ts
|
|
1803
1803
|
const shouldNegate$1 = (op) => op.startsWith("not") || op.startsWith("doesnot");
|
|
1804
1804
|
const wrapInNegation = (clause, negate) => negate ? `!(${clause})` : clause;
|
|
1805
|
-
const escapeSingleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`'`, `\\'`);
|
|
1805
|
+
const escapeSingleQuotes$2 = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`'`, `\\'`);
|
|
1806
1806
|
/**
|
|
1807
1807
|
* Default rule processor used by {@link formatQuery} for "spel" format.
|
|
1808
1808
|
*
|
|
@@ -1843,20 +1843,20 @@ const defaultRuleProcessorSpEL = (rule, opts = {}) => {
|
|
|
1843
1843
|
case "==":
|
|
1844
1844
|
case "!=":
|
|
1845
1845
|
case ">":
|
|
1846
|
-
case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? trimIfString(value) : `'${escapeSingleQuotes(value, escapeQuotes)}'`}`;
|
|
1846
|
+
case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? trimIfString(value) : `'${escapeSingleQuotes$2(value, escapeQuotes)}'`}`;
|
|
1847
1847
|
case "contains":
|
|
1848
|
-
case "doesnotcontain": return wrapInNegation(`${field} matches ${valueIsField || useBareValue ? trimIfString(value) : `'${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
|
|
1848
|
+
case "doesnotcontain": return wrapInNegation(`${field} matches ${valueIsField || useBareValue ? trimIfString(value) : `'${escapeSingleQuotes$2(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
|
|
1849
1849
|
case "beginswith":
|
|
1850
|
-
case "doesnotbeginwith": return wrapInNegation(`${field} matches ${valueIsField ? `'^'.concat(${trimIfString(value)})` : `'${typeof value === "string" && !value.startsWith("^") || useBareValue ? "^" : ""}${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
|
|
1850
|
+
case "doesnotbeginwith": return wrapInNegation(`${field} matches ${valueIsField ? `'^'.concat(${trimIfString(value)})` : `'${typeof value === "string" && !value.startsWith("^") || useBareValue ? "^" : ""}${escapeSingleQuotes$2(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
|
|
1851
1851
|
case "endswith":
|
|
1852
|
-
case "doesnotendwith": return wrapInNegation(`${field} matches ${valueIsField ? `${trimIfString(value)}.concat('$')` : `'${escapeSingleQuotes(value, escapeQuotes)}${typeof value === "string" && !value.endsWith("$") || useBareValue ? "$" : ""}'`}`, shouldNegate$1(operatorTL));
|
|
1852
|
+
case "doesnotendwith": return wrapInNegation(`${field} matches ${valueIsField ? `${trimIfString(value)}.concat('$')` : `'${escapeSingleQuotes$2(value, escapeQuotes)}${typeof value === "string" && !value.endsWith("$") || useBareValue ? "$" : ""}'`}`, shouldNegate$1(operatorTL));
|
|
1853
1853
|
case "null": return `${field} == null`;
|
|
1854
1854
|
case "notnull": return `${field} != null`;
|
|
1855
1855
|
case "in":
|
|
1856
1856
|
case "notin": {
|
|
1857
1857
|
const negate = shouldNegate$1(operatorTL) ? "!" : "";
|
|
1858
1858
|
const valueAsArray = toArray(value);
|
|
1859
|
-
return valueAsArray.length > 0 ? `${negate}(${valueAsArray.map((val) => `${field} == ${valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `'${escapeSingleQuotes(val, escapeQuotes)}'`}`).join(" or ")})` : "";
|
|
1859
|
+
return valueAsArray.length > 0 ? `${negate}(${valueAsArray.map((val) => `${field} == ${valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `'${escapeSingleQuotes$2(val, escapeQuotes)}'`}`).join(" or ")})` : "";
|
|
1860
1860
|
}
|
|
1861
1861
|
case "between":
|
|
1862
1862
|
case "notbetween": {
|
|
@@ -1866,8 +1866,8 @@ const defaultRuleProcessorSpEL = (rule, opts = {}) => {
|
|
|
1866
1866
|
const shouldParseNumbers = !(parseNumbers === false);
|
|
1867
1867
|
const firstNum = shouldRenderAsNumber(first, shouldParseNumbers) ? parseNumber(first, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
1868
1868
|
const secondNum = shouldRenderAsNumber(second, shouldParseNumbers) ? parseNumber(second, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
1869
|
-
let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `'${escapeSingleQuotes(first, escapeQuotes)}'` : firstNum;
|
|
1870
|
-
let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `'${escapeSingleQuotes(second, escapeQuotes)}'` : secondNum;
|
|
1869
|
+
let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `'${escapeSingleQuotes$2(first, escapeQuotes)}'` : firstNum;
|
|
1870
|
+
let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `'${escapeSingleQuotes$2(second, escapeQuotes)}'` : secondNum;
|
|
1871
1871
|
if (!preserveValueOrder && firstValue === firstNum && secondValue === secondNum && secondNum < firstNum) {
|
|
1872
1872
|
const tempNum = secondNum;
|
|
1873
1873
|
secondValue = firstNum;
|
|
@@ -1935,6 +1935,70 @@ const defaultValueProcessorByRule = ({ operator, value, valueSource }, { escapeQ
|
|
|
1935
1935
|
return valueIsField ? wrapFieldName(value) : shouldRenderAsNumber(value, parseNumbers) ? `${trimIfString(value)}` : `${wrapAndEscape(value)}`;
|
|
1936
1936
|
};
|
|
1937
1937
|
//#endregion
|
|
1938
|
+
//#region src/utils/formatQuery/defaultRuleGroupProcessorCypher.ts
|
|
1939
|
+
/**
|
|
1940
|
+
* Maps a {@link DefaultCombinatorName} to a Cypher combinator keyword.
|
|
1941
|
+
*
|
|
1942
|
+
* @group Export
|
|
1943
|
+
*/
|
|
1944
|
+
const cypherCombinatorMap = {
|
|
1945
|
+
and: "AND",
|
|
1946
|
+
or: "OR"
|
|
1947
|
+
};
|
|
1948
|
+
/**
|
|
1949
|
+
* Rule group processor used by {@link formatQuery} for "cypher" and "gql" formats.
|
|
1950
|
+
*
|
|
1951
|
+
* @group Export
|
|
1952
|
+
*/
|
|
1953
|
+
const defaultRuleGroupProcessorCypher = (ruleGroup, options) => {
|
|
1954
|
+
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
1955
|
+
const processRuleGroup = (rg, outermost) => {
|
|
1956
|
+
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermost ? fallbackExpression : "";
|
|
1957
|
+
const processedRules = [];
|
|
1958
|
+
let precedingCombinator = "";
|
|
1959
|
+
let firstRule = true;
|
|
1960
|
+
for (const rule of rg.rules) {
|
|
1961
|
+
if (typeof rule === "string") {
|
|
1962
|
+
precedingCombinator = cypherCombinatorMap[rule];
|
|
1963
|
+
continue;
|
|
1964
|
+
}
|
|
1965
|
+
if (isRuleGroup(rule)) {
|
|
1966
|
+
const processedGroup = processRuleGroup(rule);
|
|
1967
|
+
if (processedGroup) {
|
|
1968
|
+
if (!firstRule && precedingCombinator) {
|
|
1969
|
+
processedRules.push(precedingCombinator);
|
|
1970
|
+
precedingCombinator = "";
|
|
1971
|
+
}
|
|
1972
|
+
firstRule = false;
|
|
1973
|
+
processedRules.push(processedGroup);
|
|
1974
|
+
}
|
|
1975
|
+
continue;
|
|
1976
|
+
}
|
|
1977
|
+
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1978
|
+
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
1979
|
+
const fieldData = getOption(fields, rule.field);
|
|
1980
|
+
const processedRule = ruleProcessor(rule, {
|
|
1981
|
+
...options,
|
|
1982
|
+
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
1983
|
+
escapeQuotes: (rule.valueSource ?? "value") === "value",
|
|
1984
|
+
fieldData
|
|
1985
|
+
});
|
|
1986
|
+
if (processedRule) {
|
|
1987
|
+
if (!firstRule && precedingCombinator) {
|
|
1988
|
+
processedRules.push(precedingCombinator);
|
|
1989
|
+
precedingCombinator = "";
|
|
1990
|
+
}
|
|
1991
|
+
firstRule = false;
|
|
1992
|
+
processedRules.push(processedRule);
|
|
1993
|
+
}
|
|
1994
|
+
}
|
|
1995
|
+
const expression = processedRules.join(isRuleGroupType(rg) ? ` ${cypherCombinatorMap[rg.combinator]} ` : " ");
|
|
1996
|
+
const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "NOT " : ""}(`, ")"] : ["", ""];
|
|
1997
|
+
return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
|
|
1998
|
+
};
|
|
1999
|
+
return processRuleGroup(ruleGroup, true);
|
|
2000
|
+
};
|
|
2001
|
+
//#endregion
|
|
1938
2002
|
//#region src/utils/formatQuery/defaultRuleProcessorDrizzle.ts
|
|
1939
2003
|
/**
|
|
1940
2004
|
* Default rule processor used by {@link formatQuery} for the "drizzle" format.
|
|
@@ -2102,6 +2166,67 @@ const defaultRuleGroupProcessorElasticSearch = (ruleGroup, options) => {
|
|
|
2102
2166
|
return processedRuleGroup === false ? {} : processedRuleGroup;
|
|
2103
2167
|
};
|
|
2104
2168
|
//#endregion
|
|
2169
|
+
//#region src/utils/formatQuery/defaultRuleGroupProcessorGremlin.ts
|
|
2170
|
+
/**
|
|
2171
|
+
* Rule group processor used by {@link formatQuery} for "gremlin" format.
|
|
2172
|
+
*
|
|
2173
|
+
* At the top level, filter rules produce chained `.has()` steps (implicit AND).
|
|
2174
|
+
* Nested groups use `.and()` / `.or()` / `.not()` compound traversals with
|
|
2175
|
+
* `__` anonymous traversal prefixes.
|
|
2176
|
+
*
|
|
2177
|
+
* @group Export
|
|
2178
|
+
*/
|
|
2179
|
+
const defaultRuleGroupProcessorGremlin = (ruleGroup, options) => {
|
|
2180
|
+
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
2181
|
+
const validateAndProcess = (rule) => {
|
|
2182
|
+
// v8 ignore next -- @preserve
|
|
2183
|
+
if (typeof rule === "string" || isRuleGroup(rule)) return void 0;
|
|
2184
|
+
const [validationResult, fieldValidator] = validateRule(rule);
|
|
2185
|
+
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return;
|
|
2186
|
+
const fieldData = getOption(fields, rule.field);
|
|
2187
|
+
return ruleProcessor(rule, {
|
|
2188
|
+
...options,
|
|
2189
|
+
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
2190
|
+
escapeQuotes: (rule.valueSource ?? "value") === "value",
|
|
2191
|
+
fieldData
|
|
2192
|
+
});
|
|
2193
|
+
};
|
|
2194
|
+
/** Recursively processes a nested group into `.and()`/`.or()`/`.not()` form. */
|
|
2195
|
+
const processNested = (rg) => {
|
|
2196
|
+
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return "";
|
|
2197
|
+
const predicates = [];
|
|
2198
|
+
for (const rule of rg.rules) {
|
|
2199
|
+
if (typeof rule === "string") continue;
|
|
2200
|
+
if (isRuleGroup(rule)) {
|
|
2201
|
+
const nested = processNested(rule);
|
|
2202
|
+
if (nested) predicates.push(nested);
|
|
2203
|
+
continue;
|
|
2204
|
+
}
|
|
2205
|
+
const processed = validateAndProcess(rule);
|
|
2206
|
+
if (processed) predicates.push(processed);
|
|
2207
|
+
}
|
|
2208
|
+
if (predicates.length === 0) return "";
|
|
2209
|
+
const combinator = rg.combinator ?? "and";
|
|
2210
|
+
const prefix = rg.not ? "not" : combinator;
|
|
2211
|
+
if (predicates.length === 1 && !rg.not) return predicates[0];
|
|
2212
|
+
return `.${prefix}(${predicates.map((p) => p.startsWith(".") ? `__${p}` : p).join(", ")})`;
|
|
2213
|
+
};
|
|
2214
|
+
if (!isRuleOrGroupValid(ruleGroup, validationMap[ruleGroup.id ?? ""])) return fallbackExpression;
|
|
2215
|
+
const steps = [];
|
|
2216
|
+
for (const rule of ruleGroup.rules) {
|
|
2217
|
+
if (typeof rule === "string") continue;
|
|
2218
|
+
if (isRuleGroup(rule)) {
|
|
2219
|
+
const compound = processNested(rule);
|
|
2220
|
+
if (compound) steps.push(compound);
|
|
2221
|
+
continue;
|
|
2222
|
+
}
|
|
2223
|
+
const processed = validateAndProcess(rule);
|
|
2224
|
+
if (processed) steps.push(processed);
|
|
2225
|
+
}
|
|
2226
|
+
if (steps.length === 0) return fallbackExpression;
|
|
2227
|
+
return steps.join("");
|
|
2228
|
+
};
|
|
2229
|
+
//#endregion
|
|
2105
2230
|
//#region src/utils/formatQuery/defaultRuleGroupProcessorJSONata.ts
|
|
2106
2231
|
/**
|
|
2107
2232
|
* Rule group processor used by {@link formatQuery} for "jsonata" format.
|
|
@@ -2489,6 +2614,63 @@ const defaultRuleGroupProcessorSequelize = (ruleGroup, options) => {
|
|
|
2489
2614
|
return processRuleGroup(convertFromIC(ruleGroup), true);
|
|
2490
2615
|
};
|
|
2491
2616
|
//#endregion
|
|
2617
|
+
//#region src/utils/formatQuery/defaultRuleGroupProcessorSPARQL.ts
|
|
2618
|
+
/**
|
|
2619
|
+
* Rule group processor used by {@link formatQuery} for "sparql" format.
|
|
2620
|
+
*
|
|
2621
|
+
* SPARQL uses the same combinators as CEL (`&&` / `||`) and `!()` for negation.
|
|
2622
|
+
*
|
|
2623
|
+
* @group Export
|
|
2624
|
+
*/
|
|
2625
|
+
const defaultRuleGroupProcessorSPARQL = (ruleGroup, options) => {
|
|
2626
|
+
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
2627
|
+
const processRuleGroup = (rg, outermost) => {
|
|
2628
|
+
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return outermost ? fallbackExpression : "";
|
|
2629
|
+
const processedRules = [];
|
|
2630
|
+
let precedingCombinator = "";
|
|
2631
|
+
let firstRule = true;
|
|
2632
|
+
for (const rule of rg.rules) {
|
|
2633
|
+
if (typeof rule === "string") {
|
|
2634
|
+
precedingCombinator = celCombinatorMap[rule];
|
|
2635
|
+
continue;
|
|
2636
|
+
}
|
|
2637
|
+
if (isRuleGroup(rule)) {
|
|
2638
|
+
const processedGroup = processRuleGroup(rule);
|
|
2639
|
+
if (processedGroup) {
|
|
2640
|
+
if (!firstRule && precedingCombinator) {
|
|
2641
|
+
processedRules.push(precedingCombinator);
|
|
2642
|
+
precedingCombinator = "";
|
|
2643
|
+
}
|
|
2644
|
+
firstRule = false;
|
|
2645
|
+
processedRules.push(processedGroup);
|
|
2646
|
+
}
|
|
2647
|
+
continue;
|
|
2648
|
+
}
|
|
2649
|
+
const [validationResult, fieldValidator] = validateRule(rule);
|
|
2650
|
+
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
2651
|
+
const fieldData = getOption(fields, rule.field);
|
|
2652
|
+
const processedRule = ruleProcessor(rule, {
|
|
2653
|
+
...options,
|
|
2654
|
+
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
2655
|
+
escapeQuotes: (rule.valueSource ?? "value") === "value",
|
|
2656
|
+
fieldData
|
|
2657
|
+
});
|
|
2658
|
+
if (processedRule) {
|
|
2659
|
+
if (!firstRule && precedingCombinator) {
|
|
2660
|
+
processedRules.push(precedingCombinator);
|
|
2661
|
+
precedingCombinator = "";
|
|
2662
|
+
}
|
|
2663
|
+
firstRule = false;
|
|
2664
|
+
processedRules.push(processedRule);
|
|
2665
|
+
}
|
|
2666
|
+
}
|
|
2667
|
+
const expression = processedRules.join(isRuleGroupType(rg) ? ` ${celCombinatorMap[rg.combinator]} ` : " ");
|
|
2668
|
+
const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "!" : ""}(`, ")"] : ["", ""];
|
|
2669
|
+
return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
|
|
2670
|
+
};
|
|
2671
|
+
return processRuleGroup(ruleGroup, true);
|
|
2672
|
+
};
|
|
2673
|
+
//#endregion
|
|
2492
2674
|
//#region src/utils/formatQuery/defaultRuleGroupProcessorSQL.ts
|
|
2493
2675
|
/**
|
|
2494
2676
|
* Default rule processor used by {@link formatQuery} for "sql" format.
|
|
@@ -2864,6 +3046,59 @@ const getFieldValidatorReasons = (rule, fieldValidator) => {
|
|
|
2864
3046
|
}
|
|
2865
3047
|
};
|
|
2866
3048
|
//#endregion
|
|
3049
|
+
//#region src/utils/formatQuery/defaultRuleProcessorCypher.ts
|
|
3050
|
+
const escapeSingleQuotes$1 = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll("'", "\\'");
|
|
3051
|
+
/**
|
|
3052
|
+
* Default rule processor used by {@link formatQuery} for "cypher" and "gql" formats.
|
|
3053
|
+
*
|
|
3054
|
+
* @group Export
|
|
3055
|
+
*/
|
|
3056
|
+
const defaultRuleProcessorCypher = (rule, opts = {}) => {
|
|
3057
|
+
const { escapeQuotes, parseNumbers } = opts;
|
|
3058
|
+
const { field, operator, value, valueSource } = rule;
|
|
3059
|
+
const valueIsField = valueSource === "field";
|
|
3060
|
+
const operatorTL = operator.toLowerCase();
|
|
3061
|
+
const fmtVal = (v) => {
|
|
3062
|
+
if (v === null || v === void 0) return "null";
|
|
3063
|
+
if (typeof v === "boolean" || typeof v === "bigint") return String(v);
|
|
3064
|
+
if (valueIsField) return trimIfString(v);
|
|
3065
|
+
if (typeof v === "number" || shouldRenderAsNumber(v, parseNumbers)) return trimIfString(v);
|
|
3066
|
+
return `'${escapeSingleQuotes$1(v, escapeQuotes)}'`;
|
|
3067
|
+
};
|
|
3068
|
+
switch (operatorTL) {
|
|
3069
|
+
case "=": return `${field} = ${fmtVal(value)}`;
|
|
3070
|
+
case "!=":
|
|
3071
|
+
case "<>": return `${field} <> ${fmtVal(value)}`;
|
|
3072
|
+
case "<":
|
|
3073
|
+
case ">":
|
|
3074
|
+
case "<=":
|
|
3075
|
+
case ">=": return `${field} ${operatorTL} ${fmtVal(value)}`;
|
|
3076
|
+
case "contains": return `${field} CONTAINS ${fmtVal(value)}`;
|
|
3077
|
+
case "doesnotcontain": return `NOT ${field} CONTAINS ${fmtVal(value)}`;
|
|
3078
|
+
case "beginswith": return `${field} STARTS WITH ${fmtVal(value)}`;
|
|
3079
|
+
case "doesnotbeginwith": return `NOT ${field} STARTS WITH ${fmtVal(value)}`;
|
|
3080
|
+
case "endswith": return `${field} ENDS WITH ${fmtVal(value)}`;
|
|
3081
|
+
case "doesnotendwith": return `NOT ${field} ENDS WITH ${fmtVal(value)}`;
|
|
3082
|
+
case "null": return `${field} IS NULL`;
|
|
3083
|
+
case "notnull": return `${field} IS NOT NULL`;
|
|
3084
|
+
case "in":
|
|
3085
|
+
case "notin": {
|
|
3086
|
+
const values = toArray(value).map(fmtVal);
|
|
3087
|
+
if (!values.length) return "";
|
|
3088
|
+
return `${operatorTL === "notin" ? "NOT " : ""}${field} IN [${values.join(", ")}]`;
|
|
3089
|
+
}
|
|
3090
|
+
case "between":
|
|
3091
|
+
case "notbetween": {
|
|
3092
|
+
const arr = toArray(value);
|
|
3093
|
+
if (arr.length < 2) return "";
|
|
3094
|
+
const [low, high] = [fmtVal(arr[0]), fmtVal(arr[1])];
|
|
3095
|
+
const expr = `${low} <= ${field} AND ${field} <= ${high}`;
|
|
3096
|
+
return operatorTL === "notbetween" ? `NOT (${expr})` : expr;
|
|
3097
|
+
}
|
|
3098
|
+
default: return `${field} ${operator} ${fmtVal(value)}`;
|
|
3099
|
+
}
|
|
3100
|
+
};
|
|
3101
|
+
//#endregion
|
|
2867
3102
|
//#region src/utils/formatQuery/defaultRuleProcessorElasticSearch.ts
|
|
2868
3103
|
const rangeOperatorMap = {
|
|
2869
3104
|
"<": "lt",
|
|
@@ -3015,6 +3250,68 @@ const defaultRuleProcessorElasticSearch = (rule, options = {}) => {
|
|
|
3015
3250
|
return false;
|
|
3016
3251
|
};
|
|
3017
3252
|
//#endregion
|
|
3253
|
+
//#region src/utils/formatQuery/defaultRuleProcessorGremlin.ts
|
|
3254
|
+
const escapeSingleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll("'", "\\'");
|
|
3255
|
+
/**
|
|
3256
|
+
* Default rule processor used by {@link formatQuery} for "gremlin" format.
|
|
3257
|
+
*
|
|
3258
|
+
* Each rule becomes a `.has()` step (or `.hasNot()`/`.has()` for null checks).
|
|
3259
|
+
*
|
|
3260
|
+
* @group Export
|
|
3261
|
+
*/
|
|
3262
|
+
const defaultRuleProcessorGremlin = (rule, opts = {}) => {
|
|
3263
|
+
const { escapeQuotes, parseNumbers } = opts;
|
|
3264
|
+
const { field, operator, value, valueSource } = rule;
|
|
3265
|
+
const valueIsField = valueSource === "field";
|
|
3266
|
+
const operatorTL = operator.toLowerCase();
|
|
3267
|
+
const prop = field.includes(".") ? field.split(".").pop() : field;
|
|
3268
|
+
const fmtVal = (v) => {
|
|
3269
|
+
if (v === null || v === void 0) return "null";
|
|
3270
|
+
if (typeof v === "boolean" || typeof v === "bigint") return String(v);
|
|
3271
|
+
if (valueIsField) return trimIfString(v);
|
|
3272
|
+
if (typeof v === "number" || shouldRenderAsNumber(v, parseNumbers)) return trimIfString(v);
|
|
3273
|
+
return `'${escapeSingleQuotes(v, escapeQuotes)}'`;
|
|
3274
|
+
};
|
|
3275
|
+
switch (operatorTL) {
|
|
3276
|
+
case "=": return `.has('${prop}', ${fmtVal(value)})`;
|
|
3277
|
+
case "!=":
|
|
3278
|
+
case "<>": return `.has('${prop}', neq(${fmtVal(value)}))`;
|
|
3279
|
+
case "<": return `.has('${prop}', lt(${fmtVal(value)}))`;
|
|
3280
|
+
case ">": return `.has('${prop}', gt(${fmtVal(value)}))`;
|
|
3281
|
+
case "<=": return `.has('${prop}', lte(${fmtVal(value)}))`;
|
|
3282
|
+
case ">=": return `.has('${prop}', gte(${fmtVal(value)}))`;
|
|
3283
|
+
case "contains": return `.has('${prop}', containing(${fmtVal(value)}))`;
|
|
3284
|
+
case "doesnotcontain": return `.has('${prop}', notContaining(${fmtVal(value)}))`;
|
|
3285
|
+
case "beginswith": return `.has('${prop}', startingWith(${fmtVal(value)}))`;
|
|
3286
|
+
case "doesnotbeginwith": return `.has('${prop}', notStartingWith(${fmtVal(value)}))`;
|
|
3287
|
+
case "endswith": return `.has('${prop}', endingWith(${fmtVal(value)}))`;
|
|
3288
|
+
case "doesnotendwith": return `.has('${prop}', notEndingWith(${fmtVal(value)}))`;
|
|
3289
|
+
case "null": return `.hasNot('${prop}')`;
|
|
3290
|
+
case "notnull": return `.has('${prop}')`;
|
|
3291
|
+
case "in": {
|
|
3292
|
+
const items = toArray(value).map(fmtVal);
|
|
3293
|
+
if (!items.length) return "";
|
|
3294
|
+
return `.has('${prop}', within(${items.join(", ")}))`;
|
|
3295
|
+
}
|
|
3296
|
+
case "notin": {
|
|
3297
|
+
const items = toArray(value).map(fmtVal);
|
|
3298
|
+
if (!items.length) return "";
|
|
3299
|
+
return `.has('${prop}', without(${items.join(", ")}))`;
|
|
3300
|
+
}
|
|
3301
|
+
case "between": {
|
|
3302
|
+
const arr = toArray(value);
|
|
3303
|
+
if (arr.length < 2) return "";
|
|
3304
|
+
return `.has('${prop}', between(${fmtVal(arr[0])}, ${fmtVal(arr[1])}))`;
|
|
3305
|
+
}
|
|
3306
|
+
case "notbetween": {
|
|
3307
|
+
const arr = toArray(value);
|
|
3308
|
+
if (arr.length < 2) return "";
|
|
3309
|
+
return `.has('${prop}', outside(${fmtVal(arr[0])}, ${fmtVal(arr[1])}))`;
|
|
3310
|
+
}
|
|
3311
|
+
default: return `.has('${prop}', ${fmtVal(value)})`;
|
|
3312
|
+
}
|
|
3313
|
+
};
|
|
3314
|
+
//#endregion
|
|
3018
3315
|
//#region src/utils/formatQuery/defaultRuleProcessorJSONata.ts
|
|
3019
3316
|
const shouldNegate = (op) => op.startsWith("not") || op.startsWith("doesnot");
|
|
3020
3317
|
const quote = (v, escapeQuotes) => `"${typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`)}"`;
|
|
@@ -3637,8 +3934,11 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
|
|
|
3637
3934
|
const valueIsField = valueSource === "field";
|
|
3638
3935
|
const operatorLC = lc(operator);
|
|
3639
3936
|
if (!Op || valueIsField && (!col || !fn && [
|
|
3937
|
+
"contains",
|
|
3640
3938
|
"doesnotcontain",
|
|
3939
|
+
"beginswith",
|
|
3641
3940
|
"doesnotbeginwith",
|
|
3941
|
+
"endswith",
|
|
3642
3942
|
"doesnotendwith"
|
|
3643
3943
|
].includes(operatorLC))) return;
|
|
3644
3944
|
switch (operatorLC) {
|
|
@@ -3658,9 +3958,9 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
|
|
|
3658
3958
|
}[operatorLC];
|
|
3659
3959
|
return { [field]: valueIsField && operatorLC === "=" ? { [Op.col]: value } : { [sequelizeOperator]: valueIsField ? col(value) : shouldRenderAsNumber(value, parseNumbers) ? parseNumber(value, { parseNumbers: "strict" }) : value } };
|
|
3660
3960
|
}
|
|
3661
|
-
case "contains": return { [field]: { [Op.substring]: valueIsField ? col(value) : `${value}` } };
|
|
3662
|
-
case "beginswith": return { [field]: { [Op.startsWith]: valueIsField ? col(value) : `${value}` } };
|
|
3663
|
-
case "endswith": return { [field]: { [Op.endsWith]: valueIsField ? col(value) : `${value}` } };
|
|
3961
|
+
case "contains": return { [field]: { [valueIsField ? Op.like : Op.substring]: valueIsField ? fn("CONCAT", "%", col(value), "%") : `${value}` } };
|
|
3962
|
+
case "beginswith": return { [field]: { [valueIsField ? Op.like : Op.startsWith]: valueIsField ? fn("CONCAT", col(value), "%") : `${value}` } };
|
|
3963
|
+
case "endswith": return { [field]: { [valueIsField ? Op.like : Op.endsWith]: valueIsField ? fn("CONCAT", "%", col(value)) : `${value}` } };
|
|
3664
3964
|
case "doesnotcontain": return { [field]: { [Op.notLike]: valueIsField ? fn("CONCAT", "%", col(value), "%") : `%${value}%` } };
|
|
3665
3965
|
case "doesnotbeginwith": return { [field]: { [Op.notLike]: valueIsField ? fn("CONCAT", col(value), "%") : `${value}%` } };
|
|
3666
3966
|
case "doesnotendwith": return { [field]: { [Op.notLike]: valueIsField ? fn("CONCAT", "%", col(value)) : `%${value}` } };
|
|
@@ -3690,6 +3990,68 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
|
|
|
3690
3990
|
}
|
|
3691
3991
|
};
|
|
3692
3992
|
//#endregion
|
|
3993
|
+
//#region src/utils/formatQuery/defaultRuleProcessorSPARQL.ts
|
|
3994
|
+
const escapeDoubleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`);
|
|
3995
|
+
/**
|
|
3996
|
+
* Default rule processor used by {@link formatQuery} for "sparql" format.
|
|
3997
|
+
*
|
|
3998
|
+
* @group Export
|
|
3999
|
+
*/
|
|
4000
|
+
const defaultRuleProcessorSPARQL = (rule, opts = {}) => {
|
|
4001
|
+
const { escapeQuotes, parseNumbers } = opts;
|
|
4002
|
+
const { field, operator, value, valueSource } = rule;
|
|
4003
|
+
const valueIsField = valueSource === "field";
|
|
4004
|
+
const operatorTL = operator.toLowerCase();
|
|
4005
|
+
const fmtVal = (v) => {
|
|
4006
|
+
if (v === null || v === void 0) return "\"\"";
|
|
4007
|
+
if (typeof v === "boolean") return `"${v}"^^xsd:boolean`;
|
|
4008
|
+
if (typeof v === "bigint") return String(v);
|
|
4009
|
+
if (valueIsField) return trimIfString(v);
|
|
4010
|
+
if (typeof v === "number" || shouldRenderAsNumber(v, parseNumbers)) return trimIfString(v);
|
|
4011
|
+
const s = typeof v === "string" ? v : JSON.stringify(v) ?? "";
|
|
4012
|
+
if (s.startsWith("?") || s.startsWith("<") || s.includes(":")) return s;
|
|
4013
|
+
return `"${escapeDoubleQuotes(s, escapeQuotes)}"`;
|
|
4014
|
+
};
|
|
4015
|
+
switch (operatorTL) {
|
|
4016
|
+
case "=":
|
|
4017
|
+
case "!=":
|
|
4018
|
+
case "<":
|
|
4019
|
+
case ">":
|
|
4020
|
+
case "<=":
|
|
4021
|
+
case ">=": return `${field} ${operatorTL} ${fmtVal(value)}`;
|
|
4022
|
+
case "<>": return `${field} != ${fmtVal(value)}`;
|
|
4023
|
+
case "contains": return `CONTAINS(${field}, ${fmtVal(value)})`;
|
|
4024
|
+
case "doesnotcontain": return `!CONTAINS(${field}, ${fmtVal(value)})`;
|
|
4025
|
+
case "beginswith": return `STRSTARTS(${field}, ${fmtVal(value)})`;
|
|
4026
|
+
case "doesnotbeginwith": return `!STRSTARTS(${field}, ${fmtVal(value)})`;
|
|
4027
|
+
case "endswith": return `STRENDS(${field}, ${fmtVal(value)})`;
|
|
4028
|
+
case "doesnotendwith": return `!STRENDS(${field}, ${fmtVal(value)})`;
|
|
4029
|
+
case "null": return `!BOUND(${field})`;
|
|
4030
|
+
case "notnull": return `BOUND(${field})`;
|
|
4031
|
+
case "in": {
|
|
4032
|
+
const items = toArray(value).map(fmtVal);
|
|
4033
|
+
if (!items.length) return "";
|
|
4034
|
+
return items.map((item) => `${field} = ${item}`).join(" || ");
|
|
4035
|
+
}
|
|
4036
|
+
case "notin": {
|
|
4037
|
+
const items = toArray(value).map(fmtVal);
|
|
4038
|
+
if (!items.length) return "";
|
|
4039
|
+
return items.map((item) => `${field} != ${item}`).join(" && ");
|
|
4040
|
+
}
|
|
4041
|
+
case "between": {
|
|
4042
|
+
const arr = toArray(value);
|
|
4043
|
+
if (arr.length < 2) return "";
|
|
4044
|
+
return `${field} >= ${fmtVal(arr[0])} && ${field} <= ${fmtVal(arr[1])}`;
|
|
4045
|
+
}
|
|
4046
|
+
case "notbetween": {
|
|
4047
|
+
const arr = toArray(value);
|
|
4048
|
+
if (arr.length < 2) return "";
|
|
4049
|
+
return `(${field} < ${fmtVal(arr[0])} || ${field} > ${fmtVal(arr[1])})`;
|
|
4050
|
+
}
|
|
4051
|
+
default: return `${field} ${operator} ${fmtVal(value)}`;
|
|
4052
|
+
}
|
|
4053
|
+
};
|
|
4054
|
+
//#endregion
|
|
3693
4055
|
//#region src/utils/formatQuery/formatQuery.ts
|
|
3694
4056
|
/**
|
|
3695
4057
|
* A collection of option presets for {@link formatQuery}, specifically for SQL-based formats.
|
|
@@ -3737,6 +4099,10 @@ const defaultRuleProcessors = {
|
|
|
3737
4099
|
sequelize: defaultRuleProcessorSequelize,
|
|
3738
4100
|
spel: defaultRuleProcessorSpEL,
|
|
3739
4101
|
sql: defaultRuleProcessorSQL,
|
|
4102
|
+
cypher: defaultRuleProcessorCypher,
|
|
4103
|
+
gql: defaultRuleProcessorCypher,
|
|
4104
|
+
sparql: defaultRuleProcessorSPARQL,
|
|
4105
|
+
gremlin: defaultRuleProcessorGremlin,
|
|
3740
4106
|
diagnostics: defaultRuleProcessorSQL
|
|
3741
4107
|
};
|
|
3742
4108
|
/* v8 ignore next -- @preserve */
|
|
@@ -3759,6 +4125,10 @@ const defaultOperatorProcessors = {
|
|
|
3759
4125
|
sequelize: defaultOperatorProcessor,
|
|
3760
4126
|
spel: defaultOperatorProcessor,
|
|
3761
4127
|
sql: defaultOperatorProcessorSQL,
|
|
4128
|
+
cypher: defaultOperatorProcessor,
|
|
4129
|
+
gql: defaultOperatorProcessor,
|
|
4130
|
+
sparql: defaultOperatorProcessor,
|
|
4131
|
+
gremlin: defaultOperatorProcessor,
|
|
3762
4132
|
diagnostics: defaultOperatorProcessor
|
|
3763
4133
|
};
|
|
3764
4134
|
const defaultFallbackExpressions = {
|
|
@@ -3766,6 +4136,8 @@ const defaultFallbackExpressions = {
|
|
|
3766
4136
|
ldap: "",
|
|
3767
4137
|
mongodb: "\"$and\":[{\"$expr\":true}]",
|
|
3768
4138
|
natural_language: "1 is 1",
|
|
4139
|
+
sparql: "1 = 1",
|
|
4140
|
+
gremlin: "",
|
|
3769
4141
|
spel: "1 == 1",
|
|
3770
4142
|
sql: "(1 = 1)"
|
|
3771
4143
|
};
|
|
@@ -3906,6 +4278,10 @@ function formatQuery(ruleGroup, optionParam = {}) {
|
|
|
3906
4278
|
case "prisma": return defaultRuleGroupProcessorPrisma(ruleGroup, finalOptions);
|
|
3907
4279
|
case "drizzle": return defaultRuleGroupProcessorDrizzle(ruleGroup, finalOptions);
|
|
3908
4280
|
case "sequelize": return defaultRuleGroupProcessorSequelize(ruleGroup, finalOptions);
|
|
4281
|
+
case "cypher":
|
|
4282
|
+
case "gql": return defaultRuleGroupProcessorCypher(ruleGroup, finalOptions);
|
|
4283
|
+
case "sparql": return defaultRuleGroupProcessorSPARQL(ruleGroup, finalOptions);
|
|
4284
|
+
case "gremlin": return defaultRuleGroupProcessorGremlin(ruleGroup, finalOptions);
|
|
3909
4285
|
case "diagnostics": return defaultRuleGroupProcessorDiagnostics(ruleGroup, finalOptions);
|
|
3910
4286
|
default: return "";
|
|
3911
4287
|
}
|
|
@@ -4618,6 +4994,6 @@ const groupInPlace = (query, sourcePathOrID, targetPathOrID, options = {}) => {
|
|
|
4618
4994
|
return query;
|
|
4619
4995
|
};
|
|
4620
4996
|
//#endregion
|
|
4621
|
-
export { LogType, TestID, add, addInPlace, bigIntJsonParseReviver, bigIntJsonStringifyReplacer, celCombinatorMap, clsx, convertFromIC, convertQuery, convertToIC, defaultCELValueProcessor, defaultCombinatorLabelMap, defaultCombinators, defaultCombinatorsExtended, defaultControlClassnames, defaultExportOperatorMap, defaultJoinChar, defaultMatchModes, defaultMongoDBValueProcessor, defaultNLTranslations, defaultOperatorLabelMap, defaultOperatorNegationMap, defaultOperatorProcessorNL, defaultOperatorProcessorSQL, defaultOperators, defaultPlaceholderFieldGroupLabel, defaultPlaceholderFieldLabel, defaultPlaceholderFieldName, defaultPlaceholderLabel, defaultPlaceholderName, defaultPlaceholderOperatorGroupLabel, defaultPlaceholderOperatorLabel, defaultPlaceholderOperatorName, defaultPlaceholderValueGroupLabel, defaultPlaceholderValueLabel, defaultPlaceholderValueName, defaultRuleGroupProcessorCEL, defaultRuleGroupProcessorDiagnostics, defaultRuleGroupProcessorDrizzle, defaultRuleGroupProcessorElasticSearch, defaultRuleGroupProcessorJSONata, defaultRuleGroupProcessorJsonLogic, defaultRuleGroupProcessorLDAP, defaultRuleGroupProcessorMongoDB, defaultRuleGroupProcessorMongoDBQuery, defaultRuleGroupProcessorNL, defaultRuleGroupProcessorParameterized, defaultRuleGroupProcessorPrisma, defaultRuleGroupProcessorSQL, defaultRuleGroupProcessorSequelize, defaultRuleGroupProcessorSpEL, defaultRuleProcessorCEL, defaultRuleProcessorDrizzle, defaultRuleProcessorElasticSearch, defaultRuleProcessorJSONata, defaultRuleProcessorJsonLogic, defaultRuleProcessorLDAP, defaultRuleProcessorMongoDB, defaultRuleProcessorMongoDBQuery, defaultRuleProcessorNL, defaultRuleProcessorParameterized, defaultRuleProcessorPrisma, defaultRuleProcessorSQL, defaultRuleProcessorSequelize, defaultRuleProcessorSpEL, defaultSpELValueProcessor, defaultTranslations, defaultValidator, defaultValueProcessor, defaultValueProcessorByRule, defaultValueProcessorCELByRule, defaultValueProcessorMongoDBByRule, defaultValueProcessorNL, defaultValueProcessorSpELByRule, filterFieldsByComparator, findID, findPath, formatQuery, formatQueryOptionPresets, generateAccessibleDescription, generateID, getCommonAncestorPath, getFirstOption, getMatchModesUtil, getNLTranslataion, getOption, getParentPath, getParseNumberMethod, getPathOfID, getQuoteFieldNamesWithArray, getQuotedFieldName, getValidationClassNames, getValueSourcesUtil, group, groupInPlace, groupInvalidReasons, insert, insertInPlace, isAncestor, isFlexibleOptionArray, isFlexibleOptionGroupArray, isFullOptionArray, isFullOptionGroupArray, isOptionGroupArray, isPojo, isRuleGroup, isRuleGroupType, isRuleGroupTypeIC, isRuleOrGroupValid, isRuleType, isUnsafeKey, isValidValue, isValidationResult, isValueProcessorLegacy, joinWith, jsonLogicAdditionalOperators, lc, mapSQLOperator, mergeAnyTranslation, mergeAnyTranslations, mergeClassnames, mongoDbFallback, mongoOperators, move, moveInPlace, normalizeConstituentWordOrder, nullFreeArray, nullOrUndefinedOrEmpty, numericRegex, numerifyValues, objectEntries, objectKeys, parseNumber, pathIsDisabled, pathsAreEqual, preferAnyProp, preferFlagProps, preferProp, prepareOptionList, prepareRule, prepareRuleGroup, prepareRuleOrGroup, prismaFallback, prismaOperators, processMatchMode, queryBuilderFlagDefaults, regenerateID, regenerateIDs, remove, removeInPlace, rootPath, shouldRenderAsNumber, splitBy, sqlDialectPresets, standardClassnames, toArray, toFlatOptionArray, toFullOption, toFullOptionList, toFullOptionMap, transformQuery, trimIfString, uniqByIdentifier, uniqByName, uniqOptGroups, uniqOptList, update, updateInPlace, uuidV4regex };
|
|
4997
|
+
export { LogType, TestID, add, addInPlace, bigIntJsonParseReviver, bigIntJsonStringifyReplacer, celCombinatorMap, clsx, convertFromIC, convertQuery, convertToIC, cypherCombinatorMap, defaultCELValueProcessor, defaultCombinatorLabelMap, defaultCombinators, defaultCombinatorsExtended, defaultControlClassnames, defaultExportOperatorMap, defaultJoinChar, defaultMatchModes, defaultMongoDBValueProcessor, defaultNLTranslations, defaultOperatorLabelMap, defaultOperatorNegationMap, defaultOperatorProcessorNL, defaultOperatorProcessorSQL, defaultOperators, defaultPlaceholderFieldGroupLabel, defaultPlaceholderFieldLabel, defaultPlaceholderFieldName, defaultPlaceholderLabel, defaultPlaceholderName, defaultPlaceholderOperatorGroupLabel, defaultPlaceholderOperatorLabel, defaultPlaceholderOperatorName, defaultPlaceholderValueGroupLabel, defaultPlaceholderValueLabel, defaultPlaceholderValueName, defaultRuleGroupProcessorCEL, defaultRuleGroupProcessorCypher, defaultRuleGroupProcessorDiagnostics, defaultRuleGroupProcessorDrizzle, defaultRuleGroupProcessorElasticSearch, defaultRuleGroupProcessorGremlin, defaultRuleGroupProcessorJSONata, defaultRuleGroupProcessorJsonLogic, defaultRuleGroupProcessorLDAP, defaultRuleGroupProcessorMongoDB, defaultRuleGroupProcessorMongoDBQuery, defaultRuleGroupProcessorNL, defaultRuleGroupProcessorParameterized, defaultRuleGroupProcessorPrisma, defaultRuleGroupProcessorSPARQL, defaultRuleGroupProcessorSQL, defaultRuleGroupProcessorSequelize, defaultRuleGroupProcessorSpEL, defaultRuleProcessorCEL, defaultRuleProcessorCypher, defaultRuleProcessorDrizzle, defaultRuleProcessorElasticSearch, defaultRuleProcessorGremlin, defaultRuleProcessorJSONata, defaultRuleProcessorJsonLogic, defaultRuleProcessorLDAP, defaultRuleProcessorMongoDB, defaultRuleProcessorMongoDBQuery, defaultRuleProcessorNL, defaultRuleProcessorParameterized, defaultRuleProcessorPrisma, defaultRuleProcessorSPARQL, defaultRuleProcessorSQL, defaultRuleProcessorSequelize, defaultRuleProcessorSpEL, defaultSpELValueProcessor, defaultTranslations, defaultValidator, defaultValueProcessor, defaultValueProcessorByRule, defaultValueProcessorCELByRule, defaultValueProcessorMongoDBByRule, defaultValueProcessorNL, defaultValueProcessorSpELByRule, filterFieldsByComparator, findID, findPath, formatQuery, formatQueryOptionPresets, generateAccessibleDescription, generateID, getCommonAncestorPath, getFirstOption, getMatchModesUtil, getNLTranslataion, getOption, getParentPath, getParseNumberMethod, getPathOfID, getQuoteFieldNamesWithArray, getQuotedFieldName, getValidationClassNames, getValueSourcesUtil, group, groupInPlace, groupInvalidReasons, insert, insertInPlace, isAncestor, isFlexibleOptionArray, isFlexibleOptionGroupArray, isFullOptionArray, isFullOptionGroupArray, isOptionGroupArray, isPojo, isRuleGroup, isRuleGroupType, isRuleGroupTypeIC, isRuleOrGroupValid, isRuleType, isUnsafeKey, isValidValue, isValidationResult, isValueProcessorLegacy, joinWith, jsonLogicAdditionalOperators, lc, mapSQLOperator, mergeAnyTranslation, mergeAnyTranslations, mergeClassnames, mongoDbFallback, mongoOperators, move, moveInPlace, normalizeConstituentWordOrder, nullFreeArray, nullOrUndefinedOrEmpty, numericRegex, numerifyValues, objectEntries, objectKeys, parseNumber, pathIsDisabled, pathsAreEqual, preferAnyProp, preferFlagProps, preferProp, prepareOptionList, prepareRule, prepareRuleGroup, prepareRuleOrGroup, prismaFallback, prismaOperators, processMatchMode, queryBuilderFlagDefaults, regenerateID, regenerateIDs, remove, removeInPlace, rootPath, shouldRenderAsNumber, splitBy, sqlDialectPresets, standardClassnames, toArray, toFlatOptionArray, toFullOption, toFullOptionList, toFullOptionMap, transformQuery, trimIfString, uniqByIdentifier, uniqByName, uniqOptGroups, uniqOptList, update, updateInPlace, uuidV4regex };
|
|
4622
4998
|
|
|
4623
4999
|
//# sourceMappingURL=react-querybuilder_core.mjs.map
|