@deck.gl/carto 8.8.15 → 8.8.17

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.
Files changed (41) hide show
  1. package/dist/dist.dev.js +33328 -33336
  2. package/dist/es5/api/maps-v3-client.js +0 -4
  3. package/dist/es5/api/maps-v3-client.js.map +1 -1
  4. package/dist/es5/layers/spatial-index-tile-layer.js +21 -0
  5. package/dist/es5/layers/spatial-index-tile-layer.js.map +1 -1
  6. package/dist/esm/api/maps-v3-client.js +0 -4
  7. package/dist/esm/api/maps-v3-client.js.map +1 -1
  8. package/dist/esm/layers/spatial-index-tile-layer.js +20 -0
  9. package/dist/esm/layers/spatial-index-tile-layer.js.map +1 -1
  10. package/dist.min.js +4 -4
  11. package/package.json +2 -2
  12. package/src/api/maps-v3-client.ts +0 -7
  13. package/src/layers/spatial-index-tile-layer.ts +29 -1
  14. package/typed/api/index.js +3 -0
  15. package/typed/api/layer-map.js +264 -0
  16. package/typed/api/maps-api-common.js +50 -0
  17. package/typed/api/maps-client.js +125 -0
  18. package/typed/api/maps-v3-client.d.ts.map +1 -1
  19. package/typed/api/maps-v3-client.js +304 -0
  20. package/typed/api/parseMap.js +178 -0
  21. package/typed/basemap.js +9 -0
  22. package/typed/config.js +35 -0
  23. package/typed/index.js +10 -0
  24. package/typed/layers/carto-layer.js +173 -0
  25. package/typed/layers/carto-tile-layer.js +105 -0
  26. package/typed/layers/h3-tile-layer.js +47 -0
  27. package/typed/layers/h3-tileset-2d.js +85 -0
  28. package/typed/layers/quadkey-tile-layer.js +42 -0
  29. package/typed/layers/quadkey-tileset-2d.js +36 -0
  30. package/typed/layers/schema/carto-tile.js +161 -0
  31. package/typed/layers/spatial-index-tile-layer.d.ts +11 -1
  32. package/typed/layers/spatial-index-tile-layer.d.ts.map +1 -1
  33. package/typed/layers/spatial-index-tile-layer.js +40 -0
  34. package/typed/style/color-bins-style.js +12 -0
  35. package/typed/style/color-categories-style.js +16 -0
  36. package/typed/style/color-continuous-style.js +12 -0
  37. package/typed/style/palette.js +62 -0
  38. package/typed/style/utils.js +15 -0
  39. package/typed/utils.js +4 -0
  40. package/typed/layers/schema/carto-spa-tile.d.ts +0 -57
  41. package/typed/layers/schema/carto-spa-tile.d.ts.map +0 -1
@@ -350,10 +350,6 @@ function checkFetchLayerDataParameters(_ref7) {
350
350
  (0, _utils.assert)(!aggregationExp, 'Have aggregationExp, but geoColumn parameter is missing');
351
351
  (0, _utils.assert)(!aggregationResLevel, 'Have aggregationResLevel, but geoColumn parameter is missing');
352
352
  }
353
-
354
- if (!aggregationExp) {
355
- (0, _utils.assert)(!aggregationResLevel, 'Have aggregationResLevel, but aggregationExp parameter is missing');
356
- }
357
353
  }
358
354
 
