@react-querybuilder/core 8.16.0 → 8.16.2
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 +43 -4
- package/dist/cjs/react-querybuilder_core.cjs.development.js +182 -18
- package/dist/cjs/react-querybuilder_core.cjs.development.js.map +1 -1
- package/dist/cjs/react-querybuilder_core.cjs.production.d.ts +43 -4
- 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-BeJJH9BI.mjs.map +1 -1
- package/dist/convertQuery-Lx2HQa0m.js.map +1 -1
- package/dist/formatQuery.d.mts +42 -3
- package/dist/formatQuery.d.ts +42 -3
- package/dist/formatQuery.js +182 -18
- package/dist/formatQuery.js.map +1 -1
- package/dist/formatQuery.mjs +180 -19
- package/dist/formatQuery.mjs.map +1 -1
- package/dist/{import-BHlzBLM_.d.mts → import-BXXgiPlr.d.mts} +2 -2
- package/dist/{import-C6imciDf.d.ts → import-DqzM2MBd.d.ts} +2 -2
- package/dist/{index-D-Iej37L.d.mts → index-CR-tk4Ci.d.mts} +3 -3
- package/dist/{index-Cjapnb-H.d.ts → index-NSVgGj45.d.ts} +3 -3
- package/dist/objectUtils-Bzug_QfX.js.map +1 -1
- package/dist/objectUtils-D96eEEzL.mjs.map +1 -1
- 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 +1 -1
- package/dist/parseCypher.d.ts +1 -1
- package/dist/parseCypher.js.map +1 -1
- package/dist/parseCypher.mjs.map +1 -1
- package/dist/parseGremlin.d.mts +1 -1
- package/dist/parseGremlin.d.ts +1 -1
- package/dist/parseGremlin.js.map +1 -1
- package/dist/parseGremlin.mjs.map +1 -1
- 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 +1 -1
- package/dist/parseSPARQL.d.ts +1 -1
- package/dist/parseSPARQL.js.map +1 -1
- package/dist/parseSPARQL.mjs.map +1 -1
- 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 +43 -4
- package/dist/react-querybuilder_core.legacy-esm.d.ts +43 -4
- package/dist/react-querybuilder_core.legacy-esm.js +192 -31
- package/dist/react-querybuilder_core.legacy-esm.js.map +1 -1
- package/dist/react-querybuilder_core.mjs +180 -19
- package/dist/react-querybuilder_core.mjs.map +1 -1
- package/dist/react-querybuilder_core.production.d.mts +43 -4
- 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/dist/transformQuery.js.map +1 -1
- package/dist/transformQuery.mjs.map +1 -1
- package/dist/utils-ChLG90DP.mjs.map +1 -1
- package/dist/utils-Qwkq2Q0F.js.map +1 -1
- package/package.json +19 -15
package/dist/formatQuery.mjs
CHANGED
|
@@ -523,7 +523,7 @@ const defaultValueProcessorByRule = ({ operator, value, valueSource }, { escapeQ
|
|
|
523
523
|
valsOneAndTwoOnly[0] = secondNum;
|
|
524
524
|
valsOneAndTwoOnly[1] = firstNum;
|
|
525
525
|
}
|
|
526
|
-
return (valueIsField ? valsOneAndTwoOnly.map((v) => wrapFieldName(v)) : valsOneAndTwoOnly.every((v) => shouldRenderAsNumber(v, parseNumbers)) ? valsOneAndTwoOnly.map((v) => parseNumber(v, { parseNumbers: "strict" })) : valsOneAndTwoOnly.map((v) => wrapAndEscape(v))).join(` ${translations?.and ?? "and"} `);
|
|
526
|
+
return (valueIsField ? valsOneAndTwoOnly.map((v) => wrapFieldName(v)) : valsOneAndTwoOnly.every((v) => shouldRenderAsNumber(v, parseNumbers)) ? valsOneAndTwoOnly.map((v) => parseNumber(v, { parseNumbers: "strict" })) : valsOneAndTwoOnly.map((v) => wrapAndEscape(v))).join(` ${translations?.betweenAnd ?? translations?.and ?? "and"} `);
|
|
527
527
|
}
|
|
528
528
|
case "contains":
|
|
529
529
|
case "doesnotcontain": return valueIsField ? concat(quoteValue("%"), wrapFieldName(value), quoteValue("%")) : quoteValue(`%${escapeValue(value)}%`);
|
|
@@ -618,6 +618,10 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
|
618
618
|
const operatorLC = lc(operator);
|
|
619
619
|
const valueIsField = valueSource === "field";
|
|
620
620
|
const asFieldOrValue = (v) => valueIsField ? columns[v] : v;
|
|
621
|
+
const maybeParseNumber = (v) => {
|
|
622
|
+
if (valueIsField || !parseNumbers) return asFieldOrValue(v);
|
|
623
|
+
return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;
|
|
624
|
+
};
|
|
621
625
|
if (!column) return void 0;
|
|
622
626
|
const matchEval = processMatchMode(rule);
|
|
623
627
|
if (matchEval === false) return;
|
|
@@ -648,12 +652,12 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
|
648
652
|
}
|
|
649
653
|
}
|
|
650
654
|
switch (operatorLC) {
|
|
651
|
-
case "=": return eq(column,
|
|
652
|
-
case "!=": return ne(column,
|
|
653
|
-
case ">": return gt(column,
|
|
654
|
-
case "<": return lt(column,
|
|
655
|
-
case ">=": return gte(column,
|
|
656
|
-
case "<=": return lte(column,
|
|
655
|
+
case "=": return eq(column, maybeParseNumber(value));
|
|
656
|
+
case "!=": return ne(column, maybeParseNumber(value));
|
|
657
|
+
case ">": return gt(column, maybeParseNumber(value));
|
|
658
|
+
case "<": return lt(column, maybeParseNumber(value));
|
|
659
|
+
case ">=": return gte(column, maybeParseNumber(value));
|
|
660
|
+
case "<=": return lte(column, maybeParseNumber(value));
|
|
657
661
|
case "beginswith":
|
|
658
662
|
case "doesnotbeginwith": return (operatorLC === "doesnotbeginwith" ? notLike : like)(column, valueIsField ? sql`${asFieldOrValue(value)} || '%'` : `${value}%`);
|
|
659
663
|
case "contains":
|
|
@@ -664,7 +668,7 @@ const defaultRuleProcessorDrizzle = (rule, _options) => {
|
|
|
664
668
|
case "notnull": return isNotNull(column);
|
|
665
669
|
case "in":
|
|
666
670
|
case "notin": {
|
|
667
|
-
const valueAsArray = toArray(value).map((v) =>
|
|
671
|
+
const valueAsArray = toArray(value).map((v) => maybeParseNumber(v));
|
|
668
672
|
return operatorLC === "notin" ? notInArray(column, valueAsArray) : inArray(column, valueAsArray);
|
|
669
673
|
}
|
|
670
674
|
case "between":
|
|
@@ -998,7 +1002,7 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
|
|
|
998
1002
|
let firstRule = true;
|
|
999
1003
|
for (const rule of rg2.rules) {
|
|
1000
1004
|
if (typeof rule === "string") {
|
|
1001
|
-
precedingCombinator =
|
|
1005
|
+
precedingCombinator = `${translations.ruleSeparator ?? ", "}${translations[rule] ?? rule} `;
|
|
1002
1006
|
continue;
|
|
1003
1007
|
}
|
|
1004
1008
|
if (isRuleGroup(rule)) {
|
|
@@ -1040,7 +1044,8 @@ const defaultRuleGroupProcessorNL = (ruleGroup, options) => {
|
|
|
1040
1044
|
const [prefixTL, suffixTL] = ["groupPrefix", "groupSuffix"].map((key) => rg2.not ? isXOR ? getNLTranslataion(key, translations, ["not", "xor"]) : getNLTranslataion(key, translations, ["not"]) : isXOR ? getNLTranslataion(key, translations, ["xor"]) : getNLTranslataion(key, translations));
|
|
1041
1045
|
const prefix = mustWrap ? `${prefixTL} (`.trim() : "";
|
|
1042
1046
|
const suffix = mustWrap ? `) ${suffixTL}`.trim() : "";
|
|
1043
|
-
|
|
1047
|
+
const sep = translations.ruleSeparator ?? ", ";
|
|
1048
|
+
return `${prefix}${processedRules.join(isRuleGroupType(rg2) ? `${sep}${translations[combinator] ?? combinator} ` : "")}${suffix}`;
|
|
1044
1049
|
};
|
|
1045
1050
|
return processRuleGroup(ruleGroup, true);
|
|
1046
1051
|
};
|
|
@@ -1328,6 +1333,142 @@ const defaultRuleGroupProcessorSQL = (ruleGroup, options) => {
|
|
|
1328
1333
|
return processRuleGroup(ruleGroup, true);
|
|
1329
1334
|
};
|
|
1330
1335
|
//#endregion
|
|
1336
|
+
//#region src/utils/formatQuery/defaultRuleProcessorTanStackDB.ts
|
|
1337
|
+
/**
|
|
1338
|
+
* Default rule processor used by {@link formatQuery} for the "tanstack_db" format.
|
|
1339
|
+
*
|
|
1340
|
+
* @group Export
|
|
1341
|
+
*/
|
|
1342
|
+
const defaultRuleProcessorTanStackDB = (rule, _options) => {
|
|
1343
|
+
const { parseNumbers, preserveValueOrder, context = {} } = _options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
1344
|
+
const ops = context.tanStackDbOperators;
|
|
1345
|
+
const refs = context._tanstackDbRefs;
|
|
1346
|
+
const primaryRef = context._tanstackDbPrimaryRef;
|
|
1347
|
+
if (!ops || !refs || !primaryRef) return void 0;
|
|
1348
|
+
const { and, eq, gt, gte, inArray, isNull, like, lt, lte, not } = ops;
|
|
1349
|
+
const resolveField = (fieldName) => {
|
|
1350
|
+
const dotIdx = fieldName.indexOf(".");
|
|
1351
|
+
if (dotIdx > 0) {
|
|
1352
|
+
const prefix = fieldName.slice(0, dotIdx);
|
|
1353
|
+
const rest = fieldName.slice(dotIdx + 1);
|
|
1354
|
+
if (refs[prefix]) return refs[prefix][rest];
|
|
1355
|
+
}
|
|
1356
|
+
return refs[primaryRef][fieldName];
|
|
1357
|
+
};
|
|
1358
|
+
const { field, operator, value, valueSource } = rule;
|
|
1359
|
+
const column = resolveField(field);
|
|
1360
|
+
const operatorLC = lc(operator);
|
|
1361
|
+
const valueIsField = valueSource === "field";
|
|
1362
|
+
const asFieldOrValue = (v) => valueIsField ? resolveField(v) : v;
|
|
1363
|
+
const maybeParseNumber = (v) => {
|
|
1364
|
+
if (valueIsField || !parseNumbers) return asFieldOrValue(v);
|
|
1365
|
+
return shouldRenderAsNumber(v, true) ? parseNumber(v, { parseNumbers: true }) : v;
|
|
1366
|
+
};
|
|
1367
|
+
switch (operatorLC) {
|
|
1368
|
+
case "=": return eq(column, maybeParseNumber(value));
|
|
1369
|
+
case "!=": return not(eq(column, maybeParseNumber(value)));
|
|
1370
|
+
case ">": return gt(column, maybeParseNumber(value));
|
|
1371
|
+
case "<": return lt(column, maybeParseNumber(value));
|
|
1372
|
+
case ">=": return gte(column, maybeParseNumber(value));
|
|
1373
|
+
case "<=": return lte(column, maybeParseNumber(value));
|
|
1374
|
+
case "beginswith":
|
|
1375
|
+
case "doesnotbeginwith": {
|
|
1376
|
+
const expr = like(column, valueIsField ? void 0 : `${value}%`);
|
|
1377
|
+
return operatorLC === "doesnotbeginwith" ? not(expr) : expr;
|
|
1378
|
+
}
|
|
1379
|
+
case "contains":
|
|
1380
|
+
case "doesnotcontain": {
|
|
1381
|
+
const expr = like(column, valueIsField ? void 0 : `%${value}%`);
|
|
1382
|
+
return operatorLC === "doesnotcontain" ? not(expr) : expr;
|
|
1383
|
+
}
|
|
1384
|
+
case "endswith":
|
|
1385
|
+
case "doesnotendwith": {
|
|
1386
|
+
const expr = like(column, valueIsField ? void 0 : `%${value}`);
|
|
1387
|
+
return operatorLC === "doesnotendwith" ? not(expr) : expr;
|
|
1388
|
+
}
|
|
1389
|
+
case "null": return isNull(column);
|
|
1390
|
+
case "notnull": return not(isNull(column));
|
|
1391
|
+
case "in":
|
|
1392
|
+
case "notin": {
|
|
1393
|
+
const expr = inArray(column, toArray(value).map((v) => maybeParseNumber(v)));
|
|
1394
|
+
return operatorLC === "notin" ? not(expr) : expr;
|
|
1395
|
+
}
|
|
1396
|
+
case "between":
|
|
1397
|
+
case "notbetween": {
|
|
1398
|
+
const valueAsArray = toArray(value);
|
|
1399
|
+
if (valueAsArray.length >= 2 && isValidValue(valueAsArray[0]) && isValidValue(valueAsArray[1])) {
|
|
1400
|
+
let [first, second] = valueAsArray;
|
|
1401
|
+
const shouldParseNumbers = !(parseNumbers === false);
|
|
1402
|
+
if (!valueIsField && shouldRenderAsNumber(first, shouldParseNumbers) && shouldRenderAsNumber(second, shouldParseNumbers)) {
|
|
1403
|
+
const firstNum = parseNumber(first, { parseNumbers: shouldParseNumbers });
|
|
1404
|
+
const secondNum = parseNumber(second, { parseNumbers: shouldParseNumbers });
|
|
1405
|
+
if (!preserveValueOrder && secondNum < firstNum) {
|
|
1406
|
+
const tempNum = secondNum;
|
|
1407
|
+
second = firstNum;
|
|
1408
|
+
first = tempNum;
|
|
1409
|
+
} else {
|
|
1410
|
+
first = firstNum;
|
|
1411
|
+
second = secondNum;
|
|
1412
|
+
}
|
|
1413
|
+
} else if (valueIsField) {
|
|
1414
|
+
first = asFieldOrValue(first);
|
|
1415
|
+
second = asFieldOrValue(second);
|
|
1416
|
+
}
|
|
1417
|
+
const expr = and(gte(column, first), lte(column, second));
|
|
1418
|
+
return operatorLC === "notbetween" ? not(expr) : expr;
|
|
1419
|
+
}
|
|
1420
|
+
return;
|
|
1421
|
+
}
|
|
1422
|
+
default: return;
|
|
1423
|
+
}
|
|
1424
|
+
};
|
|
1425
|
+
//#endregion
|
|
1426
|
+
//#region src/utils/formatQuery/defaultRuleGroupProcessorTanStackDB.ts
|
|
1427
|
+
/**
|
|
1428
|
+
* Default rule group processor used by {@link formatQuery} for the "tanstack_db" format.
|
|
1429
|
+
* Returns a `WhereCallback` suitable for TanStack DB's `.where()` method.
|
|
1430
|
+
*
|
|
1431
|
+
* @example
|
|
1432
|
+
* const where = formatQuery(query, { format: 'tanstack_db', context: { tanstackDb: tsdb } });
|
|
1433
|
+
* const results = useLiveQuery(q => q.from({ todo: todosCollection }).where(where));
|
|
1434
|
+
*
|
|
1435
|
+
* @group Export
|
|
1436
|
+
*/
|
|
1437
|
+
const defaultRuleGroupProcessorTanStackDB = (ruleGroup, options) => (refs) => {
|
|
1438
|
+
const { fields, getParseNumberBoolean, placeholderFieldName, placeholderOperatorName, placeholderValueName, validateRule, validationMap, context = {} } = options;
|
|
1439
|
+
const ops = context.tanStackDbOperators;
|
|
1440
|
+
if (!ops) return void 0;
|
|
1441
|
+
const { and, eq, not, or } = ops;
|
|
1442
|
+
const fallback = eq(1, 1);
|
|
1443
|
+
const refKeys = Object.keys(refs);
|
|
1444
|
+
/* v8 ignore next -- @preserve */
|
|
1445
|
+
if (refKeys.length === 0) return fallback;
|
|
1446
|
+
const ruleProcessor = defaultRuleProcessorTanStackDB;
|
|
1447
|
+
const processRuleGroup = (rg) => {
|
|
1448
|
+
if (!isRuleOrGroupValid(rg, validationMap[rg.id ?? ""])) return;
|
|
1449
|
+
const processedRules = rg.rules.map((rule) => {
|
|
1450
|
+
if (isRuleGroup(rule)) return processRuleGroup(rule);
|
|
1451
|
+
const [validationResult, fieldValidator] = validateRule(rule);
|
|
1452
|
+
if (!isRuleOrGroupValid(rule, validationResult, fieldValidator) || rule.field === placeholderFieldName || rule.operator === placeholderOperatorName || placeholderValueName !== void 0 && rule.value === placeholderValueName) return;
|
|
1453
|
+
const fieldData = getOption(fields, rule.field);
|
|
1454
|
+
return ruleProcessor(rule, {
|
|
1455
|
+
...options,
|
|
1456
|
+
parseNumbers: getParseNumberBoolean(fieldData?.inputType),
|
|
1457
|
+
fieldData,
|
|
1458
|
+
context: {
|
|
1459
|
+
...context,
|
|
1460
|
+
_tanstackDbRefs: refs,
|
|
1461
|
+
_tanstackDbPrimaryRef: refKeys[0]
|
|
1462
|
+
}
|
|
1463
|
+
});
|
|
1464
|
+
}).filter(Boolean);
|
|
1465
|
+
if (processedRules.length === 0) return fallback;
|
|
1466
|
+
const ruleGroupExpr = processedRules.length === 1 ? processedRules[0] : rg.combinator === "or" ? or(...processedRules) : and(...processedRules);
|
|
1467
|
+
return rg.not ? not(ruleGroupExpr) : ruleGroupExpr;
|
|
1468
|
+
};
|
|
1469
|
+
return processRuleGroup(convertFromIC(ruleGroup)) ?? fallback;
|
|
1470
|
+
};
|
|
1471
|
+
//#endregion
|
|
1331
1472
|
//#region src/utils/formatQuery/defaultRuleGroupProcessorDiagnostics.ts
|
|
1332
1473
|
const numericInputTypes = new Set([
|
|
1333
1474
|
"number",
|
|
@@ -2167,6 +2308,8 @@ const defaultValueProcessorNL = (rule, opts = {}) => {
|
|
|
2167
2308
|
const orTL = t.or ?? "or";
|
|
2168
2309
|
const trueTL = t.true ?? "true";
|
|
2169
2310
|
const falseTL = t.false ?? "false";
|
|
2311
|
+
const listSep = t.listSeparator ?? ", ";
|
|
2312
|
+
const useOxfordComma = !t.listSeparator;
|
|
2170
2313
|
switch (operatorLowerCase) {
|
|
2171
2314
|
case "null":
|
|
2172
2315
|
case "notnull": return "";
|
|
@@ -2186,7 +2329,8 @@ const defaultValueProcessorNL = (rule, opts = {}) => {
|
|
|
2186
2329
|
if (valueAsArray.length === 0) return "";
|
|
2187
2330
|
const valStringArray = valueAsArray.map((v) => valueIsField ? wrapFieldName(getOption(fields ?? [], v)?.label ?? v) : shouldRenderAsNumber(v, parseNumbers) ? `${trimIfString(v)}` : `${wrapAndEscape(v)}`);
|
|
2188
2331
|
if (valStringArray.length === 1) return valStringArray[0];
|
|
2189
|
-
|
|
2332
|
+
const oxfordComma = useOxfordComma && valStringArray.length > 2 ? "," : "";
|
|
2333
|
+
return `(${`${valStringArray.slice(0, -1).join(listSep)}${oxfordComma} ${orTL} ${valStringArray.at(-1)}`})`;
|
|
2190
2334
|
}
|
|
2191
2335
|
}
|
|
2192
2336
|
if (typeof rule.value === "boolean") return rule.value ? trueTL : falseTL;
|
|
@@ -2299,7 +2443,14 @@ const defaultRuleProcessorNL = (rule, opts) => {
|
|
|
2299
2443
|
V: operatorProcessor(rule, opts),
|
|
2300
2444
|
O: value
|
|
2301
2445
|
};
|
|
2302
|
-
|
|
2446
|
+
const translations = opts?.translations ?? {};
|
|
2447
|
+
const suffixMap = {
|
|
2448
|
+
S: translations.afterSubject ?? " ",
|
|
2449
|
+
V: translations.afterVerb ?? " ",
|
|
2450
|
+
O: translations.afterObject ?? " "
|
|
2451
|
+
};
|
|
2452
|
+
const wordOrderTuple = normalizeConstituentWordOrder(wordOrder).filter((term) => wordOrderMap[term] !== "");
|
|
2453
|
+
return wordOrderTuple.map((term, i) => `${wordOrderMap[term]}${i < wordOrderTuple.length - 1 ? suffixMap[term] : ""}`).join("").trim();
|
|
2303
2454
|
};
|
|
2304
2455
|
//#endregion
|
|
2305
2456
|
//#region src/utils/formatQuery/defaultRuleProcessorSQL.ts
|
|
@@ -2593,6 +2744,11 @@ const defaultRuleProcessorSequelize = (rule, { parseNumbers, preserveValueOrder,
|
|
|
2593
2744
|
//#endregion
|
|
2594
2745
|
//#region src/utils/formatQuery/defaultRuleProcessorSPARQL.ts
|
|
2595
2746
|
const escapeDoubleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escapeQuotes ? `${v}` : v.replaceAll(`"`, `\\"`);
|
|
2747
|
+
/** Auto-prefix a SPARQL variable name with `?` unless it's already prefixed, a URI, or a prefixed name.
|
|
2748
|
+
*
|
|
2749
|
+
* @group Export
|
|
2750
|
+
*/
|
|
2751
|
+
const sparqlVar = (name) => /^[?<]/.test(name) || name.includes(":") ? name : `?${name}`;
|
|
2596
2752
|
/**
|
|
2597
2753
|
* Default rule processor used by {@link formatQuery} for "sparql" format.
|
|
2598
2754
|
*
|
|
@@ -2600,14 +2756,15 @@ const escapeDoubleQuotes = (v, escapeQuotes) => typeof v !== "string" || !escape
|
|
|
2600
2756
|
*/
|
|
2601
2757
|
const defaultRuleProcessorSPARQL = (rule, opts = {}) => {
|
|
2602
2758
|
const { escapeQuotes, parseNumbers } = opts;
|
|
2603
|
-
const { field, operator, value, valueSource } = rule;
|
|
2759
|
+
const { field: rawField, operator, value, valueSource } = rule;
|
|
2604
2760
|
const valueIsField = valueSource === "field";
|
|
2605
2761
|
const operatorTL = operator.toLowerCase();
|
|
2762
|
+
const field = sparqlVar(rawField);
|
|
2606
2763
|
const fmtVal = (v) => {
|
|
2607
2764
|
if (v === null || v === void 0) return "\"\"";
|
|
2608
2765
|
if (typeof v === "boolean") return `"${v}"^^xsd:boolean`;
|
|
2609
2766
|
if (typeof v === "bigint") return String(v);
|
|
2610
|
-
if (valueIsField) return trimIfString(v);
|
|
2767
|
+
if (valueIsField) return sparqlVar(trimIfString(v));
|
|
2611
2768
|
if (typeof v === "number" || shouldRenderAsNumber(v, parseNumbers)) return trimIfString(v);
|
|
2612
2769
|
const s = typeof v === "string" ? v : JSON.stringify(v) ?? "";
|
|
2613
2770
|
if (s.startsWith("?") || s.startsWith("<") || s.includes(":")) return s;
|
|
@@ -2632,12 +2789,12 @@ const defaultRuleProcessorSPARQL = (rule, opts = {}) => {
|
|
|
2632
2789
|
case "in": {
|
|
2633
2790
|
const items = toArray(value).map(fmtVal);
|
|
2634
2791
|
if (!items.length) return "";
|
|
2635
|
-
return
|
|
2792
|
+
return `${field} IN (${items.join(", ")})`;
|
|
2636
2793
|
}
|
|
2637
2794
|
case "notin": {
|
|
2638
2795
|
const items = toArray(value).map(fmtVal);
|
|
2639
2796
|
if (!items.length) return "";
|
|
2640
|
-
return
|
|
2797
|
+
return `${field} NOT IN (${items.join(", ")})`;
|
|
2641
2798
|
}
|
|
2642
2799
|
case "between": {
|
|
2643
2800
|
const arr = toArray(value);
|
|
@@ -2700,6 +2857,7 @@ const defaultRuleProcessors = {
|
|
|
2700
2857
|
sequelize: defaultRuleProcessorSequelize,
|
|
2701
2858
|
spel: defaultRuleProcessorSpEL,
|
|
2702
2859
|
sql: defaultRuleProcessorSQL,
|
|
2860
|
+
tanstack_db: defaultRuleProcessorTanStackDB,
|
|
2703
2861
|
cypher: defaultRuleProcessorCypher,
|
|
2704
2862
|
gql: defaultRuleProcessorCypher,
|
|
2705
2863
|
sparql: defaultRuleProcessorSPARQL,
|
|
@@ -2726,6 +2884,7 @@ const defaultOperatorProcessors = {
|
|
|
2726
2884
|
sequelize: defaultOperatorProcessor,
|
|
2727
2885
|
spel: defaultOperatorProcessor,
|
|
2728
2886
|
sql: defaultOperatorProcessorSQL,
|
|
2887
|
+
tanstack_db: defaultOperatorProcessor,
|
|
2729
2888
|
cypher: defaultOperatorProcessor,
|
|
2730
2889
|
gql: defaultOperatorProcessor,
|
|
2731
2890
|
sparql: defaultOperatorProcessor,
|
|
@@ -2772,7 +2931,8 @@ const valueProcessorCanActAsRuleProcessor = new Set([
|
|
|
2772
2931
|
"mongodb",
|
|
2773
2932
|
"prisma",
|
|
2774
2933
|
"sequelize",
|
|
2775
|
-
"spel"
|
|
2934
|
+
"spel",
|
|
2935
|
+
"tanstack_db"
|
|
2776
2936
|
]);
|
|
2777
2937
|
const sqlFormats = new Set([
|
|
2778
2938
|
"sql",
|
|
@@ -2818,7 +2978,7 @@ function formatQuery(ruleGroup, optionParam = {}) {
|
|
|
2818
2978
|
} : format === "parameterized_named" ? {
|
|
2819
2979
|
sql: fallbackExpression,
|
|
2820
2980
|
params: {}
|
|
2821
|
-
} : format === "mongodb" ? `{${fallbackExpression}}` : format === "mongodb_query" ? mongoDbFallback : format === "prisma" ? prismaFallback : format === "jsonlogic" ? false : format === "elasticsearch" ? {} : format === "drizzle" || format === "sequelize" ? void 0 : fallbackExpression;
|
|
2981
|
+
} : format === "mongodb" ? `{${fallbackExpression}}` : format === "mongodb_query" ? mongoDbFallback : format === "prisma" ? prismaFallback : format === "jsonlogic" ? false : format === "elasticsearch" ? {} : format === "drizzle" || format === "sequelize" || format === "tanstack_db" ? void 0 : fallbackExpression;
|
|
2822
2982
|
}
|
|
2823
2983
|
} else validationMap = validationResult;
|
|
2824
2984
|
}
|
|
@@ -2878,6 +3038,7 @@ function formatQuery(ruleGroup, optionParam = {}) {
|
|
|
2878
3038
|
case "ldap": return defaultRuleGroupProcessorLDAP(ruleGroup, finalOptions);
|
|
2879
3039
|
case "prisma": return defaultRuleGroupProcessorPrisma(ruleGroup, finalOptions);
|
|
2880
3040
|
case "drizzle": return defaultRuleGroupProcessorDrizzle(ruleGroup, finalOptions);
|
|
3041
|
+
case "tanstack_db": return defaultRuleGroupProcessorTanStackDB(ruleGroup, finalOptions);
|
|
2881
3042
|
case "sequelize": return defaultRuleGroupProcessorSequelize(ruleGroup, finalOptions);
|
|
2882
3043
|
case "cypher":
|
|
2883
3044
|
case "gql": return defaultRuleGroupProcessorCypher(ruleGroup, finalOptions);
|
|
@@ -2938,6 +3099,6 @@ const defaultValueProcessorMongoDBByRule = defaultRuleProcessorMongoDB;
|
|
|
2938
3099
|
*/
|
|
2939
3100
|
const defaultValueProcessorSpELByRule = defaultRuleProcessorSpEL;
|
|
2940
3101
|
//#endregion
|
|
2941
|
-
export { bigIntJsonParseReviver, bigIntJsonStringifyReplacer, celCombinatorMap, cypherCombinatorMap, defaultCELValueProcessor, defaultExportOperatorMap, defaultMongoDBValueProcessor, defaultNLTranslations, defaultOperatorProcessorNL, defaultOperatorProcessorSQL, 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, defaultValueProcessor, defaultValueProcessorByRule, defaultValueProcessorCELByRule, defaultValueProcessorMongoDBByRule, defaultValueProcessorNL, defaultValueProcessorSpELByRule, formatQuery, formatQueryOptionPresets, getNLTranslataion, getQuoteFieldNamesWithArray, getQuotedFieldName, isValidValue, isValueProcessorLegacy, jsonLogicAdditionalOperators, mapSQLOperator, mongoDbFallback, mongoOperators, normalizeConstituentWordOrder, numerifyValues, prismaFallback, prismaOperators, processMatchMode, shouldRenderAsNumber, sqlDialectPresets };
|
|
3102
|
+
export { bigIntJsonParseReviver, bigIntJsonStringifyReplacer, celCombinatorMap, cypherCombinatorMap, defaultCELValueProcessor, defaultExportOperatorMap, defaultMongoDBValueProcessor, defaultNLTranslations, defaultOperatorProcessorNL, defaultOperatorProcessorSQL, defaultRuleGroupProcessorCEL, defaultRuleGroupProcessorCypher, defaultRuleGroupProcessorDiagnostics, defaultRuleGroupProcessorDrizzle, defaultRuleGroupProcessorElasticSearch, defaultRuleGroupProcessorGremlin, defaultRuleGroupProcessorJSONata, defaultRuleGroupProcessorJsonLogic, defaultRuleGroupProcessorLDAP, defaultRuleGroupProcessorMongoDB, defaultRuleGroupProcessorMongoDBQuery, defaultRuleGroupProcessorNL, defaultRuleGroupProcessorParameterized, defaultRuleGroupProcessorPrisma, defaultRuleGroupProcessorSPARQL, defaultRuleGroupProcessorSQL, defaultRuleGroupProcessorSequelize, defaultRuleGroupProcessorSpEL, defaultRuleGroupProcessorTanStackDB, defaultRuleProcessorCEL, defaultRuleProcessorCypher, defaultRuleProcessorDrizzle, defaultRuleProcessorElasticSearch, defaultRuleProcessorGremlin, defaultRuleProcessorJSONata, defaultRuleProcessorJsonLogic, defaultRuleProcessorLDAP, defaultRuleProcessorMongoDB, defaultRuleProcessorMongoDBQuery, defaultRuleProcessorNL, defaultRuleProcessorParameterized, defaultRuleProcessorPrisma, defaultRuleProcessorSPARQL, defaultRuleProcessorSQL, defaultRuleProcessorSequelize, defaultRuleProcessorSpEL, defaultRuleProcessorTanStackDB, defaultSpELValueProcessor, defaultValueProcessor, defaultValueProcessorByRule, defaultValueProcessorCELByRule, defaultValueProcessorMongoDBByRule, defaultValueProcessorNL, defaultValueProcessorSpELByRule, formatQuery, formatQueryOptionPresets, getNLTranslataion, getQuoteFieldNamesWithArray, getQuotedFieldName, isValidValue, isValueProcessorLegacy, jsonLogicAdditionalOperators, mapSQLOperator, mongoDbFallback, mongoOperators, normalizeConstituentWordOrder, numerifyValues, prismaFallback, prismaOperators, processMatchMode, shouldRenderAsNumber, sparqlVar, sqlDialectPresets };
|
|
2942
3103
|
|
|
2943
3104
|
//# sourceMappingURL=formatQuery.mjs.map
|