chore: deck.gl 9.2 upgrade & loaders.gl, luma.gl upgrades#3271
chore: deck.gl 9.2 upgrade & loaders.gl, luma.gl upgrades#3271igorDykhta wants to merge 19 commits intomasterfrom
Conversation
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
e6c6891 to
62ab8c3
Compare
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
Signed-off-by: Ihor Dykhta <dikhta.igor@gmail.com>
There was a problem hiding this comment.
Pull request overview
Upgrades kepler.gl’s rendering stack to deck.gl 9.2 (plus luma.gl/loaders.gl/mjolnir updates) and adapts kepler’s custom layers/effects/tooling to the new APIs (device init, parameter-based blending, shader/module pipeline changes, editable layers replacement).
Changes:
- Bump deck.gl to 9.2.x across packages, replace nebula.gl with
@deck.gl-community/editable-layers, and update loaders.gl/luma.gl/math.gl. - Update kepler layers/effects/utilities to deck.gl 9 patterns (device initialization,
parametersblending, updated shader/module plumbing for raster & postprocessing). - Adjust typings/TS config (TypeScript 5.6,
moduleResolution: "bundler", local type augmentations) and test/tooling transpilation for ESM deps.
Reviewed changes
Copilot reviewed 97 out of 110 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| website/src/components/policy.js | Formatting-only website copy change. |
| website/src/components/header.js | JSX formatting tweak. |
| website/src/components/footer.js | JSX formatting for footer legal text. |
| tsconfig.json | Switch TS module resolution to bundler. |
| test/node/utils/export-utils-test.js | Formatting-only test change. |
| test/node/utils/editor-utils-test.js | Switch EditableGeoJsonLayer import to deck.gl-community package. |
| src/utils/src/index.ts | Export new GL helpers (blending parameters + renderer patch). |
| src/utils/src/gl-utils.ts | Replace GL-constant blending with deck.gl 9 parameters + DeckRenderer patch hook. |
| src/utils/src/export-utils.ts | Formatting-only export alignment. |
| src/utils/src/effect-utils.ts | Keep lighting effect module loaded; disable/enable shadow behavior safely for deck.gl 9. |
| src/utils/src/data-scale-utils.ts | Add @ts-nocheck to bypass TS errors. |
| src/utils/src/data-container-utils.ts | Formatting-only object literal expansion. |
| src/utils/package.json | Upgrade deck.gl/luma/loaders versions for utils package. |
| src/types/reducers.d.ts | Replace deck.gl MapViewState import with local type alias. |
| src/table/package.json | Upgrade loaders.gl deps. |
| src/schemas/package.json | Upgrade loaders.gl deps. |
| src/reducers/src/vis-state-updaters.ts | Preserve isVisible during initial layer config setup. |
| src/reducers/src/vis-state-selectors.ts | Add minimal typing on selector input state. |
| src/reducers/src/layer-utils.ts | Move off @deck.gl/core/typed; loosen Deck layer prop typing. |
| src/reducers/package.json | Upgrade loader-utils and math.gl/web-mercator. |
| src/processors/src/typedefs/deckgl.d.ts | Remove legacy deckgl-typings bridge. |
| src/processors/src/data-processor.ts | Switch editable Feature import to deck.gl-community package. |
| src/processors/package.json | Remove deckgl-typings/nebula deps; upgrade loaders; add editable-layers. |
| src/layers/src/vector-tile/vector-tile-layer.ts | Update deck.gl imports; adjust culling parameter for v9; add @ts-nocheck. |
| src/layers/src/vector-tile/mvt-layer.ts | Update deck.gl imports; add @ts-nocheck. |
| src/layers/src/typedefs/deckgl.d.ts | Remove legacy deckgl-typings bridge. |
| src/layers/src/trip-layer/trip-utils.ts | Remove ts-expect-error (typing change). |
| src/layers/src/trip-layer/trip-layer.ts | Formatting-only changes around column detection/props object. |
| src/layers/src/raster-tile/types.ts | Update Tile header + texture prop types for v9; add @ts-nocheck. |
| src/layers/src/raster-tile/raster-tile-utils.ts | Import TypedArray from public loader-utils entrypoint. |
| src/layers/src/raster-tile/raster-tile-layer.ts | Deck v9 imports + redraw scheduling hook; add onRedrawNeeded plumbing; add @ts-nocheck. |
| src/layers/src/raster-tile/gpu-utils.ts | Update luma constants/types; add @ts-nocheck. |
| src/layers/src/line-layer/line-layer.ts | Adjust default layer props typing; remove explicit isVisible: false. |
| src/layers/src/icon-layer/icon-layer.ts | Update culling to cullMode; add @ts-nocheck. |
| src/layers/src/hexagon-layer/hexagon-utils.ts | Support fallback coordinate input; more robust position handling. |
| src/layers/src/hexagon-layer/hexagon-layer.ts | Use cellOutline from picking info instead of recomputing geometry. |
| src/layers/src/grid-layer/grid-utils.ts | Support fallback coordinate (deck.gl 9 picking changes). |
| src/layers/src/grid-layer/grid-layer.ts | Use cellOutline from picking info instead of recomputing geometry. |
| src/layers/src/editor-layer/modify-mode-extended.ts | Switch edit-modes imports to deck.gl-community editable-layers. |
| src/layers/src/editor-layer/editor-layer.ts | Replace nebula EditableGeoJsonLayer/edit-modes with deck.gl-community; add @ts-nocheck. |
| src/layers/src/editor-layer/editor-layer-utils.ts | Use PickingInfo type from @deck.gl/core; improve tooltip math nullish handling. |
| src/layers/src/cluster-layer/cluster-layer.ts | Add ts-expect-error for untyped composite layer usage. |
| src/layers/src/base-layer.ts | Update DataFilterExtension typing suppression comment for deck.gl 9 option. |
| src/layers/src/aggregation-layer.ts | Update aggregation semantics for deck.gl 9 + per-bin filtering wrapper. |
| src/layers/package.json | Upgrade deck.gl/loaders/luma; replace nebula with editable-layers. |
| src/effects/src/post-processing-effect.ts | Switch luma effects import path; use module propTypes for defaults. |
| src/effects/src/custom-deck-lighting-effect.ts | Rework lighting/shadow module patching for luma/deck 9 device pipeline. |
| src/effects/package.json | Upgrade deck.gl/luma deps; add luma effects/engine. |
| src/duckdb/src/table/index.ts | Remove stray trailing whitespace line. |
| src/duckdb/src/table/duckdb-table-utils.ts | Formatting-only query string change. |
| src/deckgl-layers/src/wms/wms-layer.ts | Update deck.gl imports; add @ts-nocheck. |
| src/deckgl-layers/src/typedefs/deckgl.d.ts | Remove legacy deckgl-typings bridge. |
| src/deckgl-layers/src/svg-icon-layer/svg-icon-layer.ts | Update CompositeLayer props typing + generics; add @ts-nocheck. |
| src/deckgl-layers/src/svg-icon-layer/scatterplot-icon-layer.ts | Switch to luma engine Geometry + geometry override strategy. |
| src/deckgl-layers/src/raster/webgl/types.ts | Remove luma webgl Texture2D import; loosen type. |
| src/deckgl-layers/src/raster/webgl/texture/rgba-image.ts | Remove luma webgl Texture2D import; loosen type. |
| src/deckgl-layers/src/raster/webgl/texture/mask.ts | Remove luma webgl Texture2D import; loosen type. |
| src/deckgl-layers/src/raster/webgl/texture/combine-bands.ts | Remove luma webgl Texture2D import; loosen type. |
| src/deckgl-layers/src/raster/webgl/pansharpen/pansharpen-brovey.ts | Remove luma webgl Texture2D import; loosen type. |
| src/deckgl-layers/src/raster/webgl/color/colormap.ts | Remove luma webgl Texture2D import; loosen type. |
| src/deckgl-layers/src/raster/types.ts | Loosen luma webgl texture types to any. |
| src/deckgl-layers/src/raster/raster-mesh-layer/raster-mesh-layer.ts | Port raster mesh layer to luma 9 pipeline/model/bindings; add redraw scheduling. |
| src/deckgl-layers/src/raster/raster-mesh-layer/raster-mesh-layer-shaders.ts | New shader builders for raster mesh layer (GLSL300). |
| src/deckgl-layers/src/raster/raster-mesh-layer/matrix.ts | Update deck.gl imports; loosen CoordinateSystem typing. |
| src/deckgl-layers/src/raster/raster-layer/raster-layer.ts | Port raster bitmap pipeline to luma 9 shader inputs/bindings; add redraw scheduling. |
| src/deckgl-layers/src/raster/raster-layer/raster-layer-shaders.ts | New shader builders + hook registration + module adapter for luma 9. |
| src/deckgl-layers/src/raster/images.ts | Rework texture creation and sampler params for luma 9 device API. |
| src/deckgl-layers/src/line-layer/line-layer.ts | Port enhanced line attributes to deck.gl 9 attribute API; adjust shader edits. |
| src/deckgl-layers/src/layer-utils/cpu-aggregator.ts | Inline BinSorter/aggregation ops compat to adapt to deck.gl 9 changes. |
| src/deckgl-layers/src/hexagon-layer/enhanced-hexagon-layer.ts | Use native CPU aggregation; add cellOutline in picking info. |
| src/deckgl-layers/src/grid-layer/enhanced-cpu-grid-layer.ts | Use native CPU aggregation; add cellOutline in picking info. |
| src/deckgl-layers/src/deckgl-extensions/filter-shader-module.ts | Update injected shader attributes for deck.gl 9 GLSL. |
| src/deckgl-layers/src/deckgl-extensions/filter-arrow-layer.ts | Update attribute manager config for deck.gl 9 stepMode/type strings. |
| src/deckgl-layers/src/column-layer/enhanced-column-layer.ts | Remove custom draw override; update shader injection for v9 uniforms; add @ts-nocheck. |
| src/deckgl-layers/src/cluster-layer/cluster-layer.ts | Shift to CompositeLayer base; adjust cpuAggregator update wiring; add @ts-nocheck. |
| src/deckgl-layers/src/3d-building-layer/3d-building-layer.ts | Update blending parameters to deck.gl 9 parameters strings; add @ts-nocheck. |
| src/deckgl-layers/package.json | Upgrade deck.gl/aggregation-layers + loaders/luma; add luma engine. |
| src/deckgl-augmentations.d.ts | New type augmentations for deck.gl 9 + geo-layers + luma core. |
| src/deckgl-arrow-layers/src/utils/validate.ts | Use @deck.gl/core import path (no /typed). |
| src/deckgl-arrow-layers/src/utils/utils.ts | Use @deck.gl/core import path (no /typed). |
| src/deckgl-arrow-layers/src/utils/picking.ts | Use @deck.gl/core import path (no /typed). |
| src/deckgl-arrow-layers/src/types.ts | Use @deck.gl/core import path (no /typed). |
| src/deckgl-arrow-layers/src/layers/geo-arrow-text-layer.ts | Update deck.gl imports (no /typed); add @ts-nocheck. |
| src/deckgl-arrow-layers/src/layers/geo-arrow-scatterplot-layer.ts | Update deck.gl imports (no /typed); add @ts-nocheck. |
| src/deckgl-arrow-layers/src/layers/geo-arrow-arc-layer.ts | Update deck.gl imports (no /typed); add @ts-nocheck. |
| src/deckgl-arrow-layers/package.json | Update peer deps to deck.gl 9.2.x. |
| src/constants/src/default-settings.ts | Formatting-only trailing brace alignment. |
| src/components/src/plot-container.tsx | Replace glOptions with deck.gl 9 deviceProps.webgl for export. |
| src/components/src/modals/export-image-modal.tsx | Formatting-only JSX change. |
| src/components/src/map-view-state-context.tsx | Replace MapViewState import with local type alias. |
| src/components/src/map-container.tsx | Migrate to onDeviceInitialized, parameters blending, new picking types, and apply postprocessing patch. |
| src/components/src/geocoder-panel.tsx | Switch FlyToInterpolator import; replace MapViewState import with local type alias. |
| src/components/src/effects/effect-configurator.tsx | Use module propTypes instead of uniforms for UI controls. |
| src/components/src/editor/feature-action-panel.tsx | Switch Feature import to deck.gl-community editable-layers. |
| src/components/src/editor/editor.tsx | Switch Feature typing to deck.gl-community editable-layers. |
| src/components/src/common/icons/close.tsx | Formatting-only SVG JSX change. |
| src/components/src/common/data-table/index.tsx | Minor formatting fix in scroll callback. |
| src/components/package.json | Upgrade deck.gl/react/widgets + mjolnir; loaders; add editable-layers. |
| src/ai-assistant/src/config/models.ts | Replace double-quoted keys with standard object syntax + single quotes. |
| src/ai-assistant/src/components/ai-assistant-component.tsx | Formatting-only hook call cleanup. |
| src/actions/src/vis-state-actions.ts | Update picking type imports to PickingInfo. |
| src/actions/package.json | Upgrade deck.gl core dependency. |
| package.json | Upgrade deck.gl mapbox/test-utils, loaders, luma test-utils; bump TS to 5.6; update resolutions; add math.gl. |
| jest.config.js | Expand transform ignore allowlist for ESM deps (deck/luma/preact/etc.). |
| examples/replace-component/esbuild.config.mjs | Remove /typed aliasing for deck.gl modules. |
| examples/get-started-vite/package.json | Upgrade deck.gl/loaders/luma deps; math.gl/web-mercator bump. |
| examples/demo-app/package.json | Upgrade loaders + deck/luma resolutions. |
| examples/demo-app/esbuild.config.mjs | Remove /typed aliasing for deck.gl modules. |
| bindings/kepler.gl-jupyter/js/package.json | Upgrade loaders and deck.gl resolutions for Jupyter binding. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| const proto = DeckRenderer.prototype as any; | ||
|
|
||
| setParameters(gl, { | ||
| [GL.BLEND]: true, | ||
| ...(blendFunc | ||
| ? { | ||
| blendFunc: blendFunc.map(getGlConst), | ||
| blendEquation: Array.isArray(blendEquation) | ||
| ? blendEquation.map(getGlConst) | ||
| : getGlConst(blendEquation) | ||
| } | ||
| : {}) | ||
| }); | ||
| proto._resizeRenderBuffers = function _resizeRenderBufferPatched() { | ||
| const {renderBuffers} = this; | ||
| const size = this.device.canvasContext!.getDrawingBufferSize(); | ||
| const [width, height] = size; |
There was a problem hiding this comment.
patchDeckRendererForPostProcessing overwrites a private DeckRenderer.prototype._resizeRenderBuffers method without checking that it exists, and assumes this.device.canvasContext is always present (!). This can throw at runtime (e.g., non-canvas contexts / future deck.gl changes) and permanently clobbers the original implementation.
Consider guarding on typeof proto._resizeRenderBuffers === 'function' and this.device.canvasContext, and wrapping/calling through to the original implementation when available so future deck.gl updates don’t silently break rendering.
| patchDeckRendererForPostProcessing(); | ||
|
|
There was a problem hiding this comment.
Calling patchDeckRendererForPostProcessing() at module import time introduces a global side effect for any consumer that imports map-container (including SSR/tests), and makes it hard to scope/disable the patch.
Prefer applying this patch as late as possible (e.g., inside onDeviceInitialized / deck init) and behind a feature flag, so environments that don’t use postprocessing (or don’t have the relevant renderer internals) don’t get affected.
| patchDeckRendererForPostProcessing(); | |
| const appConfig = typeof getApplicationConfig === 'function' ? getApplicationConfig() : undefined; | |
| const enableDeckPostProcessingPatch = | |
| !appConfig || | |
| !appConfig.postProcessing || | |
| appConfig.postProcessing.enableDeckPostProcessingPatch !== false; | |
| if (typeof window !== 'undefined' && enableDeckPostProcessingPatch) { | |
| patchDeckRendererForPostProcessing(); | |
| } |
| _patchValidateProgram(): void { | ||
| const gl = this.context.device?.gl; | ||
| if (gl && !gl.__validateProgramPatched) { | ||
| gl.__validateProgramPatched = true; | ||
| const origGetProgramParameter = gl.getProgramParameter.bind(gl); | ||
| gl.validateProgram = function () { | ||
| // no op | ||
| }; | ||
| gl.getProgramParameter = function (program: WebGLProgram, pname: number) { | ||
| if (pname === 0x8b83) { | ||
| // GL_VALIDATE_STATUS — always return true since we skip validation | ||
| return true; | ||
| } | ||
| return origGetProgramParameter(program, pname); | ||
| }; | ||
| } |
There was a problem hiding this comment.
_patchValidateProgram permanently monkey-patches the WebGL context (gl.validateProgram and gl.getProgramParameter) for all programs, not just this layer. This can mask real validation issues in other layers and makes debugging GL problems much harder.
If this workaround is still required, consider scoping it more narrowly (e.g., behind a config flag, patching only once from a central place with clear opt-in, and/or restoring the original functions on finalize) to avoid global behavioral changes.
| @@ -260,8 +260,7 @@ export default class LineLayer extends ArcLayer { | |||
| geoarrow0: {...defaultAltColumn}, | |||
| geoarrow1: {...defaultAltColumn} | |||
| }, | |||
| label: `${fieldPairs[0].defaultName} -> ${fieldPairs[1].defaultName} line`, | |||
| isVisible: false | |||
| label: `${fieldPairs[0].defaultName} -> ${fieldPairs[1].defaultName} line` | |||
| }; | |||
There was a problem hiding this comment.
findDefaultLayerProps no longer sets isVisible: false for newly created line layers. This is a behavior change: line layers derived from point pairs may now be visible by default, which differs from the previous default and could surprise users.
If the previous behavior is still desired, restore isVisible: false (or set the default visibility in the layer’s default config instead of relying on this helper).
deck.gl 8.9.27 → 9.2.11
luma.gl 8.5.x → 9.2.6
loaders.gl 4.3.2 → 4.3.4,
nebula.gl → @deck.gl-community/editable-layers 9.2.8
app starts, as expected, no new console errors
point layer
arc layer
line layer
geojson layer
icon layer
grid layer
hexagon layer
cluster
heatmap
h3
s2
trip layer
3d mesh
3d buildings
internal column layer
vector tile layer
WMS layer
Polygon / Draw on Map
Tooltips & Interactions
Geocoder
2d / perspective / split map
Export data
Export image
Filters
Geoarrow layers
Postprocessing effects
Light & Shadow
raster tile - bitmap pmtiles
raster tile - stac collections