@react-querybuilder/core 8.18.0 → 8.19.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +24 -21
- package/dist/cjs/react-querybuilder_core.cjs.development.js +222 -238
- package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
- package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +24 -21
- package/dist/cjs/react-querybuilder_core.cjs.production.js +1 -1
- package/dist/cjs/react-querybuilder_core.cjs.production.js.map +1 -1
- package/dist/{convertQuery-BoMPXL7_.js → convertQuery-BJKNgecE.js} +2 -2
- package/dist/{convertQuery-BoMPXL7_.js.map → convertQuery-BJKNgecE.js.map} +1 -1
- package/dist/{convertQuery-CQwOrjQr.mjs → convertQuery-J1CaoDxe.mjs} +2 -2
- package/dist/{convertQuery-CQwOrjQr.mjs.map → convertQuery-J1CaoDxe.mjs.map} +1 -1
- package/dist/formatQuery.d.mts +2 -2
- package/dist/formatQuery.d.ts +2 -2
- package/dist/formatQuery.js +195 -197
- package/dist/formatQuery.js.map +1 -1
- package/dist/formatQuery.mjs +195 -197
- package/dist/formatQuery.mjs.map +1 -1
- package/dist/{objectUtils-DxVaGCdg.js → objectUtils-DBJI82bl.js} +2 -2
- package/dist/objectUtils-DBJI82bl.js.map +1 -0
- package/dist/{objectUtils-D-w8MzpZ.mjs → objectUtils-ZvPkF6u6.mjs} +2 -2
- package/dist/objectUtils-ZvPkF6u6.mjs.map +1 -0
- package/dist/parseCEL.js +3 -3
- package/dist/parseCEL.js.map +1 -1
- package/dist/parseCEL.mjs +3 -3
- package/dist/parseCEL.mjs.map +1 -1
- package/dist/parseCypher.js.map +1 -1
- package/dist/parseCypher.mjs.map +1 -1
- package/dist/parseGremlin.js.map +1 -1
- package/dist/parseGremlin.mjs.map +1 -1
- package/dist/parseJSONata.js +2 -2
- package/dist/parseJSONata.js.map +1 -1
- package/dist/parseJSONata.mjs +2 -2
- package/dist/parseJSONata.mjs.map +1 -1
- package/dist/parseJsonLogic.js +4 -4
- package/dist/parseJsonLogic.js.map +1 -1
- package/dist/parseJsonLogic.mjs +4 -4
- package/dist/parseJsonLogic.mjs.map +1 -1
- package/dist/parseMongoDB.js +4 -4
- package/dist/parseMongoDB.js.map +1 -1
- package/dist/parseMongoDB.mjs +4 -4
- package/dist/parseMongoDB.mjs.map +1 -1
- package/dist/parseSPARQL.js.map +1 -1
- package/dist/parseSPARQL.mjs.map +1 -1
- package/dist/parseSQL.js +3 -3
- package/dist/parseSQL.js.map +1 -1
- package/dist/parseSQL.mjs +3 -3
- package/dist/parseSQL.mjs.map +1 -1
- package/dist/parseSpEL.js +3 -3
- package/dist/parseSpEL.js.map +1 -1
- package/dist/parseSpEL.mjs +3 -3
- package/dist/parseSpEL.mjs.map +1 -1
- package/dist/{prepareQueryObjects-BXf5aV-A.mjs → prepareQueryObjects-Cd_tt4oy.mjs} +3 -3
- package/dist/{prepareQueryObjects-BXf5aV-A.mjs.map → prepareQueryObjects-Cd_tt4oy.mjs.map} +1 -1
- package/dist/{prepareQueryObjects-gRQqiBPR.js → prepareQueryObjects-DaAXX792.js} +3 -3
- package/dist/{prepareQueryObjects-gRQqiBPR.js.map → prepareQueryObjects-DaAXX792.js.map} +1 -1
- package/dist/react-querybuilder_core.d.mts +24 -21
- package/dist/react-querybuilder_core.legacy-esm.d.ts +24 -21
- package/dist/react-querybuilder_core.legacy-esm.js +221 -236
- package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
- package/dist/react-querybuilder_core.mjs +222 -238
- package/dist/react-querybuilder_core.mjs.map +1 -1
- package/dist/react-querybuilder_core.production.d.mts +24 -21
- package/dist/react-querybuilder_core.production.mjs +1 -1
- package/dist/react-querybuilder_core.production.mjs.map +1 -1
- package/dist/transformQuery.js +1 -1
- package/dist/transformQuery.mjs +1 -1
- package/dist/{utils-ZlKseh1X.js → utils-BpaOtylk.js} +3 -3
- package/dist/utils-BpaOtylk.js.map +1 -0
- package/dist/{utils-01WaTGBL.mjs → utils-CJRGiPb-.mjs} +3 -3
- package/dist/utils-CJRGiPb-.mjs.map +1 -0
- package/package.json +10 -9
- package/dist/objectUtils-D-w8MzpZ.mjs.map +0 -1
- package/dist/objectUtils-DxVaGCdg.js.map +0 -1
- package/dist/utils-01WaTGBL.mjs.map +0 -1
- package/dist/utils-ZlKseh1X.js.map +0 -1
|
@@ -429,7 +429,8 @@ const standardClassnames = {
|
|
|
429
429
|
branches: "queryBuilder-branches",
|
|
430
430
|
justified: "queryBuilder-justified",
|
|
431
431
|
hasSubQuery: "rule-hasSubQuery",
|
|
432
|
-
loading: "queryBuilder-loading"
|
|
432
|
+
loading: "queryBuilder-loading",
|
|
433
|
+
valueDateTimeRelative: "rule-value-dateTimeRelative"
|
|
433
434
|
};
|
|
434
435
|
/**
|
|
435
436
|
* Default classnames for each component.
|
|
@@ -479,7 +480,8 @@ const defaultControlClassnames = {
|
|
|
479
480
|
valueListItem: "",
|
|
480
481
|
branches: "",
|
|
481
482
|
hasSubQuery: "",
|
|
482
|
-
loading: ""
|
|
483
|
+
loading: "",
|
|
484
|
+
valueDateTimeRelative: ""
|
|
483
485
|
};
|
|
484
486
|
/**
|
|
485
487
|
* Default reason codes for a group being invalid.
|
|
@@ -612,51 +614,25 @@ const trimIfString = (val) => typeof val === "string" ? val.trim() : val;
|
|
|
612
614
|
* Splits a string by comma then trims each element. Arrays are returned as is except
|
|
613
615
|
* any string elements are trimmed.
|
|
614
616
|
*/
|
|
615
|
-
const toArray = (a, { retainEmptyStrings } = {}) => Array.isArray(a) ? a.map(
|
|
617
|
+
const toArray = (a, { retainEmptyStrings } = {}) => Array.isArray(a) ? a.map(trimIfString) : typeof a === "string" ? splitBy(a, ",").filter(retainEmptyStrings ? () => true : (s) => !/^\s*$/.test(s)).map((s) => s.trim()) : typeof a === "number" ? [a] : [];
|
|
616
618
|
/**
|
|
617
619
|
* Determines if an array is free of `null`/`undefined`.
|
|
618
620
|
*/
|
|
619
621
|
const nullFreeArray = (arr) => arr.every((el) => el === false || (el !== null && el !== void 0 ? el : false) !== false);
|
|
620
622
|
//#endregion
|
|
621
|
-
//#region
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
else
|
|
629
|
-
|
|
630
|
-
const len = mix.length;
|
|
631
|
-
for (k = 0; k < len; k++) if (mix[k] && (y = toVal(mix[k]))) {
|
|
632
|
-
str && (str += " ");
|
|
633
|
-
str += y;
|
|
634
|
-
}
|
|
635
|
-
} else for (y in mix) if (mix[y]) {
|
|
636
|
-
str && (str += " ");
|
|
637
|
-
str += y;
|
|
638
|
-
}
|
|
639
|
-
}
|
|
640
|
-
return str;
|
|
623
|
+
//#region ../../node_modules/clsx/dist/clsx.mjs
|
|
624
|
+
function r(e) {
|
|
625
|
+
var t, f, n = "";
|
|
626
|
+
if ("string" == typeof e || "number" == typeof e) n += e;
|
|
627
|
+
else if ("object" == typeof e) if (Array.isArray(e)) {
|
|
628
|
+
var o = e.length;
|
|
629
|
+
for (t = 0; t < o; t++) e[t] && (f = r(e[t])) && (n && (n += " "), n += f);
|
|
630
|
+
} else for (f in e) e[f] && (n && (n += " "), n += f);
|
|
631
|
+
return n;
|
|
641
632
|
}
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
*
|
|
646
|
-
* **NOTE:** Prefer the official package from npm outside the context of React Query Builder.
|
|
647
|
-
*/
|
|
648
|
-
// v8 ignore next
|
|
649
|
-
function clsx(...args) {
|
|
650
|
-
let i = 0;
|
|
651
|
-
let tmp;
|
|
652
|
-
let x;
|
|
653
|
-
let str = "";
|
|
654
|
-
const len = args.length;
|
|
655
|
-
for (; i < len; i++) if ((tmp = args[i]) && (x = toVal(tmp))) {
|
|
656
|
-
str && (str += " ");
|
|
657
|
-
str += x;
|
|
658
|
-
}
|
|
659
|
-
return str;
|
|
633
|
+
function clsx() {
|
|
634
|
+
for (var e, t, f = 0, n = "", o = arguments.length; f < o; f++) (e = arguments[f]) && (t = r(e)) && (n && (n += " "), n += t);
|
|
635
|
+
return n;
|
|
660
636
|
}
|
|
661
637
|
//#endregion
|
|
662
638
|
//#region src/utils/misc.ts
|
|
@@ -673,7 +649,7 @@ const numericRegex = new RegExp(numericRegex$1.source.replace(/^\^/, String.raw`
|
|
|
673
649
|
/**
|
|
674
650
|
* Determines if a variable is a plain old JavaScript object, aka POJO.
|
|
675
651
|
*/
|
|
676
|
-
const isPojo = (obj) => obj
|
|
652
|
+
const isPojo = (obj) => obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype;
|
|
677
653
|
/**
|
|
678
654
|
* Simple helper to determine whether a value is null, undefined, or an empty string.
|
|
679
655
|
*/
|
|
@@ -697,7 +673,7 @@ const isRuleGroupType = (rg) => isRuleGroup(rg) && typeof rg.combinator === "str
|
|
|
697
673
|
*/
|
|
698
674
|
const isRuleGroupTypeIC = (rg) => isRuleGroup(rg) && rg.combinator === void 0;
|
|
699
675
|
//#endregion
|
|
700
|
-
//#region \0@oxc-project+runtime@0.
|
|
676
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/typeof.js
|
|
701
677
|
function _typeof(o) {
|
|
702
678
|
"@babel/helpers - typeof";
|
|
703
679
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
|
@@ -707,7 +683,7 @@ function _typeof(o) {
|
|
|
707
683
|
}, _typeof(o);
|
|
708
684
|
}
|
|
709
685
|
//#endregion
|
|
710
|
-
//#region \0@oxc-project+runtime@0.
|
|
686
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/toPrimitive.js
|
|
711
687
|
function toPrimitive(t, r) {
|
|
712
688
|
if ("object" != _typeof(t) || !t) return t;
|
|
713
689
|
var e = t[Symbol.toPrimitive];
|
|
@@ -719,13 +695,13 @@ function toPrimitive(t, r) {
|
|
|
719
695
|
return ("string" === r ? String : Number)(t);
|
|
720
696
|
}
|
|
721
697
|
//#endregion
|
|
722
|
-
//#region \0@oxc-project+runtime@0.
|
|
698
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/toPropertyKey.js
|
|
723
699
|
function toPropertyKey(t) {
|
|
724
700
|
var i = toPrimitive(t, "string");
|
|
725
701
|
return "symbol" == _typeof(i) ? i : i + "";
|
|
726
702
|
}
|
|
727
703
|
//#endregion
|
|
728
|
-
//#region \0@oxc-project+runtime@0.
|
|
704
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/defineProperty.js
|
|
729
705
|
function _defineProperty(e, r, t) {
|
|
730
706
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
731
707
|
value: t,
|
|
@@ -735,7 +711,7 @@ function _defineProperty(e, r, t) {
|
|
|
735
711
|
}) : e[r] = t, e;
|
|
736
712
|
}
|
|
737
713
|
//#endregion
|
|
738
|
-
//#region \0@oxc-project+runtime@0.
|
|
714
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/objectSpread2.js
|
|
739
715
|
function ownKeys(e, r) {
|
|
740
716
|
var t = Object.keys(e);
|
|
741
717
|
if (Object.getOwnPropertySymbols) {
|
|
@@ -758,7 +734,7 @@ function _objectSpread2(e) {
|
|
|
758
734
|
return e;
|
|
759
735
|
}
|
|
760
736
|
//#endregion
|
|
761
|
-
//#region \0@oxc-project+runtime@0.
|
|
737
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/objectWithoutPropertiesLoose.js
|
|
762
738
|
function _objectWithoutPropertiesLoose(r, e) {
|
|
763
739
|
if (null == r) return {};
|
|
764
740
|
var t = {};
|
|
@@ -769,7 +745,7 @@ function _objectWithoutPropertiesLoose(r, e) {
|
|
|
769
745
|
return t;
|
|
770
746
|
}
|
|
771
747
|
//#endregion
|
|
772
|
-
//#region \0@oxc-project+runtime@0.
|
|
748
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/objectWithoutProperties.js
|
|
773
749
|
function _objectWithoutProperties(e, t) {
|
|
774
750
|
if (null == e) return {};
|
|
775
751
|
var o, r, i = _objectWithoutPropertiesLoose(e, t);
|
|
@@ -2064,97 +2040,6 @@ const defaultRuleGroupProcessorCypher = (ruleGroup, options) => {
|
|
|
2064
2040
|
return processRuleGroup(ruleGroup, true);
|
|
2065
2041
|
};
|
|
2066
2042
|
//#endregion
|
|
2067
|
-
//#region src/utils/formatQuery/defaultRuleProcessorDrizzle.ts
|
|
2068
|
-
/**
|
|
2069
|
-
* Default rule processor used by {@link formatQuery} for the "drizzle" format.
|
|
2070
|
-
*
|
|
2071
|
-
* @group Export
|
|
2072
|
-
*/
|
|
2073
|
-
const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
2074
|
-
const opts = _options !== null && _options !== void 0 ? _options : /* v8 ignore start -- @preserve */ {};
|
|
2075
|
-
// v8 ignore next
|
|
2076
|
-
const { parseNumbers, preserveValueOrder, context = {} } = opts;
|
|
2077
|
-
const { columns, drizzleOperators, useRawFields } = context;
|
|
2078
|
-
if (!columns || !drizzleOperators) return void 0;
|
|
2079
|
-
const { between, eq, gt, gte, inArray, isNotNull, isNull, like, lt, lte, ne, notBetween, notInArray, notLike, sql } = drizzleOperators;
|
|
2080
|
-
const { field, operator, value, valueSource } = rule;
|
|
2081
|
-
const column = useRawFields && /^[a-z_][a-z0-9_.]*$/i.test(field) ? sql.raw(field) : columns[field];
|
|
2082
|
-
const operatorLC = lc(operator);
|
|
2083
|
-
const valueIsField = valueSource === "field";
|
|
2084
|
-
const asFieldOrValue = (v) => valueIsField ? columns[v] : v;
|
|
2085
|
-
const maybeParseNumber = (v) => {
|
|
2086
|
-
if (valueIsField || !parseNumbers) return asFieldOrValue(v);
|
|
2087
|
-
return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;
|
|
2088
|
-
};
|
|
2089
|
-
if (!column) return void 0;
|
|
2090
|
-
const matchEval = processMatchMode(rule);
|
|
2091
|
-
if (matchEval === false) return;
|
|
2092
|
-
else if (matchEval) {
|
|
2093
|
-
if (opts.preset !== "postgresql") return void 0;
|
|
2094
|
-
const { mode, threshold } = matchEval;
|
|
2095
|
-
const arrayElementAlias = "elem_alias";
|
|
2096
|
-
const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(transformQuery(rule.value, { ruleProcessor: (r) => _objectSpread2(_objectSpread2({}, r), {}, { field: arrayElementAlias }) }), _objectSpread2(_objectSpread2({}, opts), {}, { context: _objectSpread2(_objectSpread2({}, opts.context), {}, { useRawFields: true }) }));
|
|
2097
|
-
switch (mode) {
|
|
2098
|
-
case "all": return sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) = array_length(${column}, 1)`;
|
|
2099
|
-
case "none": return sql`not exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
|
|
2100
|
-
case "some": return sql`exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
|
|
2101
|
-
case "atleast":
|
|
2102
|
-
case "atmost":
|
|
2103
|
-
case "exactly": {
|
|
2104
|
-
const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "=";
|
|
2105
|
-
return threshold > 0 && threshold < 1 ? sql`(select count(*)::float / array_length(${column}, 1) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}` : sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}`;
|
|
2106
|
-
}
|
|
2107
|
-
}
|
|
2108
|
-
}
|
|
2109
|
-
switch (operatorLC) {
|
|
2110
|
-
case "=": return eq(column, maybeParseNumber(value));
|
|
2111
|
-
case "!=": return ne(column, maybeParseNumber(value));
|
|
2112
|
-
case ">": return gt(column, maybeParseNumber(value));
|
|
2113
|
-
case "<": return lt(column, maybeParseNumber(value));
|
|
2114
|
-
case ">=": return gte(column, maybeParseNumber(value));
|
|
2115
|
-
case "<=": return lte(column, maybeParseNumber(value));
|
|
2116
|
-
case "beginswith":
|
|
2117
|
-
case "doesnotbeginwith": return (operatorLC === "doesnotbeginwith" ? notLike : like)(column, valueIsField ? sql`${asFieldOrValue(value)} || '%'` : `${value}%`);
|
|
2118
|
-
case "contains":
|
|
2119
|
-
case "doesnotcontain": return (operatorLC === "doesnotcontain" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)} || '%'` : `%${value}%`);
|
|
2120
|
-
case "endswith":
|
|
2121
|
-
case "doesnotendwith": return (operatorLC === "doesnotendwith" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)}` : `%${value}`);
|
|
2122
|
-
case "null": return isNull(column);
|
|
2123
|
-
case "notnull": return isNotNull(column);
|
|
2124
|
-
case "in":
|
|
2125
|
-
case "notin": {
|
|
2126
|
-
const valueAsArray = toArray(value).map((v) => maybeParseNumber(v));
|
|
2127
|
-
return operatorLC === "notin" ? notInArray(column, valueAsArray) : inArray(column, valueAsArray);
|
|
2128
|
-
}
|
|
2129
|
-
case "between":
|
|
2130
|
-
case "notbetween": {
|
|
2131
|
-
const valueAsArray = toArray(value);
|
|
2132
|
-
if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
|
|
2133
|
-
let [first, second] = valueAsArray;
|
|
2134
|
-
const shouldParseNumbers = !(parseNumbers === false);
|
|
2135
|
-
if (!valueIsField && shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
2136
|
-
const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
2137
|
-
const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
2138
|
-
if (!preserveValueOrder && secondNum < firstNum) {
|
|
2139
|
-
const tempNum = secondNum;
|
|
2140
|
-
second = firstNum;
|
|
2141
|
-
first = tempNum;
|
|
2142
|
-
} else {
|
|
2143
|
-
first = firstNum;
|
|
2144
|
-
second = secondNum;
|
|
2145
|
-
}
|
|
2146
|
-
} else if (valueIsField) {
|
|
2147
|
-
first = asFieldOrValue(first);
|
|
2148
|
-
second = asFieldOrValue(second);
|
|
2149
|
-
}
|
|
2150
|
-
return operatorLC === "notbetween" ? notBetween(column, first, second) : between(column, first, second);
|
|
2151
|
-
}
|
|
2152
|
-
return;
|
|
2153
|
-
}
|
|
2154
|
-
default: return;
|
|
2155
|
-
}
|
|
2156
|
-
};
|
|
2157
|
-
//#endregion
|
|
2158
2043
|
//#region src/utils/formatQuery/defaultRuleGroupProcessorDrizzle.ts
|
|
2159
2044
|
/**
|
|
2160
2045
|
* Default rule group processor used by {@link formatQuery} for the "drizzle" format. The returned
|
|
@@ -2169,10 +2054,9 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
|
2169
2054
|
* @group Export
|
|
2170
2055
|
*/
|
|
2171
2056
|
const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns, drizzleOperators) => {
|
|
2172
|
-
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap } = options;
|
|
2057
|
+
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, ruleProcessor } = options;
|
|
2173
2058
|
if (!columns || !drizzleOperators) return void 0;
|
|
2174
2059
|
const { and, not, or } = drizzleOperators;
|
|
2175
|
-
const ruleProcessor = defaultRuleProcessorDrizzle;
|
|
2176
2060
|
const processRuleGroup = (rg, _outermost) => {
|
|
2177
2061
|
var _rg$id;
|
|
2178
2062
|
if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return;
|
|
@@ -2798,96 +2682,6 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
|
|
|
2798
2682
|
return processRuleGroup(ruleGroup, true);
|
|
2799
2683
|
};
|
|
2800
2684
|
//#endregion
|
|
2801
|
-
//#region src/utils/formatQuery/defaultRuleProcessorTanStackDB.ts
|
|
2802
|
-
/**
|
|
2803
|
-
* Default rule processor used by {@link formatQuery} for the "tanstack_db" format.
|
|
2804
|
-
*
|
|
2805
|
-
* @group Export
|
|
2806
|
-
*/
|
|
2807
|
-
const defaultRuleProcessorTanStackDB = (rule, _options) => {
|
|
2808
|
-
const { parseNumbers, preserveValueOrder, context = {} } = _options !== null && _options !== void 0 ? _options : /* v8 ignore start -- @preserve */ {};
|
|
2809
|
-
const ops = context.tanStackDbOperators;
|
|
2810
|
-
const refs = context._tanstackDbRefs;
|
|
2811
|
-
const primaryRef = context._tanstackDbPrimaryRef;
|
|
2812
|
-
if (!ops || !refs || !primaryRef) return void 0;
|
|
2813
|
-
const { and, eq, gt, gte, inArray, isNull, like, lt, lte, not } = ops;
|
|
2814
|
-
const resolveField = (fieldName) => {
|
|
2815
|
-
const dotIdx = fieldName.indexOf(".");
|
|
2816
|
-
if (dotIdx > 0) {
|
|
2817
|
-
const prefix = fieldName.slice(0, dotIdx);
|
|
2818
|
-
const rest = fieldName.slice(dotIdx + 1);
|
|
2819
|
-
if (refs[prefix]) return refs[prefix][rest];
|
|
2820
|
-
}
|
|
2821
|
-
return refs[primaryRef][fieldName];
|
|
2822
|
-
};
|
|
2823
|
-
const { field, operator, value, valueSource } = rule;
|
|
2824
|
-
const column = resolveField(field);
|
|
2825
|
-
const operatorLC = lc(operator);
|
|
2826
|
-
const valueIsField = valueSource === "field";
|
|
2827
|
-
const asFieldOrValue = (v) => valueIsField ? resolveField(v) : v;
|
|
2828
|
-
const maybeParseNumber = (v) => {
|
|
2829
|
-
if (valueIsField || !parseNumbers) return asFieldOrValue(v);
|
|
2830
|
-
return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;
|
|
2831
|
-
};
|
|
2832
|
-
switch (operatorLC) {
|
|
2833
|
-
case "=": return eq(column, maybeParseNumber(value));
|
|
2834
|
-
case "!=": return not(eq(column, maybeParseNumber(value)));
|
|
2835
|
-
case ">": return gt(column, maybeParseNumber(value));
|
|
2836
|
-
case "<": return lt(column, maybeParseNumber(value));
|
|
2837
|
-
case ">=": return gte(column, maybeParseNumber(value));
|
|
2838
|
-
case "<=": return lte(column, maybeParseNumber(value));
|
|
2839
|
-
case "beginswith":
|
|
2840
|
-
case "doesnotbeginwith": {
|
|
2841
|
-
const expr = like(column, valueIsField ? void 0 : `${value}%`);
|
|
2842
|
-
return operatorLC === "doesnotbeginwith" ? not(expr) : expr;
|
|
2843
|
-
}
|
|
2844
|
-
case "contains":
|
|
2845
|
-
case "doesnotcontain": {
|
|
2846
|
-
const expr = like(column, valueIsField ? void 0 : `%${value}%`);
|
|
2847
|
-
return operatorLC === "doesnotcontain" ? not(expr) : expr;
|
|
2848
|
-
}
|
|
2849
|
-
case "endswith":
|
|
2850
|
-
case "doesnotendwith": {
|
|
2851
|
-
const expr = like(column, valueIsField ? void 0 : `%${value}`);
|
|
2852
|
-
return operatorLC === "doesnotendwith" ? not(expr) : expr;
|
|
2853
|
-
}
|
|
2854
|
-
case "null": return isNull(column);
|
|
2855
|
-
case "notnull": return not(isNull(column));
|
|
2856
|
-
case "in":
|
|
2857
|
-
case "notin": {
|
|
2858
|
-
const expr = inArray(column, toArray(value).map((v) => maybeParseNumber(v)));
|
|
2859
|
-
return operatorLC === "notin" ? not(expr) : expr;
|
|
2860
|
-
}
|
|
2861
|
-
case "between":
|
|
2862
|
-
case "notbetween": {
|
|
2863
|
-
const valueAsArray = toArray(value);
|
|
2864
|
-
if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
|
|
2865
|
-
let [first, second] = valueAsArray;
|
|
2866
|
-
const shouldParseNumbers = !(parseNumbers === false);
|
|
2867
|
-
if (!valueIsField && shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
2868
|
-
const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
2869
|
-
const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
2870
|
-
if (!preserveValueOrder && secondNum < firstNum) {
|
|
2871
|
-
const tempNum = secondNum;
|
|
2872
|
-
second = firstNum;
|
|
2873
|
-
first = tempNum;
|
|
2874
|
-
} else {
|
|
2875
|
-
first = firstNum;
|
|
2876
|
-
second = secondNum;
|
|
2877
|
-
}
|
|
2878
|
-
} else if (valueIsField) {
|
|
2879
|
-
first = asFieldOrValue(first);
|
|
2880
|
-
second = asFieldOrValue(second);
|
|
2881
|
-
}
|
|
2882
|
-
const expr = and(gte(column, first), lte(column, second));
|
|
2883
|
-
return operatorLC === "notbetween" ? not(expr) : expr;
|
|
2884
|
-
}
|
|
2885
|
-
return;
|
|
2886
|
-
}
|
|
2887
|
-
default: return;
|
|
2888
|
-
}
|
|
2889
|
-
};
|
|
2890
|
-
//#endregion
|
|
2891
2685
|
//#region src/utils/formatQuery/defaultRuleGroupProcessorTanStackDB.ts
|
|
2892
2686
|
/**
|
|
2893
2687
|
* Default rule group processor used by {@link formatQuery} for the "tanstack_db" format.
|
|
@@ -2901,7 +2695,7 @@ const defaultRuleProcessorTanStackDB = (rule, _options) => {
|
|
|
2901
2695
|
*/
|
|
2902
2696
|
const defaultRuleGroupProcessorTanStackDB = (ruleGroup, options) => (refs) => {
|
|
2903
2697
|
var _processRuleGroup;
|
|
2904
|
-
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, context = {} } = options;
|
|
2698
|
+
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, context = {}, ruleProcessor } = options;
|
|
2905
2699
|
const ops = context.tanStackDbOperators;
|
|
2906
2700
|
if (!ops) return void 0;
|
|
2907
2701
|
const { and, eq, not, or } = ops;
|
|
@@ -2909,7 +2703,6 @@ const defaultRuleGroupProcessorTanStackDB = (ruleGroup, options) => (refs) => {
|
|
|
2909
2703
|
const refKeys = Object.keys(refs);
|
|
2910
2704
|
/* v8 ignore next -- @preserve */
|
|
2911
2705
|
if (refKeys.length === 0) return fallback;
|
|
2912
|
-
const ruleProcessor = defaultRuleProcessorTanStackDB;
|
|
2913
2706
|
const processRuleGroup = (rg) => {
|
|
2914
2707
|
var _rg$id;
|
|
2915
2708
|
if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return;
|
|
@@ -3305,6 +3098,97 @@ const defaultRuleProcessorCypher = (rule, opts = {}) => {
|
|
|
3305
3098
|
}
|
|
3306
3099
|
};
|
|
3307
3100
|
//#endregion
|
|
3101
|
+
//#region src/utils/formatQuery/defaultRuleProcessorDrizzle.ts
|
|
3102
|
+
/**
|
|
3103
|
+
* Default rule processor used by {@link formatQuery} for the "drizzle" format.
|
|
3104
|
+
*
|
|
3105
|
+
* @group Export
|
|
3106
|
+
*/
|
|
3107
|
+
const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
3108
|
+
const opts = _options !== null && _options !== void 0 ? _options : /* v8 ignore start -- @preserve */ {};
|
|
3109
|
+
// v8 ignore next
|
|
3110
|
+
const { parseNumbers, preserveValueOrder, context = {} } = opts;
|
|
3111
|
+
const { columns, drizzleOperators, useRawFields } = context;
|
|
3112
|
+
if (!columns || !drizzleOperators) return void 0;
|
|
3113
|
+
const { between, eq, gt, gte, inArray, isNotNull, isNull, like, lt, lte, ne, notBetween, notInArray, notLike, sql } = drizzleOperators;
|
|
3114
|
+
const { field, operator, value, valueSource } = rule;
|
|
3115
|
+
const column = useRawFields && /^[a-z_][a-z0-9_.]*$/i.test(field) ? sql.raw(field) : columns[field];
|
|
3116
|
+
const operatorLC = lc(operator);
|
|
3117
|
+
const valueIsField = valueSource === "field";
|
|
3118
|
+
const asFieldOrValue = (v) => valueIsField ? columns[v] : v;
|
|
3119
|
+
const maybeParseNumber = (v) => {
|
|
3120
|
+
if (valueIsField || !parseNumbers) return asFieldOrValue(v);
|
|
3121
|
+
return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;
|
|
3122
|
+
};
|
|
3123
|
+
if (!column) return void 0;
|
|
3124
|
+
const matchEval = processMatchMode(rule);
|
|
3125
|
+
if (matchEval === false) return;
|
|
3126
|
+
else if (matchEval) {
|
|
3127
|
+
if (opts.preset !== "postgresql") return void 0;
|
|
3128
|
+
const { mode, threshold } = matchEval;
|
|
3129
|
+
const arrayElementAlias = "elem_alias";
|
|
3130
|
+
const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(transformQuery(rule.value, { ruleProcessor: (r) => _objectSpread2(_objectSpread2({}, r), {}, { field: arrayElementAlias }) }), _objectSpread2(_objectSpread2({}, opts), {}, { context: _objectSpread2(_objectSpread2({}, opts.context), {}, { useRawFields: true }) }));
|
|
3131
|
+
switch (mode) {
|
|
3132
|
+
case "all": return sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) = array_length(${column}, 1)`;
|
|
3133
|
+
case "none": return sql`not exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
|
|
3134
|
+
case "some": return sql`exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
|
|
3135
|
+
case "atleast":
|
|
3136
|
+
case "atmost":
|
|
3137
|
+
case "exactly": {
|
|
3138
|
+
const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "=";
|
|
3139
|
+
return threshold > 0 && threshold < 1 ? sql`(select count(*)::float / array_length(${column}, 1) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}` : sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) ${sql.raw(`${op} ${threshold}`)}`;
|
|
3140
|
+
}
|
|
3141
|
+
}
|
|
3142
|
+
}
|
|
3143
|
+
switch (operatorLC) {
|
|
3144
|
+
case "=": return eq(column, maybeParseNumber(value));
|
|
3145
|
+
case "!=": return ne(column, maybeParseNumber(value));
|
|
3146
|
+
case ">": return gt(column, maybeParseNumber(value));
|
|
3147
|
+
case "<": return lt(column, maybeParseNumber(value));
|
|
3148
|
+
case ">=": return gte(column, maybeParseNumber(value));
|
|
3149
|
+
case "<=": return lte(column, maybeParseNumber(value));
|
|
3150
|
+
case "beginswith":
|
|
3151
|
+
case "doesnotbeginwith": return (operatorLC === "doesnotbeginwith" ? notLike : like)(column, valueIsField ? sql`${asFieldOrValue(value)} || '%'` : `${value}%`);
|
|
3152
|
+
case "contains":
|
|
3153
|
+
case "doesnotcontain": return (operatorLC === "doesnotcontain" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)} || '%'` : `%${value}%`);
|
|
3154
|
+
case "endswith":
|
|
3155
|
+
case "doesnotendwith": return (operatorLC === "doesnotendwith" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)}` : `%${value}`);
|
|
3156
|
+
case "null": return isNull(column);
|
|
3157
|
+
case "notnull": return isNotNull(column);
|
|
3158
|
+
case "in":
|
|
3159
|
+
case "notin": {
|
|
3160
|
+
const valueAsArray = toArray(value).map((v) => maybeParseNumber(v));
|
|
3161
|
+
return operatorLC === "notin" ? notInArray(column, valueAsArray) : inArray(column, valueAsArray);
|
|
3162
|
+
}
|
|
3163
|
+
case "between":
|
|
3164
|
+
case "notbetween": {
|
|
3165
|
+
const valueAsArray = toArray(value);
|
|
3166
|
+
if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
|
|
3167
|
+
let [first, second] = valueAsArray;
|
|
3168
|
+
const shouldParseNumbers = !(parseNumbers === false);
|
|
3169
|
+
if (!valueIsField && shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
3170
|
+
const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
3171
|
+
const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
3172
|
+
if (!preserveValueOrder && secondNum < firstNum) {
|
|
3173
|
+
const tempNum = secondNum;
|
|
3174
|
+
second = firstNum;
|
|
3175
|
+
first = tempNum;
|
|
3176
|
+
} else {
|
|
3177
|
+
first = firstNum;
|
|
3178
|
+
second = secondNum;
|
|
3179
|
+
}
|
|
3180
|
+
} else if (valueIsField) {
|
|
3181
|
+
first = asFieldOrValue(first);
|
|
3182
|
+
second = asFieldOrValue(second);
|
|
3183
|
+
}
|
|
3184
|
+
return operatorLC === "notbetween" ? notBetween(column, first, second) : between(column, first, second);
|
|
3185
|
+
}
|
|
3186
|
+
return;
|
|
3187
|
+
}
|
|
3188
|
+
default: return;
|
|
3189
|
+
}
|
|
3190
|
+
};
|
|
3191
|
+
//#endregion
|
|
3308
3192
|
//#region src/utils/formatQuery/defaultRuleProcessorElasticSearch.ts
|
|
3309
3193
|
const rangeOperatorMap = {
|
|
3310
3194
|
"<": "lt",
|
|
@@ -4266,6 +4150,96 @@ const defaultRuleProcessorSPARQL = (rule, opts = {}) => {
|
|
|
4266
4150
|
}
|
|
4267
4151
|
};
|
|
4268
4152
|
//#endregion
|
|
4153
|
+
//#region src/utils/formatQuery/defaultRuleProcessorTanStackDB.ts
|
|
4154
|
+
/**
|
|
4155
|
+
* Default rule processor used by {@link formatQuery} for the "tanstack_db" format.
|
|
4156
|
+
*
|
|
4157
|
+
* @group Export
|
|
4158
|
+
*/
|
|
4159
|
+
const defaultRuleProcessorTanStackDB = (rule, _options) => {
|
|
4160
|
+
const { parseNumbers, preserveValueOrder, context = {} } = _options !== null && _options !== void 0 ? _options : /* v8 ignore start -- @preserve */ {};
|
|
4161
|
+
const ops = context.tanStackDbOperators;
|
|
4162
|
+
const refs = context._tanstackDbRefs;
|
|
4163
|
+
const primaryRef = context._tanstackDbPrimaryRef;
|
|
4164
|
+
if (!ops || !refs || !primaryRef) return void 0;
|
|
4165
|
+
const { and, eq, gt, gte, inArray, isNull, like, lt, lte, not } = ops;
|
|
4166
|
+
const resolveField = (fieldName) => {
|
|
4167
|
+
const dotIdx = fieldName.indexOf(".");
|
|
4168
|
+
if (dotIdx > 0) {
|
|
4169
|
+
const prefix = fieldName.slice(0, dotIdx);
|
|
4170
|
+
const rest = fieldName.slice(dotIdx + 1);
|
|
4171
|
+
if (refs[prefix]) return refs[prefix][rest];
|
|
4172
|
+
}
|
|
4173
|
+
return refs[primaryRef][fieldName];
|
|
4174
|
+
};
|
|
4175
|
+
const { field, operator, value, valueSource } = rule;
|
|
4176
|
+
const column = resolveField(field);
|
|
4177
|
+
const operatorLC = lc(operator);
|
|
4178
|
+
const valueIsField = valueSource === "field";
|
|
4179
|
+
const asFieldOrValue = (v) => valueIsField ? resolveField(v) : v;
|
|
4180
|
+
const maybeParseNumber = (v) => {
|
|
4181
|
+
if (valueIsField || !parseNumbers) return asFieldOrValue(v);
|
|
4182
|
+
return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;
|
|
4183
|
+
};
|
|
4184
|
+
switch (operatorLC) {
|
|
4185
|
+
case "=": return eq(column, maybeParseNumber(value));
|
|
4186
|
+
case "!=": return not(eq(column, maybeParseNumber(value)));
|
|
4187
|
+
case ">": return gt(column, maybeParseNumber(value));
|
|
4188
|
+
case "<": return lt(column, maybeParseNumber(value));
|
|
4189
|
+
case ">=": return gte(column, maybeParseNumber(value));
|
|
4190
|
+
case "<=": return lte(column, maybeParseNumber(value));
|
|
4191
|
+
case "beginswith":
|
|
4192
|
+
case "doesnotbeginwith": {
|
|
4193
|
+
const expr = like(column, valueIsField ? void 0 : `${value}%`);
|
|
4194
|
+
return operatorLC === "doesnotbeginwith" ? not(expr) : expr;
|
|
4195
|
+
}
|
|
4196
|
+
case "contains":
|
|
4197
|
+
case "doesnotcontain": {
|
|
4198
|
+
const expr = like(column, valueIsField ? void 0 : `%${value}%`);
|
|
4199
|
+
return operatorLC === "doesnotcontain" ? not(expr) : expr;
|
|
4200
|
+
}
|
|
4201
|
+
case "endswith":
|
|
4202
|
+
case "doesnotendwith": {
|
|
4203
|
+
const expr = like(column, valueIsField ? void 0 : `%${value}`);
|
|
4204
|
+
return operatorLC === "doesnotendwith" ? not(expr) : expr;
|
|
4205
|
+
}
|
|
4206
|
+
case "null": return isNull(column);
|
|
4207
|
+
case "notnull": return not(isNull(column));
|
|
4208
|
+
case "in":
|
|
4209
|
+
case "notin": {
|
|
4210
|
+
const expr = inArray(column, toArray(value).map((v) => maybeParseNumber(v)));
|
|
4211
|
+
return operatorLC === "notin" ? not(expr) : expr;
|
|
4212
|
+
}
|
|
4213
|
+
case "between":
|
|
4214
|
+
case "notbetween": {
|
|
4215
|
+
const valueAsArray = toArray(value);
|
|
4216
|
+
if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
|
|
4217
|
+
let [first, second] = valueAsArray;
|
|
4218
|
+
const shouldParseNumbers = !(parseNumbers === false);
|
|
4219
|
+
if (!valueIsField && shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
4220
|
+
const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
4221
|
+
const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
4222
|
+
if (!preserveValueOrder && secondNum < firstNum) {
|
|
4223
|
+
const tempNum = secondNum;
|
|
4224
|
+
second = firstNum;
|
|
4225
|
+
first = tempNum;
|
|
4226
|
+
} else {
|
|
4227
|
+
first = firstNum;
|
|
4228
|
+
second = secondNum;
|
|
4229
|
+
}
|
|
4230
|
+
} else if (valueIsField) {
|
|
4231
|
+
first = asFieldOrValue(first);
|
|
4232
|
+
second = asFieldOrValue(second);
|
|
4233
|
+
}
|
|
4234
|
+
const expr = and(gte(column, first), lte(column, second));
|
|
4235
|
+
return operatorLC === "notbetween" ? not(expr) : expr;
|
|
4236
|
+
}
|
|
4237
|
+
return;
|
|
4238
|
+
}
|
|
4239
|
+
default: return;
|
|
4240
|
+
}
|
|
4241
|
+
};
|
|
4242
|
+
//#endregion
|
|
4269
4243
|
//#region src/utils/formatQuery/formatQuery.ts
|
|
4270
4244
|
/**
|
|
4271
4245
|
* A collection of option presets for {@link formatQuery}, specifically for SQL-based formats.
|
|
@@ -4795,7 +4769,17 @@ const mergeAnyTranslation = (el, keyPropContextMap, defaults) => {
|
|
|
4795
4769
|
};
|
|
4796
4770
|
//#endregion
|
|
4797
4771
|
//#region src/utils/mergeClassnames.ts
|
|
4798
|
-
const joinClassnamesByName = (name, args) =>
|
|
4772
|
+
const joinClassnamesByName = (name, args) => {
|
|
4773
|
+
let result = "";
|
|
4774
|
+
for (let i = 0; i < args.length; i++) {
|
|
4775
|
+
var _args$i;
|
|
4776
|
+
const v = (_args$i = args[i]) === null || _args$i === void 0 ? void 0 : _args$i[name];
|
|
4777
|
+
if (!v) continue;
|
|
4778
|
+
const s = typeof v === "string" ? v : clsx(v);
|
|
4779
|
+
if (s) result = result ? `${result} ${s}` : s;
|
|
4780
|
+
}
|
|
4781
|
+
return result;
|
|
4782
|
+
};
|
|
4799
4783
|
/**
|
|
4800
4784
|
* Merges a list of partial {@link Classnames} definitions into a single definition.
|
|
4801
4785
|
*/
|
|
@@ -4842,7 +4826,8 @@ const mergeClassnames = (...args) => ({
|
|
|
4842
4826
|
matchThreshold: joinClassnamesByName("matchThreshold", args),
|
|
4843
4827
|
branches: joinClassnamesByName("branches", args),
|
|
4844
4828
|
hasSubQuery: joinClassnamesByName("hasSubQuery", args),
|
|
4845
|
-
loading: joinClassnamesByName("loading", args)
|
|
4829
|
+
loading: joinClassnamesByName("loading", args),
|
|
4830
|
+
valueDateTimeRelative: joinClassnamesByName("valueDateTimeRelative", args)
|
|
4846
4831
|
});
|
|
4847
4832
|
//#endregion
|
|
4848
4833
|
//#region src/utils/preferProp.ts
|