@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.
- package/dist/__tests__/attribute.test.cjs +10 -1
- package/dist/__tests__/attribute.test.js +2 -1
- package/dist/__tests__/condition.test.cjs +1008 -21
- package/dist/__tests__/condition.test.js +902 -4
- package/dist/__tests__/get-attribute-type.test.cjs +195 -0
- package/dist/__tests__/get-attribute-type.test.d.cts +2 -0
- package/dist/__tests__/get-attribute-type.test.d.ts +2 -0
- package/dist/__tests__/get-attribute-type.test.js +133 -0
- package/dist/__tests__/time.test.cjs +482 -42
- package/dist/__tests__/time.test.js +349 -28
- package/dist/attribute.cjs +111 -0
- package/dist/attribute.d.cts +5 -0
- package/dist/attribute.d.ts +5 -0
- package/dist/attribute.js +12 -0
- package/dist/{chunk-A4KMGXB3.js → chunk-3UOSPZEP.js} +4 -4
- package/dist/chunk-EEYZG4JJ.js +78 -0
- package/dist/chunk-JQWKLXW6.js +147 -0
- package/dist/{chunk-7JXEY4A2.js → chunk-KYDXF7SU.js} +5 -1
- package/dist/conditions/attribute.cjs +10 -1
- package/dist/conditions/attribute.js +2 -1
- package/dist/conditions/condition.cjs +110 -20
- package/dist/conditions/condition.js +4 -3
- package/dist/conditions/index.cjs +152 -19
- package/dist/conditions/index.d.cts +1 -1
- package/dist/conditions/index.d.ts +1 -1
- package/dist/conditions/index.js +14 -5
- package/dist/conditions/time.cjs +150 -18
- package/dist/conditions/time.d.cts +29 -2
- package/dist/conditions/time.d.ts +29 -2
- package/dist/conditions/time.js +12 -3
- package/dist/index.cjs +209 -19
- package/dist/index.d.cts +2 -1
- package/dist/index.d.ts +2 -1
- package/dist/index.js +20 -4
- package/package.json +2 -2
- 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 =
|
|
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 =
|
|
186
|
+
const arrayValue = isArray(actualValue) ? actualValue : [];
|
|
178
187
|
if (logic === "empty" || logic === "any") {
|
|
179
188
|
switch (logic) {
|
|
180
189
|
case "empty":
|
|
@@ -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
|
|
135
|
-
if (
|
|
136
|
-
return
|
|
235
|
+
const data = rules.data || {};
|
|
236
|
+
if (isTimeConditionDataV2(data)) {
|
|
237
|
+
return evaluateTimeConditionV2(data);
|
|
137
238
|
}
|
|
138
|
-
|
|
139
|
-
|
|
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
|
-
|
|
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
|
|
219
|
-
return
|
|
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 =
|
|
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-
|
|
11
|
+
} from "../chunk-3UOSPZEP.js";
|
|
12
12
|
import "../chunk-YYIGUZNZ.js";
|
|
13
13
|
import "../chunk-PAESAL23.js";
|
|
14
|
-
import "../chunk-
|
|
15
|
-
import "../chunk-
|
|
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
|
-
|
|
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
|
-
|
|
141
|
-
|
|
142
|
-
return false;
|
|
209
|
+
if (!hasRequiredFields(legacyData, "start")) {
|
|
210
|
+
return null;
|
|
143
211
|
}
|
|
144
|
-
const
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
return false;
|
|
212
|
+
const startDateTime = createLegacyDateTime(legacyData, "start");
|
|
213
|
+
if (!startDateTime) {
|
|
214
|
+
return null;
|
|
148
215
|
}
|
|
149
|
-
const
|
|
150
|
-
|
|
151
|
-
|
|
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
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
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
|
|
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
|
|
225
|
-
return
|
|
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 =
|
|
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';
|
package/dist/conditions/index.js
CHANGED
|
@@ -9,24 +9,30 @@ import {
|
|
|
9
9
|
isConditionsActived,
|
|
10
10
|
isEqual,
|
|
11
11
|
regenerateConditionIds
|
|
12
|
-
} from "../chunk-
|
|
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
|
-
|
|
20
|
-
|
|
19
|
+
convertTimeConditionLegacyToV2,
|
|
20
|
+
evaluateTimeCondition,
|
|
21
|
+
isTimeConditionDataLegacy,
|
|
22
|
+
isTimeConditionDataV2,
|
|
23
|
+
normalizeTimeConditionData
|
|
24
|
+
} from "../chunk-JQWKLXW6.js";
|
|
21
25
|
import {
|
|
22
|
-
|
|
23
|
-
} from "../chunk-
|
|
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
|
};
|