import { lazyWithRetry } from '../../utils/lazyWithRetry'; /** * The six ways into a GL map, one chunk per engine. * * mapbox-gl and maplibre-gl used to be static imports inside MapViewGL, * JourneyMapGL and the settings preview, so rollup put both SDKs into a single * 2.8 MB chunk. Every map user downloaded 1.8 MB of mapbox plus 1.1 MB of * maplibre and then ran exactly one of them. * * Pairing the component with its engine behind the lazy boundary is what * separates them: no module reaches both SDKs statically any more, so rolldown * emits one shared core chunk and two engine chunks. The engine arrives as a * prop — see the `gl` prop on each component. * * Both imports start together rather than in sequence: the engine is by far the * larger of the two, and waiting for the component first would add its round * trip in front of the download that actually costs time. */ export const MapViewGLMapbox = lazyWithRetry(async () => { const [component, engine] = await Promise.all([import('./MapViewGL'), import('./engines/mapbox')]); const MapViewGL = component.MapViewGL; // eslint-disable-next-line @typescript-eslint/no-explicit-any return { default: (props: any) => }; }); export const MapViewGLMaplibre = lazyWithRetry(async () => { const [component, engine] = await Promise.all([import('./MapViewGL'), import('./engines/maplibre')]); const MapViewGL = component.MapViewGL; // eslint-disable-next-line @typescript-eslint/no-explicit-any return { default: (props: any) => }; }); export const JourneyMapGLMapbox = lazyWithRetry(async () => { const [component, engine] = await Promise.all([import('../Journey/JourneyMapGL'), import('./engines/mapbox')]); const JourneyMapGL = component.default; // The journey map exposes an imperative handle (highlightMarker / focusMarker / // invalidateSize). Since React 19 its ref is an ordinary prop, so it rides // through the spread and the binding needs no forwardRef wrapper. // eslint-disable-next-line @typescript-eslint/no-explicit-any return { default: (props: any) => }; }); export const JourneyMapGLMaplibre = lazyWithRetry(async () => { const [component, engine] = await Promise.all([import('../Journey/JourneyMapGL'), import('./engines/maplibre')]); const JourneyMapGL = component.default; // eslint-disable-next-line @typescript-eslint/no-explicit-any return { default: (props: any) => }; }); export const GlMapPreviewMapbox = lazyWithRetry(async () => { const [component, engine] = await Promise.all([import('../Settings/MapboxPreview'), import('./engines/mapbox')]); const GlMapPreview = component.default; // eslint-disable-next-line @typescript-eslint/no-explicit-any return { default: (props: any) => }; }); export const GlMapPreviewMaplibre = lazyWithRetry(async () => { const [component, engine] = await Promise.all([import('../Settings/MapboxPreview'), import('./engines/maplibre')]); const GlMapPreview = component.default; // eslint-disable-next-line @typescript-eslint/no-explicit-any return { default: (props: any) => }; });