@deck.gl/carto 8.8.3 → 8.8.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 (96) hide show
  1. package/dist/dist.dev.js +1382 -1153
  2. package/dist/es5/api/index.js.map +1 -1
  3. package/dist/es5/api/layer-map.js +104 -17
  4. package/dist/es5/api/layer-map.js.map +1 -1
  5. package/dist/es5/api/maps-api-common.js.map +1 -1
  6. package/dist/es5/api/maps-v3-client.js +213 -47
  7. package/dist/es5/api/maps-v3-client.js.map +1 -1
  8. package/dist/es5/api/parseMap.js +14 -4
  9. package/dist/es5/api/parseMap.js.map +1 -1
  10. package/dist/es5/config.js +11 -2
  11. package/dist/es5/config.js.map +1 -1
  12. package/dist/es5/index.js.map +1 -1
  13. package/dist/es5/layers/carto-layer.js +10 -23
  14. package/dist/es5/layers/carto-layer.js.map +1 -1
  15. package/dist/es5/style/color-bins-style.js.map +1 -1
  16. package/dist/es5/style/color-categories-style.js.map +1 -1
  17. package/dist/es5/style/color-continuous-style.js.map +1 -1
  18. package/dist/es5/style/utils.js +3 -1
  19. package/dist/es5/style/utils.js.map +1 -1
  20. package/dist/esm/api/index.js.map +1 -1
  21. package/dist/esm/api/layer-map.js +79 -14
  22. package/dist/esm/api/layer-map.js.map +1 -1
  23. package/dist/esm/api/maps-api-common.js.map +1 -1
  24. package/dist/esm/api/maps-v3-client.js +111 -11
  25. package/dist/esm/api/maps-v3-client.js.map +1 -1
  26. package/dist/esm/api/parseMap.js +18 -4
  27. package/dist/esm/api/parseMap.js.map +1 -1
  28. package/dist/esm/config.js +10 -2
  29. package/dist/esm/config.js.map +1 -1
  30. package/dist/esm/index.js.map +1 -1
  31. package/dist/esm/layers/carto-layer.js +7 -19
  32. package/dist/esm/layers/carto-layer.js.map +1 -1
  33. package/dist/esm/style/color-bins-style.js.map +1 -1
  34. package/dist/esm/style/color-categories-style.js.map +1 -1
  35. package/dist/esm/style/color-continuous-style.js.map +1 -1
  36. package/dist/esm/style/utils.js +3 -1
  37. package/dist/esm/style/utils.js.map +1 -1
  38. package/dist.min.js +138 -138
  39. package/package.json +9 -9
  40. package/src/api/index.ts +1 -0
  41. package/src/api/layer-map.ts +76 -13
  42. package/src/api/maps-api-common.ts +8 -0
  43. package/src/api/maps-v3-client.ts +116 -12
  44. package/src/api/parseMap.ts +6 -2
  45. package/src/config.ts +12 -2
  46. package/src/index.ts +1 -1
  47. package/src/layers/carto-layer.ts +19 -32
  48. package/src/style/color-bins-style.ts +25 -3
  49. package/src/style/color-categories-style.ts +28 -4
  50. package/src/style/color-continuous-style.ts +25 -3
  51. package/src/style/utils.ts +8 -4
  52. package/typed/api/index.d.ts +1 -0
  53. package/typed/api/index.d.ts.map +1 -1
  54. package/typed/api/layer-map.d.ts +12 -4
  55. package/typed/api/layer-map.d.ts.map +1 -1
  56. package/typed/api/maps-api-common.d.ts +4 -0
  57. package/typed/api/maps-api-common.d.ts.map +1 -1
  58. package/typed/api/maps-v3-client.d.ts +4 -3
  59. package/typed/api/maps-v3-client.d.ts.map +1 -1
  60. package/typed/config.d.ts +2 -0
  61. package/typed/config.d.ts.map +1 -1
  62. package/typed/index.d.ts +1 -0
  63. package/typed/index.d.ts.map +1 -1
  64. package/typed/layers/carto-layer.d.ts +5 -8
  65. package/typed/layers/carto-layer.d.ts.map +1 -1
  66. package/typed/style/color-bins-style.d.ts +22 -3
  67. package/typed/style/color-bins-style.d.ts.map +1 -1
  68. package/typed/style/color-categories-style.d.ts +24 -4
  69. package/typed/style/color-categories-style.d.ts.map +1 -1
  70. package/typed/style/color-continuous-style.d.ts +22 -3
  71. package/typed/style/color-continuous-style.d.ts.map +1 -1
  72. package/typed/style/utils.d.ts +3 -6
  73. package/typed/style/utils.d.ts.map +1 -1
  74. package/typed/api/index.js +0 -3
  75. package/typed/api/layer-map.js +0 -264
  76. package/typed/api/maps-api-common.js +0 -50
  77. package/typed/api/maps-client.js +0 -125
  78. package/typed/api/maps-v3-client.js +0 -304
  79. package/typed/api/parseMap.js +0 -178
  80. package/typed/basemap.js +0 -9
  81. package/typed/config.js +0 -35
  82. package/typed/index.js +0 -10
  83. package/typed/layers/carto-layer.js +0 -173
  84. package/typed/layers/carto-tile-layer.js +0 -105
  85. package/typed/layers/h3-tile-layer.js +0 -47
  86. package/typed/layers/h3-tileset-2d.js +0 -85
  87. package/typed/layers/quadkey-tile-layer.js +0 -42
  88. package/typed/layers/quadkey-tileset-2d.js +0 -36
  89. package/typed/layers/schema/carto-tile.js +0 -161
  90. package/typed/layers/spatial-index-tile-layer.js +0 -40
  91. package/typed/style/color-bins-style.js +0 -12
  92. package/typed/style/color-categories-style.js +0 -16
  93. package/typed/style/color-continuous-style.js +0 -12
  94. package/typed/style/palette.js +0 -62
  95. package/typed/style/utils.js +0 -15
  96. package/typed/utils.js +0 -4
