@react-querybuilder/core 8.18.0 → 8.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/react-querybuilder_core.cjs.development.d.ts +21 -13
- package/dist/cjs/react-querybuilder_core.cjs.development.js +200 -199
- package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
- package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +21 -13
- 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 +21 -13
- package/dist/react-querybuilder_core.legacy-esm.d.ts +21 -13
- package/dist/react-querybuilder_core.legacy-esm.js +198 -197
- package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
- package/dist/react-querybuilder_core.mjs +200 -199
- package/dist/react-querybuilder_core.mjs.map +1 -1
- package/dist/react-querybuilder_core.production.d.mts +21 -13
- 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 +8 -8
- 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
|
@@ -2581,6 +2581,10 @@ interface Classnames {
|
|
|
2581
2581
|
* Classname(s) applied to async components in their "loading" state.
|
|
2582
2582
|
*/
|
|
2583
2583
|
loading: Classname;
|
|
2584
|
+
/**
|
|
2585
|
+
* Classname(s) applied to value editors for relative date/time values.
|
|
2586
|
+
*/
|
|
2587
|
+
valueDateTimeRelative: Classname;
|
|
2584
2588
|
}
|
|
2585
2589
|
/**
|
|
2586
2590
|
* Placeholder strings for option lists.
|
|
@@ -2948,6 +2952,7 @@ declare const standardClassnames: {
|
|
|
2948
2952
|
readonly justified: "queryBuilder-justified";
|
|
2949
2953
|
readonly hasSubQuery: "rule-hasSubQuery";
|
|
2950
2954
|
readonly loading: "queryBuilder-loading";
|
|
2955
|
+
readonly valueDateTimeRelative: "rule-value-dateTimeRelative";
|
|
2951
2956
|
};
|
|
2952
2957
|
/**
|
|
2953
2958
|
* Default classnames for each component.
|
|
@@ -3052,20 +3057,23 @@ declare const splitBy: (str?: string, splitChar?: string) => string[];
|
|
|
3052
3057
|
* // would return
|
|
3053
3058
|
* 'this\\,\\,that, , the other, , , \\,'
|
|
3054
3059
|
*/
|
|
3055
|
-
declare const joinWith: (strArr:
|
|
3060
|
+
declare const joinWith: (strArr: unknown[], joinChar?: string) => string;
|
|
3061
|
+
type IsUnknown<T> = unknown extends T ? true : false;
|
|
3062
|
+
type Trimmed<T> = IsUnknown<T> extends true ? string : T;
|
|
3056
3063
|
/**
|
|
3057
3064
|
* Trims the value if it is a string. Otherwise returns the value as is.
|
|
3058
3065
|
*/
|
|
3059
|
-
declare const trimIfString: (val:
|
|
3066
|
+
declare const trimIfString: <T>(val: T) => Trimmed<T>;
|
|
3067
|
+
type ToArrayResult<T> = IsUnknown<T> extends true ? string[] : T extends readonly (infer U)[] ? Trimmed<U>[] : T extends string ? string[] : T extends number ? number[] : never[];
|
|
3060
3068
|
/**
|
|
3061
3069
|
* Splits a string by comma then trims each element. Arrays are returned as is except
|
|
3062
3070
|
* any string elements are trimmed.
|
|
3063
3071
|
*/
|
|
3064
|
-
declare const toArray: (a:
|
|
3072
|
+
declare const toArray: <T>(a: T, {
|
|
3065
3073
|
retainEmptyStrings
|
|
3066
3074
|
}?: {
|
|
3067
3075
|
retainEmptyStrings?: boolean;
|
|
3068
|
-
}) =>
|
|
3076
|
+
}) => ToArrayResult<T>;
|
|
3069
3077
|
/**
|
|
3070
3078
|
* Determines if an array is free of `null`/`undefined`.
|
|
3071
3079
|
*/
|
|
@@ -3782,7 +3790,7 @@ declare const numerifyValues: (rg: RuleGroupTypeAny, options: SetRequired<Format
|
|
|
3782
3790
|
*
|
|
3783
3791
|
* @group Export
|
|
3784
3792
|
*/
|
|
3785
|
-
declare const isValidValue: (value:
|
|
3793
|
+
declare const isValidValue: (value: unknown) => boolean;
|
|
3786
3794
|
/**
|
|
3787
3795
|
* Determines whether {@link formatQuery} should render the given value as a number.
|
|
3788
3796
|
* As long as `parseNumbers` is `true`, `number` and `bigint` values will return `true` and
|
|
@@ -3790,7 +3798,7 @@ declare const isValidValue: (value: any) => boolean;
|
|
|
3790
3798
|
*
|
|
3791
3799
|
* @group Export
|
|
3792
3800
|
*/
|
|
3793
|
-
declare const shouldRenderAsNumber: (value:
|
|
3801
|
+
declare const shouldRenderAsNumber: (value: unknown, parseNumbers?: boolean) => boolean;
|
|
3794
3802
|
/**
|
|
3795
3803
|
* Used by {@link formatQuery} to determine whether the given value processor is a
|
|
3796
3804
|
* "legacy" value processor by counting the number of arguments. Legacy value
|
|
@@ -4053,7 +4061,7 @@ declare const numericRegex: RegExp;
|
|
|
4053
4061
|
/**
|
|
4054
4062
|
* Determines if a variable is a plain old JavaScript object, aka POJO.
|
|
4055
4063
|
*/
|
|
4056
|
-
declare const isPojo: (obj:
|
|
4064
|
+
declare const isPojo: (obj: unknown) => obj is Record<string, any>;
|
|
4057
4065
|
/**
|
|
4058
4066
|
* Simple helper to determine whether a value is null, undefined, or an empty string.
|
|
4059
4067
|
*/
|
|
@@ -4134,25 +4142,25 @@ declare const uniqByIdentifier: <T extends RequireAtLeastOne$1<{
|
|
|
4134
4142
|
*
|
|
4135
4143
|
* @group Option Lists
|
|
4136
4144
|
*/
|
|
4137
|
-
declare const isOptionGroupArray: (arr:
|
|
4145
|
+
declare const isOptionGroupArray: (arr: unknown) => arr is OptionGroup<BaseOption>[];
|
|
4138
4146
|
/**
|
|
4139
4147
|
* Determines if an array is a flat array of {@link FlexibleOption}.
|
|
4140
4148
|
*
|
|
4141
4149
|
* @group Option Lists
|
|
4142
4150
|
*/
|
|
4143
|
-
declare const isFlexibleOptionArray: (arr:
|
|
4151
|
+
declare const isFlexibleOptionArray: (arr: unknown) => arr is FlexibleOption[];
|
|
4144
4152
|
/**
|
|
4145
4153
|
* Determines if an array is a flat array of {@link FullOption}.
|
|
4146
4154
|
*
|
|
4147
4155
|
* @group Option Lists
|
|
4148
4156
|
*/
|
|
4149
|
-
declare const isFullOptionArray: (arr:
|
|
4157
|
+
declare const isFullOptionArray: (arr: unknown) => arr is FullOption[];
|
|
4150
4158
|
/**
|
|
4151
4159
|
* Determines if a {@link FlexibleOptionList} is a {@link FlexibleOptionGroup} array.
|
|
4152
4160
|
*
|
|
4153
4161
|
* @group Option Lists
|
|
4154
4162
|
*/
|
|
4155
|
-
declare const isFlexibleOptionGroupArray: (arr:
|
|
4163
|
+
declare const isFlexibleOptionGroupArray: (arr: unknown, {
|
|
4156
4164
|
allowEmpty
|
|
4157
4165
|
}?: {
|
|
4158
4166
|
allowEmpty?: boolean;
|
|
@@ -4162,7 +4170,7 @@ declare const isFlexibleOptionGroupArray: (arr: any, {
|
|
|
4162
4170
|
*
|
|
4163
4171
|
* @group Option Lists
|
|
4164
4172
|
*/
|
|
4165
|
-
declare const isFullOptionGroupArray: (arr:
|
|
4173
|
+
declare const isFullOptionGroupArray: (arr: unknown, {
|
|
4166
4174
|
allowEmpty
|
|
4167
4175
|
}?: {
|
|
4168
4176
|
allowEmpty?: boolean;
|
|
@@ -4237,7 +4245,7 @@ interface ParseNumberOptions {
|
|
|
4237
4245
|
* If that returns `NaN`, the string is returned unchanged. Numeric values are returned
|
|
4238
4246
|
* as-is regardless of the `parseNumbers` option.
|
|
4239
4247
|
*/
|
|
4240
|
-
declare const parseNumber: (val:
|
|
4248
|
+
declare const parseNumber: (val: unknown, {
|
|
4241
4249
|
parseNumbers,
|
|
4242
4250
|
bigIntOnOverflow
|
|
4243
4251
|
}?: ParseNumberOptions) => any;
|
|
@@ -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,7 +614,7 @@ 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
|
*/
|
|
@@ -673,7 +675,7 @@ const numericRegex = new RegExp(numericRegex$1.source.replace(/^\^/, String.raw`
|
|
|
673
675
|
/**
|
|
674
676
|
* Determines if a variable is a plain old JavaScript object, aka POJO.
|
|
675
677
|
*/
|
|
676
|
-
const isPojo = (obj) => obj
|
|
678
|
+
const isPojo = (obj) => obj !== null && typeof obj === "object" && Object.getPrototypeOf(obj) === Object.prototype;
|
|
677
679
|
/**
|
|
678
680
|
* Simple helper to determine whether a value is null, undefined, or an empty string.
|
|
679
681
|
*/
|
|
@@ -697,7 +699,7 @@ const isRuleGroupType = (rg) => isRuleGroup(rg) && typeof rg.combinator === "str
|
|
|
697
699
|
*/
|
|
698
700
|
const isRuleGroupTypeIC = (rg) => isRuleGroup(rg) && rg.combinator === void 0;
|
|
699
701
|
//#endregion
|
|
700
|
-
//#region \0@oxc-project+runtime@0.
|
|
702
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/typeof.js
|
|
701
703
|
function _typeof(o) {
|
|
702
704
|
"@babel/helpers - typeof";
|
|
703
705
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
|
@@ -707,7 +709,7 @@ function _typeof(o) {
|
|
|
707
709
|
}, _typeof(o);
|
|
708
710
|
}
|
|
709
711
|
//#endregion
|
|
710
|
-
//#region \0@oxc-project+runtime@0.
|
|
712
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/toPrimitive.js
|
|
711
713
|
function toPrimitive(t, r) {
|
|
712
714
|
if ("object" != _typeof(t) || !t) return t;
|
|
713
715
|
var e = t[Symbol.toPrimitive];
|
|
@@ -719,13 +721,13 @@ function toPrimitive(t, r) {
|
|
|
719
721
|
return ("string" === r ? String : Number)(t);
|
|
720
722
|
}
|
|
721
723
|
//#endregion
|
|
722
|
-
//#region \0@oxc-project+runtime@0.
|
|
724
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/toPropertyKey.js
|
|
723
725
|
function toPropertyKey(t) {
|
|
724
726
|
var i = toPrimitive(t, "string");
|
|
725
727
|
return "symbol" == _typeof(i) ? i : i + "";
|
|
726
728
|
}
|
|
727
729
|
//#endregion
|
|
728
|
-
//#region \0@oxc-project+runtime@0.
|
|
730
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/defineProperty.js
|
|
729
731
|
function _defineProperty(e, r, t) {
|
|
730
732
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
731
733
|
value: t,
|
|
@@ -735,7 +737,7 @@ function _defineProperty(e, r, t) {
|
|
|
735
737
|
}) : e[r] = t, e;
|
|
736
738
|
}
|
|
737
739
|
//#endregion
|
|
738
|
-
//#region \0@oxc-project+runtime@0.
|
|
740
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/objectSpread2.js
|
|
739
741
|
function ownKeys(e, r) {
|
|
740
742
|
var t = Object.keys(e);
|
|
741
743
|
if (Object.getOwnPropertySymbols) {
|
|
@@ -758,7 +760,7 @@ function _objectSpread2(e) {
|
|
|
758
760
|
return e;
|
|
759
761
|
}
|
|
760
762
|
//#endregion
|
|
761
|
-
//#region \0@oxc-project+runtime@0.
|
|
763
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/objectWithoutPropertiesLoose.js
|
|
762
764
|
function _objectWithoutPropertiesLoose(r, e) {
|
|
763
765
|
if (null == r) return {};
|
|
764
766
|
var t = {};
|
|
@@ -769,7 +771,7 @@ function _objectWithoutPropertiesLoose(r, e) {
|
|
|
769
771
|
return t;
|
|
770
772
|
}
|
|
771
773
|
//#endregion
|
|
772
|
-
//#region \0@oxc-project+runtime@0.
|
|
774
|
+
//#region \0@oxc-project+runtime@0.134.0/helpers/esm/objectWithoutProperties.js
|
|
773
775
|
function _objectWithoutProperties(e, t) {
|
|
774
776
|
if (null == e) return {};
|
|
775
777
|
var o, r, i = _objectWithoutPropertiesLoose(e, t);
|
|
@@ -2064,97 +2066,6 @@ const defaultRuleGroupProcessorCypher = (ruleGroup, options) => {
|
|
|
2064
2066
|
return processRuleGroup(ruleGroup, true);
|
|
2065
2067
|
};
|
|
2066
2068
|
//#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
2069
|
//#region src/utils/formatQuery/defaultRuleGroupProcessorDrizzle.ts
|
|
2159
2070
|
/**
|
|
2160
2071
|
* Default rule group processor used by {@link formatQuery} for the "drizzle" format. The returned
|
|
@@ -2169,10 +2080,9 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
|
2169
2080
|
* @group Export
|
|
2170
2081
|
*/
|
|
2171
2082
|
const defaultRuleGroupProcessorDrizzle = (ruleGroup, options, _meta) => (columns, drizzleOperators) => {
|
|
2172
|
-
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap } = options;
|
|
2083
|
+
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, ruleProcessor } = options;
|
|
2173
2084
|
if (!columns || !drizzleOperators) return void 0;
|
|
2174
2085
|
const { and, not, or } = drizzleOperators;
|
|
2175
|
-
const ruleProcessor = defaultRuleProcessorDrizzle;
|
|
2176
2086
|
const processRuleGroup = (rg, _outermost) => {
|
|
2177
2087
|
var _rg$id;
|
|
2178
2088
|
if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return;
|
|
@@ -2798,96 +2708,6 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
|
|
|
2798
2708
|
return processRuleGroup(ruleGroup, true);
|
|
2799
2709
|
};
|
|
2800
2710
|
//#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
2711
|
//#region src/utils/formatQuery/defaultRuleGroupProcessorTanStackDB.ts
|
|
2892
2712
|
/**
|
|
2893
2713
|
* Default rule group processor used by {@link formatQuery} for the "tanstack_db" format.
|
|
@@ -2901,7 +2721,7 @@ const defaultRuleProcessorTanStackDB = (rule, _options) => {
|
|
|
2901
2721
|
*/
|
|
2902
2722
|
const defaultRuleGroupProcessorTanStackDB = (ruleGroup, options) => (refs) => {
|
|
2903
2723
|
var _processRuleGroup;
|
|
2904
|
-
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, context = {} } = options;
|
|
2724
|
+
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, context = {}, ruleProcessor } = options;
|
|
2905
2725
|
const ops = context.tanStackDbOperators;
|
|
2906
2726
|
if (!ops) return void 0;
|
|
2907
2727
|
const { and, eq, not, or } = ops;
|
|
@@ -2909,7 +2729,6 @@ const defaultRuleGroupProcessorTanStackDB = (ruleGroup, options) => (refs) => {
|
|
|
2909
2729
|
const refKeys = Object.keys(refs);
|
|
2910
2730
|
/* v8 ignore next -- @preserve */
|
|
2911
2731
|
if (refKeys.length === 0) return fallback;
|
|
2912
|
-
const ruleProcessor = defaultRuleProcessorTanStackDB;
|
|
2913
2732
|
const processRuleGroup = (rg) => {
|
|
2914
2733
|
var _rg$id;
|
|
2915
2734
|
if (!isRuleOrGroupValid(rg, validationMap[(_rg$id = rg.id) !== null && _rg$id !== void 0 ? _rg$id : /* v8 ignore start -- @preserve */ ""])) return;
|
|
@@ -3305,6 +3124,97 @@ const defaultRuleProcessorCypher = (rule, opts = {}) => {
|
|
|
3305
3124
|
}
|
|
3306
3125
|
};
|
|
3307
3126
|
//#endregion
|
|
3127
|
+
//#region src/utils/formatQuery/defaultRuleProcessorDrizzle.ts
|
|
3128
|
+
/**
|
|
3129
|
+
* Default rule processor used by {@link formatQuery} for the "drizzle" format.
|
|
3130
|
+
*
|
|
3131
|
+
* @group Export
|
|
3132
|
+
*/
|
|
3133
|
+
const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
3134
|
+
const opts = _options !== null && _options !== void 0 ? _options : /* v8 ignore start -- @preserve */ {};
|
|
3135
|
+
// v8 ignore next
|
|
3136
|
+
const { parseNumbers, preserveValueOrder, context = {} } = opts;
|
|
3137
|
+
const { columns, drizzleOperators, useRawFields } = context;
|
|
3138
|
+
if (!columns || !drizzleOperators) return void 0;
|
|
3139
|
+
const { between, eq, gt, gte, inArray, isNotNull, isNull, like, lt, lte, ne, notBetween, notInArray, notLike, sql } = drizzleOperators;
|
|
3140
|
+
const { field, operator, value, valueSource } = rule;
|
|
3141
|
+
const column = useRawFields && /^[a-z_][a-z0-9_.]*$/i.test(field) ? sql.raw(field) : columns[field];
|
|
3142
|
+
const operatorLC = lc(operator);
|
|
3143
|
+
const valueIsField = valueSource === "field";
|
|
3144
|
+
const asFieldOrValue = (v) => valueIsField ? columns[v] : v;
|
|
3145
|
+
const maybeParseNumber = (v) => {
|
|
3146
|
+
if (valueIsField || !parseNumbers) return asFieldOrValue(v);
|
|
3147
|
+
return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;
|
|
3148
|
+
};
|
|
3149
|
+
if (!column) return void 0;
|
|
3150
|
+
const matchEval = processMatchMode(rule);
|
|
3151
|
+
if (matchEval === false) return;
|
|
3152
|
+
else if (matchEval) {
|
|
3153
|
+
if (opts.preset !== "postgresql") return void 0;
|
|
3154
|
+
const { mode, threshold } = matchEval;
|
|
3155
|
+
const arrayElementAlias = "elem_alias";
|
|
3156
|
+
const nestedArrayFilter = defaultRuleGroupProcessorDrizzle(transformQuery(rule.value, { ruleProcessor: (r) => _objectSpread2(_objectSpread2({}, r), {}, { field: arrayElementAlias }) }), _objectSpread2(_objectSpread2({}, opts), {}, { context: _objectSpread2(_objectSpread2({}, opts.context), {}, { useRawFields: true }) }));
|
|
3157
|
+
switch (mode) {
|
|
3158
|
+
case "all": return sql`(select count(*) from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)}) = array_length(${column}, 1)`;
|
|
3159
|
+
case "none": return sql`not exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
|
|
3160
|
+
case "some": return sql`exists (select 1 from unnest(${column}) as ${sql.raw(arrayElementAlias)} where ${nestedArrayFilter({}, drizzleOperators)})`;
|
|
3161
|
+
case "atleast":
|
|
3162
|
+
case "atmost":
|
|
3163
|
+
case "exactly": {
|
|
3164
|
+
const op = mode === "atleast" ? ">=" : mode === "atmost" ? "<=" : "=";
|
|
3165
|
+
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}`)}`;
|
|
3166
|
+
}
|
|
3167
|
+
}
|
|
3168
|
+
}
|
|
3169
|
+
switch (operatorLC) {
|
|
3170
|
+
case "=": return eq(column, maybeParseNumber(value));
|
|
3171
|
+
case "!=": return ne(column, maybeParseNumber(value));
|
|
3172
|
+
case ">": return gt(column, maybeParseNumber(value));
|
|
3173
|
+
case "<": return lt(column, maybeParseNumber(value));
|
|
3174
|
+
case ">=": return gte(column, maybeParseNumber(value));
|
|
3175
|
+
case "<=": return lte(column, maybeParseNumber(value));
|
|
3176
|
+
case "beginswith":
|
|
3177
|
+
case "doesnotbeginwith": return (operatorLC === "doesnotbeginwith" ? notLike : like)(column, valueIsField ? sql`${asFieldOrValue(value)} || '%'` : `${value}%`);
|
|
3178
|
+
case "contains":
|
|
3179
|
+
case "doesnotcontain": return (operatorLC === "doesnotcontain" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)} || '%'` : `%${value}%`);
|
|
3180
|
+
case "endswith":
|
|
3181
|
+
case "doesnotendwith": return (operatorLC === "doesnotendwith" ? notLike : like)(column, valueIsField ? sql`'%' || ${asFieldOrValue(value)}` : `%${value}`);
|
|
3182
|
+
case "null": return isNull(column);
|
|
3183
|
+
case "notnull": return isNotNull(column);
|
|
3184
|
+
case "in":
|
|
3185
|
+
case "notin": {
|
|
3186
|
+
const valueAsArray = toArray(value).map((v) => maybeParseNumber(v));
|
|
3187
|
+
return operatorLC === "notin" ? notInArray(column, valueAsArray) : inArray(column, valueAsArray);
|
|
3188
|
+
}
|
|
3189
|
+
case "between":
|
|
3190
|
+
case "notbetween": {
|
|
3191
|
+
const valueAsArray = toArray(value);
|
|
3192
|
+
if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
|
|
3193
|
+
let [first, second] = valueAsArray;
|
|
3194
|
+
const shouldParseNumbers = !(parseNumbers === false);
|
|
3195
|
+
if (!valueIsField && shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
3196
|
+
const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
3197
|
+
const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
3198
|
+
if (!preserveValueOrder && secondNum < firstNum) {
|
|
3199
|
+
const tempNum = secondNum;
|
|
3200
|
+
second = firstNum;
|
|
3201
|
+
first = tempNum;
|
|
3202
|
+
} else {
|
|
3203
|
+
first = firstNum;
|
|
3204
|
+
second = secondNum;
|
|
3205
|
+
}
|
|
3206
|
+
} else if (valueIsField) {
|
|
3207
|
+
first = asFieldOrValue(first);
|
|
3208
|
+
second = asFieldOrValue(second);
|
|
3209
|
+
}
|
|
3210
|
+
return operatorLC === "notbetween" ? notBetween(column, first, second) : between(column, first, second);
|
|
3211
|
+
}
|
|
3212
|
+
return;
|
|
3213
|
+
}
|
|
3214
|
+
default: return;
|
|
3215
|
+
}
|
|
3216
|
+
};
|
|
3217
|
+
//#endregion
|
|
3308
3218
|
//#region src/utils/formatQuery/defaultRuleProcessorElasticSearch.ts
|
|
3309
3219
|
const rangeOperatorMap = {
|
|
3310
3220
|
"<": "lt",
|
|
@@ -4266,6 +4176,96 @@ const defaultRuleProcessorSPARQL = (rule, opts = {}) => {
|
|
|
4266
4176
|
}
|
|
4267
4177
|
};
|
|
4268
4178
|
//#endregion
|
|
4179
|
+
//#region src/utils/formatQuery/defaultRuleProcessorTanStackDB.ts
|
|
4180
|
+
/**
|
|
4181
|
+
* Default rule processor used by {@link formatQuery} for the "tanstack_db" format.
|
|
4182
|
+
*
|
|
4183
|
+
* @group Export
|
|
4184
|
+
*/
|
|
4185
|
+
const defaultRuleProcessorTanStackDB = (rule, _options) => {
|
|
4186
|
+
const { parseNumbers, preserveValueOrder, context = {} } = _options !== null && _options !== void 0 ? _options : /* v8 ignore start -- @preserve */ {};
|
|
4187
|
+
const ops = context.tanStackDbOperators;
|
|
4188
|
+
const refs = context._tanstackDbRefs;
|
|
4189
|
+
const primaryRef = context._tanstackDbPrimaryRef;
|
|
4190
|
+
if (!ops || !refs || !primaryRef) return void 0;
|
|
4191
|
+
const { and, eq, gt, gte, inArray, isNull, like, lt, lte, not } = ops;
|
|
4192
|
+
const resolveField = (fieldName) => {
|
|
4193
|
+
const dotIdx = fieldName.indexOf(".");
|
|
4194
|
+
if (dotIdx > 0) {
|
|
4195
|
+
const prefix = fieldName.slice(0, dotIdx);
|
|
4196
|
+
const rest = fieldName.slice(dotIdx + 1);
|
|
4197
|
+
if (refs[prefix]) return refs[prefix][rest];
|
|
4198
|
+
}
|
|
4199
|
+
return refs[primaryRef][fieldName];
|
|
4200
|
+
};
|
|
4201
|
+
const { field, operator, value, valueSource } = rule;
|
|
4202
|
+
const column = resolveField(field);
|
|
4203
|
+
const operatorLC = lc(operator);
|
|
4204
|
+
const valueIsField = valueSource === "field";
|
|
4205
|
+
const asFieldOrValue = (v) => valueIsField ? resolveField(v) : v;
|
|
4206
|
+
const maybeParseNumber = (v) => {
|
|
4207
|
+
if (valueIsField || !parseNumbers) return asFieldOrValue(v);
|
|
4208
|
+
return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;
|
|
4209
|
+
};
|
|
4210
|
+
switch (operatorLC) {
|
|
4211
|
+
case "=": return eq(column, maybeParseNumber(value));
|
|
4212
|
+
case "!=": return not(eq(column, maybeParseNumber(value)));
|
|
4213
|
+
case ">": return gt(column, maybeParseNumber(value));
|
|
4214
|
+
case "<": return lt(column, maybeParseNumber(value));
|
|
4215
|
+
case ">=": return gte(column, maybeParseNumber(value));
|
|
4216
|
+
case "<=": return lte(column, maybeParseNumber(value));
|
|
4217
|
+
case "beginswith":
|
|
4218
|
+
case "doesnotbeginwith": {
|
|
4219
|
+
const expr = like(column, valueIsField ? void 0 : `${value}%`);
|
|
4220
|
+
return operatorLC === "doesnotbeginwith" ? not(expr) : expr;
|
|
4221
|
+
}
|
|
4222
|
+
case "contains":
|
|
4223
|
+
case "doesnotcontain": {
|
|
4224
|
+
const expr = like(column, valueIsField ? void 0 : `%${value}%`);
|
|
4225
|
+
return operatorLC === "doesnotcontain" ? not(expr) : expr;
|
|
4226
|
+
}
|
|
4227
|
+
case "endswith":
|
|
4228
|
+
case "doesnotendwith": {
|
|
4229
|
+
const expr = like(column, valueIsField ? void 0 : `%${value}`);
|
|
4230
|
+
return operatorLC === "doesnotendwith" ? not(expr) : expr;
|
|
4231
|
+
}
|
|
4232
|
+
case "null": return isNull(column);
|
|
4233
|
+
case "notnull": return not(isNull(column));
|
|
4234
|
+
case "in":
|
|
4235
|
+
case "notin": {
|
|
4236
|
+
const expr = inArray(column, toArray(value).map((v) => maybeParseNumber(v)));
|
|
4237
|
+
return operatorLC === "notin" ? not(expr) : expr;
|
|
4238
|
+
}
|
|
4239
|
+
case "between":
|
|
4240
|
+
case "notbetween": {
|
|
4241
|
+
const valueAsArray = toArray(value);
|
|
4242
|
+
if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
|
|
4243
|
+
let [first, second] = valueAsArray;
|
|
4244
|
+
const shouldParseNumbers = !(parseNumbers === false);
|
|
4245
|
+
if (!valueIsField && shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
4246
|
+
const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
4247
|
+
const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
4248
|
+
if (!preserveValueOrder && secondNum < firstNum) {
|
|
4249
|
+
const tempNum = secondNum;
|
|
4250
|
+
second = firstNum;
|
|
4251
|
+
first = tempNum;
|
|
4252
|
+
} else {
|
|
4253
|
+
first = firstNum;
|
|
4254
|
+
second = secondNum;
|
|
4255
|
+
}
|
|
4256
|
+
} else if (valueIsField) {
|
|
4257
|
+
first = asFieldOrValue(first);
|
|
4258
|
+
second = asFieldOrValue(second);
|
|
4259
|
+
}
|
|
4260
|
+
const expr = and(gte(column, first), lte(column, second));
|
|
4261
|
+
return operatorLC === "notbetween" ? not(expr) : expr;
|
|
4262
|
+
}
|
|
4263
|
+
return;
|
|
4264
|
+
}
|
|
4265
|
+
default: return;
|
|
4266
|
+
}
|
|
4267
|
+
};
|
|
4268
|
+
//#endregion
|
|
4269
4269
|
//#region src/utils/formatQuery/formatQuery.ts
|
|
4270
4270
|
/**
|
|
4271
4271
|
* A collection of option presets for {@link formatQuery}, specifically for SQL-based formats.
|
|
@@ -4842,7 +4842,8 @@ const mergeClassnames = (...args) => ({
|
|
|
4842
4842
|
matchThreshold: joinClassnamesByName("matchThreshold", args),
|
|
4843
4843
|
branches: joinClassnamesByName("branches", args),
|
|
4844
4844
|
hasSubQuery: joinClassnamesByName("hasSubQuery", args),
|
|
4845
|
-
loading: joinClassnamesByName("loading", args)
|
|
4845
|
+
loading: joinClassnamesByName("loading", args),
|
|
4846
|
+
valueDateTimeRelative: joinClassnamesByName("valueDateTimeRelative", args)
|
|
4846
4847
|
});
|
|
4847
4848
|
//#endregion
|
|
4848
4849
|
//#region src/utils/preferProp.ts
|