mirror of
https://github.com/bilawalsidhu/gods-eye-view.git
synced 2026-11-05 10:53:59 +00:00
fix: validate feature services before allocating scene owners
This commit is contained in:
1 parent
bf1d50f29b
commit
fa2f839cbd
2 files changed
+27
-6
No files matched your search
@@ -1,3 +1,4 @@
|
|||||||
|
import { requireFeatureSource } from '../sources/featureSource.js';
|
||||||
import { createOverpassFeatureSource } from '../sources/overpassFeatures.js';
|
import { createOverpassFeatureSource } from '../sources/overpassFeatures.js';
|
||||||
import { createSurfaceServices } from './surfaceServices.js';
|
import { createSurfaceServices } from './surfaceServices.js';
|
||||||
import { createAnnotationResolver } from '../annotations/resolver.js';
|
import { createAnnotationResolver } from '../annotations/resolver.js';
|
||||||
@@ -14,16 +15,17 @@ export function createApplicationOperations({ requests, signal, eventTarget }) {
|
|||||||
if (typeof requests?.[name]?.[method] !== 'function')
|
if (typeof requests?.[name]?.[method] !== 'function')
|
||||||
throw new TypeError(`Missing application request service: ${name}`);
|
throw new TypeError(`Missing application request service: ${name}`);
|
||||||
}
|
}
|
||||||
const surface = createSurfaceServices({
|
const features = requireFeatureSource(
|
||||||
terrainSource: requests.terrain,
|
|
||||||
signal,
|
|
||||||
eventTarget,
|
|
||||||
});
|
|
||||||
const features =
|
|
||||||
requests.features ??
|
requests.features ??
|
||||||
createOverpassFeatureSource({
|
createOverpassFeatureSource({
|
||||||
boundarySource: requests.boundaries,
|
boundarySource: requests.boundaries,
|
||||||
signal,
|
signal,
|
||||||
|
}),
|
||||||
|
);
|
||||||
|
const surface = createSurfaceServices({
|
||||||
|
terrainSource: requests.terrain,
|
||||||
|
signal,
|
||||||
|
eventTarget,
|
||||||
});
|
});
|
||||||
const annotationResolver = createAnnotationResolver({
|
const annotationResolver = createAnnotationResolver({
|
||||||
featureSource: features,
|
featureSource: features,
|
||||||
|
|||||||
@@ -163,3 +163,22 @@ test('annotation lookup and cached outlines use the supplied source independentl
|
|||||||
{ name: 'AbortError' },
|
{ 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);
|
||||||
|
});
|
||||||
Reference in new issue
Block a user