@usertour/helpers 0.0.34 → 0.0.36

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 (36) hide show
  1. package/dist/__tests__/attribute.test.cjs +10 -1
  2. package/dist/__tests__/attribute.test.js +2 -1
  3. package/dist/__tests__/condition.test.cjs +1008 -21
  4. package/dist/__tests__/condition.test.js +902 -4
  5. package/dist/__tests__/get-attribute-type.test.cjs +195 -0
  6. package/dist/__tests__/get-attribute-type.test.d.cts +2 -0
  7. package/dist/__tests__/get-attribute-type.test.d.ts +2 -0
  8. package/dist/__tests__/get-attribute-type.test.js +133 -0
  9. package/dist/__tests__/time.test.cjs +482 -42
  10. package/dist/__tests__/time.test.js +349 -28
  11. package/dist/attribute.cjs +111 -0
  12. package/dist/attribute.d.cts +5 -0
  13. package/dist/attribute.d.ts +5 -0
  14. package/dist/attribute.js +12 -0
  15. package/dist/{chunk-A4KMGXB3.js → chunk-3UOSPZEP.js} +4 -4
  16. package/dist/chunk-EEYZG4JJ.js +78 -0
  17. package/dist/chunk-JQWKLXW6.js +147 -0
  18. package/dist/{chunk-7JXEY4A2.js → chunk-KYDXF7SU.js} +5 -1
  19. package/dist/conditions/attribute.cjs +10 -1
  20. package/dist/conditions/attribute.js +2 -1
  21. package/dist/conditions/condition.cjs +110 -20
  22. package/dist/conditions/condition.js +4 -3
  23. package/dist/conditions/index.cjs +152 -19
  24. package/dist/conditions/index.d.cts +1 -1
  25. package/dist/conditions/index.d.ts +1 -1
  26. package/dist/conditions/index.js +14 -5
  27. package/dist/conditions/time.cjs +150 -18
  28. package/dist/conditions/time.d.cts +29 -2
  29. package/dist/conditions/time.d.ts +29 -2
  30. package/dist/conditions/time.js +12 -3
  31. package/dist/index.cjs +209 -19
  32. package/dist/index.d.cts +2 -1
  33. package/dist/index.d.ts +2 -1
  34. package/dist/index.js +20 -4
  35. package/package.json +2 -2
  36. package/dist/chunk-CEK3SCQO.js +0 -31
