@react-querybuilder/datetime 8.15.0 → 8.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/date-fns/package.json +1 -1
- package/dayjs/package.json +1 -1
- package/dist/cjs/{getDatetimeRuleProcessorSQL-CkflXcTZ.js → getDatetimeRuleProcessorSQL-DVtRZyr6.js} +125 -3
- package/dist/cjs/getDatetimeRuleProcessorSQL-DVtRZyr6.js.map +1 -0
- package/dist/cjs/getDatetimeRuleProcessorSQL-pAGh4Q0-.js +2 -0
- package/dist/cjs/getDatetimeRuleProcessorSQL-pAGh4Q0-.js.map +1 -0
- package/dist/cjs/react-querybuilder_datetime.cjs.development.d.ts +27 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.date-fns.d.ts +9 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.date-fns.js +11 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.date-fns.js.map +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.dayjs.d.ts +9 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.dayjs.js +11 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.dayjs.js.map +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.js +3 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.jsdate.d.ts +9 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.jsdate.js +11 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.jsdate.js.map +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.luxon.d.ts +9 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.luxon.js +11 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.luxon.js.map +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.d.ts +27 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.d.ts +9 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.js +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.js.map +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.d.ts +9 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.js +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.js.map +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.js +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.d.ts +9 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.js +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.js.map +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.d.ts +9 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.js +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.js.map +1 -1
- package/dist/{getDatetimeRuleProcessorSQL-CYJzcuIW.mjs → getDatetimeRuleProcessorSQL-BGTFvbeK.mjs} +115 -5
- package/dist/getDatetimeRuleProcessorSQL-BGTFvbeK.mjs.map +1 -0
- package/dist/{getDatetimeRuleProcessorSQL-CnTp42xr.js → getDatetimeRuleProcessorSQL-Bpt88k6a.js} +120 -10
- package/dist/getDatetimeRuleProcessorSQL-Bpt88k6a.js.map +1 -0
- package/dist/getDatetimeRuleProcessorSQL-CWqAiVwU.mjs +2 -0
- package/dist/getDatetimeRuleProcessorSQL-CWqAiVwU.mjs.map +1 -0
- package/dist/react-querybuilder_datetime.d.mts +27 -1
- package/dist/react-querybuilder_datetime.date-fns.d.mts +9 -1
- package/dist/react-querybuilder_datetime.date-fns.mjs +10 -2
- package/dist/react-querybuilder_datetime.date-fns.mjs.map +1 -1
- package/dist/react-querybuilder_datetime.dayjs.d.mts +9 -1
- package/dist/react-querybuilder_datetime.dayjs.mjs +10 -2
- package/dist/react-querybuilder_datetime.dayjs.mjs.map +1 -1
- package/dist/react-querybuilder_datetime.jsdate.d.mts +9 -1
- package/dist/react-querybuilder_datetime.jsdate.mjs +10 -2
- package/dist/react-querybuilder_datetime.jsdate.mjs.map +1 -1
- package/dist/react-querybuilder_datetime.legacy-esm.d.ts +27 -1
- package/dist/react-querybuilder_datetime.legacy-esm.date-fns.d.ts +9 -1
- package/dist/react-querybuilder_datetime.legacy-esm.date-fns.js +10 -2
- package/dist/react-querybuilder_datetime.legacy-esm.date-fns.js.map +1 -1
- package/dist/react-querybuilder_datetime.legacy-esm.dayjs.d.ts +9 -1
- package/dist/react-querybuilder_datetime.legacy-esm.dayjs.js +10 -2
- package/dist/react-querybuilder_datetime.legacy-esm.dayjs.js.map +1 -1
- package/dist/react-querybuilder_datetime.legacy-esm.js +2 -2
- package/dist/react-querybuilder_datetime.legacy-esm.jsdate.d.ts +9 -1
- package/dist/react-querybuilder_datetime.legacy-esm.jsdate.js +10 -2
- package/dist/react-querybuilder_datetime.legacy-esm.jsdate.js.map +1 -1
- package/dist/react-querybuilder_datetime.legacy-esm.luxon.d.ts +9 -1
- package/dist/react-querybuilder_datetime.legacy-esm.luxon.js +10 -2
- package/dist/react-querybuilder_datetime.legacy-esm.luxon.js.map +1 -1
- package/dist/react-querybuilder_datetime.luxon.d.mts +9 -1
- package/dist/react-querybuilder_datetime.luxon.mjs +10 -2
- package/dist/react-querybuilder_datetime.luxon.mjs.map +1 -1
- package/dist/react-querybuilder_datetime.mjs +2 -2
- package/dist/react-querybuilder_datetime.production.d.mts +27 -1
- package/dist/react-querybuilder_datetime.production.date-fns.d.mts +9 -1
- package/dist/react-querybuilder_datetime.production.date-fns.mjs +1 -1
- package/dist/react-querybuilder_datetime.production.date-fns.mjs.map +1 -1
- package/dist/react-querybuilder_datetime.production.dayjs.d.mts +9 -1
- package/dist/react-querybuilder_datetime.production.dayjs.mjs +1 -1
- package/dist/react-querybuilder_datetime.production.dayjs.mjs.map +1 -1
- package/dist/react-querybuilder_datetime.production.jsdate.d.mts +9 -1
- package/dist/react-querybuilder_datetime.production.jsdate.mjs +1 -1
- package/dist/react-querybuilder_datetime.production.jsdate.mjs.map +1 -1
- package/dist/react-querybuilder_datetime.production.luxon.d.mts +9 -1
- package/dist/react-querybuilder_datetime.production.luxon.mjs +1 -1
- package/dist/react-querybuilder_datetime.production.luxon.mjs.map +1 -1
- package/dist/react-querybuilder_datetime.production.mjs +1 -1
- package/dist/react-querybuilder_datetime.production.mjs.map +1 -1
- package/jsdate/package.json +1 -1
- package/luxon/package.json +1 -1
- package/package.json +8 -8
- package/dist/cjs/getDatetimeRuleProcessorSQL-CkflXcTZ.js.map +0 -1
- package/dist/cjs/getDatetimeRuleProcessorSQL-Cs8MroHp.js +0 -2
- package/dist/cjs/getDatetimeRuleProcessorSQL-Cs8MroHp.js.map +0 -1
- package/dist/getDatetimeRuleProcessorSQL-CYJzcuIW.mjs.map +0 -1
- package/dist/getDatetimeRuleProcessorSQL-Cbq2-tqd.mjs +0 -2
- package/dist/getDatetimeRuleProcessorSQL-Cbq2-tqd.mjs.map +0 -1
- package/dist/getDatetimeRuleProcessorSQL-CnTp42xr.js.map +0 -1
package/dist/{getDatetimeRuleProcessorSQL-CYJzcuIW.mjs → getDatetimeRuleProcessorSQL-BGTFvbeK.mjs}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defaultOperatorProcessorNL, defaultRuleProcessorCEL, defaultRuleProcessorMongoDBQuery, defaultRuleProcessorNL, defaultRuleProcessorSQL, defaultValueProcessorByRule, getQuotedFieldName, lc, mapSQLOperator, mongoOperators, normalizeConstituentWordOrder, toArray } from "react-querybuilder";
|
|
1
|
+
import { defaultOperatorProcessorNL, defaultRuleProcessorCEL, defaultRuleProcessorCypher, defaultRuleProcessorMongoDBQuery, defaultRuleProcessorNL, defaultRuleProcessorSPARQL, defaultRuleProcessorSQL, defaultValueProcessorByRule, getQuotedFieldName, lc, mapSQLOperator, mongoOperators, normalizeConstituentWordOrder, toArray } from "react-querybuilder";
|
|
2
2
|
//#region src/utils.ts
|
|
3
3
|
const isISOStringDateOnly = (date) => typeof date === "string" && /^\d{4}-\d{2}-\d{2}$/.test(date);
|
|
4
4
|
const defaultIsDateField = (...[rule, opts]) => rule.operator !== "contains" && rule.operator !== "beginsWith" && rule.operator !== "endsWith" && rule.operator !== "doesNotContain" && rule.operator !== "doesNotBeginWith" && rule.operator !== "doesNotEndWith" && rule.operator !== "null" && rule.operator !== "notNull" && /^(?:date|datetime|datetimeoffset|timestamp)\b/i.test(opts?.fieldData?.datatype);
|
|
@@ -29,7 +29,7 @@ const getDatetimeJsonLogicOperations = ({ isAfter, isBefore, isSame }) => ({
|
|
|
29
29
|
});
|
|
30
30
|
//#endregion
|
|
31
31
|
//#region src/getDatetimeRuleProcessorCEL.ts
|
|
32
|
-
const shouldNegate = (op) => /^(does)?not/i.test(op);
|
|
32
|
+
const shouldNegate$2 = (op) => /^(does)?not/i.test(op);
|
|
33
33
|
/**
|
|
34
34
|
* Generates a rule processor with date/time features for use by
|
|
35
35
|
* {@link @react-querybuilder/core!formatQuery formatQuery} with the "cel" format.
|
|
@@ -53,7 +53,7 @@ const getDatetimeRuleProcessorCEL = (apiFns) => (rule, options) => {
|
|
|
53
53
|
case "in":
|
|
54
54
|
case "notin": {
|
|
55
55
|
if (valueAsDateArray.length === 0) return "";
|
|
56
|
-
const [prefix, suffix] = shouldNegate(operatorTL) ? ["!(", ")"] : ["", ""];
|
|
56
|
+
const [prefix, suffix] = shouldNegate$2(operatorTL) ? ["!(", ")"] : ["", ""];
|
|
57
57
|
return `${prefix}${rule.field} in [${valueAsDateArray.map((val) => ts(val)).join(", ")}]${suffix}`;
|
|
58
58
|
}
|
|
59
59
|
case "between":
|
|
@@ -67,6 +67,60 @@ const getDatetimeRuleProcessorCEL = (apiFns) => (rule, options) => {
|
|
|
67
67
|
return defaultRuleProcessorCEL(rule, opts);
|
|
68
68
|
};
|
|
69
69
|
//#endregion
|
|
70
|
+
//#region src/getDatetimeRuleProcessorCypher.ts
|
|
71
|
+
const shouldNegate$1 = (op) => /^(does)?not/i.test(op);
|
|
72
|
+
/**
|
|
73
|
+
* Wraps a date string in the appropriate Cypher temporal constructor.
|
|
74
|
+
* - Date-only strings (YYYY-MM-DD) become `date('...')`
|
|
75
|
+
* - Full ISO strings become `datetime('...')`
|
|
76
|
+
*/
|
|
77
|
+
const cypherTemporal = (iso, dateOnly) => dateOnly ? `date('${iso}')` : `datetime('${iso}')`;
|
|
78
|
+
/**
|
|
79
|
+
* Generates a rule processor with date/time features for use by
|
|
80
|
+
* {@link @react-querybuilder/core!formatQuery formatQuery} with the "cypher" or "gql" format.
|
|
81
|
+
*
|
|
82
|
+
* Supports:
|
|
83
|
+
* - Standard comparison operators (`=`, `!=`, `<`, `>`, `<=`, `>=`)
|
|
84
|
+
* - Range operators (between, notBetween, in, notIn)
|
|
85
|
+
* - Duration math via custom operators: `olderThanDuration` and `withinDuration`
|
|
86
|
+
* (e.g., value `"P30D"` → `datetime() - field > duration('P30D')`)
|
|
87
|
+
*/
|
|
88
|
+
const getDatetimeRuleProcessorCypher = (apiFns) => (rule, options) => {
|
|
89
|
+
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
90
|
+
const { context = {} } = opts;
|
|
91
|
+
if (rule.valueSource === "field" || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorCypher(rule, opts);
|
|
92
|
+
const { field, operator, value } = rule;
|
|
93
|
+
const operatorTL = lc(operator);
|
|
94
|
+
if (operatorTL === "olderthanduration") return `datetime() - ${field} > duration('${value}')`;
|
|
95
|
+
if (operatorTL === "withinduration") return `datetime() - ${field} <= duration('${value}')`;
|
|
96
|
+
const valueAsDateArray = toArray(value, { retainEmptyStrings: false }).map((v) => [v, apiFns.toDate(v)]).filter(([, d]) => apiFns.isValid(d));
|
|
97
|
+
const fmtDate = (originalValue) => {
|
|
98
|
+
const dateOnly = isISOStringDateOnly(originalValue);
|
|
99
|
+
return cypherTemporal(dateOnly ? apiFns.toISOStringDateOnly(originalValue) : apiFns.toISOString(originalValue), dateOnly);
|
|
100
|
+
};
|
|
101
|
+
switch (operatorTL) {
|
|
102
|
+
case "in":
|
|
103
|
+
case "notin": {
|
|
104
|
+
if (valueAsDateArray.length === 0) return "";
|
|
105
|
+
const items = valueAsDateArray.map(([orig]) => fmtDate(orig));
|
|
106
|
+
return `${shouldNegate$1(operatorTL) ? "NOT " : ""}${field} IN [${items.join(", ")}]`;
|
|
107
|
+
}
|
|
108
|
+
case "between":
|
|
109
|
+
case "notbetween": {
|
|
110
|
+
if (valueAsDateArray.length < 2) return "";
|
|
111
|
+
const [first, second] = valueAsDateArray;
|
|
112
|
+
const [lo, hi] = apiFns.isBefore(first[1], second[1]) ? [first, second] : [second, first];
|
|
113
|
+
const expr = `${fmtDate(lo[0])} <= ${field} AND ${field} <= ${fmtDate(hi[0])}`;
|
|
114
|
+
return operatorTL === "notbetween" ? `NOT (${expr})` : expr;
|
|
115
|
+
}
|
|
116
|
+
default: {
|
|
117
|
+
if (valueAsDateArray.length === 0) return "";
|
|
118
|
+
const [orig] = valueAsDateArray[0];
|
|
119
|
+
return `${field} ${operatorTL === "<>" ? "<>" : operatorTL} ${fmtDate(orig)}`;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
//#endregion
|
|
70
124
|
//#region src/getDatetimeRuleProcessorMongoDBQuery.ts
|
|
71
125
|
/**
|
|
72
126
|
* Generates a rule processor with date/time features for use by
|
|
@@ -211,6 +265,62 @@ const getDatetimeRuleProcessorNL = (apiFns) => (rule, options) => {
|
|
|
211
265
|
return normalizeConstituentWordOrder(wordOrder).map((term) => `${wordOrderMap[term]}`).join(" ").trim();
|
|
212
266
|
};
|
|
213
267
|
//#endregion
|
|
268
|
+
//#region src/getDatetimeRuleProcessorSPARQL.ts
|
|
269
|
+
const shouldNegate = (op) => /^(does)?not/i.test(op);
|
|
270
|
+
/**
|
|
271
|
+
* Wraps a date string in the appropriate SPARQL typed literal.
|
|
272
|
+
* - Date-only strings (YYYY-MM-DD) become `"..."^^xsd:date`
|
|
273
|
+
* - Full ISO strings become `"..."^^xsd:dateTime`
|
|
274
|
+
*/
|
|
275
|
+
const sparqlTemporal = (iso, dateOnly) => dateOnly ? `"${iso}"^^xsd:date` : `"${iso}"^^xsd:dateTime`;
|
|
276
|
+
/**
|
|
277
|
+
* Generates a rule processor with date/time features for use by
|
|
278
|
+
* {@link @react-querybuilder/core!formatQuery formatQuery} with the "sparql" format.
|
|
279
|
+
*
|
|
280
|
+
* Supports:
|
|
281
|
+
* - Standard comparison operators (`=`, `!=`, `<`, `>`, `<=`, `>=`)
|
|
282
|
+
* - Range operators (between, notBetween, in, notIn)
|
|
283
|
+
* - Duration math via custom operators: `olderThanDuration` and `withinDuration`
|
|
284
|
+
* (e.g., value `"P30D"` → `NOW() - ?field > "P30D"^^xsd:duration`)
|
|
285
|
+
*/
|
|
286
|
+
const getDatetimeRuleProcessorSPARQL = (apiFns) => (rule, options) => {
|
|
287
|
+
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
288
|
+
const { context = {} } = opts;
|
|
289
|
+
if (rule.valueSource === "field" || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorSPARQL(rule, opts);
|
|
290
|
+
const { field, operator, value } = rule;
|
|
291
|
+
const operatorTL = lc(operator);
|
|
292
|
+
if (operatorTL === "olderthanduration") return `NOW() - ${field} > "${value}"^^xsd:duration`;
|
|
293
|
+
if (operatorTL === "withinduration") return `NOW() - ${field} <= "${value}"^^xsd:duration`;
|
|
294
|
+
const valueAsDateArray = toArray(value, { retainEmptyStrings: false }).map((v) => [v, apiFns.toDate(v)]).filter(([, d]) => apiFns.isValid(d));
|
|
295
|
+
const fmtDate = (originalValue) => {
|
|
296
|
+
const dateOnly = isISOStringDateOnly(originalValue);
|
|
297
|
+
return sparqlTemporal(dateOnly ? apiFns.toISOStringDateOnly(originalValue) : apiFns.toISOString(originalValue), dateOnly);
|
|
298
|
+
};
|
|
299
|
+
switch (operatorTL) {
|
|
300
|
+
case "in":
|
|
301
|
+
case "notin": {
|
|
302
|
+
if (valueAsDateArray.length === 0) return "";
|
|
303
|
+
const items = valueAsDateArray.map(([orig]) => fmtDate(orig));
|
|
304
|
+
const joiner = shouldNegate(operatorTL) ? " && " : " || ";
|
|
305
|
+
const op = shouldNegate(operatorTL) ? "!=" : "=";
|
|
306
|
+
return items.map((item) => `${field} ${op} ${item}`).join(joiner);
|
|
307
|
+
}
|
|
308
|
+
case "between":
|
|
309
|
+
case "notbetween": {
|
|
310
|
+
if (valueAsDateArray.length < 2) return "";
|
|
311
|
+
const [first, second] = valueAsDateArray;
|
|
312
|
+
const [lo, hi] = apiFns.isBefore(first[1], second[1]) ? [first, second] : [second, first];
|
|
313
|
+
if (operatorTL === "notbetween") return `(${field} < ${fmtDate(lo[0])} || ${field} > ${fmtDate(hi[0])})`;
|
|
314
|
+
return `${field} >= ${fmtDate(lo[0])} && ${field} <= ${fmtDate(hi[0])}`;
|
|
315
|
+
}
|
|
316
|
+
default: {
|
|
317
|
+
if (valueAsDateArray.length === 0) return "";
|
|
318
|
+
const [orig] = valueAsDateArray[0];
|
|
319
|
+
return `${field} ${operatorTL === "<>" ? "!=" : operatorTL} ${fmtDate(orig)}`;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
};
|
|
323
|
+
//#endregion
|
|
214
324
|
//#region src/getDatetimeRuleProcessorSQL.ts
|
|
215
325
|
/**
|
|
216
326
|
* Generates a value processor with date/time features for use by
|
|
@@ -354,6 +464,6 @@ const getDatetimeRuleProcessorSQL = (apiFns) => (rule, options) => {
|
|
|
354
464
|
})} ${operator} ${finalValue}`.trim();
|
|
355
465
|
};
|
|
356
466
|
//#endregion
|
|
357
|
-
export { getDatetimeValueProcessorOracle as a,
|
|
467
|
+
export { getDatetimeValueProcessorOracle as a, datetimeValueProcessorNL as c, getDatetimeRuleProcessorMongoDBQuery as d, getDatetimeRuleProcessorCypher as f, processIsDateField as g, isISOStringDateOnly as h, getDatetimeValueProcessorMySQL as i, defaultDateTimeNLOperatorMap as l, getDatetimeJsonLogicOperations as m, getDatetimeValueProcessorANSI as n, getDatetimeValueProcessorPostgreSQL as o, getDatetimeRuleProcessorCEL as p, getDatetimeValueProcessorMSSQL as r, getDatetimeRuleProcessorSPARQL as s, getDatetimeRuleProcessorSQL as t, getDatetimeRuleProcessorNL as u };
|
|
358
468
|
|
|
359
|
-
//# sourceMappingURL=getDatetimeRuleProcessorSQL-
|
|
469
|
+
//# sourceMappingURL=getDatetimeRuleProcessorSQL-BGTFvbeK.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getDatetimeRuleProcessorSQL-BGTFvbeK.mjs","names":["shouldNegate","shouldNegate"],"sources":["../src/utils.ts","../src/getDatetimeJsonLogicOperations.ts","../src/getDatetimeRuleProcessorCEL.ts","../src/getDatetimeRuleProcessorCypher.ts","../src/getDatetimeRuleProcessorMongoDBQuery.ts","../src/getDatetimeRuleProcessorNL.ts","../src/getDatetimeRuleProcessorSPARQL.ts","../src/getDatetimeRuleProcessorSQL.ts"],"sourcesContent":["import type { RuleProcessor } from 'react-querybuilder';\nimport type { IsDateField, IsDateFieldFunction } from './types';\n\nexport const isISOStringDateOnly = (\n date: unknown\n): date is `${number}${number}${number}${number}-${number}${number}-${number}${number}` =>\n typeof date === 'string' && /^\\d{4}-\\d{2}-\\d{2}$/.test(date);\n\nexport const defaultIsDateField: IsDateFieldFunction = (\n ...[rule, opts]: Parameters<RuleProcessor>\n): boolean =>\n rule.operator !== 'contains' &&\n rule.operator !== 'beginsWith' &&\n rule.operator !== 'endsWith' &&\n rule.operator !== 'doesNotContain' &&\n rule.operator !== 'doesNotBeginWith' &&\n rule.operator !== 'doesNotEndWith' &&\n rule.operator !== 'null' &&\n rule.operator !== 'notNull' &&\n /^(?:date|datetime|datetimeoffset|timestamp)\\b/i.test(opts?.fieldData?.datatype as string);\n\nexport const processIsDateField = (\n isDateField: IsDateField,\n ...[rule, opts]: Parameters<RuleProcessor>\n): boolean => {\n if (typeof isDateField === 'boolean') {\n return isDateField;\n }\n\n if (typeof isDateField === 'function') {\n return isDateField(rule, opts);\n }\n\n if (Array.isArray(isDateField)) {\n return isDateField.some(condition =>\n Object.entries(condition).every(([key, value]) => opts?.fieldData?.[key] === value)\n );\n }\n\n if (typeof isDateField === 'object') {\n return Object.entries(isDateField).every(([key, value]) => opts?.fieldData?.[key] === value);\n }\n\n return defaultIsDateField(rule, opts);\n};\n","import type { RQBDateTimeLibraryAPI, RQBJsonLogicDateTimeOperations } from './types';\n\n/**\n * Custom operations for use with JsonLogic objects generated by\n * {@link datetimeRuleProcessorJsonLogic}.\n */\nexport const getDatetimeJsonLogicOperations = ({\n isAfter,\n isBefore,\n isSame,\n}: RQBDateTimeLibraryAPI): RQBJsonLogicDateTimeOperations => ({\n dateAfter: (a, b) => isAfter(a, b),\n dateBefore: (a, b) => isBefore(a, b),\n dateBetween: (a, b, c) =>\n isSame(b, a) ||\n isSame(b, c) ||\n (isAfter(b, a) && isBefore(b, c)) ||\n (isAfter(b, c) && isBefore(b, a)),\n dateNotBetween: (a, b, c) =>\n !isSame(b, a) &&\n !isSame(b, c) &&\n ((isBefore(a, c) && (isBefore(b, a) || isAfter(b, c))) ||\n (isAfter(a, c) && (isBefore(b, c) || isAfter(b, a)))),\n dateIn: (a, b) => b.some(v => isSame(a, v)),\n dateNotIn: (a, b) => b.every(v => !isSame(a, v)),\n dateNotOn: (a, b) => !isSame(a, b),\n dateOn: (a, b) => isSame(a, b),\n dateOnOrAfter: (a, b) => isAfter(a, b) || isSame(a, b),\n dateOnOrBefore: (a, b) => isBefore(a, b) || isSame(a, b),\n});\n","import type { RuleProcessor } from 'react-querybuilder';\nimport { defaultRuleProcessorCEL, lc, toArray } from 'react-querybuilder';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { processIsDateField } from './utils';\n\nconst shouldNegate = (op: string) => /^(does)?not/i.test(op);\n\n/**\n * Generates a rule processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the \"cel\" format.\n */\nexport const getDatetimeRuleProcessorCEL =\n (apiFns: RQBDateTimeLibraryAPI): RuleProcessor =>\n (rule, options) => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n const { context = {} } = opts;\n\n if (rule.valueSource === 'field' || !processIsDateField(context.isDateField, rule, opts)) {\n return defaultRuleProcessorCEL(rule, opts);\n }\n\n const ts = (d: string | Date) => `timestamp(\"${apiFns.toISOString(d)}\")`;\n\n const operatorTL = lc(rule.operator.replace(/^=$/, '=='));\n\n switch (operatorTL) {\n case '<':\n case '<=':\n case '==':\n case '!=':\n case '>':\n case '>=':\n return `${rule.field} ${operatorTL} ${ts(rule.value)}`;\n }\n\n const valueAsArray: string[] = toArray(rule.value, { retainEmptyStrings: false });\n const valueAsDateArray = valueAsArray\n .map(v => apiFns.toDate(v))\n .filter(dateVal => apiFns.isValid(dateVal));\n\n switch (operatorTL) {\n case 'in':\n case 'notin': {\n if (valueAsDateArray.length === 0) return '';\n const [prefix, suffix] = shouldNegate(operatorTL) ? ['!(', ')'] : ['', ''];\n return `${prefix}${rule.field} in [${valueAsDateArray\n .map(val => ts(val))\n .join(', ')}]${suffix}`;\n }\n\n case 'between':\n case 'notbetween': {\n if (valueAsDateArray.length < 2) return '';\n const [first, second] = valueAsDateArray;\n const [firstDate, secondDate] = apiFns.isBefore(first, second)\n ? [first, second]\n : [second, first];\n return operatorTL === 'between'\n ? `(${rule.field} >= ${ts(firstDate)} && ${rule.field} <= ${ts(secondDate)})`\n : `(${rule.field} < ${ts(firstDate)} || ${rule.field} > ${ts(secondDate)})`;\n }\n }\n\n return defaultRuleProcessorCEL(rule, opts);\n };\n","import type { RuleProcessor } from 'react-querybuilder';\nimport { defaultRuleProcessorCypher, lc, toArray } from 'react-querybuilder';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isISOStringDateOnly, processIsDateField } from './utils';\n\nconst shouldNegate = (op: string) => /^(does)?not/i.test(op);\n\n/**\n * Wraps a date string in the appropriate Cypher temporal constructor.\n * - Date-only strings (YYYY-MM-DD) become `date('...')`\n * - Full ISO strings become `datetime('...')`\n */\nconst cypherTemporal = (iso: string, dateOnly: boolean): string =>\n dateOnly ? `date('${iso}')` : `datetime('${iso}')`;\n\n/**\n * Generates a rule processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the \"cypher\" or \"gql\" format.\n *\n * Supports:\n * - Standard comparison operators (`=`, `!=`, `<`, `>`, `<=`, `>=`)\n * - Range operators (between, notBetween, in, notIn)\n * - Duration math via custom operators: `olderThanDuration` and `withinDuration`\n * (e.g., value `\"P30D\"` → `datetime() - field > duration('P30D')`)\n */\nexport const getDatetimeRuleProcessorCypher =\n (apiFns: RQBDateTimeLibraryAPI): RuleProcessor =>\n (rule, options) => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n const { context = {} } = opts;\n\n if (rule.valueSource === 'field' || !processIsDateField(context.isDateField, rule, opts)) {\n return defaultRuleProcessorCypher(rule, opts);\n }\n\n const { field, operator, value } = rule;\n const operatorTL = lc(operator);\n\n // Duration math operators — compare elapsed time against a duration literal\n if (operatorTL === 'olderthanduration') {\n return `datetime() - ${field} > duration('${value}')`;\n }\n if (operatorTL === 'withinduration') {\n return `datetime() - ${field} <= duration('${value}')`;\n }\n\n const valueAsArray: string[] = toArray(value, { retainEmptyStrings: false });\n const valueAsDateArray = valueAsArray\n .map((v): [string, Date] => [v, apiFns.toDate(v)])\n .filter(([, d]) => apiFns.isValid(d));\n\n const fmtDate = (originalValue: string): string => {\n const dateOnly = isISOStringDateOnly(originalValue);\n const iso = dateOnly\n ? apiFns.toISOStringDateOnly(originalValue)\n : apiFns.toISOString(originalValue);\n return cypherTemporal(iso, dateOnly);\n };\n\n switch (operatorTL) {\n case 'in':\n case 'notin': {\n if (valueAsDateArray.length === 0) return '';\n const items = valueAsDateArray.map(([orig]) => fmtDate(orig));\n const prefix = shouldNegate(operatorTL) ? 'NOT ' : '';\n return `${prefix}${field} IN [${items.join(', ')}]`;\n }\n\n case 'between':\n case 'notbetween': {\n if (valueAsDateArray.length < 2) return '';\n const [first, second] = valueAsDateArray;\n const [lo, hi] = apiFns.isBefore(first[1], second[1]) ? [first, second] : [second, first];\n const expr = `${fmtDate(lo[0])} <= ${field} AND ${field} <= ${fmtDate(hi[0])}`;\n return operatorTL === 'notbetween' ? `NOT (${expr})` : expr;\n }\n\n default: {\n // Standard comparison: =, !=, <, >, <=, >=\n if (valueAsDateArray.length === 0) return '';\n const [orig] = valueAsDateArray[0];\n const op = operatorTL === '<>' ? '<>' : operatorTL;\n return `${field} ${op} ${fmtDate(orig)}`;\n }\n }\n };\n","import type { RuleProcessor } from 'react-querybuilder';\nimport { defaultRuleProcessorMongoDBQuery, mongoOperators, toArray } from 'react-querybuilder';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { processIsDateField } from './utils';\n\n/**\n * Generates a rule processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the \"mongodb_query\" format.\n */\nexport const getDatetimeRuleProcessorMongoDBQuery =\n (apiFns: RQBDateTimeLibraryAPI): RuleProcessor =>\n (rule, options) => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n const { field, operator, value, valueSource } = rule;\n\n if (valueSource === 'field' || !processIsDateField(opts.context?.isDateField, rule, opts)) {\n return defaultRuleProcessorMongoDBQuery(rule, opts);\n }\n\n if (operator === '=') {\n return { [field]: apiFns.toDate(value) };\n }\n\n switch (operator) {\n case '<':\n case '<=':\n case '!=':\n case '>':\n case '>=':\n return { [field]: { [mongoOperators[operator]]: apiFns.toDate(value) } };\n }\n\n const valueAsArray: string[] = toArray(rule.value, { retainEmptyStrings: false });\n const valueAsDateArray = valueAsArray\n .map(v => apiFns.toDate(v))\n .filter(dateVal => apiFns.isValid(dateVal));\n\n switch (operator) {\n case 'in':\n case 'notIn':\n return { [field]: { [mongoOperators[operator]]: valueAsDateArray } };\n\n case 'between':\n case 'notBetween': {\n if (valueAsDateArray.length < 2) return '';\n const [first, second] = valueAsDateArray;\n const orderedArray = apiFns.isBefore(first, second) ? [first, second] : [second, first];\n return operator === 'between'\n ? { [field]: { $gte: orderedArray[0], $lte: orderedArray[1] } }\n : {\n $or: [{ [field]: { $lt: orderedArray[0] } }, { [field]: { $gt: orderedArray[1] } }],\n };\n }\n }\n\n return defaultRuleProcessorMongoDBQuery(rule, opts);\n };\n","import type { ExportOperatorMap, RuleProcessor, ValueProcessorByRule } from 'react-querybuilder';\nimport {\n defaultOperatorProcessorNL,\n defaultRuleProcessorNL,\n getQuotedFieldName,\n lc,\n normalizeConstituentWordOrder,\n toArray,\n} from 'react-querybuilder';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isISOStringDateOnly, processIsDateField } from './utils';\n\nexport const defaultDateTimeNLOperatorMap: ExportOperatorMap = {\n // '=': 'is',\n // '!=': 'is not',\n '<': 'is before',\n '>': 'is after',\n '<=': 'is on or before',\n '>=': 'is on or after',\n in: ['is one of the dates', 'is the same as a date in'],\n notin: ['is not one of the dates', 'is not the same as any date in'],\n between: ['is between', 'is between the dates in'],\n notbetween: ['is not between', 'is not between the dates in'],\n};\n\n/**\n * Generates a value processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the \"natural_language\" format.\n */\nexport const datetimeValueProcessorNL: ValueProcessorByRule = (rule, opts) => {\n if (isISOStringDateOnly(opts?.context?.originalValue)) {\n return new Intl.DateTimeFormat(opts?.context?.locales, {\n dateStyle: 'full',\n ...opts?.context?.dateFormat,\n }).format(rule.value);\n }\n return new Intl.DateTimeFormat(opts?.context?.locales, {\n dateStyle: 'full',\n timeStyle: 'long',\n ...opts?.context?.dateTimeFormat,\n }).format(rule.value);\n};\n\n/**\n * Generates a rule processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with\n * the \"natural_language\" format.\n */\nexport const getDatetimeRuleProcessorNL =\n (apiFns: RQBDateTimeLibraryAPI): RuleProcessor =>\n (rule, options) => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n const operatorLowerCase = lc(rule.operator);\n let finalValue = '';\n\n // v8 ignore next\n const {\n fieldData,\n quoteFieldNamesWith = ['', ''] as [string, string],\n fieldIdentifierSeparator = '',\n operatorProcessor = defaultOperatorProcessorNL,\n // valueProcessor = datetimeValueProcessorNL,\n wordOrder = 'SVO',\n context = {},\n operatorMap = defaultDateTimeNLOperatorMap,\n } = opts;\n\n if (!processIsDateField(context.isDateField, rule, opts)) {\n return defaultRuleProcessorNL(rule, opts);\n }\n\n if (rule.valueSource === 'field') {\n return defaultRuleProcessorNL(rule, { ...opts, operatorMap: defaultDateTimeNLOperatorMap });\n }\n\n if (\n (operatorLowerCase === 'in' ||\n operatorLowerCase === 'notin' ||\n operatorLowerCase === 'between' ||\n operatorLowerCase === 'notbetween') &&\n !rule.value\n ) {\n return '';\n }\n\n const valueAsArray: string[] = toArray(rule.value, { retainEmptyStrings: false });\n const valueAsDateArray = valueAsArray\n .map((v): [string, Date] => [v, apiFns.toDate(v)])\n .filter(v => apiFns.isValid(v[1]));\n\n switch (operatorLowerCase) {\n case 'in':\n case 'notin':\n {\n if (valueAsDateArray.length === 0) return '';\n finalValue = `(${valueAsDateArray\n .map(value =>\n datetimeValueProcessorNL(\n { field: rule.field, operator: '=', value: value[1] },\n { ...opts, context: { ...context, originalValue: value[0] } }\n )\n )\n .join(', ')})`;\n }\n break;\n\n case 'between':\n case 'notbetween':\n {\n if (valueAsDateArray.length < 2) return '';\n const [first, second] = valueAsDateArray;\n const orderedArray = apiFns.isBefore(first[1], second[1])\n ? [first, second]\n : [second, first];\n finalValue = orderedArray\n .map(([originalValue, value]) =>\n datetimeValueProcessorNL(\n { field: rule.field, operator: '=', value },\n { ...opts, context: { ...context, originalValue } }\n )\n )\n .join(` ${opts.translations?.and ?? 'and'} `);\n }\n break;\n\n default: {\n const [originalValue, value] = valueAsDateArray[0] ?? ['', ''];\n finalValue = originalValue\n ? datetimeValueProcessorNL(\n { field: rule.field, operator: '=', value },\n { ...opts, context: { ...context, originalValue } }\n )\n : '';\n }\n }\n\n const processedField = getQuotedFieldName(fieldData?.label ?? rule.field, {\n quoteFieldNamesWith,\n fieldIdentifierSeparator,\n });\n\n const processedOperator = operatorProcessor(rule, {\n ...opts,\n operatorMap: { ...defaultDateTimeNLOperatorMap, ...operatorMap },\n });\n\n const wordOrderMap = {\n S: processedField,\n V: processedOperator,\n O: finalValue,\n };\n\n return normalizeConstituentWordOrder(wordOrder)\n .map(term => `${wordOrderMap[term]}`)\n .join(' ')\n .trim();\n };\n","import type { RuleProcessor } from 'react-querybuilder';\nimport { defaultRuleProcessorSPARQL, lc, toArray } from 'react-querybuilder';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isISOStringDateOnly, processIsDateField } from './utils';\n\nconst shouldNegate = (op: string) => /^(does)?not/i.test(op);\n\n/**\n * Wraps a date string in the appropriate SPARQL typed literal.\n * - Date-only strings (YYYY-MM-DD) become `\"...\"^^xsd:date`\n * - Full ISO strings become `\"...\"^^xsd:dateTime`\n */\nconst sparqlTemporal = (iso: string, dateOnly: boolean): string =>\n dateOnly ? `\"${iso}\"^^xsd:date` : `\"${iso}\"^^xsd:dateTime`;\n\n/**\n * Generates a rule processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the \"sparql\" format.\n *\n * Supports:\n * - Standard comparison operators (`=`, `!=`, `<`, `>`, `<=`, `>=`)\n * - Range operators (between, notBetween, in, notIn)\n * - Duration math via custom operators: `olderThanDuration` and `withinDuration`\n * (e.g., value `\"P30D\"` → `NOW() - ?field > \"P30D\"^^xsd:duration`)\n */\nexport const getDatetimeRuleProcessorSPARQL =\n (apiFns: RQBDateTimeLibraryAPI): RuleProcessor =>\n (rule, options) => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n const { context = {} } = opts;\n\n if (rule.valueSource === 'field' || !processIsDateField(context.isDateField, rule, opts)) {\n return defaultRuleProcessorSPARQL(rule, opts);\n }\n\n const { field, operator, value } = rule;\n const operatorTL = lc(operator);\n\n // Duration math operators — compare elapsed time against an xsd:duration literal\n if (operatorTL === 'olderthanduration') {\n return `NOW() - ${field} > \"${value}\"^^xsd:duration`;\n }\n if (operatorTL === 'withinduration') {\n return `NOW() - ${field} <= \"${value}\"^^xsd:duration`;\n }\n\n const valueAsArray: string[] = toArray(value, { retainEmptyStrings: false });\n const valueAsDateArray = valueAsArray\n .map((v): [string, Date] => [v, apiFns.toDate(v)])\n .filter(([, d]) => apiFns.isValid(d));\n\n const fmtDate = (originalValue: string): string => {\n const dateOnly = isISOStringDateOnly(originalValue);\n const iso = dateOnly\n ? apiFns.toISOStringDateOnly(originalValue)\n : apiFns.toISOString(originalValue);\n return sparqlTemporal(iso, dateOnly);\n };\n\n switch (operatorTL) {\n case 'in':\n case 'notin': {\n if (valueAsDateArray.length === 0) return '';\n const items = valueAsDateArray.map(([orig]) => fmtDate(orig));\n const joiner = shouldNegate(operatorTL) ? ' && ' : ' || ';\n const op = shouldNegate(operatorTL) ? '!=' : '=';\n return items.map(item => `${field} ${op} ${item}`).join(joiner);\n }\n\n case 'between':\n case 'notbetween': {\n if (valueAsDateArray.length < 2) return '';\n const [first, second] = valueAsDateArray;\n const [lo, hi] = apiFns.isBefore(first[1], second[1]) ? [first, second] : [second, first];\n if (operatorTL === 'notbetween') {\n return `(${field} < ${fmtDate(lo[0])} || ${field} > ${fmtDate(hi[0])})`;\n }\n return `${field} >= ${fmtDate(lo[0])} && ${field} <= ${fmtDate(hi[0])}`;\n }\n\n default: {\n // Standard comparison: =, !=, <, >, <=, >=\n if (valueAsDateArray.length === 0) return '';\n const [orig] = valueAsDateArray[0];\n const op = operatorTL === '<>' ? '!=' : operatorTL;\n return `${field} ${op} ${fmtDate(orig)}`;\n }\n }\n };\n","import type { RuleProcessor, SQLPreset, ValueProcessorByRule } from 'react-querybuilder';\nimport {\n defaultRuleProcessorSQL,\n defaultValueProcessorByRule,\n getQuotedFieldName,\n lc,\n mapSQLOperator,\n toArray,\n} from 'react-querybuilder';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isISOStringDateOnly, processIsDateField } from './utils';\n\n/**\n * Generates a value processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the \"sql\" format and \"ansi\" preset.\n */\nexport const getDatetimeValueProcessorANSI =\n ({ toISOStringDateOnly, toISOString }: RQBDateTimeLibraryAPI): ValueProcessorByRule =>\n (rule, opts) => {\n if (isISOStringDateOnly(opts?.context?.originalValue)) {\n return defaultValueProcessorByRule({ ...rule, value: toISOStringDateOnly(rule.value) }, opts);\n }\n return defaultValueProcessorByRule({ ...rule, value: toISOString(rule.value as Date) }, opts);\n };\n\n/**\n * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with\n * the \"sql\" format and \"mssql\" preset.\n */\nexport const getDatetimeValueProcessorMSSQL =\n ({ toISOStringDateOnly, toISOString }: RQBDateTimeLibraryAPI): ValueProcessorByRule =>\n (rule, opts) => {\n const datatype = /^(?:small)?datetime/i.test(opts?.fieldData?.datatype as string)\n ? 'datetimeoffset'\n : 'date';\n const value =\n datatype === 'datetimeoffset' ? toISOString(rule.value) : toISOStringDateOnly(rule.value);\n return defaultValueProcessorByRule(\n { ...rule, value },\n { ...opts, wrapValueWith: [`cast(`, ` as ${datatype})`] }\n );\n };\n\n/**\n * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with\n * the \"sql\" format and \"mysql\" preset.\n */\nexport const getDatetimeValueProcessorMySQL =\n ({ toISOStringDateOnly, toISOString }: RQBDateTimeLibraryAPI): ValueProcessorByRule =>\n (rule, opts) => {\n const datatype = /^(?:datetime|timestamp)/i.test(opts?.fieldData?.datatype as string)\n ? 'datetime'\n : 'date';\n const value =\n datatype === 'datetime' ? toISOString(rule.value) : toISOStringDateOnly(rule.value);\n return defaultValueProcessorByRule(\n { ...rule, value },\n { ...opts, wrapValueWith: [`cast(`, ` as ${datatype})`] }\n );\n };\n\n/**\n * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with\n * the \"sql\" format and \"oracle\" preset.\n */\nexport const getDatetimeValueProcessorOracle =\n ({ toISOStringDateOnly, toISOString }: RQBDateTimeLibraryAPI): ValueProcessorByRule =>\n (rule, opts) => {\n // Oracle date format for _reading_ ISO 8601: 'YYYY-MM-DD\"T\"HH24:MI:SS.ff3\"Z\"'\n const datatype = /^timestamp/i.test(opts?.fieldData?.datatype as string) ? 'timestamp' : 'date';\n const value =\n datatype === 'timestamp'\n ? toISOString(rule.value).replaceAll('T', ' ').replace('Z', ' UTC')\n : toISOStringDateOnly(rule.value);\n return defaultValueProcessorByRule(\n { ...rule, value },\n { ...opts, wrapValueWith: [datatype, ``] }\n );\n };\n\n/**\n * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with\n * the \"sql\" format and \"postgresql\" preset.\n */\nexport const getDatetimeValueProcessorPostgreSQL =\n ({ toISOStringDateOnly, toISOString }: RQBDateTimeLibraryAPI): ValueProcessorByRule =>\n (rule, opts) => {\n const datatype = /^timestamp/i.test(opts?.fieldData?.datatype as string) ? 'timestamp' : 'date';\n const value =\n datatype === 'timestamp' ? toISOString(rule.value) : toISOStringDateOnly(rule.value);\n return defaultValueProcessorByRule(\n { ...rule, value },\n { ...opts, wrapValueWith: [datatype, ``] }\n );\n };\n\nconst presetToValueProcessorMap = {\n ansi: getDatetimeValueProcessorANSI,\n mssql: getDatetimeValueProcessorMSSQL,\n mysql: getDatetimeValueProcessorMySQL,\n oracle: getDatetimeValueProcessorOracle,\n postgresql: getDatetimeValueProcessorPostgreSQL,\n sqlite: getDatetimeValueProcessorANSI,\n} satisfies Record<SQLPreset, (apiFns: RQBDateTimeLibraryAPI) => ValueProcessorByRule>;\n\n/**\n * Generates a rule processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with\n * the \"sql\" format.\n */\nexport const getDatetimeRuleProcessorSQL =\n (apiFns: RQBDateTimeLibraryAPI): RuleProcessor =>\n (rule, options) => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n const operator = mapSQLOperator(rule.operator);\n const operatorLowerCase = lc(operator);\n // v8 ignore next\n const {\n quoteFieldNamesWith = ['', ''] as [string, string],\n fieldIdentifierSeparator = '',\n context = {},\n } = opts;\n let finalValue = '';\n\n if (rule.valueSource === 'field' || !processIsDateField(context.isDateField, rule, opts)) {\n return defaultRuleProcessorSQL(rule, opts);\n }\n\n const valueProcessor = presetToValueProcessorMap[opts.preset!](apiFns);\n\n const valueAsArray: string[] = toArray(rule.value, { retainEmptyStrings: false });\n const valueAsDateArray = valueAsArray\n .map((v): [string, Date] => [v, apiFns.toDate(v)])\n .filter(v => apiFns.isValid(v[1]));\n\n switch (operatorLowerCase) {\n case 'in':\n case 'not in':\n {\n if (valueAsDateArray.length === 0) return '';\n finalValue = `(${valueAsDateArray\n .map(value =>\n valueProcessor(\n { field: rule.field, operator: '=', value: value[1] },\n { ...opts, context: { originalValue: value[0] } }\n )\n )\n .join(', ')})`;\n }\n break;\n\n case 'between':\n case 'not between':\n {\n if (valueAsDateArray.length < 2) return '';\n const [first, second] = valueAsDateArray;\n const orderedArray = apiFns.isBefore(first[1], second[1])\n ? [first, second]\n : [second, first];\n finalValue = orderedArray\n .map(([originalValue, value]) =>\n valueProcessor(\n { field: rule.field, operator: '=', value },\n { ...opts, context: { originalValue } }\n )\n )\n .join(' and ');\n }\n break;\n\n default: {\n const [originalValue, value] = valueAsDateArray[0] ?? ['', ''];\n finalValue = valueProcessor(\n { field: rule.field, operator: '=', value },\n { ...opts, context: { originalValue } }\n );\n }\n }\n\n return `${getQuotedFieldName(rule.field, { quoteFieldNamesWith, fieldIdentifierSeparator })} ${operator} ${finalValue}`.trim();\n };\n"],"mappings":"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"}
|
package/dist/{getDatetimeRuleProcessorSQL-CnTp42xr.js → getDatetimeRuleProcessorSQL-Bpt88k6a.js}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defaultOperatorProcessorNL, defaultRuleProcessorCEL, defaultRuleProcessorMongoDBQuery, defaultRuleProcessorNL, defaultRuleProcessorSQL, defaultValueProcessorByRule, getQuotedFieldName, lc, mapSQLOperator, mongoOperators, normalizeConstituentWordOrder, toArray } from "react-querybuilder";
|
|
1
|
+
import { defaultOperatorProcessorNL, defaultRuleProcessorCEL, defaultRuleProcessorCypher, defaultRuleProcessorMongoDBQuery, defaultRuleProcessorNL, defaultRuleProcessorSPARQL, defaultRuleProcessorSQL, defaultValueProcessorByRule, getQuotedFieldName, lc, mapSQLOperator, mongoOperators, normalizeConstituentWordOrder, toArray } from "react-querybuilder";
|
|
2
2
|
//#region src/utils.ts
|
|
3
3
|
const isISOStringDateOnly = (date) => typeof date === "string" && /^\d{4}-\d{2}-\d{2}$/.test(date);
|
|
4
4
|
const defaultIsDateField = (...[rule, opts]) => {
|
|
@@ -38,7 +38,7 @@ const getDatetimeJsonLogicOperations = ({ isAfter, isBefore, isSame }) => ({
|
|
|
38
38
|
});
|
|
39
39
|
//#endregion
|
|
40
40
|
//#region src/getDatetimeRuleProcessorCEL.ts
|
|
41
|
-
const shouldNegate = (op) => /^(does)?not/i.test(op);
|
|
41
|
+
const shouldNegate$2 = (op) => /^(does)?not/i.test(op);
|
|
42
42
|
/**
|
|
43
43
|
* Generates a rule processor with date/time features for use by
|
|
44
44
|
* {@link @react-querybuilder/core!formatQuery formatQuery} with the "cel" format.
|
|
@@ -62,7 +62,7 @@ const getDatetimeRuleProcessorCEL = (apiFns) => (rule, options) => {
|
|
|
62
62
|
case "in":
|
|
63
63
|
case "notin": {
|
|
64
64
|
if (valueAsDateArray.length === 0) return "";
|
|
65
|
-
const [prefix, suffix] = shouldNegate(operatorTL) ? ["!(", ")"] : ["", ""];
|
|
65
|
+
const [prefix, suffix] = shouldNegate$2(operatorTL) ? ["!(", ")"] : ["", ""];
|
|
66
66
|
return `${prefix}${rule.field} in [${valueAsDateArray.map((val) => ts(val)).join(", ")}]${suffix}`;
|
|
67
67
|
}
|
|
68
68
|
case "between":
|
|
@@ -76,6 +76,60 @@ const getDatetimeRuleProcessorCEL = (apiFns) => (rule, options) => {
|
|
|
76
76
|
return defaultRuleProcessorCEL(rule, opts);
|
|
77
77
|
};
|
|
78
78
|
//#endregion
|
|
79
|
+
//#region src/getDatetimeRuleProcessorCypher.ts
|
|
80
|
+
const shouldNegate$1 = (op) => /^(does)?not/i.test(op);
|
|
81
|
+
/**
|
|
82
|
+
* Wraps a date string in the appropriate Cypher temporal constructor.
|
|
83
|
+
* - Date-only strings (YYYY-MM-DD) become `date('...')`
|
|
84
|
+
* - Full ISO strings become `datetime('...')`
|
|
85
|
+
*/
|
|
86
|
+
const cypherTemporal = (iso, dateOnly) => dateOnly ? `date('${iso}')` : `datetime('${iso}')`;
|
|
87
|
+
/**
|
|
88
|
+
* Generates a rule processor with date/time features for use by
|
|
89
|
+
* {@link @react-querybuilder/core!formatQuery formatQuery} with the "cypher" or "gql" format.
|
|
90
|
+
*
|
|
91
|
+
* Supports:
|
|
92
|
+
* - Standard comparison operators (`=`, `!=`, `<`, `>`, `<=`, `>=`)
|
|
93
|
+
* - Range operators (between, notBetween, in, notIn)
|
|
94
|
+
* - Duration math via custom operators: `olderThanDuration` and `withinDuration`
|
|
95
|
+
* (e.g., value `"P30D"` → `datetime() - field > duration('P30D')`)
|
|
96
|
+
*/
|
|
97
|
+
const getDatetimeRuleProcessorCypher = (apiFns) => (rule, options) => {
|
|
98
|
+
const opts = options !== null && options !== void 0 ? options : /* v8 ignore start -- @preserve */ {};
|
|
99
|
+
const { context = {} } = opts;
|
|
100
|
+
if (rule.valueSource === "field" || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorCypher(rule, opts);
|
|
101
|
+
const { field, operator, value } = rule;
|
|
102
|
+
const operatorTL = lc(operator);
|
|
103
|
+
if (operatorTL === "olderthanduration") return `datetime() - ${field} > duration('${value}')`;
|
|
104
|
+
if (operatorTL === "withinduration") return `datetime() - ${field} <= duration('${value}')`;
|
|
105
|
+
const valueAsDateArray = toArray(value, { retainEmptyStrings: false }).map((v) => [v, apiFns.toDate(v)]).filter(([, d]) => apiFns.isValid(d));
|
|
106
|
+
const fmtDate = (originalValue) => {
|
|
107
|
+
const dateOnly = isISOStringDateOnly(originalValue);
|
|
108
|
+
return cypherTemporal(dateOnly ? apiFns.toISOStringDateOnly(originalValue) : apiFns.toISOString(originalValue), dateOnly);
|
|
109
|
+
};
|
|
110
|
+
switch (operatorTL) {
|
|
111
|
+
case "in":
|
|
112
|
+
case "notin": {
|
|
113
|
+
if (valueAsDateArray.length === 0) return "";
|
|
114
|
+
const items = valueAsDateArray.map(([orig]) => fmtDate(orig));
|
|
115
|
+
return `${shouldNegate$1(operatorTL) ? "NOT " : ""}${field} IN [${items.join(", ")}]`;
|
|
116
|
+
}
|
|
117
|
+
case "between":
|
|
118
|
+
case "notbetween": {
|
|
119
|
+
if (valueAsDateArray.length < 2) return "";
|
|
120
|
+
const [first, second] = valueAsDateArray;
|
|
121
|
+
const [lo, hi] = apiFns.isBefore(first[1], second[1]) ? [first, second] : [second, first];
|
|
122
|
+
const expr = `${fmtDate(lo[0])} <= ${field} AND ${field} <= ${fmtDate(hi[0])}`;
|
|
123
|
+
return operatorTL === "notbetween" ? `NOT (${expr})` : expr;
|
|
124
|
+
}
|
|
125
|
+
default: {
|
|
126
|
+
if (valueAsDateArray.length === 0) return "";
|
|
127
|
+
const [orig] = valueAsDateArray[0];
|
|
128
|
+
return `${field} ${operatorTL === "<>" ? "<>" : operatorTL} ${fmtDate(orig)}`;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
};
|
|
132
|
+
//#endregion
|
|
79
133
|
//#region src/getDatetimeRuleProcessorMongoDBQuery.ts
|
|
80
134
|
/**
|
|
81
135
|
* Generates a rule processor with date/time features for use by
|
|
@@ -112,7 +166,7 @@ const getDatetimeRuleProcessorMongoDBQuery = (apiFns) => (rule, options) => {
|
|
|
112
166
|
return defaultRuleProcessorMongoDBQuery(rule, opts);
|
|
113
167
|
};
|
|
114
168
|
//#endregion
|
|
115
|
-
//#region \0@oxc-project+runtime@0.
|
|
169
|
+
//#region \0@oxc-project+runtime@0.127.0/helpers/typeof.js
|
|
116
170
|
function _typeof(o) {
|
|
117
171
|
"@babel/helpers - typeof";
|
|
118
172
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
|
@@ -122,7 +176,7 @@ function _typeof(o) {
|
|
|
122
176
|
}, _typeof(o);
|
|
123
177
|
}
|
|
124
178
|
//#endregion
|
|
125
|
-
//#region \0@oxc-project+runtime@0.
|
|
179
|
+
//#region \0@oxc-project+runtime@0.127.0/helpers/toPrimitive.js
|
|
126
180
|
function toPrimitive(t, r) {
|
|
127
181
|
if ("object" != _typeof(t) || !t) return t;
|
|
128
182
|
var e = t[Symbol.toPrimitive];
|
|
@@ -134,13 +188,13 @@ function toPrimitive(t, r) {
|
|
|
134
188
|
return ("string" === r ? String : Number)(t);
|
|
135
189
|
}
|
|
136
190
|
//#endregion
|
|
137
|
-
//#region \0@oxc-project+runtime@0.
|
|
191
|
+
//#region \0@oxc-project+runtime@0.127.0/helpers/toPropertyKey.js
|
|
138
192
|
function toPropertyKey(t) {
|
|
139
193
|
var i = toPrimitive(t, "string");
|
|
140
194
|
return "symbol" == _typeof(i) ? i : i + "";
|
|
141
195
|
}
|
|
142
196
|
//#endregion
|
|
143
|
-
//#region \0@oxc-project+runtime@0.
|
|
197
|
+
//#region \0@oxc-project+runtime@0.127.0/helpers/defineProperty.js
|
|
144
198
|
function _defineProperty(e, r, t) {
|
|
145
199
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
146
200
|
value: t,
|
|
@@ -150,7 +204,7 @@ function _defineProperty(e, r, t) {
|
|
|
150
204
|
}) : e[r] = t, e;
|
|
151
205
|
}
|
|
152
206
|
//#endregion
|
|
153
|
-
//#region \0@oxc-project+runtime@0.
|
|
207
|
+
//#region \0@oxc-project+runtime@0.127.0/helpers/objectSpread2.js
|
|
154
208
|
function ownKeys(e, r) {
|
|
155
209
|
var t = Object.keys(e);
|
|
156
210
|
if (Object.getOwnPropertySymbols) {
|
|
@@ -258,6 +312,62 @@ const getDatetimeRuleProcessorNL = (apiFns) => (rule, options) => {
|
|
|
258
312
|
return normalizeConstituentWordOrder(wordOrder).map((term) => `${wordOrderMap[term]}`).join(" ").trim();
|
|
259
313
|
};
|
|
260
314
|
//#endregion
|
|
315
|
+
//#region src/getDatetimeRuleProcessorSPARQL.ts
|
|
316
|
+
const shouldNegate = (op) => /^(does)?not/i.test(op);
|
|
317
|
+
/**
|
|
318
|
+
* Wraps a date string in the appropriate SPARQL typed literal.
|
|
319
|
+
* - Date-only strings (YYYY-MM-DD) become `"..."^^xsd:date`
|
|
320
|
+
* - Full ISO strings become `"..."^^xsd:dateTime`
|
|
321
|
+
*/
|
|
322
|
+
const sparqlTemporal = (iso, dateOnly) => dateOnly ? `"${iso}"^^xsd:date` : `"${iso}"^^xsd:dateTime`;
|
|
323
|
+
/**
|
|
324
|
+
* Generates a rule processor with date/time features for use by
|
|
325
|
+
* {@link @react-querybuilder/core!formatQuery formatQuery} with the "sparql" format.
|
|
326
|
+
*
|
|
327
|
+
* Supports:
|
|
328
|
+
* - Standard comparison operators (`=`, `!=`, `<`, `>`, `<=`, `>=`)
|
|
329
|
+
* - Range operators (between, notBetween, in, notIn)
|
|
330
|
+
* - Duration math via custom operators: `olderThanDuration` and `withinDuration`
|
|
331
|
+
* (e.g., value `"P30D"` → `NOW() - ?field > "P30D"^^xsd:duration`)
|
|
332
|
+
*/
|
|
333
|
+
const getDatetimeRuleProcessorSPARQL = (apiFns) => (rule, options) => {
|
|
334
|
+
const opts = options !== null && options !== void 0 ? options : /* v8 ignore start -- @preserve */ {};
|
|
335
|
+
const { context = {} } = opts;
|
|
336
|
+
if (rule.valueSource === "field" || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorSPARQL(rule, opts);
|
|
337
|
+
const { field, operator, value } = rule;
|
|
338
|
+
const operatorTL = lc(operator);
|
|
339
|
+
if (operatorTL === "olderthanduration") return `NOW() - ${field} > "${value}"^^xsd:duration`;
|
|
340
|
+
if (operatorTL === "withinduration") return `NOW() - ${field} <= "${value}"^^xsd:duration`;
|
|
341
|
+
const valueAsDateArray = toArray(value, { retainEmptyStrings: false }).map((v) => [v, apiFns.toDate(v)]).filter(([, d]) => apiFns.isValid(d));
|
|
342
|
+
const fmtDate = (originalValue) => {
|
|
343
|
+
const dateOnly = isISOStringDateOnly(originalValue);
|
|
344
|
+
return sparqlTemporal(dateOnly ? apiFns.toISOStringDateOnly(originalValue) : apiFns.toISOString(originalValue), dateOnly);
|
|
345
|
+
};
|
|
346
|
+
switch (operatorTL) {
|
|
347
|
+
case "in":
|
|
348
|
+
case "notin": {
|
|
349
|
+
if (valueAsDateArray.length === 0) return "";
|
|
350
|
+
const items = valueAsDateArray.map(([orig]) => fmtDate(orig));
|
|
351
|
+
const joiner = shouldNegate(operatorTL) ? " && " : " || ";
|
|
352
|
+
const op = shouldNegate(operatorTL) ? "!=" : "=";
|
|
353
|
+
return items.map((item) => `${field} ${op} ${item}`).join(joiner);
|
|
354
|
+
}
|
|
355
|
+
case "between":
|
|
356
|
+
case "notbetween": {
|
|
357
|
+
if (valueAsDateArray.length < 2) return "";
|
|
358
|
+
const [first, second] = valueAsDateArray;
|
|
359
|
+
const [lo, hi] = apiFns.isBefore(first[1], second[1]) ? [first, second] : [second, first];
|
|
360
|
+
if (operatorTL === "notbetween") return `(${field} < ${fmtDate(lo[0])} || ${field} > ${fmtDate(hi[0])})`;
|
|
361
|
+
return `${field} >= ${fmtDate(lo[0])} && ${field} <= ${fmtDate(hi[0])}`;
|
|
362
|
+
}
|
|
363
|
+
default: {
|
|
364
|
+
if (valueAsDateArray.length === 0) return "";
|
|
365
|
+
const [orig] = valueAsDateArray[0];
|
|
366
|
+
return `${field} ${operatorTL === "<>" ? "!=" : operatorTL} ${fmtDate(orig)}`;
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
//#endregion
|
|
261
371
|
//#region src/getDatetimeRuleProcessorSQL.ts
|
|
262
372
|
/**
|
|
263
373
|
* Generates a value processor with date/time features for use by
|
|
@@ -368,6 +478,6 @@ const getDatetimeRuleProcessorSQL = (apiFns) => (rule, options) => {
|
|
|
368
478
|
})} ${operator} ${finalValue}`.trim();
|
|
369
479
|
};
|
|
370
480
|
//#endregion
|
|
371
|
-
export { getDatetimeValueProcessorOracle as a,
|
|
481
|
+
export { getDatetimeValueProcessorOracle as a, datetimeValueProcessorNL as c, getDatetimeRuleProcessorMongoDBQuery as d, getDatetimeRuleProcessorCypher as f, processIsDateField as g, isISOStringDateOnly as h, getDatetimeValueProcessorMySQL as i, defaultDateTimeNLOperatorMap as l, getDatetimeJsonLogicOperations as m, getDatetimeValueProcessorANSI as n, getDatetimeValueProcessorPostgreSQL as o, getDatetimeRuleProcessorCEL as p, getDatetimeValueProcessorMSSQL as r, getDatetimeRuleProcessorSPARQL as s, getDatetimeRuleProcessorSQL as t, getDatetimeRuleProcessorNL as u };
|
|
372
482
|
|
|
373
|
-
//# sourceMappingURL=getDatetimeRuleProcessorSQL-
|
|
483
|
+
//# sourceMappingURL=getDatetimeRuleProcessorSQL-Bpt88k6a.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getDatetimeRuleProcessorSQL-Bpt88k6a.js","names":["shouldNegate","shouldNegate"],"sources":["../src/utils.ts","../src/getDatetimeJsonLogicOperations.ts","../src/getDatetimeRuleProcessorCEL.ts","../src/getDatetimeRuleProcessorCypher.ts","../src/getDatetimeRuleProcessorMongoDBQuery.ts","../src/getDatetimeRuleProcessorNL.ts","../src/getDatetimeRuleProcessorSPARQL.ts","../src/getDatetimeRuleProcessorSQL.ts"],"sourcesContent":["import type { RuleProcessor } from 'react-querybuilder';\nimport type { IsDateField, IsDateFieldFunction } from './types';\n\nexport const isISOStringDateOnly = (\n date: unknown\n): date is `${number}${number}${number}${number}-${number}${number}-${number}${number}` =>\n typeof date === 'string' && /^\\d{4}-\\d{2}-\\d{2}$/.test(date);\n\nexport const defaultIsDateField: IsDateFieldFunction = (\n ...[rule, opts]: Parameters<RuleProcessor>\n): boolean =>\n rule.operator !== 'contains' &&\n rule.operator !== 'beginsWith' &&\n rule.operator !== 'endsWith' &&\n rule.operator !== 'doesNotContain' &&\n rule.operator !== 'doesNotBeginWith' &&\n rule.operator !== 'doesNotEndWith' &&\n rule.operator !== 'null' &&\n rule.operator !== 'notNull' &&\n /^(?:date|datetime|datetimeoffset|timestamp)\\b/i.test(opts?.fieldData?.datatype as string);\n\nexport const processIsDateField = (\n isDateField: IsDateField,\n ...[rule, opts]: Parameters<RuleProcessor>\n): boolean => {\n if (typeof isDateField === 'boolean') {\n return isDateField;\n }\n\n if (typeof isDateField === 'function') {\n return isDateField(rule, opts);\n }\n\n if (Array.isArray(isDateField)) {\n return isDateField.some(condition =>\n Object.entries(condition).every(([key, value]) => opts?.fieldData?.[key] === value)\n );\n }\n\n if (typeof isDateField === 'object') {\n return Object.entries(isDateField).every(([key, value]) => opts?.fieldData?.[key] === value);\n }\n\n return defaultIsDateField(rule, opts);\n};\n","import type { RQBDateTimeLibraryAPI, RQBJsonLogicDateTimeOperations } from './types';\n\n/**\n * Custom operations for use with JsonLogic objects generated by\n * {@link datetimeRuleProcessorJsonLogic}.\n */\nexport const getDatetimeJsonLogicOperations = ({\n isAfter,\n isBefore,\n isSame,\n}: RQBDateTimeLibraryAPI): RQBJsonLogicDateTimeOperations => ({\n dateAfter: (a, b) => isAfter(a, b),\n dateBefore: (a, b) => isBefore(a, b),\n dateBetween: (a, b, c) =>\n isSame(b, a) ||\n isSame(b, c) ||\n (isAfter(b, a) && isBefore(b, c)) ||\n (isAfter(b, c) && isBefore(b, a)),\n dateNotBetween: (a, b, c) =>\n !isSame(b, a) &&\n !isSame(b, c) &&\n ((isBefore(a, c) && (isBefore(b, a) || isAfter(b, c))) ||\n (isAfter(a, c) && (isBefore(b, c) || isAfter(b, a)))),\n dateIn: (a, b) => b.some(v => isSame(a, v)),\n dateNotIn: (a, b) => b.every(v => !isSame(a, v)),\n dateNotOn: (a, b) => !isSame(a, b),\n dateOn: (a, b) => isSame(a, b),\n dateOnOrAfter: (a, b) => isAfter(a, b) || isSame(a, b),\n dateOnOrBefore: (a, b) => isBefore(a, b) || isSame(a, b),\n});\n","import type { RuleProcessor } from 'react-querybuilder';\nimport { defaultRuleProcessorCEL, lc, toArray } from 'react-querybuilder';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { processIsDateField } from './utils';\n\nconst shouldNegate = (op: string) => /^(does)?not/i.test(op);\n\n/**\n * Generates a rule processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the \"cel\" format.\n */\nexport const getDatetimeRuleProcessorCEL =\n (apiFns: RQBDateTimeLibraryAPI): RuleProcessor =>\n (rule, options) => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n const { context = {} } = opts;\n\n if (rule.valueSource === 'field' || !processIsDateField(context.isDateField, rule, opts)) {\n return defaultRuleProcessorCEL(rule, opts);\n }\n\n const ts = (d: string | Date) => `timestamp(\"${apiFns.toISOString(d)}\")`;\n\n const operatorTL = lc(rule.operator.replace(/^=$/, '=='));\n\n switch (operatorTL) {\n case '<':\n case '<=':\n case '==':\n case '!=':\n case '>':\n case '>=':\n return `${rule.field} ${operatorTL} ${ts(rule.value)}`;\n }\n\n const valueAsArray: string[] = toArray(rule.value, { retainEmptyStrings: false });\n const valueAsDateArray = valueAsArray\n .map(v => apiFns.toDate(v))\n .filter(dateVal => apiFns.isValid(dateVal));\n\n switch (operatorTL) {\n case 'in':\n case 'notin': {\n if (valueAsDateArray.length === 0) return '';\n const [prefix, suffix] = shouldNegate(operatorTL) ? ['!(', ')'] : ['', ''];\n return `${prefix}${rule.field} in [${valueAsDateArray\n .map(val => ts(val))\n .join(', ')}]${suffix}`;\n }\n\n case 'between':\n case 'notbetween': {\n if (valueAsDateArray.length < 2) return '';\n const [first, second] = valueAsDateArray;\n const [firstDate, secondDate] = apiFns.isBefore(first, second)\n ? [first, second]\n : [second, first];\n return operatorTL === 'between'\n ? `(${rule.field} >= ${ts(firstDate)} && ${rule.field} <= ${ts(secondDate)})`\n : `(${rule.field} < ${ts(firstDate)} || ${rule.field} > ${ts(secondDate)})`;\n }\n }\n\n return defaultRuleProcessorCEL(rule, opts);\n };\n","import type { RuleProcessor } from 'react-querybuilder';\nimport { defaultRuleProcessorCypher, lc, toArray } from 'react-querybuilder';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isISOStringDateOnly, processIsDateField } from './utils';\n\nconst shouldNegate = (op: string) => /^(does)?not/i.test(op);\n\n/**\n * Wraps a date string in the appropriate Cypher temporal constructor.\n * - Date-only strings (YYYY-MM-DD) become `date('...')`\n * - Full ISO strings become `datetime('...')`\n */\nconst cypherTemporal = (iso: string, dateOnly: boolean): string =>\n dateOnly ? `date('${iso}')` : `datetime('${iso}')`;\n\n/**\n * Generates a rule processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the \"cypher\" or \"gql\" format.\n *\n * Supports:\n * - Standard comparison operators (`=`, `!=`, `<`, `>`, `<=`, `>=`)\n * - Range operators (between, notBetween, in, notIn)\n * - Duration math via custom operators: `olderThanDuration` and `withinDuration`\n * (e.g., value `\"P30D\"` → `datetime() - field > duration('P30D')`)\n */\nexport const getDatetimeRuleProcessorCypher =\n (apiFns: RQBDateTimeLibraryAPI): RuleProcessor =>\n (rule, options) => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n const { context = {} } = opts;\n\n if (rule.valueSource === 'field' || !processIsDateField(context.isDateField, rule, opts)) {\n return defaultRuleProcessorCypher(rule, opts);\n }\n\n const { field, operator, value } = rule;\n const operatorTL = lc(operator);\n\n // Duration math operators — compare elapsed time against a duration literal\n if (operatorTL === 'olderthanduration') {\n return `datetime() - ${field} > duration('${value}')`;\n }\n if (operatorTL === 'withinduration') {\n return `datetime() - ${field} <= duration('${value}')`;\n }\n\n const valueAsArray: string[] = toArray(value, { retainEmptyStrings: false });\n const valueAsDateArray = valueAsArray\n .map((v): [string, Date] => [v, apiFns.toDate(v)])\n .filter(([, d]) => apiFns.isValid(d));\n\n const fmtDate = (originalValue: string): string => {\n const dateOnly = isISOStringDateOnly(originalValue);\n const iso = dateOnly\n ? apiFns.toISOStringDateOnly(originalValue)\n : apiFns.toISOString(originalValue);\n return cypherTemporal(iso, dateOnly);\n };\n\n switch (operatorTL) {\n case 'in':\n case 'notin': {\n if (valueAsDateArray.length === 0) return '';\n const items = valueAsDateArray.map(([orig]) => fmtDate(orig));\n const prefix = shouldNegate(operatorTL) ? 'NOT ' : '';\n return `${prefix}${field} IN [${items.join(', ')}]`;\n }\n\n case 'between':\n case 'notbetween': {\n if (valueAsDateArray.length < 2) return '';\n const [first, second] = valueAsDateArray;\n const [lo, hi] = apiFns.isBefore(first[1], second[1]) ? [first, second] : [second, first];\n const expr = `${fmtDate(lo[0])} <= ${field} AND ${field} <= ${fmtDate(hi[0])}`;\n return operatorTL === 'notbetween' ? `NOT (${expr})` : expr;\n }\n\n default: {\n // Standard comparison: =, !=, <, >, <=, >=\n if (valueAsDateArray.length === 0) return '';\n const [orig] = valueAsDateArray[0];\n const op = operatorTL === '<>' ? '<>' : operatorTL;\n return `${field} ${op} ${fmtDate(orig)}`;\n }\n }\n };\n","import type { RuleProcessor } from 'react-querybuilder';\nimport { defaultRuleProcessorMongoDBQuery, mongoOperators, toArray } from 'react-querybuilder';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { processIsDateField } from './utils';\n\n/**\n * Generates a rule processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the \"mongodb_query\" format.\n */\nexport const getDatetimeRuleProcessorMongoDBQuery =\n (apiFns: RQBDateTimeLibraryAPI): RuleProcessor =>\n (rule, options) => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n const { field, operator, value, valueSource } = rule;\n\n if (valueSource === 'field' || !processIsDateField(opts.context?.isDateField, rule, opts)) {\n return defaultRuleProcessorMongoDBQuery(rule, opts);\n }\n\n if (operator === '=') {\n return { [field]: apiFns.toDate(value) };\n }\n\n switch (operator) {\n case '<':\n case '<=':\n case '!=':\n case '>':\n case '>=':\n return { [field]: { [mongoOperators[operator]]: apiFns.toDate(value) } };\n }\n\n const valueAsArray: string[] = toArray(rule.value, { retainEmptyStrings: false });\n const valueAsDateArray = valueAsArray\n .map(v => apiFns.toDate(v))\n .filter(dateVal => apiFns.isValid(dateVal));\n\n switch (operator) {\n case 'in':\n case 'notIn':\n return { [field]: { [mongoOperators[operator]]: valueAsDateArray } };\n\n case 'between':\n case 'notBetween': {\n if (valueAsDateArray.length < 2) return '';\n const [first, second] = valueAsDateArray;\n const orderedArray = apiFns.isBefore(first, second) ? [first, second] : [second, first];\n return operator === 'between'\n ? { [field]: { $gte: orderedArray[0], $lte: orderedArray[1] } }\n : {\n $or: [{ [field]: { $lt: orderedArray[0] } }, { [field]: { $gt: orderedArray[1] } }],\n };\n }\n }\n\n return defaultRuleProcessorMongoDBQuery(rule, opts);\n };\n","import type { ExportOperatorMap, RuleProcessor, ValueProcessorByRule } from 'react-querybuilder';\nimport {\n defaultOperatorProcessorNL,\n defaultRuleProcessorNL,\n getQuotedFieldName,\n lc,\n normalizeConstituentWordOrder,\n toArray,\n} from 'react-querybuilder';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isISOStringDateOnly, processIsDateField } from './utils';\n\nexport const defaultDateTimeNLOperatorMap: ExportOperatorMap = {\n // '=': 'is',\n // '!=': 'is not',\n '<': 'is before',\n '>': 'is after',\n '<=': 'is on or before',\n '>=': 'is on or after',\n in: ['is one of the dates', 'is the same as a date in'],\n notin: ['is not one of the dates', 'is not the same as any date in'],\n between: ['is between', 'is between the dates in'],\n notbetween: ['is not between', 'is not between the dates in'],\n};\n\n/**\n * Generates a value processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the \"natural_language\" format.\n */\nexport const datetimeValueProcessorNL: ValueProcessorByRule = (rule, opts) => {\n if (isISOStringDateOnly(opts?.context?.originalValue)) {\n return new Intl.DateTimeFormat(opts?.context?.locales, {\n dateStyle: 'full',\n ...opts?.context?.dateFormat,\n }).format(rule.value);\n }\n return new Intl.DateTimeFormat(opts?.context?.locales, {\n dateStyle: 'full',\n timeStyle: 'long',\n ...opts?.context?.dateTimeFormat,\n }).format(rule.value);\n};\n\n/**\n * Generates a rule processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with\n * the \"natural_language\" format.\n */\nexport const getDatetimeRuleProcessorNL =\n (apiFns: RQBDateTimeLibraryAPI): RuleProcessor =>\n (rule, options) => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n const operatorLowerCase = lc(rule.operator);\n let finalValue = '';\n\n // v8 ignore next\n const {\n fieldData,\n quoteFieldNamesWith = ['', ''] as [string, string],\n fieldIdentifierSeparator = '',\n operatorProcessor = defaultOperatorProcessorNL,\n // valueProcessor = datetimeValueProcessorNL,\n wordOrder = 'SVO',\n context = {},\n operatorMap = defaultDateTimeNLOperatorMap,\n } = opts;\n\n if (!processIsDateField(context.isDateField, rule, opts)) {\n return defaultRuleProcessorNL(rule, opts);\n }\n\n if (rule.valueSource === 'field') {\n return defaultRuleProcessorNL(rule, { ...opts, operatorMap: defaultDateTimeNLOperatorMap });\n }\n\n if (\n (operatorLowerCase === 'in' ||\n operatorLowerCase === 'notin' ||\n operatorLowerCase === 'between' ||\n operatorLowerCase === 'notbetween') &&\n !rule.value\n ) {\n return '';\n }\n\n const valueAsArray: string[] = toArray(rule.value, { retainEmptyStrings: false });\n const valueAsDateArray = valueAsArray\n .map((v): [string, Date] => [v, apiFns.toDate(v)])\n .filter(v => apiFns.isValid(v[1]));\n\n switch (operatorLowerCase) {\n case 'in':\n case 'notin':\n {\n if (valueAsDateArray.length === 0) return '';\n finalValue = `(${valueAsDateArray\n .map(value =>\n datetimeValueProcessorNL(\n { field: rule.field, operator: '=', value: value[1] },\n { ...opts, context: { ...context, originalValue: value[0] } }\n )\n )\n .join(', ')})`;\n }\n break;\n\n case 'between':\n case 'notbetween':\n {\n if (valueAsDateArray.length < 2) return '';\n const [first, second] = valueAsDateArray;\n const orderedArray = apiFns.isBefore(first[1], second[1])\n ? [first, second]\n : [second, first];\n finalValue = orderedArray\n .map(([originalValue, value]) =>\n datetimeValueProcessorNL(\n { field: rule.field, operator: '=', value },\n { ...opts, context: { ...context, originalValue } }\n )\n )\n .join(` ${opts.translations?.and ?? 'and'} `);\n }\n break;\n\n default: {\n const [originalValue, value] = valueAsDateArray[0] ?? ['', ''];\n finalValue = originalValue\n ? datetimeValueProcessorNL(\n { field: rule.field, operator: '=', value },\n { ...opts, context: { ...context, originalValue } }\n )\n : '';\n }\n }\n\n const processedField = getQuotedFieldName(fieldData?.label ?? rule.field, {\n quoteFieldNamesWith,\n fieldIdentifierSeparator,\n });\n\n const processedOperator = operatorProcessor(rule, {\n ...opts,\n operatorMap: { ...defaultDateTimeNLOperatorMap, ...operatorMap },\n });\n\n const wordOrderMap = {\n S: processedField,\n V: processedOperator,\n O: finalValue,\n };\n\n return normalizeConstituentWordOrder(wordOrder)\n .map(term => `${wordOrderMap[term]}`)\n .join(' ')\n .trim();\n };\n","import type { RuleProcessor } from 'react-querybuilder';\nimport { defaultRuleProcessorSPARQL, lc, toArray } from 'react-querybuilder';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isISOStringDateOnly, processIsDateField } from './utils';\n\nconst shouldNegate = (op: string) => /^(does)?not/i.test(op);\n\n/**\n * Wraps a date string in the appropriate SPARQL typed literal.\n * - Date-only strings (YYYY-MM-DD) become `\"...\"^^xsd:date`\n * - Full ISO strings become `\"...\"^^xsd:dateTime`\n */\nconst sparqlTemporal = (iso: string, dateOnly: boolean): string =>\n dateOnly ? `\"${iso}\"^^xsd:date` : `\"${iso}\"^^xsd:dateTime`;\n\n/**\n * Generates a rule processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the \"sparql\" format.\n *\n * Supports:\n * - Standard comparison operators (`=`, `!=`, `<`, `>`, `<=`, `>=`)\n * - Range operators (between, notBetween, in, notIn)\n * - Duration math via custom operators: `olderThanDuration` and `withinDuration`\n * (e.g., value `\"P30D\"` → `NOW() - ?field > \"P30D\"^^xsd:duration`)\n */\nexport const getDatetimeRuleProcessorSPARQL =\n (apiFns: RQBDateTimeLibraryAPI): RuleProcessor =>\n (rule, options) => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n const { context = {} } = opts;\n\n if (rule.valueSource === 'field' || !processIsDateField(context.isDateField, rule, opts)) {\n return defaultRuleProcessorSPARQL(rule, opts);\n }\n\n const { field, operator, value } = rule;\n const operatorTL = lc(operator);\n\n // Duration math operators — compare elapsed time against an xsd:duration literal\n if (operatorTL === 'olderthanduration') {\n return `NOW() - ${field} > \"${value}\"^^xsd:duration`;\n }\n if (operatorTL === 'withinduration') {\n return `NOW() - ${field} <= \"${value}\"^^xsd:duration`;\n }\n\n const valueAsArray: string[] = toArray(value, { retainEmptyStrings: false });\n const valueAsDateArray = valueAsArray\n .map((v): [string, Date] => [v, apiFns.toDate(v)])\n .filter(([, d]) => apiFns.isValid(d));\n\n const fmtDate = (originalValue: string): string => {\n const dateOnly = isISOStringDateOnly(originalValue);\n const iso = dateOnly\n ? apiFns.toISOStringDateOnly(originalValue)\n : apiFns.toISOString(originalValue);\n return sparqlTemporal(iso, dateOnly);\n };\n\n switch (operatorTL) {\n case 'in':\n case 'notin': {\n if (valueAsDateArray.length === 0) return '';\n const items = valueAsDateArray.map(([orig]) => fmtDate(orig));\n const joiner = shouldNegate(operatorTL) ? ' && ' : ' || ';\n const op = shouldNegate(operatorTL) ? '!=' : '=';\n return items.map(item => `${field} ${op} ${item}`).join(joiner);\n }\n\n case 'between':\n case 'notbetween': {\n if (valueAsDateArray.length < 2) return '';\n const [first, second] = valueAsDateArray;\n const [lo, hi] = apiFns.isBefore(first[1], second[1]) ? [first, second] : [second, first];\n if (operatorTL === 'notbetween') {\n return `(${field} < ${fmtDate(lo[0])} || ${field} > ${fmtDate(hi[0])})`;\n }\n return `${field} >= ${fmtDate(lo[0])} && ${field} <= ${fmtDate(hi[0])}`;\n }\n\n default: {\n // Standard comparison: =, !=, <, >, <=, >=\n if (valueAsDateArray.length === 0) return '';\n const [orig] = valueAsDateArray[0];\n const op = operatorTL === '<>' ? '!=' : operatorTL;\n return `${field} ${op} ${fmtDate(orig)}`;\n }\n }\n };\n","import type { RuleProcessor, SQLPreset, ValueProcessorByRule } from 'react-querybuilder';\nimport {\n defaultRuleProcessorSQL,\n defaultValueProcessorByRule,\n getQuotedFieldName,\n lc,\n mapSQLOperator,\n toArray,\n} from 'react-querybuilder';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isISOStringDateOnly, processIsDateField } from './utils';\n\n/**\n * Generates a value processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the \"sql\" format and \"ansi\" preset.\n */\nexport const getDatetimeValueProcessorANSI =\n ({ toISOStringDateOnly, toISOString }: RQBDateTimeLibraryAPI): ValueProcessorByRule =>\n (rule, opts) => {\n if (isISOStringDateOnly(opts?.context?.originalValue)) {\n return defaultValueProcessorByRule({ ...rule, value: toISOStringDateOnly(rule.value) }, opts);\n }\n return defaultValueProcessorByRule({ ...rule, value: toISOString(rule.value as Date) }, opts);\n };\n\n/**\n * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with\n * the \"sql\" format and \"mssql\" preset.\n */\nexport const getDatetimeValueProcessorMSSQL =\n ({ toISOStringDateOnly, toISOString }: RQBDateTimeLibraryAPI): ValueProcessorByRule =>\n (rule, opts) => {\n const datatype = /^(?:small)?datetime/i.test(opts?.fieldData?.datatype as string)\n ? 'datetimeoffset'\n : 'date';\n const value =\n datatype === 'datetimeoffset' ? toISOString(rule.value) : toISOStringDateOnly(rule.value);\n return defaultValueProcessorByRule(\n { ...rule, value },\n { ...opts, wrapValueWith: [`cast(`, ` as ${datatype})`] }\n );\n };\n\n/**\n * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with\n * the \"sql\" format and \"mysql\" preset.\n */\nexport const getDatetimeValueProcessorMySQL =\n ({ toISOStringDateOnly, toISOString }: RQBDateTimeLibraryAPI): ValueProcessorByRule =>\n (rule, opts) => {\n const datatype = /^(?:datetime|timestamp)/i.test(opts?.fieldData?.datatype as string)\n ? 'datetime'\n : 'date';\n const value =\n datatype === 'datetime' ? toISOString(rule.value) : toISOStringDateOnly(rule.value);\n return defaultValueProcessorByRule(\n { ...rule, value },\n { ...opts, wrapValueWith: [`cast(`, ` as ${datatype})`] }\n );\n };\n\n/**\n * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with\n * the \"sql\" format and \"oracle\" preset.\n */\nexport const getDatetimeValueProcessorOracle =\n ({ toISOStringDateOnly, toISOString }: RQBDateTimeLibraryAPI): ValueProcessorByRule =>\n (rule, opts) => {\n // Oracle date format for _reading_ ISO 8601: 'YYYY-MM-DD\"T\"HH24:MI:SS.ff3\"Z\"'\n const datatype = /^timestamp/i.test(opts?.fieldData?.datatype as string) ? 'timestamp' : 'date';\n const value =\n datatype === 'timestamp'\n ? toISOString(rule.value).replaceAll('T', ' ').replace('Z', ' UTC')\n : toISOStringDateOnly(rule.value);\n return defaultValueProcessorByRule(\n { ...rule, value },\n { ...opts, wrapValueWith: [datatype, ``] }\n );\n };\n\n/**\n * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with\n * the \"sql\" format and \"postgresql\" preset.\n */\nexport const getDatetimeValueProcessorPostgreSQL =\n ({ toISOStringDateOnly, toISOString }: RQBDateTimeLibraryAPI): ValueProcessorByRule =>\n (rule, opts) => {\n const datatype = /^timestamp/i.test(opts?.fieldData?.datatype as string) ? 'timestamp' : 'date';\n const value =\n datatype === 'timestamp' ? toISOString(rule.value) : toISOStringDateOnly(rule.value);\n return defaultValueProcessorByRule(\n { ...rule, value },\n { ...opts, wrapValueWith: [datatype, ``] }\n );\n };\n\nconst presetToValueProcessorMap = {\n ansi: getDatetimeValueProcessorANSI,\n mssql: getDatetimeValueProcessorMSSQL,\n mysql: getDatetimeValueProcessorMySQL,\n oracle: getDatetimeValueProcessorOracle,\n postgresql: getDatetimeValueProcessorPostgreSQL,\n sqlite: getDatetimeValueProcessorANSI,\n} satisfies Record<SQLPreset, (apiFns: RQBDateTimeLibraryAPI) => ValueProcessorByRule>;\n\n/**\n * Generates a rule processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with\n * the \"sql\" format.\n */\nexport const getDatetimeRuleProcessorSQL =\n (apiFns: RQBDateTimeLibraryAPI): RuleProcessor =>\n (rule, options) => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {} /* v8 ignore stop -- @preserve */;\n const operator = mapSQLOperator(rule.operator);\n const operatorLowerCase = lc(operator);\n // v8 ignore next\n const {\n quoteFieldNamesWith = ['', ''] as [string, string],\n fieldIdentifierSeparator = '',\n context = {},\n } = opts;\n let finalValue = '';\n\n if (rule.valueSource === 'field' || !processIsDateField(context.isDateField, rule, opts)) {\n return defaultRuleProcessorSQL(rule, opts);\n }\n\n const valueProcessor = presetToValueProcessorMap[opts.preset!](apiFns);\n\n const valueAsArray: string[] = toArray(rule.value, { retainEmptyStrings: false });\n const valueAsDateArray = valueAsArray\n .map((v): [string, Date] => [v, apiFns.toDate(v)])\n .filter(v => apiFns.isValid(v[1]));\n\n switch (operatorLowerCase) {\n case 'in':\n case 'not in':\n {\n if (valueAsDateArray.length === 0) return '';\n finalValue = `(${valueAsDateArray\n .map(value =>\n valueProcessor(\n { field: rule.field, operator: '=', value: value[1] },\n { ...opts, context: { originalValue: value[0] } }\n )\n )\n .join(', ')})`;\n }\n break;\n\n case 'between':\n case 'not between':\n {\n if (valueAsDateArray.length < 2) return '';\n const [first, second] = valueAsDateArray;\n const orderedArray = apiFns.isBefore(first[1], second[1])\n ? [first, second]\n : [second, first];\n finalValue = orderedArray\n .map(([originalValue, value]) =>\n valueProcessor(\n { field: rule.field, operator: '=', value },\n { ...opts, context: { originalValue } }\n )\n )\n .join(' and ');\n }\n break;\n\n default: {\n const [originalValue, value] = valueAsDateArray[0] ?? ['', ''];\n finalValue = valueProcessor(\n { field: rule.field, operator: '=', value },\n { ...opts, context: { originalValue } }\n );\n }\n }\n\n return `${getQuotedFieldName(rule.field, { quoteFieldNamesWith, fieldIdentifierSeparator })} ${operator} ${finalValue}`.trim();\n };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{defaultOperatorProcessorNL as e,defaultRuleProcessorCEL as t,defaultRuleProcessorCypher as n,defaultRuleProcessorMongoDBQuery as r,defaultRuleProcessorNL as i,defaultRuleProcessorSPARQL as a,defaultRuleProcessorSQL as o,defaultValueProcessorByRule as s,getQuotedFieldName as c,lc as l,mapSQLOperator as u,mongoOperators as d,normalizeConstituentWordOrder as f,toArray as p}from"react-querybuilder";const m=e=>typeof e==`string`&&/^\d{4}-\d{2}-\d{2}$/.test(e),h=(...[e,t])=>e.operator!==`contains`&&e.operator!==`beginsWith`&&e.operator!==`endsWith`&&e.operator!==`doesNotContain`&&e.operator!==`doesNotBeginWith`&&e.operator!==`doesNotEndWith`&&e.operator!==`null`&&e.operator!==`notNull`&&/^(?:date|datetime|datetimeoffset|timestamp)\b/i.test(t?.fieldData?.datatype),g=(e,...[t,n])=>typeof e==`boolean`?e:typeof e==`function`?e(t,n):Array.isArray(e)?e.some(e=>Object.entries(e).every(([e,t])=>n?.fieldData?.[e]===t)):typeof e==`object`?Object.entries(e).every(([e,t])=>n?.fieldData?.[e]===t):h(t,n),_=({isAfter:e,isBefore:t,isSame:n})=>({dateAfter:(t,n)=>e(t,n),dateBefore:(e,n)=>t(e,n),dateBetween:(r,i,a)=>n(i,r)||n(i,a)||e(i,r)&&t(i,a)||e(i,a)&&t(i,r),dateNotBetween:(r,i,a)=>!n(i,r)&&!n(i,a)&&(t(r,a)&&(t(i,r)||e(i,a))||e(r,a)&&(t(i,a)||e(i,r))),dateIn:(e,t)=>t.some(t=>n(e,t)),dateNotIn:(e,t)=>t.every(t=>!n(e,t)),dateNotOn:(e,t)=>!n(e,t),dateOn:(e,t)=>n(e,t),dateOnOrAfter:(t,r)=>e(t,r)||n(t,r),dateOnOrBefore:(e,r)=>t(e,r)||n(e,r)}),v=e=>/^(does)?not/i.test(e),y=e=>(n,r)=>{let i=r??{},{context:a={}}=i;if(n.valueSource===`field`||!g(a.isDateField,n,i))return t(n,i);let o=t=>`timestamp("${e.toISOString(t)}")`,s=l(n.operator.replace(/^=$/,`==`));switch(s){case`<`:case`<=`:case`==`:case`!=`:case`>`:case`>=`:return`${n.field} ${s} ${o(n.value)}`}let c=p(n.value,{retainEmptyStrings:!1}).map(t=>e.toDate(t)).filter(t=>e.isValid(t));switch(s){case`in`:case`notin`:{if(c.length===0)return``;let[e,t]=v(s)?[`!(`,`)`]:[``,``];return`${e}${n.field} in [${c.map(e=>o(e)).join(`, `)}]${t}`}case`between`:case`notbetween`:{if(c.length<2)return``;let[t,r]=c,[i,a]=e.isBefore(t,r)?[t,r]:[r,t];return s===`between`?`(${n.field} >= ${o(i)} && ${n.field} <= ${o(a)})`:`(${n.field} < ${o(i)} || ${n.field} > ${o(a)})`}}return t(n,i)},b=e=>/^(does)?not/i.test(e),x=(e,t)=>t?`date('${e}')`:`datetime('${e}')`,S=e=>(t,r)=>{let i=r??{},{context:a={}}=i;if(t.valueSource===`field`||!g(a.isDateField,t,i))return n(t,i);let{field:o,operator:s,value:c}=t,u=l(s);if(u===`olderthanduration`)return`datetime() - ${o} > duration('${c}')`;if(u===`withinduration`)return`datetime() - ${o} <= duration('${c}')`;let d=p(c,{retainEmptyStrings:!1}).map(t=>[t,e.toDate(t)]).filter(([,t])=>e.isValid(t)),f=t=>{let n=m(t);return x(n?e.toISOStringDateOnly(t):e.toISOString(t),n)};switch(u){case`in`:case`notin`:{if(d.length===0)return``;let e=d.map(([e])=>f(e));return`${b(u)?`NOT `:``}${o} IN [${e.join(`, `)}]`}case`between`:case`notbetween`:{if(d.length<2)return``;let[t,n]=d,[r,i]=e.isBefore(t[1],n[1])?[t,n]:[n,t],a=`${f(r[0])} <= ${o} AND ${o} <= ${f(i[0])}`;return u===`notbetween`?`NOT (${a})`:a}default:{if(d.length===0)return``;let[e]=d[0];return`${o} ${u===`<>`?`<>`:u} ${f(e)}`}}},C=e=>(t,n)=>{let i=n??{},{field:a,operator:o,value:s,valueSource:c}=t;if(c===`field`||!g(i.context?.isDateField,t,i))return r(t,i);if(o===`=`)return{[a]:e.toDate(s)};switch(o){case`<`:case`<=`:case`!=`:case`>`:case`>=`:return{[a]:{[d[o]]:e.toDate(s)}}}let l=p(t.value,{retainEmptyStrings:!1}).map(t=>e.toDate(t)).filter(t=>e.isValid(t));switch(o){case`in`:case`notIn`:return{[a]:{[d[o]]:l}};case`between`:case`notBetween`:{if(l.length<2)return``;let[t,n]=l,r=e.isBefore(t,n)?[t,n]:[n,t];return o===`between`?{[a]:{$gte:r[0],$lte:r[1]}}:{$or:[{[a]:{$lt:r[0]}},{[a]:{$gt:r[1]}}]}}}return r(t,i)},w={"<":`is before`,">":`is after`,"<=":`is on or before`,">=":`is on or after`,in:[`is one of the dates`,`is the same as a date in`],notin:[`is not one of the dates`,`is not the same as any date in`],between:[`is between`,`is between the dates in`],notbetween:[`is not between`,`is not between the dates in`]},T=(e,t)=>m(t?.context?.originalValue)?new Intl.DateTimeFormat(t?.context?.locales,{dateStyle:`full`,...t?.context?.dateFormat}).format(e.value):new Intl.DateTimeFormat(t?.context?.locales,{dateStyle:`full`,timeStyle:`long`,...t?.context?.dateTimeFormat}).format(e.value),E=t=>(n,r)=>{let a=r??{},o=l(n.operator),s=``,{fieldData:u,quoteFieldNamesWith:d=[``,``],fieldIdentifierSeparator:m=``,operatorProcessor:h=e,wordOrder:_=`SVO`,context:v={},operatorMap:y=w}=a;if(!g(v.isDateField,n,a))return i(n,a);if(n.valueSource===`field`)return i(n,{...a,operatorMap:w});if((o===`in`||o===`notin`||o===`between`||o===`notbetween`)&&!n.value)return``;let b=p(n.value,{retainEmptyStrings:!1}).map(e=>[e,t.toDate(e)]).filter(e=>t.isValid(e[1]));switch(o){case`in`:case`notin`:if(b.length===0)return``;s=`(${b.map(e=>T({field:n.field,operator:`=`,value:e[1]},{...a,context:{...v,originalValue:e[0]}})).join(`, `)})`;break;case`between`:case`notbetween`:{if(b.length<2)return``;let[e,r]=b;s=(t.isBefore(e[1],r[1])?[e,r]:[r,e]).map(([e,t])=>T({field:n.field,operator:`=`,value:t},{...a,context:{...v,originalValue:e}})).join(` ${a.translations?.and??`and`} `)}break;default:{let[e,t]=b[0]??[``,``];s=e?T({field:n.field,operator:`=`,value:t},{...a,context:{...v,originalValue:e}}):``}}let x={S:c(u?.label??n.field,{quoteFieldNamesWith:d,fieldIdentifierSeparator:m}),V:h(n,{...a,operatorMap:{...w,...y}}),O:s};return f(_).map(e=>`${x[e]}`).join(` `).trim()},D=e=>/^(does)?not/i.test(e),O=(e,t)=>t?`"${e}"^^xsd:date`:`"${e}"^^xsd:dateTime`,k=e=>(t,n)=>{let r=n??{},{context:i={}}=r;if(t.valueSource===`field`||!g(i.isDateField,t,r))return a(t,r);let{field:o,operator:s,value:c}=t,u=l(s);if(u===`olderthanduration`)return`NOW() - ${o} > "${c}"^^xsd:duration`;if(u===`withinduration`)return`NOW() - ${o} <= "${c}"^^xsd:duration`;let d=p(c,{retainEmptyStrings:!1}).map(t=>[t,e.toDate(t)]).filter(([,t])=>e.isValid(t)),f=t=>{let n=m(t);return O(n?e.toISOStringDateOnly(t):e.toISOString(t),n)};switch(u){case`in`:case`notin`:{if(d.length===0)return``;let e=d.map(([e])=>f(e)),t=D(u)?` && `:` || `,n=D(u)?`!=`:`=`;return e.map(e=>`${o} ${n} ${e}`).join(t)}case`between`:case`notbetween`:{if(d.length<2)return``;let[t,n]=d,[r,i]=e.isBefore(t[1],n[1])?[t,n]:[n,t];return u===`notbetween`?`(${o} < ${f(r[0])} || ${o} > ${f(i[0])})`:`${o} >= ${f(r[0])} && ${o} <= ${f(i[0])}`}default:{if(d.length===0)return``;let[e]=d[0];return`${o} ${u===`<>`?`!=`:u} ${f(e)}`}}},A=({toISOStringDateOnly:e,toISOString:t})=>(n,r)=>m(r?.context?.originalValue)?s({...n,value:e(n.value)},r):s({...n,value:t(n.value)},r),j=({toISOStringDateOnly:e,toISOString:t})=>(n,r)=>{let i=/^(?:small)?datetime/i.test(r?.fieldData?.datatype)?`datetimeoffset`:`date`,a=i===`datetimeoffset`?t(n.value):e(n.value);return s({...n,value:a},{...r,wrapValueWith:[`cast(`,` as ${i})`]})},M=({toISOStringDateOnly:e,toISOString:t})=>(n,r)=>{let i=/^(?:datetime|timestamp)/i.test(r?.fieldData?.datatype)?`datetime`:`date`,a=i===`datetime`?t(n.value):e(n.value);return s({...n,value:a},{...r,wrapValueWith:[`cast(`,` as ${i})`]})},N=({toISOStringDateOnly:e,toISOString:t})=>(n,r)=>{let i=/^timestamp/i.test(r?.fieldData?.datatype)?`timestamp`:`date`,a=i===`timestamp`?t(n.value).replaceAll(`T`,` `).replace(`Z`,` UTC`):e(n.value);return s({...n,value:a},{...r,wrapValueWith:[i,``]})},P=({toISOStringDateOnly:e,toISOString:t})=>(n,r)=>{let i=/^timestamp/i.test(r?.fieldData?.datatype)?`timestamp`:`date`,a=i===`timestamp`?t(n.value):e(n.value);return s({...n,value:a},{...r,wrapValueWith:[i,``]})},F={ansi:A,mssql:j,mysql:M,oracle:N,postgresql:P,sqlite:A},I=e=>(t,n)=>{let r=n??{},i=u(t.operator),a=l(i),{quoteFieldNamesWith:s=[``,``],fieldIdentifierSeparator:d=``,context:f={}}=r,m=``;if(t.valueSource===`field`||!g(f.isDateField,t,r))return o(t,r);let h=F[r.preset](e),_=p(t.value,{retainEmptyStrings:!1}).map(t=>[t,e.toDate(t)]).filter(t=>e.isValid(t[1]));switch(a){case`in`:case`not in`:if(_.length===0)return``;m=`(${_.map(e=>h({field:t.field,operator:`=`,value:e[1]},{...r,context:{originalValue:e[0]}})).join(`, `)})`;break;case`between`:case`not between`:{if(_.length<2)return``;let[n,i]=_;m=(e.isBefore(n[1],i[1])?[n,i]:[i,n]).map(([e,n])=>h({field:t.field,operator:`=`,value:n},{...r,context:{originalValue:e}})).join(` and `)}break;default:{let[e,n]=_[0]??[``,``];m=h({field:t.field,operator:`=`,value:n},{...r,context:{originalValue:e}})}}return`${c(t.field,{quoteFieldNamesWith:s,fieldIdentifierSeparator:d})} ${i} ${m}`.trim()};export{N as a,T as c,C as d,S as f,g,m as h,M as i,w as l,_ as m,A as n,P as o,y as p,j as r,k as s,I as t,E as u};
|
|
2
|
+
//# sourceMappingURL=getDatetimeRuleProcessorSQL-CWqAiVwU.mjs.map
|