Breaking changes в Kepler.gl представляют собой изменения в API, структуре конфигурации, состоянии карты и внутренних зависимостях, которые нарушают обратную совместимость между версиями. Такие изменения затрагивают интеграции, построенные на стабильных интерфейсах библиотеки, включая React-компоненты, Redux-слой, конфигурацию визуализаций и формат данных.
Kepler.gl построен как надстройка над экосистемой геовизуализации, включающей React, Redux и deck.gl. Любое изменение в одном из этих слоёв способно вызвать цепочку breaking changes:
Особое значение имеет связка Kepler.gl ↔︎ deck.gl, поскольку слои визуализации напрямую зависят от структуры props и uniform-параметров WebGL.
Одним из наиболее чувствительных элементов является
mapState, описывающий положение, масштаб и ориентацию
карты.
Типовые breaking changes в этой области включают:
latitude, longitude
сохраняются, но добавляются новые параметры камеры)Пример эволюции структуры:
// устаревший формат
mapState: {
latitude: 55.75,
longitude: 37.61,
zoom: 10
}
// обновлённый формат
mapState: {
latitude: 55.75,
longitude: 37.61,
zoom: 10,
bearing: 0,
pitch: 0,
dragRotate: true
}
При миграции критично учитывать дефолтные значения, которые могут изменять визуальное поведение без явного изменения конфигурации.
Слои в Kepler.gl являются основным механизмом визуализации данных. Любые изменения в их описании приводят к несовместимости сохранённых конфигураций.
Основные категории изменений:
Некоторые версии изменяют идентификаторы слоёв или их внутренние ключи:
// старый формат
layer: {
type: 'point',
config: {
dataId: 'dataset_1',
color: [255, 0, 0]
}
}
// новый формат
layer: {
type: 'point',
config: {
dataId: 'dataset_1',
visualChannels: {
colorField: null,
colorScale: 'quantile'
},
color: [255, 0, 0]
}
}
Добавление visualChannels является типичным примером
breaking change, так как переносит логику визуального кодирования из
плоских свойств в структурированную модель.
Kepler.gl поддерживает несколько источников данных, включая GeoJSON, CSV и JSON-таблицы. Breaking changes часто затрагивают нормализацию данных:
dataId// старый подход
data: {
fields: ['lat', 'lng', 'value']
}
// новый подход
data: {
fields: [
{ name: 'lat', type: 'real' },
{ name: 'lng', type: 'real' },
{ name: 'value', type: 'integer' }
]
}
Kepler.gl активно использует Redux actions для управления состоянием. Breaking changes часто проявляются в следующих формах:
Пример:
// устаревший action
dispatch(addDataToMap({ datasets, options }))
// обновлённый action
dispatch(addDataToMap({
datasets,
options,
config: {
centerMap: true,
readOnly: false
}
}))
Также наблюдается переход к более декларативному стилю управления состоянием, где actions описывают намерение, а не конкретную операцию.
Одним из наиболее критичных источников breaking changes являются обновления deck.gl:
Пример влияния:
visState хранит описание всех визуальных компонентов
карты: слои, фильтры, взаимодействия.
Breaking changes в этой области включают:
filtersinteractionConfigconfig.visStateПример:
// старый формат фильтра
filters: [
{
name: 'timestamp',
value: [0, 100]
}
]
// новый формат
filters: [
{
id: 'timestamp_filter',
dataId: 'dataset_1',
name: 'timestamp',
value: [0, 100],
type: 'timeRange'
}
]
Миграции между версиями Kepler.gl требуют последовательного анализа изменений в трёх слоях:
Типовой подход включает:
Пример адаптера:
function migrateConfig(oldConfig) {
return {
...oldConfig,
visState: normalizeVisState(oldConfig.visState),
mapState: normalizeMapState(oldConfig.mapState)
};
}
Kepler.gl поддерживает расширение через кастомные слои и плагины. Breaking changes часто затрагивают:
Типичный пример:
// устаревший plugin API
export function myLayer() {
return {
type: 'custom',
render: () => {}
};
}
// обновлённый API
export function myLayerFactory(deps) {
return {
id: 'custom-layer',
renderLayer: (props) => {}
};
}
При переходе между версиями наиболее часто возникают следующие классы ошибок:
Несовпадение версий разных частей конфигурации приводит к частичной деградации:
Такие эффекты возникают при смешивании конфигураций разных версий без полной нормализации.
В ряде версий изменяется модель работы с временными данными:
Пример изменения фильтра времени:
// старый формат
value: [1514764800000, 1546300800000]
// новый формат
value: ['2018-01-01', '2019-01-01']
Breaking changes в Kepler.gl повторяют несколько устойчивых паттернов: