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

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 (191) 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/domain/models/scene3D.d.ts +13 -0
  9. package/dist/es/domain/models/scene3D.d.ts.map +1 -1
  10. package/dist/es/logger/sentry.js +1 -1
  11. package/dist/es/map/liveMapFitTransform.d.ts +11 -5
  12. package/dist/es/map/liveMapFitTransform.d.ts.map +1 -1
  13. package/dist/es/map/liveMapFitTransform.js +28 -19
  14. package/dist/es/map/liveMapFitTransform.js.map +1 -1
  15. package/dist/es/map/map.d.ts +0 -1
  16. package/dist/es/map/map.d.ts.map +1 -1
  17. package/dist/es/map/map.js +7 -22
  18. package/dist/es/map/map.js.map +1 -1
  19. package/dist/es/map/scene3DController.d.ts +15 -4
  20. package/dist/es/map/scene3DController.d.ts.map +1 -1
  21. package/dist/es/map/scene3DController.js +22 -10
  22. package/dist/es/map/scene3DController.js.map +1 -1
  23. package/dist/umd/index.js +961 -166
  24. package/dist/umd/index.js.map +1 -1
  25. package/dist/umd/styles.css +1 -1
  26. package/dist/umd/styles.css.map +1 -1
  27. package/package.json +7 -4
  28. package/dist/cjs/assets/icons.js +0 -85
  29. package/dist/cjs/assets/icons.js.map +0 -1
  30. package/dist/cjs/config/draco.js +0 -15
  31. package/dist/cjs/config/draco.js.map +0 -1
  32. package/dist/cjs/config/sdkConfig.js +0 -3
  33. package/dist/cjs/config/sdkConfig.js.map +0 -1
  34. package/dist/cjs/controllers/markerLayoutController.js +0 -359
  35. package/dist/cjs/controllers/markerLayoutController.js.map +0 -1
  36. package/dist/cjs/controllers/routeController.js +0 -1549
  37. package/dist/cjs/controllers/routeController.js.map +0 -1
  38. package/dist/cjs/domain/models/_internal.js +0 -14
  39. package/dist/cjs/domain/models/_internal.js.map +0 -1
  40. package/dist/cjs/domain/models/_rtl.js +0 -10
  41. package/dist/cjs/domain/models/_rtl.js.map +0 -1
  42. package/dist/cjs/domain/models/animation.js +0 -64
  43. package/dist/cjs/domain/models/animation.js.map +0 -1
  44. package/dist/cjs/domain/models/banner.js +0 -24
  45. package/dist/cjs/domain/models/banner.js.map +0 -1
  46. package/dist/cjs/domain/models/campaign.js +0 -73
  47. package/dist/cjs/domain/models/campaign.js.map +0 -1
  48. package/dist/cjs/domain/models/categories.js +0 -37
  49. package/dist/cjs/domain/models/categories.js.map +0 -1
  50. package/dist/cjs/domain/models/circle.js +0 -253
  51. package/dist/cjs/domain/models/circle.js.map +0 -1
  52. package/dist/cjs/domain/models/cityFilterOption.js +0 -3
  53. package/dist/cjs/domain/models/cityFilterOption.js.map +0 -1
  54. package/dist/cjs/domain/models/configuration.js +0 -3
  55. package/dist/cjs/domain/models/configuration.js.map +0 -1
  56. package/dist/cjs/domain/models/cssCustomization.js +0 -3
  57. package/dist/cjs/domain/models/cssCustomization.js.map +0 -1
  58. package/dist/cjs/domain/models/fitOptions.js +0 -3
  59. package/dist/cjs/domain/models/fitOptions.js.map +0 -1
  60. package/dist/cjs/domain/models/innerFloors.js +0 -3
  61. package/dist/cjs/domain/models/innerFloors.js.map +0 -1
  62. package/dist/cjs/domain/models/institution.js +0 -45
  63. package/dist/cjs/domain/models/institution.js.map +0 -1
  64. package/dist/cjs/domain/models/latLng.js +0 -3
  65. package/dist/cjs/domain/models/latLng.js.map +0 -1
  66. package/dist/cjs/domain/models/location.js +0 -3
  67. package/dist/cjs/domain/models/location.js.map +0 -1
  68. package/dist/cjs/domain/models/loggeable.js +0 -52
  69. package/dist/cjs/domain/models/loggeable.js.map +0 -1
  70. package/dist/cjs/domain/models/mapCamera.js +0 -3
  71. package/dist/cjs/domain/models/mapCamera.js.map +0 -1
  72. package/dist/cjs/domain/models/mapConfig.js +0 -37
  73. package/dist/cjs/domain/models/mapConfig.js.map +0 -1
  74. package/dist/cjs/domain/models/marker.js +0 -502
  75. package/dist/cjs/domain/models/marker.js.map +0 -1
  76. package/dist/cjs/domain/models/multilanguage.js +0 -17
  77. package/dist/cjs/domain/models/multilanguage.js.map +0 -1
  78. package/dist/cjs/domain/models/openingHours.js +0 -3
  79. package/dist/cjs/domain/models/openingHours.js.map +0 -1
  80. package/dist/cjs/domain/models/place.js +0 -127
  81. package/dist/cjs/domain/models/place.js.map +0 -1
  82. package/dist/cjs/domain/models/platform.js +0 -3
  83. package/dist/cjs/domain/models/platform.js.map +0 -1
  84. package/dist/cjs/domain/models/popover.js +0 -3
  85. package/dist/cjs/domain/models/popover.js.map +0 -1
  86. package/dist/cjs/domain/models/product.js +0 -3
  87. package/dist/cjs/domain/models/product.js.map +0 -1
  88. package/dist/cjs/domain/models/property.js +0 -104
  89. package/dist/cjs/domain/models/property.js.map +0 -1
  90. package/dist/cjs/domain/models/route.js +0 -166
  91. package/dist/cjs/domain/models/route.js.map +0 -1
  92. package/dist/cjs/domain/models/routeConfiguration.js +0 -82
  93. package/dist/cjs/domain/models/routeConfiguration.js.map +0 -1
  94. package/dist/cjs/domain/models/routeInstance.js +0 -30
  95. package/dist/cjs/domain/models/routeInstance.js.map +0 -1
  96. package/dist/cjs/domain/models/routeStyle.js +0 -3
  97. package/dist/cjs/domain/models/routeStyle.js.map +0 -1
  98. package/dist/cjs/domain/models/scene3D.js +0 -3
  99. package/dist/cjs/domain/models/scene3D.js.map +0 -1
  100. package/dist/cjs/domain/models/transport.js +0 -22
  101. package/dist/cjs/domain/models/transport.js.map +0 -1
  102. package/dist/cjs/domain/ports/ICache.js +0 -3
  103. package/dist/cjs/domain/ports/ICache.js.map +0 -1
  104. package/dist/cjs/domain/ports/IHttpClient.js +0 -3
  105. package/dist/cjs/domain/ports/IHttpClient.js.map +0 -1
  106. package/dist/cjs/domain/ports/ILogger.js +0 -23
  107. package/dist/cjs/domain/ports/ILogger.js.map +0 -1
  108. package/dist/cjs/domain/ports/index.js +0 -10
  109. package/dist/cjs/domain/ports/index.js.map +0 -1
  110. package/dist/cjs/infrastructure/cache/CacheManager.js +0 -258
  111. package/dist/cjs/infrastructure/cache/CacheManager.js.map +0 -1
  112. package/dist/cjs/infrastructure/cache/LRUCache.js +0 -153
  113. package/dist/cjs/infrastructure/cache/LRUCache.js.map +0 -1
  114. package/dist/cjs/infrastructure/cache/PersistentCache.js +0 -168
  115. package/dist/cjs/infrastructure/cache/PersistentCache.js.map +0 -1
  116. package/dist/cjs/infrastructure/cache/cacheConfig.js +0 -70
  117. package/dist/cjs/infrastructure/cache/cacheConfig.js.map +0 -1
  118. package/dist/cjs/infrastructure/http/FetchHttpClient.js +0 -75
  119. package/dist/cjs/infrastructure/http/FetchHttpClient.js.map +0 -1
  120. package/dist/cjs/infrastructure/logging/MVXLogger.js +0 -80
  121. package/dist/cjs/infrastructure/logging/MVXLogger.js.map +0 -1
  122. package/dist/cjs/interfaces/cache.js +0 -3
  123. package/dist/cjs/interfaces/cache.js.map +0 -1
  124. package/dist/cjs/interfaces/healthResponse.js +0 -3
  125. package/dist/cjs/interfaces/healthResponse.js.map +0 -1
  126. package/dist/cjs/interfaces/institutionResponse.js +0 -3
  127. package/dist/cjs/interfaces/institutionResponse.js.map +0 -1
  128. package/dist/cjs/interfaces/metadata.js +0 -3
  129. package/dist/cjs/interfaces/metadata.js.map +0 -1
  130. package/dist/cjs/interfaces/placeResponse.js +0 -3
  131. package/dist/cjs/interfaces/placeResponse.js.map +0 -1
  132. package/dist/cjs/interfaces/routeCacheResponse.js +0 -3
  133. package/dist/cjs/interfaces/routeCacheResponse.js.map +0 -1
  134. package/dist/cjs/interfaces/routeResponse.js +0 -3
  135. package/dist/cjs/interfaces/routeResponse.js.map +0 -1
  136. package/dist/cjs/interfaces/styleResponse.js +0 -3
  137. package/dist/cjs/interfaces/styleResponse.js.map +0 -1
  138. package/dist/cjs/logger/logger.js +0 -78
  139. package/dist/cjs/logger/logger.js.map +0 -1
  140. package/dist/cjs/logger/sentry.js +0 -81
  141. package/dist/cjs/logger/sentry.js.map +0 -1
  142. package/dist/cjs/map/fitCamera.js +0 -124
  143. package/dist/cjs/map/fitCamera.js.map +0 -1
  144. package/dist/cjs/map/liveMapFitTransform.js +0 -180
  145. package/dist/cjs/map/liveMapFitTransform.js.map +0 -1
  146. package/dist/cjs/map/map.js +0 -2766
  147. package/dist/cjs/map/map.js.map +0 -1
  148. package/dist/cjs/map/mapInteractionOptions.js +0 -73
  149. package/dist/cjs/map/mapInteractionOptions.js.map +0 -1
  150. package/dist/cjs/map/scene3DController.js +0 -849
  151. package/dist/cjs/map/scene3DController.js.map +0 -1
  152. package/dist/cjs/repository/repository.js +0 -694
  153. package/dist/cjs/repository/repository.js.map +0 -1
  154. package/dist/cjs/repository/requester.js +0 -771
  155. package/dist/cjs/repository/requester.js.map +0 -1
  156. package/dist/cjs/sdk.js +0 -438
  157. package/dist/cjs/sdk.js.map +0 -1
  158. package/dist/cjs/utils/3d.js +0 -245
  159. package/dist/cjs/utils/3d.js.map +0 -1
  160. package/dist/cjs/utils/deckLayers.js +0 -153
  161. package/dist/cjs/utils/deckLayers.js.map +0 -1
  162. package/dist/cjs/utils/error.js +0 -19
  163. package/dist/cjs/utils/error.js.map +0 -1
  164. package/dist/cjs/utils/images.js +0 -25
  165. package/dist/cjs/utils/images.js.map +0 -1
  166. package/dist/cjs/utils/loadGlb.js +0 -190
  167. package/dist/cjs/utils/loadGlb.js.map +0 -1
  168. package/dist/cjs/utils/mapvxHostname.js +0 -21
  169. package/dist/cjs/utils/mapvxHostname.js.map +0 -1
  170. package/dist/cjs/utils/nav-functions.js +0 -150
  171. package/dist/cjs/utils/nav-functions.js.map +0 -1
  172. package/dist/cjs/utils/opening-hours-helper.js +0 -914
  173. package/dist/cjs/utils/opening-hours-helper.js.map +0 -1
  174. package/dist/cjs/utils/preconnect.js +0 -131
  175. package/dist/cjs/utils/preconnect.js.map +0 -1
  176. package/dist/cjs/utils/route-utils.js +0 -57
  177. package/dist/cjs/utils/route-utils.js.map +0 -1
  178. package/dist/cjs/utils/semaphore.js +0 -143
  179. package/dist/cjs/utils/semaphore.js.map +0 -1
  180. package/dist/cjs/utils/three.js +0 -113
  181. package/dist/cjs/utils/three.js.map +0 -1
  182. package/dist/cjs/utils/threeScene.js +0 -126
  183. package/dist/cjs/utils/threeScene.js.map +0 -1
  184. package/dist/cjs/utils/update-css.js +0 -76
  185. package/dist/cjs/utils/update-css.js.map +0 -1
  186. package/dist/cjs/utils/utils.js +0 -104
  187. package/dist/cjs/utils/utils.js.map +0 -1
  188. package/dist/es/domain/models/_rtl.d.ts +0 -7
  189. package/dist/es/domain/models/_rtl.d.ts.map +0 -1
  190. package/dist/es/domain/models/_rtl.js +0 -7
  191. package/dist/es/domain/models/_rtl.js.map +0 -1
