@react-querybuilder/datetime 8.20.2 → 8.21.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/{getDatetimeRuleProcessorTanStackDB-cmGqMT0Q.js → getDatetimeRuleProcessorTanStackDB-CDEB9coD.js} +22 -19
- package/dist/cjs/getDatetimeRuleProcessorTanStackDB-CDEB9coD.js.map +1 -0
- package/dist/cjs/getDatetimeRuleProcessorTanStackDB-X6tZv7yV.js +2 -0
- package/dist/cjs/getDatetimeRuleProcessorTanStackDB-X6tZv7yV.js.map +1 -0
- package/dist/cjs/react-querybuilder_datetime.cjs.development.d.ts +122 -138
- package/dist/cjs/react-querybuilder_datetime.cjs.development.date-fns.d.ts +49 -50
- package/dist/cjs/react-querybuilder_datetime.cjs.development.date-fns.js +2 -2
- package/dist/cjs/react-querybuilder_datetime.cjs.development.dayjs.d.ts +49 -50
- package/dist/cjs/react-querybuilder_datetime.cjs.development.dayjs.js +2 -2
- package/dist/cjs/react-querybuilder_datetime.cjs.development.js +3 -2
- package/dist/cjs/react-querybuilder_datetime.cjs.development.js.map +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.development.jsdate.d.ts +52 -53
- package/dist/cjs/react-querybuilder_datetime.cjs.development.jsdate.js +2 -2
- package/dist/cjs/react-querybuilder_datetime.cjs.development.luxon.d.ts +49 -50
- package/dist/cjs/react-querybuilder_datetime.cjs.development.luxon.js +2 -2
- package/dist/cjs/react-querybuilder_datetime.cjs.development.ui.d.ts +100 -114
- package/dist/cjs/react-querybuilder_datetime.cjs.development.ui.js +5 -3
- package/dist/cjs/react-querybuilder_datetime.cjs.development.ui.js.map +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.d.ts +122 -138
- package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.d.ts +49 -50
- package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.js +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.d.ts +49 -50
- package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.js +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.js +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.js.map +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.d.ts +52 -53
- package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.js +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.d.ts +49 -50
- package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.js +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.ui.d.ts +100 -114
- package/dist/cjs/react-querybuilder_datetime.cjs.production.ui.js +1 -1
- package/dist/cjs/react-querybuilder_datetime.cjs.production.ui.js.map +1 -1
- package/dist/cjs/{rqbDateTimeLibraryAPI.jsdate-ioz2B1zh.js → rqbDateTimeLibraryAPI.jsdate-BuSiVdk7.js} +2 -2
- package/dist/cjs/{rqbDateTimeLibraryAPI.jsdate-ioz2B1zh.js.map → rqbDateTimeLibraryAPI.jsdate-BuSiVdk7.js.map} +1 -1
- package/dist/cjs/{rqbDateTimeLibraryAPI.jsdate-BPEcMhhr.js → rqbDateTimeLibraryAPI.jsdate-C3jJb6ip.js} +2 -2
- package/dist/cjs/{rqbDateTimeLibraryAPI.jsdate-BPEcMhhr.js.map → rqbDateTimeLibraryAPI.jsdate-C3jJb6ip.js.map} +1 -1
- package/dist/cjs/{types-Di8kFIXV.d.ts → types-BKA1aoY6.d.ts} +82 -73
- package/dist/cjs/utils-DdBYGWHZ.js +2 -0
- package/dist/cjs/utils-DdBYGWHZ.js.map +1 -0
- package/dist/cjs/{utils-DUePrC--.js → utils-_X97pUtk.js} +13 -1
- package/dist/cjs/utils-_X97pUtk.js.map +1 -0
- package/dist/getDatetimeRuleProcessorTanStackDB-6K1DsuEV.mjs +2 -0
- package/dist/getDatetimeRuleProcessorTanStackDB-6K1DsuEV.mjs.map +1 -0
- package/dist/{getDatetimeRuleProcessorTanStackDB-BDFJlfJh.js → getDatetimeRuleProcessorTanStackDB-BrSD2e9G.js} +22 -19
- package/dist/getDatetimeRuleProcessorTanStackDB-BrSD2e9G.js.map +1 -0
- package/dist/{getDatetimeRuleProcessorTanStackDB-B93XaPdB.mjs → getDatetimeRuleProcessorTanStackDB-DR8aYrUa.mjs} +22 -19
- package/dist/getDatetimeRuleProcessorTanStackDB-DR8aYrUa.mjs.map +1 -0
- package/dist/{objectSpread2-73AKOozq.js → objectSpread2-MqoZ2hSz.js} +13 -7
- package/dist/objectSpread2-MqoZ2hSz.js.map +1 -0
- package/dist/react-querybuilder_datetime.d.mts +122 -138
- package/dist/react-querybuilder_datetime.date-fns.d.mts +49 -50
- package/dist/react-querybuilder_datetime.date-fns.mjs +2 -2
- package/dist/react-querybuilder_datetime.dayjs.d.mts +49 -50
- package/dist/react-querybuilder_datetime.dayjs.mjs +2 -2
- package/dist/react-querybuilder_datetime.jsdate.d.mts +52 -53
- package/dist/react-querybuilder_datetime.jsdate.mjs +2 -2
- package/dist/react-querybuilder_datetime.legacy-esm.d.ts +122 -138
- package/dist/react-querybuilder_datetime.legacy-esm.date-fns.d.ts +49 -50
- package/dist/react-querybuilder_datetime.legacy-esm.date-fns.js +2 -2
- package/dist/react-querybuilder_datetime.legacy-esm.dayjs.d.ts +49 -50
- package/dist/react-querybuilder_datetime.legacy-esm.dayjs.js +2 -2
- package/dist/react-querybuilder_datetime.legacy-esm.js +3 -2
- package/dist/react-querybuilder_datetime.legacy-esm.js.map +1 -1
- package/dist/react-querybuilder_datetime.legacy-esm.jsdate.d.ts +52 -53
- package/dist/react-querybuilder_datetime.legacy-esm.jsdate.js +2 -2
- package/dist/react-querybuilder_datetime.legacy-esm.luxon.d.ts +49 -50
- package/dist/react-querybuilder_datetime.legacy-esm.luxon.js +2 -2
- package/dist/react-querybuilder_datetime.legacy-esm.ui.d.ts +100 -114
- package/dist/react-querybuilder_datetime.legacy-esm.ui.js +7 -5
- package/dist/react-querybuilder_datetime.legacy-esm.ui.js.map +1 -1
- package/dist/react-querybuilder_datetime.luxon.d.mts +49 -50
- package/dist/react-querybuilder_datetime.luxon.mjs +2 -2
- package/dist/react-querybuilder_datetime.mjs +3 -2
- package/dist/react-querybuilder_datetime.mjs.map +1 -1
- package/dist/react-querybuilder_datetime.production.d.mts +122 -138
- package/dist/react-querybuilder_datetime.production.date-fns.d.mts +49 -50
- package/dist/react-querybuilder_datetime.production.date-fns.mjs +1 -1
- package/dist/react-querybuilder_datetime.production.dayjs.d.mts +49 -50
- package/dist/react-querybuilder_datetime.production.dayjs.mjs +1 -1
- package/dist/react-querybuilder_datetime.production.jsdate.d.mts +52 -53
- package/dist/react-querybuilder_datetime.production.jsdate.mjs +1 -1
- package/dist/react-querybuilder_datetime.production.luxon.d.mts +49 -50
- package/dist/react-querybuilder_datetime.production.luxon.mjs +1 -1
- package/dist/react-querybuilder_datetime.production.mjs +1 -1
- package/dist/react-querybuilder_datetime.production.mjs.map +1 -1
- package/dist/react-querybuilder_datetime.production.ui.d.mts +100 -114
- package/dist/react-querybuilder_datetime.production.ui.mjs +1 -1
- package/dist/react-querybuilder_datetime.production.ui.mjs.map +1 -1
- package/dist/react-querybuilder_datetime.ui.d.mts +100 -114
- package/dist/react-querybuilder_datetime.ui.mjs +5 -3
- package/dist/react-querybuilder_datetime.ui.mjs.map +1 -1
- package/dist/{rqbDateTimeLibraryAPI.jsdate-CpGoQAje.js → rqbDateTimeLibraryAPI.jsdate-COp9qTw_.js} +2 -2
- package/dist/{rqbDateTimeLibraryAPI.jsdate-CpGoQAje.js.map → rqbDateTimeLibraryAPI.jsdate-COp9qTw_.js.map} +1 -1
- package/dist/{rqbDateTimeLibraryAPI.jsdate-CDOtydFq.mjs → rqbDateTimeLibraryAPI.jsdate-DxBmxW2C.mjs} +2 -2
- package/dist/{rqbDateTimeLibraryAPI.jsdate-CDOtydFq.mjs.map → rqbDateTimeLibraryAPI.jsdate-DxBmxW2C.mjs.map} +1 -1
- package/dist/{rqbDateTimeLibraryAPI.jsdate-D66yJ1hK.mjs → rqbDateTimeLibraryAPI.jsdate-WHnzblie.mjs} +2 -2
- package/dist/{rqbDateTimeLibraryAPI.jsdate-D66yJ1hK.mjs.map → rqbDateTimeLibraryAPI.jsdate-WHnzblie.mjs.map} +1 -1
- package/dist/{types-Di8kFIXV.d.mts → types-BKA1aoY6.d.mts} +82 -73
- package/dist/{types-Di8kFIXV.d.ts → types-BKA1aoY6.d.ts} +82 -73
- package/dist/{utils-BC2SALFm.mjs → utils-BAgUBdyf.mjs} +8 -2
- package/dist/utils-BAgUBdyf.mjs.map +1 -0
- package/dist/utils-DA8aluCt.mjs +2 -0
- package/dist/utils-DA8aluCt.mjs.map +1 -0
- package/package.json +16 -16
- package/dist/cjs/getDatetimeRuleProcessorTanStackDB-BVNfYaIj.js +0 -2
- package/dist/cjs/getDatetimeRuleProcessorTanStackDB-BVNfYaIj.js.map +0 -1
- package/dist/cjs/getDatetimeRuleProcessorTanStackDB-cmGqMT0Q.js.map +0 -1
- package/dist/cjs/utils-DUePrC--.js.map +0 -1
- package/dist/cjs/utils-jkW5R1AA.js +0 -2
- package/dist/cjs/utils-jkW5R1AA.js.map +0 -1
- package/dist/getDatetimeRuleProcessorTanStackDB-B93XaPdB.mjs.map +0 -1
- package/dist/getDatetimeRuleProcessorTanStackDB-BDFJlfJh.js.map +0 -1
- package/dist/getDatetimeRuleProcessorTanStackDB-Czg9Fbb8.mjs +0 -2
- package/dist/getDatetimeRuleProcessorTanStackDB-Czg9Fbb8.mjs.map +0 -1
- package/dist/objectSpread2-73AKOozq.js.map +0 -1
- package/dist/utils-BC2SALFm.mjs.map +0 -1
- package/dist/utils-VKS8YY2D.mjs +0 -2
- package/dist/utils-VKS8YY2D.mjs.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as
|
|
1
|
+
import { a as materializeForExport, c as resolveDatetimeOperator, i as isRelativeDateTimeValue, l as resolveRelativeDateTime, n as isISOStringDateOnly, o as materializeRelativeValues, r as isNonDateValueSource, s as processIsDateField } from "./utils-BAgUBdyf.mjs";
|
|
2
2
|
import { defaultOperatorProcessorNL, defaultRuleProcessorCEL, defaultRuleProcessorCypher, defaultRuleProcessorDrizzle, defaultRuleProcessorElasticSearch, defaultRuleProcessorGremlin, defaultRuleProcessorJSONata, defaultRuleProcessorLDAP, defaultRuleProcessorMongoDBQuery, defaultRuleProcessorNL, defaultRuleProcessorParameterized, defaultRuleProcessorPrisma, defaultRuleProcessorSPARQL, defaultRuleProcessorSQL, defaultRuleProcessorSequelize, defaultRuleProcessorSpEL, defaultRuleProcessorTanStackDB, defaultValueProcessorByRule, getQuotedFieldName, lc, mapSQLOperator, mongoOperators, normalizeConstituentWordOrder, nullOrUndefinedOrEmpty, sparqlVar, toArray } from "@react-querybuilder/core";
|
|
3
3
|
//#region src/getDatetimeJsonLogicOperations.ts
|
|
4
4
|
/**
|
|
@@ -39,7 +39,7 @@ const shouldNegate$3 = (op) => /^(does)?not/i.test(op);
|
|
|
39
39
|
const getDatetimeRuleProcessorCEL = (apiFns) => (rule, options) => {
|
|
40
40
|
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
41
41
|
const { context = {} } = opts;
|
|
42
|
-
if (rule.valueSource
|
|
42
|
+
if (isNonDateValueSource(rule.valueSource) || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorCEL(rule, opts);
|
|
43
43
|
const ts = (d) => `timestamp("${apiFns.toISOString(d)}")`;
|
|
44
44
|
const value = materializeRelativeValues(apiFns, rule.value, opts);
|
|
45
45
|
const operatorTL = lc(resolveDatetimeOperator(rule, opts).replace(/^=$/, "=="));
|
|
@@ -91,7 +91,7 @@ const cypherTemporal = (iso, dateOnly) => dateOnly ? `date('${iso}')` : `datetim
|
|
|
91
91
|
const getDatetimeRuleProcessorCypher = (apiFns) => (rule, options) => {
|
|
92
92
|
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
93
93
|
const { context = {} } = opts;
|
|
94
|
-
if (rule.valueSource
|
|
94
|
+
if (isNonDateValueSource(rule.valueSource) || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorCypher(rule, opts);
|
|
95
95
|
const { field } = rule;
|
|
96
96
|
const operatorTL = lc(resolveDatetimeOperator(rule, opts));
|
|
97
97
|
if (operatorTL === "olderthanduration") return `datetime() - ${field} > duration('${rule.value}')`;
|
|
@@ -99,7 +99,8 @@ const getDatetimeRuleProcessorCypher = (apiFns) => (rule, options) => {
|
|
|
99
99
|
const valueAsDateArray = toArray(materializeRelativeValues(apiFns, rule.value, opts), { retainEmptyStrings: false }).map((v) => [v, apiFns.toDate(v)]).filter(([, d]) => apiFns.isValid(d));
|
|
100
100
|
const fmtDate = (originalValue) => {
|
|
101
101
|
const dateOnly = isISOStringDateOnly(originalValue);
|
|
102
|
-
|
|
102
|
+
const iso = dateOnly ? apiFns.toISOStringDateOnly(originalValue) : apiFns.toISOString(originalValue);
|
|
103
|
+
return cypherTemporal(iso, dateOnly);
|
|
103
104
|
};
|
|
104
105
|
switch (operatorTL) {
|
|
105
106
|
case "in":
|
|
@@ -134,7 +135,7 @@ const getDatetimeRuleProcessorCypher = (apiFns) => (rule, options) => {
|
|
|
134
135
|
const getDatetimeRuleProcessorDrizzle = (apiFns) => (rule, options) => {
|
|
135
136
|
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
136
137
|
const { context = {} } = opts;
|
|
137
|
-
if (rule.valueSource
|
|
138
|
+
if (isNonDateValueSource(rule.valueSource) || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorDrizzle(rule, opts);
|
|
138
139
|
const { operator, value } = materializeForExport(apiFns, rule, opts, true);
|
|
139
140
|
return defaultRuleProcessorDrizzle({
|
|
140
141
|
...rule,
|
|
@@ -153,7 +154,7 @@ const getDatetimeRuleProcessorDrizzle = (apiFns) => (rule, options) => {
|
|
|
153
154
|
const getDatetimeRuleProcessorElasticSearch = (apiFns) => (rule, options) => {
|
|
154
155
|
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
155
156
|
const { context = {} } = opts;
|
|
156
|
-
if (rule.valueSource
|
|
157
|
+
if (isNonDateValueSource(rule.valueSource) || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorElasticSearch(rule, opts);
|
|
157
158
|
const { operator, value } = materializeForExport(apiFns, rule, opts);
|
|
158
159
|
return defaultRuleProcessorElasticSearch({
|
|
159
160
|
...rule,
|
|
@@ -172,7 +173,7 @@ const getDatetimeRuleProcessorElasticSearch = (apiFns) => (rule, options) => {
|
|
|
172
173
|
const getDatetimeRuleProcessorGremlin = (apiFns) => (rule, options) => {
|
|
173
174
|
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
174
175
|
const { context = {} } = opts;
|
|
175
|
-
if (rule.valueSource
|
|
176
|
+
if (isNonDateValueSource(rule.valueSource) || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorGremlin(rule, opts);
|
|
176
177
|
const { operator, value } = materializeForExport(apiFns, rule, opts);
|
|
177
178
|
return defaultRuleProcessorGremlin({
|
|
178
179
|
...rule,
|
|
@@ -196,6 +197,7 @@ const getDatetimeRuleProcessorJSONata = (apiFns) => (rule, options) => {
|
|
|
196
197
|
const { field, valueSource } = rule;
|
|
197
198
|
const operator = resolveDatetimeOperator(rule, opts);
|
|
198
199
|
if (!processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorJSONata(rule, opts);
|
|
200
|
+
if (valueSource === "parameter") return defaultRuleProcessorJSONata(rule, opts);
|
|
199
201
|
const valueIsField = valueSource === "field";
|
|
200
202
|
const value = valueIsField ? rule.value : materializeRelativeValues(apiFns, rule.value, opts);
|
|
201
203
|
const fldToMs = (f) => `$toMillis(${getQuotedFieldName(f, {
|
|
@@ -249,7 +251,7 @@ const getDatetimeRuleProcessorJSONata = (apiFns) => (rule, options) => {
|
|
|
249
251
|
const getDatetimeRuleProcessorLDAP = (apiFns) => (rule, options) => {
|
|
250
252
|
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
251
253
|
const { context = {} } = opts;
|
|
252
|
-
if (rule.valueSource
|
|
254
|
+
if (isNonDateValueSource(rule.valueSource) || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorLDAP(rule, opts);
|
|
253
255
|
const { operator, value } = materializeForExport(apiFns, rule, opts);
|
|
254
256
|
return defaultRuleProcessorLDAP({
|
|
255
257
|
...rule,
|
|
@@ -267,7 +269,7 @@ const getDatetimeRuleProcessorMongoDBQuery = (apiFns) => (rule, options) => {
|
|
|
267
269
|
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
268
270
|
const { field, valueSource } = rule;
|
|
269
271
|
const operator = resolveDatetimeOperator(rule, opts);
|
|
270
|
-
if (valueSource
|
|
272
|
+
if (isNonDateValueSource(valueSource) || !processIsDateField(opts.context?.isDateField, rule, opts)) return defaultRuleProcessorMongoDBQuery(rule, opts);
|
|
271
273
|
const value = materializeRelativeValues(apiFns, rule.value, opts);
|
|
272
274
|
if (operator === "=") return { [field]: apiFns.toDate(value) };
|
|
273
275
|
switch (operator) {
|
|
@@ -348,7 +350,7 @@ const getDatetimeRuleProcessorNL = (apiFns) => (rule, options) => {
|
|
|
348
350
|
// v8 ignore next
|
|
349
351
|
const { fieldData, quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator = "", operatorProcessor = defaultOperatorProcessorNL, wordOrder = "SVO", context = {}, operatorMap = defaultDateTimeNLOperatorMap } = opts;
|
|
350
352
|
if (!processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorNL(rule, opts);
|
|
351
|
-
if (rule.valueSource
|
|
353
|
+
if (isNonDateValueSource(rule.valueSource)) return defaultRuleProcessorNL(rule, {
|
|
352
354
|
...opts,
|
|
353
355
|
operatorMap: defaultDateTimeNLOperatorMap
|
|
354
356
|
});
|
|
@@ -433,7 +435,7 @@ const getDatetimeRuleProcessorNL = (apiFns) => (rule, options) => {
|
|
|
433
435
|
const getDatetimeRuleProcessorParameterized = (apiFns) => (rule, options, meta) => {
|
|
434
436
|
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
435
437
|
const { context = {} } = opts;
|
|
436
|
-
if (rule.valueSource
|
|
438
|
+
if (isNonDateValueSource(rule.valueSource) || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorParameterized(rule, opts, meta);
|
|
437
439
|
const { operator, value } = materializeForExport(apiFns, rule, opts);
|
|
438
440
|
return defaultRuleProcessorParameterized({
|
|
439
441
|
...rule,
|
|
@@ -452,7 +454,7 @@ const getDatetimeRuleProcessorParameterized = (apiFns) => (rule, options, meta)
|
|
|
452
454
|
const getDatetimeRuleProcessorPrisma = (apiFns) => (rule, options) => {
|
|
453
455
|
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
454
456
|
const { context = {} } = opts;
|
|
455
|
-
if (rule.valueSource
|
|
457
|
+
if (isNonDateValueSource(rule.valueSource) || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorPrisma(rule, opts);
|
|
456
458
|
const { operator, value } = materializeForExport(apiFns, rule, opts, true);
|
|
457
459
|
return defaultRuleProcessorPrisma({
|
|
458
460
|
...rule,
|
|
@@ -471,7 +473,7 @@ const getDatetimeRuleProcessorPrisma = (apiFns) => (rule, options) => {
|
|
|
471
473
|
const getDatetimeRuleProcessorSequelize = (apiFns) => (rule, options) => {
|
|
472
474
|
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
473
475
|
const { context = {} } = opts;
|
|
474
|
-
if (rule.valueSource
|
|
476
|
+
if (isNonDateValueSource(rule.valueSource) || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorSequelize(rule, opts);
|
|
475
477
|
const { operator, value } = materializeForExport(apiFns, rule, opts, true);
|
|
476
478
|
return defaultRuleProcessorSequelize({
|
|
477
479
|
...rule,
|
|
@@ -501,7 +503,7 @@ const sparqlTemporal = (iso, dateOnly) => dateOnly ? `"${iso}"^^xsd:date` : `"${
|
|
|
501
503
|
const getDatetimeRuleProcessorSPARQL = (apiFns) => (rule, options) => {
|
|
502
504
|
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
503
505
|
const { context = {} } = opts;
|
|
504
|
-
if (rule.valueSource
|
|
506
|
+
if (isNonDateValueSource(rule.valueSource) || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorSPARQL(rule, opts);
|
|
505
507
|
const { field: rawField, value } = rule;
|
|
506
508
|
const operator = resolveDatetimeOperator(rule, opts);
|
|
507
509
|
const field = sparqlVar(rawField);
|
|
@@ -511,7 +513,8 @@ const getDatetimeRuleProcessorSPARQL = (apiFns) => (rule, options) => {
|
|
|
511
513
|
const valueAsDateArray = toArray(materializeRelativeValues(apiFns, value, opts), { retainEmptyStrings: false }).map((v) => [v, apiFns.toDate(v)]).filter(([, d]) => apiFns.isValid(d));
|
|
512
514
|
const fmtDate = (originalValue) => {
|
|
513
515
|
const dateOnly = isISOStringDateOnly(originalValue);
|
|
514
|
-
|
|
516
|
+
const iso = dateOnly ? apiFns.toISOStringDateOnly(originalValue) : apiFns.toISOString(originalValue);
|
|
517
|
+
return sparqlTemporal(iso, dateOnly);
|
|
515
518
|
};
|
|
516
519
|
switch (operatorTL) {
|
|
517
520
|
case "in":
|
|
@@ -546,7 +549,7 @@ const getDatetimeRuleProcessorSPARQL = (apiFns) => (rule, options) => {
|
|
|
546
549
|
const getDatetimeRuleProcessorSpEL = (apiFns) => (rule, options) => {
|
|
547
550
|
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
548
551
|
const { context = {} } = opts;
|
|
549
|
-
if (rule.valueSource
|
|
552
|
+
if (isNonDateValueSource(rule.valueSource) || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorSpEL(rule, opts);
|
|
550
553
|
const { operator, value } = materializeForExport(apiFns, rule, opts);
|
|
551
554
|
return defaultRuleProcessorSpEL({
|
|
552
555
|
...rule,
|
|
@@ -810,7 +813,7 @@ const getDatetimeRuleProcessorSQL = (apiFns) => (rule, options) => {
|
|
|
810
813
|
// v8 ignore next
|
|
811
814
|
const { quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator = "", context = {} } = opts;
|
|
812
815
|
let finalValue = "";
|
|
813
|
-
if (rule.valueSource
|
|
816
|
+
if (isNonDateValueSource(rule.valueSource) || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorSQL(rule, opts);
|
|
814
817
|
const valueProcessor = presetToValueProcessorMap[opts.preset](apiFns);
|
|
815
818
|
const quotedField = getQuotedFieldName(rule.field, {
|
|
816
819
|
quoteFieldNamesWith,
|
|
@@ -912,7 +915,7 @@ const getDatetimeRuleProcessorSQL = (apiFns) => (rule, options) => {
|
|
|
912
915
|
const getDatetimeRuleProcessorTanStackDB = (apiFns) => (rule, options) => {
|
|
913
916
|
const opts = options ?? ( /* v8 ignore start -- @preserve */ {});
|
|
914
917
|
const { context = {} } = opts;
|
|
915
|
-
if (rule.valueSource
|
|
918
|
+
if (isNonDateValueSource(rule.valueSource) || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorTanStackDB(rule, opts);
|
|
916
919
|
const { operator, value } = materializeForExport(apiFns, rule, opts, true);
|
|
917
920
|
return defaultRuleProcessorTanStackDB({
|
|
918
921
|
...rule,
|
|
@@ -923,4 +926,4 @@ const getDatetimeRuleProcessorTanStackDB = (apiFns) => (rule, options) => {
|
|
|
923
926
|
//#endregion
|
|
924
927
|
export { getDatetimeRuleProcessorCypher as C, getDatetimeRuleProcessorDrizzle as S, getDatetimeJsonLogicOperations as T, getDatetimeRuleProcessorMongoDBQuery as _, getDatetimeValueProcessorMySQL as a, getDatetimeRuleProcessorGremlin as b, getDatetimeRuleProcessorSpEL as c, getDatetimeRuleProcessorPrisma as d, getDatetimeRuleProcessorParameterized as f, getDatetimeRuleProcessorMongoDB as g, getDatetimeRuleProcessorNL as h, getDatetimeValueProcessorMSSQL as i, getDatetimeRuleProcessorSPARQL as l, defaultDateTimeNLOperatorMap as m, getDatetimeRuleProcessorSQL as n, getDatetimeValueProcessorOracle as o, datetimeValueProcessorNL as p, getDatetimeValueProcessorANSI as r, getDatetimeValueProcessorPostgreSQL as s, getDatetimeRuleProcessorTanStackDB as t, getDatetimeRuleProcessorSequelize as u, getDatetimeRuleProcessorLDAP as v, getDatetimeRuleProcessorCEL as w, getDatetimeRuleProcessorElasticSearch as x, getDatetimeRuleProcessorJSONata as y };
|
|
925
928
|
|
|
926
|
-
//# sourceMappingURL=getDatetimeRuleProcessorTanStackDB-
|
|
929
|
+
//# sourceMappingURL=getDatetimeRuleProcessorTanStackDB-DR8aYrUa.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getDatetimeRuleProcessorTanStackDB-DR8aYrUa.mjs","names":["shouldNegate","shouldNegate","shouldNegate"],"sources":["../src/getDatetimeJsonLogicOperations.ts","../src/getDatetimeRuleProcessorCEL.ts","../src/getDatetimeRuleProcessorCypher.ts","../src/getDatetimeRuleProcessorDrizzle.ts","../src/getDatetimeRuleProcessorElasticSearch.ts","../src/getDatetimeRuleProcessorGremlin.ts","../src/getDatetimeRuleProcessorJSONata.ts","../src/getDatetimeRuleProcessorLDAP.ts","../src/getDatetimeRuleProcessorMongoDBQuery.ts","../src/getDatetimeRuleProcessorMongoDB.ts","../src/getDatetimeRuleProcessorNL.ts","../src/getDatetimeRuleProcessorParameterized.ts","../src/getDatetimeRuleProcessorPrisma.ts","../src/getDatetimeRuleProcessorSequelize.ts","../src/getDatetimeRuleProcessorSPARQL.ts","../src/getDatetimeRuleProcessorSpEL.ts","../src/getRelativeDateTimeSQL.ts","../src/getDatetimeRuleProcessorSQL.ts","../src/getDatetimeRuleProcessorTanStackDB.ts"],"sourcesContent":["import type { RQBDateTimeLibraryAPI, RQBJsonLogicDateTimeOperations } from './types';\nimport { resolveRelativeDateTime } from './utils';\n\n/**\n * Custom operations for use with JsonLogic objects generated by\n * {@link datetimeRuleProcessorJsonLogic}.\n */\nexport const getDatetimeJsonLogicOperations = (\n apiFns: RQBDateTimeLibraryAPI\n): RQBJsonLogicDateTimeOperations => {\n const { isAfter, isBefore, isSame } = apiFns;\n return {\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 dateRelative: (anchor, offset, unit, dateOnly) => {\n const resolved = resolveRelativeDateTime(apiFns, { mode: 'relative', anchor, offset, unit });\n return dateOnly ? apiFns.toISOStringDateOnly(resolved) : apiFns.toISOString(resolved);\n },\n };\n};\n","import type { RuleProcessor } from '@react-querybuilder/core';\nimport { defaultRuleProcessorCEL, lc, toArray } from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport {\n isNonDateValueSource,\n materializeRelativeValues,\n processIsDateField,\n resolveDatetimeOperator,\n} 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 (\n isNonDateValueSource(rule.valueSource) ||\n !processIsDateField(context.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorCEL(rule, opts);\n }\n\n const ts = (d: string | Date) => `timestamp(\"${apiFns.toISOString(d)}\")`;\n\n // Resolve any relative value(s) to concrete literals (CEL has no symbolic relative form).\n const value = materializeRelativeValues(apiFns, rule.value, opts);\n\n const operatorTL = lc(resolveDatetimeOperator(rule, opts).replace(/^=$/, '=='));\n\n switch (operatorTL) {\n case '<':\n case '<=':\n case '==':\n case '!=':\n case '>':\n case '>=':\n return `${rule.field} ${operatorTL} ${ts(value as string | Date)}`;\n }\n\n const valueAsArray: string[] = toArray(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/core';\nimport { defaultRuleProcessorCypher, lc, toArray } from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport {\n isNonDateValueSource,\n isISOStringDateOnly,\n materializeRelativeValues,\n processIsDateField,\n resolveDatetimeOperator,\n} 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 (\n isNonDateValueSource(rule.valueSource) ||\n !processIsDateField(context.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorCypher(rule, opts);\n }\n\n const { field } = rule;\n const operator = resolveDatetimeOperator(rule, opts);\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('${rule.value}')`;\n }\n if (operatorTL === 'withinduration') {\n return `datetime() - ${field} <= duration('${rule.value}')`;\n }\n\n // Resolve any relative value(s) to concrete literals (Cypher has no symbolic relative form).\n const value = materializeRelativeValues(apiFns, rule.value, opts);\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/core';\nimport { defaultRuleProcessorDrizzle } from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isNonDateValueSource, materializeForExport, 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 \"drizzle\" format.\n * Relative values are materialized and all date/time values are converted to `Date`\n * objects (Drizzle column operators compare against native `Date` values).\n */\nexport const getDatetimeRuleProcessorDrizzle =\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 (\n isNonDateValueSource(rule.valueSource) ||\n !processIsDateField(context.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorDrizzle(rule, opts);\n }\n\n const { operator, value } = materializeForExport(apiFns, rule, opts, true);\n return defaultRuleProcessorDrizzle({ ...rule, operator, value }, opts);\n };\n","import type { RuleProcessor } from '@react-querybuilder/core';\nimport { defaultRuleProcessorElasticSearch } from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isNonDateValueSource, materializeForExport, 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 \"elasticsearch\" format.\n * Relative values are materialized to concrete ISO 8601 strings (ElasticSearch has no\n * symbolic relative form); absolute values pass through.\n */\nexport const getDatetimeRuleProcessorElasticSearch =\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 (\n isNonDateValueSource(rule.valueSource) ||\n !processIsDateField(context.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorElasticSearch(rule, opts);\n }\n\n const { operator, value } = materializeForExport(apiFns, rule, opts);\n return defaultRuleProcessorElasticSearch({ ...rule, operator, value }, opts);\n };\n","import type { RuleProcessor } from '@react-querybuilder/core';\nimport { defaultRuleProcessorGremlin } from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isNonDateValueSource, materializeForExport, 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 \"gremlin\" format.\n * Relative values are materialized to concrete ISO 8601 strings (Gremlin has no symbolic\n * relative form); absolute values pass through.\n */\nexport const getDatetimeRuleProcessorGremlin =\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 (\n isNonDateValueSource(rule.valueSource) ||\n !processIsDateField(context.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorGremlin(rule, opts);\n }\n\n const { operator, value } = materializeForExport(apiFns, rule, opts);\n return defaultRuleProcessorGremlin({ ...rule, operator, value }, opts);\n };\n","import type { RuleProcessor } from '@react-querybuilder/core';\nimport {\n defaultRuleProcessorJSONata,\n getQuotedFieldName,\n nullOrUndefinedOrEmpty,\n toArray,\n} from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { materializeRelativeValues, processIsDateField, resolveDatetimeOperator } from './utils';\n\nconst shouldNegate = (op: string) => /^(does)?not/i.test(op);\n\nconst negate = (clause: string, neg: boolean) => (neg ? `$not(${clause})` : `${clause}`);\n\n/**\n * Generates a rule processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the \"jsonata\" format.\n */\nexport const getDatetimeRuleProcessorJSONata =\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 // v8 ignore next\n const { quoteFieldNamesWith = ['', ''] as [string, string], fieldIdentifierSeparator = '' } =\n opts;\n const { field, valueSource } = rule;\n const operator = resolveDatetimeOperator(rule, opts);\n\n if (!processIsDateField(context.isDateField, rule, opts)) {\n return defaultRuleProcessorJSONata(rule, opts);\n }\n\n // Parameter references are named placeholders (not dates); delegate to the core default,\n // which emits the name as a literal (paradigm B).\n if (valueSource === 'parameter') {\n return defaultRuleProcessorJSONata(rule, opts);\n }\n\n const valueIsField = valueSource === 'field';\n\n // Resolve any relative value(s) to concrete literals (JSONata has no symbolic relative form).\n // Field-source values are field names and pass through untouched.\n const value = valueIsField ? rule.value : materializeRelativeValues(apiFns, rule.value, opts);\n\n const fldToMs = (f: string) =>\n `$toMillis(${getQuotedFieldName(f, { quoteFieldNamesWith, fieldIdentifierSeparator })})`;\n const valToMs = (v: string | Date) => `$toMillis(\"${apiFns.toISOString(v)}\")`;\n\n switch (operator) {\n case '<':\n case '<=':\n case '=':\n case '!=':\n case '>':\n case '>=':\n return `${fldToMs(field)} ${operator} ${valueIsField ? fldToMs(value as string) : valToMs(value as string | Date)}`;\n }\n\n const valueAsArray: string[] = toArray(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 if (valueIsField) {\n if (valueAsArray.length === 0) return '';\n return negate(\n `${fldToMs(field)} in [${valueAsArray.map(val => fldToMs(val)).join(', ')}]`,\n shouldNegate(operator)\n );\n }\n if (valueAsDateArray.length === 0) return '';\n return negate(\n `${fldToMs(field)} in [${valueAsDateArray.map(val => valToMs(val)).join(', ')}]`,\n shouldNegate(operator)\n );\n }\n\n case 'between':\n case 'notBetween': {\n if (\n valueAsArray.length < 2 ||\n nullOrUndefinedOrEmpty(valueAsArray[0]) ||\n nullOrUndefinedOrEmpty(valueAsArray[1]) ||\n (!valueIsField && valueAsDateArray.length < 2)\n ) {\n return '';\n }\n\n if (valueIsField) {\n const [firstValue, secondValue] = valueAsArray;\n const expression = `${fldToMs(field)} >= ${fldToMs(firstValue)} and ${fldToMs(field)} <= ${fldToMs(secondValue)}`;\n return operator === 'between' ? `(${expression})` : negate(expression, true);\n }\n\n const [first, second] = valueAsDateArray;\n const [firstDate, secondDate] = apiFns.isBefore(first, second)\n ? [first, second]\n : [second, first];\n const expression = `${fldToMs(field)} >= ${valToMs(firstDate)} and ${fldToMs(field)} <= ${valToMs(secondDate)}`;\n return operator === 'between' ? `(${expression})` : negate(expression, true);\n }\n }\n\n return defaultRuleProcessorJSONata(rule, opts);\n };\n","import type { RuleProcessor } from '@react-querybuilder/core';\nimport { defaultRuleProcessorLDAP } from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isNonDateValueSource, materializeForExport, 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 \"ldap\" format.\n * Relative values are materialized to concrete ISO 8601 strings (LDAP has no symbolic\n * relative form); absolute values pass through.\n */\nexport const getDatetimeRuleProcessorLDAP =\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 (\n isNonDateValueSource(rule.valueSource) ||\n !processIsDateField(context.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorLDAP(rule, opts);\n }\n\n const { operator, value } = materializeForExport(apiFns, rule, opts);\n return defaultRuleProcessorLDAP({ ...rule, operator, value }, opts);\n };\n","import type { RuleProcessor } from '@react-querybuilder/core';\nimport {\n defaultRuleProcessorMongoDBQuery,\n mongoOperators,\n toArray,\n} from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport {\n isNonDateValueSource,\n materializeRelativeValues,\n processIsDateField,\n resolveDatetimeOperator,\n} from './utils';\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, valueSource } = rule;\n const operator = resolveDatetimeOperator(rule, opts);\n\n if (\n isNonDateValueSource(valueSource) ||\n !processIsDateField(opts.context?.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorMongoDBQuery(rule, opts);\n }\n\n // Resolve any relative value(s) to concrete literals (MongoDB queries use concrete dates).\n const value = materializeRelativeValues(apiFns, rule.value, opts);\n\n if (operator === '=') {\n return { [field]: apiFns.toDate(value as string | Date) };\n }\n\n switch (operator) {\n case '<':\n case '<=':\n case '!=':\n case '>':\n case '>=':\n return { [field]: { [mongoOperators[operator]]: apiFns.toDate(value as string | Date) } };\n }\n\n const valueAsArray: string[] = toArray(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 { RuleProcessor } from '@react-querybuilder/core';\nimport { getDatetimeRuleProcessorMongoDBQuery } from './getDatetimeRuleProcessorMongoDBQuery';\nimport type { RQBDateTimeLibraryAPI } from './types';\n\n/**\n * Generates a rule processor with date/time features for use by\n * {@link @react-querybuilder/core!formatQuery formatQuery} with the (deprecated) \"mongodb\"\n * format. Delegates to the \"mongodb_query\" date/time processor and serializes the result;\n * `Date` values serialize to ISO 8601 strings.\n */\nexport const getDatetimeRuleProcessorMongoDB = (apiFns: RQBDateTimeLibraryAPI): RuleProcessor => {\n const mongoDBQueryProcessor = getDatetimeRuleProcessorMongoDBQuery(apiFns);\n return (rule, options) => {\n const queryObj = mongoDBQueryProcessor(rule, options);\n return queryObj ? JSON.stringify(queryObj) : '';\n };\n};\n","import type {\n ExportOperatorMap,\n RuleProcessor,\n ValueProcessorByRule,\n} from '@react-querybuilder/core';\nimport {\n defaultOperatorProcessorNL,\n defaultRuleProcessorNL,\n getQuotedFieldName,\n lc,\n normalizeConstituentWordOrder,\n toArray,\n} from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport {\n isISOStringDateOnly,\n isNonDateValueSource,\n materializeRelativeValues,\n processIsDateField,\n resolveDatetimeOperator,\n} 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 operator = resolveDatetimeOperator(rule, opts);\n const operatorLowerCase = lc(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 (isNonDateValueSource(rule.valueSource)) {\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 // Natural language is descriptive (not executable), so relative value(s) are\n // resolved to concrete dates and rendered like any other literal.\n const ruleValue = materializeRelativeValues(apiFns, rule.value, opts);\n\n const valueAsArray: string[] = toArray(ruleValue, { 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(\n { ...rule, operator },\n {\n ...opts,\n operatorMap: { ...defaultDateTimeNLOperatorMap, ...operatorMap },\n }\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/core';\nimport { defaultRuleProcessorParameterized } from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isNonDateValueSource, materializeForExport, 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 \"parameterized\" and\n * \"parameterized_named\" formats. Relative values are materialized to concrete ISO 8601\n * strings (these formats have no symbolic relative form); absolute values pass through.\n */\nexport const getDatetimeRuleProcessorParameterized =\n (apiFns: RQBDateTimeLibraryAPI): RuleProcessor =>\n (rule, options, meta) => {\n const opts = options ?? /* v8 ignore start -- @preserve */ {}; /* v8 ignore stop -- @preserve */\n const { context = {} } = opts;\n\n if (\n isNonDateValueSource(rule.valueSource) ||\n !processIsDateField(context.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorParameterized(rule, opts, meta);\n }\n\n const { operator, value } = materializeForExport(apiFns, rule, opts);\n return defaultRuleProcessorParameterized({ ...rule, operator, value }, opts, meta);\n };\n","import type { RuleProcessor } from '@react-querybuilder/core';\nimport { defaultRuleProcessorPrisma } from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isNonDateValueSource, materializeForExport, 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 \"prisma\" format.\n * Relative values are materialized and all date/time values are converted to `Date`\n * objects (Prisma's `where` clauses use native `Date` values for date columns).\n */\nexport const getDatetimeRuleProcessorPrisma =\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 (\n isNonDateValueSource(rule.valueSource) ||\n !processIsDateField(context.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorPrisma(rule, opts);\n }\n\n const { operator, value } = materializeForExport(apiFns, rule, opts, true);\n return defaultRuleProcessorPrisma({ ...rule, operator, value }, opts);\n };\n","import type { RuleProcessor } from '@react-querybuilder/core';\nimport { defaultRuleProcessorSequelize } from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isNonDateValueSource, materializeForExport, 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 \"sequelize\" format.\n * Relative values are materialized and all date/time values are converted to `Date`\n * objects (Sequelize `where` clauses use native `Date` values for date columns).\n */\nexport const getDatetimeRuleProcessorSequelize =\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 (\n isNonDateValueSource(rule.valueSource) ||\n !processIsDateField(context.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorSequelize(rule, opts);\n }\n\n const { operator, value } = materializeForExport(apiFns, rule, opts, true);\n return defaultRuleProcessorSequelize({ ...rule, operator, value }, opts);\n };\n","import type { RuleProcessor } from '@react-querybuilder/core';\nimport { defaultRuleProcessorSPARQL, lc, sparqlVar, toArray } from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport {\n isNonDateValueSource,\n isISOStringDateOnly,\n materializeRelativeValues,\n processIsDateField,\n resolveDatetimeOperator,\n} 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 (\n isNonDateValueSource(rule.valueSource) ||\n !processIsDateField(context.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorSPARQL(rule, opts);\n }\n\n const { field: rawField, value } = rule;\n const operator = resolveDatetimeOperator(rule, opts);\n const field = sparqlVar(rawField);\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 // Resolve any relative value(s) to concrete literals (SPARQL has no symbolic relative form).\n const valueAsArray: string[] = toArray(materializeRelativeValues(apiFns, value, opts), {\n retainEmptyStrings: false,\n });\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 prefix = shouldNegate(operatorTL) ? 'NOT ' : '';\n return `${field} ${prefix}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 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 } from '@react-querybuilder/core';\nimport { defaultRuleProcessorSpEL } from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isNonDateValueSource, materializeForExport, 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 \"spel\" format.\n * Relative values are materialized to concrete ISO 8601 strings (SpEL has no symbolic\n * relative form); absolute values pass through.\n */\nexport const getDatetimeRuleProcessorSpEL =\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 (\n isNonDateValueSource(rule.valueSource) ||\n !processIsDateField(context.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorSpEL(rule, opts);\n }\n\n const { operator, value } = materializeForExport(apiFns, rule, opts);\n return defaultRuleProcessorSpEL({ ...rule, operator, value }, opts);\n };\n","import type { SQLPreset } from '@react-querybuilder/core';\nimport type {\n RelativeDateTimeTruncationUnit,\n RelativeDateTimeUnit,\n RelativeDateTimeValue,\n} from './types';\n\n/**\n * Parsed form of a {@link RelativeDateTimeValue} anchor: either the current\n * date/time (`now`) or a truncation to the start/end of a calendar period.\n */\ninterface ParsedAnchor {\n bound: 'now' | 'start' | 'end';\n unit?: RelativeDateTimeTruncationUnit;\n}\n\nconst parseAnchor = (anchor: RelativeDateTimeValue['anchor']): ParsedAnchor => {\n if (anchor === 'now') return { bound: 'now' };\n const match = /^(start|end)Of(Day|Week|Month|Year)$/.exec(anchor)!;\n return {\n bound: match[1] as 'start' | 'end',\n unit: match[2].toLowerCase() as ParsedAnchor['unit'],\n };\n};\n\n/**\n * A relative-date/time SQL expression builder for a single dialect. Produces a\n * symbolic expression (e.g. `current_date - interval '3 months'`) so the value\n * stays relative to query-execution time rather than being materialized.\n */\ntype RelativeSQLBuilder = (value: RelativeDateTimeValue, asDate: boolean) => string;\n\nconst pluralUnit = (unit: RelativeDateTimeUnit): string => `${unit}s`;\n\n// --- PostgreSQL / ANSI ------------------------------------------------------\n\nconst pgBuild: RelativeSQLBuilder = (value, asDate) => {\n const now = asDate ? 'current_date' : 'current_timestamp';\n const { bound, unit } = parseAnchor(value.anchor);\n\n let expr = now;\n let modified = false;\n\n if (bound === 'start' && unit) {\n expr = `date_trunc('${unit}', ${now})`;\n modified = true;\n } else if (bound === 'end' && unit) {\n const tail = asDate ? `interval '1 day'` : `interval '1 microsecond'`;\n expr = `date_trunc('${unit}', ${now}) + interval '1 ${unit}' - ${tail}`;\n modified = true;\n }\n\n if (value.offset) {\n const op = value.offset < 0 ? '-' : '+';\n expr = `${expr} ${op} interval '${Math.abs(value.offset)} ${pluralUnit(value.unit)}'`;\n modified = true;\n }\n\n return asDate && modified ? `cast(${expr} as date)` : expr;\n};\n\n// --- MySQL ------------------------------------------------------------------\n\nconst mysqlTrunc = (now: string, bound: 'start' | 'end', unit: RelativeDateTimeTruncationUnit) => {\n if (bound === 'start') {\n switch (unit) {\n case 'day':\n return `date(${now})`;\n case 'week':\n return `date_sub(date(${now}), interval dayofweek(${now}) - 1 day)`;\n case 'month':\n return `date_format(${now}, '%Y-%m-01')`;\n case 'year':\n return `date_format(${now}, '%Y-01-01')`;\n }\n }\n switch (unit) {\n case 'day':\n return `date(${now})`;\n case 'week':\n return `date_add(date(${now}), interval 7 - dayofweek(${now}) day)`;\n case 'month':\n return `last_day(${now})`;\n }\n // year\n return `date_format(${now}, '%Y-12-31')`;\n};\n\nconst mysqlBuild: RelativeSQLBuilder = (value, asDate) => {\n const now = asDate ? 'curdate()' : 'now()';\n const { bound, unit } = parseAnchor(value.anchor);\n\n let expr = now;\n if (bound !== 'now' && unit) {\n expr = mysqlTrunc(now, bound, unit);\n if (bound === 'end' && !asDate) {\n // mysqlTrunc yields the period's last day at midnight. For timestamp\n // granularity, step to the last instant (one microsecond before the next\n // period) so intraday values aren't excluded. DATE columns are time-less,\n // so the date-granular result above is left untouched.\n expr = `date_sub(date_add(${expr}, interval 1 day), interval 1 microsecond)`;\n }\n }\n\n if (value.offset) {\n const fn = value.offset < 0 ? 'date_sub' : 'date_add';\n expr = `${fn}(${expr}, interval ${Math.abs(value.offset)} ${value.unit})`;\n }\n\n return expr;\n};\n\n// --- MSSQL ------------------------------------------------------------------\n\nconst mssqlTrunc = (\n now: string,\n bound: 'start' | 'end',\n unit: RelativeDateTimeTruncationUnit,\n asDate: boolean\n) => {\n // datediff/dateadd truncation: number of <unit> since epoch 0, re-added to 0.\n const start = `dateadd(${unit}, datediff(${unit}, 0, ${now}), 0)`;\n if (bound === 'start') return start;\n const nextStart = `dateadd(${unit}, datediff(${unit}, 0, ${now}) + 1, 0)`;\n // Date granularity: last day at midnight. Timestamp granularity: the last\n // instant (100ns before the next period, as datetime2). Using datetime2 is\n // safe for datetime/smalldatetime columns too, since SQL Server promotes the\n // lower-precision side when comparing, so nothing from the next period leaks in.\n return asDate\n ? `dateadd(day, -1, ${nextStart})`\n : `dateadd(nanosecond, -100, cast(${nextStart} as datetime2))`;\n};\n\nconst mssqlBuild: RelativeSQLBuilder = (value, asDate) => {\n const now = asDate ? 'cast(getdate() as date)' : 'getdate()';\n const { bound, unit } = parseAnchor(value.anchor);\n\n let expr = now;\n if (bound !== 'now' && unit) {\n expr = mssqlTrunc(now, bound, unit, asDate);\n }\n\n if (value.offset) {\n expr = `dateadd(${value.unit}, ${value.offset}, ${expr})`;\n }\n\n return expr;\n};\n\n// --- Oracle -----------------------------------------------------------------\n\nconst oracleTruncFormat: Record<RelativeDateTimeTruncationUnit, string> = {\n day: 'DDD',\n week: 'IW',\n month: 'MM',\n year: 'YYYY',\n};\n\nconst oracleBuild: RelativeSQLBuilder = (value, asDate) => {\n const now = asDate ? 'trunc(sysdate)' : 'systimestamp';\n const { bound, unit } = parseAnchor(value.anchor);\n\n let expr = now;\n // When true, the end boundary's sub-second step-back is deferred until after\n // any offset is applied (subtraction commutes with the additive offset), so\n // precision survives the intermediate DATE arithmetic.\n let endTimestampStepBack = false;\n if (bound !== 'now' && unit) {\n const start = `trunc(${now}, '${oracleTruncFormat[unit]}')`;\n if (bound === 'start') {\n expr = start;\n } else {\n // End = next period start, stepped back to the last instant. Oracle's DATE\n // always carries a time component (no time-less date type), so even\n // date-typed columns can hold intraday values; landing on the last instant\n // avoids excluding them, unlike stepping back a full day to midnight.\n const next =\n unit === 'month' || unit === 'year'\n ? `add_months(${start}, ${unit === 'month' ? 1 : 12})`\n : `${start} + interval '1' day${unit === 'week' ? ' * 7' : ''}`;\n if (asDate) {\n // DATE has only second precision; one second is the smallest step.\n expr = `${next} - interval '1' second`;\n } else {\n // TIMESTAMP: defer cast + 1ms step-back until after offset (see below).\n expr = next;\n endTimestampStepBack = true;\n }\n }\n }\n\n if (value.offset) {\n if (value.unit === 'month' || value.unit === 'year') {\n expr = `add_months(${expr}, ${value.offset * (value.unit === 'year' ? 12 : 1)})`;\n } else {\n const days = { day: 1, week: 7 }[value.unit as 'day' | 'week'];\n expr = days\n ? `${expr} ${value.offset < 0 ? '-' : '+'} ${Math.abs(value.offset) * days}`\n : `${expr} + numtodsinterval(${value.offset}, '${value.unit.toUpperCase()}')`;\n }\n }\n\n // TRUNC/DATE arithmetic above is second-granular, so cast to TIMESTAMP and\n // step back one microsecond to reach the period's true last instant (matches\n // PostgreSQL; default TIMESTAMP precision is microseconds).\n if (endTimestampStepBack) {\n expr = `cast(${expr} as timestamp) - numtodsinterval(0.000001, 'second')`;\n }\n\n return expr;\n};\n\n// --- SQLite -----------------------------------------------------------------\n\nconst sqliteStartModifier: Record<RelativeDateTimeTruncationUnit, string> = {\n day: `'start of day'`,\n week: `'weekday 0', '-7 days'`,\n month: `'start of month'`,\n year: `'start of year'`,\n};\n\nconst sqliteBuild: RelativeSQLBuilder = (value, asDate) => {\n const fn = asDate ? 'date' : 'datetime';\n const args: string[] = [`'now'`];\n const { bound, unit } = parseAnchor(value.anchor);\n\n if (bound !== 'now' && unit) {\n if (bound === 'start') {\n args.push(sqliteStartModifier[unit]);\n } else {\n // End = start of next period, minus the smallest representable amount.\n switch (unit) {\n case 'day':\n args.push(`'start of day'`, `'+1 day'`, asDate ? `'-1 day'` : `'-1 second'`);\n break;\n case 'week':\n args.push(`'weekday 0'`, asDate ? `'-1 day'` : `'-1 second'`);\n break;\n case 'month':\n args.push(`'start of month'`, `'+1 month'`, asDate ? `'-1 day'` : `'-1 second'`);\n break;\n case 'year':\n args.push(`'start of year'`, `'+1 year'`, asDate ? `'-1 day'` : `'-1 second'`);\n break;\n }\n }\n }\n\n if (value.offset) {\n const sign = value.offset < 0 ? '-' : '+';\n args.push(`'${sign}${Math.abs(value.offset)} ${pluralUnit(value.unit)}'`);\n }\n\n return `${fn}(${args.join(', ')})`;\n};\n\nconst presetToRelativeBuilderMap = {\n ansi: pgBuild,\n mssql: mssqlBuild,\n mysql: mysqlBuild,\n oracle: oracleBuild,\n postgresql: pgBuild,\n sqlite: sqliteBuild,\n} satisfies Record<SQLPreset, RelativeSQLBuilder>;\n\n/**\n * Determines whether the SQL expression for a relative date/time should be a\n * date (vs. a timestamp/datetime) based on the field's declared `datatype` and\n * the SQL dialect. Mirrors the per-dialect logic used for literal date values.\n */\nconst isDateGranularity = (preset: SQLPreset, datatype: unknown): boolean => {\n const dt = datatype as string;\n switch (preset) {\n case 'mssql':\n return !/^(?:small)?datetime/i.test(dt);\n case 'mysql':\n return !/^(?:datetime|timestamp)/i.test(dt);\n case 'oracle':\n case 'postgresql':\n return !/^timestamp/i.test(dt);\n default:\n // ansi/sqlite: anything not explicitly a datetime/timestamp is date-only.\n return !/^(?:datetime|timestamp)/i.test(dt);\n }\n};\n\n/**\n * Builds a dialect-specific symbolic SQL expression for a {@link RelativeDateTimeValue}.\n */\nexport const getRelativeDateTimeSQL = (\n value: RelativeDateTimeValue,\n preset: SQLPreset,\n datatype: unknown\n): string => presetToRelativeBuilderMap[preset](value, isDateGranularity(preset, datatype));\n","import type { RuleProcessor, SQLPreset, ValueProcessorByRule } from '@react-querybuilder/core';\nimport {\n defaultRuleProcessorSQL,\n defaultValueProcessorByRule,\n getQuotedFieldName,\n lc,\n mapSQLOperator,\n toArray,\n} from '@react-querybuilder/core';\nimport { getRelativeDateTimeSQL } from './getRelativeDateTimeSQL';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport {\n isNonDateValueSource,\n isISOStringDateOnly,\n isRelativeDateTimeValue,\n materializeRelativeValues,\n processIsDateField,\n resolveDatetimeOperator,\n} 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(resolveDatetimeOperator(rule, opts));\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 (\n isNonDateValueSource(rule.valueSource) ||\n !processIsDateField(context.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorSQL(rule, opts);\n }\n\n const valueProcessor = presetToValueProcessorMap[opts.preset!](apiFns);\n\n const quotedField = getQuotedFieldName(rule.field, {\n quoteFieldNamesWith,\n fieldIdentifierSeparator,\n });\n\n // SQL can emit \"live\" symbolic relative expressions, so relative values stay\n // symbolic by default. When `context.materializeRelativeDateTime` is set, resolve\n // them to concrete literals up front and let the standard literal path handle them.\n const ruleValue = context.materializeRelativeDateTime\n ? materializeRelativeValues(apiFns, rule.value, opts)\n : rule.value;\n\n // Relative date/time values are stored as objects. Intercept them before\n // `toArray` (which drops objects) and emit symbolic dialect-specific SQL.\n const rawValues = Array.isArray(ruleValue) ? ruleValue : [ruleValue];\n if (rawValues.some(isRelativeDateTimeValue)) {\n const exprFor = (v: unknown): string | undefined => {\n if (isRelativeDateTimeValue(v)) {\n return getRelativeDateTimeSQL(v, opts.preset!, opts.fieldData?.datatype);\n }\n const dateVal = apiFns.toDate(v as string | Date);\n if (!apiFns.isValid(dateVal)) return undefined;\n return valueProcessor(\n { field: rule.field, operator: '=', value: dateVal },\n { ...opts, context: { originalValue: v } }\n );\n };\n\n switch (operatorLowerCase) {\n case 'in':\n case 'not in': {\n const exprs = rawValues.map(exprFor).filter((e): e is string => e !== undefined);\n // v8 ignore next -- a relative operand always yields an expression\n if (exprs.length === 0) return '';\n finalValue = `(${exprs.join(', ')})`;\n break;\n }\n\n case 'between':\n case 'not between': {\n // Operand order is preserved — symbolic expressions can't be compared\n // at format time to auto-order them.\n const first = exprFor(rawValues[0]);\n const second = exprFor(rawValues[1]);\n if (first === undefined || second === undefined) return '';\n finalValue = `${first} and ${second}`;\n break;\n }\n\n default: {\n const expr = exprFor(rawValues[0]);\n // v8 ignore next -- a single relative operand always yields an expression\n if (expr === undefined) return '';\n finalValue = expr;\n }\n }\n\n return `${quotedField} ${operator} ${finalValue}`.trim();\n }\n\n const valueAsArray: string[] = toArray(ruleValue, { 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 `${quotedField} ${operator} ${finalValue}`.trim();\n };\n","import type { RuleProcessor } from '@react-querybuilder/core';\nimport { defaultRuleProcessorTanStackDB } from '@react-querybuilder/core';\nimport type { RQBDateTimeLibraryAPI } from './types';\nimport { isNonDateValueSource, materializeForExport, 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 \"tanstack_db\" format.\n * Relative values are materialized and all date/time values are converted to `Date`\n * objects (TanStack DB collection filters compare against native `Date` values).\n */\nexport const getDatetimeRuleProcessorTanStackDB =\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 (\n isNonDateValueSource(rule.valueSource) ||\n !processIsDateField(context.isDateField, rule, opts)\n ) {\n return defaultRuleProcessorTanStackDB(rule, opts);\n }\n\n const { operator, value } = materializeForExport(apiFns, rule, opts, true);\n return defaultRuleProcessorTanStackDB({ ...rule, operator, value }, opts);\n };\n"],"mappings":"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"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
//#region src/utils.ts
|
|
2
2
|
const isISOStringDateOnly = (date) => typeof date === "string" && /^\d{4}-\d{2}-\d{2}$/.test(date);
|
|
3
3
|
/**
|
|
4
|
+
* Whether a rule's value source is one that datetime processors must NOT materialize as a
|
|
5
|
+
* date (`field` references another column; `parameter` is a named bind placeholder). Both
|
|
6
|
+
* are delegated to the core default processor, which serializes them per format.
|
|
7
|
+
*/
|
|
8
|
+
const isNonDateValueSource = (valueSource) => valueSource === "field" || valueSource === "parameter";
|
|
9
|
+
/**
|
|
4
10
|
* Type guard for {@link RelativeDateTimeValue}. Relative values are stored as objects
|
|
5
11
|
* (distinguishing them from the ISO 8601 strings used for absolute date/time values).
|
|
6
12
|
*/
|
|
@@ -115,7 +121,7 @@ const processIsDateField = (isDateField, ...[rule, opts]) => {
|
|
|
115
121
|
return defaultIsDateField(rule, opts);
|
|
116
122
|
};
|
|
117
123
|
//#endregion
|
|
118
|
-
//#region \0@oxc-project+runtime@0.
|
|
124
|
+
//#region \0@oxc-project+runtime@0.140.0/helpers/esm/typeof.js
|
|
119
125
|
function _typeof(o) {
|
|
120
126
|
"@babel/helpers - typeof";
|
|
121
127
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
|
@@ -125,7 +131,7 @@ function _typeof(o) {
|
|
|
125
131
|
}, _typeof(o);
|
|
126
132
|
}
|
|
127
133
|
//#endregion
|
|
128
|
-
//#region \0@oxc-project+runtime@0.
|
|
134
|
+
//#region \0@oxc-project+runtime@0.140.0/helpers/esm/toPrimitive.js
|
|
129
135
|
function toPrimitive(t, r) {
|
|
130
136
|
if ("object" != _typeof(t) || !t) return t;
|
|
131
137
|
var e = t[Symbol.toPrimitive];
|
|
@@ -137,13 +143,13 @@ function toPrimitive(t, r) {
|
|
|
137
143
|
return ("string" === r ? String : Number)(t);
|
|
138
144
|
}
|
|
139
145
|
//#endregion
|
|
140
|
-
//#region \0@oxc-project+runtime@0.
|
|
146
|
+
//#region \0@oxc-project+runtime@0.140.0/helpers/esm/toPropertyKey.js
|
|
141
147
|
function toPropertyKey(t) {
|
|
142
148
|
var i = toPrimitive(t, "string");
|
|
143
149
|
return "symbol" == _typeof(i) ? i : i + "";
|
|
144
150
|
}
|
|
145
151
|
//#endregion
|
|
146
|
-
//#region \0@oxc-project+runtime@0.
|
|
152
|
+
//#region \0@oxc-project+runtime@0.140.0/helpers/esm/defineProperty.js
|
|
147
153
|
function _defineProperty(e, r, t) {
|
|
148
154
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
149
155
|
value: t,
|
|
@@ -153,7 +159,7 @@ function _defineProperty(e, r, t) {
|
|
|
153
159
|
}) : e[r] = t, e;
|
|
154
160
|
}
|
|
155
161
|
//#endregion
|
|
156
|
-
//#region \0@oxc-project+runtime@0.
|
|
162
|
+
//#region \0@oxc-project+runtime@0.140.0/helpers/esm/objectSpread2.js
|
|
157
163
|
function ownKeys(e, r) {
|
|
158
164
|
var t = Object.keys(e);
|
|
159
165
|
if (Object.getOwnPropertySymbols) {
|
|
@@ -176,6 +182,6 @@ function _objectSpread2(e) {
|
|
|
176
182
|
return e;
|
|
177
183
|
}
|
|
178
184
|
//#endregion
|
|
179
|
-
export {
|
|
185
|
+
export { isRelativeDateTimeValue as a, processIsDateField as c, isNonDateValueSource as i, resolveDatetimeOperator as l, isDateOnlyDatatype as n, materializeForExport as o, isISOStringDateOnly as r, materializeRelativeValues as s, _objectSpread2 as t, resolveRelativeDateTime as u };
|
|
180
186
|
|
|
181
|
-
//# sourceMappingURL=objectSpread2-
|
|
187
|
+
//# sourceMappingURL=objectSpread2-MqoZ2hSz.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objectSpread2-MqoZ2hSz.js","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import type { RuleProcessor, ValueSource } from '@react-querybuilder/core';\nimport type {\n IsDateField,\n IsDateFieldFunction,\n RelativeDateTimeTruncationUnit,\n RelativeDateTimeValue,\n RQBDateTimeLibraryAPI,\n} 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\n/**\n * Whether a rule's value source is one that datetime processors must NOT materialize as a\n * date (`field` references another column; `parameter` is a named bind placeholder). Both\n * are delegated to the core default processor, which serializes them per format.\n */\nexport const isNonDateValueSource = (valueSource: ValueSource | undefined): boolean =>\n valueSource === 'field' || valueSource === 'parameter';\n\n/**\n * Type guard for {@link RelativeDateTimeValue}. Relative values are stored as objects\n * (distinguishing them from the ISO 8601 strings used for absolute date/time values).\n */\nexport const isRelativeDateTimeValue = (value: unknown): value is RelativeDateTimeValue =>\n typeof value === 'object' &&\n value !== null &&\n (value as { mode?: unknown }).mode === 'relative' &&\n typeof (value as RelativeDateTimeValue).anchor === 'string';\n\nconst anchorRegExp = /^(start|end)Of(Day|Week|Month|Year)$/;\n\n/**\n * Resolves a {@link RelativeDateTimeValue} into a concrete `Date` using the given\n * date library API. The anchor is applied relative to `base` (defaulting to now),\n * then the signed offset is added.\n */\nexport const resolveRelativeDateTime = (\n apiFns: RQBDateTimeLibraryAPI,\n value: RelativeDateTimeValue,\n base: Date = new Date()\n): Date => {\n let result: Date = base;\n\n if (value.anchor !== 'now') {\n const match = anchorRegExp.exec(value.anchor);\n // v8 ignore next -- guarded by the RelativeDateTimeAnchor type\n if (match) {\n const unit = match[2].toLowerCase() as RelativeDateTimeTruncationUnit;\n result = match[1] === 'start' ? apiFns.startOf(result, unit) : apiFns.endOf(result, unit);\n }\n }\n\n if (value.offset) {\n result = apiFns.add(result, value.offset, value.unit);\n }\n\n return result;\n};\n\n/**\n * Whether a `datatype` represents a date-only (no time component) type, e.g. `date`\n * but not `datetime`/`datetimeoffset`/`timestamp`. Used to choose the precision when\n * materializing a relative value to an ISO 8601 string.\n */\nexport const isDateOnlyDatatype = (datatype: unknown): boolean =>\n /^date\\b/i.test(datatype as string);\n\n/**\n * Replaces any {@link RelativeDateTimeValue} in `value` (or in each element, if `value`\n * is an array) with a concrete ISO 8601 string, resolved via\n * {@link resolveRelativeDateTime}. The \"now\" reference can be pinned with\n * `opts.context.relativeDateTimeBase` for deterministic output; precision (date-only vs\n * full) follows the field's `datatype`. Non-relative values pass through unchanged.\n */\nexport const materializeRelativeValues = (\n apiFns: RQBDateTimeLibraryAPI,\n value: unknown,\n opts: Parameters<RuleProcessor>[1]\n): unknown => {\n const base = opts?.context?.relativeDateTimeBase as Date | undefined;\n const dateOnly = isDateOnlyDatatype(opts?.fieldData?.datatype);\n const conv = (v: unknown): unknown => {\n if (!isRelativeDateTimeValue(v)) return v;\n const resolved = resolveRelativeDateTime(apiFns, v, base);\n return dateOnly ? apiFns.toISOStringDateOnly(resolved) : apiFns.toISOString(resolved);\n };\n return Array.isArray(value) ? value.map(conv) : conv(value);\n};\n\n/**\n * Resolves a rule's operator for export, applying any `context.relativeOperatorMap`\n * entry. Operator-driven mode controllers (see `createOperatorModeController`) use\n * dedicated operator names to signal relative mode; this maps those names to the real\n * comparison operator at format time. Operators absent from the map pass through unchanged.\n */\nexport const resolveDatetimeOperator = (...[rule, opts]: Parameters<RuleProcessor>): string =>\n (opts?.context?.relativeOperatorMap as Record<string, string> | undefined)?.[rule.operator] ??\n rule.operator;\n\n/**\n * Prepares a date/time rule for delegation to a non-symbolic default rule processor\n * (e.g. \"parameterized\", \"spel\", \"ldap\", \"gremlin\", \"prisma\", \"sequelize\", \"drizzle\",\n * \"tanstack_db\"). Relative values are materialized to concrete dates (these formats have\n * no symbolic relative form), and `between`/`notBetween` operands are ordered\n * chronologically (defaults can't reorder non-numeric date operands). When `asDate` is\n * set, each valid value is converted to a `Date` (for object-based formats); otherwise\n * the materialized ISO 8601 strings are passed through. The resolved `operator` (after\n * any `relativeOperatorMap` mapping) is returned alongside the prepared `value`.\n */\nexport const materializeForExport = (\n apiFns: RQBDateTimeLibraryAPI,\n rule: Parameters<RuleProcessor>[0],\n opts: Parameters<RuleProcessor>[1],\n asDate = false\n): { operator: string; value: unknown } => {\n const operator = resolveDatetimeOperator(rule, opts);\n const materialized = materializeRelativeValues(apiFns, rule.value, opts);\n\n let prepared = materialized;\n if (Array.isArray(materialized) && materialized.length >= 2) {\n const opLC = operator.toLowerCase();\n if (opLC === 'between' || opLC === 'notbetween') {\n const first = apiFns.toDate(materialized[0] as string | Date);\n const second = apiFns.toDate(materialized[1] as string | Date);\n if (apiFns.isValid(first) && apiFns.isValid(second) && !apiFns.isBefore(first, second)) {\n prepared = [materialized[1], materialized[0], ...materialized.slice(2)];\n }\n }\n }\n\n if (!asDate) return { operator, value: prepared };\n\n const toDateVal = (v: unknown) => {\n const d = apiFns.toDate(v as string | Date);\n return apiFns.isValid(d) ? d : v;\n };\n return {\n operator,\n value: Array.isArray(prepared) ? prepared.map(toDateVal) : toDateVal(prepared),\n };\n};\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"],"mappings":"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"}
|