fix: validate feature services before allocating scene owners

This commit is contained in:
Sameh Khamis committed 2026-09-15 08:12:13 -07:00
1 parent bf1d50f29b
commit fa2f839cbd
2 files changed
+27 -6

No files matched your search

+8 -6
View File
@@ -1,3 +1,4 @@
import { requireFeatureSource } from '../sources/featureSource.js';
import { createOverpassFeatureSource } from '../sources/overpassFeatures.js';
import { createSurfaceServices } from './surfaceServices.js';
import { createAnnotationResolver } from '../annotations/resolver.js';
@@ -14,17 +15,18 @@ export function createApplicationOperations({ requests, signal, eventTarget }) {
if (typeof requests?.[name]?.[method] !== 'function')
throw new TypeError(`Missing application request service: ${name}`);
}
const features = requireFeatureSource(
requests.features ??
createOverpassFeatureSource({
boundarySource: requests.boundaries,
signal,
}),
);
const surface = createSurfaceServices({
terrainSource: requests.terrain,
signal,
eventTarget,
});
const features =
requests.features ??
createOverpassFeatureSource({
boundarySource: requests.boundaries,
signal,
});
const annotationResolver = createAnnotationResolver({
featureSource: features,
signal,
+19
View File
@@ -163,3 +163,22 @@ test('annotation lookup and cached outlines use the supplied source independentl
{ name: 'AbortError' },
);
});
test('invalid feature adapters fail before surface listeners are installed', () => {
let installed = 0;
assert.throws(
() =>
createApplicationOperations({
signal: new AbortController().signal,
requests: { ...requests({ getHeights: async () => [] }), features: {} },
eventTarget: {
addEventListener() {
installed++;
},
removeEventListener() {},
},
}),
/Missing feature operation/,
);
assert.equal(installed, 0);
});