@mapvx/web-js 3.5.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 (182) 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/fitCamera.d.ts +7 -5
  10. package/dist/es/map/fitCamera.d.ts.map +1 -1
  11. package/dist/es/map/fitCamera.js +1 -1
  12. package/dist/es/map/fitCamera.js.map +1 -1
  13. package/dist/es/map/liveMapFitTransform.d.ts +104 -0
  14. package/dist/es/map/liveMapFitTransform.d.ts.map +1 -0
  15. package/dist/es/map/liveMapFitTransform.js +185 -0
  16. package/dist/es/map/liveMapFitTransform.js.map +1 -0
  17. package/dist/es/map/map.d.ts.map +1 -1
  18. package/dist/es/map/map.js +15 -7
  19. package/dist/es/map/map.js.map +1 -1
  20. package/dist/umd/index.js +1133 -117
  21. package/dist/umd/index.js.map +1 -1
  22. package/dist/umd/styles.css +1 -1
  23. package/dist/umd/styles.css.map +1 -1
  24. package/package.json +7 -7
  25. package/dist/cjs/assets/icons.js +0 -85
  26. package/dist/cjs/assets/icons.js.map +0 -1
  27. package/dist/cjs/config/draco.js +0 -15
  28. package/dist/cjs/config/draco.js.map +0 -1
  29. package/dist/cjs/config/sdkConfig.js +0 -3
  30. package/dist/cjs/config/sdkConfig.js.map +0 -1
  31. package/dist/cjs/controllers/markerLayoutController.js +0 -359
  32. package/dist/cjs/controllers/markerLayoutController.js.map +0 -1
  33. package/dist/cjs/controllers/routeController.js +0 -1549
  34. package/dist/cjs/controllers/routeController.js.map +0 -1
  35. package/dist/cjs/domain/models/_internal.js +0 -14
  36. package/dist/cjs/domain/models/_internal.js.map +0 -1
  37. package/dist/cjs/domain/models/_rtl.js +0 -10
  38. package/dist/cjs/domain/models/_rtl.js.map +0 -1
  39. package/dist/cjs/domain/models/animation.js +0 -64
  40. package/dist/cjs/domain/models/animation.js.map +0 -1
  41. package/dist/cjs/domain/models/banner.js +0 -24
  42. package/dist/cjs/domain/models/banner.js.map +0 -1
  43. package/dist/cjs/domain/models/campaign.js +0 -73
  44. package/dist/cjs/domain/models/campaign.js.map +0 -1
  45. package/dist/cjs/domain/models/categories.js +0 -37
  46. package/dist/cjs/domain/models/categories.js.map +0 -1
  47. package/dist/cjs/domain/models/circle.js +0 -253
  48. package/dist/cjs/domain/models/circle.js.map +0 -1
  49. package/dist/cjs/domain/models/cityFilterOption.js +0 -3
  50. package/dist/cjs/domain/models/cityFilterOption.js.map +0 -1
  51. package/dist/cjs/domain/models/configuration.js +0 -3
  52. package/dist/cjs/domain/models/configuration.js.map +0 -1
  53. package/dist/cjs/domain/models/cssCustomization.js +0 -3
  54. package/dist/cjs/domain/models/cssCustomization.js.map +0 -1
  55. package/dist/cjs/domain/models/fitOptions.js +0 -3
  56. package/dist/cjs/domain/models/fitOptions.js.map +0 -1
  57. package/dist/cjs/domain/models/innerFloors.js +0 -3
  58. package/dist/cjs/domain/models/innerFloors.js.map +0 -1
  59. package/dist/cjs/domain/models/institution.js +0 -45
  60. package/dist/cjs/domain/models/institution.js.map +0 -1
  61. package/dist/cjs/domain/models/latLng.js +0 -3
  62. package/dist/cjs/domain/models/latLng.js.map +0 -1
  63. package/dist/cjs/domain/models/location.js +0 -3
  64. package/dist/cjs/domain/models/location.js.map +0 -1
  65. package/dist/cjs/domain/models/loggeable.js +0 -52
  66. package/dist/cjs/domain/models/loggeable.js.map +0 -1
  67. package/dist/cjs/domain/models/mapCamera.js +0 -3
  68. package/dist/cjs/domain/models/mapCamera.js.map +0 -1
  69. package/dist/cjs/domain/models/mapConfig.js +0 -37
  70. package/dist/cjs/domain/models/mapConfig.js.map +0 -1
  71. package/dist/cjs/domain/models/marker.js +0 -502
  72. package/dist/cjs/domain/models/marker.js.map +0 -1
  73. package/dist/cjs/domain/models/multilanguage.js +0 -17
  74. package/dist/cjs/domain/models/multilanguage.js.map +0 -1
  75. package/dist/cjs/domain/models/openingHours.js +0 -3
  76. package/dist/cjs/domain/models/openingHours.js.map +0 -1
  77. package/dist/cjs/domain/models/place.js +0 -127
  78. package/dist/cjs/domain/models/place.js.map +0 -1
  79. package/dist/cjs/domain/models/platform.js +0 -3
  80. package/dist/cjs/domain/models/platform.js.map +0 -1
  81. package/dist/cjs/domain/models/popover.js +0 -3
  82. package/dist/cjs/domain/models/popover.js.map +0 -1
  83. package/dist/cjs/domain/models/product.js +0 -3
  84. package/dist/cjs/domain/models/product.js.map +0 -1
  85. package/dist/cjs/domain/models/property.js +0 -104
  86. package/dist/cjs/domain/models/property.js.map +0 -1
  87. package/dist/cjs/domain/models/route.js +0 -166
  88. package/dist/cjs/domain/models/route.js.map +0 -1
  89. package/dist/cjs/domain/models/routeConfiguration.js +0 -82
  90. package/dist/cjs/domain/models/routeConfiguration.js.map +0 -1
  91. package/dist/cjs/domain/models/routeInstance.js +0 -30
  92. package/dist/cjs/domain/models/routeInstance.js.map +0 -1
  93. package/dist/cjs/domain/models/routeStyle.js +0 -3
  94. package/dist/cjs/domain/models/routeStyle.js.map +0 -1
  95. package/dist/cjs/domain/models/scene3D.js +0 -3
  96. package/dist/cjs/domain/models/scene3D.js.map +0 -1
  97. package/dist/cjs/domain/models/transport.js +0 -22
  98. package/dist/cjs/domain/models/transport.js.map +0 -1
  99. package/dist/cjs/domain/ports/ICache.js +0 -3
  100. package/dist/cjs/domain/ports/ICache.js.map +0 -1
  101. package/dist/cjs/domain/ports/IHttpClient.js +0 -3
  102. package/dist/cjs/domain/ports/IHttpClient.js.map +0 -1
  103. package/dist/cjs/domain/ports/ILogger.js +0 -23
  104. package/dist/cjs/domain/ports/ILogger.js.map +0 -1
  105. package/dist/cjs/domain/ports/index.js +0 -10
  106. package/dist/cjs/domain/ports/index.js.map +0 -1
  107. package/dist/cjs/infrastructure/cache/CacheManager.js +0 -258
  108. package/dist/cjs/infrastructure/cache/CacheManager.js.map +0 -1
  109. package/dist/cjs/infrastructure/cache/LRUCache.js +0 -153
  110. package/dist/cjs/infrastructure/cache/LRUCache.js.map +0 -1
  111. package/dist/cjs/infrastructure/cache/PersistentCache.js +0 -168
  112. package/dist/cjs/infrastructure/cache/PersistentCache.js.map +0 -1
  113. package/dist/cjs/infrastructure/cache/cacheConfig.js +0 -70
  114. package/dist/cjs/infrastructure/cache/cacheConfig.js.map +0 -1
  115. package/dist/cjs/infrastructure/http/FetchHttpClient.js +0 -75
  116. package/dist/cjs/infrastructure/http/FetchHttpClient.js.map +0 -1
  117. package/dist/cjs/infrastructure/logging/MVXLogger.js +0 -80
  118. package/dist/cjs/infrastructure/logging/MVXLogger.js.map +0 -1
  119. package/dist/cjs/interfaces/cache.js +0 -3
  120. package/dist/cjs/interfaces/cache.js.map +0 -1
  121. package/dist/cjs/interfaces/healthResponse.js +0 -3
  122. package/dist/cjs/interfaces/healthResponse.js.map +0 -1
  123. package/dist/cjs/interfaces/institutionResponse.js +0 -3
  124. package/dist/cjs/interfaces/institutionResponse.js.map +0 -1
  125. package/dist/cjs/interfaces/metadata.js +0 -3
  126. package/dist/cjs/interfaces/metadata.js.map +0 -1
  127. package/dist/cjs/interfaces/placeResponse.js +0 -3
  128. package/dist/cjs/interfaces/placeResponse.js.map +0 -1
  129. package/dist/cjs/interfaces/routeCacheResponse.js +0 -3
  130. package/dist/cjs/interfaces/routeCacheResponse.js.map +0 -1
  131. package/dist/cjs/interfaces/routeResponse.js +0 -3
  132. package/dist/cjs/interfaces/routeResponse.js.map +0 -1
  133. package/dist/cjs/interfaces/styleResponse.js +0 -3
  134. package/dist/cjs/interfaces/styleResponse.js.map +0 -1
  135. package/dist/cjs/logger/logger.js +0 -78
  136. package/dist/cjs/logger/logger.js.map +0 -1
  137. package/dist/cjs/logger/sentry.js +0 -81
  138. package/dist/cjs/logger/sentry.js.map +0 -1
  139. package/dist/cjs/map/fitCamera.js +0 -124
  140. package/dist/cjs/map/fitCamera.js.map +0 -1
  141. package/dist/cjs/map/map.js +0 -2755
  142. package/dist/cjs/map/map.js.map +0 -1
  143. package/dist/cjs/map/mapInteractionOptions.js +0 -73
  144. package/dist/cjs/map/mapInteractionOptions.js.map +0 -1
  145. package/dist/cjs/map/scene3DController.js +0 -849
  146. package/dist/cjs/map/scene3DController.js.map +0 -1
  147. package/dist/cjs/repository/repository.js +0 -694
  148. package/dist/cjs/repository/repository.js.map +0 -1
  149. package/dist/cjs/repository/requester.js +0 -771
  150. package/dist/cjs/repository/requester.js.map +0 -1
  151. package/dist/cjs/sdk.js +0 -438
  152. package/dist/cjs/sdk.js.map +0 -1
  153. package/dist/cjs/utils/3d.js +0 -245
  154. package/dist/cjs/utils/3d.js.map +0 -1
  155. package/dist/cjs/utils/deckLayers.js +0 -153
  156. package/dist/cjs/utils/deckLayers.js.map +0 -1
  157. package/dist/cjs/utils/error.js +0 -19
  158. package/dist/cjs/utils/error.js.map +0 -1
  159. package/dist/cjs/utils/images.js +0 -25
  160. package/dist/cjs/utils/images.js.map +0 -1
  161. package/dist/cjs/utils/loadGlb.js +0 -190
  162. package/dist/cjs/utils/loadGlb.js.map +0 -1
  163. package/dist/cjs/utils/mapvxHostname.js +0 -21
  164. package/dist/cjs/utils/mapvxHostname.js.map +0 -1
  165. package/dist/cjs/utils/nav-functions.js +0 -150
  166. package/dist/cjs/utils/nav-functions.js.map +0 -1
  167. package/dist/cjs/utils/opening-hours-helper.js +0 -914
  168. package/dist/cjs/utils/opening-hours-helper.js.map +0 -1
  169. package/dist/cjs/utils/preconnect.js +0 -131
  170. package/dist/cjs/utils/preconnect.js.map +0 -1
  171. package/dist/cjs/utils/route-utils.js +0 -57
  172. package/dist/cjs/utils/route-utils.js.map +0 -1
  173. package/dist/cjs/utils/semaphore.js +0 -143
  174. package/dist/cjs/utils/semaphore.js.map +0 -1
  175. package/dist/cjs/utils/three.js +0 -113
  176. package/dist/cjs/utils/three.js.map +0 -1
  177. package/dist/cjs/utils/threeScene.js +0 -126
  178. package/dist/cjs/utils/threeScene.js.map +0 -1
  179. package/dist/cjs/utils/update-css.js +0 -76
  180. package/dist/cjs/utils/update-css.js.map +0 -1
  181. package/dist/cjs/utils/utils.js +0 -104
  182. package/dist/cjs/utils/utils.js.map +0 -1
