@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.
Files changed (99) hide show
  1. package/dist/dist.dev.js +1425 -306
  2. package/dist/es5/api/index.js +6 -0
  3. package/dist/es5/api/index.js.map +1 -1
  4. package/dist/es5/api/layer-map.js +32 -17
  5. package/dist/es5/api/layer-map.js.map +1 -1
  6. package/dist/es5/api/maps-api-common.js +21 -1
  7. package/dist/es5/api/maps-api-common.js.map +1 -1
  8. package/dist/es5/api/maps-client.js +15 -18
  9. package/dist/es5/api/maps-client.js.map +1 -1
  10. package/dist/es5/api/maps-v3-client.js +241 -181
  11. package/dist/es5/api/maps-v3-client.js.map +1 -1
  12. package/dist/es5/api/parseMap.js +9 -12
  13. package/dist/es5/api/parseMap.js.map +1 -1
  14. package/dist/es5/basemap.js +7 -7
  15. package/dist/es5/basemap.js.map +1 -1
  16. package/dist/es5/config.js.map +1 -1
  17. package/dist/es5/index.js +15 -1
  18. package/dist/es5/index.js.map +1 -1
  19. package/dist/es5/layers/carto-layer.js +27 -16
  20. package/dist/es5/layers/carto-layer.js.map +1 -1
  21. package/dist/es5/layers/{carto-dynamic-tile-layer.js → carto-tile-layer.js} +79 -32
  22. package/dist/es5/layers/carto-tile-layer.js.map +1 -0
  23. package/dist/es5/layers/schema/carto-tile.js +197 -0
  24. package/dist/es5/layers/schema/carto-tile.js.map +1 -0
  25. package/dist/es5/style/color-bins-style.js +1 -1
  26. package/dist/es5/style/color-bins-style.js.map +1 -1
  27. package/dist/es5/style/color-categories-style.js +1 -1
  28. package/dist/es5/style/color-categories-style.js.map +1 -1
  29. package/dist/es5/style/color-continuous-style.js +1 -1
  30. package/dist/es5/style/color-continuous-style.js.map +1 -1
  31. package/dist/es5/style/palette.js +1 -6
  32. package/dist/es5/style/palette.js.map +1 -1
  33. package/dist/es5/style/utils.js +2 -6
  34. package/dist/es5/style/utils.js.map +1 -1
  35. package/dist/es5/utils.js +13 -0
  36. package/dist/es5/utils.js.map +1 -0
  37. package/dist/esm/api/index.js +1 -1
  38. package/dist/esm/api/index.js.map +1 -1
  39. package/dist/esm/api/layer-map.js +28 -12
  40. package/dist/esm/api/layer-map.js.map +1 -1
  41. package/dist/esm/api/maps-api-common.js +19 -0
  42. package/dist/esm/api/maps-api-common.js.map +1 -1
  43. package/dist/esm/api/maps-client.js +6 -10
  44. package/dist/esm/api/maps-client.js.map +1 -1
  45. package/dist/esm/api/maps-v3-client.js +73 -38
  46. package/dist/esm/api/maps-v3-client.js.map +1 -1
  47. package/dist/esm/api/parseMap.js +9 -8
  48. package/dist/esm/api/parseMap.js.map +1 -1
  49. package/dist/esm/basemap.js +7 -7
  50. package/dist/esm/basemap.js.map +1 -1
  51. package/dist/esm/config.js.map +1 -1
  52. package/dist/esm/index.js +3 -2
  53. package/dist/esm/index.js.map +1 -1
  54. package/dist/esm/layers/carto-layer.js +25 -13
  55. package/dist/esm/layers/carto-layer.js.map +1 -1
  56. package/dist/esm/layers/carto-tile-layer.js +141 -0
  57. package/dist/esm/layers/carto-tile-layer.js.map +1 -0
  58. package/dist/esm/layers/schema/carto-tile.js +190 -0
  59. package/dist/esm/layers/schema/carto-tile.js.map +1 -0
  60. package/dist/esm/style/color-bins-style.js +1 -1
  61. package/dist/esm/style/color-bins-style.js.map +1 -1
  62. package/dist/esm/style/color-categories-style.js +1 -1
  63. package/dist/esm/style/color-categories-style.js.map +1 -1
  64. package/dist/esm/style/color-continuous-style.js +1 -1
  65. package/dist/esm/style/color-continuous-style.js.map +1 -1
  66. package/dist/esm/style/palette.js +1 -6
  67. package/dist/esm/style/palette.js.map +1 -1
  68. package/dist/esm/style/utils.js +2 -6
  69. package/dist/esm/style/utils.js.map +1 -1
  70. package/dist/esm/utils.js +5 -0
  71. package/dist/esm/utils.js.map +1 -0
  72. package/dist.min.js +14 -14
  73. package/package.json +10 -3
  74. package/src/api/{index.js → index.ts} +1 -1
  75. package/src/api/{layer-map.js → layer-map.ts} +50 -23
  76. package/src/api/maps-api-common.ts +76 -0
  77. package/src/api/{maps-client.js → maps-client.ts} +55 -20
  78. package/src/api/{maps-v3-client.js → maps-v3-client.ts} +145 -57
  79. package/src/api/{parseMap.js → parseMap.ts} +8 -7
  80. package/src/basemap.ts +10 -0
  81. package/src/{config.js → config.ts} +22 -6
  82. package/src/{index.js → index.ts} +3 -1
  83. package/src/layers/carto-layer.js +30 -19
  84. package/src/layers/carto-tile-layer.js +121 -0
  85. package/src/layers/schema/carto-tile.js +195 -0
  86. package/src/style/color-bins-style.ts +26 -0
  87. package/src/style/{color-categories-style.js → color-categories-style.ts} +10 -4
  88. package/src/style/color-continuous-style.ts +25 -0
  89. package/src/style/{palette.js → palette.ts} +18 -15
  90. package/src/style/{utils.js → utils.ts} +7 -10
  91. package/src/utils.ts +5 -0
  92. package/dist/es5/layers/carto-dynamic-tile-layer.js.map +0 -1
  93. package/dist/esm/layers/carto-dynamic-tile-layer.js +0 -97
  94. package/dist/esm/layers/carto-dynamic-tile-layer.js.map +0 -1
  95. package/src/api/maps-api-common.js +0 -34
  96. package/src/basemap.js +0 -10
  97. package/src/layers/carto-dynamic-tile-layer.js +0 -86
  98. package/src/style/color-bins-style.js +0 -21
  99. package/src/style/color-continuous-style.js +0 -20
