From d2c1cb08037a1d81ed54061bcf80ad8642883d07 Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Thu, 27 Jul 2023 18:40:59 +0200 Subject: [PATCH 1/6] Convert files to typescript --- superset-frontend/package-lock.json | 30 +++++++++++++++++ .../superset-ui-chart-controls/src/types.ts | 2 +- .../test/utils/columnChoices.test.tsx | 2 +- .../test/utils/defineSavedMetrics.test.tsx | 2 +- .../legacy-preset-chart-deckgl/package.json | 4 +++ .../src/{TooltipRow.jsx => TooltipRow.tsx} | 11 +++---- ...Wrapper.jsx => BootstrapSliderWrapper.tsx} | 0 .../src/{index.js => index.ts} | 0 .../src/layers/Arc/{index.js => index.ts} | 0 .../src/{preset.js => preset.ts} | 0 .../src/utilities/Shared_DeckGL.jsx | 2 +- .../utilities/{controls.jsx => controls.ts} | 21 +++++++++--- .../src/utils/{colors.js => colors.ts} | 2 +- .../src/utils/{explore.js => explore.ts} | 11 ++++--- .../src/utils/{geo.js => geo.ts} | 24 +++++--------- .../{safeStringify.js => safeStringify.ts} | 4 ++- .../src/utils/{sandbox.js => sandbox.ts} | 8 +++-- .../src/utils/{time.js => time.ts} | 14 ++++---- .../src/utils/utils.js | 33 ------------------- 19 files changed, 91 insertions(+), 79 deletions(-) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/{TooltipRow.jsx => TooltipRow.tsx} (81%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/{BootstrapSliderWrapper.jsx => BootstrapSliderWrapper.tsx} (100%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/{index.js => index.ts} (100%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Arc/{index.js => index.ts} (100%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/{preset.js => preset.ts} (100%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/{controls.jsx => controls.ts} (69%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/{colors.js => colors.ts} (93%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/{explore.js => explore.ts} (89%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/{geo.js => geo.ts} (72%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/{safeStringify.js => safeStringify.ts} (94%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/{sandbox.js => sandbox.ts} (91%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/{time.js => time.ts} (91%) delete mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/utils.js diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json index 1e9eca6f27f09..6f3de3e3f3d4e 100644 --- a/superset-frontend/package-lock.json +++ b/superset-frontend/package-lock.json @@ -19885,11 +19885,23 @@ "node": ">=0.10.0" } }, + "node_modules/@types/underscore": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.6.tgz", + "integrity": "sha512-G2oC64I/sR817KDL2b2Mc7+diXyxcibyUeLMyexU4K/sG8hyt/YMlbBK0TVhx/YQ1ehfzgXhLuq2YQHIL4bXUQ==", + "dev": true + }, "node_modules/@types/unist": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" }, + "node_modules/@types/urijs": { + "version": "1.19.19", + "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.19.tgz", + "integrity": "sha512-FDJNkyhmKLw7uEvTxx5tSXfPeQpO0iy73Ry+PmYZJvQy0QIWX8a7kJ4kLWRf+EbTPJEPDSgPXHaM7pzr5lmvCg==", + "dev": true + }, "node_modules/@types/vinyl": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.6.tgz", @@ -63293,6 +63305,10 @@ "urijs": "^1.19.8", "xss": "^1.0.10" }, + "devDependencies": { + "@types/underscore": "^1.11.6", + "@types/urijs": "^1.19.19" + }, "peerDependencies": { "@superset-ui/chart-controls": "*", "@superset-ui/core": "*", @@ -77799,6 +77815,8 @@ "@mapbox/geojson-extent": "^1.0.1", "@math.gl/web-mercator": "^3.2.2", "@types/d3-array": "^2.0.0", + "@types/underscore": "^1.11.6", + "@types/urijs": "^1.19.19", "bootstrap-slider": "^10.0.0", "d3-array": "^1.2.4", "d3-color": "^1.4.1", @@ -79242,11 +79260,23 @@ } } }, + "@types/underscore": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.6.tgz", + "integrity": "sha512-G2oC64I/sR817KDL2b2Mc7+diXyxcibyUeLMyexU4K/sG8hyt/YMlbBK0TVhx/YQ1ehfzgXhLuq2YQHIL4bXUQ==", + "dev": true + }, "@types/unist": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.3.tgz", "integrity": "sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ==" }, + "@types/urijs": { + "version": "1.19.19", + "resolved": "https://registry.npmjs.org/@types/urijs/-/urijs-1.19.19.tgz", + "integrity": "sha512-FDJNkyhmKLw7uEvTxx5tSXfPeQpO0iy73Ry+PmYZJvQy0QIWX8a7kJ4kLWRf+EbTPJEPDSgPXHaM7pzr5lmvCg==", + "dev": true + }, "@types/vinyl": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/vinyl/-/vinyl-2.0.6.tgz", diff --git a/superset-frontend/packages/superset-ui-chart-controls/src/types.ts b/superset-frontend/packages/superset-ui-chart-controls/src/types.ts index 889bc9a47c337..09e4f63ee3d37 100644 --- a/superset-frontend/packages/superset-ui-chart-controls/src/types.ts +++ b/superset-frontend/packages/superset-ui-chart-controls/src/types.ts @@ -73,7 +73,7 @@ export interface Dataset { main_dttm_col: string; // eg. ['["ds", true]', 'ds [asc]'] order_by_choices?: [string, string][] | null; - time_grain_sqla?: string; + time_grain_sqla?: [string, string][]; granularity_sqla?: string; datasource_name: string | null; name?: string; diff --git a/superset-frontend/packages/superset-ui-chart-controls/test/utils/columnChoices.test.tsx b/superset-frontend/packages/superset-ui-chart-controls/test/utils/columnChoices.test.tsx index aaaccda95d3c2..70018ddc67fa1 100644 --- a/superset-frontend/packages/superset-ui-chart-controls/test/utils/columnChoices.test.tsx +++ b/superset-frontend/packages/superset-ui-chart-controls/test/utils/columnChoices.test.tsx @@ -27,7 +27,7 @@ describe('columnChoices()', () => { metrics: [], type: DatasourceType.Table, main_dttm_col: 'test', - time_grain_sqla: 'P1D', + time_grain_sqla: [], columns: [ { column_name: 'fiz', diff --git a/superset-frontend/packages/superset-ui-chart-controls/test/utils/defineSavedMetrics.test.tsx b/superset-frontend/packages/superset-ui-chart-controls/test/utils/defineSavedMetrics.test.tsx index f7ae98520c098..218b2e580fdb5 100644 --- a/superset-frontend/packages/superset-ui-chart-controls/test/utils/defineSavedMetrics.test.tsx +++ b/superset-frontend/packages/superset-ui-chart-controls/test/utils/defineSavedMetrics.test.tsx @@ -36,7 +36,7 @@ describe('defineSavedMetrics', () => { ], type: DatasourceType.Table, main_dttm_col: 'test', - time_grain_sqla: 'P1D', + time_grain_sqla: [], columns: [], verbose_map: {}, column_formats: {}, diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json b/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json index ed437ec23a36e..ab0d92d0e4dc4 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json @@ -52,5 +52,9 @@ }, "publishConfig": { "access": "public" + }, + "devDependencies": { + "@types/underscore": "^1.11.6", + "@types/urijs": "^1.19.19" } } diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/TooltipRow.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/TooltipRow.tsx similarity index 81% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/TooltipRow.jsx rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/TooltipRow.tsx index 0e1138d28002a..9d72f719fe645 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/TooltipRow.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/TooltipRow.tsx @@ -17,14 +17,13 @@ * under the License. */ import React from 'react'; -import PropTypes from 'prop-types'; -const propTypes = { - label: PropTypes.string.isRequired, - value: PropTypes.string.isRequired, +type TooltipRowProps = { + label: string; + value: string; }; -export default class TooltipRow extends React.PureComponent { +export default class TooltipRow extends React.PureComponent { render() { const { label, value } = this.props; @@ -36,5 +35,3 @@ export default class TooltipRow extends React.PureComponent { ); } } - -TooltipRow.propTypes = propTypes; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/BootstrapSliderWrapper.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/BootstrapSliderWrapper.tsx similarity index 100% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/BootstrapSliderWrapper.jsx rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/BootstrapSliderWrapper.tsx diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/index.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/index.ts similarity index 100% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/index.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/index.ts diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Arc/index.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Arc/index.ts similarity index 100% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Arc/index.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Arc/index.ts diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/preset.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/preset.ts similarity index 100% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/preset.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/preset.ts diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/Shared_DeckGL.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/Shared_DeckGL.jsx index 0010d617b211b..9a123e91c371b 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/Shared_DeckGL.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/Shared_DeckGL.jsx @@ -39,7 +39,7 @@ const DEFAULT_VIEWPORT = { const sandboxUrl = 'https://github.com/apache/superset/' + - 'blob/master/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/sandbox.js'; + 'blob/master/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/sandbox.ts'; const jsFunctionInfo = (
{t( diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/controls.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/controls.ts similarity index 69% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/controls.jsx rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/controls.ts index 9e6d2b0d84665..03816e96dc14f 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/controls.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/controls.ts @@ -16,10 +16,21 @@ * specific language governing permissions and limitations * under the License. */ -export function columnChoices(datasource) { + +import { QueryResponse } from '@superset-ui/core'; +import { + ColumnMeta, + ControlPanelState, + Dataset, +} from '@superset-ui/chart-controls'; + +export function columnChoices(datasource: Dataset | QueryResponse | null) { if (datasource?.columns) { return datasource.columns - .map(col => [col.column_name, col.verbose_name || col.column_name]) + .map(col => [ + col.column_name, + (col as ColumnMeta).verbose_name || col.column_name, + ]) .sort((opt1, opt2) => opt1[1].toLowerCase() > opt2[1].toLowerCase() ? 1 : -1, ); @@ -31,9 +42,11 @@ export const PRIMARY_COLOR = { r: 0, g: 122, b: 135, a: 1 }; export default { default: null, - mapStateToProps: state => ({ + mapStateToProps: (state: ControlPanelState) => ({ choices: state.datasource - ? state.datasource.time_grain_sqla.filter(o => o[0] !== null) + ? (state.datasource as Dataset).time_grain_sqla?.filter( + o => o[0] !== null, + ) : null, }), }; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/colors.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/colors.ts similarity index 93% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/colors.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/colors.ts index 8d8e2bd6fc8fc..d7515d5d9babb 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/colors.js +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/colors.ts @@ -19,7 +19,7 @@ import { rgb } from 'd3-color'; // eslint-disable-next-line import/prefer-default-export -export function hexToRGB(hex, alpha = 255) { +export function hexToRGB(hex: string | undefined, alpha = 255) { if (!hex) { return [0, 0, 0, alpha]; } diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/explore.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/explore.ts similarity index 89% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/explore.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/explore.ts index cf1d691ff916f..84e3a043a7b10 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/explore.js +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/explore.ts @@ -17,11 +17,12 @@ * under the License. */ import URI from 'urijs'; +import { JsonObject } from '@superset-ui/core'; import { safeStringify } from './safeStringify'; const MAX_URL_LENGTH = 8000; -export function getURIDirectory(formData, endpointType = 'base') { +export function getURIDirectory(endpointType = 'base') { // Building the directory part of the URI let directory = '/explore/'; if (['json', 'csv', 'query', 'results', 'samples'].includes(endpointType)) { @@ -32,17 +33,17 @@ export function getURIDirectory(formData, endpointType = 'base') { } export function getExploreLongUrl( - formData, - endpointType, + formData: JsonObject, + endpointType: string, allowOverflow = true, extraSearch = {}, -) { +): string | null { if (!formData.datasource) { return null; } const uri = new URI('/'); - const directory = getURIDirectory(formData, endpointType); + const directory = getURIDirectory(endpointType); const search = uri.search(true); Object.keys(extraSearch).forEach(key => { search[key] = extraSearch[key]; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/geo.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/geo.ts similarity index 72% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/geo.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/geo.ts index b09cc089dcfba..48b1e9266184f 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/geo.js +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/geo.ts @@ -16,7 +16,14 @@ * specific language governing permissions and limitations * under the License. */ -import { roundDecimal } from './utils'; + +export type Unit = + | 'square_m' + | 'radius_m' + | 'radius_km' + | 'radius_miles' + | 'square_km' + | 'square_miles'; export const defaultViewport = { bearing: 0, @@ -28,7 +35,7 @@ export const defaultViewport = { const METER_TO_MILE = 1609.34; -export function unitToRadius(unit, num) { +export function unitToRadius(unit: Unit, num: number) { if (unit === 'square_m') { return Math.sqrt(num / Math.PI); } @@ -50,16 +57,3 @@ export function unitToRadius(unit, num) { return null; } - -export const EARTH_CIRCUMFERENCE_KM = 40075.16; -export const MILES_PER_KM = 1.60934; - -export function kmToPixels(kilometers, latitude, zoomLevel) { - // Algorithm from: https://wiki.openstreetmap.org/wiki/Zoom_levels - const latitudeRad = latitude * (Math.PI / 180); - // Seems like the zoomLevel is off by one - const kmPerPixel = - (EARTH_CIRCUMFERENCE_KM * Math.cos(latitudeRad)) / 2 ** (zoomLevel + 9); - - return roundDecimal(kilometers / kmPerPixel, 2); -} diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/safeStringify.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/safeStringify.ts similarity index 94% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/safeStringify.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/safeStringify.ts index 4e4bf1e8e478f..aa985f87cfc03 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/safeStringify.js +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/safeStringify.ts @@ -18,6 +18,8 @@ * under the License. */ +import { JsonObject } from '@superset-ui/core'; + /** * A Stringify function that will not crash when it runs into circular JSON references, * unlike JSON.stringify. Any circular references are simply omitted, as if there had @@ -26,7 +28,7 @@ */ // eslint-disable-next-line import/prefer-default-export -export function safeStringify(object) { +export function safeStringify(object: JsonObject) { const cache = new Set(); return JSON.stringify(object, (key, value) => { diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/sandbox.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/sandbox.ts similarity index 91% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/sandbox.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/sandbox.ts index 3082774a73865..bf41f1f200d0e 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/sandbox.js +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/sandbox.ts @@ -17,7 +17,7 @@ * under the License. */ // A safe alternative to JS's eval -import vm from 'vm'; +import vm, { Context, RunningScriptOptions } from 'vm'; import _ from 'underscore'; import * as d3array from 'd3-array'; import * as colors from './colors'; @@ -33,7 +33,11 @@ const GLOBAL_CONTEXT = { }; // Copied/modified from https://github.com/hacksparrow/safe-eval/blob/master/index.js -export default function sandboxedEval(code, context, opts) { +export default function sandboxedEval( + code: string, + context?: Context, + opts?: RunningScriptOptions | string, +) { const sandbox = {}; const resultKey = `SAFE_EVAL_${Math.floor(Math.random() * 1000000)}`; sandbox[resultKey] = {}; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/time.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/time.ts similarity index 91% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/time.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/time.ts index 6554adb7a1ddd..2d4b17b97b9f1 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/time.js +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/time.ts @@ -17,7 +17,7 @@ * specific language governing permissions and limitations * under the License. */ -import moment from 'moment'; +import moment, { Moment, Duration } from 'moment'; // array with the minimum values of each part of a timestamp -- note that // months are zero-indexed in JavaScript @@ -31,12 +31,12 @@ const truncatePartTo = [ 0, // millisecond ]; -export function truncate(timestamp, step) { +export function truncate(timestamp: Moment, step: Duration) { /* * Truncate timestamp down to duration resolution. */ const lowerBound = moment(timestamp).subtract(step); - const explodedTimestamp = timestamp.toArray(); + const explodedTimestamp = timestamp?.toArray(); const explodedLowerBound = lowerBound.toArray(); const firstDiffIndex = explodedTimestamp @@ -59,7 +59,7 @@ export function truncate(timestamp, step) { return moment(dateParts); } -function getStepSeconds(step, start) { +function getStepSeconds(step: Duration, start: number) { /* Return number of seconds in a step. * * The step might be ambiguous, eg, "1 month" has a variable number of @@ -71,14 +71,14 @@ function getStepSeconds(step, start) { return endMilliseconds - startMilliseconds; } -export function getPlaySliderParams(timestamps, timeGrain) { +export function getPlaySliderParams(timestamps: number[], timeGrain: string) { const minTimestamp = moment( Number(timestamps.reduce((a, b) => (a < b ? a : b))), ); const maxTimestamp = moment( Number(timestamps.reduce((a, b) => (a > b ? a : b))), ); - let step; + let step: Duration; let reference; if (timeGrain.includes('/')) { @@ -128,7 +128,7 @@ export function getPlaySliderParams(timestamps, timeGrain) { return { start: parseInt(start.format('x'), 10), end: parseInt(end.format('x'), 10), - getStep: getStepSeconds.bind(this, step), + getStep: (start: number) => getStepSeconds(step, start), values: values.map(v => parseInt(v.format('x'), 10)), disabled, }; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/utils.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/utils.js deleted file mode 100644 index 13bc88157f0e5..0000000000000 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/utils.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -/* eslint camelcase: 0 */ - -// eslint-disable-next-line import/prefer-default-export -export function roundDecimal(number, precision) { - let roundedNumber; - if (precision) { - roundedNumber = - // eslint-disable-next-line no-param-reassign - Math.round(number * (precision = 10 ** precision)) / precision; - } else { - roundedNumber = Math.round(number); - } - - return roundedNumber; -} From 23a40f1e1c1a0147e5dd0999a79483f6023b5782 Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Wed, 2 Aug 2023 14:53:13 +0200 Subject: [PATCH 2/6] remove animatable --- .../src/AnimatableDeckGLContainer.jsx | 117 --------- .../src/CategoricalDeckGLContainer.jsx | 76 ++---- .../src/DeckGLContainer.jsx | 9 +- .../src/components/BootstrapSliderWrapper.tsx | 41 ---- .../src/components/{Legend.jsx => Legend.tsx} | 125 +++++----- .../src/components/PlaySlider.jsx | 232 ------------------ .../src/layers/Polygon/Polygon.jsx | 83 ++----- .../src/layers/Screengrid/Screengrid.jsx | 64 +---- .../src/utils/time.ts | 135 ---------- 9 files changed, 100 insertions(+), 782 deletions(-) delete mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/AnimatableDeckGLContainer.jsx delete mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/BootstrapSliderWrapper.tsx rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/{Legend.jsx => Legend.tsx} (50%) delete mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/PlaySlider.jsx delete mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/time.ts diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/AnimatableDeckGLContainer.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/AnimatableDeckGLContainer.jsx deleted file mode 100644 index fc56fc6a3d261..0000000000000 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/AnimatableDeckGLContainer.jsx +++ /dev/null @@ -1,117 +0,0 @@ -/* eslint-disable react/jsx-sort-default-props */ -/* eslint-disable react/sort-prop-types */ -/* eslint-disable react/forbid-prop-types */ -/* eslint-disable react/require-default-props */ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import React from 'react'; -import PropTypes from 'prop-types'; - -import { DeckGLContainerStyledWrapper } from './DeckGLContainer'; -import PlaySlider from './components/PlaySlider'; - -const PLAYSLIDER_HEIGHT = 20; // px - -const propTypes = { - getLayers: PropTypes.func.isRequired, - start: PropTypes.number.isRequired, - end: PropTypes.number.isRequired, - getStep: PropTypes.func, - values: PropTypes.array.isRequired, - aggregation: PropTypes.bool, - disabled: PropTypes.bool, - viewport: PropTypes.object.isRequired, - children: PropTypes.node, - mapStyle: PropTypes.string, - mapboxApiAccessToken: PropTypes.string.isRequired, - setControlValue: PropTypes.func, - onValuesChange: PropTypes.func, - width: PropTypes.number.isRequired, - height: PropTypes.number.isRequired, -}; - -const defaultProps = { - aggregation: false, - disabled: false, - mapStyle: 'light', - setControlValue: () => {}, - onValuesChange: () => {}, -}; - -export default class AnimatableDeckGLContainer extends React.PureComponent { - containerRef = React.createRef(); - - setTooltip = tooltip => { - const { current } = this.containerRef; - if (current) { - current.setTooltip(tooltip); - } - }; - - render() { - const { - start, - end, - getStep, - disabled, - aggregation, - children, - getLayers, - values, - onValuesChange, - viewport, - setControlValue, - mapStyle, - mapboxApiAccessToken, - height, - width, - } = this.props; - const layers = getLayers(values); - - return ( -
- - {!disabled && ( - - )} - {children} -
- ); - } -} - -AnimatableDeckGLContainer.propTypes = propTypes; -AnimatableDeckGLContainer.defaultProps = defaultProps; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.jsx index 64bfc0244a8ad..9266adfcc8dd3 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.jsx @@ -27,13 +27,12 @@ import React from 'react'; import PropTypes from 'prop-types'; import { CategoricalColorNamespace } from '@superset-ui/core'; -import AnimatableDeckGLContainer from './AnimatableDeckGLContainer'; import Legend from './components/Legend'; import { hexToRGB } from './utils/colors'; -import { getPlaySliderParams } from './utils/time'; import sandboxedEval from './utils/sandbox'; // eslint-disable-next-line import/extensions import fitViewport from './utils/fitViewport'; +import { DeckGLContainerStyledWrapper } from './DeckGLContainer'; const { getScale } = CategoricalColorNamespace; @@ -85,7 +84,6 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { this.state = this.getStateFromProps(props); this.getLayers = this.getLayers.bind(this); - this.onValuesChange = this.onValuesChange.bind(this); this.toggleCategory = this.toggleCategory.bind(this); this.showSingleCategory = this.showSingleCategory.bind(this); } @@ -96,18 +94,9 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { } } - onValuesChange(values) { - this.setState({ - values: Array.isArray(values) - ? values - : [values, values + this.state.getStep(values)], - }); - } - // eslint-disable-next-line class-methods-use-this getStateFromProps(props, state) { const features = props.payload.data.features || []; - const timestamps = features.map(f => f.__timestamp); const categories = getCategories(props.formData, features); // the state is computed only from the payload; if it hasn't changed, do @@ -117,18 +106,6 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { return { ...state, categories }; } - // the granularity has to be read from the payload form_data, not the - // props formData which comes from the instantaneous controls state - const granularity = - props.payload.form_data.time_grain_sqla || - props.payload.form_data.granularity || - 'P1D'; - - const { start, end, getStep, values, disabled } = getPlaySliderParams( - timestamps, - granularity, - ); - const { width, height, formData } = props; let { viewport } = props; if (formData.autozoom) { @@ -143,11 +120,6 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { } return { - start, - end, - getStep, - values, - disabled, viewport, selected: [], lastClick: 0, @@ -156,7 +128,7 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { }; } - getLayers(values) { + getLayers() { const { getLayer, payload, formData: fd, onAddFilter } = this.props; let features = payload.data.features ? [...payload.data.features] : []; @@ -169,17 +141,6 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { features = jsFnMutator(features); } - // Filter by time - if (values[0] === values[1] || values[1] === this.end) { - features = features.filter( - d => d.__timestamp >= values[0] && d.__timestamp <= values[1], - ); - } else { - features = features.filter( - d => d.__timestamp >= values[0] && d.__timestamp < values[1], - ); - } - // Show only categories selected in the legend const cats = this.state.categories; if (fd.dimension) { @@ -261,30 +222,23 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { render() { return (
- - - + /> +
); } diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/DeckGLContainer.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/DeckGLContainer.jsx index 9bc963c9fce3d..f4af07dbdd203 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/DeckGLContainer.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/DeckGLContainer.jsx @@ -38,7 +38,6 @@ const propTypes = { mapStyle: PropTypes.string, mapboxApiAccessToken: PropTypes.string.isRequired, children: PropTypes.node, - bottomMargin: PropTypes.number, width: PropTypes.number.isRequired, height: PropTypes.number.isRequired, onViewportChange: PropTypes.func, @@ -47,7 +46,6 @@ const defaultProps = { mapStyle: 'light', setControlValue: () => {}, children: null, - bottomMargin: 0, }; export class DeckGLContainer extends React.Component { @@ -103,20 +101,19 @@ export class DeckGLContainer extends React.Component { }; render() { - const { children, bottomMargin, height, width } = this.props; + const { children, height, width } = this.props; const { viewState, tooltip } = this.state; - const adjustedHeight = height - bottomMargin; const layers = this.layers(); return ( <> -
+
` - .slider-selection { - background: ${theme.colors.grayscale.light2}; - } - .slider-handle { - background: ${theme.colors.grayscale.light1}; - } - `} -`; - -export default function BootstrapSliderWrapper(props) { - return ( - - - - ); -} diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Legend.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Legend.tsx similarity index 50% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Legend.jsx rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Legend.tsx index 40f13bb514d5b..70f443b91066a 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Legend.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Legend.tsx @@ -19,8 +19,7 @@ * specific language governing permissions and limitations * under the License. */ -import React from 'react'; -import PropTypes from 'prop-types'; +import React, { memo } from 'react'; import { formatNumber, styled } from '@superset-ui/core'; const StyledLegend = styled.div` @@ -54,91 +53,81 @@ const StyledLegend = styled.div` const categoryDelimiter = ' - '; -const propTypes = { - categories: PropTypes.object, - forceCategorical: PropTypes.bool, - format: PropTypes.string, - position: PropTypes.oneOf([null, 'tl', 'tr', 'bl', 'br']), - showSingleCategory: PropTypes.func, - toggleCategory: PropTypes.func, +export type LegendProps = { + format: string | null; + forceCategorical?: boolean; + position?: null | 'tl' | 'tr' | 'bl' | 'br'; + categories: Record; + toggleCategory: (key: string) => void; + showSingleCategory: (key: string) => void; }; -const defaultProps = { - categories: {}, - forceCategorical: false, - format: null, - position: 'tr', - showSingleCategory: () => {}, - toggleCategory: () => {}, -}; - -export default class Legend extends React.PureComponent { - format(value) { - if (!this.props.format || this.props.forceCategorical) { +const Legend = ({ + format: d3Format = null, + forceCategorical = false, + position = 'tr', + categories: categoriesObject = {}, + toggleCategory = () => {}, + showSingleCategory = () => {}, +}: LegendProps) => { + const format = (value: string) => { + if (!d3Format || forceCategorical) { return value; } const numValue = parseFloat(value); - return formatNumber(this.props.format, numValue); - } + return formatNumber(d3Format, numValue); + }; - formatCategoryLabel(k) { - if (!this.props.format) { + const formatCategoryLabel = (k: string) => { + if (!d3Format) { return k; } if (k.includes(categoryDelimiter)) { const values = k.split(categoryDelimiter); - return ( - this.format(values[0]) + categoryDelimiter + this.format(values[1]) - ); + return format(values[0]) + categoryDelimiter + format(values[1]); } - return this.format(k); - } + return format(k); + }; - render() { - if ( - Object.keys(this.props.categories).length === 0 || - this.props.position === null - ) { - return null; - } + if (Object.keys(categoriesObject).length === 0 || position === null) { + return null; + } - const categories = Object.entries(this.props.categories).map(([k, v]) => { - const style = { color: `rgba(${v.color.join(', ')})` }; - const icon = v.enabled ? '\u25FC' : '\u25FB'; - - return ( -
  • - this.props.toggleCategory(k)} - onDoubleClick={() => this.props.showSingleCategory(k)} - > - {icon} {this.formatCategoryLabel(k)} - -
  • - ); - }); - - const vertical = this.props.position.charAt(0) === 't' ? 'top' : 'bottom'; - const horizontal = this.props.position.charAt(1) === 'r' ? 'right' : 'left'; - const style = { - position: 'absolute', - [vertical]: '0px', - [horizontal]: '10px', - }; + const categories = Object.entries(categoriesObject).map(([k, v]) => { + const style = { color: `rgba(${v.color.join(', ')})` }; + const icon = v.enabled ? '\u25FC' : '\u25FB'; return ( - -
      {categories}
    -
    +
  • + toggleCategory(k)} + onDoubleClick={() => showSingleCategory(k)} + > + {icon} {formatCategoryLabel(k)} + +
  • ); - } -} + }); + + const vertical = position?.charAt(0) === 't' ? 'top' : 'bottom'; + const horizontal = position?.charAt(1) === 'r' ? 'right' : 'left'; + const style = { + position: 'absolute' as const, + [vertical]: '0px', + [horizontal]: '10px', + }; + + return ( + +
      {categories}
    +
    + ); +}; -Legend.propTypes = propTypes; -Legend.defaultProps = defaultProps; +export default memo(Legend); diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/PlaySlider.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/PlaySlider.jsx deleted file mode 100644 index 1705b8f533844..0000000000000 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/PlaySlider.jsx +++ /dev/null @@ -1,232 +0,0 @@ -/* eslint-disable react/jsx-sort-default-props */ -/* eslint-disable react/sort-prop-types */ -/* eslint-disable react/jsx-handler-names */ -/* eslint-disable jsx-a11y/click-events-have-key-events */ -/* eslint-disable jsx-a11y/no-static-element-interactions */ -/* eslint-disable no-negated-condition */ -/* eslint-disable react/forbid-prop-types */ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import React from 'react'; -import PropTypes from 'prop-types'; -import Mousetrap from 'mousetrap'; -import { t, styled } from '@superset-ui/core'; -import BootstrapSliderWrapper from './BootstrapSliderWrapper'; - -const StyledSlider = styled.div` - ${({ theme }) => ` - display: flex; - height: 40px; - width: 100%; - margin: 0; - - .play-slider-controls { - flex: 0 0 80px; - text-align: middle; - } - - .play-slider-scrobbler { - flex: 1; - } - - .slider.slider-horizontal { - width: 100% !important; - } - - .slider-button { - color: ${theme.colors.grayscale.light1}; - margin-right: ${theme.gridUnit}px; - } - - div.slider > div.tooltip.tooltip-main.top.in { - margin-left: 0 !important; - } - `} -`; - -const propTypes = { - start: PropTypes.number.isRequired, - step: PropTypes.number.isRequired, - end: PropTypes.number.isRequired, - values: PropTypes.array.isRequired, - onChange: PropTypes.func, - loopDuration: PropTypes.number, - maxFrames: PropTypes.number, - orientation: PropTypes.oneOf(['horizontal', 'vertical']), - reversed: PropTypes.bool, - disabled: PropTypes.bool, - range: PropTypes.bool, -}; - -const defaultProps = { - onChange: () => {}, - loopDuration: 15000, - maxFrames: 100, - orientation: 'horizontal', - reversed: false, - disabled: false, - range: true, -}; - -export default class PlaySlider extends React.PureComponent { - constructor(props) { - super(props); - this.state = { intervalId: null }; - - const range = props.end - props.start; - const frames = Math.min(props.maxFrames, range / props.step); - const width = range / frames; - this.intervalMilliseconds = props.loopDuration / frames; - this.increment = - width < props.step ? props.step : width - (width % props.step); - - this.onChange = this.onChange.bind(this); - this.play = this.play.bind(this); - this.pause = this.pause.bind(this); - this.stepBackward = this.stepBackward.bind(this); - this.stepForward = this.stepForward.bind(this); - this.getPlayClass = this.getPlayClass.bind(this); - this.formatter = this.formatter.bind(this); - } - - componentDidMount() { - Mousetrap.bind(['space'], this.play); - } - - componentWillUnmount() { - Mousetrap.unbind(['space']); - } - - onChange(event) { - this.props.onChange(event.target.value); - if (this.state.intervalId != null) { - this.pause(); - } - } - - getPlayClass() { - if (this.state.intervalId == null) { - return 'fa fa-play fa-lg slider-button'; - } - - return 'fa fa-pause fa-lg slider-button'; - } - - play() { - if (this.props.disabled) { - return; - } - if (this.state.intervalId != null) { - this.pause(); - } else { - const id = setInterval(this.stepForward, this.intervalMilliseconds); - this.setState({ intervalId: id }); - } - } - - pause() { - clearInterval(this.state.intervalId); - this.setState({ intervalId: null }); - } - - stepForward() { - const { start, end, step, values, disabled } = this.props; - - if (disabled) { - return; - } - - const currentValues = Array.isArray(values) - ? values - : [values, values + step]; - const nextValues = currentValues.map(value => value + this.increment); - const carriageReturn = nextValues[1] > end ? nextValues[0] - start : 0; - - this.props.onChange(nextValues.map(value => value - carriageReturn)); - } - - stepBackward() { - const { start, end, step, values, disabled } = this.props; - - if (disabled) { - return; - } - - const currentValues = Array.isArray(values) - ? values - : [values, values + step]; - const nextValues = currentValues.map(value => value - this.increment); - const carriageReturn = nextValues[0] < start ? end - nextValues[1] : 0; - - this.props.onChange(nextValues.map(value => value + carriageReturn)); - } - - formatter(values) { - if (this.props.disabled) { - return t('Data has no time steps'); - } - - let parts = values; - if (!Array.isArray(values)) { - parts = [values]; - } else if (values[0] === values[1]) { - parts = [values[0]]; - } - - return parts.map(value => new Date(value).toUTCString()).join(' : '); - } - - render() { - const { start, end, step, orientation, reversed, disabled, range, values } = - this.props; - - return ( - -
    - - - -
    -
    - -
    -
    - ); - } -} - -PlaySlider.propTypes = propTypes; -PlaySlider.defaultProps = defaultProps; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Polygon/Polygon.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Polygon/Polygon.jsx index a881cfd96dcbc..f9a0dc2f4220f 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Polygon/Polygon.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Polygon/Polygon.jsx @@ -27,18 +27,17 @@ import PropTypes from 'prop-types'; import { PolygonLayer } from 'deck.gl'; -import AnimatableDeckGLContainer from '../../AnimatableDeckGLContainer'; import Legend from '../../components/Legend'; import TooltipRow from '../../TooltipRow'; import { getBuckets, getBreakPointColorScaler } from '../../utils'; import { commonLayerProps } from '../common'; -import { getPlaySliderParams } from '../../utils/time'; import sandboxedEval from '../../utils/sandbox'; // eslint-disable-next-line import/extensions import getPointsFromPolygon from '../../utils/getPointsFromPolygon'; // eslint-disable-next-line import/extensions import fitViewport from '../../utils/fitViewport'; +import { DeckGLContainerStyledWrapper } from '../../DeckGLContainer'; const DOUBLE_CLICK_THRESHOLD = 250; // milliseconds @@ -175,7 +174,6 @@ class DeckGLPolygon extends React.Component { this.getLayers = this.getLayers.bind(this); this.onSelect = this.onSelect.bind(this); - this.onValuesChange = this.onValuesChange.bind(this); } static getDerivedStateFromProps(props, state) { @@ -189,19 +187,6 @@ class DeckGLPolygon extends React.Component { } const features = payload.data.features || []; - const timestamps = features.map(f => f.__timestamp); - - // the granularity has to be read from the payload form_data, not the - // props formData which comes from the instantaneous controls state - const granularity = - payload.form_data.time_grain_sqla || - payload.form_data.granularity || - 'P1D'; - - const { start, end, getStep, values, disabled } = getPlaySliderParams( - timestamps, - granularity, - ); let { viewport } = props; if (formData.autozoom) { @@ -213,11 +198,6 @@ class DeckGLPolygon extends React.Component { } return { - start, - end, - getStep, - values, - disabled, viewport, selected: [], lastClick: 0, @@ -252,32 +232,13 @@ class DeckGLPolygon extends React.Component { } } - onValuesChange(values) { - this.setState({ - values: Array.isArray(values) - ? values - : [values, values + this.state.getStep(values)], - }); - } - - getLayers(values) { + getLayers() { if (this.props.payload.data.features === undefined) { return []; } const filters = []; - // time filter - if (values[0] === values[1] || values[1] === this.end) { - filters.push( - d => d.__timestamp >= values[0] && d.__timestamp <= values[1], - ); - } else { - filters.push( - d => d.__timestamp >= values[0] && d.__timestamp < values[1], - ); - } - const layer = getLayer( this.props.formData, this.props.payload, @@ -300,7 +261,6 @@ class DeckGLPolygon extends React.Component { render() { const { payload, formData, setControlValue } = this.props; - const { start, end, getStep, values, disabled, viewport } = this.state; const fd = formData; const metricLabel = fd.metric ? fd.metric.label || fd.metric : null; @@ -310,32 +270,23 @@ class DeckGLPolygon extends React.Component { return (
    - - {formData.metric !== null && ( - - )} - + /> + + {formData.metric !== null && ( + + )}
    ); } diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/Screengrid.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/Screengrid.jsx index 7883dda17ed66..e3aa934fa1ad0 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/Screengrid.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/Screengrid.jsx @@ -24,13 +24,12 @@ import React from 'react'; import PropTypes from 'prop-types'; import { ScreenGridLayer } from 'deck.gl'; import { t } from '@superset-ui/core'; -import AnimatableDeckGLContainer from '../../AnimatableDeckGLContainer'; -import { getPlaySliderParams } from '../../utils/time'; import sandboxedEval from '../../utils/sandbox'; import { commonLayerProps } from '../common'; import TooltipRow from '../../TooltipRow'; // eslint-disable-next-line import/extensions import fitViewport from '../../utils/fitViewport'; +import { DeckGLContainerStyledWrapper } from '../../DeckGLContainer'; function getPoints(data) { return data.map(d => d.position); @@ -118,7 +117,6 @@ class DeckGLScreenGrid extends React.PureComponent { this.state = DeckGLScreenGrid.getDerivedStateFromProps(props); this.getLayers = this.getLayers.bind(this); - this.onValuesChange = this.onValuesChange.bind(this); } static getDerivedStateFromProps(props, state) { @@ -130,19 +128,7 @@ class DeckGLScreenGrid extends React.PureComponent { } const features = props.payload.data.features || []; - const timestamps = features.map(f => f.__timestamp); - - // the granularity has to be read from the payload form_data, not the - // props formData which comes from the instantaneous controls state - const granularity = - props.payload.form_data.time_grain_sqla || - props.payload.form_data.granularity || - 'P1D'; - - const { start, end, getStep, values, disabled } = getPlaySliderParams( - timestamps, - granularity, - ); + const { width, height, formData } = props; let { viewport } = props; @@ -155,11 +141,6 @@ class DeckGLScreenGrid extends React.PureComponent { } return { - start, - end, - getStep, - values, - disabled, viewport, selected: [], lastClick: 0, @@ -167,29 +148,9 @@ class DeckGLScreenGrid extends React.PureComponent { }; } - onValuesChange(values) { - this.setState({ - values: Array.isArray(values) - ? values - : // eslint-disable-next-line react/no-access-state-in-setstate - [values, values + this.state.getStep(values)], - }); - } - - getLayers(values) { + getLayers() { const filters = []; - // time filter - if (values[0] === values[1] || values[1] === this.end) { - filters.push( - d => d.__timestamp >= values[0] && d.__timestamp <= values[1], - ); - } else { - filters.push( - d => d.__timestamp >= values[0] && d.__timestamp < values[1], - ); - } - const layer = getLayer( this.props.formData, this.props.payload, @@ -213,23 +174,14 @@ class DeckGLScreenGrid extends React.PureComponent { return (
    -
    ); diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/time.ts b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/time.ts deleted file mode 100644 index 2d4b17b97b9f1..0000000000000 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/time.ts +++ /dev/null @@ -1,135 +0,0 @@ -/* eslint-disable no-negated-condition */ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import moment, { Moment, Duration } from 'moment'; - -// array with the minimum values of each part of a timestamp -- note that -// months are zero-indexed in JavaScript -const truncatePartTo = [ - 1, // year - 0, // month - 1, // day - 0, // hour - 0, // minute - 0, // second - 0, // millisecond -]; - -export function truncate(timestamp: Moment, step: Duration) { - /* - * Truncate timestamp down to duration resolution. - */ - const lowerBound = moment(timestamp).subtract(step); - const explodedTimestamp = timestamp?.toArray(); - const explodedLowerBound = lowerBound.toArray(); - - const firstDiffIndex = explodedTimestamp - .map((part, i) => explodedLowerBound[i] !== part) - .indexOf(true); - const dateParts = explodedTimestamp.map((part, i) => { - if (i === firstDiffIndex) { - // truncate down to closest `truncatePartTo[i] + n * step` - const difference = part - explodedLowerBound[i]; - - return part - ((part - truncatePartTo[i]) % difference); - } - if (i < firstDiffIndex || firstDiffIndex === -1) { - return part; - } - - return truncatePartTo[i]; - }); - - return moment(dateParts); -} - -function getStepSeconds(step: Duration, start: number) { - /* Return number of seconds in a step. - * - * The step might be ambiguous, eg, "1 month" has a variable number of - * seconds, which is why we need to know the start time. - */ - const startMilliseconds = parseInt(moment(start).format('x'), 10); - const endMilliseconds = parseInt(moment(start).add(step).format('x'), 10); - - return endMilliseconds - startMilliseconds; -} - -export function getPlaySliderParams(timestamps: number[], timeGrain: string) { - const minTimestamp = moment( - Number(timestamps.reduce((a, b) => (a < b ? a : b))), - ); - const maxTimestamp = moment( - Number(timestamps.reduce((a, b) => (a > b ? a : b))), - ); - let step: Duration; - let reference; - - if (timeGrain.includes('/')) { - // Here, time grain is a time interval instead of a simple duration, either - // `reference/duration` or `duration/reference`. We need to parse the - // duration and make sure that start and end are in the right places. For - // example, if `reference` is a Saturday and `duration` is 1 week (P1W) - // then both start and end should be Saturdays. - const parts = timeGrain.split('/', 2); - if (parts[0].endsWith('Z')) { - // ISO string - reference = moment(parts[0]); - step = moment.duration(parts[1]); - } else { - reference = moment(parts[1]); - step = moment.duration(parts[0]); - } - } else { - step = moment.duration(timeGrain); - reference = truncate(minTimestamp, step); - } - - // find the largest `reference + n * step` smaller than the minimum timestamp - let start; - const minValue = minTimestamp.valueOf(); - for (start = reference.clone(); start.valueOf() < minValue; ) { - start.add(step); - } - for (; start.valueOf() > minValue; ) { - start.subtract(step); - } - - // find the smallest `reference + n * step` larger than the maximum timestamp - let end; - const maxValue = maxTimestamp.valueOf(); - for (end = reference.clone(); end.valueOf() > maxValue; ) { - end.subtract(step); - } - for (; end.valueOf() < maxValue; ) { - end.add(step); - } - - const values = - timeGrain != null ? [start, start.clone().add(step)] : [start, end]; - const disabled = timestamps.every(timestamp => timestamp === null); - - return { - start: parseInt(start.format('x'), 10), - end: parseInt(end.format('x'), 10), - getStep: (start: number) => getStepSeconds(step, start), - values: values.map(v => parseInt(v.format('x'), 10)), - disabled, - }; -} From cce87ef2dd0c8aab329ce5a41a5008d8f22a10d9 Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Wed, 2 Aug 2023 15:30:16 +0200 Subject: [PATCH 3/6] categorical container --- .../legacy-preset-chart-deckgl/package.json | 1 - ...ner.jsx => CategoricalDeckGLContainer.tsx} | 75 +++++++++------- .../{controlPanel.js => controlPanel.ts} | 4 +- .../src/Multi/{index.js => index.ts} | 0 .../src/factory.tsx | 11 +-- .../{transformProps.js => transformProps.ts} | 5 +- ...dDndControls.jsx => sharedDndControls.tsx} | 0 .../src/utilities/utils.js | 90 ------------------- .../src/utilities/utils.ts | 23 +++++ .../utils/{colors.test.js => colors.test.ts} | 0 10 files changed, 81 insertions(+), 128 deletions(-) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/{CategoricalDeckGLContainer.jsx => CategoricalDeckGLContainer.tsx} (81%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/{controlPanel.js => controlPanel.ts} (95%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/{index.js => index.ts} (100%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/{transformProps.js => transformProps.ts} (91%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/{sharedDndControls.jsx => sharedDndControls.tsx} (100%) delete mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/utils.js create mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/utils.ts rename superset-frontend/plugins/legacy-preset-chart-deckgl/test/utils/{colors.test.js => colors.test.ts} (100%) diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json b/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json index ab0d92d0e4dc4..b96f377a524f4 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json @@ -32,7 +32,6 @@ "d3-color": "^1.4.1", "d3-scale": "^3.0.0", "deck.gl": "8.5.2", - "jquery": "^3.4.1", "lodash": "^4.17.15", "moment": "^2.20.1", "mousetrap": "^1.6.1", diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx similarity index 81% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.jsx rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx index 9266adfcc8dd3..b51e780995f7f 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx @@ -24,19 +24,26 @@ */ /* eslint no-underscore-dangle: ["error", { "allow": ["", "__timestamp"] }] */ -import React from 'react'; -import PropTypes from 'prop-types'; -import { CategoricalColorNamespace } from '@superset-ui/core'; +import React, { ReactNode } from 'react'; +import { + CategoricalColorNamespace, + Datasource, + JsonObject, + JsonValue, + QueryFormData, +} from '@superset-ui/core'; import Legend from './components/Legend'; import { hexToRGB } from './utils/colors'; import sandboxedEval from './utils/sandbox'; // eslint-disable-next-line import/extensions -import fitViewport from './utils/fitViewport'; +import fitViewport, { Viewport } from './utils/fitViewport'; import { DeckGLContainerStyledWrapper } from './DeckGLContainer'; +import { Point } from './types'; +import { getLayerType } from './factory'; const { getScale } = CategoricalColorNamespace; -function getCategories(fd, data) { +function getCategories(fd: QueryFormData, data: JsonObject[]) { const c = fd.color_picker || { r: 0, g: 0, b: 0, a: 1 }; const fixedColor = [c.r, c.g, c.b, 255 * c.a]; const colorFn = getScale(fd.color_scheme); @@ -56,21 +63,30 @@ function getCategories(fd, data) { return categories; } -const propTypes = { - datasource: PropTypes.object.isRequired, - formData: PropTypes.object.isRequired, - getLayer: PropTypes.func.isRequired, - getPoints: PropTypes.func.isRequired, - height: PropTypes.number.isRequired, - mapboxApiKey: PropTypes.string.isRequired, - onAddFilter: PropTypes.func, - payload: PropTypes.object.isRequired, - setControlValue: PropTypes.func.isRequired, - viewport: PropTypes.object.isRequired, - width: PropTypes.number.isRequired, +export type CategoricalDeckGLContainerProps = { + datasource: Datasource; + formData: QueryFormData; + mapboxApiKey: string; + getPoints: (data: JsonObject[]) => Point[]; + height: number; + width: number; + viewport: Viewport; + getLayer: getLayerType; + payload: JsonObject; + onAddFilter?: () => void; + setControlValue: (control: string, value: JsonValue) => void; }; -export default class CategoricalDeckGLContainer extends React.PureComponent { +export type CategoricalDeckGLContainerState = { + formData?: QueryFormData; + viewport: Viewport; + categories: JsonObject; +}; + +export default class CategoricalDeckGLContainer extends React.PureComponent< + CategoricalDeckGLContainerProps, + CategoricalDeckGLContainerState +> { containerRef = React.createRef(); /* @@ -79,7 +95,7 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { * The container will have an interactive legend, populated from the * categories present in the data. */ - constructor(props) { + constructor(props: CategoricalDeckGLContainerProps) { super(props); this.state = this.getStateFromProps(props); @@ -88,14 +104,17 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { this.showSingleCategory = this.showSingleCategory.bind(this); } - UNSAFE_componentWillReceiveProps(nextProps) { + UNSAFE_componentWillReceiveProps(nextProps: CategoricalDeckGLContainerProps) { if (nextProps.payload.form_data !== this.state.formData) { this.setState({ ...this.getStateFromProps(nextProps) }); } } // eslint-disable-next-line class-methods-use-this - getStateFromProps(props, state) { + getStateFromProps( + props: CategoricalDeckGLContainerProps, + state?: CategoricalDeckGLContainerState, + ) { const features = props.payload.data.features || []; const categories = getCategories(props.formData, features); @@ -144,9 +163,7 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { // Show only categories selected in the legend const cats = this.state.categories; if (fd.dimension) { - features = features.filter( - d => cats[d.cat_color] && cats[d.cat_color].enabled, - ); + features = features.filter(d => cats[d.cat_color]?.enabled); } const filteredPayload = { @@ -166,7 +183,7 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { } // eslint-disable-next-line class-methods-use-this - addColor(data, fd) { + addColor(data: JsonObject[], fd: QueryFormData) { const c = fd.color_picker || { r: 0, g: 0, b: 0, a: 1 }; const colorFn = getScale(fd.color_scheme); @@ -182,7 +199,7 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { }); } - toggleCategory(category) { + toggleCategory(category: string) { const categoryState = this.state.categories[category]; const categories = { ...this.state.categories, @@ -202,7 +219,7 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { this.setState({ categories }); } - showSingleCategory(category) { + showSingleCategory(category: string) { const categories = { ...this.state.categories }; /* eslint-disable no-param-reassign */ Object.values(categories).forEach(v => { @@ -212,7 +229,7 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { this.setState({ categories }); } - setTooltip = tooltip => { + setTooltip = (tooltip: ReactNode) => { const { current } = this.containerRef; if (current) { current.setTooltip(tooltip); @@ -243,5 +260,3 @@ export default class CategoricalDeckGLContainer extends React.PureComponent { ); } } - -CategoricalDeckGLContainer.propTypes = propTypes; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/controlPanel.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/controlPanel.ts similarity index 95% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/controlPanel.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/controlPanel.ts index f4b13521b2b48..de2ebfc76eea2 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/controlPanel.js +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/controlPanel.ts @@ -44,7 +44,9 @@ export default { '/sliceasync/api/read?_flt_0_viz_type=deck_&_flt_7_viz_type=deck_multi', placeholder: t('Select charts'), onAsyncErrorMessage: t('Error while fetching charts'), - mutator: data => { + mutator: (data: { + result?: { id: number; slice_name: string }[]; + }) => { if (!data || !data.result) { return []; } diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/index.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/index.ts similarity index 100% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/index.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/index.ts diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/factory.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/factory.tsx index 248c2826ad165..7c3f44ef762df 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/factory.tsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/factory.tsx @@ -42,12 +42,13 @@ export interface getLayerType { ( formData: QueryFormData, payload: JsonObject, - onAddFilter: () => void, + onAddFilter: (() => void) | undefined, setTooltip: (tooltip: string) => void, + datasource?: Datasource, ): T; } -interface getPointsType { - (point: number[]): T; +interface getPointsType { + (data: JsonObject[]): Point[]; } type deckGLComponentState = { viewport: Viewport; @@ -56,7 +57,7 @@ type deckGLComponentState = { export function createDeckGLComponent( getLayer: getLayerType, - getPoints: getPointsType, + getPoints: getPointsType, ): React.ComponentClass { // Higher order component class Component extends React.PureComponent< @@ -138,7 +139,7 @@ export function createDeckGLComponent( export function createCategoricalDeckGLComponent( getLayer: getLayerType, - getPoints: getPointsType, + getPoints: getPointsType, ) { return function Component(props: deckGLComponentProps) { const { diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/transformProps.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/transformProps.ts similarity index 91% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/transformProps.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/transformProps.ts index ab62dbead77ef..3d7c43445a965 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/transformProps.js +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/transformProps.ts @@ -16,9 +16,12 @@ * specific language governing permissions and limitations * under the License. */ + +import { ChartProps } from '@superset-ui/core'; + const NOOP = () => {}; -export default function transformProps(chartProps) { +export default function transformProps(chartProps: ChartProps) { const { datasource, height, hooks, queriesData, rawFormData, width } = chartProps; const { onAddFilter = NOOP, setControlValue = NOOP } = hooks; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/sharedDndControls.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/sharedDndControls.tsx similarity index 100% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/sharedDndControls.jsx rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/sharedDndControls.tsx diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/utils.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/utils.js deleted file mode 100644 index d9b783f0e078b..0000000000000 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/utils.js +++ /dev/null @@ -1,90 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -/* eslint camelcase: 0 */ -import $ from 'jquery'; - -/** - * Sets the body and title content of a modal, and shows it. Assumes HTML for modal exists and that - * it handles closing (i.e., works with bootstrap) - * - * @param {object} options object of the form - * { - * title: {string}, - * body: {string}, - * modalSelector: {string, default: '.misc-modal' }, - * titleSelector: {string, default: '.misc-modal .modal-title' }, - * bodySelector: {string, default: '.misc-modal .modal-body' }, - * } - */ -export function showModal(options) { - /* eslint no-param-reassign: 0 */ - options.modalSelector = options.modalSelector || '.misc-modal'; - options.titleSelector = options.titleSelector || '.misc-modal .modal-title'; - options.bodySelector = options.bodySelector || '.misc-modal .modal-body'; - $(options.titleSelector).html(options.title || ''); - $(options.bodySelector).html(options.body || ''); - $(options.modalSelector).modal('show'); -} - -export function formatSelectOptionsForRange(start, end) { - // outputs array of arrays - // formatSelectOptionsForRange(1, 5) - // returns [[1,1], [2,2], [3,3], [4,4], [5,5]] - const options = []; - // eslint-disable-next-line no-plusplus - for (let i = start; i <= end; i++) { - options.push([i, i.toString()]); - } - return options; -} - -export function formatSelectOptions(options) { - return options.map(opt => [opt, opt.toString()]); -} - -export function getDatasourceParameter(datasourceId, datasourceType) { - return `${datasourceId}__${datasourceType}`; -} - -export function getParam(name) { - /* eslint no-useless-escape: 0 */ - const formattedName = name.replace(/\[/, '\\[').replace(/]/, '\\]'); - const regex = new RegExp(`[\\?&]${formattedName}=([^&#]*)`); - // eslint-disable-next-line no-restricted-globals - const results = regex.exec(location.search); - return results === null - ? '' - : decodeURIComponent(results[1].replace(/\+/g, ' ')); -} - -export function mainMetric(savedMetrics) { - // Using 'count' as default metric if it exists, otherwise using whatever one shows up first - let metric; - if (savedMetrics && savedMetrics.length > 0) { - savedMetrics.forEach(m => { - if (m.metric_name === 'count') { - metric = 'count'; - } - }); - if (!metric) { - metric = savedMetrics[0].metric_name; - } - } - return metric; -} diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/utils.ts b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/utils.ts new file mode 100644 index 0000000000000..48c164eb5da3b --- /dev/null +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utilities/utils.ts @@ -0,0 +1,23 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +/* eslint camelcase: 0 */ + +export function formatSelectOptions(options: (string | number)[]) { + return options.map(opt => [opt, opt.toString()]); +} diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/test/utils/colors.test.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/test/utils/colors.test.ts similarity index 100% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/test/utils/colors.test.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/test/utils/colors.test.ts From 494125e6577db316fc911204bb07e62dd16eb969 Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Wed, 2 Aug 2023 17:19:57 +0200 Subject: [PATCH 4/6] Refactor layers and utils --- superset-frontend/package-lock.json | 2567 ++++++++++------- .../legacy-preset-chart-deckgl/package.json | 11 +- .../src/CategoricalDeckGLContainer.tsx | 19 +- ...eckGLContainer.jsx => DeckGLContainer.tsx} | 69 +- .../src/Multi/Multi.jsx | 147 - .../src/Multi/Multi.tsx | 171 ++ .../src/Multi/controlPanel.ts | 2 +- .../src/components/Legend.tsx | 4 +- .../src/components/Tooltip.tsx | 4 +- .../src/factory.tsx | 23 +- .../src/layers/Arc/{Arc.jsx => Arc.tsx} | 28 +- .../Geojson/{Geojson.jsx => Geojson.tsx} | 101 +- .../src/layers/Geojson/{index.js => index.ts} | 0 .../src/layers/Grid/{Grid.jsx => Grid.tsx} | 30 +- .../src/layers/Grid/{index.js => index.ts} | 0 .../src/layers/Heatmap/Heatmap.tsx | 12 +- .../src/layers/Hex/{Hex.jsx => Hex.tsx} | 32 +- .../src/layers/Hex/{index.js => index.ts} | 0 .../src/layers/Path/{Path.jsx => Path.tsx} | 22 +- .../src/layers/Path/{index.js => index.ts} | 0 .../Polygon/{Polygon.jsx => Polygon.tsx} | 127 +- .../src/layers/Polygon/{index.js => index.ts} | 0 .../Scatter/{Scatter.jsx => Scatter.tsx} | 38 +- .../src/layers/Scatter/{index.js => index.ts} | 0 .../{Screengrid.jsx => Screengrid.tsx} | 97 +- .../layers/Screengrid/{index.js => index.ts} | 0 .../src/layers/{common.jsx => common.tsx} | 44 +- .../src/layers/{index.js => index.ts} | 0 .../src/{utils.js => utils.ts} | 89 +- .../src/utils/colors.ts | 5 +- .../src/utils/explore.ts | 4 +- .../src/utils/fitViewport.ts | 2 +- .../types/external.d.ts | 29 +- 33 files changed, 2086 insertions(+), 1591 deletions(-) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/{DeckGLContainer.jsx => DeckGLContainer.tsx} (68%) delete mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.jsx create mode 100644 superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.tsx rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Arc/{Arc.jsx => Arc.tsx} (78%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Geojson/{Geojson.jsx => Geojson.tsx} (68%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Geojson/{index.js => index.ts} (100%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Grid/{Grid.jsx => Grid.tsx} (77%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Grid/{index.js => index.ts} (100%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Hex/{Hex.jsx => Hex.tsx} (75%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Hex/{index.js => index.ts} (100%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Path/{Path.jsx => Path.tsx} (78%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Path/{index.js => index.ts} (100%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Polygon/{Polygon.jsx => Polygon.tsx} (75%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Polygon/{index.js => index.ts} (100%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/{Scatter.jsx => Scatter.tsx} (76%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/{index.js => index.ts} (100%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/{Screengrid.jsx => Screengrid.tsx} (70%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/{index.js => index.ts} (100%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/{common.jsx => common.tsx} (63%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/{index.js => index.ts} (100%) rename superset-frontend/plugins/legacy-preset-chart-deckgl/src/{utils.js => utils.ts} (62%) diff --git a/superset-frontend/package-lock.json b/superset-frontend/package-lock.json index 6f3de3e3f3d4e..694cfd9193285 100644 --- a/superset-frontend/package-lock.json +++ b/superset-frontend/package-lock.json @@ -5072,189 +5072,6 @@ "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.0.tgz", "integrity": "sha512-M2AelyJDVR/oLnToJLtuDJRBBWUGUvvGigj1411hXhAdyFWqMaqHp7TixW3FpiLuVaikIcR1QL+zqoJoZlOgpg==" }, - "node_modules/@deck.gl/aggregation-layers": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/aggregation-layers/-/aggregation-layers-8.5.2.tgz", - "integrity": "sha512-oiqXPmyn2v0lX9tWCvgmWs29stHSLS3tje71Ff2FVXDNmvP5FoZItFa8y7O7KSTkej2/rSwZeSte/a9pri6Njg==", - "dependencies": { - "@luma.gl/shadertools": "^8.5.4", - "@math.gl/web-mercator": "^3.5.3", - "d3-hexbin": "^0.2.1" - }, - "peerDependencies": { - "@deck.gl/core": "^8.0.0", - "@deck.gl/layers": "^8.0.0" - } - }, - "node_modules/@deck.gl/carto": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/carto/-/carto-8.5.2.tgz", - "integrity": "sha512-Kw/3NUM+2NcHjxH6b7IOUYXEwmJ4SNQujFzAVFW5amG4Lut8074NGSF5XHi+4M/zgk7vXDFsGRxLqspsA/dg8w==", - "dependencies": { - "@loaders.gl/loader-utils": "^3.0.6", - "@loaders.gl/mvt": "^3.0.6", - "@loaders.gl/tiles": "^3.0.6", - "@math.gl/web-mercator": "^3.5.3", - "cartocolor": "^4.0.2", - "d3-scale": "^3.2.3" - }, - "peerDependencies": { - "@deck.gl/core": "^8.0.0", - "@deck.gl/geo-layers": "^8.0.0", - "@deck.gl/layers": "^8.0.0", - "@loaders.gl/core": "^3.0.0" - } - }, - "node_modules/@deck.gl/carto/node_modules/d3-array": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", - "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", - "dependencies": { - "internmap": "^1.0.0" - } - }, - "node_modules/@deck.gl/carto/node_modules/d3-scale": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", - "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", - "dependencies": { - "d3-array": "^2.3.0", - "d3-format": "1 - 2", - "d3-interpolate": "1.2.0 - 2", - "d3-time": "^2.1.1", - "d3-time-format": "2 - 3" - } - }, - "node_modules/@deck.gl/carto/node_modules/d3-time": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", - "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", - "dependencies": { - "d3-array": "2" - } - }, - "node_modules/@deck.gl/core": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-8.5.2.tgz", - "integrity": "sha512-SAFv7fKx6k1Rj8R4qTMQO2wEhEfixROzbcoSS6RivxrfES00KYYj6jJ7iNEnq3dFn6qc37LPpxqtYYHO4BcvYA==", - "dependencies": { - "@loaders.gl/core": "^3.0.6", - "@loaders.gl/images": "^3.0.6", - "@luma.gl/core": "^8.5.4", - "@math.gl/web-mercator": "^3.5.3", - "gl-matrix": "^3.0.0", - "math.gl": "^3.5.3", - "mjolnir.js": "^2.5.0", - "probe.gl": "^3.4.0" - } - }, - "node_modules/@deck.gl/extensions": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/extensions/-/extensions-8.5.2.tgz", - "integrity": "sha512-VhbQsMNPM7RCR/ERwb1u1x0rEWAxgXfcCWttW+gYvbiagW/LrAJ22jhOghlRW/wilEmupHYbXQlWkW2V/mYfsg==", - "dependencies": { - "@luma.gl/shadertools": "^8.5.4" - }, - "peerDependencies": { - "@deck.gl/core": "^8.0.0", - "gl-matrix": "^3.0.0" - } - }, - "node_modules/@deck.gl/geo-layers": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/geo-layers/-/geo-layers-8.5.2.tgz", - "integrity": "sha512-t6+TgAdbKWDw8g9UX1y6D+5twcdJuKaXw4qSib/0yVurWi/Mil5Plihybt1l9uBZuwkr+UcpxPR73zzo+qd9MA==", - "dependencies": { - "@loaders.gl/3d-tiles": "^3.0.6", - "@loaders.gl/gis": "^3.0.6", - "@loaders.gl/loader-utils": "^3.0.6", - "@loaders.gl/mvt": "^3.0.6", - "@loaders.gl/terrain": "^3.0.6", - "@loaders.gl/tiles": "^3.0.6", - "@luma.gl/experimental": "^8.5.4", - "@math.gl/culling": "^3.5.3", - "@math.gl/web-mercator": "^3.5.3", - "h3-js": "^3.6.0", - "long": "^3.2.0", - "math.gl": "^3.5.3" - }, - "peerDependencies": { - "@deck.gl/core": "^8.0.0", - "@deck.gl/extensions": "^8.0.0", - "@deck.gl/layers": "^8.0.0", - "@deck.gl/mesh-layers": "^8.0.0", - "@loaders.gl/core": "^3.0.0" - } - }, - "node_modules/@deck.gl/google-maps": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/google-maps/-/google-maps-8.5.2.tgz", - "integrity": "sha512-Dk3ozenBWgt9nFSYOT4N82urNW/JhiMszfFq6zLt3jUp0N7EJ9d2XO81hclM59BhjIdGWb6drTe96NvtbabVLQ==", - "peerDependencies": { - "@deck.gl/core": "^8.0.0" - } - }, - "node_modules/@deck.gl/json": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/json/-/json-8.5.2.tgz", - "integrity": "sha512-lVS16bvPfLUSidgBURZvGbWEjgK8GjLWlp1iGuLvua2W6TnWIyiKa6a3XoebgeXd8kqwSbQxhNnuSVPX+Di6Rg==", - "dependencies": { - "d3-dsv": "^1.0.8", - "expression-eval": "^2.0.0" - }, - "peerDependencies": { - "@deck.gl/core": "^8.0.0" - } - }, - "node_modules/@deck.gl/layers": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-8.5.2.tgz", - "integrity": "sha512-HmpE3qf9CI7sU/xa2DMCNg31pzpzK5XuUHyC70dsLq8AV7Sm3vZQz17KMU/CWSZpVr7yQ8uxTeSQARiv/zeOFQ==", - "dependencies": { - "@loaders.gl/images": "^3.0.6", - "@mapbox/tiny-sdf": "^1.1.0", - "@math.gl/polygon": "^3.5.3", - "earcut": "^2.0.6" - }, - "peerDependencies": { - "@deck.gl/core": "^8.0.0", - "@loaders.gl/core": "^3.0.0" - } - }, - "node_modules/@deck.gl/mapbox": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/mapbox/-/mapbox-8.5.2.tgz", - "integrity": "sha512-nMpzfdPFBVthT+EMgIcKo4YO6bZCqADQtqnxIFtfofZIiKS6R5OSuJ3sXPSNZ9ReCJGzdmndEz7/Qtm9Sia/bA==", - "peerDependencies": { - "@deck.gl/core": "^8.0.0" - } - }, - "node_modules/@deck.gl/mesh-layers": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/mesh-layers/-/mesh-layers-8.5.2.tgz", - "integrity": "sha512-dUfQyGjm5CYQg9AQdRsGtEEXGSGHxifPlws0zWWoj1r757wjqM0aZ663TUJEsJQDTLNOvbBLGTiuFeCBUoKO4Q==", - "dependencies": { - "@loaders.gl/gltf": "^3.0.6", - "@luma.gl/experimental": "^8.5.4", - "@luma.gl/shadertools": "^8.5.4" - }, - "peerDependencies": { - "@deck.gl/core": "^8.0.0" - } - }, - "node_modules/@deck.gl/react": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/react/-/react-8.5.2.tgz", - "integrity": "sha512-h7AJ9nPY1PTjrAVP7T1fvWDChWZrVOsEfYIoEP4W6ILSjvDqEQfVL0+9RhjUwQV2nKrg0QmpqCmbfOrgKQQbYw==", - "dependencies": { - "prop-types": "^15.6.0" - }, - "peerDependencies": { - "@deck.gl/core": "^8.0.0", - "react": ">=16.3", - "react-dom": ">=16.3" - } - }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -10140,186 +9957,272 @@ } }, "node_modules/@loaders.gl/3d-tiles": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/3d-tiles/-/3d-tiles-3.0.8.tgz", - "integrity": "sha512-jZeOyDPGD2wEkTLW4Do9A4UUQ+OGjhhNXztB0AsttZ69OpkmsxJXb76xxwevf+eThrsTgSTjZ06eC5DHX0kyXA==", - "dependencies": { - "@loaders.gl/core": "3.0.8", - "@loaders.gl/draco": "3.0.8", - "@loaders.gl/gltf": "3.0.8", - "@loaders.gl/loader-utils": "3.0.8", - "@loaders.gl/math": "3.0.8", - "@loaders.gl/tiles": "3.0.8", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/3d-tiles/-/3d-tiles-3.4.8.tgz", + "integrity": "sha512-v4Ejtp4Pb5RhFQyI37oDy9IZtBKEUZ+2xWNtyDgeV8Vni5ht532hsPVGY8CkUMMZFAyzl3zcDFUQo0cIbiqKKg==", + "dependencies": { + "@loaders.gl/draco": "3.4.8", + "@loaders.gl/gltf": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/math": "3.4.8", + "@loaders.gl/tiles": "3.4.8", "@math.gl/core": "^3.5.1", - "@math.gl/geospatial": "^3.5.1" + "@math.gl/geospatial": "^3.5.1", + "long": "^5.2.1" + }, + "peerDependencies": { + "@loaders.gl/core": "^3.4.0" } }, + "node_modules/@loaders.gl/3d-tiles/node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, "node_modules/@loaders.gl/core": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.0.8.tgz", - "integrity": "sha512-FIfbhMkoRX2JonEHXHgClC7jwOSsEwvvmjlaTMRAY+gFKvJPGmegkp4VgUZquLFf6GedJt/1TuMMvAX6gdq1pg==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.4.8.tgz", + "integrity": "sha512-pAaAISNmxiUQn8iz0yDhX5DCt3geaaJtSTxAHgz25G2Z5kWqYS00g5bc7XIGNT2BwqD5pgVLRch+BdTQ/Q8lJA==", "dependencies": { "@babel/runtime": "^7.3.1", - "@loaders.gl/loader-utils": "3.0.8", - "@loaders.gl/worker-utils": "3.0.8", - "probe.gl": "^3.4.0" + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/worker-utils": "3.4.8", + "@probe.gl/log": "^4.0.1" + } + }, + "node_modules/@loaders.gl/core/node_modules/@probe.gl/env": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-4.0.4.tgz", + "integrity": "sha512-sYNGqesDfWD6dFP5oNZtTeFA4Z6ak5T4a8BNPdNhoqy7PK9w70JHrb6mv+RKWqKXq33KiwCDWL7fYxx2HuEH2w==", + "dependencies": { + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@loaders.gl/core/node_modules/@probe.gl/log": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-4.0.4.tgz", + "integrity": "sha512-WpmXl6njlBMwrm8HBh/b4kSp/xnY1VVmeT4PWUKF+RkVbFuKQbsU11dA1IxoMd7gSY+5DGIwxGfAv1H5OMzA4A==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "4.0.4" } }, "node_modules/@loaders.gl/draco": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/draco/-/draco-3.0.8.tgz", - "integrity": "sha512-ZCXzXNHWQ7H0qk/kC+rWzjMWjLzZGzQcDbdpIuy8xJdp4rTpmMkLUseFPby8vhkmIaqxWPwPB6mx/vM7L6JENg==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/draco/-/draco-3.4.8.tgz", + "integrity": "sha512-x127QX/CCzbSXTk5IL4WBmL6RjvMZhedzMoEiWE4NhAEiwTFKXvWUZLluoFlGzJhxSL6xiR2KBF8tN1EMv4L1Q==", "dependencies": { "@babel/runtime": "^7.3.1", - "@loaders.gl/loader-utils": "3.0.8", - "@loaders.gl/schema": "3.0.8", - "@loaders.gl/worker-utils": "3.0.8", - "draco3d": "1.4.1" + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", + "@loaders.gl/worker-utils": "3.4.8", + "draco3d": "1.5.5" } }, "node_modules/@loaders.gl/gis": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/gis/-/gis-3.0.8.tgz", - "integrity": "sha512-7NL+lIb7NezlMupYskVil6M3RZunXJl+TyaVAW82GLbzPSOq+m/G7h3+z0GBa8iv/U/I+cB5BhSN+GZmvFwqEA==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/gis/-/gis-3.4.8.tgz", + "integrity": "sha512-I0Q8n1XhxXfZ6QoHvW6ayUkrOiifARGvSm4xTZxkydFNM5MULp9ICrZkFeqGMAVeevbssR3h9JKR111AmQvrPw==", "dependencies": { - "@loaders.gl/loader-utils": "3.0.8", - "@loaders.gl/schema": "3.0.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", "@mapbox/vector-tile": "^1.3.1", + "@math.gl/polygon": "^3.5.1", "pbf": "^3.2.1" } }, "node_modules/@loaders.gl/gltf": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/gltf/-/gltf-3.0.8.tgz", - "integrity": "sha512-4PXWTlqyvlbZE2Vp4iQ+Y87ZO1WuRvSlbImDhygd0hoINfmJ9ObxrFS3yJcpJTu007nWxXorNVEOKyuoo+4Iyw==", - "dependencies": { - "@loaders.gl/core": "3.0.8", - "@loaders.gl/draco": "3.0.8", - "@loaders.gl/images": "3.0.8", - "@loaders.gl/loader-utils": "3.0.8" + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/gltf/-/gltf-3.4.8.tgz", + "integrity": "sha512-nvDj0LmkOXtQWUr7MkGShQ2WUmZlUnWTs6PatPxueevdL49vR16SB8VAWTx+8XUPq3Wno+gVZJxG8HBRkFVHng==", + "dependencies": { + "@loaders.gl/draco": "3.4.8", + "@loaders.gl/images": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/textures": "3.4.8", + "@math.gl/core": "^3.5.1" } }, "node_modules/@loaders.gl/images": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-3.0.8.tgz", - "integrity": "sha512-rO2cIYJYlMs/uO9YSoF4/BEA4p/9xQ3gHZ1sIJkPYVnDqzpbu8nvUjWTQqIdL/MkQBTW8tz3twCdM+B6G9Fa2w==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-3.4.8.tgz", + "integrity": "sha512-cKoQ20aMBgBXYKVVJuDLuH1wTeXZyinbG4otSBf4D+gAhQ09Gd3dVMYF7RWIxXp0CdL4jiqGHnJ470y0AvrT4w==", "dependencies": { - "@loaders.gl/loader-utils": "3.0.8" + "@loaders.gl/loader-utils": "3.4.8" } }, "node_modules/@loaders.gl/loader-utils": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-3.0.8.tgz", - "integrity": "sha512-PW1WyyQ+LXkqoGHBZHsmfNQkKiLAYf1gok+kHnHvY9fCzhJeA1iTNEUKPXGXKgS00m/k5cBTkOWAaOG9KRvBCQ==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-3.4.8.tgz", + "integrity": "sha512-/3sZ2J3Y29t50HSo6X6mtLNDYID+s77cmFWxjq+R4/uDekYx2vmgiw/WCFbupKse6NrAKe1KgqEBac1Q7yARSQ==", "dependencies": { "@babel/runtime": "^7.3.1", - "@loaders.gl/worker-utils": "3.0.8", - "@probe.gl/stats": "^3.4.0" + "@loaders.gl/worker-utils": "3.4.8", + "@probe.gl/stats": "^4.0.1" + } + }, + "node_modules/@loaders.gl/loader-utils/node_modules/@probe.gl/stats": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-4.0.4.tgz", + "integrity": "sha512-SDuSY/D4yDL6LQDa69l/GCcnZLRiGYdyvYkxWb0CgnzTPdPrcdrzGkzkvpC3zsA4fEFw2smlDje370QGHwlisg==", + "dependencies": { + "@babel/runtime": "^7.0.0" } }, "node_modules/@loaders.gl/math": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/math/-/math-3.0.8.tgz", - "integrity": "sha512-jfFpxxr4Bq5JfOPqLVJc4JJGoGGvVTOCWiJhnTtSAKhaNSwldmNWaZ0w8E2nlgPKPMAHiTRKOQnd9sSY5m66Cw==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/math/-/math-3.4.8.tgz", + "integrity": "sha512-+9Hy1k44tj+v8IYKh+Zp0xXOijH94HoT/8ILdt5kG8MdjDU6VYyz2t/D4ZawSM+DBgXLYhDIIKkqrdND5ct2AQ==", "dependencies": { - "@loaders.gl/images": "3.0.8", - "@loaders.gl/loader-utils": "3.0.8", + "@loaders.gl/images": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", "@math.gl/core": "^3.5.1" } }, "node_modules/@loaders.gl/mvt": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/mvt/-/mvt-3.0.8.tgz", - "integrity": "sha512-Jk1QTHgpxMsUT01w5IJJ2en9qq0yOZcL2wGXVc7CFp2h6inB22rC3drUwq1mUNGe6iy3EWIo7EeJVd9B+5JyTQ==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/mvt/-/mvt-3.4.8.tgz", + "integrity": "sha512-JvgSsg7+oypRAhGmUKvLSH8h146HRopxf25c9hzyPWX1MeAPfVWgwTou0syy5TwOyRlrLtGp4Rs/6AmNAWBtnw==", "dependencies": { - "@loaders.gl/gis": "3.0.8", - "@loaders.gl/loader-utils": "3.0.8", + "@loaders.gl/gis": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", "@math.gl/polygon": "^3.5.1", "pbf": "^3.2.1" } }, "node_modules/@loaders.gl/schema": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-3.0.8.tgz", - "integrity": "sha512-yne5WE7fZZWFl2zF8fzDlYhPVJua6h6mTCSmlQ5pryaMXTZS9mfzXXIFWRL3kswqnQTu/QNFdyFj1mP0haF24w==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-3.4.8.tgz", + "integrity": "sha512-nu+mT8LgeoCF65xs+F9qegJsIWqYOzwkzJLEd7zmHGRMMYqaFDqcp63J3CUQy+UvS4dGTZph38aQuVfncS/fJA==", "dependencies": { - "@types/geojson": "^7946.0.7", - "apache-arrow": "^4.0.0", - "d3-dsv": "^1.2.0" + "@types/geojson": "^7946.0.7" } }, "node_modules/@loaders.gl/terrain": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/terrain/-/terrain-3.0.8.tgz", - "integrity": "sha512-MtOAYEB/xJB4CN4B0YNPkO4v1ZY332joxiOHQI1x37x4sWVAqOrKLr9jB42sZCB8aINi2WMWGiErtf9wh9L5Pg==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/terrain/-/terrain-3.4.8.tgz", + "integrity": "sha512-bWLePOb6+4N8DNMXP0D3aqkwyU3phuUjzjQLvfoP9dySUuX4E9kwarCcmkaCYyqp2swp57cHaylSd6tHXOFR6w==", "dependencies": { "@babel/runtime": "^7.3.1", - "@loaders.gl/loader-utils": "3.0.8", - "@loaders.gl/schema": "3.0.8", + "@loaders.gl/images": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", "@mapbox/martini": "^0.2.0" } }, + "node_modules/@loaders.gl/textures": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/textures/-/textures-3.4.8.tgz", + "integrity": "sha512-lFlV1/3yQqBANP5FoywuQwh+Br++BU3/6eT/Eb/zDbKOqTuqtHp7yAUz207tAO3mRqTkPvtKi9fv+0QrBGoxtw==", + "dependencies": { + "@loaders.gl/images": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", + "@loaders.gl/worker-utils": "3.4.8", + "ktx-parse": "^0.0.4", + "texture-compressor": "^1.0.2" + } + }, "node_modules/@loaders.gl/tiles": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/tiles/-/tiles-3.0.8.tgz", - "integrity": "sha512-Rc+yHFdQg2sYmcYkwvszukFWdm9EW354F9HUR7y/oauos6tsdo4YTj31zgytaYR63/EqWQ7kwI29/eePEcutzg==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/tiles/-/tiles-3.4.8.tgz", + "integrity": "sha512-rA3ULOokiUTH6Y3sr37wGaTx3P0g/hRti9yB6q/8kSBy+fE1gSD801O4VluNx6DbOELR2zWkM8TqLTep6sBN1A==", "dependencies": { - "@loaders.gl/core": "3.0.8", - "@loaders.gl/loader-utils": "3.0.8", - "@loaders.gl/math": "3.0.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/math": "3.4.8", "@math.gl/core": "^3.5.1", "@math.gl/culling": "^3.5.1", "@math.gl/geospatial": "^3.5.1", "@math.gl/web-mercator": "^3.5.1", - "@probe.gl/stats": "^3.4.0" + "@probe.gl/stats": "^4.0.1" + }, + "peerDependencies": { + "@loaders.gl/core": "^3.4.0" + } + }, + "node_modules/@loaders.gl/tiles/node_modules/@probe.gl/stats": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-4.0.4.tgz", + "integrity": "sha512-SDuSY/D4yDL6LQDa69l/GCcnZLRiGYdyvYkxWb0CgnzTPdPrcdrzGkzkvpC3zsA4fEFw2smlDje370QGHwlisg==", + "dependencies": { + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@loaders.gl/wms": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/wms/-/wms-3.4.8.tgz", + "integrity": "sha512-4ESwVUa6dStmGqHIqdz6XFo/b/uyB6O+A1iy/mhMGTW8JodrzTcPQl5Iq8fA6EEYP0xviXFL652IEn+dR/BsGg==", + "dependencies": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/images": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", + "@loaders.gl/xml": "3.4.8", + "@turf/rewind": "^5.1.5", + "deep-strict-equal": "^0.2.0", + "lerc": "^4.0.1" } }, "node_modules/@loaders.gl/worker-utils": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-3.0.8.tgz", - "integrity": "sha512-Pg72HuXPcL725TrOlOr83xloVUHj6OMWmno1dI8ccuqfOBsgoRjxNZrcSvwBzfK8tFCzuN2X30I+mHl3BkuYLw==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-3.4.8.tgz", + "integrity": "sha512-cioo1rKtUkbDPJVQZ5ytEc6r/LdR1eIOCszgRh1VymtYvWGT+prZxfCIAmM1uZBV2SLWYTnH17dR0PR+cNopzA==", "dependencies": { "@babel/runtime": "^7.3.1" } }, + "node_modules/@loaders.gl/xml": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/xml/-/xml-3.4.8.tgz", + "integrity": "sha512-8lrmdsnaobENpEPalEAzP720UY3kA/w6w7vCUKABB60QHnq+D5Rvw1PLPfQCACMFhYF+vR56KcQjtEbuqhs5wA==", + "dependencies": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", + "fast-xml-parser": "^4.2.5" + } + }, "node_modules/@luma.gl/constants": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-8.5.4.tgz", - "integrity": "sha512-lrA4ja92om/gDHYOvM9itL5S7FVzjKulyknDz6S+Y7gmgHgXk2ln1Xar5zUCsLnhAYx4glHITXGH5Y5rdWgT1Q==" + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-8.5.20.tgz", + "integrity": "sha512-5yG+ybkUZ4j6kLPWMZjN4Hun2yLB0MyEpNCRKAUN9/yS9UIWA7unyVxjSf2vnE7k/7dywtxlbXegASNFgNVGxw==" }, "node_modules/@luma.gl/core": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-8.5.4.tgz", - "integrity": "sha512-+saDz1D3mcPd53vgbG60ryg1w5CF9Z2wdakKHzR810VoJLw97t4aNdg/eNgyWOvbOHxaKJBPm8K0sGjej67+jw==", + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-8.5.20.tgz", + "integrity": "sha512-xJr96G6vhYcznYHC84fbeOG3fgNM4lFwj9bd0VPcg/Kfe8otUeN1Hl0AKHCCtNn48PiMSg3LKbaiRfNUMhaffQ==", "dependencies": { "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.4", - "@luma.gl/engine": "8.5.4", - "@luma.gl/gltools": "8.5.4", - "@luma.gl/shadertools": "8.5.4", - "@luma.gl/webgl": "8.5.4" + "@luma.gl/constants": "8.5.20", + "@luma.gl/engine": "8.5.20", + "@luma.gl/gltools": "8.5.20", + "@luma.gl/shadertools": "8.5.20", + "@luma.gl/webgl": "8.5.20" } }, "node_modules/@luma.gl/engine": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-8.5.4.tgz", - "integrity": "sha512-Sfv972IzvR9s9kKWugs67XQUh9jC0e/PpBrzvyGVnPU4XvFq42RZVF73pzEklVU6AlpR8Zg5CPtxGdhyOHtT7w==", + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-8.5.20.tgz", + "integrity": "sha512-+0ryJ/4gL1pWaEgZimY21jUPt1LYiO6Cqte8TNUprCfAHoAStsuzD7jwgEqnM6jJOUEdIxQ3w0z3Dzw/0KIE+w==", "dependencies": { "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.4", - "@luma.gl/gltools": "8.5.4", - "@luma.gl/shadertools": "8.5.4", - "@luma.gl/webgl": "8.5.4", + "@luma.gl/constants": "8.5.20", + "@luma.gl/gltools": "8.5.20", + "@luma.gl/shadertools": "8.5.20", + "@luma.gl/webgl": "8.5.20", "@math.gl/core": "^3.5.0", - "probe.gl": "^3.4.0" + "@probe.gl/env": "^3.5.0", + "@probe.gl/stats": "^3.5.0", + "@types/offscreencanvas": "^2019.7.0" } }, "node_modules/@luma.gl/experimental": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/experimental/-/experimental-8.5.4.tgz", - "integrity": "sha512-09waqRhgIrw+Sq0/in4tw4jPag5YsFfV1nEHJaLAg5RFv92S53IEubSJgkuG02HoOBkPxQ7KYvs9VNmriisnYg==", + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/experimental/-/experimental-8.5.20.tgz", + "integrity": "sha512-V1Jp68rYMPtwMdf+50r3NSYsGV3srjwZ+lcK2ew4DshjedDbYwLqTGMWcOyBhY3K3aCl2LH3Fhn0hAY+3NTLGA==", "dependencies": { - "@luma.gl/constants": "8.5.4", + "@luma.gl/constants": "8.5.20", "@math.gl/core": "^3.5.0", "earcut": "^2.0.6" }, @@ -10333,33 +10236,36 @@ } }, "node_modules/@luma.gl/gltools": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/gltools/-/gltools-8.5.4.tgz", - "integrity": "sha512-JotiPuymQz2Xc41AYlS2moJC/EHxU+OX/OMKi0+/MeOlEFLsdochgTA0I64j8yofLTXdeiGCneGtD1Ao8fk+bw==", + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/gltools/-/gltools-8.5.20.tgz", + "integrity": "sha512-5pP6ph9FSX5gHiVWQM1DmYRUnriklzKUG9yaqlQsKEqCFsOcKB0EfK3MfBVXIfsOdP/1bJZ9Dlz/zV19soWVhg==", "dependencies": { "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.4", - "probe.gl": "^3.4.0" + "@luma.gl/constants": "8.5.20", + "@probe.gl/env": "^3.5.0", + "@probe.gl/log": "^3.5.0", + "@types/offscreencanvas": "^2019.7.0" } }, "node_modules/@luma.gl/shadertools": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-8.5.4.tgz", - "integrity": "sha512-rwLBLrACi75aWnuJm8rVKCQnJR2sMTCxHuexfjHJ7Uecl0vVcVJZT7c9EnCFaz5LUTNbdupvuhq0SKNckKiKmw==", + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-8.5.20.tgz", + "integrity": "sha512-q1lrCZy1ncIFb4mMjsYgISLzNP6eMnhLUY+Oltj/qjAMcPEssCeHN2+XGfP/CVtU+O7sC+5JY2bQGaTs6HQ/Qw==", "dependencies": { "@babel/runtime": "^7.0.0", "@math.gl/core": "^3.5.0" } }, "node_modules/@luma.gl/webgl": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-8.5.4.tgz", - "integrity": "sha512-dWy4dhTbtvDO9zQBdx1Yb+DxNx/1JWV9rhhJxJUtTKbGZSX0RjkASTT6GBWMl5jrH1JYJefS1wswHmmPVXjK0Q==", + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-8.5.20.tgz", + "integrity": "sha512-p/kt9KztywH4l+09XHoZ4cPFOoE7xlZXIBMT8rxRVgfe1w0lvi7QYh4tOG7gk+iixQ34EyDQacoHCsabdpmqQg==", "dependencies": { "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.4", - "@luma.gl/gltools": "8.5.4", - "probe.gl": "^3.4.0" + "@luma.gl/constants": "8.5.20", + "@luma.gl/gltools": "8.5.20", + "@probe.gl/env": "^3.5.0", + "@probe.gl/stats": "^3.5.0" } }, "node_modules/@mapbox/extent": { @@ -10454,10 +10360,13 @@ "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=" }, - "node_modules/@mapbox/tiny-sdf": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", - "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==" + "node_modules/@mapbox/tile-cover": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/tile-cover/-/tile-cover-3.0.1.tgz", + "integrity": "sha512-R8aoFY/87HWBOL9E2eBqzOY2lpfWYXCcTNgBpIxAv67rqQeD4IfnHD0iPXg/Z1cqXrklegEYZCp/7ZR/RsWqBQ==", + "dependencies": { + "tilebelt": "^1.0.1" + } }, "node_modules/@mapbox/unitbezier": { "version": "0.0.0", @@ -10490,13 +10399,23 @@ } }, "node_modules/@math.gl/culling": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/@math.gl/culling/-/culling-3.5.3.tgz", - "integrity": "sha512-ABpAcrvoIOLSm1EUkwgDem4RfO28HWPBs/+taZ/ZSpJG6KiVPklpKU1NCK+05HuJStkpFZ+XlWtehWU6FAMCyA==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/culling/-/culling-3.6.3.tgz", + "integrity": "sha512-3UERXHbaPlM6pnTk2MI7LeQ5CoelDZzDzghTTcv+HdQCZsT/EOEuEdYimETHtSxiyiOmsX2Un65UBLYT/rbKZg==", "dependencies": { "@babel/runtime": "^7.12.0", - "@math.gl/core": "3.5.3", - "gl-matrix": "^3.0.0" + "@math.gl/core": "3.6.3", + "gl-matrix": "^3.4.0" + } + }, + "node_modules/@math.gl/culling/node_modules/@math.gl/core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.3.tgz", + "integrity": "sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@math.gl/types": "3.6.3", + "gl-matrix": "^3.4.0" } }, "node_modules/@math.gl/geospatial": { @@ -10510,20 +10429,43 @@ } }, "node_modules/@math.gl/polygon": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/@math.gl/polygon/-/polygon-3.5.3.tgz", - "integrity": "sha512-VktscmyQg/Rd56nJk0Nj/UyvnPDbsnZNMWCdl3G5AYenYzLWy6h4FEWhLx8pD+Xw7VuFot8LR4WAK2TPzXzrWw==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/polygon/-/polygon-3.6.3.tgz", + "integrity": "sha512-FivQ1ZnYcAss1wVifOkHP/ZnlfQy1IL/769uzNtiHxwUbW0kZG3yyOZ9I7fwyzR5Hvqt3ErJKHjSYZr0uVlz5g==", "dependencies": { - "@math.gl/core": "3.5.3" + "@math.gl/core": "3.6.3" + } + }, + "node_modules/@math.gl/polygon/node_modules/@math.gl/core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.3.tgz", + "integrity": "sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@math.gl/types": "3.6.3", + "gl-matrix": "^3.4.0" } }, + "node_modules/@math.gl/sun": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/sun/-/sun-3.6.3.tgz", + "integrity": "sha512-mrx6CGYYeTNSQttvcw0KVUy+35YDmnjMqpO/o0t06Vcghrt0HNruB/ScRgUSbJrgkbOg1Vcqm23HBd++clzQzw==", + "dependencies": { + "@babel/runtime": "^7.12.0" + } + }, + "node_modules/@math.gl/types": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/types/-/types-3.6.3.tgz", + "integrity": "sha512-3uWLVXHY3jQxsXCr/UCNPSc2BG0hNUljhmOBt9l+lNFDp7zHgm0cK2Tw4kj2XfkJy4TgwZTBGwRDQgWEbLbdTA==" + }, "node_modules/@math.gl/web-mercator": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-3.5.6.tgz", - "integrity": "sha512-siWHLJGp9o8fDEM1t0Rby+JXftl6il0z3927liWGzkHqFftXPHY858ShPy45ThDU8q5lyCftg8aVgrv4nfD+Zw==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-3.6.3.tgz", + "integrity": "sha512-UVrkSOs02YLehKaehrxhAejYMurehIHPfFQvPFZmdJHglHOU4V2cCUApTVEwOksvCp161ypEqVp+9H6mGhTTcw==", "dependencies": { "@babel/runtime": "^7.12.0", - "gl-matrix": "~3.3.0" + "gl-matrix": "^3.4.0" } }, "node_modules/@mdx-js/loader": { @@ -12171,10 +12113,27 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@probe.gl/env": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.6.0.tgz", + "integrity": "sha512-4tTZYUg/8BICC3Yyb9rOeoKeijKbZHRXBEKObrfPmX4sQmYB15ZOUpoVBhAyJkOYVAM8EkPci6Uw5dLCwx2BEQ==", + "dependencies": { + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@probe.gl/log": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-3.6.0.tgz", + "integrity": "sha512-hjpyenpEvOdowgZ1qMeCJxfRD4JkKdlXz0RC14m42Un62NtOT+GpWyKA4LssT0+xyLULCByRAtG2fzZorpIAcA==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.6.0" + } + }, "node_modules/@probe.gl/stats": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.4.0.tgz", - "integrity": "sha512-Gl37r9qGuiKadIvTZdSZvzCNOttJYw6RcY1oT0oDuB8r2uhuZAdSMQRQTy9FTinp6MY6O9wngGnV6EpQ8wSBAw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.6.0.tgz", + "integrity": "sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==", "dependencies": { "@babel/runtime": "^7.0.0" } @@ -19036,6 +18995,56 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@turf/boolean-clockwise": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-5.1.5.tgz", + "integrity": "sha512-FqbmEEOJ4rU4/2t7FKx0HUWmjFEVqR+NJrFP7ymGSjja2SQ7Q91nnBihGuT+yuHHl6ElMjQ3ttsB/eTmyCycxA==", + "dependencies": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "node_modules/@turf/clone": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-5.1.5.tgz", + "integrity": "sha512-//pITsQ8xUdcQ9pVb4JqXiSqG4dos5Q9N4sYFoWghX21tfOV2dhc5TGqYOhnHrQS7RiKQL1vQ48kIK34gQ5oRg==", + "dependencies": { + "@turf/helpers": "^5.1.5" + } + }, + "node_modules/@turf/helpers": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-5.1.5.tgz", + "integrity": "sha512-/lF+JR+qNDHZ8bF9d+Cp58nxtZWJ3sqFe6n3u3Vpj+/0cqkjk4nXKYBSY0azm+GIYB5mWKxUXvuP/m0ZnKj1bw==" + }, + "node_modules/@turf/invariant": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-5.2.0.tgz", + "integrity": "sha512-28RCBGvCYsajVkw2EydpzLdcYyhSA77LovuOvgCJplJWaNVyJYH6BOR3HR9w50MEkPqb/Vc/jdo6I6ermlRtQA==", + "dependencies": { + "@turf/helpers": "^5.1.5" + } + }, + "node_modules/@turf/meta": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-5.2.0.tgz", + "integrity": "sha512-ZjQ3Ii62X9FjnK4hhdsbT+64AYRpaI8XMBMcyftEOGSmPMUVnkbvuv3C9geuElAXfQU7Zk1oWGOcrGOD9zr78Q==", + "dependencies": { + "@turf/helpers": "^5.1.5" + } + }, + "node_modules/@turf/rewind": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@turf/rewind/-/rewind-5.1.5.tgz", + "integrity": "sha512-Gdem7JXNu+G4hMllQHXRFRihJl3+pNl7qY+l4qhQFxq+hiU1cQoVFnyoleIqWKIrdK/i2YubaSwc3SCM7N5mMw==", + "dependencies": { + "@turf/boolean-clockwise": "^5.1.5", + "@turf/clone": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, "node_modules/@types/aria-query": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.0.tgz", @@ -19312,11 +19321,6 @@ "resolved": "https://registry.npmjs.org/@types/fetch-mock/-/fetch-mock-7.3.5.tgz", "integrity": "sha512-sLecm9ohBdGIpYUP9rWk5/XIKY2xHMYTBJIcJuBBM8IJWnYoQ1DAj8F4OVjnfD0API1drlkWEV0LPNk+ACuhsg==" }, - "node_modules/@types/flatbuffers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@types/flatbuffers/-/flatbuffers-1.10.0.tgz", - "integrity": "sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA==" - }, "node_modules/@types/geojson": { "version": "7946.0.8", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", @@ -19340,6 +19344,11 @@ "@types/node": "*" } }, + "node_modules/@types/hammerjs": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", + "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==" + }, "node_modules/@types/hast": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", @@ -19458,6 +19467,15 @@ "@types/lodash": "*" } }, + "node_modules/@types/mapbox__geojson-extent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/mapbox__geojson-extent/-/mapbox__geojson-extent-1.0.0.tgz", + "integrity": "sha512-RJBeVDv7LDmW4gO3VD8pr/OYuToQtF77H/VRDG733fmA6chzztBTz6yi9/llRD8SpM7fznxhP6B43Izaj4ufoA==", + "dev": true, + "dependencies": { + "@types/geojson": "*" + } + }, "node_modules/@types/mapbox-gl": { "version": "2.7.6", "resolved": "https://registry.npmjs.org/@types/mapbox-gl/-/mapbox-gl-2.7.6.tgz", @@ -19538,6 +19556,11 @@ "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.4.tgz", "integrity": "sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==" }, + "node_modules/@types/offscreencanvas": { + "version": "2019.7.0", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", + "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==" + }, "node_modules/@types/overlayscrollbars": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.1.tgz", @@ -19859,11 +19882,6 @@ "@types/jest": "*" } }, - "node_modules/@types/text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-AQ6zewa0ucLJvtUi5HsErbOFKAcQfRLt9zFLlUOvcXBy2G36a+ZDpCHSGdzJVUD8aNURtIjh9aSjCStNMRCcRQ==" - }, "node_modules/@types/tinycolor2": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.3.tgz", @@ -22586,36 +22604,6 @@ "normalize-path": "^2.1.1" } }, - "node_modules/apache-arrow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-4.0.1.tgz", - "integrity": "sha512-DyF7GXCbSjsw4P5C8b+qW7OnJKa6w9mJI0mhV0+EfZbVZCmhfiF6ffqcnrI/kzBrRqn9hH/Ft9n5+m4DTbBJpg==", - "dependencies": { - "@types/flatbuffers": "^1.10.0", - "@types/node": "^14.14.37", - "@types/text-encoding-utf-8": "^1.0.1", - "command-line-args": "5.1.1", - "command-line-usage": "6.1.1", - "flatbuffers": "1.12.0", - "json-bignum": "^0.0.3", - "pad-left": "^2.1.0", - "text-encoding-utf-8": "^1.0.2", - "tslib": "^2.2.0" - }, - "bin": { - "arrow2csv": "bin/arrow2csv.js" - } - }, - "node_modules/apache-arrow/node_modules/@types/node": { - "version": "14.17.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.9.tgz", - "integrity": "sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==" - }, - "node_modules/apache-arrow/node_modules/tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" - }, "node_modules/aphrodite": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/aphrodite/-/aphrodite-1.2.5.tgz", @@ -22755,14 +22743,6 @@ "node": ">=0.10.0" } }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "engines": { - "node": ">=6" - } - }, "node_modules/array-differ": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", @@ -24521,6 +24501,14 @@ "node-int64": "^0.4.0" } }, + "node_modules/buf-compare": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buf-compare/-/buf-compare-1.0.1.tgz", + "integrity": "sha512-Bvx4xH00qweepGc43xFvMs5BKASXTbHaHm6+kDYIK9p/4iFwjATQkmPKHQSgJZzKbAymhztRbXUf1Nqhzl73/Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -25886,85 +25874,6 @@ "trim": "0.0.1" } }, - "node_modules/command-line-args": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.1.tgz", - "integrity": "sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==", - "dependencies": { - "array-back": "^3.0.1", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", - "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", - "dependencies": { - "array-back": "^4.0.1", - "chalk": "^2.4.2", - "table-layout": "^1.0.1", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "engines": { - "node": ">=8" - } - }, "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -26627,6 +26536,18 @@ "randombytes": "^2.1.0" } }, + "node_modules/core-assert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/core-assert/-/core-assert-0.2.1.tgz", + "integrity": "sha512-IG97qShIP+nrJCXMCgkNZgH7jZQ4n8RpPyPeXX++T6avR/KhLhgLiHKoEn5Rc1KjfycSfA9DMa6m+4C4eguHhw==", + "dependencies": { + "buf-compare": "^1.0.0", + "is-error": "^2.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/core-js": { "version": "3.31.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.1.tgz", @@ -28827,24 +28748,6 @@ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, - "node_modules/deck.gl": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/deck.gl/-/deck.gl-8.5.2.tgz", - "integrity": "sha512-tsEyv62Zzc+GT3By0Y1R2gqEJ8K3tGBDaLprAoeAsg7fvIa5ikFBdWEBFHa1UDbgE2UEmYbcBK/yK4GAL8Ia4A==", - "dependencies": { - "@deck.gl/aggregation-layers": "8.5.2", - "@deck.gl/carto": "8.5.2", - "@deck.gl/core": "8.5.2", - "@deck.gl/extensions": "8.5.2", - "@deck.gl/geo-layers": "8.5.2", - "@deck.gl/google-maps": "8.5.2", - "@deck.gl/json": "8.5.2", - "@deck.gl/layers": "8.5.2", - "@deck.gl/mapbox": "8.5.2", - "@deck.gl/mesh-layers": "8.5.2", - "@deck.gl/react": "8.5.2" - } - }, "node_modules/decode-named-character-reference": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", @@ -28902,6 +28805,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "devOptional": true, "engines": { "node": ">=4.0.0" } @@ -28916,6 +28820,17 @@ "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.0.tgz", "integrity": "sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==" }, + "node_modules/deep-strict-equal": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deep-strict-equal/-/deep-strict-equal-0.2.0.tgz", + "integrity": "sha512-3daSWyvZ/zwJvuMGlzG1O+Ow0YSadGfb3jsh9xoCutv2tWyB9dA4YvR9L9/fSdDZa2dByYQe+TqapSGUrjnkoA==", + "dependencies": { + "core-assert": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/deepmerge": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", @@ -29659,9 +29574,9 @@ "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" }, "node_modules/draco3d": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.4.1.tgz", - "integrity": "sha512-9Rxonc70xiovBC+Bq1h57SNZIHzWTibU1VfIGp5z3Xx8dPtv4yT5uGhiH7P5uvJRR2jkrvHafRxR7bTANkvfpg==" + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.5.tgz", + "integrity": "sha512-JVuNV0EJzD3LBYhGyIXJLeBID/EVtmFO1ZNhAYflTgiMiAJlbhXQmRRda/azjc8MRVMHh0gqGhiqHUo5dIXM8Q==" }, "node_modules/duplexer": { "version": "0.1.2", @@ -32208,6 +32123,27 @@ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, + "node_modules/fast-xml-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", + "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", + "funding": [ + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + }, + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", @@ -32569,17 +32505,6 @@ "node": ">=6" } }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -32927,11 +32852,6 @@ "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/flatbuffers": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", - "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==" - }, "node_modules/flatted": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", @@ -34216,9 +34136,9 @@ } }, "node_modules/gl-matrix": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.3.0.tgz", - "integrity": "sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA==" + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" }, "node_modules/glob": { "version": "7.2.3", @@ -36340,6 +36260,11 @@ "is-window": "^1.0.2" } }, + "node_modules/is-error": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", + "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==" + }, "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -40167,14 +40092,6 @@ "bignumber.js": "^9.0.0" } }, - "node_modules/json-bignum": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", - "integrity": "sha1-QRY7UENsdz2CQk28IO1w23YEuNc=", - "engines": { - "node": ">=0.8" - } - }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -40403,6 +40320,11 @@ "node": ">= 8" } }, + "node_modules/ktx-parse": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/ktx-parse/-/ktx-parse-0.0.4.tgz", + "integrity": "sha512-LY3nrmfXl+wZZdPxgJ3ZmLvG+wkOZZP3/dr4RbQj1Pk3Qwz44esOOSFFVQJcNWpXAtiNIC66WgXufX/SYgYz6A==" + }, "node_modules/language-subtag-registry": { "version": "0.3.21", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", @@ -40467,6 +40389,11 @@ "deprecated": "use String.prototype.padStart()", "dev": true }, + "node_modules/lerc": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lerc/-/lerc-4.0.1.tgz", + "integrity": "sha512-b351eOjY3DKm1H2hDVhXswsd2RCK6bgREBK6Z639ctClOuYXTi9a44l8yO3zm1pYM2o4WrriloTAKgyrb/0EyA==" + }, "node_modules/lerna": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/lerna/-/lerna-6.6.2.tgz", @@ -43907,11 +43834,6 @@ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", "dev": true }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, "node_modules/lodash.curry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", @@ -44618,11 +44540,6 @@ "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.5.tgz", "integrity": "sha512-OhXt2lS//WpLdkqrzo/KwB7SRD8AiNTFFzuo9n14IBupzIMa67yGItcK7I2W9D8Ghpa4T04Sw9FWsKCJG50Bxw==" }, - "node_modules/mapbox-gl/node_modules/gl-matrix": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", - "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" - }, "node_modules/mapbox-gl/node_modules/supercluster": { "version": "7.1.5", "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", @@ -44680,11 +44597,21 @@ "integrity": "sha512-9FbRY3i6U+CbHgrdNbAUaisjWTozkm1ZfupYQJiZ87NtYHk2Zh9DvxMgp/fifxVhqTLpd5fCCLossUbpZxGeKw==" }, "node_modules/math.gl": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/math.gl/-/math.gl-3.5.3.tgz", - "integrity": "sha512-cRQRZlc+XvNHd3bIfu3kdPPPAW0vwDelZJmkjn2TDvCyPcmyDtAiZ2Poo1aFoINP7HzN6oHYxapc/0wV3q6Opg==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/math.gl/-/math.gl-3.6.3.tgz", + "integrity": "sha512-Yq9CyECvSDox9+5ETi2+x1bGTY5WvGUGL3rJfC4KPoCZAM51MGfrCm6rIn4yOJUVfMPs2a5RwMD+yGS/n1g3gg==", "dependencies": { - "@math.gl/core": "3.5.3" + "@math.gl/core": "3.6.3" + } + }, + "node_modules/math.gl/node_modules/@math.gl/core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.3.tgz", + "integrity": "sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@math.gl/types": "3.6.3", + "gl-matrix": "^3.4.0" } }, "node_modules/mathfn": { @@ -46306,11 +46233,11 @@ } }, "node_modules/mjolnir.js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-2.5.0.tgz", - "integrity": "sha512-YkVoyKs7qm9xvAgRgjx3Md/7eYqmq7VXOgTKQNnmuzcBJzMebjdIWa7FdTd0RZBrw3UL6V6TTktsxJwBMLXUNA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-2.7.1.tgz", + "integrity": "sha512-72BeUWgTv2cj5aZQKpwL8caNUFhXZ9bDm1hxpNj70XJQ62IBnTZmtv/WPxJvtaVNhzNo+D2U8O6ryNI0zImYcw==", "dependencies": { - "@babel/runtime": "^7.0.0", + "@types/hammerjs": "^2.0.41", "hammerjs": "^2.0.8" }, "engines": { @@ -49222,17 +49149,6 @@ "resolved": "https://registry.npmjs.org/pad-component/-/pad-component-0.0.1.tgz", "integrity": "sha1-rR8izhvw/cDW3dkIrxfzUaQEuKw=" }, - "node_modules/pad-left": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz", - "integrity": "sha1-FuajstRKjhOMsIOMx8tAOk/J6ZQ=", - "dependencies": { - "repeat-string": "^1.5.4" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -50147,15 +50063,6 @@ "node": ">=6" } }, - "node_modules/probe.gl": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.4.0.tgz", - "integrity": "sha512-9CLByZATuhuG/Viq3ckfWU+dAhb7dMmjzsyCy4s7ds9ueTejcVRENxL197/XacOK/AN61YrEERB0QnouB0Qc0Q==", - "dependencies": { - "@babel/runtime": "^7.0.0", - "@probe.gl/stats": "3.4.0" - } - }, "node_modules/proc-log": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", @@ -50720,6 +50627,17 @@ "node": ">=0.6" } }, + "node_modules/quadbin": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/quadbin/-/quadbin-0.1.9.tgz", + "integrity": "sha512-5V6m6+cL/6+uBl3hYL+CWF06rRvlHkIepYKGQjTLYaHhu9InPppql0+0ROiCaOQdz8gPNlgge3glk5Qg1mWOYw==", + "dependencies": { + "@mapbox/tile-cover": "3.0.1" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/query-string": { "version": "6.14.1", "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", @@ -52761,14 +52679,6 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=" }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "engines": { - "node": ">=6" - } - }, "node_modules/reduce-function-call": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", @@ -56118,6 +56028,11 @@ "node": ">=0.10.0" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "node_modules/strong-log-transformer": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", @@ -56464,36 +56379,6 @@ "node": ">=10.0.0" } }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "engines": { - "node": ">=8" - } - }, "node_modules/table/node_modules/ajv": { "version": "8.8.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.8.0.tgz", @@ -57077,11 +56962,6 @@ "node": ">=8" } }, - "node_modules/text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" - }, "node_modules/text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", @@ -57108,6 +56988,29 @@ "url": "https://bevry.me/fund" } }, + "node_modules/texture-compressor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/texture-compressor/-/texture-compressor-1.0.2.tgz", + "integrity": "sha512-dStVgoaQ11mA5htJ+RzZ51ZxIZqNOgWKAIvtjLrW1AliQQLCmrDqNzQZ8Jh91YealQ95DXt4MEduLzJmbs6lig==", + "dependencies": { + "argparse": "^1.0.10", + "image-size": "^0.7.4" + }, + "bin": { + "texture-compressor": "bin/texture-compressor.js" + } + }, + "node_modules/texture-compressor/node_modules/image-size": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", + "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==", + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/thread-loader": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", @@ -57199,6 +57102,12 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "devOptional": true }, + "node_modules/tilebelt": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tilebelt/-/tilebelt-1.0.1.tgz", + "integrity": "sha512-cxHzpa5JgsugY9NUVRH43gPaGJw/29LecAn4X7UGOP64+kB8pU4VQ3bIhSyfb5Mk4jDxwl3yk330L/EIhbJ5aw==", + "deprecated": "This module is now under the @mapbox namespace: install @mapbox/tilebelt instead" + }, "node_modules/timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", @@ -57889,14 +57798,6 @@ "node": ">=4.2.0" } }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "engines": { - "node": ">=8" - } - }, "node_modules/ua-parser-js": { "version": "0.7.33", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", @@ -60395,26 +60296,6 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "engines": { - "node": ">=8" - } - }, "node_modules/worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", @@ -63294,8 +63175,7 @@ "d3-array": "^1.2.4", "d3-color": "^1.4.1", "d3-scale": "^3.0.0", - "deck.gl": "8.5.2", - "jquery": "^3.4.1", + "deck.gl": "8.8.27", "lodash": "^4.17.15", "moment": "^2.20.1", "mousetrap": "^1.6.1", @@ -63306,6 +63186,7 @@ "xss": "^1.0.10" }, "devDependencies": { + "@types/mapbox__geojson-extent": "^1.0.0", "@types/underscore": "^1.11.6", "@types/urijs": "^1.19.19" }, @@ -63318,6 +63199,272 @@ "react-map-gl": "^6.1.19" } }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/aggregation-layers": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/aggregation-layers/-/aggregation-layers-8.9.22.tgz", + "integrity": "sha512-cw2duTxcZI0i0+295ivo/tsLffB6GPhuwkCYhqrVfO61JsK9GFuISGB7C5tMcfSOSxzgN6JwNA4fJEK1bCGozQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "^8.5.20", + "@luma.gl/shadertools": "^8.5.20", + "@math.gl/web-mercator": "^3.6.2", + "d3-hexbin": "^0.2.1" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0", + "@deck.gl/layers": "^8.0.0", + "@luma.gl/core": "^8.0.0" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/carto": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/carto/-/carto-8.9.22.tgz", + "integrity": "sha512-sfSmzUtXrhvMX5JaFiIpQtmfqVHRxcVIxnSZz6F5Q7DtvBhjNMEt3jq3qJ3IWH0EyxX0Xu+HMjmw6ScnsVAcXQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@loaders.gl/gis": "^3.4.2", + "@loaders.gl/loader-utils": "^3.4.2", + "@loaders.gl/mvt": "^3.4.2", + "@loaders.gl/tiles": "^3.4.2", + "@luma.gl/constants": "^8.5.20", + "@math.gl/web-mercator": "^3.6.2", + "cartocolor": "^4.0.2", + "d3-array": "^3.2.0", + "d3-color": "^3.1.0", + "d3-format": "^3.1.0", + "d3-scale": "^4.0.0", + "h3-js": "^3.7.0", + "moment-timezone": "^0.5.33", + "pbf": "^3.2.1", + "quadbin": "^0.1.9" + }, + "peerDependencies": { + "@deck.gl/aggregation-layers": "^8.0.0", + "@deck.gl/core": "^8.0.0", + "@deck.gl/extensions": "^8.0.0", + "@deck.gl/geo-layers": "^8.0.0", + "@deck.gl/layers": "^8.0.0", + "@loaders.gl/core": "^3.4.2" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/carto/node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "dependencies": { + "internmap": "1 - 2" + }, + "engines": { + "node": ">=12" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/carto/node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "engines": { + "node": ">=12" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/carto/node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/carto/node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/core": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-8.9.22.tgz", + "integrity": "sha512-HnUPB6qKgRfKQ3Dstw6vlI7+fyO9Ni4gukh8ysQM94mw89BRLkVcuQV0XvlzbbojrG1Z6QpC7KZmodW0y5o2og==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@loaders.gl/core": "^3.4.2", + "@loaders.gl/images": "^3.4.2", + "@luma.gl/constants": "^8.5.20", + "@luma.gl/core": "^8.5.20", + "@luma.gl/webgl": "^8.5.20", + "@math.gl/core": "^3.6.2", + "@math.gl/sun": "^3.6.2", + "@math.gl/web-mercator": "^3.6.2", + "@probe.gl/env": "^3.5.0", + "@probe.gl/log": "^3.5.0", + "@probe.gl/stats": "^3.5.0", + "gl-matrix": "^3.0.0", + "math.gl": "^3.6.2", + "mjolnir.js": "^2.7.0" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/extensions": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/extensions/-/extensions-8.9.22.tgz", + "integrity": "sha512-MYyWjnf94Ibs3BNfTIq/oJJLrNMWUpS2+qkmkQie03EGeO7/wJ9BAQAXWYdFdrbvCykw60mLBX78a68+XLvbmQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@luma.gl/shadertools": "^8.5.20" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0", + "@luma.gl/constants": "^8.0.0", + "@luma.gl/core": "^8.0.0", + "@math.gl/core": "^3.6.2", + "@math.gl/web-mercator": "^3.6.2", + "gl-matrix": "^3.0.0" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/geo-layers": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/geo-layers/-/geo-layers-8.9.22.tgz", + "integrity": "sha512-/P6kGxlWhfRPAaG0UDklANTQpQGevAE1zGTOyFVYEAMyRBws/CetLCq5rKfYibTjWBa5FO2U0u837HzG0PJRUw==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@loaders.gl/3d-tiles": "^3.4.2", + "@loaders.gl/gis": "^3.4.2", + "@loaders.gl/loader-utils": "^3.4.2", + "@loaders.gl/mvt": "^3.4.2", + "@loaders.gl/schema": "^3.4.2", + "@loaders.gl/terrain": "^3.4.2", + "@loaders.gl/tiles": "^3.4.2", + "@loaders.gl/wms": "^3.4.2", + "@luma.gl/constants": "^8.5.20", + "@luma.gl/experimental": "^8.5.20", + "@math.gl/core": "^3.6.2", + "@math.gl/culling": "^3.6.2", + "@math.gl/web-mercator": "^3.6.2", + "@types/geojson": "^7946.0.8", + "h3-js": "^3.7.0", + "long": "^3.2.0" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0", + "@deck.gl/extensions": "^8.0.0", + "@deck.gl/layers": "^8.0.0", + "@deck.gl/mesh-layers": "^8.0.0", + "@loaders.gl/core": "^3.4.2", + "@luma.gl/core": "^8.0.0" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/google-maps": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/google-maps/-/google-maps-8.9.22.tgz", + "integrity": "sha512-x+9yqxkjLN0P5uKxYB6GEaM0KV2djBotvHX0BaHL9LbyWzdAvGJP1kmTg4SOpi0I7XG8jdkoca/tAZ2yy7A9RQ==", + "dependencies": { + "@babel/runtime": "^7.0.0" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0", + "@luma.gl/constants": "^8.5.0", + "@luma.gl/core": "^8.5.0", + "@math.gl/core": "^3.6.0" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/json": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/json/-/json-8.9.22.tgz", + "integrity": "sha512-rYFZqp7mW8XvExtLAfGiAxTV7oLPaLmPVDPTYmMU2owSkfGYE3q6YvwqzHq37k5/5jLfJMA0cZy1fQrfJW3+gg==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "d3-dsv": "^1.0.8", + "expression-eval": "^2.0.0" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/layers": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-8.9.22.tgz", + "integrity": "sha512-1IipECeORaT2fdU9k8KPnZ3DjUeH02h6oZYl4ffihNAIoVXKNivghgJ8ZeELLiEOkrxlbK+KjoH1zej7yuMwmg==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@loaders.gl/images": "^3.4.2", + "@loaders.gl/schema": "^3.4.2", + "@luma.gl/constants": "^8.5.20", + "@mapbox/tiny-sdf": "^2.0.5", + "@math.gl/core": "^3.6.2", + "@math.gl/polygon": "^3.6.2", + "@math.gl/web-mercator": "^3.6.2", + "earcut": "^2.2.4" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0", + "@loaders.gl/core": "^3.4.2", + "@luma.gl/core": "^8.0.0" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/mapbox": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/mapbox/-/mapbox-8.9.22.tgz", + "integrity": "sha512-VanA1V/BE6vmHn/W9f8ug4ilMDEfP3JUQWegVaCiG2EA8yjML6QVmO31gNARTefBjgMsfkWDBwm325coIUkxBQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@types/mapbox-gl": "^2.6.3" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/mesh-layers": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/mesh-layers/-/mesh-layers-8.9.22.tgz", + "integrity": "sha512-XJ6WdHphBtdumQYseFQCfGQ8KLRzgOGu89qsiEcuRTQwgW5GxXi4WJSpZmXZGtXObubwuEX6YqrN4BkX3F/nWg==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@loaders.gl/gltf": "^3.4.2", + "@luma.gl/constants": "^8.5.20", + "@luma.gl/experimental": "^8.5.20", + "@luma.gl/shadertools": "^8.5.20" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0", + "@luma.gl/core": "^8.0.0" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@deck.gl/react": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/react/-/react-8.9.22.tgz", + "integrity": "sha512-NZcWBlOWYPs+DQqYSZQFLxfguFe0GP2AE1ojlrstnckV1N3bsMf1dT6AI5AvX5h9DbiBc216ZrV9iwVhlfkLng==", + "dependencies": { + "@babel/runtime": "^7.0.0" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0", + "@types/react": ">= 16.3", + "react": ">=16.3", + "react-dom": ">=16.3" + } + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@mapbox/tiny-sdf": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" + }, + "plugins/legacy-preset-chart-deckgl/node_modules/@math.gl/core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.3.tgz", + "integrity": "sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@math.gl/types": "3.6.3", + "gl-matrix": "^3.4.0" + } + }, "plugins/legacy-preset-chart-deckgl/node_modules/d3-color": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", @@ -63359,6 +63506,25 @@ "internmap": "^1.0.0" } }, + "plugins/legacy-preset-chart-deckgl/node_modules/deck.gl": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/deck.gl/-/deck.gl-8.9.22.tgz", + "integrity": "sha512-CkJ/Wtyquh4wpG7Os6n5j4D9fm0NFROa6Go0hEToVU8kbfQoj6drD76ixBnsx47dOtcHNQ11AVaPaaAeHmnTjg==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@deck.gl/aggregation-layers": "8.9.22", + "@deck.gl/carto": "8.9.22", + "@deck.gl/core": "8.9.22", + "@deck.gl/extensions": "8.9.22", + "@deck.gl/geo-layers": "8.9.22", + "@deck.gl/google-maps": "8.9.22", + "@deck.gl/json": "8.9.22", + "@deck.gl/layers": "8.9.22", + "@deck.gl/mapbox": "8.9.22", + "@deck.gl/mesh-layers": "8.9.22", + "@deck.gl/react": "8.9.22" + } + }, "plugins/legacy-preset-chart-nvd3": { "name": "@superset-ui/legacy-preset-chart-nvd3", "version": "0.18.25", @@ -67070,151 +67236,6 @@ } } }, - "@deck.gl/aggregation-layers": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/aggregation-layers/-/aggregation-layers-8.5.2.tgz", - "integrity": "sha512-oiqXPmyn2v0lX9tWCvgmWs29stHSLS3tje71Ff2FVXDNmvP5FoZItFa8y7O7KSTkej2/rSwZeSte/a9pri6Njg==", - "requires": { - "@luma.gl/shadertools": "^8.5.4", - "@math.gl/web-mercator": "^3.5.3", - "d3-hexbin": "^0.2.1" - } - }, - "@deck.gl/carto": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/carto/-/carto-8.5.2.tgz", - "integrity": "sha512-Kw/3NUM+2NcHjxH6b7IOUYXEwmJ4SNQujFzAVFW5amG4Lut8074NGSF5XHi+4M/zgk7vXDFsGRxLqspsA/dg8w==", - "requires": { - "@loaders.gl/loader-utils": "^3.0.6", - "@loaders.gl/mvt": "^3.0.6", - "@loaders.gl/tiles": "^3.0.6", - "@math.gl/web-mercator": "^3.5.3", - "cartocolor": "^4.0.2", - "d3-scale": "^3.2.3" - }, - "dependencies": { - "d3-array": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", - "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", - "requires": { - "internmap": "^1.0.0" - } - }, - "d3-scale": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.3.0.tgz", - "integrity": "sha512-1JGp44NQCt5d1g+Yy+GeOnZP7xHo0ii8zsQp6PGzd+C1/dl0KGsp9A7Mxwp+1D1o4unbTTxVdU/ZOIEBoeZPbQ==", - "requires": { - "d3-array": "^2.3.0", - "d3-format": "1 - 2", - "d3-interpolate": "1.2.0 - 2", - "d3-time": "^2.1.1", - "d3-time-format": "2 - 3" - } - }, - "d3-time": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.1.1.tgz", - "integrity": "sha512-/eIQe/eR4kCQwq7yxi7z4c6qEXf2IYGcjoWB5OOQy4Tq9Uv39/947qlDcN2TLkiTzQWzvnsuYPB9TrWaNfipKQ==", - "requires": { - "d3-array": "2" - } - } - } - }, - "@deck.gl/core": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-8.5.2.tgz", - "integrity": "sha512-SAFv7fKx6k1Rj8R4qTMQO2wEhEfixROzbcoSS6RivxrfES00KYYj6jJ7iNEnq3dFn6qc37LPpxqtYYHO4BcvYA==", - "requires": { - "@loaders.gl/core": "^3.0.6", - "@loaders.gl/images": "^3.0.6", - "@luma.gl/core": "^8.5.4", - "@math.gl/web-mercator": "^3.5.3", - "gl-matrix": "^3.0.0", - "math.gl": "^3.5.3", - "mjolnir.js": "^2.5.0", - "probe.gl": "^3.4.0" - } - }, - "@deck.gl/extensions": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/extensions/-/extensions-8.5.2.tgz", - "integrity": "sha512-VhbQsMNPM7RCR/ERwb1u1x0rEWAxgXfcCWttW+gYvbiagW/LrAJ22jhOghlRW/wilEmupHYbXQlWkW2V/mYfsg==", - "requires": { - "@luma.gl/shadertools": "^8.5.4" - } - }, - "@deck.gl/geo-layers": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/geo-layers/-/geo-layers-8.5.2.tgz", - "integrity": "sha512-t6+TgAdbKWDw8g9UX1y6D+5twcdJuKaXw4qSib/0yVurWi/Mil5Plihybt1l9uBZuwkr+UcpxPR73zzo+qd9MA==", - "requires": { - "@loaders.gl/3d-tiles": "^3.0.6", - "@loaders.gl/gis": "^3.0.6", - "@loaders.gl/loader-utils": "^3.0.6", - "@loaders.gl/mvt": "^3.0.6", - "@loaders.gl/terrain": "^3.0.6", - "@loaders.gl/tiles": "^3.0.6", - "@luma.gl/experimental": "^8.5.4", - "@math.gl/culling": "^3.5.3", - "@math.gl/web-mercator": "^3.5.3", - "h3-js": "^3.6.0", - "long": "^3.2.0", - "math.gl": "^3.5.3" - } - }, - "@deck.gl/google-maps": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/google-maps/-/google-maps-8.5.2.tgz", - "integrity": "sha512-Dk3ozenBWgt9nFSYOT4N82urNW/JhiMszfFq6zLt3jUp0N7EJ9d2XO81hclM59BhjIdGWb6drTe96NvtbabVLQ==", - "requires": {} - }, - "@deck.gl/json": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/json/-/json-8.5.2.tgz", - "integrity": "sha512-lVS16bvPfLUSidgBURZvGbWEjgK8GjLWlp1iGuLvua2W6TnWIyiKa6a3XoebgeXd8kqwSbQxhNnuSVPX+Di6Rg==", - "requires": { - "d3-dsv": "^1.0.8", - "expression-eval": "^2.0.0" - } - }, - "@deck.gl/layers": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-8.5.2.tgz", - "integrity": "sha512-HmpE3qf9CI7sU/xa2DMCNg31pzpzK5XuUHyC70dsLq8AV7Sm3vZQz17KMU/CWSZpVr7yQ8uxTeSQARiv/zeOFQ==", - "requires": { - "@loaders.gl/images": "^3.0.6", - "@mapbox/tiny-sdf": "^1.1.0", - "@math.gl/polygon": "^3.5.3", - "earcut": "^2.0.6" - } - }, - "@deck.gl/mapbox": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/mapbox/-/mapbox-8.5.2.tgz", - "integrity": "sha512-nMpzfdPFBVthT+EMgIcKo4YO6bZCqADQtqnxIFtfofZIiKS6R5OSuJ3sXPSNZ9ReCJGzdmndEz7/Qtm9Sia/bA==", - "requires": {} - }, - "@deck.gl/mesh-layers": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/mesh-layers/-/mesh-layers-8.5.2.tgz", - "integrity": "sha512-dUfQyGjm5CYQg9AQdRsGtEEXGSGHxifPlws0zWWoj1r757wjqM0aZ663TUJEsJQDTLNOvbBLGTiuFeCBUoKO4Q==", - "requires": { - "@loaders.gl/gltf": "^3.0.6", - "@luma.gl/experimental": "^8.5.4", - "@luma.gl/shadertools": "^8.5.4" - } - }, - "@deck.gl/react": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/@deck.gl/react/-/react-8.5.2.tgz", - "integrity": "sha512-h7AJ9nPY1PTjrAVP7T1fvWDChWZrVOsEfYIoEP4W6ILSjvDqEQfVL0+9RhjUwQV2nKrg0QmpqCmbfOrgKQQbYw==", - "requires": { - "prop-types": "^15.6.0" - } - }, "@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -71033,218 +71054,309 @@ } }, "@loaders.gl/3d-tiles": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/3d-tiles/-/3d-tiles-3.0.8.tgz", - "integrity": "sha512-jZeOyDPGD2wEkTLW4Do9A4UUQ+OGjhhNXztB0AsttZ69OpkmsxJXb76xxwevf+eThrsTgSTjZ06eC5DHX0kyXA==", - "requires": { - "@loaders.gl/core": "3.0.8", - "@loaders.gl/draco": "3.0.8", - "@loaders.gl/gltf": "3.0.8", - "@loaders.gl/loader-utils": "3.0.8", - "@loaders.gl/math": "3.0.8", - "@loaders.gl/tiles": "3.0.8", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/3d-tiles/-/3d-tiles-3.4.8.tgz", + "integrity": "sha512-v4Ejtp4Pb5RhFQyI37oDy9IZtBKEUZ+2xWNtyDgeV8Vni5ht532hsPVGY8CkUMMZFAyzl3zcDFUQo0cIbiqKKg==", + "requires": { + "@loaders.gl/draco": "3.4.8", + "@loaders.gl/gltf": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/math": "3.4.8", + "@loaders.gl/tiles": "3.4.8", "@math.gl/core": "^3.5.1", - "@math.gl/geospatial": "^3.5.1" + "@math.gl/geospatial": "^3.5.1", + "long": "^5.2.1" + }, + "dependencies": { + "long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + } } }, "@loaders.gl/core": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.0.8.tgz", - "integrity": "sha512-FIfbhMkoRX2JonEHXHgClC7jwOSsEwvvmjlaTMRAY+gFKvJPGmegkp4VgUZquLFf6GedJt/1TuMMvAX6gdq1pg==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.4.8.tgz", + "integrity": "sha512-pAaAISNmxiUQn8iz0yDhX5DCt3geaaJtSTxAHgz25G2Z5kWqYS00g5bc7XIGNT2BwqD5pgVLRch+BdTQ/Q8lJA==", "requires": { "@babel/runtime": "^7.3.1", - "@loaders.gl/loader-utils": "3.0.8", - "@loaders.gl/worker-utils": "3.0.8", - "probe.gl": "^3.4.0" + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/worker-utils": "3.4.8", + "@probe.gl/log": "^4.0.1" + }, + "dependencies": { + "@probe.gl/env": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-4.0.4.tgz", + "integrity": "sha512-sYNGqesDfWD6dFP5oNZtTeFA4Z6ak5T4a8BNPdNhoqy7PK9w70JHrb6mv+RKWqKXq33KiwCDWL7fYxx2HuEH2w==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@probe.gl/log": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-4.0.4.tgz", + "integrity": "sha512-WpmXl6njlBMwrm8HBh/b4kSp/xnY1VVmeT4PWUKF+RkVbFuKQbsU11dA1IxoMd7gSY+5DGIwxGfAv1H5OMzA4A==", + "requires": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "4.0.4" + } + } } }, "@loaders.gl/draco": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/draco/-/draco-3.0.8.tgz", - "integrity": "sha512-ZCXzXNHWQ7H0qk/kC+rWzjMWjLzZGzQcDbdpIuy8xJdp4rTpmMkLUseFPby8vhkmIaqxWPwPB6mx/vM7L6JENg==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/draco/-/draco-3.4.8.tgz", + "integrity": "sha512-x127QX/CCzbSXTk5IL4WBmL6RjvMZhedzMoEiWE4NhAEiwTFKXvWUZLluoFlGzJhxSL6xiR2KBF8tN1EMv4L1Q==", "requires": { "@babel/runtime": "^7.3.1", - "@loaders.gl/loader-utils": "3.0.8", - "@loaders.gl/schema": "3.0.8", - "@loaders.gl/worker-utils": "3.0.8", - "draco3d": "1.4.1" + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", + "@loaders.gl/worker-utils": "3.4.8", + "draco3d": "1.5.5" } }, "@loaders.gl/gis": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/gis/-/gis-3.0.8.tgz", - "integrity": "sha512-7NL+lIb7NezlMupYskVil6M3RZunXJl+TyaVAW82GLbzPSOq+m/G7h3+z0GBa8iv/U/I+cB5BhSN+GZmvFwqEA==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/gis/-/gis-3.4.8.tgz", + "integrity": "sha512-I0Q8n1XhxXfZ6QoHvW6ayUkrOiifARGvSm4xTZxkydFNM5MULp9ICrZkFeqGMAVeevbssR3h9JKR111AmQvrPw==", "requires": { - "@loaders.gl/loader-utils": "3.0.8", - "@loaders.gl/schema": "3.0.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", "@mapbox/vector-tile": "^1.3.1", + "@math.gl/polygon": "^3.5.1", "pbf": "^3.2.1" } }, "@loaders.gl/gltf": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/gltf/-/gltf-3.0.8.tgz", - "integrity": "sha512-4PXWTlqyvlbZE2Vp4iQ+Y87ZO1WuRvSlbImDhygd0hoINfmJ9ObxrFS3yJcpJTu007nWxXorNVEOKyuoo+4Iyw==", - "requires": { - "@loaders.gl/core": "3.0.8", - "@loaders.gl/draco": "3.0.8", - "@loaders.gl/images": "3.0.8", - "@loaders.gl/loader-utils": "3.0.8" + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/gltf/-/gltf-3.4.8.tgz", + "integrity": "sha512-nvDj0LmkOXtQWUr7MkGShQ2WUmZlUnWTs6PatPxueevdL49vR16SB8VAWTx+8XUPq3Wno+gVZJxG8HBRkFVHng==", + "requires": { + "@loaders.gl/draco": "3.4.8", + "@loaders.gl/images": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/textures": "3.4.8", + "@math.gl/core": "^3.5.1" } }, "@loaders.gl/images": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-3.0.8.tgz", - "integrity": "sha512-rO2cIYJYlMs/uO9YSoF4/BEA4p/9xQ3gHZ1sIJkPYVnDqzpbu8nvUjWTQqIdL/MkQBTW8tz3twCdM+B6G9Fa2w==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-3.4.8.tgz", + "integrity": "sha512-cKoQ20aMBgBXYKVVJuDLuH1wTeXZyinbG4otSBf4D+gAhQ09Gd3dVMYF7RWIxXp0CdL4jiqGHnJ470y0AvrT4w==", "requires": { - "@loaders.gl/loader-utils": "3.0.8" + "@loaders.gl/loader-utils": "3.4.8" } }, "@loaders.gl/loader-utils": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-3.0.8.tgz", - "integrity": "sha512-PW1WyyQ+LXkqoGHBZHsmfNQkKiLAYf1gok+kHnHvY9fCzhJeA1iTNEUKPXGXKgS00m/k5cBTkOWAaOG9KRvBCQ==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-3.4.8.tgz", + "integrity": "sha512-/3sZ2J3Y29t50HSo6X6mtLNDYID+s77cmFWxjq+R4/uDekYx2vmgiw/WCFbupKse6NrAKe1KgqEBac1Q7yARSQ==", "requires": { "@babel/runtime": "^7.3.1", - "@loaders.gl/worker-utils": "3.0.8", - "@probe.gl/stats": "^3.4.0" + "@loaders.gl/worker-utils": "3.4.8", + "@probe.gl/stats": "^4.0.1" + }, + "dependencies": { + "@probe.gl/stats": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-4.0.4.tgz", + "integrity": "sha512-SDuSY/D4yDL6LQDa69l/GCcnZLRiGYdyvYkxWb0CgnzTPdPrcdrzGkzkvpC3zsA4fEFw2smlDje370QGHwlisg==", + "requires": { + "@babel/runtime": "^7.0.0" + } + } } }, "@loaders.gl/math": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/math/-/math-3.0.8.tgz", - "integrity": "sha512-jfFpxxr4Bq5JfOPqLVJc4JJGoGGvVTOCWiJhnTtSAKhaNSwldmNWaZ0w8E2nlgPKPMAHiTRKOQnd9sSY5m66Cw==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/math/-/math-3.4.8.tgz", + "integrity": "sha512-+9Hy1k44tj+v8IYKh+Zp0xXOijH94HoT/8ILdt5kG8MdjDU6VYyz2t/D4ZawSM+DBgXLYhDIIKkqrdND5ct2AQ==", "requires": { - "@loaders.gl/images": "3.0.8", - "@loaders.gl/loader-utils": "3.0.8", + "@loaders.gl/images": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", "@math.gl/core": "^3.5.1" } }, "@loaders.gl/mvt": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/mvt/-/mvt-3.0.8.tgz", - "integrity": "sha512-Jk1QTHgpxMsUT01w5IJJ2en9qq0yOZcL2wGXVc7CFp2h6inB22rC3drUwq1mUNGe6iy3EWIo7EeJVd9B+5JyTQ==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/mvt/-/mvt-3.4.8.tgz", + "integrity": "sha512-JvgSsg7+oypRAhGmUKvLSH8h146HRopxf25c9hzyPWX1MeAPfVWgwTou0syy5TwOyRlrLtGp4Rs/6AmNAWBtnw==", "requires": { - "@loaders.gl/gis": "3.0.8", - "@loaders.gl/loader-utils": "3.0.8", + "@loaders.gl/gis": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", "@math.gl/polygon": "^3.5.1", "pbf": "^3.2.1" } }, "@loaders.gl/schema": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-3.0.8.tgz", - "integrity": "sha512-yne5WE7fZZWFl2zF8fzDlYhPVJua6h6mTCSmlQ5pryaMXTZS9mfzXXIFWRL3kswqnQTu/QNFdyFj1mP0haF24w==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-3.4.8.tgz", + "integrity": "sha512-nu+mT8LgeoCF65xs+F9qegJsIWqYOzwkzJLEd7zmHGRMMYqaFDqcp63J3CUQy+UvS4dGTZph38aQuVfncS/fJA==", "requires": { - "@types/geojson": "^7946.0.7", - "apache-arrow": "^4.0.0", - "d3-dsv": "^1.2.0" + "@types/geojson": "^7946.0.7" } }, "@loaders.gl/terrain": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/terrain/-/terrain-3.0.8.tgz", - "integrity": "sha512-MtOAYEB/xJB4CN4B0YNPkO4v1ZY332joxiOHQI1x37x4sWVAqOrKLr9jB42sZCB8aINi2WMWGiErtf9wh9L5Pg==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/terrain/-/terrain-3.4.8.tgz", + "integrity": "sha512-bWLePOb6+4N8DNMXP0D3aqkwyU3phuUjzjQLvfoP9dySUuX4E9kwarCcmkaCYyqp2swp57cHaylSd6tHXOFR6w==", "requires": { "@babel/runtime": "^7.3.1", - "@loaders.gl/loader-utils": "3.0.8", - "@loaders.gl/schema": "3.0.8", + "@loaders.gl/images": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", "@mapbox/martini": "^0.2.0" } }, + "@loaders.gl/textures": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/textures/-/textures-3.4.8.tgz", + "integrity": "sha512-lFlV1/3yQqBANP5FoywuQwh+Br++BU3/6eT/Eb/zDbKOqTuqtHp7yAUz207tAO3mRqTkPvtKi9fv+0QrBGoxtw==", + "requires": { + "@loaders.gl/images": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", + "@loaders.gl/worker-utils": "3.4.8", + "ktx-parse": "^0.0.4", + "texture-compressor": "^1.0.2" + } + }, "@loaders.gl/tiles": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/tiles/-/tiles-3.0.8.tgz", - "integrity": "sha512-Rc+yHFdQg2sYmcYkwvszukFWdm9EW354F9HUR7y/oauos6tsdo4YTj31zgytaYR63/EqWQ7kwI29/eePEcutzg==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/tiles/-/tiles-3.4.8.tgz", + "integrity": "sha512-rA3ULOokiUTH6Y3sr37wGaTx3P0g/hRti9yB6q/8kSBy+fE1gSD801O4VluNx6DbOELR2zWkM8TqLTep6sBN1A==", "requires": { - "@loaders.gl/core": "3.0.8", - "@loaders.gl/loader-utils": "3.0.8", - "@loaders.gl/math": "3.0.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/math": "3.4.8", "@math.gl/core": "^3.5.1", "@math.gl/culling": "^3.5.1", "@math.gl/geospatial": "^3.5.1", "@math.gl/web-mercator": "^3.5.1", - "@probe.gl/stats": "^3.4.0" + "@probe.gl/stats": "^4.0.1" + }, + "dependencies": { + "@probe.gl/stats": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-4.0.4.tgz", + "integrity": "sha512-SDuSY/D4yDL6LQDa69l/GCcnZLRiGYdyvYkxWb0CgnzTPdPrcdrzGkzkvpC3zsA4fEFw2smlDje370QGHwlisg==", + "requires": { + "@babel/runtime": "^7.0.0" + } + } + } + }, + "@loaders.gl/wms": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/wms/-/wms-3.4.8.tgz", + "integrity": "sha512-4ESwVUa6dStmGqHIqdz6XFo/b/uyB6O+A1iy/mhMGTW8JodrzTcPQl5Iq8fA6EEYP0xviXFL652IEn+dR/BsGg==", + "requires": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/images": "3.4.8", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", + "@loaders.gl/xml": "3.4.8", + "@turf/rewind": "^5.1.5", + "deep-strict-equal": "^0.2.0", + "lerc": "^4.0.1" } }, "@loaders.gl/worker-utils": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-3.0.8.tgz", - "integrity": "sha512-Pg72HuXPcL725TrOlOr83xloVUHj6OMWmno1dI8ccuqfOBsgoRjxNZrcSvwBzfK8tFCzuN2X30I+mHl3BkuYLw==", + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-3.4.8.tgz", + "integrity": "sha512-cioo1rKtUkbDPJVQZ5ytEc6r/LdR1eIOCszgRh1VymtYvWGT+prZxfCIAmM1uZBV2SLWYTnH17dR0PR+cNopzA==", "requires": { "@babel/runtime": "^7.3.1" } }, + "@loaders.gl/xml": { + "version": "3.4.8", + "resolved": "https://registry.npmjs.org/@loaders.gl/xml/-/xml-3.4.8.tgz", + "integrity": "sha512-8lrmdsnaobENpEPalEAzP720UY3kA/w6w7vCUKABB60QHnq+D5Rvw1PLPfQCACMFhYF+vR56KcQjtEbuqhs5wA==", + "requires": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/loader-utils": "3.4.8", + "@loaders.gl/schema": "3.4.8", + "fast-xml-parser": "^4.2.5" + } + }, "@luma.gl/constants": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-8.5.4.tgz", - "integrity": "sha512-lrA4ja92om/gDHYOvM9itL5S7FVzjKulyknDz6S+Y7gmgHgXk2ln1Xar5zUCsLnhAYx4glHITXGH5Y5rdWgT1Q==" + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-8.5.20.tgz", + "integrity": "sha512-5yG+ybkUZ4j6kLPWMZjN4Hun2yLB0MyEpNCRKAUN9/yS9UIWA7unyVxjSf2vnE7k/7dywtxlbXegASNFgNVGxw==" }, "@luma.gl/core": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-8.5.4.tgz", - "integrity": "sha512-+saDz1D3mcPd53vgbG60ryg1w5CF9Z2wdakKHzR810VoJLw97t4aNdg/eNgyWOvbOHxaKJBPm8K0sGjej67+jw==", + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-8.5.20.tgz", + "integrity": "sha512-xJr96G6vhYcznYHC84fbeOG3fgNM4lFwj9bd0VPcg/Kfe8otUeN1Hl0AKHCCtNn48PiMSg3LKbaiRfNUMhaffQ==", "requires": { "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.4", - "@luma.gl/engine": "8.5.4", - "@luma.gl/gltools": "8.5.4", - "@luma.gl/shadertools": "8.5.4", - "@luma.gl/webgl": "8.5.4" + "@luma.gl/constants": "8.5.20", + "@luma.gl/engine": "8.5.20", + "@luma.gl/gltools": "8.5.20", + "@luma.gl/shadertools": "8.5.20", + "@luma.gl/webgl": "8.5.20" } }, "@luma.gl/engine": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-8.5.4.tgz", - "integrity": "sha512-Sfv972IzvR9s9kKWugs67XQUh9jC0e/PpBrzvyGVnPU4XvFq42RZVF73pzEklVU6AlpR8Zg5CPtxGdhyOHtT7w==", + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-8.5.20.tgz", + "integrity": "sha512-+0ryJ/4gL1pWaEgZimY21jUPt1LYiO6Cqte8TNUprCfAHoAStsuzD7jwgEqnM6jJOUEdIxQ3w0z3Dzw/0KIE+w==", "requires": { "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.4", - "@luma.gl/gltools": "8.5.4", - "@luma.gl/shadertools": "8.5.4", - "@luma.gl/webgl": "8.5.4", + "@luma.gl/constants": "8.5.20", + "@luma.gl/gltools": "8.5.20", + "@luma.gl/shadertools": "8.5.20", + "@luma.gl/webgl": "8.5.20", "@math.gl/core": "^3.5.0", - "probe.gl": "^3.4.0" + "@probe.gl/env": "^3.5.0", + "@probe.gl/stats": "^3.5.0", + "@types/offscreencanvas": "^2019.7.0" } }, "@luma.gl/experimental": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/experimental/-/experimental-8.5.4.tgz", - "integrity": "sha512-09waqRhgIrw+Sq0/in4tw4jPag5YsFfV1nEHJaLAg5RFv92S53IEubSJgkuG02HoOBkPxQ7KYvs9VNmriisnYg==", + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/experimental/-/experimental-8.5.20.tgz", + "integrity": "sha512-V1Jp68rYMPtwMdf+50r3NSYsGV3srjwZ+lcK2ew4DshjedDbYwLqTGMWcOyBhY3K3aCl2LH3Fhn0hAY+3NTLGA==", "requires": { - "@luma.gl/constants": "8.5.4", + "@luma.gl/constants": "8.5.20", "@math.gl/core": "^3.5.0", "earcut": "^2.0.6" } }, "@luma.gl/gltools": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/gltools/-/gltools-8.5.4.tgz", - "integrity": "sha512-JotiPuymQz2Xc41AYlS2moJC/EHxU+OX/OMKi0+/MeOlEFLsdochgTA0I64j8yofLTXdeiGCneGtD1Ao8fk+bw==", + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/gltools/-/gltools-8.5.20.tgz", + "integrity": "sha512-5pP6ph9FSX5gHiVWQM1DmYRUnriklzKUG9yaqlQsKEqCFsOcKB0EfK3MfBVXIfsOdP/1bJZ9Dlz/zV19soWVhg==", "requires": { "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.4", - "probe.gl": "^3.4.0" + "@luma.gl/constants": "8.5.20", + "@probe.gl/env": "^3.5.0", + "@probe.gl/log": "^3.5.0", + "@types/offscreencanvas": "^2019.7.0" } }, "@luma.gl/shadertools": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-8.5.4.tgz", - "integrity": "sha512-rwLBLrACi75aWnuJm8rVKCQnJR2sMTCxHuexfjHJ7Uecl0vVcVJZT7c9EnCFaz5LUTNbdupvuhq0SKNckKiKmw==", + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-8.5.20.tgz", + "integrity": "sha512-q1lrCZy1ncIFb4mMjsYgISLzNP6eMnhLUY+Oltj/qjAMcPEssCeHN2+XGfP/CVtU+O7sC+5JY2bQGaTs6HQ/Qw==", "requires": { "@babel/runtime": "^7.0.0", "@math.gl/core": "^3.5.0" } }, "@luma.gl/webgl": { - "version": "8.5.4", - "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-8.5.4.tgz", - "integrity": "sha512-dWy4dhTbtvDO9zQBdx1Yb+DxNx/1JWV9rhhJxJUtTKbGZSX0RjkASTT6GBWMl5jrH1JYJefS1wswHmmPVXjK0Q==", + "version": "8.5.20", + "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-8.5.20.tgz", + "integrity": "sha512-p/kt9KztywH4l+09XHoZ4cPFOoE7xlZXIBMT8rxRVgfe1w0lvi7QYh4tOG7gk+iixQ34EyDQacoHCsabdpmqQg==", "requires": { "@babel/runtime": "^7.0.0", - "@luma.gl/constants": "8.5.4", - "@luma.gl/gltools": "8.5.4", - "probe.gl": "^3.4.0" + "@luma.gl/constants": "8.5.20", + "@luma.gl/gltools": "8.5.20", + "@probe.gl/env": "^3.5.0", + "@probe.gl/stats": "^3.5.0" } }, "@mapbox/extent": { @@ -71325,10 +71437,13 @@ "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=" }, - "@mapbox/tiny-sdf": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", - "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==" + "@mapbox/tile-cover": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/tile-cover/-/tile-cover-3.0.1.tgz", + "integrity": "sha512-R8aoFY/87HWBOL9E2eBqzOY2lpfWYXCcTNgBpIxAv67rqQeD4IfnHD0iPXg/Z1cqXrklegEYZCp/7ZR/RsWqBQ==", + "requires": { + "tilebelt": "^1.0.1" + } }, "@mapbox/unitbezier": { "version": "0.0.0", @@ -71358,13 +71473,25 @@ } }, "@math.gl/culling": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/@math.gl/culling/-/culling-3.5.3.tgz", - "integrity": "sha512-ABpAcrvoIOLSm1EUkwgDem4RfO28HWPBs/+taZ/ZSpJG6KiVPklpKU1NCK+05HuJStkpFZ+XlWtehWU6FAMCyA==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/culling/-/culling-3.6.3.tgz", + "integrity": "sha512-3UERXHbaPlM6pnTk2MI7LeQ5CoelDZzDzghTTcv+HdQCZsT/EOEuEdYimETHtSxiyiOmsX2Un65UBLYT/rbKZg==", "requires": { "@babel/runtime": "^7.12.0", - "@math.gl/core": "3.5.3", - "gl-matrix": "^3.0.0" + "@math.gl/core": "3.6.3", + "gl-matrix": "^3.4.0" + }, + "dependencies": { + "@math.gl/core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.3.tgz", + "integrity": "sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==", + "requires": { + "@babel/runtime": "^7.12.0", + "@math.gl/types": "3.6.3", + "gl-matrix": "^3.4.0" + } + } } }, "@math.gl/geospatial": { @@ -71378,20 +71505,45 @@ } }, "@math.gl/polygon": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/@math.gl/polygon/-/polygon-3.5.3.tgz", - "integrity": "sha512-VktscmyQg/Rd56nJk0Nj/UyvnPDbsnZNMWCdl3G5AYenYzLWy6h4FEWhLx8pD+Xw7VuFot8LR4WAK2TPzXzrWw==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/polygon/-/polygon-3.6.3.tgz", + "integrity": "sha512-FivQ1ZnYcAss1wVifOkHP/ZnlfQy1IL/769uzNtiHxwUbW0kZG3yyOZ9I7fwyzR5Hvqt3ErJKHjSYZr0uVlz5g==", "requires": { - "@math.gl/core": "3.5.3" + "@math.gl/core": "3.6.3" + }, + "dependencies": { + "@math.gl/core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.3.tgz", + "integrity": "sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==", + "requires": { + "@babel/runtime": "^7.12.0", + "@math.gl/types": "3.6.3", + "gl-matrix": "^3.4.0" + } + } + } + }, + "@math.gl/sun": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/sun/-/sun-3.6.3.tgz", + "integrity": "sha512-mrx6CGYYeTNSQttvcw0KVUy+35YDmnjMqpO/o0t06Vcghrt0HNruB/ScRgUSbJrgkbOg1Vcqm23HBd++clzQzw==", + "requires": { + "@babel/runtime": "^7.12.0" } }, + "@math.gl/types": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/types/-/types-3.6.3.tgz", + "integrity": "sha512-3uWLVXHY3jQxsXCr/UCNPSc2BG0hNUljhmOBt9l+lNFDp7zHgm0cK2Tw4kj2XfkJy4TgwZTBGwRDQgWEbLbdTA==" + }, "@math.gl/web-mercator": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-3.5.6.tgz", - "integrity": "sha512-siWHLJGp9o8fDEM1t0Rby+JXftl6il0z3927liWGzkHqFftXPHY858ShPy45ThDU8q5lyCftg8aVgrv4nfD+Zw==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-3.6.3.tgz", + "integrity": "sha512-UVrkSOs02YLehKaehrxhAejYMurehIHPfFQvPFZmdJHglHOU4V2cCUApTVEwOksvCp161ypEqVp+9H6mGhTTcw==", "requires": { "@babel/runtime": "^7.12.0", - "gl-matrix": "~3.3.0" + "gl-matrix": "^3.4.0" } }, "@mdx-js/loader": { @@ -72640,10 +72792,27 @@ "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.10.1.tgz", "integrity": "sha512-HnUhk1Sy9IuKrxEMdIRCxpIqPw6BFsbYSEUO9p/hNw5sMld/+3OLMWQP80F8/db9qsv3qUjs7ZR5bS/R+iinXw==" }, + "@probe.gl/env": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.6.0.tgz", + "integrity": "sha512-4tTZYUg/8BICC3Yyb9rOeoKeijKbZHRXBEKObrfPmX4sQmYB15ZOUpoVBhAyJkOYVAM8EkPci6Uw5dLCwx2BEQ==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@probe.gl/log": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-3.6.0.tgz", + "integrity": "sha512-hjpyenpEvOdowgZ1qMeCJxfRD4JkKdlXz0RC14m42Un62NtOT+GpWyKA4LssT0+xyLULCByRAtG2fzZorpIAcA==", + "requires": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.6.0" + } + }, "@probe.gl/stats": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.4.0.tgz", - "integrity": "sha512-Gl37r9qGuiKadIvTZdSZvzCNOttJYw6RcY1oT0oDuB8r2uhuZAdSMQRQTy9FTinp6MY6O9wngGnV6EpQ8wSBAw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.6.0.tgz", + "integrity": "sha512-JdALQXB44OP4kUBN/UrQgzbJe4qokbVF4Y8lkIA8iVCFnjVowWIgkD/z/0QO65yELT54tTrtepw1jScjKB+rhQ==", "requires": { "@babel/runtime": "^7.0.0" } @@ -77815,14 +77984,14 @@ "@mapbox/geojson-extent": "^1.0.1", "@math.gl/web-mercator": "^3.2.2", "@types/d3-array": "^2.0.0", + "@types/mapbox__geojson-extent": "*", "@types/underscore": "^1.11.6", "@types/urijs": "^1.19.19", "bootstrap-slider": "^10.0.0", "d3-array": "^1.2.4", "d3-color": "^1.4.1", "d3-scale": "^3.0.0", - "deck.gl": "8.5.2", - "jquery": "^3.4.1", + "deck.gl": "8.8.27", "lodash": "^4.17.15", "moment": "^2.20.1", "mousetrap": "^1.6.1", @@ -77833,6 +78002,206 @@ "xss": "^1.0.10" }, "dependencies": { + "@deck.gl/aggregation-layers": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/aggregation-layers/-/aggregation-layers-8.9.22.tgz", + "integrity": "sha512-cw2duTxcZI0i0+295ivo/tsLffB6GPhuwkCYhqrVfO61JsK9GFuISGB7C5tMcfSOSxzgN6JwNA4fJEK1bCGozQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "^8.5.20", + "@luma.gl/shadertools": "^8.5.20", + "@math.gl/web-mercator": "^3.6.2", + "d3-hexbin": "^0.2.1" + } + }, + "@deck.gl/carto": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/carto/-/carto-8.9.22.tgz", + "integrity": "sha512-sfSmzUtXrhvMX5JaFiIpQtmfqVHRxcVIxnSZz6F5Q7DtvBhjNMEt3jq3qJ3IWH0EyxX0Xu+HMjmw6ScnsVAcXQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "@loaders.gl/gis": "^3.4.2", + "@loaders.gl/loader-utils": "^3.4.2", + "@loaders.gl/mvt": "^3.4.2", + "@loaders.gl/tiles": "^3.4.2", + "@luma.gl/constants": "^8.5.20", + "@math.gl/web-mercator": "^3.6.2", + "cartocolor": "^4.0.2", + "d3-array": "^3.2.0", + "d3-color": "^3.1.0", + "d3-format": "^3.1.0", + "d3-scale": "^4.0.0", + "h3-js": "^3.7.0", + "moment-timezone": "^0.5.33", + "pbf": "^3.2.1", + "quadbin": "^0.1.9" + }, + "dependencies": { + "d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "requires": { + "internmap": "1 - 2" + } + }, + "d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==" + }, + "d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" + }, + "d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "requires": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + } + } + } + }, + "@deck.gl/core": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-8.9.22.tgz", + "integrity": "sha512-HnUPB6qKgRfKQ3Dstw6vlI7+fyO9Ni4gukh8ysQM94mw89BRLkVcuQV0XvlzbbojrG1Z6QpC7KZmodW0y5o2og==", + "requires": { + "@babel/runtime": "^7.0.0", + "@loaders.gl/core": "^3.4.2", + "@loaders.gl/images": "^3.4.2", + "@luma.gl/constants": "^8.5.20", + "@luma.gl/core": "^8.5.20", + "@luma.gl/webgl": "^8.5.20", + "@math.gl/core": "^3.6.2", + "@math.gl/sun": "^3.6.2", + "@math.gl/web-mercator": "^3.6.2", + "@probe.gl/env": "^3.5.0", + "@probe.gl/log": "^3.5.0", + "@probe.gl/stats": "^3.5.0", + "gl-matrix": "^3.0.0", + "math.gl": "^3.6.2", + "mjolnir.js": "^2.7.0" + } + }, + "@deck.gl/extensions": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/extensions/-/extensions-8.9.22.tgz", + "integrity": "sha512-MYyWjnf94Ibs3BNfTIq/oJJLrNMWUpS2+qkmkQie03EGeO7/wJ9BAQAXWYdFdrbvCykw60mLBX78a68+XLvbmQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "@luma.gl/shadertools": "^8.5.20" + } + }, + "@deck.gl/geo-layers": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/geo-layers/-/geo-layers-8.9.22.tgz", + "integrity": "sha512-/P6kGxlWhfRPAaG0UDklANTQpQGevAE1zGTOyFVYEAMyRBws/CetLCq5rKfYibTjWBa5FO2U0u837HzG0PJRUw==", + "requires": { + "@babel/runtime": "^7.0.0", + "@loaders.gl/3d-tiles": "^3.4.2", + "@loaders.gl/gis": "^3.4.2", + "@loaders.gl/loader-utils": "^3.4.2", + "@loaders.gl/mvt": "^3.4.2", + "@loaders.gl/schema": "^3.4.2", + "@loaders.gl/terrain": "^3.4.2", + "@loaders.gl/tiles": "^3.4.2", + "@loaders.gl/wms": "^3.4.2", + "@luma.gl/constants": "^8.5.20", + "@luma.gl/experimental": "^8.5.20", + "@math.gl/core": "^3.6.2", + "@math.gl/culling": "^3.6.2", + "@math.gl/web-mercator": "^3.6.2", + "@types/geojson": "^7946.0.8", + "h3-js": "^3.7.0", + "long": "^3.2.0" + } + }, + "@deck.gl/google-maps": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/google-maps/-/google-maps-8.9.22.tgz", + "integrity": "sha512-x+9yqxkjLN0P5uKxYB6GEaM0KV2djBotvHX0BaHL9LbyWzdAvGJP1kmTg4SOpi0I7XG8jdkoca/tAZ2yy7A9RQ==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@deck.gl/json": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/json/-/json-8.9.22.tgz", + "integrity": "sha512-rYFZqp7mW8XvExtLAfGiAxTV7oLPaLmPVDPTYmMU2owSkfGYE3q6YvwqzHq37k5/5jLfJMA0cZy1fQrfJW3+gg==", + "requires": { + "@babel/runtime": "^7.0.0", + "d3-dsv": "^1.0.8", + "expression-eval": "^2.0.0" + } + }, + "@deck.gl/layers": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-8.9.22.tgz", + "integrity": "sha512-1IipECeORaT2fdU9k8KPnZ3DjUeH02h6oZYl4ffihNAIoVXKNivghgJ8ZeELLiEOkrxlbK+KjoH1zej7yuMwmg==", + "requires": { + "@babel/runtime": "^7.0.0", + "@loaders.gl/images": "^3.4.2", + "@loaders.gl/schema": "^3.4.2", + "@luma.gl/constants": "^8.5.20", + "@mapbox/tiny-sdf": "^2.0.5", + "@math.gl/core": "^3.6.2", + "@math.gl/polygon": "^3.6.2", + "@math.gl/web-mercator": "^3.6.2", + "earcut": "^2.2.4" + } + }, + "@deck.gl/mapbox": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/mapbox/-/mapbox-8.9.22.tgz", + "integrity": "sha512-VanA1V/BE6vmHn/W9f8ug4ilMDEfP3JUQWegVaCiG2EA8yjML6QVmO31gNARTefBjgMsfkWDBwm325coIUkxBQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "@types/mapbox-gl": "^2.6.3" + } + }, + "@deck.gl/mesh-layers": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/mesh-layers/-/mesh-layers-8.9.22.tgz", + "integrity": "sha512-XJ6WdHphBtdumQYseFQCfGQ8KLRzgOGu89qsiEcuRTQwgW5GxXi4WJSpZmXZGtXObubwuEX6YqrN4BkX3F/nWg==", + "requires": { + "@babel/runtime": "^7.0.0", + "@loaders.gl/gltf": "^3.4.2", + "@luma.gl/constants": "^8.5.20", + "@luma.gl/experimental": "^8.5.20", + "@luma.gl/shadertools": "^8.5.20" + } + }, + "@deck.gl/react": { + "version": "8.9.22", + "resolved": "https://registry.npmjs.org/@deck.gl/react/-/react-8.9.22.tgz", + "integrity": "sha512-NZcWBlOWYPs+DQqYSZQFLxfguFe0GP2AE1ojlrstnckV1N3bsMf1dT6AI5AvX5h9DbiBc216ZrV9iwVhlfkLng==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@mapbox/tiny-sdf": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==" + }, + "@math.gl/core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.3.tgz", + "integrity": "sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==", + "requires": { + "@babel/runtime": "^7.12.0", + "@math.gl/types": "3.6.3", + "gl-matrix": "^3.4.0" + } + }, "d3-color": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz", @@ -77877,6 +78246,24 @@ } } } + }, + "deck.gl": { + "version": "https://registry.npmjs.org/deck.gl/-/deck.gl-8.9.22.tgz", + "integrity": "sha512-CkJ/Wtyquh4wpG7Os6n5j4D9fm0NFROa6Go0hEToVU8kbfQoj6drD76ixBnsx47dOtcHNQ11AVaPaaAeHmnTjg==", + "requires": { + "@babel/runtime": "^7.0.0", + "@deck.gl/aggregation-layers": "8.9.22", + "@deck.gl/carto": "8.9.22", + "@deck.gl/core": "8.9.22", + "@deck.gl/extensions": "8.9.22", + "@deck.gl/geo-layers": "8.9.22", + "@deck.gl/google-maps": "8.9.22", + "@deck.gl/json": "8.9.22", + "@deck.gl/layers": "8.9.22", + "@deck.gl/mapbox": "8.9.22", + "@deck.gl/mesh-layers": "8.9.22", + "@deck.gl/react": "8.9.22" + } } } }, @@ -78411,6 +78798,56 @@ } } }, + "@turf/boolean-clockwise": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@turf/boolean-clockwise/-/boolean-clockwise-5.1.5.tgz", + "integrity": "sha512-FqbmEEOJ4rU4/2t7FKx0HUWmjFEVqR+NJrFP7ymGSjja2SQ7Q91nnBihGuT+yuHHl6ElMjQ3ttsB/eTmyCycxA==", + "requires": { + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5" + } + }, + "@turf/clone": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@turf/clone/-/clone-5.1.5.tgz", + "integrity": "sha512-//pITsQ8xUdcQ9pVb4JqXiSqG4dos5Q9N4sYFoWghX21tfOV2dhc5TGqYOhnHrQS7RiKQL1vQ48kIK34gQ5oRg==", + "requires": { + "@turf/helpers": "^5.1.5" + } + }, + "@turf/helpers": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-5.1.5.tgz", + "integrity": "sha512-/lF+JR+qNDHZ8bF9d+Cp58nxtZWJ3sqFe6n3u3Vpj+/0cqkjk4nXKYBSY0azm+GIYB5mWKxUXvuP/m0ZnKj1bw==" + }, + "@turf/invariant": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-5.2.0.tgz", + "integrity": "sha512-28RCBGvCYsajVkw2EydpzLdcYyhSA77LovuOvgCJplJWaNVyJYH6BOR3HR9w50MEkPqb/Vc/jdo6I6ermlRtQA==", + "requires": { + "@turf/helpers": "^5.1.5" + } + }, + "@turf/meta": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@turf/meta/-/meta-5.2.0.tgz", + "integrity": "sha512-ZjQ3Ii62X9FjnK4hhdsbT+64AYRpaI8XMBMcyftEOGSmPMUVnkbvuv3C9geuElAXfQU7Zk1oWGOcrGOD9zr78Q==", + "requires": { + "@turf/helpers": "^5.1.5" + } + }, + "@turf/rewind": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/@turf/rewind/-/rewind-5.1.5.tgz", + "integrity": "sha512-Gdem7JXNu+G4hMllQHXRFRihJl3+pNl7qY+l4qhQFxq+hiU1cQoVFnyoleIqWKIrdK/i2YubaSwc3SCM7N5mMw==", + "requires": { + "@turf/boolean-clockwise": "^5.1.5", + "@turf/clone": "^5.1.5", + "@turf/helpers": "^5.1.5", + "@turf/invariant": "^5.1.5", + "@turf/meta": "^5.1.5" + } + }, "@types/aria-query": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-4.2.0.tgz", @@ -78687,11 +79124,6 @@ "resolved": "https://registry.npmjs.org/@types/fetch-mock/-/fetch-mock-7.3.5.tgz", "integrity": "sha512-sLecm9ohBdGIpYUP9rWk5/XIKY2xHMYTBJIcJuBBM8IJWnYoQ1DAj8F4OVjnfD0API1drlkWEV0LPNk+ACuhsg==" }, - "@types/flatbuffers": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@types/flatbuffers/-/flatbuffers-1.10.0.tgz", - "integrity": "sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA==" - }, "@types/geojson": { "version": "7946.0.8", "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", @@ -78715,6 +79147,11 @@ "@types/node": "*" } }, + "@types/hammerjs": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", + "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==" + }, "@types/hast": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.1.tgz", @@ -78833,6 +79270,15 @@ "@types/lodash": "*" } }, + "@types/mapbox__geojson-extent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/mapbox__geojson-extent/-/mapbox__geojson-extent-1.0.0.tgz", + "integrity": "sha512-RJBeVDv7LDmW4gO3VD8pr/OYuToQtF77H/VRDG733fmA6chzztBTz6yi9/llRD8SpM7fznxhP6B43Izaj4ufoA==", + "dev": true, + "requires": { + "@types/geojson": "*" + } + }, "@types/mapbox-gl": { "version": "2.7.6", "resolved": "https://registry.npmjs.org/@types/mapbox-gl/-/mapbox-gl-2.7.6.tgz", @@ -78912,6 +79358,11 @@ "resolved": "https://registry.npmjs.org/@types/npmlog/-/npmlog-4.1.4.tgz", "integrity": "sha512-WKG4gTr8przEZBiJ5r3s8ZIAoMXNbOgQ+j/d5O4X3x6kZJRLNvyUJuUK/KoG3+8BaOHPhp2m7WC6JKKeovDSzQ==" }, + "@types/offscreencanvas": { + "version": "2019.7.0", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", + "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==" + }, "@types/overlayscrollbars": { "version": "1.12.1", "resolved": "https://registry.npmjs.org/@types/overlayscrollbars/-/overlayscrollbars-1.12.1.tgz", @@ -79235,11 +79686,6 @@ "@types/jest": "*" } }, - "@types/text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-AQ6zewa0ucLJvtUi5HsErbOFKAcQfRLt9zFLlUOvcXBy2G36a+ZDpCHSGdzJVUD8aNURtIjh9aSjCStNMRCcRQ==" - }, "@types/tinycolor2": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/@types/tinycolor2/-/tinycolor2-1.4.3.tgz", @@ -81379,35 +81825,6 @@ "normalize-path": "^2.1.1" } }, - "apache-arrow": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-4.0.1.tgz", - "integrity": "sha512-DyF7GXCbSjsw4P5C8b+qW7OnJKa6w9mJI0mhV0+EfZbVZCmhfiF6ffqcnrI/kzBrRqn9hH/Ft9n5+m4DTbBJpg==", - "requires": { - "@types/flatbuffers": "^1.10.0", - "@types/node": "^14.14.37", - "@types/text-encoding-utf-8": "^1.0.1", - "command-line-args": "5.1.1", - "command-line-usage": "6.1.1", - "flatbuffers": "1.12.0", - "json-bignum": "^0.0.3", - "pad-left": "^2.1.0", - "text-encoding-utf-8": "^1.0.2", - "tslib": "^2.2.0" - }, - "dependencies": { - "@types/node": { - "version": "14.17.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.17.9.tgz", - "integrity": "sha512-CMjgRNsks27IDwI785YMY0KLt3co/c0cQ5foxHYv/shC2w8oOnVwz5Ubq1QG5KzrcW+AXk6gzdnxIkDnTvzu3g==" - }, - "tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" - } - } - }, "aphrodite": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/aphrodite/-/aphrodite-1.2.5.tgz", @@ -81514,11 +81931,6 @@ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=" }, - "array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" - }, "array-differ": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", @@ -82880,6 +83292,11 @@ "node-int64": "^0.4.0" } }, + "buf-compare": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buf-compare/-/buf-compare-1.0.1.tgz", + "integrity": "sha512-Bvx4xH00qweepGc43xFvMs5BKASXTbHaHm6+kDYIK9p/4iFwjATQkmPKHQSgJZzKbAymhztRbXUf1Nqhzl73/Q==" + }, "buffer": { "version": "4.9.2", "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", @@ -83929,66 +84346,6 @@ "trim": "0.0.1" } }, - "command-line-args": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.1.tgz", - "integrity": "sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==", - "requires": { - "array-back": "^3.0.1", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - } - }, - "command-line-usage": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", - "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", - "requires": { - "array-back": "^4.0.1", - "chalk": "^2.4.2", - "table-layout": "^1.0.1", - "typical": "^5.2.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" - } - } - }, "commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", @@ -84531,6 +84888,15 @@ } } }, + "core-assert": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/core-assert/-/core-assert-0.2.1.tgz", + "integrity": "sha512-IG97qShIP+nrJCXMCgkNZgH7jZQ4n8RpPyPeXX++T6avR/KhLhgLiHKoEn5Rc1KjfycSfA9DMa6m+4C4eguHhw==", + "requires": { + "buf-compare": "^1.0.0", + "is-error": "^2.2.0" + } + }, "core-js": { "version": "3.31.1", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.31.1.tgz", @@ -86196,24 +86562,6 @@ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, - "deck.gl": { - "version": "8.5.2", - "resolved": "https://registry.npmjs.org/deck.gl/-/deck.gl-8.5.2.tgz", - "integrity": "sha512-tsEyv62Zzc+GT3By0Y1R2gqEJ8K3tGBDaLprAoeAsg7fvIa5ikFBdWEBFHa1UDbgE2UEmYbcBK/yK4GAL8Ia4A==", - "requires": { - "@deck.gl/aggregation-layers": "8.5.2", - "@deck.gl/carto": "8.5.2", - "@deck.gl/core": "8.5.2", - "@deck.gl/extensions": "8.5.2", - "@deck.gl/geo-layers": "8.5.2", - "@deck.gl/google-maps": "8.5.2", - "@deck.gl/json": "8.5.2", - "@deck.gl/layers": "8.5.2", - "@deck.gl/mapbox": "8.5.2", - "@deck.gl/mesh-layers": "8.5.2", - "@deck.gl/react": "8.5.2" - } - }, "decode-named-character-reference": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", @@ -86263,7 +86611,8 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "devOptional": true }, "deep-is": { "version": "0.1.3", @@ -86275,6 +86624,14 @@ "resolved": "https://registry.npmjs.org/deep-object-diff/-/deep-object-diff-1.1.0.tgz", "integrity": "sha512-b+QLs5vHgS+IoSNcUE4n9HP2NwcHj7aqnJWsjPtuG75Rh5TOaGt0OjAYInh77d5T16V5cRDC+Pw/6ZZZiETBGw==" }, + "deep-strict-equal": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/deep-strict-equal/-/deep-strict-equal-0.2.0.tgz", + "integrity": "sha512-3daSWyvZ/zwJvuMGlzG1O+Ow0YSadGfb3jsh9xoCutv2tWyB9dA4YvR9L9/fSdDZa2dByYQe+TqapSGUrjnkoA==", + "requires": { + "core-assert": "^0.2.0" + } + }, "deepmerge": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", @@ -86873,9 +87230,9 @@ } }, "draco3d": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.4.1.tgz", - "integrity": "sha512-9Rxonc70xiovBC+Bq1h57SNZIHzWTibU1VfIGp5z3Xx8dPtv4yT5uGhiH7P5uvJRR2jkrvHafRxR7bTANkvfpg==" + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.5.5.tgz", + "integrity": "sha512-JVuNV0EJzD3LBYhGyIXJLeBID/EVtmFO1ZNhAYflTgiMiAJlbhXQmRRda/azjc8MRVMHh0gqGhiqHUo5dIXM8Q==" }, "duplexer": { "version": "0.1.2", @@ -88837,6 +89194,14 @@ "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, + "fast-xml-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.7.tgz", + "integrity": "sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==", + "requires": { + "strnum": "^1.0.5" + } + }, "fastest-levenshtein": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.12.tgz", @@ -89129,14 +89494,6 @@ "pkg-dir": "^3.0.0" } }, - "find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "requires": { - "array-back": "^3.0.1" - } - }, "find-root": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", @@ -89420,11 +89777,6 @@ "rimraf": "^3.0.2" } }, - "flatbuffers": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", - "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==" - }, "flatted": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.0.tgz", @@ -90390,9 +90742,9 @@ } }, "gl-matrix": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.3.0.tgz", - "integrity": "sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA==" + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" }, "glob": { "version": "7.2.3", @@ -91954,6 +92306,11 @@ "is-window": "^1.0.2" } }, + "is-error": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-error/-/is-error-2.2.2.tgz", + "integrity": "sha512-IOQqts/aHWbiisY5DuPJQ0gcbvaLFCa7fBa9xoLfxBZvQ+ZI/Zh9xoI7Gk+G64N0FdK4AbibytHht2tWgpJWLg==" + }, "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -94868,11 +95225,6 @@ "bignumber.js": "^9.0.0" } }, - "json-bignum": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", - "integrity": "sha1-QRY7UENsdz2CQk28IO1w23YEuNc=" - }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", @@ -95062,6 +95414,11 @@ "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.5.tgz", "integrity": "sha512-pJiBpiXMbt7dkzXe8Ghj/u4FfXOOa98fPW+bihOJ4SjnoijweJrNThJfd3ifXpXhREjpoF2mZVH1GfS9LV3kHQ==" }, + "ktx-parse": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/ktx-parse/-/ktx-parse-0.0.4.tgz", + "integrity": "sha512-LY3nrmfXl+wZZdPxgJ3ZmLvG+wkOZZP3/dr4RbQj1Pk3Qwz44esOOSFFVQJcNWpXAtiNIC66WgXufX/SYgYz6A==" + }, "language-subtag-registry": { "version": "0.3.21", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz", @@ -95119,6 +95476,11 @@ "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", "dev": true }, + "lerc": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lerc/-/lerc-4.0.1.tgz", + "integrity": "sha512-b351eOjY3DKm1H2hDVhXswsd2RCK6bgREBK6Z639ctClOuYXTi9a44l8yO3zm1pYM2o4WrriloTAKgyrb/0EyA==" + }, "lerna": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/lerna/-/lerna-6.6.2.tgz", @@ -97773,11 +98135,6 @@ "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", "dev": true }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=" - }, "lodash.curry": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.curry/-/lodash.curry-4.1.1.tgz", @@ -98342,11 +98699,6 @@ "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.5.tgz", "integrity": "sha512-OhXt2lS//WpLdkqrzo/KwB7SRD8AiNTFFzuo9n14IBupzIMa67yGItcK7I2W9D8Ghpa4T04Sw9FWsKCJG50Bxw==" }, - "gl-matrix": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", - "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" - }, "supercluster": { "version": "7.1.5", "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.5.tgz", @@ -98393,11 +98745,23 @@ "integrity": "sha512-9FbRY3i6U+CbHgrdNbAUaisjWTozkm1ZfupYQJiZ87NtYHk2Zh9DvxMgp/fifxVhqTLpd5fCCLossUbpZxGeKw==" }, "math.gl": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/math.gl/-/math.gl-3.5.3.tgz", - "integrity": "sha512-cRQRZlc+XvNHd3bIfu3kdPPPAW0vwDelZJmkjn2TDvCyPcmyDtAiZ2Poo1aFoINP7HzN6oHYxapc/0wV3q6Opg==", + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/math.gl/-/math.gl-3.6.3.tgz", + "integrity": "sha512-Yq9CyECvSDox9+5ETi2+x1bGTY5WvGUGL3rJfC4KPoCZAM51MGfrCm6rIn4yOJUVfMPs2a5RwMD+yGS/n1g3gg==", "requires": { - "@math.gl/core": "3.5.3" + "@math.gl/core": "3.6.3" + }, + "dependencies": { + "@math.gl/core": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.3.tgz", + "integrity": "sha512-jBABmDkj5uuuE0dTDmwwss7Cup5ZwQ6Qb7h1pgvtkEutTrhkcv8SuItQNXmF45494yIHeoGue08NlyeY6wxq2A==", + "requires": { + "@babel/runtime": "^7.12.0", + "@math.gl/types": "3.6.3", + "gl-matrix": "^3.4.0" + } + } } }, "mathfn": { @@ -99536,11 +99900,11 @@ } }, "mjolnir.js": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-2.5.0.tgz", - "integrity": "sha512-YkVoyKs7qm9xvAgRgjx3Md/7eYqmq7VXOgTKQNnmuzcBJzMebjdIWa7FdTd0RZBrw3UL6V6TTktsxJwBMLXUNA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-2.7.1.tgz", + "integrity": "sha512-72BeUWgTv2cj5aZQKpwL8caNUFhXZ9bDm1hxpNj70XJQ62IBnTZmtv/WPxJvtaVNhzNo+D2U8O6ryNI0zImYcw==", "requires": { - "@babel/runtime": "^7.0.0", + "@types/hammerjs": "^2.0.41", "hammerjs": "^2.0.8" } }, @@ -101815,14 +102179,6 @@ "resolved": "https://registry.npmjs.org/pad-component/-/pad-component-0.0.1.tgz", "integrity": "sha1-rR8izhvw/cDW3dkIrxfzUaQEuKw=" }, - "pad-left": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz", - "integrity": "sha1-FuajstRKjhOMsIOMx8tAOk/J6ZQ=", - "requires": { - "repeat-string": "^1.5.4" - } - }, "pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", @@ -102490,15 +102846,6 @@ "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==" }, - "probe.gl": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.4.0.tgz", - "integrity": "sha512-9CLByZATuhuG/Viq3ckfWU+dAhb7dMmjzsyCy4s7ds9ueTejcVRENxL197/XacOK/AN61YrEERB0QnouB0Qc0Q==", - "requires": { - "@babel/runtime": "^7.0.0", - "@probe.gl/stats": "3.4.0" - } - }, "proc-log": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-1.0.0.tgz", @@ -102945,6 +103292,14 @@ "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true }, + "quadbin": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/quadbin/-/quadbin-0.1.9.tgz", + "integrity": "sha512-5V6m6+cL/6+uBl3hYL+CWF06rRvlHkIepYKGQjTLYaHhu9InPppql0+0ROiCaOQdz8gPNlgge3glk5Qg1mWOYw==", + "requires": { + "@mapbox/tile-cover": "3.0.1" + } + }, "query-string": { "version": "6.14.1", "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", @@ -104517,11 +104872,6 @@ } } }, - "reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==" - }, "reduce-function-call": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz", @@ -107124,6 +107474,11 @@ "escape-string-regexp": "^1.0.2" } }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, "strong-log-transformer": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", @@ -107431,29 +107786,6 @@ } } }, - "table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" - } - } - }, "taketalk": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/taketalk/-/taketalk-1.0.0.tgz", @@ -107831,11 +108163,6 @@ "minimatch": "^3.0.4" } }, - "text-encoding-utf-8": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", - "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" - }, "text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", @@ -107853,6 +108180,22 @@ "integrity": "sha512-4cAYwNFNYlIAHBUo7p6zw8POUvWbZor+/R0Tanv+rIhsauEyV9QSrEXL40pI+GfTQxKX8k6Tyw6CmdSDSmASrg==", "devOptional": true }, + "texture-compressor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/texture-compressor/-/texture-compressor-1.0.2.tgz", + "integrity": "sha512-dStVgoaQ11mA5htJ+RzZ51ZxIZqNOgWKAIvtjLrW1AliQQLCmrDqNzQZ8Jh91YealQ95DXt4MEduLzJmbs6lig==", + "requires": { + "argparse": "^1.0.10", + "image-size": "^0.7.4" + }, + "dependencies": { + "image-size": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", + "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==" + } + } + }, "thread-loader": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-3.0.4.tgz", @@ -107924,6 +108267,11 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "devOptional": true }, + "tilebelt": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tilebelt/-/tilebelt-1.0.1.tgz", + "integrity": "sha512-cxHzpa5JgsugY9NUVRH43gPaGJw/29LecAn4X7UGOP64+kB8pU4VQ3bIhSyfb5Mk4jDxwl3yk330L/EIhbJ5aw==" + }, "timers-browserify": { "version": "2.0.12", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.12.tgz", @@ -108438,11 +108786,6 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==" }, - "typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" - }, "ua-parser-js": { "version": "0.7.33", "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.33.tgz", @@ -110304,22 +110647,6 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, - "wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "dependencies": { - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" - } - } - }, "worker-farm": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz", diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json b/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json index b96f377a524f4..15d2e4ba3f9f3 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/package.json @@ -31,7 +31,7 @@ "d3-array": "^1.2.4", "d3-color": "^1.4.1", "d3-scale": "^3.0.0", - "deck.gl": "8.5.2", + "deck.gl": "8.8.27", "lodash": "^4.17.15", "moment": "^2.20.1", "mousetrap": "^1.6.1", @@ -41,6 +41,11 @@ "urijs": "^1.19.8", "xss": "^1.0.10" }, + "devDependencies": { + "@types/mapbox__geojson-extent": "^1.0.0", + "@types/underscore": "^1.11.6", + "@types/urijs": "^1.19.19" + }, "peerDependencies": { "@superset-ui/chart-controls": "*", "@superset-ui/core": "*", @@ -51,9 +56,5 @@ }, "publishConfig": { "access": "public" - }, - "devDependencies": { - "@types/underscore": "^1.11.6", - "@types/urijs": "^1.19.19" } } diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx index b51e780995f7f..4348bf1561c97 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx @@ -24,22 +24,28 @@ */ /* eslint no-underscore-dangle: ["error", { "allow": ["", "__timestamp"] }] */ -import React, { ReactNode } from 'react'; +import React from 'react'; import { CategoricalColorNamespace, Datasource, + HandlerFunction, JsonObject, JsonValue, QueryFormData, } from '@superset-ui/core'; +import { Layer } from 'deck.gl/typed'; import Legend from './components/Legend'; import { hexToRGB } from './utils/colors'; import sandboxedEval from './utils/sandbox'; // eslint-disable-next-line import/extensions import fitViewport, { Viewport } from './utils/fitViewport'; -import { DeckGLContainerStyledWrapper } from './DeckGLContainer'; +import { + DeckGLContainer, + DeckGLContainerStyledWrapper, +} from './DeckGLContainer'; import { Point } from './types'; import { getLayerType } from './factory'; +import { TooltipProps } from './components/Tooltip'; const { getScale } = CategoricalColorNamespace; @@ -73,7 +79,7 @@ export type CategoricalDeckGLContainerProps = { viewport: Viewport; getLayer: getLayerType; payload: JsonObject; - onAddFilter?: () => void; + onAddFilter?: HandlerFunction; setControlValue: (control: string, value: JsonValue) => void; }; @@ -87,7 +93,7 @@ export default class CategoricalDeckGLContainer extends React.PureComponent< CategoricalDeckGLContainerProps, CategoricalDeckGLContainerState > { - containerRef = React.createRef(); + containerRef = React.createRef(); /* * A Deck.gl container that handles categories. @@ -178,7 +184,7 @@ export default class CategoricalDeckGLContainer extends React.PureComponent< onAddFilter, this.setTooltip, this.props.datasource, - ), + ) as Layer, ]; } @@ -229,7 +235,7 @@ export default class CategoricalDeckGLContainer extends React.PureComponent< this.setState({ categories }); } - setTooltip = (tooltip: ReactNode) => { + setTooltip = (tooltip: TooltipProps['tooltip']) => { const { current } = this.containerRef; if (current) { current.setTooltip(tooltip); @@ -240,6 +246,7 @@ export default class CategoricalDeckGLContainer extends React.PureComponent< return (
    void; + mapStyle?: string; + mapboxApiAccessToken: string; + children?: ReactNode; + width: number; + height: number; + layers: (Layer | (() => Layer))[]; + onViewportChange?: (viewport: Viewport) => void; }; -const defaultProps = { - mapStyle: 'light', - setControlValue: () => {}, - children: null, + +export type DeckGLContainerState = { + lastUpdate?: number | null; + viewState: Viewport; + tooltip: TooltipProps['tooltip']; + timer: ReturnType; }; -export class DeckGLContainer extends React.Component { - constructor(props) { +export class DeckGLContainer extends React.Component< + DeckGLContainerProps, + DeckGLContainerState +> { + constructor(props: DeckGLContainerProps) { super(props); this.tick = this.tick.bind(this); this.onViewStateChange = this.onViewStateChange.bind(this); @@ -61,7 +66,7 @@ export class DeckGLContainer extends React.Component { }; } - UNSAFE_componentWillReceiveProps(nextProps) { + UNSAFE_componentWillReceiveProps(nextProps: DeckGLContainerProps) { if (!isEqual(nextProps.viewport, this.props.viewport)) { this.setState({ viewState: nextProps.viewport }); } @@ -71,8 +76,8 @@ export class DeckGLContainer extends React.Component { clearInterval(this.state.timer); } - onViewStateChange({ viewState }) { - this.setState({ viewState, lastUpdate: Date.now() }); + onViewStateChange({ viewState }: { viewState: JsonObject }) { + this.setState({ viewState: viewState as Viewport, lastUpdate: Date.now() }); } tick() { @@ -90,18 +95,20 @@ export class DeckGLContainer extends React.Component { layers() { // Support for layer factory if (this.props.layers.some(l => typeof l === 'function')) { - return this.props.layers.map(l => (typeof l === 'function' ? l() : l)); + return this.props.layers.map(l => + typeof l === 'function' ? l() : l, + ) as Layer[]; } - return this.props.layers; + return this.props.layers as Layer[]; } - setTooltip = tooltip => { + setTooltip = (tooltip: TooltipProps['tooltip']) => { this.setState({ tooltip }); }; render() { - const { children, height, width } = this.props; + const { children = null, height, width } = this.props; const { viewState, tooltip } = this.state; const layers = this.layers(); @@ -110,7 +117,6 @@ export class DeckGLContainer extends React.Component { <>
    @@ -133,9 +139,6 @@ export class DeckGLContainer extends React.Component { } } -DeckGLContainer.propTypes = propTypes; -DeckGLContainer.defaultProps = defaultProps; - export const DeckGLContainerStyledWrapper = styled(DeckGLContainer)` .deckgl-tooltip > div { overflow: hidden; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.jsx deleted file mode 100644 index e9f107ed95869..0000000000000 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.jsx +++ /dev/null @@ -1,147 +0,0 @@ -/* eslint-disable react/jsx-handler-names */ -/* eslint-disable react/no-access-state-in-setstate */ -/* eslint-disable camelcase */ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -import React from 'react'; -import _ from 'lodash'; -import PropTypes from 'prop-types'; -import { SupersetClient } from '@superset-ui/core'; - -import { DeckGLContainerStyledWrapper } from '../DeckGLContainer'; -import { getExploreLongUrl } from '../utils/explore'; -import layerGenerators from '../layers'; - -const propTypes = { - formData: PropTypes.object.isRequired, - payload: PropTypes.object.isRequired, - setControlValue: PropTypes.func.isRequired, - viewport: PropTypes.object.isRequired, - onAddFilter: PropTypes.func, - onSelect: PropTypes.func, -}; -const defaultProps = { - onAddFilter() {}, - onSelect() {}, -}; - -class DeckMulti extends React.PureComponent { - containerRef = React.createRef(); - - constructor(props) { - super(props); - this.state = { subSlicesLayers: {} }; - this.onViewportChange = this.onViewportChange.bind(this); - } - - componentDidMount() { - const { formData, payload } = this.props; - this.loadLayers(formData, payload); - } - - UNSAFE_componentWillReceiveProps(nextProps) { - const { formData, payload } = nextProps; - const hasChanges = !_.isEqual( - this.props.formData.deck_slices, - nextProps.formData.deck_slices, - ); - if (hasChanges) { - this.loadLayers(formData, payload); - } - } - - onViewportChange(viewport) { - this.setState({ viewport }); - } - - loadLayers(formData, payload, viewport) { - this.setState({ subSlicesLayers: {}, viewport }); - payload.data.slices.forEach(subslice => { - // Filters applied to multi_deck are passed down to underlying charts - // note that dashboard contextual information (filter_immune_slices and such) aren't - // taken into consideration here - const filters = [ - ...(subslice.form_data.filters || []), - ...(formData.filters || []), - ...(formData.extra_filters || []), - ]; - const subsliceCopy = { - ...subslice, - form_data: { - ...subslice.form_data, - filters, - }, - }; - - SupersetClient.get({ - endpoint: getExploreLongUrl(subsliceCopy.form_data, 'json'), - }) - .then(({ json }) => { - const layer = layerGenerators[subsliceCopy.form_data.viz_type]( - subsliceCopy.form_data, - json, - this.props.onAddFilter, - this.setTooltip, - [], - this.props.onSelect, - ); - this.setState({ - subSlicesLayers: { - ...this.state.subSlicesLayers, - [subsliceCopy.slice_id]: layer, - }, - }); - }) - .catch(() => {}); - }); - } - - setTooltip = tooltip => { - const { current } = this.containerRef; - if (current) { - current.setTooltip(tooltip); - } - }; - - render() { - const { payload, formData, setControlValue, height, width } = this.props; - const { subSlicesLayers } = this.state; - - const layers = Object.values(subSlicesLayers); - - return ( - - ); - } -} - -DeckMulti.propTypes = propTypes; -DeckMulti.defaultProps = defaultProps; - -export default DeckMulti; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.tsx new file mode 100644 index 0000000000000..2138ac86824a2 --- /dev/null +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.tsx @@ -0,0 +1,171 @@ +/* eslint-disable react/jsx-handler-names */ +/* eslint-disable react/no-access-state-in-setstate */ +/* eslint-disable camelcase */ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +import React from 'react'; +import _ from 'lodash'; +import { + Datasource, + HandlerFunction, + JsonObject, + JsonValue, + QueryFormData, + SupersetClient, +} from '@superset-ui/core'; +import { Layer } from 'deck.gl/typed'; + +import { + DeckGLContainer, + DeckGLContainerStyledWrapper, +} from '../DeckGLContainer'; +import { getExploreLongUrl } from '../utils/explore'; +import layerGenerators from '../layers'; +import { Viewport } from '../utils/fitViewport'; +import { TooltipProps } from '../components/Tooltip'; + +export type DeckMultiProps = { + formData: QueryFormData; + payload: JsonObject; + setControlValue: (control: string, value: JsonValue) => void; + viewport: Viewport; + onAddFilter: HandlerFunction; + height: number; + width: number; + datasource: Datasource; + onSelect: () => void; +}; + +export type DeckMultiState = { + subSlicesLayers: Record; + viewport?: Viewport; +}; + +class DeckMulti extends React.PureComponent { + containerRef = React.createRef(); + + constructor(props: DeckMultiProps) { + super(props); + this.state = { subSlicesLayers: {} }; + this.onViewportChange = this.onViewportChange.bind(this); + } + + componentDidMount() { + const { formData, payload } = this.props; + this.loadLayers(formData, payload); + } + + UNSAFE_componentWillReceiveProps(nextProps: DeckMultiProps) { + const { formData, payload } = nextProps; + const hasChanges = !_.isEqual( + this.props.formData.deck_slices, + nextProps.formData.deck_slices, + ); + if (hasChanges) { + this.loadLayers(formData, payload); + } + } + + onViewportChange(viewport: Viewport) { + this.setState({ viewport }); + } + + loadLayers( + formData: QueryFormData, + payload: JsonObject, + viewport?: Viewport, + ) { + this.setState({ subSlicesLayers: {}, viewport }); + payload.data.slices.forEach( + (subslice: { slice_id: number } & JsonObject) => { + // Filters applied to multi_deck are passed down to underlying charts + // note that dashboard contextual information (filter_immune_slices and such) aren't + // taken into consideration here + const filters = [ + ...(subslice.form_data.filters || []), + ...(formData.filters || []), + ...(formData.extra_filters || []), + ]; + const subsliceCopy = { + ...subslice, + form_data: { + ...subslice.form_data, + filters, + }, + }; + + const url = getExploreLongUrl(subsliceCopy.form_data, 'json'); + + if (url) { + SupersetClient.get({ + endpoint: url, + }) + .then(({ json }) => { + const layer = layerGenerators[subsliceCopy.form_data.viz_type]( + subsliceCopy.form_data, + json, + this.props.onAddFilter, + this.setTooltip, + this.props.datasource, + [], + this.props.onSelect, + ); + this.setState({ + subSlicesLayers: { + ...this.state.subSlicesLayers, + [subsliceCopy.slice_id]: layer, + }, + }); + }) + .catch(() => {}); + } + }, + ); + } + + setTooltip = (tooltip: TooltipProps['tooltip']) => { + const { current } = this.containerRef; + if (current) { + current.setTooltip(tooltip); + } + }; + + render() { + const { payload, formData, setControlValue, height, width } = this.props; + const { subSlicesLayers } = this.state; + + const layers = Object.values(subSlicesLayers); + + return ( + + ); + } +} + +export default DeckMulti; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/controlPanel.ts b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/controlPanel.ts index de2ebfc76eea2..8571fe23d0e2a 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/controlPanel.ts +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/controlPanel.ts @@ -47,7 +47,7 @@ export default { mutator: (data: { result?: { id: number; slice_name: string }[]; }) => { - if (!data || !data.result) { + if (!data?.result) { return []; } return data.result.map(o => ({ diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Legend.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Legend.tsx index 70f443b91066a..3b204f22896da 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Legend.tsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Legend.tsx @@ -58,8 +58,8 @@ export type LegendProps = { forceCategorical?: boolean; position?: null | 'tl' | 'tr' | 'bl' | 'br'; categories: Record; - toggleCategory: (key: string) => void; - showSingleCategory: (key: string) => void; + toggleCategory?: (key: string) => void; + showSingleCategory?: (key: string) => void; }; const Legend = ({ diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Tooltip.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Tooltip.tsx index d61c4844acfe1..564e18a8a3a21 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Tooltip.tsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/components/Tooltip.tsx @@ -18,14 +18,14 @@ */ import { styled, safeHtmlSpan } from '@superset-ui/core'; -import React from 'react'; +import React, { ReactNode } from 'react'; export type TooltipProps = { tooltip: | { x: number; y: number; - content: string; + content: ReactNode; } | null | undefined; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/factory.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/factory.tsx index 7c3f44ef762df..4ddde91247de8 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/factory.tsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/factory.tsx @@ -18,7 +18,13 @@ */ import React from 'react'; import { isEqual } from 'lodash'; -import { Datasource, QueryFormData, JsonObject } from '@superset-ui/core'; +import { Layer } from 'deck.gl/typed'; +import { + Datasource, + QueryFormData, + JsonObject, + HandlerFunction, +} from '@superset-ui/core'; import { DeckGLContainerStyledWrapper, @@ -27,12 +33,13 @@ import { import CategoricalDeckGLContainer from './CategoricalDeckGLContainer'; import fitViewport, { Viewport } from './utils/fitViewport'; import { Point } from './types'; +import { TooltipProps } from './components/Tooltip'; type deckGLComponentProps = { datasource: Datasource; formData: QueryFormData; height: number; - onAddFilter: () => void; + onAddFilter: HandlerFunction; payload: JsonObject; setControlValue: () => void; viewport: Viewport; @@ -42,8 +49,8 @@ export interface getLayerType { ( formData: QueryFormData, payload: JsonObject, - onAddFilter: (() => void) | undefined, - setTooltip: (tooltip: string) => void, + onAddFilter: HandlerFunction | undefined, + setTooltip: (tooltip: TooltipProps['tooltip']) => void, datasource?: Datasource, ): T; } @@ -52,7 +59,7 @@ interface getPointsType { } type deckGLComponentState = { viewport: Viewport; - layer: unknown; + layer: Layer; }; export function createDeckGLComponent( @@ -105,10 +112,10 @@ export function createDeckGLComponent( computeLayer(props: deckGLComponentProps) { const { formData, payload, onAddFilter } = props; - return getLayer(formData, payload, onAddFilter, this.setTooltip); + return getLayer(formData, payload, onAddFilter, this.setTooltip) as Layer; } - setTooltip = (tooltip: string) => { + setTooltip = (tooltip: TooltipProps['tooltip']) => { const { current } = this.containerRef; if (current) { current?.setTooltip(tooltip); @@ -138,7 +145,7 @@ export function createDeckGLComponent( } export function createCategoricalDeckGLComponent( - getLayer: getLayerType, + getLayer: getLayerType, getPoints: getPointsType, ) { return function Component(props: deckGLComponentProps) { diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Arc/Arc.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Arc/Arc.tsx similarity index 78% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Arc/Arc.jsx rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Arc/Arc.tsx index 75cf8d09a18ca..1bc19618b678d 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Arc/Arc.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Arc/Arc.tsx @@ -16,15 +16,22 @@ * specific language governing permissions and limitations * under the License. */ -import { ArcLayer } from 'deck.gl'; +import { ArcLayer } from 'deck.gl/typed'; import React from 'react'; -import { t } from '@superset-ui/core'; +import { + HandlerFunction, + JsonObject, + QueryFormData, + t, +} from '@superset-ui/core'; import { commonLayerProps } from '../common'; import { createCategoricalDeckGLComponent } from '../../factory'; import TooltipRow from '../../TooltipRow'; +import { TooltipProps } from '../../components/Tooltip'; +import { Point } from '../../types'; -function getPoints(data) { - const points = []; +function getPoints(data: JsonObject[]) { + const points: Point[] = []; data.forEach(d => { points.push(d.sourcePosition); points.push(d.targetPosition); @@ -33,8 +40,8 @@ function getPoints(data) { return points; } -function setTooltipContent(formData) { - return o => ( +function setTooltipContent(formData: QueryFormData) { + return (o: JsonObject) => (
    void, +) { const data = payload.data.features; const sc = fd.color_picker; const tc = fd.target_color_picker; @@ -65,7 +77,7 @@ export function getLayer(fd, payload, onAddFilter, setTooltip) { d.sourceColor || d.color || [sc.r, sc.g, sc.b, 255 * sc.a], getTargetColor: d => d.targetColor || d.color || [tc.r, tc.g, tc.b, 255 * tc.a], - id: `path-layer-${fd.slice_id}`, + id: `path-layer-${fd.slice_id}` as const, strokeWidth: fd.stroke_width ? fd.stroke_width : 3, ...commonLayerProps(fd, setTooltip, setTooltipContent(fd)), }); diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Geojson/Geojson.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Geojson/Geojson.tsx similarity index 68% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Geojson/Geojson.jsx rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Geojson/Geojson.tsx index 263b576ec9a17..4aa827e45bea5 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Geojson/Geojson.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Geojson/Geojson.tsx @@ -17,16 +17,25 @@ * under the License. */ import React from 'react'; -import PropTypes from 'prop-types'; -import { GeoJsonLayer } from 'deck.gl'; +import { GeoJsonLayer } from 'deck.gl/typed'; import geojsonExtent from '@mapbox/geojson-extent'; - -import { DeckGLContainerStyledWrapper } from '../../DeckGLContainer'; +import { + HandlerFunction, + JsonObject, + JsonValue, + QueryFormData, +} from '@superset-ui/core'; + +import { + DeckGLContainer, + DeckGLContainerStyledWrapper, +} from '../../DeckGLContainer'; import { hexToRGB } from '../../utils/colors'; import sandboxedEval from '../../utils/sandbox'; import { commonLayerProps } from '../common'; import TooltipRow from '../../TooltipRow'; -import fitViewport from '../../utils/fitViewport'; +import fitViewport, { Viewport } from '../../utils/fitViewport'; +import { TooltipProps } from '../../components/Tooltip'; const propertyMap = { fillColor: 'fillColor', @@ -38,8 +47,8 @@ const propertyMap = { 'stroke-width': 'strokeWidth', }; -const alterProps = (props, propOverrides) => { - const newProps = {}; +const alterProps = (props: JsonObject, propOverrides: JsonObject) => { + const newProps: JsonObject = {}; Object.keys(props).forEach(k => { if (k in propertyMap) { newProps[propertyMap[k]] = props[k]; @@ -59,18 +68,22 @@ const alterProps = (props, propOverrides) => { ...propOverrides, }; }; -let features; -const recurseGeoJson = (node, propOverrides, extraProps) => { - if (node && node.features) { - node.features.forEach(obj => { +let features: JsonObject[]; +const recurseGeoJson = ( + node: JsonObject, + propOverrides: JsonObject, + extraProps?: JsonObject, +) => { + if (node?.features) { + node.features.forEach((obj: JsonObject) => { recurseGeoJson(obj, propOverrides, node.extraProps || extraProps); }); } - if (node && node.geometry) { + if (node?.geometry) { const newNode = { ...node, properties: alterProps(node.properties, propOverrides), - }; + } as JsonObject; if (!newNode.extraProps) { newNode.extraProps = extraProps; } @@ -78,7 +91,7 @@ const recurseGeoJson = (node, propOverrides, extraProps) => { } }; -function setTooltipContent(o) { +function setTooltipContent(o: JsonObject) { return ( o.object.extraProps && (
    @@ -94,16 +107,21 @@ function setTooltipContent(o) { ); } -const getFillColor = feature => feature?.properties?.fillColor; -const getLineColor = feature => feature?.properties?.strokeColor; +const getFillColor = (feature: JsonObject) => feature?.properties?.fillColor; +const getLineColor = (feature: JsonObject) => feature?.properties?.strokeColor; -export function getLayer(formData, payload, onAddFilter, setTooltip) { +export function getLayer( + formData: QueryFormData, + payload: JsonObject, + onAddFilter: HandlerFunction, + setTooltip: (tooltip: TooltipProps['tooltip']) => void, +) { const fd = formData; const fc = fd.fill_color_picker; const sc = fd.stroke_color_picker; const fillColor = [fc.r, fc.g, fc.b, 255 * fc.a]; const strokeColor = [sc.r, sc.g, sc.b, 255 * sc.a]; - const propOverrides = {}; + const propOverrides: JsonObject = {}; if (fillColor[3] > 0) { propOverrides.fillColor = fillColor; } @@ -122,7 +140,7 @@ export function getLayer(formData, payload, onAddFilter, setTooltip) { } return new GeoJsonLayer({ - id: `geojson-layer-${fd.slice_id}`, + id: `geojson-layer-${fd.slice_id}` as const, data: features, extruded: fd.extruded, filled: fd.filled, @@ -136,21 +154,20 @@ export function getLayer(formData, payload, onAddFilter, setTooltip) { }); } -const propTypes = { - formData: PropTypes.object.isRequired, - payload: PropTypes.object.isRequired, - setControlValue: PropTypes.func.isRequired, - viewport: PropTypes.object.isRequired, - onAddFilter: PropTypes.func, -}; -const defaultProps = { - onAddFilter() {}, +export type DeckGLGeoJsonProps = { + formData: QueryFormData; + payload: JsonObject; + setControlValue: (control: string, value: JsonValue) => void; + viewport: Viewport; + onAddFilter: HandlerFunction; + height: number; + width: number; }; -class DeckGLGeoJson extends React.Component { - containerRef = React.createRef(); +class DeckGLGeoJson extends React.Component { + containerRef = React.createRef(); - setTooltip = tooltip => { + setTooltip = (tooltip: TooltipProps['tooltip']) => { const { current } = this.containerRef; if (current) { current.setTooltip(tooltip); @@ -164,14 +181,17 @@ class DeckGLGeoJson extends React.Component { let { viewport } = this.props; if (formData.autozoom) { const points = - payload?.data?.features?.reduce?.((acc, feature) => { - const bounds = geojsonExtent(feature); - if (bounds) { - return [...acc, [bounds[0], bounds[1]], [bounds[2], bounds[3]]]; - } - - return acc; - }, []) || []; + payload?.data?.features?.reduce?.( + (acc: [number, number, number, number][], feature: any) => { + const bounds = geojsonExtent(feature); + if (bounds) { + return [...acc, [bounds[0], bounds[1]], [bounds[2], bounds[3]]]; + } + + return acc; + }, + [], + ) || []; if (points.length) { viewport = fitViewport(viewport, { @@ -199,7 +219,4 @@ class DeckGLGeoJson extends React.Component { } } -DeckGLGeoJson.propTypes = propTypes; -DeckGLGeoJson.defaultProps = defaultProps; - export default DeckGLGeoJson; diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Geojson/index.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Geojson/index.ts similarity index 100% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Geojson/index.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Geojson/index.ts diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Grid/Grid.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Grid/Grid.tsx similarity index 77% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Grid/Grid.jsx rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Grid/Grid.tsx index d19ef3edb1610..887971d556779 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Grid/Grid.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Grid/Grid.tsx @@ -16,17 +16,23 @@ * specific language governing permissions and limitations * under the License. */ -import { GridLayer } from 'deck.gl'; +import { Color, GridLayer } from 'deck.gl/typed'; import React from 'react'; -import { t, CategoricalColorNamespace } from '@superset-ui/core'; +import { + t, + CategoricalColorNamespace, + JsonObject, + QueryFormData, +} from '@superset-ui/core'; import { commonLayerProps, getAggFunc } from '../common'; import sandboxedEval from '../../utils/sandbox'; import { hexToRGB } from '../../utils/colors'; import { createDeckGLComponent } from '../../factory'; import TooltipRow from '../../TooltipRow'; +import { TooltipProps } from '../../components/Tooltip'; -function setTooltipContent(o) { +function setTooltipContent(o: JsonObject) { return (
    void, + setTooltip: (tooltip: TooltipProps['tooltip']) => void, +) { const fd = formData; const colorScale = CategoricalColorNamespace.getScale(fd.color_scheme); - const colorRange = colorScale.range().map(color => hexToRGB(color)); + const colorRange = colorScale + .range() + .map(color => hexToRGB(color)) as Color[]; let data = payload.data.features; if (fd.js_data_mutator) { @@ -58,20 +71,21 @@ export function getLayer(formData, payload, onAddFilter, setTooltip) { const aggFunc = getAggFunc(fd.js_agg_function, p => p.weight); return new GridLayer({ - id: `grid-layer-${fd.slice_id}`, + id: `grid-layer-${fd.slice_id}` as const, data, - pickable: true, cellSize: fd.grid_size, extruded: fd.extruded, colorRange, outline: false, + // @ts-ignore getElevationValue: aggFunc, + // @ts-ignore getColorValue: aggFunc, ...commonLayerProps(fd, setTooltip, setTooltipContent), }); } -function getPoints(data) { +function getPoints(data: JsonObject[]) { return data.map(d => d.position); } diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Grid/index.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Grid/index.ts similarity index 100% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Grid/index.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Grid/index.ts diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Heatmap/Heatmap.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Heatmap/Heatmap.tsx index 2bd1f63ce7996..b491d6dba164c 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Heatmap/Heatmap.tsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Heatmap/Heatmap.tsx @@ -16,16 +16,16 @@ * specific language governing permissions and limitations * under the License. */ -import { HeatmapLayer } from 'deck.gl'; +import { HeatmapLayer, Position, Color } from 'deck.gl/typed'; import React from 'react'; -import { t, getSequentialSchemeRegistry } from '@superset-ui/core'; +import { t, getSequentialSchemeRegistry, JsonObject } from '@superset-ui/core'; import { commonLayerProps } from '../common'; import sandboxedEval from '../../utils/sandbox'; import { hexToRGB } from '../../utils/colors'; import { createDeckGLComponent, getLayerType } from '../../factory'; import TooltipRow from '../../TooltipRow'; -function setTooltipContent(o: any) { +function setTooltipContent(o: JsonObject) { return (
    = ( const colorRange = colorScale ?.range() ?.map(color => hexToRGB(color)) - ?.reverse(); + ?.reverse() as Color[]; return new HeatmapLayer({ - id: `heatmp-layer-${fd.slice_id}`, + id: `heatmp-layer-${fd.slice_id}` as const, data, intensity, radiusPixels, colorRange, aggregation: aggregation.toUpperCase(), - getPosition: (d: { position: number[]; weight: number }) => d.position, + getPosition: (d: { position: Position; weight: number }) => d.position, getWeight: (d: { position: number[]; weight: number }) => d.weight ? d.weight : 1, ...commonLayerProps(fd, setTooltip, setTooltipContent), diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Hex/Hex.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Hex/Hex.tsx similarity index 75% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Hex/Hex.jsx rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Hex/Hex.tsx index a3c430acb19fc..0b8d3fd4286a6 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Hex/Hex.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Hex/Hex.tsx @@ -16,17 +16,23 @@ * specific language governing permissions and limitations * under the License. */ -import { HexagonLayer } from 'deck.gl'; +import { HexagonLayer, Color } from 'deck.gl/typed'; import React from 'react'; -import { t, CategoricalColorNamespace } from '@superset-ui/core'; +import { + t, + CategoricalColorNamespace, + QueryFormData, + JsonObject, +} from '@superset-ui/core'; import { commonLayerProps, getAggFunc } from '../common'; import sandboxedEval from '../../utils/sandbox'; import { hexToRGB } from '../../utils/colors'; import { createDeckGLComponent } from '../../factory'; import TooltipRow from '../../TooltipRow'; +import { TooltipProps } from '../../components/Tooltip'; -function setTooltipContent(o) { +function setTooltipContent(o: JsonObject) { return (
    void, + setTooltip: (tooltip: TooltipProps['tooltip']) => void, +) { const fd = formData; const colorScale = CategoricalColorNamespace.getScale(fd.color_scheme); - const colorRange = colorScale.range().map(color => hexToRGB(color)); + const colorRange = colorScale + .range() + .map(color => hexToRGB(color)) as Color[]; let data = payload.data.features; if (fd.js_data_mutator) { @@ -53,23 +66,24 @@ export function getLayer(formData, payload, onAddFilter, setTooltip) { const jsFnMutator = sandboxedEval(fd.js_data_mutator); data = jsFnMutator(data); } - const aggFunc = getAggFunc(fd.js_agg_function, p => p.weight); + const aggFunc = getAggFunc(fd.js_agg_function, p => p?.weight); return new HexagonLayer({ - id: `hex-layer-${fd.slice_id}`, + id: `hex-layer-${fd.slice_id}` as const, data, - pickable: true, radius: fd.grid_size, extruded: fd.extruded, colorRange, outline: false, + // @ts-ignore getElevationValue: aggFunc, + // @ts-ignore getColorValue: aggFunc, ...commonLayerProps(fd, setTooltip, setTooltipContent), }); } -function getPoints(data) { +function getPoints(data: JsonObject[]) { return data.map(d => d.position); } diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Hex/index.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Hex/index.ts similarity index 100% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Hex/index.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Hex/index.ts diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Path/Path.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Path/Path.tsx similarity index 78% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Path/Path.jsx rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Path/Path.tsx index faadf4b3e1342..c4f13f0e57f91 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Path/Path.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Path/Path.tsx @@ -17,14 +17,17 @@ * specific language governing permissions and limitations * under the License. */ -import { PathLayer } from 'deck.gl'; import React from 'react'; +import { PathLayer } from 'deck.gl/typed'; +import { JsonObject, QueryFormData } from '@superset-ui/core'; import { commonLayerProps } from '../common'; import sandboxedEval from '../../utils/sandbox'; import { createDeckGLComponent } from '../../factory'; import TooltipRow from '../../TooltipRow'; +import { TooltipProps } from '../../components/Tooltip'; +import { Point } from '../../types'; -function setTooltipContent(o) { +function setTooltipContent(o: JsonObject) { return ( o.object.extraProps && (
    @@ -40,11 +43,16 @@ function setTooltipContent(o) { ); } -export function getLayer(formData, payload, onAddFilter, setTooltip) { +export function getLayer( + formData: QueryFormData, + payload: JsonObject, + onAddFilter: () => void, + setTooltip: (tooltip: TooltipProps['tooltip']) => void, +) { const fd = formData; const c = fd.color_picker; const fixedColor = [c.r, c.g, c.b, 255 * c.a]; - let data = payload.data.features.map(feature => ({ + let data = payload.data.features.map((feature: JsonObject) => ({ ...feature, path: feature.path, width: fd.line_width, @@ -57,7 +65,7 @@ export function getLayer(formData, payload, onAddFilter, setTooltip) { } return new PathLayer({ - id: `path-layer-${fd.slice_id}`, + id: `path-layer-${fd.slice_id}` as const, getColor: d => d.color, getPath: d => d.path, getWidth: d => d.width, @@ -69,8 +77,8 @@ export function getLayer(formData, payload, onAddFilter, setTooltip) { }); } -function getPoints(data) { - let points = []; +function getPoints(data: JsonObject[]) { + let points: Point[] = []; data.forEach(d => { points = points.concat(d.path); }); diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Path/index.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Path/index.ts similarity index 100% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Path/index.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Path/index.ts diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Polygon/Polygon.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Polygon/Polygon.tsx similarity index 75% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Polygon/Polygon.jsx rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Polygon/Polygon.tsx index f9a0dc2f4220f..627125c398199 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Polygon/Polygon.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Polygon/Polygon.tsx @@ -22,10 +22,15 @@ /* eslint no-underscore-dangle: ["error", { "allow": ["", "__timestamp"] }] */ import React from 'react'; -import { t } from '@superset-ui/core'; -import PropTypes from 'prop-types'; +import { + HandlerFunction, + JsonObject, + JsonValue, + QueryFormData, + t, +} from '@superset-ui/core'; -import { PolygonLayer } from 'deck.gl'; +import { PolygonLayer } from 'deck.gl/typed'; import Legend from '../../components/Legend'; import TooltipRow from '../../TooltipRow'; @@ -33,15 +38,20 @@ import { getBuckets, getBreakPointColorScaler } from '../../utils'; import { commonLayerProps } from '../common'; import sandboxedEval from '../../utils/sandbox'; -// eslint-disable-next-line import/extensions import getPointsFromPolygon from '../../utils/getPointsFromPolygon'; -// eslint-disable-next-line import/extensions -import fitViewport from '../../utils/fitViewport'; -import { DeckGLContainerStyledWrapper } from '../../DeckGLContainer'; +import fitViewport, { Viewport } from '../../utils/fitViewport'; +import { + DeckGLContainer, + DeckGLContainerStyledWrapper, +} from '../../DeckGLContainer'; +import { TooltipProps } from '../../components/Tooltip'; const DOUBLE_CLICK_THRESHOLD = 250; // milliseconds -function getElevation(d, colorScaler) { +function getElevation( + d: JsonObject, + colorScaler: (d: JsonObject) => [number, number, number, number], +) { /* in deck.gl 5.3.4 (used in Superset as of 2018-10-24), if a polygon has * opacity zero it will make everything behind it have opacity zero, * effectively showing the map layer no matter what other polygons are @@ -50,8 +60,8 @@ function getElevation(d, colorScaler) { return colorScaler(d)[3] === 0 ? 0 : d.elevation; } -function setTooltipContent(formData) { - return o => { +function setTooltipContent(formData: PolygonFormData) { + return (o: JsonObject) => { const metricLabel = formData.metric.label || formData.metric; return ( @@ -81,25 +91,18 @@ function setTooltipContent(formData) { } export function getLayer( - formData, - payload, - onAddFilter, - setTooltip, - selected, - onSelect, - filters, + formData: PolygonFormData, + payload: JsonObject, + onAddFilter: HandlerFunction, + setTooltip: (tooltip: TooltipProps['tooltip']) => void, + selected: JsonObject[], + onSelect: (value: JsonValue) => void, ) { const fd = formData; const fc = fd.fill_color_picker; const sc = fd.stroke_color_picker; let data = [...payload.data.features]; - if (filters != null) { - filters.forEach(f => { - data = data.filter(x => f(x)); - }); - } - if (fd.js_data_mutator) { // Applying user defined data mutator if defined const jsFnMutator = sandboxedEval(fd.js_data_mutator); @@ -107,7 +110,7 @@ export function getLayer( } const metricLabel = fd.metric ? fd.metric.label || fd.metric : null; - const accessor = d => d[metricLabel]; + const accessor = (d: JsonObject) => d[metricLabel]; // base color for the polygons const baseColorScaler = fd.metric === null @@ -115,8 +118,13 @@ export function getLayer( : getBreakPointColorScaler(fd, data, accessor); // when polygons are selected, reduce the opacity of non-selected polygons - const colorScaler = d => { - const baseColor = baseColorScaler(d); + const colorScaler = (d: JsonObject): [number, number, number, number] => { + const baseColor = (baseColorScaler?.(d) as [ + number, + number, + number, + number, + ]) || [0, 0, 0, 0]; if (selected.length > 0 && !selected.includes(d[fd.line_column])) { baseColor[3] /= 2; } @@ -129,12 +137,11 @@ export function getLayer( fd.metric && ['json', 'geohash', 'zipcode'].includes(fd.line_type) ? setTooltipContent(fd) - : undefined; + : () => null; return new PolygonLayer({ - id: `path-layer-${fd.slice_id}`, + id: `path-layer-${fd.slice_id}` as const, data, - pickable: true, filled: fd.filled, stroked: fd.stroked, getPolygon: getPointsFromPolygon, @@ -150,33 +157,50 @@ export function getLayer( }); } -const propTypes = { - formData: PropTypes.object.isRequired, - payload: PropTypes.object.isRequired, - setControlValue: PropTypes.func.isRequired, - viewport: PropTypes.object.isRequired, - onAddFilter: PropTypes.func, - width: PropTypes.number.isRequired, - height: PropTypes.number.isRequired, +export type PolygonFormData = QueryFormData & { + break_points: string[]; + num_buckets: string; + linear_color_scheme: string | string[]; + opacity: number; +}; +export type DeckGLPolygonProps = { + formData: PolygonFormData; + payload: JsonObject; + setControlValue: (control: string, value: JsonValue) => void; + viewport: Viewport; + onAddFilter: HandlerFunction; + width: number; + height: number; }; -const defaultProps = { - onAddFilter() {}, +export type DeckGLPolygonState = { + lastClick: number; + viewport: Viewport; + formData: PolygonFormData; + selected: JsonObject[]; }; -class DeckGLPolygon extends React.Component { - containerRef = React.createRef(); +class DeckGLPolygon extends React.PureComponent< + DeckGLPolygonProps, + DeckGLPolygonState +> { + containerRef = React.createRef(); - constructor(props) { + constructor(props: DeckGLPolygonProps) { super(props); - this.state = DeckGLPolygon.getDerivedStateFromProps(props); + this.state = DeckGLPolygon.getDerivedStateFromProps( + props, + ) as DeckGLPolygonState; this.getLayers = this.getLayers.bind(this); this.onSelect = this.onSelect.bind(this); } - static getDerivedStateFromProps(props, state) { + static getDerivedStateFromProps( + props: DeckGLPolygonProps, + state?: DeckGLPolygonState, + ) { const { width, height, formData, payload } = props; // the state is computed only from the payload; if it hasn't changed, do @@ -205,10 +229,10 @@ class DeckGLPolygon extends React.Component { }; } - onSelect(polygon) { + onSelect(polygon: JsonObject) { const { formData, onAddFilter } = this.props; - const now = new Date(); + const now = new Date().getDate(); const doubleClick = now - this.state.lastClick <= DOUBLE_CLICK_THRESHOLD; // toggle selected polygons @@ -237,8 +261,6 @@ class DeckGLPolygon extends React.Component { return []; } - const filters = []; - const layer = getLayer( this.props.formData, this.props.payload, @@ -246,13 +268,12 @@ class DeckGLPolygon extends React.Component { this.setTooltip, this.state.selected, this.onSelect, - filters, ); return [layer]; } - setTooltip = tooltip => { + setTooltip = (tooltip: TooltipProps['tooltip']) => { const { current } = this.containerRef; if (current) { current.setTooltip(tooltip); @@ -264,13 +285,14 @@ class DeckGLPolygon extends React.Component { const fd = formData; const metricLabel = fd.metric ? fd.metric.label || fd.metric : null; - const accessor = d => d[metricLabel]; + const accessor = (d: JsonObject) => d[metricLabel]; const buckets = getBuckets(formData, payload.data.features, accessor); return (
    d.position); } -function setTooltipContent(formData, verboseMap) { - return o => { +function setTooltipContent( + formData: QueryFormData, + verboseMap?: Record, +) { + return (o: JsonObject) => { const label = verboseMap?.[formData.point_radius_fixed.value] || getMetricLabel(formData.point_radius_fixed?.value); @@ -56,14 +66,14 @@ function setTooltipContent(formData, verboseMap) { } export function getLayer( - formData, - payload, - onAddFilter, - setTooltip, - datasource, + formData: QueryFormData, + payload: JsonObject, + onAddFilter: () => void, + setTooltip: (tooltip: TooltipProps['tooltip']) => void, + datasource: Datasource, ) { const fd = formData; - const dataWithRadius = payload.data.features.map(d => { + const dataWithRadius = payload.data.features.map((d: JsonObject) => { let radius = unitToRadius(fd.point_unit, d.radius) || 10; if (fd.multiplier) { radius *= fd.multiplier; @@ -78,13 +88,13 @@ export function getLayer( }); return new ScatterplotLayer({ - id: `scatter-layer-${fd.slice_id}`, + id: `scatter-layer-${fd.slice_id}` as const, data: dataWithRadius, fp64: true, getFillColor: d => d.color, getRadius: d => d.radius, - radiusMinPixels: Number(fd.min_radius) || null, - radiusMaxPixels: Number(fd.max_radius) || null, + radiusMinPixels: Number(fd.min_radius) || undefined, + radiusMaxPixels: Number(fd.max_radius) || undefined, stroked: false, ...commonLayerProps( fd, diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/index.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/index.ts similarity index 100% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/index.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/index.ts diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/Screengrid.jsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/Screengrid.tsx similarity index 70% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/Screengrid.jsx rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/Screengrid.tsx index e3aa934fa1ad0..173770c6c1aac 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/Screengrid.jsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Screengrid/Screengrid.tsx @@ -21,21 +21,25 @@ /* eslint no-underscore-dangle: ["error", { "allow": ["", "__timestamp"] }] */ import React from 'react'; -import PropTypes from 'prop-types'; -import { ScreenGridLayer } from 'deck.gl'; -import { t } from '@superset-ui/core'; +import { ScreenGridLayer } from 'deck.gl/typed'; +import { JsonObject, JsonValue, QueryFormData, t } from '@superset-ui/core'; +import { noop } from 'lodash'; import sandboxedEval from '../../utils/sandbox'; import { commonLayerProps } from '../common'; import TooltipRow from '../../TooltipRow'; // eslint-disable-next-line import/extensions -import fitViewport from '../../utils/fitViewport'; -import { DeckGLContainerStyledWrapper } from '../../DeckGLContainer'; - -function getPoints(data) { +import fitViewport, { Viewport } from '../../utils/fitViewport'; +import { + DeckGLContainer, + DeckGLContainerStyledWrapper, +} from '../../DeckGLContainer'; +import { TooltipProps } from '../../components/Tooltip'; + +function getPoints(data: JsonObject[]) { return data.map(d => d.position); } -function setTooltipContent(o) { +function setTooltipContent(o: JsonObject) { return (
    void, + setTooltip: (tooltip: TooltipProps['tooltip']) => void, ) { const fd = formData; const c = fd.color_picker; - let data = payload.data.features.map(d => ({ + let data = payload.data.features.map((d: JsonObject) => ({ ...d, color: [c.r, c.g, c.b, 255 * c.a], })); @@ -74,18 +75,11 @@ export function getLayer( data = jsFnMutator(data); } - if (filters != null) { - filters.forEach(f => { - data = data.filter(x => f(x)); - }); - } - // Passing a layer creator function instead of a layer since the // layer needs to be regenerated at each render return new ScreenGridLayer({ - id: `screengrid-layer-${fd.slice_id}`, + id: `screengrid-layer-${fd.slice_id}` as const, data, - pickable: true, cellSizePixels: fd.grid_size, minColor: [c.r, c.g, c.b, 0], maxColor: [c.r, c.g, c.b, 255 * c.a], @@ -95,31 +89,41 @@ export function getLayer( }); } -const propTypes = { - formData: PropTypes.object.isRequired, - payload: PropTypes.object.isRequired, - setControlValue: PropTypes.func.isRequired, - viewport: PropTypes.object.isRequired, - onAddFilter: PropTypes.func, - width: PropTypes.number.isRequired, - height: PropTypes.number.isRequired, +export type DeckGLScreenGridProps = { + formData: QueryFormData; + payload: JsonObject; + setControlValue: (control: string, value: JsonValue) => void; + viewport: Viewport; + width: number; + height: number; + onAddFilter: () => void; }; -const defaultProps = { - onAddFilter() {}, + +export type DeckGLScreenGridState = { + viewport: Viewport; + formData: QueryFormData; }; -class DeckGLScreenGrid extends React.PureComponent { - containerRef = React.createRef(); +class DeckGLScreenGrid extends React.PureComponent< + DeckGLScreenGridProps, + DeckGLScreenGridState +> { + containerRef = React.createRef(); - constructor(props) { + constructor(props: DeckGLScreenGridProps) { super(props); - this.state = DeckGLScreenGrid.getDerivedStateFromProps(props); + this.state = DeckGLScreenGrid.getDerivedStateFromProps( + props, + ) as DeckGLScreenGridState; this.getLayers = this.getLayers.bind(this); } - static getDerivedStateFromProps(props, state) { + static getDerivedStateFromProps( + props: DeckGLScreenGridProps, + state?: DeckGLScreenGridState, + ) { // the state is computed only from the payload; if it hasn't changed, do // not recompute state since this would reset selections and/or the play // slider position due to changes in form controls @@ -142,27 +146,22 @@ class DeckGLScreenGrid extends React.PureComponent { return { viewport, - selected: [], - lastClick: 0, - formData: props.payload.form_data, + formData: props.payload.form_data as QueryFormData, }; } getLayers() { - const filters = []; - const layer = getLayer( this.props.formData, this.props.payload, - this.props.onAddFilter, + noop, this.setTooltip, - filters, ); return [layer]; } - setTooltip = tooltip => { + setTooltip = (tooltip: TooltipProps['tooltip']) => { const { current } = this.containerRef; if (current) { current.setTooltip(tooltip); @@ -175,6 +174,7 @@ class DeckGLScreenGrid extends React.PureComponent { return (
    void, + setTooltipContent: (content: JsonObject) => ReactNode, + onSelect?: (value: JsonValue) => void, ) { const fd = formData; let onHover; @@ -32,7 +35,7 @@ export function commonLayerProps( tooltipContentGenerator = sandboxedEval(fd.js_tooltip); } if (tooltipContentGenerator) { - onHover = o => { + onHover = (o: JsonObject) => { if (o.picked) { setTooltip({ content: tooltipContentGenerator(o), @@ -42,16 +45,21 @@ export function commonLayerProps( } else { setTooltip(null); } + return true; }; } let onClick; if (fd.js_onclick_href) { - onClick = o => { + onClick = (o: any) => { const href = sandboxedEval(fd.js_onclick_href)(o); window.open(href); + return true; }; } else if (fd.table_filter && onSelect !== undefined) { - onClick = o => onSelect(o.object[fd.line_column]); + onClick = (o: any) => { + onSelect(o.object[fd.line_column]); + return true; + }; } return { @@ -68,17 +76,23 @@ const percentiles = { p99: 0.99, }; -/* Get an a stat function that operates on arrays, aligns with control=js_agg_function */ -export function getAggFunc(type = 'sum', accessor = null) { +/* Get a stat function that operates on arrays, aligns with control=js_agg_function */ +export function getAggFunc( + type = 'sum', + accessor: ((object: any) => number | undefined) | null = null, +) { if (type === 'count') { - return arr => arr.length; + return (arr: number[]) => arr.length; } - let d3func; + let d3func: ( + iterable: Array, + accessor?: (object: JsonObject) => number | undefined, + ) => number[] | number | undefined; if (type in percentiles) { - d3func = (arr, acc) => { + d3func = (arr, acc: (object: JsonObject) => number | undefined) => { let sortedArr; if (accessor) { - sortedArr = arr.sort((o1, o2) => + sortedArr = arr.sort((o1: JsonObject, o2: JsonObject) => d3array.ascending(accessor(o1), accessor(o2)), ); } else { @@ -91,8 +105,8 @@ export function getAggFunc(type = 'sum', accessor = null) { d3func = d3array[type]; } if (!accessor) { - return arr => d3func(arr); + return (arr: JsonObject[]) => d3func(arr); } - return arr => d3func(arr.map(x => accessor(x))); + return (arr: JsonObject[]) => d3func(arr.map(x => accessor(x))); } diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/index.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/index.ts similarity index 100% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/index.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/index.ts diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils.js b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils.ts similarity index 62% rename from superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils.js rename to superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils.ts index 4de17a9309b43..aac2a739e69f6 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils.js +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils.ts @@ -18,19 +18,35 @@ * under the License. */ import { extent } from 'd3-array'; -import { scaleThreshold } from 'd3-scale'; +import { ScaleLinear, ScaleThreshold, scaleThreshold } from 'd3-scale'; import { getSequentialSchemeRegistry, + JsonObject, + QueryFormData, SequentialScheme, } from '@superset-ui/core'; +import { isNumber } from 'lodash'; import { hexToRGB } from './utils/colors'; const DEFAULT_NUM_BUCKETS = 10; +export type Buckets = { + break_points: string[]; + num_buckets: string; +}; + +export type BucketsWithColorScale = Buckets & { + linear_color_scheme: string | string[]; + opacity: number; +}; + export function getBreakPoints( - { break_points: formDataBreakPoints, num_buckets: formDataNumBuckets }, - features, - accessor, + { + break_points: formDataBreakPoints, + num_buckets: formDataNumBuckets, + }: Buckets, + features: JsonObject[], + accessor: (value: JsonObject) => number | undefined, ) { if (!features) { return []; @@ -40,23 +56,33 @@ export function getBreakPoints( const numBuckets = formDataNumBuckets ? parseInt(formDataNumBuckets, 10) : DEFAULT_NUM_BUCKETS; - const [minValue, maxValue] = extent(features, accessor); - if (minValue === undefined) { + const [minValue, maxValue] = extent( + features, + accessor, + ).map((value: number | string | undefined) => + typeof value === 'string' ? parseFloat(value) : value, + ); + if (minValue === undefined || maxValue === undefined) { return []; } const delta = (maxValue - minValue) / numBuckets; const precision = delta === 0 ? 0 : Math.max(0, Math.ceil(Math.log10(1 / delta))); - const extraBucket = maxValue > maxValue.toFixed(precision) ? 1 : 0; + const extraBucket = + maxValue > parseFloat(maxValue.toFixed(precision)) ? 1 : 0; const startValue = - minValue < minValue.toFixed(precision) ? minValue - 1 : minValue; + minValue < parseFloat(minValue.toFixed(precision)) + ? minValue - 1 + : minValue; return new Array(numBuckets + 1 + extraBucket) - .fill() + .fill(0) .map((_, i) => (startValue + i * delta).toFixed(precision)); } - return formDataBreakPoints.sort((a, b) => parseFloat(a) - parseFloat(b)); + return formDataBreakPoints.sort( + (a: string, b: string) => parseFloat(a) - parseFloat(b), + ); } export function getBreakPointColorScaler( @@ -65,9 +91,9 @@ export function getBreakPointColorScaler( num_buckets: formDataNumBuckets, linear_color_scheme: linearColorScheme, opacity, - }, - features, - accessor, + }: BucketsWithColorScale, + features: JsonObject[], + accessor: (value: JsonObject) => number | undefined, ) { const breakPoints = formDataBreakPoints || formDataNumBuckets @@ -87,8 +113,11 @@ export function getBreakPointColorScaler( }) : getSequentialSchemeRegistry().get(linearColorScheme); - let scaler; - let maskPoint; + if (!colorScheme) { + return null; + } + let scaler: ScaleLinear | ScaleThreshold; + let maskPoint: (v: number | undefined) => boolean; if (breakPoints !== null) { // bucket colors into discrete colors const n = breakPoints.length - 1; @@ -103,17 +132,29 @@ export function getBreakPointColorScaler( bucketedColors.unshift(first); bucketedColors.push(last); - const points = breakPoints.map(p => parseFloat(p)); - scaler = scaleThreshold().domain(points).range(bucketedColors); - maskPoint = value => value > breakPoints[n] || value < breakPoints[0]; + const points = breakPoints.map(parseFloat); + scaler = scaleThreshold() + .domain(points) + .range(bucketedColors); + maskPoint = value => !!value && (value > points[n] || value < points[0]); } else { // interpolate colors linearly - scaler = colorScheme.createLinearScale(extent(features, accessor)); + const linearScaleDomain = extent(features, accessor); + if (!linearScaleDomain.some(isNumber)) { + scaler = colorScheme.createLinearScale(); + } else { + scaler = colorScheme.createLinearScale( + extent(features, accessor) as number[], + ); + } maskPoint = () => false; } - return d => { + return (d: JsonObject): [number, number, number, number] => { const v = accessor(d); + if (!v) { + return [0, 0, 0, 0]; + } const c = hexToRGB(scaler(v)); if (maskPoint(v)) { c[3] = 0; @@ -125,7 +166,11 @@ export function getBreakPointColorScaler( }; } -export function getBuckets(fd, features, accessor) { +export function getBuckets( + fd: QueryFormData & BucketsWithColorScale, + features: JsonObject[], + accessor: (value: JsonObject) => number | undefined, +) { const breakPoints = getBreakPoints(fd, features, accessor); const colorScaler = getBreakPointColorScaler(fd, features, accessor); const buckets = {}; @@ -136,7 +181,7 @@ export function getBuckets(fd, features, accessor) { // fix polygon doesn't show const metricLabel = fd.metric ? fd.metric.label || fd.metric : null; buckets[range] = { - color: colorScaler({ [metricLabel || fd.metric]: mid }), + color: colorScaler?.({ [metricLabel || fd.metric]: mid }), enabled: true, }; }); diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/colors.ts b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/colors.ts index d7515d5d9babb..7f562dbca2303 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/colors.ts +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/colors.ts @@ -19,7 +19,10 @@ import { rgb } from 'd3-color'; // eslint-disable-next-line import/prefer-default-export -export function hexToRGB(hex: string | undefined, alpha = 255) { +export function hexToRGB( + hex: string | undefined, + alpha = 255, +): [number, number, number, number] { if (!hex) { return [0, 0, 0, alpha]; } diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/explore.ts b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/explore.ts index 84e3a043a7b10..5d3ba876ee440 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/explore.ts +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/explore.ts @@ -37,9 +37,9 @@ export function getExploreLongUrl( endpointType: string, allowOverflow = true, extraSearch = {}, -): string | null { +): string | undefined { if (!formData.datasource) { - return null; + return undefined; } const uri = new URI('/'); diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/fitViewport.ts b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/fitViewport.ts index c8e2487b90c16..3ea9024297566 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/fitViewport.ts +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/utils/fitViewport.ts @@ -49,7 +49,7 @@ export default function fitViewport( offset, padding = 20, }: FitViewportOptions, -) { +): Viewport { const { bearing, pitch } = originalViewPort; const bounds = computeBoundsFromPoints(points); diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/types/external.d.ts b/superset-frontend/plugins/legacy-preset-chart-deckgl/types/external.d.ts index 02c511cbc9b3f..9543307b69d60 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/types/external.d.ts +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/types/external.d.ts @@ -16,32 +16,5 @@ * specific language governing permissions and limitations * under the License. */ -declare module '@math.gl/web-mercator'; -declare module 'deck.gl' { - import { Layer, LayerProps } from '@deck.gl/core'; - - interface HeatmapLayerProps extends LayerProps { - id?: string; - data?: T[]; - getPosition?: (d: T) => number[] | null | undefined; - getWeight?: (d: T) => number | null | undefined; - radiusPixels?: number; - colorRange?: number[][]; - threshold?: number; - intensity?: number; - aggregation?: string; - } - - export class HeatmapLayer extends Layer< - T, - HeatmapLayerProps - > { - constructor(props: HeatmapLayerProps); - } -} - -declare module '*.png' { - const value: any; - export default value; -} +declare module '*.png'; From 901c1ff424af0415661fa17bd0d56f5c35ad9f7f Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Wed, 9 Aug 2023 15:55:30 +0200 Subject: [PATCH 5/6] Change lodash import --- .../plugins/legacy-preset-chart-deckgl/src/Multi/Multi.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.tsx index 2138ac86824a2..5cfa02f704561 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.tsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/Multi/Multi.tsx @@ -20,7 +20,7 @@ * under the License. */ import React from 'react'; -import _ from 'lodash'; +import { isEqual } from 'lodash'; import { Datasource, HandlerFunction, @@ -73,7 +73,7 @@ class DeckMulti extends React.PureComponent { UNSAFE_componentWillReceiveProps(nextProps: DeckMultiProps) { const { formData, payload } = nextProps; - const hasChanges = !_.isEqual( + const hasChanges = !isEqual( this.props.formData.deck_slices, nextProps.formData.deck_slices, ); From 1c962068cd1801af04a5c1e5b2cd63b91bcb9625 Mon Sep 17 00:00:00 2001 From: Kamil Gabryjelski Date: Mon, 28 Aug 2023 12:31:54 +0200 Subject: [PATCH 6/6] Update lastUpdate type --- .../plugins/legacy-preset-chart-deckgl/src/DeckGLContainer.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/DeckGLContainer.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/DeckGLContainer.tsx index cc95d74f3450f..29672febfb154 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/DeckGLContainer.tsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/DeckGLContainer.tsx @@ -44,7 +44,7 @@ export type DeckGLContainerProps = { }; export type DeckGLContainerState = { - lastUpdate?: number | null; + lastUpdate: number | null; viewState: Viewport; tooltip: TooltipProps['tooltip']; timer: ReturnType; @@ -63,6 +63,7 @@ export class DeckGLContainer extends React.Component< timer: setInterval(this.tick, TICK), tooltip: null, viewState: props.viewport, + lastUpdate: null, }; }