359
355
  function fetchLayerData(_x5) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/maps-v3-client.ts"],"names":["MAX_GET_LENGTH","DEFAULT_CLIENT","V3_MINOR_VERSION","request","method","url","customHeaders","headers","accessToken","body","Accept","Authorization","fetch","Error","requestJson","response","json","ok","dealWithError","error","requestData","format","FORMATS","NDJSON","data","rows","status","getParameters","type","source","geoColumn","columns","clientId","aggregationExp","aggregationResLevel","queryParameters","parameters","push","sourceName","MAP_TYPES","QUERY","JSON","stringify","join","isSpatialIndexGeoColumn","spatialIndex","split","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","q","client","getUrlFromMetadata","metadata","m","checkFetchLayerDataParameters","apiVersion","API_VERSIONS","V3","apiBaseUrl","COLUMNS_SUPPORT","includes","GEO_COLUMN_SUPPORT","fetchLayerData","formatTiles","_fetchDataUrl","mapFormat","result","schema","defaultCredentials","localCreds","prioritizedFormats","GEOJSON","TILEJSON","f","log","assert","Object","values","TILE_FORMATS","_fetchMapDataset","dataset","connectionName","cache","parseInt","URL","searchParams","get","_fetchTilestats","attribute","statsUrl","stats","attributes","tilestats","layers","index","findIndex","d","fillInMapDatasets","datasets","token","promises","map","Promise","all","fillInTileStats","keplerMapConfig","config","visState","layer","keys","visualChannels","channel","name","find","id","dataId","TILESET","filteredAttributes","a","fetchMap","cartoMapId","autoRefresh","onNewData","intervalId","setInterval","changed","some","v","stopAutoRefresh","clearInterval","geojsonLayers","filter","geojsonDatasetIds","forEach","geojson"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {\n getDefaultCredentials,\n buildMapsUrlFromBase,\n buildStatsUrlFromBase,\n CloudNativeCredentials\n} from '../config';\nimport {\n API_VERSIONS,\n COLUMNS_SUPPORT,\n encodeParameter,\n Format,\n FORMATS,\n GEO_COLUMN_SUPPORT,\n MapInstantiation,\n MapType,\n MAP_TYPES,\n QueryParameters,\n SchemaField,\n TileFormat,\n TILE_FORMATS\n} from './maps-api-common';\nimport {parseMap} from './parseMap';\nimport {log} from '@deck.gl/core';\nimport {assert} from '../utils';\n\nconst MAX_GET_LENGTH = 2048;\nconst DEFAULT_CLIENT = 'deck-gl-carto';\nconst V3_MINOR_VERSION = '3.1';\n\nexport type Headers = Record<string, string>;\ninterface RequestParams {\n method?: string;\n url: string;\n headers?: Headers;\n accessToken?: string;\n body?: any;\n}\n\n/**\n * Request against Maps API\n */\nasync function request({\n method,\n url,\n headers: customHeaders,\n accessToken,\n body\n}: RequestParams): Promise<Response> {\n const headers: Headers = {\n ...customHeaders,\n Accept: 'application/json'\n };\n\n if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n\n try {\n /* global fetch */\n return await fetch(url, {\n method,\n headers,\n body\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n}\n\nasync function requestJson<T = unknown>({\n method,\n url,\n headers,\n accessToken,\n body\n}: RequestParams): Promise<T> {\n const response = await request({method, url, headers, accessToken, body});\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, error: json.error});\n }\n return json as T;\n}\n\nasync function requestData({\n method,\n url,\n accessToken,\n format,\n body\n}: RequestParams & {\n format: Format;\n}): Promise<Response | unknown> {\n if (format === FORMATS.NDJSON) {\n return request({method, url, accessToken, body});\n }\n\n const data = await requestJson<any>({method, url, accessToken, body});\n return data.rows ? data.rows : data;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, error}: {response: Response; error?: string}): never {\n switch (response.status) {\n case 400:\n throw new Error(`Bad request. ${error}`);\n case 401:\n case 403:\n throw new Error(`Unauthorized access. ${error}`);\n default:\n throw new Error(error);\n }\n}\n\ntype FetchLayerDataParams = {\n type: MapType;\n source: string;\n connection: string;\n credentials: CloudNativeCredentials;\n geoColumn?: string;\n columns?: string[];\n clientId?: string;\n format?: Format;\n formatTiles?: TileFormat;\n headers?: Headers;\n aggregationExp?: string;\n aggregationResLevel?: number;\n queryParameters?: QueryParameters;\n};\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: Omit<FetchLayerDataParams, 'connection' | 'credentials'>) {\n const parameters = [encodeParameter('client', clientId || DEFAULT_CLIENT)];\n parameters.push(encodeParameter('v', V3_MINOR_VERSION));\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (queryParameters) {\n parameters.push(encodeParameter('queryParameters', JSON.stringify(queryParameters)));\n }\n\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n if (aggregationExp) {\n parameters.push(encodeParameter('aggregationExp', aggregationExp));\n } else if (isSpatialIndexGeoColumn(geoColumn)) {\n // Default aggregationExp required for spatial index layers\n parameters.push(encodeParameter('aggregationExp', '1 AS value'));\n }\n if (aggregationResLevel) {\n parameters.push(encodeParameter('aggregationResLevel', aggregationResLevel));\n }\n\n return parameters.join('&');\n}\n\nfunction isSpatialIndexGeoColumn(geoColumn: string | undefined) {\n const spatialIndex = geoColumn?.split(':')[0];\n return spatialIndex === 'h3' || spatialIndex === 'quadbin';\n}\n\nexport async function mapInstantiation({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<MapInstantiation> {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationResLevel,\n aggregationExp,\n queryParameters\n })}`;\n const {accessToken} = credentials;\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: clientId || DEFAULT_CLIENT,\n queryParameters\n });\n return await requestJson({method: 'POST', url: baseUrl, headers, accessToken, body});\n }\n\n return await requestJson({url, headers, accessToken});\n}\n\nfunction getUrlFromMetadata(metadata: MapInstantiation, format: Format): string | null {\n const m = metadata[format];\n\n if (m && !m.error && m.url) {\n return m.url[0];\n }\n\n return null;\n}\n\nfunction checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n}: FetchLayerDataParams) {\n assert(connection, 'Must define connection');\n assert(type, 'Must define a type');\n assert(source, 'Must define a source');\n\n assert(credentials.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(credentials.apiBaseUrl, 'Must define apiBaseUrl');\n assert(credentials.accessToken, 'Must define an accessToken');\n\n if (columns) {\n assert(\n COLUMNS_SUPPORT.includes(type),\n `The columns parameter is not supported by type ${type}`\n );\n }\n if (geoColumn) {\n assert(\n GEO_COLUMN_SUPPORT.includes(type),\n `The geoColumn parameter is not supported by type ${type}`\n );\n } else {\n assert(!aggregationExp, 'Have aggregationExp, but geoColumn parameter is missing');\n assert(!aggregationResLevel, 'Have aggregationResLevel, but geoColumn parameter is missing');\n }\n\n if (!aggregationExp) {\n assert(\n !aggregationResLevel,\n 'Have aggregationResLevel, but aggregationExp parameter is missing'\n );\n }\n}\n\nexport interface FetchLayerDataResult {\n data: any;\n format?: Format;\n schema: SchemaField[];\n}\nexport async function fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<FetchLayerDataResult> {\n // Internally we split data fetching into two parts to allow us to\n // conditionally fetch the actual data, depending on the metadata state\n const {url, accessToken, mapFormat, metadata} = await _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n\n const data = await requestData({url, format: mapFormat, accessToken});\n const result: FetchLayerDataResult = {data, format: mapFormat, schema: metadata.schema};\n return result;\n}\n\nasync function _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams) {\n const defaultCredentials = getDefaultCredentials();\n // Only pick up default credentials if they have been defined for\n // correct API version\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n };\n checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n });\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n let url: string | null = null;\n let mapFormat: Format | undefined;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.JSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n assert(url && mapFormat, 'Unsupported data formats received from backend.');\n }\n\n if (format === FORMATS.TILEJSON && formatTiles) {\n log.assert(\n Object.values(TILE_FORMATS).includes(formatTiles),\n `Invalid value for formatTiles: ${formatTiles}. Use value from TILE_FORMATS`\n );\n url += `&${encodeParameter('formatTiles', formatTiles)}`;\n }\n\n const {accessToken} = localCreds;\n return {url, accessToken, mapFormat, metadata};\n}\n\n/* global clearInterval, setInterval, URL */\nasync function _fetchMapDataset(\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials,\n clientId?: string,\n headers?: Headers\n) {\n const {\n aggregationExp,\n aggregationResLevel,\n connectionName: connection,\n columns,\n format,\n geoColumn,\n source,\n type,\n queryParameters\n } = dataset;\n // First fetch metadata\n const {url, mapFormat} = await _fetchDataUrl({\n aggregationExp,\n aggregationResLevel,\n clientId,\n credentials: {...credentials, accessToken},\n connection,\n columns,\n format,\n geoColumn,\n headers,\n source,\n type,\n queryParameters\n });\n\n // Extract the last time the data changed\n const cache = parseInt(new URL(url).searchParams.get('cache') || '', 10);\n if (cache && dataset.cache === cache) {\n return false;\n }\n dataset.cache = cache;\n\n // Only fetch if the data has changed\n dataset.data = await requestData({url, format: mapFormat, accessToken});\n\n return true;\n}\n\nasync function _fetchTilestats(\n attribute,\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials\n) {\n const {connectionName: connection, source, type} = dataset;\n\n const statsUrl = buildStatsUrlFromBase(credentials.apiBaseUrl);\n let url = `${statsUrl}/${connection}/`;\n if (type === MAP_TYPES.QUERY) {\n url += `${attribute}?${encodeParameter('q', source)}`;\n } else {\n // MAP_TYPE.TABLE\n url += `${source}/${attribute}`;\n }\n const stats = await requestData({url, format: FORMATS.JSON, accessToken});\n\n // Replace tilestats for attribute with value from API\n const {attributes} = dataset.data.tilestats.layers[0];\n const index = attributes.findIndex(d => d.attribute === attribute);\n attributes[index] = stats;\n return true;\n}\n\nasync function fillInMapDatasets(\n {datasets, token},\n clientId: string,\n credentials: CloudNativeCredentials,\n headers?: Headers\n) {\n const promises = datasets.map(dataset =>\n _fetchMapDataset(dataset, token, credentials, clientId, headers)\n );\n return await Promise.all(promises);\n}\n\nasync function fillInTileStats(\n {datasets, keplerMapConfig, token},\n credentials: CloudNativeCredentials\n) {\n const attributes: {attribute?: string; dataset?: any}[] = [];\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.data.tilestats && dataset.type !== MAP_TYPES.TILESET) {\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: {attribute?: string; dataset?: any}[] = [];\n for (const a of attributes) {\n if (\n !filteredAttributes.find(\n ({attribute, dataset}) => attribute === a.attribute && dataset === a.dataset\n )\n ) {\n filteredAttributes.push(a);\n }\n }\n\n const promises = filteredAttributes.map(({attribute, dataset}) =>\n _fetchTilestats(attribute, dataset, token, credentials)\n );\n return await Promise.all(promises);\n}\n\nexport async function fetchMap({\n cartoMapId,\n clientId,\n credentials,\n headers,\n autoRefresh,\n onNewData\n}: {\n cartoMapId: string;\n clientId: string;\n credentials?: CloudNativeCredentials;\n headers?: Headers;\n autoRefresh?: number;\n onNewData?: (map: any) => void;\n}) {\n const defaultCredentials = getDefaultCredentials();\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n } as CloudNativeCredentials;\n const {accessToken} = localCreds;\n\n assert(cartoMapId, 'Must define CARTO map id: fetchMap({cartoMapId: \"XXXX-XXXX-XXXX\"})');\n\n assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\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(\n typeof autoRefresh === 'number' && autoRefresh > 0,\n '`autoRefresh` must be a positive number'\n );\n }\n\n const url = `${localCreds.mapsUrl}/public/${cartoMapId}`;\n const map = await requestJson<any>({url, headers, accessToken});\n\n // Periodically check if the data has changed. Note that this\n // will not update when a map is published.\n let stopAutoRefresh: (() => void) | undefined;\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, localCreds, headers);\n if (onNewData && changed.some(v => v === true)) {\n onNewData(parseMap(map));\n }\n }, autoRefresh * 1000);\n stopAutoRefresh = () => {\n clearInterval(intervalId);\n };\n }\n\n const geojsonLayers = map.keplerMapConfig.config.visState.layers.filter(\n ({type}) => type === 'geojson' || type === 'point'\n );\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 dataset.geoColumn = config.columns.geojson;\n }\n });\n\n // Mutates map.datasets so that dataset.data contains data\n await fillInMapDatasets(map, clientId, localCreds, headers);\n\n // Mutates attributes in visualChannels to contain tile stats\n await fillInTileStats(map, localCreds);\n return {\n ...parseMap(map),\n ...{stopAutoRefresh}\n };\n}\n"],"file":"maps-v3-client.js"}
