@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
|
@@ -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 };
|
package/dist/conditions/time.js
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
convertTimeConditionLegacyToV2,
|
|
3
|
+
evaluateTimeCondition,
|
|
4
|
+
isTimeConditionDataLegacy,
|
|
5
|
+
isTimeConditionDataV2,
|
|
6
|
+
normalizeTimeConditionData
|
|
7
|
+
} from "../chunk-JQWKLXW6.js";
|
|
8
|
+
import "../chunk-GFH3VWOC.js";
|
|
4
9
|
import "../chunk-XEO3YXBM.js";
|
|
5
10
|
export {
|
|
6
|
-
|
|
11
|
+
convertTimeConditionLegacyToV2,
|
|
12
|
+
evaluateTimeCondition,
|
|
13
|
+
isTimeConditionDataLegacy,
|
|
14
|
+
isTimeConditionDataV2,
|
|
15
|
+
normalizeTimeConditionData
|
|
7
16
|
};
|
package/dist/index.cjs
CHANGED
|
@@ -47,6 +47,7 @@ __export(src_exports, {
|
|
|
47
47
|
cn: () => cn,
|
|
48
48
|
conditionsIsSame: () => conditionsIsSame,
|
|
49
49
|
convertSettings: () => convertSettings,
|
|
50
|
+
convertTimeConditionLegacyToV2: () => convertTimeConditionLegacyToV2,
|
|
50
51
|
convertToCssVars: () => convertToCssVars,
|
|
51
52
|
cuid: () => cuid,
|
|
52
53
|
deepClone: () => deepClone,
|
|
@@ -105,6 +106,8 @@ __export(src_exports, {
|
|
|
105
106
|
isPublishedAtLeastOneEnvironment: () => isPublishedAtLeastOneEnvironment,
|
|
106
107
|
isPublishedInAllEnvironments: () => isPublishedInAllEnvironments,
|
|
107
108
|
isString: () => isString,
|
|
109
|
+
isTimeConditionDataLegacy: () => isTimeConditionDataLegacy,
|
|
110
|
+
isTimeConditionDataV2: () => isTimeConditionDataV2,
|
|
108
111
|
isUint8Array: () => isUint8Array,
|
|
109
112
|
isUndefined: () => isUndefined,
|
|
110
113
|
isUrl: () => isUrl,
|
|
@@ -114,6 +117,7 @@ __export(src_exports, {
|
|
|
114
117
|
nativeForEach: () => nativeForEach,
|
|
115
118
|
nativeIndexOf: () => nativeIndexOf,
|
|
116
119
|
navigator: () => navigator,
|
|
120
|
+
normalizeTimeConditionData: () => normalizeTimeConditionData,
|
|
117
121
|
parseUrlParams: () => parseUrlParams,
|
|
118
122
|
regenerateConditionIds: () => regenerateConditionIds,
|
|
119
123
|
removeAuthToken: () => removeAuthToken,
|
|
@@ -1103,27 +1107,134 @@ var evaluateUrlCondition = (rules, url) => {
|
|
|
1103
1107
|
|
|
1104
1108
|
// src/conditions/time.ts
|
|
1105
1109
|
var import_date_fns = require("date-fns");
|
|
1106
|
-
|
|
1110
|
+
function isEmpty(value) {
|
|
1111
|
+
return isNullish(value) || isEmptyString(value);
|
|
1112
|
+
}
|
|
1113
|
+
function hasRequiredFields(data, type) {
|
|
1114
|
+
if (type === "start") {
|
|
1115
|
+
return !isEmpty(data.startDate) && !isEmpty(data.startDateHour) && !isEmpty(data.startDateMinute);
|
|
1116
|
+
}
|
|
1117
|
+
return !isEmpty(data.endDate) && !isEmpty(data.endDateHour) && !isEmpty(data.endDateMinute);
|
|
1118
|
+
}
|
|
1119
|
+
function parseLegacyDate(dateStr) {
|
|
1120
|
+
const [month, day, year] = dateStr.split("/");
|
|
1121
|
+
if (!month || !day || !year) {
|
|
1122
|
+
return null;
|
|
1123
|
+
}
|
|
1124
|
+
return {
|
|
1125
|
+
month: Number.parseInt(month),
|
|
1126
|
+
day: Number.parseInt(day),
|
|
1127
|
+
year: Number.parseInt(year)
|
|
1128
|
+
};
|
|
1129
|
+
}
|
|
1130
|
+
function createLegacyDateTime(data, type) {
|
|
1131
|
+
const dateStr = type === "start" ? data.startDate : data.endDate;
|
|
1132
|
+
const hourStr = type === "start" ? data.startDateHour : data.endDateHour;
|
|
1133
|
+
const minuteStr = type === "start" ? data.startDateMinute : data.endDateMinute;
|
|
1134
|
+
if (!dateStr || !hourStr || !minuteStr) {
|
|
1135
|
+
return null;
|
|
1136
|
+
}
|
|
1137
|
+
const dateParts = parseLegacyDate(dateStr);
|
|
1138
|
+
if (!dateParts) {
|
|
1139
|
+
return null;
|
|
1140
|
+
}
|
|
1141
|
+
const dateTime = new Date(
|
|
1142
|
+
dateParts.year,
|
|
1143
|
+
dateParts.month - 1,
|
|
1144
|
+
dateParts.day,
|
|
1145
|
+
Number.parseInt(hourStr),
|
|
1146
|
+
Number.parseInt(minuteStr),
|
|
1147
|
+
0
|
|
1148
|
+
);
|
|
1149
|
+
return (0, import_date_fns.isValid)(dateTime) ? dateTime : null;
|
|
1150
|
+
}
|
|
1151
|
+
function isTimeConditionDataV2(data) {
|
|
1152
|
+
return data && ("startTime" in data || "endTime" in data);
|
|
1153
|
+
}
|
|
1154
|
+
function isTimeConditionDataLegacy(data) {
|
|
1155
|
+
return data && ("startDate" in data || "startDateHour" in data);
|
|
1156
|
+
}
|
|
1157
|
+
function convertTimeConditionLegacyToV2(legacyData) {
|
|
1107
1158
|
try {
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
return false;
|
|
1159
|
+
if (!hasRequiredFields(legacyData, "start")) {
|
|
1160
|
+
return null;
|
|
1111
1161
|
}
|
|
1112
|
-
const
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
return false;
|
|
1162
|
+
const startDateTime = createLegacyDateTime(legacyData, "start");
|
|
1163
|
+
if (!startDateTime) {
|
|
1164
|
+
return null;
|
|
1116
1165
|
}
|
|
1117
|
-
const
|
|
1118
|
-
|
|
1119
|
-
|
|
1166
|
+
const result = {
|
|
1167
|
+
startTime: startDateTime.toISOString()
|
|
1168
|
+
};
|
|
1169
|
+
if (hasRequiredFields(legacyData, "end")) {
|
|
1170
|
+
const endDateTime = createLegacyDateTime(legacyData, "end");
|
|
1171
|
+
if (endDateTime) {
|
|
1172
|
+
result.endTime = endDateTime.toISOString();
|
|
1173
|
+
}
|
|
1120
1174
|
}
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1175
|
+
return result;
|
|
1176
|
+
} catch {
|
|
1177
|
+
return null;
|
|
1178
|
+
}
|
|
1179
|
+
}
|
|
1180
|
+
function normalizeTimeConditionData(data) {
|
|
1181
|
+
if (!data) {
|
|
1182
|
+
return null;
|
|
1183
|
+
}
|
|
1184
|
+
if (isTimeConditionDataV2(data)) {
|
|
1185
|
+
return data;
|
|
1186
|
+
}
|
|
1187
|
+
if (isTimeConditionDataLegacy(data)) {
|
|
1188
|
+
return convertTimeConditionLegacyToV2(data);
|
|
1189
|
+
}
|
|
1190
|
+
return null;
|
|
1191
|
+
}
|
|
1192
|
+
function evaluateTimeConditionV2(data) {
|
|
1193
|
+
if (!data.startTime) {
|
|
1194
|
+
return false;
|
|
1195
|
+
}
|
|
1196
|
+
const startTime = (0, import_date_fns.parseISO)(data.startTime);
|
|
1197
|
+
if (!(0, import_date_fns.isValid)(startTime)) {
|
|
1198
|
+
return false;
|
|
1199
|
+
}
|
|
1200
|
+
const now = /* @__PURE__ */ new Date();
|
|
1201
|
+
if (!data.endTime) {
|
|
1202
|
+
return (0, import_date_fns.isAfter)(now, startTime);
|
|
1203
|
+
}
|
|
1204
|
+
const endTime = (0, import_date_fns.parseISO)(data.endTime);
|
|
1205
|
+
if (!(0, import_date_fns.isValid)(endTime)) {
|
|
1206
|
+
return false;
|
|
1207
|
+
}
|
|
1208
|
+
return (0, import_date_fns.isAfter)(now, startTime) && (0, import_date_fns.isBefore)(now, endTime);
|
|
1209
|
+
}
|
|
1210
|
+
function evaluateTimeConditionLegacy(data) {
|
|
1211
|
+
if (!hasRequiredFields(data, "start")) {
|
|
1212
|
+
return false;
|
|
1213
|
+
}
|
|
1214
|
+
const startDateTime = createLegacyDateTime(data, "start");
|
|
1215
|
+
if (!startDateTime) {
|
|
1216
|
+
return false;
|
|
1217
|
+
}
|
|
1218
|
+
const now = /* @__PURE__ */ new Date();
|
|
1219
|
+
if (!hasRequiredFields(data, "end")) {
|
|
1220
|
+
return (0, import_date_fns.isAfter)(now, startDateTime);
|
|
1221
|
+
}
|
|
1222
|
+
const endDateTime = createLegacyDateTime(data, "end");
|
|
1223
|
+
if (!endDateTime) {
|
|
1224
|
+
return false;
|
|
1225
|
+
}
|
|
1226
|
+
return (0, import_date_fns.isAfter)(now, startDateTime) && (0, import_date_fns.isBefore)(now, endDateTime);
|
|
1227
|
+
}
|
|
1228
|
+
var evaluateTimeCondition = (rules) => {
|
|
1229
|
+
try {
|
|
1230
|
+
const data = rules.data || {};
|
|
1231
|
+
if (isTimeConditionDataV2(data)) {
|
|
1232
|
+
return evaluateTimeConditionV2(data);
|
|
1233
|
+
}
|
|
1234
|
+
if (isTimeConditionDataLegacy(data)) {
|
|
1235
|
+
return evaluateTimeConditionLegacy(data);
|
|
1125
1236
|
}
|
|
1126
|
-
return
|
|
1237
|
+
return false;
|
|
1127
1238
|
} catch {
|
|
1128
1239
|
return false;
|
|
1129
1240
|
}
|
|
@@ -1189,8 +1300,8 @@ function evaluateStringCondition(logic, actualValue, expectedValue) {
|
|
|
1189
1300
|
case "endsWith":
|
|
1190
1301
|
return stringValue.endsWith(expectedValue);
|
|
1191
1302
|
case "empty": {
|
|
1192
|
-
const
|
|
1193
|
-
return
|
|
1303
|
+
const isEmpty2 = !stringValue || stringValue === "";
|
|
1304
|
+
return isEmpty2;
|
|
1194
1305
|
}
|
|
1195
1306
|
case "any":
|
|
1196
1307
|
return Boolean(stringValue && stringValue !== "");
|
|
@@ -1510,6 +1621,7 @@ var filterNullAttributes = (attributes) => {
|
|
|
1510
1621
|
cn,
|
|
1511
1622
|
conditionsIsSame,
|
|
1512
1623
|
convertSettings,
|
|
1624
|
+
convertTimeConditionLegacyToV2,
|
|
1513
1625
|
convertToCssVars,
|
|
1514
1626
|
cuid,
|
|
1515
1627
|
deepClone,
|
|
@@ -1568,6 +1680,8 @@ var filterNullAttributes = (attributes) => {
|
|
|
1568
1680
|
isPublishedAtLeastOneEnvironment,
|
|
1569
1681
|
isPublishedInAllEnvironments,
|
|
1570
1682
|
isString,
|
|
1683
|
+
isTimeConditionDataLegacy,
|
|
1684
|
+
isTimeConditionDataV2,
|
|
1571
1685
|
isUint8Array,
|
|
1572
1686
|
isUndefined,
|
|
1573
1687
|
isUrl,
|
|
@@ -1577,6 +1691,7 @@ var filterNullAttributes = (attributes) => {
|
|
|
1577
1691
|
nativeForEach,
|
|
1578
1692
|
nativeIndexOf,
|
|
1579
1693
|
navigator,
|
|
1694
|
+
normalizeTimeConditionData,
|
|
1580
1695
|
parseUrlParams,
|
|
1581
1696
|
regenerateConditionIds,
|
|
1582
1697
|
removeAuthToken,
|
package/dist/index.d.cts
CHANGED
|
@@ -11,7 +11,7 @@ export { generateAutoStateColors, hexToHSLString, hexToRGBStr } from './color.cj
|
|
|
11
11
|
export { absoluteUrl, cn, cuid, evalCode, formatDate, getRandomColor, hexToRgb, isDark, uuidV4 } from './helper.cjs';
|
|
12
12
|
export { allConditionsHaveIds, assignConditionIds, conditionsIsSame, evaluateRule, evaluateRulesConditions, filterConditionsByType, isConditionsActived, regenerateConditionIds } from './conditions/condition.cjs';
|
|
13
13
|
export { evaluateUrlCondition, isMatchUrlPattern } from './conditions/url.cjs';
|
|
14
|
-
export { evaluateTimeCondition } from './conditions/time.cjs';
|
|
14
|
+
export { convertTimeConditionLegacyToV2, evaluateTimeCondition, isTimeConditionDataLegacy, isTimeConditionDataV2, normalizeTimeConditionData } from './conditions/time.cjs';
|
|
15
15
|
export { evaluateAttributeCondition } from './conditions/attribute.cjs';
|
|
16
16
|
export { capitalizeFirstLetter, filterNullAttributes, getAttributeType } from './attribute.cjs';
|
|
17
17
|
export { default as isEqual } from 'fast-deep-equal';
|
package/dist/index.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export { generateAutoStateColors, hexToHSLString, hexToRGBStr } from './color.js
|
|
|
11
11
|
export { absoluteUrl, cn, cuid, evalCode, formatDate, getRandomColor, hexToRgb, isDark, uuidV4 } from './helper.js';
|
|
12
12
|
export { allConditionsHaveIds, assignConditionIds, conditionsIsSame, evaluateRule, evaluateRulesConditions, filterConditionsByType, isConditionsActived, regenerateConditionIds } from './conditions/condition.js';
|
|
13
13
|
export { evaluateUrlCondition, isMatchUrlPattern } from './conditions/url.js';
|
|
14
|
-
export { evaluateTimeCondition } from './conditions/time.js';
|
|
14
|
+
export { convertTimeConditionLegacyToV2, evaluateTimeCondition, isTimeConditionDataLegacy, isTimeConditionDataV2, normalizeTimeConditionData } from './conditions/time.js';
|
|
15
15
|
export { evaluateAttributeCondition } from './conditions/attribute.js';
|
|
16
16
|
export { capitalizeFirstLetter, filterNullAttributes, getAttributeType } from './attribute.js';
|
|
17
17
|
export { default as isEqual } from 'fast-deep-equal';
|
package/dist/index.js
CHANGED
|
@@ -20,15 +20,19 @@ import {
|
|
|
20
20
|
isConditionsActived,
|
|
21
21
|
isEqual,
|
|
22
22
|
regenerateConditionIds
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-3UOSPZEP.js";
|
|
24
24
|
import {
|
|
25
25
|
evaluateUrlCondition,
|
|
26
26
|
isMatchUrlPattern
|
|
27
27
|
} from "./chunk-YYIGUZNZ.js";
|
|
28
28
|
import "./chunk-PAESAL23.js";
|
|
29
29
|
import {
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
convertTimeConditionLegacyToV2,
|
|
31
|
+
evaluateTimeCondition,
|
|
32
|
+
isTimeConditionDataLegacy,
|
|
33
|
+
isTimeConditionDataV2,
|
|
34
|
+
normalizeTimeConditionData
|
|
35
|
+
} from "./chunk-JQWKLXW6.js";
|
|
32
36
|
import {
|
|
33
37
|
evaluateAttributeCondition
|
|
34
38
|
} from "./chunk-KYDXF7SU.js";
|
|
@@ -135,6 +139,7 @@ export {
|
|
|
135
139
|
cn,
|
|
136
140
|
conditionsIsSame,
|
|
137
141
|
convertSettings,
|
|
142
|
+
convertTimeConditionLegacyToV2,
|
|
138
143
|
convertToCssVars,
|
|
139
144
|
cuid,
|
|
140
145
|
deepClone,
|
|
@@ -193,6 +198,8 @@ export {
|
|
|
193
198
|
isPublishedAtLeastOneEnvironment,
|
|
194
199
|
isPublishedInAllEnvironments,
|
|
195
200
|
isString,
|
|
201
|
+
isTimeConditionDataLegacy,
|
|
202
|
+
isTimeConditionDataV2,
|
|
196
203
|
isUint8Array,
|
|
197
204
|
isUndefined,
|
|
198
205
|
isUrl,
|
|
@@ -202,6 +209,7 @@ export {
|
|
|
202
209
|
nativeForEach,
|
|
203
210
|
nativeIndexOf,
|
|
204
211
|
navigator,
|
|
212
|
+
normalizeTimeConditionData,
|
|
205
213
|
parseUrlParams,
|
|
206
214
|
regenerateConditionIds,
|
|
207
215
|
removeAuthToken,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@usertour/helpers",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.36",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Utility functions and helpers shared across the UserTour project",
|
|
6
6
|
"homepage": "https://www.usertour.io",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@paralleldrive/cuid2": "^2.2.2",
|
|
32
|
-
"@usertour/types": "^0.0.
|
|
32
|
+
"@usertour/types": "^0.0.26",
|
|
33
33
|
"chroma-js": "^3.1.2",
|
|
34
34
|
"class-variance-authority": "^0.4.0",
|
|
35
35
|
"clsx": "^1.2.1",
|
package/dist/chunk-CEK3SCQO.js
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
// src/conditions/time.ts
|
|
2
|
-
import { isAfter, isBefore, isValid, parseISO } from "date-fns";
|
|
3
|
-
var evaluateTimeCondition = (rules) => {
|
|
4
|
-
try {
|
|
5
|
-
const { endDate, endDateHour, endDateMinute, startDate, startDateHour, startDateMinute } = rules.data || {};
|
|
6
|
-
if (!startDate || !startDateHour || !startDateMinute) {
|
|
7
|
-
return false;
|
|
8
|
-
}
|
|
9
|
-
const startTimeString = `${startDate}T${startDateHour.padStart(2, "0")}:${startDateMinute.padStart(2, "0")}:00`;
|
|
10
|
-
const startTime = parseISO(startTimeString);
|
|
11
|
-
if (!isValid(startTime)) {
|
|
12
|
-
return false;
|
|
13
|
-
}
|
|
14
|
-
const now = /* @__PURE__ */ new Date();
|
|
15
|
-
if (!endDate || !endDateHour || !endDateMinute) {
|
|
16
|
-
return isAfter(now, startTime);
|
|
17
|
-
}
|
|
18
|
-
const endTimeString = `${endDate}T${endDateHour.padStart(2, "0")}:${endDateMinute.padStart(2, "0")}:00`;
|
|
19
|
-
const endTime = parseISO(endTimeString);
|
|
20
|
-
if (!isValid(endTime)) {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
return isAfter(now, startTime) && isBefore(now, endTime);
|
|
24
|
-
} catch {
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
export {
|
|
30
|
-
evaluateTimeCondition
|
|
31
|
-
};
|