@react-querybuilder/datetime 8.9.2 → 8.11.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.
Files changed (72) hide show
  1. package/dist/cjs/getDatetimeRuleProcessorSQL-COEhnVIZ.js +478 -0
  2. package/dist/cjs/getDatetimeRuleProcessorSQL-COEhnVIZ.js.map +1 -0
  3. package/dist/cjs/{getDatetimeRuleProcessorSQL-D95jgDK6.js → getDatetimeRuleProcessorSQL-CSxxM8ce.js} +2 -2
  4. package/dist/cjs/{getDatetimeRuleProcessorSQL-D95jgDK6.js.map → getDatetimeRuleProcessorSQL-CSxxM8ce.js.map} +1 -1
  5. package/dist/cjs/react-querybuilder_datetime.cjs.development.d.ts +1 -1
  6. package/dist/cjs/react-querybuilder_datetime.cjs.development.date-fns.d.ts +1 -1
  7. package/dist/cjs/react-querybuilder_datetime.cjs.development.date-fns.js +1 -1
  8. package/dist/cjs/react-querybuilder_datetime.cjs.development.dayjs.d.ts +1 -1
  9. package/dist/cjs/react-querybuilder_datetime.cjs.development.dayjs.js +1 -1
  10. package/dist/cjs/react-querybuilder_datetime.cjs.development.js +1 -1
  11. package/dist/cjs/react-querybuilder_datetime.cjs.development.jsdate.d.ts +1 -1
  12. package/dist/cjs/react-querybuilder_datetime.cjs.development.jsdate.js +1 -1
  13. package/dist/cjs/react-querybuilder_datetime.cjs.development.luxon.d.ts +1 -1
  14. package/dist/cjs/react-querybuilder_datetime.cjs.development.luxon.js +1 -1
  15. package/dist/cjs/react-querybuilder_datetime.cjs.production.d.ts +1 -1
  16. package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.d.ts +1 -1
  17. package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.js +1 -1
  18. package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.js.map +1 -1
  19. package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.d.ts +1 -1
  20. package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.js +1 -1
  21. package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.js.map +1 -1
  22. package/dist/cjs/react-querybuilder_datetime.cjs.production.js +1 -1
  23. package/dist/cjs/react-querybuilder_datetime.cjs.production.js.map +1 -1
  24. package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.d.ts +1 -1
  25. package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.js +1 -1
  26. package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.js.map +1 -1
  27. package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.d.ts +1 -1
  28. package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.js +1 -1
  29. package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.js.map +1 -1
  30. package/dist/{types-CDEkL2M_.d.mts → cjs/types-A60rB27l.d.ts} +450 -428
  31. package/dist/{getDatetimeRuleProcessorSQL-CN80oEFK.js → getDatetimeRuleProcessorSQL-B8y0RI7t.js} +12 -14
  32. package/dist/{getDatetimeRuleProcessorSQL-CN80oEFK.js.map → getDatetimeRuleProcessorSQL-B8y0RI7t.js.map} +1 -1
  33. package/dist/{getDatetimeRuleProcessorSQL-KYRPP9qd.mjs → getDatetimeRuleProcessorSQL-CSl2zGza.mjs} +13 -15
  34. package/dist/{getDatetimeRuleProcessorSQL-KYRPP9qd.mjs.map → getDatetimeRuleProcessorSQL-CSl2zGza.mjs.map} +1 -1
  35. package/dist/react-querybuilder_datetime.d.mts +1 -1
  36. package/dist/react-querybuilder_datetime.date-fns.d.mts +1 -1
  37. package/dist/react-querybuilder_datetime.date-fns.mjs +1 -1
  38. package/dist/react-querybuilder_datetime.dayjs.d.mts +1 -1
  39. package/dist/react-querybuilder_datetime.dayjs.mjs +1 -1
  40. package/dist/react-querybuilder_datetime.jsdate.d.mts +1 -1
  41. package/dist/react-querybuilder_datetime.jsdate.mjs +1 -1
  42. package/dist/react-querybuilder_datetime.legacy-esm.d.ts +1 -1
  43. package/dist/react-querybuilder_datetime.legacy-esm.date-fns.d.ts +1 -1
  44. package/dist/react-querybuilder_datetime.legacy-esm.date-fns.js +1 -1
  45. package/dist/react-querybuilder_datetime.legacy-esm.dayjs.d.ts +1 -1
  46. package/dist/react-querybuilder_datetime.legacy-esm.dayjs.js +1 -1
  47. package/dist/react-querybuilder_datetime.legacy-esm.js +1 -1
  48. package/dist/react-querybuilder_datetime.legacy-esm.jsdate.d.ts +1 -1
  49. package/dist/react-querybuilder_datetime.legacy-esm.jsdate.js +1 -1
  50. package/dist/react-querybuilder_datetime.legacy-esm.luxon.d.ts +1 -1
  51. package/dist/react-querybuilder_datetime.legacy-esm.luxon.js +1 -1
  52. package/dist/react-querybuilder_datetime.luxon.d.mts +1 -1
  53. package/dist/react-querybuilder_datetime.luxon.mjs +1 -1
  54. package/dist/react-querybuilder_datetime.mjs +1 -1
  55. package/dist/react-querybuilder_datetime.production.d.mts +1 -1
  56. package/dist/react-querybuilder_datetime.production.date-fns.d.mts +1 -1
  57. package/dist/react-querybuilder_datetime.production.date-fns.mjs +1 -1
  58. package/dist/react-querybuilder_datetime.production.date-fns.mjs.map +1 -1
  59. package/dist/react-querybuilder_datetime.production.dayjs.d.mts +1 -1
  60. package/dist/react-querybuilder_datetime.production.dayjs.mjs +1 -1
  61. package/dist/react-querybuilder_datetime.production.dayjs.mjs.map +1 -1
  62. package/dist/react-querybuilder_datetime.production.jsdate.d.mts +1 -1
  63. package/dist/react-querybuilder_datetime.production.jsdate.mjs +1 -1
  64. package/dist/react-querybuilder_datetime.production.jsdate.mjs.map +1 -1
  65. package/dist/react-querybuilder_datetime.production.luxon.d.mts +1 -1
  66. package/dist/react-querybuilder_datetime.production.luxon.mjs +1 -1
  67. package/dist/react-querybuilder_datetime.production.luxon.mjs.map +1 -1
  68. package/dist/react-querybuilder_datetime.production.mjs +1 -1
  69. package/dist/react-querybuilder_datetime.production.mjs.map +1 -1
  70. package/dist/{types-EgfSemtR.d.ts → types-BjHLhGXX.d.mts} +450 -428
  71. package/dist/{cjs/types-QCQUGVZa.d.ts → types-Dq7BlQzI.d.ts} +450 -428
  72. package/package.json +14 -14