@@ -1,258 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CacheManager = void 0;
4
- const cacheConfig_1 = require("./cacheConfig");
5
- const LRUCache_1 = require("./LRUCache");
6
- const PersistentCache_1 = require("./PersistentCache");
7
- const place_1 = require("../../domain/models/place");
8
- /**
9
- * Per-type revivers restoring class prototypes lost when the persistent cache
10
- * rehydrates values from localStorage (`JSON.parse` yields plain objects without
11
- * methods). Only caches that hold class instances need an entry; plain-data caches
12
- * (routes, configurations, etc.) are left untouched.
13
- */
14
- const CACHE_DESERIALIZERS = {
15
- // `places` stores MVXPlace instances.
16
- places: (value) => place_1.MVXPlace.fromCache(value),
17
- // `subPlaces` stores a DataSnapshot wrapping an MVXPlace[].
18
- subPlaces: (value) => {
19
- const snapshot = value;
20
- if (!snapshot || !Array.isArray(snapshot.data))
21
- return value;
22
- return Object.assign(Object.assign({}, snapshot), { data: snapshot.data.map((place) => place_1.MVXPlace.fromCache(place)) });
23
- },
24
- };
25
- /**
26
- * CacheManager - Facade for managing multiple typed caches
27
- *
28
- * Replaces the old Cache singleton with a more flexible, configurable system.
29
- * Supports:
30
- * - Multiple cache types (places, routes, configurations, etc.)
31
- * - Language-aware caching
32
- * - Optional localStorage persistence
33
- * - Configurable limits and TTL per cache type
34
- *
35
- * @group Configuration
36
- *
37
- * @example
38
- * ```typescript
39
- * const cacheManager = new CacheManager({
40
- * persistent: true,
41
- * maxStorageBytes: 5 * 1024 * 1024,
42
- * configs: {
43
- * places: { maxItems: 1000, ttlMs: 60000 }
44
- * }
45
- * })
46
- *
47
- * cacheManager.setPlace("place-1", "en", placeData)
48
- * const place = cacheManager.getPlace("place-1", "en")
49
- * ```
50
- */
51
- class CacheManager {
52
- constructor(config) {
53
- var _a, _b, _c;
54
- this.caches = new Map();
55
- this.persistent = (_a = config === null || config === void 0 ? void 0 : config.persistent) !== null && _a !== void 0 ? _a : false;
56
- this.maxStorageBytes = (_b = config === null || config === void 0 ? void 0 : config.maxStorageBytes) !== null && _b !== void 0 ? _b : cacheConfig_1.DEFAULT_MAX_STORAGE_BYTES;
57
- // Initialize all cache types
58
- const cacheTypes = [
59
- "places",
60
- "routes",
61
- "accessibleRoutes",
62
- "configurations",
63
- "categories",
64
- "vehicles",
65
- "stops",
66
- "subPlaces",
67
- ];
68
- for (const cacheType of cacheTypes) {
69
- const cacheConfig = (0, cacheConfig_1.getCacheConfig)(cacheType, (_c = config === null || config === void 0 ? void 0 : config.configs) === null || _c === void 0 ? void 0 : _c[cacheType]);
70
- this.caches.set(cacheType, this.createCache(cacheConfig, CACHE_DESERIALIZERS[cacheType]));
71
- }
72
- }
73
- /**
74
- * Creates a cache instance based on persistence configuration.
75
- *
76
- * @param config - Per-type cache configuration.
77
- * @param deserialize - Optional reviver forwarded to the persistent cache to
78
- * rebuild class prototypes when values are rehydrated from localStorage.
79
- */
80
- createCache(config, deserialize) {
81
- if (this.persistent && config.persistenceKey) {
82
- return new PersistentCache_1.PersistentCache(config, this.maxStorageBytes, deserialize);
83
- }
84
- return new LRUCache_1.LRUCache(config);
85
- }
86
- /**
87
- * Generates a language-aware cache key
88
- */
89
- makeKey(id, lang) {
90
- return `${id}_${lang}`;
91
- }
92
- /**
93
- * Generates a composite key for configurations
94
- */
95
- makeConfigKey(placeId, product, lang) {
96
- return `${placeId || "default"}_${product || "default"}_${lang}`;
97
- }
98
- // ==================== Places ====================
99
- getPlace(id, lang) {
100
- const cache = this.caches.get("places");
101
- return cache.get(this.makeKey(id, lang));
102
- }
103
- /**
104
- * Stores a place in cache
105
- * @param id - Place ID
106
- * @param value - Place data
107
- * @param lang - Language code
108
- */
109
- setPlace(id, value, lang) {
110
- const cache = this.caches.get("places");
111
- cache.set(this.makeKey(id, lang), value);
112
- }
113
- hasPlace(id, lang) {
114
- const cache = this.caches.get("places");
115
- return cache.has(this.makeKey(id, lang));
116
- }
117
- // ==================== Routes ====================
118
- getRoute(destinationId) {
119
- const cache = this.caches.get("routes");
120
- return cache.get(destinationId);
121
- }
122
- setRoute(destinationId, value) {
123
- const cache = this.caches.get("routes");
124
- cache.set(destinationId, value);
125
- }
126
- cleanRoutesCache() {
127
- this.caches.get("routes").clear();
128
- }
129
- // ==================== Accessible Routes ====================
130
- getAccessibleRoute(destinationId) {
131
- const cache = this.caches.get("accessibleRoutes");
132
- return cache.get(destinationId);
133
- }
134
- setAccessibleRoute(destinationId, value) {
135
- const cache = this.caches.get("accessibleRoutes");
136
- cache.set(destinationId, value);
137
- }
138
- cleanAccessibleRoutesCache() {
139
- this.caches.get("accessibleRoutes").clear();
140
- }
141
- // ==================== Configurations ====================
142
- getConfiguration(placeId, product, lang) {
143
- const cache = this.caches.get("configurations");
144
- return cache.get(this.makeConfigKey(placeId, product, lang));
145
- }
146
- setConfiguration(placeId, product, lang, value) {
147
- const cache = this.caches.get("configurations");
148
- cache.set(this.makeConfigKey(placeId, product, lang), value);
149
- }
150
- // ==================== Categories ====================
151
- getCategories(placeId, lang) {
152
- const cache = this.caches.get("categories");
153
- return cache.get(this.makeKey(placeId || "default", lang));
154
- }
155
- setCategories(placeId, lang, value) {
156
- const cache = this.caches.get("categories");
157
- cache.set(this.makeKey(placeId || "default", lang), value);
158
- }
159
- // ==================== Vehicles ====================
160
- getVehicle(id, lang) {
161
- const cache = this.caches.get("vehicles");
162
- return cache.get(this.makeKey(id, lang));
163
- }
164
- /**
165
- * Stores a vehicle in cache
166
- * @param id - Stop ID
167
- * @param value - Vehicle data (can be DataSnapshot for backward compatibility)
168
- * @param lang - Language code
169
- */
170
- setVehicle(id, value, lang) {
171
- const cache = this.caches.get("vehicles");
172
- cache.set(this.makeKey(id, lang), value);
173
- }
174
- // ==================== Stops ====================
175
- getStops(id, lang) {
176
- const cache = this.caches.get("stops");
177
- return cache.get(this.makeKey(id, lang));
178
- }
179
- /**
180
- * Stores stops in cache
181
- * @param id - Combined stop+vehicle ID
182
- * @param value - Stops data (can be DataSnapshot for backward compatibility)
183
- * @param lang - Language code
184
- */
185
- setStops(id, value, lang) {
186
- const cache = this.caches.get("stops");
187
- cache.set(this.makeKey(id, lang), value);
188
- }
189
- // ==================== SubPlaces ====================
190
- getSubPlaces(parentPlaceId, lang) {
191
- const cache = this.caches.get("subPlaces");
192
- return cache.get(this.makeKey(parentPlaceId, lang));
193
- }
194
- /**
195
- * Stores subplaces in cache
196
- * @param parentPlaceId - Parent place ID
197
- * @param lang - Language code
198
- * @param value - SubPlaces data (can be DataSnapshot for backward compatibility)
199
- */
200
- setSubPlaces(parentPlaceId, lang, value) {
201
- const cache = this.caches.get("subPlaces");
202
- cache.set(this.makeKey(parentPlaceId, lang), value);
203
- }
204
- // ==================== Global Operations ====================
205
- /**
206
- * Clears all caches
207
- */
208
- cleanAllCache() {
209
- for (const cache of this.caches.values()) {
210
- cache.clear();
211
- }
212
- }
213
- /**
214
- * Clears all entries for a specific language across all language-aware caches
215
- */
216
- cleanLanguageCache(lang) {
217
- const languageAwareCaches = [
218
- "places",
219
- "configurations",
220
- "categories",
221
- "vehicles",
222
- "stops",
223
- "subPlaces",
224
- ];
225
- const suffix = `_${lang}`;
226
- for (const cacheType of languageAwareCaches) {
227
- const cache = this.caches.get(cacheType);
228
- const keys = cache.keys();
229
- for (const key of keys) {
230
- if (key.endsWith(suffix)) {
231
- cache.delete(key);
232
- }
233
- }
234
- }
235
- }
236
- /**
237
- * Gets statistics for a specific cache type
238
- */
239
- getCacheStats(cacheType) {
240
- const cache = this.caches.get(cacheType);
241
- if (!cache) {
242
- return { size: 0, maxItems: 0 };
243
- }
244
- return cache.getStats();
245
- }
246
- /**
247
- * Gets statistics for all caches
248
- */
249
- getAllCacheStats() {
250
- const stats = {};
251
- for (const [cacheType, cache] of this.caches) {
252
- stats[cacheType] = cache.getStats();
253
- }
254
- return stats;
255
- }
256
- }
257
- exports.CacheManager = CacheManager;
258
- //# sourceMappingURL=CacheManager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CacheManager.js","sourceRoot":"","sources":["../../../../src/infrastructure/cache/CacheManager.ts"],"names":[],"mappings":"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"}
@@ -1,153 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LRUCache = void 0;
4
- /**
5
- * LRU (Least Recently Used) Cache implementation
6
- * Implements the ICache interface with:
7
- * - Configurable capacity limits
8
- * - TTL-based expiration
9
- * - LRU eviction policy
10
- * - Hit rate tracking
11
- *
12
- * @typeParam T - The type of values stored in the cache
13
- * @group Configuration
14
- *
15
- * @example
16
- * ```typescript
17
- * const cache = new LRUCache<string>({ maxItems: 100, ttlMs: 60000 })
18
- * cache.set("key1", "value1")
19
- * const value = cache.get("key1") // "value1"
20
- * ```
21
- */
22
- class LRUCache {
23
- constructor(config) {
24
- // Hit rate tracking
25
- this.hits = 0;
26
- this.misses = 0;
27
- // Monotonic counter for LRU ordering (avoids issues with same-millisecond operations)
28
- this.accessCounter = 0;
29
- this.cache = new Map();
30
- this.maxItems = config.maxItems;
31
- this.ttlMs = config.ttlMs;
32
- }
33
- /**
34
- * Retrieves a value from the cache
35
- * Updates access time for LRU tracking
36
- * Returns undefined if key doesn't exist or is expired
37
- */
38
- get(key) {
39
- const entry = this.cache.get(key);
40
- if (!entry) {
41
- this.misses++;
42
- return undefined;
43
- }
44
- // Check TTL expiration (skip if ttlMs is 0)
45
- if (this.ttlMs > 0 && this.isExpired(entry)) {
46
- this.cache.delete(key);
47
- this.misses++;
48
- return undefined;
49
- }
50
- // Update access time for LRU (using monotonic counter)
51
- entry.accessTime = ++this.accessCounter;
52
- this.hits++;
53
- return entry.value;
54
- }
55
- /**
56
- * Stores a value in the cache
57
- * Evicts LRU item if at capacity
58
- * Refreshes TTL for existing keys
59
- */
60
- set(key, value) {
61
- const now = Date.now();
62
- const accessTime = ++this.accessCounter;
63
- // If key already exists, update it (no eviction needed)
64
- if (this.cache.has(key)) {
65
- this.cache.set(key, {
66
- value,
67
- timestamp: now,
68
- accessTime,
69
- });
70
- return;
71
- }
72
- // Evict if at capacity
73
- if (this.cache.size >= this.maxItems) {
74
- this.evictLRU();
75
- }
76
- this.cache.set(key, {
77
- value,
78
- timestamp: now,
79
- accessTime,
80
- });
81
- }
82
- /**
83
- * Checks if a key exists and is not expired
84
- */
85
- has(key) {
86
- const entry = this.cache.get(key);
87
- if (!entry) {
88
- return false;
89
- }
90
- // Check TTL expiration
91
- if (this.ttlMs > 0 && this.isExpired(entry)) {
92
- this.cache.delete(key);
93
- return false;
94
- }
95
- return true;
96
- }
97
- /**
98
- * Removes a specific key from the cache
99
- */
100
- delete(key) {
101
- return this.cache.delete(key);
102
- }
103
- /**
104
- * Removes all entries from the cache
105
- */
106
- clear() {
107
- this.cache.clear();
108
- this.hits = 0;
109
- this.misses = 0;
110
- }
111
- /**
112
- * Returns all keys in the cache
113
- */
114
- keys() {
115
- return Array.from(this.cache.keys());
116
- }
117
- /**
118
- * Returns cache statistics
119
- */
120
- getStats() {
121
- const totalRequests = this.hits + this.misses;
122
- const hitRate = totalRequests > 0 ? (this.hits / totalRequests) * 100 : undefined;
123
- return {
124
- size: this.cache.size,
125
- maxItems: this.maxItems,
126
- hitRate,
127
- };
128
- }
129
- /**
130
- * Checks if an entry has expired based on TTL
131
- */
132
- isExpired(entry) {
133
- return Date.now() - entry.timestamp > this.ttlMs;
134
- }
135
- /**
136
- * Evicts the least recently used item from the cache
137
- */
138
- evictLRU() {
139
- let oldestKey = null;
140
- let oldestAccessTime = Infinity;
141
- for (const [key, entry] of this.cache) {
142
- if (entry.accessTime < oldestAccessTime) {
143
- oldestAccessTime = entry.accessTime;
144
- oldestKey = key;
145
- }
146
- }
147
- if (oldestKey !== null) {
148
- this.cache.delete(oldestKey);
149
- }
150
- }
151
- }
152
- exports.LRUCache = LRUCache;
153
- //# sourceMappingURL=LRUCache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LRUCache.js","sourceRoot":"","sources":["../../../../src/infrastructure/cache/LRUCache.ts"],"names":[],"mappings":"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"}
@@ -1,168 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PersistentCache = void 0;
4
- const cacheConfig_1 = require("./cacheConfig");
5
- const LRUCache_1 = require("./LRUCache");
6
- /**
7
- * Persistent Cache implementation (Decorator pattern)
8
- * Wraps LRUCache with localStorage persistence.
9
- *
10
- * Features:
11
- * - Automatic save to localStorage on modifications
12
- * - Hydration from localStorage on initialization
13
- * - Graceful degradation when localStorage unavailable
14
- * - Storage quota management
15
- * - Expired items filtered during hydration
16
- *
17
- * @typeParam T - The type of values stored in the cache
18
- * @group Configuration
19
- *
20
- * @example
21
- * ```typescript
22
- * const cache = new PersistentCache<string>({
23
- * maxItems: 100,
24
- * ttlMs: 60000,
25
- * persistenceKey: "my_cache"
26
- * })
27
- * cache.set("key1", "value1") // Saved to memory and localStorage
28
- * ```
29
- */
30
- class PersistentCache {
31
- /**
32
- * @param config - Cache configuration (limits, TTL, persistence key).
33
- * @param maxStorageBytes - Optional per-cache localStorage budget.
34
- * @param deserialize - Optional reviver applied to each value read back from
35
- * localStorage. `JSON.parse` strips class prototypes, so values that carry
36
- * methods (e.g. `MVXPlace`) must be rebuilt here; plain-data caches omit it.
37
- */
38
- constructor(config, maxStorageBytes, deserialize) {
39
- this.storageAvailable = true;
40
- this.lruCache = new LRUCache_1.LRUCache(config);
41
- this.persistenceKey = config.persistenceKey || "mvx_cache";
42
- this.maxStorageBytes = maxStorageBytes !== null && maxStorageBytes !== void 0 ? maxStorageBytes : cacheConfig_1.DEFAULT_MAX_STORAGE_BYTES;
43
- this.ttlMs = config.ttlMs;
44
- this.deserialize = deserialize;
45
- this.hydrate();
46
- }
47
- get(key) {
48
- return this.lruCache.get(key);
49
- }
50
- set(key, value) {
51
- this.lruCache.set(key, value);
52
- this.persist();
53
- }
54
- has(key) {
55
- return this.lruCache.has(key);
56
- }
57
- delete(key) {
58
- const result = this.lruCache.delete(key);
59
- if (result) {
60
- this.persist();
61
- }
62
- return result;
63
- }
64
- clear() {
65
- this.lruCache.clear();
66
- this.removeFromStorage();
67
- }
68
- keys() {
69
- return this.lruCache.keys();
70
- }
71
- getStats() {
72
- return this.lruCache.getStats();
73
- }
74
- /**
75
- * Loads cache data from localStorage on initialization
76
- */
77
- hydrate() {
78
- if (!this.isStorageAvailable()) {
79
- this.storageAvailable = false;
80
- return;
81
- }
82
- try {
83
- const stored = localStorage.getItem(this.persistenceKey);
84
- if (!stored)
85
- return;
86
- const data = JSON.parse(stored);
87
- if (!data.entries || !Array.isArray(data.entries)) {
88
- return;
89
- }
90
- const now = Date.now();
91
- for (const entry of data.entries) {
92
- // Skip expired entries (if TTL is configured)
93
- if (this.ttlMs > 0 && now - entry.timestamp > this.ttlMs) {
94
- continue;
95
- }
96
- // Restore to LRU cache, reviving class prototypes stripped by JSON when needed.
97
- this.lruCache.set(entry.key, this.deserialize ? this.deserialize(entry.value) : entry.value);
98
- }
99
- }
100
- catch (_a) {
101
- // Corrupted data or storage error - start with empty cache
102
- this.storageAvailable = this.isStorageAvailable();
103
- }
104
- }
105
- /**
106
- * Saves current cache state to localStorage
107
- */
108
- persist() {
109
- if (!this.storageAvailable)
110
- return;
111
- try {
112
- const entries = [];
113
- const keys = this.lruCache.keys();
114
- for (const key of keys) {
115
- const value = this.lruCache.get(key);
116
- if (value !== undefined) {
117
- entries.push({
118
- key,
119
- value,
120
- timestamp: Date.now(),
121
- accessTime: Date.now(),
122
- });
123
- }
124
- }
125
- const data = { entries };
126
- const serialized = JSON.stringify(data);
127
- // Check storage quota
128
- if (serialized.length > this.maxStorageBytes) {
129
- // Skip persistence if too large
130
- return;
131
- }
132
- localStorage.setItem(this.persistenceKey, serialized);
133
- }
134
- catch (_a) {
135
- // Storage quota exceeded or other error
136
- this.storageAvailable = false;
137
- }
138
- }
139
- /**
140
- * Removes cache data from localStorage
141
- */
142
- removeFromStorage() {
143
- if (!this.storageAvailable)
144
- return;
145
- try {
146
- localStorage.removeItem(this.persistenceKey);
147
- }
148
- catch (_a) {
149
- // Ignore errors
150
- }
151
- }
152
- /**
153
- * Checks if localStorage is available
154
- */
155
- isStorageAvailable() {
156
- try {
157
- const testKey = "__storage_test__";
158
- localStorage.setItem(testKey, testKey);
159
- localStorage.removeItem(testKey);
160
- return true;
161
- }
162
- catch (_a) {
163
- return false;
164
- }
165
- }
166
- }
167
- exports.PersistentCache = PersistentCache;
168
- //# sourceMappingURL=PersistentCache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PersistentCache.js","sourceRoot":"","sources":["../../../../src/infrastructure/cache/PersistentCache.ts"],"names":[],"mappings":"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"}
@@ -1,70 +0,0 @@
1
- "use strict";
2
- /**
3
- * Cache configuration types and defaults
4
- * Defines the configuration options for the caching system
5
- * @module cacheConfig
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.DEFAULT_CACHE_CONFIGS = exports.DEFAULT_MAX_STORAGE_BYTES = void 0;
9
- exports.getCacheConfig = getCacheConfig;
10
- /**
11
- * Default maximum storage size: 5MB
12
- */
13
- exports.DEFAULT_MAX_STORAGE_BYTES = 5 * 1024 * 1024;
14
- /**
15
- * Default cache configurations per type
16
- * These values balance memory usage with performance
17
- */
18
- exports.DEFAULT_CACHE_CONFIGS = {
19
- places: {
20
- maxItems: 500,
21
- ttlMs: 30 * 60 * 1000, // 30 minutes
22
- persistenceKey: "mvx_places",
23
- },
24
- routes: {
25
- maxItems: 100,
26
- ttlMs: 5 * 60 * 1000, // 5 minutes
27
- persistenceKey: "mvx_routes",
28
- },
29
- accessibleRoutes: {
30
- maxItems: 100,
31
- ttlMs: 5 * 60 * 1000, // 5 minutes
32
- persistenceKey: "mvx_accessible_routes",
33
- },
34
- configurations: {
35
- maxItems: 10,
36
- ttlMs: 60 * 60 * 1000, // 1 hour
37
- persistenceKey: "mvx_configurations",
38
- },
39
- categories: {
40
- maxItems: 20,
41
- ttlMs: 60 * 60 * 1000, // 1 hour
42
- persistenceKey: "mvx_categories",
43
- },
44
- vehicles: {
45
- maxItems: 50,
46
- ttlMs: 60 * 1000, // 1 minute
47
- persistenceKey: "mvx_vehicles",
48
- },
49
- stops: {
50
- maxItems: 100,
51
- ttlMs: 60 * 1000, // 1 minute
52
- persistenceKey: "mvx_stops",
53
- },
54
- subPlaces: {
55
- maxItems: 200,
56
- ttlMs: 15 * 60 * 1000, // 15 minutes
57
- persistenceKey: "mvx_subplaces",
58
- },
59
- };
60
- /**
61
- * Merges user config with defaults for a specific cache type
62
- * @param cacheType - The type of cache
63
- * @param userConfig - Optional user-provided configuration
64
- * @returns Complete cache configuration
65
- */
66
- function getCacheConfig(cacheType, userConfig) {
67
- const defaultConfig = exports.DEFAULT_CACHE_CONFIGS[cacheType];
68
- return Object.assign(Object.assign({}, defaultConfig), userConfig);
69
- }
70
- //# sourceMappingURL=cacheConfig.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cacheConfig.js","sourceRoot":"","sources":["../../../../src/infrastructure/cache/cacheConfig.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAoGH,wCASC;AAnED;;GAEG;AACU,QAAA,yBAAyB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAA;AAExD;;;GAGG;AACU,QAAA,qBAAqB,GAAmC;IACnE,MAAM,EAAE;QACN,QAAQ,EAAE,GAAG;QACb,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa;QACpC,cAAc,EAAE,YAAY;KAC7B;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,GAAG;QACb,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY;QAClC,cAAc,EAAE,YAAY;KAC7B;IACD,gBAAgB,EAAE;QAChB,QAAQ,EAAE,GAAG;QACb,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,EAAE,YAAY;QAClC,cAAc,EAAE,uBAAuB;KACxC;IACD,cAAc,EAAE;QACd,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS;QAChC,cAAc,EAAE,oBAAoB;KACrC;IACD,UAAU,EAAE;QACV,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,SAAS;QAChC,cAAc,EAAE,gBAAgB;KACjC;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,WAAW;QAC7B,cAAc,EAAE,cAAc;KAC/B;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,GAAG;QACb,KAAK,EAAE,EAAE,GAAG,IAAI,EAAE,WAAW;QAC7B,cAAc,EAAE,WAAW;KAC5B;IACD,SAAS,EAAE;QACT,QAAQ,EAAE,GAAG;QACb,KAAK,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,aAAa;QACpC,cAAc,EAAE,eAAe;KAChC;CACF,CAAA;AAED;;;;;GAKG;AACH,SAAgB,cAAc,CAC5B,SAAoB,EACpB,UAAiC;IAEjC,MAAM,aAAa,GAAG,6BAAqB,CAAC,SAAS,CAAC,CAAA;IACtD,uCACK,aAAa,GACb,UAAU,EACd;AACH,CAAC"}