import Supercluster from 'supercluster' export function createClusterIndex(options = {}) { const index = new Supercluster(options) const state = { features: Object.freeze([]) } return { load(features) { const list = Object.freeze([...(features ?? [])]) index.load(list) state.features = list }, query(view) { if (!view || state.features.length === 0) return [] const { west, south, east, north, zoom } = view return index.getClusters( [west, south, east, north], Math.floor(zoom ?? 14), ).map((feature) => { if (!feature.properties?.cluster) return feature return { ...feature, properties: { ...feature.properties, expansionZoom: index.getClusterExpansionZoom(feature.properties.cluster_id), }, } }) }, } }