@deck.gl/carto 9.0.36 → 9.0.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cartoRasterTile-worker.js +1 -1
- package/dist/cartoSpatialTile-worker.js +1 -1
- package/dist/cartoVectorTile-worker.js +1 -1
- package/dist/dist.dev.js +53 -17
- package/dist/index.cjs +47 -13
- package/dist/index.cjs.map +3 -3
- package/dist/layers/post-process-utils.d.ts +14 -9
- package/dist/layers/post-process-utils.d.ts.map +1 -1
- package/dist/layers/post-process-utils.js +24 -0
- package/dist/layers/raster-layer-vertex.glsl.d.ts +1 -1
- package/dist/layers/raster-layer-vertex.glsl.d.ts.map +1 -1
- package/dist/layers/raster-layer-vertex.glsl.js +7 -7
- package/dist/layers/raster-layer.d.ts.map +1 -1
- package/dist/layers/raster-layer.js +14 -2
- package/dist/layers/raster-tile-layer.d.ts.map +1 -1
- package/dist/layers/raster-tile-layer.js +12 -1
- package/dist/layers/schema/carto-raster-tile-loader.js +1 -1
- package/dist/layers/schema/carto-spatial-tile-loader.js +1 -1
- package/dist/layers/schema/carto-vector-tile-loader.js +1 -1
- package/dist.min.js +18 -15
- package/package.json +2 -2
- package/src/layers/post-process-utils.ts +30 -1
- package/src/layers/raster-layer-vertex.glsl.ts +10 -8
- package/src/layers/raster-layer.ts +15 -2
- package/src/layers/raster-tile-layer.ts +21 -2
package/dist/index.cjs.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["index.js", "layers/cluster-tile-layer.js", "layers/cluster-utils.js", "constants.js", "layers/quadbin-tileset-2d.js", "layers/quadbin-utils.js", "layers/schema/fast-pbf.js", "layers/schema/carto-tile.js", "layers/schema/carto-spatial-tile.js", "layers/schema/tile-loader-utils.js", "utils.js", "layers/schema/spatialjson-utils.js", "layers/schema/carto-spatial-tile-loader.js", "layers/utils.js", "layers/h3-tile-layer.js", "layers/h3-tileset-2d.js", "layers/spatial-index-tile-layer.js", "layers/schema/carto-raster-tile.js", "layers/schema/carto-raster-tile-loader.js", "layers/heatmap-tile-layer.js", "layers/heatmap.js", "layers/post-process-utils.js", "layers/quadbin-tile-layer.js", "layers/quadbin-layer.js", "layers/point-label-layer.js", "layers/raster-tile-layer.js", "layers/raster-layer.js", "layers/raster-layer-vertex.glsl.js", "layers/vector-tile-layer.js", "layers/schema/carto-properties-tile.js", "layers/schema/carto-properties-tile-loader.js", "layers/schema/carto-vector-tile-loader.js", "api/carto-api-error.js", "basemap.js", "style/color-bins-style.js", "style/palette.js", "style/utils.js", "style/color-categories-style.js", "style/color-continuous-style.js", "api/common.js", "api/endpoints.js", "api/request-with-parameters.js", "sources/base-source.js", "sources/boundary-query-source.js", "sources/boundary-table-source.js", "sources/h3-query-source.js", "sources/h3-table-source.js", "sources/h3-tileset-source.js", "sources/raster-source.js", "sources/quadbin-query-source.js", "sources/quadbin-table-source.js", "sources/quadbin-tileset-source.js", "sources/vector-query-source.js", "sources/vector-table-source.js", "sources/vector-tileset-source.js", "api/parse-map.js", "api/layer-map.js", "api/basemap.js", "api/fetch-map.js", "api/query.js"],
|
|
4
|
-
"sourcesContent": ["// CARTO Layers\nimport { default as ClusterTileLayer } from \"./layers/cluster-tile-layer.js\";\nimport { default as H3TileLayer } from \"./layers/h3-tile-layer.js\";\nimport { default as HeatmapTileLayer } from \"./layers/heatmap-tile-layer.js\";\nimport { default as _PointLabelLayer } from \"./layers/point-label-layer.js\";\nimport { default as QuadbinTileLayer } from \"./layers/quadbin-tile-layer.js\";\nimport { default as RasterTileLayer } from \"./layers/raster-tile-layer.js\";\nimport { default as VectorTileLayer } from \"./layers/vector-tile-layer.js\";\n// Exports for playground/bindings\nconst CARTO_LAYERS = {\n ClusterTileLayer,\n H3TileLayer,\n HeatmapTileLayer,\n _PointLabelLayer,\n QuadbinTileLayer,\n RasterTileLayer,\n VectorTileLayer\n};\nexport { CARTO_LAYERS, ClusterTileLayer, H3TileLayer, HeatmapTileLayer, _PointLabelLayer, QuadbinTileLayer, RasterTileLayer, VectorTileLayer };\n// Internal Layers\nexport { default as _QuadbinLayer } from \"./layers/quadbin-layer.js\";\nexport { default as _RasterLayer } from \"./layers/raster-layer.js\";\nexport { default as _SpatialIndexTileLayer } from \"./layers/spatial-index-tile-layer.js\";\n// Helpers\nexport { default as BASEMAP, GOOGLE_BASEMAPS as _GOOGLE_BASEMAPS, getStyleUrl as _getStyleUrl, fetchStyle as _fetchStyle, applyLayerGroupFilters as _applyLayerGroupFilters, STYLE_LAYER_GROUPS as _STYLE_LAYER_GROUPS } from \"./basemap.js\";\nexport { default as colorBins } from \"./style/color-bins-style.js\";\nexport { default as colorCategories } from \"./style/color-categories-style.js\";\nexport { default as colorContinuous } from \"./style/color-continuous-style.js\";\nexport { CartoAPIError, fetchMap, query } from \"./api/index.js\";\nexport { fetchBasemapProps } from \"./api/basemap.js\";\nimport { boundaryQuerySource, boundaryTableSource, h3QuerySource, h3TableSource, h3TilesetSource, rasterSource, quadbinQuerySource, quadbinTableSource, quadbinTilesetSource, vectorQuerySource, vectorTableSource, vectorTilesetSource, SOURCE_DEFAULTS } from \"./sources/index.js\";\nconst CARTO_SOURCES = {\n boundaryQuerySource,\n boundaryTableSource,\n h3QuerySource,\n h3TableSource,\n h3TilesetSource,\n rasterSource,\n quadbinQuerySource,\n quadbinTableSource,\n quadbinTilesetSource,\n vectorQuerySource,\n vectorTableSource,\n vectorTilesetSource\n};\nexport { boundaryQuerySource, boundaryTableSource, h3QuerySource, h3TableSource, h3TilesetSource, rasterSource, quadbinQuerySource, quadbinTableSource, quadbinTilesetSource, vectorQuerySource, vectorTableSource, vectorTilesetSource, CARTO_SOURCES, SOURCE_DEFAULTS };\n", "import { GeoJsonLayer } from '@deck.gl/layers';\nimport { TileLayer } from '@deck.gl/geo-layers';\nimport { registerLoaders } from '@loaders.gl/core';\nimport { binaryToGeojson } from '@loaders.gl/gis';\nimport { CompositeLayer, _deepEqual as deepEqual } from '@deck.gl/core';\nimport { aggregateTile, clustersToBinary, computeAggregationStats, extractAggregationProperties } from \"./cluster-utils.js\";\nimport { DEFAULT_TILE_SIZE } from \"../constants.js\";\nimport QuadbinTileset2D from \"./quadbin-tileset-2d.js\";\nimport { getQuadbinPolygon } from \"./quadbin-utils.js\";\nimport CartoSpatialTileLoader from \"./schema/carto-spatial-tile-loader.js\";\nimport { injectAccessToken, TilejsonPropType } from \"./utils.js\";\nregisterLoaders([CartoSpatialTileLoader]);\nconst defaultProps = {\n data: TilejsonPropType,\n clusterLevel: { type: 'number', value: 5, min: 1 },\n getPosition: {\n type: 'accessor',\n value: ({ id }) => getQuadbinPolygon(id, 0.5).slice(2, 4)\n },\n getWeight: { type: 'accessor', value: 1 },\n refinementStrategy: 'no-overlap',\n tileSize: DEFAULT_TILE_SIZE\n};\nclass ClusterGeoJsonLayer extends TileLayer {\n initializeState() {\n super.initializeState();\n this.state.aggregationCache = new WeakMap();\n }\n renderLayers() {\n const visibleTiles = this.state.tileset?.tiles.filter((tile) => {\n return tile.isLoaded && tile.content && this.state.tileset.isTileVisible(tile);\n });\n if (!visibleTiles?.length) {\n return null;\n }\n visibleTiles.sort((a, b) => b.zoom - a.zoom);\n const { zoom } = this.context.viewport;\n const { clusterLevel, getPosition, getWeight } = this.props;\n const { aggregationCache } = this.state;\n const properties = extractAggregationProperties(visibleTiles[0]);\n const data = [];\n let needsUpdate = false;\n for (const tile of visibleTiles) {\n // Calculate aggregation based on viewport zoom\n const overZoom = Math.round(zoom - tile.zoom);\n const aggregationLevels = Math.round(clusterLevel) - overZoom;\n let tileAggregationCache = aggregationCache.get(tile.content);\n if (!tileAggregationCache) {\n tileAggregationCache = new Map();\n aggregationCache.set(tile.content, tileAggregationCache);\n }\n const didAggregate = aggregateTile(tile, tileAggregationCache, aggregationLevels, properties, getPosition, getWeight);\n needsUpdate || (needsUpdate = didAggregate);\n data.push(...tileAggregationCache.get(aggregationLevels));\n }\n data.sort((a, b) => Number(b.count - a.count));\n const clusterIds = data?.map((tile) => tile.id);\n needsUpdate || (needsUpdate = !deepEqual(clusterIds, this.state.clusterIds, 1));\n this.setState({ clusterIds });\n if (needsUpdate) {\n const stats = computeAggregationStats(data, properties);\n const binaryData = clustersToBinary(data);\n binaryData.points.attributes = { stats };\n this.setState({ data: binaryData });\n }\n const props = {\n ...this.props,\n id: 'clusters',\n data: this.state.data,\n dataComparator: (data, oldData) => {\n const newIds = data?.points?.properties?.map((tile) => tile.id);\n const oldIds = oldData?.points?.properties?.map((tile) => tile.id);\n return deepEqual(newIds, oldIds, 1);\n }\n };\n return new GeoJsonLayer(this.getSubLayerProps(props));\n }\n getPickingInfo(params) {\n const info = params.info;\n if (info.index !== -1) {\n const { data } = params.sourceLayer.props;\n info.object = binaryToGeojson(data, {\n globalFeatureId: info.index\n });\n }\n return info;\n }\n _updateAutoHighlight(info) {\n for (const layer of this.getSubLayers()) {\n layer.updateAutoHighlight(info);\n }\n }\n filterSubLayer() {\n return true;\n }\n}\nClusterGeoJsonLayer.layerName = 'ClusterGeoJsonLayer';\nClusterGeoJsonLayer.defaultProps = defaultProps;\n// Adapter layer around ClusterLayer that converts tileJSON into TileLayer API\nclass ClusterTileLayer extends CompositeLayer {\n getLoadOptions() {\n const loadOptions = super.getLoadOptions() || {};\n const tileJSON = this.props.data;\n injectAccessToken(loadOptions, tileJSON.accessToken);\n loadOptions.cartoSpatialTile = { ...loadOptions.cartoSpatialTile, scheme: 'quadbin' };\n return loadOptions;\n }\n renderLayers() {\n const tileJSON = this.props.data;\n if (!tileJSON)\n return null;\n const { tiles: data, maxresolution: maxZoom } = tileJSON;\n return [\n // @ts-ignore\n new ClusterGeoJsonLayer(this.props, {\n id: `cluster-geojson-layer-${this.props.id}`,\n data,\n // TODO: Tileset2D should be generic over TileIndex type\n TilesetClass: QuadbinTileset2D,\n maxZoom,\n loadOptions: this.getLoadOptions()\n })\n ];\n }\n}\nClusterTileLayer.layerName = 'ClusterTileLayer';\nClusterTileLayer.defaultProps = defaultProps;\nexport default ClusterTileLayer;\n", "import { cellToParent } from 'quadbin';\nimport { log } from '@deck.gl/core';\n/**\n * Aggregates tile by specified properties, caching result in tile.userData\n *\n * @returns true if data was aggregated, false if cache used\n */\nexport function aggregateTile(tile, tileAggregationCache, aggregationLevels, properties = [], getPosition, getWeight) {\n if (!tile.content)\n return false;\n // Aggregate on demand and cache result\n if (!tile.userData)\n tile.userData = {};\n const cell0 = tileAggregationCache.get(aggregationLevels)?.[0];\n if (cell0) {\n // Have already aggregated this tile\n if (properties.every(property => property.name in cell0)) {\n // Use cached result\n return false;\n }\n // Aggregated properties have changed, re-aggregate\n tileAggregationCache.clear();\n }\n const out = {};\n for (const cell of tile.content) {\n let id = cell.id;\n const position = typeof getPosition === 'function' ? getPosition(cell, {}) : getPosition;\n // Aggregate by parent rid\n for (let i = 0; i < aggregationLevels - 1; i++) {\n id = cellToParent(id);\n }\n // Unfortunately TS doesn't support Record<bigint, any>\n // https://github.com/microsoft/TypeScript/issues/46395\n const parentId = Number(id);\n if (!(parentId in out)) {\n out[parentId] = { id, count: 0, position: [0, 0] };\n for (const { name, aggregation } of properties) {\n if (aggregation === 'any') {\n // Just pick first value for ANY\n out[parentId][name] = cell.properties[name];\n }\n else {\n out[parentId][name] = 0;\n }\n }\n }\n // Layout props\n const prevTotalW = out[parentId].count;\n out[parentId].count += typeof getWeight === 'function' ? getWeight(cell, {}) : getWeight;\n const totalW = out[parentId].count;\n const W = totalW - prevTotalW;\n out[parentId].position[0] = (prevTotalW * out[parentId].position[0] + W * position[0]) / totalW;\n out[parentId].position[1] = (prevTotalW * out[parentId].position[1] + W * position[1]) / totalW;\n // Re-aggregate other properties so clusters can be styled\n for (const { name, aggregation } of properties) {\n const prevValue = out[parentId][name];\n const value = cell.properties[name];\n if (aggregation === 'average') {\n out[parentId][name] = (prevTotalW * prevValue + W * value) / totalW;\n }\n else if (aggregation === 'count' || aggregation === 'sum') {\n out[parentId][name] = prevValue + value;\n }\n else if (aggregation === 'max') {\n out[parentId][name] = Math.max(prevValue, value);\n }\n else if (aggregation === 'min') {\n out[parentId][name] = Math.min(prevValue, value);\n }\n }\n }\n tileAggregationCache.set(aggregationLevels, Object.values(out));\n return true;\n}\nexport function extractAggregationProperties(tile) {\n const properties = [];\n const validAggregations = ['any', 'average', 'count', 'min', 'max', 'sum'];\n for (const name of Object.keys(tile.content[0].properties)) {\n let aggregation = name.split('_').pop().toLowerCase();\n if (!validAggregations.includes(aggregation)) {\n log.warn(`No valid aggregation present in ${name} property`)();\n aggregation = 'any';\n }\n properties.push({ name: name, aggregation });\n }\n return properties;\n}\nexport function computeAggregationStats(data, properties) {\n const stats = {};\n for (const { name, aggregation } of properties) {\n stats[name] = { min: Infinity, max: -Infinity };\n if (aggregation !== 'any') {\n for (const d of data) {\n stats[name].min = Math.min(stats[name].min, d[name]);\n stats[name].max = Math.max(stats[name].max, d[name]);\n }\n }\n }\n return stats;\n}\nconst EMPTY_UINT16ARRAY = new Uint16Array();\nconst EMPTY_BINARY_PROPS = {\n positions: { value: new Float32Array(), size: 2 },\n properties: [],\n numericProps: {},\n featureIds: { value: EMPTY_UINT16ARRAY, size: 1 },\n globalFeatureIds: { value: EMPTY_UINT16ARRAY, size: 1 }\n};\nexport function clustersToBinary(data) {\n const positions = new Float32Array(data.length * 2);\n const featureIds = new Uint16Array(data.length);\n for (let i = 0; i < data.length; i++) {\n positions.set(data[i].position, 2 * i);\n featureIds[i] = i;\n }\n return {\n shape: 'binary-feature-collection',\n points: {\n type: 'Point',\n positions: { value: positions, size: 2 },\n properties: data,\n numericProps: {},\n featureIds: { value: featureIds, size: 1 },\n globalFeatureIds: { value: featureIds, size: 1 }\n },\n lines: {\n type: 'LineString',\n pathIndices: { value: EMPTY_UINT16ARRAY, size: 1 },\n ...EMPTY_BINARY_PROPS\n },\n polygons: {\n type: 'Polygon',\n polygonIndices: { value: EMPTY_UINT16ARRAY, size: 1 },\n primitivePolygonIndices: { value: EMPTY_UINT16ARRAY, size: 1 },\n ...EMPTY_BINARY_PROPS\n }\n };\n}\n", "export const DEFAULT_TILE_SIZE = 512;\nexport const DEFAULT_TILE_RESOLUTION = 0.5;\nexport const DEFAULT_AGGREGATION_RES_LEVEL_H3 = 4;\nexport const DEFAULT_AGGREGATION_RES_LEVEL_QUADBIN = 6;\n", "import { _Tileset2D as Tileset2D } from '@deck.gl/geo-layers';\nimport { bigIntToHex, cellToParent, cellToTile, getResolution, tileToCell } from 'quadbin';\nexport default class QuadbinTileset2D extends Tileset2D {\n // @ts-expect-error for spatial indices, TileSet2d should be parametrized by TileIndexT\n getTileIndices(opts) {\n return super\n .getTileIndices(opts)\n .map(tileToCell)\n .map(q => ({ q, i: bigIntToHex(q) }));\n }\n // @ts-expect-error TileIndex must be generic\n getTileId({ q, i }) {\n return i || bigIntToHex(q);\n }\n // @ts-expect-error TileIndex must be generic\n getTileMetadata({ q }) {\n return super.getTileMetadata(cellToTile(q));\n }\n // @ts-expect-error TileIndex must be generic\n getTileZoom({ q }) {\n return Number(getResolution(q));\n }\n // @ts-expect-error TileIndex must be generic\n getParentIndex({ q }) {\n return { q: cellToParent(q) };\n }\n}\n", "import { worldToLngLat } from '@math.gl/web-mercator';\nimport { cellToTile } from 'quadbin';\nconst TILE_SIZE = 512;\nexport function quadbinToOffset(quadbin) {\n const { x, y, z } = cellToTile(quadbin);\n const scale = TILE_SIZE / (1 << z);\n return [x * scale, TILE_SIZE - y * scale, scale];\n}\nexport function quadbinToWorldBounds(quadbin, coverage) {\n const [xOffset, yOffset, scale] = quadbinToOffset(quadbin);\n return [\n [xOffset, yOffset],\n [xOffset + coverage * scale, yOffset - coverage * scale]\n ];\n}\nexport function getQuadbinPolygon(quadbin, coverage = 1) {\n const [topLeft, bottomRight] = quadbinToWorldBounds(quadbin, coverage);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n", "// Optimized (100X speed improvement) reading function for binary data\nexport function readPackedTypedArray(TypedArray, pbf, obj) {\n const end = pbf.type === 2 ? pbf.readVarint() + pbf.pos : pbf.pos + 1;\n obj.value = new TypedArray(pbf.buf.buffer.slice(pbf.pos, end));\n pbf.pos = end;\n return obj.value;\n}\n", "import { readPackedTypedArray } from \"./fast-pbf.js\";\nclass KeyValueObjectReader {\n static read(pbf, end) {\n return pbf.readFields(KeyValueObjectReader._readField, { key: '', value: null }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.key = pbf.readString();\n else if (tag === 2)\n obj.value = pbf.readString();\n }\n}\n// Properties ========================================\nexport class PropertiesReader {\n static read(pbf, end) {\n return pbf.readFields(PropertiesReader._readField, {}, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1) {\n const { key, value } = KeyValueObjectReader.read(pbf, pbf.readVarint() + pbf.pos);\n obj[key] = value;\n }\n }\n}\nclass DoublesReader {\n static read(pbf, end) {\n const { value, size } = pbf.readFields(DoublesReader._readField, { value: [], size: 0 }, end);\n return { value, size };\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n readPackedTypedArray(Float64Array, pbf, obj);\n else if (tag === 2)\n obj.size = pbf.readVarint(true);\n }\n}\nclass IntsReader {\n static read(pbf, end) {\n const { value, size } = pbf.readFields(IntsReader._readField, { value: [], size: 0 }, end);\n return { value: new Uint32Array(value), size };\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n pbf.readPackedVarint(obj.value);\n else if (tag === 2)\n obj.size = pbf.readVarint(true);\n }\n}\nclass FieldsReader {\n static read(pbf, end) {\n return pbf.readFields(FieldsReader._readField, { id: 0 }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.id = pbf.readVarint();\n }\n}\nclass NumericPropReader {\n static read(pbf, end) {\n return pbf.readFields(NumericPropReader._readField, { value: [] }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n readPackedTypedArray(Float64Array, pbf, obj);\n }\n}\nexport class NumericPropKeyValueReader {\n static read(pbf, end) {\n return pbf.readFields(NumericPropKeyValueReader._readField, { key: '', value: null }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.key = pbf.readString();\n else if (tag === 2)\n obj.value = NumericPropReader.read(pbf, pbf.readVarint() + pbf.pos);\n }\n}\nclass PointsReader {\n static read(pbf, end) {\n return pbf.readFields(PointsReader._readField, {\n positions: null,\n globalFeatureIds: null,\n featureIds: null,\n properties: [],\n numericProps: {},\n fields: []\n }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.positions = DoublesReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 2)\n obj.globalFeatureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 3)\n obj.featureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 4)\n obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));\n else if (tag === 5) {\n const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);\n obj.numericProps[entry.key] = entry.value;\n }\n else if (tag === 6)\n obj.fields.push(FieldsReader.read(pbf, pbf.readVarint() + pbf.pos));\n }\n}\n// Lines ========================================\nclass LinesReader {\n static read(pbf, end) {\n return pbf.readFields(LinesReader._readField, {\n positions: null,\n pathIndices: null,\n globalFeatureIds: null,\n featureIds: null,\n properties: [],\n numericProps: {},\n fields: []\n }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.positions = DoublesReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 2)\n obj.pathIndices = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 3)\n obj.globalFeatureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 4)\n obj.featureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 5)\n obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));\n else if (tag === 6) {\n const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);\n obj.numericProps[entry.key] = entry.value;\n }\n else if (tag === 7)\n obj.fields.push(FieldsReader.read(pbf, pbf.readVarint() + pbf.pos));\n }\n}\nclass PolygonsReader {\n static read(pbf, end) {\n return pbf.readFields(PolygonsReader._readField, {\n positions: null,\n polygonIndices: null,\n globalFeatureIds: null,\n featureIds: null,\n primitivePolygonIndices: null,\n triangles: null,\n properties: [],\n numericProps: {},\n fields: []\n }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.positions = DoublesReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 2)\n obj.polygonIndices = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 3)\n obj.globalFeatureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 4)\n obj.featureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 5)\n obj.primitivePolygonIndices = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 6)\n obj.triangles = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 7)\n obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));\n else if (tag === 8) {\n const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);\n obj.numericProps[entry.key] = entry.value;\n }\n else if (tag === 9)\n obj.fields.push(FieldsReader.read(pbf, pbf.readVarint() + pbf.pos));\n }\n}\nexport class TileReader {\n static read(pbf, end) {\n return pbf.readFields(TileReader._readField, { points: null, lines: null, polygons: null }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.points = PointsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 2)\n obj.lines = LinesReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 3)\n obj.polygons = PolygonsReader.read(pbf, pbf.readVarint() + pbf.pos);\n }\n}\n", "import { readPackedTypedArray } from \"./fast-pbf.js\";\nimport { NumericPropKeyValueReader, PropertiesReader } from \"./carto-tile.js\";\n// Indices =====================================\nexport class IndicesReader {\n static read(pbf, end) {\n return pbf.readFields(IndicesReader._readField, { value: [] }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n readPackedTypedArray(BigUint64Array, pbf, obj);\n }\n}\nclass CellsReader {\n static read(pbf, end) {\n return pbf.readFields(CellsReader._readField, { indices: null, properties: [], numericProps: {} }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.indices = IndicesReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 2)\n obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));\n else if (tag === 3) {\n const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);\n obj.numericProps[entry.key] = entry.value;\n }\n }\n}\nexport class TileReader {\n static read(pbf, end) {\n return pbf.readFields(TileReader._readField, { scheme: 0, cells: null }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.scheme = pbf.readVarint();\n else if (tag === 2)\n obj.cells = CellsReader.read(pbf, pbf.readVarint() + pbf.pos);\n }\n}\n", "import Protobuf from 'pbf';\nexport function parsePbf(buffer, TileReader) {\n const pbf = new Protobuf(buffer);\n const tile = TileReader.read(pbf);\n return tile;\n}\n", "import { log } from '@deck.gl/core';\nexport function assert(condition, message) {\n log.assert(condition, message);\n}\n// Returns a Proxy object that allows accessing binary data\n// as if it were JSON properties\nexport function createBinaryProxy(data, index) {\n const { properties, numericProps } = data;\n return new Proxy(properties[index] || {}, {\n get(target, property) {\n if (property in numericProps) {\n return numericProps[property].value[index];\n }\n return target[property];\n },\n has(target, property) {\n return property in numericProps || property in target;\n },\n ownKeys(target) {\n return [...Object.keys(numericProps), ...Reflect.ownKeys(target)];\n },\n getOwnPropertyDescriptor(target, prop) {\n return { enumerable: true, configurable: true };\n }\n });\n}\nexport function getWorkerUrl(id, version) {\n // For local testing `yarn build-workers` and then host `modules/carto/dist/`\n // return `http://localhost:8081/dist/${id}-worker.js`;\n return `https://unpkg.com/@deck.gl/carto@${version}/dist/${id}-worker.js`;\n}\nexport function scaleIdentity() {\n let unknown;\n function scale(x) {\n return x === null ? unknown : x;\n }\n scale.invert = scale;\n scale.domain = scale.range = d => d;\n scale.unknown = u => {\n if (u) {\n unknown = u;\n }\n return unknown;\n };\n scale.copy = () => {\n const scaleCopy = scaleIdentity();\n scaleCopy.unknown(unknown);\n return scaleCopy;\n };\n return scale;\n}\nexport const isObject = x => x !== null && typeof x === 'object';\nexport const isPureObject = x => isObject(x) && x.constructor === {}.constructor;\n", "import { bigIntToHex } from 'quadbin';\nexport function binaryToSpatialjson(binary) {\n const { cells, scheme } = binary;\n const count = cells.indices.value.length;\n const spatial = [];\n for (let i = 0; i < count; i++) {\n const id = scheme === 'h3' ? bigIntToHex(cells.indices.value[i]) : cells.indices.value[i];\n const properties = { ...cells.properties[i] };\n for (const key of Object.keys(cells.numericProps)) {\n properties[key] = cells.numericProps[key].value[i];\n }\n spatial.push({ id, properties });\n }\n return spatial;\n}\n", "import { TileReader } from \"./carto-spatial-tile.js\";\nimport { parsePbf } from \"./tile-loader-utils.js\";\nimport { getWorkerUrl } from \"../../utils.js\";\nimport { binaryToSpatialjson } from \"./spatialjson-utils.js\";\nconst VERSION = typeof \"9.0.36\" !== 'undefined' ? \"9.0.36\" : 'latest';\nconst id = 'cartoSpatialTile';\nconst DEFAULT_OPTIONS = {\n cartoSpatialTile: {\n scheme: 'quadbin',\n workerUrl: getWorkerUrl(id, VERSION)\n }\n};\nconst CartoSpatialTileLoader = {\n name: 'CARTO Spatial Tile',\n version: VERSION,\n id,\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: ['application/vnd.carto-spatial-tile'],\n category: 'geometry',\n parse: async (arrayBuffer, options) => parseCartoSpatialTile(arrayBuffer, options),\n parseSync: parseCartoSpatialTile,\n worker: true,\n options: DEFAULT_OPTIONS\n};\nfunction parseCartoSpatialTile(arrayBuffer, options) {\n if (!arrayBuffer)\n return null;\n const tile = parsePbf(arrayBuffer, TileReader);\n const { cells } = tile;\n const scheme = options?.cartoSpatialTile?.scheme;\n const data = { cells, scheme };\n return binaryToSpatialjson(data);\n}\nexport default CartoSpatialTileLoader;\n", "import { log } from '@deck.gl/core';\nimport { _deepEqual as deepEqual } from '@deck.gl/core';\n/**\n * Adds access token to Authorization header in loadOptions\n */\nexport function injectAccessToken(loadOptions, accessToken) {\n if (!loadOptions?.fetch?.headers?.Authorization) {\n loadOptions.fetch = {\n ...loadOptions.fetch,\n headers: { ...loadOptions.fetch?.headers, Authorization: `Bearer ${accessToken}` }\n };\n }\n}\nexport function mergeBoundaryData(geometry, properties) {\n const mapping = {};\n for (const { geoid, ...rest } of properties.properties) {\n if (geoid in mapping) {\n log.warn('Duplicate geoid key in boundary mapping, using first occurance')();\n }\n else {\n mapping[geoid] = rest;\n }\n }\n for (const type of ['points', 'lines', 'polygons']) {\n const geom = geometry[type];\n if (geom.positions.value.length === 0) {\n continue;\n }\n geom.properties = geom.properties.map(({ geoid }) => mapping[geoid]);\n // numericProps need to be filled to match length of positions buffer\n const { positions, globalFeatureIds } = geom;\n let indices = null;\n if (type === 'lines')\n indices = geom.pathIndices.value;\n if (type === 'polygons')\n indices = geom.polygonIndices.value;\n const length = positions.value.length / positions.size;\n for (const key in properties.numericProps) {\n const sourceProp = properties.numericProps[key].value;\n const TypedArray = sourceProp.constructor;\n const destProp = new TypedArray(length);\n geom.numericProps[key] = { value: destProp, size: 1 };\n if (!indices) {\n for (let i = 0; i < length; i++) {\n // points\n const featureId = globalFeatureIds.value[i];\n destProp[i] = sourceProp[featureId];\n }\n }\n else {\n // lines|polygons\n for (let i = 0; i < indices.length - 1; i++) {\n const startIndex = indices[i];\n const endIndex = indices[i + 1];\n const featureId = globalFeatureIds.value[startIndex];\n destProp.fill(sourceProp[featureId], startIndex, endIndex);\n }\n }\n }\n }\n return geometry;\n}\nexport const TilejsonPropType = {\n type: 'object',\n value: null,\n validate: (value, propType) => (propType.optional && value === null) ||\n (typeof value === 'object' &&\n Array.isArray(value.tiles) &&\n value.tiles.every(url => typeof url === 'string')),\n equal: (value1, value2) => {\n return deepEqual(value1, value2, 2);\n },\n async: true\n};\n", "import { CompositeLayer } from '@deck.gl/core';\nimport { H3HexagonLayer } from '@deck.gl/geo-layers';\nimport H3Tileset2D, { getHexagonResolution } from \"./h3-tileset-2d.js\";\nimport SpatialIndexTileLayer from \"./spatial-index-tile-layer.js\";\nimport { injectAccessToken, TilejsonPropType } from \"./utils.js\";\nimport { DEFAULT_TILE_SIZE } from \"../constants.js\";\nexport const renderSubLayers = props => {\n const { data } = props;\n const { index } = props.tile;\n if (!data || !data.length)\n return null;\n return new H3HexagonLayer(props, {\n getHexagon: d => d.id,\n centerHexagon: index,\n highPrecision: true\n });\n};\nconst defaultProps = {\n data: TilejsonPropType,\n tileSize: DEFAULT_TILE_SIZE\n};\nclass H3TileLayer extends CompositeLayer {\n initializeState() {\n H3HexagonLayer._checkH3Lib();\n }\n getLoadOptions() {\n const loadOptions = super.getLoadOptions() || {};\n const tileJSON = this.props.data;\n injectAccessToken(loadOptions, tileJSON.accessToken);\n loadOptions.cartoSpatialTile = { ...loadOptions.cartoSpatialTile, scheme: 'h3' };\n return loadOptions;\n }\n renderLayers() {\n const tileJSON = this.props.data;\n if (!tileJSON)\n return null;\n const { tiles: data } = tileJSON;\n let { minresolution, maxresolution } = tileJSON;\n // Convert Mercator zooms provided in props into H3 res levels\n // and clip into valid range provided from the tilejson\n if (this.props.minZoom) {\n minresolution = Math.max(minresolution, getHexagonResolution({ zoom: this.props.minZoom, latitude: 0 }, this.props.tileSize));\n }\n if (this.props.maxZoom) {\n maxresolution = Math.min(maxresolution, getHexagonResolution({ zoom: this.props.maxZoom, latitude: 0 }, this.props.tileSize));\n }\n const SubLayerClass = this.getSubLayerClass('spatial-index-tile', SpatialIndexTileLayer);\n // The naming is unfortunate, but minZoom & maxZoom in the context\n // of a Tileset2D refer to the resolution levels, not the Mercator zooms\n return new SubLayerClass(this.props, {\n id: `h3-tile-layer-${this.props.id}`,\n data,\n // TODO: Tileset2D should be generic over TileIndex type\n TilesetClass: H3Tileset2D,\n renderSubLayers,\n // minZoom and maxZoom are H3 resolutions, however we must use this naming as that is what the Tileset2D class expects\n minZoom: minresolution,\n maxZoom: maxresolution,\n loadOptions: this.getLoadOptions()\n });\n }\n}\nH3TileLayer.layerName = 'H3TileLayer';\nH3TileLayer.defaultProps = defaultProps;\nexport default H3TileLayer;\n", "import { _Tileset2D as Tileset2D } from '@deck.gl/geo-layers';\nimport { polygonToCells, latLngToCell, getResolution, cellToBoundary, cellToParent, gridDisk, edgeLength, UNITS, originToDirectedEdges } from 'h3-js';\nconst MAX_LATITUDE = 85.051128;\n// `polygonToCells()` fills based on hexagon center, this function will\n// pad the bounds such that all cells that overlap the bounds will be included\nfunction padBoundingBox({ west, north, east, south }, resolution) {\n const corners = [\n [north, east],\n [south, east],\n [south, west],\n [north, west]\n ];\n const cornerCells = corners.map(c => latLngToCell(c[0], c[1], resolution));\n const cornerEdgeLengths = cornerCells.map(c => (Math.max(...originToDirectedEdges(c).map(e => edgeLength(e, UNITS.rads))) * 180) / Math.PI);\n const bufferLat = Math.max(...cornerEdgeLengths);\n const bufferLon = Math.min(180, bufferLat / Math.cos((((north + south) / 2) * Math.PI) / 180));\n return {\n north: Math.min(north + bufferLat, MAX_LATITUDE),\n east: east + bufferLon,\n south: Math.max(south - bufferLat, -MAX_LATITUDE),\n west: west - bufferLon\n };\n}\nfunction getHexagonsInBoundingBox({ west, north, east, south }, resolution) {\n const longitudeSpan = Math.abs(east - west);\n if (longitudeSpan > 180) {\n // This is a known issue in h3-js: polygonToCells does not work correctly\n // when longitude span is larger than 180 degrees.\n const nSegments = Math.ceil(longitudeSpan / 180);\n let h3Indices = [];\n for (let s = 0; s < nSegments; s++) {\n const segmentWest = west + s * 180;\n const segmentEast = Math.min(segmentWest + 179.9999999, east);\n h3Indices = h3Indices.concat(getHexagonsInBoundingBox({ west: segmentWest, north, east: segmentEast, south }, resolution));\n }\n return [...new Set(h3Indices)];\n }\n const polygon = [\n [north, east],\n [south, east],\n [south, west],\n [north, west],\n [north, east]\n ];\n return polygonToCells(polygon, resolution);\n}\nfunction tileToBoundingBox(index) {\n const coordinates = cellToBoundary(index);\n const latitudes = coordinates.map(c => c[0]);\n const longitudes = coordinates.map(c => c[1]);\n const west = Math.min(...longitudes);\n const south = Math.min(...latitudes);\n const east = Math.max(...longitudes);\n const north = Math.max(...latitudes);\n return { west, south, east, north };\n}\n// Resolution conversion function. Takes a WebMercatorViewport and returns\n// a H3 resolution such that the screen space size of the hexagons is\n// similar\n// Relative scale factor (0 = no biasing, 2 = a few hexagons cover view)\nconst BIAS = 2;\nexport function getHexagonResolution(viewport, tileSize) {\n // Difference in given tile size compared to deck's internal 512px tile size,\n // expressed as an offset to the viewport zoom.\n const zoomOffset = Math.log2(tileSize / 512);\n const hexagonScaleFactor = (2 / 3) * (viewport.zoom - zoomOffset);\n const latitudeScaleFactor = Math.log(1 / Math.cos((Math.PI * viewport.latitude) / 180));\n // Clip and bias\n return Math.max(0, Math.floor(hexagonScaleFactor + latitudeScaleFactor - BIAS));\n}\nexport default class H3Tileset2D extends Tileset2D {\n /**\n * Returns all tile indices in the current viewport. If the current zoom level is smaller\n * than minZoom, return an empty array. If the current zoom level is greater than maxZoom,\n * return tiles that are on maxZoom.\n */\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getTileIndices({ viewport, minZoom, maxZoom }) {\n if (viewport.latitude === undefined)\n return [];\n const [west, south, east, north] = viewport.getBounds();\n const { tileSize } = this.opts;\n let z = getHexagonResolution(viewport, tileSize);\n let indices;\n if (typeof minZoom === 'number' && Number.isFinite(minZoom) && z < minZoom) {\n // TODO support `extent` prop\n return [];\n }\n if (typeof maxZoom === 'number' && Number.isFinite(maxZoom) && z > maxZoom) {\n z = maxZoom;\n // Once we are at max zoom, getHexagonsInBoundingBox doesn't work, simply\n // get a ring centered on the hexagon in the viewport center\n const center = latLngToCell(viewport.latitude, viewport.longitude, maxZoom);\n indices = gridDisk(center, 1);\n }\n else {\n const paddedBounds = padBoundingBox({ west, north, east, south }, z);\n indices = getHexagonsInBoundingBox(paddedBounds, z);\n }\n return indices.map(i => ({ i }));\n }\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getTileId({ i }) {\n return i;\n }\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getTileMetadata({ i }) {\n return { bbox: tileToBoundingBox(i) };\n }\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getTileZoom({ i }) {\n return getResolution(i);\n }\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getParentIndex(index) {\n const resolution = getResolution(index.i);\n const i = cellToParent(index.i, resolution - 1);\n return { i };\n }\n}\n", "import { registerLoaders } from '@loaders.gl/core';\nimport CartoRasterTileLoader from \"./schema/carto-raster-tile-loader.js\";\nimport CartoSpatialTileLoader from \"./schema/carto-spatial-tile-loader.js\";\nregisterLoaders([CartoRasterTileLoader, CartoSpatialTileLoader]);\nimport { TileLayer } from '@deck.gl/geo-layers';\nimport { DEFAULT_TILE_SIZE } from \"../constants.js\";\nfunction isFeatureIdDefined(value) {\n return value !== undefined && value !== null && value !== '';\n}\nconst defaultProps = {\n tileSize: DEFAULT_TILE_SIZE\n};\nclass SpatialIndexTileLayer extends TileLayer {\n _updateAutoHighlight(info) {\n const { hoveredFeatureId } = this.state;\n const hoveredFeature = info.object;\n let newHoveredFeatureId = null;\n if (hoveredFeature) {\n newHoveredFeatureId = hoveredFeature.id;\n }\n if (hoveredFeatureId !== newHoveredFeatureId) {\n let { highlightColor } = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n this.setState({\n highlightColor,\n hoveredFeatureId: newHoveredFeatureId\n });\n }\n }\n getSubLayerPropsByTile(tile) {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n getHighlightedObjectIndex(tile) {\n const { hoveredFeatureId } = this.state;\n const data = tile.content;\n const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId);\n if (!isFeatureIdPresent ||\n !Array.isArray(data) ||\n // Quick check for whether id is within tile. data.findIndex is expensive\n !this._featureInTile(tile, hoveredFeatureId)) {\n return -1;\n }\n return data.findIndex(feature => feature.id === hoveredFeatureId);\n }\n _featureInTile(tile, featureId) {\n // TODO: Tile2DHeader index should be generic for H3TileIndex or QuadbinTileIndex\n const tileset = this.state.tileset;\n const tileZoom = tileset.getTileZoom(tile.index);\n // @ts-ignore\n const KEY = tile.index.q ? 'q' : 'i';\n // TODO - Tileset2D methods expect tile index in the shape of {x, y, z}\n let featureIndex = { [KEY]: featureId };\n let featureZoom = tileset.getTileZoom(featureIndex);\n while (!(featureZoom <= tileZoom)) {\n featureIndex = tileset.getParentIndex(featureIndex);\n featureZoom = tileset.getTileZoom(featureIndex);\n }\n return featureIndex[KEY] === tile.index[KEY];\n }\n}\nSpatialIndexTileLayer.layerName = 'SpatialIndexTileLayer';\nSpatialIndexTileLayer.defaultProps = defaultProps;\nexport default SpatialIndexTileLayer;\n", "import { readPackedTypedArray } from \"./fast-pbf.js\";\nconst ARRAY_TYPES = {\n uint8: Uint8Array,\n uint16: Uint16Array,\n uint32: Uint32Array,\n uint64: BigUint64Array,\n int8: Int8Array,\n int16: Int16Array,\n int32: Int32Array,\n int64: BigInt64Array,\n float32: Float32Array,\n float64: Float64Array\n};\n// Band ========================================\nexport class BandReader {\n static read(pbf, end) {\n return pbf.readFields(BandReader._readField, { name: '', type: '', data: null }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.name = pbf.readString();\n else if (tag === 2)\n obj.type = pbf.readString();\n else if (tag === 3) {\n const TypedArray = ARRAY_TYPES[obj.type];\n if (!TypedArray) {\n throw Error(`Invalid data type: ${obj.type}`);\n }\n obj.data = {};\n readPackedTypedArray(TypedArray, pbf, obj.data);\n }\n }\n}\nexport class TileReader {\n static read(pbf, end) {\n return pbf.readFields(TileReader._readField, { blockSize: 0, bands: [] }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.blockSize = pbf.readVarint();\n else if (tag === 2)\n obj.bands.push(BandReader.read(pbf, pbf.readVarint() + pbf.pos));\n }\n}\n", "import { TileReader } from \"./carto-raster-tile.js\";\nimport { parsePbf } from \"./tile-loader-utils.js\";\nimport { getWorkerUrl } from \"../../utils.js\";\nconst VERSION = typeof \"9.0.36\" !== 'undefined' ? \"9.0.36\" : 'latest';\nconst id = 'cartoRasterTile';\nconst DEFAULT_OPTIONS = {\n cartoRasterTile: {\n workerUrl: getWorkerUrl(id, VERSION)\n }\n};\nconst CartoRasterTileLoader = {\n name: 'CARTO Raster Tile',\n version: VERSION,\n id,\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: ['application/vnd.carto-raster-tile'],\n category: 'geometry',\n parse: async (arrayBuffer, options) => parseCartoRasterTile(arrayBuffer, options),\n parseSync: parseCartoRasterTile,\n worker: true,\n options: DEFAULT_OPTIONS\n};\nfunction parseCartoRasterTile(arrayBuffer, options) {\n if (!arrayBuffer)\n return null;\n const { bands, blockSize } = parsePbf(arrayBuffer, TileReader);\n const numericProps = {};\n for (let i = 0; i < bands.length; i++) {\n const { name, data } = bands[i];\n numericProps[name] = data;\n }\n return { blockSize, cells: { numericProps, properties: [] } };\n}\nexport default CartoRasterTileLoader;\n", "import { getResolution } from 'quadbin';\nimport { CompositeLayer } from '@deck.gl/core';\nimport { SolidPolygonLayer } from '@deck.gl/layers';\nimport { heatmap } from \"./heatmap.js\";\nimport { RTTModifier, PostProcessModifier } from \"./post-process-utils.js\";\nimport QuadbinTileLayer from \"./quadbin-tile-layer.js\";\nimport { TilejsonPropType } from \"./utils.js\";\nconst defaultColorRange = [\n [255, 255, 178],\n [254, 217, 118],\n [254, 178, 76],\n [253, 141, 60],\n [240, 59, 32],\n [189, 0, 38]\n];\nconst TEXTURE_PROPS = {\n format: 'rgba8unorm',\n mipmaps: false,\n sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n }\n};\n/**\n * Computes the unit density (inverse of cell area)\n */\nfunction unitDensityForCell(cell) {\n const cellResolution = Number(getResolution(cell));\n return Math.pow(4.0, cellResolution);\n}\n/**\n * Converts a colorRange array to a flat array with 4 components per color\n */\nfunction colorRangeToFlatArray(colorRange) {\n const flatArray = new Uint8Array(colorRange.length * 4);\n let index = 0;\n for (let i = 0; i < colorRange.length; i++) {\n const color = colorRange[i];\n flatArray[index++] = color[0];\n flatArray[index++] = color[1];\n flatArray[index++] = color[2];\n flatArray[index++] = Number.isFinite(color[3]) ? color[3] : 255;\n }\n return flatArray;\n}\n// Modified polygon layer to draw offscreen and output value expected by heatmap\nclass RTTSolidPolygonLayer extends RTTModifier(SolidPolygonLayer) {\n getShaders(type) {\n const shaders = super.getShaders(type);\n shaders.inject = {\n 'vs:#decl': `\nuniform float densityFactor;\n`,\n 'vs:#main-end': `\n // Value from getWeight accessor\n float weight = elevations;\n\n // Keep \"power\" delivered to screen constant when tiles update\n // by outputting normalized density \n weight *= densityFactor;\n\n // Pack float into 3 channels to pass to heatmap shader\n // SCALE value important, as we don't want to saturate\n // but also want enough definition to avoid banding\n const vec3 SHIFT = vec3(1.0, 256.0, 256.0 * 256.0);\n const float MAX_VAL = SHIFT.z * 255.0;\n const float SCALE = MAX_VAL / 8.0;\n weight *= SCALE;\n weight = clamp(weight, 0.0, MAX_VAL);\n vColor = vec4(mod(vec3(weight, floor(weight / SHIFT.yz)), 256.0), 255.0) / 255.0;\n`\n };\n return shaders;\n }\n draw(opts) {\n const cell = this.props.data[0];\n const maxDensity = this.props.elevationScale;\n const densityFactor = unitDensityForCell(cell.id) / maxDensity;\n for (const model of this.state.models) {\n model.setUniforms({ densityFactor });\n }\n super.draw(opts);\n }\n}\nRTTSolidPolygonLayer.layerName = 'RTTSolidPolygonLayer';\n// Modify QuadbinTileLayer to apply heatmap post process effect\nconst PostProcessQuadbinTileLayer = PostProcessModifier(QuadbinTileLayer, heatmap);\nconst defaultProps = {\n data: TilejsonPropType,\n getWeight: { type: 'accessor', value: 1 },\n onMaxDensityChange: { type: 'function', optional: true, value: null },\n colorDomain: { type: 'array', value: [0, 1] },\n colorRange: defaultColorRange,\n intensity: { type: 'number', value: 1 },\n radiusPixels: { type: 'number', min: 0, max: 100, value: 20 }\n};\nclass HeatmapTileLayer extends CompositeLayer {\n initializeState() {\n this.state = {\n isLoaded: false,\n tiles: new Set(),\n viewportChanged: false\n };\n }\n shouldUpdateState({ changeFlags }) {\n const { viewportChanged } = changeFlags;\n this.setState({ viewportChanged });\n return changeFlags.somethingChanged;\n }\n updateState(opts) {\n const { props, oldProps } = opts;\n super.updateState(opts);\n if (props.colorRange !== oldProps.colorRange) {\n this._updateColorTexture(opts);\n }\n }\n renderLayers() {\n const { data, getWeight, colorDomain, intensity, radiusPixels, _subLayerProps, updateTriggers, onMaxDensityChange, onViewportLoad, onTileLoad, onTileUnload, ...tileLayerProps } = this.props;\n // Inject modified polygon layer as sublayer into TileLayer\n const subLayerProps = {\n ..._subLayerProps,\n cell: {\n ..._subLayerProps?.cell,\n _subLayerProps: {\n ..._subLayerProps?.cell?._subLayerProps,\n fill: {\n ..._subLayerProps?.cell?._subLayerProps?.fill,\n type: RTTSolidPolygonLayer\n }\n }\n }\n };\n let tileZ = 0;\n let maxDensity = 0;\n const tiles = [...this.state.tiles].filter(t => t.isVisible && t.content);\n for (const tile of tiles) {\n const cell = tile.content[0];\n const unitDensity = unitDensityForCell(cell.id);\n maxDensity = Math.max(tile.userData.maxWeight * unitDensity, maxDensity);\n tileZ = Math.max(tile.zoom, tileZ);\n }\n // Between zoom levels the max density will change, but it isn't possible to know by what factor. Uniform data distributions lead to a factor of 4, while very localized data gives 1. As a heurstic estimate with a value inbetween (2) to make the transitions less obvious.\n const overzoom = this.context.viewport.zoom - tileZ;\n const estimatedMaxDensity = maxDensity * Math.pow(2, overzoom);\n maxDensity = estimatedMaxDensity;\n if (typeof onMaxDensityChange === 'function') {\n onMaxDensityChange(maxDensity);\n }\n return new PostProcessQuadbinTileLayer(tileLayerProps, this.getSubLayerProps({\n id: 'heatmap',\n data,\n // Re-use existing props to pass down values to sublayer\n // TODO replace with custom layer\n getFillColor: 0,\n getElevation: getWeight,\n elevationScale: maxDensity,\n colorDomain,\n radiusPixels,\n intensity,\n _subLayerProps: subLayerProps,\n refinementStrategy: 'no-overlap',\n colorTexture: this.state.colorTexture,\n // Disable line rendering\n extruded: false,\n stroked: false,\n updateTriggers: {\n getElevation: updateTriggers.getWeight\n },\n // Tile stats\n onViewportLoad: tiles => {\n this.setState({ isLoaded: true });\n if (typeof onViewportLoad === 'function') {\n onViewportLoad(tiles);\n }\n },\n onTileLoad: (tile) => {\n let maxWeight = -Infinity;\n if (typeof getWeight !== 'function') {\n maxWeight = getWeight;\n }\n else if (tile.content) {\n for (const d of tile.content) {\n maxWeight = Math.max(getWeight(d, {}), maxWeight);\n }\n }\n tile.userData = { maxWeight };\n this.state.tiles.add(tile);\n if (typeof onTileLoad === 'function') {\n onTileLoad(tile);\n }\n },\n onTileUnload: (tile) => {\n this.state.tiles.delete(tile);\n if (typeof onTileUnload === 'function') {\n onTileUnload(tile);\n }\n },\n transitions: { elevationScale: { type: 'spring', stiffness: 0.3, damping: 0.5 } }\n }));\n }\n _updateColorTexture(opts) {\n const { colorRange } = opts.props;\n let { colorTexture } = this.state;\n const colors = colorRangeToFlatArray(colorRange);\n if (colorTexture && colorTexture?.width === colorRange.length) {\n // TODO(v9): Unclear whether `setSubImageData` is a public API, or what to use if not.\n colorTexture.setSubImageData({ data: colors });\n }\n else {\n colorTexture?.destroy();\n colorTexture = this.context.device.createTexture({\n ...TEXTURE_PROPS,\n data: colors,\n width: colorRange.length,\n height: 1\n });\n }\n this.setState({ colorTexture });\n }\n}\nHeatmapTileLayer.layerName = 'HeatmapTileLayer';\nHeatmapTileLayer.defaultProps = defaultProps;\nexport default HeatmapTileLayer;\n", "const glsl = (s) => `${s}`;\n/**\n * @filter Heatmap\n * @param radiusPixels Blur radius in pixels, controls smoothness of heatmap\n * @param colorDomain Domain to apply to values prior to applying color scale\n * @param colorTexture 1D RGB lookup texture for color scale\n * @param intensity Multiplier to apply to value\n * @param opacity Output opacity\n */\nconst fs = `\\\nuniform heatmapUniforms {\nvec2 colorDomain;\nvec2 delta;\nfloat intensity;\nfloat opacity;\nfloat radiusPixels;\n} heatmap;\nuniform sampler2D colorTexture;\nvec3 colorGradient(float value) {\nreturn texture(colorTexture, vec2(value, 0.5)).rgb;\n}\nconst vec3 SHIFT = vec3(1.0, 256.0, 256.0 * 256.0);\nconst float MAX_VAL = SHIFT.z * 255.0;\nconst float SCALE = MAX_VAL / 8.0;\nvec4 pack(float value) {\nreturn vec4(mod(vec3(value, floor(value / SHIFT.yz)), 256.0), 255.0) / 255.0;\n}\nfloat unpack(vec3 color) {\nreturn 255.0 * dot(color, SHIFT);\n}\nvec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\nbool firstPass = (heatmap.delta.y < 0.5);\nfloat accumulator = 0.0;\nfloat SUPPORT = clamp(heatmap.radiusPixels / 2.0, 8.0, 32.0);\nfloat sigma = SUPPORT / 3.0;\nfloat a = -0.5 / (sigma * sigma);\nfloat w0 = 0.3989422804014327 / sigma;\nfor (float t = -SUPPORT; t <= SUPPORT; t++) {\nvec2 percent = (t * heatmap.delta - 0.5) / SUPPORT;\nvec2 delta = percent * heatmap.radiusPixels / texSize;\nvec4 offsetColor = texture(source, texCoord + delta);\nfloat value = unpack(offsetColor.rgb);\nfloat weight = w0 * exp(a * t * t);\naccumulator += value * weight;\n}\nif (firstPass) {\nreturn pack(accumulator);\n}\nfloat density = 10.0 * heatmap.intensity * accumulator / SCALE;\nvec2 domain = heatmap.colorDomain;\nfloat f = (density - domain[0]) / (domain[1] - domain[0]);\nvec4 color = vec4(0.0);\ncolor.rgb = colorGradient(f);\ncolor.a = smoothstep(0.0, 0.1, f);\ncolor.a = pow(color.a, 1.0 / 2.2);\ncolor.a *= heatmap.opacity;\nreturn color;\n}\n`;\nexport const heatmap = {\n name: 'heatmap',\n uniformPropTypes: {\n colorDomain: { value: [0, 1] },\n delta: { value: [0, 1] },\n intensity: { value: 1, min: 0.1, max: 10 },\n opacity: { value: 1, min: 0, max: 1 },\n radiusPixels: { value: 20, min: 0, softMax: 100 }\n },\n uniformTypes: {\n colorDomain: 'vec2<f32>',\n delta: 'vec2<f32>',\n intensity: 'f32',\n opacity: 'f32',\n radiusPixels: 'f32'\n },\n getUniforms: opts => {\n if (!opts)\n return {};\n const { colorDomain = [0, 1], colorTexture, delta = [1, 0], intensity = 1, opacity = 1, radiusPixels = 20 } = opts;\n return {\n colorDomain,\n colorTexture,\n delta,\n intensity,\n opacity,\n radiusPixels\n };\n },\n fs,\n passes: [\n { sampler: true, uniforms: { delta: [1, 0] } },\n { sampler: true, uniforms: { delta: [0, 1] } }\n ]\n};\n", "import { Layer, PostProcessEffect } from '@deck.gl/core';\nconst TEXTURE_PROPS = {\n format: 'rgba8unorm',\n mipmaps: false,\n sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n }\n};\nfunction getPostProcessLayer(layer) {\n while (layer.parent && !layer.applyPostProcess) {\n layer = layer.parent;\n }\n return layer;\n}\n/**\n * Dummy Layer that draws nothing, just calls back to root Layer\n */\nclass DrawCallbackLayer extends Layer {\n initializeState() {\n this.id = `draw-callback-${getPostProcessLayer(this).props.id}`;\n }\n _drawLayer() {\n getPostProcessLayer(this).applyPostProcess();\n }\n}\nDrawCallbackLayer.layerName = 'DrawCallbackLayer';\n/**\n * Modifier that marks a layer for Render-to-Target rendering.\n * Resulting layer must be used as a sublayer of a layer created\n * with `PostProcessModifier`\n */\nexport function RTTModifier(BaseLayer) {\n var _a;\n return _a = class RTTLayer extends BaseLayer {\n draw(opts) {\n const { moduleParameters } = opts;\n const { picking } = moduleParameters;\n const postProcessLayer = getPostProcessLayer(this);\n if (!picking.isActive) {\n postProcessLayer.enableRTT(opts);\n }\n // Draw actual layer\n super.draw(opts);\n if (!picking.isActive) {\n postProcessLayer.disableRTT();\n }\n }\n },\n _a.layerName = `RTT-${BaseLayer.layerName}`,\n _a;\n}\n/**\n * Modifier that returns the a modified Layer, which applies a\n * postprocess effect to all subLayers created using `RTTModifier`\n */\nexport function PostProcessModifier(BaseLayer, effect) {\n var _a;\n return _a = class PostProcessLayer extends BaseLayer {\n initializeState(context) {\n super.initializeState(context);\n this._createTextures();\n this.internalState.postProcess = new PostProcessEffect(effect, this.props);\n this.internalState.postProcess.setup(context);\n }\n updateState(params) {\n super.updateState(params);\n this.internalState.postProcess.setProps(this.props);\n }\n renderLayers() {\n let subLayers = super.renderLayers();\n if (!subLayers) {\n return null;\n }\n subLayers = Array.isArray(subLayers) ? subLayers : [subLayers];\n return [...subLayers, new DrawCallbackLayer()];\n }\n _createTextures() {\n const { device } = this.context;\n this.internalState.renderBuffers = [0, 1].map(i => {\n return device.createFramebuffer({\n id: `layer-fbo-${i}`,\n colorAttachments: [device.createTexture(TEXTURE_PROPS)],\n depthStencilAttachment: 'depth16unorm'\n });\n });\n }\n _resizeBuffers(opts) {\n // TODO we could likely render to a smaller buffer for better perf\n const { moduleParameters } = opts;\n const { viewport } = this.context;\n const width = moduleParameters.devicePixelRatio * viewport.width;\n const height = moduleParameters.devicePixelRatio * viewport.height;\n this.internalState.renderBuffers.forEach((fbo) => fbo.resize({ width, height }));\n }\n enableRTT(opts) {\n this._resizeBuffers(opts);\n this.internalState.originalRenderPass = this.context.renderPass;\n const [framebuffer] = this.internalState.renderBuffers;\n // Create new render pass for RTT\n this.internalState.internalRenderPass = this.context.device.beginRenderPass({\n framebuffer,\n parameters: { viewport: [0, 0, framebuffer.width, framebuffer.height] },\n // Only clear on first render\n clearColor: this.internalState.renderInProgress ? false : [0, 0, 0, 0]\n });\n this.internalState.renderInProgress = true;\n this.context.renderPass = this.internalState.internalRenderPass;\n }\n disableRTT() {\n // End render pass, and reinstate original\n this.internalState.internalRenderPass.end();\n this.context.renderPass = this.internalState.originalRenderPass;\n }\n applyPostProcess() {\n if (!this.internalState.renderInProgress) {\n return;\n }\n // Apply post process effect\n const [inputBuffer, swapBuffer] = this.internalState.renderBuffers;\n const { framebuffer: target } = this.context.renderPass.props;\n this.internalState.postProcess.postRender({\n inputBuffer,\n swapBuffer,\n target\n });\n this.internalState.renderInProgress = false;\n }\n },\n _a.layerName = `PostProcess${BaseLayer.layerName}`,\n _a;\n}\n", "import { CompositeLayer } from '@deck.gl/core';\nimport QuadbinLayer from \"./quadbin-layer.js\";\nimport QuadbinTileset2D from \"./quadbin-tileset-2d.js\";\nimport SpatialIndexTileLayer from \"./spatial-index-tile-layer.js\";\nimport { hexToBigInt } from 'quadbin';\nimport { injectAccessToken, TilejsonPropType } from \"./utils.js\";\nimport { DEFAULT_TILE_SIZE } from \"../constants.js\";\nexport const renderSubLayers = props => {\n const { data } = props;\n if (!data || !data.length)\n return null;\n const isBigInt = typeof data[0].id === 'bigint';\n return new QuadbinLayer(props, {\n getQuadbin: isBigInt ? d => d.id : d => hexToBigInt(d.id)\n });\n};\nconst defaultProps = {\n data: TilejsonPropType,\n tileSize: DEFAULT_TILE_SIZE\n};\nclass QuadbinTileLayer extends CompositeLayer {\n getLoadOptions() {\n const loadOptions = super.getLoadOptions() || {};\n const tileJSON = this.props.data;\n injectAccessToken(loadOptions, tileJSON.accessToken);\n loadOptions.cartoSpatialTile = { ...loadOptions.cartoSpatialTile, scheme: 'quadbin' };\n return loadOptions;\n }\n renderLayers() {\n const tileJSON = this.props.data;\n if (!tileJSON)\n return null;\n const { tiles: data, maxresolution: maxZoom } = tileJSON;\n const SubLayerClass = this.getSubLayerClass('spatial-index-tile', SpatialIndexTileLayer);\n return new SubLayerClass(this.props, {\n id: `quadbin-tile-layer-${this.props.id}`,\n data,\n // TODO: Tileset2D should be generic over TileIndex type\n TilesetClass: QuadbinTileset2D,\n renderSubLayers,\n maxZoom,\n loadOptions: this.getLoadOptions()\n });\n }\n}\nQuadbinTileLayer.layerName = 'QuadbinTileLayer';\nQuadbinTileLayer.defaultProps = defaultProps;\nexport default QuadbinTileLayer;\n", "import { _GeoCellLayer as GeoCellLayer } from '@deck.gl/geo-layers';\nimport { getQuadbinPolygon } from \"./quadbin-utils.js\";\nconst defaultProps = {\n getQuadbin: { type: 'accessor', value: (d) => d.quadbin }\n};\nclass QuadbinLayer extends GeoCellLayer {\n indexToBounds() {\n const { data, extruded, getQuadbin } = this.props;\n // To avoid z-fighting reduce polygon footprint when extruding\n const coverage = extruded ? 0.99 : 1;\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n getPolygon: (x, objectInfo) => getQuadbinPolygon(getQuadbin(x, objectInfo), coverage),\n updateTriggers: { getPolygon: coverage }\n };\n }\n}\nQuadbinLayer.layerName = 'QuadbinLayer';\nQuadbinLayer.defaultProps = defaultProps;\nexport default QuadbinLayer;\n", "import { CompositeLayer } from '@deck.gl/core';\nimport { TextLayer, _TextBackgroundLayer as TextBackgroundLayer } from '@deck.gl/layers';\nconst [LEFT, TOP, RIGHT, BOTTOM] = [0, 1, 2, 3];\nclass EnhancedTextBackgroundLayer extends TextBackgroundLayer {\n getShaders() {\n const shaders = super.getShaders();\n let vs = shaders.vs;\n // Modify shader so that the padding is offset by the pixel offset to ensure the padding\n // always captures the anchor point. As padding is uniform we cannot pass it a per-label value\n vs = vs.replaceAll('padding.', '_padding.');\n vs = vs.replace('void main(void) {', 'void main(void) {\\n vec4 _padding = padding + instancePixelOffsets.xyxy * vec4(1.0, 1.0, -1.0, -1.0);');\n return { ...shaders, vs };\n }\n}\nEnhancedTextBackgroundLayer.layerName = 'EnhancedTextBackgroundLayer';\n// TextLayer which includes modified text-background-layer-vertex shader and only renders the\n// primary background layer in the collision pass\nclass EnhancedTextLayer extends TextLayer {\n filterSubLayer({ layer, renderPass }) {\n const background = layer.id.includes('primary-background');\n if (renderPass === 'collision') {\n return background; // Only draw primary background layer in collision pass\n }\n return !background; // Do not draw background layer in other passes\n }\n}\nEnhancedTextLayer.layerName = 'EnhancedTextLayer';\nconst defaultProps = {\n ...TextLayer.defaultProps,\n getRadius: { type: 'accessor', value: 1 },\n radiusScale: { type: 'number', min: 0, value: 1 }\n};\nclass PointLabelLayer extends CompositeLayer {\n calculatePixelOffset(secondary) {\n const { getTextAnchor: anchor, getAlignmentBaseline: alignment, getRadius, getSecondaryText, radiusScale, secondarySizeScale, sizeScale } = this.props;\n const xMult = anchor === 'middle' ? 0 : anchor === 'start' ? 1 : -1;\n const yMult = alignment === 'center' ? 0 : alignment === 'bottom' ? 1 : -1;\n // Padding based on font size (font size / 4)\n const xPadding = sizeScale / 4;\n const yPadding = sizeScale * (1 + 1 / 4);\n // Place secondary label under main label (secondary label always 'top' baseline aligned)\n const secondaryOffset = 0.6 * (1 - yMult) * sizeScale;\n let yOffset = secondary ? secondaryOffset : 0;\n // Special case, position relative to secondary label\n if (anchor === 'middle' && alignment === 'top' && getSecondaryText) {\n yOffset -= secondaryOffset;\n yOffset -= secondarySizeScale;\n yOffset += sizeScale;\n }\n // Padding based on point radius (radius/ 4)\n const radiusPadding = 1 + 1 / 4;\n return typeof getRadius === 'function'\n ? (d, info) => {\n const r = (info ? getRadius(d, info) : 1) * radiusScale * radiusPadding;\n return [xMult * (r + xPadding), yMult * (r + yPadding) + yOffset];\n }\n : [\n xMult * (getRadius * radiusScale * radiusPadding + xPadding),\n yMult * (getRadius * radiusScale * radiusPadding + yPadding) + yOffset\n ];\n }\n calculateBackgroundPadding() {\n const { getTextAnchor: anchor, getAlignmentBaseline: alignment, sizeScale } = this.props;\n // Heuristics to avoid label overlap\n const paddingX = 12 * sizeScale;\n const paddingY = 3 * sizeScale;\n const backgroundPadding = [0, 0, 0, 0];\n if (alignment === 'top') {\n backgroundPadding[TOP] = paddingY;\n }\n else if (alignment === 'bottom') {\n backgroundPadding[BOTTOM] = paddingY;\n }\n else {\n backgroundPadding[TOP] = 0.5 * paddingY;\n backgroundPadding[BOTTOM] = 0.5 * paddingY;\n }\n if (anchor === 'start') {\n backgroundPadding[LEFT] = paddingX;\n }\n else if (anchor === 'end') {\n backgroundPadding[RIGHT] = paddingX;\n }\n else {\n backgroundPadding[LEFT] = 0.5 * paddingX;\n backgroundPadding[RIGHT] = 0.5 * paddingX;\n }\n return backgroundPadding;\n }\n renderTextLayer(id, { updateTriggers: updateTriggersOverride = {}, ...props }) {\n const { data, characterSet, fontFamily, fontSettings, fontWeight, outlineColor, outlineWidth, sizeScale, radiusScale, getAlignmentBaseline, getColor, getPosition, getTextAnchor, updateTriggers } = this.props;\n return new EnhancedTextLayer(this.getSubLayerProps({\n id,\n data,\n characterSet,\n fontFamily,\n fontSettings,\n fontWeight,\n outlineColor,\n outlineWidth,\n sizeScale,\n getAlignmentBaseline,\n getColor,\n getPosition,\n getTextAnchor,\n updateTriggers: {\n ...updateTriggers,\n ...updateTriggersOverride,\n getPixelOffset: [\n updateTriggers.getRadius,\n updateTriggers.getTextAnchor,\n updateTriggers.getAlignmentBaseline,\n radiusScale,\n sizeScale\n ]\n }\n }), {\n getSize: 1,\n _subLayerProps: { background: { type: EnhancedTextBackgroundLayer } }\n }, props);\n }\n renderLayers() {\n const { getText, getSecondaryColor, getSecondaryText, secondaryOutlineColor, secondarySizeScale, updateTriggers } = this.props;\n const getPixelOffset = this.calculatePixelOffset(false);\n const backgroundPadding = this.calculateBackgroundPadding();\n const out = [\n // Text doesn't update via updateTrigger for some reason\n this.renderTextLayer(`${updateTriggers.getText}-primary`, {\n backgroundPadding,\n getText,\n getPixelOffset,\n background: true // Only use background for primary label for faster collisions\n }),\n Boolean(getSecondaryText) &&\n this.renderTextLayer(`${updateTriggers.getSecondaryText}-secondary`, {\n getText: getSecondaryText,\n getPixelOffset: this.calculatePixelOffset(true),\n getAlignmentBaseline: 'top',\n // updateTriggers: {getText: updateTriggers.getSecondaryText},\n // Optional overrides\n ...(getSecondaryColor && { getColor: getSecondaryColor }),\n ...(secondarySizeScale && { sizeScale: secondarySizeScale }),\n ...(secondaryOutlineColor && { outlineColor: secondaryOutlineColor })\n })\n ];\n return out;\n }\n}\nPointLabelLayer.layerName = 'PointLabelLayer';\nPointLabelLayer.defaultProps = defaultProps;\nexport default PointLabelLayer;\n", "import { CompositeLayer } from '@deck.gl/core';\nimport RasterLayer from \"./raster-layer.js\";\nimport QuadbinTileset2D from \"./quadbin-tileset-2d.js\";\nimport { injectAccessToken, TilejsonPropType } from \"./utils.js\";\nimport { DEFAULT_TILE_SIZE } from \"../constants.js\";\nimport { TileLayer } from '@deck.gl/geo-layers';\nexport const renderSubLayers = props => {\n const tileIndex = props.tile?.index?.q;\n if (!tileIndex)\n return null;\n return new RasterLayer(props, { tileIndex });\n};\nconst defaultProps = {\n data: TilejsonPropType,\n tileSize: DEFAULT_TILE_SIZE\n};\nclass RasterTileLayer extends CompositeLayer {\n getLoadOptions() {\n const loadOptions = super.getLoadOptions() || {};\n const tileJSON = this.props.data;\n injectAccessToken(loadOptions, tileJSON.accessToken);\n return loadOptions;\n }\n renderLayers() {\n const tileJSON = this.props.data;\n if (!tileJSON)\n return null;\n const { tiles: data, minzoom: minZoom, maxzoom: maxZoom } = tileJSON;\n const SubLayerClass = this.getSubLayerClass('tile', TileLayer);\n return new SubLayerClass(this.props, {\n id: `raster-tile-layer-${this.props.id}`,\n data,\n // TODO: Tileset2D should be generic over TileIndex type\n TilesetClass: QuadbinTileset2D,\n renderSubLayers,\n minZoom,\n maxZoom,\n loadOptions: this.getLoadOptions()\n });\n }\n}\nRasterTileLayer.layerName = 'RasterTileLayer';\nRasterTileLayer.defaultProps = defaultProps;\nexport default RasterTileLayer;\n", "import { CompositeLayer } from '@deck.gl/core';\nimport { ColumnLayer } from '@deck.gl/layers';\nimport { quadbinToOffset } from \"./quadbin-utils.js\";\nimport vs from \"./raster-layer-vertex.glsl.js\";\nimport { createBinaryProxy } from \"../utils.js\";\nconst defaultProps = {\n ...ColumnLayer.defaultProps,\n extruded: false,\n diskResolution: 4,\n vertices: [\n [-0.5, -0.5],\n [0.5, -0.5],\n [0.5, 0.5],\n [-0.5, 0.5]\n ]\n};\n// Modified ColumnLayer with custom vertex shader\nclass RasterColumnLayer extends ColumnLayer {\n getShaders() {\n const shaders = super.getShaders();\n const data = this.props.data;\n const BLOCK_WIDTH = data.data.blockSize ?? Math.sqrt(data.length);\n return { ...shaders, defines: { ...shaders.defines, BLOCK_WIDTH }, vs };\n }\n initializeState() {\n // Only add attributes needed by shader\n const attributeManager = this.getAttributeManager();\n /* eslint-disable max-len */\n attributeManager.addInstanced({\n instanceElevations: {\n size: 1,\n transition: true,\n accessor: 'getElevation'\n },\n instanceFillColors: {\n size: this.props.colorFormat.length,\n type: 'unorm8',\n transition: true,\n accessor: 'getFillColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineColors: {\n size: this.props.colorFormat.length,\n type: 'unorm8',\n transition: true,\n accessor: 'getLineColor',\n defaultValue: [255, 255, 255, 255]\n }\n });\n }\n}\nRasterColumnLayer.layerName = 'RasterColumnLayer';\nfunction wrappedDataComparator(oldData, newData) {\n return oldData.data === newData.data && oldData.length === newData.length;\n}\n// Adapter layer around RasterColumnLayer that converts data & accessors into correct format\nclass RasterLayer extends CompositeLayer {\n renderLayers() {\n // Rendering props underlying layer\n const { data, getElevation, getFillColor, getLineColor, getLineWidth, tileIndex, updateTriggers } = this.props;\n if (!data || !tileIndex)\n return null;\n const blockSize = data.blockSize ?? 0;\n const [xOffset, yOffset, scale] = quadbinToOffset(tileIndex);\n const offset = [xOffset, yOffset, scale / blockSize];\n // Filled Column Layer\n const CellLayer = this.getSubLayerClass('column', RasterColumnLayer);\n const { highlightedObjectIndex, highlightColor } = this.state;\n return new CellLayer(this.props, this.getSubLayerProps({\n id: 'cell',\n updateTriggers,\n getElevation: this.getSubLayerAccessor(getElevation),\n getFillColor: this.getSubLayerAccessor(getFillColor),\n getLineColor: this.getSubLayerAccessor(getLineColor),\n getLineWidth: this.getSubLayerAccessor(getLineWidth)\n }), {\n data: {\n data, // Pass through data for getSubLayerAccessor()\n length: blockSize * blockSize\n },\n dataComparator: wrappedDataComparator,\n offset,\n highlightedObjectIndex,\n highlightColor\n });\n }\n getSubLayerAccessor(accessor) {\n if (typeof accessor !== 'function') {\n return super.getSubLayerAccessor(accessor);\n }\n // Proxy values back in standard feature format\n return (object, info) => {\n const { data, index } = info;\n const binaryData = data.data;\n const proxy = createBinaryProxy(binaryData.cells, index);\n // @ts-ignore (TS2349) accessor is always function\n return accessor({ properties: proxy }, info);\n };\n }\n getPickingInfo(params) {\n const info = super.getPickingInfo(params);\n if (info.index !== -1) {\n info.object = this.getSubLayerAccessor((x) => x)(undefined, {\n data: this.props,\n index: info.index\n });\n }\n return info;\n }\n _updateAutoHighlight(info) {\n const { highlightedObjectIndex } = this.state;\n let newHighlightedObjectIndex = -1;\n if (info.index !== -1) {\n newHighlightedObjectIndex = info.index;\n }\n if (highlightedObjectIndex !== newHighlightedObjectIndex) {\n let { highlightColor } = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n this.setState({\n highlightColor,\n highlightedObjectIndex: newHighlightedObjectIndex\n });\n }\n }\n}\nRasterLayer.layerName = 'RasterLayer';\nRasterLayer.defaultProps = defaultProps;\nexport default RasterLayer;\n", "export default `\\\n#version 300 es\n#define SHADER_NAME raster-layer-vertex-shader\nin vec3 positions;\nin vec3 normals;\nin float instanceElevations;\nin vec4 instanceFillColors;\nin vec4 instanceLineColors;\nin vec3 instancePickingColors;\nuniform float opacity;\nuniform bool extruded;\nuniform bool stroked;\nuniform bool isStroke;\nuniform float coverage;\nuniform float elevationScale;\nuniform float widthScale;\nuniform vec3 offset;\nout vec4 vColor;\n#ifdef FLAT_SHADING\nout vec4 position_commonspace;\n#endif\nvoid main(void) {\nvec2 common_position = offset.xy;\nfloat scale = offset.z;\nint yIndex = - (gl_InstanceID / BLOCK_WIDTH);\nint xIndex = gl_InstanceID + (yIndex * BLOCK_WIDTH);\ncommon_position += scale * vec2(float(xIndex), float(yIndex - 1));\nvec4 color = isStroke ? instanceLineColors : instanceFillColors;\nfloat shouldRender = float(color.a > 0.0 && instanceElevations >= 0.0);\nfloat cellWidth = coverage * scale;\ngeometry.position = vec4(common_position, 0.0, 1.0);\nif (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\ngeometry.position.xyz -= project_uCommonOrigin;\n}\nfloat elevation = 0.0;\nfloat strokeOffsetRatio = 1.0;\nif (extruded) {\nelevation = instanceElevations * (positions.z + 1.0) / 2.0 * elevationScale;\n} else if (stroked) {\nfloat halfOffset = project_pixel_size(widthScale) / cellWidth;\nif (isStroke) {\nstrokeOffsetRatio -= sign(positions.z) * halfOffset;\n} else {\nstrokeOffsetRatio -= halfOffset;\n}\n}\ngeometry.pickingColor = instancePickingColors;\nvec2 offset = (vec2(0.5) + positions.xy * strokeOffsetRatio) * cellWidth * shouldRender;\nvec3 pos = vec3(offset, project_size(elevation));\nDECKGL_FILTER_SIZE(pos, geometry);\ngeometry.position.xyz += pos;\ngl_Position = project_common_position_to_clipspace(geometry.position);\ngeometry.normal = project_normal(normals);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\nif (extruded && !isStroke) {\n#ifdef FLAT_SHADING\nposition_commonspace = geometry.position;\nvColor = vec4(color.rgb, color.a * opacity);\n#else\nvec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, geometry.normal);\nvColor = vec4(lightColor, color.a * opacity);\n#endif\n} else {\nvColor = vec4(color.rgb, color.a * opacity);\n}\nDECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n", "import { registerLoaders } from '@loaders.gl/core';\nimport CartoPropertiesTileLoader from \"./schema/carto-properties-tile-loader.js\";\nimport CartoVectorTileLoader from \"./schema/carto-vector-tile-loader.js\";\nregisterLoaders([CartoPropertiesTileLoader, CartoVectorTileLoader]);\nimport { ClipExtension } from '@deck.gl/extensions';\nimport { MVTLayer, _getURLFromTemplate } from '@deck.gl/geo-layers';\nimport { GeoJsonLayer } from '@deck.gl/layers';\nimport { TilejsonPropType, injectAccessToken, mergeBoundaryData } from \"./utils.js\";\nimport { DEFAULT_TILE_SIZE } from \"../constants.js\";\nconst defaultProps = {\n ...MVTLayer.defaultProps,\n data: TilejsonPropType,\n dataComparator: TilejsonPropType.equal,\n tileSize: DEFAULT_TILE_SIZE\n};\n// @ts-ignore\nclass VectorTileLayer extends MVTLayer {\n constructor(...propObjects) {\n // Force externally visible props type, as it is not possible modify via extension\n // @ts-ignore\n super(...propObjects);\n }\n initializeState() {\n super.initializeState();\n this.setState({ binary: true });\n }\n updateState(parameters) {\n const { props } = parameters;\n if (props.data) {\n super.updateState(parameters);\n const formatTiles = new URL(props.data.tiles[0]).searchParams.get('formatTiles');\n const mvt = formatTiles === 'mvt';\n this.setState({ mvt });\n }\n }\n getLoadOptions() {\n const loadOptions = super.getLoadOptions() || {};\n const tileJSON = this.props.data;\n injectAccessToken(loadOptions, tileJSON.accessToken);\n loadOptions.gis = { format: 'binary' }; // Use binary for MVT loading\n return loadOptions;\n }\n /* eslint-disable camelcase */\n async getTileData(tile) {\n const tileJSON = this.props.data;\n const { tiles, properties_tiles } = tileJSON;\n const url = _getURLFromTemplate(tiles, tile);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n const loadOptions = this.getLoadOptions();\n const { fetch } = this.props;\n const { signal } = tile;\n // Fetch geometry and attributes separately\n const geometryFetch = fetch(url, { propName: 'data', layer: this, loadOptions, signal });\n if (!properties_tiles) {\n return await geometryFetch;\n }\n const propertiesUrl = _getURLFromTemplate(properties_tiles, tile);\n if (!propertiesUrl) {\n return Promise.reject('Invalid properties URL');\n }\n const attributesFetch = fetch(propertiesUrl, {\n propName: 'data',\n layer: this,\n loadOptions,\n signal\n });\n const [geometry, attributes] = await Promise.all([geometryFetch, attributesFetch]);\n if (!geometry)\n return null;\n return attributes ? mergeBoundaryData(geometry, attributes) : geometry;\n }\n /* eslint-enable camelcase */\n renderSubLayers(props) {\n if (props.data === null) {\n return null;\n }\n if (this.state.mvt) {\n return super.renderSubLayers(props);\n }\n const tileBbox = props.tile.bbox;\n const { west, south, east, north } = tileBbox;\n const extensions = [new ClipExtension(), ...(props.extensions || [])];\n const clipProps = {\n clipBounds: [west, south, east, north]\n };\n const applyClipExtensionToSublayerProps = (subLayerId) => {\n return {\n [subLayerId]: {\n ...clipProps,\n ...props?._subLayerProps?.[subLayerId],\n extensions: [...extensions, ...(props?._subLayerProps?.[subLayerId]?.extensions || [])]\n }\n };\n };\n const subLayerProps = {\n ...props,\n autoHighlight: false,\n // Do not perform clipping on points (#9059)\n _subLayerProps: {\n ...props._subLayerProps,\n ...applyClipExtensionToSublayerProps('polygons-fill'),\n ...applyClipExtensionToSublayerProps('polygons-stroke'),\n ...applyClipExtensionToSublayerProps('linestrings')\n }\n };\n const subLayer = new GeoJsonLayer(subLayerProps);\n return subLayer;\n }\n _isWGS84() {\n // CARTO binary tile coordinates are [lng, lat], not tile-relative like MVT.\n if (this.state.mvt)\n return super._isWGS84();\n return true;\n }\n}\nVectorTileLayer.layerName = 'VectorTileLayer';\nVectorTileLayer.defaultProps = defaultProps;\nexport default VectorTileLayer;\n", "import { NumericPropKeyValueReader, PropertiesReader } from \"./carto-tile.js\";\nexport class TileReader {\n static read(pbf, end) {\n return pbf.readFields(TileReader._readField, { properties: [], numericProps: {} }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));\n else if (tag === 2) {\n const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);\n obj.numericProps[entry.key] = entry.value;\n }\n }\n}\n", "import { TileReader } from \"./carto-properties-tile.js\";\nimport { parsePbf } from \"./tile-loader-utils.js\";\nconst CartoPropertiesTileLoader = {\n name: 'CARTO Properties Tile',\n version: '1',\n id: 'cartoPropertiesTile',\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: ['application/vnd.carto-properties-tile'],\n category: 'geometry',\n worker: false,\n parse: async (arrayBuffer, options) => parseCartoPropertiesTile(arrayBuffer, options),\n parseSync: parseCartoPropertiesTile,\n options: {}\n};\nfunction parseCartoPropertiesTile(arrayBuffer, options) {\n if (!arrayBuffer)\n return null;\n return parsePbf(arrayBuffer, TileReader);\n}\nexport default CartoPropertiesTileLoader;\n", "import earcut from 'earcut';\nimport { TileReader } from \"./carto-tile.js\";\nimport { parsePbf } from \"./tile-loader-utils.js\";\nimport { getWorkerUrl } from \"../../utils.js\";\nconst VERSION = typeof \"9.0.36\" !== 'undefined' ? \"9.0.36\" : 'latest';\nconst id = 'cartoVectorTile';\nconst DEFAULT_OPTIONS = {\n cartoVectorTile: {\n workerUrl: getWorkerUrl(id, VERSION)\n }\n};\nconst CartoVectorTileLoader = {\n name: 'CARTO Vector Tile',\n version: VERSION,\n id,\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: ['application/vnd.carto-vector-tile'],\n category: 'geometry',\n parse: async (arrayBuffer, options) => parseCartoVectorTile(arrayBuffer, options),\n parseSync: parseCartoVectorTile,\n worker: true,\n options: DEFAULT_OPTIONS\n};\nfunction triangulatePolygon(polygons, target, { startPosition, endPosition, indices }) {\n const coordLength = polygons.positions.size;\n const start = startPosition * coordLength;\n const end = endPosition * coordLength;\n // Extract positions and holes for just this polygon\n const polygonPositions = polygons.positions.value.subarray(start, end);\n // Holes are referenced relative to outer polygon\n const holes = indices.slice(1).map((n) => n - startPosition);\n // Compute triangulation\n const triangles = earcut(polygonPositions, holes, coordLength);\n // Indices returned by triangulation are relative to start\n // of polygon, so we need to offset\n for (let t = 0, tl = triangles.length; t < tl; ++t) {\n target.push(startPosition + triangles[t]);\n }\n}\nfunction triangulate(polygons) {\n const { polygonIndices, primitivePolygonIndices } = polygons;\n const triangles = [];\n let rangeStart = 0;\n for (let i = 0; i < polygonIndices.value.length - 1; i++) {\n const startPosition = polygonIndices.value[i];\n const endPosition = polygonIndices.value[i + 1];\n // Extract hole indices between start & end position\n const rangeEnd = primitivePolygonIndices.value.indexOf(endPosition);\n const indices = primitivePolygonIndices.value.subarray(rangeStart, rangeEnd);\n rangeStart = rangeEnd;\n triangulatePolygon(polygons, triangles, { startPosition, endPosition, indices });\n }\n polygons.triangles = { value: new Uint32Array(triangles), size: 1 };\n}\nfunction parseCartoVectorTile(arrayBuffer, options) {\n if (!arrayBuffer)\n return null;\n const tile = parsePbf(arrayBuffer, TileReader);\n if (tile.polygons && !tile.polygons.triangles) {\n triangulate(tile.polygons);\n }\n return tile;\n}\nexport default CartoVectorTileLoader;\n", "/**\n *\n * Custom error for reported errors in CARTO Maps API.\n * Provides useful debugging information in console and context for applications.\n *\n */\nexport class CartoAPIError extends Error {\n constructor(error, errorContext, response, responseJson) {\n let responseString = 'Failed to connect';\n if (response) {\n responseString = 'Server returned: ';\n if (response.status === 400) {\n responseString += 'Bad request';\n }\n else if (response.status === 401 || response.status === 403) {\n responseString += 'Unauthorized access';\n }\n else if (response.status === 404) {\n responseString += 'Not found';\n }\n else {\n responseString += 'Error';\n }\n responseString += ` (${response.status}):`;\n }\n responseString += ` ${error.message || error}`;\n let message = `${errorContext.requestType} API request failed`;\n message += `\\n${responseString}`;\n for (const key of Object.keys(errorContext)) {\n if (key === 'requestType')\n continue; // eslint-disable-line no-continue\n message += `\\n${formatErrorKey(key)}: ${errorContext[key]}`;\n }\n message += '\\n';\n super(message);\n this.name = 'CartoAPIError';\n this.response = response;\n this.responseJson = responseJson;\n this.error = error;\n this.errorContext = errorContext;\n }\n}\n/**\n * Converts camelCase to Camel Case\n */\nfunction formatErrorKey(key) {\n return key.replace(/([A-Z])/g, ' $1').replace(/^./, s => s.toUpperCase());\n}\n", "import { CartoAPIError } from \"./api/carto-api-error.js\";\nconst cartoStyleUrlTemplate = 'https://basemaps.cartocdn.com/gl/{basemap}-gl-style/style.json';\nexport const CARTO_MAP_STYLES = ['positron', 'dark-matter', 'voyager'];\nexport const GOOGLE_BASEMAPS = {\n roadmap: {\n mapTypeId: 'roadmap',\n mapId: '3754c817b510f791'\n },\n 'google-positron': {\n mapTypeId: 'roadmap',\n mapId: 'ea84ae4203ef21cd'\n },\n 'google-dark-matter': {\n mapTypeId: 'roadmap',\n mapId: '2fccc3b36c22a0e2'\n },\n 'google-voyager': {\n mapTypeId: 'roadmap',\n mapId: '885caf1e15bb9ef2'\n },\n satellite: {\n mapTypeId: 'satellite'\n },\n hybrid: {\n mapTypeId: 'hybrid'\n },\n terrain: {\n mapTypeId: 'terrain'\n }\n};\nexport const STYLE_LAYER_GROUPS = [\n {\n slug: 'label',\n filter: ({ id }) => Boolean(id.match(/(?=(label|_label|place-|place_|poi-|poi_|watername_|roadname_|housenumber))/)),\n defaultVisibility: true\n },\n {\n slug: 'road',\n filter: ({ id }) => Boolean(id.match(/(?=(road|railway|tunnel|street|bridge))(?!.*label)/)),\n defaultVisibility: true\n },\n {\n slug: 'border',\n filter: ({ id }) => Boolean(id.match(/border|boundaries|boundary_/)),\n defaultVisibility: false\n },\n {\n slug: 'building',\n filter: ({ id }) => Boolean(id.match(/building/)),\n defaultVisibility: true\n },\n {\n slug: 'water',\n filter: ({ id }) => Boolean(id.match(/(?=(water|stream|ferry))/)),\n defaultVisibility: true\n },\n {\n slug: 'land',\n filter: ({ id }) => Boolean(id.match(/(?=(parks|landcover|industrial|sand|hillshade|park_))/)),\n defaultVisibility: true\n }\n];\nexport function applyLayerGroupFilters(style, visibleLayerGroups) {\n if (!Array.isArray(style?.layers)) {\n return style;\n }\n const removedLayerFilters = STYLE_LAYER_GROUPS.filter(lg => !visibleLayerGroups[lg.slug]).map(lg => lg.filter);\n const visibleLayers = style.layers.filter(layer => removedLayerFilters.every(match => !match(layer)));\n return {\n ...style,\n layers: visibleLayers\n };\n}\nexport function someLayerGroupsDisabled(visibleLayerGroups) {\n return visibleLayerGroups && Object.values(visibleLayerGroups).every(Boolean) === false;\n}\nexport function getStyleUrl(styleType) {\n return cartoStyleUrlTemplate.replace('{basemap}', styleType);\n}\nexport async function fetchStyle({ styleUrl, errorContext }) {\n /* global fetch */\n let response;\n return await fetch(styleUrl, { mode: 'cors' })\n .then(res => {\n response = res;\n return res.json();\n })\n .catch(error => {\n throw new CartoAPIError(error, { ...errorContext, requestType: 'Basemap style' }, response);\n });\n}\nexport default {\n VOYAGER: getStyleUrl('voyager'),\n POSITRON: getStyleUrl('positron'),\n DARK_MATTER: getStyleUrl('dark-matter'),\n VOYAGER_NOLABELS: getStyleUrl('voyager-nolabels'),\n POSITRON_NOLABELS: getStyleUrl('positron-nolabels'),\n DARK_MATTER_NOLABELS: getStyleUrl('dark-matter-nolabels')\n};\n", "import { scaleThreshold } from 'd3-scale';\nimport getPalette, { DEFAULT_PALETTE, NULL_COLOR } from \"./palette.js\";\nimport { assert } from \"../utils.js\";\nimport { getAttrValue } from \"./utils.js\";\n/**\n * Helper function for quickly creating a color bins style based on `d3` `scaleThreshold`.\n *\n * Data values of each attribute are rounded down to the nearest value in the domain and are then\n * styled with the corresponding color.\n *\n * @return accessor that maps objects to `Color` values\n */\nexport default function colorBins({ attr, domain, colors = DEFAULT_PALETTE, nullColor = NULL_COLOR }) {\n assert(Array.isArray(domain), 'Expected \"domain\" to be an array of numbers');\n const palette = typeof colors === 'string' ? getPalette(colors, domain.length + 1) : colors;\n const color = scaleThreshold().domain(domain).range(palette);\n return (d, info) => {\n const value = getAttrValue(attr, d, info);\n return typeof value === 'number' && Number.isFinite(value) ? color(value) : nullColor;\n };\n}\n", "import * as cartoColors from 'cartocolor';\nimport { assert } from \"../utils.js\";\nexport const DEFAULT_PALETTE = 'PurpOr';\nexport const NULL_COLOR = [204, 204, 204];\nexport const OTHERS_COLOR = [119, 119, 119];\nexport default function getPalette(name, numCategories) {\n const palette = cartoColors[name];\n let paletteIndex = numCategories;\n assert(palette, `Palette \"${name}\" not found. Expected a CARTOColors string`);\n const palettesColorVariants = Object.keys(palette)\n .filter(p => p !== 'tags')\n .map(Number);\n const longestPaletteIndex = Math.max(...palettesColorVariants);\n const smallestPaletteIndex = Math.min(...palettesColorVariants);\n if (!Number.isInteger(numCategories) || numCategories > longestPaletteIndex) {\n paletteIndex = longestPaletteIndex;\n }\n else if (numCategories < smallestPaletteIndex) {\n paletteIndex = smallestPaletteIndex;\n }\n let colors = palette[paletteIndex];\n if (palette.tags && palette.tags.includes('qualitative')) {\n colors = colors.slice(0, -1);\n }\n return colors.map(c => hexToRgb(c));\n}\nexport function hexToRgb(hex) {\n // Evaluate #ABC\n let result = /^#?([a-f\\d]{1})([a-f\\d]{1})([a-f\\d]{1})$/i.exec(hex);\n if (result) {\n return [\n parseInt(result[1] + result[1], 16),\n parseInt(result[2] + result[2], 16),\n parseInt(result[3] + result[3], 16),\n 255\n ];\n }\n // Evaluate #ABCD\n result = /^#?([a-f\\d]{1})([a-f\\d]{1})([a-f\\d]{1})([a-f\\d]{1})$/i.exec(hex);\n if (result) {\n return [\n parseInt(result[1] + result[1], 16),\n parseInt(result[2] + result[2], 16),\n parseInt(result[3] + result[3], 16),\n parseInt(result[4] + result[4], 16)\n ];\n }\n // Evaluate #ABCDEF\n result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n if (result) {\n return [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16), 255];\n }\n // Evaluate #ABCDEFAF\n result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n assert(result, `Hexadecimal color \"${hex}\" was not parsed correctly`);\n return [\n parseInt(result[1], 16),\n parseInt(result[2], 16),\n parseInt(result[3], 16),\n parseInt(result[4], 16)\n ];\n}\n", "import { assert } from \"../utils.js\";\nconst ALLOWED_ATTR_TYPES = Object.freeze(['function', 'string']);\nexport function getAttrValue(attr, d, info) {\n assert(typeof d === 'object', 'Expected \"data\" to be an object');\n assert(ALLOWED_ATTR_TYPES.includes(typeof attr), 'Expected \"attr\" to be a function or string');\n // Is function\n if (typeof attr === 'function') {\n return attr(d, info);\n }\n return d?.properties?.[attr];\n}\n", "import getPalette, { DEFAULT_PALETTE, NULL_COLOR, OTHERS_COLOR } from \"./palette.js\";\nimport { assert } from \"../utils.js\";\nimport { getAttrValue } from \"./utils.js\";\n/**\n * Helper function for quickly creating a color category style.\n *\n * Data values of each attribute listed in the domain are mapped one to one\n * with corresponding colors in the range.\n *\n * @return accessor that maps objects to `Color` values\n */\nexport default function colorCategories({ attr, domain, colors = DEFAULT_PALETTE, nullColor = NULL_COLOR, othersColor = OTHERS_COLOR }) {\n assert(Array.isArray(domain), 'Expected \"domain\" to be an array of numbers or strings');\n const colorsByCategory = {};\n const palette = typeof colors === 'string' ? getPalette(colors, domain.length) : colors;\n for (const [i, c] of domain.entries()) {\n colorsByCategory[c] = palette[i];\n }\n return (d, info) => {\n const value = getAttrValue(attr, d, info);\n return (typeof value === 'number' && Number.isFinite(value)) || typeof value === 'string'\n ? colorsByCategory[value] || othersColor\n : nullColor;\n };\n}\n", "import { scaleLinear } from 'd3-scale';\nimport getPalette, { DEFAULT_PALETTE, NULL_COLOR } from \"./palette.js\";\nimport { assert } from \"../utils.js\";\nimport { getAttrValue } from \"./utils.js\";\n/**\n * Helper function for quickly creating a color continuous style.\n *\n * Data values of each field are interpolated linearly across values in the domain and\n * are then styled with a blend of the corresponding color in the range.\n *\n * @return accessor that maps objects to `Color` values\n */\nexport default function colorContinuous({ attr, domain, colors = DEFAULT_PALETTE, nullColor = NULL_COLOR }) {\n assert(Array.isArray(domain), 'Expected \"domain\" to be an array of numbers');\n const palette = typeof colors === 'string' ? getPalette(colors, domain.length) : colors;\n const color = scaleLinear().domain(domain).range(palette);\n return (d, info) => {\n const value = getAttrValue(attr, d, info);\n return typeof value === 'number' && Number.isFinite(value) ? color(value) : nullColor;\n };\n}\n", "export const DEFAULT_API_BASE_URL = 'https://gcp-us-east1.api.carto.com';\nexport const DEFAULT_CLIENT = 'deck-gl-carto';\nexport const V3_MINOR_VERSION = '3.4';\n// Fastly default limit is 8192; leave some padding.\nexport const DEFAULT_MAX_LENGTH_URL = 7000;\n", "function joinPath(...args) {\n return args.map(part => (part.endsWith('/') ? part.slice(0, -1) : part)).join('/');\n}\nfunction buildV3Path(apiBaseUrl, version, endpoint, ...rest) {\n return joinPath(apiBaseUrl, version, endpoint, ...rest);\n}\nexport function buildPublicMapUrl({ apiBaseUrl, cartoMapId }) {\n return buildV3Path(apiBaseUrl, 'v3', 'maps', 'public', cartoMapId);\n}\nexport function buildStatsUrl({ attribute, apiBaseUrl, connectionName, source, type }) {\n if (type === 'query') {\n return buildV3Path(apiBaseUrl, 'v3', 'stats', connectionName, attribute);\n }\n // type === 'table'\n return buildV3Path(apiBaseUrl, 'v3', 'stats', connectionName, source, attribute);\n}\nexport function buildSourceUrl({ apiBaseUrl, connectionName, endpoint }) {\n return buildV3Path(apiBaseUrl, 'v3', 'maps', connectionName, endpoint);\n}\nexport function buildQueryUrl({ apiBaseUrl, connectionName }) {\n return buildV3Path(apiBaseUrl, 'v3', 'sql', connectionName, 'query');\n}\n", "import { VERSION } from '@deck.gl/core';\nimport { isPureObject } from \"../utils.js\";\nimport { CartoAPIError } from \"./carto-api-error.js\";\nimport { DEFAULT_MAX_LENGTH_URL, V3_MINOR_VERSION } from \"./common.js\";\n/**\n * Parameters added to all requests issued with `requestWithParameters()`.\n * These parameters override parameters already in the base URL, but not\n * user-provided parameters.\n */\nconst DEFAULT_PARAMETERS = {\n v: V3_MINOR_VERSION,\n deckglVersion: VERSION\n};\nconst DEFAULT_HEADERS = {\n Accept: 'application/json',\n 'Content-Type': 'application/json'\n};\nconst REQUEST_CACHE = new Map();\nexport async function requestWithParameters({ baseUrl, parameters = {}, headers: customHeaders = {}, errorContext, maxLengthURL = DEFAULT_MAX_LENGTH_URL }) {\n parameters = { ...DEFAULT_PARAMETERS, ...parameters };\n baseUrl = excludeURLParameters(baseUrl, Object.keys(parameters));\n const key = createCacheKey(baseUrl, parameters, customHeaders);\n if (REQUEST_CACHE.has(key)) {\n return REQUEST_CACHE.get(key);\n }\n const url = createURLWithParameters(baseUrl, parameters);\n const headers = { ...DEFAULT_HEADERS, ...customHeaders };\n /* global fetch */\n const fetchPromise = url.length > maxLengthURL\n ? fetch(baseUrl, { method: 'POST', body: JSON.stringify(parameters), headers })\n : fetch(url, { headers });\n let response;\n let responseJson;\n const jsonPromise = fetchPromise\n .then((_response) => {\n response = _response;\n return response.json();\n })\n .then((json) => {\n responseJson = json;\n if (!response || !response.ok) {\n throw new Error(json.error);\n }\n return json;\n })\n .catch((error) => {\n REQUEST_CACHE.delete(key);\n throw new CartoAPIError(error, errorContext, response, responseJson);\n });\n REQUEST_CACHE.set(key, jsonPromise);\n return jsonPromise;\n}\nfunction createCacheKey(baseUrl, parameters, headers) {\n const parameterEntries = Object.entries(parameters).sort(([a], [b]) => (a > b ? 1 : -1));\n const headerEntries = Object.entries(headers).sort(([a], [b]) => (a > b ? 1 : -1));\n return JSON.stringify({ baseUrl, parameters: parameterEntries, headers: headerEntries });\n}\n/**\n * Appends query string parameters to a URL. Existing URL parameters are kept,\n * unless there is a conflict, in which case the new parameters override\n * those already in the URL.\n */\nfunction createURLWithParameters(baseUrlString, parameters) {\n const baseUrl = new URL(baseUrlString);\n for (const [key, value] of Object.entries(parameters)) {\n if (isPureObject(value) || Array.isArray(value)) {\n baseUrl.searchParams.set(key, JSON.stringify(value));\n }\n else {\n baseUrl.searchParams.set(key, value.toString());\n }\n }\n return baseUrl.toString();\n}\n/**\n * Deletes query string parameters from a URL.\n */\nfunction excludeURLParameters(baseUrlString, parameters) {\n const baseUrl = new URL(baseUrlString);\n for (const param of parameters) {\n if (baseUrl.searchParams.has(param)) {\n baseUrl.searchParams.delete(param);\n }\n }\n return baseUrl.toString();\n}\n", "/* eslint-disable camelcase */\nimport { DEFAULT_API_BASE_URL, DEFAULT_CLIENT, DEFAULT_MAX_LENGTH_URL } from \"../api/common.js\";\nimport { buildSourceUrl } from \"../api/endpoints.js\";\nimport { requestWithParameters } from \"../api/request-with-parameters.js\";\nexport const SOURCE_DEFAULTS = {\n apiBaseUrl: DEFAULT_API_BASE_URL,\n clientId: DEFAULT_CLIENT,\n format: 'tilejson',\n headers: {},\n maxLengthURL: DEFAULT_MAX_LENGTH_URL\n};\nexport async function baseSource(endpoint, options, urlParameters) {\n const { accessToken, connectionName, cache, ...optionalOptions } = options;\n const mergedOptions = { ...SOURCE_DEFAULTS, accessToken, connectionName, endpoint };\n for (const key in optionalOptions) {\n if (optionalOptions[key]) {\n mergedOptions[key] = optionalOptions[key];\n }\n }\n const baseUrl = buildSourceUrl(mergedOptions);\n const { clientId, maxLengthURL, format } = mergedOptions;\n const headers = { Authorization: `Bearer ${options.accessToken}`, ...options.headers };\n const parameters = { client: clientId, ...urlParameters };\n const errorContext = {\n requestType: 'Map instantiation',\n connection: options.connectionName,\n type: endpoint,\n source: JSON.stringify(parameters, undefined, 2)\n };\n const mapInstantiation = await requestWithParameters({\n baseUrl,\n parameters,\n headers,\n errorContext,\n maxLengthURL\n });\n const dataUrl = mapInstantiation[format].url[0];\n if (cache) {\n cache.value = parseInt(new URL(dataUrl).searchParams.get('cache') || '', 10);\n }\n errorContext.requestType = 'Map data';\n if (format === 'tilejson') {\n const json = await requestWithParameters({\n baseUrl: dataUrl,\n headers,\n errorContext,\n maxLengthURL\n });\n if (accessToken) {\n json.accessToken = accessToken;\n }\n return json;\n }\n return await requestWithParameters({\n baseUrl: dataUrl,\n headers,\n errorContext,\n maxLengthURL\n });\n}\n", "import { baseSource } from \"./base-source.js\";\nexport const boundaryQuerySource = async function (options) {\n const { columns, filters, tilesetTableName, propertiesSqlQuery, queryParameters } = options;\n const urlParameters = {\n tilesetTableName,\n propertiesSqlQuery\n };\n if (columns) {\n urlParameters.columns = columns.join(',');\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n if (queryParameters) {\n urlParameters.queryParameters = queryParameters;\n }\n return baseSource('boundary', options, urlParameters);\n};\n", "import { baseSource } from \"./base-source.js\";\nexport const boundaryTableSource = async function (options) {\n const { filters, tilesetTableName, columns, propertiesTableName } = options;\n const urlParameters = {\n tilesetTableName,\n propertiesTableName\n };\n if (columns) {\n urlParameters.columns = columns.join(',');\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('boundary', options, urlParameters);\n};\n", "/* eslint-disable camelcase */\nimport { DEFAULT_AGGREGATION_RES_LEVEL_H3 } from \"../constants.js\";\nimport { baseSource } from \"./base-source.js\";\nexport const h3QuerySource = async function (options) {\n const { aggregationExp, aggregationResLevel = DEFAULT_AGGREGATION_RES_LEVEL_H3, sqlQuery, spatialDataColumn = 'h3', queryParameters, filters } = options;\n const urlParameters = {\n aggregationExp,\n spatialDataColumn,\n spatialDataType: 'h3',\n q: sqlQuery\n };\n if (aggregationResLevel) {\n urlParameters.aggregationResLevel = String(aggregationResLevel);\n }\n if (queryParameters) {\n urlParameters.queryParameters = queryParameters;\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('query', options, urlParameters);\n};\n", "/* eslint-disable camelcase */\nimport { DEFAULT_AGGREGATION_RES_LEVEL_H3 } from \"../constants.js\";\nimport { baseSource } from \"./base-source.js\";\nexport const h3TableSource = async function (options) {\n const { aggregationExp, aggregationResLevel = DEFAULT_AGGREGATION_RES_LEVEL_H3, spatialDataColumn = 'h3', tableName, filters } = options;\n const urlParameters = {\n aggregationExp,\n name: tableName,\n spatialDataColumn,\n spatialDataType: 'h3'\n };\n if (aggregationResLevel) {\n urlParameters.aggregationResLevel = String(aggregationResLevel);\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('table', options, urlParameters);\n};\n", "import { baseSource } from \"./base-source.js\";\nexport const h3TilesetSource = async function (options) {\n const { tableName } = options;\n const urlParameters = { name: tableName };\n return baseSource('tileset', options, urlParameters);\n};\n", "import { baseSource } from \"./base-source.js\";\nexport const rasterSource = async function (options) {\n const { tableName, filters } = options;\n const urlParameters = { name: tableName };\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('raster', options, urlParameters);\n};\n", "/* eslint-disable camelcase */\nimport { DEFAULT_AGGREGATION_RES_LEVEL_QUADBIN } from \"../constants.js\";\nimport { baseSource } from \"./base-source.js\";\nexport const quadbinQuerySource = async function (options) {\n const { aggregationExp, aggregationResLevel = DEFAULT_AGGREGATION_RES_LEVEL_QUADBIN, sqlQuery, spatialDataColumn = 'quadbin', queryParameters, filters } = options;\n const urlParameters = {\n aggregationExp,\n q: sqlQuery,\n spatialDataColumn,\n spatialDataType: 'quadbin'\n };\n if (aggregationResLevel) {\n urlParameters.aggregationResLevel = String(aggregationResLevel);\n }\n if (queryParameters) {\n urlParameters.queryParameters = queryParameters;\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('query', options, urlParameters);\n};\n", "/* eslint-disable camelcase */\nimport { DEFAULT_AGGREGATION_RES_LEVEL_QUADBIN } from \"../constants.js\";\nimport { baseSource } from \"./base-source.js\";\nexport const quadbinTableSource = async function (options) {\n const { aggregationExp, aggregationResLevel = DEFAULT_AGGREGATION_RES_LEVEL_QUADBIN, spatialDataColumn = 'quadbin', tableName, filters } = options;\n const urlParameters = {\n aggregationExp,\n name: tableName,\n spatialDataColumn,\n spatialDataType: 'quadbin'\n };\n if (aggregationResLevel) {\n urlParameters.aggregationResLevel = String(aggregationResLevel);\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('table', options, urlParameters);\n};\n", "import { baseSource } from \"./base-source.js\";\nexport const quadbinTilesetSource = async function (options) {\n const { tableName } = options;\n const urlParameters = { name: tableName };\n return baseSource('tileset', options, urlParameters);\n};\n", "/* eslint-disable camelcase */\nimport { DEFAULT_TILE_RESOLUTION } from \"../constants.js\";\nimport { baseSource } from \"./base-source.js\";\nexport const vectorQuerySource = async function (options) {\n const { columns, filters, spatialDataColumn = 'geom', sqlQuery, tileResolution = DEFAULT_TILE_RESOLUTION, queryParameters } = options;\n const urlParameters = {\n spatialDataColumn,\n spatialDataType: 'geo',\n tileResolution: tileResolution.toString(),\n q: sqlQuery\n };\n if (columns) {\n urlParameters.columns = columns.join(',');\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n if (queryParameters) {\n urlParameters.queryParameters = queryParameters;\n }\n return baseSource('query', options, urlParameters);\n};\n", "/* eslint-disable camelcase */\nimport { DEFAULT_TILE_RESOLUTION } from \"../constants.js\";\nimport { baseSource } from \"./base-source.js\";\nexport const vectorTableSource = async function (options) {\n const { columns, filters, spatialDataColumn = 'geom', tableName, tileResolution = DEFAULT_TILE_RESOLUTION } = options;\n const urlParameters = {\n name: tableName,\n spatialDataColumn,\n spatialDataType: 'geo',\n tileResolution: tileResolution.toString()\n };\n if (columns) {\n urlParameters.columns = columns.join(',');\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('table', options, urlParameters);\n};\n", "import { baseSource } from \"./base-source.js\";\nexport const vectorTilesetSource = async function (options) {\n const { tableName } = options;\n const urlParameters = { name: tableName };\n return baseSource('tileset', options, urlParameters);\n};\n", "import { log } from '@deck.gl/core';\nimport { AGGREGATION, getLayer, getColorAccessor, getColorValueAccessor, getSizeAccessor, getTextAccessor, OPACITY_MAP, opacityToAlpha, getIconUrlAccessor, negateAccessor, getMaxMarkerSize } from \"./layer-map.js\";\nimport PointLabelLayer from \"../layers/point-label-layer.js\";\nimport { CollisionFilterExtension } from '@deck.gl/extensions';\nimport { assert } from \"../utils.js\";\nconst collisionFilterExtension = new CollisionFilterExtension();\nexport function parseMap(json) {\n const { keplerMapConfig, datasets, token } = json;\n assert(keplerMapConfig.version === 'v1', 'Only support Kepler v1');\n const { mapState, mapStyle } = keplerMapConfig.config;\n const { layers, layerBlending, interactionConfig } = keplerMapConfig.config.visState;\n return {\n id: json.id,\n title: json.title,\n description: json.description,\n createdAt: json.createdAt,\n updatedAt: json.updatedAt,\n initialViewState: mapState,\n /** @deprecated Use `basemap`. */\n mapStyle,\n token,\n layers: layers.reverse().map(({ id, type, config, visualChannels }) => {\n try {\n const { dataId } = config;\n const dataset = datasets.find(d => d.id === dataId);\n assert(dataset, `No dataset matching dataId: ${dataId}`);\n const { data } = dataset;\n assert(data, `No data loaded for dataId: ${dataId}`);\n const { Layer, propMap, defaultProps } = getLayer(type, config, dataset);\n const styleProps = createStyleProps(config, propMap);\n return new Layer({\n id,\n data,\n ...defaultProps,\n ...createInteractionProps(interactionConfig),\n ...styleProps,\n ...createChannelProps(id, type, config, visualChannels, data), // Must come after style\n ...createParametersProp(layerBlending, styleProps.parameters || {}), // Must come after style\n ...createLoadOptions(token)\n });\n }\n catch (e) {\n log.error(e.message)();\n return undefined;\n }\n })\n };\n}\nfunction createParametersProp(layerBlending, parameters) {\n if (layerBlending === 'additive') {\n parameters.blendColorSrcFactor = parameters.blendAlphaSrcFactor = 'src-alpha';\n parameters.blendColorDstFactor = parameters.blendAlphaDstFactor = 'dst-alpha';\n parameters.blendColorOperation = parameters.blendAlphaOperation = 'add';\n }\n else if (layerBlending === 'subtractive') {\n parameters.blendColorSrcFactor = 'one';\n parameters.blendColorDstFactor = 'one-minus-dst-color';\n parameters.blendAlphaSrcFactor = 'src-alpha';\n parameters.blendAlphaDstFactor = 'dst-alpha';\n parameters.blendColorOperation = 'subtract';\n parameters.blendAlphaOperation = 'add';\n }\n return Object.keys(parameters).length ? { parameters } : {};\n}\nfunction createInteractionProps(interactionConfig) {\n const pickable = interactionConfig && interactionConfig.tooltip.enabled;\n return {\n autoHighlight: pickable,\n pickable\n };\n}\nfunction mapProps(source, target, mapping) {\n for (const sourceKey in mapping) {\n const sourceValue = source[sourceKey];\n const targetKey = mapping[sourceKey];\n if (sourceValue === undefined) {\n // eslint-disable-next-line no-continue\n continue;\n }\n if (typeof targetKey === 'string') {\n target[targetKey] = sourceValue;\n }\n else if (typeof targetKey === 'function') {\n const [key, value] = Object.entries(targetKey(sourceValue))[0];\n target[key] = value;\n }\n else if (typeof targetKey === 'object') {\n // Nested definition, recurse down one level (also handles arrays)\n mapProps(sourceValue, target, targetKey);\n }\n }\n}\nfunction createStyleProps(config, mapping) {\n const result = {};\n mapProps(config, result, mapping);\n // Kepler format sometimes omits strokeColor. TODO: remove once we can rely on\n // `strokeColor` always being set when `stroke: true`.\n if (result.stroked && !result.getLineColor) {\n result.getLineColor = result.getFillColor;\n }\n for (const colorAccessor in OPACITY_MAP) {\n if (Array.isArray(result[colorAccessor])) {\n const color = [...result[colorAccessor]];\n const opacityKey = OPACITY_MAP[colorAccessor];\n const opacity = config.visConfig[opacityKey];\n color[3] = opacityToAlpha(opacity);\n result[colorAccessor] = color;\n }\n }\n result.highlightColor = config.visConfig.enable3d ? [255, 255, 255, 60] : [252, 242, 26, 255];\n return result;\n}\n/* eslint-disable complexity, max-statements */\nfunction createChannelProps(id, type, config, visualChannels, data) {\n const { colorField, colorScale, radiusField, radiusScale, sizeField, sizeScale, strokeColorField, strokeColorScale, weightField } = visualChannels;\n let { heightField, heightScale } = visualChannels;\n if (type === 'hexagonId') {\n heightField = sizeField;\n heightScale = sizeScale;\n }\n const { textLabel, visConfig } = config;\n const result = {};\n if (type === 'grid' || type === 'hexagon') {\n result.colorScaleType = colorScale;\n if (colorField) {\n const { colorAggregation } = config.visConfig;\n if (!AGGREGATION[colorAggregation]) {\n result.getColorValue = getColorValueAccessor(colorField, colorAggregation, data);\n }\n else {\n result.getColorWeight = d => d[colorField.name];\n }\n }\n }\n else if (colorField) {\n const { colorAggregation: aggregation, colorRange: range } = visConfig;\n result.getFillColor = getColorAccessor(colorField, \n // @ts-ignore\n colorScale, { aggregation, range }, visConfig.opacity, data);\n }\n if (type === 'point') {\n const altitude = config.columns?.altitude;\n if (altitude) {\n result.dataTransform = data => {\n data.features.forEach(({ geometry, properties }) => {\n const { type, coordinates } = geometry;\n if (type === 'Point') {\n coordinates[2] = properties[altitude];\n }\n });\n return data;\n };\n }\n }\n if (radiusField || sizeField) {\n result.getPointRadius = getSizeAccessor(\n // @ts-ignore\n radiusField || sizeField, \n // @ts-ignore\n radiusScale || sizeScale, visConfig.sizeAggregation, visConfig.radiusRange || visConfig.sizeRange, data);\n }\n if (strokeColorField) {\n const fallbackOpacity = type === 'point' ? visConfig.opacity : 1;\n const opacity = visConfig.strokeOpacity !== undefined ? visConfig.strokeOpacity : fallbackOpacity;\n const { strokeColorAggregation: aggregation, strokeColorRange: range } = visConfig;\n result.getLineColor = getColorAccessor(strokeColorField, \n // @ts-ignore\n strokeColorScale, \n // @ts-ignore\n { aggregation, range }, opacity, data);\n }\n if (heightField && visConfig.enable3d) {\n result.getElevation = getSizeAccessor(heightField, \n // @ts-ignore\n heightScale, visConfig.heightAggregation, visConfig.heightRange || visConfig.sizeRange, data);\n }\n if (weightField) {\n result.getWeight = getSizeAccessor(weightField, undefined, visConfig.weightAggregation, undefined, data);\n }\n if (visConfig.customMarkers) {\n const maxIconSize = getMaxMarkerSize(visConfig, visualChannels);\n const { getPointRadius, getFillColor } = result;\n const { customMarkersUrl, customMarkersRange, filled: useMaskedIcons } = visConfig;\n result.pointType = 'icon';\n result.getIcon = getIconUrlAccessor(visualChannels.customMarkersField, customMarkersRange, { fallbackUrl: customMarkersUrl, maxIconSize, useMaskedIcons }, data);\n result._subLayerProps = {\n 'points-icon': {\n loadOptions: {\n image: {\n type: 'imagebitmap'\n },\n imagebitmap: {\n resizeWidth: maxIconSize,\n resizeHeight: maxIconSize,\n resizeQuality: 'high'\n }\n }\n }\n };\n if (getFillColor && useMaskedIcons) {\n result.getIconColor = getFillColor;\n }\n if (getPointRadius) {\n result.getIconSize = getPointRadius;\n }\n if (visualChannels.rotationField) {\n result.getIconAngle = negateAccessor(getSizeAccessor(visualChannels.rotationField, undefined, null, undefined, data));\n }\n }\n else if (type === 'point' || type === 'tileset') {\n result.pointType = 'circle';\n }\n if (textLabel && textLabel.length && textLabel[0].field) {\n const [mainLabel, secondaryLabel] = textLabel;\n const collisionGroup = id;\n ({\n alignment: result.getTextAlignmentBaseline,\n anchor: result.getTextAnchor,\n color: result.getTextColor,\n outlineColor: result.textOutlineColor,\n size: result.textSizeScale\n } = mainLabel);\n const { color: getSecondaryColor, field: secondaryField, outlineColor: secondaryOutlineColor, size: secondarySizeScale } = secondaryLabel || {};\n result.getText = mainLabel.field && getTextAccessor(mainLabel.field, data);\n const getSecondaryText = secondaryField && getTextAccessor(secondaryField, data);\n result.pointType = `${result.pointType}+text`;\n result.textCharacterSet = 'auto';\n result.textFontFamily = 'Inter, sans';\n result.textFontSettings = { sdf: true };\n result.textFontWeight = 600;\n result.textOutlineWidth = 3;\n result._subLayerProps = {\n ...result._subLayerProps,\n 'points-text': {\n type: PointLabelLayer,\n extensions: [collisionFilterExtension],\n collisionEnabled: true,\n collisionGroup,\n // getPointRadius already has radiusScale baked in, so only pass one or the other\n ...(result.getPointRadius\n ? { getRadius: result.getPointRadius }\n : { radiusScale: visConfig.radius }),\n ...(secondaryField && {\n getSecondaryText,\n getSecondaryColor,\n secondarySizeScale,\n secondaryOutlineColor\n })\n }\n };\n }\n return result;\n}\nfunction createLoadOptions(accessToken) {\n return {\n loadOptions: { fetch: { headers: { Authorization: `Bearer ${accessToken}` } } }\n };\n}\n", "import { deviation, extent, groupSort, median, variance } from 'd3-array';\nimport { rgb } from 'd3-color';\nimport { scaleLinear, scaleOrdinal, scaleLog, scalePoint, scaleQuantile, scaleQuantize, scaleSqrt, scaleThreshold } from 'd3-scale';\nimport { format as d3Format } from 'd3-format';\nimport moment from 'moment-timezone';\nimport { CPUGridLayer, HeatmapLayer, HexagonLayer } from '@deck.gl/aggregation-layers';\nimport { GeoJsonLayer } from '@deck.gl/layers';\nimport { H3HexagonLayer } from '@deck.gl/geo-layers';\nimport ClusterTileLayer from \"../layers/cluster-tile-layer.js\";\nimport H3TileLayer from \"../layers/h3-tile-layer.js\";\nimport QuadbinTileLayer from \"../layers/quadbin-tile-layer.js\";\nimport RasterTileLayer from \"../layers/raster-tile-layer.js\";\nimport VectorTileLayer from \"../layers/vector-tile-layer.js\";\nimport { assert, createBinaryProxy, scaleIdentity } from \"../utils.js\";\nimport HeatmapTileLayer from \"../layers/heatmap-tile-layer.js\";\nconst SCALE_FUNCS = {\n linear: scaleLinear,\n ordinal: scaleOrdinal,\n log: scaleLog,\n point: scalePoint,\n quantile: scaleQuantile,\n quantize: scaleQuantize,\n sqrt: scaleSqrt,\n custom: scaleThreshold,\n identity: scaleIdentity\n};\nfunction identity(v) {\n return v;\n}\nconst UNKNOWN_COLOR = '#868d91';\nexport const AGGREGATION = {\n average: 'MEAN',\n maximum: 'MAX',\n minimum: 'MIN',\n sum: 'SUM'\n};\nexport const OPACITY_MAP = {\n getFillColor: 'opacity',\n getLineColor: 'strokeOpacity',\n getTextColor: 'opacity'\n};\nconst AGGREGATION_FUNC = {\n 'count unique': (values, accessor) => groupSort(values, v => v.length, accessor).length,\n median,\n // Unfortunately mode() is only available in d3-array@3+ which is ESM only\n mode: (values, accessor) => groupSort(values, v => v.length, accessor).pop(),\n stddev: deviation,\n variance\n};\nconst TILE_LAYER_TYPE_TO_LAYER = {\n clusterTile: ClusterTileLayer,\n h3: H3TileLayer,\n heatmapTile: HeatmapTileLayer,\n mvt: VectorTileLayer,\n quadbin: QuadbinTileLayer,\n raster: RasterTileLayer,\n tileset: VectorTileLayer\n};\nconst hexToRGBA = c => {\n const { r, g, b, opacity } = rgb(c);\n return [r, g, b, 255 * opacity];\n};\n// Kepler prop value -> Deck.gl prop value\n// Supports nested definitions, and function transforms:\n// {keplerProp: 'deckProp'} is equivalent to:\n// {keplerProp: x => ({deckProp: x})}\nconst sharedPropMap = {\n // Apply the value of Kepler `color` prop to the deck `getFillColor` prop\n color: 'getFillColor',\n isVisible: 'visible',\n label: 'cartoLabel',\n textLabel: {\n alignment: 'getTextAlignmentBaseline',\n anchor: 'getTextAnchor',\n // Apply the value of Kepler `textLabel.color` prop to the deck `getTextColor` prop\n color: 'getTextColor',\n size: 'getTextSize'\n },\n visConfig: {\n enable3d: 'extruded',\n elevationScale: 'elevationScale',\n filled: 'filled',\n strokeColor: 'getLineColor',\n stroked: 'stroked',\n thickness: 'getLineWidth',\n radius: 'getPointRadius',\n wireframe: 'wireframe'\n }\n};\nconst customMarkersPropsMap = {\n color: 'getIconColor',\n visConfig: {\n radius: 'getIconSize'\n }\n};\nconst heatmapTilePropsMap = {\n visConfig: {\n colorRange: x => ({ colorRange: x.colors.map(hexToRGBA) }),\n radius: 'radiusPixels'\n }\n};\nconst aggregationVisConfig = {\n colorAggregation: x => ({ colorAggregation: AGGREGATION[x] || AGGREGATION.sum }),\n colorRange: x => ({ colorRange: x.colors.map(hexToRGBA) }),\n coverage: 'coverage',\n elevationPercentile: ['elevationLowerPercentile', 'elevationUpperPercentile'],\n percentile: ['lowerPercentile', 'upperPercentile']\n};\nconst defaultProps = {\n lineMiterLimit: 2,\n lineWidthUnits: 'pixels',\n pointRadiusUnits: 'pixels',\n rounded: true,\n wrapLongitude: false\n};\nfunction mergePropMaps(a = {}, b = {}) {\n return { ...a, ...b, visConfig: { ...a.visConfig, ...b.visConfig } };\n}\nexport function getLayer(type, config, dataset) {\n let basePropMap = sharedPropMap;\n if (config.visConfig?.customMarkers) {\n basePropMap = mergePropMaps(basePropMap, customMarkersPropsMap);\n }\n if (type === 'heatmapTile') {\n basePropMap = mergePropMaps(basePropMap, heatmapTilePropsMap);\n }\n if (TILE_LAYER_TYPE_TO_LAYER[type]) {\n return getTileLayer(dataset, basePropMap, type);\n }\n const geoColumn = dataset?.geoColumn;\n const getPosition = d => d[geoColumn].coordinates;\n const hexagonId = config.columns?.hex_id;\n const layerTypeDefs = {\n point: {\n Layer: GeoJsonLayer,\n propMap: {\n columns: {\n altitude: x => ({ parameters: { depthTest: Boolean(x) } })\n },\n visConfig: { outline: 'stroked' }\n }\n },\n geojson: {\n Layer: GeoJsonLayer\n },\n grid: {\n Layer: CPUGridLayer,\n propMap: { visConfig: { ...aggregationVisConfig, worldUnitSize: x => ({ cellSize: 1000 * x }) } },\n defaultProps: { getPosition }\n },\n heatmap: {\n Layer: HeatmapLayer,\n propMap: { visConfig: { ...aggregationVisConfig, radius: 'radiusPixels' } },\n defaultProps: { getPosition }\n },\n hexagon: {\n Layer: HexagonLayer,\n propMap: { visConfig: { ...aggregationVisConfig, worldUnitSize: x => ({ radius: 1000 * x }) } },\n defaultProps: { getPosition }\n },\n hexagonId: {\n Layer: H3HexagonLayer,\n propMap: { visConfig: { coverage: 'coverage' } },\n defaultProps: { getHexagon: d => d[hexagonId], stroked: false }\n }\n };\n const layer = layerTypeDefs[type];\n assert(layer, `Unsupported layer type: ${type}`);\n return {\n ...layer,\n propMap: mergePropMaps(basePropMap, layer.propMap),\n defaultProps: { ...defaultProps, ...layer.defaultProps }\n };\n}\nfunction getTileLayer(dataset, basePropMap, type) {\n const { aggregationExp, aggregationResLevel } = dataset;\n return {\n Layer: TILE_LAYER_TYPE_TO_LAYER[type] || VectorTileLayer,\n propMap: basePropMap,\n defaultProps: {\n ...defaultProps,\n ...(aggregationExp && { aggregationExp }),\n ...(aggregationResLevel && { aggregationResLevel }),\n uniqueIdProperty: 'geoid'\n }\n };\n}\nfunction domainFromAttribute(attribute, scaleType, scaleLength) {\n if (scaleType === 'ordinal' || scaleType === 'point') {\n return attribute.categories.map(c => c.category).filter(c => c !== undefined && c !== null);\n }\n if (scaleType === 'quantile' && attribute.quantiles) {\n return attribute.quantiles.global\n ? attribute.quantiles.global[scaleLength]\n : attribute.quantiles[scaleLength];\n }\n let { min } = attribute;\n if (scaleType === 'log' && min === 0) {\n min = 1e-5;\n }\n return [min, attribute.max];\n}\nfunction domainFromValues(values, scaleType) {\n if (scaleType === 'ordinal' || scaleType === 'point') {\n return groupSort(values, g => -g.length, d => d);\n }\n else if (scaleType === 'quantile') {\n return values.sort((a, b) => a - b);\n }\n else if (scaleType === 'log') {\n const [d0, d1] = extent(values);\n return [d0 === 0 ? 1e-5 : d0, d1];\n }\n return extent(values);\n}\nfunction calculateDomain(data, name, scaleType, scaleLength) {\n if (data.tilestats) {\n // Tileset data type\n const { attributes } = data.tilestats.layers[0];\n const attribute = attributes.find(a => a.attribute === name);\n return domainFromAttribute(attribute, scaleType, scaleLength);\n }\n else if (data.features) {\n // GeoJSON data type\n const values = data.features.map(({ properties }) => properties[name]);\n return domainFromValues(values, scaleType);\n }\n else if (Array.isArray(data) && data[0][name] !== undefined) {\n // JSON data type\n const values = data.map(properties => properties[name]);\n return domainFromValues(values, scaleType);\n }\n return [0, 1];\n}\nfunction normalizeAccessor(accessor, data) {\n if (data.features || data.tilestats) {\n return (object, info) => {\n if (object) {\n return accessor(object.properties || object.__source.object.properties);\n }\n const { data, index } = info;\n const proxy = createBinaryProxy(data, index);\n return accessor(proxy);\n };\n }\n return accessor;\n}\nexport function opacityToAlpha(opacity) {\n return opacity !== undefined ? Math.round(255 * Math.pow(opacity, 1 / 2.2)) : 255;\n}\nfunction getAccessorKeys(name, aggregation) {\n let keys = [name];\n if (aggregation) {\n // Snowflake will capitalized the keys, need to check lower and upper case version\n keys = keys.concat([aggregation, aggregation.toUpperCase()].map(a => `${name}_${a}`));\n }\n return keys;\n}\nfunction findAccessorKey(keys, properties) {\n for (const key of keys) {\n if (key in properties) {\n return [key];\n }\n }\n throw new Error(`Could not find property for any accessor key: ${keys}`);\n}\nexport function getColorValueAccessor({ name }, colorAggregation, data) {\n const aggregator = AGGREGATION_FUNC[colorAggregation];\n const accessor = values => aggregator(values, p => p[name]);\n return normalizeAccessor(accessor, data);\n}\nexport function getColorAccessor({ name, colorColumn }, scaleType, { aggregation, range }, opacity, data) {\n const scale = calculateLayerScale(colorColumn || name, scaleType, range, data);\n const alpha = opacityToAlpha(opacity);\n let accessorKeys = getAccessorKeys(name, aggregation);\n const accessor = properties => {\n if (!(accessorKeys[0] in properties)) {\n accessorKeys = findAccessorKey(accessorKeys, properties);\n }\n const propertyValue = properties[accessorKeys[0]];\n const { r, g, b } = rgb(scale(propertyValue));\n return [r, g, b, propertyValue === null ? 0 : alpha];\n };\n return normalizeAccessor(accessor, data);\n}\nfunction calculateLayerScale(name, scaleType, range, data) {\n const scale = SCALE_FUNCS[scaleType]();\n let domain = [];\n let scaleColor = [];\n if (scaleType !== 'identity') {\n const { colorMap, colors } = range;\n if (Array.isArray(colorMap)) {\n colorMap.forEach(([value, color]) => {\n domain.push(value);\n scaleColor.push(color);\n });\n }\n else {\n domain = calculateDomain(data, name, scaleType, colors.length);\n scaleColor = colors;\n }\n if (scaleType === 'ordinal') {\n domain = domain.slice(0, scaleColor.length);\n }\n }\n scale.domain(domain);\n scale.range(scaleColor);\n scale.unknown(UNKNOWN_COLOR);\n return scale;\n}\nconst FALLBACK_ICON = 'data:image/svg+xml;charset=utf-8;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiLz4NCjwvc3ZnPg==';\nexport function getIconUrlAccessor(field, range, { fallbackUrl, maxIconSize, useMaskedIcons }, data) {\n const urlToUnpackedIcon = (url) => ({\n id: `${url}@@${maxIconSize}`,\n url,\n width: maxIconSize,\n height: maxIconSize,\n mask: useMaskedIcons\n });\n let unknownValue = fallbackUrl || FALLBACK_ICON;\n if (range?.othersMarker) {\n unknownValue = range.othersMarker;\n }\n const unknownIcon = urlToUnpackedIcon(unknownValue);\n if (!range || !field) {\n return () => unknownIcon;\n }\n const mapping = {};\n for (const { value, markerUrl } of range.markerMap) {\n if (markerUrl) {\n mapping[value] = urlToUnpackedIcon(markerUrl);\n }\n }\n const accessor = properties => {\n const propertyValue = properties[field.name];\n return mapping[propertyValue] || unknownIcon;\n };\n return normalizeAccessor(accessor, data);\n}\nexport function getMaxMarkerSize(visConfig, visualChannels) {\n const { radiusRange, radius } = visConfig;\n const { radiusField, sizeField } = visualChannels;\n const field = radiusField || sizeField;\n return Math.ceil(radiusRange && field ? radiusRange[1] : radius);\n}\nexport function negateAccessor(accessor) {\n return typeof accessor === 'function' ? (d, i) => -accessor(d, i) : -accessor;\n}\nexport function getSizeAccessor({ name }, scaleType, aggregation, range, data) {\n const scale = scaleType ? SCALE_FUNCS[scaleType]() : identity;\n if (scaleType) {\n if (aggregation !== 'count') {\n scale.domain(calculateDomain(data, name, scaleType));\n }\n scale.range(range);\n }\n let accessorKeys = getAccessorKeys(name, aggregation);\n const accessor = properties => {\n if (!(accessorKeys[0] in properties)) {\n accessorKeys = findAccessorKey(accessorKeys, properties);\n }\n const propertyValue = properties[accessorKeys[0]];\n return scale(propertyValue);\n };\n return normalizeAccessor(accessor, data);\n}\nconst FORMATS = {\n date: s => moment.utc(s).format('MM/DD/YY HH:mm:ssa'),\n integer: d3Format('i'),\n float: d3Format('.5f'),\n timestamp: s => moment.utc(s).format('X'),\n default: String\n};\nexport function getTextAccessor({ name, type }, data) {\n const format = FORMATS[type] || FORMATS.default;\n const accessor = properties => {\n return format(properties[name]);\n };\n return normalizeAccessor(accessor, data);\n}\nexport { domainFromValues as _domainFromValues };\n", "import { GOOGLE_BASEMAPS, CARTO_MAP_STYLES, applyLayerGroupFilters, fetchStyle, getStyleUrl, someLayerGroupsDisabled } from \"../basemap.js\";\nconst CUSTOM_STYLE_ID_PREFIX = 'custom:';\nconst DEFAULT_CARTO_STYLE = 'positron';\nfunction mapLibreViewpros(config) {\n const { longitude, latitude, ...rest } = config.mapState;\n return {\n center: [longitude, latitude],\n ...rest\n };\n}\n/**\n * Get basemap properties for Carto map.\n *\n * For maplibre-based basemaps it returns style or style URL that can be used with `maplibregl.Map` compatible component.\n * * style url is returned for non-filtered standard Carto basemaps or if user used style URL directly in configuration\n * * filtered style object returned for Carto basemaps with layer groups filtered\n *\n * For Google-maps base maps, it returns options that can be used with `google.maps.Map` constructor.\n */\nexport async function fetchBasemapProps({ config, errorContext, applyLayerFilters = true }) {\n const { mapStyle } = config;\n const styleType = mapStyle.styleType || DEFAULT_CARTO_STYLE;\n if (styleType.startsWith(CUSTOM_STYLE_ID_PREFIX)) {\n const currentCustomStyle = config.customBaseMaps?.customStyle;\n if (currentCustomStyle) {\n return {\n type: 'maplibre',\n props: {\n style: currentCustomStyle.style || currentCustomStyle.url,\n ...mapLibreViewpros(config)\n },\n attribution: currentCustomStyle.customAttribution\n };\n }\n }\n if (CARTO_MAP_STYLES.includes(styleType)) {\n const { visibleLayerGroups } = mapStyle;\n const styleUrl = getStyleUrl(styleType);\n let style = styleUrl;\n let rawStyle = styleUrl;\n if (applyLayerFilters && visibleLayerGroups && someLayerGroupsDisabled(visibleLayerGroups)) {\n rawStyle = await fetchStyle({ styleUrl, errorContext });\n style = applyLayerGroupFilters(rawStyle, visibleLayerGroups);\n }\n return {\n type: 'maplibre',\n props: {\n style,\n ...mapLibreViewpros(config)\n },\n visibleLayerGroups,\n rawStyle\n };\n }\n const googleBasemapDef = GOOGLE_BASEMAPS[styleType];\n if (googleBasemapDef) {\n const { mapState } = config;\n return {\n type: 'google-maps',\n props: {\n ...googleBasemapDef,\n center: { lat: mapState.latitude, lng: mapState.longitude },\n zoom: mapState.zoom + 1,\n tilt: mapState.pitch,\n heading: mapState.bearing\n }\n };\n }\n return {\n type: 'maplibre',\n props: {\n style: getStyleUrl(DEFAULT_CARTO_STYLE),\n ...mapLibreViewpros(config)\n }\n };\n}\n", "/* eslint-disable camelcase */\nimport { CartoAPIError } from \"./carto-api-error.js\";\nimport { DEFAULT_API_BASE_URL, DEFAULT_CLIENT, DEFAULT_MAX_LENGTH_URL } from \"./common.js\";\nimport { buildPublicMapUrl, buildStatsUrl } from \"./endpoints.js\";\nimport { h3QuerySource, h3TableSource, quadbinQuerySource, quadbinTableSource, vectorQuerySource, vectorTableSource, vectorTilesetSource } from \"../sources/index.js\";\nimport { parseMap } from \"./parse-map.js\";\nimport { requestWithParameters } from \"./request-with-parameters.js\";\nimport { assert } from \"../utils.js\";\nimport { fetchBasemapProps } from \"./basemap.js\";\n/* global clearInterval, setInterval, URL */\n/* eslint-disable complexity, max-statements, max-params */\nasync function _fetchMapDataset(dataset, accessToken, apiBaseUrl, clientId, headers, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {\n const { aggregationExp, aggregationResLevel, connectionName, columns, format, geoColumn, source, type, queryParameters } = dataset;\n const cache = {};\n const globalOptions = {\n accessToken,\n apiBaseUrl,\n cache,\n clientId,\n connectionName,\n format,\n headers,\n maxLengthURL\n };\n if (type === 'tileset') {\n // TODO do we want a generic tilesetSource?\n // @ts-ignore\n dataset.data = await vectorTilesetSource({ ...globalOptions, tableName: source });\n }\n else {\n const [spatialDataType, spatialDataColumn] = geoColumn ? geoColumn.split(':') : ['geom'];\n if (spatialDataType === 'geom') {\n const options = { ...globalOptions, spatialDataColumn };\n if (type === 'table') {\n dataset.data = await vectorTableSource({ ...options, columns, tableName: source });\n }\n else if (type === 'query') {\n dataset.data = await vectorQuerySource({\n ...options,\n columns,\n sqlQuery: source,\n queryParameters\n });\n }\n }\n else if (spatialDataType === 'h3') {\n const options = { ...globalOptions, aggregationExp, aggregationResLevel, spatialDataColumn };\n if (type === 'table') {\n dataset.data = await h3TableSource({ ...options, tableName: source });\n }\n else if (type === 'query') {\n dataset.data = await h3QuerySource({ ...options, sqlQuery: source, queryParameters });\n }\n }\n else if (spatialDataType === 'quadbin') {\n const options = { ...globalOptions, aggregationExp, aggregationResLevel, spatialDataColumn };\n if (type === 'table') {\n dataset.data = await quadbinTableSource({ ...options, tableName: source });\n }\n else if (type === 'query') {\n dataset.data = await quadbinQuerySource({ ...options, sqlQuery: source, queryParameters });\n }\n }\n }\n let cacheChanged = true;\n if (cache.value) {\n cacheChanged = dataset.cache !== cache.value;\n dataset.cache = cache.value;\n }\n return cacheChanged;\n}\nasync function _fetchTilestats(attribute, dataset, accessToken, apiBaseUrl, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {\n const { connectionName, data, id, source, type, queryParameters } = dataset;\n const errorContext = {\n requestType: 'Tile stats',\n connection: connectionName,\n type,\n source\n };\n if (!('tilestats' in data)) {\n throw new CartoAPIError(new Error(`Invalid dataset for tilestats: ${id}`), errorContext);\n }\n const baseUrl = buildStatsUrl({ attribute, apiBaseUrl, ...dataset });\n const client = new URLSearchParams(data.tiles[0]).get('client');\n const headers = { Authorization: `Bearer ${accessToken}` };\n const parameters = {};\n if (client) {\n parameters.client = client;\n }\n if (type === 'query') {\n parameters.q = source;\n if (queryParameters) {\n parameters.queryParameters = JSON.stringify(queryParameters);\n }\n }\n const stats = await requestWithParameters({\n baseUrl,\n headers,\n parameters,\n errorContext,\n maxLengthURL\n });\n // Replace tilestats for attribute with value from API\n const { attributes } = data.tilestats.layers[0];\n const index = attributes.findIndex(d => d.attribute === attribute);\n attributes[index] = stats;\n return true;\n}\nasync function fillInMapDatasets({ datasets, token }, clientId, apiBaseUrl, headers, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {\n const promises = datasets.map(dataset => _fetchMapDataset(dataset, token, apiBaseUrl, clientId, headers, maxLengthURL));\n return await Promise.all(promises);\n}\nasync function fillInTileStats({ datasets, keplerMapConfig, token }, apiBaseUrl, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {\n const attributes = [];\n const { layers } = keplerMapConfig.config.visState;\n for (const layer of layers) {\n for (const channel of Object.keys(layer.visualChannels)) {\n const attribute = layer.visualChannels[channel]?.name;\n if (attribute) {\n const dataset = datasets.find(d => d.id === layer.config.dataId);\n if (dataset && dataset.type !== 'tileset' && dataset.data.tilestats) {\n // Only fetch stats for QUERY & TABLE map types\n attributes.push({ attribute, dataset });\n }\n }\n }\n }\n // Remove duplicates to avoid repeated requests\n const filteredAttributes = [];\n for (const a of attributes) {\n if (!filteredAttributes.find(({ attribute, dataset }) => attribute === a.attribute && dataset === a.dataset)) {\n filteredAttributes.push(a);\n }\n }\n const promises = filteredAttributes.map(({ attribute, dataset }) => _fetchTilestats(attribute, dataset, token, apiBaseUrl, maxLengthURL));\n return await Promise.all(promises);\n}\n/* eslint-disable max-statements */\nexport async function fetchMap({ accessToken, apiBaseUrl = DEFAULT_API_BASE_URL, cartoMapId, clientId = DEFAULT_CLIENT, headers = {}, autoRefresh, onNewData, maxLengthURL = DEFAULT_MAX_LENGTH_URL }) {\n assert(cartoMapId, 'Must define CARTO map id: fetchMap({cartoMapId: \"XXXX-XXXX-XXXX\"})');\n assert(apiBaseUrl, 'Must define apiBaseUrl');\n if (accessToken) {\n headers = { Authorization: `Bearer ${accessToken}`, ...headers };\n }\n if (autoRefresh || onNewData) {\n assert(onNewData, 'Must define `onNewData` when using autoRefresh');\n assert(typeof onNewData === 'function', '`onNewData` must be a function');\n assert(typeof autoRefresh === 'number' && autoRefresh > 0, '`autoRefresh` must be a positive number');\n }\n const baseUrl = buildPublicMapUrl({ apiBaseUrl, cartoMapId });\n const errorContext = { requestType: 'Public map', mapId: cartoMapId };\n const map = await requestWithParameters({ baseUrl, headers, errorContext, maxLengthURL });\n // Periodically check if the data has changed. Note that this\n // will not update when a map is published.\n let stopAutoRefresh;\n if (autoRefresh) {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n const intervalId = setInterval(async () => {\n const changed = await fillInMapDatasets(map, clientId, apiBaseUrl, {\n ...headers,\n 'If-Modified-Since': new Date().toUTCString()\n }, maxLengthURL);\n if (onNewData && changed.some(v => v === true)) {\n onNewData(parseMap(map));\n }\n }, autoRefresh * 1000);\n stopAutoRefresh = () => {\n clearInterval(intervalId);\n };\n }\n const geojsonLayers = map.keplerMapConfig.config.visState.layers.filter(({ type }) => type === 'geojson' || type === 'point');\n const geojsonDatasetIds = geojsonLayers.map(({ config }) => config.dataId);\n map.datasets.forEach(dataset => {\n if (geojsonDatasetIds.includes(dataset.id)) {\n const { config } = geojsonLayers.find(({ config }) => config.dataId === dataset.id);\n dataset.format = 'geojson';\n // Support for very old maps. geoColumn was not stored in the past\n if (!dataset.geoColumn && config.columns.geojson) {\n dataset.geoColumn = config.columns.geojson;\n }\n }\n });\n const [basemap] = await Promise.all([\n fetchBasemapProps({ config: map.keplerMapConfig.config, errorContext }),\n // Mutates map.datasets so that dataset.data contains data\n fillInMapDatasets(map, clientId, apiBaseUrl, headers, maxLengthURL)\n ]);\n // Mutates attributes in visualChannels to contain tile stats\n await fillInTileStats(map, apiBaseUrl, maxLengthURL);\n const out = { ...parseMap(map), basemap, ...{ stopAutoRefresh } };\n const textLayers = out.layers.filter(layer => {\n const pointType = layer.props.pointType || '';\n return pointType.includes('text');\n });\n /* global FontFace, window, document */\n if (textLayers.length && window.FontFace && !document.fonts.check('12px Inter')) {\n // Fetch font needed for labels\n const font = new FontFace('Inter', 'url(https://fonts.gstatic.com/s/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7W0Q5nw.woff2)');\n await font.load().then(f => document.fonts.add(f));\n }\n return out;\n}\n", "import { SOURCE_DEFAULTS } from \"../sources/index.js\";\nimport { buildQueryUrl } from \"./endpoints.js\";\nimport { requestWithParameters } from \"./request-with-parameters.js\";\nexport const query = async function (options) {\n const { apiBaseUrl = SOURCE_DEFAULTS.apiBaseUrl, clientId = SOURCE_DEFAULTS.clientId, maxLengthURL = SOURCE_DEFAULTS.maxLengthURL, connectionName, sqlQuery, queryParameters } = options;\n const urlParameters = { q: sqlQuery };\n if (queryParameters) {\n urlParameters.queryParameters = JSON.stringify(queryParameters);\n }\n const baseUrl = buildQueryUrl({ apiBaseUrl, connectionName });\n const headers = { Authorization: `Bearer ${options.accessToken}`, ...options.headers };\n const parameters = { client: clientId, ...urlParameters };\n const errorContext = {\n requestType: 'SQL',\n connection: options.connectionName,\n type: 'query',\n source: JSON.stringify(parameters, undefined, 2)\n };\n return await requestWithParameters({\n baseUrl,\n parameters,\n headers,\n errorContext,\n maxLengthURL\n });\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_geo_layers", "import_core", "id", "import_quadbin", "Tileset2D", "import_quadbin", "TileReader", "TileReader", "Protobuf", "import_core", "id", "import_quadbin", "id", "TileReader", "import_core", "deepEqual", "id", "deepEqual", "data", "_a", "import_core", "import_geo_layers", "import_geo_layers", "Tileset2D", "import_core", "TileReader", "VERSION", "id", "DEFAULT_OPTIONS", "TileReader", "import_geo_layers", "defaultProps", "defaultProps", "import_quadbin", "import_core", "import_layers", "import_core", "import_core", "import_geo_layers", "defaultProps", "GeoCellLayer", "import_quadbin", "renderSubLayers", "defaultProps", "TEXTURE_PROPS", "defaultProps", "tiles", "import_core", "import_layers", "TextBackgroundLayer", "defaultProps", "id", "import_core", "import_core", "import_layers", "defaultProps", "import_geo_layers", "renderSubLayers", "defaultProps", "import_core", "TileReader", "TileReader", "VERSION", "id", "DEFAULT_OPTIONS", "earcut", "import_geo_layers", "import_layers", "defaultProps", "fetch", "id", "import_d3_scale", "import_core", "import_core", "import_d3_scale", "import_layers", "import_geo_layers", "defaultProps", "data", "moment", "d3Format", "import_extensions", "id", "Layer", "defaultProps", "data", "type", "id", "config"]
|
|
4
|
+
"sourcesContent": ["// CARTO Layers\nimport { default as ClusterTileLayer } from \"./layers/cluster-tile-layer.js\";\nimport { default as H3TileLayer } from \"./layers/h3-tile-layer.js\";\nimport { default as HeatmapTileLayer } from \"./layers/heatmap-tile-layer.js\";\nimport { default as _PointLabelLayer } from \"./layers/point-label-layer.js\";\nimport { default as QuadbinTileLayer } from \"./layers/quadbin-tile-layer.js\";\nimport { default as RasterTileLayer } from \"./layers/raster-tile-layer.js\";\nimport { default as VectorTileLayer } from \"./layers/vector-tile-layer.js\";\n// Exports for playground/bindings\nconst CARTO_LAYERS = {\n ClusterTileLayer,\n H3TileLayer,\n HeatmapTileLayer,\n _PointLabelLayer,\n QuadbinTileLayer,\n RasterTileLayer,\n VectorTileLayer\n};\nexport { CARTO_LAYERS, ClusterTileLayer, H3TileLayer, HeatmapTileLayer, _PointLabelLayer, QuadbinTileLayer, RasterTileLayer, VectorTileLayer };\n// Internal Layers\nexport { default as _QuadbinLayer } from \"./layers/quadbin-layer.js\";\nexport { default as _RasterLayer } from \"./layers/raster-layer.js\";\nexport { default as _SpatialIndexTileLayer } from \"./layers/spatial-index-tile-layer.js\";\n// Helpers\nexport { default as BASEMAP, GOOGLE_BASEMAPS as _GOOGLE_BASEMAPS, getStyleUrl as _getStyleUrl, fetchStyle as _fetchStyle, applyLayerGroupFilters as _applyLayerGroupFilters, STYLE_LAYER_GROUPS as _STYLE_LAYER_GROUPS } from \"./basemap.js\";\nexport { default as colorBins } from \"./style/color-bins-style.js\";\nexport { default as colorCategories } from \"./style/color-categories-style.js\";\nexport { default as colorContinuous } from \"./style/color-continuous-style.js\";\nexport { CartoAPIError, fetchMap, query } from \"./api/index.js\";\nexport { fetchBasemapProps } from \"./api/basemap.js\";\nimport { boundaryQuerySource, boundaryTableSource, h3QuerySource, h3TableSource, h3TilesetSource, rasterSource, quadbinQuerySource, quadbinTableSource, quadbinTilesetSource, vectorQuerySource, vectorTableSource, vectorTilesetSource, SOURCE_DEFAULTS } from \"./sources/index.js\";\nconst CARTO_SOURCES = {\n boundaryQuerySource,\n boundaryTableSource,\n h3QuerySource,\n h3TableSource,\n h3TilesetSource,\n rasterSource,\n quadbinQuerySource,\n quadbinTableSource,\n quadbinTilesetSource,\n vectorQuerySource,\n vectorTableSource,\n vectorTilesetSource\n};\nexport { boundaryQuerySource, boundaryTableSource, h3QuerySource, h3TableSource, h3TilesetSource, rasterSource, quadbinQuerySource, quadbinTableSource, quadbinTilesetSource, vectorQuerySource, vectorTableSource, vectorTilesetSource, CARTO_SOURCES, SOURCE_DEFAULTS };\n", "import { GeoJsonLayer } from '@deck.gl/layers';\nimport { TileLayer } from '@deck.gl/geo-layers';\nimport { registerLoaders } from '@loaders.gl/core';\nimport { binaryToGeojson } from '@loaders.gl/gis';\nimport { CompositeLayer, _deepEqual as deepEqual } from '@deck.gl/core';\nimport { aggregateTile, clustersToBinary, computeAggregationStats, extractAggregationProperties } from \"./cluster-utils.js\";\nimport { DEFAULT_TILE_SIZE } from \"../constants.js\";\nimport QuadbinTileset2D from \"./quadbin-tileset-2d.js\";\nimport { getQuadbinPolygon } from \"./quadbin-utils.js\";\nimport CartoSpatialTileLoader from \"./schema/carto-spatial-tile-loader.js\";\nimport { injectAccessToken, TilejsonPropType } from \"./utils.js\";\nregisterLoaders([CartoSpatialTileLoader]);\nconst defaultProps = {\n data: TilejsonPropType,\n clusterLevel: { type: 'number', value: 5, min: 1 },\n getPosition: {\n type: 'accessor',\n value: ({ id }) => getQuadbinPolygon(id, 0.5).slice(2, 4)\n },\n getWeight: { type: 'accessor', value: 1 },\n refinementStrategy: 'no-overlap',\n tileSize: DEFAULT_TILE_SIZE\n};\nclass ClusterGeoJsonLayer extends TileLayer {\n initializeState() {\n super.initializeState();\n this.state.aggregationCache = new WeakMap();\n }\n renderLayers() {\n const visibleTiles = this.state.tileset?.tiles.filter((tile) => {\n return tile.isLoaded && tile.content && this.state.tileset.isTileVisible(tile);\n });\n if (!visibleTiles?.length) {\n return null;\n }\n visibleTiles.sort((a, b) => b.zoom - a.zoom);\n const { zoom } = this.context.viewport;\n const { clusterLevel, getPosition, getWeight } = this.props;\n const { aggregationCache } = this.state;\n const properties = extractAggregationProperties(visibleTiles[0]);\n const data = [];\n let needsUpdate = false;\n for (const tile of visibleTiles) {\n // Calculate aggregation based on viewport zoom\n const overZoom = Math.round(zoom - tile.zoom);\n const aggregationLevels = Math.round(clusterLevel) - overZoom;\n let tileAggregationCache = aggregationCache.get(tile.content);\n if (!tileAggregationCache) {\n tileAggregationCache = new Map();\n aggregationCache.set(tile.content, tileAggregationCache);\n }\n const didAggregate = aggregateTile(tile, tileAggregationCache, aggregationLevels, properties, getPosition, getWeight);\n needsUpdate || (needsUpdate = didAggregate);\n data.push(...tileAggregationCache.get(aggregationLevels));\n }\n data.sort((a, b) => Number(b.count - a.count));\n const clusterIds = data?.map((tile) => tile.id);\n needsUpdate || (needsUpdate = !deepEqual(clusterIds, this.state.clusterIds, 1));\n this.setState({ clusterIds });\n if (needsUpdate) {\n const stats = computeAggregationStats(data, properties);\n const binaryData = clustersToBinary(data);\n binaryData.points.attributes = { stats };\n this.setState({ data: binaryData });\n }\n const props = {\n ...this.props,\n id: 'clusters',\n data: this.state.data,\n dataComparator: (data, oldData) => {\n const newIds = data?.points?.properties?.map((tile) => tile.id);\n const oldIds = oldData?.points?.properties?.map((tile) => tile.id);\n return deepEqual(newIds, oldIds, 1);\n }\n };\n return new GeoJsonLayer(this.getSubLayerProps(props));\n }\n getPickingInfo(params) {\n const info = params.info;\n if (info.index !== -1) {\n const { data } = params.sourceLayer.props;\n info.object = binaryToGeojson(data, {\n globalFeatureId: info.index\n });\n }\n return info;\n }\n _updateAutoHighlight(info) {\n for (const layer of this.getSubLayers()) {\n layer.updateAutoHighlight(info);\n }\n }\n filterSubLayer() {\n return true;\n }\n}\nClusterGeoJsonLayer.layerName = 'ClusterGeoJsonLayer';\nClusterGeoJsonLayer.defaultProps = defaultProps;\n// Adapter layer around ClusterLayer that converts tileJSON into TileLayer API\nclass ClusterTileLayer extends CompositeLayer {\n getLoadOptions() {\n const loadOptions = super.getLoadOptions() || {};\n const tileJSON = this.props.data;\n injectAccessToken(loadOptions, tileJSON.accessToken);\n loadOptions.cartoSpatialTile = { ...loadOptions.cartoSpatialTile, scheme: 'quadbin' };\n return loadOptions;\n }\n renderLayers() {\n const tileJSON = this.props.data;\n if (!tileJSON)\n return null;\n const { tiles: data, maxresolution: maxZoom } = tileJSON;\n return [\n // @ts-ignore\n new ClusterGeoJsonLayer(this.props, {\n id: `cluster-geojson-layer-${this.props.id}`,\n data,\n // TODO: Tileset2D should be generic over TileIndex type\n TilesetClass: QuadbinTileset2D,\n maxZoom,\n loadOptions: this.getLoadOptions()\n })\n ];\n }\n}\nClusterTileLayer.layerName = 'ClusterTileLayer';\nClusterTileLayer.defaultProps = defaultProps;\nexport default ClusterTileLayer;\n", "import { cellToParent } from 'quadbin';\nimport { log } from '@deck.gl/core';\n/**\n * Aggregates tile by specified properties, caching result in tile.userData\n *\n * @returns true if data was aggregated, false if cache used\n */\nexport function aggregateTile(tile, tileAggregationCache, aggregationLevels, properties = [], getPosition, getWeight) {\n if (!tile.content)\n return false;\n // Aggregate on demand and cache result\n if (!tile.userData)\n tile.userData = {};\n const cell0 = tileAggregationCache.get(aggregationLevels)?.[0];\n if (cell0) {\n // Have already aggregated this tile\n if (properties.every(property => property.name in cell0)) {\n // Use cached result\n return false;\n }\n // Aggregated properties have changed, re-aggregate\n tileAggregationCache.clear();\n }\n const out = {};\n for (const cell of tile.content) {\n let id = cell.id;\n const position = typeof getPosition === 'function' ? getPosition(cell, {}) : getPosition;\n // Aggregate by parent rid\n for (let i = 0; i < aggregationLevels - 1; i++) {\n id = cellToParent(id);\n }\n // Unfortunately TS doesn't support Record<bigint, any>\n // https://github.com/microsoft/TypeScript/issues/46395\n const parentId = Number(id);\n if (!(parentId in out)) {\n out[parentId] = { id, count: 0, position: [0, 0] };\n for (const { name, aggregation } of properties) {\n if (aggregation === 'any') {\n // Just pick first value for ANY\n out[parentId][name] = cell.properties[name];\n }\n else {\n out[parentId][name] = 0;\n }\n }\n }\n // Layout props\n const prevTotalW = out[parentId].count;\n out[parentId].count += typeof getWeight === 'function' ? getWeight(cell, {}) : getWeight;\n const totalW = out[parentId].count;\n const W = totalW - prevTotalW;\n out[parentId].position[0] = (prevTotalW * out[parentId].position[0] + W * position[0]) / totalW;\n out[parentId].position[1] = (prevTotalW * out[parentId].position[1] + W * position[1]) / totalW;\n // Re-aggregate other properties so clusters can be styled\n for (const { name, aggregation } of properties) {\n const prevValue = out[parentId][name];\n const value = cell.properties[name];\n if (aggregation === 'average') {\n out[parentId][name] = (prevTotalW * prevValue + W * value) / totalW;\n }\n else if (aggregation === 'count' || aggregation === 'sum') {\n out[parentId][name] = prevValue + value;\n }\n else if (aggregation === 'max') {\n out[parentId][name] = Math.max(prevValue, value);\n }\n else if (aggregation === 'min') {\n out[parentId][name] = Math.min(prevValue, value);\n }\n }\n }\n tileAggregationCache.set(aggregationLevels, Object.values(out));\n return true;\n}\nexport function extractAggregationProperties(tile) {\n const properties = [];\n const validAggregations = ['any', 'average', 'count', 'min', 'max', 'sum'];\n for (const name of Object.keys(tile.content[0].properties)) {\n let aggregation = name.split('_').pop().toLowerCase();\n if (!validAggregations.includes(aggregation)) {\n log.warn(`No valid aggregation present in ${name} property`)();\n aggregation = 'any';\n }\n properties.push({ name: name, aggregation });\n }\n return properties;\n}\nexport function computeAggregationStats(data, properties) {\n const stats = {};\n for (const { name, aggregation } of properties) {\n stats[name] = { min: Infinity, max: -Infinity };\n if (aggregation !== 'any') {\n for (const d of data) {\n stats[name].min = Math.min(stats[name].min, d[name]);\n stats[name].max = Math.max(stats[name].max, d[name]);\n }\n }\n }\n return stats;\n}\nconst EMPTY_UINT16ARRAY = new Uint16Array();\nconst EMPTY_BINARY_PROPS = {\n positions: { value: new Float32Array(), size: 2 },\n properties: [],\n numericProps: {},\n featureIds: { value: EMPTY_UINT16ARRAY, size: 1 },\n globalFeatureIds: { value: EMPTY_UINT16ARRAY, size: 1 }\n};\nexport function clustersToBinary(data) {\n const positions = new Float32Array(data.length * 2);\n const featureIds = new Uint16Array(data.length);\n for (let i = 0; i < data.length; i++) {\n positions.set(data[i].position, 2 * i);\n featureIds[i] = i;\n }\n return {\n shape: 'binary-feature-collection',\n points: {\n type: 'Point',\n positions: { value: positions, size: 2 },\n properties: data,\n numericProps: {},\n featureIds: { value: featureIds, size: 1 },\n globalFeatureIds: { value: featureIds, size: 1 }\n },\n lines: {\n type: 'LineString',\n pathIndices: { value: EMPTY_UINT16ARRAY, size: 1 },\n ...EMPTY_BINARY_PROPS\n },\n polygons: {\n type: 'Polygon',\n polygonIndices: { value: EMPTY_UINT16ARRAY, size: 1 },\n primitivePolygonIndices: { value: EMPTY_UINT16ARRAY, size: 1 },\n ...EMPTY_BINARY_PROPS\n }\n };\n}\n", "export const DEFAULT_TILE_SIZE = 512;\nexport const DEFAULT_TILE_RESOLUTION = 0.5;\nexport const DEFAULT_AGGREGATION_RES_LEVEL_H3 = 4;\nexport const DEFAULT_AGGREGATION_RES_LEVEL_QUADBIN = 6;\n", "import { _Tileset2D as Tileset2D } from '@deck.gl/geo-layers';\nimport { bigIntToHex, cellToParent, cellToTile, getResolution, tileToCell } from 'quadbin';\nexport default class QuadbinTileset2D extends Tileset2D {\n // @ts-expect-error for spatial indices, TileSet2d should be parametrized by TileIndexT\n getTileIndices(opts) {\n return super\n .getTileIndices(opts)\n .map(tileToCell)\n .map(q => ({ q, i: bigIntToHex(q) }));\n }\n // @ts-expect-error TileIndex must be generic\n getTileId({ q, i }) {\n return i || bigIntToHex(q);\n }\n // @ts-expect-error TileIndex must be generic\n getTileMetadata({ q }) {\n return super.getTileMetadata(cellToTile(q));\n }\n // @ts-expect-error TileIndex must be generic\n getTileZoom({ q }) {\n return Number(getResolution(q));\n }\n // @ts-expect-error TileIndex must be generic\n getParentIndex({ q }) {\n return { q: cellToParent(q) };\n }\n}\n", "import { worldToLngLat } from '@math.gl/web-mercator';\nimport { cellToTile } from 'quadbin';\nconst TILE_SIZE = 512;\nexport function quadbinToOffset(quadbin) {\n const { x, y, z } = cellToTile(quadbin);\n const scale = TILE_SIZE / (1 << z);\n return [x * scale, TILE_SIZE - y * scale, scale];\n}\nexport function quadbinToWorldBounds(quadbin, coverage) {\n const [xOffset, yOffset, scale] = quadbinToOffset(quadbin);\n return [\n [xOffset, yOffset],\n [xOffset + coverage * scale, yOffset - coverage * scale]\n ];\n}\nexport function getQuadbinPolygon(quadbin, coverage = 1) {\n const [topLeft, bottomRight] = quadbinToWorldBounds(quadbin, coverage);\n const [w, n] = worldToLngLat(topLeft);\n const [e, s] = worldToLngLat(bottomRight);\n return [e, n, e, s, w, s, w, n, e, n];\n}\n", "// Optimized (100X speed improvement) reading function for binary data\nexport function readPackedTypedArray(TypedArray, pbf, obj) {\n const end = pbf.type === 2 ? pbf.readVarint() + pbf.pos : pbf.pos + 1;\n obj.value = new TypedArray(pbf.buf.buffer.slice(pbf.pos, end));\n pbf.pos = end;\n return obj.value;\n}\n", "import { readPackedTypedArray } from \"./fast-pbf.js\";\nclass KeyValueObjectReader {\n static read(pbf, end) {\n return pbf.readFields(KeyValueObjectReader._readField, { key: '', value: null }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.key = pbf.readString();\n else if (tag === 2)\n obj.value = pbf.readString();\n }\n}\n// Properties ========================================\nexport class PropertiesReader {\n static read(pbf, end) {\n return pbf.readFields(PropertiesReader._readField, {}, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1) {\n const { key, value } = KeyValueObjectReader.read(pbf, pbf.readVarint() + pbf.pos);\n obj[key] = value;\n }\n }\n}\nclass DoublesReader {\n static read(pbf, end) {\n const { value, size } = pbf.readFields(DoublesReader._readField, { value: [], size: 0 }, end);\n return { value, size };\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n readPackedTypedArray(Float64Array, pbf, obj);\n else if (tag === 2)\n obj.size = pbf.readVarint(true);\n }\n}\nclass IntsReader {\n static read(pbf, end) {\n const { value, size } = pbf.readFields(IntsReader._readField, { value: [], size: 0 }, end);\n return { value: new Uint32Array(value), size };\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n pbf.readPackedVarint(obj.value);\n else if (tag === 2)\n obj.size = pbf.readVarint(true);\n }\n}\nclass FieldsReader {\n static read(pbf, end) {\n return pbf.readFields(FieldsReader._readField, { id: 0 }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.id = pbf.readVarint();\n }\n}\nclass NumericPropReader {\n static read(pbf, end) {\n return pbf.readFields(NumericPropReader._readField, { value: [] }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n readPackedTypedArray(Float64Array, pbf, obj);\n }\n}\nexport class NumericPropKeyValueReader {\n static read(pbf, end) {\n return pbf.readFields(NumericPropKeyValueReader._readField, { key: '', value: null }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.key = pbf.readString();\n else if (tag === 2)\n obj.value = NumericPropReader.read(pbf, pbf.readVarint() + pbf.pos);\n }\n}\nclass PointsReader {\n static read(pbf, end) {\n return pbf.readFields(PointsReader._readField, {\n positions: null,\n globalFeatureIds: null,\n featureIds: null,\n properties: [],\n numericProps: {},\n fields: []\n }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.positions = DoublesReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 2)\n obj.globalFeatureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 3)\n obj.featureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 4)\n obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));\n else if (tag === 5) {\n const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);\n obj.numericProps[entry.key] = entry.value;\n }\n else if (tag === 6)\n obj.fields.push(FieldsReader.read(pbf, pbf.readVarint() + pbf.pos));\n }\n}\n// Lines ========================================\nclass LinesReader {\n static read(pbf, end) {\n return pbf.readFields(LinesReader._readField, {\n positions: null,\n pathIndices: null,\n globalFeatureIds: null,\n featureIds: null,\n properties: [],\n numericProps: {},\n fields: []\n }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.positions = DoublesReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 2)\n obj.pathIndices = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 3)\n obj.globalFeatureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 4)\n obj.featureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 5)\n obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));\n else if (tag === 6) {\n const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);\n obj.numericProps[entry.key] = entry.value;\n }\n else if (tag === 7)\n obj.fields.push(FieldsReader.read(pbf, pbf.readVarint() + pbf.pos));\n }\n}\nclass PolygonsReader {\n static read(pbf, end) {\n return pbf.readFields(PolygonsReader._readField, {\n positions: null,\n polygonIndices: null,\n globalFeatureIds: null,\n featureIds: null,\n primitivePolygonIndices: null,\n triangles: null,\n properties: [],\n numericProps: {},\n fields: []\n }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.positions = DoublesReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 2)\n obj.polygonIndices = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 3)\n obj.globalFeatureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 4)\n obj.featureIds = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 5)\n obj.primitivePolygonIndices = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 6)\n obj.triangles = IntsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 7)\n obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));\n else if (tag === 8) {\n const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);\n obj.numericProps[entry.key] = entry.value;\n }\n else if (tag === 9)\n obj.fields.push(FieldsReader.read(pbf, pbf.readVarint() + pbf.pos));\n }\n}\nexport class TileReader {\n static read(pbf, end) {\n return pbf.readFields(TileReader._readField, { points: null, lines: null, polygons: null }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.points = PointsReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 2)\n obj.lines = LinesReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 3)\n obj.polygons = PolygonsReader.read(pbf, pbf.readVarint() + pbf.pos);\n }\n}\n", "import { readPackedTypedArray } from \"./fast-pbf.js\";\nimport { NumericPropKeyValueReader, PropertiesReader } from \"./carto-tile.js\";\n// Indices =====================================\nexport class IndicesReader {\n static read(pbf, end) {\n return pbf.readFields(IndicesReader._readField, { value: [] }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n readPackedTypedArray(BigUint64Array, pbf, obj);\n }\n}\nclass CellsReader {\n static read(pbf, end) {\n return pbf.readFields(CellsReader._readField, { indices: null, properties: [], numericProps: {} }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.indices = IndicesReader.read(pbf, pbf.readVarint() + pbf.pos);\n else if (tag === 2)\n obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));\n else if (tag === 3) {\n const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);\n obj.numericProps[entry.key] = entry.value;\n }\n }\n}\nexport class TileReader {\n static read(pbf, end) {\n return pbf.readFields(TileReader._readField, { scheme: 0, cells: null }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.scheme = pbf.readVarint();\n else if (tag === 2)\n obj.cells = CellsReader.read(pbf, pbf.readVarint() + pbf.pos);\n }\n}\n", "import Protobuf from 'pbf';\nexport function parsePbf(buffer, TileReader) {\n const pbf = new Protobuf(buffer);\n const tile = TileReader.read(pbf);\n return tile;\n}\n", "import { log } from '@deck.gl/core';\nexport function assert(condition, message) {\n log.assert(condition, message);\n}\n// Returns a Proxy object that allows accessing binary data\n// as if it were JSON properties\nexport function createBinaryProxy(data, index) {\n const { properties, numericProps } = data;\n return new Proxy(properties[index] || {}, {\n get(target, property) {\n if (property in numericProps) {\n return numericProps[property].value[index];\n }\n return target[property];\n },\n has(target, property) {\n return property in numericProps || property in target;\n },\n ownKeys(target) {\n return [...Object.keys(numericProps), ...Reflect.ownKeys(target)];\n },\n getOwnPropertyDescriptor(target, prop) {\n return { enumerable: true, configurable: true };\n }\n });\n}\nexport function getWorkerUrl(id, version) {\n // For local testing `yarn build-workers` and then host `modules/carto/dist/`\n // return `http://localhost:8081/dist/${id}-worker.js`;\n return `https://unpkg.com/@deck.gl/carto@${version}/dist/${id}-worker.js`;\n}\nexport function scaleIdentity() {\n let unknown;\n function scale(x) {\n return x === null ? unknown : x;\n }\n scale.invert = scale;\n scale.domain = scale.range = d => d;\n scale.unknown = u => {\n if (u) {\n unknown = u;\n }\n return unknown;\n };\n scale.copy = () => {\n const scaleCopy = scaleIdentity();\n scaleCopy.unknown(unknown);\n return scaleCopy;\n };\n return scale;\n}\nexport const isObject = x => x !== null && typeof x === 'object';\nexport const isPureObject = x => isObject(x) && x.constructor === {}.constructor;\n", "import { bigIntToHex } from 'quadbin';\nexport function binaryToSpatialjson(binary) {\n const { cells, scheme } = binary;\n const count = cells.indices.value.length;\n const spatial = [];\n for (let i = 0; i < count; i++) {\n const id = scheme === 'h3' ? bigIntToHex(cells.indices.value[i]) : cells.indices.value[i];\n const properties = { ...cells.properties[i] };\n for (const key of Object.keys(cells.numericProps)) {\n properties[key] = cells.numericProps[key].value[i];\n }\n spatial.push({ id, properties });\n }\n return spatial;\n}\n", "import { TileReader } from \"./carto-spatial-tile.js\";\nimport { parsePbf } from \"./tile-loader-utils.js\";\nimport { getWorkerUrl } from \"../../utils.js\";\nimport { binaryToSpatialjson } from \"./spatialjson-utils.js\";\nconst VERSION = typeof \"9.0.38\" !== 'undefined' ? \"9.0.38\" : 'latest';\nconst id = 'cartoSpatialTile';\nconst DEFAULT_OPTIONS = {\n cartoSpatialTile: {\n scheme: 'quadbin',\n workerUrl: getWorkerUrl(id, VERSION)\n }\n};\nconst CartoSpatialTileLoader = {\n name: 'CARTO Spatial Tile',\n version: VERSION,\n id,\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: ['application/vnd.carto-spatial-tile'],\n category: 'geometry',\n parse: async (arrayBuffer, options) => parseCartoSpatialTile(arrayBuffer, options),\n parseSync: parseCartoSpatialTile,\n worker: true,\n options: DEFAULT_OPTIONS\n};\nfunction parseCartoSpatialTile(arrayBuffer, options) {\n if (!arrayBuffer)\n return null;\n const tile = parsePbf(arrayBuffer, TileReader);\n const { cells } = tile;\n const scheme = options?.cartoSpatialTile?.scheme;\n const data = { cells, scheme };\n return binaryToSpatialjson(data);\n}\nexport default CartoSpatialTileLoader;\n", "import { log } from '@deck.gl/core';\nimport { _deepEqual as deepEqual } from '@deck.gl/core';\n/**\n * Adds access token to Authorization header in loadOptions\n */\nexport function injectAccessToken(loadOptions, accessToken) {\n if (!loadOptions?.fetch?.headers?.Authorization) {\n loadOptions.fetch = {\n ...loadOptions.fetch,\n headers: { ...loadOptions.fetch?.headers, Authorization: `Bearer ${accessToken}` }\n };\n }\n}\nexport function mergeBoundaryData(geometry, properties) {\n const mapping = {};\n for (const { geoid, ...rest } of properties.properties) {\n if (geoid in mapping) {\n log.warn('Duplicate geoid key in boundary mapping, using first occurance')();\n }\n else {\n mapping[geoid] = rest;\n }\n }\n for (const type of ['points', 'lines', 'polygons']) {\n const geom = geometry[type];\n if (geom.positions.value.length === 0) {\n continue;\n }\n geom.properties = geom.properties.map(({ geoid }) => mapping[geoid]);\n // numericProps need to be filled to match length of positions buffer\n const { positions, globalFeatureIds } = geom;\n let indices = null;\n if (type === 'lines')\n indices = geom.pathIndices.value;\n if (type === 'polygons')\n indices = geom.polygonIndices.value;\n const length = positions.value.length / positions.size;\n for (const key in properties.numericProps) {\n const sourceProp = properties.numericProps[key].value;\n const TypedArray = sourceProp.constructor;\n const destProp = new TypedArray(length);\n geom.numericProps[key] = { value: destProp, size: 1 };\n if (!indices) {\n for (let i = 0; i < length; i++) {\n // points\n const featureId = globalFeatureIds.value[i];\n destProp[i] = sourceProp[featureId];\n }\n }\n else {\n // lines|polygons\n for (let i = 0; i < indices.length - 1; i++) {\n const startIndex = indices[i];\n const endIndex = indices[i + 1];\n const featureId = globalFeatureIds.value[startIndex];\n destProp.fill(sourceProp[featureId], startIndex, endIndex);\n }\n }\n }\n }\n return geometry;\n}\nexport const TilejsonPropType = {\n type: 'object',\n value: null,\n validate: (value, propType) => (propType.optional && value === null) ||\n (typeof value === 'object' &&\n Array.isArray(value.tiles) &&\n value.tiles.every(url => typeof url === 'string')),\n equal: (value1, value2) => {\n return deepEqual(value1, value2, 2);\n },\n async: true\n};\n", "import { CompositeLayer } from '@deck.gl/core';\nimport { H3HexagonLayer } from '@deck.gl/geo-layers';\nimport H3Tileset2D, { getHexagonResolution } from \"./h3-tileset-2d.js\";\nimport SpatialIndexTileLayer from \"./spatial-index-tile-layer.js\";\nimport { injectAccessToken, TilejsonPropType } from \"./utils.js\";\nimport { DEFAULT_TILE_SIZE } from \"../constants.js\";\nexport const renderSubLayers = props => {\n const { data } = props;\n const { index } = props.tile;\n if (!data || !data.length)\n return null;\n return new H3HexagonLayer(props, {\n getHexagon: d => d.id,\n centerHexagon: index,\n highPrecision: true\n });\n};\nconst defaultProps = {\n data: TilejsonPropType,\n tileSize: DEFAULT_TILE_SIZE\n};\nclass H3TileLayer extends CompositeLayer {\n initializeState() {\n H3HexagonLayer._checkH3Lib();\n }\n getLoadOptions() {\n const loadOptions = super.getLoadOptions() || {};\n const tileJSON = this.props.data;\n injectAccessToken(loadOptions, tileJSON.accessToken);\n loadOptions.cartoSpatialTile = { ...loadOptions.cartoSpatialTile, scheme: 'h3' };\n return loadOptions;\n }\n renderLayers() {\n const tileJSON = this.props.data;\n if (!tileJSON)\n return null;\n const { tiles: data } = tileJSON;\n let { minresolution, maxresolution } = tileJSON;\n // Convert Mercator zooms provided in props into H3 res levels\n // and clip into valid range provided from the tilejson\n if (this.props.minZoom) {\n minresolution = Math.max(minresolution, getHexagonResolution({ zoom: this.props.minZoom, latitude: 0 }, this.props.tileSize));\n }\n if (this.props.maxZoom) {\n maxresolution = Math.min(maxresolution, getHexagonResolution({ zoom: this.props.maxZoom, latitude: 0 }, this.props.tileSize));\n }\n const SubLayerClass = this.getSubLayerClass('spatial-index-tile', SpatialIndexTileLayer);\n // The naming is unfortunate, but minZoom & maxZoom in the context\n // of a Tileset2D refer to the resolution levels, not the Mercator zooms\n return new SubLayerClass(this.props, {\n id: `h3-tile-layer-${this.props.id}`,\n data,\n // TODO: Tileset2D should be generic over TileIndex type\n TilesetClass: H3Tileset2D,\n renderSubLayers,\n // minZoom and maxZoom are H3 resolutions, however we must use this naming as that is what the Tileset2D class expects\n minZoom: minresolution,\n maxZoom: maxresolution,\n loadOptions: this.getLoadOptions()\n });\n }\n}\nH3TileLayer.layerName = 'H3TileLayer';\nH3TileLayer.defaultProps = defaultProps;\nexport default H3TileLayer;\n", "import { _Tileset2D as Tileset2D } from '@deck.gl/geo-layers';\nimport { polygonToCells, latLngToCell, getResolution, cellToBoundary, cellToParent, gridDisk, edgeLength, UNITS, originToDirectedEdges } from 'h3-js';\nconst MAX_LATITUDE = 85.051128;\n// `polygonToCells()` fills based on hexagon center, this function will\n// pad the bounds such that all cells that overlap the bounds will be included\nfunction padBoundingBox({ west, north, east, south }, resolution) {\n const corners = [\n [north, east],\n [south, east],\n [south, west],\n [north, west]\n ];\n const cornerCells = corners.map(c => latLngToCell(c[0], c[1], resolution));\n const cornerEdgeLengths = cornerCells.map(c => (Math.max(...originToDirectedEdges(c).map(e => edgeLength(e, UNITS.rads))) * 180) / Math.PI);\n const bufferLat = Math.max(...cornerEdgeLengths);\n const bufferLon = Math.min(180, bufferLat / Math.cos((((north + south) / 2) * Math.PI) / 180));\n return {\n north: Math.min(north + bufferLat, MAX_LATITUDE),\n east: east + bufferLon,\n south: Math.max(south - bufferLat, -MAX_LATITUDE),\n west: west - bufferLon\n };\n}\nfunction getHexagonsInBoundingBox({ west, north, east, south }, resolution) {\n const longitudeSpan = Math.abs(east - west);\n if (longitudeSpan > 180) {\n // This is a known issue in h3-js: polygonToCells does not work correctly\n // when longitude span is larger than 180 degrees.\n const nSegments = Math.ceil(longitudeSpan / 180);\n let h3Indices = [];\n for (let s = 0; s < nSegments; s++) {\n const segmentWest = west + s * 180;\n const segmentEast = Math.min(segmentWest + 179.9999999, east);\n h3Indices = h3Indices.concat(getHexagonsInBoundingBox({ west: segmentWest, north, east: segmentEast, south }, resolution));\n }\n return [...new Set(h3Indices)];\n }\n const polygon = [\n [north, east],\n [south, east],\n [south, west],\n [north, west],\n [north, east]\n ];\n return polygonToCells(polygon, resolution);\n}\nfunction tileToBoundingBox(index) {\n const coordinates = cellToBoundary(index);\n const latitudes = coordinates.map(c => c[0]);\n const longitudes = coordinates.map(c => c[1]);\n const west = Math.min(...longitudes);\n const south = Math.min(...latitudes);\n const east = Math.max(...longitudes);\n const north = Math.max(...latitudes);\n return { west, south, east, north };\n}\n// Resolution conversion function. Takes a WebMercatorViewport and returns\n// a H3 resolution such that the screen space size of the hexagons is\n// similar\n// Relative scale factor (0 = no biasing, 2 = a few hexagons cover view)\nconst BIAS = 2;\nexport function getHexagonResolution(viewport, tileSize) {\n // Difference in given tile size compared to deck's internal 512px tile size,\n // expressed as an offset to the viewport zoom.\n const zoomOffset = Math.log2(tileSize / 512);\n const hexagonScaleFactor = (2 / 3) * (viewport.zoom - zoomOffset);\n const latitudeScaleFactor = Math.log(1 / Math.cos((Math.PI * viewport.latitude) / 180));\n // Clip and bias\n return Math.max(0, Math.floor(hexagonScaleFactor + latitudeScaleFactor - BIAS));\n}\nexport default class H3Tileset2D extends Tileset2D {\n /**\n * Returns all tile indices in the current viewport. If the current zoom level is smaller\n * than minZoom, return an empty array. If the current zoom level is greater than maxZoom,\n * return tiles that are on maxZoom.\n */\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getTileIndices({ viewport, minZoom, maxZoom }) {\n if (viewport.latitude === undefined)\n return [];\n const [west, south, east, north] = viewport.getBounds();\n const { tileSize } = this.opts;\n let z = getHexagonResolution(viewport, tileSize);\n let indices;\n if (typeof minZoom === 'number' && Number.isFinite(minZoom) && z < minZoom) {\n // TODO support `extent` prop\n return [];\n }\n if (typeof maxZoom === 'number' && Number.isFinite(maxZoom) && z > maxZoom) {\n z = maxZoom;\n // Once we are at max zoom, getHexagonsInBoundingBox doesn't work, simply\n // get a ring centered on the hexagon in the viewport center\n const center = latLngToCell(viewport.latitude, viewport.longitude, maxZoom);\n indices = gridDisk(center, 1);\n }\n else {\n const paddedBounds = padBoundingBox({ west, north, east, south }, z);\n indices = getHexagonsInBoundingBox(paddedBounds, z);\n }\n return indices.map(i => ({ i }));\n }\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getTileId({ i }) {\n return i;\n }\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getTileMetadata({ i }) {\n return { bbox: tileToBoundingBox(i) };\n }\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getTileZoom({ i }) {\n return getResolution(i);\n }\n // @ts-expect-error Tileset2D should be generic over TileIndex\n getParentIndex(index) {\n const resolution = getResolution(index.i);\n const i = cellToParent(index.i, resolution - 1);\n return { i };\n }\n}\n", "import { registerLoaders } from '@loaders.gl/core';\nimport CartoRasterTileLoader from \"./schema/carto-raster-tile-loader.js\";\nimport CartoSpatialTileLoader from \"./schema/carto-spatial-tile-loader.js\";\nregisterLoaders([CartoRasterTileLoader, CartoSpatialTileLoader]);\nimport { TileLayer } from '@deck.gl/geo-layers';\nimport { DEFAULT_TILE_SIZE } from \"../constants.js\";\nfunction isFeatureIdDefined(value) {\n return value !== undefined && value !== null && value !== '';\n}\nconst defaultProps = {\n tileSize: DEFAULT_TILE_SIZE\n};\nclass SpatialIndexTileLayer extends TileLayer {\n _updateAutoHighlight(info) {\n const { hoveredFeatureId } = this.state;\n const hoveredFeature = info.object;\n let newHoveredFeatureId = null;\n if (hoveredFeature) {\n newHoveredFeatureId = hoveredFeature.id;\n }\n if (hoveredFeatureId !== newHoveredFeatureId) {\n let { highlightColor } = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n this.setState({\n highlightColor,\n hoveredFeatureId: newHoveredFeatureId\n });\n }\n }\n getSubLayerPropsByTile(tile) {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n getHighlightedObjectIndex(tile) {\n const { hoveredFeatureId } = this.state;\n const data = tile.content;\n const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId);\n if (!isFeatureIdPresent ||\n !Array.isArray(data) ||\n // Quick check for whether id is within tile. data.findIndex is expensive\n !this._featureInTile(tile, hoveredFeatureId)) {\n return -1;\n }\n return data.findIndex(feature => feature.id === hoveredFeatureId);\n }\n _featureInTile(tile, featureId) {\n // TODO: Tile2DHeader index should be generic for H3TileIndex or QuadbinTileIndex\n const tileset = this.state.tileset;\n const tileZoom = tileset.getTileZoom(tile.index);\n // @ts-ignore\n const KEY = tile.index.q ? 'q' : 'i';\n // TODO - Tileset2D methods expect tile index in the shape of {x, y, z}\n let featureIndex = { [KEY]: featureId };\n let featureZoom = tileset.getTileZoom(featureIndex);\n while (!(featureZoom <= tileZoom)) {\n featureIndex = tileset.getParentIndex(featureIndex);\n featureZoom = tileset.getTileZoom(featureIndex);\n }\n return featureIndex[KEY] === tile.index[KEY];\n }\n}\nSpatialIndexTileLayer.layerName = 'SpatialIndexTileLayer';\nSpatialIndexTileLayer.defaultProps = defaultProps;\nexport default SpatialIndexTileLayer;\n", "import { readPackedTypedArray } from \"./fast-pbf.js\";\nconst ARRAY_TYPES = {\n uint8: Uint8Array,\n uint16: Uint16Array,\n uint32: Uint32Array,\n uint64: BigUint64Array,\n int8: Int8Array,\n int16: Int16Array,\n int32: Int32Array,\n int64: BigInt64Array,\n float32: Float32Array,\n float64: Float64Array\n};\n// Band ========================================\nexport class BandReader {\n static read(pbf, end) {\n return pbf.readFields(BandReader._readField, { name: '', type: '', data: null }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.name = pbf.readString();\n else if (tag === 2)\n obj.type = pbf.readString();\n else if (tag === 3) {\n const TypedArray = ARRAY_TYPES[obj.type];\n if (!TypedArray) {\n throw Error(`Invalid data type: ${obj.type}`);\n }\n obj.data = {};\n readPackedTypedArray(TypedArray, pbf, obj.data);\n }\n }\n}\nexport class TileReader {\n static read(pbf, end) {\n return pbf.readFields(TileReader._readField, { blockSize: 0, bands: [] }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.blockSize = pbf.readVarint();\n else if (tag === 2)\n obj.bands.push(BandReader.read(pbf, pbf.readVarint() + pbf.pos));\n }\n}\n", "import { TileReader } from \"./carto-raster-tile.js\";\nimport { parsePbf } from \"./tile-loader-utils.js\";\nimport { getWorkerUrl } from \"../../utils.js\";\nconst VERSION = typeof \"9.0.38\" !== 'undefined' ? \"9.0.38\" : 'latest';\nconst id = 'cartoRasterTile';\nconst DEFAULT_OPTIONS = {\n cartoRasterTile: {\n workerUrl: getWorkerUrl(id, VERSION)\n }\n};\nconst CartoRasterTileLoader = {\n name: 'CARTO Raster Tile',\n version: VERSION,\n id,\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: ['application/vnd.carto-raster-tile'],\n category: 'geometry',\n parse: async (arrayBuffer, options) => parseCartoRasterTile(arrayBuffer, options),\n parseSync: parseCartoRasterTile,\n worker: true,\n options: DEFAULT_OPTIONS\n};\nfunction parseCartoRasterTile(arrayBuffer, options) {\n if (!arrayBuffer)\n return null;\n const { bands, blockSize } = parsePbf(arrayBuffer, TileReader);\n const numericProps = {};\n for (let i = 0; i < bands.length; i++) {\n const { name, data } = bands[i];\n numericProps[name] = data;\n }\n return { blockSize, cells: { numericProps, properties: [] } };\n}\nexport default CartoRasterTileLoader;\n", "import { getResolution } from 'quadbin';\nimport { CompositeLayer } from '@deck.gl/core';\nimport { SolidPolygonLayer } from '@deck.gl/layers';\nimport { heatmap } from \"./heatmap.js\";\nimport { RTTModifier, PostProcessModifier } from \"./post-process-utils.js\";\nimport QuadbinTileLayer from \"./quadbin-tile-layer.js\";\nimport { TilejsonPropType } from \"./utils.js\";\nconst defaultColorRange = [\n [255, 255, 178],\n [254, 217, 118],\n [254, 178, 76],\n [253, 141, 60],\n [240, 59, 32],\n [189, 0, 38]\n];\nconst TEXTURE_PROPS = {\n format: 'rgba8unorm',\n mipmaps: false,\n sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n }\n};\n/**\n * Computes the unit density (inverse of cell area)\n */\nfunction unitDensityForCell(cell) {\n const cellResolution = Number(getResolution(cell));\n return Math.pow(4.0, cellResolution);\n}\n/**\n * Converts a colorRange array to a flat array with 4 components per color\n */\nfunction colorRangeToFlatArray(colorRange) {\n const flatArray = new Uint8Array(colorRange.length * 4);\n let index = 0;\n for (let i = 0; i < colorRange.length; i++) {\n const color = colorRange[i];\n flatArray[index++] = color[0];\n flatArray[index++] = color[1];\n flatArray[index++] = color[2];\n flatArray[index++] = Number.isFinite(color[3]) ? color[3] : 255;\n }\n return flatArray;\n}\n// Modified polygon layer to draw offscreen and output value expected by heatmap\nclass RTTSolidPolygonLayer extends RTTModifier(SolidPolygonLayer) {\n getShaders(type) {\n const shaders = super.getShaders(type);\n shaders.inject = {\n 'vs:#decl': `\nuniform float densityFactor;\n`,\n 'vs:#main-end': `\n // Value from getWeight accessor\n float weight = elevations;\n\n // Keep \"power\" delivered to screen constant when tiles update\n // by outputting normalized density \n weight *= densityFactor;\n\n // Pack float into 3 channels to pass to heatmap shader\n // SCALE value important, as we don't want to saturate\n // but also want enough definition to avoid banding\n const vec3 SHIFT = vec3(1.0, 256.0, 256.0 * 256.0);\n const float MAX_VAL = SHIFT.z * 255.0;\n const float SCALE = MAX_VAL / 8.0;\n weight *= SCALE;\n weight = clamp(weight, 0.0, MAX_VAL);\n vColor = vec4(mod(vec3(weight, floor(weight / SHIFT.yz)), 256.0), 255.0) / 255.0;\n`\n };\n return shaders;\n }\n draw(opts) {\n const cell = this.props.data[0];\n const maxDensity = this.props.elevationScale;\n const densityFactor = unitDensityForCell(cell.id) / maxDensity;\n for (const model of this.state.models) {\n model.setUniforms({ densityFactor });\n }\n super.draw(opts);\n }\n}\nRTTSolidPolygonLayer.layerName = 'RTTSolidPolygonLayer';\n// Modify QuadbinTileLayer to apply heatmap post process effect\nconst PostProcessQuadbinTileLayer = PostProcessModifier(QuadbinTileLayer, heatmap);\nconst defaultProps = {\n data: TilejsonPropType,\n getWeight: { type: 'accessor', value: 1 },\n onMaxDensityChange: { type: 'function', optional: true, value: null },\n colorDomain: { type: 'array', value: [0, 1] },\n colorRange: defaultColorRange,\n intensity: { type: 'number', value: 1 },\n radiusPixels: { type: 'number', min: 0, max: 100, value: 20 }\n};\nclass HeatmapTileLayer extends CompositeLayer {\n initializeState() {\n this.state = {\n isLoaded: false,\n tiles: new Set(),\n viewportChanged: false\n };\n }\n shouldUpdateState({ changeFlags }) {\n const { viewportChanged } = changeFlags;\n this.setState({ viewportChanged });\n return changeFlags.somethingChanged;\n }\n updateState(opts) {\n const { props, oldProps } = opts;\n super.updateState(opts);\n if (props.colorRange !== oldProps.colorRange) {\n this._updateColorTexture(opts);\n }\n }\n renderLayers() {\n const { data, getWeight, colorDomain, intensity, radiusPixels, _subLayerProps, updateTriggers, onMaxDensityChange, onViewportLoad, onTileLoad, onTileUnload, ...tileLayerProps } = this.props;\n // Inject modified polygon layer as sublayer into TileLayer\n const subLayerProps = {\n ..._subLayerProps,\n cell: {\n ..._subLayerProps?.cell,\n _subLayerProps: {\n ..._subLayerProps?.cell?._subLayerProps,\n fill: {\n ..._subLayerProps?.cell?._subLayerProps?.fill,\n type: RTTSolidPolygonLayer\n }\n }\n }\n };\n let tileZ = 0;\n let maxDensity = 0;\n const tiles = [...this.state.tiles].filter(t => t.isVisible && t.content);\n for (const tile of tiles) {\n const cell = tile.content[0];\n const unitDensity = unitDensityForCell(cell.id);\n maxDensity = Math.max(tile.userData.maxWeight * unitDensity, maxDensity);\n tileZ = Math.max(tile.zoom, tileZ);\n }\n // Between zoom levels the max density will change, but it isn't possible to know by what factor. Uniform data distributions lead to a factor of 4, while very localized data gives 1. As a heurstic estimate with a value inbetween (2) to make the transitions less obvious.\n const overzoom = this.context.viewport.zoom - tileZ;\n const estimatedMaxDensity = maxDensity * Math.pow(2, overzoom);\n maxDensity = estimatedMaxDensity;\n if (typeof onMaxDensityChange === 'function') {\n onMaxDensityChange(maxDensity);\n }\n return new PostProcessQuadbinTileLayer(tileLayerProps, this.getSubLayerProps({\n id: 'heatmap',\n data,\n // Re-use existing props to pass down values to sublayer\n // TODO replace with custom layer\n getFillColor: 0,\n getElevation: getWeight,\n elevationScale: maxDensity,\n colorDomain,\n radiusPixels,\n intensity,\n _subLayerProps: subLayerProps,\n refinementStrategy: 'no-overlap',\n colorTexture: this.state.colorTexture,\n // Disable line rendering\n extruded: false,\n stroked: false,\n updateTriggers: {\n getElevation: updateTriggers.getWeight\n },\n // Tile stats\n onViewportLoad: tiles => {\n this.setState({ isLoaded: true });\n if (typeof onViewportLoad === 'function') {\n onViewportLoad(tiles);\n }\n },\n onTileLoad: (tile) => {\n let maxWeight = -Infinity;\n if (typeof getWeight !== 'function') {\n maxWeight = getWeight;\n }\n else if (tile.content) {\n for (const d of tile.content) {\n maxWeight = Math.max(getWeight(d, {}), maxWeight);\n }\n }\n tile.userData = { maxWeight };\n this.state.tiles.add(tile);\n if (typeof onTileLoad === 'function') {\n onTileLoad(tile);\n }\n },\n onTileUnload: (tile) => {\n this.state.tiles.delete(tile);\n if (typeof onTileUnload === 'function') {\n onTileUnload(tile);\n }\n },\n transitions: { elevationScale: { type: 'spring', stiffness: 0.3, damping: 0.5 } }\n }));\n }\n _updateColorTexture(opts) {\n const { colorRange } = opts.props;\n let { colorTexture } = this.state;\n const colors = colorRangeToFlatArray(colorRange);\n if (colorTexture && colorTexture?.width === colorRange.length) {\n // TODO(v9): Unclear whether `setSubImageData` is a public API, or what to use if not.\n colorTexture.setSubImageData({ data: colors });\n }\n else {\n colorTexture?.destroy();\n colorTexture = this.context.device.createTexture({\n ...TEXTURE_PROPS,\n data: colors,\n width: colorRange.length,\n height: 1\n });\n }\n this.setState({ colorTexture });\n }\n}\nHeatmapTileLayer.layerName = 'HeatmapTileLayer';\nHeatmapTileLayer.defaultProps = defaultProps;\nexport default HeatmapTileLayer;\n", "const glsl = (s) => `${s}`;\n/**\n * @filter Heatmap\n * @param radiusPixels Blur radius in pixels, controls smoothness of heatmap\n * @param colorDomain Domain to apply to values prior to applying color scale\n * @param colorTexture 1D RGB lookup texture for color scale\n * @param intensity Multiplier to apply to value\n * @param opacity Output opacity\n */\nconst fs = `\\\nuniform heatmapUniforms {\nvec2 colorDomain;\nvec2 delta;\nfloat intensity;\nfloat opacity;\nfloat radiusPixels;\n} heatmap;\nuniform sampler2D colorTexture;\nvec3 colorGradient(float value) {\nreturn texture(colorTexture, vec2(value, 0.5)).rgb;\n}\nconst vec3 SHIFT = vec3(1.0, 256.0, 256.0 * 256.0);\nconst float MAX_VAL = SHIFT.z * 255.0;\nconst float SCALE = MAX_VAL / 8.0;\nvec4 pack(float value) {\nreturn vec4(mod(vec3(value, floor(value / SHIFT.yz)), 256.0), 255.0) / 255.0;\n}\nfloat unpack(vec3 color) {\nreturn 255.0 * dot(color, SHIFT);\n}\nvec4 heatmap_sampleColor(sampler2D source, vec2 texSize, vec2 texCoord) {\nbool firstPass = (heatmap.delta.y < 0.5);\nfloat accumulator = 0.0;\nfloat SUPPORT = clamp(heatmap.radiusPixels / 2.0, 8.0, 32.0);\nfloat sigma = SUPPORT / 3.0;\nfloat a = -0.5 / (sigma * sigma);\nfloat w0 = 0.3989422804014327 / sigma;\nfor (float t = -SUPPORT; t <= SUPPORT; t++) {\nvec2 percent = (t * heatmap.delta - 0.5) / SUPPORT;\nvec2 delta = percent * heatmap.radiusPixels / texSize;\nvec4 offsetColor = texture(source, texCoord + delta);\nfloat value = unpack(offsetColor.rgb);\nfloat weight = w0 * exp(a * t * t);\naccumulator += value * weight;\n}\nif (firstPass) {\nreturn pack(accumulator);\n}\nfloat density = 10.0 * heatmap.intensity * accumulator / SCALE;\nvec2 domain = heatmap.colorDomain;\nfloat f = (density - domain[0]) / (domain[1] - domain[0]);\nvec4 color = vec4(0.0);\ncolor.rgb = colorGradient(f);\ncolor.a = smoothstep(0.0, 0.1, f);\ncolor.a = pow(color.a, 1.0 / 2.2);\ncolor.a *= heatmap.opacity;\nreturn color;\n}\n`;\nexport const heatmap = {\n name: 'heatmap',\n uniformPropTypes: {\n colorDomain: { value: [0, 1] },\n delta: { value: [0, 1] },\n intensity: { value: 1, min: 0.1, max: 10 },\n opacity: { value: 1, min: 0, max: 1 },\n radiusPixels: { value: 20, min: 0, softMax: 100 }\n },\n uniformTypes: {\n colorDomain: 'vec2<f32>',\n delta: 'vec2<f32>',\n intensity: 'f32',\n opacity: 'f32',\n radiusPixels: 'f32'\n },\n getUniforms: opts => {\n if (!opts)\n return {};\n const { colorDomain = [0, 1], colorTexture, delta = [1, 0], intensity = 1, opacity = 1, radiusPixels = 20 } = opts;\n return {\n colorDomain,\n colorTexture,\n delta,\n intensity,\n opacity,\n radiusPixels\n };\n },\n fs,\n passes: [\n { sampler: true, uniforms: { delta: [1, 0] } },\n { sampler: true, uniforms: { delta: [0, 1] } }\n ]\n};\n", "import { Layer, PostProcessEffect } from '@deck.gl/core';\nconst TEXTURE_PROPS = {\n format: 'rgba8unorm',\n mipmaps: false,\n sampler: {\n minFilter: 'linear',\n magFilter: 'linear',\n addressModeU: 'clamp-to-edge',\n addressModeV: 'clamp-to-edge'\n }\n};\nfunction getPostProcessLayer(layer) {\n while (layer.parent && !layer.applyPostProcess) {\n layer = layer.parent;\n }\n return layer;\n}\n/**\n * Dummy Layer that draws nothing, just calls back to root Layer\n */\nclass DrawCallbackLayer extends Layer {\n initializeState() {\n this.id = `draw-callback-${getPostProcessLayer(this).props.id}`;\n }\n _drawLayer() {\n getPostProcessLayer(this).applyPostProcess();\n }\n}\nDrawCallbackLayer.layerName = 'DrawCallbackLayer';\n/**\n * Modifier that marks a layer for Render-to-Target rendering.\n * Resulting layer must be used as a sublayer of a layer created\n * with `PostProcessModifier`\n */\nexport function RTTModifier(BaseLayer) {\n var _a;\n // @ts-expect-error initializeState is abstract\n return _a = class RTTLayer extends BaseLayer {\n draw(opts) {\n const { moduleParameters } = opts;\n const { picking } = moduleParameters;\n const postProcessLayer = getPostProcessLayer(this);\n if (!picking.isActive) {\n postProcessLayer.enableRTT(opts);\n }\n // Draw actual layer\n super.draw(opts);\n if (!picking.isActive) {\n postProcessLayer.disableRTT();\n }\n }\n },\n // @ts-expect-error typescript doesn't see static property\n _a.layerName = `RTT-${BaseLayer.layerName}`,\n _a;\n}\n/**\n * Modifier that returns the a modified Layer, which applies a\n * postprocess effect to all subLayers created using `RTTModifier`\n */\nexport function PostProcessModifier(BaseLayer, effect) {\n var _a;\n return _a = class PostProcessLayer extends BaseLayer {\n initializeState(context) {\n super.initializeState(context);\n this._createTextures();\n this.internalState.postProcess = new PostProcessEffect(effect, this.props);\n this.internalState.postProcess.setup(context);\n }\n updateState(params) {\n super.updateState(params);\n this.internalState.postProcess.setProps(this.props);\n }\n renderLayers() {\n let subLayers = super.renderLayers();\n if (!subLayers) {\n return null;\n }\n subLayers = Array.isArray(subLayers) ? subLayers : [subLayers];\n return [...subLayers, new DrawCallbackLayer()];\n }\n _createTextures() {\n const { device } = this.context;\n this.internalState.renderBuffers = [0, 1].map(i => {\n return device.createFramebuffer({\n id: `layer-fbo-${i}`,\n colorAttachments: [device.createTexture(TEXTURE_PROPS)],\n depthStencilAttachment: 'depth16unorm'\n });\n });\n }\n _resizeBuffers(opts) {\n // TODO we could likely render to a smaller buffer for better perf\n const { moduleParameters } = opts;\n const { viewport } = this.context;\n const width = moduleParameters.devicePixelRatio * viewport.width;\n const height = moduleParameters.devicePixelRatio * viewport.height;\n this.internalState.renderBuffers.forEach((fbo) => fbo.resize({ width, height }));\n }\n enableRTT(opts) {\n this._resizeBuffers(opts);\n this.internalState.originalRenderPass = this.context.renderPass;\n const [framebuffer] = this.internalState.renderBuffers;\n // Create new render pass for RTT\n this.internalState.internalRenderPass = this.context.device.beginRenderPass({\n framebuffer,\n parameters: { viewport: [0, 0, framebuffer.width, framebuffer.height] },\n // Only clear on first render\n clearColor: this.internalState.renderInProgress ? false : [0, 0, 0, 0]\n });\n this.internalState.renderInProgress = true;\n this.context.renderPass = this.internalState.internalRenderPass;\n }\n disableRTT() {\n // End render pass, and reinstate original\n this.internalState.internalRenderPass.end();\n this.context.renderPass = this.internalState.originalRenderPass;\n }\n applyPostProcess() {\n if (!this.internalState.renderInProgress) {\n return;\n }\n // Apply post process effect\n const [inputBuffer, swapBuffer] = this.internalState.renderBuffers;\n const { framebuffer: target } = this.context.renderPass.props;\n this.internalState.postProcess.postRender({\n inputBuffer,\n swapBuffer,\n target\n });\n this.internalState.renderInProgress = false;\n }\n _finalize() {\n this.internalState.renderBuffers.forEach((fbo) => {\n fbo.destroy();\n });\n this.internalState.renderBuffers = null;\n this.internalState.postProcess.cleanup();\n }\n },\n _a.layerName = `PostProcess${BaseLayer.layerName}`,\n _a;\n}\nconst fs = /* glsl */ `\\\nvec4 copy_filterColor(vec4 color, vec2 texSize, vec2 texCoord) {\n return color;\n}\n`;\n/**\n * Copy\n * Simple module that just copies input color to output\n */\nexport const copy = {\n name: 'copy',\n fs,\n getUniforms: () => ({}),\n passes: [{ filter: true }]\n};\n", "import { CompositeLayer } from '@deck.gl/core';\nimport QuadbinLayer from \"./quadbin-layer.js\";\nimport QuadbinTileset2D from \"./quadbin-tileset-2d.js\";\nimport SpatialIndexTileLayer from \"./spatial-index-tile-layer.js\";\nimport { hexToBigInt } from 'quadbin';\nimport { injectAccessToken, TilejsonPropType } from \"./utils.js\";\nimport { DEFAULT_TILE_SIZE } from \"../constants.js\";\nexport const renderSubLayers = props => {\n const { data } = props;\n if (!data || !data.length)\n return null;\n const isBigInt = typeof data[0].id === 'bigint';\n return new QuadbinLayer(props, {\n getQuadbin: isBigInt ? d => d.id : d => hexToBigInt(d.id)\n });\n};\nconst defaultProps = {\n data: TilejsonPropType,\n tileSize: DEFAULT_TILE_SIZE\n};\nclass QuadbinTileLayer extends CompositeLayer {\n getLoadOptions() {\n const loadOptions = super.getLoadOptions() || {};\n const tileJSON = this.props.data;\n injectAccessToken(loadOptions, tileJSON.accessToken);\n loadOptions.cartoSpatialTile = { ...loadOptions.cartoSpatialTile, scheme: 'quadbin' };\n return loadOptions;\n }\n renderLayers() {\n const tileJSON = this.props.data;\n if (!tileJSON)\n return null;\n const { tiles: data, maxresolution: maxZoom } = tileJSON;\n const SubLayerClass = this.getSubLayerClass('spatial-index-tile', SpatialIndexTileLayer);\n return new SubLayerClass(this.props, {\n id: `quadbin-tile-layer-${this.props.id}`,\n data,\n // TODO: Tileset2D should be generic over TileIndex type\n TilesetClass: QuadbinTileset2D,\n renderSubLayers,\n maxZoom,\n loadOptions: this.getLoadOptions()\n });\n }\n}\nQuadbinTileLayer.layerName = 'QuadbinTileLayer';\nQuadbinTileLayer.defaultProps = defaultProps;\nexport default QuadbinTileLayer;\n", "import { _GeoCellLayer as GeoCellLayer } from '@deck.gl/geo-layers';\nimport { getQuadbinPolygon } from \"./quadbin-utils.js\";\nconst defaultProps = {\n getQuadbin: { type: 'accessor', value: (d) => d.quadbin }\n};\nclass QuadbinLayer extends GeoCellLayer {\n indexToBounds() {\n const { data, extruded, getQuadbin } = this.props;\n // To avoid z-fighting reduce polygon footprint when extruding\n const coverage = extruded ? 0.99 : 1;\n return {\n data,\n _normalize: false,\n positionFormat: 'XY',\n getPolygon: (x, objectInfo) => getQuadbinPolygon(getQuadbin(x, objectInfo), coverage),\n updateTriggers: { getPolygon: coverage }\n };\n }\n}\nQuadbinLayer.layerName = 'QuadbinLayer';\nQuadbinLayer.defaultProps = defaultProps;\nexport default QuadbinLayer;\n", "import { CompositeLayer } from '@deck.gl/core';\nimport { TextLayer, _TextBackgroundLayer as TextBackgroundLayer } from '@deck.gl/layers';\nconst [LEFT, TOP, RIGHT, BOTTOM] = [0, 1, 2, 3];\nclass EnhancedTextBackgroundLayer extends TextBackgroundLayer {\n getShaders() {\n const shaders = super.getShaders();\n let vs = shaders.vs;\n // Modify shader so that the padding is offset by the pixel offset to ensure the padding\n // always captures the anchor point. As padding is uniform we cannot pass it a per-label value\n vs = vs.replaceAll('padding.', '_padding.');\n vs = vs.replace('void main(void) {', 'void main(void) {\\n vec4 _padding = padding + instancePixelOffsets.xyxy * vec4(1.0, 1.0, -1.0, -1.0);');\n return { ...shaders, vs };\n }\n}\nEnhancedTextBackgroundLayer.layerName = 'EnhancedTextBackgroundLayer';\n// TextLayer which includes modified text-background-layer-vertex shader and only renders the\n// primary background layer in the collision pass\nclass EnhancedTextLayer extends TextLayer {\n filterSubLayer({ layer, renderPass }) {\n const background = layer.id.includes('primary-background');\n if (renderPass === 'collision') {\n return background; // Only draw primary background layer in collision pass\n }\n return !background; // Do not draw background layer in other passes\n }\n}\nEnhancedTextLayer.layerName = 'EnhancedTextLayer';\nconst defaultProps = {\n ...TextLayer.defaultProps,\n getRadius: { type: 'accessor', value: 1 },\n radiusScale: { type: 'number', min: 0, value: 1 }\n};\nclass PointLabelLayer extends CompositeLayer {\n calculatePixelOffset(secondary) {\n const { getTextAnchor: anchor, getAlignmentBaseline: alignment, getRadius, getSecondaryText, radiusScale, secondarySizeScale, sizeScale } = this.props;\n const xMult = anchor === 'middle' ? 0 : anchor === 'start' ? 1 : -1;\n const yMult = alignment === 'center' ? 0 : alignment === 'bottom' ? 1 : -1;\n // Padding based on font size (font size / 4)\n const xPadding = sizeScale / 4;\n const yPadding = sizeScale * (1 + 1 / 4);\n // Place secondary label under main label (secondary label always 'top' baseline aligned)\n const secondaryOffset = 0.6 * (1 - yMult) * sizeScale;\n let yOffset = secondary ? secondaryOffset : 0;\n // Special case, position relative to secondary label\n if (anchor === 'middle' && alignment === 'top' && getSecondaryText) {\n yOffset -= secondaryOffset;\n yOffset -= secondarySizeScale;\n yOffset += sizeScale;\n }\n // Padding based on point radius (radius/ 4)\n const radiusPadding = 1 + 1 / 4;\n return typeof getRadius === 'function'\n ? (d, info) => {\n const r = (info ? getRadius(d, info) : 1) * radiusScale * radiusPadding;\n return [xMult * (r + xPadding), yMult * (r + yPadding) + yOffset];\n }\n : [\n xMult * (getRadius * radiusScale * radiusPadding + xPadding),\n yMult * (getRadius * radiusScale * radiusPadding + yPadding) + yOffset\n ];\n }\n calculateBackgroundPadding() {\n const { getTextAnchor: anchor, getAlignmentBaseline: alignment, sizeScale } = this.props;\n // Heuristics to avoid label overlap\n const paddingX = 12 * sizeScale;\n const paddingY = 3 * sizeScale;\n const backgroundPadding = [0, 0, 0, 0];\n if (alignment === 'top') {\n backgroundPadding[TOP] = paddingY;\n }\n else if (alignment === 'bottom') {\n backgroundPadding[BOTTOM] = paddingY;\n }\n else {\n backgroundPadding[TOP] = 0.5 * paddingY;\n backgroundPadding[BOTTOM] = 0.5 * paddingY;\n }\n if (anchor === 'start') {\n backgroundPadding[LEFT] = paddingX;\n }\n else if (anchor === 'end') {\n backgroundPadding[RIGHT] = paddingX;\n }\n else {\n backgroundPadding[LEFT] = 0.5 * paddingX;\n backgroundPadding[RIGHT] = 0.5 * paddingX;\n }\n return backgroundPadding;\n }\n renderTextLayer(id, { updateTriggers: updateTriggersOverride = {}, ...props }) {\n const { data, characterSet, fontFamily, fontSettings, fontWeight, outlineColor, outlineWidth, sizeScale, radiusScale, getAlignmentBaseline, getColor, getPosition, getTextAnchor, updateTriggers } = this.props;\n return new EnhancedTextLayer(this.getSubLayerProps({\n id,\n data,\n characterSet,\n fontFamily,\n fontSettings,\n fontWeight,\n outlineColor,\n outlineWidth,\n sizeScale,\n getAlignmentBaseline,\n getColor,\n getPosition,\n getTextAnchor,\n updateTriggers: {\n ...updateTriggers,\n ...updateTriggersOverride,\n getPixelOffset: [\n updateTriggers.getRadius,\n updateTriggers.getTextAnchor,\n updateTriggers.getAlignmentBaseline,\n radiusScale,\n sizeScale\n ]\n }\n }), {\n getSize: 1,\n _subLayerProps: { background: { type: EnhancedTextBackgroundLayer } }\n }, props);\n }\n renderLayers() {\n const { getText, getSecondaryColor, getSecondaryText, secondaryOutlineColor, secondarySizeScale, updateTriggers } = this.props;\n const getPixelOffset = this.calculatePixelOffset(false);\n const backgroundPadding = this.calculateBackgroundPadding();\n const out = [\n // Text doesn't update via updateTrigger for some reason\n this.renderTextLayer(`${updateTriggers.getText}-primary`, {\n backgroundPadding,\n getText,\n getPixelOffset,\n background: true // Only use background for primary label for faster collisions\n }),\n Boolean(getSecondaryText) &&\n this.renderTextLayer(`${updateTriggers.getSecondaryText}-secondary`, {\n getText: getSecondaryText,\n getPixelOffset: this.calculatePixelOffset(true),\n getAlignmentBaseline: 'top',\n // updateTriggers: {getText: updateTriggers.getSecondaryText},\n // Optional overrides\n ...(getSecondaryColor && { getColor: getSecondaryColor }),\n ...(secondarySizeScale && { sizeScale: secondarySizeScale }),\n ...(secondaryOutlineColor && { outlineColor: secondaryOutlineColor })\n })\n ];\n return out;\n }\n}\nPointLabelLayer.layerName = 'PointLabelLayer';\nPointLabelLayer.defaultProps = defaultProps;\nexport default PointLabelLayer;\n", "import { CompositeLayer } from '@deck.gl/core';\nimport RasterLayer from \"./raster-layer.js\";\nimport QuadbinTileset2D from \"./quadbin-tileset-2d.js\";\nimport { injectAccessToken, TilejsonPropType } from \"./utils.js\";\nimport { DEFAULT_TILE_SIZE } from \"../constants.js\";\nimport { TileLayer } from '@deck.gl/geo-layers';\nimport { copy, PostProcessModifier } from \"./post-process-utils.js\";\nexport const renderSubLayers = props => {\n const tileIndex = props.tile?.index?.q;\n if (!tileIndex)\n return null;\n return new RasterLayer(props, { tileIndex });\n};\nconst defaultProps = {\n data: TilejsonPropType,\n refinementStrategy: 'no-overlap',\n tileSize: DEFAULT_TILE_SIZE\n};\nclass PostProcessTileLayer extends PostProcessModifier(TileLayer, copy) {\n filterSubLayer(context) {\n // Handle DrawCallbackLayer\n const { tile } = context.layer.props;\n if (!tile)\n return true;\n return super.filterSubLayer(context);\n }\n}\nclass RasterTileLayer extends CompositeLayer {\n getLoadOptions() {\n const loadOptions = super.getLoadOptions() || {};\n const tileJSON = this.props.data;\n injectAccessToken(loadOptions, tileJSON.accessToken);\n return loadOptions;\n }\n renderLayers() {\n const tileJSON = this.props.data;\n if (!tileJSON)\n return null;\n const { tiles: data, minzoom: minZoom, maxzoom: maxZoom } = tileJSON;\n const SubLayerClass = this.getSubLayerClass('tile', PostProcessTileLayer);\n return new SubLayerClass(this.props, {\n id: `raster-tile-layer-${this.props.id}`,\n data,\n // TODO: Tileset2D should be generic over TileIndex type\n TilesetClass: QuadbinTileset2D,\n renderSubLayers,\n minZoom,\n maxZoom,\n loadOptions: this.getLoadOptions()\n });\n }\n}\nRasterTileLayer.layerName = 'RasterTileLayer';\nRasterTileLayer.defaultProps = defaultProps;\nexport default RasterTileLayer;\n", "import { CompositeLayer } from '@deck.gl/core';\nimport { ColumnLayer } from '@deck.gl/layers';\nimport { quadbinToOffset } from \"./quadbin-utils.js\";\nimport vs from \"./raster-layer-vertex.glsl.js\";\nimport { createBinaryProxy } from \"../utils.js\";\nimport { RTTModifier } from \"./post-process-utils.js\";\nconst defaultProps = {\n ...ColumnLayer.defaultProps,\n extruded: false,\n diskResolution: 4,\n vertices: [\n [-0.5, -0.5],\n [0.5, -0.5],\n [0.5, 0.5],\n [-0.5, 0.5]\n ]\n};\n// Modified ColumnLayer with custom vertex shader\n// Use RTT to avoid inter-tile seams\nclass RasterColumnLayer extends RTTModifier(ColumnLayer) {\n getShaders() {\n const shaders = super.getShaders();\n const data = this.props.data;\n const BLOCK_WIDTH = data.data.blockSize ?? Math.sqrt(data.length);\n return { ...shaders, defines: { ...shaders.defines, BLOCK_WIDTH }, vs };\n }\n initializeState() {\n // Only add attributes needed by shader\n const attributeManager = this.getAttributeManager();\n /* eslint-disable max-len */\n attributeManager.addInstanced({\n instanceElevations: {\n size: 1,\n transition: true,\n accessor: 'getElevation'\n },\n instanceFillColors: {\n size: this.props.colorFormat.length,\n type: 'unorm8',\n transition: true,\n accessor: 'getFillColor',\n defaultValue: [0, 0, 0, 255]\n },\n instanceLineColors: {\n size: this.props.colorFormat.length,\n type: 'unorm8',\n transition: true,\n accessor: 'getLineColor',\n defaultValue: [255, 255, 255, 255]\n }\n });\n }\n}\nRasterColumnLayer.layerName = 'RasterColumnLayer';\nfunction wrappedDataComparator(oldData, newData) {\n return oldData.data === newData.data && oldData.length === newData.length;\n}\n// Adapter layer around RasterColumnLayer that converts data & accessors into correct format\nclass RasterLayer extends CompositeLayer {\n renderLayers() {\n // Rendering props underlying layer\n const { data, getElevation, getFillColor, getLineColor, getLineWidth, tileIndex, updateTriggers } = this.props;\n if (!data || !tileIndex)\n return null;\n const blockSize = data.blockSize ?? 0;\n const [xOffset, yOffset, scale] = quadbinToOffset(tileIndex);\n const offset = [xOffset, yOffset, scale / blockSize];\n // Filled Column Layer\n const CellLayer = this.getSubLayerClass('column', RasterColumnLayer);\n const { highlightedObjectIndex, highlightColor } = this.state;\n return new CellLayer(this.props, this.getSubLayerProps({\n id: 'cell',\n updateTriggers,\n getElevation: this.getSubLayerAccessor(getElevation),\n getFillColor: this.getSubLayerAccessor(getFillColor),\n getLineColor: this.getSubLayerAccessor(getLineColor),\n getLineWidth: this.getSubLayerAccessor(getLineWidth)\n }), {\n data: {\n data, // Pass through data for getSubLayerAccessor()\n length: blockSize * blockSize\n },\n dataComparator: wrappedDataComparator,\n offset,\n highlightedObjectIndex,\n highlightColor,\n // RTT requires blending otherwise opacity < 1 blends with black\n // render target\n parameters: {\n blendColorSrcFactor: 'one',\n blendAlphaSrcFactor: 'one',\n blendColorDstFactor: 'zero',\n blendAlphaDstFactor: 'zero',\n blendColorOperation: 'add',\n blendAlphaOperation: 'add'\n }\n });\n }\n getSubLayerAccessor(accessor) {\n if (typeof accessor !== 'function') {\n return super.getSubLayerAccessor(accessor);\n }\n // Proxy values back in standard feature format\n return (object, info) => {\n const { data, index } = info;\n const binaryData = data.data;\n const proxy = createBinaryProxy(binaryData.cells, index);\n // @ts-ignore (TS2349) accessor is always function\n return accessor({ properties: proxy }, info);\n };\n }\n getPickingInfo(params) {\n const info = super.getPickingInfo(params);\n if (info.index !== -1) {\n info.object = this.getSubLayerAccessor((x) => x)(undefined, {\n data: this.props,\n index: info.index\n });\n }\n return info;\n }\n _updateAutoHighlight(info) {\n const { highlightedObjectIndex } = this.state;\n let newHighlightedObjectIndex = -1;\n if (info.index !== -1) {\n newHighlightedObjectIndex = info.index;\n }\n if (highlightedObjectIndex !== newHighlightedObjectIndex) {\n let { highlightColor } = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n this.setState({\n highlightColor,\n highlightedObjectIndex: newHighlightedObjectIndex\n });\n }\n }\n}\nRasterLayer.layerName = 'RasterLayer';\nRasterLayer.defaultProps = defaultProps;\nexport default RasterLayer;\n", "export default `\\\n#version 300 es\n#define SHADER_NAME raster-layer-vertex-shader\nin vec3 positions;\nin vec3 normals;\nin float instanceElevations;\nin vec4 instanceFillColors;\nin vec4 instanceLineColors;\nin vec3 instancePickingColors;\nuniform float opacity;\nuniform bool extruded;\nuniform bool stroked;\nuniform bool isStroke;\nuniform float coverage;\nuniform float elevationScale;\nuniform float widthScale;\nuniform vec3 offset;\nout vec4 vColor;\n#ifdef FLAT_SHADING\nout vec4 position_commonspace;\n#endif\nvoid main(void) {\nvec2 tileOrigin = offset.xy;\nfloat scale = offset.z;\nint yIndex = - (gl_InstanceID / BLOCK_WIDTH);\nint xIndex = gl_InstanceID + (yIndex * BLOCK_WIDTH);\nvec2 cellCenter = scale * vec2(float(xIndex) + 0.5, float(yIndex) - 0.5);\nvec4 color = isStroke ? instanceLineColors : instanceFillColors;\nfloat shouldRender = float(color.a > 0.0 && instanceElevations >= 0.0);\nfloat cellWidth = coverage * scale;\ngeometry.position = vec4(tileOrigin + cellCenter, 0.0, 1.0);\nif (project_uProjectionMode == PROJECTION_MODE_WEB_MERCATOR_AUTO_OFFSET) {\ngeometry.position.xyz -= project_uCommonOrigin;\n}\nfloat elevation = 0.0;\nfloat strokeOffsetRatio = 1.0;\nif (extruded) {\nelevation = instanceElevations * (positions.z + 1.0) / 2.0 * elevationScale;\n} else if (stroked) {\nfloat halfOffset = project_pixel_size(widthScale) / cellWidth;\nif (isStroke) {\nstrokeOffsetRatio -= sign(positions.z) * halfOffset;\n} else {\nstrokeOffsetRatio -= halfOffset;\n}\n}\ngeometry.pickingColor = instancePickingColors;\nvec2 base = positions.xy * scale * strokeOffsetRatio * coverage * shouldRender;\nvec3 cell = vec3(base, project_size(elevation));\nDECKGL_FILTER_SIZE(cell, geometry);\ngeometry.position.xyz += cell;\ngl_Position = project_common_position_to_clipspace(geometry.position);\ngeometry.normal = project_normal(normals);\nDECKGL_FILTER_GL_POSITION(gl_Position, geometry);\nif (extruded && !isStroke) {\n#ifdef FLAT_SHADING\nposition_commonspace = geometry.position;\nvColor = vec4(color.rgb, color.a * opacity);\n#else\nvec3 lightColor = lighting_getLightColor(color.rgb, project_uCameraPosition, geometry.position.xyz, geometry.normal);\nvColor = vec4(lightColor, color.a * opacity);\n#endif\n} else {\nvColor = vec4(color.rgb, color.a * opacity);\n}\nDECKGL_FILTER_COLOR(vColor, geometry);\n}\n`;\n", "import { registerLoaders } from '@loaders.gl/core';\nimport CartoPropertiesTileLoader from \"./schema/carto-properties-tile-loader.js\";\nimport CartoVectorTileLoader from \"./schema/carto-vector-tile-loader.js\";\nregisterLoaders([CartoPropertiesTileLoader, CartoVectorTileLoader]);\nimport { ClipExtension } from '@deck.gl/extensions';\nimport { MVTLayer, _getURLFromTemplate } from '@deck.gl/geo-layers';\nimport { GeoJsonLayer } from '@deck.gl/layers';\nimport { TilejsonPropType, injectAccessToken, mergeBoundaryData } from \"./utils.js\";\nimport { DEFAULT_TILE_SIZE } from \"../constants.js\";\nconst defaultProps = {\n ...MVTLayer.defaultProps,\n data: TilejsonPropType,\n dataComparator: TilejsonPropType.equal,\n tileSize: DEFAULT_TILE_SIZE\n};\n// @ts-ignore\nclass VectorTileLayer extends MVTLayer {\n constructor(...propObjects) {\n // Force externally visible props type, as it is not possible modify via extension\n // @ts-ignore\n super(...propObjects);\n }\n initializeState() {\n super.initializeState();\n this.setState({ binary: true });\n }\n updateState(parameters) {\n const { props } = parameters;\n if (props.data) {\n super.updateState(parameters);\n const formatTiles = new URL(props.data.tiles[0]).searchParams.get('formatTiles');\n const mvt = formatTiles === 'mvt';\n this.setState({ mvt });\n }\n }\n getLoadOptions() {\n const loadOptions = super.getLoadOptions() || {};\n const tileJSON = this.props.data;\n injectAccessToken(loadOptions, tileJSON.accessToken);\n loadOptions.gis = { format: 'binary' }; // Use binary for MVT loading\n return loadOptions;\n }\n /* eslint-disable camelcase */\n async getTileData(tile) {\n const tileJSON = this.props.data;\n const { tiles, properties_tiles } = tileJSON;\n const url = _getURLFromTemplate(tiles, tile);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n const loadOptions = this.getLoadOptions();\n const { fetch } = this.props;\n const { signal } = tile;\n // Fetch geometry and attributes separately\n const geometryFetch = fetch(url, { propName: 'data', layer: this, loadOptions, signal });\n if (!properties_tiles) {\n return await geometryFetch;\n }\n const propertiesUrl = _getURLFromTemplate(properties_tiles, tile);\n if (!propertiesUrl) {\n return Promise.reject('Invalid properties URL');\n }\n const attributesFetch = fetch(propertiesUrl, {\n propName: 'data',\n layer: this,\n loadOptions,\n signal\n });\n const [geometry, attributes] = await Promise.all([geometryFetch, attributesFetch]);\n if (!geometry)\n return null;\n return attributes ? mergeBoundaryData(geometry, attributes) : geometry;\n }\n /* eslint-enable camelcase */\n renderSubLayers(props) {\n if (props.data === null) {\n return null;\n }\n if (this.state.mvt) {\n return super.renderSubLayers(props);\n }\n const tileBbox = props.tile.bbox;\n const { west, south, east, north } = tileBbox;\n const extensions = [new ClipExtension(), ...(props.extensions || [])];\n const clipProps = {\n clipBounds: [west, south, east, north]\n };\n const applyClipExtensionToSublayerProps = (subLayerId) => {\n return {\n [subLayerId]: {\n ...clipProps,\n ...props?._subLayerProps?.[subLayerId],\n extensions: [...extensions, ...(props?._subLayerProps?.[subLayerId]?.extensions || [])]\n }\n };\n };\n const subLayerProps = {\n ...props,\n autoHighlight: false,\n // Do not perform clipping on points (#9059)\n _subLayerProps: {\n ...props._subLayerProps,\n ...applyClipExtensionToSublayerProps('polygons-fill'),\n ...applyClipExtensionToSublayerProps('polygons-stroke'),\n ...applyClipExtensionToSublayerProps('linestrings')\n }\n };\n const subLayer = new GeoJsonLayer(subLayerProps);\n return subLayer;\n }\n _isWGS84() {\n // CARTO binary tile coordinates are [lng, lat], not tile-relative like MVT.\n if (this.state.mvt)\n return super._isWGS84();\n return true;\n }\n}\nVectorTileLayer.layerName = 'VectorTileLayer';\nVectorTileLayer.defaultProps = defaultProps;\nexport default VectorTileLayer;\n", "import { NumericPropKeyValueReader, PropertiesReader } from \"./carto-tile.js\";\nexport class TileReader {\n static read(pbf, end) {\n return pbf.readFields(TileReader._readField, { properties: [], numericProps: {} }, end);\n }\n static _readField(tag, obj, pbf) {\n if (tag === 1)\n obj.properties.push(PropertiesReader.read(pbf, pbf.readVarint() + pbf.pos));\n else if (tag === 2) {\n const entry = NumericPropKeyValueReader.read(pbf, pbf.readVarint() + pbf.pos);\n obj.numericProps[entry.key] = entry.value;\n }\n }\n}\n", "import { TileReader } from \"./carto-properties-tile.js\";\nimport { parsePbf } from \"./tile-loader-utils.js\";\nconst CartoPropertiesTileLoader = {\n name: 'CARTO Properties Tile',\n version: '1',\n id: 'cartoPropertiesTile',\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: ['application/vnd.carto-properties-tile'],\n category: 'geometry',\n worker: false,\n parse: async (arrayBuffer, options) => parseCartoPropertiesTile(arrayBuffer, options),\n parseSync: parseCartoPropertiesTile,\n options: {}\n};\nfunction parseCartoPropertiesTile(arrayBuffer, options) {\n if (!arrayBuffer)\n return null;\n return parsePbf(arrayBuffer, TileReader);\n}\nexport default CartoPropertiesTileLoader;\n", "import earcut from 'earcut';\nimport { TileReader } from \"./carto-tile.js\";\nimport { parsePbf } from \"./tile-loader-utils.js\";\nimport { getWorkerUrl } from \"../../utils.js\";\nconst VERSION = typeof \"9.0.38\" !== 'undefined' ? \"9.0.38\" : 'latest';\nconst id = 'cartoVectorTile';\nconst DEFAULT_OPTIONS = {\n cartoVectorTile: {\n workerUrl: getWorkerUrl(id, VERSION)\n }\n};\nconst CartoVectorTileLoader = {\n name: 'CARTO Vector Tile',\n version: VERSION,\n id,\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: ['application/vnd.carto-vector-tile'],\n category: 'geometry',\n parse: async (arrayBuffer, options) => parseCartoVectorTile(arrayBuffer, options),\n parseSync: parseCartoVectorTile,\n worker: true,\n options: DEFAULT_OPTIONS\n};\nfunction triangulatePolygon(polygons, target, { startPosition, endPosition, indices }) {\n const coordLength = polygons.positions.size;\n const start = startPosition * coordLength;\n const end = endPosition * coordLength;\n // Extract positions and holes for just this polygon\n const polygonPositions = polygons.positions.value.subarray(start, end);\n // Holes are referenced relative to outer polygon\n const holes = indices.slice(1).map((n) => n - startPosition);\n // Compute triangulation\n const triangles = earcut(polygonPositions, holes, coordLength);\n // Indices returned by triangulation are relative to start\n // of polygon, so we need to offset\n for (let t = 0, tl = triangles.length; t < tl; ++t) {\n target.push(startPosition + triangles[t]);\n }\n}\nfunction triangulate(polygons) {\n const { polygonIndices, primitivePolygonIndices } = polygons;\n const triangles = [];\n let rangeStart = 0;\n for (let i = 0; i < polygonIndices.value.length - 1; i++) {\n const startPosition = polygonIndices.value[i];\n const endPosition = polygonIndices.value[i + 1];\n // Extract hole indices between start & end position\n const rangeEnd = primitivePolygonIndices.value.indexOf(endPosition);\n const indices = primitivePolygonIndices.value.subarray(rangeStart, rangeEnd);\n rangeStart = rangeEnd;\n triangulatePolygon(polygons, triangles, { startPosition, endPosition, indices });\n }\n polygons.triangles = { value: new Uint32Array(triangles), size: 1 };\n}\nfunction parseCartoVectorTile(arrayBuffer, options) {\n if (!arrayBuffer)\n return null;\n const tile = parsePbf(arrayBuffer, TileReader);\n if (tile.polygons && !tile.polygons.triangles) {\n triangulate(tile.polygons);\n }\n return tile;\n}\nexport default CartoVectorTileLoader;\n", "/**\n *\n * Custom error for reported errors in CARTO Maps API.\n * Provides useful debugging information in console and context for applications.\n *\n */\nexport class CartoAPIError extends Error {\n constructor(error, errorContext, response, responseJson) {\n let responseString = 'Failed to connect';\n if (response) {\n responseString = 'Server returned: ';\n if (response.status === 400) {\n responseString += 'Bad request';\n }\n else if (response.status === 401 || response.status === 403) {\n responseString += 'Unauthorized access';\n }\n else if (response.status === 404) {\n responseString += 'Not found';\n }\n else {\n responseString += 'Error';\n }\n responseString += ` (${response.status}):`;\n }\n responseString += ` ${error.message || error}`;\n let message = `${errorContext.requestType} API request failed`;\n message += `\\n${responseString}`;\n for (const key of Object.keys(errorContext)) {\n if (key === 'requestType')\n continue; // eslint-disable-line no-continue\n message += `\\n${formatErrorKey(key)}: ${errorContext[key]}`;\n }\n message += '\\n';\n super(message);\n this.name = 'CartoAPIError';\n this.response = response;\n this.responseJson = responseJson;\n this.error = error;\n this.errorContext = errorContext;\n }\n}\n/**\n * Converts camelCase to Camel Case\n */\nfunction formatErrorKey(key) {\n return key.replace(/([A-Z])/g, ' $1').replace(/^./, s => s.toUpperCase());\n}\n", "import { CartoAPIError } from \"./api/carto-api-error.js\";\nconst cartoStyleUrlTemplate = 'https://basemaps.cartocdn.com/gl/{basemap}-gl-style/style.json';\nexport const CARTO_MAP_STYLES = ['positron', 'dark-matter', 'voyager'];\nexport const GOOGLE_BASEMAPS = {\n roadmap: {\n mapTypeId: 'roadmap',\n mapId: '3754c817b510f791'\n },\n 'google-positron': {\n mapTypeId: 'roadmap',\n mapId: 'ea84ae4203ef21cd'\n },\n 'google-dark-matter': {\n mapTypeId: 'roadmap',\n mapId: '2fccc3b36c22a0e2'\n },\n 'google-voyager': {\n mapTypeId: 'roadmap',\n mapId: '885caf1e15bb9ef2'\n },\n satellite: {\n mapTypeId: 'satellite'\n },\n hybrid: {\n mapTypeId: 'hybrid'\n },\n terrain: {\n mapTypeId: 'terrain'\n }\n};\nexport const STYLE_LAYER_GROUPS = [\n {\n slug: 'label',\n filter: ({ id }) => Boolean(id.match(/(?=(label|_label|place-|place_|poi-|poi_|watername_|roadname_|housenumber))/)),\n defaultVisibility: true\n },\n {\n slug: 'road',\n filter: ({ id }) => Boolean(id.match(/(?=(road|railway|tunnel|street|bridge))(?!.*label)/)),\n defaultVisibility: true\n },\n {\n slug: 'border',\n filter: ({ id }) => Boolean(id.match(/border|boundaries|boundary_/)),\n defaultVisibility: false\n },\n {\n slug: 'building',\n filter: ({ id }) => Boolean(id.match(/building/)),\n defaultVisibility: true\n },\n {\n slug: 'water',\n filter: ({ id }) => Boolean(id.match(/(?=(water|stream|ferry))/)),\n defaultVisibility: true\n },\n {\n slug: 'land',\n filter: ({ id }) => Boolean(id.match(/(?=(parks|landcover|industrial|sand|hillshade|park_))/)),\n defaultVisibility: true\n }\n];\nexport function applyLayerGroupFilters(style, visibleLayerGroups) {\n if (!Array.isArray(style?.layers)) {\n return style;\n }\n const removedLayerFilters = STYLE_LAYER_GROUPS.filter(lg => !visibleLayerGroups[lg.slug]).map(lg => lg.filter);\n const visibleLayers = style.layers.filter(layer => removedLayerFilters.every(match => !match(layer)));\n return {\n ...style,\n layers: visibleLayers\n };\n}\nexport function someLayerGroupsDisabled(visibleLayerGroups) {\n return visibleLayerGroups && Object.values(visibleLayerGroups).every(Boolean) === false;\n}\nexport function getStyleUrl(styleType) {\n return cartoStyleUrlTemplate.replace('{basemap}', styleType);\n}\nexport async function fetchStyle({ styleUrl, errorContext }) {\n /* global fetch */\n let response;\n return await fetch(styleUrl, { mode: 'cors' })\n .then(res => {\n response = res;\n return res.json();\n })\n .catch(error => {\n throw new CartoAPIError(error, { ...errorContext, requestType: 'Basemap style' }, response);\n });\n}\nexport default {\n VOYAGER: getStyleUrl('voyager'),\n POSITRON: getStyleUrl('positron'),\n DARK_MATTER: getStyleUrl('dark-matter'),\n VOYAGER_NOLABELS: getStyleUrl('voyager-nolabels'),\n POSITRON_NOLABELS: getStyleUrl('positron-nolabels'),\n DARK_MATTER_NOLABELS: getStyleUrl('dark-matter-nolabels')\n};\n", "import { scaleThreshold } from 'd3-scale';\nimport getPalette, { DEFAULT_PALETTE, NULL_COLOR } from \"./palette.js\";\nimport { assert } from \"../utils.js\";\nimport { getAttrValue } from \"./utils.js\";\n/**\n * Helper function for quickly creating a color bins style based on `d3` `scaleThreshold`.\n *\n * Data values of each attribute are rounded down to the nearest value in the domain and are then\n * styled with the corresponding color.\n *\n * @return accessor that maps objects to `Color` values\n */\nexport default function colorBins({ attr, domain, colors = DEFAULT_PALETTE, nullColor = NULL_COLOR }) {\n assert(Array.isArray(domain), 'Expected \"domain\" to be an array of numbers');\n const palette = typeof colors === 'string' ? getPalette(colors, domain.length + 1) : colors;\n const color = scaleThreshold().domain(domain).range(palette);\n return (d, info) => {\n const value = getAttrValue(attr, d, info);\n return typeof value === 'number' && Number.isFinite(value) ? color(value) : nullColor;\n };\n}\n", "import * as cartoColors from 'cartocolor';\nimport { assert } from \"../utils.js\";\nexport const DEFAULT_PALETTE = 'PurpOr';\nexport const NULL_COLOR = [204, 204, 204];\nexport const OTHERS_COLOR = [119, 119, 119];\nexport default function getPalette(name, numCategories) {\n const palette = cartoColors[name];\n let paletteIndex = numCategories;\n assert(palette, `Palette \"${name}\" not found. Expected a CARTOColors string`);\n const palettesColorVariants = Object.keys(palette)\n .filter(p => p !== 'tags')\n .map(Number);\n const longestPaletteIndex = Math.max(...palettesColorVariants);\n const smallestPaletteIndex = Math.min(...palettesColorVariants);\n if (!Number.isInteger(numCategories) || numCategories > longestPaletteIndex) {\n paletteIndex = longestPaletteIndex;\n }\n else if (numCategories < smallestPaletteIndex) {\n paletteIndex = smallestPaletteIndex;\n }\n let colors = palette[paletteIndex];\n if (palette.tags && palette.tags.includes('qualitative')) {\n colors = colors.slice(0, -1);\n }\n return colors.map(c => hexToRgb(c));\n}\nexport function hexToRgb(hex) {\n // Evaluate #ABC\n let result = /^#?([a-f\\d]{1})([a-f\\d]{1})([a-f\\d]{1})$/i.exec(hex);\n if (result) {\n return [\n parseInt(result[1] + result[1], 16),\n parseInt(result[2] + result[2], 16),\n parseInt(result[3] + result[3], 16),\n 255\n ];\n }\n // Evaluate #ABCD\n result = /^#?([a-f\\d]{1})([a-f\\d]{1})([a-f\\d]{1})([a-f\\d]{1})$/i.exec(hex);\n if (result) {\n return [\n parseInt(result[1] + result[1], 16),\n parseInt(result[2] + result[2], 16),\n parseInt(result[3] + result[3], 16),\n parseInt(result[4] + result[4], 16)\n ];\n }\n // Evaluate #ABCDEF\n result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n if (result) {\n return [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16), 255];\n }\n // Evaluate #ABCDEFAF\n result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n assert(result, `Hexadecimal color \"${hex}\" was not parsed correctly`);\n return [\n parseInt(result[1], 16),\n parseInt(result[2], 16),\n parseInt(result[3], 16),\n parseInt(result[4], 16)\n ];\n}\n", "import { assert } from \"../utils.js\";\nconst ALLOWED_ATTR_TYPES = Object.freeze(['function', 'string']);\nexport function getAttrValue(attr, d, info) {\n assert(typeof d === 'object', 'Expected \"data\" to be an object');\n assert(ALLOWED_ATTR_TYPES.includes(typeof attr), 'Expected \"attr\" to be a function or string');\n // Is function\n if (typeof attr === 'function') {\n return attr(d, info);\n }\n return d?.properties?.[attr];\n}\n", "import getPalette, { DEFAULT_PALETTE, NULL_COLOR, OTHERS_COLOR } from \"./palette.js\";\nimport { assert } from \"../utils.js\";\nimport { getAttrValue } from \"./utils.js\";\n/**\n * Helper function for quickly creating a color category style.\n *\n * Data values of each attribute listed in the domain are mapped one to one\n * with corresponding colors in the range.\n *\n * @return accessor that maps objects to `Color` values\n */\nexport default function colorCategories({ attr, domain, colors = DEFAULT_PALETTE, nullColor = NULL_COLOR, othersColor = OTHERS_COLOR }) {\n assert(Array.isArray(domain), 'Expected \"domain\" to be an array of numbers or strings');\n const colorsByCategory = {};\n const palette = typeof colors === 'string' ? getPalette(colors, domain.length) : colors;\n for (const [i, c] of domain.entries()) {\n colorsByCategory[c] = palette[i];\n }\n return (d, info) => {\n const value = getAttrValue(attr, d, info);\n return (typeof value === 'number' && Number.isFinite(value)) || typeof value === 'string'\n ? colorsByCategory[value] || othersColor\n : nullColor;\n };\n}\n", "import { scaleLinear } from 'd3-scale';\nimport getPalette, { DEFAULT_PALETTE, NULL_COLOR } from \"./palette.js\";\nimport { assert } from \"../utils.js\";\nimport { getAttrValue } from \"./utils.js\";\n/**\n * Helper function for quickly creating a color continuous style.\n *\n * Data values of each field are interpolated linearly across values in the domain and\n * are then styled with a blend of the corresponding color in the range.\n *\n * @return accessor that maps objects to `Color` values\n */\nexport default function colorContinuous({ attr, domain, colors = DEFAULT_PALETTE, nullColor = NULL_COLOR }) {\n assert(Array.isArray(domain), 'Expected \"domain\" to be an array of numbers');\n const palette = typeof colors === 'string' ? getPalette(colors, domain.length) : colors;\n const color = scaleLinear().domain(domain).range(palette);\n return (d, info) => {\n const value = getAttrValue(attr, d, info);\n return typeof value === 'number' && Number.isFinite(value) ? color(value) : nullColor;\n };\n}\n", "export const DEFAULT_API_BASE_URL = 'https://gcp-us-east1.api.carto.com';\nexport const DEFAULT_CLIENT = 'deck-gl-carto';\nexport const V3_MINOR_VERSION = '3.4';\n// Fastly default limit is 8192; leave some padding.\nexport const DEFAULT_MAX_LENGTH_URL = 7000;\n", "function joinPath(...args) {\n return args.map(part => (part.endsWith('/') ? part.slice(0, -1) : part)).join('/');\n}\nfunction buildV3Path(apiBaseUrl, version, endpoint, ...rest) {\n return joinPath(apiBaseUrl, version, endpoint, ...rest);\n}\nexport function buildPublicMapUrl({ apiBaseUrl, cartoMapId }) {\n return buildV3Path(apiBaseUrl, 'v3', 'maps', 'public', cartoMapId);\n}\nexport function buildStatsUrl({ attribute, apiBaseUrl, connectionName, source, type }) {\n if (type === 'query') {\n return buildV3Path(apiBaseUrl, 'v3', 'stats', connectionName, attribute);\n }\n // type === 'table'\n return buildV3Path(apiBaseUrl, 'v3', 'stats', connectionName, source, attribute);\n}\nexport function buildSourceUrl({ apiBaseUrl, connectionName, endpoint }) {\n return buildV3Path(apiBaseUrl, 'v3', 'maps', connectionName, endpoint);\n}\nexport function buildQueryUrl({ apiBaseUrl, connectionName }) {\n return buildV3Path(apiBaseUrl, 'v3', 'sql', connectionName, 'query');\n}\n", "import { VERSION } from '@deck.gl/core';\nimport { isPureObject } from \"../utils.js\";\nimport { CartoAPIError } from \"./carto-api-error.js\";\nimport { DEFAULT_MAX_LENGTH_URL, V3_MINOR_VERSION } from \"./common.js\";\n/**\n * Parameters added to all requests issued with `requestWithParameters()`.\n * These parameters override parameters already in the base URL, but not\n * user-provided parameters.\n */\nconst DEFAULT_PARAMETERS = {\n v: V3_MINOR_VERSION,\n deckglVersion: VERSION\n};\nconst DEFAULT_HEADERS = {\n Accept: 'application/json',\n 'Content-Type': 'application/json'\n};\nconst REQUEST_CACHE = new Map();\nexport async function requestWithParameters({ baseUrl, parameters = {}, headers: customHeaders = {}, errorContext, maxLengthURL = DEFAULT_MAX_LENGTH_URL }) {\n parameters = { ...DEFAULT_PARAMETERS, ...parameters };\n baseUrl = excludeURLParameters(baseUrl, Object.keys(parameters));\n const key = createCacheKey(baseUrl, parameters, customHeaders);\n if (REQUEST_CACHE.has(key)) {\n return REQUEST_CACHE.get(key);\n }\n const url = createURLWithParameters(baseUrl, parameters);\n const headers = { ...DEFAULT_HEADERS, ...customHeaders };\n /* global fetch */\n const fetchPromise = url.length > maxLengthURL\n ? fetch(baseUrl, { method: 'POST', body: JSON.stringify(parameters), headers })\n : fetch(url, { headers });\n let response;\n let responseJson;\n const jsonPromise = fetchPromise\n .then((_response) => {\n response = _response;\n return response.json();\n })\n .then((json) => {\n responseJson = json;\n if (!response || !response.ok) {\n throw new Error(json.error);\n }\n return json;\n })\n .catch((error) => {\n REQUEST_CACHE.delete(key);\n throw new CartoAPIError(error, errorContext, response, responseJson);\n });\n REQUEST_CACHE.set(key, jsonPromise);\n return jsonPromise;\n}\nfunction createCacheKey(baseUrl, parameters, headers) {\n const parameterEntries = Object.entries(parameters).sort(([a], [b]) => (a > b ? 1 : -1));\n const headerEntries = Object.entries(headers).sort(([a], [b]) => (a > b ? 1 : -1));\n return JSON.stringify({ baseUrl, parameters: parameterEntries, headers: headerEntries });\n}\n/**\n * Appends query string parameters to a URL. Existing URL parameters are kept,\n * unless there is a conflict, in which case the new parameters override\n * those already in the URL.\n */\nfunction createURLWithParameters(baseUrlString, parameters) {\n const baseUrl = new URL(baseUrlString);\n for (const [key, value] of Object.entries(parameters)) {\n if (isPureObject(value) || Array.isArray(value)) {\n baseUrl.searchParams.set(key, JSON.stringify(value));\n }\n else {\n baseUrl.searchParams.set(key, value.toString());\n }\n }\n return baseUrl.toString();\n}\n/**\n * Deletes query string parameters from a URL.\n */\nfunction excludeURLParameters(baseUrlString, parameters) {\n const baseUrl = new URL(baseUrlString);\n for (const param of parameters) {\n if (baseUrl.searchParams.has(param)) {\n baseUrl.searchParams.delete(param);\n }\n }\n return baseUrl.toString();\n}\n", "/* eslint-disable camelcase */\nimport { DEFAULT_API_BASE_URL, DEFAULT_CLIENT, DEFAULT_MAX_LENGTH_URL } from \"../api/common.js\";\nimport { buildSourceUrl } from \"../api/endpoints.js\";\nimport { requestWithParameters } from \"../api/request-with-parameters.js\";\nexport const SOURCE_DEFAULTS = {\n apiBaseUrl: DEFAULT_API_BASE_URL,\n clientId: DEFAULT_CLIENT,\n format: 'tilejson',\n headers: {},\n maxLengthURL: DEFAULT_MAX_LENGTH_URL\n};\nexport async function baseSource(endpoint, options, urlParameters) {\n const { accessToken, connectionName, cache, ...optionalOptions } = options;\n const mergedOptions = { ...SOURCE_DEFAULTS, accessToken, connectionName, endpoint };\n for (const key in optionalOptions) {\n if (optionalOptions[key]) {\n mergedOptions[key] = optionalOptions[key];\n }\n }\n const baseUrl = buildSourceUrl(mergedOptions);\n const { clientId, maxLengthURL, format } = mergedOptions;\n const headers = { Authorization: `Bearer ${options.accessToken}`, ...options.headers };\n const parameters = { client: clientId, ...urlParameters };\n const errorContext = {\n requestType: 'Map instantiation',\n connection: options.connectionName,\n type: endpoint,\n source: JSON.stringify(parameters, undefined, 2)\n };\n const mapInstantiation = await requestWithParameters({\n baseUrl,\n parameters,\n headers,\n errorContext,\n maxLengthURL\n });\n const dataUrl = mapInstantiation[format].url[0];\n if (cache) {\n cache.value = parseInt(new URL(dataUrl).searchParams.get('cache') || '', 10);\n }\n errorContext.requestType = 'Map data';\n if (format === 'tilejson') {\n const json = await requestWithParameters({\n baseUrl: dataUrl,\n headers,\n errorContext,\n maxLengthURL\n });\n if (accessToken) {\n json.accessToken = accessToken;\n }\n return json;\n }\n return await requestWithParameters({\n baseUrl: dataUrl,\n headers,\n errorContext,\n maxLengthURL\n });\n}\n", "import { baseSource } from \"./base-source.js\";\nexport const boundaryQuerySource = async function (options) {\n const { columns, filters, tilesetTableName, propertiesSqlQuery, queryParameters } = options;\n const urlParameters = {\n tilesetTableName,\n propertiesSqlQuery\n };\n if (columns) {\n urlParameters.columns = columns.join(',');\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n if (queryParameters) {\n urlParameters.queryParameters = queryParameters;\n }\n return baseSource('boundary', options, urlParameters);\n};\n", "import { baseSource } from \"./base-source.js\";\nexport const boundaryTableSource = async function (options) {\n const { filters, tilesetTableName, columns, propertiesTableName } = options;\n const urlParameters = {\n tilesetTableName,\n propertiesTableName\n };\n if (columns) {\n urlParameters.columns = columns.join(',');\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('boundary', options, urlParameters);\n};\n", "/* eslint-disable camelcase */\nimport { DEFAULT_AGGREGATION_RES_LEVEL_H3 } from \"../constants.js\";\nimport { baseSource } from \"./base-source.js\";\nexport const h3QuerySource = async function (options) {\n const { aggregationExp, aggregationResLevel = DEFAULT_AGGREGATION_RES_LEVEL_H3, sqlQuery, spatialDataColumn = 'h3', queryParameters, filters } = options;\n const urlParameters = {\n aggregationExp,\n spatialDataColumn,\n spatialDataType: 'h3',\n q: sqlQuery\n };\n if (aggregationResLevel) {\n urlParameters.aggregationResLevel = String(aggregationResLevel);\n }\n if (queryParameters) {\n urlParameters.queryParameters = queryParameters;\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('query', options, urlParameters);\n};\n", "/* eslint-disable camelcase */\nimport { DEFAULT_AGGREGATION_RES_LEVEL_H3 } from \"../constants.js\";\nimport { baseSource } from \"./base-source.js\";\nexport const h3TableSource = async function (options) {\n const { aggregationExp, aggregationResLevel = DEFAULT_AGGREGATION_RES_LEVEL_H3, spatialDataColumn = 'h3', tableName, filters } = options;\n const urlParameters = {\n aggregationExp,\n name: tableName,\n spatialDataColumn,\n spatialDataType: 'h3'\n };\n if (aggregationResLevel) {\n urlParameters.aggregationResLevel = String(aggregationResLevel);\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('table', options, urlParameters);\n};\n", "import { baseSource } from \"./base-source.js\";\nexport const h3TilesetSource = async function (options) {\n const { tableName } = options;\n const urlParameters = { name: tableName };\n return baseSource('tileset', options, urlParameters);\n};\n", "import { baseSource } from \"./base-source.js\";\nexport const rasterSource = async function (options) {\n const { tableName, filters } = options;\n const urlParameters = { name: tableName };\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('raster', options, urlParameters);\n};\n", "/* eslint-disable camelcase */\nimport { DEFAULT_AGGREGATION_RES_LEVEL_QUADBIN } from \"../constants.js\";\nimport { baseSource } from \"./base-source.js\";\nexport const quadbinQuerySource = async function (options) {\n const { aggregationExp, aggregationResLevel = DEFAULT_AGGREGATION_RES_LEVEL_QUADBIN, sqlQuery, spatialDataColumn = 'quadbin', queryParameters, filters } = options;\n const urlParameters = {\n aggregationExp,\n q: sqlQuery,\n spatialDataColumn,\n spatialDataType: 'quadbin'\n };\n if (aggregationResLevel) {\n urlParameters.aggregationResLevel = String(aggregationResLevel);\n }\n if (queryParameters) {\n urlParameters.queryParameters = queryParameters;\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('query', options, urlParameters);\n};\n", "/* eslint-disable camelcase */\nimport { DEFAULT_AGGREGATION_RES_LEVEL_QUADBIN } from \"../constants.js\";\nimport { baseSource } from \"./base-source.js\";\nexport const quadbinTableSource = async function (options) {\n const { aggregationExp, aggregationResLevel = DEFAULT_AGGREGATION_RES_LEVEL_QUADBIN, spatialDataColumn = 'quadbin', tableName, filters } = options;\n const urlParameters = {\n aggregationExp,\n name: tableName,\n spatialDataColumn,\n spatialDataType: 'quadbin'\n };\n if (aggregationResLevel) {\n urlParameters.aggregationResLevel = String(aggregationResLevel);\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('table', options, urlParameters);\n};\n", "import { baseSource } from \"./base-source.js\";\nexport const quadbinTilesetSource = async function (options) {\n const { tableName } = options;\n const urlParameters = { name: tableName };\n return baseSource('tileset', options, urlParameters);\n};\n", "/* eslint-disable camelcase */\nimport { DEFAULT_TILE_RESOLUTION } from \"../constants.js\";\nimport { baseSource } from \"./base-source.js\";\nexport const vectorQuerySource = async function (options) {\n const { columns, filters, spatialDataColumn = 'geom', sqlQuery, tileResolution = DEFAULT_TILE_RESOLUTION, queryParameters } = options;\n const urlParameters = {\n spatialDataColumn,\n spatialDataType: 'geo',\n tileResolution: tileResolution.toString(),\n q: sqlQuery\n };\n if (columns) {\n urlParameters.columns = columns.join(',');\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n if (queryParameters) {\n urlParameters.queryParameters = queryParameters;\n }\n return baseSource('query', options, urlParameters);\n};\n", "/* eslint-disable camelcase */\nimport { DEFAULT_TILE_RESOLUTION } from \"../constants.js\";\nimport { baseSource } from \"./base-source.js\";\nexport const vectorTableSource = async function (options) {\n const { columns, filters, spatialDataColumn = 'geom', tableName, tileResolution = DEFAULT_TILE_RESOLUTION } = options;\n const urlParameters = {\n name: tableName,\n spatialDataColumn,\n spatialDataType: 'geo',\n tileResolution: tileResolution.toString()\n };\n if (columns) {\n urlParameters.columns = columns.join(',');\n }\n if (filters) {\n urlParameters.filters = filters;\n }\n return baseSource('table', options, urlParameters);\n};\n", "import { baseSource } from \"./base-source.js\";\nexport const vectorTilesetSource = async function (options) {\n const { tableName } = options;\n const urlParameters = { name: tableName };\n return baseSource('tileset', options, urlParameters);\n};\n", "import { log } from '@deck.gl/core';\nimport { AGGREGATION, getLayer, getColorAccessor, getColorValueAccessor, getSizeAccessor, getTextAccessor, OPACITY_MAP, opacityToAlpha, getIconUrlAccessor, negateAccessor, getMaxMarkerSize } from \"./layer-map.js\";\nimport PointLabelLayer from \"../layers/point-label-layer.js\";\nimport { CollisionFilterExtension } from '@deck.gl/extensions';\nimport { assert } from \"../utils.js\";\nconst collisionFilterExtension = new CollisionFilterExtension();\nexport function parseMap(json) {\n const { keplerMapConfig, datasets, token } = json;\n assert(keplerMapConfig.version === 'v1', 'Only support Kepler v1');\n const { mapState, mapStyle } = keplerMapConfig.config;\n const { layers, layerBlending, interactionConfig } = keplerMapConfig.config.visState;\n return {\n id: json.id,\n title: json.title,\n description: json.description,\n createdAt: json.createdAt,\n updatedAt: json.updatedAt,\n initialViewState: mapState,\n /** @deprecated Use `basemap`. */\n mapStyle,\n token,\n layers: layers.reverse().map(({ id, type, config, visualChannels }) => {\n try {\n const { dataId } = config;\n const dataset = datasets.find(d => d.id === dataId);\n assert(dataset, `No dataset matching dataId: ${dataId}`);\n const { data } = dataset;\n assert(data, `No data loaded for dataId: ${dataId}`);\n const { Layer, propMap, defaultProps } = getLayer(type, config, dataset);\n const styleProps = createStyleProps(config, propMap);\n return new Layer({\n id,\n data,\n ...defaultProps,\n ...createInteractionProps(interactionConfig),\n ...styleProps,\n ...createChannelProps(id, type, config, visualChannels, data), // Must come after style\n ...createParametersProp(layerBlending, styleProps.parameters || {}), // Must come after style\n ...createLoadOptions(token)\n });\n }\n catch (e) {\n log.error(e.message)();\n return undefined;\n }\n })\n };\n}\nfunction createParametersProp(layerBlending, parameters) {\n if (layerBlending === 'additive') {\n parameters.blendColorSrcFactor = parameters.blendAlphaSrcFactor = 'src-alpha';\n parameters.blendColorDstFactor = parameters.blendAlphaDstFactor = 'dst-alpha';\n parameters.blendColorOperation = parameters.blendAlphaOperation = 'add';\n }\n else if (layerBlending === 'subtractive') {\n parameters.blendColorSrcFactor = 'one';\n parameters.blendColorDstFactor = 'one-minus-dst-color';\n parameters.blendAlphaSrcFactor = 'src-alpha';\n parameters.blendAlphaDstFactor = 'dst-alpha';\n parameters.blendColorOperation = 'subtract';\n parameters.blendAlphaOperation = 'add';\n }\n return Object.keys(parameters).length ? { parameters } : {};\n}\nfunction createInteractionProps(interactionConfig) {\n const pickable = interactionConfig && interactionConfig.tooltip.enabled;\n return {\n autoHighlight: pickable,\n pickable\n };\n}\nfunction mapProps(source, target, mapping) {\n for (const sourceKey in mapping) {\n const sourceValue = source[sourceKey];\n const targetKey = mapping[sourceKey];\n if (sourceValue === undefined) {\n // eslint-disable-next-line no-continue\n continue;\n }\n if (typeof targetKey === 'string') {\n target[targetKey] = sourceValue;\n }\n else if (typeof targetKey === 'function') {\n const [key, value] = Object.entries(targetKey(sourceValue))[0];\n target[key] = value;\n }\n else if (typeof targetKey === 'object') {\n // Nested definition, recurse down one level (also handles arrays)\n mapProps(sourceValue, target, targetKey);\n }\n }\n}\nfunction createStyleProps(config, mapping) {\n const result = {};\n mapProps(config, result, mapping);\n // Kepler format sometimes omits strokeColor. TODO: remove once we can rely on\n // `strokeColor` always being set when `stroke: true`.\n if (result.stroked && !result.getLineColor) {\n result.getLineColor = result.getFillColor;\n }\n for (const colorAccessor in OPACITY_MAP) {\n if (Array.isArray(result[colorAccessor])) {\n const color = [...result[colorAccessor]];\n const opacityKey = OPACITY_MAP[colorAccessor];\n const opacity = config.visConfig[opacityKey];\n color[3] = opacityToAlpha(opacity);\n result[colorAccessor] = color;\n }\n }\n result.highlightColor = config.visConfig.enable3d ? [255, 255, 255, 60] : [252, 242, 26, 255];\n return result;\n}\n/* eslint-disable complexity, max-statements */\nfunction createChannelProps(id, type, config, visualChannels, data) {\n const { colorField, colorScale, radiusField, radiusScale, sizeField, sizeScale, strokeColorField, strokeColorScale, weightField } = visualChannels;\n let { heightField, heightScale } = visualChannels;\n if (type === 'hexagonId') {\n heightField = sizeField;\n heightScale = sizeScale;\n }\n const { textLabel, visConfig } = config;\n const result = {};\n if (type === 'grid' || type === 'hexagon') {\n result.colorScaleType = colorScale;\n if (colorField) {\n const { colorAggregation } = config.visConfig;\n if (!AGGREGATION[colorAggregation]) {\n result.getColorValue = getColorValueAccessor(colorField, colorAggregation, data);\n }\n else {\n result.getColorWeight = d => d[colorField.name];\n }\n }\n }\n else if (colorField) {\n const { colorAggregation: aggregation, colorRange: range } = visConfig;\n result.getFillColor = getColorAccessor(colorField, \n // @ts-ignore\n colorScale, { aggregation, range }, visConfig.opacity, data);\n }\n if (type === 'point') {\n const altitude = config.columns?.altitude;\n if (altitude) {\n result.dataTransform = data => {\n data.features.forEach(({ geometry, properties }) => {\n const { type, coordinates } = geometry;\n if (type === 'Point') {\n coordinates[2] = properties[altitude];\n }\n });\n return data;\n };\n }\n }\n if (radiusField || sizeField) {\n result.getPointRadius = getSizeAccessor(\n // @ts-ignore\n radiusField || sizeField, \n // @ts-ignore\n radiusScale || sizeScale, visConfig.sizeAggregation, visConfig.radiusRange || visConfig.sizeRange, data);\n }\n if (strokeColorField) {\n const fallbackOpacity = type === 'point' ? visConfig.opacity : 1;\n const opacity = visConfig.strokeOpacity !== undefined ? visConfig.strokeOpacity : fallbackOpacity;\n const { strokeColorAggregation: aggregation, strokeColorRange: range } = visConfig;\n result.getLineColor = getColorAccessor(strokeColorField, \n // @ts-ignore\n strokeColorScale, \n // @ts-ignore\n { aggregation, range }, opacity, data);\n }\n if (heightField && visConfig.enable3d) {\n result.getElevation = getSizeAccessor(heightField, \n // @ts-ignore\n heightScale, visConfig.heightAggregation, visConfig.heightRange || visConfig.sizeRange, data);\n }\n if (weightField) {\n result.getWeight = getSizeAccessor(weightField, undefined, visConfig.weightAggregation, undefined, data);\n }\n if (visConfig.customMarkers) {\n const maxIconSize = getMaxMarkerSize(visConfig, visualChannels);\n const { getPointRadius, getFillColor } = result;\n const { customMarkersUrl, customMarkersRange, filled: useMaskedIcons } = visConfig;\n result.pointType = 'icon';\n result.getIcon = getIconUrlAccessor(visualChannels.customMarkersField, customMarkersRange, { fallbackUrl: customMarkersUrl, maxIconSize, useMaskedIcons }, data);\n result._subLayerProps = {\n 'points-icon': {\n loadOptions: {\n image: {\n type: 'imagebitmap'\n },\n imagebitmap: {\n resizeWidth: maxIconSize,\n resizeHeight: maxIconSize,\n resizeQuality: 'high'\n }\n }\n }\n };\n if (getFillColor && useMaskedIcons) {\n result.getIconColor = getFillColor;\n }\n if (getPointRadius) {\n result.getIconSize = getPointRadius;\n }\n if (visualChannels.rotationField) {\n result.getIconAngle = negateAccessor(getSizeAccessor(visualChannels.rotationField, undefined, null, undefined, data));\n }\n }\n else if (type === 'point' || type === 'tileset') {\n result.pointType = 'circle';\n }\n if (textLabel && textLabel.length && textLabel[0].field) {\n const [mainLabel, secondaryLabel] = textLabel;\n const collisionGroup = id;\n ({\n alignment: result.getTextAlignmentBaseline,\n anchor: result.getTextAnchor,\n color: result.getTextColor,\n outlineColor: result.textOutlineColor,\n size: result.textSizeScale\n } = mainLabel);\n const { color: getSecondaryColor, field: secondaryField, outlineColor: secondaryOutlineColor, size: secondarySizeScale } = secondaryLabel || {};\n result.getText = mainLabel.field && getTextAccessor(mainLabel.field, data);\n const getSecondaryText = secondaryField && getTextAccessor(secondaryField, data);\n result.pointType = `${result.pointType}+text`;\n result.textCharacterSet = 'auto';\n result.textFontFamily = 'Inter, sans';\n result.textFontSettings = { sdf: true };\n result.textFontWeight = 600;\n result.textOutlineWidth = 3;\n result._subLayerProps = {\n ...result._subLayerProps,\n 'points-text': {\n type: PointLabelLayer,\n extensions: [collisionFilterExtension],\n collisionEnabled: true,\n collisionGroup,\n // getPointRadius already has radiusScale baked in, so only pass one or the other\n ...(result.getPointRadius\n ? { getRadius: result.getPointRadius }\n : { radiusScale: visConfig.radius }),\n ...(secondaryField && {\n getSecondaryText,\n getSecondaryColor,\n secondarySizeScale,\n secondaryOutlineColor\n })\n }\n };\n }\n return result;\n}\nfunction createLoadOptions(accessToken) {\n return {\n loadOptions: { fetch: { headers: { Authorization: `Bearer ${accessToken}` } } }\n };\n}\n", "import { deviation, extent, groupSort, median, variance } from 'd3-array';\nimport { rgb } from 'd3-color';\nimport { scaleLinear, scaleOrdinal, scaleLog, scalePoint, scaleQuantile, scaleQuantize, scaleSqrt, scaleThreshold } from 'd3-scale';\nimport { format as d3Format } from 'd3-format';\nimport moment from 'moment-timezone';\nimport { CPUGridLayer, HeatmapLayer, HexagonLayer } from '@deck.gl/aggregation-layers';\nimport { GeoJsonLayer } from '@deck.gl/layers';\nimport { H3HexagonLayer } from '@deck.gl/geo-layers';\nimport ClusterTileLayer from \"../layers/cluster-tile-layer.js\";\nimport H3TileLayer from \"../layers/h3-tile-layer.js\";\nimport QuadbinTileLayer from \"../layers/quadbin-tile-layer.js\";\nimport RasterTileLayer from \"../layers/raster-tile-layer.js\";\nimport VectorTileLayer from \"../layers/vector-tile-layer.js\";\nimport { assert, createBinaryProxy, scaleIdentity } from \"../utils.js\";\nimport HeatmapTileLayer from \"../layers/heatmap-tile-layer.js\";\nconst SCALE_FUNCS = {\n linear: scaleLinear,\n ordinal: scaleOrdinal,\n log: scaleLog,\n point: scalePoint,\n quantile: scaleQuantile,\n quantize: scaleQuantize,\n sqrt: scaleSqrt,\n custom: scaleThreshold,\n identity: scaleIdentity\n};\nfunction identity(v) {\n return v;\n}\nconst UNKNOWN_COLOR = '#868d91';\nexport const AGGREGATION = {\n average: 'MEAN',\n maximum: 'MAX',\n minimum: 'MIN',\n sum: 'SUM'\n};\nexport const OPACITY_MAP = {\n getFillColor: 'opacity',\n getLineColor: 'strokeOpacity',\n getTextColor: 'opacity'\n};\nconst AGGREGATION_FUNC = {\n 'count unique': (values, accessor) => groupSort(values, v => v.length, accessor).length,\n median,\n // Unfortunately mode() is only available in d3-array@3+ which is ESM only\n mode: (values, accessor) => groupSort(values, v => v.length, accessor).pop(),\n stddev: deviation,\n variance\n};\nconst TILE_LAYER_TYPE_TO_LAYER = {\n clusterTile: ClusterTileLayer,\n h3: H3TileLayer,\n heatmapTile: HeatmapTileLayer,\n mvt: VectorTileLayer,\n quadbin: QuadbinTileLayer,\n raster: RasterTileLayer,\n tileset: VectorTileLayer\n};\nconst hexToRGBA = c => {\n const { r, g, b, opacity } = rgb(c);\n return [r, g, b, 255 * opacity];\n};\n// Kepler prop value -> Deck.gl prop value\n// Supports nested definitions, and function transforms:\n// {keplerProp: 'deckProp'} is equivalent to:\n// {keplerProp: x => ({deckProp: x})}\nconst sharedPropMap = {\n // Apply the value of Kepler `color` prop to the deck `getFillColor` prop\n color: 'getFillColor',\n isVisible: 'visible',\n label: 'cartoLabel',\n textLabel: {\n alignment: 'getTextAlignmentBaseline',\n anchor: 'getTextAnchor',\n // Apply the value of Kepler `textLabel.color` prop to the deck `getTextColor` prop\n color: 'getTextColor',\n size: 'getTextSize'\n },\n visConfig: {\n enable3d: 'extruded',\n elevationScale: 'elevationScale',\n filled: 'filled',\n strokeColor: 'getLineColor',\n stroked: 'stroked',\n thickness: 'getLineWidth',\n radius: 'getPointRadius',\n wireframe: 'wireframe'\n }\n};\nconst customMarkersPropsMap = {\n color: 'getIconColor',\n visConfig: {\n radius: 'getIconSize'\n }\n};\nconst heatmapTilePropsMap = {\n visConfig: {\n colorRange: x => ({ colorRange: x.colors.map(hexToRGBA) }),\n radius: 'radiusPixels'\n }\n};\nconst aggregationVisConfig = {\n colorAggregation: x => ({ colorAggregation: AGGREGATION[x] || AGGREGATION.sum }),\n colorRange: x => ({ colorRange: x.colors.map(hexToRGBA) }),\n coverage: 'coverage',\n elevationPercentile: ['elevationLowerPercentile', 'elevationUpperPercentile'],\n percentile: ['lowerPercentile', 'upperPercentile']\n};\nconst defaultProps = {\n lineMiterLimit: 2,\n lineWidthUnits: 'pixels',\n pointRadiusUnits: 'pixels',\n rounded: true,\n wrapLongitude: false\n};\nfunction mergePropMaps(a = {}, b = {}) {\n return { ...a, ...b, visConfig: { ...a.visConfig, ...b.visConfig } };\n}\nexport function getLayer(type, config, dataset) {\n let basePropMap = sharedPropMap;\n if (config.visConfig?.customMarkers) {\n basePropMap = mergePropMaps(basePropMap, customMarkersPropsMap);\n }\n if (type === 'heatmapTile') {\n basePropMap = mergePropMaps(basePropMap, heatmapTilePropsMap);\n }\n if (TILE_LAYER_TYPE_TO_LAYER[type]) {\n return getTileLayer(dataset, basePropMap, type);\n }\n const geoColumn = dataset?.geoColumn;\n const getPosition = d => d[geoColumn].coordinates;\n const hexagonId = config.columns?.hex_id;\n const layerTypeDefs = {\n point: {\n Layer: GeoJsonLayer,\n propMap: {\n columns: {\n altitude: x => ({ parameters: { depthTest: Boolean(x) } })\n },\n visConfig: { outline: 'stroked' }\n }\n },\n geojson: {\n Layer: GeoJsonLayer\n },\n grid: {\n Layer: CPUGridLayer,\n propMap: { visConfig: { ...aggregationVisConfig, worldUnitSize: x => ({ cellSize: 1000 * x }) } },\n defaultProps: { getPosition }\n },\n heatmap: {\n Layer: HeatmapLayer,\n propMap: { visConfig: { ...aggregationVisConfig, radius: 'radiusPixels' } },\n defaultProps: { getPosition }\n },\n hexagon: {\n Layer: HexagonLayer,\n propMap: { visConfig: { ...aggregationVisConfig, worldUnitSize: x => ({ radius: 1000 * x }) } },\n defaultProps: { getPosition }\n },\n hexagonId: {\n Layer: H3HexagonLayer,\n propMap: { visConfig: { coverage: 'coverage' } },\n defaultProps: { getHexagon: d => d[hexagonId], stroked: false }\n }\n };\n const layer = layerTypeDefs[type];\n assert(layer, `Unsupported layer type: ${type}`);\n return {\n ...layer,\n propMap: mergePropMaps(basePropMap, layer.propMap),\n defaultProps: { ...defaultProps, ...layer.defaultProps }\n };\n}\nfunction getTileLayer(dataset, basePropMap, type) {\n const { aggregationExp, aggregationResLevel } = dataset;\n return {\n Layer: TILE_LAYER_TYPE_TO_LAYER[type] || VectorTileLayer,\n propMap: basePropMap,\n defaultProps: {\n ...defaultProps,\n ...(aggregationExp && { aggregationExp }),\n ...(aggregationResLevel && { aggregationResLevel }),\n uniqueIdProperty: 'geoid'\n }\n };\n}\nfunction domainFromAttribute(attribute, scaleType, scaleLength) {\n if (scaleType === 'ordinal' || scaleType === 'point') {\n return attribute.categories.map(c => c.category).filter(c => c !== undefined && c !== null);\n }\n if (scaleType === 'quantile' && attribute.quantiles) {\n return attribute.quantiles.global\n ? attribute.quantiles.global[scaleLength]\n : attribute.quantiles[scaleLength];\n }\n let { min } = attribute;\n if (scaleType === 'log' && min === 0) {\n min = 1e-5;\n }\n return [min, attribute.max];\n}\nfunction domainFromValues(values, scaleType) {\n if (scaleType === 'ordinal' || scaleType === 'point') {\n return groupSort(values, g => -g.length, d => d);\n }\n else if (scaleType === 'quantile') {\n return values.sort((a, b) => a - b);\n }\n else if (scaleType === 'log') {\n const [d0, d1] = extent(values);\n return [d0 === 0 ? 1e-5 : d0, d1];\n }\n return extent(values);\n}\nfunction calculateDomain(data, name, scaleType, scaleLength) {\n if (data.tilestats) {\n // Tileset data type\n const { attributes } = data.tilestats.layers[0];\n const attribute = attributes.find(a => a.attribute === name);\n return domainFromAttribute(attribute, scaleType, scaleLength);\n }\n else if (data.features) {\n // GeoJSON data type\n const values = data.features.map(({ properties }) => properties[name]);\n return domainFromValues(values, scaleType);\n }\n else if (Array.isArray(data) && data[0][name] !== undefined) {\n // JSON data type\n const values = data.map(properties => properties[name]);\n return domainFromValues(values, scaleType);\n }\n return [0, 1];\n}\nfunction normalizeAccessor(accessor, data) {\n if (data.features || data.tilestats) {\n return (object, info) => {\n if (object) {\n return accessor(object.properties || object.__source.object.properties);\n }\n const { data, index } = info;\n const proxy = createBinaryProxy(data, index);\n return accessor(proxy);\n };\n }\n return accessor;\n}\nexport function opacityToAlpha(opacity) {\n return opacity !== undefined ? Math.round(255 * Math.pow(opacity, 1 / 2.2)) : 255;\n}\nfunction getAccessorKeys(name, aggregation) {\n let keys = [name];\n if (aggregation) {\n // Snowflake will capitalized the keys, need to check lower and upper case version\n keys = keys.concat([aggregation, aggregation.toUpperCase()].map(a => `${name}_${a}`));\n }\n return keys;\n}\nfunction findAccessorKey(keys, properties) {\n for (const key of keys) {\n if (key in properties) {\n return [key];\n }\n }\n throw new Error(`Could not find property for any accessor key: ${keys}`);\n}\nexport function getColorValueAccessor({ name }, colorAggregation, data) {\n const aggregator = AGGREGATION_FUNC[colorAggregation];\n const accessor = values => aggregator(values, p => p[name]);\n return normalizeAccessor(accessor, data);\n}\nexport function getColorAccessor({ name, colorColumn }, scaleType, { aggregation, range }, opacity, data) {\n const scale = calculateLayerScale(colorColumn || name, scaleType, range, data);\n const alpha = opacityToAlpha(opacity);\n let accessorKeys = getAccessorKeys(name, aggregation);\n const accessor = properties => {\n if (!(accessorKeys[0] in properties)) {\n accessorKeys = findAccessorKey(accessorKeys, properties);\n }\n const propertyValue = properties[accessorKeys[0]];\n const { r, g, b } = rgb(scale(propertyValue));\n return [r, g, b, propertyValue === null ? 0 : alpha];\n };\n return normalizeAccessor(accessor, data);\n}\nfunction calculateLayerScale(name, scaleType, range, data) {\n const scale = SCALE_FUNCS[scaleType]();\n let domain = [];\n let scaleColor = [];\n if (scaleType !== 'identity') {\n const { colorMap, colors } = range;\n if (Array.isArray(colorMap)) {\n colorMap.forEach(([value, color]) => {\n domain.push(value);\n scaleColor.push(color);\n });\n }\n else {\n domain = calculateDomain(data, name, scaleType, colors.length);\n scaleColor = colors;\n }\n if (scaleType === 'ordinal') {\n domain = domain.slice(0, scaleColor.length);\n }\n }\n scale.domain(domain);\n scale.range(scaleColor);\n scale.unknown(UNKNOWN_COLOR);\n return scale;\n}\nconst FALLBACK_ICON = 'data:image/svg+xml;charset=utf-8;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAwIDEwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4NCiAgPGNpcmNsZSBjeD0iNTAiIGN5PSI1MCIgcj0iNTAiLz4NCjwvc3ZnPg==';\nexport function getIconUrlAccessor(field, range, { fallbackUrl, maxIconSize, useMaskedIcons }, data) {\n const urlToUnpackedIcon = (url) => ({\n id: `${url}@@${maxIconSize}`,\n url,\n width: maxIconSize,\n height: maxIconSize,\n mask: useMaskedIcons\n });\n let unknownValue = fallbackUrl || FALLBACK_ICON;\n if (range?.othersMarker) {\n unknownValue = range.othersMarker;\n }\n const unknownIcon = urlToUnpackedIcon(unknownValue);\n if (!range || !field) {\n return () => unknownIcon;\n }\n const mapping = {};\n for (const { value, markerUrl } of range.markerMap) {\n if (markerUrl) {\n mapping[value] = urlToUnpackedIcon(markerUrl);\n }\n }\n const accessor = properties => {\n const propertyValue = properties[field.name];\n return mapping[propertyValue] || unknownIcon;\n };\n return normalizeAccessor(accessor, data);\n}\nexport function getMaxMarkerSize(visConfig, visualChannels) {\n const { radiusRange, radius } = visConfig;\n const { radiusField, sizeField } = visualChannels;\n const field = radiusField || sizeField;\n return Math.ceil(radiusRange && field ? radiusRange[1] : radius);\n}\nexport function negateAccessor(accessor) {\n return typeof accessor === 'function' ? (d, i) => -accessor(d, i) : -accessor;\n}\nexport function getSizeAccessor({ name }, scaleType, aggregation, range, data) {\n const scale = scaleType ? SCALE_FUNCS[scaleType]() : identity;\n if (scaleType) {\n if (aggregation !== 'count') {\n scale.domain(calculateDomain(data, name, scaleType));\n }\n scale.range(range);\n }\n let accessorKeys = getAccessorKeys(name, aggregation);\n const accessor = properties => {\n if (!(accessorKeys[0] in properties)) {\n accessorKeys = findAccessorKey(accessorKeys, properties);\n }\n const propertyValue = properties[accessorKeys[0]];\n return scale(propertyValue);\n };\n return normalizeAccessor(accessor, data);\n}\nconst FORMATS = {\n date: s => moment.utc(s).format('MM/DD/YY HH:mm:ssa'),\n integer: d3Format('i'),\n float: d3Format('.5f'),\n timestamp: s => moment.utc(s).format('X'),\n default: String\n};\nexport function getTextAccessor({ name, type }, data) {\n const format = FORMATS[type] || FORMATS.default;\n const accessor = properties => {\n return format(properties[name]);\n };\n return normalizeAccessor(accessor, data);\n}\nexport { domainFromValues as _domainFromValues };\n", "import { GOOGLE_BASEMAPS, CARTO_MAP_STYLES, applyLayerGroupFilters, fetchStyle, getStyleUrl, someLayerGroupsDisabled } from \"../basemap.js\";\nconst CUSTOM_STYLE_ID_PREFIX = 'custom:';\nconst DEFAULT_CARTO_STYLE = 'positron';\nfunction mapLibreViewpros(config) {\n const { longitude, latitude, ...rest } = config.mapState;\n return {\n center: [longitude, latitude],\n ...rest\n };\n}\n/**\n * Get basemap properties for Carto map.\n *\n * For maplibre-based basemaps it returns style or style URL that can be used with `maplibregl.Map` compatible component.\n * * style url is returned for non-filtered standard Carto basemaps or if user used style URL directly in configuration\n * * filtered style object returned for Carto basemaps with layer groups filtered\n *\n * For Google-maps base maps, it returns options that can be used with `google.maps.Map` constructor.\n */\nexport async function fetchBasemapProps({ config, errorContext, applyLayerFilters = true }) {\n const { mapStyle } = config;\n const styleType = mapStyle.styleType || DEFAULT_CARTO_STYLE;\n if (styleType.startsWith(CUSTOM_STYLE_ID_PREFIX)) {\n const currentCustomStyle = config.customBaseMaps?.customStyle;\n if (currentCustomStyle) {\n return {\n type: 'maplibre',\n props: {\n style: currentCustomStyle.style || currentCustomStyle.url,\n ...mapLibreViewpros(config)\n },\n attribution: currentCustomStyle.customAttribution\n };\n }\n }\n if (CARTO_MAP_STYLES.includes(styleType)) {\n const { visibleLayerGroups } = mapStyle;\n const styleUrl = getStyleUrl(styleType);\n let style = styleUrl;\n let rawStyle = styleUrl;\n if (applyLayerFilters && visibleLayerGroups && someLayerGroupsDisabled(visibleLayerGroups)) {\n rawStyle = await fetchStyle({ styleUrl, errorContext });\n style = applyLayerGroupFilters(rawStyle, visibleLayerGroups);\n }\n return {\n type: 'maplibre',\n props: {\n style,\n ...mapLibreViewpros(config)\n },\n visibleLayerGroups,\n rawStyle\n };\n }\n const googleBasemapDef = GOOGLE_BASEMAPS[styleType];\n if (googleBasemapDef) {\n const { mapState } = config;\n return {\n type: 'google-maps',\n props: {\n ...googleBasemapDef,\n center: { lat: mapState.latitude, lng: mapState.longitude },\n zoom: mapState.zoom + 1,\n tilt: mapState.pitch,\n heading: mapState.bearing\n }\n };\n }\n return {\n type: 'maplibre',\n props: {\n style: getStyleUrl(DEFAULT_CARTO_STYLE),\n ...mapLibreViewpros(config)\n }\n };\n}\n", "/* eslint-disable camelcase */\nimport { CartoAPIError } from \"./carto-api-error.js\";\nimport { DEFAULT_API_BASE_URL, DEFAULT_CLIENT, DEFAULT_MAX_LENGTH_URL } from \"./common.js\";\nimport { buildPublicMapUrl, buildStatsUrl } from \"./endpoints.js\";\nimport { h3QuerySource, h3TableSource, quadbinQuerySource, quadbinTableSource, vectorQuerySource, vectorTableSource, vectorTilesetSource } from \"../sources/index.js\";\nimport { parseMap } from \"./parse-map.js\";\nimport { requestWithParameters } from \"./request-with-parameters.js\";\nimport { assert } from \"../utils.js\";\nimport { fetchBasemapProps } from \"./basemap.js\";\n/* global clearInterval, setInterval, URL */\n/* eslint-disable complexity, max-statements, max-params */\nasync function _fetchMapDataset(dataset, accessToken, apiBaseUrl, clientId, headers, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {\n const { aggregationExp, aggregationResLevel, connectionName, columns, format, geoColumn, source, type, queryParameters } = dataset;\n const cache = {};\n const globalOptions = {\n accessToken,\n apiBaseUrl,\n cache,\n clientId,\n connectionName,\n format,\n headers,\n maxLengthURL\n };\n if (type === 'tileset') {\n // TODO do we want a generic tilesetSource?\n // @ts-ignore\n dataset.data = await vectorTilesetSource({ ...globalOptions, tableName: source });\n }\n else {\n const [spatialDataType, spatialDataColumn] = geoColumn ? geoColumn.split(':') : ['geom'];\n if (spatialDataType === 'geom') {\n const options = { ...globalOptions, spatialDataColumn };\n if (type === 'table') {\n dataset.data = await vectorTableSource({ ...options, columns, tableName: source });\n }\n else if (type === 'query') {\n dataset.data = await vectorQuerySource({\n ...options,\n columns,\n sqlQuery: source,\n queryParameters\n });\n }\n }\n else if (spatialDataType === 'h3') {\n const options = { ...globalOptions, aggregationExp, aggregationResLevel, spatialDataColumn };\n if (type === 'table') {\n dataset.data = await h3TableSource({ ...options, tableName: source });\n }\n else if (type === 'query') {\n dataset.data = await h3QuerySource({ ...options, sqlQuery: source, queryParameters });\n }\n }\n else if (spatialDataType === 'quadbin') {\n const options = { ...globalOptions, aggregationExp, aggregationResLevel, spatialDataColumn };\n if (type === 'table') {\n dataset.data = await quadbinTableSource({ ...options, tableName: source });\n }\n else if (type === 'query') {\n dataset.data = await quadbinQuerySource({ ...options, sqlQuery: source, queryParameters });\n }\n }\n }\n let cacheChanged = true;\n if (cache.value) {\n cacheChanged = dataset.cache !== cache.value;\n dataset.cache = cache.value;\n }\n return cacheChanged;\n}\nasync function _fetchTilestats(attribute, dataset, accessToken, apiBaseUrl, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {\n const { connectionName, data, id, source, type, queryParameters } = dataset;\n const errorContext = {\n requestType: 'Tile stats',\n connection: connectionName,\n type,\n source\n };\n if (!('tilestats' in data)) {\n throw new CartoAPIError(new Error(`Invalid dataset for tilestats: ${id}`), errorContext);\n }\n const baseUrl = buildStatsUrl({ attribute, apiBaseUrl, ...dataset });\n const client = new URLSearchParams(data.tiles[0]).get('client');\n const headers = { Authorization: `Bearer ${accessToken}` };\n const parameters = {};\n if (client) {\n parameters.client = client;\n }\n if (type === 'query') {\n parameters.q = source;\n if (queryParameters) {\n parameters.queryParameters = JSON.stringify(queryParameters);\n }\n }\n const stats = await requestWithParameters({\n baseUrl,\n headers,\n parameters,\n errorContext,\n maxLengthURL\n });\n // Replace tilestats for attribute with value from API\n const { attributes } = data.tilestats.layers[0];\n const index = attributes.findIndex(d => d.attribute === attribute);\n attributes[index] = stats;\n return true;\n}\nasync function fillInMapDatasets({ datasets, token }, clientId, apiBaseUrl, headers, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {\n const promises = datasets.map(dataset => _fetchMapDataset(dataset, token, apiBaseUrl, clientId, headers, maxLengthURL));\n return await Promise.all(promises);\n}\nasync function fillInTileStats({ datasets, keplerMapConfig, token }, apiBaseUrl, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {\n const attributes = [];\n const { layers } = keplerMapConfig.config.visState;\n for (const layer of layers) {\n for (const channel of Object.keys(layer.visualChannels)) {\n const attribute = layer.visualChannels[channel]?.name;\n if (attribute) {\n const dataset = datasets.find(d => d.id === layer.config.dataId);\n if (dataset && dataset.type !== 'tileset' && dataset.data.tilestats) {\n // Only fetch stats for QUERY & TABLE map types\n attributes.push({ attribute, dataset });\n }\n }\n }\n }\n // Remove duplicates to avoid repeated requests\n const filteredAttributes = [];\n for (const a of attributes) {\n if (!filteredAttributes.find(({ attribute, dataset }) => attribute === a.attribute && dataset === a.dataset)) {\n filteredAttributes.push(a);\n }\n }\n const promises = filteredAttributes.map(({ attribute, dataset }) => _fetchTilestats(attribute, dataset, token, apiBaseUrl, maxLengthURL));\n return await Promise.all(promises);\n}\n/* eslint-disable max-statements */\nexport async function fetchMap({ accessToken, apiBaseUrl = DEFAULT_API_BASE_URL, cartoMapId, clientId = DEFAULT_CLIENT, headers = {}, autoRefresh, onNewData, maxLengthURL = DEFAULT_MAX_LENGTH_URL }) {\n assert(cartoMapId, 'Must define CARTO map id: fetchMap({cartoMapId: \"XXXX-XXXX-XXXX\"})');\n assert(apiBaseUrl, 'Must define apiBaseUrl');\n if (accessToken) {\n headers = { Authorization: `Bearer ${accessToken}`, ...headers };\n }\n if (autoRefresh || onNewData) {\n assert(onNewData, 'Must define `onNewData` when using autoRefresh');\n assert(typeof onNewData === 'function', '`onNewData` must be a function');\n assert(typeof autoRefresh === 'number' && autoRefresh > 0, '`autoRefresh` must be a positive number');\n }\n const baseUrl = buildPublicMapUrl({ apiBaseUrl, cartoMapId });\n const errorContext = { requestType: 'Public map', mapId: cartoMapId };\n const map = await requestWithParameters({ baseUrl, headers, errorContext, maxLengthURL });\n // Periodically check if the data has changed. Note that this\n // will not update when a map is published.\n let stopAutoRefresh;\n if (autoRefresh) {\n // eslint-disable-next-line @typescript-eslint/no-misused-promises\n const intervalId = setInterval(async () => {\n const changed = await fillInMapDatasets(map, clientId, apiBaseUrl, {\n ...headers,\n 'If-Modified-Since': new Date().toUTCString()\n }, maxLengthURL);\n if (onNewData && changed.some(v => v === true)) {\n onNewData(parseMap(map));\n }\n }, autoRefresh * 1000);\n stopAutoRefresh = () => {\n clearInterval(intervalId);\n };\n }\n const geojsonLayers = map.keplerMapConfig.config.visState.layers.filter(({ type }) => type === 'geojson' || type === 'point');\n const geojsonDatasetIds = geojsonLayers.map(({ config }) => config.dataId);\n map.datasets.forEach(dataset => {\n if (geojsonDatasetIds.includes(dataset.id)) {\n const { config } = geojsonLayers.find(({ config }) => config.dataId === dataset.id);\n dataset.format = 'geojson';\n // Support for very old maps. geoColumn was not stored in the past\n if (!dataset.geoColumn && config.columns.geojson) {\n dataset.geoColumn = config.columns.geojson;\n }\n }\n });\n const [basemap] = await Promise.all([\n fetchBasemapProps({ config: map.keplerMapConfig.config, errorContext }),\n // Mutates map.datasets so that dataset.data contains data\n fillInMapDatasets(map, clientId, apiBaseUrl, headers, maxLengthURL)\n ]);\n // Mutates attributes in visualChannels to contain tile stats\n await fillInTileStats(map, apiBaseUrl, maxLengthURL);\n const out = { ...parseMap(map), basemap, ...{ stopAutoRefresh } };\n const textLayers = out.layers.filter(layer => {\n const pointType = layer.props.pointType || '';\n return pointType.includes('text');\n });\n /* global FontFace, window, document */\n if (textLayers.length && window.FontFace && !document.fonts.check('12px Inter')) {\n // Fetch font needed for labels\n const font = new FontFace('Inter', 'url(https://fonts.gstatic.com/s/inter/v12/UcC73FwrK3iLTeHuS_fvQtMwCp50KnMa1ZL7W0Q5nw.woff2)');\n await font.load().then(f => document.fonts.add(f));\n }\n return out;\n}\n", "import { SOURCE_DEFAULTS } from \"../sources/index.js\";\nimport { buildQueryUrl } from \"./endpoints.js\";\nimport { requestWithParameters } from \"./request-with-parameters.js\";\nexport const query = async function (options) {\n const { apiBaseUrl = SOURCE_DEFAULTS.apiBaseUrl, clientId = SOURCE_DEFAULTS.clientId, maxLengthURL = SOURCE_DEFAULTS.maxLengthURL, connectionName, sqlQuery, queryParameters } = options;\n const urlParameters = { q: sqlQuery };\n if (queryParameters) {\n urlParameters.queryParameters = JSON.stringify(queryParameters);\n }\n const baseUrl = buildQueryUrl({ apiBaseUrl, connectionName });\n const headers = { Authorization: `Bearer ${options.accessToken}`, ...options.headers };\n const parameters = { client: clientId, ...urlParameters };\n const errorContext = {\n requestType: 'SQL',\n connection: options.connectionName,\n type: 'query',\n source: JSON.stringify(parameters, undefined, 2)\n };\n return await requestWithParameters({\n baseUrl,\n parameters,\n headers,\n errorContext,\n maxLengthURL\n });\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_geo_layers", "import_core", "id", "import_quadbin", "Tileset2D", "import_quadbin", "TileReader", "TileReader", "Protobuf", "import_core", "id", "import_quadbin", "id", "TileReader", "import_core", "deepEqual", "id", "deepEqual", "data", "_a", "import_core", "import_geo_layers", "import_geo_layers", "Tileset2D", "import_core", "TileReader", "VERSION", "id", "DEFAULT_OPTIONS", "TileReader", "import_geo_layers", "defaultProps", "defaultProps", "import_quadbin", "import_core", "import_layers", "import_core", "fs", "import_core", "import_geo_layers", "defaultProps", "GeoCellLayer", "import_quadbin", "renderSubLayers", "defaultProps", "TEXTURE_PROPS", "defaultProps", "tiles", "import_core", "import_layers", "TextBackgroundLayer", "defaultProps", "id", "import_core", "import_core", "import_layers", "defaultProps", "import_geo_layers", "renderSubLayers", "defaultProps", "import_core", "TileReader", "TileReader", "VERSION", "id", "DEFAULT_OPTIONS", "earcut", "import_geo_layers", "import_layers", "defaultProps", "fetch", "id", "import_d3_scale", "import_core", "import_core", "import_d3_scale", "import_layers", "import_geo_layers", "defaultProps", "data", "moment", "d3Format", "import_extensions", "id", "Layer", "defaultProps", "data", "type", "id", "config"]
|
|
7
7
|
}
|