@mapvx/web-js 3.6.0-dev.1 → 4.0.0-dev.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +6 -1
  2. package/dist/cjs/index.js +2 -95
  3. package/dist/cjs/index.js.LICENSE.txt +1 -0
  4. package/dist/cjs/index.js.map +1 -1
  5. package/dist/es/controllers/routeController.d.ts.map +1 -1
  6. package/dist/es/controllers/routeController.js +25 -8
  7. package/dist/es/controllers/routeController.js.map +1 -1
  8. package/dist/es/logger/sentry.js +1 -1
  9. package/dist/es/map/liveMapFitTransform.d.ts +11 -5
  10. package/dist/es/map/liveMapFitTransform.d.ts.map +1 -1
  11. package/dist/es/map/liveMapFitTransform.js +28 -19
  12. package/dist/es/map/liveMapFitTransform.js.map +1 -1
  13. package/dist/es/map/map.d.ts.map +1 -1
  14. package/dist/es/map/map.js +3 -6
  15. package/dist/es/map/map.js.map +1 -1
  16. package/dist/umd/index.js +932 -126
  17. package/dist/umd/index.js.map +1 -1
  18. package/dist/umd/styles.css +1 -1
  19. package/dist/umd/styles.css.map +1 -1
  20. package/package.json +7 -4
  21. package/dist/cjs/assets/icons.js +0 -85
  22. package/dist/cjs/assets/icons.js.map +0 -1
  23. package/dist/cjs/config/draco.js +0 -15
  24. package/dist/cjs/config/draco.js.map +0 -1
  25. package/dist/cjs/config/sdkConfig.js +0 -3
  26. package/dist/cjs/config/sdkConfig.js.map +0 -1
  27. package/dist/cjs/controllers/markerLayoutController.js +0 -359
  28. package/dist/cjs/controllers/markerLayoutController.js.map +0 -1
  29. package/dist/cjs/controllers/routeController.js +0 -1549
  30. package/dist/cjs/controllers/routeController.js.map +0 -1
  31. package/dist/cjs/domain/models/_internal.js +0 -14
  32. package/dist/cjs/domain/models/_internal.js.map +0 -1
  33. package/dist/cjs/domain/models/_rtl.js +0 -10
  34. package/dist/cjs/domain/models/_rtl.js.map +0 -1
  35. package/dist/cjs/domain/models/animation.js +0 -64
  36. package/dist/cjs/domain/models/animation.js.map +0 -1
  37. package/dist/cjs/domain/models/banner.js +0 -24
  38. package/dist/cjs/domain/models/banner.js.map +0 -1
  39. package/dist/cjs/domain/models/campaign.js +0 -73
  40. package/dist/cjs/domain/models/campaign.js.map +0 -1
  41. package/dist/cjs/domain/models/categories.js +0 -37
  42. package/dist/cjs/domain/models/categories.js.map +0 -1
  43. package/dist/cjs/domain/models/circle.js +0 -253
  44. package/dist/cjs/domain/models/circle.js.map +0 -1
  45. package/dist/cjs/domain/models/cityFilterOption.js +0 -3
  46. package/dist/cjs/domain/models/cityFilterOption.js.map +0 -1
  47. package/dist/cjs/domain/models/configuration.js +0 -3
  48. package/dist/cjs/domain/models/configuration.js.map +0 -1
  49. package/dist/cjs/domain/models/cssCustomization.js +0 -3
  50. package/dist/cjs/domain/models/cssCustomization.js.map +0 -1
  51. package/dist/cjs/domain/models/fitOptions.js +0 -3
  52. package/dist/cjs/domain/models/fitOptions.js.map +0 -1
  53. package/dist/cjs/domain/models/innerFloors.js +0 -3
  54. package/dist/cjs/domain/models/innerFloors.js.map +0 -1
  55. package/dist/cjs/domain/models/institution.js +0 -45
  56. package/dist/cjs/domain/models/institution.js.map +0 -1
  57. package/dist/cjs/domain/models/latLng.js +0 -3
  58. package/dist/cjs/domain/models/latLng.js.map +0 -1
  59. package/dist/cjs/domain/models/location.js +0 -3
  60. package/dist/cjs/domain/models/location.js.map +0 -1
  61. package/dist/cjs/domain/models/loggeable.js +0 -52
  62. package/dist/cjs/domain/models/loggeable.js.map +0 -1
  63. package/dist/cjs/domain/models/mapCamera.js +0 -3
  64. package/dist/cjs/domain/models/mapCamera.js.map +0 -1
  65. package/dist/cjs/domain/models/mapConfig.js +0 -37
  66. package/dist/cjs/domain/models/mapConfig.js.map +0 -1
  67. package/dist/cjs/domain/models/marker.js +0 -502
  68. package/dist/cjs/domain/models/marker.js.map +0 -1
  69. package/dist/cjs/domain/models/multilanguage.js +0 -17
  70. package/dist/cjs/domain/models/multilanguage.js.map +0 -1
  71. package/dist/cjs/domain/models/openingHours.js +0 -3
  72. package/dist/cjs/domain/models/openingHours.js.map +0 -1
  73. package/dist/cjs/domain/models/place.js +0 -127
  74. package/dist/cjs/domain/models/place.js.map +0 -1
  75. package/dist/cjs/domain/models/platform.js +0 -3
  76. package/dist/cjs/domain/models/platform.js.map +0 -1
  77. package/dist/cjs/domain/models/popover.js +0 -3
  78. package/dist/cjs/domain/models/popover.js.map +0 -1
  79. package/dist/cjs/domain/models/product.js +0 -3
  80. package/dist/cjs/domain/models/product.js.map +0 -1
  81. package/dist/cjs/domain/models/property.js +0 -104
  82. package/dist/cjs/domain/models/property.js.map +0 -1
  83. package/dist/cjs/domain/models/route.js +0 -166
  84. package/dist/cjs/domain/models/route.js.map +0 -1
  85. package/dist/cjs/domain/models/routeConfiguration.js +0 -82
  86. package/dist/cjs/domain/models/routeConfiguration.js.map +0 -1
  87. package/dist/cjs/domain/models/routeInstance.js +0 -30
  88. package/dist/cjs/domain/models/routeInstance.js.map +0 -1
  89. package/dist/cjs/domain/models/routeStyle.js +0 -3
  90. package/dist/cjs/domain/models/routeStyle.js.map +0 -1
  91. package/dist/cjs/domain/models/scene3D.js +0 -3
  92. package/dist/cjs/domain/models/scene3D.js.map +0 -1
  93. package/dist/cjs/domain/models/transport.js +0 -22
  94. package/dist/cjs/domain/models/transport.js.map +0 -1
  95. package/dist/cjs/domain/ports/ICache.js +0 -3
  96. package/dist/cjs/domain/ports/ICache.js.map +0 -1
  97. package/dist/cjs/domain/ports/IHttpClient.js +0 -3
  98. package/dist/cjs/domain/ports/IHttpClient.js.map +0 -1
  99. package/dist/cjs/domain/ports/ILogger.js +0 -23
  100. package/dist/cjs/domain/ports/ILogger.js.map +0 -1
  101. package/dist/cjs/domain/ports/index.js +0 -10
  102. package/dist/cjs/domain/ports/index.js.map +0 -1
  103. package/dist/cjs/infrastructure/cache/CacheManager.js +0 -258
  104. package/dist/cjs/infrastructure/cache/CacheManager.js.map +0 -1
  105. package/dist/cjs/infrastructure/cache/LRUCache.js +0 -153
  106. package/dist/cjs/infrastructure/cache/LRUCache.js.map +0 -1
  107. package/dist/cjs/infrastructure/cache/PersistentCache.js +0 -168
  108. package/dist/cjs/infrastructure/cache/PersistentCache.js.map +0 -1
  109. package/dist/cjs/infrastructure/cache/cacheConfig.js +0 -70
  110. package/dist/cjs/infrastructure/cache/cacheConfig.js.map +0 -1
  111. package/dist/cjs/infrastructure/http/FetchHttpClient.js +0 -75
  112. package/dist/cjs/infrastructure/http/FetchHttpClient.js.map +0 -1
  113. package/dist/cjs/infrastructure/logging/MVXLogger.js +0 -80
  114. package/dist/cjs/infrastructure/logging/MVXLogger.js.map +0 -1
  115. package/dist/cjs/interfaces/cache.js +0 -3
  116. package/dist/cjs/interfaces/cache.js.map +0 -1
  117. package/dist/cjs/interfaces/healthResponse.js +0 -3
  118. package/dist/cjs/interfaces/healthResponse.js.map +0 -1
  119. package/dist/cjs/interfaces/institutionResponse.js +0 -3
  120. package/dist/cjs/interfaces/institutionResponse.js.map +0 -1
  121. package/dist/cjs/interfaces/metadata.js +0 -3
  122. package/dist/cjs/interfaces/metadata.js.map +0 -1
  123. package/dist/cjs/interfaces/placeResponse.js +0 -3
  124. package/dist/cjs/interfaces/placeResponse.js.map +0 -1
  125. package/dist/cjs/interfaces/routeCacheResponse.js +0 -3
  126. package/dist/cjs/interfaces/routeCacheResponse.js.map +0 -1
  127. package/dist/cjs/interfaces/routeResponse.js +0 -3
  128. package/dist/cjs/interfaces/routeResponse.js.map +0 -1
  129. package/dist/cjs/interfaces/styleResponse.js +0 -3
  130. package/dist/cjs/interfaces/styleResponse.js.map +0 -1
  131. package/dist/cjs/logger/logger.js +0 -78
  132. package/dist/cjs/logger/logger.js.map +0 -1
  133. package/dist/cjs/logger/sentry.js +0 -81
  134. package/dist/cjs/logger/sentry.js.map +0 -1
  135. package/dist/cjs/map/fitCamera.js +0 -124
  136. package/dist/cjs/map/fitCamera.js.map +0 -1
  137. package/dist/cjs/map/liveMapFitTransform.js +0 -180
  138. package/dist/cjs/map/liveMapFitTransform.js.map +0 -1
  139. package/dist/cjs/map/map.js +0 -2766
  140. package/dist/cjs/map/map.js.map +0 -1
  141. package/dist/cjs/map/mapInteractionOptions.js +0 -73
  142. package/dist/cjs/map/mapInteractionOptions.js.map +0 -1
  143. package/dist/cjs/map/scene3DController.js +0 -849
  144. package/dist/cjs/map/scene3DController.js.map +0 -1
  145. package/dist/cjs/repository/repository.js +0 -694
  146. package/dist/cjs/repository/repository.js.map +0 -1
  147. package/dist/cjs/repository/requester.js +0 -771
  148. package/dist/cjs/repository/requester.js.map +0 -1
  149. package/dist/cjs/sdk.js +0 -438
  150. package/dist/cjs/sdk.js.map +0 -1
  151. package/dist/cjs/utils/3d.js +0 -245
  152. package/dist/cjs/utils/3d.js.map +0 -1
  153. package/dist/cjs/utils/deckLayers.js +0 -153
  154. package/dist/cjs/utils/deckLayers.js.map +0 -1
  155. package/dist/cjs/utils/error.js +0 -19
  156. package/dist/cjs/utils/error.js.map +0 -1
  157. package/dist/cjs/utils/images.js +0 -25
  158. package/dist/cjs/utils/images.js.map +0 -1
  159. package/dist/cjs/utils/loadGlb.js +0 -190
  160. package/dist/cjs/utils/loadGlb.js.map +0 -1
  161. package/dist/cjs/utils/mapvxHostname.js +0 -21
  162. package/dist/cjs/utils/mapvxHostname.js.map +0 -1
  163. package/dist/cjs/utils/nav-functions.js +0 -150
  164. package/dist/cjs/utils/nav-functions.js.map +0 -1
  165. package/dist/cjs/utils/opening-hours-helper.js +0 -914
  166. package/dist/cjs/utils/opening-hours-helper.js.map +0 -1
  167. package/dist/cjs/utils/preconnect.js +0 -131
  168. package/dist/cjs/utils/preconnect.js.map +0 -1
  169. package/dist/cjs/utils/route-utils.js +0 -57
  170. package/dist/cjs/utils/route-utils.js.map +0 -1
  171. package/dist/cjs/utils/semaphore.js +0 -143
  172. package/dist/cjs/utils/semaphore.js.map +0 -1
  173. package/dist/cjs/utils/three.js +0 -113
  174. package/dist/cjs/utils/three.js.map +0 -1
  175. package/dist/cjs/utils/threeScene.js +0 -126
  176. package/dist/cjs/utils/threeScene.js.map +0 -1
  177. package/dist/cjs/utils/update-css.js +0 -76
  178. package/dist/cjs/utils/update-css.js.map +0 -1
  179. package/dist/cjs/utils/utils.js +0 -104
  180. package/dist/cjs/utils/utils.js.map +0 -1
