@usertour/helpers 0.0.35 → 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__/condition.test.cjs +1007 -29
- package/dist/__tests__/condition.test.js +900 -3
- package/dist/__tests__/time.test.cjs +482 -42
- package/dist/__tests__/time.test.js +349 -28
- package/dist/{chunk-NVSDWUJP.js → chunk-3UOSPZEP.js} +1 -1
- package/dist/chunk-JQWKLXW6.js +147 -0
- package/dist/conditions/condition.cjs +109 -28
- package/dist/conditions/condition.js +2 -2
- package/dist/conditions/index.cjs +151 -27
- package/dist/conditions/index.d.cts +1 -1
- package/dist/conditions/index.d.ts +1 -1
- package/dist/conditions/index.js +11 -3
- 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 +133 -18
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +11 -3
- package/package.json +2 -2
- package/dist/chunk-CEK3SCQO.js +0 -31
|
@@ -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
|
|
137
|
-
}
|
|
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);
|
|
235
|
+
const data = rules.data || {};
|
|
236
|
+
if (isTimeConditionDataV2(data)) {
|
|
237
|
+
return evaluateTimeConditionV2(data);
|
|
146
238
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
if (!(0, import_date_fns.isValid)(endTime)) {
|
|
150
|
-
return false;
|
|
239
|
+
if (isTimeConditionDataLegacy(data)) {
|
|
240
|
+
return evaluateTimeConditionLegacy(data);
|
|
151
241
|
}
|
|
152
|
-
return
|
|
242
|
+
return false;
|
|
153
243
|
} catch {
|
|
154
244
|
return false;
|
|
155
245
|
}
|
|
@@ -158,15 +248,6 @@ var evaluateTimeCondition = (rules) => {
|
|
|
158
248
|
// src/conditions/attribute.ts
|
|
159
249
|
var import_types = require("@usertour/types");
|
|
160
250
|
var import_date_fns2 = require("date-fns");
|
|
161
|
-
|
|
162
|
-
// src/type-utils.ts
|
|
163
|
-
var nativeIsArray = Array.isArray;
|
|
164
|
-
var ObjProto = Object.prototype;
|
|
165
|
-
var objToString = ObjProto.toString;
|
|
166
|
-
var objHasOwn = ObjProto.hasOwnProperty;
|
|
167
|
-
var isArray = nativeIsArray || ((obj) => objToString.call(obj) === "[object Array]");
|
|
168
|
-
|
|
169
|
-
// src/conditions/attribute.ts
|
|
170
251
|
function evaluateAttributeCondition(condition, options) {
|
|
171
252
|
const { data } = condition;
|
|
172
253
|
if (!data) {
|
|
@@ -224,8 +305,8 @@ function evaluateStringCondition(logic, actualValue, expectedValue) {
|
|
|
224
305
|
case "endsWith":
|
|
225
306
|
return stringValue.endsWith(expectedValue);
|
|
226
307
|
case "empty": {
|
|
227
|
-
const
|
|
228
|
-
return
|
|
308
|
+
const isEmpty2 = !stringValue || stringValue === "";
|
|
309
|
+
return isEmpty2;
|
|
229
310
|
}
|
|
230
311
|
case "any":
|
|
231
312
|
return Boolean(stringValue && stringValue !== "");
|
|
@@ -8,10 +8,10 @@ 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-
|
|
14
|
+
import "../chunk-JQWKLXW6.js";
|
|
15
15
|
import "../chunk-KYDXF7SU.js";
|
|
16
16
|
import "../chunk-GFH3VWOC.js";
|
|
17
17
|
import "../chunk-3KG2HTZ3.js";
|
|
@@ -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);
|
|
157
283
|
}
|
|
158
|
-
|
|
284
|
+
if (isTimeConditionDataLegacy(data)) {
|
|
285
|
+
return evaluateTimeConditionLegacy(data);
|
|
286
|
+
}
|
|
287
|
+
return false;
|
|
159
288
|
} catch {
|
|
160
289
|
return false;
|
|
161
290
|
}
|
|
@@ -164,15 +293,6 @@ var evaluateTimeCondition = (rules) => {
|
|
|
164
293
|
// src/conditions/attribute.ts
|
|
165
294
|
var import_types = require("@usertour/types");
|
|
166
295
|
var import_date_fns2 = require("date-fns");
|
|
167
|
-
|
|
168
|
-
// src/type-utils.ts
|
|
169
|
-
var nativeIsArray = Array.isArray;
|
|
170
|
-
var ObjProto = Object.prototype;
|
|
171
|
-
var objToString = ObjProto.toString;
|
|
172
|
-
var objHasOwn = ObjProto.hasOwnProperty;
|
|
173
|
-
var isArray = nativeIsArray || ((obj) => objToString.call(obj) === "[object Array]");
|
|
174
|
-
|
|
175
|
-
// src/conditions/attribute.ts
|
|
176
296
|
function evaluateAttributeCondition(condition, options) {
|
|
177
297
|
const { data } = condition;
|
|
178
298
|
if (!data) {
|
|
@@ -230,8 +350,8 @@ function evaluateStringCondition(logic, actualValue, expectedValue) {
|
|
|
230
350
|
case "endsWith":
|
|
231
351
|
return stringValue.endsWith(expectedValue);
|
|
232
352
|
case "empty": {
|
|
233
|
-
const
|
|
234
|
-
return
|
|
353
|
+
const isEmpty2 = !stringValue || stringValue === "";
|
|
354
|
+
return isEmpty2;
|
|
235
355
|
}
|
|
236
356
|
case "any":
|
|
237
357
|
return Boolean(stringValue && stringValue !== "");
|
|
@@ -541,6 +661,7 @@ var allConditionsHaveIds = (conditions) => {
|
|
|
541
661
|
allConditionsHaveIds,
|
|
542
662
|
assignConditionIds,
|
|
543
663
|
conditionsIsSame,
|
|
664
|
+
convertTimeConditionLegacyToV2,
|
|
544
665
|
evaluateAttributeCondition,
|
|
545
666
|
evaluateRule,
|
|
546
667
|
evaluateRulesConditions,
|
|
@@ -550,5 +671,8 @@ var allConditionsHaveIds = (conditions) => {
|
|
|
550
671
|
isConditionsActived,
|
|
551
672
|
isEqual,
|
|
552
673
|
isMatchUrlPattern,
|
|
674
|
+
isTimeConditionDataLegacy,
|
|
675
|
+
isTimeConditionDataV2,
|
|
676
|
+
normalizeTimeConditionData,
|
|
553
677
|
regenerateConditionIds
|
|
554
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,15 +9,19 @@ 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
26
|
evaluateAttributeCondition
|
|
23
27
|
} from "../chunk-KYDXF7SU.js";
|
|
@@ -28,6 +32,7 @@ export {
|
|
|
28
32
|
allConditionsHaveIds,
|
|
29
33
|
assignConditionIds,
|
|
30
34
|
conditionsIsSame,
|
|
35
|
+
convertTimeConditionLegacyToV2,
|
|
31
36
|
evaluateAttributeCondition,
|
|
32
37
|
evaluateRule,
|
|
33
38
|
evaluateRulesConditions,
|
|
@@ -37,5 +42,8 @@ export {
|
|
|
37
42
|
isConditionsActived,
|
|
38
43
|
isEqual,
|
|
39
44
|
isMatchUrlPattern,
|
|
45
|
+
isTimeConditionDataLegacy,
|
|
46
|
+
isTimeConditionDataV2,
|
|
47
|
+
normalizeTimeConditionData,
|
|
40
48
|
regenerateConditionIds
|
|
41
49
|
};
|
package/dist/conditions/time.cjs
CHANGED
|
@@ -20,36 +20,168 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/conditions/time.ts
|
|
21
21
|
var time_exports = {};
|
|
22
22
|
__export(time_exports, {
|
|
23
|
-
|
|
23
|
+
convertTimeConditionLegacyToV2: () => convertTimeConditionLegacyToV2,
|
|
24
|
+
evaluateTimeCondition: () => evaluateTimeCondition,
|
|
25
|
+
isTimeConditionDataLegacy: () => isTimeConditionDataLegacy,
|
|
26
|
+
isTimeConditionDataV2: () => isTimeConditionDataV2,
|
|
27
|
+
normalizeTimeConditionData: () => normalizeTimeConditionData
|
|
24
28
|
});
|
|
25
29
|
module.exports = __toCommonJS(time_exports);
|
|
26
30
|
var import_date_fns = require("date-fns");
|
|
27
|
-
|
|
31
|
+
|
|
32
|
+
// src/type-utils.ts
|
|
33
|
+
var nativeIsArray = Array.isArray;
|
|
34
|
+
var ObjProto = Object.prototype;
|
|
35
|
+
var objToString = ObjProto.toString;
|
|
36
|
+
var objHasOwn = ObjProto.hasOwnProperty;
|
|
37
|
+
var isUndefined = (x) => x === void 0;
|
|
38
|
+
var isString = (x) => {
|
|
39
|
+
return objToString.call(x) === "[object String]";
|
|
40
|
+
};
|
|
41
|
+
var isEmptyString = (x) => isString(x) && x.trim().length === 0;
|
|
42
|
+
var isNull = (x) => {
|
|
43
|
+
return x === null;
|
|
44
|
+
};
|
|
45
|
+
var isNullish = (x) => isUndefined(x) || isNull(x);
|
|
46
|
+
|
|
47
|
+
// src/conditions/time.ts
|
|
48
|
+
function isEmpty(value) {
|
|
49
|
+
return isNullish(value) || isEmptyString(value);
|
|
50
|
+
}
|
|
51
|
+
function hasRequiredFields(data, type) {
|
|
52
|
+
if (type === "start") {
|
|
53
|
+
return !isEmpty(data.startDate) && !isEmpty(data.startDateHour) && !isEmpty(data.startDateMinute);
|
|
54
|
+
}
|
|
55
|
+
return !isEmpty(data.endDate) && !isEmpty(data.endDateHour) && !isEmpty(data.endDateMinute);
|
|
56
|
+
}
|
|
57
|
+
function parseLegacyDate(dateStr) {
|
|
58
|
+
const [month, day, year] = dateStr.split("/");
|
|
59
|
+
if (!month || !day || !year) {
|
|
60
|
+
return null;
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
month: Number.parseInt(month),
|
|
64
|
+
day: Number.parseInt(day),
|
|
65
|
+
year: Number.parseInt(year)
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
function createLegacyDateTime(data, type) {
|
|
69
|
+
const dateStr = type === "start" ? data.startDate : data.endDate;
|
|
70
|
+
const hourStr = type === "start" ? data.startDateHour : data.endDateHour;
|
|
71
|
+
const minuteStr = type === "start" ? data.startDateMinute : data.endDateMinute;
|
|
72
|
+
if (!dateStr || !hourStr || !minuteStr) {
|
|
73
|
+
return null;
|
|
74
|
+
}
|
|
75
|
+
const dateParts = parseLegacyDate(dateStr);
|
|
76
|
+
if (!dateParts) {
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
const dateTime = new Date(
|
|
80
|
+
dateParts.year,
|
|
81
|
+
dateParts.month - 1,
|
|
82
|
+
dateParts.day,
|
|
83
|
+
Number.parseInt(hourStr),
|
|
84
|
+
Number.parseInt(minuteStr),
|
|
85
|
+
0
|
|
86
|
+
);
|
|
87
|
+
return (0, import_date_fns.isValid)(dateTime) ? dateTime : null;
|
|
88
|
+
}
|
|
89
|
+
function isTimeConditionDataV2(data) {
|
|
90
|
+
return data && ("startTime" in data || "endTime" in data);
|
|
91
|
+
}
|
|
92
|
+
function isTimeConditionDataLegacy(data) {
|
|
93
|
+
return data && ("startDate" in data || "startDateHour" in data);
|
|
94
|
+
}
|
|
95
|
+
function convertTimeConditionLegacyToV2(legacyData) {
|
|
28
96
|
try {
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return false;
|
|
97
|
+
if (!hasRequiredFields(legacyData, "start")) {
|
|
98
|
+
return null;
|
|
32
99
|
}
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
return false;
|
|
100
|
+
const startDateTime = createLegacyDateTime(legacyData, "start");
|
|
101
|
+
if (!startDateTime) {
|
|
102
|
+
return null;
|
|
37
103
|
}
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
104
|
+
const result = {
|
|
105
|
+
startTime: startDateTime.toISOString()
|
|
106
|
+
};
|
|
107
|
+
if (hasRequiredFields(legacyData, "end")) {
|
|
108
|
+
const endDateTime = createLegacyDateTime(legacyData, "end");
|
|
109
|
+
if (endDateTime) {
|
|
110
|
+
result.endTime = endDateTime.toISOString();
|
|
111
|
+
}
|
|
41
112
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
113
|
+
return result;
|
|
114
|
+
} catch {
|
|
115
|
+
return null;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
function normalizeTimeConditionData(data) {
|
|
119
|
+
if (!data) {
|
|
120
|
+
return null;
|
|
121
|
+
}
|
|
122
|
+
if (isTimeConditionDataV2(data)) {
|
|
123
|
+
return data;
|
|
124
|
+
}
|
|
125
|
+
if (isTimeConditionDataLegacy(data)) {
|
|
126
|
+
return convertTimeConditionLegacyToV2(data);
|
|
127
|
+
}
|
|
128
|
+
return null;
|
|
129
|
+
}
|
|
130
|
+
function evaluateTimeConditionV2(data) {
|
|
131
|
+
if (!data.startTime) {
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
const startTime = (0, import_date_fns.parseISO)(data.startTime);
|
|
135
|
+
if (!(0, import_date_fns.isValid)(startTime)) {
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
const now = /* @__PURE__ */ new Date();
|
|
139
|
+
if (!data.endTime) {
|
|
140
|
+
return (0, import_date_fns.isAfter)(now, startTime);
|
|
141
|
+
}
|
|
142
|
+
const endTime = (0, import_date_fns.parseISO)(data.endTime);
|
|
143
|
+
if (!(0, import_date_fns.isValid)(endTime)) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
return (0, import_date_fns.isAfter)(now, startTime) && (0, import_date_fns.isBefore)(now, endTime);
|
|
147
|
+
}
|
|
148
|
+
function evaluateTimeConditionLegacy(data) {
|
|
149
|
+
if (!hasRequiredFields(data, "start")) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
const startDateTime = createLegacyDateTime(data, "start");
|
|
153
|
+
if (!startDateTime) {
|
|
154
|
+
return false;
|
|
155
|
+
}
|
|
156
|
+
const now = /* @__PURE__ */ new Date();
|
|
157
|
+
if (!hasRequiredFields(data, "end")) {
|
|
158
|
+
return (0, import_date_fns.isAfter)(now, startDateTime);
|
|
159
|
+
}
|
|
160
|
+
const endDateTime = createLegacyDateTime(data, "end");
|
|
161
|
+
if (!endDateTime) {
|
|
162
|
+
return false;
|
|
163
|
+
}
|
|
164
|
+
return (0, import_date_fns.isAfter)(now, startDateTime) && (0, import_date_fns.isBefore)(now, endDateTime);
|
|
165
|
+
}
|
|
166
|
+
var evaluateTimeCondition = (rules) => {
|
|
167
|
+
try {
|
|
168
|
+
const data = rules.data || {};
|
|
169
|
+
if (isTimeConditionDataV2(data)) {
|
|
170
|
+
return evaluateTimeConditionV2(data);
|
|
46
171
|
}
|
|
47
|
-
|
|
172
|
+
if (isTimeConditionDataLegacy(data)) {
|
|
173
|
+
return evaluateTimeConditionLegacy(data);
|
|
174
|
+
}
|
|
175
|
+
return false;
|
|
48
176
|
} catch {
|
|
49
177
|
return false;
|
|
50
178
|
}
|
|
51
179
|
};
|
|
52
180
|
// Annotate the CommonJS export names for ESM import in node:
|
|
53
181
|
0 && (module.exports = {
|
|
54
|
-
|
|
182
|
+
convertTimeConditionLegacyToV2,
|
|
183
|
+
evaluateTimeCondition,
|
|
184
|
+
isTimeConditionDataLegacy,
|
|
185
|
+
isTimeConditionDataV2,
|
|
186
|
+
normalizeTimeConditionData
|
|
55
187
|
});
|
|
@@ -1,10 +1,37 @@
|
|
|
1
|
-
import { RulesCondition } from '@usertour/types';
|
|
1
|
+
import { TimeConditionDataV2, TimeConditionDataLegacy, TimeConditionData, RulesCondition } from '@usertour/types';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Type guard to check if data is in new format (TimeConditionDataV2)
|
|
5
|
+
* @param data - The data to check
|
|
6
|
+
* @returns true if data has startTime or endTime fields
|
|
7
|
+
*/
|
|
8
|
+
declare function isTimeConditionDataV2(data: any): data is TimeConditionDataV2;
|
|
9
|
+
/**
|
|
10
|
+
* Type guard to check if data is in legacy format (TimeConditionDataLegacy)
|
|
11
|
+
* @param data - The data to check
|
|
12
|
+
* @returns true if data has startDate or startDateHour fields
|
|
13
|
+
*/
|
|
14
|
+
declare function isTimeConditionDataLegacy(data: any): data is TimeConditionDataLegacy;
|
|
15
|
+
/**
|
|
16
|
+
* Convert legacy format to new format (ISO 8601)
|
|
17
|
+
* @param legacyData - Legacy time condition data
|
|
18
|
+
* @returns New format time condition data, or null if conversion fails
|
|
19
|
+
*/
|
|
20
|
+
declare function convertTimeConditionLegacyToV2(legacyData: TimeConditionDataLegacy): TimeConditionDataV2 | null;
|
|
21
|
+
/**
|
|
22
|
+
* Normalize time condition data to new format
|
|
23
|
+
* If data is already in new format, returns it as-is
|
|
24
|
+
* If data is in legacy format, converts it to new format
|
|
25
|
+
* @param data - Time condition data (either format)
|
|
26
|
+
* @returns New format time condition data, or null if conversion fails
|
|
27
|
+
*/
|
|
28
|
+
declare function normalizeTimeConditionData(data: TimeConditionData | null | undefined): TimeConditionDataV2 | null;
|
|
3
29
|
/**
|
|
4
30
|
* Evaluate time condition based on start and end time rules
|
|
31
|
+
* Supports both new ISO 8601 format and legacy format for backward compatibility
|
|
5
32
|
* @param rules - Time condition rules
|
|
6
33
|
* @returns boolean indicating if current time matches the condition
|
|
7
34
|
*/
|
|
8
35
|
declare const evaluateTimeCondition: (rules: RulesCondition) => boolean;
|
|
9
36
|
|
|
10
|
-
export { evaluateTimeCondition };
|
|
37
|
+
export { convertTimeConditionLegacyToV2, evaluateTimeCondition, isTimeConditionDataLegacy, isTimeConditionDataV2, normalizeTimeConditionData };
|