@@ -1,190 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_GLB_LOAD_TIMEOUT_MS = void 0;
4
- exports.createLazyMeshoptDecoder = createLazyMeshoptDecoder;
5
- exports.loadGlbRoot = loadGlbRoot;
6
- const draco_1 = require("../config/draco");
7
- const three_1 = require("./three");
8
- /**
9
- * Builds a stand-in meshopt decoder that defers importing the real module (and instantiating its
10
- * WASM) until the first `EXT_meshopt_compression` buffer actually needs decoding. GLBs without the
11
- * extension never trigger the import, so the decoder stays off the critical path of the first 3D
12
- * frame — it used to be part of the eager three.js import chain, delaying every scene load.
13
- *
14
- * `supported` mirrors the real module's own gate — it returns a bare `{ supported: false }` when
15
- * `typeof WebAssembly !== "object"` — so the answer is reproduced synchronously here without
16
- * importing anything. Reporting a flat `true` instead would break the platforms it claims to
17
- * support: `GLTFLoader` reads `supported` before deciding to decode, and on `false` with meshopt
18
- * merely OPTIONAL it returns `null` and falls back to the GLB's uncompressed buffer
19
- * (`GLTFLoader.js` `GLTFMeshoptCompression.loadBufferView`). Claiming support on a WASM-less
20
- * platform discards that fallback and fails the whole asset with a `TypeError` from this shim,
21
- * since `decodeGltfBufferAsync` does not exist on the real module there.
22
- *
23
- * @param load Injectable module loader, for tests. Defaults to the cached {@link loadMeshoptDecoder}.
24
- * @internal
25
- */
26
- function createLazyMeshoptDecoder(load = three_1.loadMeshoptDecoder) {
27
- return {
28
- // Same condition the real decoder uses, evaluated without loading it.
29
- supported: typeof WebAssembly === "object",
30
- decodeGltfBufferAsync: async (count, size, source, mode, filter) => {
31
- const decoder = await load();
32
- await decoder.ready;
33
- return decoder.decodeGltfBufferAsync(count, size, source, mode, filter);
34
- },
35
- };
36
- }
37
- /**
38
- * Lazily-initialized, cached GLTF loader configured with Draco + KTX2 support.
39
- *
40
- * The loaders (and their WebGLRenderer for KTX2 support detection) are heavy and pull in Three.js,
41
- * so they are created on first use inside the dynamic-import boundary rather than at module load.
42
- *
43
- * Memoized through {@link memoizeImport} for the same reason the loaders in `three.ts` are: a plain
44
- * `cached ??=` also caches a rejection. Fixing the three loaders was not enough, because this is a
45
- * SECOND cache wrapped around `loadThree()` — so a transient failure was evicted there and then
46
- * replayed from here forever, and `loadGlbRoot` awaits both, meaning every GLB kept failing with
47
- * the stale error long after `loadThree()` had recovered. Not only network: the `.then` below
48
- * constructs a `WebGLRenderer` for KTX2 support detection, and a failed context creation was
49
- * cached just the same.
50
- */
51
- const getGltfLoader = (0, three_1.memoizeImport)(() => (0, three_1.loadThree)().then((mod) => {
52
- const dracoLoader = new mod.DRACOLoader();
53
- dracoLoader.setDecoderPath(draco_1.DEFAULT_DRACO_DECODER_PATH);
54
- const gltfLoader = new mod.GLTFLoader();
55
- gltfLoader.setDRACOLoader(dracoLoader);
56
- const ktx2Loader = new mod.KTX2Loader();
57
- ktx2Loader.setTranscoderPath(draco_1.DEFAULT_KTX2_TRANSCODER_PATH);
58
- gltfLoader.setKTX2Loader(ktx2Loader);
59
- ktx2Loader.detectSupport(new mod.THREE.WebGLRenderer({ antialias: true }));
60
- // Enable EXT_meshopt_compression so meshopt-compressed GLBs decode, without paying for the
61
- // decoder module up front: the lazy stand-in imports it (and instantiates its WASM) only when
62
- // the first meshopt-compressed buffer is actually decoded. Assets that don't use the extension
63
- // never load it. The cast is safe — with `decodeGltfBufferAsync` present, GLTFLoader touches
64
- // only `supported` and `decodeGltfBufferAsync` (see LazyMeshoptDecoder).
65
- gltfLoader.setMeshoptDecoder(createLazyMeshoptDecoder());
66
- return gltfLoader;
67
- }));
68
- /**
69
- * Default per-asset timeout for {@link loadGlbRoot}.
70
- *
71
- * Guards against loaders that hang instead of throwing — a GLB whose binary chunk is truncated
72
- * (see {@link loadGlbRoot}'s completeness check) or otherwise malformed can put Three.js's
73
- * `DRACOLoader` into an undefined state: sometimes a decode error, sometimes no callback at all.
74
- * Without a timeout, one such asset never settles and blocks every other load queued behind it.
75
- *
76
- * Declarative GLB scenes can legitimately include very large assets — a client's ground-mesh
77
- * "Suelo" model measured at ~400 MB took ~26s to download alone on a solid connection, before any
78
- * Draco decode time, and totem hardware/networks in the field are often slower than that. The
79
- * timeout only needs to be long enough that no realistically-sized valid asset ever hits it; a
80
- * truly hung load (the actual failure this guards against) would still hang forever whether this
81
- * is 30 seconds or 500 seconds, so there is no tradeoff in keeping it generous.
82
- *
83
- * @group Configuration
84
- */
85
- exports.DEFAULT_GLB_LOAD_TIMEOUT_MS = 500000;
86
- /**
87
- * Magic number ("glTF" read little-endian) at byte offset 0 of every binary glTF (`.glb`)
88
- * container. Used only to tell a binary GLB apart from a plain JSON `.gltf` payload — the latter
89
- * has no such header and skips the completeness check in {@link assertGlbBufferComplete}.
90
- */
91
- const GLB_MAGIC = 0x46546c67;
92
- /**
93
- * Rejects a GLB download that was cut short before it reaches Three.js's `GLTFLoader`/`DRACOLoader`,
94
- * whose behavior on truncated input ranges from a cryptic decode error (e.g. "Unexpected geometry
95
- * type") to an outright hang, rather than a clear message pointing at the actual problem.
96
- *
97
- * The binary glTF container format requires the 12-byte header's declared total length to equal
98
- * the file's real byte length (see the {@link https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#binary-header | spec}).
99
- * A mismatch means the response body was truncated — a dropped connection, or the object stored at
100
- * `url` is itself incomplete — so every buffer-view offset past that point reads garbage. This is
101
- * exactly what was found in the field for one "Suelo" asset that both threw a decode error and (in
102
- * a larger sibling file) hung: the file's own header declared a ~383 MB binary chunk while only
103
- * ~8.7 MB had actually been received.
104
- */
105
- function assertGlbBufferComplete(buffer, url) {
106
- if (buffer.byteLength < 12)
107
- return; // too short to have a GLB header; let parse() report it
108
- const header = new DataView(buffer, 0, 12);
109
- if (header.getUint32(0, true) !== GLB_MAGIC)
110
- return; // plain JSON .gltf, not a binary .glb
111
- const declaredLength = header.getUint32(8, true);
112
- if (declaredLength !== buffer.byteLength) {
113
- throw new Error(`GLB download is truncated or corrupt: header declares ${declaredLength} bytes, received ${buffer.byteLength}: ${url}`);
114
- }
115
- }
116
- /**
117
- * Loads a GLB/GLTF from URL and returns the root scene group.
118
- * Central entry point so the loader implementation can be swapped later (e.g. Draco, KTX2, custom fetch).
119
- *
120
- * Fetches the raw bytes itself (rather than deferring to `GLTFLoader.load`) so a truncated download
121
- * can be caught and rejected clearly — see {@link assertGlbBufferComplete} — before it ever reaches
122
- * the Draco/KTX2 decoders.
123
- *
124
- * @param url - GLB URL
125
- * @returns Root `THREE.Group` from the loaded glTF scene
126
- * @group Utils
127
- */
128
- async function loadGlbRoot(url, options = {}) {
129
- const { timeoutMs = exports.DEFAULT_GLB_LOAD_TIMEOUT_MS, onProgress } = options;
130
- const [gltfLoader, { THREE: three }] = await Promise.all([getGltfLoader(), (0, three_1.loadThree)()]);
131
- // Set once the caller has stopped waiting (success, failure, or timeout) so any callback three
132
- // fires afterwards — e.g. a timed-out fetch/decode that keeps running in the background — is a
133
- // no-op instead of resolving/rejecting an already-settled promise or emitting a stray progress
134
- // event after the batch this asset belongs to already reported `done: true`.
135
- let settled = false;
136
- const fileLoader = new three.FileLoader();
137
- fileLoader.setResponseType("arraybuffer");
138
- const load = new Promise((resolve, reject) => {
139
- const onError = (error) => {
140
- if (settled)
141
- return;
142
- reject(error instanceof Error ? error : new Error(String(error)));
143
- };
144
- fileLoader.load(url, (data) => {
145
- if (settled)
146
- return;
147
- const buffer = data;
148
- try {
149
- assertGlbBufferComplete(buffer, url);
150
- }
151
- catch (err) {
152
- onError(err);
153
- return;
154
- }
155
- gltfLoader.parse(buffer, three.LoaderUtils.extractUrlBase(url), (gltf) => {
156
- if (settled)
157
- return;
158
- resolve(gltf.scene);
159
- }, onError);
160
- }, (event) => {
161
- if (!settled)
162
- onProgress === null || onProgress === void 0 ? void 0 : onProgress(event);
163
- }, onError);
164
- });
165
- if (!Number.isFinite(timeoutMs) || timeoutMs <= 0) {
166
- try {
167
- return await load;
168
- }
169
- finally {
170
- settled = true;
171
- }
172
- }
173
- let timer;
174
- const timeout = new Promise((_resolve, reject) => {
175
- timer = setTimeout(() => reject(new Error(`Timed out loading GLB after ${timeoutMs}ms: ${url}`)), timeoutMs);
176
- });
177
- try {
178
- return await Promise.race([load, timeout]);
179
- }
180
- finally {
181
- settled = true;
182
- clearTimeout(timer);
183
- // Cancels the underlying fetch (and, by never delivering its buffer, the Draco/KTX2 decode)
184
- // so a timed-out asset actually frees its network/CPU usage instead of running to completion
185
- // unattended — otherwise GLB_LOAD_CONCURRENCY only bounds how many loads the caller awaits,
186
- // not how many are truly in flight. A no-op if `load` already won the race.
187
- fileLoader.abort();
188
- }
189
- }
190
- //# sourceMappingURL=loadGlb.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loadGlb.js","sourceRoot":"","sources":["../../../src/utils/loadGlb.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isMapVxRequestHostname = isMapVxRequestHostname;
4
- /**
5
- * Returns whether a URL hostname is part of the MapVX API domain tree.
6
- * Matches `mapvx.com` and `mapvx.dev` plus any subdomain (`api.mapvx.com`,
7
- * `public-api.mapvx.com`, `api.mapvx.dev`, `portal.mapvx.dev`, etc.).
8
- * Does not match lookalike domains (e.g. `notmapvx.com`).
9
- *
10
- * @param hostname - Value from `URL.hostname` (no port)
11
- * @returns True if context headers should be attached for this host
12
- * @group Utils
13
- */
14
- function isMapVxRequestHostname(hostname) {
15
- const h = hostname.trim().toLowerCase();
16
- if (!h) {
17
- return false;
18
- }
19
- return /^(?:[a-z0-9-]+\.)*mapvx\.(?:com|dev)$/.test(h);
20
- }
21
- //# sourceMappingURL=mapvxHostname.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mapvxHostname.js","sourceRoot":"","sources":["../../../src/utils/mapvxHostname.ts"],"names":[],"mappings":";;AAUA,wDAMC;AAhBD;;;;;;;;;GASG;AACH,SAAgB,sBAAsB,CAAC,QAAgB;IACrD,MAAM,CAAC,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACvC,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,uCAAuC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACxD,CAAC"}
@@ -1,150 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.NavFunctions = void 0;
4
- exports.toRadians = toRadians;
5
- exports.toDegrees = toDegrees;
6
- exports.compareLatLng = compareLatLng;
7
- const { asin, atan2, cos, sin, pow, sqrt, PI } = Math;
8
- /**
9
- * Return the haversine of a number.
10
- * Haversine formula is a formula that calculates the distance
11
- * between two points on a sphere given their longitudes and latitudes.
12
- * @group Utils
13
- * @see [Haversine Formula](https://en.wikipedia.org/wiki/Haversine_formula)
14
- * @param angle A numeric expression that contains an angle measured in radians.
15
- * @returns
16
- */
17
- function hav(angle) {
18
- return sin(angle / 2) * sin(angle / 2);
19
- }
20
- /**
21
- * Converts an angle from degrees to radians.
22
- * @group Utils
23
- * @param degrees - The angle in degrees.
24
- * @returns The angle converted to radians.
25
- */
26
- function toRadians(degrees) {
27
- return degrees * (PI / 180);
28
- }
29
- /**
30
- * Converts an angle from radians to degrees.
31
- * @group Utils
32
- * @param radians - The angle in radians.
33
- * @returns The angle converted to degrees.
34
- */
35
- function toDegrees(radians) {
36
- return radians * (180 / PI);
37
- }
38
- /**
39
- * Compare two geographic points.
40
- * @group Utils
41
- * @param location - The first point.
42
- * @param otherLocation - The second point.
43
- * @returns True if the points are the same, false otherwise.
44
- */
45
- function compareLatLng(location, otherLocation) {
46
- return location.lat === otherLocation.lat && location.lng === otherLocation.lng;
47
- }
48
- /**
49
- * NavFunctions is a class that contains static methods to calculate distances and angles between geographic points.
50
- * @group Utils
51
- */
52
- class NavFunctions {
53
- /**
54
- * Calculate the distance between two geographic points using the haversine formula.
55
- *
56
- * @see [Haversine Formula](https://en.wikipedia.org/wiki/Haversine_formula)
57
- *
58
- * @param pointA A geographic point.
59
- * @param pointB Another geographic point.
60
- * @returns The distance between the two points.
61
- */
62
- static distance(pointA, pointB) {
63
- const radLatA = toRadians(pointA.lat);
64
- const radLatB = toRadians(pointB.lat);
65
- const radLongA = toRadians(pointA.lng);
66
- const radLongB = toRadians(pointB.lng);
67
- const deltaLat = radLatB - radLatA;
68
- const deltaLng = radLongB - radLongA;
69
- const haversine = hav(deltaLat) + cos(radLatA) * cos(radLatB) * hav(deltaLng);
70
- return 2 * NavFunctions.EARTH_RADIUS * asin(sqrt(haversine));
71
- }
72
- /**
73
- *
74
- * @param pointA
75
- * @param pointB
76
- * @param fraction A number between 0 to 1, 0 and 1 inclusive.
77
- * @returns
78
- */
79
- static intermediatePointBetween(pointA, pointB, fraction) {
80
- const radLatA = toRadians(pointA.lat);
81
- const radLatB = toRadians(pointB.lat);
82
- const radLongA = toRadians(pointA.lng);
83
- const radLongB = toRadians(pointB.lng);
84
- const angDistance = NavFunctions.distance(pointA, pointB) / NavFunctions.EARTH_RADIUS;
85
- const a = sin((1 - fraction) * angDistance) / sin(angDistance);
86
- const b = sin(fraction * angDistance) / sin(angDistance);
87
- const x = a * cos(radLatA) * cos(radLongA) + b * cos(radLatB) * cos(radLongB);
88
- const y = a * cos(radLatA) * sin(radLongA) + b * cos(radLatB) * sin(radLongB);
89
- const z = a * sin(radLatA) + b * sin(radLatB);
90
- const radLat = atan2(z, sqrt(pow(x, 2) + pow(y, 2)));
91
- const radLong = atan2(y, x);
92
- const lat = toDegrees(radLat);
93
- const lng = toDegrees(radLong);
94
- return {
95
- lat: lat,
96
- lng: lng,
97
- };
98
- }
99
- /**
100
- * Calculate the angle of a line between two points.
101
- * Relative to NORTH in positive degrees: 0 N, 90 E, 180 S, 270 O
102
- * @param source The initial point
103
- * @param destination The final
104
- * @returns
105
- */
106
- static bearingInDegBetween(source, destination) {
107
- const inRad = NavFunctions.bearingInRadBetween(source, destination);
108
- return toDegrees(inRad);
109
- }
110
- /**
111
- * Calculate the bearing between two points in radians.
112
- * @param source The initial point.
113
- * @param destination The final point.
114
- * @returns The bearing in radians.
115
- */
116
- static bearingInRadBetween(source, destination) {
117
- const x = destination.lng - source.lng;
118
- const y = destination.lat - source.lat;
119
- return (PI / 2 - atan2(y, x) + 2 * PI) % (2 * PI);
120
- }
121
- /**
122
- * Calculate an intermediate angle between two given angles based on a specific fraction.
123
- * The function returns an angle that is a certain fraction of the shortest arc between the initial and final angles.
124
- *
125
- * @remarks
126
- *
127
- * If the fraction is 0, the function returns the initial angle.
128
- *
129
- * If the fraction is 1, it returns the final angle.
130
- *
131
- * For fractions in between, it returns an angle that is a proportional distance between the two angles along the shortest arc.
132
- *
133
- * @param initialAngle The starting angle specified in degrees.
134
- * @param finalAngle The ending angle specified in degrees.
135
- * @param fraction A decimal value ranging from 0 to 1 indicating the fraction of the distance between the initial and final angles.
136
- * @returns The calculated intermediate angle in degrees, within the range `[0, 360[`.
137
- */
138
- static intermediateAngleBetween(initialAngle, finalAngle, fraction) {
139
- let delta = ((finalAngle - initialAngle + 180) % 360) - 180;
140
- if (delta < -180)
141
- delta += 360;
142
- return (initialAngle + 360 + delta * fraction) % 360;
143
- }
144
- }
145
- exports.NavFunctions = NavFunctions;
146
- /**
147
- * The radius of the Earth in meters.
148
- */
149
- NavFunctions.EARTH_RADIUS = 6378000;
150
- //# sourceMappingURL=nav-functions.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"nav-functions.js","sourceRoot":"","sources":["../../../src/utils/nav-functions.ts"],"names":[],"mappings":"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"}