@@ -0,0 +1,121 @@
1
+ /* global TextDecoder */
2
+ import Protobuf from 'pbf';
3
+ import {log} from '@deck.gl/core';
4
+ import {ClipExtension} from '@deck.gl/extensions';
5
+ import {MVTLayer, _getURLFromTemplate} from '@deck.gl/geo-layers';
6
+ import {GeoJsonLayer} from '@deck.gl/layers';
7
+ import {geojsonToBinary} from '@loaders.gl/gis';
8
+ import {Tile} from './schema/carto-tile';
9
+ import {TILE_FORMATS} from '../api/maps-api-common';
10
+
11
+ function parseJSON(arrayBuffer) {
12
+ return JSON.parse(new TextDecoder().decode(arrayBuffer));
13
+ }
14
+
15
+ function parsePbf(buffer) {
16
+ const pbf = new Protobuf(buffer);
17
+ const tile = Tile.read(pbf);
18
+ return tile;
19
+ }
20
+
21
+ function unpackProperties(properties) {
22
+ if (!properties || !properties.length) {
23
+ return [];
24
+ }
25
+ return properties.map(item => {
26
+ const currentRecord = {};
27
+ item.data.forEach(({key, value}) => {
28
+ currentRecord[key] = value;
29
+ });
30
+ return currentRecord;
31
+ });
32
+ }
33
+
34
+ function parseCartoTile(arrayBuffer, options) {
35
+ if (!arrayBuffer) return null;
36
+ const formatTiles = options && options.cartoTile && options.cartoTile.formatTiles;
37
+ if (formatTiles === TILE_FORMATS.GEOJSON) return geojsonToBinary(parseJSON(arrayBuffer).features);
38
+
39
+ const tile = parsePbf(arrayBuffer);
40
+
41
+ const {points, lines, polygons} = tile;
42
+ const data = {
43
+ points: {...points, properties: unpackProperties(points.properties)},
44
+ lines: {...lines, properties: unpackProperties(lines.properties)},
45
+ polygons: {...polygons, properties: unpackProperties(polygons.properties)}
46
+ };
47
+
48
+ return data;
49
+ }
50
+
51
+ const CartoTileLoader = {
52
+ name: 'CARTO Tile',
53
+ id: 'cartoTile',
54
+ module: 'carto',
55
+ extensions: ['pbf'],
56
+ mimeTypes: ['application/x-protobuf'],
57
+ category: 'geometry',
58
+ worker: false,
59
+ parse: async (arrayBuffer, options) => parseCartoTile(arrayBuffer, options),
60
+ parseSync: parseCartoTile,
61
+ options: {
62
+ cartoTile: {
63
+ // TODO change to BINARY for 8.7 prod release
64
+ formatTiles: TILE_FORMATS.GEOJSON
65
+ }
66
+ }
67
+ };
68
+
69
+ export default class CartoTileLayer extends MVTLayer {
70
+ getTileData(tile) {
71
+ let url = _getURLFromTemplate(this.state.data, tile);
72
+ if (!url) {
73
+ return Promise.reject('Invalid URL');
74
+ }
75
+
76
+ let loadOptions = this.getLoadOptions();
77
+ const {fetch, formatTiles} = this.props;
78
+ const {signal} = tile;
79
+
80
+ loadOptions = {
81
+ ...loadOptions,
82
+ mimeType: 'application/x-protobuf'
83
+ };
84
+
85
+ if (formatTiles) {
86
+ log.assert(
87
+ Object.values(TILE_FORMATS).includes(formatTiles),
88
+ `Invalid value for formatTiles: ${formatTiles}. Use value from TILE_FORMATS`
89
+ );
90
+ // eslint-disable-next-line no-undef
91
+ const newUrl = new URL(url);
92
+ newUrl.searchParams.set('formatTiles', formatTiles);
93
+ url = newUrl.toString();
94
+ loadOptions.cartoTile = {formatTiles};
95
+ }
96
+
97
+ return fetch(url, {propName: 'data', layer: this, loadOptions, signal});
98
+ }
99
+
100
+ renderSubLayers(props) {
101
+ if (props.data === null) {
102
+ return null;
103
+ }
104
+
105
+ props.autoHighlight = false;
106
+
107
+ const {
108
+ bbox: {west, south, east, north}
109
+ } = props.tile;
110
+ props.extensions = [new ClipExtension(), ...(props.extensions || [])];
111
+ props.clipBounds = [west, south, east, north];
112
+
113
+ const subLayer = new GeoJsonLayer({
114
+ ...props
115
+ });
116
+ return subLayer;
117
+ }
118
+ }
119
+
120
+ CartoTileLayer.layerName = 'CartoTileLayer';
121
+ CartoTileLayer.defaultProps = {...MVTLayer.defaultProps, loaders: [CartoTileLoader]};
@@ -0,0 +1,195 @@
1
+ // KeyValueObject ========================================
2
+
3
+ const KeyValueObject = {};
4
+
5
+ KeyValueObject.read = function (pbf, end) {
6
+ return pbf.readFields(KeyValueObject._readField, {key: '', value: ''}, end);
7
+ };
8
+ KeyValueObject._readField = function (tag, obj, pbf) {
9
+ if (tag === 1) obj.key = pbf.readString();
10
+ else if (tag === 2) obj.value = pbf.readString();
11
+ };
12
+
13
+ // Properties ========================================
14
+
15
+ const Properties = {};
16
+
17
+ Properties.read = function (pbf, end) {
18
+ return pbf.readFields(Properties._readField, {data: []}, end);
19
+ };
20
+ Properties._readField = function (tag, obj, pbf) {
21
+ if (tag === 1) obj.data.push(KeyValueObject.read(pbf, pbf.readVarint() + pbf.pos));
22
+ };
23
+
24
+ // Doubles ========================================
25
+
26
+ const Doubles = {};
27
+
28
+ Doubles.read = function (pbf, end) {
29
+ // TODO perhaps we can do better and directly map from the source
30
+ // ArrayBuffer using ArrayBuffer.slice()
31
+ const {value, size} = pbf.readFields(Doubles._readField, {value: [], size: 0}, end);
32
+ return {value: new Float32Array(value), size};
33
+ };
34
+ Doubles._readField = function (tag, obj, pbf) {
35
+ if (tag === 1) pbf.readPackedDouble(obj.value);
36
+ else if (tag === 2) obj.size = pbf.readVarint(true);
37
+ };
38
+
39
+ // Ints ========================================
40
+
41
+ const Ints = {};
42
+
43
+ Ints.read = function (pbf, end) {
44
+ const {value, size} = pbf.readFields(Ints._readField, {value: [], size: 0}, end);
45
+ return {value: new Uint32Array(value), size};
46
+ };
47
+ Ints._readField = function (tag, obj, pbf) {
48
+ if (tag === 1) pbf.readPackedVarint(obj.value);
49
+ else if (tag === 2) obj.size = pbf.readVarint(true);
50
+ };
51
+
52
+ // NumericProp ========================================
53
+
54
+ const NumericProp = {};
55
+
56
+ NumericProp.read = function (pbf, end) {
57
+ return pbf.readFields(NumericProp._readField, {value: []}, end);
58
+ };
59
+ NumericProp._readField = function (tag, obj, pbf) {
60
+ if (tag === 1) pbf.readPackedDouble(obj.value);
61
+ };
62
+
63
+ // NumericPropKeyValue ========================================
64
+
65
+ const NumericPropKeyValue = {};
66
+
67
+ NumericPropKeyValue.read = function (pbf, end) {
68
+ return pbf.readFields(NumericPropKeyValue._readField, {key: '', value: null}, end);
69
+ };
70
+ NumericPropKeyValue._readField = function (tag, obj, pbf) {
71
+ if (tag === 1) obj.key = pbf.readString();
72
+ else if (tag === 2) obj.value = NumericProp.read(pbf, pbf.readVarint() + pbf.pos);
73
+ };
74
+
75
+ // NumericProp._FieldEntry1 ========================================
76
+
77
+ NumericProp._FieldEntry1 = {};
78
+
79
+ NumericProp._FieldEntry1.read = function (pbf, end) {
80
+ return pbf.readFields(NumericProp._FieldEntry1._readField, {key: '', value: 0}, end);
81
+ };
82
+ NumericProp._FieldEntry1._readField = function (tag, obj, pbf) {
83
+ if (tag === 1) obj.key = pbf.readString();
84
+ else if (tag === 2) obj.value = pbf.readDouble();
85
+ };
86
+
87
+ // StringProp ========================================
88
+
89
+ const StringProp = {};
90
+
91
+ StringProp.read = function (pbf, end) {
92
+ return pbf.readFields(StringProp._readField, {value: []}, end);
93
+ };
94
+ StringProp._readField = function (tag, obj, pbf) {
95
+ if (tag === 1) obj.value.push(pbf.readString());
96
+ };
97
+
98
+ // Points ========================================
99
+
100
+ const Points = {};
101
+
102
+ Points.read = function (pbf, end) {
103
+ return pbf.readFields(
104
+ Points._readField,
105
+ {positions: null, globalFeatureIds: null, featureIds: null, properties: [], numericProps: {}},
106
+ end
107
+ );
108
+ };
109
+ Points._readField = function (tag, obj, pbf) {
110
+ if (tag === 1) obj.positions = Doubles.read(pbf, pbf.readVarint() + pbf.pos);
111
+ else if (tag === 2) obj.globalFeatureIds = Ints.read(pbf, pbf.readVarint() + pbf.pos);
112
+ else if (tag === 3) obj.featureIds = Ints.read(pbf, pbf.readVarint() + pbf.pos);
113
+ else if (tag === 4) obj.properties.push(Properties.read(pbf, pbf.readVarint() + pbf.pos));
114
+ else if (tag === 5) {
115
+ const entry = NumericPropKeyValue.read(pbf, pbf.readVarint() + pbf.pos);
116
+ obj.numericProps[entry.key] = entry.value;
117
+ }
118
+ };
119
+
120
+ // Lines ========================================
121
+
122
+ const Lines = {};
123
+
124
+ Lines.read = function (pbf, end) {
125
+ return pbf.readFields(
126
+ Lines._readField,
127
+ {
128
+ positions: null,
129
+ pathIndices: null,
130
+ globalFeatureIds: null,
131
+ featureIds: null,
132
+ properties: [],
133
+ numericProps: {}
134
+ },
135
+ end
136
+ );
137
+ };
138
+ Lines._readField = function (tag, obj, pbf) {
139
+ if (tag === 1) obj.positions = Doubles.read(pbf, pbf.readVarint() + pbf.pos);
140
+ else if (tag === 2) obj.pathIndices = Ints.read(pbf, pbf.readVarint() + pbf.pos);
141
+ else if (tag === 3) obj.globalFeatureIds = Ints.read(pbf, pbf.readVarint() + pbf.pos);
142
+ else if (tag === 4) obj.featureIds = Ints.read(pbf, pbf.readVarint() + pbf.pos);
143
+ else if (tag === 5) obj.properties.push(Properties.read(pbf, pbf.readVarint() + pbf.pos));
144
+ else if (tag === 6) {
145
+ const entry = NumericPropKeyValue.read(pbf, pbf.readVarint() + pbf.pos);
146
+ obj.numericProps[entry.key] = entry.value;
147
+ }
148
+ };
149
+
150
+ // Polygons ========================================
151
+
152
+ const Polygons = {};
153
+
154
+ Polygons.read = function (pbf, end) {
155
+ return pbf.readFields(
156
+ Polygons._readField,
157
+ {
158
+ positions: null,
159
+ polygonIndices: null,
160
+ globalFeatureIds: null,
161
+ featureIds: null,
162
+ primitivePolygonIndices: null,
163
+ triangles: null,
164
+ properties: [],
165
+ numericProps: {}
166
+ },
167
+ end
168
+ );
169
+ };
170
+ Polygons._readField = function (tag, obj, pbf) {
171
+ if (tag === 1) obj.positions = Doubles.read(pbf, pbf.readVarint() + pbf.pos);
172
+ else if (tag === 2) obj.polygonIndices = Ints.read(pbf, pbf.readVarint() + pbf.pos);
173
+ else if (tag === 3) obj.globalFeatureIds = Ints.read(pbf, pbf.readVarint() + pbf.pos);
174
+ else if (tag === 4) obj.featureIds = Ints.read(pbf, pbf.readVarint() + pbf.pos);
175
+ else if (tag === 5) obj.primitivePolygonIndices = Ints.read(pbf, pbf.readVarint() + pbf.pos);
176
+ else if (tag === 6) obj.triangles = Ints.read(pbf, pbf.readVarint() + pbf.pos);
177
+ else if (tag === 7) obj.properties.push(Properties.read(pbf, pbf.readVarint() + pbf.pos));
178
+ else if (tag === 8) {
179
+ const entry = NumericPropKeyValue.read(pbf, pbf.readVarint() + pbf.pos);
180
+ obj.numericProps[entry.key] = entry.value;
181
+ }
182
+ };
183
+
184
+ // Tile ========================================
185
+
186
+ export const Tile = {};
187
+
188
+ Tile.read = function (pbf, end) {
189
+ return pbf.readFields(Tile._readField, {points: null, lines: null, polygons: null}, end);
190
+ };
191
+ Tile._readField = function (tag, obj, pbf) {
192
+ if (tag === 1) obj.points = Points.read(pbf, pbf.readVarint() + pbf.pos);
193
+ else if (tag === 2) obj.lines = Lines.read(pbf, pbf.readVarint() + pbf.pos);
194
+ else if (tag === 3) obj.polygons = Polygons.read(pbf, pbf.readVarint() + pbf.pos);
195
+ };
@@ -0,0 +1,26 @@
1
+ import {scaleThreshold} from 'd3-scale';
2
+ import getPalette, {Color, DEFAULT_PALETTE, NULL_COLOR} from './palette';
3
+ import {assert, AttributeSelector, getAttrValue} from './utils';
4
+
5
+ export default function colorBins({
6
+ attr,
7
+ domain,
8
+ colors = DEFAULT_PALETTE,
9
+ nullColor = NULL_COLOR
10
+ }: {
11
+ attr: AttributeSelector;
12
+ domain: number[];
13
+ colors?: string | Color[];
14
+ nullColor?: Color;
15
+ }): AttributeSelector {
16
+ assert(Array.isArray(domain), 'Expected "domain" to be an array of numbers');
17
+
18
+ const palette = typeof colors === 'string' ? getPalette(colors, domain.length + 1) : colors;
19
+
20
+ const color = scaleThreshold<number, Color>().domain(domain).range(palette);
21
+
22
+ return d => {
23
+ const value = getAttrValue(attr, d);
24
+ return typeof value === 'number' && Number.isFinite(value) ? color(value) : nullColor;
25
+ };
26
+ }
@@ -1,5 +1,5 @@
1
- import getPalette, {DEFAULT_PALETTE, NULL_COLOR, OTHERS_COLOR} from './palette';
2
- import {assert, getAttrValue} from './utils';
1
+ import getPalette, {Color, DEFAULT_PALETTE, NULL_COLOR, OTHERS_COLOR} from './palette';
2
+ import {assert, AttributeSelector, getAttrValue} from './utils';
3
3
 
