ConstComparison operators for conditional style rules — see style-operators.ts.
Default styles for each geometry type (polygon, line, point).
Records, on the layer entry, the collection the map source now holds.
🛑 THE STORE IS THE TRUTH OF WHAT THE SOURCE CONTAINS, and this function is the
one place that says so. Every writer of a whole collection goes through it, so a
reader of entry.features never has to ask which of the two is ahead.
⚠️ The invariant was not free before, it was merely SELF-HEALING. A writer that
fed the source without recording it here left the store stale — and the next
setData re-pushed the whole store collection, so the two agreed again (the
store winning, the other write lost). That repair disappears the moment a
mutation is expressed as a DIFF: the source keeps what it was fed, the store
keeps what it had, and the two never re-converge. Measured case:
applyOgcRefreshedData fed the source an autoRefresh result straight off the
network, which the store never saw.
🛑 AND IT ANNOUNCES — geoleaf:layer:updated, once per write. What derives from the
store (an open table, an active filter) follows the event, and the event used to leave
from the calls of GeoLeaf.Layers alone: a real-time tick, an OGC auto-refresh and a
host's own GeoLeaf.GeoJSON.updateLayerData rewrote the store unannounced, and both
stayed stale until the user's next gesture. Announcing HERE covers every writer of a
whole collection by construction — including the ones not written yet.
⚠️ What derives a verdict from the collection is invalidated BEFORE the announcement: a listener that mutates the layer synchronously must not read one computed for the collection just replaced.
Not exported as a free function on purpose — it belongs to the state it writes,
beside getLayerById, which is what readers of that state already reach for.
IMapAdapter instance (set during init).