@@ -0,0 +1,147 @@
1
+ import {
2
+ isEmptyString,
3
+ isNullish
4
+ } from "./chunk-GFH3VWOC.js";
5
+
6
+ // src/conditions/time.ts
7
+ import { isAfter, isBefore, isValid, parseISO } from "date-fns";
8
+ function isEmpty(value) {
9
+ return isNullish(value) || isEmptyString(value);
10
+ }
11
+ function hasRequiredFields(data, type) {
12
+ if (type === "start") {
13
+ return !isEmpty(data.startDate) && !isEmpty(data.startDateHour) && !isEmpty(data.startDateMinute);
14
+ }
15
+ return !isEmpty(data.endDate) && !isEmpty(data.endDateHour) && !isEmpty(data.endDateMinute);
16
+ }
17
+ function parseLegacyDate(dateStr) {
18
+ const [month, day, year] = dateStr.split("/");
19
+ if (!month || !day || !year) {
20
+ return null;
21
+ }
22
+ return {
23
+ month: Number.parseInt(month),
24
+ day: Number.parseInt(day),
25
+ year: Number.parseInt(year)
26
+ };
27
+ }
28
+ function createLegacyDateTime(data, type) {
29
+ const dateStr = type === "start" ? data.startDate : data.endDate;
30
+ const hourStr = type === "start" ? data.startDateHour : data.endDateHour;
31
+ const minuteStr = type === "start" ? data.startDateMinute : data.endDateMinute;
32
+ if (!dateStr || !hourStr || !minuteStr) {
33
+ return null;
34
+ }
35
+ const dateParts = parseLegacyDate(dateStr);
36
+ if (!dateParts) {
37
+ return null;
38
+ }
39
+ const dateTime = new Date(
40
+ dateParts.year,
41
+ dateParts.month - 1,
42
+ dateParts.day,
43
+ Number.parseInt(hourStr),
44
+ Number.parseInt(minuteStr),
45
+ 0
46
+ );
47
+ return isValid(dateTime) ? dateTime : null;
48
+ }
49
+ function isTimeConditionDataV2(data) {
50
+ return data && ("startTime" in data || "endTime" in data);
51
+ }
52
+ function isTimeConditionDataLegacy(data) {
53
+ return data && ("startDate" in data || "startDateHour" in data);
54
+ }
55
+ function convertTimeConditionLegacyToV2(legacyData) {
56
+ try {
57
+ if (!hasRequiredFields(legacyData, "start")) {
58
+ return null;
59
+ }
60
+ const startDateTime = createLegacyDateTime(legacyData, "start");
61
+ if (!startDateTime) {
62
+ return null;
63
+ }
64
+ const result = {
65
+ startTime: startDateTime.toISOString()
66
+ };
67
+ if (hasRequiredFields(legacyData, "end")) {
68
+ const endDateTime = createLegacyDateTime(legacyData, "end");
69
+ if (endDateTime) {
70
+ result.endTime = endDateTime.toISOString();
71
+ }
72
+ }
73
+ return result;
74
+ } catch {
75
+ return null;
76
+ }
77
+ }
78
+ function normalizeTimeConditionData(data) {
79
+ if (!data) {
80
+ return null;
81
+ }
82
+ if (isTimeConditionDataV2(data)) {
83
+ return data;
84
+ }
85
+ if (isTimeConditionDataLegacy(data)) {
86
+ return convertTimeConditionLegacyToV2(data);
87
+ }
88
+ return null;
89
+ }
90
+ function evaluateTimeConditionV2(data) {
91
+ if (!data.startTime) {
92
+ return false;
93
+ }
94
+ const startTime = parseISO(data.startTime);
95
+ if (!isValid(startTime)) {
96
+ return false;
97
+ }
98
+ const now = /* @__PURE__ */ new Date();
99
+ if (!data.endTime) {
100
+ return isAfter(now, startTime);
101
+ }
102
+ const endTime = parseISO(data.endTime);
103
+ if (!isValid(endTime)) {
104
+ return false;
105
+ }
106
+ return isAfter(now, startTime) && isBefore(now, endTime);
107
+ }
108
+ function evaluateTimeConditionLegacy(data) {
109
+ if (!hasRequiredFields(data, "start")) {
110
+ return false;
111
+ }
112
+ const startDateTime = createLegacyDateTime(data, "start");
113
+ if (!startDateTime) {
114
+ return false;
115
+ }
116
+ const now = /* @__PURE__ */ new Date();
117
+ if (!hasRequiredFields(data, "end")) {
118
+ return isAfter(now, startDateTime);
119
+ }
120
+ const endDateTime = createLegacyDateTime(data, "end");
121
+ if (!endDateTime) {
122
+ return false;
123
+ }
124
+ return isAfter(now, startDateTime) && isBefore(now, endDateTime);
125
+ }
126
+ var evaluateTimeCondition = (rules) => {
127
+ try {
128
+ const data = rules.data || {};
129
+ if (isTimeConditionDataV2(data)) {
130
+ return evaluateTimeConditionV2(data);
131
+ }
132
+ if (isTimeConditionDataLegacy(data)) {
133
+ return evaluateTimeConditionLegacy(data);
134
+ }
135
+ return false;
136
+ } catch {
137
+ return false;
138
+ }
139
+ };
140
+
141
+ export {
142
+ isTimeConditionDataV2,
143
+ isTimeConditionDataLegacy,
144
+ convertTimeConditionLegacyToV2,
145
+ normalizeTimeConditionData,
146
+ evaluateTimeCondition
147
+ };
@@ -1,3 +1,7 @@
1
+ import {
2
+ isArray
3
+ } from "./chunk-GFH3VWOC.js";
4
+
1
5
  // src/conditions/attribute.ts
