@mapvx/web-js 3.6.0-dev.1 → 4.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/README.md +6 -1
- package/dist/cjs/index.js +2 -95
- package/dist/cjs/index.js.LICENSE.txt +1 -0
- package/dist/cjs/index.js.map +1 -1
- package/dist/es/controllers/routeController.d.ts.map +1 -1
- package/dist/es/controllers/routeController.js +25 -8
- package/dist/es/controllers/routeController.js.map +1 -1
- package/dist/es/logger/sentry.js +1 -1
- package/dist/es/map/liveMapFitTransform.d.ts +11 -5
- package/dist/es/map/liveMapFitTransform.d.ts.map +1 -1
- package/dist/es/map/liveMapFitTransform.js +28 -19
- package/dist/es/map/liveMapFitTransform.js.map +1 -1
- package/dist/es/map/map.d.ts.map +1 -1
- package/dist/es/map/map.js +3 -6
- package/dist/es/map/map.js.map +1 -1
- package/dist/umd/index.js +932 -126
- package/dist/umd/index.js.map +1 -1
- package/dist/umd/styles.css +1 -1
- package/dist/umd/styles.css.map +1 -1
- package/package.json +7 -4
- package/dist/cjs/assets/icons.js +0 -85
- package/dist/cjs/assets/icons.js.map +0 -1
- package/dist/cjs/config/draco.js +0 -15
- package/dist/cjs/config/draco.js.map +0 -1
- package/dist/cjs/config/sdkConfig.js +0 -3
- package/dist/cjs/config/sdkConfig.js.map +0 -1
- package/dist/cjs/controllers/markerLayoutController.js +0 -359
- package/dist/cjs/controllers/markerLayoutController.js.map +0 -1
- package/dist/cjs/controllers/routeController.js +0 -1549
- package/dist/cjs/controllers/routeController.js.map +0 -1
- package/dist/cjs/domain/models/_internal.js +0 -14
- package/dist/cjs/domain/models/_internal.js.map +0 -1
- package/dist/cjs/domain/models/_rtl.js +0 -10
- package/dist/cjs/domain/models/_rtl.js.map +0 -1
- package/dist/cjs/domain/models/animation.js +0 -64
- package/dist/cjs/domain/models/animation.js.map +0 -1
- package/dist/cjs/domain/models/banner.js +0 -24
- package/dist/cjs/domain/models/banner.js.map +0 -1
- package/dist/cjs/domain/models/campaign.js +0 -73
- package/dist/cjs/domain/models/campaign.js.map +0 -1
- package/dist/cjs/domain/models/categories.js +0 -37
- package/dist/cjs/domain/models/categories.js.map +0 -1
- package/dist/cjs/domain/models/circle.js +0 -253
- package/dist/cjs/domain/models/circle.js.map +0 -1
- package/dist/cjs/domain/models/cityFilterOption.js +0 -3
- package/dist/cjs/domain/models/cityFilterOption.js.map +0 -1
- package/dist/cjs/domain/models/configuration.js +0 -3
- package/dist/cjs/domain/models/configuration.js.map +0 -1
- package/dist/cjs/domain/models/cssCustomization.js +0 -3
- package/dist/cjs/domain/models/cssCustomization.js.map +0 -1
- package/dist/cjs/domain/models/fitOptions.js +0 -3
- package/dist/cjs/domain/models/fitOptions.js.map +0 -1
- package/dist/cjs/domain/models/innerFloors.js +0 -3
- package/dist/cjs/domain/models/innerFloors.js.map +0 -1
- package/dist/cjs/domain/models/institution.js +0 -45
- package/dist/cjs/domain/models/institution.js.map +0 -1
- package/dist/cjs/domain/models/latLng.js +0 -3
- package/dist/cjs/domain/models/latLng.js.map +0 -1
- package/dist/cjs/domain/models/location.js +0 -3
- package/dist/cjs/domain/models/location.js.map +0 -1
- package/dist/cjs/domain/models/loggeable.js +0 -52
- package/dist/cjs/domain/models/loggeable.js.map +0 -1
- package/dist/cjs/domain/models/mapCamera.js +0 -3
- package/dist/cjs/domain/models/mapCamera.js.map +0 -1
- package/dist/cjs/domain/models/mapConfig.js +0 -37
- package/dist/cjs/domain/models/mapConfig.js.map +0 -1
- package/dist/cjs/domain/models/marker.js +0 -502
- package/dist/cjs/domain/models/marker.js.map +0 -1
- package/dist/cjs/domain/models/multilanguage.js +0 -17
- package/dist/cjs/domain/models/multilanguage.js.map +0 -1
- package/dist/cjs/domain/models/openingHours.js +0 -3
- package/dist/cjs/domain/models/openingHours.js.map +0 -1
- package/dist/cjs/domain/models/place.js +0 -127
- package/dist/cjs/domain/models/place.js.map +0 -1
- package/dist/cjs/domain/models/platform.js +0 -3
- package/dist/cjs/domain/models/platform.js.map +0 -1
- package/dist/cjs/domain/models/popover.js +0 -3
- package/dist/cjs/domain/models/popover.js.map +0 -1
- package/dist/cjs/domain/models/product.js +0 -3
- package/dist/cjs/domain/models/product.js.map +0 -1
- package/dist/cjs/domain/models/property.js +0 -104
- package/dist/cjs/domain/models/property.js.map +0 -1
- package/dist/cjs/domain/models/route.js +0 -166
- package/dist/cjs/domain/models/route.js.map +0 -1
- package/dist/cjs/domain/models/routeConfiguration.js +0 -82
- package/dist/cjs/domain/models/routeConfiguration.js.map +0 -1
- package/dist/cjs/domain/models/routeInstance.js +0 -30
- package/dist/cjs/domain/models/routeInstance.js.map +0 -1
- package/dist/cjs/domain/models/routeStyle.js +0 -3
- package/dist/cjs/domain/models/routeStyle.js.map +0 -1
- package/dist/cjs/domain/models/scene3D.js +0 -3
- package/dist/cjs/domain/models/scene3D.js.map +0 -1
- package/dist/cjs/domain/models/transport.js +0 -22
- package/dist/cjs/domain/models/transport.js.map +0 -1
- package/dist/cjs/domain/ports/ICache.js +0 -3
- package/dist/cjs/domain/ports/ICache.js.map +0 -1
- package/dist/cjs/domain/ports/IHttpClient.js +0 -3
- package/dist/cjs/domain/ports/IHttpClient.js.map +0 -1
- package/dist/cjs/domain/ports/ILogger.js +0 -23
- package/dist/cjs/domain/ports/ILogger.js.map +0 -1
- package/dist/cjs/domain/ports/index.js +0 -10
- package/dist/cjs/domain/ports/index.js.map +0 -1
- package/dist/cjs/infrastructure/cache/CacheManager.js +0 -258
- package/dist/cjs/infrastructure/cache/CacheManager.js.map +0 -1
- package/dist/cjs/infrastructure/cache/LRUCache.js +0 -153
- package/dist/cjs/infrastructure/cache/LRUCache.js.map +0 -1
- package/dist/cjs/infrastructure/cache/PersistentCache.js +0 -168
- package/dist/cjs/infrastructure/cache/PersistentCache.js.map +0 -1
- package/dist/cjs/infrastructure/cache/cacheConfig.js +0 -70
- package/dist/cjs/infrastructure/cache/cacheConfig.js.map +0 -1
- package/dist/cjs/infrastructure/http/FetchHttpClient.js +0 -75
- package/dist/cjs/infrastructure/http/FetchHttpClient.js.map +0 -1
- package/dist/cjs/infrastructure/logging/MVXLogger.js +0 -80
- package/dist/cjs/infrastructure/logging/MVXLogger.js.map +0 -1
- package/dist/cjs/interfaces/cache.js +0 -3
- package/dist/cjs/interfaces/cache.js.map +0 -1
- package/dist/cjs/interfaces/healthResponse.js +0 -3
- package/dist/cjs/interfaces/healthResponse.js.map +0 -1
- package/dist/cjs/interfaces/institutionResponse.js +0 -3
- package/dist/cjs/interfaces/institutionResponse.js.map +0 -1
- package/dist/cjs/interfaces/metadata.js +0 -3
- package/dist/cjs/interfaces/metadata.js.map +0 -1
- package/dist/cjs/interfaces/placeResponse.js +0 -3
- package/dist/cjs/interfaces/placeResponse.js.map +0 -1
- package/dist/cjs/interfaces/routeCacheResponse.js +0 -3
- package/dist/cjs/interfaces/routeCacheResponse.js.map +0 -1
- package/dist/cjs/interfaces/routeResponse.js +0 -3
- package/dist/cjs/interfaces/routeResponse.js.map +0 -1
- package/dist/cjs/interfaces/styleResponse.js +0 -3
- package/dist/cjs/interfaces/styleResponse.js.map +0 -1
- package/dist/cjs/logger/logger.js +0 -78
- package/dist/cjs/logger/logger.js.map +0 -1
- package/dist/cjs/logger/sentry.js +0 -81
- package/dist/cjs/logger/sentry.js.map +0 -1
- package/dist/cjs/map/fitCamera.js +0 -124
- package/dist/cjs/map/fitCamera.js.map +0 -1
- package/dist/cjs/map/liveMapFitTransform.js +0 -180
- package/dist/cjs/map/liveMapFitTransform.js.map +0 -1
- package/dist/cjs/map/map.js +0 -2766
- package/dist/cjs/map/map.js.map +0 -1
- package/dist/cjs/map/mapInteractionOptions.js +0 -73
- package/dist/cjs/map/mapInteractionOptions.js.map +0 -1
- package/dist/cjs/map/scene3DController.js +0 -849
- package/dist/cjs/map/scene3DController.js.map +0 -1
- package/dist/cjs/repository/repository.js +0 -694
- package/dist/cjs/repository/repository.js.map +0 -1
- package/dist/cjs/repository/requester.js +0 -771
- package/dist/cjs/repository/requester.js.map +0 -1
- package/dist/cjs/sdk.js +0 -438
- package/dist/cjs/sdk.js.map +0 -1
- package/dist/cjs/utils/3d.js +0 -245
- package/dist/cjs/utils/3d.js.map +0 -1
- package/dist/cjs/utils/deckLayers.js +0 -153
- package/dist/cjs/utils/deckLayers.js.map +0 -1
- package/dist/cjs/utils/error.js +0 -19
- package/dist/cjs/utils/error.js.map +0 -1
- package/dist/cjs/utils/images.js +0 -25
- package/dist/cjs/utils/images.js.map +0 -1
- package/dist/cjs/utils/loadGlb.js +0 -190
- package/dist/cjs/utils/loadGlb.js.map +0 -1
- package/dist/cjs/utils/mapvxHostname.js +0 -21
- package/dist/cjs/utils/mapvxHostname.js.map +0 -1
- package/dist/cjs/utils/nav-functions.js +0 -150
- package/dist/cjs/utils/nav-functions.js.map +0 -1
- package/dist/cjs/utils/opening-hours-helper.js +0 -914
- package/dist/cjs/utils/opening-hours-helper.js.map +0 -1
- package/dist/cjs/utils/preconnect.js +0 -131
- package/dist/cjs/utils/preconnect.js.map +0 -1
- package/dist/cjs/utils/route-utils.js +0 -57
- package/dist/cjs/utils/route-utils.js.map +0 -1
- package/dist/cjs/utils/semaphore.js +0 -143
- package/dist/cjs/utils/semaphore.js.map +0 -1
- package/dist/cjs/utils/three.js +0 -113
- package/dist/cjs/utils/three.js.map +0 -1
- package/dist/cjs/utils/threeScene.js +0 -126
- package/dist/cjs/utils/threeScene.js.map +0 -1
- package/dist/cjs/utils/update-css.js +0 -76
- package/dist/cjs/utils/update-css.js.map +0 -1
- package/dist/cjs/utils/utils.js +0 -104
- package/dist/cjs/utils/utils.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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"}
|