@react-querybuilder/datetime 8.8.3 → 8.9.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.
Files changed (134) hide show
  1. package/dist/cjs/date-fns.d.ts +1 -0
  2. package/dist/cjs/dayjs.d.ts +1 -0
  3. package/dist/cjs/getDatetimeRuleProcessorSQL-D95jgDK6.js +2 -0
  4. package/dist/cjs/getDatetimeRuleProcessorSQL-D95jgDK6.js.map +1 -0
  5. package/dist/cjs/index.d.ts +1 -0
  6. package/dist/cjs/jsdate.d.ts +1 -0
  7. package/dist/cjs/luxon.d.ts +1 -0
  8. package/dist/cjs/react-querybuilder_datetime.cjs.development.d.ts +108 -0
  9. package/dist/cjs/react-querybuilder_datetime.cjs.development.date-fns.d.ts +53 -0
  10. package/dist/cjs/react-querybuilder_datetime.cjs.development.date-fns.js +82 -775
  11. package/dist/cjs/react-querybuilder_datetime.cjs.development.date-fns.js.map +1 -1
  12. package/dist/cjs/react-querybuilder_datetime.cjs.development.dayjs.d.ts +53 -0
  13. package/dist/cjs/react-querybuilder_datetime.cjs.development.dayjs.js +76 -785
  14. package/dist/cjs/react-querybuilder_datetime.cjs.development.dayjs.js.map +1 -1
  15. package/dist/cjs/react-querybuilder_datetime.cjs.development.js +125 -934
  16. package/dist/cjs/react-querybuilder_datetime.cjs.development.js.map +1 -1
  17. package/dist/cjs/react-querybuilder_datetime.cjs.development.jsdate.d.ts +56 -0
  18. package/dist/cjs/react-querybuilder_datetime.cjs.development.jsdate.js +113 -834
  19. package/dist/cjs/react-querybuilder_datetime.cjs.development.jsdate.js.map +1 -1
  20. package/dist/cjs/react-querybuilder_datetime.cjs.development.luxon.d.ts +53 -0
  21. package/dist/cjs/react-querybuilder_datetime.cjs.development.luxon.js +78 -779
  22. package/dist/cjs/react-querybuilder_datetime.cjs.development.luxon.js.map +1 -1
  23. package/dist/cjs/react-querybuilder_datetime.cjs.production.d.ts +108 -0
  24. package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.d.ts +53 -0
  25. package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.js +1 -6
  26. package/dist/cjs/react-querybuilder_datetime.cjs.production.date-fns.js.map +1 -1
  27. package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.d.ts +53 -0
  28. package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.js +1 -6
  29. package/dist/cjs/react-querybuilder_datetime.cjs.production.dayjs.js.map +1 -1
  30. package/dist/cjs/react-querybuilder_datetime.cjs.production.js +1 -7
  31. package/dist/cjs/react-querybuilder_datetime.cjs.production.js.map +1 -1
  32. package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.d.ts +56 -0
  33. package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.js +1 -7
  34. package/dist/cjs/react-querybuilder_datetime.cjs.production.jsdate.js.map +1 -1
  35. package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.d.ts +53 -0
  36. package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.js +1 -6
  37. package/dist/cjs/react-querybuilder_datetime.cjs.production.luxon.js.map +1 -1
  38. package/dist/cjs/types-QCQUGVZa.d.ts +1694 -0
  39. package/dist/getDatetimeRuleProcessorSQL-CN80oEFK.js +386 -0
  40. package/dist/getDatetimeRuleProcessorSQL-CN80oEFK.js.map +1 -0
  41. package/dist/getDatetimeRuleProcessorSQL-KYRPP9qd.mjs +367 -0
  42. package/dist/getDatetimeRuleProcessorSQL-KYRPP9qd.mjs.map +1 -0
  43. package/dist/react-querybuilder_datetime.d.mts +108 -0
  44. package/dist/react-querybuilder_datetime.date-fns.d.mts +53 -0
  45. package/dist/react-querybuilder_datetime.date-fns.mjs +72 -57
  46. package/dist/react-querybuilder_datetime.date-fns.mjs.map +1 -1
  47. package/dist/react-querybuilder_datetime.dayjs.d.mts +53 -0
  48. package/dist/react-querybuilder_datetime.dayjs.mjs +66 -57
  49. package/dist/react-querybuilder_datetime.dayjs.mjs.map +1 -1
  50. package/dist/react-querybuilder_datetime.jsdate.d.mts +56 -0
  51. package/dist/react-querybuilder_datetime.jsdate.mjs +102 -114
  52. package/dist/react-querybuilder_datetime.jsdate.mjs.map +1 -1
  53. package/dist/react-querybuilder_datetime.legacy-esm.d.ts +108 -0
  54. package/dist/react-querybuilder_datetime.legacy-esm.date-fns.d.ts +53 -0
  55. package/dist/react-querybuilder_datetime.legacy-esm.date-fns.js +72 -57
  56. package/dist/react-querybuilder_datetime.legacy-esm.date-fns.js.map +1 -1
  57. package/dist/react-querybuilder_datetime.legacy-esm.dayjs.d.ts +53 -0
  58. package/dist/react-querybuilder_datetime.legacy-esm.dayjs.js +66 -57
  59. package/dist/react-querybuilder_datetime.legacy-esm.dayjs.js.map +1 -1
  60. package/dist/react-querybuilder_datetime.legacy-esm.js +113 -215
  61. package/dist/react-querybuilder_datetime.legacy-esm.js.map +1 -1
  62. package/dist/react-querybuilder_datetime.legacy-esm.jsdate.d.ts +56 -0
  63. package/dist/react-querybuilder_datetime.legacy-esm.jsdate.js +102 -114
  64. package/dist/react-querybuilder_datetime.legacy-esm.jsdate.js.map +1 -1
  65. package/dist/react-querybuilder_datetime.legacy-esm.luxon.d.ts +53 -0
  66. package/dist/react-querybuilder_datetime.legacy-esm.luxon.js +68 -61
  67. package/dist/react-querybuilder_datetime.legacy-esm.luxon.js.map +1 -1
  68. package/dist/react-querybuilder_datetime.luxon.d.mts +53 -0
  69. package/dist/react-querybuilder_datetime.luxon.mjs +68 -61
  70. package/dist/react-querybuilder_datetime.luxon.mjs.map +1 -1
  71. package/dist/react-querybuilder_datetime.mjs +112 -215
  72. package/dist/react-querybuilder_datetime.mjs.map +1 -1
  73. package/dist/react-querybuilder_datetime.production.d.mts +108 -0
  74. package/dist/react-querybuilder_datetime.production.date-fns.d.mts +53 -0
  75. package/dist/react-querybuilder_datetime.production.date-fns.mjs +1 -1
  76. package/dist/react-querybuilder_datetime.production.date-fns.mjs.map +1 -1
  77. package/dist/react-querybuilder_datetime.production.dayjs.d.mts +53 -0
  78. package/dist/react-querybuilder_datetime.production.dayjs.mjs +1 -1
  79. package/dist/react-querybuilder_datetime.production.dayjs.mjs.map +1 -1
  80. package/dist/react-querybuilder_datetime.production.jsdate.d.mts +56 -0
  81. package/dist/react-querybuilder_datetime.production.jsdate.mjs +1 -2
  82. package/dist/react-querybuilder_datetime.production.jsdate.mjs.map +1 -1
  83. package/dist/react-querybuilder_datetime.production.luxon.d.mts +53 -0
  84. package/dist/react-querybuilder_datetime.production.luxon.mjs +1 -1
  85. package/dist/react-querybuilder_datetime.production.luxon.mjs.map +1 -1
  86. package/dist/react-querybuilder_datetime.production.mjs +1 -2
  87. package/dist/react-querybuilder_datetime.production.mjs.map +1 -1
  88. package/dist/types-CDEkL2M_.d.mts +1694 -0
  89. package/dist/types-EgfSemtR.d.ts +1694 -0
  90. package/package.json +24 -24
  91. package/dist/chunk-SLTJVKUE.mjs +0 -7
  92. package/dist/chunk-SLTJVKUE.mjs.map +0 -1
  93. package/dist/chunk-ZLH5EH6W.mjs +0 -713
  94. package/dist/chunk-ZLH5EH6W.mjs.map +0 -1
  95. package/dist/chunk-ZS6AX35I.js +0 -738
  96. package/dist/chunk-ZS6AX35I.js.map +0 -1
  97. package/dist/types/QueryBuilderDateTime.d.ts +0 -4
  98. package/dist/types/datetimeRuleProcessorJsonLogic.d.ts +0 -10
  99. package/dist/types/getDatetimeJsonLogicOperations.d.ts +0 -6
  100. package/dist/types/getDatetimeRuleProcessorCEL.d.ts +0 -7
  101. package/dist/types/getDatetimeRuleProcessorJSONata.d.ts +0 -7
  102. package/dist/types/getDatetimeRuleProcessorMongoDBQuery.d.ts +0 -7
  103. package/dist/types/getDatetimeRuleProcessorNL.d.ts +0 -13
  104. package/dist/types/getDatetimeRuleProcessorSQL.d.ts +0 -32
  105. package/dist/types/index.d.ts +0 -8
  106. package/dist/types/index.date-fns.d.ts +0 -48
  107. package/dist/types/index.dayjs.d.ts +0 -48
  108. package/dist/types/index.jsdate.d.ts +0 -48
  109. package/dist/types/index.luxon.d.ts +0 -48
  110. package/dist/types/rqbDateTimeLibraryAPI.date-fns.d.ts +0 -5
  111. package/dist/types/rqbDateTimeLibraryAPI.dayjs.d.ts +0 -5
  112. package/dist/types/rqbDateTimeLibraryAPI.jsdate.d.ts +0 -8
  113. package/dist/types/rqbDateTimeLibraryAPI.luxon.d.ts +0 -5
  114. package/dist/types/types.d.ts +0 -111
  115. package/dist/types/utils.d.ts +0 -5
  116. package/dist/types-esm/QueryBuilderDateTime.d.mts +0 -4
  117. package/dist/types-esm/datetimeRuleProcessorJsonLogic.d.mts +0 -10
  118. package/dist/types-esm/getDatetimeJsonLogicOperations.d.mts +0 -6
  119. package/dist/types-esm/getDatetimeRuleProcessorCEL.d.mts +0 -7
  120. package/dist/types-esm/getDatetimeRuleProcessorJSONata.d.mts +0 -7
  121. package/dist/types-esm/getDatetimeRuleProcessorMongoDBQuery.d.mts +0 -7
  122. package/dist/types-esm/getDatetimeRuleProcessorNL.d.mts +0 -13
  123. package/dist/types-esm/getDatetimeRuleProcessorSQL.d.mts +0 -32
  124. package/dist/types-esm/index.d.mts +0 -8
  125. package/dist/types-esm/index.date-fns.d.mts +0 -48
  126. package/dist/types-esm/index.dayjs.d.mts +0 -48
  127. package/dist/types-esm/index.jsdate.d.mts +0 -48
  128. package/dist/types-esm/index.luxon.d.mts +0 -48
  129. package/dist/types-esm/rqbDateTimeLibraryAPI.date-fns.d.mts +0 -5
  130. package/dist/types-esm/rqbDateTimeLibraryAPI.dayjs.d.mts +0 -5
  131. package/dist/types-esm/rqbDateTimeLibraryAPI.jsdate.d.mts +0 -8
  132. package/dist/types-esm/rqbDateTimeLibraryAPI.luxon.d.mts +0 -5
  133. package/dist/types-esm/types.d.mts +0 -111
  134. package/dist/types-esm/utils.d.mts +0 -5