2
6
  import {
3
7
  BizAttributeTypes,
@@ -152,7 +156,7 @@ function evaluateBooleanCondition(logic, actualValue) {
152
156
  }
153
157
  }
154
158
  function evaluateListCondition(logic, actualValue, expectedValues) {
155
- const arrayValue = Array.isArray(actualValue) ? actualValue : [];
159
+ const arrayValue = isArray(actualValue) ? actualValue : [];
156
160
  if (logic === "empty" || logic === "any") {
157
161
  switch (logic) {
158
162
  case "empty":
@@ -26,6 +26,15 @@ __export(attribute_exports, {
26
26
  module.exports = __toCommonJS(attribute_exports);
27
27
  var import_types = require("@usertour/types");
28
28
  var import_date_fns = require("date-fns");
29
+
30
+ // src/type-utils.ts
31
+ var nativeIsArray = Array.isArray;
32
+ var ObjProto = Object.prototype;
33
+ var objToString = ObjProto.toString;
34
+ var objHasOwn = ObjProto.hasOwnProperty;
35
+ var isArray = nativeIsArray || ((obj) => objToString.call(obj) === "[object Array]");
36
+
37
+ // src/conditions/attribute.ts
29
38
  function evaluateFilterConditions(conditions, options) {
30
39
  if (!conditions || !conditions.length) {
31
40
  return true;
@@ -174,7 +183,7 @@ function evaluateBooleanCondition(logic, actualValue) {
174
183
  }
175
184
  }
176
185
  function evaluateListCondition(logic, actualValue, expectedValues) {
177
- const arrayValue = Array.isArray(actualValue) ? actualValue : [];
186
+ const arrayValue = isArray(actualValue) ? actualValue : [];
178
187
  if (logic === "empty" || logic === "any") {
179
188
  switch (logic) {
180
189
  case "empty":
@@ -1,7 +1,8 @@
1
1
  import {
2
2
  evaluateAttributeCondition,
3
3
  evaluateFilterConditions
4
- } from "../chunk-7JXEY4A2.js";
4
+ } from "../chunk-KYDXF7SU.js";
5
+ import "../chunk-GFH3VWOC.js";
5
6
  import "../chunk-XEO3YXBM.js";
6
7
  export {
7
8
  evaluateAttributeCondition,
@@ -129,27 +129,117 @@ var evaluateUrlCondition = (rules, url) => {
129
129
 
130
130
  // src/conditions/time.ts
131
131
  var import_date_fns = require("date-fns");
132
+
133
+ // src/type-utils.ts
134
+ var nativeIsArray = Array.isArray;
135
+ var ObjProto = Object.prototype;
136
+ var objToString = ObjProto.toString;
137
+ var objHasOwn = ObjProto.hasOwnProperty;
138
+ var isArray = nativeIsArray || ((obj) => objToString.call(obj) === "[object Array]");
139
+ var isUndefined = (x) => x === void 0;
140
+ var isString = (x) => {
141
+ return objToString.call(x) === "[object String]";
142
+ };
143
+ var isEmptyString = (x) => isString(x) && x.trim().length === 0;
144
+ var isNull = (x) => {
145
+ return x === null;
146
+ };
147
+ var isNullish = (x) => isUndefined(x) || isNull(x);
148
+
149
+ // src/conditions/time.ts
150
+ function isEmpty(value) {
151
+ return isNullish(value) || isEmptyString(value);
152
+ }
153
+ function hasRequiredFields(data, type) {
154
+ if (type === "start") {
155
+ return !isEmpty(data.startDate) && !isEmpty(data.startDateHour) && !isEmpty(data.startDateMinute);
156
+ }
157
+ return !isEmpty(data.endDate) && !isEmpty(data.endDateHour) && !isEmpty(data.endDateMinute);
158
+ }
159
+ function parseLegacyDate(dateStr) {
160
+ const [month, day, year] = dateStr.split("/");
161
+ if (!month || !day || !year) {
162
+ return null;
163
+ }
164
+ return {
165
+ month: Number.parseInt(month),
166
+ day: Number.parseInt(day),
167
+ year: Number.parseInt(year)
168
+ };
169
+ }
170
+ function createLegacyDateTime(data, type) {
171
+ const dateStr = type === "start" ? data.startDate : data.endDate;
172
+ const hourStr = type === "start" ? data.startDateHour : data.endDateHour;
173
+ const minuteStr = type === "start" ? data.startDateMinute : data.endDateMinute;
174
+ if (!dateStr || !hourStr || !minuteStr) {
175
+ return null;
176
+ }
177
+ const dateParts = parseLegacyDate(dateStr);
178
+ if (!dateParts) {
179
+ return null;
180
+ }
181
+ const dateTime = new Date(
182
+ dateParts.year,
183
+ dateParts.month - 1,
184
+ dateParts.day,
185
+ Number.parseInt(hourStr),
186
+ Number.parseInt(minuteStr),
187
+ 0
188
+ );
189
+ return (0, import_date_fns.isValid)(dateTime) ? dateTime : null;
190
+ }
191
+ function isTimeConditionDataV2(data) {
192
+ return data && ("startTime" in data || "endTime" in data);
193
+ }
194
+ function isTimeConditionDataLegacy(data) {
195
+ return data && ("startDate" in data || "startDateHour" in data);
196
+ }
197
+ function evaluateTimeConditionV2(data) {
198
+ if (!data.startTime) {
199
+ return false;
200
+ }
201
+ const startTime = (0, import_date_fns.parseISO)(data.startTime);
202
+ if (!(0, import_date_fns.isValid)(startTime)) {
203
+ return false;
204
+ }
205
+ const now = /* @__PURE__ */ new Date();
206
+ if (!data.endTime) {
207
+ return (0, import_date_fns.isAfter)(now, startTime);
208
+ }
209
+ const endTime = (0, import_date_fns.parseISO)(data.endTime);
210
+ if (!(0, import_date_fns.isValid)(endTime)) {
211
+ return false;
212
+ }
213
+ return (0, import_date_fns.isAfter)(now, startTime) && (0, import_date_fns.isBefore)(now, endTime);
214
+ }
215
+ function evaluateTimeConditionLegacy(data) {
216
+ if (!hasRequiredFields(data, "start")) {
217
+ return false;
218
+ }
219
+ const startDateTime = createLegacyDateTime(data, "start");
220
+ if (!startDateTime) {
221
+ return false;
222
+ }
223
+ const now = /* @__PURE__ */ new Date();
224
+ if (!hasRequiredFields(data, "end")) {
225
+ return (0, import_date_fns.isAfter)(now, startDateTime);
226
+ }
227
+ const endDateTime = createLegacyDateTime(data, "end");
228
+ if (!endDateTime) {
229
+ return false;
230
+ }
231
+ return (0, import_date_fns.isAfter)(now, startDateTime) && (0, import_date_fns.isBefore)(now, endDateTime);
232
+ }
132
233
  var evaluateTimeCondition = (rules) => {
133
234
  try {
134
- const { endDate, endDateHour, endDateMinute, startDate, startDateHour, startDateMinute } = rules.data || {};
135
- if (!startDate || !startDateHour || !startDateMinute) {
136
- return false;
235
+ const data = rules.data || {};
236
+ if (isTimeConditionDataV2(data)) {
237
+ return evaluateTimeConditionV2(data);
137
238
  }
138
- const startTimeString = `${startDate}T${startDateHour.padStart(2, "0")}:${startDateMinute.padStart(2, "0")}:00`;
139
- const startTime = (0, import_date_fns.parseISO)(startTimeString);
140
- if (!(0, import_date_fns.isValid)(startTime)) {
141
- return false;
142
- }
143
- const now = /* @__PURE__ */ new Date();
144
- if (!endDate || !endDateHour || !endDateMinute) {
145
- return (0, import_date_fns.isAfter)(now, startTime);
239
+ if (isTimeConditionDataLegacy(data)) {
240
+ return evaluateTimeConditionLegacy(data);
146
241
  }
147
- const endTimeString = `${endDate}T${endDateHour.padStart(2, "0")}:${endDateMinute.padStart(2, "0")}:00`;
148
- const endTime = (0, import_date_fns.parseISO)(endTimeString);
149
- if (!(0, import_date_fns.isValid)(endTime)) {
150
- return false;
151
- }
152
- return (0, import_date_fns.isAfter)(now, startTime) && (0, import_date_fns.isBefore)(now, endTime);
242
+ return false;
153
243
  } catch {
154
244
  return false;
155
245
  }
@@ -215,8 +305,8 @@ function evaluateStringCondition(logic, actualValue, expectedValue) {
215
305
  case "endsWith":
216
306
  return stringValue.endsWith(expectedValue);
217
307
  case "empty": {
218
- const isEmpty = !stringValue || stringValue === "";
219
- return isEmpty;
308
+ const isEmpty2 = !stringValue || stringValue === "";
309
+ return isEmpty2;
220
310
  }
221
311
  case "any":
222
312
  return Boolean(stringValue && stringValue !== "");
@@ -269,7 +359,7 @@ function evaluateBooleanCondition(logic, actualValue) {
269
359
  }
270
360
  }
271
361
  function evaluateListCondition(logic, actualValue, expectedValues) {
272
- const arrayValue = Array.isArray(actualValue) ? actualValue : [];
362
+ const arrayValue = isArray(actualValue) ? actualValue : [];
273
363
  if (logic === "empty" || logic === "any") {
274
364
  switch (logic) {
275
365
  case "empty":
@@ -8,11 +8,12 @@ import {
8
8
  isConditionsActived,
9
9
  isEqual,
10
10
  regenerateConditionIds
11
- } from "../chunk-A4KMGXB3.js";
11
+ } from "../chunk-3UOSPZEP.js";
12
12
  import "../chunk-YYIGUZNZ.js";
13
13
  import "../chunk-PAESAL23.js";
14
- import "../chunk-7JXEY4A2.js";
15
- import "../chunk-CEK3SCQO.js";
14
+ import "../chunk-JQWKLXW6.js";
15
+ import "../chunk-KYDXF7SU.js";
16
+ import "../chunk-GFH3VWOC.js";
16
17
  import "../chunk-3KG2HTZ3.js";
17
18
  import "../chunk-XEO3YXBM.js";
18
19
  export {
@@ -33,6 +33,7 @@ __export(conditions_exports, {
33
33
  allConditionsHaveIds: () => allConditionsHaveIds,
34
34
  assignConditionIds: () => assignConditionIds,
35
35
  conditionsIsSame: () => conditionsIsSame,
36
+ convertTimeConditionLegacyToV2: () => convertTimeConditionLegacyToV2,
36
37
  evaluateAttributeCondition: () => evaluateAttributeCondition,
37
38
  evaluateRule: () => evaluateRule,
38
39
  evaluateRulesConditions: () => evaluateRulesConditions,
@@ -42,6 +43,9 @@ __export(conditions_exports, {
42
43
  isConditionsActived: () => isConditionsActived,
43
44
  isEqual: () => import_fast_deep_equal.default,
44
45
  isMatchUrlPattern: () => isMatchUrlPattern,
46
+ isTimeConditionDataLegacy: () => isTimeConditionDataLegacy,
47
+ isTimeConditionDataV2: () => isTimeConditionDataV2,
48
+ normalizeTimeConditionData: () => normalizeTimeConditionData,
45
49
  regenerateConditionIds: () => regenerateConditionIds
46
50
  });
47
51
  module.exports = __toCommonJS(conditions_exports);
@@ -135,27 +139,152 @@ var evaluateUrlCondition = (rules, url) => {
135
139
 
136
140
  // src/conditions/time.ts
137
141
  var import_date_fns = require("date-fns");
138
- var evaluateTimeCondition = (rules) => {
142
+
143
+ // src/type-utils.ts
144
+ var nativeIsArray = Array.isArray;
145
+ var ObjProto = Object.prototype;
146
+ var objToString = ObjProto.toString;
147
+ var objHasOwn = ObjProto.hasOwnProperty;
148
+ var isArray = nativeIsArray || ((obj) => objToString.call(obj) === "[object Array]");
149
+ var isUndefined = (x) => x === void 0;
150
+ var isString = (x) => {
151
+ return objToString.call(x) === "[object String]";
152
+ };
153
+ var isEmptyString = (x) => isString(x) && x.trim().length === 0;
154
+ var isNull = (x) => {
155
+ return x === null;
156
+ };
157
+ var isNullish = (x) => isUndefined(x) || isNull(x);
158
+
159
+ // src/conditions/time.ts
160
+ function isEmpty(value) {
161
+ return isNullish(value) || isEmptyString(value);
162
+ }
163
+ function hasRequiredFields(data, type) {
164
+ if (type === "start") {
165
+ return !isEmpty(data.startDate) && !isEmpty(data.startDateHour) && !isEmpty(data.startDateMinute);
166
+ }
167
+ return !isEmpty(data.endDate) && !isEmpty(data.endDateHour) && !isEmpty(data.endDateMinute);
168
+ }
169
+ function parseLegacyDate(dateStr) {
170
+ const [month, day, year] = dateStr.split("/");
171
+ if (!month || !day || !year) {
172
+ return null;
173
+ }
174
+ return {
175
+ month: Number.parseInt(month),
176
+ day: Number.parseInt(day),
177
+ year: Number.parseInt(year)
178
+ };
179
+ }
180
+ function createLegacyDateTime(data, type) {
181
+ const dateStr = type === "start" ? data.startDate : data.endDate;
182
+ const hourStr = type === "start" ? data.startDateHour : data.endDateHour;
183
+ const minuteStr = type === "start" ? data.startDateMinute : data.endDateMinute;
184
+ if (!dateStr || !hourStr || !minuteStr) {
185
+ return null;
186
+ }
187
+ const dateParts = parseLegacyDate(dateStr);
188
+ if (!dateParts) {
189
+ return null;
190
+ }
191
+ const dateTime = new Date(
192
+ dateParts.year,
193
+ dateParts.month - 1,
194
+ dateParts.day,
195
+ Number.parseInt(hourStr),
196
+ Number.parseInt(minuteStr),
197
+ 0
198
+ );
199
+ return (0, import_date_fns.isValid)(dateTime) ? dateTime : null;
200
+ }
201
+ function isTimeConditionDataV2(data) {
202
+ return data && ("startTime" in data || "endTime" in data);
203
+ }
204
+ function isTimeConditionDataLegacy(data) {
205
+ return data && ("startDate" in data || "startDateHour" in data);
206
+ }
207
+ function convertTimeConditionLegacyToV2(legacyData) {
139
208
  try {
140
- const { endDate, endDateHour, endDateMinute, startDate, startDateHour, startDateMinute } = rules.data || {};
141
- if (!startDate || !startDateHour || !startDateMinute) {
142
- return false;
209
+ if (!hasRequiredFields(legacyData, "start")) {
210
+ return null;
143
211
  }
144
- const startTimeString = `${startDate}T${startDateHour.padStart(2, "0")}:${startDateMinute.padStart(2, "0")}:00`;
145
- const startTime = (0, import_date_fns.parseISO)(startTimeString);
146
- if (!(0, import_date_fns.isValid)(startTime)) {
147
- return false;
212
+ const startDateTime = createLegacyDateTime(legacyData, "start");
213
+ if (!startDateTime) {
214
+ return null;
148
215
  }
149
- const now = /* @__PURE__ */ new Date();
150
- if (!endDate || !endDateHour || !endDateMinute) {
151
- return (0, import_date_fns.isAfter)(now, startTime);
216
+ const result = {
217
+ startTime: startDateTime.toISOString()
218
+ };
219
+ if (hasRequiredFields(legacyData, "end")) {
220
+ const endDateTime = createLegacyDateTime(legacyData, "end");
221
+ if (endDateTime) {
222
+ result.endTime = endDateTime.toISOString();
223
+ }
152
224
  }
153
- const endTimeString = `${endDate}T${endDateHour.padStart(2, "0")}:${endDateMinute.padStart(2, "0")}:00`;
154
- const endTime = (0, import_date_fns.parseISO)(endTimeString);
155
- if (!(0, import_date_fns.isValid)(endTime)) {
156
- return false;
225
+ return result;
226
+ } catch {
227
+ return null;
228
+ }
229
+ }
230
+ function normalizeTimeConditionData(data) {
231
+ if (!data) {
232
+ return null;
233
+ }
234
+ if (isTimeConditionDataV2(data)) {
235
+ return data;
236
+ }
237
+ if (isTimeConditionDataLegacy(data)) {
238
+ return convertTimeConditionLegacyToV2(data);
239
+ }
240
+ return null;
241
+ }
242
+ function evaluateTimeConditionV2(data) {
243
+ if (!data.startTime) {
244
+ return false;
245
+ }
246
+ const startTime = (0, import_date_fns.parseISO)(data.startTime);
247
+ if (!(0, import_date_fns.isValid)(startTime)) {
248
+ return false;
249
+ }
250
+ const now = /* @__PURE__ */ new Date();
251
+ if (!data.endTime) {
252
+ return (0, import_date_fns.isAfter)(now, startTime);
253
+ }
254
+ const endTime = (0, import_date_fns.parseISO)(data.endTime);
255
+ if (!(0, import_date_fns.isValid)(endTime)) {
256
+ return false;
257
+ }
258
+ return (0, import_date_fns.isAfter)(now, startTime) && (0, import_date_fns.isBefore)(now, endTime);
259
+ }
260
+ function evaluateTimeConditionLegacy(data) {
261
+ if (!hasRequiredFields(data, "start")) {
262
+ return false;
263
+ }
264
+ const startDateTime = createLegacyDateTime(data, "start");
265
+ if (!startDateTime) {
266
+ return false;
267
+ }
268
+ const now = /* @__PURE__ */ new Date();
269
+ if (!hasRequiredFields(data, "end")) {
270
+ return (0, import_date_fns.isAfter)(now, startDateTime);
271
+ }
272
+ const endDateTime = createLegacyDateTime(data, "end");
273
+ if (!endDateTime) {
274
+ return false;
275
+ }
276
+ return (0, import_date_fns.isAfter)(now, startDateTime) && (0, import_date_fns.isBefore)(now, endDateTime);
277
+ }
278
+ var evaluateTimeCondition = (rules) => {
279
+ try {
280
+ const data = rules.data || {};
281
+ if (isTimeConditionDataV2(data)) {
282
+ return evaluateTimeConditionV2(data);
283
+ }
284
+ if (isTimeConditionDataLegacy(data)) {
285
+ return evaluateTimeConditionLegacy(data);
157
286
  }
158
- return (0, import_date_fns.isAfter)(now, startTime) && (0, import_date_fns.isBefore)(now, endTime);
287
+ return false;
159
288
  } catch {
160
289
  return false;
161
290
  }
@@ -221,8 +350,8 @@ function evaluateStringCondition(logic, actualValue, expectedValue) {
221
350
  case "endsWith":
222
351
  return stringValue.endsWith(expectedValue);
223
352
  case "empty": {
224
- const isEmpty = !stringValue || stringValue === "";
225
- return isEmpty;
353
+ const isEmpty2 = !stringValue || stringValue === "";
354
+ return isEmpty2;
226
355
  }
227
356
  case "any":
228
357
  return Boolean(stringValue && stringValue !== "");
@@ -275,7 +404,7 @@ function evaluateBooleanCondition(logic, actualValue) {
275
404
  }
276
405
  }
277
406
  function evaluateListCondition(logic, actualValue, expectedValues) {
278
- const arrayValue = Array.isArray(actualValue) ? actualValue : [];
407
+ const arrayValue = isArray(actualValue) ? actualValue : [];
279
408
  if (logic === "empty" || logic === "any") {
280
409
  switch (logic) {
281
410
  case "empty":
@@ -532,6 +661,7 @@ var allConditionsHaveIds = (conditions) => {
532
661
  allConditionsHaveIds,
533
662
  assignConditionIds,
534
663
  conditionsIsSame,
664
+ convertTimeConditionLegacyToV2,
535
665
  evaluateAttributeCondition,
536
666
  evaluateRule,
537
667
  evaluateRulesConditions,
@@ -541,5 +671,8 @@ var allConditionsHaveIds = (conditions) => {
541
671
  isConditionsActived,
542
672
  isEqual,
543
673
  isMatchUrlPattern,
674
+ isTimeConditionDataLegacy,
675
+ isTimeConditionDataV2,
676
+ normalizeTimeConditionData,
544
677
  regenerateConditionIds
545
678
  });
@@ -1,6 +1,6 @@
1
1
  export { allConditionsHaveIds, assignConditionIds, conditionsIsSame, evaluateRule, evaluateRulesConditions, filterConditionsByType, isConditionsActived, regenerateConditionIds } from './condition.cjs';
2
2
  export { evaluateUrlCondition, isMatchUrlPattern } from './url.cjs';
3
- export { evaluateTimeCondition } from './time.cjs';
3
+ export { convertTimeConditionLegacyToV2, evaluateTimeCondition, isTimeConditionDataLegacy, isTimeConditionDataV2, normalizeTimeConditionData } from './time.cjs';
4
4
  export { evaluateAttributeCondition } from './attribute.cjs';
5
5
  export { default as isEqual } from 'fast-deep-equal';
6
6
  import '@usertour/types';
@@ -1,6 +1,6 @@
1
1
  export { allConditionsHaveIds, assignConditionIds, conditionsIsSame, evaluateRule, evaluateRulesConditions, filterConditionsByType, isConditionsActived, regenerateConditionIds } from './condition.js';
2
2
  export { evaluateUrlCondition, isMatchUrlPattern } from './url.js';
3
- export { evaluateTimeCondition } from './time.js';
3
+ export { convertTimeConditionLegacyToV2, evaluateTimeCondition, isTimeConditionDataLegacy, isTimeConditionDataV2, normalizeTimeConditionData } from './time.js';
4
4
  export { evaluateAttributeCondition } from './attribute.js';
5
5
  export { default as isEqual } from 'fast-deep-equal';
6
6
  import '@usertour/types';
@@ -9,24 +9,30 @@ import {
9
9
  isConditionsActived,
10
10
  isEqual,
11
11
  regenerateConditionIds
12
- } from "../chunk-A4KMGXB3.js";
12
+ } from "../chunk-3UOSPZEP.js";
13
13
  import {
14
14
  evaluateUrlCondition,
15
15
  isMatchUrlPattern
16
16
  } from "../chunk-YYIGUZNZ.js";
17
17
  import "../chunk-PAESAL23.js";
18
18
  import {
19
- evaluateAttributeCondition
20
- } from "../chunk-7JXEY4A2.js";
19
+ convertTimeConditionLegacyToV2,
20
+ evaluateTimeCondition,
21
+ isTimeConditionDataLegacy,
22
+ isTimeConditionDataV2,
23
+ normalizeTimeConditionData
24
+ } from "../chunk-JQWKLXW6.js";
21
25
  import {
22
- evaluateTimeCondition
23
- } from "../chunk-CEK3SCQO.js";
26
+ evaluateAttributeCondition
27
+ } from "../chunk-KYDXF7SU.js";
28
+ import "../chunk-GFH3VWOC.js";
24
29
  import "../chunk-3KG2HTZ3.js";
25
30
  import "../chunk-XEO3YXBM.js";
26
31
  export {
27
32
  allConditionsHaveIds,
28
33
  assignConditionIds,
29
34
  conditionsIsSame,
35
+ convertTimeConditionLegacyToV2,
30
36
  evaluateAttributeCondition,
31
37
  evaluateRule,
32
38
  evaluateRulesConditions,
@@ -36,5 +42,8 @@ export {
36
42
  isConditionsActived,
37
43
  isEqual,
38
44
  isMatchUrlPattern,
45
+ isTimeConditionDataLegacy,
46
+ isTimeConditionDataV2,
47
+ normalizeTimeConditionData,
39
48
  regenerateConditionIds
40
49
  };