@mapvx/web-js 1.0.0
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/LICENSE.md +19 -0
- package/README.md +257 -0
- package/dist/cjs/assets/icons.js +87 -0
- package/dist/cjs/assets/icons.js.map +1 -0
- package/dist/cjs/assets/route_animation_icon.svg +15 -0
- package/dist/cjs/assets/user-dot-icon.svg +3 -0
- package/dist/cjs/config/sdkConfig.js +3 -0
- package/dist/cjs/config/sdkConfig.js.map +1 -0
- package/dist/cjs/controllers/routeController.js +1054 -0
- package/dist/cjs/controllers/routeController.js.map +1 -0
- package/dist/cjs/domain/models/_internal.js +15 -0
- package/dist/cjs/domain/models/_internal.js.map +1 -0
- package/dist/cjs/domain/models/_rtl.js +10 -0
- package/dist/cjs/domain/models/_rtl.js.map +1 -0
- package/dist/cjs/domain/models/animation.js +63 -0
- package/dist/cjs/domain/models/animation.js.map +1 -0
- package/dist/cjs/domain/models/banner.js +24 -0
- package/dist/cjs/domain/models/banner.js.map +1 -0
- package/dist/cjs/domain/models/categories.js +25 -0
- package/dist/cjs/domain/models/categories.js.map +1 -0
- package/dist/cjs/domain/models/cityFilterOption.js +3 -0
- package/dist/cjs/domain/models/cityFilterOption.js.map +1 -0
- package/dist/cjs/domain/models/configuration.js +3 -0
- package/dist/cjs/domain/models/configuration.js.map +1 -0
- package/dist/cjs/domain/models/cssCustomization.js +3 -0
- package/dist/cjs/domain/models/cssCustomization.js.map +1 -0
- package/dist/cjs/domain/models/fitOptions.js +3 -0
- package/dist/cjs/domain/models/fitOptions.js.map +1 -0
- package/dist/cjs/domain/models/innerFloors.js +3 -0
- package/dist/cjs/domain/models/innerFloors.js.map +1 -0
- package/dist/cjs/domain/models/institution.js +44 -0
- package/dist/cjs/domain/models/institution.js.map +1 -0
- package/dist/cjs/domain/models/latLng.js +3 -0
- package/dist/cjs/domain/models/latLng.js.map +1 -0
- package/dist/cjs/domain/models/location.js +3 -0
- package/dist/cjs/domain/models/location.js.map +1 -0
- package/dist/cjs/domain/models/loggeable.js +52 -0
- package/dist/cjs/domain/models/loggeable.js.map +1 -0
- package/dist/cjs/domain/models/mapCamera.js +3 -0
- package/dist/cjs/domain/models/mapCamera.js.map +1 -0
- package/dist/cjs/domain/models/mapConfig.js +15 -0
- package/dist/cjs/domain/models/mapConfig.js.map +1 -0
- package/dist/cjs/domain/models/marker.js +400 -0
- package/dist/cjs/domain/models/marker.js.map +1 -0
- package/dist/cjs/domain/models/multilanguage.js +18 -0
- package/dist/cjs/domain/models/multilanguage.js.map +1 -0
- package/dist/cjs/domain/models/openingHours.js +3 -0
- package/dist/cjs/domain/models/openingHours.js.map +1 -0
- package/dist/cjs/domain/models/place.js +101 -0
- package/dist/cjs/domain/models/place.js.map +1 -0
- package/dist/cjs/domain/models/platform.js +3 -0
- package/dist/cjs/domain/models/platform.js.map +1 -0
- package/dist/cjs/domain/models/popover.js +3 -0
- package/dist/cjs/domain/models/popover.js.map +1 -0
- package/dist/cjs/domain/models/product.js +3 -0
- package/dist/cjs/domain/models/product.js.map +1 -0
- package/dist/cjs/domain/models/property.js +104 -0
- package/dist/cjs/domain/models/property.js.map +1 -0
- package/dist/cjs/domain/models/route.js +166 -0
- package/dist/cjs/domain/models/route.js.map +1 -0
- package/dist/cjs/domain/models/routeConfiguration.js +80 -0
- package/dist/cjs/domain/models/routeConfiguration.js.map +1 -0
- package/dist/cjs/domain/models/routeInstance.js +30 -0
- package/dist/cjs/domain/models/routeInstance.js.map +1 -0
- package/dist/cjs/domain/models/routeStyle.js +3 -0
- package/dist/cjs/domain/models/routeStyle.js.map +1 -0
- package/dist/cjs/domain/models/transport.js +22 -0
- package/dist/cjs/domain/models/transport.js.map +1 -0
- package/dist/cjs/domain/ports/ICache.js +3 -0
- package/dist/cjs/domain/ports/ICache.js.map +1 -0
- package/dist/cjs/domain/ports/IHttpClient.js +3 -0
- package/dist/cjs/domain/ports/IHttpClient.js.map +1 -0
- package/dist/cjs/domain/ports/ILogger.js +23 -0
- package/dist/cjs/domain/ports/ILogger.js.map +1 -0
- package/dist/cjs/domain/ports/index.js +10 -0
- package/dist/cjs/domain/ports/index.js.map +1 -0
- package/dist/cjs/index.js +76 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/infrastructure/cache/CacheManager.js +236 -0
- package/dist/cjs/infrastructure/cache/CacheManager.js.map +1 -0
- package/dist/cjs/infrastructure/cache/LRUCache.js +153 -0
- package/dist/cjs/infrastructure/cache/LRUCache.js.map +1 -0
- package/dist/cjs/infrastructure/cache/PersistentCache.js +160 -0
- package/dist/cjs/infrastructure/cache/PersistentCache.js.map +1 -0
- package/dist/cjs/infrastructure/cache/cacheConfig.js +70 -0
- package/dist/cjs/infrastructure/cache/cacheConfig.js.map +1 -0
- package/dist/cjs/infrastructure/http/FetchHttpClient.js +75 -0
- package/dist/cjs/infrastructure/http/FetchHttpClient.js.map +1 -0
- package/dist/cjs/infrastructure/logging/CountlyLogger.js +78 -0
- package/dist/cjs/infrastructure/logging/CountlyLogger.js.map +1 -0
- package/dist/cjs/interfaces/cache.js +3 -0
- package/dist/cjs/interfaces/cache.js.map +1 -0
- package/dist/cjs/interfaces/healthResponse.js +3 -0
- package/dist/cjs/interfaces/healthResponse.js.map +1 -0
- package/dist/cjs/interfaces/institutionResponse.js +3 -0
- package/dist/cjs/interfaces/institutionResponse.js.map +1 -0
- package/dist/cjs/interfaces/metadata.js +3 -0
- package/dist/cjs/interfaces/metadata.js.map +1 -0
- package/dist/cjs/interfaces/placeResponse.js +3 -0
- package/dist/cjs/interfaces/placeResponse.js.map +1 -0
- package/dist/cjs/interfaces/routeCacheResponse.js +3 -0
- package/dist/cjs/interfaces/routeCacheResponse.js.map +1 -0
- package/dist/cjs/interfaces/routeResponse.js +3 -0
- package/dist/cjs/interfaces/routeResponse.js.map +1 -0
- package/dist/cjs/interfaces/styleResponse.js +3 -0
- package/dist/cjs/interfaces/styleResponse.js.map +1 -0
- package/dist/cjs/logger/logger.js +91 -0
- package/dist/cjs/logger/logger.js.map +1 -0
- package/dist/cjs/logger/rollbar.js +24 -0
- package/dist/cjs/logger/rollbar.js.map +1 -0
- package/dist/cjs/map/map.js +1457 -0
- package/dist/cjs/map/map.js.map +1 -0
- package/dist/cjs/repository/repository.js +574 -0
- package/dist/cjs/repository/repository.js.map +1 -0
- package/dist/cjs/repository/requester.js +590 -0
- package/dist/cjs/repository/requester.js.map +1 -0
- package/dist/cjs/sdk.js +351 -0
- package/dist/cjs/sdk.js.map +1 -0
- package/dist/cjs/utils/error.js +20 -0
- package/dist/cjs/utils/error.js.map +1 -0
- package/dist/cjs/utils/images.js +26 -0
- package/dist/cjs/utils/images.js.map +1 -0
- package/dist/cjs/utils/nav-functions.js +150 -0
- package/dist/cjs/utils/nav-functions.js.map +1 -0
- package/dist/cjs/utils/opening-hours-helper.js +911 -0
- package/dist/cjs/utils/opening-hours-helper.js.map +1 -0
- package/dist/cjs/utils/route-utils.js +58 -0
- package/dist/cjs/utils/route-utils.js.map +1 -0
- package/dist/cjs/utils/update-css.js +77 -0
- package/dist/cjs/utils/update-css.js.map +1 -0
- package/dist/cjs/utils/utils.js +105 -0
- package/dist/cjs/utils/utils.js.map +1 -0
- package/dist/es/assets/icons.d.ts +86 -0
- package/dist/es/assets/icons.d.ts.map +1 -0
- package/dist/es/assets/icons.js +83 -0
- package/dist/es/assets/icons.js.map +1 -0
- package/dist/es/assets/route_animation_icon.svg +15 -0
- package/dist/es/assets/user-dot-icon.svg +3 -0
- package/dist/es/config/sdkConfig.d.ts +105 -0
- package/dist/es/config/sdkConfig.d.ts.map +1 -0
- package/dist/es/config/sdkConfig.js +2 -0
- package/dist/es/config/sdkConfig.js.map +1 -0
- package/dist/es/controllers/routeController.d.ts +161 -0
- package/dist/es/controllers/routeController.d.ts.map +1 -0
- package/dist/es/controllers/routeController.js +1050 -0
- package/dist/es/controllers/routeController.js.map +1 -0
- package/dist/es/domain/models/_internal.d.ts +21 -0
- package/dist/es/domain/models/_internal.d.ts.map +1 -0
- package/dist/es/domain/models/_internal.js +11 -0
- package/dist/es/domain/models/_internal.js.map +1 -0
- package/dist/es/domain/models/_rtl.d.ts +7 -0
- package/dist/es/domain/models/_rtl.d.ts.map +1 -0
- package/dist/es/domain/models/_rtl.js +7 -0
- package/dist/es/domain/models/_rtl.js.map +1 -0
- package/dist/es/domain/models/animation.d.ts +161 -0
- package/dist/es/domain/models/animation.d.ts.map +1 -0
- package/dist/es/domain/models/animation.js +58 -0
- package/dist/es/domain/models/animation.js.map +1 -0
- package/dist/es/domain/models/banner.d.ts +64 -0
- package/dist/es/domain/models/banner.d.ts.map +1 -0
- package/dist/es/domain/models/banner.js +20 -0
- package/dist/es/domain/models/banner.js.map +1 -0
- package/dist/es/domain/models/categories.d.ts +157 -0
- package/dist/es/domain/models/categories.d.ts.map +1 -0
- package/dist/es/domain/models/categories.js +20 -0
- package/dist/es/domain/models/categories.js.map +1 -0
- package/dist/es/domain/models/cityFilterOption.d.ts +15 -0
- package/dist/es/domain/models/cityFilterOption.d.ts.map +1 -0
- package/dist/es/domain/models/cityFilterOption.js +2 -0
- package/dist/es/domain/models/cityFilterOption.js.map +1 -0
- package/dist/es/domain/models/configuration.d.ts +523 -0
- package/dist/es/domain/models/configuration.d.ts.map +1 -0
- package/dist/es/domain/models/configuration.js +2 -0
- package/dist/es/domain/models/configuration.js.map +1 -0
- package/dist/es/domain/models/cssCustomization.d.ts +63 -0
- package/dist/es/domain/models/cssCustomization.d.ts.map +1 -0
- package/dist/es/domain/models/cssCustomization.js +2 -0
- package/dist/es/domain/models/cssCustomization.js.map +1 -0
- package/dist/es/domain/models/fitOptions.d.ts +175 -0
- package/dist/es/domain/models/fitOptions.d.ts.map +1 -0
- package/dist/es/domain/models/fitOptions.js +2 -0
- package/dist/es/domain/models/fitOptions.js.map +1 -0
- package/dist/es/domain/models/innerFloors.d.ts +42 -0
- package/dist/es/domain/models/innerFloors.d.ts.map +1 -0
- package/dist/es/domain/models/innerFloors.js +2 -0
- package/dist/es/domain/models/innerFloors.js.map +1 -0
- package/dist/es/domain/models/institution.d.ts +64 -0
- package/dist/es/domain/models/institution.d.ts.map +1 -0
- package/dist/es/domain/models/institution.js +40 -0
- package/dist/es/domain/models/institution.js.map +1 -0
- package/dist/es/domain/models/latLng.d.ts +14 -0
- package/dist/es/domain/models/latLng.d.ts.map +1 -0
- package/dist/es/domain/models/latLng.js +2 -0
- package/dist/es/domain/models/latLng.js.map +1 -0
- package/dist/es/domain/models/location.d.ts +10 -0
- package/dist/es/domain/models/location.d.ts.map +1 -0
- package/dist/es/domain/models/location.js +2 -0
- package/dist/es/domain/models/location.js.map +1 -0
- package/dist/es/domain/models/loggeable.d.ts +43 -0
- package/dist/es/domain/models/loggeable.d.ts.map +1 -0
- package/dist/es/domain/models/loggeable.js +48 -0
- package/dist/es/domain/models/loggeable.js.map +1 -0
- package/dist/es/domain/models/mapCamera.d.ts +109 -0
- package/dist/es/domain/models/mapCamera.d.ts.map +1 -0
- package/dist/es/domain/models/mapCamera.js +2 -0
- package/dist/es/domain/models/mapCamera.js.map +1 -0
- package/dist/es/domain/models/mapConfig.d.ts +238 -0
- package/dist/es/domain/models/mapConfig.d.ts.map +1 -0
- package/dist/es/domain/models/mapConfig.js +12 -0
- package/dist/es/domain/models/mapConfig.js.map +1 -0
- package/dist/es/domain/models/marker.d.ts +301 -0
- package/dist/es/domain/models/marker.d.ts.map +1 -0
- package/dist/es/domain/models/marker.js +396 -0
- package/dist/es/domain/models/marker.js.map +1 -0
- package/dist/es/domain/models/multilanguage.d.ts +27 -0
- package/dist/es/domain/models/multilanguage.d.ts.map +1 -0
- package/dist/es/domain/models/multilanguage.js +14 -0
- package/dist/es/domain/models/multilanguage.js.map +1 -0
- package/dist/es/domain/models/openingHours.d.ts +30 -0
- package/dist/es/domain/models/openingHours.d.ts.map +1 -0
- package/dist/es/domain/models/openingHours.js +2 -0
- package/dist/es/domain/models/openingHours.js.map +1 -0
- package/dist/es/domain/models/place.d.ts +167 -0
- package/dist/es/domain/models/place.d.ts.map +1 -0
- package/dist/es/domain/models/place.js +97 -0
- package/dist/es/domain/models/place.js.map +1 -0
- package/dist/es/domain/models/platform.d.ts +6 -0
- package/dist/es/domain/models/platform.d.ts.map +1 -0
- package/dist/es/domain/models/platform.js +2 -0
- package/dist/es/domain/models/platform.js.map +1 -0
- package/dist/es/domain/models/popover.d.ts +14 -0
- package/dist/es/domain/models/popover.d.ts.map +1 -0
- package/dist/es/domain/models/popover.js +2 -0
- package/dist/es/domain/models/popover.js.map +1 -0
- package/dist/es/domain/models/product.d.ts +36 -0
- package/dist/es/domain/models/product.d.ts.map +1 -0
- package/dist/es/domain/models/product.js +2 -0
- package/dist/es/domain/models/product.js.map +1 -0
- package/dist/es/domain/models/property.d.ts +172 -0
- package/dist/es/domain/models/property.d.ts.map +1 -0
- package/dist/es/domain/models/property.js +100 -0
- package/dist/es/domain/models/property.js.map +1 -0
- package/dist/es/domain/models/route.d.ts +199 -0
- package/dist/es/domain/models/route.d.ts.map +1 -0
- package/dist/es/domain/models/route.js +160 -0
- package/dist/es/domain/models/route.js.map +1 -0
- package/dist/es/domain/models/routeConfiguration.d.ts +140 -0
- package/dist/es/domain/models/routeConfiguration.d.ts.map +1 -0
- package/dist/es/domain/models/routeConfiguration.js +75 -0
- package/dist/es/domain/models/routeConfiguration.js.map +1 -0
- package/dist/es/domain/models/routeInstance.d.ts +52 -0
- package/dist/es/domain/models/routeInstance.d.ts.map +1 -0
- package/dist/es/domain/models/routeInstance.js +26 -0
- package/dist/es/domain/models/routeInstance.js.map +1 -0
- package/dist/es/domain/models/routeStyle.d.ts +47 -0
- package/dist/es/domain/models/routeStyle.d.ts.map +1 -0
- package/dist/es/domain/models/routeStyle.js +2 -0
- package/dist/es/domain/models/routeStyle.js.map +1 -0
- package/dist/es/domain/models/transport.d.ts +176 -0
- package/dist/es/domain/models/transport.d.ts.map +1 -0
- package/dist/es/domain/models/transport.js +18 -0
- package/dist/es/domain/models/transport.js.map +1 -0
- package/dist/es/domain/ports/ICache.d.ts +70 -0
- package/dist/es/domain/ports/ICache.d.ts.map +1 -0
- package/dist/es/domain/ports/ICache.js +2 -0
- package/dist/es/domain/ports/ICache.js.map +1 -0
- package/dist/es/domain/ports/IHttpClient.d.ts +77 -0
- package/dist/es/domain/ports/IHttpClient.d.ts.map +1 -0
- package/dist/es/domain/ports/IHttpClient.js +2 -0
- package/dist/es/domain/ports/IHttpClient.js.map +1 -0
- package/dist/es/domain/ports/ILogger.d.ts +61 -0
- package/dist/es/domain/ports/ILogger.d.ts.map +1 -0
- package/dist/es/domain/ports/ILogger.js +19 -0
- package/dist/es/domain/ports/ILogger.js.map +1 -0
- package/dist/es/domain/ports/index.d.ts +9 -0
- package/dist/es/domain/ports/index.d.ts.map +1 -0
- package/dist/es/domain/ports/index.js +6 -0
- package/dist/es/domain/ports/index.js.map +1 -0
- package/dist/es/index.d.ts +58 -0
- package/dist/es/index.d.ts.map +1 -0
- package/dist/es/index.js +48 -0
- package/dist/es/index.js.map +1 -0
- package/dist/es/infrastructure/cache/CacheManager.d.ts +106 -0
- package/dist/es/infrastructure/cache/CacheManager.d.ts.map +1 -0
- package/dist/es/infrastructure/cache/CacheManager.js +232 -0
- package/dist/es/infrastructure/cache/CacheManager.js.map +1 -0
- package/dist/es/infrastructure/cache/LRUCache.d.ts +70 -0
- package/dist/es/infrastructure/cache/LRUCache.d.ts.map +1 -0
- package/dist/es/infrastructure/cache/LRUCache.js +149 -0
- package/dist/es/infrastructure/cache/LRUCache.js.map +1 -0
- package/dist/es/infrastructure/cache/PersistentCache.d.ts +58 -0
- package/dist/es/infrastructure/cache/PersistentCache.d.ts.map +1 -0
- package/dist/es/infrastructure/cache/PersistentCache.js +156 -0
- package/dist/es/infrastructure/cache/PersistentCache.js.map +1 -0
- package/dist/es/infrastructure/cache/cacheConfig.d.ts +51 -0
- package/dist/es/infrastructure/cache/cacheConfig.d.ts.map +1 -0
- package/dist/es/infrastructure/cache/cacheConfig.js +66 -0
- package/dist/es/infrastructure/cache/cacheConfig.js.map +1 -0
- package/dist/es/infrastructure/http/FetchHttpClient.d.ts +41 -0
- package/dist/es/infrastructure/http/FetchHttpClient.d.ts.map +1 -0
- package/dist/es/infrastructure/http/FetchHttpClient.js +71 -0
- package/dist/es/infrastructure/http/FetchHttpClient.js.map +1 -0
- package/dist/es/infrastructure/logging/CountlyLogger.d.ts +47 -0
- package/dist/es/infrastructure/logging/CountlyLogger.d.ts.map +1 -0
- package/dist/es/infrastructure/logging/CountlyLogger.js +74 -0
- package/dist/es/infrastructure/logging/CountlyLogger.js.map +1 -0
- package/dist/es/interfaces/cache.d.ts +5 -0
- package/dist/es/interfaces/cache.d.ts.map +1 -0
- package/dist/es/interfaces/cache.js +2 -0
- package/dist/es/interfaces/cache.js.map +1 -0
- package/dist/es/interfaces/healthResponse.d.ts +17 -0
- package/dist/es/interfaces/healthResponse.d.ts.map +1 -0
- package/dist/es/interfaces/healthResponse.js +2 -0
- package/dist/es/interfaces/healthResponse.js.map +1 -0
- package/dist/es/interfaces/institutionResponse.d.ts +12 -0
- package/dist/es/interfaces/institutionResponse.d.ts.map +1 -0
- package/dist/es/interfaces/institutionResponse.js +2 -0
- package/dist/es/interfaces/institutionResponse.js.map +1 -0
- package/dist/es/interfaces/metadata.d.ts +7 -0
- package/dist/es/interfaces/metadata.d.ts.map +1 -0
- package/dist/es/interfaces/metadata.js +2 -0
- package/dist/es/interfaces/metadata.js.map +1 -0
- package/dist/es/interfaces/placeResponse.d.ts +50 -0
- package/dist/es/interfaces/placeResponse.d.ts.map +1 -0
- package/dist/es/interfaces/placeResponse.js +2 -0
- package/dist/es/interfaces/placeResponse.js.map +1 -0
- package/dist/es/interfaces/routeCacheResponse.d.ts +13 -0
- package/dist/es/interfaces/routeCacheResponse.d.ts.map +1 -0
- package/dist/es/interfaces/routeCacheResponse.js +2 -0
- package/dist/es/interfaces/routeCacheResponse.js.map +1 -0
- package/dist/es/interfaces/routeResponse.d.ts +42 -0
- package/dist/es/interfaces/routeResponse.d.ts.map +1 -0
- package/dist/es/interfaces/routeResponse.js +2 -0
- package/dist/es/interfaces/routeResponse.js.map +1 -0
- package/dist/es/interfaces/styleResponse.d.ts +5 -0
- package/dist/es/interfaces/styleResponse.d.ts.map +1 -0
- package/dist/es/interfaces/styleResponse.js +2 -0
- package/dist/es/interfaces/styleResponse.js.map +1 -0
- package/dist/es/logger/logger.d.ts +14 -0
- package/dist/es/logger/logger.d.ts.map +1 -0
- package/dist/es/logger/logger.js +84 -0
- package/dist/es/logger/logger.js.map +1 -0
- package/dist/es/logger/rollbar.d.ts +4 -0
- package/dist/es/logger/rollbar.d.ts.map +1 -0
- package/dist/es/logger/rollbar.js +20 -0
- package/dist/es/logger/rollbar.js.map +1 -0
- package/dist/es/map/map.d.ts +598 -0
- package/dist/es/map/map.d.ts.map +1 -0
- package/dist/es/map/map.js +1430 -0
- package/dist/es/map/map.js.map +1 -0
- package/dist/es/repository/repository.d.ts +65 -0
- package/dist/es/repository/repository.d.ts.map +1 -0
- package/dist/es/repository/repository.js +570 -0
- package/dist/es/repository/repository.js.map +1 -0
- package/dist/es/repository/requester.d.ts +169 -0
- package/dist/es/repository/requester.d.ts.map +1 -0
- package/dist/es/repository/requester.js +586 -0
- package/dist/es/repository/requester.js.map +1 -0
- package/dist/es/sdk.d.ts +279 -0
- package/dist/es/sdk.d.ts.map +1 -0
- package/dist/es/sdk.js +346 -0
- package/dist/es/sdk.js.map +1 -0
- package/dist/es/utils/error.d.ts +8 -0
- package/dist/es/utils/error.d.ts.map +1 -0
- package/dist/es/utils/error.js +16 -0
- package/dist/es/utils/error.js.map +1 -0
- package/dist/es/utils/images.d.ts +8 -0
- package/dist/es/utils/images.d.ts.map +1 -0
- package/dist/es/utils/images.js +22 -0
- package/dist/es/utils/images.js.map +1 -0
- package/dist/es/utils/nav-functions.d.ts +85 -0
- package/dist/es/utils/nav-functions.d.ts.map +1 -0
- package/dist/es/utils/nav-functions.js +143 -0
- package/dist/es/utils/nav-functions.js.map +1 -0
- package/dist/es/utils/opening-hours-helper.d.ts +395 -0
- package/dist/es/utils/opening-hours-helper.d.ts.map +1 -0
- package/dist/es/utils/opening-hours-helper.js +906 -0
- package/dist/es/utils/opening-hours-helper.js.map +1 -0
- package/dist/es/utils/route-utils.d.ts +28 -0
- package/dist/es/utils/route-utils.d.ts.map +1 -0
- package/dist/es/utils/route-utils.js +54 -0
- package/dist/es/utils/route-utils.js.map +1 -0
- package/dist/es/utils/update-css.d.ts +12 -0
- package/dist/es/utils/update-css.d.ts.map +1 -0
- package/dist/es/utils/update-css.js +73 -0
- package/dist/es/utils/update-css.js.map +1 -0
- package/dist/es/utils/utils.d.ts +39 -0
- package/dist/es/utils/utils.d.ts.map +1 -0
- package/dist/es/utils/utils.js +97 -0
- package/dist/es/utils/utils.js.map +1 -0
- package/dist/umd/index.js +16874 -0
- package/dist/umd/index.js.map +1 -0
- package/dist/umd/styles.css +107 -0
- package/dist/umd/styles.css.map +1 -0
- package/dist/umd/styles.js +37 -0
- package/dist/umd/styles.js.map +1 -0
- package/package.json +198 -0
package/dist/es/index.js
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
// ─── Infrastructure: Cache ───────────────────────────────────────────────────
|
|
2
|
+
export { LRUCache } from "./infrastructure/cache/LRUCache";
|
|
3
|
+
export { PersistentCache } from "./infrastructure/cache/PersistentCache";
|
|
4
|
+
export { CacheManager } from "./infrastructure/cache/CacheManager";
|
|
5
|
+
export { DEFAULT_CACHE_CONFIGS, DEFAULT_MAX_STORAGE_BYTES, } from "./infrastructure/cache/cacheConfig";
|
|
6
|
+
// ─── Infrastructure: HTTP ────────────────────────────────────────────────────
|
|
7
|
+
export { FetchHttpClient } from "./infrastructure/http/FetchHttpClient";
|
|
8
|
+
// ─── Infrastructure: Logging ─────────────────────────────────────────────────
|
|
9
|
+
export { CountlyLogger } from "./infrastructure/logging/CountlyLogger";
|
|
10
|
+
// ─── SDK ─────────────────────────────────────────────────────────────────────
|
|
11
|
+
export { initializeSDK } from "./sdk";
|
|
12
|
+
// ─── Domain Models: Assets / Icons ───────────────────────────────────────────
|
|
13
|
+
export { createRouteAnimationIconDataUrl } from "./assets/icons";
|
|
14
|
+
// ─── Domain Models: Banner ───────────────────────────────────────────────────
|
|
15
|
+
export { Banner } from "./domain/models/banner";
|
|
16
|
+
// ─── Domain Models: Categories ───────────────────────────────────────────────
|
|
17
|
+
export { isBasicWithIcon, isBasicWithLogo } from "./domain/models/categories";
|
|
18
|
+
// ─── Domain Models: Institution ──────────────────────────────────────────────
|
|
19
|
+
export { Institution } from "./domain/models/institution";
|
|
20
|
+
// ─── Domain Models: Marker ───────────────────────────────────────────────────
|
|
21
|
+
export { TextPosition } from "./domain/models/marker";
|
|
22
|
+
// ─── Domain Models: Place ────────────────────────────────────────────────────
|
|
23
|
+
export { MVXPlace } from "./domain/models/place";
|
|
24
|
+
// ─── Domain Models: Route ────────────────────────────────────────────────────
|
|
25
|
+
export { MVXRoute, MVXRouteLeg, MVXRouteStep } from "./domain/models/route";
|
|
26
|
+
// ─── Domain Models: Route Configuration ──────────────────────────────────────
|
|
27
|
+
export { AnnounceFormat, TransportationMode, UnitSystem } from "./domain/models/routeConfiguration";
|
|
28
|
+
// ─── Domain Models: Transport ────────────────────────────────────────────────
|
|
29
|
+
export { MVXTransport } from "./domain/models/transport";
|
|
30
|
+
// ─── Utils ───────────────────────────────────────────────────────────────────
|
|
31
|
+
export { loadCustomization } from "./utils/update-css";
|
|
32
|
+
export { OpeningHoursHelper } from "./utils/opening-hours-helper";
|
|
33
|
+
/**
|
|
34
|
+
* Function to load default styles
|
|
35
|
+
* @group Utils
|
|
36
|
+
*/
|
|
37
|
+
export const loadStyles = () => {
|
|
38
|
+
// Check if styles are already loaded
|
|
39
|
+
if (document.querySelector("link[data-mapvx-styles]")) {
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
const link = document.createElement("link");
|
|
43
|
+
link.rel = "stylesheet";
|
|
44
|
+
link.href = "./styles.css"; // Adjust path as needed
|
|
45
|
+
link.setAttribute("data-mapvx-styles", "true");
|
|
46
|
+
document.head.appendChild(link);
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAKA,gFAAgF;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAA;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAA;AACxE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAA;AAElE,OAAO,EACL,qBAAqB,EACrB,yBAAyB,GAC1B,MAAM,oCAAoC,CAAA;AAE3C,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAA;AAEvE,gFAAgF;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAKtE,gFAAgF;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAA;AASrC,gFAAgF;AAChF,OAAO,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAA;AAGhE,gFAAgF;AAChF,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAA;AAE/C,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAgD7E,gFAAgF;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAA;AAYzD,gFAAgF;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AASrD,gFAAgF;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAKhD,gFAAgF;AAChF,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AAE3E,gFAAgF;AAChF,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAWnG,gFAAgF;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAQxD,gFAAgF;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AAEjE;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,GAAS,EAAE;IACnC,qCAAqC;IACrC,IAAI,QAAQ,CAAC,aAAa,CAAC,yBAAyB,CAAC,EAAE;QACrD,OAAM;KACP;IAED,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;IAC3C,IAAI,CAAC,GAAG,GAAG,YAAY,CAAA;IACvB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA,CAAC,wBAAwB;IACnD,IAAI,CAAC,YAAY,CAAC,mBAAmB,EAAE,MAAM,CAAC,CAAA;IAC9C,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;AACjC,CAAC,CAAA"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import type { CacheStats } from "../../domain/ports/ICache";
|
|
2
|
+
import { type CacheManagerConfig, type CacheType } from "./cacheConfig";
|
|
3
|
+
/**
|
|
4
|
+
* CacheManager - Facade for managing multiple typed caches
|
|
5
|
+
*
|
|
6
|
+
* Replaces the old Cache singleton with a more flexible, configurable system.
|
|
7
|
+
* Supports:
|
|
8
|
+
* - Multiple cache types (places, routes, configurations, etc.)
|
|
9
|
+
* - Language-aware caching
|
|
10
|
+
* - Optional localStorage persistence
|
|
11
|
+
* - Configurable limits and TTL per cache type
|
|
12
|
+
*
|
|
13
|
+
* @group Configuration
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const cacheManager = new CacheManager({
|
|
18
|
+
* persistent: true,
|
|
19
|
+
* maxStorageBytes: 5 * 1024 * 1024,
|
|
20
|
+
* configs: {
|
|
21
|
+
* places: { maxItems: 1000, ttlMs: 60000 }
|
|
22
|
+
* }
|
|
23
|
+
* })
|
|
24
|
+
*
|
|
25
|
+
* cacheManager.setPlace("place-1", "en", placeData)
|
|
26
|
+
* const place = cacheManager.getPlace("place-1", "en")
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
export declare class CacheManager {
|
|
30
|
+
private readonly caches;
|
|
31
|
+
private readonly persistent;
|
|
32
|
+
private readonly maxStorageBytes;
|
|
33
|
+
constructor(config?: CacheManagerConfig);
|
|
34
|
+
/**
|
|
35
|
+
* Creates a cache instance based on persistence configuration
|
|
36
|
+
*/
|
|
37
|
+
private createCache;
|
|
38
|
+
/**
|
|
39
|
+
* Generates a language-aware cache key
|
|
40
|
+
*/
|
|
41
|
+
private makeKey;
|
|
42
|
+
/**
|
|
43
|
+
* Generates a composite key for configurations
|
|
44
|
+
*/
|
|
45
|
+
private makeConfigKey;
|
|
46
|
+
getPlace<T>(id: string, lang: string): T | undefined;
|
|
47
|
+
/**
|
|
48
|
+
* Stores a place in cache
|
|
49
|
+
* @param id - Place ID
|
|
50
|
+
* @param value - Place data
|
|
51
|
+
* @param lang - Language code
|
|
52
|
+
*/
|
|
53
|
+
setPlace<T>(id: string, value: T, lang: string): void;
|
|
54
|
+
hasPlace(id: string, lang: string): boolean;
|
|
55
|
+
getRoute<T>(destinationId: string): T | undefined;
|
|
56
|
+
setRoute<T>(destinationId: string, value: T): void;
|
|
57
|
+
cleanRoutesCache(): void;
|
|
58
|
+
getAccessibleRoute<T>(destinationId: string): T | undefined;
|
|
59
|
+
setAccessibleRoute<T>(destinationId: string, value: T): void;
|
|
60
|
+
cleanAccessibleRoutesCache(): void;
|
|
61
|
+
getConfiguration<T>(placeId: string, product: string, lang: string): T | undefined;
|
|
62
|
+
setConfiguration<T>(placeId: string, product: string, lang: string, value: T): void;
|
|
63
|
+
getCategories<T>(placeId: string, lang: string): T | undefined;
|
|
64
|
+
setCategories<T>(placeId: string, lang: string, value: T): void;
|
|
65
|
+
getVehicle<T>(id: string, lang: string): T | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* Stores a vehicle in cache
|
|
68
|
+
* @param id - Stop ID
|
|
69
|
+
* @param value - Vehicle data (can be DataSnapshot for backward compatibility)
|
|
70
|
+
* @param lang - Language code
|
|
71
|
+
*/
|
|
72
|
+
setVehicle<T>(id: string, value: T, lang: string): void;
|
|
73
|
+
getStops<T>(id: string, lang: string): T | undefined;
|
|
74
|
+
/**
|
|
75
|
+
* Stores stops in cache
|
|
76
|
+
* @param id - Combined stop+vehicle ID
|
|
77
|
+
* @param value - Stops data (can be DataSnapshot for backward compatibility)
|
|
78
|
+
* @param lang - Language code
|
|
79
|
+
*/
|
|
80
|
+
setStops<T>(id: string, value: T, lang: string): void;
|
|
81
|
+
getSubPlaces<T>(parentPlaceId: string, lang: string): T | undefined;
|
|
82
|
+
/**
|
|
83
|
+
* Stores subplaces in cache
|
|
84
|
+
* @param parentPlaceId - Parent place ID
|
|
85
|
+
* @param lang - Language code
|
|
86
|
+
* @param value - SubPlaces data (can be DataSnapshot for backward compatibility)
|
|
87
|
+
*/
|
|
88
|
+
setSubPlaces<T>(parentPlaceId: string, lang: string, value: T): void;
|
|
89
|
+
/**
|
|
90
|
+
* Clears all caches
|
|
91
|
+
*/
|
|
92
|
+
cleanAllCache(): void;
|
|
93
|
+
/**
|
|
94
|
+
* Clears all entries for a specific language across all language-aware caches
|
|
95
|
+
*/
|
|
96
|
+
cleanLanguageCache(lang: string): void;
|
|
97
|
+
/**
|
|
98
|
+
* Gets statistics for a specific cache type
|
|
99
|
+
*/
|
|
100
|
+
getCacheStats(cacheType: CacheType): CacheStats;
|
|
101
|
+
/**
|
|
102
|
+
* Gets statistics for all caches
|
|
103
|
+
*/
|
|
104
|
+
getAllCacheStats(): Record<CacheType, CacheStats>;
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=CacheManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CacheManager.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/cache/CacheManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
import { DEFAULT_MAX_STORAGE_BYTES, getCacheConfig, } from "./cacheConfig";
|
|
2
|
+
import { LRUCache } from "./LRUCache";
|
|
3
|
+
import { PersistentCache } from "./PersistentCache";
|
|
4
|
+
/**
|
|
5
|
+
* CacheManager - Facade for managing multiple typed caches
|
|
6
|
+
*
|
|
7
|
+
* Replaces the old Cache singleton with a more flexible, configurable system.
|
|
8
|
+
* Supports:
|
|
9
|
+
* - Multiple cache types (places, routes, configurations, etc.)
|
|
10
|
+
* - Language-aware caching
|
|
11
|
+
* - Optional localStorage persistence
|
|
12
|
+
* - Configurable limits and TTL per cache type
|
|
13
|
+
*
|
|
14
|
+
* @group Configuration
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* const cacheManager = new CacheManager({
|
|
19
|
+
* persistent: true,
|
|
20
|
+
* maxStorageBytes: 5 * 1024 * 1024,
|
|
21
|
+
* configs: {
|
|
22
|
+
* places: { maxItems: 1000, ttlMs: 60000 }
|
|
23
|
+
* }
|
|
24
|
+
* })
|
|
25
|
+
*
|
|
26
|
+
* cacheManager.setPlace("place-1", "en", placeData)
|
|
27
|
+
* const place = cacheManager.getPlace("place-1", "en")
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export class CacheManager {
|
|
31
|
+
constructor(config) {
|
|
32
|
+
var _a, _b, _c;
|
|
33
|
+
this.caches = new Map();
|
|
34
|
+
this.persistent = (_a = config === null || config === void 0 ? void 0 : config.persistent) !== null && _a !== void 0 ? _a : false;
|
|
35
|
+
this.maxStorageBytes = (_b = config === null || config === void 0 ? void 0 : config.maxStorageBytes) !== null && _b !== void 0 ? _b : DEFAULT_MAX_STORAGE_BYTES;
|
|
36
|
+
// Initialize all cache types
|
|
37
|
+
const cacheTypes = [
|
|
38
|
+
"places",
|
|
39
|
+
"routes",
|
|
40
|
+
"accessibleRoutes",
|
|
41
|
+
"configurations",
|
|
42
|
+
"categories",
|
|
43
|
+
"vehicles",
|
|
44
|
+
"stops",
|
|
45
|
+
"subPlaces",
|
|
46
|
+
];
|
|
47
|
+
for (const cacheType of cacheTypes) {
|
|
48
|
+
const cacheConfig = getCacheConfig(cacheType, (_c = config === null || config === void 0 ? void 0 : config.configs) === null || _c === void 0 ? void 0 : _c[cacheType]);
|
|
49
|
+
this.caches.set(cacheType, this.createCache(cacheConfig));
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Creates a cache instance based on persistence configuration
|
|
54
|
+
*/
|
|
55
|
+
createCache(config) {
|
|
56
|
+
if (this.persistent && config.persistenceKey) {
|
|
57
|
+
return new PersistentCache(config, this.maxStorageBytes);
|
|
58
|
+
}
|
|
59
|
+
return new LRUCache(config);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Generates a language-aware cache key
|
|
63
|
+
*/
|
|
64
|
+
makeKey(id, lang) {
|
|
65
|
+
return `${id}_${lang}`;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Generates a composite key for configurations
|
|
69
|
+
*/
|
|
70
|
+
makeConfigKey(placeId, product, lang) {
|
|
71
|
+
return `${placeId || "default"}_${product || "default"}_${lang}`;
|
|
72
|
+
}
|
|
73
|
+
// ==================== Places ====================
|
|
74
|
+
getPlace(id, lang) {
|
|
75
|
+
const cache = this.caches.get("places");
|
|
76
|
+
return cache.get(this.makeKey(id, lang));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Stores a place in cache
|
|
80
|
+
* @param id - Place ID
|
|
81
|
+
* @param value - Place data
|
|
82
|
+
* @param lang - Language code
|
|
83
|
+
*/
|
|
84
|
+
setPlace(id, value, lang) {
|
|
85
|
+
const cache = this.caches.get("places");
|
|
86
|
+
cache.set(this.makeKey(id, lang), value);
|
|
87
|
+
}
|
|
88
|
+
hasPlace(id, lang) {
|
|
89
|
+
const cache = this.caches.get("places");
|
|
90
|
+
return cache.has(this.makeKey(id, lang));
|
|
91
|
+
}
|
|
92
|
+
// ==================== Routes ====================
|
|
93
|
+
getRoute(destinationId) {
|
|
94
|
+
const cache = this.caches.get("routes");
|
|
95
|
+
return cache.get(destinationId);
|
|
96
|
+
}
|
|
97
|
+
setRoute(destinationId, value) {
|
|
98
|
+
const cache = this.caches.get("routes");
|
|
99
|
+
cache.set(destinationId, value);
|
|
100
|
+
}
|
|
101
|
+
cleanRoutesCache() {
|
|
102
|
+
this.caches.get("routes").clear();
|
|
103
|
+
}
|
|
104
|
+
// ==================== Accessible Routes ====================
|
|
105
|
+
getAccessibleRoute(destinationId) {
|
|
106
|
+
const cache = this.caches.get("accessibleRoutes");
|
|
107
|
+
return cache.get(destinationId);
|
|
108
|
+
}
|
|
109
|
+
setAccessibleRoute(destinationId, value) {
|
|
110
|
+
const cache = this.caches.get("accessibleRoutes");
|
|
111
|
+
cache.set(destinationId, value);
|
|
112
|
+
}
|
|
113
|
+
cleanAccessibleRoutesCache() {
|
|
114
|
+
this.caches.get("accessibleRoutes").clear();
|
|
115
|
+
}
|
|
116
|
+
// ==================== Configurations ====================
|
|
117
|
+
getConfiguration(placeId, product, lang) {
|
|
118
|
+
const cache = this.caches.get("configurations");
|
|
119
|
+
return cache.get(this.makeConfigKey(placeId, product, lang));
|
|
120
|
+
}
|
|
121
|
+
setConfiguration(placeId, product, lang, value) {
|
|
122
|
+
const cache = this.caches.get("configurations");
|
|
123
|
+
cache.set(this.makeConfigKey(placeId, product, lang), value);
|
|
124
|
+
}
|
|
125
|
+
// ==================== Categories ====================
|
|
126
|
+
getCategories(placeId, lang) {
|
|
127
|
+
const cache = this.caches.get("categories");
|
|
128
|
+
return cache.get(this.makeKey(placeId || "default", lang));
|
|
129
|
+
}
|
|
130
|
+
setCategories(placeId, lang, value) {
|
|
131
|
+
const cache = this.caches.get("categories");
|
|
132
|
+
cache.set(this.makeKey(placeId || "default", lang), value);
|
|
133
|
+
}
|
|
134
|
+
// ==================== Vehicles ====================
|
|
135
|
+
getVehicle(id, lang) {
|
|
136
|
+
const cache = this.caches.get("vehicles");
|
|
137
|
+
return cache.get(this.makeKey(id, lang));
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Stores a vehicle in cache
|
|
141
|
+
* @param id - Stop ID
|
|
142
|
+
* @param value - Vehicle data (can be DataSnapshot for backward compatibility)
|
|
143
|
+
* @param lang - Language code
|
|
144
|
+
*/
|
|
145
|
+
setVehicle(id, value, lang) {
|
|
146
|
+
const cache = this.caches.get("vehicles");
|
|
147
|
+
cache.set(this.makeKey(id, lang), value);
|
|
148
|
+
}
|
|
149
|
+
// ==================== Stops ====================
|
|
150
|
+
getStops(id, lang) {
|
|
151
|
+
const cache = this.caches.get("stops");
|
|
152
|
+
return cache.get(this.makeKey(id, lang));
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Stores stops in cache
|
|
156
|
+
* @param id - Combined stop+vehicle ID
|
|
157
|
+
* @param value - Stops data (can be DataSnapshot for backward compatibility)
|
|
158
|
+
* @param lang - Language code
|
|
159
|
+
*/
|
|
160
|
+
setStops(id, value, lang) {
|
|
161
|
+
const cache = this.caches.get("stops");
|
|
162
|
+
cache.set(this.makeKey(id, lang), value);
|
|
163
|
+
}
|
|
164
|
+
// ==================== SubPlaces ====================
|
|
165
|
+
getSubPlaces(parentPlaceId, lang) {
|
|
166
|
+
const cache = this.caches.get("subPlaces");
|
|
167
|
+
return cache.get(this.makeKey(parentPlaceId, lang));
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Stores subplaces in cache
|
|
171
|
+
* @param parentPlaceId - Parent place ID
|
|
172
|
+
* @param lang - Language code
|
|
173
|
+
* @param value - SubPlaces data (can be DataSnapshot for backward compatibility)
|
|
174
|
+
*/
|
|
175
|
+
setSubPlaces(parentPlaceId, lang, value) {
|
|
176
|
+
const cache = this.caches.get("subPlaces");
|
|
177
|
+
cache.set(this.makeKey(parentPlaceId, lang), value);
|
|
178
|
+
}
|
|
179
|
+
// ==================== Global Operations ====================
|
|
180
|
+
/**
|
|
181
|
+
* Clears all caches
|
|
182
|
+
*/
|
|
183
|
+
cleanAllCache() {
|
|
184
|
+
for (const cache of this.caches.values()) {
|
|
185
|
+
cache.clear();
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Clears all entries for a specific language across all language-aware caches
|
|
190
|
+
*/
|
|
191
|
+
cleanLanguageCache(lang) {
|
|
192
|
+
const languageAwareCaches = [
|
|
193
|
+
"places",
|
|
194
|
+
"configurations",
|
|
195
|
+
"categories",
|
|
196
|
+
"vehicles",
|
|
197
|
+
"stops",
|
|
198
|
+
"subPlaces",
|
|
199
|
+
];
|
|
200
|
+
const suffix = `_${lang}`;
|
|
201
|
+
for (const cacheType of languageAwareCaches) {
|
|
202
|
+
const cache = this.caches.get(cacheType);
|
|
203
|
+
const keys = cache.keys();
|
|
204
|
+
for (const key of keys) {
|
|
205
|
+
if (key.endsWith(suffix)) {
|
|
206
|
+
cache.delete(key);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Gets statistics for a specific cache type
|
|
213
|
+
*/
|
|
214
|
+
getCacheStats(cacheType) {
|
|
215
|
+
const cache = this.caches.get(cacheType);
|
|
216
|
+
if (!cache) {
|
|
217
|
+
return { size: 0, maxItems: 0 };
|
|
218
|
+
}
|
|
219
|
+
return cache.getStats();
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Gets statistics for all caches
|
|
223
|
+
*/
|
|
224
|
+
getAllCacheStats() {
|
|
225
|
+
const stats = {};
|
|
226
|
+
for (const [cacheType, cache] of this.caches) {
|
|
227
|
+
stats[cacheType] = cache.getStats();
|
|
228
|
+
}
|
|
229
|
+
return stats;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=CacheManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CacheManager.js","sourceRoot":"","sources":["../../../../src/infrastructure/cache/CacheManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { ICache, CacheStats } from "../../domain/ports/ICache";
|
|
2
|
+
import type { CacheConfig } from "./cacheConfig";
|
|
3
|
+
/**
|
|
4
|
+
* LRU (Least Recently Used) Cache implementation
|
|
5
|
+
* Implements the ICache interface with:
|
|
6
|
+
* - Configurable capacity limits
|
|
7
|
+
* - TTL-based expiration
|
|
8
|
+
* - LRU eviction policy
|
|
9
|
+
* - Hit rate tracking
|
|
10
|
+
*
|
|
11
|
+
* @typeParam T - The type of values stored in the cache
|
|
12
|
+
* @group Configuration
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```typescript
|
|
16
|
+
* const cache = new LRUCache<string>({ maxItems: 100, ttlMs: 60000 })
|
|
17
|
+
* cache.set("key1", "value1")
|
|
18
|
+
* const value = cache.get("key1") // "value1"
|
|
19
|
+
* ```
|
|
20
|
+
*/
|
|
21
|
+
export declare class LRUCache<T> implements ICache<T> {
|
|
22
|
+
private readonly cache;
|
|
23
|
+
private readonly maxItems;
|
|
24
|
+
private readonly ttlMs;
|
|
25
|
+
private hits;
|
|
26
|
+
private misses;
|
|
27
|
+
private accessCounter;
|
|
28
|
+
constructor(config: CacheConfig);
|
|
29
|
+
/**
|
|
30
|
+
* Retrieves a value from the cache
|
|
31
|
+
* Updates access time for LRU tracking
|
|
32
|
+
* Returns undefined if key doesn't exist or is expired
|
|
33
|
+
*/
|
|
34
|
+
get(key: string): T | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* Stores a value in the cache
|
|
37
|
+
* Evicts LRU item if at capacity
|
|
38
|
+
* Refreshes TTL for existing keys
|
|
39
|
+
*/
|
|
40
|
+
set(key: string, value: T): void;
|
|
41
|
+
/**
|
|
42
|
+
* Checks if a key exists and is not expired
|
|
43
|
+
*/
|
|
44
|
+
has(key: string): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Removes a specific key from the cache
|
|
47
|
+
*/
|
|
48
|
+
delete(key: string): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Removes all entries from the cache
|
|
51
|
+
*/
|
|
52
|
+
clear(): void;
|
|
53
|
+
/**
|
|
54
|
+
* Returns all keys in the cache
|
|
55
|
+
*/
|
|
56
|
+
keys(): string[];
|
|
57
|
+
/**
|
|
58
|
+
* Returns cache statistics
|
|
59
|
+
*/
|
|
60
|
+
getStats(): CacheStats;
|
|
61
|
+
/**
|
|
62
|
+
* Checks if an entry has expired based on TTL
|
|
63
|
+
*/
|
|
64
|
+
private isExpired;
|
|
65
|
+
/**
|
|
66
|
+
* Evicts the least recently used item from the cache
|
|
67
|
+
*/
|
|
68
|
+
private evictLRU;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=LRUCache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LRUCache.d.ts","sourceRoot":"","sources":["../../../../src/infrastructure/cache/LRUCache.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAWhD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,QAAQ,CAAC,CAAC,CAAE,YAAW,MAAM,CAAC,CAAC,CAAC;IAC3C,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA4B;IAClD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAG9B,OAAO,CAAC,IAAI,CAAI;IAChB,OAAO,CAAC,MAAM,CAAI;IAGlB,OAAO,CAAC,aAAa,CAAI;gBAEb,MAAM,EAAE,WAAW;IAM/B;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAsB/B;;;;OAIG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;IA0BhC;;OAEG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAgBzB;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAI5B;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,IAAI,IAAI,MAAM,EAAE;IAIhB;;OAEG;IACH,QAAQ,IAAI,UAAU;IAWtB;;OAEG;IACH,OAAO,CAAC,SAAS;IAIjB;;OAEG;IACH,OAAO,CAAC,QAAQ;CAejB"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LRU (Least Recently Used) Cache implementation
|
|
3
|
+
* Implements the ICache interface with:
|
|
4
|
+
* - Configurable capacity limits
|
|
5
|
+
* - TTL-based expiration
|
|
6
|
+
* - LRU eviction policy
|
|
7
|
+
* - Hit rate tracking
|
|
8
|
+
*
|
|
9
|
+
* @typeParam T - The type of values stored in the cache
|
|
10
|
+
* @group Configuration
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const cache = new LRUCache<string>({ maxItems: 100, ttlMs: 60000 })
|
|
15
|
+
* cache.set("key1", "value1")
|
|
16
|
+
* const value = cache.get("key1") // "value1"
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
export class LRUCache {
|
|
20
|
+
constructor(config) {
|
|
21
|
+
// Hit rate tracking
|
|
22
|
+
this.hits = 0;
|
|
23
|
+
this.misses = 0;
|
|
24
|
+
// Monotonic counter for LRU ordering (avoids issues with same-millisecond operations)
|
|
25
|
+
this.accessCounter = 0;
|
|
26
|
+
this.cache = new Map();
|
|
27
|
+
this.maxItems = config.maxItems;
|
|
28
|
+
this.ttlMs = config.ttlMs;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Retrieves a value from the cache
|
|
32
|
+
* Updates access time for LRU tracking
|
|
33
|
+
* Returns undefined if key doesn't exist or is expired
|
|
34
|
+
*/
|
|
35
|
+
get(key) {
|
|
36
|
+
const entry = this.cache.get(key);
|
|
37
|
+
if (!entry) {
|
|
38
|
+
this.misses++;
|
|
39
|
+
return undefined;
|
|
40
|
+
}
|
|
41
|
+
// Check TTL expiration (skip if ttlMs is 0)
|
|
42
|
+
if (this.ttlMs > 0 && this.isExpired(entry)) {
|
|
43
|
+
this.cache.delete(key);
|
|
44
|
+
this.misses++;
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
// Update access time for LRU (using monotonic counter)
|
|
48
|
+
entry.accessTime = ++this.accessCounter;
|
|
49
|
+
this.hits++;
|
|
50
|
+
return entry.value;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Stores a value in the cache
|
|
54
|
+
* Evicts LRU item if at capacity
|
|
55
|
+
* Refreshes TTL for existing keys
|
|
56
|
+
*/
|
|
57
|
+
set(key, value) {
|
|
58
|
+
const now = Date.now();
|
|
59
|
+
const accessTime = ++this.accessCounter;
|
|
60
|
+
// If key already exists, update it (no eviction needed)
|
|
61
|
+
if (this.cache.has(key)) {
|
|
62
|
+
this.cache.set(key, {
|
|
63
|
+
value,
|
|
64
|
+
timestamp: now,
|
|
65
|
+
accessTime,
|
|
66
|
+
});
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
// Evict if at capacity
|
|
70
|
+
if (this.cache.size >= this.maxItems) {
|
|
71
|
+
this.evictLRU();
|
|
72
|
+
}
|
|
73
|
+
this.cache.set(key, {
|
|
74
|
+
value,
|
|
75
|
+
timestamp: now,
|
|
76
|
+
accessTime,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Checks if a key exists and is not expired
|
|
81
|
+
*/
|
|
82
|
+
has(key) {
|
|
83
|
+
const entry = this.cache.get(key);
|
|
84
|
+
if (!entry) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
// Check TTL expiration
|
|
88
|
+
if (this.ttlMs > 0 && this.isExpired(entry)) {
|
|
89
|
+
this.cache.delete(key);
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Removes a specific key from the cache
|
|
96
|
+
*/
|
|
97
|
+
delete(key) {
|
|
98
|
+
return this.cache.delete(key);
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Removes all entries from the cache
|
|
102
|
+
*/
|
|
103
|
+
clear() {
|
|
104
|
+
this.cache.clear();
|
|
105
|
+
this.hits = 0;
|
|
106
|
+
this.misses = 0;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Returns all keys in the cache
|
|
110
|
+
*/
|
|
111
|
+
keys() {
|
|
112
|
+
return Array.from(this.cache.keys());
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Returns cache statistics
|
|
116
|
+
*/
|
|
117
|
+
getStats() {
|
|
118
|
+
const totalRequests = this.hits + this.misses;
|
|
119
|
+
const hitRate = totalRequests > 0 ? (this.hits / totalRequests) * 100 : undefined;
|
|
120
|
+
return {
|
|
121
|
+
size: this.cache.size,
|
|
122
|
+
maxItems: this.maxItems,
|
|
123
|
+
hitRate,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Checks if an entry has expired based on TTL
|
|
128
|
+
*/
|
|
129
|
+
isExpired(entry) {
|
|
130
|
+
return Date.now() - entry.timestamp > this.ttlMs;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Evicts the least recently used item from the cache
|
|
134
|
+
*/
|
|
135
|
+
evictLRU() {
|
|
136
|
+
let oldestKey = null;
|
|
137
|
+
let oldestAccessTime = Infinity;
|
|
138
|
+
for (const [key, entry] of this.cache) {
|
|
139
|
+
if (entry.accessTime < oldestAccessTime) {
|
|
140
|
+
oldestAccessTime = entry.accessTime;
|
|
141
|
+
oldestKey = key;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (oldestKey !== null) {
|
|
145
|
+
this.cache.delete(oldestKey);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=LRUCache.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LRUCache.js","sourceRoot":"","sources":["../../../../src/infrastructure/cache/LRUCache.ts"],"names":[],"mappings":"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"}
|