4
4
  export default function colorCategories({
5
5
  attr,
@@ -7,7 +7,13 @@ export default function colorCategories({
7
7
  colors = DEFAULT_PALETTE,
8
8
  nullColor = NULL_COLOR,
9
9
  othersColor = OTHERS_COLOR
10
- }) {
10
+ }: {
11
+ attr: AttributeSelector;
12
+ domain: number[];
13
+ colors: string | Color[];
14
+ nullColor?: Color;
15
+ othersColor?: Color;
16
+ }): AttributeSelector {
11
17
  assert(Array.isArray(domain), 'Expected "domain" to be an array of numbers or strings');
12
18
 
13
19
  const colorsByCategory = {};
@@ -19,7 +25,7 @@ export default function colorCategories({
19
25
 
20
26
  return d => {
21
27
  const value = getAttrValue(attr, d);
22
- return Number.isFinite(value) || typeof value === 'string'
28
+ return (typeof value === 'number' && Number.isFinite(value)) || typeof value === 'string'
23
29
  ? colorsByCategory[value] || othersColor
24
30
  : nullColor;
25
31
  };
@@ -0,0 +1,25 @@
1
+ import {scaleLinear} from 'd3-scale';
2
+ import getPalette, {Color, DEFAULT_PALETTE, NULL_COLOR} from './palette';
3
+ import {assert, AttributeSelector, getAttrValue} from './utils';
4
+
5
+ export default function colorContinuous({
6
+ attr,
7
+ domain,
8
+ colors = DEFAULT_PALETTE,
9
+ nullColor = NULL_COLOR
10
+ }: {
11
+ attr: AttributeSelector;
12
+ domain: number[];
13
+ colors?: string | Color[];
14
+ nullColor?: Color;
15
+ }): AttributeSelector {
16
+ assert(Array.isArray(domain), 'Expected "domain" to be an array of numbers');
17
+
18
+ const palette = typeof colors === 'string' ? getPalette(colors, domain.length) : colors;
19
+ const color = scaleLinear<Color>().domain(domain).range(palette);
20
+
21
+ return d => {
22
+ const value = getAttrValue(attr, d);
23
+ return typeof value === 'number' && Number.isFinite(value) ? color(value) : nullColor;
24
+ };
25
+ }
@@ -1,12 +1,19 @@
1
1
  import * as cartoColors from 'cartocolor';
2
2
  import {assert} from './utils';
3
3
 
4
+ export type Color = [r: number, b: number, g: number, a?: number];
5
+
4
6
  export const DEFAULT_PALETTE = 'PurpOr';
5
- export const NULL_COLOR = [204, 204, 204];
6
- export const OTHERS_COLOR = [119, 119, 119];
7
+ export const NULL_COLOR: Color = [204, 204, 204];
8
+ export const OTHERS_COLOR: Color = [119, 119, 119];
9
+
10
+ interface CartoColorsPalette {
11
+ tags?: string[];
12
+ [key: number]: string[];
13
+ }
7
14
 
8
- export default function getPalette(name, numCategories) {
9
- const palette = cartoColors[name];
15
+ export default function getPalette(name: string, numCategories: number): Color[] {
16
+ const palette: CartoColorsPalette | undefined = cartoColors[name];
10
17
  let paletteIndex = numCategories;
11
18
 
12
19
  assert(palette, `Palette "${name}" not found. Expected a CARTOColors string`);
@@ -33,7 +40,7 @@ export default function getPalette(name, numCategories) {
33
40
  return colors.map(c => hexToRgb(c));
34
41
  }
35
42
 
36
- export function hexToRgb(hex) {
43
+ export function hexToRgb(hex: string): Color {
37
44
  // Evaluate #ABC
38
45
  let result = /^#?([a-f\d]{1})([a-f\d]{1})([a-f\d]{1})$/i.exec(hex);
39
46
 
@@ -68,16 +75,12 @@ export function hexToRgb(hex) {
68
75
  // Evaluate #ABCDEFAF
69
76
  result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
70
77
 
71
- if (result) {
72
- return [
73
- parseInt(result[1], 16),
74
- parseInt(result[2], 16),
75
- parseInt(result[3], 16),
76
- parseInt(result[4], 16)
77
- ];
78
- }
79
-
80
78
  assert(result, `Hexadecimal color "${hex}" was not parsed correctly`);
81
79
 
82
- return NULL_COLOR;
80
+ return [
81
+ parseInt(result[1], 16),
82
+ parseInt(result[2], 16),
83
+ parseInt(result[3], 16),
84
+ parseInt(result[4], 16)
85
+ ];
83
86
  }
@@ -1,23 +1,20 @@
1
1
  const ALLOWED_ATTR_TYPES = Object.freeze(['function', 'string']);
2
2
 
3
- export function getAttrValue(attr, d) {
3
+ type Row = {properties: Record<string, unknown>};
4
+ export type AttributeSelector = string | ((d: Row) => unknown);
5
+
6
+ export function getAttrValue(attr: AttributeSelector, d: Row): unknown {
4
7
  assert(typeof d === 'object', 'Expected "data" to be an object');
5
8
  assert(ALLOWED_ATTR_TYPES.includes(typeof attr), 'Expected "attr" to be a function or string');
6
9
 
7
10
  // Is function
8
- if (typeof attr === ALLOWED_ATTR_TYPES[0]) {
11
+ if (typeof attr === 'function') {
9
12
  return attr(d);
10
13
  }
11
-
12
- // Is string
13
- if (typeof attr === ALLOWED_ATTR_TYPES[1]) {
14
- return d.properties[attr];
15
- }
16
-
17
- return {};
14
+ return d.properties[attr];
18
15
  }
19
16
 
20
- export function assert(condition, message = '') {
17
+ export function assert(condition, message = ''): asserts condition {
21
18
  if (!condition) {
22
19
  throw new Error(`CARTO style error: ${message}`);
23
20
  }
package/src/utils.ts ADDED
@@ -0,0 +1,5 @@
1
+ import {log} from '@deck.gl/core';
2
+
3
+ export function assert(condition: unknown, message?: string): asserts condition {
4
+ log.assert(condition, message);
5
+ }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/layers/carto-dynamic-tile-layer.js"],"names":["parseJSON","arrayBuffer","JSON","parse","TextDecoder","decode","parseCartoDynamicTile","options","formatTiles","cartoDynamicTile","features","CartoDynamicTileLoader","name","id","module","extensions","mimeTypes","category","worker","parseSync","CartoDynamicTileLayer","tile","url","state","data","Promise","reject","loadOptions","getLoadOptions","props","fetch","signal","mimeType","log","assert","includes","cartoBinaryTile","propName","layer","autoHighlight","bbox","west","south","east","north","ClipExtension","clipBounds","subLayer","GeoJsonLayer","MVTLayer","layerName","defaultProps","loaders"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;;;;;;;AAEA,SAASA,SAAT,CAAmBC,WAAnB,EAAgC;AAC9B,SAAOC,IAAI,CAACC,KAAL,CAAW,IAAIC,WAAJ,GAAkBC,MAAlB,CAAyBJ,WAAzB,CAAX,CAAP;AACD;;AAED,SAASK,qBAAT,CAA+BL,WAA/B,EAA4CM,OAA5C,EAAqD;AACnD,MAAI,CAACN,WAAL,EAAkB,OAAO,IAAP;AAClB,MAAMO,WAAW,GAAGD,OAAO,IAAIA,OAAO,CAACE,gBAAnB,IAAuCF,OAAO,CAACE,gBAAR,CAAyBD,WAApF;AACA,MAAIA,WAAW,KAAK,SAApB,EAA+B,OAAO,0BAAgBR,SAAS,CAACC,WAAD,CAAT,CAAuBS,QAAvC,CAAP;AAC/B,SAAO,IAAP;AACD;;AAED,IAAMC,sBAAsB,GAAG;AAC7BC,EAAAA,IAAI,EAAE,oBADuB;AAE7BC,EAAAA,EAAE,EAAE,kBAFyB;AAG7BC,EAAAA,MAAM,EAAE,OAHqB;AAI7BC,EAAAA,UAAU,EAAE,CAAC,KAAD,CAJiB;AAK7BC,EAAAA,SAAS,EAAE,CAAC,wBAAD,CALkB;AAM7BC,EAAAA,QAAQ,EAAE,UANmB;AAO7BC,EAAAA,MAAM,EAAE,KAPqB;AAQ7Bf,EAAAA,KAAK;AAAA,2EAAE,iBAAOF,WAAP,EAAoBM,OAApB;AAAA;AAAA;AAAA;AAAA;AAAA,+CAAgCD,qBAAqB,CAACL,WAAD,EAAcM,OAAd,CAArD;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAAF;;AAAA;AAAA;AAAA;;AAAA;AAAA,KARwB;AAS7BY,EAAAA,SAAS,EAAEb,qBATkB;AAU7BC,EAAAA,OAAO,EAAE;AACPE,IAAAA,gBAAgB,EAAE;AAChBD,MAAAA,WAAW,EAAE;AADG;AADX;AAVoB,CAA/B;;IAiBqBY,qB;;;;;;;;;;;;WACnB,qBAAYC,IAAZ,EAAkB;AAChB,UAAIC,GAAG,GAAG,oCAAoB,KAAKC,KAAL,CAAWC,IAA/B,EAAqCH,IAArC,CAAV;;AACA,UAAI,CAACC,GAAL,EAAU;AACR,eAAOG,OAAO,CAACC,MAAR,CAAe,aAAf,CAAP;AACD;;AAED,UAAIC,WAAW,GAAG,KAAKC,cAAL,EAAlB;AACA,wBAA6B,KAAKC,KAAlC;AAAA,UAAOC,KAAP,eAAOA,KAAP;AAAA,UAActB,WAAd,eAAcA,WAAd;AACA,UAAOuB,MAAP,GAAiBV,IAAjB,CAAOU,MAAP;AAEAJ,MAAAA,WAAW,mCACNA,WADM;AAETK,QAAAA,QAAQ,EAAE;AAFD,QAAX;;AAKA,UAAIxB,WAAJ,EAAiB;AACfyB,kBAAIC,MAAJ,CACE,CAAC,SAAD,EAAYC,QAAZ,CAAqB3B,WAArB,CADF,2CAEoCA,WAFpC;;AAIAc,QAAAA,GAAG,eAAQ,oCAAgB,aAAhB,EAA+Bd,WAA/B,CAAR,CAAH;AACAmB,QAAAA,WAAW,CAACS,eAAZ,GAA8B;AAAC5B,UAAAA,WAAW,EAAXA;AAAD,SAA9B;AACD;;AAED,aAAOsB,KAAK,CAACR,GAAD,EAAM;AAACe,QAAAA,QAAQ,EAAE,MAAX;AAAmBC,QAAAA,KAAK,EAAE,IAA1B;AAAgCX,QAAAA,WAAW,EAAXA,WAAhC;AAA6CI,QAAAA,MAAM,EAANA;AAA7C,OAAN,CAAZ;AACD;;;WAED,yBAAgBF,KAAhB,EAAuB;AACrB,UAAIA,KAAK,CAACL,IAAN,KAAe,IAAnB,EAAyB;AACvB,eAAO,IAAP;AACD;;AAEDK,MAAAA,KAAK,CAACU,aAAN,GAAsB,KAAtB;AAEA,6BAEIV,KAAK,CAACR,IAFV,CACEmB,IADF;AAAA,UACSC,IADT,oBACSA,IADT;AAAA,UACeC,KADf,oBACeA,KADf;AAAA,UACsBC,IADtB,oBACsBA,IADtB;AAAA,UAC4BC,KAD5B,oBAC4BA,KAD5B;AAGAf,MAAAA,KAAK,CAACd,UAAN,GAAmB,CAAC,IAAI8B,yBAAJ,EAAD,CAAnB;AACAhB,MAAAA,KAAK,CAACiB,UAAN,GAAmB,CAACL,IAAD,EAAOC,KAAP,EAAcC,IAAd,EAAoBC,KAApB,CAAnB;AAEA,UAAMG,QAAQ,GAAG,IAAIC,oBAAJ,mBACZnB,KADY,EAAjB;AAGA,aAAOkB,QAAP;AACD;;;EA7CgDE,mB;;;AAgDnD7B,qBAAqB,CAAC8B,SAAtB,GAAkC,uBAAlC;AACA9B,qBAAqB,CAAC+B,YAAtB,mCAAyCF,oBAASE,YAAlD;AAAgEC,EAAAA,OAAO,EAAE,CAACzC,sBAAD;AAAzE","sourcesContent":["/* global TextDecoder */\nimport {log} from '@deck.gl/core';\nimport {ClipExtension} from '@deck.gl/extensions';\nimport {MVTLayer, _getURLFromTemplate} from '@deck.gl/geo-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {geojsonToBinary} from '@loaders.gl/gis';\nimport {encodeParameter} from '../api/maps-api-common';\n\nfunction parseJSON(arrayBuffer) {\n return JSON.parse(new TextDecoder().decode(arrayBuffer));\n}\n\nfunction parseCartoDynamicTile(arrayBuffer, options) {\n if (!arrayBuffer) return null;\n const formatTiles = options && options.cartoDynamicTile && options.cartoDynamicTile.formatTiles;\n if (formatTiles === 'geojson') return geojsonToBinary(parseJSON(arrayBuffer).features);\n return null;\n}\n\nconst CartoDynamicTileLoader = {\n name: 'CARTO Dynamic Tile',\n id: 'cartoDynamicTile',\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: ['application/x-protobuf'],\n category: 'geometry',\n worker: false,\n parse: async (arrayBuffer, options) => parseCartoDynamicTile(arrayBuffer, options),\n parseSync: parseCartoDynamicTile,\n options: {\n cartoDynamicTile: {\n formatTiles: 'geojson'\n }\n }\n};\n\nexport default class CartoDynamicTileLayer extends MVTLayer {\n getTileData(tile) {\n let url = _getURLFromTemplate(this.state.data, tile);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n\n let loadOptions = this.getLoadOptions();\n const {fetch, formatTiles} = this.props;\n const {signal} = tile;\n\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/x-protobuf'\n };\n\n if (formatTiles) {\n log.assert(\n ['geojson'].includes(formatTiles),\n `Invalid value for formatTiles: ${formatTiles}`\n );\n url += `&${encodeParameter('formatTiles', formatTiles)}`;\n loadOptions.cartoBinaryTile = {formatTiles};\n }\n\n return fetch(url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n renderSubLayers(props) {\n if (props.data === null) {\n return null;\n }\n\n props.autoHighlight = false;\n\n const {\n bbox: {west, south, east, north}\n } = props.tile;\n props.extensions = [new ClipExtension()];\n props.clipBounds = [west, south, east, north];\n\n const subLayer = new GeoJsonLayer({\n ...props\n });\n return subLayer;\n }\n}\n\nCartoDynamicTileLayer.layerName = 'CartoDynamicTileLayer';\nCartoDynamicTileLayer.defaultProps = {...MVTLayer.defaultProps, loaders: [CartoDynamicTileLoader]};\n"],"file":"carto-dynamic-tile-layer.js"}
@@ -1,97 +0,0 @@
1
- import { log } from '@deck.gl/core';
2
- import { ClipExtension } from '@deck.gl/extensions';
3
- import { MVTLayer, _getURLFromTemplate } from '@deck.gl/geo-layers';
4
- import { GeoJsonLayer } from '@deck.gl/layers';
5
- import { geojsonToBinary } from '@loaders.gl/gis';
6
- import { encodeParameter } from '../api/maps-api-common';
7
-
8
- function parseJSON(arrayBuffer) {
9
- return JSON.parse(new TextDecoder().decode(arrayBuffer));
10
- }
11
-
12
- function parseCartoDynamicTile(arrayBuffer, options) {
13
- if (!arrayBuffer) return null;
14
- const formatTiles = options && options.cartoDynamicTile && options.cartoDynamicTile.formatTiles;
15
- if (formatTiles === 'geojson') return geojsonToBinary(parseJSON(arrayBuffer).features);
16
- return null;
17
- }
18
-
19
- const CartoDynamicTileLoader = {
20
- name: 'CARTO Dynamic Tile',
21
- id: 'cartoDynamicTile',
22
- module: 'carto',
23
- extensions: ['pbf'],
24
- mimeTypes: ['application/x-protobuf'],
25
- category: 'geometry',
26
- worker: false,
27
- parse: async (arrayBuffer, options) => parseCartoDynamicTile(arrayBuffer, options),
28
- parseSync: parseCartoDynamicTile,
29
- options: {
30
- cartoDynamicTile: {
31
- formatTiles: 'geojson'
32
- }
33
- }
34
- };
35
- export default class CartoDynamicTileLayer extends MVTLayer {
36
- getTileData(tile) {
37
- let url = _getURLFromTemplate(this.state.data, tile);
38
-
39
- if (!url) {
40
- return Promise.reject('Invalid URL');
41
- }
42
-
43
- let loadOptions = this.getLoadOptions();
44
- const {
45
- fetch,
46
- formatTiles
47
- } = this.props;
48
- const {
49
- signal
50
- } = tile;
51
- loadOptions = { ...loadOptions,
52
- mimeType: 'application/x-protobuf'
53
- };
54
-
55
- if (formatTiles) {
56
- log.assert(['geojson'].includes(formatTiles), "Invalid value for formatTiles: ".concat(formatTiles));
57
- url += "&".concat(encodeParameter('formatTiles', formatTiles));
58
- loadOptions.cartoBinaryTile = {
59
- formatTiles
60
- };
61
- }
62
-
63
- return fetch(url, {
64
- propName: 'data',
65
- layer: this,
66
- loadOptions,
67
- signal
68
- });
69
- }
70
-
71
- renderSubLayers(props) {
72
- if (props.data === null) {
73
- return null;
74
- }
75
-
76
- props.autoHighlight = false;
77
- const {
78
- bbox: {
79
- west,
80
- south,
81
- east,
82
- north
83
- }
84
- } = props.tile;
85
- props.extensions = [new ClipExtension()];
86
- props.clipBounds = [west, south, east, north];
87
- const subLayer = new GeoJsonLayer({ ...props
88
- });
89
- return subLayer;
90
- }
91
-
92
- }
93
- CartoDynamicTileLayer.layerName = 'CartoDynamicTileLayer';
94
- CartoDynamicTileLayer.defaultProps = { ...MVTLayer.defaultProps,
95
- loaders: [CartoDynamicTileLoader]
96
- };
97
- //# sourceMappingURL=carto-dynamic-tile-layer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/layers/carto-dynamic-tile-layer.js"],"names":["log","ClipExtension","MVTLayer","_getURLFromTemplate","GeoJsonLayer","geojsonToBinary","encodeParameter","parseJSON","arrayBuffer","JSON","parse","TextDecoder","decode","parseCartoDynamicTile","options","formatTiles","cartoDynamicTile","features","CartoDynamicTileLoader","name","id","module","extensions","mimeTypes","category","worker","parseSync","CartoDynamicTileLayer","getTileData","tile","url","state","data","Promise","reject","loadOptions","getLoadOptions","fetch","props","signal","mimeType","assert","includes","cartoBinaryTile","propName","layer","renderSubLayers","autoHighlight","bbox","west","south","east","north","clipBounds","subLayer","layerName","defaultProps","loaders"],"mappings":"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","sourcesContent":["/* global TextDecoder */\nimport {log} from '@deck.gl/core';\nimport {ClipExtension} from '@deck.gl/extensions';\nimport {MVTLayer, _getURLFromTemplate} from '@deck.gl/geo-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {geojsonToBinary} from '@loaders.gl/gis';\nimport {encodeParameter} from '../api/maps-api-common';\n\nfunction parseJSON(arrayBuffer) {\n return JSON.parse(new TextDecoder().decode(arrayBuffer));\n}\n\nfunction parseCartoDynamicTile(arrayBuffer, options) {\n if (!arrayBuffer) return null;\n const formatTiles = options && options.cartoDynamicTile && options.cartoDynamicTile.formatTiles;\n if (formatTiles === 'geojson') return geojsonToBinary(parseJSON(arrayBuffer).features);\n return null;\n}\n\nconst CartoDynamicTileLoader = {\n name: 'CARTO Dynamic Tile',\n id: 'cartoDynamicTile',\n module: 'carto',\n extensions: ['pbf'],\n mimeTypes: ['application/x-protobuf'],\n category: 'geometry',\n worker: false,\n parse: async (arrayBuffer, options) => parseCartoDynamicTile(arrayBuffer, options),\n parseSync: parseCartoDynamicTile,\n options: {\n cartoDynamicTile: {\n formatTiles: 'geojson'\n }\n }\n};\n\nexport default class CartoDynamicTileLayer extends MVTLayer {\n getTileData(tile) {\n let url = _getURLFromTemplate(this.state.data, tile);\n if (!url) {\n return Promise.reject('Invalid URL');\n }\n\n let loadOptions = this.getLoadOptions();\n const {fetch, formatTiles} = this.props;\n const {signal} = tile;\n\n loadOptions = {\n ...loadOptions,\n mimeType: 'application/x-protobuf'\n };\n\n if (formatTiles) {\n log.assert(\n ['geojson'].includes(formatTiles),\n `Invalid value for formatTiles: ${formatTiles}`\n );\n url += `&${encodeParameter('formatTiles', formatTiles)}`;\n loadOptions.cartoBinaryTile = {formatTiles};\n }\n\n return fetch(url, {propName: 'data', layer: this, loadOptions, signal});\n }\n\n renderSubLayers(props) {\n if (props.data === null) {\n return null;\n }\n\n props.autoHighlight = false;\n\n const {\n bbox: {west, south, east, north}\n } = props.tile;\n props.extensions = [new ClipExtension()];\n props.clipBounds = [west, south, east, north];\n\n const subLayer = new GeoJsonLayer({\n ...props\n });\n return subLayer;\n }\n}\n\nCartoDynamicTileLayer.layerName = 'CartoDynamicTileLayer';\nCartoDynamicTileLayer.defaultProps = {...MVTLayer.defaultProps, loaders: [CartoDynamicTileLoader]};\n"],"file":"carto-dynamic-tile-layer.js"}
@@ -1,34 +0,0 @@
1
- export const DEFAULT_USER_COMPONENT_IN_URL = '{user}';
2
- export const DEFAULT_REGION_COMPONENT_IN_URL = '{region}';
3
-
4
- export const API_VERSIONS = {
5
- V1: 'v1',
6
- V2: 'v2',
7
- V3: 'v3'
8
- };
9
-
10
- export const DEFAULT_MAPS_URL_FORMAT = {
11
- [API_VERSIONS.V1]: `https://${DEFAULT_USER_COMPONENT_IN_URL}.carto.com/api/v1/map`,
12
- [API_VERSIONS.V2]: `https://maps-api-v2.${DEFAULT_REGION_COMPONENT_IN_URL}.carto.com/user/${DEFAULT_USER_COMPONENT_IN_URL}`
13
- };
14
-
15
- export const MAP_TYPES = {
16
- QUERY: 'query',
17
- TABLE: 'table',
18
- TILESET: 'tileset'
19
- };
20
-
21
- // AVAILABLE FORMATS
22
- export const FORMATS = {
23
- GEOJSON: 'geojson',
24
- NDJSON: 'ndjson',
25
- TILEJSON: 'tilejson',
26
- JSON: 'json'
27
- };
28
-
29
- /**
30
- * Simple encode parameter
31
- */
32
- export function encodeParameter(name, value) {
33
- return `${name}=${encodeURIComponent(value)}`;
34
- }
package/src/basemap.js DELETED
@@ -1,10 +0,0 @@
1
- const base_url = 'https://basemaps.cartocdn.com/gl/{basemap}-gl-style/style.json';
2
-
3
- export default {
4
- VOYAGER: base_url.replace('{basemap}', 'voyager'),
5
- POSITRON: base_url.replace('{basemap}', 'positron'),
6
- DARK_MATTER: base_url.replace('{basemap}', 'dark-matter'),
7
- VOYAGER_NOLABELS: base_url.replace('{basemap}', 'voyager-nolabels'),
8
- POSITRON_NOLABELS: base_url.replace('{basemap}', 'positron-nolabels'),
9
- DARK_MATTER_NOLABELS: base_url.replace('{basemap}', 'dark-matter-nolabels')
10
- };