mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-04 02:14:01 +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]>
37 lines
1.6 KiB
JavaScript
37 lines
1.6 KiB
JavaScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { readFileSync, readdirSync } from 'node:fs';
|
|
import path from 'node:path';
|
|
import { fileURLToPath } from 'node:url';
|
|
|
|
const SRC_ROOT = fileURLToPath(new URL('.', import.meta.url));
|
|
|
|
/** Every browser-built module under src/ — the test files are Node-only. */
|
|
function browserModules(directory = SRC_ROOT) {
|
|
const files = [];
|
|
for (const entry of readdirSync(directory, { withFileTypes: true })) {
|
|
const absolute = path.join(directory, entry.name);
|
|
if (entry.isDirectory()) files.push(...browserModules(absolute));
|
|
else if (entry.isFile() && entry.name.endsWith('.js')) files.push(absolute);
|
|
}
|
|
return files.sort();
|
|
}
|
|
|
|
test('no browser-built module imports a Node core module', () => {
|
|
// Vite externalizes `node:*` for the browser and only WARNS, so a stray
|
|
// import survives the build and turns into a runtime failure the moment the
|
|
// guard around it is wrong. src/data/naturalEarthRegions.js and
|
|
// src/data/neighborhoodPolygons.js both carried one to read their bundled
|
|
// JSON packs under node:test; src/data/bundledJson.js now serves both runtimes.
|
|
const offenders = [];
|
|
for (const file of browserModules()) {
|
|
const source = readFileSync(file, 'utf8');
|
|
// Static `from 'node:fs'` and dynamic `import('node:fs')`, quoted either way.
|
|
if (/\bfrom\s*['"]node:|\bimport\s*\(\s*(?:\/\*[^*]*\*\/\s*)?['"]node:/.test(source)) {
|
|
offenders.push(path.relative(SRC_ROOT, file).split(path.sep).join('/'));
|
|
}
|
|
}
|
|
|
|
assert.deepEqual(offenders, [], `Node core imports reached the browser build: ${offenders.join(', ')}`);
|
|
});
|