1
+ {"version":3,"sources":["../../../src/api/maps-v3-client.ts"],"names":["MAX_GET_LENGTH","DEFAULT_CLIENT","V3_MINOR_VERSION","request","method","url","customHeaders","headers","accessToken","body","Accept","Authorization","fetch","Error","requestJson","response","json","ok","dealWithError","error","requestData","format","FORMATS","NDJSON","data","rows","status","getParameters","type","source","geoColumn","columns","clientId","aggregationExp","aggregationResLevel","queryParameters","parameters","push","sourceName","MAP_TYPES","QUERY","JSON","stringify","join","isSpatialIndexGeoColumn","spatialIndex","split","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","q","client","getUrlFromMetadata","metadata","m","checkFetchLayerDataParameters","apiVersion","API_VERSIONS","V3","apiBaseUrl","COLUMNS_SUPPORT","includes","GEO_COLUMN_SUPPORT","fetchLayerData","formatTiles","_fetchDataUrl","mapFormat","result","schema","defaultCredentials","localCreds","prioritizedFormats","GEOJSON","TILEJSON","f","log","assert","Object","values","TILE_FORMATS","_fetchMapDataset","dataset","connectionName","cache","parseInt","URL","searchParams","get","_fetchTilestats","attribute","statsUrl","stats","attributes","tilestats","layers","index","findIndex","d","fillInMapDatasets","datasets","token","promises","map","Promise","all","fillInTileStats","keplerMapConfig","config","visState","layer","keys","visualChannels","channel","name","find","id","dataId","TILESET","filteredAttributes","a","fetchMap","cartoMapId","autoRefresh","onNewData","intervalId","setInterval","changed","some","v","stopAutoRefresh","clearInterval","geojsonLayers","filter","geojsonDatasetIds","forEach","geojson"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {\n getDefaultCredentials,\n buildMapsUrlFromBase,\n buildStatsUrlFromBase,\n CloudNativeCredentials\n} from '../config';\nimport {\n API_VERSIONS,\n COLUMNS_SUPPORT,\n encodeParameter,\n Format,\n FORMATS,\n GEO_COLUMN_SUPPORT,\n MapInstantiation,\n MapType,\n MAP_TYPES,\n QueryParameters,\n SchemaField,\n TileFormat,\n TILE_FORMATS\n} from './maps-api-common';\nimport {parseMap} from './parseMap';\nimport {log} from '@deck.gl/core';\nimport {assert} from '../utils';\n\nconst MAX_GET_LENGTH = 2048;\nconst DEFAULT_CLIENT = 'deck-gl-carto';\nconst V3_MINOR_VERSION = '3.1';\n\nexport type Headers = Record<string, string>;\ninterface RequestParams {\n method?: string;\n url: string;\n headers?: Headers;\n accessToken?: string;\n body?: any;\n}\n\n/**\n * Request against Maps API\n */\nasync function request({\n method,\n url,\n headers: customHeaders,\n accessToken,\n body\n}: RequestParams): Promise<Response> {\n const headers: Headers = {\n ...customHeaders,\n Accept: 'application/json'\n };\n\n if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n\n try {\n /* global fetch */\n return await fetch(url, {\n method,\n headers,\n body\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n}\n\nasync function requestJson<T = unknown>({\n method,\n url,\n headers,\n accessToken,\n body\n}: RequestParams): Promise<T> {\n const response = await request({method, url, headers, accessToken, body});\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, error: json.error});\n }\n return json as T;\n}\n\nasync function requestData({\n method,\n url,\n accessToken,\n format,\n body\n}: RequestParams & {\n format: Format;\n}): Promise<Response | unknown> {\n if (format === FORMATS.NDJSON) {\n return request({method, url, accessToken, body});\n }\n\n const data = await requestJson<any>({method, url, accessToken, body});\n return data.rows ? data.rows : data;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, error}: {response: Response; error?: string}): never {\n switch (response.status) {\n case 400:\n throw new Error(`Bad request. ${error}`);\n case 401:\n case 403:\n throw new Error(`Unauthorized access. ${error}`);\n default:\n throw new Error(error);\n }\n}\n\ntype FetchLayerDataParams = {\n type: MapType;\n source: string;\n connection: string;\n credentials: CloudNativeCredentials;\n geoColumn?: string;\n columns?: string[];\n clientId?: string;\n format?: Format;\n formatTiles?: TileFormat;\n headers?: Headers;\n aggregationExp?: string;\n aggregationResLevel?: number;\n queryParameters?: QueryParameters;\n};\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: Omit<FetchLayerDataParams, 'connection' | 'credentials'>) {\n const parameters = [encodeParameter('client', clientId || DEFAULT_CLIENT)];\n parameters.push(encodeParameter('v', V3_MINOR_VERSION));\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (queryParameters) {\n parameters.push(encodeParameter('queryParameters', JSON.stringify(queryParameters)));\n }\n\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n if (aggregationExp) {\n parameters.push(encodeParameter('aggregationExp', aggregationExp));\n } else if (isSpatialIndexGeoColumn(geoColumn)) {\n // Default aggregationExp required for spatial index layers\n parameters.push(encodeParameter('aggregationExp', '1 AS value'));\n }\n if (aggregationResLevel) {\n parameters.push(encodeParameter('aggregationResLevel', aggregationResLevel));\n }\n\n return parameters.join('&');\n}\n\nfunction isSpatialIndexGeoColumn(geoColumn: string | undefined) {\n const spatialIndex = geoColumn?.split(':')[0];\n return spatialIndex === 'h3' || spatialIndex === 'quadbin';\n}\n\nexport async function mapInstantiation({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<MapInstantiation> {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationResLevel,\n aggregationExp,\n queryParameters\n })}`;\n const {accessToken} = credentials;\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: clientId || DEFAULT_CLIENT,\n queryParameters\n });\n return await requestJson({method: 'POST', url: baseUrl, headers, accessToken, body});\n }\n\n return await requestJson({url, headers, accessToken});\n}\n\nfunction getUrlFromMetadata(metadata: MapInstantiation, format: Format): string | null {\n const m = metadata[format];\n\n if (m && !m.error && m.url) {\n return m.url[0];\n }\n\n return null;\n}\n\nfunction checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n}: FetchLayerDataParams) {\n assert(connection, 'Must define connection');\n assert(type, 'Must define a type');\n assert(source, 'Must define a source');\n\n assert(credentials.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(credentials.apiBaseUrl, 'Must define apiBaseUrl');\n assert(credentials.accessToken, 'Must define an accessToken');\n\n if (columns) {\n assert(\n COLUMNS_SUPPORT.includes(type),\n `The columns parameter is not supported by type ${type}`\n );\n }\n if (geoColumn) {\n assert(\n GEO_COLUMN_SUPPORT.includes(type),\n `The geoColumn parameter is not supported by type ${type}`\n );\n } else {\n assert(!aggregationExp, 'Have aggregationExp, but geoColumn parameter is missing');\n assert(!aggregationResLevel, 'Have aggregationResLevel, but geoColumn parameter is missing');\n }\n}\n\nexport interface FetchLayerDataResult {\n data: any;\n format?: Format;\n schema: SchemaField[];\n}\nexport async function fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<FetchLayerDataResult> {\n // Internally we split data fetching into two parts to allow us to\n // conditionally fetch the actual data, depending on the metadata state\n const {url, accessToken, mapFormat, metadata} = await _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n\n const data = await requestData({url, format: mapFormat, accessToken});\n const result: FetchLayerDataResult = {data, format: mapFormat, schema: metadata.schema};\n return result;\n}\n\nasync function _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams) {\n const defaultCredentials = getDefaultCredentials();\n // Only pick up default credentials if they have been defined for\n // correct API version\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n };\n checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n });\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n let url: string | null = null;\n let mapFormat: Format | undefined;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.JSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n assert(url && mapFormat, 'Unsupported data formats received from backend.');\n }\n\n if (format === FORMATS.TILEJSON && formatTiles) {\n log.assert(\n Object.values(TILE_FORMATS).includes(formatTiles),\n `Invalid value for formatTiles: ${formatTiles}. Use value from TILE_FORMATS`\n );\n url += `&${encodeParameter('formatTiles', formatTiles)}`;\n }\n\n const {accessToken} = localCreds;\n return {url, accessToken, mapFormat, metadata};\n}\n\n/* global clearInterval, setInterval, URL */\nasync function _fetchMapDataset(\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials,\n clientId?: string,\n headers?: Headers\n) {\n const {\n aggregationExp,\n aggregationResLevel,\n connectionName: connection,\n columns,\n format,\n geoColumn,\n source,\n type,\n queryParameters\n } = dataset;\n // First fetch metadata\n const {url, mapFormat} = await _fetchDataUrl({\n aggregationExp,\n aggregationResLevel,\n clientId,\n credentials: {...credentials, accessToken},\n connection,\n columns,\n format,\n geoColumn,\n headers,\n source,\n type,\n queryParameters\n });\n\n // Extract the last time the data changed\n const cache = parseInt(new URL(url).searchParams.get('cache') || '', 10);\n if (cache && dataset.cache === cache) {\n return false;\n }\n dataset.cache = cache;\n\n // Only fetch if the data has changed\n dataset.data = await requestData({url, format: mapFormat, accessToken});\n\n return true;\n}\n\nasync function _fetchTilestats(\n attribute,\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials\n) {\n const {connectionName: connection, source, type} = dataset;\n\n const statsUrl = buildStatsUrlFromBase(credentials.apiBaseUrl);\n let url = `${statsUrl}/${connection}/`;\n if (type === MAP_TYPES.QUERY) {\n url += `${attribute}?${encodeParameter('q', source)}`;\n } else {\n // MAP_TYPE.TABLE\n url += `${source}/${attribute}`;\n }\n const stats = await requestData({url, format: FORMATS.JSON, accessToken});\n\n // Replace tilestats for attribute with value from API\n const {attributes} = dataset.data.tilestats.layers[0];\n const index = attributes.findIndex(d => d.attribute === attribute);\n attributes[index] = stats;\n return true;\n}\n\nasync function fillInMapDatasets(\n {datasets, token},\n clientId: string,\n credentials: CloudNativeCredentials,\n headers?: Headers\n) {\n const promises = datasets.map(dataset =>\n _fetchMapDataset(dataset, token, credentials, clientId, headers)\n );\n return await Promise.all(promises);\n}\n\nasync function fillInTileStats(\n {datasets, keplerMapConfig, token},\n credentials: CloudNativeCredentials\n) {\n const attributes: {attribute?: string; dataset?: any}[] = [];\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.data.tilestats && dataset.type !== MAP_TYPES.TILESET) {\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: {attribute?: string; dataset?: any}[] = [];\n for (const a of attributes) {\n if (\n !filteredAttributes.find(\n ({attribute, dataset}) => attribute === a.attribute && dataset === a.dataset\n )\n ) {\n filteredAttributes.push(a);\n }\n }\n\n const promises = filteredAttributes.map(({attribute, dataset}) =>\n _fetchTilestats(attribute, dataset, token, credentials)\n );\n return await Promise.all(promises);\n}\n\nexport async function fetchMap({\n cartoMapId,\n clientId,\n credentials,\n headers,\n autoRefresh,\n onNewData\n}: {\n cartoMapId: string;\n clientId: string;\n credentials?: CloudNativeCredentials;\n headers?: Headers;\n autoRefresh?: number;\n onNewData?: (map: any) => void;\n}) {\n const defaultCredentials = getDefaultCredentials();\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n } as CloudNativeCredentials;\n const {accessToken} = localCreds;\n\n assert(cartoMapId, 'Must define CARTO map id: fetchMap({cartoMapId: \"XXXX-XXXX-XXXX\"})');\n\n assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\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(\n typeof autoRefresh === 'number' && autoRefresh > 0,\n '`autoRefresh` must be a positive number'\n );\n }\n\n const url = `${localCreds.mapsUrl}/public/${cartoMapId}`;\n const map = await requestJson<any>({url, headers, accessToken});\n\n // Periodically check if the data has changed. Note that this\n // will not update when a map is published.\n let stopAutoRefresh: (() => void) | undefined;\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, localCreds, headers);\n if (onNewData && changed.some(v => v === true)) {\n onNewData(parseMap(map));\n }\n }, autoRefresh * 1000);\n stopAutoRefresh = () => {\n clearInterval(intervalId);\n };\n }\n\n const geojsonLayers = map.keplerMapConfig.config.visState.layers.filter(\n ({type}) => type === 'geojson' || type === 'point'\n );\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 dataset.geoColumn = config.columns.geojson;\n }\n });\n\n // Mutates map.datasets so that dataset.data contains data\n await fillInMapDatasets(map, clientId, localCreds, headers);\n\n // Mutates attributes in visualChannels to contain tile stats\n await fillInTileStats(map, localCreds);\n return {\n ...parseMap(map),\n ...{stopAutoRefresh}\n };\n}\n"],"file":"maps-v3-client.js"}
@@ -11,6 +11,8 @@ var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/cl
11
11
 
12
12
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
13
13
 
14
+ var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
15
+
14
16
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
15
17
 
16
18
  var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
@@ -41,6 +43,10 @@ function isFeatureIdDefined(value) {
41
43
  return value !== undefined && value !== null && value !== '';
42
44
  }
43
45
 
46
+ var defaultProps = {
47
+ aggregationResLevel: 4
48
+ };
49
+
44
50
  var SpatialIndexTileLayer = function (_TileLayer) {
45
51
  (0, _inherits2.default)(SpatialIndexTileLayer, _TileLayer);
46
52
 
@@ -85,6 +91,20 @@ var SpatialIndexTileLayer = function (_TileLayer) {
85
91
  signal: signal
86
92
  });
87
93
  }
94
+ }, {
95
+ key: "updateState",
96
+ value: function updateState(params) {
97
+ var props = params.props,
98
+ oldProps = params.oldProps;
99
+
100
+ if (props.aggregationResLevel !== oldProps.aggregationResLevel) {
101
+ this.setState({
102
+ tileset: null
103
+ });
104
+ }
105
+
106
+ (0, _get2.default)((0, _getPrototypeOf2.default)(SpatialIndexTileLayer.prototype), "updateState", this).call(this, params);
107
+ }
88
108
  }, {
89
109
  key: "_updateAutoHighlight",
90
110
  value: function _updateAutoHighlight(info) {
@@ -138,4 +158,5 @@ var SpatialIndexTileLayer = function (_TileLayer) {
138
158
 
139
159
  exports.default = SpatialIndexTileLayer;
140
160
  (0, _defineProperty2.default)(SpatialIndexTileLayer, "layerName", 'SpatialIndexTileLayer');
161
+ (0, _defineProperty2.default)(SpatialIndexTileLayer, "defaultProps", defaultProps);
141
162
  //# sourceMappingURL=spatial-index-tile-layer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layers/spatial-index-tile-layer.ts"],"names":["CartoSpatialTileLoader","isFeatureIdDefined","value","undefined","SpatialIndexTileLayer","tile","props","data","getTileData","fetch","signal","url","Array","isArray","Promise","reject","loadOptions","getLoadOptions","formatTiles","TILE_FORMATS","BINARY","mimeType","propName","layer","info","hoveredFeatureId","state","hoveredFeature","object","newHoveredFeatureId","id","highlightColor","setState","highlightedObjectIndex","getHighlightedObjectIndex","content","isFeatureIdPresent","findIndex","feature","TileLayer"],"mappings":"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","sourcesContent":["import {registerLoaders} from '@loaders.gl/core';\nimport CartoSpatialTileLoader from './schema/carto-spatial-tile-loader';\nregisterLoaders([CartoSpatialTileLoader]);\n\nimport {PickingInfo} from '@deck.gl/core';\nimport {\n TileLayer,\n _getURLFromTemplate,\n _Tile2DHeader as Tile2DHeader,\n _TileLoadProps as TileLoadProps\n} from '@deck.gl/geo-layers';\nimport {TILE_FORMATS} from '../api/maps-api-common';\n\nfunction isFeatureIdDefined(value: unknown): boolean {\n return value !== undefined && value !== null && value !== '';\n}\n\nexport default class SpatialIndexTileLayer<ExtraProps = {}> extends TileLayer<any, ExtraProps> {\n static layerName = 'SpatialIndexTileLayer';\n\n getTileData(tile: TileLoadProps) {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url =\n typeof data === 'string' || Array.isArray(data) ? _getURLFromTemplate(data, tile) : null;\n if (!tile.url) {\n return Promise.reject('Invalid URL');\n }\n\n if (getTileData) {\n return getTileData(tile);\n }\n\n let loadOptions = this.getLoadOptions();\n // @ts-ignore\n const {formatTiles} = this.props;\n\n // The backend doesn't yet support our custom mime-type, so force it here\n // TODO remove entire `getTileData` method once backend sends the correct mime-type\n if (formatTiles === TILE_FORMATS.BINARY) {\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/vnd.carto-spatial-tile'\n };\n }\n\n return fetch(tile.url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const {hoveredFeatureId} = this.state;\n const hoveredFeature = info.object;\n let newHoveredFeatureId;\n\n if (hoveredFeature) {\n newHoveredFeatureId = hoveredFeature.id;\n }\n\n if (hoveredFeatureId !== newHoveredFeatureId) {\n let {highlightColor} = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n\n this.setState({\n highlightColor,\n hoveredFeatureId: newHoveredFeatureId\n });\n }\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader) {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n\n getHighlightedObjectIndex(tile: Tile2DHeader) {\n const {hoveredFeatureId} = this.state;\n const data = tile.content;\n\n const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId);\n if (!isFeatureIdPresent || !Array.isArray(data)) {\n return -1;\n }\n\n return data.findIndex(feature => feature.id === hoveredFeatureId);\n }\n}\n"],"file":"spatial-index-tile-layer.js"}
1
+ {"version":3,"sources":["../../../src/layers/spatial-index-tile-layer.ts"],"names":["CartoSpatialTileLoader","isFeatureIdDefined","value","undefined","defaultProps","aggregationResLevel","SpatialIndexTileLayer","tile","props","data","getTileData","fetch","signal","url","Array","isArray","Promise","reject","loadOptions","getLoadOptions","formatTiles","TILE_FORMATS","BINARY","mimeType","propName","layer","params","oldProps","setState","tileset","info","hoveredFeatureId","state","hoveredFeature","object","newHoveredFeatureId","id","highlightColor","highlightedObjectIndex","getHighlightedObjectIndex","content","isFeatureIdPresent","findIndex","feature","TileLayer"],"mappings":"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","sourcesContent":["import {registerLoaders} from '@loaders.gl/core';\nimport {DefaultProps, UpdateParameters} from '@deck.gl/core';\nimport CartoSpatialTileLoader from './schema/carto-spatial-tile-loader';\nregisterLoaders([CartoSpatialTileLoader]);\n\nimport {PickingInfo} from '@deck.gl/core';\nimport {\n TileLayer,\n TileLayerProps,\n _getURLFromTemplate,\n _Tile2DHeader as Tile2DHeader,\n _TileLoadProps as TileLoadProps\n} from '@deck.gl/geo-layers';\nimport {TILE_FORMATS} from '../api/maps-api-common';\n\nfunction isFeatureIdDefined(value: unknown): boolean {\n return value !== undefined && value !== null && value !== '';\n}\n\nconst defaultProps: DefaultProps<SpatialIndexTileLayerProps> = {\n aggregationResLevel: 4\n};\n\n/** All properties supported by SpatialIndexTileLayer. */\nexport type SpatialIndexTileLayerProps<DataT = any> = _SpatialIndexTileLayerProps<DataT> &\n TileLayer<DataT>;\n\n/** Properties added by SpatialIndexTileLayer. */\ntype _SpatialIndexTileLayerProps<DataT> = {\n aggregationResLevel?: number;\n};\n\nexport default class SpatialIndexTileLayer<DataT = any, ExtraProps = {}> extends TileLayer<\n DataT,\n ExtraProps & Required<_SpatialIndexTileLayerProps<DataT>>\n> {\n static layerName = 'SpatialIndexTileLayer';\n static defaultProps = defaultProps;\n\n getTileData(tile: TileLoadProps) {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url =\n typeof data === 'string' || Array.isArray(data) ? _getURLFromTemplate(data, tile) : null;\n if (!tile.url) {\n return Promise.reject('Invalid URL');\n }\n\n if (getTileData) {\n return getTileData(tile);\n }\n\n let loadOptions = this.getLoadOptions();\n // @ts-ignore\n const {formatTiles} = this.props;\n\n // The backend doesn't yet support our custom mime-type, so force it here\n // TODO remove entire `getTileData` method once backend sends the correct mime-type\n if (formatTiles === TILE_FORMATS.BINARY) {\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/vnd.carto-spatial-tile'\n };\n }\n\n return fetch(tile.url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n updateState(params: UpdateParameters<this>) {\n const {props, oldProps} = params;\n if (props.aggregationResLevel !== oldProps.aggregationResLevel) {\n // Tileset cache is invalid when resLevel changes\n this.setState({tileset: null});\n }\n super.updateState(params);\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const {hoveredFeatureId} = this.state;\n const hoveredFeature = info.object;\n let newHoveredFeatureId;\n\n if (hoveredFeature) {\n newHoveredFeatureId = hoveredFeature.id;\n }\n\n if (hoveredFeatureId !== newHoveredFeatureId) {\n let {highlightColor} = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n\n this.setState({\n highlightColor,\n hoveredFeatureId: newHoveredFeatureId\n });\n }\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader) {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n\n getHighlightedObjectIndex(tile: Tile2DHeader) {\n const {hoveredFeatureId} = this.state;\n const data = tile.content;\n\n const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId);\n if (!isFeatureIdPresent || !Array.isArray(data)) {\n return -1;\n }\n\n return data.findIndex(feature => feature.id === hoveredFeatureId);\n }\n}\n"],"file":"spatial-index-tile-layer.js"}
@@ -237,10 +237,6 @@ function checkFetchLayerDataParameters({
237
237
  assert(!aggregationExp, 'Have aggregationExp, but geoColumn parameter is missing');
238
238
  assert(!aggregationResLevel, 'Have aggregationResLevel, but geoColumn parameter is missing');
239
239
  }
240
-
241
- if (!aggregationExp) {
242
- assert(!aggregationResLevel, 'Have aggregationResLevel, but aggregationExp parameter is missing');
243
- }
244
240
  }
245
241
 
246
242
  export async function fetchLayerData({
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/maps-v3-client.ts"],"names":["getDefaultCredentials","buildMapsUrlFromBase","buildStatsUrlFromBase","API_VERSIONS","COLUMNS_SUPPORT","encodeParameter","FORMATS","GEO_COLUMN_SUPPORT","MAP_TYPES","TILE_FORMATS","parseMap","log","assert","MAX_GET_LENGTH","DEFAULT_CLIENT","V3_MINOR_VERSION","request","method","url","headers","customHeaders","accessToken","body","Accept","Authorization","fetch","error","Error","requestJson","response","json","ok","dealWithError","requestData","format","NDJSON","data","rows","status","getParameters","type","source","geoColumn","columns","clientId","aggregationExp","aggregationResLevel","queryParameters","parameters","push","sourceName","QUERY","JSON","stringify","join","isSpatialIndexGeoColumn","spatialIndex","split","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","q","client","getUrlFromMetadata","metadata","m","checkFetchLayerDataParameters","apiVersion","V3","apiBaseUrl","includes","fetchLayerData","formatTiles","mapFormat","_fetchDataUrl","result","schema","defaultCredentials","localCreds","prioritizedFormats","GEOJSON","TILEJSON","f","Object","values","_fetchMapDataset","dataset","connectionName","cache","parseInt","URL","searchParams","get","_fetchTilestats","attribute","statsUrl","stats","attributes","tilestats","layers","index","findIndex","d","fillInMapDatasets","datasets","token","promises","map","Promise","all","fillInTileStats","keplerMapConfig","config","visState","layer","channel","keys","visualChannels","name","find","id","dataId","TILESET","filteredAttributes","a","fetchMap","cartoMapId","autoRefresh","onNewData","stopAutoRefresh","intervalId","setInterval","changed","some","v","clearInterval","geojsonLayers","filter","geojsonDatasetIds","forEach","geojson"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {\n getDefaultCredentials,\n buildMapsUrlFromBase,\n buildStatsUrlFromBase,\n CloudNativeCredentials\n} from '../config';\nimport {\n API_VERSIONS,\n COLUMNS_SUPPORT,\n encodeParameter,\n Format,\n FORMATS,\n GEO_COLUMN_SUPPORT,\n MapInstantiation,\n MapType,\n MAP_TYPES,\n QueryParameters,\n SchemaField,\n TileFormat,\n TILE_FORMATS\n} from './maps-api-common';\nimport {parseMap} from './parseMap';\nimport {log} from '@deck.gl/core';\nimport {assert} from '../utils';\n\nconst MAX_GET_LENGTH = 2048;\nconst DEFAULT_CLIENT = 'deck-gl-carto';\nconst V3_MINOR_VERSION = '3.1';\n\nexport type Headers = Record<string, string>;\ninterface RequestParams {\n method?: string;\n url: string;\n headers?: Headers;\n accessToken?: string;\n body?: any;\n}\n\n/**\n * Request against Maps API\n */\nasync function request({\n method,\n url,\n headers: customHeaders,\n accessToken,\n body\n}: RequestParams): Promise<Response> {\n const headers: Headers = {\n ...customHeaders,\n Accept: 'application/json'\n };\n\n if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n\n try {\n /* global fetch */\n return await fetch(url, {\n method,\n headers,\n body\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n}\n\nasync function requestJson<T = unknown>({\n method,\n url,\n headers,\n accessToken,\n body\n}: RequestParams): Promise<T> {\n const response = await request({method, url, headers, accessToken, body});\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, error: json.error});\n }\n return json as T;\n}\n\nasync function requestData({\n method,\n url,\n accessToken,\n format,\n body\n}: RequestParams & {\n format: Format;\n}): Promise<Response | unknown> {\n if (format === FORMATS.NDJSON) {\n return request({method, url, accessToken, body});\n }\n\n const data = await requestJson<any>({method, url, accessToken, body});\n return data.rows ? data.rows : data;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, error}: {response: Response; error?: string}): never {\n switch (response.status) {\n case 400:\n throw new Error(`Bad request. ${error}`);\n case 401:\n case 403:\n throw new Error(`Unauthorized access. ${error}`);\n default:\n throw new Error(error);\n }\n}\n\ntype FetchLayerDataParams = {\n type: MapType;\n source: string;\n connection: string;\n credentials: CloudNativeCredentials;\n geoColumn?: string;\n columns?: string[];\n clientId?: string;\n format?: Format;\n formatTiles?: TileFormat;\n headers?: Headers;\n aggregationExp?: string;\n aggregationResLevel?: number;\n queryParameters?: QueryParameters;\n};\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: Omit<FetchLayerDataParams, 'connection' | 'credentials'>) {\n const parameters = [encodeParameter('client', clientId || DEFAULT_CLIENT)];\n parameters.push(encodeParameter('v', V3_MINOR_VERSION));\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (queryParameters) {\n parameters.push(encodeParameter('queryParameters', JSON.stringify(queryParameters)));\n }\n\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n if (aggregationExp) {\n parameters.push(encodeParameter('aggregationExp', aggregationExp));\n } else if (isSpatialIndexGeoColumn(geoColumn)) {\n // Default aggregationExp required for spatial index layers\n parameters.push(encodeParameter('aggregationExp', '1 AS value'));\n }\n if (aggregationResLevel) {\n parameters.push(encodeParameter('aggregationResLevel', aggregationResLevel));\n }\n\n return parameters.join('&');\n}\n\nfunction isSpatialIndexGeoColumn(geoColumn: string | undefined) {\n const spatialIndex = geoColumn?.split(':')[0];\n return spatialIndex === 'h3' || spatialIndex === 'quadbin';\n}\n\nexport async function mapInstantiation({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<MapInstantiation> {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationResLevel,\n aggregationExp,\n queryParameters\n })}`;\n const {accessToken} = credentials;\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: clientId || DEFAULT_CLIENT,\n queryParameters\n });\n return await requestJson({method: 'POST', url: baseUrl, headers, accessToken, body});\n }\n\n return await requestJson({url, headers, accessToken});\n}\n\nfunction getUrlFromMetadata(metadata: MapInstantiation, format: Format): string | null {\n const m = metadata[format];\n\n if (m && !m.error && m.url) {\n return m.url[0];\n }\n\n return null;\n}\n\nfunction checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n}: FetchLayerDataParams) {\n assert(connection, 'Must define connection');\n assert(type, 'Must define a type');\n assert(source, 'Must define a source');\n\n assert(credentials.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(credentials.apiBaseUrl, 'Must define apiBaseUrl');\n assert(credentials.accessToken, 'Must define an accessToken');\n\n if (columns) {\n assert(\n COLUMNS_SUPPORT.includes(type),\n `The columns parameter is not supported by type ${type}`\n );\n }\n if (geoColumn) {\n assert(\n GEO_COLUMN_SUPPORT.includes(type),\n `The geoColumn parameter is not supported by type ${type}`\n );\n } else {\n assert(!aggregationExp, 'Have aggregationExp, but geoColumn parameter is missing');\n assert(!aggregationResLevel, 'Have aggregationResLevel, but geoColumn parameter is missing');\n }\n\n if (!aggregationExp) {\n assert(\n !aggregationResLevel,\n 'Have aggregationResLevel, but aggregationExp parameter is missing'\n );\n }\n}\n\nexport interface FetchLayerDataResult {\n data: any;\n format?: Format;\n schema: SchemaField[];\n}\nexport async function fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<FetchLayerDataResult> {\n // Internally we split data fetching into two parts to allow us to\n // conditionally fetch the actual data, depending on the metadata state\n const {url, accessToken, mapFormat, metadata} = await _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n\n const data = await requestData({url, format: mapFormat, accessToken});\n const result: FetchLayerDataResult = {data, format: mapFormat, schema: metadata.schema};\n return result;\n}\n\nasync function _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams) {\n const defaultCredentials = getDefaultCredentials();\n // Only pick up default credentials if they have been defined for\n // correct API version\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n };\n checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n });\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n let url: string | null = null;\n let mapFormat: Format | undefined;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.JSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n assert(url && mapFormat, 'Unsupported data formats received from backend.');\n }\n\n if (format === FORMATS.TILEJSON && formatTiles) {\n log.assert(\n Object.values(TILE_FORMATS).includes(formatTiles),\n `Invalid value for formatTiles: ${formatTiles}. Use value from TILE_FORMATS`\n );\n url += `&${encodeParameter('formatTiles', formatTiles)}`;\n }\n\n const {accessToken} = localCreds;\n return {url, accessToken, mapFormat, metadata};\n}\n\n/* global clearInterval, setInterval, URL */\nasync function _fetchMapDataset(\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials,\n clientId?: string,\n headers?: Headers\n) {\n const {\n aggregationExp,\n aggregationResLevel,\n connectionName: connection,\n columns,\n format,\n geoColumn,\n source,\n type,\n queryParameters\n } = dataset;\n // First fetch metadata\n const {url, mapFormat} = await _fetchDataUrl({\n aggregationExp,\n aggregationResLevel,\n clientId,\n credentials: {...credentials, accessToken},\n connection,\n columns,\n format,\n geoColumn,\n headers,\n source,\n type,\n queryParameters\n });\n\n // Extract the last time the data changed\n const cache = parseInt(new URL(url).searchParams.get('cache') || '', 10);\n if (cache && dataset.cache === cache) {\n return false;\n }\n dataset.cache = cache;\n\n // Only fetch if the data has changed\n dataset.data = await requestData({url, format: mapFormat, accessToken});\n\n return true;\n}\n\nasync function _fetchTilestats(\n attribute,\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials\n) {\n const {connectionName: connection, source, type} = dataset;\n\n const statsUrl = buildStatsUrlFromBase(credentials.apiBaseUrl);\n let url = `${statsUrl}/${connection}/`;\n if (type === MAP_TYPES.QUERY) {\n url += `${attribute}?${encodeParameter('q', source)}`;\n } else {\n // MAP_TYPE.TABLE\n url += `${source}/${attribute}`;\n }\n const stats = await requestData({url, format: FORMATS.JSON, accessToken});\n\n // Replace tilestats for attribute with value from API\n const {attributes} = dataset.data.tilestats.layers[0];\n const index = attributes.findIndex(d => d.attribute === attribute);\n attributes[index] = stats;\n return true;\n}\n\nasync function fillInMapDatasets(\n {datasets, token},\n clientId: string,\n credentials: CloudNativeCredentials,\n headers?: Headers\n) {\n const promises = datasets.map(dataset =>\n _fetchMapDataset(dataset, token, credentials, clientId, headers)\n );\n return await Promise.all(promises);\n}\n\nasync function fillInTileStats(\n {datasets, keplerMapConfig, token},\n credentials: CloudNativeCredentials\n) {\n const attributes: {attribute?: string; dataset?: any}[] = [];\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.data.tilestats && dataset.type !== MAP_TYPES.TILESET) {\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: {attribute?: string; dataset?: any}[] = [];\n for (const a of attributes) {\n if (\n !filteredAttributes.find(\n ({attribute, dataset}) => attribute === a.attribute && dataset === a.dataset\n )\n ) {\n filteredAttributes.push(a);\n }\n }\n\n const promises = filteredAttributes.map(({attribute, dataset}) =>\n _fetchTilestats(attribute, dataset, token, credentials)\n );\n return await Promise.all(promises);\n}\n\nexport async function fetchMap({\n cartoMapId,\n clientId,\n credentials,\n headers,\n autoRefresh,\n onNewData\n}: {\n cartoMapId: string;\n clientId: string;\n credentials?: CloudNativeCredentials;\n headers?: Headers;\n autoRefresh?: number;\n onNewData?: (map: any) => void;\n}) {\n const defaultCredentials = getDefaultCredentials();\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n } as CloudNativeCredentials;\n const {accessToken} = localCreds;\n\n assert(cartoMapId, 'Must define CARTO map id: fetchMap({cartoMapId: \"XXXX-XXXX-XXXX\"})');\n\n assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\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(\n typeof autoRefresh === 'number' && autoRefresh > 0,\n '`autoRefresh` must be a positive number'\n );\n }\n\n const url = `${localCreds.mapsUrl}/public/${cartoMapId}`;\n const map = await requestJson<any>({url, headers, accessToken});\n\n // Periodically check if the data has changed. Note that this\n // will not update when a map is published.\n let stopAutoRefresh: (() => void) | undefined;\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, localCreds, headers);\n if (onNewData && changed.some(v => v === true)) {\n onNewData(parseMap(map));\n }\n }, autoRefresh * 1000);\n stopAutoRefresh = () => {\n clearInterval(intervalId);\n };\n }\n\n const geojsonLayers = map.keplerMapConfig.config.visState.layers.filter(\n ({type}) => type === 'geojson' || type === 'point'\n );\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 dataset.geoColumn = config.columns.geojson;\n }\n });\n\n // Mutates map.datasets so that dataset.data contains data\n await fillInMapDatasets(map, clientId, localCreds, headers);\n\n // Mutates attributes in visualChannels to contain tile stats\n await fillInTileStats(map, localCreds);\n return {\n ...parseMap(map),\n ...{stopAutoRefresh}\n };\n}\n"],"file":"maps-v3-client.js"}
1
+ {"version":3,"sources":["../../../src/api/maps-v3-client.ts"],"names":["getDefaultCredentials","buildMapsUrlFromBase","buildStatsUrlFromBase","API_VERSIONS","COLUMNS_SUPPORT","encodeParameter","FORMATS","GEO_COLUMN_SUPPORT","MAP_TYPES","TILE_FORMATS","parseMap","log","assert","MAX_GET_LENGTH","DEFAULT_CLIENT","V3_MINOR_VERSION","request","method","url","headers","customHeaders","accessToken","body","Accept","Authorization","fetch","error","Error","requestJson","response","json","ok","dealWithError","requestData","format","NDJSON","data","rows","status","getParameters","type","source","geoColumn","columns","clientId","aggregationExp","aggregationResLevel","queryParameters","parameters","push","sourceName","QUERY","JSON","stringify","join","isSpatialIndexGeoColumn","spatialIndex","split","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","q","client","getUrlFromMetadata","metadata","m","checkFetchLayerDataParameters","apiVersion","V3","apiBaseUrl","includes","fetchLayerData","formatTiles","mapFormat","_fetchDataUrl","result","schema","defaultCredentials","localCreds","prioritizedFormats","GEOJSON","TILEJSON","f","Object","values","_fetchMapDataset","dataset","connectionName","cache","parseInt","URL","searchParams","get","_fetchTilestats","attribute","statsUrl","stats","attributes","tilestats","layers","index","findIndex","d","fillInMapDatasets","datasets","token","promises","map","Promise","all","fillInTileStats","keplerMapConfig","config","visState","layer","channel","keys","visualChannels","name","find","id","dataId","TILESET","filteredAttributes","a","fetchMap","cartoMapId","autoRefresh","onNewData","stopAutoRefresh","intervalId","setInterval","changed","some","v","clearInterval","geojsonLayers","filter","geojsonDatasetIds","forEach","geojson"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {\n getDefaultCredentials,\n buildMapsUrlFromBase,\n buildStatsUrlFromBase,\n CloudNativeCredentials\n} from '../config';\nimport {\n API_VERSIONS,\n COLUMNS_SUPPORT,\n encodeParameter,\n Format,\n FORMATS,\n GEO_COLUMN_SUPPORT,\n MapInstantiation,\n MapType,\n MAP_TYPES,\n QueryParameters,\n SchemaField,\n TileFormat,\n TILE_FORMATS\n} from './maps-api-common';\nimport {parseMap} from './parseMap';\nimport {log} from '@deck.gl/core';\nimport {assert} from '../utils';\n\nconst MAX_GET_LENGTH = 2048;\nconst DEFAULT_CLIENT = 'deck-gl-carto';\nconst V3_MINOR_VERSION = '3.1';\n\nexport type Headers = Record<string, string>;\ninterface RequestParams {\n method?: string;\n url: string;\n headers?: Headers;\n accessToken?: string;\n body?: any;\n}\n\n/**\n * Request against Maps API\n */\nasync function request({\n method,\n url,\n headers: customHeaders,\n accessToken,\n body\n}: RequestParams): Promise<Response> {\n const headers: Headers = {\n ...customHeaders,\n Accept: 'application/json'\n };\n\n if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n\n try {\n /* global fetch */\n return await fetch(url, {\n method,\n headers,\n body\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n}\n\nasync function requestJson<T = unknown>({\n method,\n url,\n headers,\n accessToken,\n body\n}: RequestParams): Promise<T> {\n const response = await request({method, url, headers, accessToken, body});\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, error: json.error});\n }\n return json as T;\n}\n\nasync function requestData({\n method,\n url,\n accessToken,\n format,\n body\n}: RequestParams & {\n format: Format;\n}): Promise<Response | unknown> {\n if (format === FORMATS.NDJSON) {\n return request({method, url, accessToken, body});\n }\n\n const data = await requestJson<any>({method, url, accessToken, body});\n return data.rows ? data.rows : data;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, error}: {response: Response; error?: string}): never {\n switch (response.status) {\n case 400:\n throw new Error(`Bad request. ${error}`);\n case 401:\n case 403:\n throw new Error(`Unauthorized access. ${error}`);\n default:\n throw new Error(error);\n }\n}\n\ntype FetchLayerDataParams = {\n type: MapType;\n source: string;\n connection: string;\n credentials: CloudNativeCredentials;\n geoColumn?: string;\n columns?: string[];\n clientId?: string;\n format?: Format;\n formatTiles?: TileFormat;\n headers?: Headers;\n aggregationExp?: string;\n aggregationResLevel?: number;\n queryParameters?: QueryParameters;\n};\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: Omit<FetchLayerDataParams, 'connection' | 'credentials'>) {\n const parameters = [encodeParameter('client', clientId || DEFAULT_CLIENT)];\n parameters.push(encodeParameter('v', V3_MINOR_VERSION));\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (queryParameters) {\n parameters.push(encodeParameter('queryParameters', JSON.stringify(queryParameters)));\n }\n\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n if (aggregationExp) {\n parameters.push(encodeParameter('aggregationExp', aggregationExp));\n } else if (isSpatialIndexGeoColumn(geoColumn)) {\n // Default aggregationExp required for spatial index layers\n parameters.push(encodeParameter('aggregationExp', '1 AS value'));\n }\n if (aggregationResLevel) {\n parameters.push(encodeParameter('aggregationResLevel', aggregationResLevel));\n }\n\n return parameters.join('&');\n}\n\nfunction isSpatialIndexGeoColumn(geoColumn: string | undefined) {\n const spatialIndex = geoColumn?.split(':')[0];\n return spatialIndex === 'h3' || spatialIndex === 'quadbin';\n}\n\nexport async function mapInstantiation({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<MapInstantiation> {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationResLevel,\n aggregationExp,\n queryParameters\n })}`;\n const {accessToken} = credentials;\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: clientId || DEFAULT_CLIENT,\n queryParameters\n });\n return await requestJson({method: 'POST', url: baseUrl, headers, accessToken, body});\n }\n\n return await requestJson({url, headers, accessToken});\n}\n\nfunction getUrlFromMetadata(metadata: MapInstantiation, format: Format): string | null {\n const m = metadata[format];\n\n if (m && !m.error && m.url) {\n return m.url[0];\n }\n\n return null;\n}\n\nfunction checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n}: FetchLayerDataParams) {\n assert(connection, 'Must define connection');\n assert(type, 'Must define a type');\n assert(source, 'Must define a source');\n\n assert(credentials.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(credentials.apiBaseUrl, 'Must define apiBaseUrl');\n assert(credentials.accessToken, 'Must define an accessToken');\n\n if (columns) {\n assert(\n COLUMNS_SUPPORT.includes(type),\n `The columns parameter is not supported by type ${type}`\n );\n }\n if (geoColumn) {\n assert(\n GEO_COLUMN_SUPPORT.includes(type),\n `The geoColumn parameter is not supported by type ${type}`\n );\n } else {\n assert(!aggregationExp, 'Have aggregationExp, but geoColumn parameter is missing');\n assert(!aggregationResLevel, 'Have aggregationResLevel, but geoColumn parameter is missing');\n }\n}\n\nexport interface FetchLayerDataResult {\n data: any;\n format?: Format;\n schema: SchemaField[];\n}\nexport async function fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<FetchLayerDataResult> {\n // Internally we split data fetching into two parts to allow us to\n // conditionally fetch the actual data, depending on the metadata state\n const {url, accessToken, mapFormat, metadata} = await _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n\n const data = await requestData({url, format: mapFormat, accessToken});\n const result: FetchLayerDataResult = {data, format: mapFormat, schema: metadata.schema};\n return result;\n}\n\nasync function _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams) {\n const defaultCredentials = getDefaultCredentials();\n // Only pick up default credentials if they have been defined for\n // correct API version\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n };\n checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n });\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n clientId,\n headers,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n let url: string | null = null;\n let mapFormat: Format | undefined;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.JSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n assert(url && mapFormat, 'Unsupported data formats received from backend.');\n }\n\n if (format === FORMATS.TILEJSON && formatTiles) {\n log.assert(\n Object.values(TILE_FORMATS).includes(formatTiles),\n `Invalid value for formatTiles: ${formatTiles}. Use value from TILE_FORMATS`\n );\n url += `&${encodeParameter('formatTiles', formatTiles)}`;\n }\n\n const {accessToken} = localCreds;\n return {url, accessToken, mapFormat, metadata};\n}\n\n/* global clearInterval, setInterval, URL */\nasync function _fetchMapDataset(\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials,\n clientId?: string,\n headers?: Headers\n) {\n const {\n aggregationExp,\n aggregationResLevel,\n connectionName: connection,\n columns,\n format,\n geoColumn,\n source,\n type,\n queryParameters\n } = dataset;\n // First fetch metadata\n const {url, mapFormat} = await _fetchDataUrl({\n aggregationExp,\n aggregationResLevel,\n clientId,\n credentials: {...credentials, accessToken},\n connection,\n columns,\n format,\n geoColumn,\n headers,\n source,\n type,\n queryParameters\n });\n\n // Extract the last time the data changed\n const cache = parseInt(new URL(url).searchParams.get('cache') || '', 10);\n if (cache && dataset.cache === cache) {\n return false;\n }\n dataset.cache = cache;\n\n // Only fetch if the data has changed\n dataset.data = await requestData({url, format: mapFormat, accessToken});\n\n return true;\n}\n\nasync function _fetchTilestats(\n attribute,\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials\n) {\n const {connectionName: connection, source, type} = dataset;\n\n const statsUrl = buildStatsUrlFromBase(credentials.apiBaseUrl);\n let url = `${statsUrl}/${connection}/`;\n if (type === MAP_TYPES.QUERY) {\n url += `${attribute}?${encodeParameter('q', source)}`;\n } else {\n // MAP_TYPE.TABLE\n url += `${source}/${attribute}`;\n }\n const stats = await requestData({url, format: FORMATS.JSON, accessToken});\n\n // Replace tilestats for attribute with value from API\n const {attributes} = dataset.data.tilestats.layers[0];\n const index = attributes.findIndex(d => d.attribute === attribute);\n attributes[index] = stats;\n return true;\n}\n\nasync function fillInMapDatasets(\n {datasets, token},\n clientId: string,\n credentials: CloudNativeCredentials,\n headers?: Headers\n) {\n const promises = datasets.map(dataset =>\n _fetchMapDataset(dataset, token, credentials, clientId, headers)\n );\n return await Promise.all(promises);\n}\n\nasync function fillInTileStats(\n {datasets, keplerMapConfig, token},\n credentials: CloudNativeCredentials\n) {\n const attributes: {attribute?: string; dataset?: any}[] = [];\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.data.tilestats && dataset.type !== MAP_TYPES.TILESET) {\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: {attribute?: string; dataset?: any}[] = [];\n for (const a of attributes) {\n if (\n !filteredAttributes.find(\n ({attribute, dataset}) => attribute === a.attribute && dataset === a.dataset\n )\n ) {\n filteredAttributes.push(a);\n }\n }\n\n const promises = filteredAttributes.map(({attribute, dataset}) =>\n _fetchTilestats(attribute, dataset, token, credentials)\n );\n return await Promise.all(promises);\n}\n\nexport async function fetchMap({\n cartoMapId,\n clientId,\n credentials,\n headers,\n autoRefresh,\n onNewData\n}: {\n cartoMapId: string;\n clientId: string;\n credentials?: CloudNativeCredentials;\n headers?: Headers;\n autoRefresh?: number;\n onNewData?: (map: any) => void;\n}) {\n const defaultCredentials = getDefaultCredentials();\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n } as CloudNativeCredentials;\n const {accessToken} = localCreds;\n\n assert(cartoMapId, 'Must define CARTO map id: fetchMap({cartoMapId: \"XXXX-XXXX-XXXX\"})');\n\n assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\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(\n typeof autoRefresh === 'number' && autoRefresh > 0,\n '`autoRefresh` must be a positive number'\n );\n }\n\n const url = `${localCreds.mapsUrl}/public/${cartoMapId}`;\n const map = await requestJson<any>({url, headers, accessToken});\n\n // Periodically check if the data has changed. Note that this\n // will not update when a map is published.\n let stopAutoRefresh: (() => void) | undefined;\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, localCreds, headers);\n if (onNewData && changed.some(v => v === true)) {\n onNewData(parseMap(map));\n }\n }, autoRefresh * 1000);\n stopAutoRefresh = () => {\n clearInterval(intervalId);\n };\n }\n\n const geojsonLayers = map.keplerMapConfig.config.visState.layers.filter(\n ({type}) => type === 'geojson' || type === 'point'\n );\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 dataset.geoColumn = config.columns.geojson;\n }\n });\n\n // Mutates map.datasets so that dataset.data contains data\n await fillInMapDatasets(map, clientId, localCreds, headers);\n\n // Mutates attributes in visualChannels to contain tile stats\n await fillInTileStats(map, localCreds);\n return {\n ...parseMap(map),\n ...{stopAutoRefresh}\n };\n}\n"],"file":"maps-v3-client.js"}
@@ -9,6 +9,9 @@ function isFeatureIdDefined(value) {
9
9
  return value !== undefined && value !== null && value !== '';
10
10
  }
11
11
 
12
+ const defaultProps = {
13
+ aggregationResLevel: 4
14
+ };
12
15
  export default class SpatialIndexTileLayer extends TileLayer {
13
16
  getTileData(tile) {
14
17
  const {
@@ -48,6 +51,21 @@ export default class SpatialIndexTileLayer extends TileLayer {
48
51
  });
49
52
  }
50
53
 
54
+ updateState(params) {
55
+ const {
56
+ props,
57
+ oldProps
58
+ } = params;
59
+
60
+ if (props.aggregationResLevel !== oldProps.aggregationResLevel) {
61
+ this.setState({
62
+ tileset: null
63
+ });
64
+ }
65
+
66
+ super.updateState(params);
67
+ }
68
+
51
69
  _updateAutoHighlight(info) {
52
70
  const {
53
71
  hoveredFeatureId
@@ -99,4 +117,6 @@ export default class SpatialIndexTileLayer extends TileLayer {
99
117
  }
100
118
 
101
119
  _defineProperty(SpatialIndexTileLayer, "layerName", 'SpatialIndexTileLayer');
120
+
121
+ _defineProperty(SpatialIndexTileLayer, "defaultProps", defaultProps);
102
122
  //# sourceMappingURL=spatial-index-tile-layer.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layers/spatial-index-tile-layer.ts"],"names":["registerLoaders","CartoSpatialTileLoader","TileLayer","_getURLFromTemplate","TILE_FORMATS","isFeatureIdDefined","value","undefined","SpatialIndexTileLayer","getTileData","tile","data","fetch","props","signal","url","Array","isArray","Promise","reject","loadOptions","getLoadOptions","formatTiles","BINARY","mimeType","propName","layer","_updateAutoHighlight","info","hoveredFeatureId","state","hoveredFeature","object","newHoveredFeatureId","id","highlightColor","setState","getSubLayerPropsByTile","highlightedObjectIndex","getHighlightedObjectIndex","content","isFeatureIdPresent","findIndex","feature"],"mappings":"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","sourcesContent":["import {registerLoaders} from '@loaders.gl/core';\nimport CartoSpatialTileLoader from './schema/carto-spatial-tile-loader';\nregisterLoaders([CartoSpatialTileLoader]);\n\nimport {PickingInfo} from '@deck.gl/core';\nimport {\n TileLayer,\n _getURLFromTemplate,\n _Tile2DHeader as Tile2DHeader,\n _TileLoadProps as TileLoadProps\n} from '@deck.gl/geo-layers';\nimport {TILE_FORMATS} from '../api/maps-api-common';\n\nfunction isFeatureIdDefined(value: unknown): boolean {\n return value !== undefined && value !== null && value !== '';\n}\n\nexport default class SpatialIndexTileLayer<ExtraProps = {}> extends TileLayer<any, ExtraProps> {\n static layerName = 'SpatialIndexTileLayer';\n\n getTileData(tile: TileLoadProps) {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url =\n typeof data === 'string' || Array.isArray(data) ? _getURLFromTemplate(data, tile) : null;\n if (!tile.url) {\n return Promise.reject('Invalid URL');\n }\n\n if (getTileData) {\n return getTileData(tile);\n }\n\n let loadOptions = this.getLoadOptions();\n // @ts-ignore\n const {formatTiles} = this.props;\n\n // The backend doesn't yet support our custom mime-type, so force it here\n // TODO remove entire `getTileData` method once backend sends the correct mime-type\n if (formatTiles === TILE_FORMATS.BINARY) {\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/vnd.carto-spatial-tile'\n };\n }\n\n return fetch(tile.url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const {hoveredFeatureId} = this.state;\n const hoveredFeature = info.object;\n let newHoveredFeatureId;\n\n if (hoveredFeature) {\n newHoveredFeatureId = hoveredFeature.id;\n }\n\n if (hoveredFeatureId !== newHoveredFeatureId) {\n let {highlightColor} = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n\n this.setState({\n highlightColor,\n hoveredFeatureId: newHoveredFeatureId\n });\n }\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader) {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n\n getHighlightedObjectIndex(tile: Tile2DHeader) {\n const {hoveredFeatureId} = this.state;\n const data = tile.content;\n\n const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId);\n if (!isFeatureIdPresent || !Array.isArray(data)) {\n return -1;\n }\n\n return data.findIndex(feature => feature.id === hoveredFeatureId);\n }\n}\n"],"file":"spatial-index-tile-layer.js"}
1
+ {"version":3,"sources":["../../../src/layers/spatial-index-tile-layer.ts"],"names":["registerLoaders","CartoSpatialTileLoader","TileLayer","_getURLFromTemplate","TILE_FORMATS","isFeatureIdDefined","value","undefined","defaultProps","aggregationResLevel","SpatialIndexTileLayer","getTileData","tile","data","fetch","props","signal","url","Array","isArray","Promise","reject","loadOptions","getLoadOptions","formatTiles","BINARY","mimeType","propName","layer","updateState","params","oldProps","setState","tileset","_updateAutoHighlight","info","hoveredFeatureId","state","hoveredFeature","object","newHoveredFeatureId","id","highlightColor","getSubLayerPropsByTile","highlightedObjectIndex","getHighlightedObjectIndex","content","isFeatureIdPresent","findIndex","feature"],"mappings":"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","sourcesContent":["import {registerLoaders} from '@loaders.gl/core';\nimport {DefaultProps, UpdateParameters} from '@deck.gl/core';\nimport CartoSpatialTileLoader from './schema/carto-spatial-tile-loader';\nregisterLoaders([CartoSpatialTileLoader]);\n\nimport {PickingInfo} from '@deck.gl/core';\nimport {\n TileLayer,\n TileLayerProps,\n _getURLFromTemplate,\n _Tile2DHeader as Tile2DHeader,\n _TileLoadProps as TileLoadProps\n} from '@deck.gl/geo-layers';\nimport {TILE_FORMATS} from '../api/maps-api-common';\n\nfunction isFeatureIdDefined(value: unknown): boolean {\n return value !== undefined && value !== null && value !== '';\n}\n\nconst defaultProps: DefaultProps<SpatialIndexTileLayerProps> = {\n aggregationResLevel: 4\n};\n\n/** All properties supported by SpatialIndexTileLayer. */\nexport type SpatialIndexTileLayerProps<DataT = any> = _SpatialIndexTileLayerProps<DataT> &\n TileLayer<DataT>;\n\n/** Properties added by SpatialIndexTileLayer. */\ntype _SpatialIndexTileLayerProps<DataT> = {\n aggregationResLevel?: number;\n};\n\nexport default class SpatialIndexTileLayer<DataT = any, ExtraProps = {}> extends TileLayer<\n DataT,\n ExtraProps & Required<_SpatialIndexTileLayerProps<DataT>>\n> {\n static layerName = 'SpatialIndexTileLayer';\n static defaultProps = defaultProps;\n\n getTileData(tile: TileLoadProps) {\n const {data, getTileData, fetch} = this.props;\n const {signal} = tile;\n\n tile.url =\n typeof data === 'string' || Array.isArray(data) ? _getURLFromTemplate(data, tile) : null;\n if (!tile.url) {\n return Promise.reject('Invalid URL');\n }\n\n if (getTileData) {\n return getTileData(tile);\n }\n\n let loadOptions = this.getLoadOptions();\n // @ts-ignore\n const {formatTiles} = this.props;\n\n // The backend doesn't yet support our custom mime-type, so force it here\n // TODO remove entire `getTileData` method once backend sends the correct mime-type\n if (formatTiles === TILE_FORMATS.BINARY) {\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/vnd.carto-spatial-tile'\n };\n }\n\n return fetch(tile.url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n updateState(params: UpdateParameters<this>) {\n const {props, oldProps} = params;\n if (props.aggregationResLevel !== oldProps.aggregationResLevel) {\n // Tileset cache is invalid when resLevel changes\n this.setState({tileset: null});\n }\n super.updateState(params);\n }\n\n protected _updateAutoHighlight(info: PickingInfo): void {\n const {hoveredFeatureId} = this.state;\n const hoveredFeature = info.object;\n let newHoveredFeatureId;\n\n if (hoveredFeature) {\n newHoveredFeatureId = hoveredFeature.id;\n }\n\n if (hoveredFeatureId !== newHoveredFeatureId) {\n let {highlightColor} = this.props;\n if (typeof highlightColor === 'function') {\n highlightColor = highlightColor(info);\n }\n\n this.setState({\n highlightColor,\n hoveredFeatureId: newHoveredFeatureId\n });\n }\n }\n\n getSubLayerPropsByTile(tile: Tile2DHeader) {\n return {\n highlightedObjectIndex: this.getHighlightedObjectIndex(tile),\n highlightColor: this.state.highlightColor\n };\n }\n\n getHighlightedObjectIndex(tile: Tile2DHeader) {\n const {hoveredFeatureId} = this.state;\n const data = tile.content;\n\n const isFeatureIdPresent = isFeatureIdDefined(hoveredFeatureId);\n if (!isFeatureIdPresent || !Array.isArray(data)) {\n return -1;\n }\n\n return data.findIndex(feature => feature.id === hoveredFeatureId);\n }\n}\n"],"file":"spatial-index-tile-layer.js"}