@@ -0,0 +1,386 @@
1
+ import { defaultOperatorProcessorNL, defaultRuleProcessorCEL, defaultRuleProcessorMongoDBQuery, defaultRuleProcessorNL, defaultRuleProcessorSQL, defaultValueProcessorByRule, getQuotedFieldName, lc, mapSQLOperator, mongoOperators, normalizeConstituentWordOrder, toArray } from "react-querybuilder";
2
+
3
+ //#region src/utils.ts
4
+ const isISOStringDateOnly = (date) => typeof date === "string" && /^\d{4}-\d{2}-\d{2}$/.test(date);
5
+ const defaultIsDateField = (...[rule, opts]) => {
6
+ var _opts$fieldData;
7
+ return 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 === null || opts === void 0 || (_opts$fieldData = opts.fieldData) === null || _opts$fieldData === void 0 ? void 0 : _opts$fieldData.datatype);
8
+ };
9
+ const processIsDateField = (isDateField, ...[rule, opts]) => {
10
+ if (typeof isDateField === "boolean") return isDateField;
11
+ if (typeof isDateField === "function") return isDateField(rule, opts);
12
+ if (Array.isArray(isDateField)) return isDateField.some((condition) => Object.entries(condition).every(([key, value]) => {
13
+ var _opts$fieldData2;
14
+ return (opts === null || opts === void 0 || (_opts$fieldData2 = opts.fieldData) === null || _opts$fieldData2 === void 0 ? void 0 : _opts$fieldData2[key]) === value;
15
+ }));
16
+ if (typeof isDateField === "object") return Object.entries(isDateField).every(([key, value]) => {
17
+ var _opts$fieldData3;
18
+ return (opts === null || opts === void 0 || (_opts$fieldData3 = opts.fieldData) === null || _opts$fieldData3 === void 0 ? void 0 : _opts$fieldData3[key]) === value;
19
+ });
20
+ return defaultIsDateField(rule, opts);
21
+ };
22
+
23
+ //#endregion
24
+ //#region src/getDatetimeJsonLogicOperations.ts
25
+ /**
26
+ * Custom operations for use with JsonLogic objects generated by
27
+ * {@link datetimeRuleProcessorJsonLogic}.
28
+ */
29
+ const getDatetimeJsonLogicOperations = ({ isAfter, isBefore, isSame }) => ({
30
+ dateAfter: (a, b) => isAfter(a, b),
31
+ dateBefore: (a, b) => isBefore(a, b),
32
+ dateBetween: (a, b, c) => isSame(b, a) || isSame(b, c) || isAfter(b, a) && isBefore(b, c) || isAfter(b, c) && isBefore(b, a),
33
+ 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))),
34
+ dateIn: (a, b) => b.some((v) => isSame(a, v)),
35
+ dateNotIn: (a, b) => b.every((v) => !isSame(a, v)),
36
+ dateNotOn: (a, b) => !isSame(a, b),
37
+ dateOn: (a, b) => isSame(a, b),
38
+ dateOnOrAfter: (a, b) => isAfter(a, b) || isSame(a, b),
39
+ dateOnOrBefore: (a, b) => isBefore(a, b) || isSame(a, b)
40
+ });
41
+
42
+ //#endregion
43
+ //#region src/getDatetimeRuleProcessorCEL.ts
44
+ const shouldNegate = (op) => /^(does)?not/i.test(op);
45
+ /**
46
+ * Generates a rule processor with date/time features for use by
47
+ * {@link @react-querybuilder/core!formatQuery formatQuery} with the "cel" format.
48
+ */
49
+ const getDatetimeRuleProcessorCEL = (apiFns) => (rule, options) => {
50
+ const opts = options !== null && options !== void 0 ? options : ( /* istanbul ignore next */ {});
51
+ const { context = {} } = opts;
52
+ if (rule.valueSource === "field" || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorCEL(rule, opts);
53
+ const ts = (d) => `timestamp("${apiFns.toISOString(d)}")`;
54
+ const operatorTL = lc(rule.operator.replace(/^=$/, "=="));
55
+ switch (operatorTL) {
56
+ case "<":
57
+ case "<=":
58
+ case "==":
59
+ case "!=":
60
+ case ">":
61
+ case ">=": return `${rule.field} ${operatorTL} ${ts(rule.value)}`;
62
+ }
63
+ const valueAsDateArray = toArray(rule.value, { retainEmptyStrings: false }).map((v) => apiFns.toDate(v)).filter((dateVal) => apiFns.isValid(dateVal));
64
+ switch (operatorTL) {
65
+ case "in":
66
+ case "notin": {
67
+ if (valueAsDateArray.length === 0) return "";
68
+ const [prefix, suffix] = shouldNegate(operatorTL) ? ["!(", ")"] : ["", ""];
69
+ return `${prefix}${rule.field} in [${valueAsDateArray.map((val) => ts(val)).join(", ")}]${suffix}`;
70
+ }
71
+ case "between":
72
+ case "notbetween": {
73
+ if (valueAsDateArray.length < 2) return "";
74
+ const [first, second] = valueAsDateArray;
75
+ const [firstDate, secondDate] = apiFns.isBefore(first, second) ? [first, second] : [second, first];
76
+ return operatorTL === "between" ? `(${rule.field} >= ${ts(firstDate)} && ${rule.field} <= ${ts(secondDate)})` : `(${rule.field} < ${ts(firstDate)} || ${rule.field} > ${ts(secondDate)})`;
77
+ }
78
+ }
79
+ return defaultRuleProcessorCEL(rule, opts);
80
+ };
81
+
82
+ //#endregion
83
+ //#region src/getDatetimeRuleProcessorMongoDBQuery.ts
84
+ /**
85
+ * Generates a rule processor with date/time features for use by
86
+ * {@link @react-querybuilder/core!formatQuery formatQuery} with the "mongodb_query" format.
87
+ */
88
+ const getDatetimeRuleProcessorMongoDBQuery = (apiFns) => (rule, options) => {
89
+ var _opts$context;
90
+ const opts = options !== null && options !== void 0 ? options : ( /* istanbul ignore next */ {});
91
+ const { field, operator, value, valueSource } = rule;
92
+ if (valueSource === "field" || !processIsDateField((_opts$context = opts.context) === null || _opts$context === void 0 ? void 0 : _opts$context.isDateField, rule, opts)) return defaultRuleProcessorMongoDBQuery(rule, opts);
93
+ if (operator === "=") return { [field]: apiFns.toDate(value) };
94
+ switch (operator) {
95
+ case "<":
96
+ case "<=":
97
+ case "!=":
98
+ case ">":
99
+ case ">=": return { [field]: { [mongoOperators[operator]]: apiFns.toDate(value) } };
100
+ }
101
+ const valueAsDateArray = toArray(rule.value, { retainEmptyStrings: false }).map((v) => apiFns.toDate(v)).filter((dateVal) => apiFns.isValid(dateVal));
102
+ switch (operator) {
103
+ case "in":
104
+ case "notIn": return { [field]: { [mongoOperators[operator]]: valueAsDateArray } };
105
+ case "between":
106
+ case "notBetween": {
107
+ if (valueAsDateArray.length < 2) return "";
108
+ const [first, second] = valueAsDateArray;
109
+ const orderedArray = apiFns.isBefore(first, second) ? [first, second] : [second, first];
110
+ return operator === "between" ? { [field]: {
111
+ $gte: orderedArray[0],
112
+ $lte: orderedArray[1]
113
+ } } : { $or: [{ [field]: { $lt: orderedArray[0] } }, { [field]: { $gt: orderedArray[1] } }] };
114
+ }
115
+ }
116
+ return defaultRuleProcessorMongoDBQuery(rule, opts);
117
+ };
118
+
119
+ //#endregion
120
+ //#region \0@oxc-project+runtime@0.89.0/helpers/typeof.js
121
+ function _typeof(o) {
122
+ "@babel/helpers - typeof";
123
+ return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o$1) {
124
+ return typeof o$1;
125
+ } : function(o$1) {
126
+ return o$1 && "function" == typeof Symbol && o$1.constructor === Symbol && o$1 !== Symbol.prototype ? "symbol" : typeof o$1;
127
+ }, _typeof(o);
128
+ }
129
+
130
+ //#endregion
131
+ //#region \0@oxc-project+runtime@0.89.0/helpers/toPrimitive.js
132
+ function toPrimitive(t, r) {
133
+ if ("object" != _typeof(t) || !t) return t;
134
+ var e = t[Symbol.toPrimitive];
135
+ if (void 0 !== e) {
136
+ var i = e.call(t, r || "default");
137
+ if ("object" != _typeof(i)) return i;
138
+ throw new TypeError("@@toPrimitive must return a primitive value.");
139
+ }
140
+ return ("string" === r ? String : Number)(t);
141
+ }
142
+
143
+ //#endregion
144
+ //#region \0@oxc-project+runtime@0.89.0/helpers/toPropertyKey.js
145
+ function toPropertyKey(t) {
146
+ var i = toPrimitive(t, "string");
147
+ return "symbol" == _typeof(i) ? i : i + "";
148
+ }
149
+
150
+ //#endregion
151
+ //#region \0@oxc-project+runtime@0.89.0/helpers/defineProperty.js
152
+ function _defineProperty(e, r, t) {
153
+ return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
154
+ value: t,
155
+ enumerable: !0,
156
+ configurable: !0,
157
+ writable: !0
158
+ }) : e[r] = t, e;
159
+ }
160
+
161
+ //#endregion
162
+ //#region \0@oxc-project+runtime@0.89.0/helpers/objectSpread2.js
163
+ function ownKeys(e, r) {
164
+ var t = Object.keys(e);
165
+ if (Object.getOwnPropertySymbols) {
166
+ var o = Object.getOwnPropertySymbols(e);
167
+ r && (o = o.filter(function(r$1) {
168
+ return Object.getOwnPropertyDescriptor(e, r$1).enumerable;
169
+ })), t.push.apply(t, o);
170
+ }
171
+ return t;
172
+ }
173
+ function _objectSpread2(e) {
174
+ for (var r = 1; r < arguments.length; r++) {
175
+ var t = null != arguments[r] ? arguments[r] : {};
176
+ r % 2 ? ownKeys(Object(t), !0).forEach(function(r$1) {
177
+ _defineProperty(e, r$1, t[r$1]);
178
+ }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function(r$1) {
179
+ Object.defineProperty(e, r$1, Object.getOwnPropertyDescriptor(t, r$1));
180
+ });
181
+ }
182
+ return e;
183
+ }
184
+
185
+ //#endregion
186
+ //#region src/getDatetimeRuleProcessorNL.ts
187
+ const defaultDateTimeNLOperatorMap = {
188
+ "<": "is before",
189
+ ">": "is after",
190
+ "<=": "is on or before",
191
+ ">=": "is on or after",
192
+ in: ["is one of the dates", "is the same as a date in"],
193
+ notin: ["is not one of the dates", "is not the same as any date in"],
194
+ between: ["is between", "is between the dates in"],
195
+ notbetween: ["is not between", "is not between the dates in"]
196
+ };
197
+ /**
198
+ * Generates a value processor with date/time features for use by
199
+ * {@link @react-querybuilder/core!formatQuery formatQuery} with the "natural_language" format.
200
+ */
201
+ const datetimeValueProcessorNL = (rule, opts) => {
202
+ var _opts$context, _opts$context4, _opts$context5;
203
+ if (isISOStringDateOnly(opts === null || opts === void 0 || (_opts$context = opts.context) === null || _opts$context === void 0 ? void 0 : _opts$context.originalValue)) {
204
+ var _opts$context2, _opts$context3;
205
+ return new Intl.DateTimeFormat(opts === null || opts === void 0 || (_opts$context2 = opts.context) === null || _opts$context2 === void 0 ? void 0 : _opts$context2.locales, _objectSpread2({ dateStyle: "full" }, opts === null || opts === void 0 || (_opts$context3 = opts.context) === null || _opts$context3 === void 0 ? void 0 : _opts$context3.dateFormat)).format(rule.value);
206
+ }
207
+ return new Intl.DateTimeFormat(opts === null || opts === void 0 || (_opts$context4 = opts.context) === null || _opts$context4 === void 0 ? void 0 : _opts$context4.locales, _objectSpread2({
208
+ dateStyle: "full",
209
+ timeStyle: "long"
210
+ }, opts === null || opts === void 0 || (_opts$context5 = opts.context) === null || _opts$context5 === void 0 ? void 0 : _opts$context5.dateTimeFormat)).format(rule.value);
211
+ };
212
+ /**
213
+ * Generates a rule processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with
214
+ * the "natural_language" format.
215
+ */
216
+ const getDatetimeRuleProcessorNL = (apiFns) => (rule, options) => {
217
+ var _fieldData$label;
218
+ const opts = options !== null && options !== void 0 ? options : ( /* istanbul ignore next */ {});
219
+ const operatorLowerCase = lc(rule.operator);
220
+ let finalValue = "";
221
+ // istanbul ignore next
222
+ const { fieldData, quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator = "", operatorProcessor = defaultOperatorProcessorNL, wordOrder = "SVO", context = {}, operatorMap = defaultDateTimeNLOperatorMap } = opts;
223
+ if (!processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorNL(rule, opts);
224
+ if (rule.valueSource === "field") return defaultRuleProcessorNL(rule, _objectSpread2(_objectSpread2({}, opts), {}, { operatorMap: defaultDateTimeNLOperatorMap }));
225
+ if ((operatorLowerCase === "in" || operatorLowerCase === "notin" || operatorLowerCase === "between" || operatorLowerCase === "notbetween") && !rule.value) return "";
226
+ const valueAsDateArray = toArray(rule.value, { retainEmptyStrings: false }).map((v) => [v, apiFns.toDate(v)]).filter((v) => apiFns.isValid(v[1]));
227
+ switch (operatorLowerCase) {
228
+ case "in":
229
+ case "notin":
230
+ if (valueAsDateArray.length === 0) return "";
231
+ finalValue = `(${valueAsDateArray.map((value) => datetimeValueProcessorNL({
232
+ field: rule.field,
233
+ operator: "=",
234
+ value: value[1]
235
+ }, _objectSpread2(_objectSpread2({}, opts), {}, { context: _objectSpread2(_objectSpread2({}, context), {}, { originalValue: value[0] }) }))).join(", ")})`;
236
+ break;
237
+ case "between":
238
+ case "notbetween":
239
+ {
240
+ var _opts$translations$an, _opts$translations;
241
+ if (valueAsDateArray.length < 2) return "";
242
+ const [first, second] = valueAsDateArray;
243
+ finalValue = (apiFns.isBefore(first[1], second[1]) ? [first, second] : [second, first]).map(([originalValue, value]) => datetimeValueProcessorNL({
244
+ field: rule.field,
245
+ operator: "=",
246
+ value
247
+ }, _objectSpread2(_objectSpread2({}, opts), {}, { context: _objectSpread2(_objectSpread2({}, context), {}, { originalValue }) }))).join(` ${(_opts$translations$an = (_opts$translations = opts.translations) === null || _opts$translations === void 0 ? void 0 : _opts$translations.and) !== null && _opts$translations$an !== void 0 ? _opts$translations$an : "and"} `);
248
+ }
249
+ break;
250
+ default: {
251
+ var _valueAsDateArray$;
252
+ const [originalValue, value] = (_valueAsDateArray$ = valueAsDateArray[0]) !== null && _valueAsDateArray$ !== void 0 ? _valueAsDateArray$ : ["", ""];
253
+ finalValue = originalValue ? datetimeValueProcessorNL({
254
+ field: rule.field,
255
+ operator: "=",
256
+ value
257
+ }, _objectSpread2(_objectSpread2({}, opts), {}, { context: _objectSpread2(_objectSpread2({}, context), {}, { originalValue }) })) : "";
258
+ }
259
+ }
260
+ const processedField = getQuotedFieldName((_fieldData$label = fieldData === null || fieldData === void 0 ? void 0 : fieldData.label) !== null && _fieldData$label !== void 0 ? _fieldData$label : rule.field, {
261
+ quoteFieldNamesWith,
262
+ fieldIdentifierSeparator
263
+ });
264
+ const processedOperator = operatorProcessor(rule, _objectSpread2(_objectSpread2({}, opts), {}, { operatorMap: _objectSpread2(_objectSpread2({}, defaultDateTimeNLOperatorMap), operatorMap) }));
265
+ const wordOrderMap = {
266
+ S: processedField,
267
+ V: processedOperator,
268
+ O: finalValue
269
+ };
270
+ return normalizeConstituentWordOrder(wordOrder).map((term) => `${wordOrderMap[term]}`).join(" ").trim();
271
+ };
272
+
273
+ //#endregion
274
+ //#region src/getDatetimeRuleProcessorSQL.ts
275
+ /**
276
+ * Generates a value processor with date/time features for use by
277
+ * {@link @react-querybuilder/core!formatQuery formatQuery} with the "sql" format and "ansi" preset.
278
+ */
279
+ const getDatetimeValueProcessorANSI = ({ toISOStringDateOnly, toISOString }) => (rule, opts) => {
280
+ var _opts$context;
281
+ if (isISOStringDateOnly(opts === null || opts === void 0 || (_opts$context = opts.context) === null || _opts$context === void 0 ? void 0 : _opts$context.originalValue)) return defaultValueProcessorByRule(_objectSpread2(_objectSpread2({}, rule), {}, { value: toISOStringDateOnly(rule.value) }), opts);
282
+ return defaultValueProcessorByRule(_objectSpread2(_objectSpread2({}, rule), {}, { value: toISOString(rule.value) }), opts);
283
+ };
284
+ /**
285
+ * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with
286
+ * the "sql" format and "mssql" preset.
287
+ */
288
+ const getDatetimeValueProcessorMSSQL = ({ toISOStringDateOnly, toISOString }) => (rule, opts) => {
289
+ var _opts$fieldData;
290
+ const datatype = /^(?:small)?datetime/i.test(opts === null || opts === void 0 || (_opts$fieldData = opts.fieldData) === null || _opts$fieldData === void 0 ? void 0 : _opts$fieldData.datatype) ? "datetimeoffset" : "date";
291
+ const value = datatype === "datetimeoffset" ? toISOString(rule.value) : toISOStringDateOnly(rule.value);
292
+ return defaultValueProcessorByRule(_objectSpread2(_objectSpread2({}, rule), {}, { value }), _objectSpread2(_objectSpread2({}, opts), {}, { wrapValueWith: [`cast(`, ` as ${datatype})`] }));
293
+ };
294
+ /**
295
+ * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with
296
+ * the "sql" format and "mysql" preset.
297
+ */
298
+ const getDatetimeValueProcessorMySQL = ({ toISOStringDateOnly, toISOString }) => (rule, opts) => {
299
+ var _opts$fieldData2;
300
+ const datatype = /^(?:datetime|timestamp)/i.test(opts === null || opts === void 0 || (_opts$fieldData2 = opts.fieldData) === null || _opts$fieldData2 === void 0 ? void 0 : _opts$fieldData2.datatype) ? "datetime" : "date";
301
+ const value = datatype === "datetime" ? toISOString(rule.value) : toISOStringDateOnly(rule.value);
302
+ return defaultValueProcessorByRule(_objectSpread2(_objectSpread2({}, rule), {}, { value }), _objectSpread2(_objectSpread2({}, opts), {}, { wrapValueWith: [`cast(`, ` as ${datatype})`] }));
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 "oracle" preset.
307
+ */
308
+ const getDatetimeValueProcessorOracle = ({ toISOStringDateOnly, toISOString }) => (rule, opts) => {
309
+ var _opts$fieldData3;
310
+ const datatype = /^timestamp/i.test(opts === null || opts === void 0 || (_opts$fieldData3 = opts.fieldData) === null || _opts$fieldData3 === void 0 ? void 0 : _opts$fieldData3.datatype) ? "timestamp" : "date";
311
+ const value = datatype === "timestamp" ? toISOString(rule.value).replaceAll("T", " ").replace("Z", " UTC") : toISOStringDateOnly(rule.value);
312
+ return defaultValueProcessorByRule(_objectSpread2(_objectSpread2({}, rule), {}, { value }), _objectSpread2(_objectSpread2({}, opts), {}, { wrapValueWith: [datatype, ``] }));
313
+ };
314
+ /**
315
+ * Generates a value processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with
316
+ * the "sql" format and "postgresql" preset.
317
+ */
318
+ const getDatetimeValueProcessorPostgreSQL = ({ toISOStringDateOnly, toISOString }) => (rule, opts) => {
319
+ var _opts$fieldData4;
320
+ const datatype = /^timestamp/i.test(opts === null || opts === void 0 || (_opts$fieldData4 = opts.fieldData) === null || _opts$fieldData4 === void 0 ? void 0 : _opts$fieldData4.datatype) ? "timestamp" : "date";
321
+ const value = datatype === "timestamp" ? toISOString(rule.value) : toISOStringDateOnly(rule.value);
322
+ return defaultValueProcessorByRule(_objectSpread2(_objectSpread2({}, rule), {}, { value }), _objectSpread2(_objectSpread2({}, opts), {}, { wrapValueWith: [datatype, ``] }));
323
+ };
324
+ const presetToValueProcessorMap = {
325
+ ansi: getDatetimeValueProcessorANSI,
326
+ mssql: getDatetimeValueProcessorMSSQL,
327
+ mysql: getDatetimeValueProcessorMySQL,
328
+ oracle: getDatetimeValueProcessorOracle,
329
+ postgresql: getDatetimeValueProcessorPostgreSQL,
330
+ sqlite: getDatetimeValueProcessorANSI
331
+ };
332
+ /**
333
+ * Generates a rule processor with date/time features for use by {@link @react-querybuilder/core!formatQuery formatQuery} with
334
+ * the "sql" format.
335
+ */
336
+ const getDatetimeRuleProcessorSQL = (apiFns) => (rule, options) => {
337
+ const opts = options !== null && options !== void 0 ? options : ( /* istanbul ignore next */ {});
338
+ const operator = mapSQLOperator(rule.operator);
339
+ const operatorLowerCase = lc(operator);
340
+ // istanbul ignore next
341
+ const { quoteFieldNamesWith = ["", ""], fieldIdentifierSeparator = "", context = {} } = opts;
342
+ let finalValue = "";
343
+ if (rule.valueSource === "field" || !processIsDateField(context.isDateField, rule, opts)) return defaultRuleProcessorSQL(rule, opts);
344
+ const valueProcessor = presetToValueProcessorMap[opts.preset](apiFns);
345
+ const valueAsDateArray = toArray(rule.value, { retainEmptyStrings: false }).map((v) => [v, apiFns.toDate(v)]).filter((v) => apiFns.isValid(v[1]));
346
+ switch (operatorLowerCase) {
347
+ case "in":
348
+ case "not in":
349
+ if (valueAsDateArray.length === 0) return "";
350
+ finalValue = `(${valueAsDateArray.map((value) => valueProcessor({
351
+ field: rule.field,
352
+ operator: "=",
353
+ value: value[1]
354
+ }, _objectSpread2(_objectSpread2({}, opts), {}, { context: { originalValue: value[0] } }))).join(", ")})`;
355
+ break;
356
+ case "between":
357
+ case "not between":
358
+ {
359
+ if (valueAsDateArray.length < 2) return "";
360
+ const [first, second] = valueAsDateArray;
361
+ finalValue = (apiFns.isBefore(first[1], second[1]) ? [first, second] : [second, first]).map(([originalValue, value]) => valueProcessor({
362
+ field: rule.field,
363
+ operator: "=",
364
+ value
365
+ }, _objectSpread2(_objectSpread2({}, opts), {}, { context: { originalValue } }))).join(" and ");
366
+ }
367
+ break;
368
+ default: {
369
+ var _valueAsDateArray$;
370
+ const [originalValue, value] = (_valueAsDateArray$ = valueAsDateArray[0]) !== null && _valueAsDateArray$ !== void 0 ? _valueAsDateArray$ : ["", ""];
371
+ finalValue = valueProcessor({
372
+ field: rule.field,
373
+ operator: "=",
374
+ value
375
+ }, _objectSpread2(_objectSpread2({}, opts), {}, { context: { originalValue } }));
376
+ }
377
+ }
378
+ return `${getQuotedFieldName(rule.field, {
379
+ quoteFieldNamesWith,
380
+ fieldIdentifierSeparator
381
+ })} ${operator} ${finalValue}`.trim();
382
+ };
383
+
384
+ //#endregion
385
+ export { datetimeValueProcessorNL, defaultDateTimeNLOperatorMap, getDatetimeJsonLogicOperations, getDatetimeRuleProcessorCEL, getDatetimeRuleProcessorMongoDBQuery, getDatetimeRuleProcessorNL, getDatetimeRuleProcessorSQL, getDatetimeValueProcessorANSI, getDatetimeValueProcessorMSSQL, getDatetimeValueProcessorMySQL, getDatetimeValueProcessorOracle, getDatetimeValueProcessorPostgreSQL, isISOStringDateOnly, processIsDateField };
386
+ //# sourceMappingURL=getDatetimeRuleProcessorSQL-CN80oEFK.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getDatetimeRuleProcessorSQL-CN80oEFK.js","names":["defaultIsDateField: IsDateFieldFunction","defaultDateTimeNLOperatorMap: ExportOperatorMap","datetimeValueProcessorNL: ValueProcessorByRule"],"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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"}