@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
|
@@ -694,7 +694,7 @@ const isRuleGroupType = (rg) => isRuleGroup(rg) && typeof rg.combinator === "str
|
|
|
694
694
|
*/
|
|
695
695
|
const isRuleGroupTypeIC = (rg) => isRuleGroup(rg) && rg.combinator === void 0;
|
|
696
696
|
//#endregion
|
|
697
|
-
//#region \0@oxc-project+runtime@0.
|
|
697
|
+
//#region \0@oxc-project+runtime@0.127.0/helpers/typeof.js
|
|
698
698
|
function _typeof(o) {
|
|
699
699
|
"@babel/helpers - typeof";
|
|
700
700
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
|
@@ -704,7 +704,7 @@ function _typeof(o) {
|
|
|
704
704
|
}, _typeof(o);
|
|
705
705
|
}
|
|
706
706
|
//#endregion
|
|
707
|
-
//#region \0@oxc-project+runtime@0.
|
|
707
|
+
//#region \0@oxc-project+runtime@0.127.0/helpers/toPrimitive.js
|
|
708
708
|
function toPrimitive(t, r) {
|
|
709
709
|
if ("object" != _typeof(t) || !t) return t;
|
|
710
710
|
var e = t[Symbol.toPrimitive];
|
|
@@ -716,13 +716,13 @@ function toPrimitive(t, r) {
|
|
|
716
716
|
return ("string" === r ? String : Number)(t);
|
|
717
717
|
}
|
|
718
718
|
//#endregion
|
|
719
|
-
//#region \0@oxc-project+runtime@0.
|
|
719
|
+
//#region \0@oxc-project+runtime@0.127.0/helpers/toPropertyKey.js
|
|
720
720
|
function toPropertyKey(t) {
|
|
721
721
|
var i = toPrimitive(t, "string");
|
|
722
722
|
return "symbol" == _typeof(i) ? i : i + "";
|
|
723
723
|
}
|
|
724
724
|
//#endregion
|
|
725
|
-
//#region \0@oxc-project+runtime@0.
|
|
725
|
+
//#region \0@oxc-project+runtime@0.127.0/helpers/defineProperty.js
|
|
726
726
|
function _defineProperty(e, r, t) {
|
|
727
727
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
728
728
|
value: t,
|
|
@@ -732,7 +732,7 @@ function _defineProperty(e, r, t) {
|
|
|
732
732
|
}) : e[r] = t, e;
|
|
733
733
|
}
|
|
734
734
|
//#endregion
|
|
735
|
-
//#region \0@oxc-project+runtime@0.
|
|
735
|
+
//#region \0@oxc-project+runtime@0.127.0/helpers/objectSpread2.js
|
|
736
736
|
function ownKeys(e, r) {
|
|
737
737
|
var t = Object.keys(e);
|
|
738
738
|
if (Object.getOwnPropertySymbols) {
|
|
@@ -755,7 +755,7 @@ function _objectSpread2(e) {
|
|
|
755
755
|
return e;
|
|
756
756
|
}
|
|
757
757
|
//#endregion
|
|
758
|
-
//#region \0@oxc-project+runtime@0.
|
|
758
|
+
//#region \0@oxc-project+runtime@0.127.0/helpers/objectWithoutPropertiesLoose.js
|
|
759
759
|
function _objectWithoutPropertiesLoose(r, e) {
|
|
760
760
|
if (null == r) return {};
|
|
761
761
|
var t = {};
|
|
@@ -766,7 +766,7 @@ function _objectWithoutPropertiesLoose(r, e) {
|
|
|
766
766
|
return t;
|
|
767
767
|
}
|
|
768
768
|
//#endregion
|
|
769
|
-
//#region \0@oxc-project+runtime@0.
|
|
769
|
+
//#region \0@oxc-project+runtime@0.127.0/helpers/objectWithoutProperties.js
|
|
770
770
|
function _objectWithoutProperties(e, t) {
|
|
771
771
|
if (null == e) return {};
|
|
772
772
|
var o, r, i = _objectWithoutPropertiesLoose(e, t);
|
|
@@ -1558,7 +1558,7 @@ const defaultRuleGroupProcessorCEL = (ruleGroup, options) => {
|
|
|
1558
1558
|
//#endregion
|
|
1559
1559
|
//#region src/utils/formatQuery/defaultRuleProcessorCEL.ts
|
|
1560
1560
|
const shouldNegate$2 = (op) => op.startsWith("not") || op.startsWith("doesnot");
|
|
1561
|
-
const escapeDoubleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`);
|
|
1561
|
+
const escapeDoubleQuotes$1 = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`);
|
|
1562
1562
|
/**
|
|
1563
1563
|
* Default rule processor used by {@link formatQuery} for "cel" format.
|
|
1564
1564
|
*
|
|
@@ -1597,19 +1597,19 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
|
|
|
1597
1597
|
case "==":
|
|
1598
1598
|
case "!=":
|
|
1599
1599
|
case ">":
|
|
1600
|
-
case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`}`;
|
|
1600
|
+
case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`}`;
|
|
1601
1601
|
case "contains":
|
|
1602
|
-
case "doesnotcontain": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.contains(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
|
|
1602
|
+
case "doesnotcontain": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.contains(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`})`;
|
|
1603
1603
|
case "beginswith":
|
|
1604
|
-
case "doesnotbeginwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.startsWith(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
|
|
1604
|
+
case "doesnotbeginwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.startsWith(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`})`;
|
|
1605
1605
|
case "endswith":
|
|
1606
|
-
case "doesnotendwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.endsWith(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes(value, escapeQuotes)}"`})`;
|
|
1606
|
+
case "doesnotendwith": return `${shouldNegate$2(operatorTL) ? "!" : ""}${field}.endsWith(${valueIsField ? trimIfString(value) : `"${escapeDoubleQuotes$1(value, escapeQuotes)}"`})`;
|
|
1607
1607
|
case "null": return `${field} == null`;
|
|
1608
1608
|
case "notnull": return `${field} != null`;
|
|
1609
1609
|
case "in":
|
|
1610
1610
|
case "notin": {
|
|
1611
1611
|
const [prefix, suffix] = shouldNegate$2(operatorTL) ? ["!(", ")"] : ["", ""];
|
|
1612
|
-
return `${prefix}${field} in [${toArray(value).map((val) => valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `"${escapeDoubleQuotes(val, escapeQuotes)}"`).join(", ")}]${suffix}`;
|
|
1612
|
+
return `${prefix}${field} in [${toArray(value).map((val) => valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `"${escapeDoubleQuotes$1(val, escapeQuotes)}"`).join(", ")}]${suffix}`;
|
|
1613
1613
|
}
|
|
1614
1614
|
case "between":
|
|
1615
1615
|
case "notbetween": {
|
|
@@ -1619,8 +1619,8 @@ const defaultRuleProcessorCEL = (rule, opts = {}) => {
|
|
|
1619
1619
|
const shouldParseNumbers = !(parseNumbers === false);
|
|
1620
1620
|
const firstNum = shouldRenderAsNumber(first, shouldParseNumbers) ? parseNumber(first, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
1621
1621
|
const secondNum = shouldRenderAsNumber(second, shouldParseNumbers) ? parseNumber(second, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
1622
|
-
let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `"${escapeDoubleQuotes(first, escapeQuotes)}"` : firstNum;
|
|
1623
|
-
let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `"${escapeDoubleQuotes(second, escapeQuotes)}"` : secondNum;
|
|
1622
|
+
let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `"${escapeDoubleQuotes$1(first, escapeQuotes)}"` : firstNum;
|
|
1623
|
+
let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `"${escapeDoubleQuotes$1(second, escapeQuotes)}"` : secondNum;
|
|
1624
1624
|
if (!preserveValueOrder && firstValue === firstNum && secondValue === secondNum && secondNum < firstNum) {
|
|
1625
1625
|
const tempNum = secondNum;
|
|
1626
1626
|
secondValue = firstNum;
|
|
@@ -1865,7 +1865,7 @@ const defaultRuleGroupProcessorSpEL = (ruleGroup, options) => {
|
|
|
1865
1865
|
//#region src/utils/formatQuery/defaultRuleProcessorSpEL.ts
|
|
1866
1866
|
const shouldNegate$1 = (op) => op.startsWith("not") || op.startsWith("doesnot");
|
|
1867
1867
|
const wrapInNegation = (clause, negate) => negate ? `!(${clause})` : clause;
|
|
1868
|
-
const escapeSingleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`'`, `\\'`);
|
|
1868
|
+
const escapeSingleQuotes$2 = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`'`, `\\'`);
|
|
1869
1869
|
/**
|
|
1870
1870
|
* Default rule processor used by {@link formatQuery} for "spel" format.
|
|
1871
1871
|
*
|
|
@@ -1903,20 +1903,20 @@ const defaultRuleProcessorSpEL = (rule, opts = {}) => {
|
|
|
1903
1903
|
case "==":
|
|
1904
1904
|
case "!=":
|
|
1905
1905
|
case ">":
|
|
1906
|
-
case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? trimIfString(value) : `'${escapeSingleQuotes(value, escapeQuotes)}'`}`;
|
|
1906
|
+
case ">=": return `${field} ${operatorTL} ${valueIsField || useBareValue ? trimIfString(value) : `'${escapeSingleQuotes$2(value, escapeQuotes)}'`}`;
|
|
1907
1907
|
case "contains":
|
|
1908
|
-
case "doesnotcontain": return wrapInNegation(`${field} matches ${valueIsField || useBareValue ? trimIfString(value) : `'${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
|
|
1908
|
+
case "doesnotcontain": return wrapInNegation(`${field} matches ${valueIsField || useBareValue ? trimIfString(value) : `'${escapeSingleQuotes$2(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
|
|
1909
1909
|
case "beginswith":
|
|
1910
|
-
case "doesnotbeginwith": return wrapInNegation(`${field} matches ${valueIsField ? `'^'.concat(${trimIfString(value)})` : `'${typeof value === "string" && !value.startsWith("^") || useBareValue ? "^" : ""}${escapeSingleQuotes(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
|
|
1910
|
+
case "doesnotbeginwith": return wrapInNegation(`${field} matches ${valueIsField ? `'^'.concat(${trimIfString(value)})` : `'${typeof value === "string" && !value.startsWith("^") || useBareValue ? "^" : ""}${escapeSingleQuotes$2(value, escapeQuotes)}'`}`, shouldNegate$1(operatorTL));
|
|
1911
1911
|
case "endswith":
|
|
1912
|
-
case "doesnotendwith": return wrapInNegation(`${field} matches ${valueIsField ? `${trimIfString(value)}.concat('$')` : `'${escapeSingleQuotes(value, escapeQuotes)}${typeof value === "string" && !value.endsWith("$") || useBareValue ? "$" : ""}'`}`, shouldNegate$1(operatorTL));
|
|
1912
|
+
case "doesnotendwith": return wrapInNegation(`${field} matches ${valueIsField ? `${trimIfString(value)}.concat('$')` : `'${escapeSingleQuotes$2(value, escapeQuotes)}${typeof value === "string" && !value.endsWith("$") || useBareValue ? "$" : ""}'`}`, shouldNegate$1(operatorTL));
|
|
1913
1913
|
case "null": return `${field} == null`;
|
|
1914
1914
|
case "notnull": return `${field} != null`;
|
|
1915
1915
|
case "in":
|
|
1916
1916
|
case "notin": {
|
|
1917
1917
|
const negate = shouldNegate$1(operatorTL) ? "!" : "";
|
|
1918
1918
|
const valueAsArray = toArray(value);
|
|
1919
|
-
return valueAsArray.length > 0 ? `${negate}(${valueAsArray.map((val) => `${field} == ${valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `'${escapeSingleQuotes(val, escapeQuotes)}'`}`).join(" or ")})` : "";
|
|
1919
|
+
return valueAsArray.length > 0 ? `${negate}(${valueAsArray.map((val) => `${field} == ${valueIsField || shouldRenderAsNumber(val, parseNumbers) ? `${trimIfString(val)}` : `'${escapeSingleQuotes$2(val, escapeQuotes)}'`}`).join(" or ")})` : "";
|
|
1920
1920
|
}
|
|
1921
1921
|
case "between":
|
|
1922
1922
|
case "notbetween": {
|
|
@@ -1926,8 +1926,8 @@ const defaultRuleProcessorSpEL = (rule, opts = {}) => {
|
|
|
1926
1926
|
const shouldParseNumbers = !(parseNumbers === false);
|
|
1927
1927
|
const firstNum = shouldRenderAsNumber(first, shouldParseNumbers) ? parseNumber(first, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
1928
1928
|
const secondNum = shouldRenderAsNumber(second, shouldParseNumbers) ? parseNumber(second, { parseNumbers: shouldParseNumbers }) : NaN;
|
|
1929
|
-
let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `'${escapeSingleQuotes(first, escapeQuotes)}'` : firstNum;
|
|
1930
|
-
let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `'${escapeSingleQuotes(second, escapeQuotes)}'` : secondNum;
|
|
1929
|
+
let firstValue = Number.isNaN(firstNum) ? valueIsField ? `${first}` : `'${escapeSingleQuotes$2(first, escapeQuotes)}'` : firstNum;
|
|
1930
|
+
let secondValue = Number.isNaN(secondNum) ? valueIsField ? `${second}` : `'${escapeSingleQuotes$2(second, escapeQuotes)}'` : secondNum;
|
|
1931
1931
|
if (!preserveValueOrder && firstValue === firstNum && secondValue === secondNum && secondNum < firstNum) {
|
|
1932
1932
|
const tempNum = secondNum;
|
|
1933
1933
|
secondValue = firstNum;
|
|
@@ -1996,6 +1996,71 @@ const defaultValueProcessorByRule = ({ operator, value, valueSource }, { escapeQ
|
|
|
1996
1996
|
return valueIsField ? wrapFieldName(value) : shouldRenderAsNumber(value, parseNumbers) ? `${trimIfString(value)}` : `${wrapAndEscape(value)}`;
|
|
1997
1997
|
};
|
|
1998
1998
|
//#endregion
|
|
1999
|
+
//#region src/utils/formatQuery/defaultRuleGroupProcessorCypher.ts
|
|
2000
|
+
/**
|
|
2001
|
+
* Maps a {@link DefaultCombinatorName} to a Cypher combinator keyword.
|
|
2002
|
+
*
|
|
2003
|
+
* @group Export
|
|
2004
|
+
*/
|
|
2005
|
+
const cypherCombinatorMap = {
|
|
2006
|
+
and: "AND",
|
|
2007
|
+
or: "OR"
|
|
2008
|
+
};
|
|
2009
|
+
/**
|
|
2010
|
+
* Rule group processor used by {@link formatQuery} for "cypher" and "gql" formats.
|
|
2011
|
+
*
|
|
2012
|
+
* @group Export
|
|
2013
|
+
*/
|
|
2014
|
+
const defaultRuleGroupProcessorCypher = (ruleGroup, options) => {
|
|
2015
|
+
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
2016
|
+
const processRuleGroup = (rg, outermost) => {
|
|
2017
|
+
var _rg$id;
|
|
2018
|
+
if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermost ? fallbackExpression : "";
|
|
2019
|
+
const processedRules = [];
|
|
2020
|
+
let precedingCombinator = "";
|
|
2021
|
+
let firstRule = true;
|
|
2022
|
+
for (const rule of rg.rules) {
|
|
2023
|
+
var _rule$valueSource;
|
|
2024
|
+
if (typeof rule === "string") {
|
|
2025
|
+
precedingCombinator = cypherCombinatorMap[rule];
|
|
2026
|
+
continue;
|
|
2027
|
+
}
|
|
2028
|
+
if (isRuleGroup(rule)) {
|
|
2029
|
+
const processedGroup = processRuleGroup(rule);
|
|
2030
|
+
if (processedGroup) {
|
|
2031
|
+
if (!firstRule && precedingCombinator) {
|
|
2032
|
+
processedRules.push(precedingCombinator);
|
|
2033
|
+
precedingCombinator = "";
|
|
2034
|
+
}
|
|
2035
|
+
firstRule = false;
|
|
2036
|
+
processedRules.push(processedGroup);
|
|
2037
|
+
}
|
|
2038
|
+
continue;
|
|
2039
|
+
}
|
|
2040
|
+
const [validationResult, fieldValidator] = validateRule(rule);
|
|
2041
|
+
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
2042
|
+
const fieldData = getOption(fields, rule.field);
|
|
2043
|
+
const processedRule = ruleProcessor(rule, _objectSpread2(_objectSpread2({}, options), {}, {
|
|
2044
|
+
parseNumbers: getParseNumberBoolean(fieldData === null || fieldData === void 0 ? void 0 : fieldData.inputType),
|
|
2045
|
+
escapeQuotes: ((_rule$valueSource = rule.valueSource) !== null && _rule$valueSource !== void 0 ? _rule$valueSource : "value") === "value",
|
|
2046
|
+
fieldData
|
|
2047
|
+
}));
|
|
2048
|
+
if (processedRule) {
|
|
2049
|
+
if (!firstRule && precedingCombinator) {
|
|
2050
|
+
processedRules.push(precedingCombinator);
|
|
2051
|
+
precedingCombinator = "";
|
|
2052
|
+
}
|
|
2053
|
+
firstRule = false;
|
|
2054
|
+
processedRules.push(processedRule);
|
|
2055
|
+
}
|
|
2056
|
+
}
|
|
2057
|
+
const expression = processedRules.join(isRuleGroupType(rg) ? ` ${cypherCombinatorMap[rg.combinator]} ` : " ");
|
|
2058
|
+
const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "NOT " : ""}(`, ")"] : ["", ""];
|
|
2059
|
+
return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
|
|
2060
|
+
};
|
|
2061
|
+
return processRuleGroup(ruleGroup, true);
|
|
2062
|
+
};
|
|
2063
|
+
//#endregion
|
|
1999
2064
|
//#region src/utils/formatQuery/defaultRuleProcessorDrizzle.ts
|
|
2000
2065
|
/**
|
|
2001
2066
|
* Default rule processor used by {@link formatQuery} for the "drizzle" format.
|
|
@@ -2153,6 +2218,69 @@ const defaultRuleGroupProcessorElasticSearch = (ruleGroup, options) => {
|
|
|
2153
2218
|
return processedRuleGroup === false ? {} : processedRuleGroup;
|
|
2154
2219
|
};
|
|
2155
2220
|
//#endregion
|
|
2221
|
+
//#region src/utils/formatQuery/defaultRuleGroupProcessorGremlin.ts
|
|
2222
|
+
/**
|
|
2223
|
+
* Rule group processor used by {@link formatQuery} for "gremlin" format.
|
|
2224
|
+
*
|
|
2225
|
+
* At the top level, filter rules produce chained `.has()` steps (implicit AND).
|
|
2226
|
+
* Nested groups use `.and()` / `.or()` / `.not()` compound traversals with
|
|
2227
|
+
* `__` anonymous traversal prefixes.
|
|
2228
|
+
*
|
|
2229
|
+
* @group Export
|
|
2230
|
+
*/
|
|
2231
|
+
const defaultRuleGroupProcessorGremlin = (ruleGroup, options) => {
|
|
2232
|
+
var _ruleGroup$id;
|
|
2233
|
+
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
2234
|
+
const validateAndProcess = (rule) => {
|
|
2235
|
+
var _rule$valueSource;
|
|
2236
|
+
// v8 ignore next -- @preserve
|
|
2237
|
+
if (typeof rule === "string" || isRuleGroup(rule)) return void 0;
|
|
2238
|
+
const [validationResult, fieldValidator] = validateRule(rule);
|
|
2239
|
+
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return;
|
|
2240
|
+
const fieldData = getOption(fields, rule.field);
|
|
2241
|
+
return ruleProcessor(rule, _objectSpread2(_objectSpread2({}, options), {}, {
|
|
2242
|
+
parseNumbers: getParseNumberBoolean(fieldData === null || fieldData === void 0 ? void 0 : fieldData.inputType),
|
|
2243
|
+
escapeQuotes: ((_rule$valueSource = rule.valueSource) !== null && _rule$valueSource !== void 0 ? _rule$valueSource : "value") === "value",
|
|
2244
|
+
fieldData
|
|
2245
|
+
}));
|
|
2246
|
+
};
|
|
2247
|
+
/** Recursively processes a nested group into `.and()`/`.or()`/`.not()` form. */
|
|
2248
|
+
const processNested = (rg) => {
|
|
2249
|
+
var _rg$id, _combinator;
|
|
2250
|
+
if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return "";
|
|
2251
|
+
const predicates = [];
|
|
2252
|
+
for (const rule of rg.rules) {
|
|
2253
|
+
if (typeof rule === "string") continue;
|
|
2254
|
+
if (isRuleGroup(rule)) {
|
|
2255
|
+
const nested = processNested(rule);
|
|
2256
|
+
if (nested) predicates.push(nested);
|
|
2257
|
+
continue;
|
|
2258
|
+
}
|
|
2259
|
+
const processed = validateAndProcess(rule);
|
|
2260
|
+
if (processed) predicates.push(processed);
|
|
2261
|
+
}
|
|
2262
|
+
if (predicates.length === 0) return "";
|
|
2263
|
+
const combinator = (_combinator = rg.combinator) !== null && _combinator !== void 0 ? _combinator : "and";
|
|
2264
|
+
const prefix = rg.not ? "not" : combinator;
|
|
2265
|
+
if (predicates.length === 1 && !rg.not) return predicates[0];
|
|
2266
|
+
return `.${prefix}(${predicates.map((p) => p.startsWith(".") ? `__${p}` : p).join(", ")})`;
|
|
2267
|
+
};
|
|
2268
|
+
if (!isRuleOrGroupValid(ruleGroup, validationMap[(_ruleGroup$id = ruleGroup.id) !== null && _ruleGroup$id !== void 0 ? _ruleGroup$id : /* v8 ignore start -- @preserve */ ""])) return fallbackExpression;
|
|
2269
|
+
const steps = [];
|
|
2270
|
+
for (const rule of ruleGroup.rules) {
|
|
2271
|
+
if (typeof rule === "string") continue;
|
|
2272
|
+
if (isRuleGroup(rule)) {
|
|
2273
|
+
const compound = processNested(rule);
|
|
2274
|
+
if (compound) steps.push(compound);
|
|
2275
|
+
continue;
|
|
2276
|
+
}
|
|
2277
|
+
const processed = validateAndProcess(rule);
|
|
2278
|
+
if (processed) steps.push(processed);
|
|
2279
|
+
}
|
|
2280
|
+
if (steps.length === 0) return fallbackExpression;
|
|
2281
|
+
return steps.join("");
|
|
2282
|
+
};
|
|
2283
|
+
//#endregion
|
|
2156
2284
|
//#region src/utils/formatQuery/defaultRuleGroupProcessorJSONata.ts
|
|
2157
2285
|
/**
|
|
2158
2286
|
* Rule group processor used by {@link formatQuery} for "jsonata" format.
|
|
@@ -2547,6 +2675,64 @@ const defaultRuleGroupProcessorSequelize = (ruleGroup, options) => {
|
|
|
2547
2675
|
return processRuleGroup(convertFromIC(ruleGroup), true);
|
|
2548
2676
|
};
|
|
2549
2677
|
//#endregion
|
|
2678
|
+
//#region src/utils/formatQuery/defaultRuleGroupProcessorSPARQL.ts
|
|
2679
|
+
/**
|
|
2680
|
+
* Rule group processor used by {@link formatQuery} for "sparql" format.
|
|
2681
|
+
*
|
|
2682
|
+
* SPARQL uses the same combinators as CEL (`&&` / `||`) and `!()` for negation.
|
|
2683
|
+
*
|
|
2684
|
+
* @group Export
|
|
2685
|
+
*/
|
|
2686
|
+
const defaultRuleGroupProcessorSPARQL = (ruleGroup, options) => {
|
|
2687
|
+
const { fields, fallbackExpression, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, ruleProcessor, validateRule, validationMap } = options;
|
|
2688
|
+
const processRuleGroup = (rg, outermost) => {
|
|
2689
|
+
var _rg$id;
|
|
2690
|
+
if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return outermost ? fallbackExpression : "";
|
|
2691
|
+
const processedRules = [];
|
|
2692
|
+
let precedingCombinator = "";
|
|
2693
|
+
let firstRule = true;
|
|
2694
|
+
for (const rule of rg.rules) {
|
|
2695
|
+
var _rule$valueSource;
|
|
2696
|
+
if (typeof rule === "string") {
|
|
2697
|
+
precedingCombinator = celCombinatorMap[rule];
|
|
2698
|
+
continue;
|
|
2699
|
+
}
|
|
2700
|
+
if (isRuleGroup(rule)) {
|
|
2701
|
+
const processedGroup = processRuleGroup(rule);
|
|
2702
|
+
if (processedGroup) {
|
|
2703
|
+
if (!firstRule && precedingCombinator) {
|
|
2704
|
+
processedRules.push(precedingCombinator);
|
|
2705
|
+
precedingCombinator = "";
|
|
2706
|
+
}
|
|
2707
|
+
firstRule = false;
|
|
2708
|
+
processedRules.push(processedGroup);
|
|
2709
|
+
}
|
|
2710
|
+
continue;
|
|
2711
|
+
}
|
|
2712
|
+
const [validationResult, fieldValidator] = validateRule(rule);
|
|
2713
|
+
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) continue;
|
|
2714
|
+
const fieldData = getOption(fields, rule.field);
|
|
2715
|
+
const processedRule = ruleProcessor(rule, _objectSpread2(_objectSpread2({}, options), {}, {
|
|
2716
|
+
parseNumbers: getParseNumberBoolean(fieldData === null || fieldData === void 0 ? void 0 : fieldData.inputType),
|
|
2717
|
+
escapeQuotes: ((_rule$valueSource = rule.valueSource) !== null && _rule$valueSource !== void 0 ? _rule$valueSource : "value") === "value",
|
|
2718
|
+
fieldData
|
|
2719
|
+
}));
|
|
2720
|
+
if (processedRule) {
|
|
2721
|
+
if (!firstRule && precedingCombinator) {
|
|
2722
|
+
processedRules.push(precedingCombinator);
|
|
2723
|
+
precedingCombinator = "";
|
|
2724
|
+
}
|
|
2725
|
+
firstRule = false;
|
|
2726
|
+
processedRules.push(processedRule);
|
|
2727
|
+
}
|
|
2728
|
+
}
|
|
2729
|
+
const expression = processedRules.join(isRuleGroupType(rg) ? ` ${celCombinatorMap[rg.combinator]} ` : " ");
|
|
2730
|
+
const [prefix, suffix] = rg.not || !outermost ? [`${rg.not ? "!" : ""}(`, ")"] : ["", ""];
|
|
2731
|
+
return expression ? `${prefix}${expression}${suffix}` : fallbackExpression;
|
|
2732
|
+
};
|
|
2733
|
+
return processRuleGroup(ruleGroup, true);
|
|
2734
|
+
};
|
|
2735
|
+
//#endregion
|
|
2550
2736
|
//#region src/utils/formatQuery/defaultRuleGroupProcessorSQL.ts
|
|
2551
2737
|
/**
|
|
2552
2738
|
* Default rule processor used by {@link formatQuery} for "sql" format.
|
|
@@ -2922,6 +3108,59 @@ const getFieldValidatorReasons = (rule, fieldValidator) => {
|
|
|
2922
3108
|
}
|
|
2923
3109
|
};
|
|
2924
3110
|
//#endregion
|
|
3111
|
+
//#region src/utils/formatQuery/defaultRuleProcessorCypher.ts
|
|
3112
|
+
const escapeSingleQuotes$1 = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll("'", "\\'");
|
|
3113
|
+
/**
|
|
3114
|
+
* Default rule processor used by {@link formatQuery} for "cypher" and "gql" formats.
|
|
3115
|
+
*
|
|
3116
|
+
* @group Export
|
|
3117
|
+
*/
|
|
3118
|
+
const defaultRuleProcessorCypher = (rule, opts = {}) => {
|
|
3119
|
+
const { escapeQuotes, parseNumbers } = opts;
|
|
3120
|
+
const { field, operator, value, valueSource } = rule;
|
|
3121
|
+
const valueIsField = valueSource === "field";
|
|
3122
|
+
const operatorTL = operator.toLowerCase();
|
|
3123
|
+
const fmtVal = (v) => {
|
|
3124
|
+
if (v === null || v === void 0) return "null";
|
|
3125
|
+
if (typeof v === "boolean" || typeof v === "bigint") return String(v);
|
|
3126
|
+
if (valueIsField) return trimIfString(v);
|
|
3127
|
+
if (typeof v === "number" || shouldRenderAsNumber(v, parseNumbers)) return trimIfString(v);
|
|
3128
|
+
return `'${escapeSingleQuotes$1(v, escapeQuotes)}'`;
|
|
3129
|
+
};
|
|
3130
|
+
switch (operatorTL) {
|
|
3131
|
+
case "=": return `${field} = ${fmtVal(value)}`;
|
|
3132
|
+
case "!=":
|
|
3133
|
+
case "<>": return `${field} <> ${fmtVal(value)}`;
|
|
3134
|
+
case "<":
|
|
3135
|
+
case ">":
|
|
3136
|
+
case "<=":
|
|
3137
|
+
case ">=": return `${field} ${operatorTL} ${fmtVal(value)}`;
|
|
3138
|
+
case "contains": return `${field} CONTAINS ${fmtVal(value)}`;
|
|
3139
|
+
case "doesnotcontain": return `NOT ${field} CONTAINS ${fmtVal(value)}`;
|
|
3140
|
+
case "beginswith": return `${field} STARTS WITH ${fmtVal(value)}`;
|
|
3141
|
+
case "doesnotbeginwith": return `NOT ${field} STARTS WITH ${fmtVal(value)}`;
|
|
3142
|
+
case "endswith": return `${field} ENDS WITH ${fmtVal(value)}`;
|
|
3143
|
+
case "doesnotendwith": return `NOT ${field} ENDS WITH ${fmtVal(value)}`;
|
|
3144
|
+
case "null": return `${field} IS NULL`;
|
|
3145
|
+
case "notnull": return `${field} IS NOT NULL`;
|
|
3146
|
+
case "in":
|
|
3147
|
+
case "notin": {
|
|
3148
|
+
const values = toArray(value).map(fmtVal);
|
|
3149
|
+
if (!values.length) return "";
|
|
3150
|
+
return `${operatorTL === "notin" ? "NOT " : ""}${field} IN [${values.join(", ")}]`;
|
|
3151
|
+
}
|
|
3152
|
+
case "between":
|
|
3153
|
+
case "notbetween": {
|
|
3154
|
+
const arr = toArray(value);
|
|
3155
|
+
if (arr.length < 2) return "";
|
|
3156
|
+
const [low, high] = [fmtVal(arr[0]), fmtVal(arr[1])];
|
|
3157
|
+
const expr = `${low} <= ${field} AND ${field} <= ${high}`;
|
|
3158
|
+
return operatorTL === "notbetween" ? `NOT (${expr})` : expr;
|
|
3159
|
+
}
|
|
3160
|
+
default: return `${field} ${operator} ${fmtVal(value)}`;
|
|
3161
|
+
}
|
|
3162
|
+
};
|
|
3163
|
+
//#endregion
|
|
2925
3164
|
//#region src/utils/formatQuery/defaultRuleProcessorElasticSearch.ts
|
|
2926
3165
|
const rangeOperatorMap = {
|
|
2927
3166
|
"<": "lt",
|
|
@@ -3071,6 +3310,68 @@ const defaultRuleProcessorElasticSearch = (rule, options = {}) => {
|
|
|
3071
3310
|
return false;
|
|
3072
3311
|
};
|
|
3073
3312
|
//#endregion
|
|
3313
|
+
//#region src/utils/formatQuery/defaultRuleProcessorGremlin.ts
|
|
3314
|
+
const escapeSingleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll("'", "\\'");
|
|
3315
|
+
/**
|
|
3316
|
+
* Default rule processor used by {@link formatQuery} for "gremlin" format.
|
|
3317
|
+
*
|
|
3318
|
+
* Each rule becomes a `.has()` step (or `.hasNot()`/`.has()` for null checks).
|
|
3319
|
+
*
|
|
3320
|
+
* @group Export
|
|
3321
|
+
*/
|
|
3322
|
+
const defaultRuleProcessorGremlin = (rule, opts = {}) => {
|
|
3323
|
+
const { escapeQuotes, parseNumbers } = opts;
|
|
3324
|
+
const { field, operator, value, valueSource } = rule;
|
|
3325
|
+
const valueIsField = valueSource === "field";
|
|
3326
|
+
const operatorTL = operator.toLowerCase();
|
|
3327
|
+
const prop = field.includes(".") ? field.split(".").pop() : field;
|
|
3328
|
+
const fmtVal = (v) => {
|
|
3329
|
+
if (v === null || v === void 0) return "null";
|
|
3330
|
+
if (typeof v === "boolean" || typeof v === "bigint") return String(v);
|
|
3331
|
+
if (valueIsField) return trimIfString(v);
|
|
3332
|
+
if (typeof v === "number" || shouldRenderAsNumber(v, parseNumbers)) return trimIfString(v);
|
|
3333
|
+
return `'${escapeSingleQuotes(v, escapeQuotes)}'`;
|
|
3334
|
+
};
|
|
3335
|
+
switch (operatorTL) {
|
|
3336
|
+
case "=": return `.has('${prop}', ${fmtVal(value)})`;
|
|
3337
|
+
case "!=":
|
|
3338
|
+
case "<>": return `.has('${prop}', neq(${fmtVal(value)}))`;
|
|
3339
|
+
case "<": return `.has('${prop}', lt(${fmtVal(value)}))`;
|
|
3340
|
+
case ">": return `.has('${prop}', gt(${fmtVal(value)}))`;
|
|
3341
|
+
case "<=": return `.has('${prop}', lte(${fmtVal(value)}))`;
|
|
3342
|
+
case ">=": return `.has('${prop}', gte(${fmtVal(value)}))`;
|
|
3343
|
+
case "contains": return `.has('${prop}', containing(${fmtVal(value)}))`;
|
|
3344
|
+
case "doesnotcontain": return `.has('${prop}', notContaining(${fmtVal(value)}))`;
|
|
3345
|
+
case "beginswith": return `.has('${prop}', startingWith(${fmtVal(value)}))`;
|
|
3346
|
+
case "doesnotbeginwith": return `.has('${prop}', notStartingWith(${fmtVal(value)}))`;
|
|
3347
|
+
case "endswith": return `.has('${prop}', endingWith(${fmtVal(value)}))`;
|
|
3348
|
+
case "doesnotendwith": return `.has('${prop}', notEndingWith(${fmtVal(value)}))`;
|
|
3349
|
+
case "null": return `.hasNot('${prop}')`;
|
|
3350
|
+
case "notnull": return `.has('${prop}')`;
|
|
3351
|
+
case "in": {
|
|
3352
|
+
const items = toArray(value).map(fmtVal);
|
|
3353
|
+
if (!items.length) return "";
|
|
3354
|
+
return `.has('${prop}', within(${items.join(", ")}))`;
|
|
3355
|
+
}
|
|
3356
|
+
case "notin": {
|
|
3357
|
+
const items = toArray(value).map(fmtVal);
|
|
3358
|
+
if (!items.length) return "";
|
|
3359
|
+
return `.has('${prop}', without(${items.join(", ")}))`;
|
|
3360
|
+
}
|
|
3361
|
+
case "between": {
|
|
3362
|
+
const arr = toArray(value);
|
|
3363
|
+
if (arr.length < 2) return "";
|
|
3364
|
+
return `.has('${prop}', between(${fmtVal(arr[0])}, ${fmtVal(arr[1])}))`;
|
|
3365
|
+
}
|
|
3366
|
+
case "notbetween": {
|
|
3367
|
+
const arr = toArray(value);
|
|
3368
|
+
if (arr.length < 2) return "";
|
|
3369
|
+
return `.has('${prop}', outside(${fmtVal(arr[0])}, ${fmtVal(arr[1])}))`;
|
|
3370
|
+
}
|
|
3371
|
+
default: return `.has('${prop}', ${fmtVal(value)})`;
|
|
3372
|
+
}
|
|
3373
|
+
};
|
|
3374
|
+
//#endregion
|
|
3074
3375
|
//#region src/utils/formatQuery/defaultRuleProcessorJSONata.ts
|
|
3075
3376
|
const shouldNegate = (op) => op.startsWith("not") || op.startsWith("doesnot");
|
|
3076
3377
|
const quote = (v, escapeQuotes) => `"${typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`)}"`;
|
|
@@ -3686,8 +3987,11 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
|
|
|
3686
3987
|
const valueIsField = valueSource === "field";
|
|
3687
3988
|
const operatorLC = lc(operator);
|
|
3688
3989
|
if (!Op || valueIsField && (!col || !fn && [
|
|
3990
|
+
"contains",
|
|
3689
3991
|
"doesnotcontain",
|
|
3992
|
+
"beginswith",
|
|
3690
3993
|
"doesnotbeginwith",
|
|
3994
|
+
"endswith",
|
|
3691
3995
|
"doesnotendwith"
|
|
3692
3996
|
].includes(operatorLC))) return;
|
|
3693
3997
|
switch (operatorLC) {
|
|
@@ -3707,9 +4011,9 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
|
|
|
3707
4011
|
}[operatorLC];
|
|
3708
4012
|
return { [field]: valueIsField && operatorLC === "=" ? { [Op.col]: value } : { [sequelizeOperator]: valueIsField ? col(value) : shouldRenderAsNumber(value, parseNumbers) ? parseNumber(value, { parseNumbers: "strict" }) : value } };
|
|
3709
4013
|
}
|
|
3710
|
-
case "contains": return { [field]: { [Op.substring]: valueIsField ? col(value) : `${value}` } };
|
|
3711
|
-
case "beginswith": return { [field]: { [Op.startsWith]: valueIsField ? col(value) : `${value}` } };
|
|
3712
|
-
case "endswith": return { [field]: { [Op.endsWith]: valueIsField ? col(value) : `${value}` } };
|
|
4014
|
+
case "contains": return { [field]: { [valueIsField ? Op.like : Op.substring]: valueIsField ? fn("CONCAT", "%", col(value), "%") : `${value}` } };
|
|
4015
|
+
case "beginswith": return { [field]: { [valueIsField ? Op.like : Op.startsWith]: valueIsField ? fn("CONCAT", col(value), "%") : `${value}` } };
|
|
4016
|
+
case "endswith": return { [field]: { [valueIsField ? Op.like : Op.endsWith]: valueIsField ? fn("CONCAT", "%", col(value)) : `${value}` } };
|
|
3713
4017
|
case "doesnotcontain": return { [field]: { [Op.notLike]: valueIsField ? fn("CONCAT", "%", col(value), "%") : `%${value}%` } };
|
|
3714
4018
|
case "doesnotbeginwith": return { [field]: { [Op.notLike]: valueIsField ? fn("CONCAT", col(value), "%") : `${value}%` } };
|
|
3715
4019
|
case "doesnotendwith": return { [field]: { [Op.notLike]: valueIsField ? fn("CONCAT", "%", col(value)) : `%${value}` } };
|
|
@@ -3739,6 +4043,69 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
|
|
|
3739
4043
|
}
|
|
3740
4044
|
};
|
|
3741
4045
|
//#endregion
|
|
4046
|
+
//#region src/utils/formatQuery/defaultRuleProcessorSPARQL.ts
|
|
4047
|
+
const escapeDoubleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`);
|
|
4048
|
+
/**
|
|
4049
|
+
* Default rule processor used by {@link formatQuery} for "sparql" format.
|
|
4050
|
+
*
|
|
4051
|
+
* @group Export
|
|
4052
|
+
*/
|
|
4053
|
+
const defaultRuleProcessorSPARQL = (rule, opts = {}) => {
|
|
4054
|
+
const { escapeQuotes, parseNumbers } = opts;
|
|
4055
|
+
const { field, operator, value, valueSource } = rule;
|
|
4056
|
+
const valueIsField = valueSource === "field";
|
|
4057
|
+
const operatorTL = operator.toLowerCase();
|
|
4058
|
+
const fmtVal = (v) => {
|
|
4059
|
+
var _JSON$stringify;
|
|
4060
|
+
if (v === null || v === void 0) return "\"\"";
|
|
4061
|
+
if (typeof v === "boolean") return `"${v}"^^xsd:boolean`;
|
|
4062
|
+
if (typeof v === "bigint") return String(v);
|
|
4063
|
+
if (valueIsField) return trimIfString(v);
|
|
4064
|
+
if (typeof v === "number" || shouldRenderAsNumber(v, parseNumbers)) return trimIfString(v);
|
|
4065
|
+
const s = typeof v === "string" ? v : (_JSON$stringify = JSON.stringify(v)) !== null && _JSON$stringify !== void 0 ? _JSON$stringify : "";
|
|
4066
|
+
if (s.startsWith("?") || s.startsWith("<") || s.includes(":")) return s;
|
|
4067
|
+
return `"${escapeDoubleQuotes(s, escapeQuotes)}"`;
|
|
4068
|
+
};
|
|
4069
|
+
switch (operatorTL) {
|
|
4070
|
+
case "=":
|
|
4071
|
+
case "!=":
|
|
4072
|
+
case "<":
|
|
4073
|
+
case ">":
|
|
4074
|
+
case "<=":
|
|
4075
|
+
case ">=": return `${field} ${operatorTL} ${fmtVal(value)}`;
|
|
4076
|
+
case "<>": return `${field} != ${fmtVal(value)}`;
|
|
4077
|
+
case "contains": return `CONTAINS(${field}, ${fmtVal(value)})`;
|
|
4078
|
+
case "doesnotcontain": return `!CONTAINS(${field}, ${fmtVal(value)})`;
|
|
4079
|
+
case "beginswith": return `STRSTARTS(${field}, ${fmtVal(value)})`;
|
|
4080
|
+
case "doesnotbeginwith": return `!STRSTARTS(${field}, ${fmtVal(value)})`;
|
|
4081
|
+
case "endswith": return `STRENDS(${field}, ${fmtVal(value)})`;
|
|
4082
|
+
case "doesnotendwith": return `!STRENDS(${field}, ${fmtVal(value)})`;
|
|
4083
|
+
case "null": return `!BOUND(${field})`;
|
|
4084
|
+
case "notnull": return `BOUND(${field})`;
|
|
4085
|
+
case "in": {
|
|
4086
|
+
const items = toArray(value).map(fmtVal);
|
|
4087
|
+
if (!items.length) return "";
|
|
4088
|
+
return items.map((item) => `${field} = ${item}`).join(" || ");
|
|
4089
|
+
}
|
|
4090
|
+
case "notin": {
|
|
4091
|
+
const items = toArray(value).map(fmtVal);
|
|
4092
|
+
if (!items.length) return "";
|
|
4093
|
+
return items.map((item) => `${field} != ${item}`).join(" && ");
|
|
4094
|
+
}
|
|
4095
|
+
case "between": {
|
|
4096
|
+
const arr = toArray(value);
|
|
4097
|
+
if (arr.length < 2) return "";
|
|
4098
|
+
return `${field} >= ${fmtVal(arr[0])} && ${field} <= ${fmtVal(arr[1])}`;
|
|
4099
|
+
}
|
|
4100
|
+
case "notbetween": {
|
|
4101
|
+
const arr = toArray(value);
|
|
4102
|
+
if (arr.length < 2) return "";
|
|
4103
|
+
return `(${field} < ${fmtVal(arr[0])} || ${field} > ${fmtVal(arr[1])})`;
|
|
4104
|
+
}
|
|
4105
|
+
default: return `${field} ${operator} ${fmtVal(value)}`;
|
|
4106
|
+
}
|
|
4107
|
+
};
|
|
4108
|
+
//#endregion
|
|
3742
4109
|
//#region src/utils/formatQuery/formatQuery.ts
|
|
3743
4110
|
/**
|
|
3744
4111
|
* A collection of option presets for {@link formatQuery}, specifically for SQL-based formats.
|
|
@@ -3786,6 +4153,10 @@ const defaultRuleProcessors = {
|
|
|
3786
4153
|
sequelize: defaultRuleProcessorSequelize,
|
|
3787
4154
|
spel: defaultRuleProcessorSpEL,
|
|
3788
4155
|
sql: defaultRuleProcessorSQL,
|
|
4156
|
+
cypher: defaultRuleProcessorCypher,
|
|
4157
|
+
gql: defaultRuleProcessorCypher,
|
|
4158
|
+
sparql: defaultRuleProcessorSPARQL,
|
|
4159
|
+
gremlin: defaultRuleProcessorGremlin,
|
|
3789
4160
|
diagnostics: defaultRuleProcessorSQL
|
|
3790
4161
|
};
|
|
3791
4162
|
/* v8 ignore next -- @preserve */
|
|
@@ -3808,6 +4179,10 @@ const defaultOperatorProcessors = {
|
|
|
3808
4179
|
sequelize: defaultOperatorProcessor,
|
|
3809
4180
|
spel: defaultOperatorProcessor,
|
|
3810
4181
|
sql: defaultOperatorProcessorSQL,
|
|
4182
|
+
cypher: defaultOperatorProcessor,
|
|
4183
|
+
gql: defaultOperatorProcessor,
|
|
4184
|
+
sparql: defaultOperatorProcessor,
|
|
4185
|
+
gremlin: defaultOperatorProcessor,
|
|
3811
4186
|
diagnostics: defaultOperatorProcessor
|
|
3812
4187
|
};
|
|
3813
4188
|
const defaultFallbackExpressions = {
|
|
@@ -3815,6 +4190,8 @@ const defaultFallbackExpressions = {
|
|
|
3815
4190
|
ldap: "",
|
|
3816
4191
|
mongodb: "\"$and\":[{\"$expr\":true}]",
|
|
3817
4192
|
natural_language: "1 is 1",
|
|
4193
|
+
sparql: "1 = 1",
|
|
4194
|
+
gremlin: "",
|
|
3818
4195
|
spel: "1 == 1",
|
|
3819
4196
|
sql: "(1 = 1)"
|
|
3820
4197
|
};
|
|
@@ -3957,6 +4334,10 @@ function formatQuery(ruleGroup, optionParam = {}) {
|
|
|
3957
4334
|
case "prisma": return defaultRuleGroupProcessorPrisma(ruleGroup, finalOptions);
|
|
3958
4335
|
case "drizzle": return defaultRuleGroupProcessorDrizzle(ruleGroup, finalOptions);
|
|
3959
4336
|
case "sequelize": return defaultRuleGroupProcessorSequelize(ruleGroup, finalOptions);
|
|
4337
|
+
case "cypher":
|
|
4338
|
+
case "gql": return defaultRuleGroupProcessorCypher(ruleGroup, finalOptions);
|
|
4339
|
+
case "sparql": return defaultRuleGroupProcessorSPARQL(ruleGroup, finalOptions);
|
|
4340
|
+
case "gremlin": return defaultRuleGroupProcessorGremlin(ruleGroup, finalOptions);
|
|
3960
4341
|
case "diagnostics": return defaultRuleGroupProcessorDiagnostics(ruleGroup, finalOptions);
|
|
3961
4342
|
default: return "";
|
|
3962
4343
|
}
|
|
@@ -4676,6 +5057,6 @@ const groupInPlace = (query, sourcePathOrID, targetPathOrID, options = {}) => {
|
|
|
4676
5057
|
return query;
|
|
4677
5058
|
};
|
|
4678
5059
|
//#endregion
|
|
4679
|
-
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 };
|
|
5060
|
+
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 };
|
|
4680
5061
|
|
|
4681
5062
|
//# sourceMappingURL=react-querybuilder_core.legacy-esm.js.map
|