@@ -25,6 +25,12 @@ var _core = require("@deck.gl/core");
25
25
 
26
26
  var _utils = require("../utils");
27
27
 
28
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }
29
+
30
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
31
+
32
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
33
+
28
34
  function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
29
35
 
30
36
  function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2.default)(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
@@ -201,11 +207,16 @@ function getParameters(_ref5) {
201
207
  columns = _ref5.columns,
202
208
  clientId = _ref5.clientId,
203
209
  aggregationExp = _ref5.aggregationExp,
204
- aggregationResLevel = _ref5.aggregationResLevel;
210
+ aggregationResLevel = _ref5.aggregationResLevel,
211
+ queryParameters = _ref5.queryParameters;
205
212
  var parameters = [(0, _mapsApiCommon.encodeParameter)('client', clientId || DEFAULT_CLIENT)];
206
213
  var sourceName = type === _mapsApiCommon.MAP_TYPES.QUERY ? 'q' : 'name';
207
214
  parameters.push((0, _mapsApiCommon.encodeParameter)(sourceName, source));
208
215
 
216
+ if (queryParameters) {
217
+ parameters.push((0, _mapsApiCommon.encodeParameter)('queryParameters', JSON.stringify(queryParameters)));
218
+ }
219
+
209
220
  if (geoColumn) {
210
221
  parameters.push((0, _mapsApiCommon.encodeParameter)('geo_column', geoColumn));
211
222
  }
@@ -216,6 +227,8 @@ function getParameters(_ref5) {
216
227
 
217
228
  if (aggregationExp) {
218
229
  parameters.push((0, _mapsApiCommon.encodeParameter)('aggregationExp', aggregationExp));
230
+ } else if (isSpatialIndexGeoColumn(geoColumn)) {
231
+ parameters.push((0, _mapsApiCommon.encodeParameter)('aggregationExp', '1 AS value'));
219
232
  }
220
233
 
221
234
  if (aggregationResLevel) {
@@ -225,18 +238,23 @@ function getParameters(_ref5) {
225
238
  return parameters.join('&');
226
239
  }
227
240
 
241
+ function isSpatialIndexGeoColumn(geoColumn) {
242
+ var spatialIndex = geoColumn === null || geoColumn === void 0 ? void 0 : geoColumn.split(':')[0];
243
+ return spatialIndex === 'h3' || spatialIndex === 'quadbin';
244
+ }
245
+
228
246
  function mapInstantiation(_x4) {
229
247
  return _mapInstantiation.apply(this, arguments);
230
248
  }
231
249
 
232
250
  function _mapInstantiation() {
233
251
  _mapInstantiation = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee4(_ref6) {
234
- var type, source, connection, credentials, geoColumn, columns, clientId, aggregationExp, aggregationResLevel, baseUrl, url, accessToken, body;
252
+ var type, source, connection, credentials, geoColumn, columns, clientId, aggregationExp, aggregationResLevel, queryParameters, baseUrl, url, accessToken, body;
235
253
  return _regenerator.default.wrap(function _callee4$(_context4) {
236
254
  while (1) {
237
255
  switch (_context4.prev = _context4.next) {
238
256
  case 0:
239
- type = _ref6.type, source = _ref6.source, connection = _ref6.connection, credentials = _ref6.credentials, geoColumn = _ref6.geoColumn, columns = _ref6.columns, clientId = _ref6.clientId, aggregationExp = _ref6.aggregationExp, aggregationResLevel = _ref6.aggregationResLevel;
257
+ type = _ref6.type, source = _ref6.source, connection = _ref6.connection, credentials = _ref6.credentials, geoColumn = _ref6.geoColumn, columns = _ref6.columns, clientId = _ref6.clientId, aggregationExp = _ref6.aggregationExp, aggregationResLevel = _ref6.aggregationResLevel, queryParameters = _ref6.queryParameters;
240
258
  baseUrl = "".concat(credentials.mapsUrl, "/").concat(connection, "/").concat(type);
241
259
  url = "".concat(baseUrl, "?").concat(getParameters({
242
260
  type: type,
@@ -244,8 +262,9 @@ function _mapInstantiation() {
244
262
  geoColumn: geoColumn,
245
263
  columns: columns,
246
264
  clientId: clientId,
265
+ aggregationResLevel: aggregationResLevel,
247
266
  aggregationExp: aggregationExp,
248
- aggregationResLevel: aggregationResLevel
267
+ queryParameters: queryParameters
249
268
  }));
250
269
  accessToken = credentials.accessToken;
251
270
 
@@ -256,7 +275,8 @@ function _mapInstantiation() {
256
275
 
257
276
  body = JSON.stringify({
258
277
  q: source,
259
- client: clientId || DEFAULT_CLIENT
278
+ client: clientId || DEFAULT_CLIENT,
279
+ queryParameters: queryParameters
260
280
  });
261
281
  _context4.next = 8;
262
282
  return requestJson({
@@ -337,13 +357,13 @@ function fetchLayerData(_x5) {
337
357
 
338
358
  function _fetchLayerData() {
339
359
  _fetchLayerData = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee5(_ref8) {
340
- var type, source, connection, credentials, geoColumn, columns, format, formatTiles, clientId, aggregationExp, aggregationResLevel, _yield$_fetchDataUrl, url, accessToken, mapFormat, metadata, data, result;
360
+ var type, source, connection, credentials, geoColumn, columns, format, formatTiles, clientId, aggregationExp, aggregationResLevel, queryParameters, _yield$_fetchDataUrl, url, accessToken, mapFormat, metadata, data, result;
341
361
 
342
362
  return _regenerator.default.wrap(function _callee5$(_context5) {
343
363
  while (1) {
344
364
  switch (_context5.prev = _context5.next) {
345
365
  case 0:
346
- type = _ref8.type, source = _ref8.source, connection = _ref8.connection, credentials = _ref8.credentials, geoColumn = _ref8.geoColumn, columns = _ref8.columns, format = _ref8.format, formatTiles = _ref8.formatTiles, clientId = _ref8.clientId, aggregationExp = _ref8.aggregationExp, aggregationResLevel = _ref8.aggregationResLevel;
366
+ type = _ref8.type, source = _ref8.source, connection = _ref8.connection, credentials = _ref8.credentials, geoColumn = _ref8.geoColumn, columns = _ref8.columns, format = _ref8.format, formatTiles = _ref8.formatTiles, clientId = _ref8.clientId, aggregationExp = _ref8.aggregationExp, aggregationResLevel = _ref8.aggregationResLevel, queryParameters = _ref8.queryParameters;
347
367
  _context5.next = 3;
348
368
  return _fetchDataUrl({
349
369
  type: type,
@@ -356,7 +376,8 @@ function _fetchLayerData() {
356
376
  formatTiles: formatTiles,
357
377
  clientId: clientId,
358
378
  aggregationExp: aggregationExp,
359
- aggregationResLevel: aggregationResLevel
379
+ aggregationResLevel: aggregationResLevel,
380
+ queryParameters: queryParameters
360
381
  });
361
382
 
362
383
  case 3:
@@ -397,13 +418,13 @@ function _fetchDataUrl(_x6) {
397
418
 
398
419
  function _fetchDataUrl2() {
399
420
  _fetchDataUrl2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee6(_ref9) {
400
- var type, source, connection, credentials, geoColumn, columns, format, formatTiles, clientId, aggregationExp, aggregationResLevel, defaultCredentials, localCreds, metadata, url, mapFormat, prioritizedFormats, _i, _prioritizedFormats, f, accessToken;
421
+ var type, source, connection, credentials, geoColumn, columns, format, formatTiles, clientId, aggregationExp, aggregationResLevel, queryParameters, defaultCredentials, localCreds, metadata, url, mapFormat, prioritizedFormats, _i, _prioritizedFormats, f, accessToken;
401
422
 
402
423
  return _regenerator.default.wrap(function _callee6$(_context6) {
403
424
  while (1) {
404
425
  switch (_context6.prev = _context6.next) {
405
426
  case 0:
406
- type = _ref9.type, source = _ref9.source, connection = _ref9.connection, credentials = _ref9.credentials, geoColumn = _ref9.geoColumn, columns = _ref9.columns, format = _ref9.format, formatTiles = _ref9.formatTiles, clientId = _ref9.clientId, aggregationExp = _ref9.aggregationExp, aggregationResLevel = _ref9.aggregationResLevel;
427
+ type = _ref9.type, source = _ref9.source, connection = _ref9.connection, credentials = _ref9.credentials, geoColumn = _ref9.geoColumn, columns = _ref9.columns, format = _ref9.format, formatTiles = _ref9.formatTiles, clientId = _ref9.clientId, aggregationExp = _ref9.aggregationExp, aggregationResLevel = _ref9.aggregationResLevel, queryParameters = _ref9.queryParameters;
407
428
  defaultCredentials = (0, _config.getDefaultCredentials)();
408
429
  localCreds = _objectSpread(_objectSpread({}, defaultCredentials.apiVersion === _mapsApiCommon.API_VERSIONS.V3 && defaultCredentials), credentials);
409
430
  checkFetchLayerDataParameters({
@@ -431,7 +452,8 @@ function _fetchDataUrl2() {
431
452
  columns: columns,
432
453
  clientId: clientId,
433
454
  aggregationExp: aggregationExp,
434
- aggregationResLevel: aggregationResLevel
455
+ aggregationResLevel: aggregationResLevel,
456
+ queryParameters: queryParameters
435
457
  });
436
458
 
437
459
  case 7:
@@ -503,21 +525,23 @@ function _fetchDataUrl2() {
503
525
  return _fetchDataUrl2.apply(this, arguments);
504
526
  }
505
527
 
506
- function _fetchMapDataset(_x7, _x8, _x9, _x10) {
528
+ function _fetchMapDataset(_x7, _x8, _x9, _x10, _x11) {
507
529
  return _fetchMapDataset2.apply(this, arguments);
508
530
  }
509
531
 
510
532
  function _fetchMapDataset2() {
511
- _fetchMapDataset2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee7(dataset, accessToken, credentials, clientId) {
512
- var connection, columns, format, geoColumn, source, type, _yield$_fetchDataUrl2, url, mapFormat, cache;
533
+ _fetchMapDataset2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee7(dataset, accessToken, credentials, clientId, queryParameters) {
534
+ var aggregationExp, aggregationResLevel, connection, columns, format, geoColumn, source, type, _yield$_fetchDataUrl2, url, mapFormat, cache;
513
535
 
514
536
  return _regenerator.default.wrap(function _callee7$(_context7) {
515
537
  while (1) {
516
538
  switch (_context7.prev = _context7.next) {
517
539
  case 0:
518
- connection = dataset.connectionName, columns = dataset.columns, format = dataset.format, geoColumn = dataset.geoColumn, source = dataset.source, type = dataset.type;
540
+ aggregationExp = dataset.aggregationExp, aggregationResLevel = dataset.aggregationResLevel, connection = dataset.connectionName, columns = dataset.columns, format = dataset.format, geoColumn = dataset.geoColumn, source = dataset.source, type = dataset.type;
519
541
  _context7.next = 3;
520
542
  return _fetchDataUrl({
543
+ aggregationExp: aggregationExp,
544
+ aggregationResLevel: aggregationResLevel,
521
545
  clientId: clientId,
522
546
  credentials: _objectSpread(_objectSpread({}, credentials), {}, {
523
547
  accessToken: accessToken
@@ -527,7 +551,8 @@ function _fetchMapDataset2() {
527
551
  format: format,
528
552
  geoColumn: geoColumn,
529
553
  source: source,
530
- type: type
554
+ type: type,
555
+ queryParameters: queryParameters
531
556
  });
532
557
 
533
558
  case 3:
@@ -566,49 +591,186 @@ function _fetchMapDataset2() {
566
591
  return _fetchMapDataset2.apply(this, arguments);
567
592
  }
568
593
 
569
- function fillInMapDatasets(_x11, _x12, _x13) {
594
+ function _fetchTilestats(_x12, _x13, _x14, _x15) {
595
+ return _fetchTilestats2.apply(this, arguments);
596
+ }
597
+
598
+ function _fetchTilestats2() {
599
+ _fetchTilestats2 = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee8(attribute, dataset, accessToken, credentials) {
600
+ var connection, source, type, statsUrl, url, stats, attributes, index;
601
+ return _regenerator.default.wrap(function _callee8$(_context8) {
602
+ while (1) {
603
+ switch (_context8.prev = _context8.next) {
604
+ case 0:
605
+ connection = dataset.connectionName, source = dataset.source, type = dataset.type;
606
+ statsUrl = (0, _config.buildStatsUrlFromBase)(credentials.apiBaseUrl);
607
+ url = "".concat(statsUrl, "/").concat(connection, "/");
608
+
609
+ if (type === _mapsApiCommon.MAP_TYPES.QUERY) {
610
+ url += "".concat(attribute, "?q=").concat(source);
611
+ } else {
612
+ url += "".concat(source, "/").concat(attribute);
613
+ }
614
+
615
+ _context8.next = 6;
616
+ return requestData({
617
+ url: url,
618
+ format: _mapsApiCommon.FORMATS.JSON,
619
+ accessToken: accessToken
620
+ });
621
+
622
+ case 6:
623
+ stats = _context8.sent;
624
+ attributes = dataset.data.tilestats.layers[0].attributes;
625
+ index = attributes.findIndex(function (d) {
626
+ return d.attribute === attribute;
627
+ });
628
+ attributes[index] = stats;
629
+ return _context8.abrupt("return", true);
630
+
631
+ case 11:
632
+ case "end":
633
+ return _context8.stop();
634
+ }
635
+ }
636
+ }, _callee8);
637
+ }));
638
+ return _fetchTilestats2.apply(this, arguments);
639
+ }
640
+
641
+ function fillInMapDatasets(_x16, _x17, _x18) {
570
642
  return _fillInMapDatasets.apply(this, arguments);
571
643
  }
572
644
 
573
645
  function _fillInMapDatasets() {
574
- _fillInMapDatasets = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee8(_ref10, clientId, credentials) {
646
+ _fillInMapDatasets = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee9(_ref10, clientId, credentials) {
575
647
  var datasets, token, promises;
576
- return _regenerator.default.wrap(function _callee8$(_context8) {
648
+ return _regenerator.default.wrap(function _callee9$(_context9) {
577
649
  while (1) {
578
- switch (_context8.prev = _context8.next) {
650
+ switch (_context9.prev = _context9.next) {
579
651
  case 0:
580
652
  datasets = _ref10.datasets, token = _ref10.token;
581
653
  promises = datasets.map(function (dataset) {
582
654
  return _fetchMapDataset(dataset, token, credentials, clientId);
583
655
  });
584
- _context8.next = 4;
656
+ _context9.next = 4;
585
657
  return Promise.all(promises);
586
658
 
587
659
  case 4:
588
- return _context8.abrupt("return", _context8.sent);
660
+ return _context9.abrupt("return", _context9.sent);
589
661
 
590
662
  case 5:
591
663
  case "end":
592
- return _context8.stop();
664
+ return _context9.stop();
593
665
  }
594
666
  }
595
- }, _callee8);
667
+ }, _callee9);
596
668
  }));
597
669
  return _fillInMapDatasets.apply(this, arguments);
598
670
  }
599
671
 
600
- function fetchMap(_x14) {
672
+ function fillInTileStats(_x19, _x20) {
673
+ return _fillInTileStats.apply(this, arguments);
674
+ }
675
+
676
+ function _fillInTileStats() {
677
+ _fillInTileStats = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee10(_ref11, credentials) {
678
+ var datasets, keplerMapConfig, token, attributes, layers, _iterator, _step, _loop2, filteredAttributes, _loop, _i2, _attributes, promises;
679
+
680
+ return _regenerator.default.wrap(function _callee10$(_context10) {
681
+ while (1) {
682
+ switch (_context10.prev = _context10.next) {
683
+ case 0:
684
+ datasets = _ref11.datasets, keplerMapConfig = _ref11.keplerMapConfig, token = _ref11.token;
685
+ attributes = [];
686
+ layers = keplerMapConfig.config.visState.layers;
687
+ _iterator = _createForOfIteratorHelper(layers);
688
+
689
+ try {
690
+ _loop2 = function _loop2() {
691
+ var layer = _step.value;
692
+
693
+ for (var _i3 = 0, _Object$keys = Object.keys(layer.visualChannels); _i3 < _Object$keys.length; _i3++) {
694
+ var _layer$visualChannels;
695
+
696
+ var channel = _Object$keys[_i3];
697
+ var attribute = (_layer$visualChannels = layer.visualChannels[channel]) === null || _layer$visualChannels === void 0 ? void 0 : _layer$visualChannels.name;
698
+
699
+ if (attribute) {
700
+ var dataset = datasets.find(function (d) {
701
+ return d.id === layer.config.dataId;
702
+ });
703
+
704
+ if (dataset.data.tilestats && dataset.type !== _mapsApiCommon.MAP_TYPES.TILESET) {
705
+ attributes.push({
706
+ attribute: attribute,
707
+ dataset: dataset
708
+ });
709
+ }
710
+ }
711
+ }
712
+ };
713
+
714
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
715
+ _loop2();
716
+ }
717
+ } catch (err) {
718
+ _iterator.e(err);
719
+ } finally {
720
+ _iterator.f();
721
+ }
722
+
723
+ filteredAttributes = [];
724
+
725
+ _loop = function _loop() {
726
+ var a = _attributes[_i2];
727
+
728
+ if (!filteredAttributes.find(function (_ref13) {
729
+ var attribute = _ref13.attribute,
730
+ dataset = _ref13.dataset;
731
+ return attribute === a.attribute && dataset === a.dataset;
732
+ })) {
733
+ filteredAttributes.push(a);
734
+ }
735
+ };
736
+
737
+ for (_i2 = 0, _attributes = attributes; _i2 < _attributes.length; _i2++) {
738
+ _loop();
739
+ }
740
+
741
+ promises = filteredAttributes.map(function (_ref14) {
742
+ var attribute = _ref14.attribute,
743
+ dataset = _ref14.dataset;
744
+ return _fetchTilestats(attribute, dataset, token, credentials);
745
+ });
746
+ _context10.next = 11;
747
+ return Promise.all(promises);
748
+
749
+ case 11:
750
+ return _context10.abrupt("return", _context10.sent);
751
+
752
+ case 12:
753
+ case "end":
754
+ return _context10.stop();
755
+ }
756
+ }
757
+ }, _callee10);
758
+ }));
759
+ return _fillInTileStats.apply(this, arguments);
760
+ }
761
+
762
+ function fetchMap(_x21) {
601
763
  return _fetchMap.apply(this, arguments);
602
764
  }
603
765
 
604
766
  function _fetchMap() {
605
- _fetchMap = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee10(_ref11) {
767
+ _fetchMap = (0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee12(_ref12) {
606
768
  var cartoMapId, clientId, credentials, autoRefresh, onNewData, defaultCredentials, localCreds, accessToken, url, map, stopAutoRefresh, intervalId, geojsonLayers, geojsonDatasetIds;
607
- return _regenerator.default.wrap(function _callee10$(_context10) {
769
+ return _regenerator.default.wrap(function _callee12$(_context12) {
608
770
  while (1) {
609
- switch (_context10.prev = _context10.next) {
771
+ switch (_context12.prev = _context12.next) {
610
772
  case 0:
611
- cartoMapId = _ref11.cartoMapId, clientId = _ref11.clientId, credentials = _ref11.credentials, autoRefresh = _ref11.autoRefresh, onNewData = _ref11.onNewData;
773
+ cartoMapId = _ref12.cartoMapId, clientId = _ref12.clientId, credentials = _ref12.credentials, autoRefresh = _ref12.autoRefresh, onNewData = _ref12.onNewData;
612
774
  defaultCredentials = (0, _config.getDefaultCredentials)();
613
775
  localCreds = _objectSpread(_objectSpread({}, defaultCredentials.apiVersion === _mapsApiCommon.API_VERSIONS.V3 && defaultCredentials), credentials);
614
776
  accessToken = localCreds.accessToken;
@@ -627,27 +789,27 @@ function _fetchMap() {
627
789
  }
628
790
 
629
791
  url = "".concat(localCreds.mapsUrl, "/public/").concat(cartoMapId);
630
- _context10.next = 12;
792
+ _context12.next = 12;
631
793
  return requestJson({
632
794
  url: url,
633
795
  accessToken: accessToken
634
796
  });
635
797
 
636
798
  case 12:
637
- map = _context10.sent;
799
+ map = _context12.sent;
638
800
 
639
801
  if (autoRefresh) {
640
- intervalId = setInterval((0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee9() {
802
+ intervalId = setInterval((0, _asyncToGenerator2.default)(_regenerator.default.mark(function _callee11() {
641
803
  var changed;
642
- return _regenerator.default.wrap(function _callee9$(_context9) {
804
+ return _regenerator.default.wrap(function _callee11$(_context11) {
643
805
  while (1) {
644
- switch (_context9.prev = _context9.next) {
806
+ switch (_context11.prev = _context11.next) {
645
807
  case 0:
646
- _context9.next = 2;
808
+ _context11.next = 2;
647
809
  return fillInMapDatasets(map, clientId, localCreds);
648
810
 
649
811
  case 2:
650
- changed = _context9.sent;
812
+ changed = _context11.sent;
651
813
 
652
814
  if (onNewData && changed.some(function (v) {
653
815
  return v === true;
@@ -657,10 +819,10 @@ function _fetchMap() {
657
819
 
658
820
  case 4:
659
821
  case "end":
660
- return _context9.stop();
822
+ return _context11.stop();
661
823
  }
662
824
  }
663
- }, _callee9);
825
+ }, _callee11);
664
826
  })), autoRefresh * 1000);
665
827
 
666
828
  stopAutoRefresh = function stopAutoRefresh() {
@@ -668,12 +830,12 @@ function _fetchMap() {
668
830
  };
669
831
  }
670
832
 
671
- geojsonLayers = map.keplerMapConfig.config.visState.layers.filter(function (_ref13) {
672
- var type = _ref13.type;
833
+ geojsonLayers = map.keplerMapConfig.config.visState.layers.filter(function (_ref16) {
834
+ var type = _ref16.type;
673
835
  return type === 'geojson' || type === 'point';
674
836
  });
675
- geojsonDatasetIds = geojsonLayers.map(function (_ref14) {
676
- var config = _ref14.config;
837
+ geojsonDatasetIds = geojsonLayers.map(function (_ref17) {
838
+ var config = _ref17.config;
677
839
  return config.dataId;
678
840
  });
679
841
  map.datasets.forEach(function (dataset) {
@@ -681,20 +843,24 @@ function _fetchMap() {
681
843
  dataset.format = 'geojson';
682
844
  }
683
845
  });
684
- _context10.next = 19;
846
+ _context12.next = 19;
685
847
  return fillInMapDatasets(map, clientId, localCreds);
686
848
 
687
849
  case 19:
688
- return _context10.abrupt("return", _objectSpread(_objectSpread({}, (0, _parseMap.parseMap)(map)), {
850
+ _context12.next = 21;
851
+ return fillInTileStats(map, localCreds);
852
+
853
+ case 21:
854
+ return _context12.abrupt("return", _objectSpread(_objectSpread({}, (0, _parseMap.parseMap)(map)), {
689
855
  stopAutoRefresh: stopAutoRefresh
690
856
  }));
691
857
 
692
- case 20:
858
+ case 22:
693
859
  case "end":
694
- return _context10.stop();
860
+ return _context12.stop();
695
861
  }
696
862
  }
697
- }, _callee10);
863
+ }, _callee12);
698
864
  }));
699
865
  return _fetchMap.apply(this, arguments);
700
866
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/maps-v3-client.ts"],"names":["MAX_GET_LENGTH","DEFAULT_CLIENT","request","method","url","accessToken","body","headers","Accept","Authorization","fetch","Error","requestJson","response","json","ok","dealWithError","error","requestData","format","FORMATS","NDJSON","data","rows","status","getParameters","type","source","geoColumn","columns","clientId","aggregationExp","aggregationResLevel","parameters","sourceName","MAP_TYPES","QUERY","push","join","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","JSON","stringify","q","client","getUrlFromMetadata","metadata","m","checkFetchLayerDataParameters","apiVersion","API_VERSIONS","V3","apiBaseUrl","COLUMNS_SUPPORT","includes","GEO_COLUMN_SUPPORT","fetchLayerData","formatTiles","_fetchDataUrl","mapFormat","result","schema","defaultCredentials","localCreds","prioritizedFormats","GEOJSON","TILEJSON","f","log","assert","Object","values","TILE_FORMATS","_fetchMapDataset","dataset","connectionName","cache","parseInt","URL","searchParams","get","fillInMapDatasets","datasets","token","promises","map","Promise","all","fetchMap","cartoMapId","autoRefresh","onNewData","intervalId","setInterval","changed","some","v","stopAutoRefresh","clearInterval","geojsonLayers","keplerMapConfig","config","visState","layers","filter","geojsonDatasetIds","dataId","forEach","id"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {getDefaultCredentials, buildMapsUrlFromBase, CloudNativeCredentials} from '../config';\nimport {\n API_VERSIONS,\n COLUMNS_SUPPORT,\n encodeParameter,\n Format,\n FORMATS,\n GEO_COLUMN_SUPPORT,\n MapInstantiation,\n MapType,\n MAP_TYPES,\n SchemaField,\n TileFormat,\n TILE_FORMATS\n} from './maps-api-common';\nimport {parseMap} from './parseMap';\nimport {log} from '@deck.gl/core';\nimport {assert} from '../utils';\n\nconst MAX_GET_LENGTH = 2048;\nconst DEFAULT_CLIENT = 'deck-gl-carto';\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 clientId?: string;\n format?: Format;\n formatTiles?: TileFormat;\n aggregationExp?: string;\n aggregationResLevel?: number;\n};\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationExp,\n aggregationResLevel\n}: Omit<FetchLayerDataParams, 'connection' | 'credentials'>) {\n const parameters = [encodeParameter('client', clientId || DEFAULT_CLIENT)];\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n if (aggregationExp) {\n parameters.push(encodeParameter('aggregationExp', aggregationExp));\n }\n if (aggregationResLevel) {\n parameters.push(encodeParameter('aggregationResLevel', aggregationResLevel));\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 clientId,\n aggregationExp,\n aggregationResLevel\n}: FetchLayerDataParams): Promise<MapInstantiation> {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationExp,\n aggregationResLevel\n })}`;\n const {accessToken} = credentials;\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: clientId || DEFAULT_CLIENT\n });\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 geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n}: FetchLayerDataParams) {\n assert(connection, 'Must define connection');\n assert(type, 'Must define a type');\n assert(source, 'Must define a source');\n\n assert(credentials.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(credentials.apiBaseUrl, 'Must define apiBaseUrl');\n assert(credentials.accessToken, 'Must define an accessToken');\n\n if (columns) {\n assert(\n COLUMNS_SUPPORT.includes(type),\n `The columns parameter is not supported by type ${type}`\n );\n }\n if (geoColumn) {\n assert(\n GEO_COLUMN_SUPPORT.includes(type),\n `The geoColumn parameter is not supported by type ${type}`\n );\n } else {\n assert(!aggregationExp, 'Have aggregationExp, but geoColumn parameter is missing');\n assert(!aggregationResLevel, 'Have aggregationResLevel, but geoColumn parameter is missing');\n }\n\n if (!aggregationExp) {\n assert(\n !aggregationResLevel,\n 'Have aggregationResLevel, but aggregationExp parameter is missing'\n );\n }\n}\n\nexport interface FetchLayerDataResult {\n data: any;\n format?: Format;\n schema: SchemaField[];\n}\nexport async function fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n aggregationExp,\n aggregationResLevel\n}: FetchLayerDataParams): Promise<FetchLayerDataResult> {\n // Internally we split data fetching into two parts to allow us to\n // conditionally fetch the actual data, depending on the metadata state\n const {url, accessToken, mapFormat, metadata} = await _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n aggregationExp,\n aggregationResLevel\n });\n\n const data = await requestData({url, format: mapFormat, accessToken});\n const result: FetchLayerDataResult = {data, format: mapFormat, schema: metadata.schema};\n return result;\n}\n\nasync function _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n aggregationExp,\n aggregationResLevel\n}: FetchLayerDataParams) {\n const defaultCredentials = getDefaultCredentials();\n // Only pick up default credentials if they have been defined for\n // correct API version\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n };\n checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n });\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n clientId,\n aggregationExp,\n aggregationResLevel\n });\n let url: string | null = null;\n let mapFormat: Format | undefined;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.JSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n assert(url && mapFormat, 'Unsupported data formats received from backend.');\n }\n\n if (format === FORMATS.TILEJSON && formatTiles) {\n log.assert(\n Object.values(TILE_FORMATS).includes(formatTiles),\n `Invalid value for formatTiles: ${formatTiles}. Use value from TILE_FORMATS`\n );\n url += `&${encodeParameter('formatTiles', formatTiles)}`;\n }\n\n const {accessToken} = localCreds;\n return {url, accessToken, mapFormat, metadata};\n}\n\n/* global clearInterval, setInterval, URL */\nasync function _fetchMapDataset(\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials,\n clientId?: string\n) {\n const {connectionName: connection, columns, format, geoColumn, source, type} = dataset;\n // First fetch metadata\n const {url, mapFormat} = await _fetchDataUrl({\n clientId,\n credentials: {...credentials, accessToken},\n connection,\n columns,\n format,\n geoColumn,\n source,\n type\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 const geojsonLayers = map.keplerMapConfig.config.visState.layers.filter(\n ({type}) => type === 'geojson' || type === 'point'\n );\n const geojsonDatasetIds = geojsonLayers.map(({config}) => config.dataId);\n map.datasets.forEach(dataset => {\n if (geojsonDatasetIds.includes(dataset.id)) {\n dataset.format = 'geojson';\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"}
1
+ {"version":3,"sources":["../../../src/api/maps-v3-client.ts"],"names":["MAX_GET_LENGTH","DEFAULT_CLIENT","request","method","url","accessToken","body","headers","Accept","Authorization","fetch","Error","requestJson","response","json","ok","dealWithError","error","requestData","format","FORMATS","NDJSON","data","rows","status","getParameters","type","source","geoColumn","columns","clientId","aggregationExp","aggregationResLevel","queryParameters","parameters","sourceName","MAP_TYPES","QUERY","push","JSON","stringify","join","isSpatialIndexGeoColumn","spatialIndex","split","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","q","client","getUrlFromMetadata","metadata","m","checkFetchLayerDataParameters","apiVersion","API_VERSIONS","V3","apiBaseUrl","COLUMNS_SUPPORT","includes","GEO_COLUMN_SUPPORT","fetchLayerData","formatTiles","_fetchDataUrl","mapFormat","result","schema","defaultCredentials","localCreds","prioritizedFormats","GEOJSON","TILEJSON","f","log","assert","Object","values","TILE_FORMATS","_fetchMapDataset","dataset","connectionName","cache","parseInt","URL","searchParams","get","_fetchTilestats","attribute","statsUrl","stats","attributes","tilestats","layers","index","findIndex","d","fillInMapDatasets","datasets","token","promises","map","Promise","all","fillInTileStats","keplerMapConfig","config","visState","layer","keys","visualChannels","channel","name","find","id","dataId","TILESET","filteredAttributes","a","fetchMap","cartoMapId","autoRefresh","onNewData","intervalId","setInterval","changed","some","v","stopAutoRefresh","clearInterval","geojsonLayers","filter","geojsonDatasetIds","forEach"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {\n getDefaultCredentials,\n buildMapsUrlFromBase,\n buildStatsUrlFromBase,\n CloudNativeCredentials\n} from '../config';\nimport {\n API_VERSIONS,\n COLUMNS_SUPPORT,\n encodeParameter,\n Format,\n FORMATS,\n GEO_COLUMN_SUPPORT,\n MapInstantiation,\n MapType,\n MAP_TYPES,\n QueryParameters,\n SchemaField,\n TileFormat,\n TILE_FORMATS\n} from './maps-api-common';\nimport {parseMap} from './parseMap';\nimport {log} from '@deck.gl/core';\nimport {assert} from '../utils';\n\nconst MAX_GET_LENGTH = 2048;\nconst DEFAULT_CLIENT = 'deck-gl-carto';\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 clientId?: string;\n format?: Format;\n formatTiles?: TileFormat;\n aggregationExp?: string;\n aggregationResLevel?: number;\n queryParameters?: QueryParameters;\n};\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: Omit<FetchLayerDataParams, 'connection' | 'credentials'>) {\n const parameters = [encodeParameter('client', clientId || DEFAULT_CLIENT)];\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (queryParameters) {\n parameters.push(encodeParameter('queryParameters', JSON.stringify(queryParameters)));\n }\n\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n if (aggregationExp) {\n parameters.push(encodeParameter('aggregationExp', aggregationExp));\n } else if (isSpatialIndexGeoColumn(geoColumn)) {\n // Default aggregationExp required for spatial index layers\n parameters.push(encodeParameter('aggregationExp', '1 AS value'));\n }\n if (aggregationResLevel) {\n parameters.push(encodeParameter('aggregationResLevel', aggregationResLevel));\n }\n\n return parameters.join('&');\n}\n\nfunction isSpatialIndexGeoColumn(geoColumn: string | undefined) {\n const spatialIndex = geoColumn?.split(':')[0];\n return spatialIndex === 'h3' || spatialIndex === 'quadbin';\n}\n\nexport async function mapInstantiation({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n clientId,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<MapInstantiation> {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({\n type,\n source,\n geoColumn,\n columns,\n clientId,\n aggregationResLevel,\n aggregationExp,\n queryParameters\n })}`;\n const {accessToken} = credentials;\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: clientId || DEFAULT_CLIENT,\n queryParameters\n });\n return await requestJson({method: 'POST', url: baseUrl, 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 geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n}: FetchLayerDataParams) {\n assert(connection, 'Must define connection');\n assert(type, 'Must define a type');\n assert(source, 'Must define a source');\n\n assert(credentials.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n assert(credentials.apiBaseUrl, 'Must define apiBaseUrl');\n assert(credentials.accessToken, 'Must define an accessToken');\n\n if (columns) {\n assert(\n COLUMNS_SUPPORT.includes(type),\n `The columns parameter is not supported by type ${type}`\n );\n }\n if (geoColumn) {\n assert(\n GEO_COLUMN_SUPPORT.includes(type),\n `The geoColumn parameter is not supported by type ${type}`\n );\n } else {\n assert(!aggregationExp, 'Have aggregationExp, but geoColumn parameter is missing');\n assert(!aggregationResLevel, 'Have aggregationResLevel, but geoColumn parameter is missing');\n }\n\n if (!aggregationExp) {\n assert(\n !aggregationResLevel,\n 'Have aggregationResLevel, but aggregationExp parameter is missing'\n );\n }\n}\n\nexport interface FetchLayerDataResult {\n data: any;\n format?: Format;\n schema: SchemaField[];\n}\nexport async function fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams): Promise<FetchLayerDataResult> {\n // Internally we split data fetching into two parts to allow us to\n // conditionally fetch the actual data, depending on the metadata state\n const {url, accessToken, mapFormat, metadata} = await _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n\n const data = await requestData({url, format: mapFormat, accessToken});\n const result: FetchLayerDataResult = {data, format: mapFormat, schema: metadata.schema};\n return result;\n}\n\nasync function _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n formatTiles,\n clientId,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n}: FetchLayerDataParams) {\n const defaultCredentials = getDefaultCredentials();\n // Only pick up default credentials if they have been defined for\n // correct API version\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n };\n checkFetchLayerDataParameters({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n aggregationExp,\n aggregationResLevel\n });\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n clientId,\n aggregationExp,\n aggregationResLevel,\n queryParameters\n });\n let url: string | null = null;\n let mapFormat: Format | undefined;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.JSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n assert(url && mapFormat, 'Unsupported data formats received from backend.');\n }\n\n if (format === FORMATS.TILEJSON && formatTiles) {\n log.assert(\n Object.values(TILE_FORMATS).includes(formatTiles),\n `Invalid value for formatTiles: ${formatTiles}. Use value from TILE_FORMATS`\n );\n url += `&${encodeParameter('formatTiles', formatTiles)}`;\n }\n\n const {accessToken} = localCreds;\n return {url, accessToken, mapFormat, metadata};\n}\n\n/* global clearInterval, setInterval, URL */\nasync function _fetchMapDataset(\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials,\n clientId?: string,\n queryParameters?: QueryParameters\n) {\n const {\n aggregationExp,\n aggregationResLevel,\n connectionName: connection,\n columns,\n format,\n geoColumn,\n source,\n type\n } = dataset;\n // First fetch metadata\n const {url, mapFormat} = await _fetchDataUrl({\n aggregationExp,\n aggregationResLevel,\n clientId,\n credentials: {...credentials, accessToken},\n connection,\n columns,\n format,\n geoColumn,\n source,\n type,\n queryParameters\n });\n\n // Extract the last time the data changed\n const cache = parseInt(new URL(url).searchParams.get('cache') || '', 10);\n if (cache && dataset.cache === cache) {\n return false;\n }\n dataset.cache = cache;\n\n // Only fetch if the data has changed\n dataset.data = await requestData({url, format: mapFormat, accessToken});\n\n return true;\n}\n\nasync function _fetchTilestats(\n attribute,\n dataset,\n accessToken: string,\n credentials: CloudNativeCredentials\n) {\n const {connectionName: connection, source, type} = dataset;\n\n const statsUrl = buildStatsUrlFromBase(credentials.apiBaseUrl);\n let url = `${statsUrl}/${connection}/`;\n if (type === MAP_TYPES.QUERY) {\n url += `${attribute}?q=${source}`;\n } else {\n // MAP_TYPE.TABLE\n url += `${source}/${attribute}`;\n }\n const stats = await requestData({url, format: FORMATS.JSON, accessToken});\n\n // Replace tilestats for attribute with value from API\n const {attributes} = dataset.data.tilestats.layers[0];\n const index = attributes.findIndex(d => d.attribute === attribute);\n attributes[index] = stats;\n return true;\n}\n\nasync function fillInMapDatasets(\n {datasets, token},\n clientId: string,\n credentials: CloudNativeCredentials\n) {\n const promises = datasets.map(dataset => _fetchMapDataset(dataset, token, credentials, clientId));\n return await Promise.all(promises);\n}\n\nasync function fillInTileStats(\n {datasets, keplerMapConfig, token},\n credentials: CloudNativeCredentials\n) {\n const attributes: {attribute?: string; dataset?: any}[] = [];\n const {layers} = keplerMapConfig.config.visState;\n for (const layer of layers) {\n for (const channel of Object.keys(layer.visualChannels)) {\n const attribute = layer.visualChannels[channel]?.name;\n if (attribute) {\n const dataset = datasets.find(d => d.id === layer.config.dataId);\n if (dataset.data.tilestats && dataset.type !== MAP_TYPES.TILESET) {\n // Only fetch stats for QUERY & TABLE map types\n attributes.push({attribute, dataset});\n }\n }\n }\n }\n // Remove duplicates to avoid repeated requests\n const filteredAttributes: {attribute?: string; dataset?: any}[] = [];\n for (const a of attributes) {\n if (\n !filteredAttributes.find(\n ({attribute, dataset}) => attribute === a.attribute && dataset === a.dataset\n )\n ) {\n filteredAttributes.push(a);\n }\n }\n\n const promises = filteredAttributes.map(({attribute, dataset}) =>\n _fetchTilestats(attribute, dataset, token, credentials)\n );\n return await Promise.all(promises);\n}\n\nexport async function fetchMap({\n cartoMapId,\n clientId,\n credentials,\n 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 const geojsonLayers = map.keplerMapConfig.config.visState.layers.filter(\n ({type}) => type === 'geojson' || type === 'point'\n );\n const geojsonDatasetIds = geojsonLayers.map(({config}) => config.dataId);\n map.datasets.forEach(dataset => {\n if (geojsonDatasetIds.includes(dataset.id)) {\n dataset.format = 'geojson';\n }\n });\n\n // Mutates map.datasets so that dataset.data contains data\n await fillInMapDatasets(map, clientId, localCreds);\n\n // Mutates attributes in visualChannels to contain tile stats\n await fillInTileStats(map, localCreds);\n return {\n ...parseMap(map),\n ...{stopAutoRefresh}\n };\n}\n"],"file":"maps-v3-client.js"}