@deck.gl/carto 8.7.0-beta.2 → 8.7.0-beta.6
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/dist.dev.js +1425 -306
- package/dist/es5/api/index.js +6 -0
- package/dist/es5/api/index.js.map +1 -1
- package/dist/es5/api/layer-map.js +32 -17
- package/dist/es5/api/layer-map.js.map +1 -1
- package/dist/es5/api/maps-api-common.js +21 -1
- package/dist/es5/api/maps-api-common.js.map +1 -1
- package/dist/es5/api/maps-client.js +15 -18
- package/dist/es5/api/maps-client.js.map +1 -1
- package/dist/es5/api/maps-v3-client.js +241 -181
- package/dist/es5/api/maps-v3-client.js.map +1 -1
- package/dist/es5/api/parseMap.js +9 -12
- package/dist/es5/api/parseMap.js.map +1 -1
- package/dist/es5/basemap.js +7 -7
- package/dist/es5/basemap.js.map +1 -1
- package/dist/es5/config.js.map +1 -1
- package/dist/es5/index.js +15 -1
- package/dist/es5/index.js.map +1 -1
- package/dist/es5/layers/carto-layer.js +27 -16
- package/dist/es5/layers/carto-layer.js.map +1 -1
- package/dist/es5/layers/{carto-dynamic-tile-layer.js → carto-tile-layer.js} +79 -32
- package/dist/es5/layers/carto-tile-layer.js.map +1 -0
- package/dist/es5/layers/schema/carto-tile.js +197 -0
- package/dist/es5/layers/schema/carto-tile.js.map +1 -0
- package/dist/es5/style/color-bins-style.js +1 -1
- package/dist/es5/style/color-bins-style.js.map +1 -1
- package/dist/es5/style/color-categories-style.js +1 -1
- package/dist/es5/style/color-categories-style.js.map +1 -1
- package/dist/es5/style/color-continuous-style.js +1 -1
- package/dist/es5/style/color-continuous-style.js.map +1 -1
- package/dist/es5/style/palette.js +1 -6
- package/dist/es5/style/palette.js.map +1 -1
- package/dist/es5/style/utils.js +2 -6
- package/dist/es5/style/utils.js.map +1 -1
- package/dist/es5/utils.js +13 -0
- package/dist/es5/utils.js.map +1 -0
- package/dist/esm/api/index.js +1 -1
- package/dist/esm/api/index.js.map +1 -1
- package/dist/esm/api/layer-map.js +28 -12
- package/dist/esm/api/layer-map.js.map +1 -1
- package/dist/esm/api/maps-api-common.js +19 -0
- package/dist/esm/api/maps-api-common.js.map +1 -1
- package/dist/esm/api/maps-client.js +6 -10
- package/dist/esm/api/maps-client.js.map +1 -1
- package/dist/esm/api/maps-v3-client.js +73 -38
- package/dist/esm/api/maps-v3-client.js.map +1 -1
- package/dist/esm/api/parseMap.js +9 -8
- package/dist/esm/api/parseMap.js.map +1 -1
- package/dist/esm/basemap.js +7 -7
- package/dist/esm/basemap.js.map +1 -1
- package/dist/esm/config.js.map +1 -1
- package/dist/esm/index.js +3 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/layers/carto-layer.js +25 -13
- package/dist/esm/layers/carto-layer.js.map +1 -1
- package/dist/esm/layers/carto-tile-layer.js +141 -0
- package/dist/esm/layers/carto-tile-layer.js.map +1 -0
- package/dist/esm/layers/schema/carto-tile.js +190 -0
- package/dist/esm/layers/schema/carto-tile.js.map +1 -0
- package/dist/esm/style/color-bins-style.js +1 -1
- package/dist/esm/style/color-bins-style.js.map +1 -1
- package/dist/esm/style/color-categories-style.js +1 -1
- package/dist/esm/style/color-categories-style.js.map +1 -1
- package/dist/esm/style/color-continuous-style.js +1 -1
- package/dist/esm/style/color-continuous-style.js.map +1 -1
- package/dist/esm/style/palette.js +1 -6
- package/dist/esm/style/palette.js.map +1 -1
- package/dist/esm/style/utils.js +2 -6
- package/dist/esm/style/utils.js.map +1 -1
- package/dist/esm/utils.js +5 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist.min.js +14 -14
- package/package.json +10 -3
- package/src/api/{index.js → index.ts} +1 -1
- package/src/api/{layer-map.js → layer-map.ts} +50 -23
- package/src/api/maps-api-common.ts +76 -0
- package/src/api/{maps-client.js → maps-client.ts} +55 -20
- package/src/api/{maps-v3-client.js → maps-v3-client.ts} +145 -57
- package/src/api/{parseMap.js → parseMap.ts} +8 -7
- package/src/basemap.ts +10 -0
- package/src/{config.js → config.ts} +22 -6
- package/src/{index.js → index.ts} +3 -1
- package/src/layers/carto-layer.js +30 -19
- package/src/layers/carto-tile-layer.js +121 -0
- package/src/layers/schema/carto-tile.js +195 -0
- package/src/style/color-bins-style.ts +26 -0
- package/src/style/{color-categories-style.js → color-categories-style.ts} +10 -4
- package/src/style/color-continuous-style.ts +25 -0
- package/src/style/{palette.js → palette.ts} +18 -15
- package/src/style/{utils.js → utils.ts} +7 -10
- package/src/utils.ts +5 -0
- package/dist/es5/layers/carto-dynamic-tile-layer.js.map +0 -1
- package/dist/esm/layers/carto-dynamic-tile-layer.js +0 -97
- package/dist/esm/layers/carto-dynamic-tile-layer.js.map +0 -1
- package/src/api/maps-api-common.js +0 -34
- package/src/basemap.js +0 -10
- package/src/layers/carto-dynamic-tile-layer.js +0 -86
- package/src/style/color-bins-style.js +0 -21
- package/src/style/color-continuous-style.js +0 -20
|
@@ -3,9 +3,11 @@ import { rgb } from 'd3-color';
|
|
|
3
3
|
import { scaleLinear, scaleOrdinal, scaleLog, scalePoint, scaleQuantile, scaleQuantize, scaleSqrt } from 'd3-scale';
|
|
4
4
|
import { format as d3Format } from 'd3-format';
|
|
5
5
|
import moment from 'moment-timezone';
|
|
6
|
-
import { log } from '@deck.gl/core';
|
|
7
6
|
import { H3HexagonLayer, MVTLayer } from '@deck.gl/geo-layers';
|
|
8
7
|
import { GeoJsonLayer } from '@deck.gl/layers';
|
|
8
|
+
import CartoTileLayer from '../layers/carto-tile-layer';
|
|
9
|
+
import { TILE_FORMATS } from './maps-api-common';
|
|
10
|
+
import { assert } from '../utils';
|
|
9
11
|
const SCALE_FUNCS = {
|
|
10
12
|
linear: scaleLinear,
|
|
11
13
|
ordinal: scaleOrdinal,
|
|
@@ -55,9 +57,13 @@ function mergePropMaps(a, b) {
|
|
|
55
57
|
};
|
|
56
58
|
}
|
|
57
59
|
|
|
58
|
-
export function getLayer(type, config) {
|
|
60
|
+
export function getLayer(type, config, dataset) {
|
|
59
61
|
var _config$columns;
|
|
60
62
|
|
|
63
|
+
if (type === 'mvt' || type === 'tileset') {
|
|
64
|
+
return getTileLayer(dataset);
|
|
65
|
+
}
|
|
66
|
+
|
|
61
67
|
const hexagonId = (_config$columns = config.columns) === null || _config$columns === void 0 ? void 0 : _config$columns.hex_id;
|
|
62
68
|
const layer = {
|
|
63
69
|
point: {
|
|
@@ -87,21 +93,31 @@ export function getLayer(type, config) {
|
|
|
87
93
|
defaultProps: { ...defaultProps,
|
|
88
94
|
getHexagon: d => d[hexagonId]
|
|
89
95
|
}
|
|
90
|
-
},
|
|
91
|
-
mvt: {
|
|
92
|
-
Layer: MVTLayer,
|
|
93
|
-
propMap: sharedPropMap,
|
|
94
|
-
defaultProps: { ...defaultProps,
|
|
95
|
-
pointRadiusScale: 0.3,
|
|
96
|
-
lineWidthScale: 2,
|
|
97
|
-
uniqueIdProperty: 'geoid'
|
|
98
|
-
}
|
|
99
96
|
}
|
|
100
97
|
}[type];
|
|
101
|
-
|
|
98
|
+
assert(layer, "Unsupported layer type: ".concat(type));
|
|
102
99
|
return layer;
|
|
103
100
|
}
|
|
104
101
|
|
|
102
|
+
function getTileLayer(dataset) {
|
|
103
|
+
const {
|
|
104
|
+
data: {
|
|
105
|
+
tiles: [tileUrl]
|
|
106
|
+
}
|
|
107
|
+
} = dataset;
|
|
108
|
+
const formatTiles = new URL(tileUrl).searchParams.get('formatTiles') || TILE_FORMATS.MVT;
|
|
109
|
+
return {
|
|
110
|
+
Layer: formatTiles === TILE_FORMATS.MVT ? MVTLayer : CartoTileLayer,
|
|
111
|
+
propMap: sharedPropMap,
|
|
112
|
+
defaultProps: { ...defaultProps,
|
|
113
|
+
pointRadiusScale: 0.3,
|
|
114
|
+
lineWidthScale: 2,
|
|
115
|
+
uniqueIdProperty: 'geoid',
|
|
116
|
+
formatTiles
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
|
|
105
121
|
function domainFromAttribute(attribute, scaleType) {
|
|
106
122
|
if (scaleType === 'ordinal' || scaleType === 'point') {
|
|
107
123
|
return attribute.categories.map(c => c.category).filter(c => c !== undefined && c !== null);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/api/layer-map.js"],"names":["extent","rgb","scaleLinear","scaleOrdinal","scaleLog","scalePoint","scaleQuantile","scaleQuantize","scaleSqrt","format","d3Format","moment","log","H3HexagonLayer","MVTLayer","GeoJsonLayer","SCALE_FUNCS","linear","ordinal","point","quantile","quantize","sqrt","sharedPropMap","color","isVisible","label","textLabel","alignment","anchor","size","visConfig","enable3d","filled","opacity","strokeColor","stroked","thickness","radius","wireframe","RADIUS_DOWNSCALE","defaultProps","lineMiterLimit","lineWidthUnits","pointRadiusScale","pointRadiusUnits","rounded","wrapLongitude","mergePropMaps","a","b","getLayer","type","config","hexagonId","columns","hex_id","layer","Layer","propMap","outline","geojson","lineWidthScale","coverage","elevationScale","getHexagon","d","mvt","uniqueIdProperty","assert","domainFromAttribute","attribute","scaleType","categories","map","c","category","filter","undefined","min","max","domainFromValues","values","Set","sort","d0","d1","calculateDomain","data","name","tilestats","attributes","layers","find","features","properties","Array","isArray","normalizeAccessor","accessor","getColorAccessor","colors","scale","domain","range","alpha","Math","round","pow","rgba","r","g","getSizeAccessor","FORMATS","date","s","utc","integer","float","timestamp","default","String","getTextAccessor","getTextPixelOffsetAccessor","padding","signX","signY","sizeOffset","calculateOffset","_domainFromValues"],"mappings":"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","sourcesContent":["import {extent} from 'd3-array';\nimport {rgb} from 'd3-color';\nimport {\n scaleLinear,\n scaleOrdinal,\n scaleLog,\n scalePoint,\n scaleQuantile,\n scaleQuantize,\n scaleSqrt\n} from 'd3-scale';\nimport {format as d3Format} from 'd3-format';\nimport moment from 'moment-timezone';\nimport {log} from '@deck.gl/core';\nimport {H3HexagonLayer, MVTLayer} from '@deck.gl/geo-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\n\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};\n\n// Kepler -> Deck.gl\nconst sharedPropMap = {\n color: 'getFillColor',\n isVisible: 'visible',\n label: 'cartoLabel',\n textLabel: {\n alignment: 'getTextAlignmentBaseline',\n anchor: 'getTextAnchor',\n color: 'getTextColor',\n size: 'getTextSize'\n },\n visConfig: {\n enable3d: 'extruded',\n filled: 'filled',\n opacity: 'opacity',\n strokeColor: 'getLineColor',\n stroked: 'stroked',\n thickness: 'getLineWidth',\n radius: 'getPointRadius',\n wireframe: 'wireframe'\n }\n};\n\nconst RADIUS_DOWNSCALE = 0.2;\n\nconst defaultProps = {\n lineMiterLimit: 2,\n lineWidthUnits: 'pixels',\n pointRadiusScale: RADIUS_DOWNSCALE,\n pointRadiusUnits: 'pixels',\n rounded: true,\n wrapLongitude: false\n};\n\nfunction mergePropMaps(a, b) {\n return {...a, ...b, visConfig: {...a.visConfig, ...b.visConfig}};\n}\n\nexport function getLayer(type, config) {\n const hexagonId = config.columns?.hex_id;\n\n const layer = {\n point: {\n Layer: GeoJsonLayer,\n propMap: mergePropMaps(sharedPropMap, {\n visConfig: {outline: 'stroked'}\n }),\n defaultProps\n },\n geojson: {\n Layer: GeoJsonLayer,\n propMap: sharedPropMap,\n defaultProps: {...defaultProps, lineWidthScale: 2}\n },\n hexagonId: {\n Layer: H3HexagonLayer,\n propMap: mergePropMaps(sharedPropMap, {\n visConfig: {coverage: 'coverage', elevationScale: 'elevationScale'}\n }),\n defaultProps: {...defaultProps, getHexagon: d => d[hexagonId]}\n },\n mvt: {\n Layer: MVTLayer,\n propMap: sharedPropMap,\n defaultProps: {\n ...defaultProps,\n pointRadiusScale: 0.3,\n lineWidthScale: 2,\n uniqueIdProperty: 'geoid'\n }\n }\n }[type];\n\n log.assert(layer, `Unsupported layer type: ${type}`);\n\n return layer;\n}\n\nfunction domainFromAttribute(attribute, scaleType) {\n if (scaleType === 'ordinal' || scaleType === 'point') {\n return attribute.categories.map(c => c.category).filter(c => c !== undefined && c !== null);\n }\n\n let {min} = attribute;\n if (scaleType === 'log' && min === 0) {\n min = 1e-5;\n }\n return [min, attribute.max];\n}\n\nfunction domainFromValues(values, scaleType) {\n if (scaleType === 'ordinal') {\n return [...new Set(values)].sort();\n } else if (scaleType === 'quantile') {\n return values.sort((a, b) => a - b);\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}\n\nfunction calculateDomain(data, name, scaleType) {\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);\n } else if (data.features) {\n // GeoJSON data type\n const values = data.features.map(({properties}) => properties[name]);\n return domainFromValues(values, scaleType);\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\n return [0, 1];\n}\n\nfunction normalizeAccessor(accessor, data) {\n if (data.features || data.tilestats) {\n return ({properties}) => {\n return accessor(properties);\n };\n }\n return accessor;\n}\n\nexport function getColorAccessor({name}, scaleType, {colors}, opacity, data) {\n const scale = SCALE_FUNCS[scaleType]();\n scale.domain(calculateDomain(data, name, scaleType));\n scale.range(colors);\n const alpha = opacity !== undefined ? Math.round(255 * Math.pow(opacity, 1 / 2.2)) : 255;\n\n const accessor = properties => {\n const rgba = rgb(scale(properties[name]));\n return [rgba.r, rgba.g, rgba.b, alpha];\n };\n return normalizeAccessor(accessor, data);\n}\n\nexport function getSizeAccessor({name}, scaleType, range, data) {\n const scale = SCALE_FUNCS[scaleType]();\n scale.domain(calculateDomain(data, name, scaleType));\n scale.range(range);\n\n const accessor = properties => {\n return scale(properties[name]);\n };\n return normalizeAccessor(accessor, data);\n}\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};\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}\n\nexport function getTextPixelOffsetAccessor({alignment, anchor, size}, radius) {\n const padding = 20;\n const signX = anchor === 'middle' ? 0 : anchor === 'start' ? 1 : -1;\n const signY = alignment === 'center' ? 0 : alignment === 'bottom' ? 1 : -1;\n const sizeOffset = alignment === 'center' ? 0 : size;\n\n const calculateOffset = r => {\n r = RADIUS_DOWNSCALE * r;\n return [signX * (r + padding), signY * (r + padding + sizeOffset)];\n };\n\n return typeof radius === 'function'\n ? d => {\n return calculateOffset(radius(d));\n }\n : calculateOffset(radius);\n}\n\nexport {domainFromValues as _domainFromValues};\n"],"file":"layer-map.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/api/layer-map.ts"],"names":["extent","rgb","scaleLinear","scaleOrdinal","scaleLog","scalePoint","scaleQuantile","scaleQuantize","scaleSqrt","format","d3Format","moment","H3HexagonLayer","MVTLayer","GeoJsonLayer","CartoTileLayer","TILE_FORMATS","assert","SCALE_FUNCS","linear","ordinal","log","point","quantile","quantize","sqrt","sharedPropMap","color","isVisible","label","textLabel","alignment","anchor","size","visConfig","enable3d","filled","opacity","strokeColor","stroked","thickness","radius","wireframe","RADIUS_DOWNSCALE","defaultProps","lineMiterLimit","lineWidthUnits","pointRadiusScale","pointRadiusUnits","rounded","wrapLongitude","mergePropMaps","a","b","getLayer","type","config","dataset","getTileLayer","hexagonId","columns","hex_id","layer","Layer","propMap","outline","geojson","lineWidthScale","coverage","elevationScale","getHexagon","d","data","tiles","tileUrl","formatTiles","URL","searchParams","get","MVT","uniqueIdProperty","domainFromAttribute","attribute","scaleType","categories","map","c","category","filter","undefined","min","max","domainFromValues","values","Set","sort","d0","d1","calculateDomain","name","tilestats","attributes","layers","find","features","properties","Array","isArray","normalizeAccessor","accessor","getColorAccessor","colors","scale","domain","range","alpha","Math","round","pow","rgba","r","g","getSizeAccessor","FORMATS","date","s","utc","integer","float","timestamp","default","String","getTextAccessor","getTextPixelOffsetAccessor","padding","signX","signY","sizeOffset","calculateOffset","_domainFromValues"],"mappings":"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","sourcesContent":["import {extent} from 'd3-array';\nimport {rgb} from 'd3-color';\nimport {\n scaleLinear,\n scaleOrdinal,\n scaleLog,\n scalePoint,\n scaleQuantile,\n scaleQuantize,\n scaleSqrt\n} from 'd3-scale';\nimport {format as d3Format} from 'd3-format';\nimport moment from 'moment-timezone';\nimport {H3HexagonLayer, MVTLayer} from '@deck.gl/geo-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport CartoTileLayer from '../layers/carto-tile-layer';\nimport {TILE_FORMATS} from './maps-api-common';\nimport {assert} from '../utils';\n\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};\nexport type SCALE_TYPE = keyof typeof SCALE_FUNCS;\n\n// Kepler -> Deck.gl\nconst sharedPropMap = {\n color: 'getFillColor',\n isVisible: 'visible',\n label: 'cartoLabel',\n textLabel: {\n alignment: 'getTextAlignmentBaseline',\n anchor: 'getTextAnchor',\n color: 'getTextColor',\n size: 'getTextSize'\n },\n visConfig: {\n enable3d: 'extruded',\n filled: 'filled',\n opacity: 'opacity',\n strokeColor: 'getLineColor',\n stroked: 'stroked',\n thickness: 'getLineWidth',\n radius: 'getPointRadius',\n wireframe: 'wireframe'\n }\n};\n\nconst RADIUS_DOWNSCALE = 0.2;\n\nconst defaultProps = {\n lineMiterLimit: 2,\n lineWidthUnits: 'pixels',\n pointRadiusScale: RADIUS_DOWNSCALE,\n pointRadiusUnits: 'pixels',\n rounded: true,\n wrapLongitude: false\n};\n\nfunction mergePropMaps(a, b) {\n return {...a, ...b, visConfig: {...a.visConfig, ...b.visConfig}};\n}\n\nexport function getLayer(\n type: string,\n config,\n dataset\n): {Layer: any; propMap: any; defaultProps: any} {\n if (type === 'mvt' || type === 'tileset') {\n return getTileLayer(dataset);\n }\n\n const hexagonId = config.columns?.hex_id;\n const layer = {\n point: {\n Layer: GeoJsonLayer,\n propMap: mergePropMaps(sharedPropMap, {\n visConfig: {outline: 'stroked'}\n }),\n defaultProps\n },\n geojson: {\n Layer: GeoJsonLayer,\n propMap: sharedPropMap,\n defaultProps: {...defaultProps, lineWidthScale: 2}\n },\n hexagonId: {\n Layer: H3HexagonLayer,\n propMap: mergePropMaps(sharedPropMap, {\n visConfig: {coverage: 'coverage', elevationScale: 'elevationScale'}\n }),\n defaultProps: {...defaultProps, getHexagon: d => d[hexagonId]}\n }\n }[type];\n\n assert(layer, `Unsupported layer type: ${type}`);\n return layer;\n}\n\nfunction getTileLayer(dataset) {\n const {\n data: {\n tiles: [tileUrl]\n }\n } = dataset;\n /* global URL */\n const formatTiles = new URL(tileUrl).searchParams.get('formatTiles') || TILE_FORMATS.MVT;\n\n return {\n Layer: formatTiles === TILE_FORMATS.MVT ? MVTLayer : CartoTileLayer,\n propMap: sharedPropMap,\n defaultProps: {\n ...defaultProps,\n pointRadiusScale: 0.3,\n lineWidthScale: 2,\n uniqueIdProperty: 'geoid',\n formatTiles\n }\n };\n}\n\nfunction domainFromAttribute(attribute, scaleType: SCALE_TYPE) {\n if (scaleType === 'ordinal' || scaleType === 'point') {\n return attribute.categories.map(c => c.category).filter(c => c !== undefined && c !== null);\n }\n\n let {min} = attribute;\n if (scaleType === 'log' && min === 0) {\n min = 1e-5;\n }\n return [min, attribute.max];\n}\n\nfunction domainFromValues(values, scaleType: SCALE_TYPE) {\n if (scaleType === 'ordinal') {\n return [...new Set(values)].sort();\n } else if (scaleType === 'quantile') {\n return values.sort((a, b) => a - b);\n } else if (scaleType === 'log') {\n const [d0, d1] = extent(values as number[]);\n return [d0 === 0 ? 1e-5 : d0, d1];\n }\n return extent(values);\n}\n\nfunction calculateDomain(data, name, scaleType) {\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);\n } else if (data.features) {\n // GeoJSON data type\n const values = data.features.map(({properties}) => properties[name]);\n return domainFromValues(values, scaleType);\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\n return [0, 1];\n}\n\nfunction normalizeAccessor(accessor, data) {\n if (data.features || data.tilestats) {\n return ({properties}) => {\n return accessor(properties);\n };\n }\n return accessor;\n}\n\nexport function getColorAccessor(\n {name},\n scaleType: SCALE_TYPE,\n {colors},\n opacity: number | undefined,\n data: any\n) {\n const scale = SCALE_FUNCS[scaleType as any]();\n scale.domain(calculateDomain(data, name, scaleType));\n scale.range(colors);\n const alpha = opacity !== undefined ? Math.round(255 * Math.pow(opacity, 1 / 2.2)) : 255;\n\n const accessor = properties => {\n const rgba = rgb(scale(properties[name]));\n return [rgba.r, rgba.g, rgba.b, alpha];\n };\n return normalizeAccessor(accessor, data);\n}\n\nexport function getSizeAccessor({name}, scaleType: SCALE_TYPE, range: Iterable<Range>, data: any) {\n const scale = SCALE_FUNCS[scaleType as any]();\n scale.domain(calculateDomain(data, name, scaleType));\n scale.range(range);\n\n const accessor = properties => {\n return scale(properties[name]);\n };\n return normalizeAccessor(accessor, data);\n}\n\nconst FORMATS: Record<string, (value: any) => string> = {\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};\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}\n\nexport function getTextPixelOffsetAccessor({alignment, anchor, size}, radius) {\n const padding = 20;\n const signX = anchor === 'middle' ? 0 : anchor === 'start' ? 1 : -1;\n const signY = alignment === 'center' ? 0 : alignment === 'bottom' ? 1 : -1;\n const sizeOffset = alignment === 'center' ? 0 : size;\n\n const calculateOffset = r => {\n r = RADIUS_DOWNSCALE * r;\n return [signX * (r + padding), signY * (r + padding + sizeOffset)];\n };\n\n return typeof radius === 'function'\n ? d => {\n return calculateOffset(radius(d));\n }\n : calculateOffset(radius);\n}\n\nexport {domainFromValues as _domainFromValues};\n"],"file":"layer-map.js"}
|
|
@@ -20,6 +20,25 @@ export const FORMATS = {
|
|
|
20
20
|
TILEJSON: 'tilejson',
|
|
21
21
|
JSON: 'json'
|
|
22
22
|
};
|
|
23
|
+
export const TILE_FORMATS = {
|
|
24
|
+
MVT: 'mvt',
|
|
25
|
+
GEOJSON: 'geojson',
|
|
26
|
+
BINARY: 'binary'
|
|
27
|
+
};
|
|
28
|
+
export let SchemaFieldType;
|
|
29
|
+
|
|
30
|
+
(function (SchemaFieldType) {
|
|
31
|
+
SchemaFieldType["Number"] = "number";
|
|
32
|
+
SchemaFieldType["Bigint"] = "bigint";
|
|
33
|
+
SchemaFieldType["String"] = "string";
|
|
34
|
+
SchemaFieldType["Geometry"] = "geometry";
|
|
35
|
+
SchemaFieldType["Timestamp"] = "timestamp";
|
|
36
|
+
SchemaFieldType["Object"] = "object";
|
|
37
|
+
SchemaFieldType["Boolean"] = "boolean";
|
|
38
|
+
SchemaFieldType["Variant"] = "variant";
|
|
39
|
+
SchemaFieldType["Unknown"] = "unknown";
|
|
40
|
+
})(SchemaFieldType || (SchemaFieldType = {}));
|
|
41
|
+
|
|
23
42
|
export function encodeParameter(name, value) {
|
|
24
43
|
return "".concat(name, "=").concat(encodeURIComponent(value));
|
|
25
44
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/api/maps-api-common.
|
|
1
|
+
{"version":3,"sources":["../../../src/api/maps-api-common.ts"],"names":["DEFAULT_USER_COMPONENT_IN_URL","DEFAULT_REGION_COMPONENT_IN_URL","API_VERSIONS","V1","V2","V3","DEFAULT_MAPS_URL_FORMAT","MAP_TYPES","QUERY","TABLE","TILESET","FORMATS","GEOJSON","NDJSON","TILEJSON","JSON","TILE_FORMATS","MVT","BINARY","SchemaFieldType","encodeParameter","name","value","encodeURIComponent"],"mappings":"AAAA,OAAO,MAAMA,6BAA6B,GAAG,QAAtC;AACP,OAAO,MAAMC,+BAA+B,GAAG,UAAxC;AAGP,OAAO,MAAMC,YAAY,GAAG;AAC1BC,EAAAA,EAAE,EAAE,IADsB;AAE1BC,EAAAA,EAAE,EAAE,IAFsB;AAG1BC,EAAAA,EAAE,EAAE;AAHsB,CAArB;AAOP,OAAO,MAAMC,uBAAuB,GAAG;AACrC,GAACJ,YAAY,CAACC,EAAd,qBAA8BH,6BAA9B,0BADqC;AAErC,GAACE,YAAY,CAACE,EAAd,iCAA0CH,+BAA1C,6BAA4FD,6BAA5F;AAFqC,CAAhC;AAKP,OAAO,MAAMO,SAAS,GAAG;AACvBC,EAAAA,KAAK,EAAE,OADgB;AAEvBC,EAAAA,KAAK,EAAE,OAFgB;AAGvBC,EAAAA,OAAO,EAAE;AAHc,CAAlB;AAQP,OAAO,MAAMC,OAAO,GAAG;AACrBC,EAAAA,OAAO,EAAE,SADY;AAErBC,EAAAA,MAAM,EAAE,QAFa;AAGrBC,EAAAA,QAAQ,EAAE,UAHW;AAIrBC,EAAAA,IAAI,EAAE;AAJe,CAAhB;AASP,OAAO,MAAMC,YAAY,GAAG;AAC1BC,EAAAA,GAAG,EAAE,KADqB;AAE1BL,EAAAA,OAAO,EAAE,SAFiB;AAG1BM,EAAAA,MAAM,EAAE;AAHkB,CAArB;AAOP,WAAYC,eAAZ;;WAAYA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;AAAAA,EAAAA,e;GAAAA,e,KAAAA,e;;AAiCZ,OAAO,SAASC,eAAT,CAAyBC,IAAzB,EAAuCC,KAAvC,EAAiF;AACtF,mBAAUD,IAAV,cAAkBE,kBAAkB,CAACD,KAAD,CAApC;AACD","sourcesContent":["export const DEFAULT_USER_COMPONENT_IN_URL = '{user}';\nexport const DEFAULT_REGION_COMPONENT_IN_URL = '{region}';\n\nexport type ValuesOf<T extends {}> = T[keyof T];\nexport const API_VERSIONS = {\n V1: 'v1',\n V2: 'v2',\n V3: 'v3'\n} as const;\nexport type ApiVersion = ValuesOf<typeof API_VERSIONS>;\n\nexport const DEFAULT_MAPS_URL_FORMAT = {\n [API_VERSIONS.V1]: `https://${DEFAULT_USER_COMPONENT_IN_URL}.carto.com/api/v1/map`,\n [API_VERSIONS.V2]: `https://maps-api-v2.${DEFAULT_REGION_COMPONENT_IN_URL}.carto.com/user/${DEFAULT_USER_COMPONENT_IN_URL}`\n} as const;\n\nexport const MAP_TYPES = {\n QUERY: 'query',\n TABLE: 'table',\n TILESET: 'tileset'\n} as const;\nexport type MapType = ValuesOf<typeof MAP_TYPES>;\n\n// AVAILABLE FORMATS\nexport const FORMATS = {\n GEOJSON: 'geojson',\n NDJSON: 'ndjson',\n TILEJSON: 'tilejson',\n JSON: 'json'\n} as const;\nexport type Format = ValuesOf<typeof FORMATS>;\n\n// AVAILABLE FORMATS FOR TILES\nexport const TILE_FORMATS = {\n MVT: 'mvt',\n GEOJSON: 'geojson',\n BINARY: 'binary'\n} as const;\nexport type TileFormat = ValuesOf<typeof TILE_FORMATS>;\n\nexport enum SchemaFieldType {\n Number = 'number',\n Bigint = 'bigint',\n String = 'string',\n Geometry = 'geometry',\n Timestamp = 'timestamp',\n Object = 'object',\n Boolean = 'boolean',\n Variant = 'variant',\n Unknown = 'unknown'\n}\nexport interface SchemaField {\n name: string;\n type: SchemaFieldType; // Field type in the CARTO stack, common for all providers\n}\n\nexport interface MapInstantiation extends MapInstantiationFormats {\n nrows: number;\n size?: number;\n schema?: SchemaField[];\n}\n\ntype MapInstantiationFormats = Record<\n Format,\n {\n url: string[];\n error?: any;\n }\n>;\n\n/**\n * Simple encode parameter\n */\nexport function encodeParameter(name: string, value: string | boolean | number): string {\n return `${name}=${encodeURIComponent(value)}`;\n}\n"],"file":"maps-api-common.js"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defaultClassicCredentials, getDefaultCredentials } from '../config';
|
|
1
|
+
import { defaultClassicCredentials, defaultCloudNativeCredentials, getDefaultCredentials } from '../config';
|
|
2
2
|
import { API_VERSIONS, DEFAULT_MAPS_URL_FORMAT, DEFAULT_REGION_COMPONENT_IN_URL, DEFAULT_USER_COMPONENT_IN_URL, encodeParameter, MAP_TYPES } from './maps-api-common';
|
|
3
3
|
export const CONNECTIONS = {
|
|
4
4
|
BIGQUERY: 'bigquery',
|
|
@@ -12,18 +12,14 @@ export async function getDataV2({
|
|
|
12
12
|
credentials
|
|
13
13
|
}) {
|
|
14
14
|
const defaultCredentials = getDefaultCredentials();
|
|
15
|
-
const apiVersion = credentials
|
|
16
|
-
const localCreds = { ...defaultClassicCredentials,
|
|
15
|
+
const apiVersion = (credentials === null || credentials === void 0 ? void 0 : credentials.apiVersion) || defaultCredentials.apiVersion;
|
|
16
|
+
const localCreds = { ...(apiVersion === API_VERSIONS.V3 ? defaultCloudNativeCredentials : defaultClassicCredentials),
|
|
17
|
+
mapsUrl: DEFAULT_MAPS_URL_FORMAT[apiVersion],
|
|
17
18
|
...(defaultCredentials.apiVersion === apiVersion && defaultCredentials),
|
|
18
19
|
...credentials
|
|
19
20
|
};
|
|
20
|
-
|
|
21
|
-
if (!localCreds.mapsUrl) {
|
|
22
|
-
localCreds.mapsUrl = DEFAULT_MAPS_URL_FORMAT[apiVersion];
|
|
23
|
-
}
|
|
24
|
-
|
|
25
21
|
let url;
|
|
26
|
-
const connection = type ===
|
|
22
|
+
const connection = type === MAP_TYPES.TILESET ? CONNECTIONS.BIGQUERY : CONNECTIONS.CARTO;
|
|
27
23
|
|
|
28
24
|
switch (apiVersion) {
|
|
29
25
|
case API_VERSIONS.V1:
|
|
@@ -104,7 +100,7 @@ function dealWithError({
|
|
|
104
100
|
|
|
105
101
|
function initURLParameters(credentials) {
|
|
106
102
|
const encodedApiKey = encodeParameter('api_key', credentials.apiKey);
|
|
107
|
-
const encodedClient = encodeParameter('client',
|
|
103
|
+
const encodedClient = encodeParameter('client', 'deck-gl-carto');
|
|
108
104
|
return [encodedApiKey, encodedClient];
|
|
109
105
|
}
|
|
110
106
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/api/maps-client.js"],"names":["defaultClassicCredentials","getDefaultCredentials","API_VERSIONS","DEFAULT_MAPS_URL_FORMAT","DEFAULT_REGION_COMPONENT_IN_URL","DEFAULT_USER_COMPONENT_IN_URL","encodeParameter","MAP_TYPES","CONNECTIONS","BIGQUERY","CARTO","BUFFER_SIZE","TILE_EXTENT","getDataV2","type","source","credentials","defaultCredentials","apiVersion","localCreds","mapsUrl","url","connection","V1","mapConfig","createMapConfig","buildURLMapsAPIv1","layergroup","request","metadata","tilejson","vector","V2","buildURLMapsAPIv2","Error","response","fetch","headers","Accept","error","json","ok","dealWithError","status","username","apiKey","e","JSON","stringify","errors","initURLParameters","encodedApiKey","encodedClient","parameters","cfg","join","mapsApiType","QUERY","replace","region","sql","version","buffersize","mvt","layers","options","vector_extent"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Maps API v1 and Maps API v2\n */\nimport {defaultClassicCredentials, getDefaultCredentials} from '../config';\nimport {\n API_VERSIONS,\n DEFAULT_MAPS_URL_FORMAT,\n DEFAULT_REGION_COMPONENT_IN_URL,\n DEFAULT_USER_COMPONENT_IN_URL,\n encodeParameter,\n MAP_TYPES\n} from './maps-api-common';\n\nexport const CONNECTIONS = {\n BIGQUERY: 'bigquery',\n CARTO: 'carto'\n};\n\nconst BUFFER_SIZE = 16;\nconst TILE_EXTENT = 4096;\n\n/**\n * Obtain a TileJson from Maps API v1 and v2\n */\nexport async function getDataV2({type, source, credentials}) {\n const defaultCredentials = getDefaultCredentials();\n const apiVersion = (credentials && credentials.apiVersion) || defaultCredentials.apiVersion;\n // Only pick up default credentials if they have been defined for\n // correct API version\n const localCreds = {\n ...defaultClassicCredentials,\n ...(defaultCredentials.apiVersion === apiVersion && defaultCredentials),\n ...credentials\n };\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = DEFAULT_MAPS_URL_FORMAT[apiVersion];\n }\n\n let url;\n\n const connection = type === 'tileset' ? CONNECTIONS.BIGQUERY : CONNECTIONS.CARTO;\n\n switch (apiVersion) {\n case API_VERSIONS.V1:\n // Maps API v1\n const mapConfig = createMapConfig(source);\n url = buildURLMapsAPIv1({mapConfig, credentials: localCreds});\n const layergroup = await request({url, credentials: localCreds});\n return layergroup.metadata.tilejson.vector;\n\n case API_VERSIONS.V2:\n // Maps API v2\n url = buildURLMapsAPIv2({connection, type, source, credentials: localCreds});\n return await request({url, credentials: localCreds});\n\n default:\n throw new Error(\n `Invalid maps API version. It should be ${API_VERSIONS.V1} or ${API_VERSIONS.V2}`\n );\n }\n}\n\n/**\n * Request against Maps API\n */\nasync function request({url, credentials}) {\n let response;\n\n try {\n /* global fetch */\n /* eslint no-undef: \"error\" */\n response = await fetch(url, {\n headers: {\n Accept: 'application/json'\n }\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, json, credentials});\n }\n\n return json;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, json, credentials}) {\n switch (response.status) {\n case 401:\n throw new Error(\n `Unauthorized access to Maps API: invalid combination of user ('${credentials.username}') and apiKey ('${credentials.apiKey}')`\n );\n case 403:\n throw new Error(\n `Unauthorized access to dataset: the provided apiKey('${credentials.apiKey}') doesn't provide access to the requested data`\n );\n\n default:\n const e =\n credentials.apiVersion === API_VERSIONS.V1 ? JSON.stringify(json.errors) : json.error;\n throw new Error(e);\n }\n}\n\nfunction initURLParameters(credentials) {\n const encodedApiKey = encodeParameter('api_key', credentials.apiKey);\n const encodedClient = encodeParameter('client', `deck-gl-carto`);\n return [encodedApiKey, encodedClient];\n}\n\n/**\n * Build a URL with all required parameters\n */\nfunction buildURLMapsAPIv1({mapConfig, credentials}) {\n const parameters = initURLParameters(credentials);\n const cfg = JSON.stringify(mapConfig);\n return `${mapsUrl(credentials)}?${parameters.join('&')}&${encodeParameter('config', cfg)}`;\n}\n\nfunction buildURLMapsAPIv2({connection, type, source, credentials}) {\n const parameters = initURLParameters(credentials);\n // Query type is mapped to 'sql' at maps api v1\n const mapsApiType = type === MAP_TYPES.QUERY ? 'sql' : type;\n let url = `${mapsUrl(credentials)}/${connection}/${mapsApiType}?`;\n url += `${encodeParameter('source', source)}&format=tilejson&${parameters.join('&')}`;\n return url;\n}\n\n/**\n * Prepare a url valid for the specified user\n */\nfunction mapsUrl(credentials) {\n return credentials.mapsUrl\n .replace(DEFAULT_USER_COMPONENT_IN_URL, credentials.username)\n .replace(DEFAULT_REGION_COMPONENT_IN_URL, credentials.region);\n}\n\nfunction createMapConfig(sql) {\n return {\n version: '1.3.1',\n buffersize: {\n mvt: BUFFER_SIZE\n },\n layers: [\n {\n type: 'mapnik',\n options: {\n sql,\n vector_extent: TILE_EXTENT\n }\n }\n ]\n };\n}\n"],"file":"maps-client.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/api/maps-client.ts"],"names":["defaultClassicCredentials","defaultCloudNativeCredentials","getDefaultCredentials","API_VERSIONS","DEFAULT_MAPS_URL_FORMAT","DEFAULT_REGION_COMPONENT_IN_URL","DEFAULT_USER_COMPONENT_IN_URL","encodeParameter","MAP_TYPES","CONNECTIONS","BIGQUERY","CARTO","BUFFER_SIZE","TILE_EXTENT","getDataV2","type","source","credentials","defaultCredentials","apiVersion","localCreds","V3","mapsUrl","url","connection","TILESET","V1","mapConfig","createMapConfig","buildURLMapsAPIv1","layergroup","request","metadata","tilejson","vector","V2","buildURLMapsAPIv2","Error","response","fetch","headers","Accept","error","json","ok","dealWithError","status","username","apiKey","e","JSON","stringify","errors","initURLParameters","encodedApiKey","encodedClient","parameters","cfg","join","mapsApiType","QUERY","replace","region","sql","version","buffersize","mvt","layers","options","vector_extent"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Maps API v1 and Maps API v2\n */\nimport {\n ClassicCredentials,\n defaultClassicCredentials,\n defaultCloudNativeCredentials,\n getDefaultCredentials\n} from '../config';\nimport {\n API_VERSIONS,\n DEFAULT_MAPS_URL_FORMAT,\n DEFAULT_REGION_COMPONENT_IN_URL,\n DEFAULT_USER_COMPONENT_IN_URL,\n encodeParameter,\n MapType,\n MAP_TYPES\n} from './maps-api-common';\n\nexport const CONNECTIONS = {\n BIGQUERY: 'bigquery',\n CARTO: 'carto'\n};\n\nconst BUFFER_SIZE = 16;\nconst TILE_EXTENT = 4096;\n\n/**\n * Obtain a TileJson from Maps API v1 and v2\n */\nexport async function getDataV2({\n type,\n source,\n credentials\n}: {\n type: MapType;\n source: string;\n credentials?: Partial<ClassicCredentials>;\n}) {\n const defaultCredentials = getDefaultCredentials();\n const apiVersion = credentials?.apiVersion || defaultCredentials.apiVersion;\n // Only pick up default credentials if they have been defined for\n // correct API version\n const localCreds = {\n ...(apiVersion === API_VERSIONS.V3 ? defaultCloudNativeCredentials : defaultClassicCredentials),\n mapsUrl: DEFAULT_MAPS_URL_FORMAT[apiVersion],\n ...(defaultCredentials.apiVersion === apiVersion && defaultCredentials),\n ...credentials\n } as unknown as Required<ClassicCredentials>;\n\n let url: string;\n\n const connection = type === MAP_TYPES.TILESET ? CONNECTIONS.BIGQUERY : CONNECTIONS.CARTO;\n\n switch (apiVersion) {\n case API_VERSIONS.V1:\n // Maps API v1\n const mapConfig = createMapConfig(source);\n url = buildURLMapsAPIv1({mapConfig, credentials: localCreds});\n const layergroup = await request({url, credentials: localCreds});\n return layergroup.metadata.tilejson.vector;\n\n case API_VERSIONS.V2:\n // Maps API v2\n url = buildURLMapsAPIv2({connection, type, source, credentials: localCreds});\n return await request({url, credentials: localCreds});\n\n default:\n throw new Error(\n `Invalid maps API version. It should be ${API_VERSIONS.V1} or ${API_VERSIONS.V2}`\n );\n }\n}\n\n/**\n * Request against Maps API\n */\nasync function request({url, credentials}: {url: string; credentials: ClassicCredentials}) {\n let response;\n\n try {\n /* global fetch */\n response = await fetch(url, {\n headers: {\n Accept: 'application/json'\n }\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, json, credentials});\n }\n\n return json;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({\n response,\n json,\n credentials\n}: {\n response: Response;\n json: any;\n credentials: ClassicCredentials;\n}) {\n switch (response.status) {\n case 401:\n throw new Error(\n `Unauthorized access to Maps API: invalid combination of user ('${credentials.username}') and apiKey ('${credentials.apiKey}')`\n );\n case 403:\n throw new Error(\n `Unauthorized access to dataset: the provided apiKey('${credentials.apiKey}') doesn't provide access to the requested data`\n );\n\n default:\n const e =\n credentials.apiVersion === API_VERSIONS.V1 ? JSON.stringify(json.errors) : json.error;\n throw new Error(e);\n }\n}\n\nfunction initURLParameters(credentials: ClassicCredentials): string[] {\n const encodedApiKey = encodeParameter('api_key', credentials.apiKey);\n const encodedClient = encodeParameter('client', 'deck-gl-carto');\n return [encodedApiKey, encodedClient];\n}\n\n/**\n * Build a URL with all required parameters\n */\nfunction buildURLMapsAPIv1({\n mapConfig,\n credentials\n}: {\n mapConfig: unknown;\n credentials: Required<ClassicCredentials>;\n}): string {\n const parameters = initURLParameters(credentials);\n const cfg = JSON.stringify(mapConfig);\n return `${mapsUrl(credentials)}?${parameters.join('&')}&${encodeParameter('config', cfg)}`;\n}\n\nfunction buildURLMapsAPIv2({\n connection,\n type,\n source,\n credentials\n}: {\n connection: string;\n type: MapType;\n source: string;\n credentials: Required<ClassicCredentials>;\n}): string {\n const parameters = initURLParameters(credentials);\n // Query type is mapped to 'sql' at maps api v1\n const mapsApiType = type === MAP_TYPES.QUERY ? 'sql' : type;\n let url = `${mapsUrl(credentials)}/${connection}/${mapsApiType}?`;\n url += `${encodeParameter('source', source)}&format=tilejson&${parameters.join('&')}`;\n return url;\n}\n\n/**\n * Prepare a url valid for the specified user\n */\nfunction mapsUrl(credentials: Required<ClassicCredentials>) {\n return credentials.mapsUrl\n .replace(DEFAULT_USER_COMPONENT_IN_URL, credentials.username)\n .replace(DEFAULT_REGION_COMPONENT_IN_URL, credentials.region);\n}\n\nfunction createMapConfig(sql: string) {\n return {\n version: '1.3.1',\n buffersize: {\n mvt: BUFFER_SIZE\n },\n layers: [\n {\n type: 'mapnik',\n options: {\n sql,\n // eslint-disable-next-line camelcase\n vector_extent: TILE_EXTENT\n }\n }\n ]\n };\n}\n"],"file":"maps-client.js"}
|
|
@@ -2,17 +2,16 @@ import { getDefaultCredentials, buildMapsUrlFromBase } from '../config';
|
|
|
2
2
|
import { API_VERSIONS, encodeParameter, FORMATS, MAP_TYPES } from './maps-api-common';
|
|
3
3
|
import { parseMap } from './parseMap';
|
|
4
4
|
import { log } from '@deck.gl/core';
|
|
5
|
+
import { assert } from '../utils';
|
|
5
6
|
const MAX_GET_LENGTH = 2048;
|
|
6
7
|
const DEFAULT_CLIENT = 'deck-gl-carto';
|
|
7
8
|
|
|
8
9
|
async function request({
|
|
9
10
|
method,
|
|
10
11
|
url,
|
|
11
|
-
format,
|
|
12
12
|
accessToken,
|
|
13
13
|
body
|
|
14
14
|
}) {
|
|
15
|
-
let response;
|
|
16
15
|
const headers = {
|
|
17
16
|
Accept: 'application/json'
|
|
18
17
|
};
|
|
@@ -26,7 +25,7 @@ async function request({
|
|
|
26
25
|
}
|
|
27
26
|
|
|
28
27
|
try {
|
|
29
|
-
|
|
28
|
+
return await fetch(url, {
|
|
30
29
|
method,
|
|
31
30
|
headers,
|
|
32
31
|
body
|
|
@@ -34,11 +33,20 @@ async function request({
|
|
|
34
33
|
} catch (error) {
|
|
35
34
|
throw new Error("Failed to connect to Maps API: ".concat(error));
|
|
36
35
|
}
|
|
36
|
+
}
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
async function requestJson({
|
|
39
|
+
method,
|
|
40
|
+
url,
|
|
41
|
+
accessToken,
|
|
42
|
+
body
|
|
43
|
+
}) {
|
|
44
|
+
const response = await request({
|
|
45
|
+
method,
|
|
46
|
+
url,
|
|
47
|
+
accessToken,
|
|
48
|
+
body
|
|
49
|
+
});
|
|
42
50
|
const json = await response.json();
|
|
43
51
|
|
|
44
52
|
if (!response.ok) {
|
|
@@ -48,7 +56,32 @@ async function request({
|
|
|
48
56
|
});
|
|
49
57
|
}
|
|
50
58
|
|
|
51
|
-
return json
|
|
59
|
+
return json;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
async function requestData({
|
|
63
|
+
method,
|
|
64
|
+
url,
|
|
65
|
+
accessToken,
|
|
66
|
+
format,
|
|
67
|
+
body
|
|
68
|
+
}) {
|
|
69
|
+
if (format === FORMATS.NDJSON) {
|
|
70
|
+
return request({
|
|
71
|
+
method,
|
|
72
|
+
url,
|
|
73
|
+
accessToken,
|
|
74
|
+
body
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
const data = await requestJson({
|
|
79
|
+
method,
|
|
80
|
+
url,
|
|
81
|
+
accessToken,
|
|
82
|
+
body
|
|
83
|
+
});
|
|
84
|
+
return data.rows ? data.rows : data;
|
|
52
85
|
}
|
|
53
86
|
|
|
54
87
|
function dealWithError({
|
|
@@ -120,25 +153,22 @@ export async function mapInstantiation({
|
|
|
120
153
|
const {
|
|
121
154
|
accessToken
|
|
122
155
|
} = credentials;
|
|
123
|
-
const format = 'json';
|
|
124
156
|
|
|
125
157
|
if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {
|
|
126
158
|
const body = JSON.stringify({
|
|
127
159
|
q: source,
|
|
128
160
|
client: clientId || DEFAULT_CLIENT
|
|
129
161
|
});
|
|
130
|
-
return await
|
|
162
|
+
return await requestJson({
|
|
131
163
|
method: 'POST',
|
|
132
164
|
url: baseUrl,
|
|
133
|
-
format,
|
|
134
165
|
accessToken,
|
|
135
166
|
body
|
|
136
167
|
});
|
|
137
168
|
}
|
|
138
169
|
|
|
139
|
-
return await
|
|
170
|
+
return await requestJson({
|
|
140
171
|
url,
|
|
141
|
-
format,
|
|
142
172
|
accessToken
|
|
143
173
|
});
|
|
144
174
|
}
|
|
@@ -157,14 +187,14 @@ function checkFetchLayerDataParameters({
|
|
|
157
187
|
type,
|
|
158
188
|
source,
|
|
159
189
|
connection,
|
|
160
|
-
|
|
190
|
+
credentials
|
|
161
191
|
}) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
192
|
+
assert(connection, 'Must define connection');
|
|
193
|
+
assert(type, 'Must define a type');
|
|
194
|
+
assert(source, 'Must define a source');
|
|
195
|
+
assert(credentials.apiVersion === API_VERSIONS.V3, 'Method only available for v3');
|
|
196
|
+
assert(credentials.apiBaseUrl, 'Must define apiBaseUrl');
|
|
197
|
+
assert(credentials.accessToken, 'Must define an accessToken');
|
|
168
198
|
}
|
|
169
199
|
|
|
170
200
|
export async function fetchLayerData({
|
|
@@ -194,7 +224,7 @@ export async function fetchLayerData({
|
|
|
194
224
|
schema,
|
|
195
225
|
clientId
|
|
196
226
|
});
|
|
197
|
-
const data = await
|
|
227
|
+
const data = await requestData({
|
|
198
228
|
url,
|
|
199
229
|
format: mapFormat,
|
|
200
230
|
accessToken
|
|
@@ -230,7 +260,7 @@ async function _fetchDataUrl({
|
|
|
230
260
|
type,
|
|
231
261
|
source,
|
|
232
262
|
connection,
|
|
233
|
-
localCreds
|
|
263
|
+
credentials: localCreds
|
|
234
264
|
});
|
|
235
265
|
|
|
236
266
|
if (!localCreds.mapsUrl) {
|
|
@@ -247,13 +277,13 @@ async function _fetchDataUrl({
|
|
|
247
277
|
schema,
|
|
248
278
|
clientId
|
|
249
279
|
});
|
|
250
|
-
let url;
|
|
280
|
+
let url = null;
|
|
251
281
|
let mapFormat;
|
|
252
282
|
|
|
253
283
|
if (format) {
|
|
254
284
|
mapFormat = format;
|
|
255
285
|
url = getUrlFromMetadata(metadata, format);
|
|
256
|
-
|
|
286
|
+
assert(url, "Format ".concat(format, " not available"));
|
|
257
287
|
} else {
|
|
258
288
|
const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.JSON, FORMATS.NDJSON, FORMATS.TILEJSON];
|
|
259
289
|
|
|
@@ -265,6 +295,8 @@ async function _fetchDataUrl({
|
|
|
265
295
|
break;
|
|
266
296
|
}
|
|
267
297
|
}
|
|
298
|
+
|
|
299
|
+
assert(url && mapFormat, 'Unsupported data formats received from backend.');
|
|
268
300
|
}
|
|
269
301
|
|
|
270
302
|
const {
|
|
@@ -321,19 +353,18 @@ async function _fetchMapDataset(dataset, accessToken, credentials, clientId) {
|
|
|
321
353
|
type,
|
|
322
354
|
clientId
|
|
323
355
|
});
|
|
324
|
-
const cache = parseInt(new
|
|
356
|
+
const cache = parseInt(new URL(url).searchParams.get('cache') || '', 10);
|
|
325
357
|
|
|
326
358
|
if (cache && dataset.cache === cache) {
|
|
327
359
|
return false;
|
|
328
360
|
}
|
|
329
361
|
|
|
330
362
|
dataset.cache = cache;
|
|
331
|
-
|
|
363
|
+
dataset.data = await requestData({
|
|
332
364
|
url,
|
|
333
365
|
format: mapFormat,
|
|
334
366
|
accessToken
|
|
335
367
|
});
|
|
336
|
-
dataset.data = data;
|
|
337
368
|
return true;
|
|
338
369
|
}
|
|
339
370
|
|
|
@@ -356,31 +387,35 @@ export async function fetchMap({
|
|
|
356
387
|
const localCreds = { ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),
|
|
357
388
|
...credentials
|
|
358
389
|
};
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
390
|
+
const {
|
|
391
|
+
accessToken
|
|
392
|
+
} = localCreds;
|
|
393
|
+
assert(cartoMapId, 'Must define CARTO map id: fetchMap({cartoMapId: "XXXX-XXXX-XXXX"})');
|
|
394
|
+
assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');
|
|
395
|
+
assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');
|
|
362
396
|
|
|
363
397
|
if (!localCreds.mapsUrl) {
|
|
364
398
|
localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);
|
|
365
399
|
}
|
|
366
400
|
|
|
367
401
|
if (autoRefresh || onNewData) {
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
402
|
+
assert(onNewData, 'Must define `onNewData` when using autoRefresh');
|
|
403
|
+
assert(typeof onNewData === 'function', '`onNewData` must be a function');
|
|
404
|
+
assert(typeof autoRefresh === 'number' && autoRefresh > 0, '`autoRefresh` must be a positive number');
|
|
371
405
|
}
|
|
372
406
|
|
|
373
407
|
const url = "".concat(localCreds.mapsUrl, "/public/").concat(cartoMapId);
|
|
374
|
-
const map = await
|
|
375
|
-
url
|
|
408
|
+
const map = await requestJson({
|
|
409
|
+
url,
|
|
410
|
+
accessToken
|
|
376
411
|
});
|
|
377
412
|
let stopAutoRefresh;
|
|
378
413
|
|
|
379
414
|
if (autoRefresh) {
|
|
380
415
|
const intervalId = setInterval(async () => {
|
|
381
|
-
const changed = await fillInMapDatasets(map, clientId,
|
|
416
|
+
const changed = await fillInMapDatasets(map, clientId, localCreds);
|
|
382
417
|
|
|
383
|
-
if (changed.some(v => v === true)) {
|
|
418
|
+
if (onNewData && changed.some(v => v === true)) {
|
|
384
419
|
onNewData(parseMap(map));
|
|
385
420
|
}
|
|
386
421
|
}, autoRefresh * 1000);
|
|
@@ -390,7 +425,7 @@ export async function fetchMap({
|
|
|
390
425
|
};
|
|
391
426
|
}
|
|
392
427
|
|
|
393
|
-
await fillInMapDatasets(map, clientId,
|
|
428
|
+
await fillInMapDatasets(map, clientId, localCreds);
|
|
394
429
|
return { ...parseMap(map),
|
|
395
430
|
...{
|
|
396
431
|
stopAutoRefresh
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/api/maps-v3-client.js"],"names":["getDefaultCredentials","buildMapsUrlFromBase","API_VERSIONS","encodeParameter","FORMATS","MAP_TYPES","parseMap","log","MAX_GET_LENGTH","DEFAULT_CLIENT","request","method","url","format","accessToken","body","response","headers","Accept","Authorization","fetch","error","Error","NDJSON","json","ok","dealWithError","rows","status","getParameters","type","source","geoColumn","columns","schema","clientId","parameters","push","sourceName","QUERY","TABLE","join","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","JSON","stringify","q","client","getUrlFromMetadata","metadata","m","checkFetchLayerDataParameters","localCreds","assert","apiVersion","V3","apiBaseUrl","fetchLayerData","mapFormat","_fetchDataUrl","data","result","defaultCredentials","prioritizedFormats","GEOJSON","TILEJSON","f","getData","deprecated","layerData","_fetchMapDataset","dataset","connectionName","cache","parseInt","URLSearchParams","get","fillInMapDatasets","datasets","token","promises","map","Promise","all","fetchMap","cartoMapId","autoRefresh","onNewData","stopAutoRefresh","intervalId","setInterval","changed","some","v","clearInterval"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {getDefaultCredentials, buildMapsUrlFromBase} from '../config';\nimport {API_VERSIONS, encodeParameter, FORMATS, MAP_TYPES} from './maps-api-common';\nimport {parseMap} from './parseMap';\nimport {log} from '@deck.gl/core';\n\nconst MAX_GET_LENGTH = 2048;\nconst DEFAULT_CLIENT = 'deck-gl-carto';\n\n/**\n * Request against Maps API\n */\nasync function request({method, url, format, accessToken, body}) {\n let response;\n\n const headers = {\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 /* eslint no-undef: \"error\" */\n response = 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 if (format === FORMATS.NDJSON) {\n return response;\n }\n\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, error: json.error});\n }\n\n return json.rows ? json.rows : json;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, error}) {\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\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({type, source, geoColumn, columns, schema, clientId}) {\n const parameters = [encodeParameter('client', clientId || DEFAULT_CLIENT)];\n if (schema) {\n parameters.push(encodeParameter('schema', true));\n }\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (type === MAP_TYPES.TABLE) {\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n }\n\n return parameters.join('&');\n}\n\nexport async function mapInstantiation({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n schema,\n clientId\n}) {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({type, source, geoColumn, columns, schema, clientId})}`;\n const {accessToken} = credentials;\n\n const format = 'json';\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 });\n return await request({method: 'POST', url: baseUrl, format, accessToken, body});\n }\n\n return await request({url, format, accessToken});\n}\n\nfunction getUrlFromMetadata(metadata, format) {\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({type, source, connection, localCreds}) {\n log.assert(connection, 'Must define connection');\n log.assert(type, 'Must define a type');\n log.assert(source, 'Must define a source');\n\n log.assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n log.assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n log.assert(localCreds.accessToken, 'Must define an accessToken');\n}\n\nexport async function fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n schema,\n clientId\n}) {\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 schema,\n clientId\n });\n\n const data = await request({url, format: mapFormat, accessToken});\n const result = {data, format: mapFormat};\n if (schema) {\n result.schema = metadata.schema;\n }\n\n return result;\n}\n\nasync function _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n schema,\n clientId\n}) {\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({type, source, connection, localCreds});\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 schema,\n clientId\n });\n let url;\n let mapFormat;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n log.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 }\n\n const {accessToken} = localCreds;\n return {url, accessToken, mapFormat, metadata};\n}\n\nexport async function getData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n clientId\n}) {\n log.deprecated('getData', 'fetchLayerData')();\n const layerData = await fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n schema: false,\n clientId\n });\n return layerData.data;\n}\n\n/* global clearInterval, setInterval, URLSearchParams */\nasync function _fetchMapDataset(dataset, accessToken, credentials, clientId) {\n // First fetch metadata\n const {connectionName: connection, source, type} = dataset;\n const {url, mapFormat} = await _fetchDataUrl({\n credentials: {...credentials, accessToken},\n connection,\n source,\n type,\n clientId\n });\n\n // Extract the last time the data changed\n const cache = parseInt(new URLSearchParams(url).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 const data = await request({url, format: mapFormat, accessToken});\n dataset.data = data;\n return true;\n}\n\nasync function fillInMapDatasets({datasets, token}, clientId, credentials) {\n const promises = datasets.map(dataset => _fetchMapDataset(dataset, token, credentials, clientId));\n return await Promise.all(promises);\n}\n\nexport async function fetchMap({cartoMapId, clientId, credentials, autoRefresh, onNewData}) {\n const defaultCredentials = getDefaultCredentials();\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n };\n\n log.assert(cartoMapId, `Must define CARTO map id: fetchMap({cartoMapId: 'XXXX-XXXX-XXXX'})`);\n\n log.assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n log.assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n if (autoRefresh || onNewData) {\n log.assert(onNewData, 'Must define `onNewData` when using autoRefresh');\n log.assert(typeof onNewData === 'function', '`onNewData` must be a function');\n log.assert(autoRefresh > 0, '`autoRefresh` must be a positive number');\n }\n\n const url = `${localCreds.mapsUrl}/public/${cartoMapId}`;\n const map = await request({url});\n\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 const intervalId = setInterval(async () => {\n const changed = await fillInMapDatasets(map, clientId, credentials);\n if (changed.some(v => v === true)) {\n onNewData(parseMap(map));\n }\n }, autoRefresh * 1000);\n stopAutoRefresh = () => {\n clearInterval(intervalId);\n };\n }\n\n // Mutates map.datasets so that dataset.data contains data\n await fillInMapDatasets(map, clientId, credentials);\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","API_VERSIONS","encodeParameter","FORMATS","MAP_TYPES","parseMap","log","assert","MAX_GET_LENGTH","DEFAULT_CLIENT","request","method","url","accessToken","body","headers","Accept","Authorization","fetch","error","Error","requestJson","response","json","ok","dealWithError","requestData","format","NDJSON","data","rows","status","getParameters","type","source","geoColumn","columns","schema","clientId","parameters","push","sourceName","QUERY","TABLE","join","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","JSON","stringify","q","client","getUrlFromMetadata","metadata","m","checkFetchLayerDataParameters","apiVersion","V3","apiBaseUrl","fetchLayerData","mapFormat","_fetchDataUrl","result","defaultCredentials","localCreds","prioritizedFormats","GEOJSON","TILEJSON","f","getData","deprecated","layerData","_fetchMapDataset","dataset","connectionName","cache","parseInt","URL","searchParams","get","fillInMapDatasets","datasets","token","promises","map","Promise","all","fetchMap","cartoMapId","autoRefresh","onNewData","stopAutoRefresh","intervalId","setInterval","changed","some","v","clearInterval"],"mappings":"AAGA,SAAQA,qBAAR,EAA+BC,oBAA/B,QAAkF,WAAlF;AACA,SACEC,YADF,EAEEC,eAFF,EAIEC,OAJF,EAOEC,SAPF,QASO,mBATP;AAUA,SAAQC,QAAR,QAAuB,YAAvB;AACA,SAAQC,GAAR,QAAkB,eAAlB;AACA,SAAQC,MAAR,QAAqB,UAArB;AAEA,MAAMC,cAAc,GAAG,IAAvB;AACA,MAAMC,cAAc,GAAG,eAAvB;;AAYA,eAAeC,OAAf,CAAuB;AAACC,EAAAA,MAAD;AAASC,EAAAA,GAAT;AAAcC,EAAAA,WAAd;AAA2BC,EAAAA;AAA3B,CAAvB,EAA2F;AACzF,QAAMC,OAA+B,GAAG;AACtCC,IAAAA,MAAM,EAAE;AAD8B,GAAxC;;AAIA,MAAIH,WAAJ,EAAiB;AACfE,IAAAA,OAAO,CAACE,aAAR,oBAAkCJ,WAAlC;AACD;;AAED,MAAIF,MAAM,KAAK,MAAf,EAAuB;AACrBI,IAAAA,OAAO,CAAC,cAAD,CAAP,GAA0B,kBAA1B;AACD;;AAED,MAAI;AAEF,WAAO,MAAMG,KAAK,CAACN,GAAD,EAAM;AACtBD,MAAAA,MADsB;AAEtBI,MAAAA,OAFsB;AAGtBD,MAAAA;AAHsB,KAAN,CAAlB;AAKD,GAPD,CAOE,OAAOK,KAAP,EAAc;AACd,UAAM,IAAIC,KAAJ,0CAA4CD,KAA5C,EAAN;AACD;AACF;;AAED,eAAeE,WAAf,CAAwC;AACtCV,EAAAA,MADsC;AAEtCC,EAAAA,GAFsC;AAGtCC,EAAAA,WAHsC;AAItCC,EAAAA;AAJsC,CAAxC,EAK8B;AAC5B,QAAMQ,QAAQ,GAAG,MAAMZ,OAAO,CAAC;AAACC,IAAAA,MAAD;AAASC,IAAAA,GAAT;AAAcC,IAAAA,WAAd;AAA2BC,IAAAA;AAA3B,GAAD,CAA9B;AACA,QAAMS,IAAI,GAAG,MAAMD,QAAQ,CAACC,IAAT,EAAnB;;AAEA,MAAI,CAACD,QAAQ,CAACE,EAAd,EAAkB;AAChBC,IAAAA,aAAa,CAAC;AAACH,MAAAA,QAAD;AAAWH,MAAAA,KAAK,EAAEI,IAAI,CAACJ;AAAvB,KAAD,CAAb;AACD;;AACD,SAAOI,IAAP;AACD;;AAED,eAAeG,WAAf,CAA2B;AACzBf,EAAAA,MADyB;AAEzBC,EAAAA,GAFyB;AAGzBC,EAAAA,WAHyB;AAIzBc,EAAAA,MAJyB;AAKzBb,EAAAA;AALyB,CAA3B,EAQgC;AAC9B,MAAIa,MAAM,KAAKxB,OAAO,CAACyB,MAAvB,EAA+B;AAC7B,WAAOlB,OAAO,CAAC;AAACC,MAAAA,MAAD;AAASC,MAAAA,GAAT;AAAcC,MAAAA,WAAd;AAA2BC,MAAAA;AAA3B,KAAD,CAAd;AACD;;AAED,QAAMe,IAAI,GAAG,MAAMR,WAAW,CAAM;AAACV,IAAAA,MAAD;AAASC,IAAAA,GAAT;AAAcC,IAAAA,WAAd;AAA2BC,IAAAA;AAA3B,GAAN,CAA9B;AACA,SAAOe,IAAI,CAACC,IAAL,GAAYD,IAAI,CAACC,IAAjB,GAAwBD,IAA/B;AACD;;AAKD,SAASJ,aAAT,CAAuB;AAACH,EAAAA,QAAD;AAAWH,EAAAA;AAAX,CAAvB,EAAuF;AACrF,UAAQG,QAAQ,CAACS,MAAjB;AACE,SAAK,GAAL;AACE,YAAM,IAAIX,KAAJ,wBAA0BD,KAA1B,EAAN;;AACF,SAAK,GAAL;AACA,SAAK,GAAL;AACE,YAAM,IAAIC,KAAJ,gCAAkCD,KAAlC,EAAN;;AACF;AACE,YAAM,IAAIC,KAAJ,CAAUD,KAAV,CAAN;AAPJ;AASD;;AAiBD,SAASa,aAAT,CAAuB;AACrBC,EAAAA,IADqB;AAErBC,EAAAA,MAFqB;AAGrBC,EAAAA,SAHqB;AAIrBC,EAAAA,OAJqB;AAKrBC,EAAAA,MALqB;AAMrBC,EAAAA;AANqB,CAAvB,EAO6D;AAC3D,QAAMC,UAAU,GAAG,CAACrC,eAAe,CAAC,QAAD,EAAWoC,QAAQ,IAAI7B,cAAvB,CAAhB,CAAnB;;AACA,MAAI4B,MAAJ,EAAY;AACVE,IAAAA,UAAU,CAACC,IAAX,CAAgBtC,eAAe,CAAC,QAAD,EAAW,IAAX,CAA/B;AACD;;AAED,QAAMuC,UAAU,GAAGR,IAAI,KAAK7B,SAAS,CAACsC,KAAnB,GAA2B,GAA3B,GAAiC,MAApD;AACAH,EAAAA,UAAU,CAACC,IAAX,CAAgBtC,eAAe,CAACuC,UAAD,EAAaP,MAAb,CAA/B;;AAEA,MAAID,IAAI,KAAK7B,SAAS,CAACuC,KAAvB,EAA8B;AAC5B,QAAIR,SAAJ,EAAe;AACbI,MAAAA,UAAU,CAACC,IAAX,CAAgBtC,eAAe,CAAC,YAAD,EAAeiC,SAAf,CAA/B;AACD;;AACD,QAAIC,OAAJ,EAAa;AACXG,MAAAA,UAAU,CAACC,IAAX,CAAgBtC,eAAe,CAAC,SAAD,EAAYkC,OAAO,CAACQ,IAAR,CAAa,GAAb,CAAZ,CAA/B;AACD;AACF;;AAED,SAAOL,UAAU,CAACK,IAAX,CAAgB,GAAhB,CAAP;AACD;;AAED,OAAO,eAAeC,gBAAf,CAAgC;AACrCZ,EAAAA,IADqC;AAErCC,EAAAA,MAFqC;AAGrCY,EAAAA,UAHqC;AAIrCC,EAAAA,WAJqC;AAKrCZ,EAAAA,SALqC;AAMrCC,EAAAA,OANqC;AAOrCC,EAAAA,MAPqC;AAQrCC,EAAAA;AARqC,CAAhC,EAS6C;AAClD,QAAMU,OAAO,aAAMD,WAAW,CAACE,OAAlB,cAA6BH,UAA7B,cAA2Cb,IAA3C,CAAb;AACA,QAAMrB,GAAG,aAAMoC,OAAN,cAAiBhB,aAAa,CAAC;AAACC,IAAAA,IAAD;AAAOC,IAAAA,MAAP;AAAeC,IAAAA,SAAf;AAA0BC,IAAAA,OAA1B;AAAmCC,IAAAA,MAAnC;AAA2CC,IAAAA;AAA3C,GAAD,CAA9B,CAAT;AACA,QAAM;AAACzB,IAAAA;AAAD,MAAgBkC,WAAtB;;AAEA,MAAInC,GAAG,CAACsC,MAAJ,GAAa1C,cAAb,IAA+ByB,IAAI,KAAK7B,SAAS,CAACsC,KAAtD,EAA6D;AAE3D,UAAM5B,IAAI,GAAGqC,IAAI,CAACC,SAAL,CAAe;AAC1BC,MAAAA,CAAC,EAAEnB,MADuB;AAE1BoB,MAAAA,MAAM,EAAEhB,QAAQ,IAAI7B;AAFM,KAAf,CAAb;AAIA,WAAO,MAAMY,WAAW,CAAC;AAACV,MAAAA,MAAM,EAAE,MAAT;AAAiBC,MAAAA,GAAG,EAAEoC,OAAtB;AAA+BnC,MAAAA,WAA/B;AAA4CC,MAAAA;AAA5C,KAAD,CAAxB;AACD;;AAED,SAAO,MAAMO,WAAW,CAAC;AAACT,IAAAA,GAAD;AAAMC,IAAAA;AAAN,GAAD,CAAxB;AACD;;AAED,SAAS0C,kBAAT,CAA4BC,QAA5B,EAAwD7B,MAAxD,EAAuF;AACrF,QAAM8B,CAAC,GAAGD,QAAQ,CAAC7B,MAAD,CAAlB;;AAEA,MAAI8B,CAAC,IAAI,CAACA,CAAC,CAACtC,KAAR,IAAiBsC,CAAC,CAAC7C,GAAvB,EAA4B;AAC1B,WAAO6C,CAAC,CAAC7C,GAAF,CAAM,CAAN,CAAP;AACD;;AAED,SAAO,IAAP;AACD;;AAED,SAAS8C,6BAAT,CAAuC;AACrCzB,EAAAA,IADqC;AAErCC,EAAAA,MAFqC;AAGrCY,EAAAA,UAHqC;AAIrCC,EAAAA;AAJqC,CAAvC,EAKyB;AACvBxC,EAAAA,MAAM,CAACuC,UAAD,EAAa,wBAAb,CAAN;AACAvC,EAAAA,MAAM,CAAC0B,IAAD,EAAO,oBAAP,CAAN;AACA1B,EAAAA,MAAM,CAAC2B,MAAD,EAAS,sBAAT,CAAN;AAEA3B,EAAAA,MAAM,CAACwC,WAAW,CAACY,UAAZ,KAA2B1D,YAAY,CAAC2D,EAAzC,EAA6C,8BAA7C,CAAN;AACArD,EAAAA,MAAM,CAACwC,WAAW,CAACc,UAAb,EAAyB,wBAAzB,CAAN;AACAtD,EAAAA,MAAM,CAACwC,WAAW,CAAClC,WAAb,EAA0B,4BAA1B,CAAN;AACD;;AAOD,OAAO,eAAeiD,cAAf,CAA8B;AACnC7B,EAAAA,IADmC;AAEnCC,EAAAA,MAFmC;AAGnCY,EAAAA,UAHmC;AAInCC,EAAAA,WAJmC;AAKnCZ,EAAAA,SALmC;AAMnCC,EAAAA,OANmC;AAOnCT,EAAAA,MAPmC;AAQnCU,EAAAA,MARmC;AASnCC,EAAAA;AATmC,CAA9B,EAUiD;AAGtD,QAAM;AAAC1B,IAAAA,GAAD;AAAMC,IAAAA,WAAN;AAAmBkD,IAAAA,SAAnB;AAA8BP,IAAAA;AAA9B,MAA0C,MAAMQ,aAAa,CAAC;AAClE/B,IAAAA,IADkE;AAElEC,IAAAA,MAFkE;AAGlEY,IAAAA,UAHkE;AAIlEC,IAAAA,WAJkE;AAKlEZ,IAAAA,SALkE;AAMlEC,IAAAA,OANkE;AAOlET,IAAAA,MAPkE;AAQlEU,IAAAA,MARkE;AASlEC,IAAAA;AATkE,GAAD,CAAnE;AAYA,QAAMT,IAAI,GAAG,MAAMH,WAAW,CAAC;AAACd,IAAAA,GAAD;AAAMe,IAAAA,MAAM,EAAEoC,SAAd;AAAyBlD,IAAAA;AAAzB,GAAD,CAA9B;AACA,QAAMoD,MAA4B,GAAG;AAACpC,IAAAA,IAAD;AAAOF,IAAAA,MAAM,EAAEoC;AAAf,GAArC;;AACA,MAAI1B,MAAJ,EAAY;AACV4B,IAAAA,MAAM,CAAC5B,MAAP,GAAgBmB,QAAQ,CAACnB,MAAzB;AACD;;AAED,SAAO4B,MAAP;AACD;;AAED,eAAeD,aAAf,CAA6B;AAC3B/B,EAAAA,IAD2B;AAE3BC,EAAAA,MAF2B;AAG3BY,EAAAA,UAH2B;AAI3BC,EAAAA,WAJ2B;AAK3BZ,EAAAA,SAL2B;AAM3BC,EAAAA,OAN2B;AAO3BT,EAAAA,MAP2B;AAQ3BU,EAAAA,MAR2B;AAS3BC,EAAAA;AAT2B,CAA7B,EAUyB;AACvB,QAAM4B,kBAAkB,GAAGnE,qBAAqB,EAAhD;AAGA,QAAMoE,UAAU,GAAG,EACjB,IAAID,kBAAkB,CAACP,UAAnB,KAAkC1D,YAAY,CAAC2D,EAA/C,IAAqDM,kBAAzD,CADiB;AAEjB,OAAGnB;AAFc,GAAnB;AAIAW,EAAAA,6BAA6B,CAAC;AAACzB,IAAAA,IAAD;AAAOC,IAAAA,MAAP;AAAeY,IAAAA,UAAf;AAA2BC,IAAAA,WAAW,EAAEoB;AAAxC,GAAD,CAA7B;;AAEA,MAAI,CAACA,UAAU,CAAClB,OAAhB,EAAyB;AACvBkB,IAAAA,UAAU,CAAClB,OAAX,GAAqBjD,oBAAoB,CAACmE,UAAU,CAACN,UAAZ,CAAzC;AACD;;AAED,QAAML,QAAQ,GAAG,MAAMX,gBAAgB,CAAC;AACtCZ,IAAAA,IADsC;AAEtCC,IAAAA,MAFsC;AAGtCY,IAAAA,UAHsC;AAItCC,IAAAA,WAAW,EAAEoB,UAJyB;AAKtChC,IAAAA,SALsC;AAMtCC,IAAAA,OANsC;AAOtCC,IAAAA,MAPsC;AAQtCC,IAAAA;AARsC,GAAD,CAAvC;AAUA,MAAI1B,GAAkB,GAAG,IAAzB;AACA,MAAImD,SAAJ;;AAEA,MAAIpC,MAAJ,EAAY;AACVoC,IAAAA,SAAS,GAAGpC,MAAZ;AACAf,IAAAA,GAAG,GAAG2C,kBAAkB,CAACC,QAAD,EAAW7B,MAAX,CAAxB;AACApB,IAAAA,MAAM,CAACK,GAAD,mBAAgBe,MAAhB,oBAAN;AACD,GAJD,MAIO;AAEL,UAAMyC,kBAAkB,GAAG,CAACjE,OAAO,CAACkE,OAAT,EAAkBlE,OAAO,CAACgD,IAA1B,EAAgChD,OAAO,CAACyB,MAAxC,EAAgDzB,OAAO,CAACmE,QAAxD,CAA3B;;AACA,SAAK,MAAMC,CAAX,IAAgBH,kBAAhB,EAAoC;AAClCxD,MAAAA,GAAG,GAAG2C,kBAAkB,CAACC,QAAD,EAAWe,CAAX,CAAxB;;AACA,UAAI3D,GAAJ,EAAS;AACPmD,QAAAA,SAAS,GAAGQ,CAAZ;AACA;AACD;AACF;;AACDhE,IAAAA,MAAM,CAACK,GAAG,IAAImD,SAAR,EAAmB,iDAAnB,CAAN;AACD;;AAED,QAAM;AAAClD,IAAAA;AAAD,MAAgBsD,UAAtB;AACA,SAAO;AAACvD,IAAAA,GAAD;AAAMC,IAAAA,WAAN;AAAmBkD,IAAAA,SAAnB;AAA8BP,IAAAA;AAA9B,GAAP;AACD;;AAED,OAAO,eAAegB,OAAf,CAAuB;AAC5BvC,EAAAA,IAD4B;AAE5BC,EAAAA,MAF4B;AAG5BY,EAAAA,UAH4B;AAI5BC,EAAAA,WAJ4B;AAK5BZ,EAAAA,SAL4B;AAM5BC,EAAAA,OAN4B;AAO5BT,EAAAA,MAP4B;AAQ5BW,EAAAA;AAR4B,CAAvB,EASkB;AACvBhC,EAAAA,GAAG,CAACmE,UAAJ,CAAe,SAAf,EAA0B,gBAA1B;AACA,QAAMC,SAAS,GAAG,MAAMZ,cAAc,CAAC;AACrC7B,IAAAA,IADqC;AAErCC,IAAAA,MAFqC;AAGrCY,IAAAA,UAHqC;AAIrCC,IAAAA,WAJqC;AAKrCZ,IAAAA,SALqC;AAMrCC,IAAAA,OANqC;AAOrCT,IAAAA,MAPqC;AAQrCU,IAAAA,MAAM,EAAE,KAR6B;AASrCC,IAAAA;AATqC,GAAD,CAAtC;AAWA,SAAOoC,SAAS,CAAC7C,IAAjB;AACD;;AAGD,eAAe8C,gBAAf,CACEC,OADF,EAEE/D,WAFF,EAGEkC,WAHF,EAIET,QAJF,EAKE;AAEA,QAAM;AAACuC,IAAAA,cAAc,EAAE/B,UAAjB;AAA6BZ,IAAAA,MAA7B;AAAqCD,IAAAA;AAArC,MAA6C2C,OAAnD;AACA,QAAM;AAAChE,IAAAA,GAAD;AAAMmD,IAAAA;AAAN,MAAmB,MAAMC,aAAa,CAAC;AAC3CjB,IAAAA,WAAW,EAAE,EAAC,GAAGA,WAAJ;AAAiBlC,MAAAA;AAAjB,KAD8B;AAE3CiC,IAAAA,UAF2C;AAG3CZ,IAAAA,MAH2C;AAI3CD,IAAAA,IAJ2C;AAK3CK,IAAAA;AAL2C,GAAD,CAA5C;AASA,QAAMwC,KAAK,GAAGC,QAAQ,CAAC,IAAIC,GAAJ,CAAQpE,GAAR,EAAaqE,YAAb,CAA0BC,GAA1B,CAA8B,OAA9B,KAA0C,EAA3C,EAA+C,EAA/C,CAAtB;;AACA,MAAIJ,KAAK,IAAIF,OAAO,CAACE,KAAR,KAAkBA,KAA/B,EAAsC;AACpC,WAAO,KAAP;AACD;;AACDF,EAAAA,OAAO,CAACE,KAAR,GAAgBA,KAAhB;AAGAF,EAAAA,OAAO,CAAC/C,IAAR,GAAe,MAAMH,WAAW,CAAC;AAACd,IAAAA,GAAD;AAAMe,IAAAA,MAAM,EAAEoC,SAAd;AAAyBlD,IAAAA;AAAzB,GAAD,CAAhC;AAEA,SAAO,IAAP;AACD;;AAED,eAAesE,iBAAf,CACE;AAACC,EAAAA,QAAD;AAAWC,EAAAA;AAAX,CADF,EAEE/C,QAFF,EAGES,WAHF,EAIE;AACA,QAAMuC,QAAQ,GAAGF,QAAQ,CAACG,GAAT,CAAaX,OAAO,IAAID,gBAAgB,CAACC,OAAD,EAAUS,KAAV,EAAiBtC,WAAjB,EAA8BT,QAA9B,CAAxC,CAAjB;AACA,SAAO,MAAMkD,OAAO,CAACC,GAAR,CAAYH,QAAZ,CAAb;AACD;;AAED,OAAO,eAAeI,QAAf,CAAwB;AAC7BC,EAAAA,UAD6B;AAE7BrD,EAAAA,QAF6B;AAG7BS,EAAAA,WAH6B;AAI7B6C,EAAAA,WAJ6B;AAK7BC,EAAAA;AAL6B,CAAxB,EAYJ;AACD,QAAM3B,kBAAkB,GAAGnE,qBAAqB,EAAhD;AACA,QAAMoE,UAAU,GAAG,EACjB,IAAID,kBAAkB,CAACP,UAAnB,KAAkC1D,YAAY,CAAC2D,EAA/C,IAAqDM,kBAAzD,CADiB;AAEjB,OAAGnB;AAFc,GAAnB;AAIA,QAAM;AAAClC,IAAAA;AAAD,MAAgBsD,UAAtB;AAEA5D,EAAAA,MAAM,CAACoF,UAAD,EAAa,oEAAb,CAAN;AAEApF,EAAAA,MAAM,CAAC4D,UAAU,CAACR,UAAX,KAA0B1D,YAAY,CAAC2D,EAAxC,EAA4C,8BAA5C,CAAN;AACArD,EAAAA,MAAM,CAAC4D,UAAU,CAACN,UAAZ,EAAwB,wBAAxB,CAAN;;AACA,MAAI,CAACM,UAAU,CAAClB,OAAhB,EAAyB;AACvBkB,IAAAA,UAAU,CAAClB,OAAX,GAAqBjD,oBAAoB,CAACmE,UAAU,CAACN,UAAZ,CAAzC;AACD;;AAED,MAAI+B,WAAW,IAAIC,SAAnB,EAA8B;AAC5BtF,IAAAA,MAAM,CAACsF,SAAD,EAAY,gDAAZ,CAAN;AACAtF,IAAAA,MAAM,CAAC,OAAOsF,SAAP,KAAqB,UAAtB,EAAkC,gCAAlC,CAAN;AACAtF,IAAAA,MAAM,CACJ,OAAOqF,WAAP,KAAuB,QAAvB,IAAmCA,WAAW,GAAG,CAD7C,EAEJ,yCAFI,CAAN;AAID;;AAED,QAAMhF,GAAG,aAAMuD,UAAU,CAAClB,OAAjB,qBAAmC0C,UAAnC,CAAT;AACA,QAAMJ,GAAG,GAAG,MAAMlE,WAAW,CAAM;AAACT,IAAAA,GAAD;AAAMC,IAAAA;AAAN,GAAN,CAA7B;AAIA,MAAIiF,eAAJ;;AACA,MAAIF,WAAJ,EAAiB;AAEf,UAAMG,UAAU,GAAGC,WAAW,CAAC,YAAY;AACzC,YAAMC,OAAO,GAAG,MAAMd,iBAAiB,CAACI,GAAD,EAAMjD,QAAN,EAAgB6B,UAAhB,CAAvC;;AACA,UAAI0B,SAAS,IAAII,OAAO,CAACC,IAAR,CAAaC,CAAC,IAAIA,CAAC,KAAK,IAAxB,CAAjB,EAAgD;AAC9CN,QAAAA,SAAS,CAACxF,QAAQ,CAACkF,GAAD,CAAT,CAAT;AACD;AACF,KAL6B,EAK3BK,WAAW,GAAG,IALa,CAA9B;;AAMAE,IAAAA,eAAe,GAAG,MAAM;AACtBM,MAAAA,aAAa,CAACL,UAAD,CAAb;AACD,KAFD;AAGD;;AAGD,QAAMZ,iBAAiB,CAACI,GAAD,EAAMjD,QAAN,EAAgB6B,UAAhB,CAAvB;AACA,SAAO,EACL,GAAG9D,QAAQ,CAACkF,GAAD,CADN;AAEL,OAAG;AAACO,MAAAA;AAAD;AAFE,GAAP;AAID","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {getDefaultCredentials, buildMapsUrlFromBase, CloudNativeCredentials} from '../config';\nimport {\n API_VERSIONS,\n encodeParameter,\n Format,\n FORMATS,\n MapInstantiation,\n MapType,\n MAP_TYPES,\n SchemaField\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';\n\ninterface RequestParams {\n method?: string;\n url: string;\n accessToken?: string;\n body?: any;\n}\n\n/**\n * Request against Maps API\n */\nasync function request({method, url, accessToken, body}: RequestParams): Promise<Response> {\n const headers: Record<string, string> = {\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 accessToken,\n body\n}: RequestParams): Promise<T> {\n const response = await request({method, url, 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 schema?: boolean;\n clientId?: string;\n format?: Format;\n};\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({\n type,\n source,\n geoColumn,\n columns,\n schema,\n clientId\n}: Omit<FetchLayerDataParams, 'connection' | 'credentials'>) {\n const parameters = [encodeParameter('client', clientId || DEFAULT_CLIENT)];\n if (schema) {\n parameters.push(encodeParameter('schema', true));\n }\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (type === MAP_TYPES.TABLE) {\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n }\n\n return parameters.join('&');\n}\n\nexport async function mapInstantiation({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n schema,\n clientId\n}: FetchLayerDataParams): Promise<MapInstantiation> {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({type, source, geoColumn, columns, schema, clientId})}`;\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 });\n return await requestJson({method: 'POST', url: baseUrl, accessToken, body});\n }\n\n return await requestJson({url, 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}: 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\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 schema,\n clientId\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 schema,\n clientId\n });\n\n const data = await requestData({url, format: mapFormat, accessToken});\n const result: FetchLayerDataResult = {data, format: mapFormat};\n if (schema) {\n result.schema = metadata.schema;\n }\n\n return result;\n}\n\nasync function _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n schema,\n clientId\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({type, source, connection, credentials: localCreds});\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 schema,\n clientId\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 const {accessToken} = localCreds;\n return {url, accessToken, mapFormat, metadata};\n}\n\nexport async function getData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n clientId\n}: FetchLayerDataParams) {\n log.deprecated('getData', 'fetchLayerData')();\n const layerData = await fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n schema: false,\n clientId\n });\n return layerData.data;\n}\n\n/* global clearInterval, setInterval, URL */\nasync function _fetchMapDataset(\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials,\n clientId?: string\n) {\n // First fetch metadata\n const {connectionName: connection, source, type} = dataset;\n const {url, mapFormat} = await _fetchDataUrl({\n credentials: {...credentials, accessToken},\n connection,\n source,\n type,\n clientId\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 fillInMapDatasets(\n {datasets, token},\n clientId: string,\n credentials: CloudNativeCredentials\n) {\n const promises = datasets.map(dataset => _fetchMapDataset(dataset, token, credentials, clientId));\n return await Promise.all(promises);\n}\n\nexport async function fetchMap({\n cartoMapId,\n clientId,\n credentials,\n autoRefresh,\n onNewData\n}: {\n cartoMapId: string;\n clientId: string;\n credentials?: CloudNativeCredentials;\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, 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);\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 // Mutates map.datasets so that dataset.data contains data\n await fillInMapDatasets(map, clientId, localCreds);\n return {\n ...parseMap(map),\n ...{stopAutoRefresh}\n };\n}\n"],"file":"maps-v3-client.js"}
|