refactor: separate map feature queries and source records

This commit is contained in:
Sameh Khamis committed 2026-09-15 08:10:32 -07:00
1 parent a8125ad917
commit bf1d50f29b
28 files changed
+1128 -675

No files matched your search

+7
View File
@@ -1,3 +1,5 @@
import { createOverpassFeatureSource } from '../sources/overpassFeatures.js';
import { FEATURE_SOURCE_METHODS } from '../sources/featureSource.js';
import { createSourceSlot } from '../sources/sourceSlot.js';
import { createApplicationRequestServices } from './requests.js';
@@ -15,6 +17,11 @@ const slots = Object.fromEntries(
createSourceSlot(defaults[name], methods, `${name} service`),
]),
);
slots.features = createSourceSlot(
createOverpassFeatureSource({ boundarySource: slots.boundaries.source }),
FEATURE_SOURCE_METHODS,
'features service',
);
export const applicationServices = Object.freeze(
Object.fromEntries(
Object.entries(slots).map(([name, slot]) => [name, slot.source]),
+10 -1
View File
@@ -1,3 +1,4 @@
import { createOverpassFeatureSource } from '../sources/overpassFeatures.js';
/** Parse bounded retry information from a service response. */
function retryAfterMs(value) {
if (value == null || String(value).trim() === '') return null;
@@ -13,6 +14,7 @@ export function createApplicationRequestServices({
fetchImpl = (...args) => fetch(...args),
signal: lifetime,
endpoints = {},
features,
} = {}) {
const urls = {
boundaries: '/api/overpass',
@@ -62,7 +64,7 @@ export function createApplicationRequestServices({
throw new Error(`${label} unavailable (${response.status})`);
return response.data;
}
return {
const services = {
boundaries: {
async query(query, { signal } = {}) {
const response = await request(urls.boundaries, {
@@ -125,4 +127,11 @@ export function createApplicationRequestServices({
},
},
};
services.features =
features ??
createOverpassFeatureSource({
boundarySource: services.boundaries,
signal: lifetime,
});
return services;
}