mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 18:34:02 +00:00
The Natural Earth and neighborhood packs were loaded with a JSON-attributed
import(). The Vite dev server answers that request with a JavaScript module,
which the browser rejects, so every analyst region scope failed and fell
through to a geocode lookup that could take 12-28 s.
- src/data/bundledJson.js fetches the pack from a new URL(..., import.meta.url)
asset in the browser; under Node the caller's attributed import runs.
- resolveRegionRingForQuery caps the geocode + admin-boundary rung at 3 s and
returns { error: 'region-timeout' }; the lookup keeps running and fills the
cache. The analyst query reports it as code 'region-timeout'. The Nepal
locator opts out of the budget.
- Unit tests for the loader, the timeout and the analyst error; the behavior
harness checks the Gulf of Mexico scope and retries Texas on region-timeout.
Co-authored-by: Bilawal Sidhu <[email protected]>
30 lines
1.1 KiB
JavaScript
30 lines
1.1 KiB
JavaScript
/**
|
|
* @file Load a JSON file shipped beside the source modules.
|
|
*
|
|
* The browser fetches the file from `url` — a `new URL('./….json',
|
|
* import.meta.url)` written in the calling module, which Vite serves as-is in
|
|
* dev and emits as an asset in the production build. Under Node (node:test)
|
|
* that URL is a `file:` URL, which `fetch` cannot read, so the caller's
|
|
* JSON-attributed import runs instead.
|
|
*
|
|
* The attributed import cannot serve the browser: the Vite dev server answers
|
|
* it with a JavaScript module, which the browser rejects for a JSON import.
|
|
*
|
|
* @module data/bundledJson
|
|
*/
|
|
|
|
/**
|
|
* @param {URL} url - Resolved against the calling module's `import.meta.url`.
|
|
* @param {() => Promise<{default: any}>} importJson - The caller's literal
|
|
* `import('./….json', { with: { type: 'json' } })`, used only under Node.
|
|
* @returns {Promise<any>} The parsed JSON.
|
|
*/
|
|
export async function loadBundledJson(url, importJson) {
|
|
if (url.protocol === 'file:') return (await importJson()).default;
|
|
const response = await fetch(url);
|
|
if (!response.ok) {
|
|
throw new Error(`HTTP ${response.status} for ${url.pathname}`);
|
|
}
|
|
return response.json();
|
|
}
|