@@ -1,914 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OpeningHoursHelper = void 0;
4
- exports.is24Hours = is24Hours;
5
- const sdk_1 = require("../sdk");
6
- /**
7
- * Helper class for opening hours.
8
- */
9
- class OpeningHoursHelper {
10
- /**
11
- * Gets the day of the week as a two-character string indicator.
12
- *
13
- * @param date The Date object to extract the day from.
14
- * @returns A `DaysOfTheWeek` string representing the day of the week.
15
- * @example
16
- * ```typescript
17
- * const date = new Date(2024, 0, 1); // Monday
18
- * const day = OpeningHoursHelper.getDay(date);
19
- * console.log(day); // "mo"
20
- * ```
21
- * @default Returns null if an error occurs or invalid date is provided.
22
- */
23
- static getDay(date) {
24
- try {
25
- const dayNumber = date.getDay(); // JavaScript getDay() returns 0-6 (Sun-Sat)
26
- switch (dayNumber) {
27
- case 0:
28
- return "su";
29
- case 1:
30
- return "mo";
31
- case 2:
32
- return "tu";
33
- case 3:
34
- return "we";
35
- case 4:
36
- return "th";
37
- case 5:
38
- return "fr";
39
- case 6:
40
- return "sa";
41
- default:
42
- // This default shouldn't happen. I'll add it just for completeness.
43
- return null;
44
- }
45
- }
46
- catch (_a) {
47
- return null;
48
- }
49
- }
50
- /**
51
- * Converts a 24-hour time format to 12-hour format with AM/PM.
52
- *
53
- * @param time24h The time string in 24-hour format (HH:mm).
54
- * @returns Time formatted in 12-hour format with AM/PM.
55
- * @example
56
- * ```typescript
57
- * const time12h = OpeningHoursHelper.convertSingleTimeTo12Hour("14:30");
58
- * console.log(time12h); // "2:30 p.m."
59
- *
60
- * const morningTime = OpeningHoursHelper.convertSingleTimeTo12Hour("09:00");
61
- * console.log(morningTime); // "9:00 a.m."
62
- * ```
63
- * @default Returns empty string "" if an error occurs or invalid time is provided.
64
- */
65
- static convertSingleTimeTo12Hour(time24h) {
66
- var _a;
67
- try {
68
- if (!time24h || typeof time24h !== "string") {
69
- return "";
70
- }
71
- const [hourStr, minuteStr] = (_a = time24h.split(":")) !== null && _a !== void 0 ? _a : [];
72
- if (!hourStr || !minuteStr) {
73
- return "";
74
- }
75
- const hour = Number.parseInt(hourStr, 10);
76
- const minute = Number.parseInt(minuteStr, 10);
77
- if (Number.isNaN(hour) ||
78
- Number.isNaN(minute) ||
79
- hour < 0 ||
80
- hour > 23 ||
81
- minute < 0 ||
82
- minute > 59) {
83
- return "";
84
- }
85
- let displayHour = hour % 24;
86
- let period;
87
- if (displayHour < 12) {
88
- period = "a.m.";
89
- if (displayHour === 0) {
90
- displayHour = 12;
91
- }
92
- }
93
- else {
94
- period = "p.m.";
95
- if (displayHour !== 12) {
96
- displayHour -= 12;
97
- }
98
- }
99
- return `${displayHour}:${minute < 10 ? "0" : ""}${minute} ${period}`;
100
- }
101
- catch (_b) {
102
- return "";
103
- }
104
- }
105
- /**
106
- * Formats an opening time schedule into a readable string.
107
- *
108
- * @param openingTime The opening time object containing open and close times.
109
- * @returns Formatted time schedule string.
110
- * @example
111
- * ```typescript
112
- * const schedule = { open: "09:00", close: "17:00" };
113
- * const formatted = OpeningHoursHelper.formatTimeSchedule(schedule);
114
- * console.log(formatted); // "9:00 a.m. - 5:00 p.m."
115
- * ```
116
- * @default Returns empty string "" if an error occurs or invalid opening time is provided.
117
- */
118
- static formatTimeSchedule(openingTime) {
119
- try {
120
- if (!openingTime || !openingTime.open || !openingTime.close) {
121
- return "";
122
- }
123
- // Check if it's a 24-hour schedule
124
- if (is24Hours(openingTime)) {
125
- return "24 hrs";
126
- }
127
- const openTime = OpeningHoursHelper.convertSingleTimeTo12Hour(openingTime.open);
128
- const closeTime = OpeningHoursHelper.convertSingleTimeTo12Hour(openingTime.close);
129
- // Check if conversion failed (returned empty string)
130
- if (openTime === "" || closeTime === "") {
131
- return "";
132
- }
133
- return `${openTime} - ${closeTime}`;
134
- }
135
- catch (_a) {
136
- return "";
137
- }
138
- }
139
- /**
140
- * Gets the day number (1-7) for a given day string.
141
- *
142
- * @param day The two-character day string (e.g., "mo", "tu").
143
- * @returns The day number (1-7), or -1 if the day is invalid.
144
- * @example
145
- * ```typescript
146
- * const dayNumber = OpeningHoursHelper.getDayNumber("mo");
147
- * console.log(dayNumber); // 1
148
- *
149
- * const invalidDay = OpeningHoursHelper.getDayNumber("invalid");
150
- * console.log(invalidDay); // -1
151
- * ```
152
- * @default Returns -1 if an error occurs or invalid day string is provided.
153
- */
154
- static getDayNumber(day) {
155
- try {
156
- switch (day) {
157
- case "mo":
158
- return 1;
159
- case "tu":
160
- return 2;
161
- case "we":
162
- return 3;
163
- case "th":
164
- return 4;
165
- case "fr":
166
- return 5;
167
- case "sa":
168
- return 6;
169
- case "su":
170
- return 7;
171
- default:
172
- return -1;
173
- }
174
- }
175
- catch (_a) {
176
- return -1;
177
- }
178
- }
179
- /**
180
- * Gets the full day name (localized) for a given day string.
181
- *
182
- * @param day The two-character day string (e.g., "mo", "tu").
183
- * @returns The localized day name, or an empty string if the day is invalid.
184
- * @example
185
- * ```typescript
186
- * const dayName = OpeningHoursHelper.getDayName("mo");
187
- * console.log(dayName); // "Monday" (or localized equivalent)
188
- *
189
- * const invalidDay = OpeningHoursHelper.getDayName("invalid");
190
- * console.log(invalidDay); // ""
191
- * ```
192
- * @default Returns empty string "" if an error occurs or invalid day string is provided.
193
- */
194
- static getDayName(day) {
195
- try {
196
- const dayNumber = OpeningHoursHelper.getDayNumber(day);
197
- if (dayNumber === -1) {
198
- return "";
199
- }
200
- const date = new Date(2024, 0, dayNumber);
201
- try {
202
- const currentLang = sdk_1.InternalMapVXSDK.getLang();
203
- return date.toLocaleDateString(currentLang, { weekday: "long" });
204
- }
205
- catch (_a) {
206
- // Fallback to English if the language is not valid
207
- return date.toLocaleDateString("en", { weekday: "long" });
208
- }
209
- }
210
- catch (_b) {
211
- return "";
212
- }
213
- }
214
- /**
215
- * Sorts the opening hours object by day of the week.
216
- *
217
- * @param openingHours The opening hours object to sort.
218
- * @returns A new object with the opening hours sorted by day of the week.
219
- * @example
220
- * ```typescript
221
- * const unsortedHours = { fr: [...], mo: [...], we: [...] };
222
- * const sortedHours = OpeningHoursHelper.sortDays(unsortedHours);
223
- * console.log(Object.keys(sortedHours)); // ["mo", "we", "fr"]
224
- * ```
225
- * @default Returns the original openingHours object if an error occurs.
226
- */
227
- static sortDays(openingHours) {
228
- try {
229
- return Object.fromEntries(Object.entries(openingHours).sort(([keyA], [keyB]) => {
230
- const dayNumberA = OpeningHoursHelper.getDayNumber(keyA);
231
- const dayNumberB = OpeningHoursHelper.getDayNumber(keyB);
232
- return dayNumberA - dayNumberB;
233
- }));
234
- }
235
- catch (_a) {
236
- return openingHours;
237
- }
238
- }
239
- /**
240
- * Checks if a store is open from the previous day (for overnight hours).
241
- *
242
- * @param openingHours The opening hours of the store.
243
- * @param currentDate Optional date to check against. If not provided, uses the current date.
244
- * @returns `true` if the store is open from the previous day, `false` otherwise.
245
- * @example
246
- * ```typescript
247
- * const overnightHours = { mo: [{ open: "22:00", close: "06:00" }] };
248
- * const isOpen = OpeningHoursHelper.isOpenFromPreviousDay(overnightHours);
249
- * console.log(isOpen); // true if current time is between 22:00 and 06:00
250
- * ```
251
- * @default Returns `false` if an error occurs or invalid opening hours are provided.
252
- */
253
- static isOpenFromPreviousDay(openingHours, currentDate) {
254
- try {
255
- if (!openingHours || typeof openingHours !== "object") {
256
- return false;
257
- }
258
- const now = currentDate || new Date(); // Gets the current date
259
- const yesterday = new Date(now); // Creates a copy of the current date
260
- OpeningHoursHelper.previousDate(yesterday);
261
- const yesterdayString = OpeningHoursHelper.getDay(yesterday);
262
- if (yesterdayString == null) {
263
- return false;
264
- }
265
- const intervals = openingHours[yesterdayString];
266
- if (!intervals || !Array.isArray(intervals) || intervals.length === 0) {
267
- return false;
268
- }
269
- for (const interval of intervals) {
270
- // Check if it's a 24-hour schedule
271
- if (is24Hours(interval)) {
272
- return true;
273
- }
274
- if ((interval === null || interval === void 0 ? void 0 : interval.open) &&
275
- interval.close &&
276
- OpeningHoursHelper.isValidTime(interval.open) &&
277
- OpeningHoursHelper.isValidTime(interval.close)) {
278
- // Create the date object based on yesterday
279
- const openTime = OpeningHoursHelper.parseTimeAsDate(interval.open, yesterday);
280
- const closeTime = OpeningHoursHelper.parseTimeAsDate(interval.close, yesterday);
281
- if (openTime > closeTime) {
282
- OpeningHoursHelper.nextDate(closeTime);
283
- }
284
- if (now >= openTime && now <= closeTime) {
285
- return true; // The current time is within this interval
286
- }
287
- }
288
- }
289
- return false;
290
- }
291
- catch (_a) {
292
- return false;
293
- }
294
- }
295
- /**
296
- * Modifies the given Date object to represent the previous day.
297
- *
298
- * @param date The Date object to modify. This object will be mutated.
299
- * @returns This function modifies the Date object in place and does not return a value.
300
- * @example
301
- * ```typescript
302
- * const date = new Date(2024, 0, 15); // January 15, 2024
303
- * OpeningHoursHelper.previousDate(date);
304
- * console.log(date.getDate()); // 14
305
- * ```
306
- */
307
- static previousDate(date) {
308
- try {
309
- const day = date.getDate();
310
- date.setDate(day - 1);
311
- }
312
- catch (_a) { }
313
- }
314
- /**
315
- * Modifies the given Date object to represent the next day.
316
- *
317
- * @param date The Date object to modify. This object will be mutated.
318
- * @returns This function modifies the Date object in place and does not return a value.
319
- * @example
320
- * ```typescript
321
- * const date = new Date(2024, 0, 15); // January 15, 2024
322
- * OpeningHoursHelper.nextDate(date);
323
- * console.log(date.getDate()); // 16
324
- * ```
325
- */
326
- static nextDate(date) {
327
- try {
328
- const day = date.getDate();
329
- date.setDate(day + 1);
330
- }
331
- catch (_a) { }
332
- }
333
- /**
334
- * Checks if the current time is within the opening hours defined for the current day.
335
- *
336
- * @param openingHours An object containing the opening hours for each day of the week.
337
- * @param currentDate Optional date to check against. If not provided, uses the current date.
338
- * @returns `true` if the current time is within the opening hours, `false` otherwise.
339
- * @example
340
- * ```typescript
341
- * const hours = { mo: [{ open: "09:00", close: "17:00" }] };
342
- * const isOpen = OpeningHoursHelper.isWithinOpeningHours(hours);
343
- * console.log(isOpen); // true if current time is between 09:00 and 17:00 on Monday
344
- * ```
345
- * @default Returns `false` if an error occurs or invalid opening hours are provided.
346
- */
347
- static isWithinOpeningHours(openingHours, currentDate) {
348
- try {
349
- if (!openingHours || typeof openingHours !== "object") {
350
- return false;
351
- }
352
- const now = currentDate || new Date();
353
- const dayOfWeek = OpeningHoursHelper.getDay(now);
354
- if (dayOfWeek == null) {
355
- return false;
356
- }
357
- if (OpeningHoursHelper.isOpenFromPreviousDay(openingHours, now)) {
358
- return true;
359
- }
360
- const intervals = openingHours[dayOfWeek];
361
- if (!intervals || !Array.isArray(intervals) || intervals.length === 0) {
362
- return false;
363
- }
364
- for (const interval of intervals) {
365
- // Check if it's a 24-hour schedule
366
- if (is24Hours(interval)) {
367
- return true;
368
- }
369
- if ((interval === null || interval === void 0 ? void 0 : interval.open) &&
370
- interval.close &&
371
- OpeningHoursHelper.isValidTime(interval.open) &&
372
- OpeningHoursHelper.isValidTime(interval.close)) {
373
- // Create Date objects based on today
374
- const openTime = OpeningHoursHelper.parseTimeAsDate(interval.open, now);
375
- const closeTime = OpeningHoursHelper.parseTimeAsDate(interval.close, now);
376
- if (openTime >= closeTime) {
377
- OpeningHoursHelper.nextDate(closeTime);
378
- }
379
- if (now >= openTime && now <= closeTime) {
380
- return true;
381
- }
382
- }
383
- }
384
- return false; // The current time is not within any interval
385
- }
386
- catch (_a) {
387
- return false;
388
- }
389
- }
390
- /**
391
- * Checks if there are opening times defined for today.
392
- *
393
- * @param openingHours The opening hours of a store.
394
- * @returns `true` if there are opening times for today, `false` otherwise.
395
- * @example
396
- * ```typescript
397
- * const hours = { mo: [{ open: "09:00", close: "17:00" }] };
398
- * const hasHours = OpeningHoursHelper.hasOpeningHoursToday(hours);
399
- * console.log(hasHours); // true if today is Monday
400
- * ```
401
- * @default Returns `false` if an error occurs or invalid opening hours are provided.
402
- */
403
- static hasOpeningHoursToday(openingHours) {
404
- try {
405
- if (!openingHours || typeof openingHours !== "object") {
406
- return false;
407
- }
408
- const now = new Date();
409
- const day = OpeningHoursHelper.getDay(now);
410
- if (day == null) {
411
- return false;
412
- }
413
- const intervals = openingHours[day];
414
- return !!(intervals === null || intervals === void 0 ? void 0 : intervals.length);
415
- }
416
- catch (_a) {
417
- return false;
418
- }
419
- }
420
- /**
421
- * Checks if a given string is a valid time in HH:mm format.
422
- *
423
- * @param time The string to validate.
424
- * @returns `true` if the string is a valid time, `false` otherwise.
425
- * @example
426
- * ```typescript
427
- * const isValid = OpeningHoursHelper.isValidTime("14:30");
428
- * console.log(isValid); // true
429
- *
430
- * const isInvalid = OpeningHoursHelper.isValidTime("25:00");
431
- * console.log(isInvalid); // false
432
- * ```
433
- * @default Returns `false` if an error occurs or invalid time format is provided.
434
- */
435
- static isValidTime(time) {
436
- try {
437
- if (!time || typeof time !== "string") {
438
- return false;
439
- }
440
- const timeRegex = /^([01][0-9]|2[0-3]):[0-5][0-9]$/; // HH:mm format (requires leading zero)
441
- return timeRegex.test(time);
442
- }
443
- catch (_a) {
444
- return false;
445
- }
446
- }
447
- /**
448
- * Parses a time string (HH:mm) and combines it with a date to create a new Date object.
449
- *
450
- * @param time The time string in HH:mm format (e.g., "14:30").
451
- * @param date An optional Date object to combine with the time. If not provided, the current date is used.
452
- * @returns A new Date object representing the combined date and time.
453
- * @example
454
- * ```typescript
455
- * const date = new Date(2024, 0, 15);
456
- * const timeDate = OpeningHoursHelper.parseTimeAsDate("14:30", date);
457
- * console.log(timeDate); // Date object for January 15, 2024 at 2:30 PM
458
- * ```
459
- * @default Returns current date if an error occurs or invalid time is provided.
460
- */
461
- static parseTimeAsDate(time, date) {
462
- try {
463
- const [hours, minutes] = time.split(":").map(Number);
464
- const baseDate = date ? new Date(date) : new Date();
465
- const newDate = new Date(baseDate.getFullYear(), baseDate.getMonth(), baseDate.getDate(), hours, minutes, 0, 0);
466
- return newDate;
467
- }
468
- catch (_a) {
469
- return new Date();
470
- }
471
- }
472
- /**
473
- * Flattens an array of OpeningTime objects into a single OpeningTime object,
474
- * taking the earliest open time and the latest close time.
475
- *
476
- * @param openingTimes The array of OpeningTime objects to flatten.
477
- * @returns A single OpeningTime object representing the flattened time range.
478
- * @example
479
- * ```typescript
480
- * const times = [
481
- * { open: "09:00", close: "12:00" },
482
- * { open: "14:00", close: "18:00" }
483
- * ];
484
- * const flattened = OpeningHoursHelper.flattenOpeningTimes(times);
485
- * console.log(flattened); // { open: "09:00", close: "18:00" }
486
- * ```
487
- * @default Returns `{ open: "00:00", close: "00:00" }` if an error occurs or invalid array is provided.
488
- */
489
- static flattenOpeningTimes(openingTimes) {
490
- try {
491
- if (!openingTimes || !Array.isArray(openingTimes) || openingTimes.length === 0) {
492
- return { open: "00:00", close: "00:00" };
493
- }
494
- OpeningHoursHelper.sortOpeningTimesByOpen(openingTimes);
495
- const first = openingTimes[0];
496
- const last = openingTimes[openingTimes.length - 1];
497
- if (!first || !last || !first.open || !last.close) {
498
- return { open: "00:00", close: "00:00" };
499
- }
500
- return {
501
- open: first.open,
502
- close: last.close,
503
- };
504
- }
505
- catch (_a) {
506
- return { open: "00:00", close: "00:00" };
507
- }
508
- }
509
- /**
510
- * Sorts a list of OpeningTime objects in place, based on the 'open' property.
511
- *
512
- * This method mutates the array and returns a reference to the same array.
513
- *
514
- * @param openingTimes The array of OpeningTime objects to sort. This array will be mutated.
515
- * @returns The sorted array of OpeningTime objects (mutated in place).
516
- * @example
517
- * ```typescript
518
- * const times = [
519
- * { open: "14:00", close: "18:00" },
520
- * { open: "09:00", close: "12:00" }
521
- * ];
522
- * const sorted = OpeningHoursHelper.sortOpeningTimesByOpen(times);
523
- * console.log(sorted[0].open); // "09:00"
524
- * ```
525
- * @default Returns the original array if an error occurs.
526
- */
527
- static sortOpeningTimesByOpen(openingTimes) {
528
- try {
529
- return openingTimes.sort((a, b) => {
530
- // Compare the 'open' times as strings
531
- return a.open.localeCompare(b.open);
532
- });
533
- }
534
- catch (_a) {
535
- return openingTimes;
536
- }
537
- }
538
- /**
539
- * Formats the opening hours for the current day into a string representation.
540
- *
541
- * @param openingHours The opening hours for the store.
542
- * @returns A string representing the opening hours for the current day, or an empty string if there are no opening hours for today.
543
- * @example
544
- * ```typescript
545
- * const hours = { mo: [{ open: "09:00", close: "17:00" }] };
546
- * const schedule = OpeningHoursHelper.formatCurrentDaySchedule(hours);
547
- * console.log(schedule); // "9:00 a.m. - 5:00 p.m." (if today is Monday)
548
- * ```
549
- * @default Returns empty string "" if an error occurs or no opening hours for today.
550
- */
551
- static formatCurrentDaySchedule(openingHours) {
552
- try {
553
- const now = new Date();
554
- const day = OpeningHoursHelper.getDay(now);
555
- if (day == null) {
556
- return "";
557
- }
558
- const intervals = openingHours[day];
559
- if (intervals === null || intervals === void 0 ? void 0 : intervals.length) {
560
- const flattenedTime = OpeningHoursHelper.flattenOpeningTimes(intervals);
561
- return OpeningHoursHelper.formatTimeSchedule(flattenedTime);
562
- }
563
- else {
564
- return "";
565
- }
566
- }
567
- catch (_a) {
568
- return "";
569
- }
570
- }
571
- /**
572
- * Formats the opening hours for the previous day into a string representation.
573
- *
574
- * @param openingHours The opening hours for the store.
575
- * @returns A string representing the opening hours for the previous day, or an empty string if there are no opening hours for yesterday.
576
- * @example
577
- * ```typescript
578
- * const hours = { su: [{ open: "10:00", close: "15:00" }] };
579
- * const schedule = OpeningHoursHelper.formatPreviousDaySchedule(hours);
580
- * console.log(schedule); // "10:00 a.m. - 3:00 p.m." (if yesterday was Sunday)
581
- * ```
582
- * @default Returns empty string "" if an error occurs or no opening hours for yesterday.
583
- */
584
- static formatPreviousDaySchedule(openingHours) {
585
- try {
586
- const yesterday = new Date();
587
- OpeningHoursHelper.previousDate(yesterday);
588
- const day = OpeningHoursHelper.getDay(yesterday);
589
- if (day == null) {
590
- return "";
591
- }
592
- const intervals = openingHours[day];
593
- if (intervals === null || intervals === void 0 ? void 0 : intervals.length) {
594
- const flattenedTime = OpeningHoursHelper.flattenOpeningTimes(intervals);
595
- return OpeningHoursHelper.formatTimeSchedule(flattenedTime);
596
- }
597
- else {
598
- return "";
599
- }
600
- }
601
- catch (_a) {
602
- return "";
603
- }
604
- }
605
- /**
606
- * Checks if the current time is within the specified opening hours.
607
- *
608
- * @param openHour The opening time in HH:mm format (e.g., "09:00").
609
- * @param closeHour The closing time in HH:mm format (e.g., "18:00").
610
- * @param currentHour The current time in HH:mm format (e.g., "14:30").
611
- * @returns `true` if the current time is within the opening hours, `false` otherwise.
612
- * @example
613
- * ```typescript
614
- * const isWithinHours = OpeningHoursHelper.isValidSchedule("09:00", "17:00", "14:30");
615
- * console.log(isWithinHours); // true
616
- *
617
- * const isOutsideHours = OpeningHoursHelper.isValidSchedule("09:00", "17:00", "20:00");
618
- * console.log(isOutsideHours); // false
619
- * ```
620
- * @default Returns `false` if an error occurs or invalid time format is provided.
621
- */
622
- static isValidSchedule(openHour, closeHour, currentHour) {
623
- try {
624
- if (!OpeningHoursHelper.isValidTime(openHour) ||
625
- !OpeningHoursHelper.isValidTime(closeHour) ||
626
- !OpeningHoursHelper.isValidTime(currentHour)) {
627
- return false;
628
- }
629
- const minutesOpen = OpeningHoursHelper.toMinutes(openHour);
630
- const minutesClose = OpeningHoursHelper.toMinutes(closeHour);
631
- const minutesCurrent = OpeningHoursHelper.toMinutes(currentHour);
632
- return minutesCurrent >= minutesOpen && minutesCurrent <= minutesClose;
633
- }
634
- catch (_a) {
635
- return false;
636
- }
637
- }
638
- /**
639
- * Parses a time string (HH:mm) and creates a Date object for today with that time.
640
- *
641
- * @param time The time string in HH:mm format (e.g., "14:30").
642
- * @param baseDate Optional base date to use. If not provided, uses the current date.
643
- * @returns A Date object representing the date with the specified time.
644
- * @example
645
- * ```typescript
646
- * const timeDate = OpeningHoursHelper.parseTimeToDate("14:30");
647
- * console.log(timeDate); // Date object for today at 2:30 PM
648
- * ```
649
- * @default Returns current date if an error occurs or invalid time is provided.
650
- */
651
- static parseTimeToDate(time, baseDate) {
652
- try {
653
- if (!time || typeof time !== "string") {
654
- return new Date();
655
- }
656
- const [hoursStr, minutesStr] = time.split(":");
657
- if (!hoursStr || !minutesStr) {
658
- return new Date();
659
- }
660
- const hours = Number.parseInt(hoursStr, 10);
661
- const minutes = Number.parseInt(minutesStr, 10);
662
- if (Number.isNaN(hours) || Number.isNaN(minutes)) {
663
- return new Date();
664
- }
665
- const date = baseDate ? new Date(baseDate) : new Date();
666
- date.setHours(hours, minutes, 0, 0);
667
- return date;
668
- }
669
- catch (_a) {
670
- return new Date();
671
- }
672
- }
673
- /**
674
- * Converts an array of day abbreviations to a readable day range string.
675
- *
676
- * @param days An array of day abbreviations (e.g., ["Mo", "Tu", "We"]).
677
- * @returns A string representing the day range (e.g., "Monday - Wednesday" for consecutive days, or just "Monday" for a single day).
678
- * @example
679
- * ```typescript
680
- * const range = OpeningHoursHelper.getDaysRange(["Mo", "Tu", "We"]);
681
- * console.log(range); // "Monday - Wednesday"
682
- *
683
- * const singleDay = OpeningHoursHelper.getDaysRange(["Mo"]);
684
- * console.log(singleDay); // "Monday"
685
- * ```
686
- * @default Returns empty string "" if an error occurs or empty array is provided.
687
- */
688
- static getDaysRange(days) {
689
- try {
690
- const dayMap = {
691
- Mo: "Monday",
692
- Tu: "Tuesday",
693
- We: "Wednesday",
694
- Th: "Thursday",
695
- Fr: "Friday",
696
- Sa: "Saturday",
697
- Su: "Sunday",
698
- };
699
- if (days.length === 0) {
700
- return "";
701
- }
702
- const firstDay = dayMap[days[0]] || "Invalid day";
703
- const lastDay = dayMap[days[days.length - 1]] || "Invalid day";
704
- if (days.length === 1) {
705
- return firstDay;
706
- }
707
- return `${firstDay} - ${lastDay}`;
708
- }
709
- catch (_a) {
710
- return "";
711
- }
712
- }
713
- /**
714
- * Finds the next closest time from an array of time strings relative to the current date.
715
- *
716
- * @param times An array of time strings in HH:mm format (e.g., ["09:00", "14:30", "18:00"]).
717
- * @param currentDate The current date and time to compare against.
718
- * @returns The closest upcoming time string, or empty string if no times are provided.
719
- * @example
720
- * ```typescript
721
- * const times = ["09:00", "12:00", "18:00"];
722
- * const currentTime = new Date(); // Assume it's 10:30 AM
723
- * const nextTime = OpeningHoursHelper.getNextClosestTime(times, currentTime);
724
- * console.log(nextTime); // "12:00"
725
- * ```
726
- * @default Returns empty string "" if an error occurs or no times are provided.
727
- */
728
- static getNextClosestTime(times, currentDate) {
729
- try {
730
- const nowMinutes = currentDate.getHours() * 60 + currentDate.getMinutes();
731
- const timesWithDiffs = times.map((time) => {
732
- const timeMinutes = OpeningHoursHelper.toMinutes(time);
733
- const diff = timeMinutes - nowMinutes + (timeMinutes < nowMinutes ? 24 * 60 : 0);
734
- return { time, diff };
735
- });
736
- timesWithDiffs.sort((a, b) => a.diff - b.diff);
737
- return timesWithDiffs.length > 0 ? timesWithDiffs[0].time : "";
738
- }
739
- catch (_a) {
740
- return "";
741
- }
742
- }
743
- /**
744
- * Checks if a place is currently open based on its opening hours.
745
- *
746
- * @param openingHours An object containing the opening hours for each day of the week.
747
- * @param currentDate Optional date to check against. If not provided, uses the current date.
748
- * @returns `true` if the place is currently open, `false` otherwise.
749
- * @example
750
- * ```typescript
751
- * const hours = { mo: [{ open: "09:00", close: "17:00" }] };
752
- * const isOpen = OpeningHoursHelper.isPlaceOpen(hours);
753
- * console.log(isOpen); // true if current time is between 09:00 and 17:00 on Monday
754
- * ```
755
- * @default Returns `false` if an error occurs or invalid opening hours are provided.
756
- */
757
- static isPlaceOpen(openingHours, currentDate) {
758
- try {
759
- if (!openingHours || typeof openingHours !== "object") {
760
- return false;
761
- }
762
- const date = currentDate || new Date();
763
- const dayName = OpeningHoursHelper.getDay(date);
764
- if (dayName == null ||
765
- !openingHours[dayName] ||
766
- !Array.isArray(openingHours[dayName]) ||
767
- openingHours[dayName].length === 0) {
768
- return false;
769
- }
770
- const daySchedule = openingHours[dayName][0];
771
- if (!daySchedule || !daySchedule.open || !daySchedule.close) {
772
- return false;
773
- }
774
- const startTime = daySchedule.open;
775
- const endTime = daySchedule.close;
776
- if (!OpeningHoursHelper.isValidTime(startTime) || !OpeningHoursHelper.isValidTime(endTime)) {
777
- return false;
778
- }
779
- const startDate = OpeningHoursHelper.parseTimeToDate(startTime, date);
780
- const endDate = OpeningHoursHelper.parseTimeToDate(endTime, date);
781
- if (endDate < startDate) {
782
- endDate.setDate(endDate.getDate() + 1);
783
- }
784
- const time = new Date(date);
785
- time.setSeconds(0, 0);
786
- return time >= startDate && time <= endDate;
787
- }
788
- catch (_a) {
789
- return false;
790
- }
791
- }
792
- /**
793
- * Gets the next schedule time (opening or closing) for a place in 12-hour format.
794
- *
795
- * @param openingHours An object containing the opening hours for each day of the week.
796
- * @param currentDate Optional date to check against. If not provided, uses the current date.
797
- * @returns The next schedule time in 12-hour format (e.g., "9:00 a.m." or "6:00 p.m.").
798
- * @example
799
- * ```typescript
800
- * const hours = { mo: [{ open: "09:00", close: "17:00" }] };
801
- * const nextSchedule = OpeningHoursHelper.getNextSchedule(hours);
802
- * console.log(nextSchedule); // "9:00 a.m." if closed, "5:00 p.m." if open
803
- * ```
804
- * @default Returns "" if an error occurs or invalid opening hours are provided.
805
- */
806
- static getNextSchedule(openingHours, currentDate) {
807
- try {
808
- if (!openingHours || typeof openingHours !== "object") {
809
- return "";
810
- }
811
- const date = currentDate || new Date();
812
- const dayName = OpeningHoursHelper.getDay(date);
813
- if (dayName == null ||
814
- !openingHours[dayName] ||
815
- !Array.isArray(openingHours[dayName]) ||
816
- openingHours[dayName].length === 0) {
817
- return "";
818
- }
819
- const daySchedule = openingHours[dayName][0];
820
- if (!daySchedule || !daySchedule.open || !daySchedule.close) {
821
- return "";
822
- }
823
- const isOpen = OpeningHoursHelper.isPlaceOpen(openingHours, date);
824
- const time = isOpen ? daySchedule.close : daySchedule.open;
825
- if (!time) {
826
- return "";
827
- }
828
- return OpeningHoursHelper.convertSingleTimeTo12Hour(time);
829
- }
830
- catch (_a) {
831
- return "";
832
- }
833
- }
834
- /**
835
- * Checks if a specific day has a schedule defined in the opening hours.
836
- *
837
- * @param openingHours An object containing the opening hours for each day of the week.
838
- * @param currentDate Optional date to check against. If not provided, uses the current date.
839
- * @returns `true` if the day has a schedule defined, `false` otherwise.
840
- * @example
841
- * ```typescript
842
- * const hours = { mo: [{ open: "09:00", close: "17:00" }] };
843
- * const hasSchedule = OpeningHoursHelper.checkDayHasSchedule(hours);
844
- * console.log(hasSchedule); // true if today is Monday
845
- * ```
846
- * @default Returns `false` if an error occurs or invalid opening hours are provided.
847
- */
848
- static checkDayHasSchedule(openingHours, currentDate) {
849
- try {
850
- const date = currentDate || new Date();
851
- const dayName = OpeningHoursHelper.getDay(date);
852
- if (dayName == null) {
853
- return false;
854
- }
855
- return !!(openingHours === null || openingHours === void 0 ? void 0 : openingHours[dayName]);
856
- }
857
- catch (_a) {
858
- return false;
859
- }
860
- }
861
- /**
862
- * Converts a time string (HH:mm) to total minutes since midnight.
863
- *
864
- * @param time The time string in HH:mm format (e.g., "14:30").
865
- * @returns The total number of minutes since midnight (e.g., 870 for "14:30").
866
- * @example
867
- * ```typescript
868
- * const minutes = OpeningHoursHelper.toMinutes("14:30");
869
- * console.log(minutes); // 870
870
- *
871
- * const morningMinutes = OpeningHoursHelper.toMinutes("09:00");
872
- * console.log(morningMinutes); // 540
873
- * ```
874
- * @default Returns 0 if an error occurs or invalid time format is provided.
875
- */
876
- static toMinutes(time) {
877
- try {
878
- if (!time || typeof time !== "string") {
879
- return 0;
880
- }
881
- const [hoursStr, minutesStr] = time.split(":");
882
- if (!hoursStr || !minutesStr) {
883
- return 0;
884
- }
885
- const hours = Number.parseInt(hoursStr, 10);
886
- const minutes = Number.parseInt(minutesStr, 10);
887
- if (Number.isNaN(hours) || Number.isNaN(minutes)) {
888
- return 0;
889
- }
890
- return hours * 60 + minutes;
891
- }
892
- catch (_a) {
893
- return 0;
894
- }
895
- }
896
- }
897
- exports.OpeningHoursHelper = OpeningHoursHelper;
898
- /**
899
- * Checks if an OpeningTime represents a 24-hour schedule (open all day).
900
- *
901
- * @param openingTime The OpeningTime to check.
902
- * @returns `true` if the schedule represents 24 hours, `false` otherwise.
903
- */
904
- function is24Hours(openingTime) {
905
- var _a, _b, _c, _d;
906
- if (!(openingTime === null || openingTime === void 0 ? void 0 : openingTime.open) || !(openingTime === null || openingTime === void 0 ? void 0 : openingTime.close)) {
907
- return false;
908
- }
909
- const open = (_b = (_a = openingTime === null || openingTime === void 0 ? void 0 : openingTime.open) === null || _a === void 0 ? void 0 : _a.trim()) !== null && _b !== void 0 ? _b : "";
910
- const close = (_d = (_c = openingTime === null || openingTime === void 0 ? void 0 : openingTime.close) === null || _c === void 0 ? void 0 : _c.trim()) !== null && _d !== void 0 ? _d : "";
911
- // Check if open is "00:00" and close is "24:00" or "00:00"
912
- return (open === "00:00" && close === "24:00") || (open === "00:00" && close === "00:00");
913
- }
914
- //# sourceMappingURL=opening-hours-helper.js.map