@@ -0,0 +1,478 @@
1
+ //#region rolldown:runtime
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __copyProps = (to, from, except, desc) => {
9
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
+ key = keys[i];
11
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
+ get: ((k) => from[k]).bind(null, key),
13
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
+ });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
19
+ value: mod,
20
+ enumerable: true
21
+ }) : target, mod));
22
+
23
+ //#endregion
24
+ let react_querybuilder = require("react-querybuilder");
25
+ react_querybuilder = __toESM(react_querybuilder);
26
+
27
+ //#region src/utils.ts
28
+ const isISOStringDateOnly = (date) => typeof date === "string" && /^\d{4}-\d{2}-\d{2}$/.test(date);
29
+ 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);
30
+ const processIsDateField = (isDateField, ...[rule, opts]) => {
31
+ if (typeof isDateField === "boolean") return isDateField;
32
+ if (typeof isDateField === "function") return isDateField(rule, opts);
33
+ if (Array.isArray(isDateField)) return isDateField.some((condition) => Object.entries(condition).every(([key, value]) => opts?.fieldData?.[key] === value));
34
+ if (typeof isDateField === "object") return Object.entries(isDateField).every(([key, value]) => opts?.fieldData?.[key] === value);
35
+ return defaultIsDateField(rule, opts);
36
+ };
37
+
38
+ //#endregion
39
+ //#region src/getDatetimeJsonLogicOperations.ts
40
+ /**
41
+ * Custom operations for use with JsonLogic objects generated by
42
+ * {@link datetimeRuleProcessorJsonLogic}.
43
+ */
44
+ const getDatetimeJsonLogicOperations = ({ isAfter, isBefore, isSame }) => ({
45
+ dateAfter: (a, b) => isAfter(a, b),
46
+ dateBefore: (a, b) => isBefore(a, b),
47
+ dateBetween: (a, b, c) => isSame(b, a) || isSame(b, c) || isAfter(b, a) && isBefore(b, c) || isAfter(b, c) && isBefore(b, a),
48
+ dateNotBetween: (a, b, c) => !isSame(b, a) && !isSame(b, c) && (isBefore(a, c) && (isBefore(b, a) || isAfter(b, c)) || isAfter(a, c) && (isBefore(b, c) || isAfter(b, a))),
49
+ dateIn: (a, b) => b.some((v) => isSame(a, v)),
50
+ dateNotIn: (a, b) => b.every((v) => !isSame(a, v)),
51
+ dateNotOn: (a, b) => !isSame(a, b),
52
+ dateOn: (a, b) => isSame(a, b),
53
+ dateOnOrAfter: (a, b) => isAfter(a, b) || isSame(a, b),
54
+ dateOnOrBefore: (a, b) => isBefore(a, b) || isSame(a, b)
55
+ });
56
+
57
+ //#endregion
58
+ //#region src/getDatetimeRuleProcessorCEL.ts
59
+ const shouldNegate = (op) => /^(does)?not/i.test(op);
60
+ /**
61
+ * Generates a rule processor with date/time features for use by
62
+ * {@link @react-querybuilder/core!formatQuery formatQuery} with the "cel" format.
63
+ */
64
+ const getDatetimeRuleProcessorCEL = (apiFns) => (rule, options) => {
65
+ const opts = options ?? ( /* istanbul ignore next */ {});
66
+ const { context = {} } = opts;
67
+ if (rule.valueSource === "field" || !processIsDateField(context.isDateField, rule, opts)) return (0, react_querybuilder.defaultRuleProcessorCEL)(rule, opts);
68
+ const ts = (d) => `timestamp("${apiFns.toISOString(d)}")`;
69
+ const operatorTL = (0, react_querybuilder.lc)(rule.operator.replace(/^=$/, "=="));
70
+ switch (operatorTL) {
71
+ case "<":
72
+ case "<=":
73
+ case "==":
74
+ case "!=":
75
+ case ">":
76
+ case ">=": return `${rule.field} ${operatorTL} ${ts(rule.value)}`;
77
+ }
78
+ const valueAsDateArray = (0, react_querybuilder.toArray)(rule.value, { retainEmptyStrings: false }).map((v) => apiFns.toDate(v)).filter((dateVal) => apiFns.isValid(dateVal));
79
+ switch (operatorTL) {
80
+ case "in":
81
+ case "notin": {
82
+ if (valueAsDateArray.length === 0) return "";
83
+ const [prefix, suffix] = shouldNegate(operatorTL) ? ["!(", ")"] : ["", ""];
84
+ return `${prefix}${rule.field} in [${valueAsDateArray.map((val) => ts(val)).join(", ")}]${suffix}`;
85
+ }
86
+ case "between":
87
+ case "notbetween": {
88
+ if (valueAsDateArray.length < 2) return "";
89
+ const [first, second] = valueAsDateArray;
90
+ const [firstDate, secondDate] = apiFns.isBefore(first, second) ? [first, second] : [second, first];
91
+ return operatorTL === "between" ? `(${rule.field} >= ${ts(firstDate)} && ${rule.field} <= ${ts(secondDate)})` : `(${rule.field} < ${ts(firstDate)} || ${rule.field} > ${ts(secondDate)})`;
92
+ }
93
+ }
94
+ return (0, react_querybuilder.defaultRuleProcessorCEL)(rule, opts);
95
+ };
96
+
97
+ //#endregion
98
+ //#region src/getDatetimeRuleProcessorMongoDBQuery.ts
99
+ /**
100
+ * Generates a rule processor with date/time features for use by
101
+ * {@link @react-querybuilder/core!formatQuery formatQuery} with the "mongodb_query" format.
102
+ */
103
+ const getDatetimeRuleProcessorMongoDBQuery = (apiFns) => (rule, options) => {
104
+ const opts = options ?? ( /* istanbul ignore next */ {});
105
+ const { field, operator, value, valueSource } = rule;
106
+ if (valueSource === "field" || !processIsDateField(opts.context?.isDateField, rule, opts)) return (0, react_querybuilder.defaultRuleProcessorMongoDBQuery)(rule, opts);
107
+ if (operator === "=") return { [field]: apiFns.toDate(value) };
108
+ switch (operator) {
109
+ case "<":
110
+ case "<=":
111
+ case "!=":
112
+ case ">":
113
+ case ">=": return { [field]: { [react_querybuilder.mongoOperators[operator]]: apiFns.toDate(value) } };
114
+ }
115
+ const valueAsDateArray = (0, react_querybuilder.toArray)(rule.value, { retainEmptyStrings: false }).map((v) => apiFns.toDate(v)).filter((dateVal) => apiFns.isValid(dateVal));
116
+ switch (operator) {
117
+ case "in":
118
+ case "notIn": return { [field]: { [react_querybuilder.mongoOperators[operator]]: valueAsDateArray } };
119
+ case "between":
120
+ case "notBetween": {
121
+ if (valueAsDateArray.length < 2) return "";
122
+ const [first, second] = valueAsDateArray;
123
+ const orderedArray = apiFns.isBefore(first, second) ? [first, second] : [second, first];
124
+ return operator === "between" ? { [field]: {
125
+ $gte: orderedArray[0],
126
+ $lte: orderedArray[1]
127
+ } } : { $or: [{ [field]: { $lt: orderedArray[0] } }, { [field]: { $gt: orderedArray[1] } }] };
128
+ }
129
+ }
130
+ return (0, react_querybuilder.defaultRuleProcessorMongoDBQuery)(rule, opts);
131
+ };
132
+
133
+ //#endregion
134
+ //#region src/getDatetimeRuleProcessorNL.ts
135
+ const defaultDateTimeNLOperatorMap = {
136
+ "<": "is before",
137
+ ">": "is after",
138
+ "<=": "is on or before",
139
+ ">=": "is on or after",
140
+ in: ["is one of the dates", "is the same as a date in"],
141
+ notin: ["is not one of the dates", "is not the same as any date in"],
142
+ between: ["is between", "is between the dates in"],
143
+ notbetween: ["is not between", "is not between the dates in"]
144
+ };
145
+ /**
146
+ * Generates a value processor with date/time features for use by
147
+ * {@link @react-querybuilder/core!formatQuery formatQuery} with the "natural_language" format.
148
+ */
149
+ const datetimeValueProcessorNL = (rule, opts) => {
150
+ if (isISOStringDateOnly(opts?.context?.originalValue)) return new Intl.DateTimeFormat(opts?.context?.locales, {
151
+ dateStyle: "full",
152
+ ...opts?.context?.dateFormat
153
+ }).format(rule.value);
154
+ return new Intl.DateTimeFormat(opts?.context?.locales, {
155
+ dateStyle: "full",
156
+ timeStyle: "long",
157
+ ...opts?.context?.dateTimeFormat
158
+ }).format(rule.value);
159
+ };
160
+ /**
161
+ * Generates a rule processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with
162
+ * the "natural_language" format.
163
+ */
164
+ const getDatetimeRuleProcessorNL = (apiFns) => (rule, options) => {
165
+ const opts = options ?? ( /* istanbul ignore next */ {});
166
+ const operatorLowerCase = (0, react_querybuilder.lc)(rule.operator);
167
+ let finalValue = "";
168
+ // istanbul ignore next
169
+ const { fieldData, quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator = "", operatorProcessor = react_querybuilder.defaultOperatorProcessorNL, wordOrder = "SVO", context = {}, operatorMap = defaultDateTimeNLOperatorMap } = opts;
170
+ if (!processIsDateField(context.isDateField, rule, opts)) return (0, react_querybuilder.defaultRuleProcessorNL)(rule, opts);
171
+ if (rule.valueSource === "field") return (0, react_querybuilder.defaultRuleProcessorNL)(rule, {
172
+ ...opts,
173
+ operatorMap: defaultDateTimeNLOperatorMap
174
+ });
175
+ if ((operatorLowerCase === "in" || operatorLowerCase === "notin" || operatorLowerCase === "between" || operatorLowerCase === "notbetween") && !rule.value) return "";
176
+ const valueAsDateArray = (0, react_querybuilder.toArray)(rule.value, { retainEmptyStrings: false }).map((v) => [v, apiFns.toDate(v)]).filter((v) => apiFns.isValid(v[1]));
177
+ switch (operatorLowerCase) {
178
+ case "in":
179
+ case "notin":
180
+ if (valueAsDateArray.length === 0) return "";
181
+ finalValue = `(${valueAsDateArray.map((value) => datetimeValueProcessorNL({
182
+ field: rule.field,
183
+ operator: "=",
184
+ value: value[1]
185
+ }, {
186
+ ...opts,
187
+ context: {
188
+ ...context,
189
+ originalValue: value[0]
190
+ }
191
+ })).join(", ")})`;
192
+ break;
193
+ case "between":
194
+ case "notbetween":
195
+ {
196
+ if (valueAsDateArray.length < 2) return "";
197
+ const [first, second] = valueAsDateArray;
198
+ finalValue = (apiFns.isBefore(first[1], second[1]) ? [first, second] : [second, first]).map(([originalValue, value]) => datetimeValueProcessorNL({
199
+ field: rule.field,
200
+ operator: "=",
201
+ value
202
+ }, {
203
+ ...opts,
204
+ context: {
205
+ ...context,
206
+ originalValue
207
+ }
208
+ })).join(` ${opts.translations?.and ?? "and"} `);
209
+ }
210
+ break;
211
+ default: {
212
+ const [originalValue, value] = valueAsDateArray[0] ?? ["", ""];
213
+ finalValue = originalValue ? datetimeValueProcessorNL({
214
+ field: rule.field,
215
+ operator: "=",
216
+ value
217
+ }, {
218
+ ...opts,
219
+ context: {
220
+ ...context,
221
+ originalValue
222
+ }
223
+ }) : "";
224
+ }
225
+ }
226
+ const wordOrderMap = {
227
+ S: (0, react_querybuilder.getQuotedFieldName)(fieldData?.label ?? rule.field, {
228
+ quoteFieldNamesWith,
229
+ fieldIdentifierSeparator
230
+ }),
231
+ V: operatorProcessor(rule, {
232
+ ...opts,
233
+ operatorMap: {
234
+ ...defaultDateTimeNLOperatorMap,
235
+ ...operatorMap
236
+ }
237
+ }),
238
+ O: finalValue
239
+ };
240
+ return (0, react_querybuilder.normalizeConstituentWordOrder)(wordOrder).map((term) => `${wordOrderMap[term]}`).join(" ").trim();
241
+ };
242
+
243
+ //#endregion
244
+ //#region src/getDatetimeRuleProcessorSQL.ts
245
+ /**
246
+ * Generates a value processor with date/time features for use by
247
+ * {@link @react-querybuilder/core!formatQuery formatQuery} with the "sql" format and "ansi" preset.
248
+ */
249
+ const getDatetimeValueProcessorANSI = ({ toISOStringDateOnly, toISOString }) => (rule, opts) => {
250
+ if (isISOStringDateOnly(opts?.context?.originalValue)) return (0, react_querybuilder.defaultValueProcessorByRule)({
251
+ ...rule,
252
+ value: toISOStringDateOnly(rule.value)
253
+ }, opts);
254
+ return (0, react_querybuilder.defaultValueProcessorByRule)({
255
+ ...rule,
256
+ value: toISOString(rule.value)
257
+ }, opts);
258
+ };
259
+ /**
260
+ * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with
261
+ * the "sql" format and "mssql" preset.
262
+ */
263
+ const getDatetimeValueProcessorMSSQL = ({ toISOStringDateOnly, toISOString }) => (rule, opts) => {
264
+ const datatype = /^(?:small)?datetime/i.test(opts?.fieldData?.datatype) ? "datetimeoffset" : "date";
265
+ const value = datatype === "datetimeoffset" ? toISOString(rule.value) : toISOStringDateOnly(rule.value);
266
+ return (0, react_querybuilder.defaultValueProcessorByRule)({
267
+ ...rule,
268
+ value
269
+ }, {
270
+ ...opts,
271
+ wrapValueWith: [`cast(`, ` as ${datatype})`]
272
+ });
273
+ };
274
+ /**
275
+ * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with
276
+ * the "sql" format and "mysql" preset.
277
+ */
278
+ const getDatetimeValueProcessorMySQL = ({ toISOStringDateOnly, toISOString }) => (rule, opts) => {
279
+ const datatype = /^(?:datetime|timestamp)/i.test(opts?.fieldData?.datatype) ? "datetime" : "date";
280
+ const value = datatype === "datetime" ? toISOString(rule.value) : toISOStringDateOnly(rule.value);
281
+ return (0, react_querybuilder.defaultValueProcessorByRule)({
282
+ ...rule,
283
+ value
284
+ }, {
285
+ ...opts,
286
+ wrapValueWith: [`cast(`, ` as ${datatype})`]
287
+ });
288
+ };
289
+ /**
290
+ * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with
291
+ * the "sql" format and "oracle" preset.
292
+ */
293
+ const getDatetimeValueProcessorOracle = ({ toISOStringDateOnly, toISOString }) => (rule, opts) => {
294
+ const datatype = /^timestamp/i.test(opts?.fieldData?.datatype) ? "timestamp" : "date";
295
+ const value = datatype === "timestamp" ? toISOString(rule.value).replaceAll("T", " ").replace("Z", " UTC") : toISOStringDateOnly(rule.value);
296
+ return (0, react_querybuilder.defaultValueProcessorByRule)({
297
+ ...rule,
298
+ value
299
+ }, {
300
+ ...opts,
301
+ wrapValueWith: [datatype, ``]
302
+ });
303
+ };
304
+ /**
305
+ * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with
306
+ * the "sql" format and "postgresql" preset.
307
+ */
308
+ const getDatetimeValueProcessorPostgreSQL = ({ toISOStringDateOnly, toISOString }) => (rule, opts) => {
309
+ const datatype = /^timestamp/i.test(opts?.fieldData?.datatype) ? "timestamp" : "date";
310
+ const value = datatype === "timestamp" ? toISOString(rule.value) : toISOStringDateOnly(rule.value);
311
+ return (0, react_querybuilder.defaultValueProcessorByRule)({
312
+ ...rule,
313
+ value
314
+ }, {
315
+ ...opts,
316
+ wrapValueWith: [datatype, ``]
317
+ });
318
+ };
319
+ const presetToValueProcessorMap = {
320
+ ansi: getDatetimeValueProcessorANSI,
321
+ mssql: getDatetimeValueProcessorMSSQL,
322
+ mysql: getDatetimeValueProcessorMySQL,
323
+ oracle: getDatetimeValueProcessorOracle,
324
+ postgresql: getDatetimeValueProcessorPostgreSQL,
325
+ sqlite: getDatetimeValueProcessorANSI
326
+ };
327
+ /**
328
+ * Generates a rule processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with
329
+ * the "sql" format.
330
+ */
331
+ const getDatetimeRuleProcessorSQL = (apiFns) => (rule, options) => {
332
+ const opts = options ?? ( /* istanbul ignore next */ {});
333
+ const operator = (0, react_querybuilder.mapSQLOperator)(rule.operator);
334
+ const operatorLowerCase = (0, react_querybuilder.lc)(operator);
335
+ // istanbul ignore next
336
+ const { quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator = "", context = {} } = opts;
337
+ let finalValue = "";
338
+ if (rule.valueSource === "field" || !processIsDateField(context.isDateField, rule, opts)) return (0, react_querybuilder.defaultRuleProcessorSQL)(rule, opts);
339
+ const valueProcessor = presetToValueProcessorMap[opts.preset](apiFns);
340
+ const valueAsDateArray = (0, react_querybuilder.toArray)(rule.value, { retainEmptyStrings: false }).map((v) => [v, apiFns.toDate(v)]).filter((v) => apiFns.isValid(v[1]));
341
+ switch (operatorLowerCase) {
342
+ case "in":
343
+ case "not in":
344
+ if (valueAsDateArray.length === 0) return "";
345
+ finalValue = `(${valueAsDateArray.map((value) => valueProcessor({
346
+ field: rule.field,
347
+ operator: "=",
348
+ value: value[1]
349
+ }, {
350
+ ...opts,
351
+ context: { originalValue: value[0] }
352
+ })).join(", ")})`;
353
+ break;
354
+ case "between":
355
+ case "not between":
356
+ {
357
+ if (valueAsDateArray.length < 2) return "";
358
+ const [first, second] = valueAsDateArray;
359
+ finalValue = (apiFns.isBefore(first[1], second[1]) ? [first, second] : [second, first]).map(([originalValue, value]) => valueProcessor({
360
+ field: rule.field,
361
+ operator: "=",
362
+ value
363
+ }, {
364
+ ...opts,
365
+ context: { originalValue }
366
+ })).join(" and ");
367
+ }
368
+ break;
369
+ default: {
370
+ const [originalValue, value] = valueAsDateArray[0] ?? ["", ""];
371
+ finalValue = valueProcessor({
372
+ field: rule.field,
373
+ operator: "=",
374
+ value
375
+ }, {
376
+ ...opts,
377
+ context: { originalValue }
378
+ });
379
+ }
380
+ }
381
+ return `${(0, react_querybuilder.getQuotedFieldName)(rule.field, {
382
+ quoteFieldNamesWith,
383
+ fieldIdentifierSeparator
384
+ })} ${operator} ${finalValue}`.trim();
385
+ };
386
+
387
+ //#endregion
388
+ Object.defineProperty(exports, '__toESM', {
389
+ enumerable: true,
390
+ get: function () {
391
+ return __toESM;
392
+ }
393
+ });
394
+ Object.defineProperty(exports, 'datetimeValueProcessorNL', {
395
+ enumerable: true,
396
+ get: function () {
397
+ return datetimeValueProcessorNL;
398
+ }
399
+ });
400
+ Object.defineProperty(exports, 'defaultDateTimeNLOperatorMap', {
401
+ enumerable: true,
402
+ get: function () {
403
+ return defaultDateTimeNLOperatorMap;
404
+ }
405
+ });
406
+ Object.defineProperty(exports, 'getDatetimeJsonLogicOperations', {
407
+ enumerable: true,
408
+ get: function () {
409
+ return getDatetimeJsonLogicOperations;
410
+ }
411
+ });
412
+ Object.defineProperty(exports, 'getDatetimeRuleProcessorCEL', {
413
+ enumerable: true,
414
+ get: function () {
415
+ return getDatetimeRuleProcessorCEL;
416
+ }
417
+ });
418
+ Object.defineProperty(exports, 'getDatetimeRuleProcessorMongoDBQuery', {
419
+ enumerable: true,
420
+ get: function () {
421
+ return getDatetimeRuleProcessorMongoDBQuery;
422
+ }
423
+ });
424
+ Object.defineProperty(exports, 'getDatetimeRuleProcessorNL', {
425
+ enumerable: true,
426
+ get: function () {
427
+ return getDatetimeRuleProcessorNL;
428
+ }
429
+ });
430
+ Object.defineProperty(exports, 'getDatetimeRuleProcessorSQL', {
431
+ enumerable: true,
432
+ get: function () {
433
+ return getDatetimeRuleProcessorSQL;
434
+ }
435
+ });
436
+ Object.defineProperty(exports, 'getDatetimeValueProcessorANSI', {
437
+ enumerable: true,
438
+ get: function () {
439
+ return getDatetimeValueProcessorANSI;
440
+ }
441
+ });
442
+ Object.defineProperty(exports, 'getDatetimeValueProcessorMSSQL', {
443
+ enumerable: true,
444
+ get: function () {
445
+ return getDatetimeValueProcessorMSSQL;
446
+ }
447
+ });
448
+ Object.defineProperty(exports, 'getDatetimeValueProcessorMySQL', {
449
+ enumerable: true,
450
+ get: function () {
451
+ return getDatetimeValueProcessorMySQL;
452
+ }
453
+ });
454
+ Object.defineProperty(exports, 'getDatetimeValueProcessorOracle', {
455
+ enumerable: true,
456
+ get: function () {
457
+ return getDatetimeValueProcessorOracle;
458
+ }
459
+ });
460
+ Object.defineProperty(exports, 'getDatetimeValueProcessorPostgreSQL', {
461
+ enumerable: true,
462
+ get: function () {
463
+ return getDatetimeValueProcessorPostgreSQL;
464
+ }
465
+ });
466
+ Object.defineProperty(exports, 'isISOStringDateOnly', {
467
+ enumerable: true,
468
+ get: function () {
469
+ return isISOStringDateOnly;
470
+ }
471
+ });
472
+ Object.defineProperty(exports, 'processIsDateField', {
473
+ enumerable: true,
474
+ get: function () {
475
+ return processIsDateField;
476
+ }
477
+ });
478
+ //# sourceMappingURL=getDatetimeRuleProcessorSQL-COEhnVIZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDatetimeRuleProcessorSQL-COEhnVIZ.js","names":["defaultIsDateField: IsDateFieldFunction","mongoOperators","defaultDateTimeNLOperatorMap: ExportOperatorMap","datetimeValueProcessorNL: ValueProcessorByRule","defaultOperatorProcessorNL"],"sources":["../../src/utils.ts","../../src/getDatetimeJsonLogicOperations.ts","../../src/getDatetimeRuleProcessorCEL.ts","../../src/getDatetimeRuleProcessorMongoDBQuery.ts","../../src/getDatetimeRuleProcessorNL.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 ?? /* istanbul ignore next */ {};\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 { 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 ?? /* istanbul ignore next */ {};\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 ?? /* istanbul ignore next */ {};\n const operatorLowerCase = lc(rule.operator);\n let finalValue = '';\n\n // istanbul 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, 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 ?? /* istanbul ignore next */ {};\n const operator = mapSQLOperator(rule.operator);\n const operatorLowerCase = lc(operator);\n // istanbul 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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"}
@@ -1,2 +1,2 @@
1
- var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`react-querybuilder`);c=s(c);const l=e=>typeof e==`string`&&/^\d{4}-\d{2}-\d{2}$/.test(e),u=(...[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),d=(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):u(t,n),f=({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)}),p=e=>/^(does)?not/i.test(e),m=e=>(t,n)=>{let r=n??{},{context:i={}}=r;if(t.valueSource===`field`||!d(i.isDateField,t,r))return(0,c.defaultRuleProcessorCEL)(t,r);let a=t=>`timestamp("${e.toISOString(t)}")`,o=(0,c.lc)(t.operator.replace(/^=$/,`==`));switch(o){case`<`:case`<=`:case`==`:case`!=`:case`>`:case`>=`:return`${t.field} ${o} ${a(t.value)}`}let s=(0,c.toArray)(t.value,{retainEmptyStrings:!1}).map(t=>e.toDate(t)).filter(t=>e.isValid(t));switch(o){case`in`:case`notin`:{if(s.length===0)return``;let[e,n]=p(o)?[`!(`,`)`]:[``,``];return`${e}${t.field} in [${s.map(e=>a(e)).join(`, `)}]${n}`}case`between`:case`notbetween`:{if(s.length<2)return``;let[n,r]=s,[i,c]=e.isBefore(n,r)?[n,r]:[r,n];return o===`between`?`(${t.field} >= ${a(i)} && ${t.field} <= ${a(c)})`:`(${t.field} < ${a(i)} || ${t.field} > ${a(c)})`}}return(0,c.defaultRuleProcessorCEL)(t,r)},h=e=>(t,n)=>{let r=n??{},{field:i,operator:a,value:o,valueSource:s}=t;if(s===`field`||!d(r.context?.isDateField,t,r))return(0,c.defaultRuleProcessorMongoDBQuery)(t,r);if(a===`=`)return{[i]:e.toDate(o)};switch(a){case`<`:case`<=`:case`!=`:case`>`:case`>=`:return{[i]:{[c.mongoOperators[a]]:e.toDate(o)}}}let l=(0,c.toArray)(t.value,{retainEmptyStrings:!1}).map(t=>e.toDate(t)).filter(t=>e.isValid(t));switch(a){case`in`:case`notIn`:return{[i]:{[c.mongoOperators[a]]:l}};case`between`:case`notBetween`:{if(l.length<2)return``;let[t,n]=l,r=e.isBefore(t,n)?[t,n]:[n,t];return a===`between`?{[i]:{$gte:r[0],$lte:r[1]}}:{$or:[{[i]:{$lt:r[0]}},{[i]:{$gt:r[1]}}]}}}return(0,c.defaultRuleProcessorMongoDBQuery)(t,r)},g={"<":`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`]},_=(e,t)=>l(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),v=e=>(t,n)=>{let r=n??{},i=(0,c.lc)(t.operator),a=``,{fieldData:o,quoteFieldNamesWith:s=[``,``],fieldIdentifierSeparator:l=``,operatorProcessor:u=c.defaultOperatorProcessorNL,wordOrder:f=`SVO`,context:p={},operatorMap:m=g}=r;if(!d(p.isDateField,t,r))return(0,c.defaultRuleProcessorNL)(t,r);if(t.valueSource===`field`)return(0,c.defaultRuleProcessorNL)(t,{...r,operatorMap:g});if((i===`in`||i===`notin`||i===`between`||i===`notbetween`)&&!t.value)return``;let h=(0,c.toArray)(t.value,{retainEmptyStrings:!1}).map(t=>[t,e.toDate(t)]).filter(t=>e.isValid(t[1]));switch(i){case`in`:case`notin`:if(h.length===0)return``;a=`(${h.map(e=>_({field:t.field,operator:`=`,value:e[1]},{...r,context:{...p,originalValue:e[0]}})).join(`, `)})`;break;case`between`:case`notbetween`:{if(h.length<2)return``;let[n,i]=h;a=(e.isBefore(n[1],i[1])?[n,i]:[i,n]).map(([e,n])=>_({field:t.field,operator:`=`,value:n},{...r,context:{...p,originalValue:e}})).join(` ${r.translations?.and??`and`} `)}break;default:{let[e,n]=h[0]??[``,``];a=e?_({field:t.field,operator:`=`,value:n},{...r,context:{...p,originalValue:e}}):``}}let v=(0,c.getQuotedFieldName)(o?.label??t.field,{quoteFieldNamesWith:s,fieldIdentifierSeparator:l}),y=u(t,{...r,operatorMap:{...g,...m}}),b={S:v,V:y,O:a};return(0,c.normalizeConstituentWordOrder)(f).map(e=>`${b[e]}`).join(` `).trim()},y=({toISOStringDateOnly:e,toISOString:t})=>(n,r)=>l(r?.context?.originalValue)?(0,c.defaultValueProcessorByRule)({...n,value:e(n.value)},r):(0,c.defaultValueProcessorByRule)({...n,value:t(n.value)},r),b=({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(0,c.defaultValueProcessorByRule)({...n,value:a},{...r,wrapValueWith:[`cast(`,` as ${i})`]})},x=({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(0,c.defaultValueProcessorByRule)({...n,value:a},{...r,wrapValueWith:[`cast(`,` as ${i})`]})},S=({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(0,c.defaultValueProcessorByRule)({...n,value:a},{...r,wrapValueWith:[i,``]})},C=({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(0,c.defaultValueProcessorByRule)({...n,value:a},{...r,wrapValueWith:[i,``]})},w={ansi:y,mssql:b,mysql:x,oracle:S,postgresql:C,sqlite:y},T=e=>(t,n)=>{let r=n??{},i=(0,c.mapSQLOperator)(t.operator),a=(0,c.lc)(i),{quoteFieldNamesWith:o=[``,``],fieldIdentifierSeparator:s=``,context:l={}}=r,u=``;if(t.valueSource===`field`||!d(l.isDateField,t,r))return(0,c.defaultRuleProcessorSQL)(t,r);let f=w[r.preset](e),p=(0,c.toArray)(t.value,{retainEmptyStrings:!1}).map(t=>[t,e.toDate(t)]).filter(t=>e.isValid(t[1]));switch(a){case`in`:case`not in`:if(p.length===0)return``;u=`(${p.map(e=>f({field:t.field,operator:`=`,value:e[1]},{...r,context:{originalValue:e[0]}})).join(`, `)})`;break;case`between`:case`not between`:{if(p.length<2)return``;let[n,i]=p;u=(e.isBefore(n[1],i[1])?[n,i]:[i,n]).map(([e,n])=>f({field:t.field,operator:`=`,value:n},{...r,context:{originalValue:e}})).join(` and `)}break;default:{let[e,n]=p[0]??[``,``];u=f({field:t.field,operator:`=`,value:n},{...r,context:{originalValue:e}})}}return`${(0,c.getQuotedFieldName)(t.field,{quoteFieldNamesWith:o,fieldIdentifierSeparator:s})} ${i} ${u}`.trim()};Object.defineProperty(exports,`__toESM`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`datetimeValueProcessorNL`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`defaultDateTimeNLOperatorMap`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`getDatetimeJsonLogicOperations`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`getDatetimeRuleProcessorCEL`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`getDatetimeRuleProcessorMongoDBQuery`,{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,`getDatetimeRuleProcessorNL`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`getDatetimeRuleProcessorSQL`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`getDatetimeValueProcessorANSI`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`getDatetimeValueProcessorMSSQL`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`getDatetimeValueProcessorMySQL`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`getDatetimeValueProcessorOracle`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`getDatetimeValueProcessorPostgreSQL`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`isISOStringDateOnly`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`processIsDateField`,{enumerable:!0,get:function(){return d}});
2
- //# sourceMappingURL=getDatetimeRuleProcessorSQL-D95jgDK6.js.map
1
+ var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require(`react-querybuilder`);c=s(c);const l=e=>typeof e==`string`&&/^\d{4}-\d{2}-\d{2}$/.test(e),u=(...[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),d=(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):u(t,n),f=({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)}),p=e=>/^(does)?not/i.test(e),m=e=>(t,n)=>{let r=n??{},{context:i={}}=r;if(t.valueSource===`field`||!d(i.isDateField,t,r))return(0,c.defaultRuleProcessorCEL)(t,r);let a=t=>`timestamp("${e.toISOString(t)}")`,o=(0,c.lc)(t.operator.replace(/^=$/,`==`));switch(o){case`<`:case`<=`:case`==`:case`!=`:case`>`:case`>=`:return`${t.field} ${o} ${a(t.value)}`}let s=(0,c.toArray)(t.value,{retainEmptyStrings:!1}).map(t=>e.toDate(t)).filter(t=>e.isValid(t));switch(o){case`in`:case`notin`:{if(s.length===0)return``;let[e,n]=p(o)?[`!(`,`)`]:[``,``];return`${e}${t.field} in [${s.map(e=>a(e)).join(`, `)}]${n}`}case`between`:case`notbetween`:{if(s.length<2)return``;let[n,r]=s,[i,c]=e.isBefore(n,r)?[n,r]:[r,n];return o===`between`?`(${t.field} >= ${a(i)} && ${t.field} <= ${a(c)})`:`(${t.field} < ${a(i)} || ${t.field} > ${a(c)})`}}return(0,c.defaultRuleProcessorCEL)(t,r)},h=e=>(t,n)=>{let r=n??{},{field:i,operator:a,value:o,valueSource:s}=t;if(s===`field`||!d(r.context?.isDateField,t,r))return(0,c.defaultRuleProcessorMongoDBQuery)(t,r);if(a===`=`)return{[i]:e.toDate(o)};switch(a){case`<`:case`<=`:case`!=`:case`>`:case`>=`:return{[i]:{[c.mongoOperators[a]]:e.toDate(o)}}}let l=(0,c.toArray)(t.value,{retainEmptyStrings:!1}).map(t=>e.toDate(t)).filter(t=>e.isValid(t));switch(a){case`in`:case`notIn`:return{[i]:{[c.mongoOperators[a]]:l}};case`between`:case`notBetween`:{if(l.length<2)return``;let[t,n]=l,r=e.isBefore(t,n)?[t,n]:[n,t];return a===`between`?{[i]:{$gte:r[0],$lte:r[1]}}:{$or:[{[i]:{$lt:r[0]}},{[i]:{$gt:r[1]}}]}}}return(0,c.defaultRuleProcessorMongoDBQuery)(t,r)},g={"<":`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`]},_=(e,t)=>l(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),v=e=>(t,n)=>{let r=n??{},i=(0,c.lc)(t.operator),a=``,{fieldData:o,quoteFieldNamesWith:s=[``,``],fieldIdentifierSeparator:l=``,operatorProcessor:u=c.defaultOperatorProcessorNL,wordOrder:f=`SVO`,context:p={},operatorMap:m=g}=r;if(!d(p.isDateField,t,r))return(0,c.defaultRuleProcessorNL)(t,r);if(t.valueSource===`field`)return(0,c.defaultRuleProcessorNL)(t,{...r,operatorMap:g});if((i===`in`||i===`notin`||i===`between`||i===`notbetween`)&&!t.value)return``;let h=(0,c.toArray)(t.value,{retainEmptyStrings:!1}).map(t=>[t,e.toDate(t)]).filter(t=>e.isValid(t[1]));switch(i){case`in`:case`notin`:if(h.length===0)return``;a=`(${h.map(e=>_({field:t.field,operator:`=`,value:e[1]},{...r,context:{...p,originalValue:e[0]}})).join(`, `)})`;break;case`between`:case`notbetween`:{if(h.length<2)return``;let[n,i]=h;a=(e.isBefore(n[1],i[1])?[n,i]:[i,n]).map(([e,n])=>_({field:t.field,operator:`=`,value:n},{...r,context:{...p,originalValue:e}})).join(` ${r.translations?.and??`and`} `)}break;default:{let[e,n]=h[0]??[``,``];a=e?_({field:t.field,operator:`=`,value:n},{...r,context:{...p,originalValue:e}}):``}}let v={S:(0,c.getQuotedFieldName)(o?.label??t.field,{quoteFieldNamesWith:s,fieldIdentifierSeparator:l}),V:u(t,{...r,operatorMap:{...g,...m}}),O:a};return(0,c.normalizeConstituentWordOrder)(f).map(e=>`${v[e]}`).join(` `).trim()},y=({toISOStringDateOnly:e,toISOString:t})=>(n,r)=>l(r?.context?.originalValue)?(0,c.defaultValueProcessorByRule)({...n,value:e(n.value)},r):(0,c.defaultValueProcessorByRule)({...n,value:t(n.value)},r),b=({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(0,c.defaultValueProcessorByRule)({...n,value:a},{...r,wrapValueWith:[`cast(`,` as ${i})`]})},x=({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(0,c.defaultValueProcessorByRule)({...n,value:a},{...r,wrapValueWith:[`cast(`,` as ${i})`]})},S=({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(0,c.defaultValueProcessorByRule)({...n,value:a},{...r,wrapValueWith:[i,``]})},C=({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(0,c.defaultValueProcessorByRule)({...n,value:a},{...r,wrapValueWith:[i,``]})},w={ansi:y,mssql:b,mysql:x,oracle:S,postgresql:C,sqlite:y},T=e=>(t,n)=>{let r=n??{},i=(0,c.mapSQLOperator)(t.operator),a=(0,c.lc)(i),{quoteFieldNamesWith:o=[``,``],fieldIdentifierSeparator:s=``,context:l={}}=r,u=``;if(t.valueSource===`field`||!d(l.isDateField,t,r))return(0,c.defaultRuleProcessorSQL)(t,r);let f=w[r.preset](e),p=(0,c.toArray)(t.value,{retainEmptyStrings:!1}).map(t=>[t,e.toDate(t)]).filter(t=>e.isValid(t[1]));switch(a){case`in`:case`not in`:if(p.length===0)return``;u=`(${p.map(e=>f({field:t.field,operator:`=`,value:e[1]},{...r,context:{originalValue:e[0]}})).join(`, `)})`;break;case`between`:case`not between`:{if(p.length<2)return``;let[n,i]=p;u=(e.isBefore(n[1],i[1])?[n,i]:[i,n]).map(([e,n])=>f({field:t.field,operator:`=`,value:n},{...r,context:{originalValue:e}})).join(` and `)}break;default:{let[e,n]=p[0]??[``,``];u=f({field:t.field,operator:`=`,value:n},{...r,context:{originalValue:e}})}}return`${(0,c.getQuotedFieldName)(t.field,{quoteFieldNamesWith:o,fieldIdentifierSeparator:s})} ${i} ${u}`.trim()};Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return S}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`h`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return x}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return v}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return y}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return C}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return b}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return _}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return T}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return h}});
2
+ //# sourceMappingURL=getDatetimeRuleProcessorSQL-CSxxM8ce.js.map