Changelog
All notable changes to @geoleaf/core are documented here.
Format: Keep a Changelog — Semantic Versioning.
[Unreleased]
Added
Geocoding: 31ème export nommé ESM. Module de recherche d'adresse lazy-loadé (_loadModule("geocoding")), APIGeoLeaf.Geocoding. Quatre fournisseurs intégrés :addok,nominatim,photon, URL personnalisée.geoleaf:geocoding:result: nouvel événement émis lors de la sélection d'un résultat de géocodage — payload{ label, lat, lng, bounds? }.GeocodingConfigdansui.jsonougeoleaf.config.json: paramètresenabled,provider,position,placeholder,minChars,resultLimit,debounceMs,flyToZoom.
[2.0.0] - 2026-03-22
First public release on npm. See the full release notes for complete details.
⚠️ Breaking Changes
- Leaflet → MapLibre GL JS v5 : moteur de rendu remplacé. Supprimer
leaflet/leaflet.markercluster, ajoutermaplibre-gl@^5.0.0en peer dependency. - Convention coordonnées :
[lat, lng](Leaflet) →[lng, lat](GeoJSON/MapLibre standard). - Scope npm renommé :
geoleaf→@geoleaf/core. - UMD supprimé : distribution ESM-only. Remplacer
<script src="geoleaf.umd.js">par<script type="module">. container:→mapId:: clé d'initialisation du conteneur carte renommée.applyTheme(theme)→applyTheme(layerId, themeId): signature changée.- CSS : classes
.leaflet-*→.maplibregl-*(MapLibre) +.gl-*(GeoLeaf interne).
Added
- MaplibreAdapter : implémentation complète de
IMapAdapter(33 méthodes) — rendu WebGL, clustering GPU natif, MVT/PBF vector tiles. @geoleaf/connectorv1.0.0 (MIT, npm public) : intercepteur fetch universel pour sources géospatiales authentifiées (GeoJSON, WFS, vector tiles, PMTiles).- Basemaps : CARTO Positron / Dark Matter / Voyager, ESRI Street, support
pmtiles://. - Performance marks :
window.__GEOLEAF_PERF__ = trueactive 8 paires de marks (TTI, boot, modules...). - Architecture TypeScript :
lazy-module-loader.ts,loader-types.ts(13 interfaces service locator), contracts enrichis (api.contract.ts,ui-controls.contract.ts,map-adapter.contract.ts). - Sécurité : module CSRF complet (
csrf-token.ts),DOMSecurity.setSafeHTML()systématique,CSS.escape()sur POI IDs. - Accessibilité :
prefers-reduced-motion,:focus-visible,aria-label+role="img"sur markers MapLibre. - Documentation : site VitePress
geoleaf.dev/docs/, TypeDoc dual entries, 273 fichiers déployés.
Changed
- Build : UMD supprimé — 3 sorties ESM (bundle full chunked, preserveModules, lite sans table/labels/route/search).
- Tests : migration complète Jest → Vitest 3 + Istanbul — 323 suites, 8 317 tests, couverture branches 77,97 %.
- TypeScript strict : 30
@ts-nochecksupprimés, 0 erreurtsc --noEmit --strict. - Dead code : 7 fichiers orphelins et 172 exports morts supprimés (Knip).
- Filtres GeoJSON : nouveau chemin MapLibre via
updateLayerData()sans corruption du dataset source.
Fixed
- Basemap raster s'affichait au-dessus de toutes les couches GeoJSON/POI/route.
- Style selector niveau racine — wrapper non déroulé avant
normalizeToFlat(). - Clustering natif MapLibre — options
cluster/clusterRadius/clusterMaxZoomnon propagées à la source. - Side panel vide — objets imbriqués sérialisés en JSON string par MapLibre lors des clics.
- Échelle graphique invisible — classes CSS
.gl-scale-graphicabsentes. - Labels glyphs 404 —
_resolveMapFontStack()avec fallback dynamique. - Visibilité zoom ignorée après changement de thème.
- StyleRules data-driven inopérantes — préfixe
"properties."incorrect dans les expressions MapLibre.
Performance
| Métrique | v1.x (Leaflet) | v2.0.0 (MapLibre) |
|---|---|---|
| 10 000 markers | 4 FPS (DOM) | 60 FPS (GPU) |
| 10 000 GeoJSON | 572 ms | < 100 ms WebGL |
| ESM bundle gzip | 35 KB | ~35 KB |
| UMD bundle | 196 KB gzip | ❌ supprimé |
Migration
- V1 → V2 : voir MIGRATION_V1_V2
- Release notes complètes v2.0.0 : voir Patchnote V2.0.0
