@deck.gl/carto 8.7.0-alpha.8 → 8.7.0-beta.3

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 (38) hide show
  1. package/dist/dist.dev.js +42141 -23010
  2. package/dist/es5/api/layer-map.js +67 -42
  3. package/dist/es5/api/layer-map.js.map +1 -1
  4. package/dist/es5/api/maps-api-common.js +7 -1
  5. package/dist/es5/api/maps-api-common.js.map +1 -1
  6. package/dist/es5/api/maps-v3-client.js +33 -26
  7. package/dist/es5/api/maps-v3-client.js.map +1 -1
  8. package/dist/es5/api/parseMap.js +23 -18
  9. package/dist/es5/api/parseMap.js.map +1 -1
  10. package/dist/es5/index.js +8 -0
  11. package/dist/es5/index.js.map +1 -1
  12. package/dist/es5/layers/carto-dynamic-tile-layer.js +166 -0
  13. package/dist/es5/layers/carto-dynamic-tile-layer.js.map +1 -0
  14. package/dist/es5/layers/carto-layer.js +11 -4
  15. package/dist/es5/layers/carto-layer.js.map +1 -1
  16. package/dist/esm/api/layer-map.js +50 -35
  17. package/dist/esm/api/layer-map.js.map +1 -1
  18. package/dist/esm/api/maps-api-common.js +5 -0
  19. package/dist/esm/api/maps-api-common.js.map +1 -1
  20. package/dist/esm/api/maps-v3-client.js +29 -17
  21. package/dist/esm/api/maps-v3-client.js.map +1 -1
  22. package/dist/esm/api/parseMap.js +31 -27
  23. package/dist/esm/api/parseMap.js.map +1 -1
  24. package/dist/esm/index.js +1 -0
  25. package/dist/esm/index.js.map +1 -1
  26. package/dist/esm/layers/carto-dynamic-tile-layer.js +97 -0
  27. package/dist/esm/layers/carto-dynamic-tile-layer.js.map +1 -0
  28. package/dist/esm/layers/carto-layer.js +9 -2
  29. package/dist/esm/layers/carto-layer.js.map +1 -1
  30. package/dist.min.js +4 -4
  31. package/package.json +8 -7
  32. package/src/api/layer-map.js +47 -26
  33. package/src/api/maps-api-common.js +6 -0
  34. package/src/api/maps-v3-client.js +35 -18
  35. package/src/api/parseMap.js +23 -21
  36. package/src/index.js +1 -0
  37. package/src/layers/carto-dynamic-tile-layer.js +86 -0
  38. package/src/layers/carto-layer.js +16 -4
@@ -3,6 +3,7 @@ import { API_VERSIONS, encodeParameter, FORMATS, MAP_TYPES } from './maps-api-co
3
3
  import { parseMap } from './parseMap';
4
4
  import { log } from '@deck.gl/core';
5
5
  const MAX_GET_LENGTH = 2048;
6
+ const DEFAULT_CLIENT = 'deck-gl-carto';
6
7
 
7
8
  async function request({
8
9
  method,
@@ -72,9 +73,10 @@ function getParameters({
72
73
  source,
73
74
  geoColumn,
74
75
  columns,
75
- schema
76
+ schema,
77
+ clientId
76
78
  }) {
77
- const parameters = [encodeParameter('client', 'deck-gl-carto')];
79
+ const parameters = [encodeParameter('client', clientId || DEFAULT_CLIENT)];
78
80
 
79
81
  if (schema) {
80
82
  parameters.push(encodeParameter('schema', true));
@@ -103,7 +105,8 @@ export async function mapInstantiation({
103
105
  credentials,
104
106
  geoColumn,
105
107
  columns,
106
- schema
108
+ schema,
109
+ clientId
107
110
  }) {
108
111
  const baseUrl = "".concat(credentials.mapsUrl, "/").concat(connection, "/").concat(type);
109
112
  const url = "".concat(baseUrl, "?").concat(getParameters({
@@ -111,7 +114,8 @@ export async function mapInstantiation({
111
114
  source,
112
115
  geoColumn,
113
116
  columns,
114
- schema
117
+ schema,
118
+ clientId
115
119
  }));
116
120
  const {
117
121
  accessToken
@@ -121,7 +125,7 @@ export async function mapInstantiation({
121
125
  if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {
122
126
  const body = JSON.stringify({
123
127
  q: source,
124
- client: 'deck-gl-carto'
128
+ client: clientId || DEFAULT_CLIENT
125
129
  });
126
130
  return await request({
127
131
  method: 'POST',
@@ -171,7 +175,8 @@ export async function fetchLayerData({
171
175
  geoColumn,
172
176
  columns,
173
177
  format,
174
- schema
178
+ schema,
179
+ clientId
175
180
  }) {
176
181
  const {
177
182
  url,
@@ -186,7 +191,8 @@ export async function fetchLayerData({
186
191
  geoColumn,
187
192
  columns,
188
193
  format,
189
- schema
194
+ schema,
195
+ clientId
190
196
  });
191
197
  const data = await request({
192
198
  url,
@@ -213,7 +219,8 @@ async function _fetchDataUrl({
213
219
  geoColumn,
214
220
  columns,
215
221
  format,
216
- schema
222
+ schema,
223
+ clientId
217
224
  }) {
218
225
  const defaultCredentials = getDefaultCredentials();
219
226
  const localCreds = { ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),
@@ -237,7 +244,8 @@ async function _fetchDataUrl({
237
244
  credentials: localCreds,
238
245
  geoColumn,
239
246
  columns,
240
- schema
247
+ schema,
248
+ clientId
241
249
  });
242
250
  let url;
243
251
  let mapFormat;
@@ -277,7 +285,8 @@ export async function getData({
277
285
  credentials,
278
286
  geoColumn,
279
287
  columns,
280
- format
288
+ format,
289
+ clientId
281
290
  }) {
282
291
  log.deprecated('getData', 'fetchLayerData')();
283
292
  const layerData = await fetchLayerData({
@@ -288,12 +297,13 @@ export async function getData({
288
297
  geoColumn,
289
298
  columns,
290
299
  format,
291
- schema: false
300
+ schema: false,
301
+ clientId
292
302
  });
293
303
  return layerData.data;
294
304
  }
295
305
 
296
- async function _fetchMapDataset(dataset, accessToken, credentials) {
306
+ async function _fetchMapDataset(dataset, accessToken, credentials, clientId) {
297
307
  const {
298
308
  connectionName: connection,
299
309
  source,
@@ -308,7 +318,8 @@ async function _fetchMapDataset(dataset, accessToken, credentials) {
308
318
  },
309
319
  connection,
310
320
  source,
311
- type
321
+ type,
322
+ clientId
312
323
  });
313
324
  const cache = parseInt(new URLSearchParams(url).get('cache'), 10);
314
325
 
@@ -329,13 +340,14 @@ async function _fetchMapDataset(dataset, accessToken, credentials) {
329
340
  async function fillInMapDatasets({
330
341
  datasets,
331
342
  token
332
- }, credentials) {
333
- const promises = datasets.map(dataset => _fetchMapDataset(dataset, token, credentials));
343
+ }, clientId, credentials) {
344
+ const promises = datasets.map(dataset => _fetchMapDataset(dataset, token, credentials, clientId));
334
345
  return await Promise.all(promises);
335
346
  }
336
347
 
337
348
  export async function fetchMap({
338
349
  cartoMapId,
350
+ clientId,
339
351
  credentials,
340
352
  autoRefresh,
341
353
  onNewData
@@ -366,7 +378,7 @@ export async function fetchMap({
366
378
 
367
379
  if (autoRefresh) {
368
380
  const intervalId = setInterval(async () => {
369
- const changed = await fillInMapDatasets(map, credentials);
381
+ const changed = await fillInMapDatasets(map, clientId, credentials);
370
382
 
371
383
  if (changed.some(v => v === true)) {
372
384
  onNewData(parseMap(map));
@@ -378,7 +390,7 @@ export async function fetchMap({
378
390
  };
379
391
  }
380
392
 
381
- await fillInMapDatasets(map, credentials);
393
+ await fillInMapDatasets(map, clientId, credentials);
382
394
  return { ...parseMap(map),
383
395
  ...{
384
396
  stopAutoRefresh
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/maps-v3-client.js"],"names":["getDefaultCredentials","buildMapsUrlFromBase","API_VERSIONS","encodeParameter","FORMATS","MAP_TYPES","parseMap","log","MAX_GET_LENGTH","request","method","url","format","accessToken","body","response","headers","Accept","Authorization","fetch","error","Error","NDJSON","json","ok","dealWithError","rows","status","getParameters","type","source","geoColumn","columns","schema","parameters","push","sourceName","QUERY","TABLE","join","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","JSON","stringify","q","client","getUrlFromMetadata","metadata","m","checkFetchLayerDataParameters","localCreds","assert","apiVersion","V3","apiBaseUrl","fetchLayerData","mapFormat","_fetchDataUrl","data","result","defaultCredentials","prioritizedFormats","GEOJSON","TILEJSON","f","getData","deprecated","layerData","_fetchMapDataset","dataset","connectionName","cache","parseInt","URLSearchParams","get","fillInMapDatasets","datasets","token","promises","map","Promise","all","fetchMap","cartoMapId","autoRefresh","onNewData","stopAutoRefresh","intervalId","setInterval","changed","some","v","clearInterval"],"mappings":"AAGA,SAAQA,qBAAR,EAA+BC,oBAA/B,QAA0D,WAA1D;AACA,SAAQC,YAAR,EAAsBC,eAAtB,EAAuCC,OAAvC,EAAgDC,SAAhD,QAAgE,mBAAhE;AACA,SAAQC,QAAR,QAAuB,YAAvB;AACA,SAAQC,GAAR,QAAkB,eAAlB;AAEA,MAAMC,cAAc,GAAG,IAAvB;;AAKA,eAAeC,OAAf,CAAuB;AAACC,EAAAA,MAAD;AAASC,EAAAA,GAAT;AAAcC,EAAAA,MAAd;AAAsBC,EAAAA,WAAtB;AAAmCC,EAAAA;AAAnC,CAAvB,EAAiE;AAC/D,MAAIC,QAAJ;AAEA,QAAMC,OAAO,GAAG;AACdC,IAAAA,MAAM,EAAE;AADM,GAAhB;;AAIA,MAAIJ,WAAJ,EAAiB;AACfG,IAAAA,OAAO,CAACE,aAAR,oBAAkCL,WAAlC;AACD;;AAED,MAAIH,MAAM,KAAK,MAAf,EAAuB;AACrBM,IAAAA,OAAO,CAAC,cAAD,CAAP,GAA0B,kBAA1B;AACD;;AAED,MAAI;AAGFD,IAAAA,QAAQ,GAAG,MAAMI,KAAK,CAACR,GAAD,EAAM;AAC1BD,MAAAA,MAD0B;AAE1BM,MAAAA,OAF0B;AAG1BF,MAAAA;AAH0B,KAAN,CAAtB;AAKD,GARD,CAQE,OAAOM,KAAP,EAAc;AACd,UAAM,IAAIC,KAAJ,0CAA4CD,KAA5C,EAAN;AACD;;AAED,MAAIR,MAAM,KAAKR,OAAO,CAACkB,MAAvB,EAA+B;AAC7B,WAAOP,QAAP;AACD;;AAED,QAAMQ,IAAI,GAAG,MAAMR,QAAQ,CAACQ,IAAT,EAAnB;;AAEA,MAAI,CAACR,QAAQ,CAACS,EAAd,EAAkB;AAChBC,IAAAA,aAAa,CAAC;AAACV,MAAAA,QAAD;AAAWK,MAAAA,KAAK,EAAEG,IAAI,CAACH;AAAvB,KAAD,CAAb;AACD;;AAED,SAAOG,IAAI,CAACG,IAAL,GAAYH,IAAI,CAACG,IAAjB,GAAwBH,IAA/B;AACD;;AAKD,SAASE,aAAT,CAAuB;AAACV,EAAAA,QAAD;AAAWK,EAAAA;AAAX,CAAvB,EAA0C;AACxC,UAAQL,QAAQ,CAACY,MAAjB;AACE,SAAK,GAAL;AACE,YAAM,IAAIN,KAAJ,wBAA0BD,KAA1B,EAAN;;AACF,SAAK,GAAL;AACA,SAAK,GAAL;AACE,YAAM,IAAIC,KAAJ,gCAAkCD,KAAlC,EAAN;;AACF;AACE,YAAM,IAAIC,KAAJ,CAAUD,KAAV,CAAN;AAPJ;AASD;;AAKD,SAASQ,aAAT,CAAuB;AAACC,EAAAA,IAAD;AAAOC,EAAAA,MAAP;AAAeC,EAAAA,SAAf;AAA0BC,EAAAA,OAA1B;AAAmCC,EAAAA;AAAnC,CAAvB,EAAmE;AACjE,QAAMC,UAAU,GAAG,CAAC/B,eAAe,CAAC,QAAD,EAAW,eAAX,CAAhB,CAAnB;;AACA,MAAI8B,MAAJ,EAAY;AACVC,IAAAA,UAAU,CAACC,IAAX,CAAgBhC,eAAe,CAAC,QAAD,EAAW,IAAX,CAA/B;AACD;;AAED,QAAMiC,UAAU,GAAGP,IAAI,KAAKxB,SAAS,CAACgC,KAAnB,GAA2B,GAA3B,GAAiC,MAApD;AACAH,EAAAA,UAAU,CAACC,IAAX,CAAgBhC,eAAe,CAACiC,UAAD,EAAaN,MAAb,CAA/B;;AAEA,MAAID,IAAI,KAAKxB,SAAS,CAACiC,KAAvB,EAA8B;AAC5B,QAAIP,SAAJ,EAAe;AACbG,MAAAA,UAAU,CAACC,IAAX,CAAgBhC,eAAe,CAAC,YAAD,EAAe4B,SAAf,CAA/B;AACD;;AACD,QAAIC,OAAJ,EAAa;AACXE,MAAAA,UAAU,CAACC,IAAX,CAAgBhC,eAAe,CAAC,SAAD,EAAY6B,OAAO,CAACO,IAAR,CAAa,GAAb,CAAZ,CAA/B;AACD;AACF;;AAED,SAAOL,UAAU,CAACK,IAAX,CAAgB,GAAhB,CAAP;AACD;;AAED,OAAO,eAAeC,gBAAf,CAAgC;AACrCX,EAAAA,IADqC;AAErCC,EAAAA,MAFqC;AAGrCW,EAAAA,UAHqC;AAIrCC,EAAAA,WAJqC;AAKrCX,EAAAA,SALqC;AAMrCC,EAAAA,OANqC;AAOrCC,EAAAA;AAPqC,CAAhC,EAQJ;AACD,QAAMU,OAAO,aAAMD,WAAW,CAACE,OAAlB,cAA6BH,UAA7B,cAA2CZ,IAA3C,CAAb;AACA,QAAMlB,GAAG,aAAMgC,OAAN,cAAiBf,aAAa,CAAC;AAACC,IAAAA,IAAD;AAAOC,IAAAA,MAAP;AAAeC,IAAAA,SAAf;AAA0BC,IAAAA,OAA1B;AAAmCC,IAAAA;AAAnC,GAAD,CAA9B,CAAT;AACA,QAAM;AAACpB,IAAAA;AAAD,MAAgB6B,WAAtB;AAEA,QAAM9B,MAAM,GAAG,MAAf;;AAEA,MAAID,GAAG,CAACkC,MAAJ,GAAarC,cAAb,IAA+BqB,IAAI,KAAKxB,SAAS,CAACgC,KAAtD,EAA6D;AAE3D,UAAMvB,IAAI,GAAGgC,IAAI,CAACC,SAAL,CAAe;AAC1BC,MAAAA,CAAC,EAAElB,MADuB;AAE1BmB,MAAAA,MAAM,EAAE;AAFkB,KAAf,CAAb;AAIA,WAAO,MAAMxC,OAAO,CAAC;AAACC,MAAAA,MAAM,EAAE,MAAT;AAAiBC,MAAAA,GAAG,EAAEgC,OAAtB;AAA+B/B,MAAAA,MAA/B;AAAuCC,MAAAA,WAAvC;AAAoDC,MAAAA;AAApD,KAAD,CAApB;AACD;;AAED,SAAO,MAAML,OAAO,CAAC;AAACE,IAAAA,GAAD;AAAMC,IAAAA,MAAN;AAAcC,IAAAA;AAAd,GAAD,CAApB;AACD;;AAED,SAASqC,kBAAT,CAA4BC,QAA5B,EAAsCvC,MAAtC,EAA8C;AAC5C,QAAMwC,CAAC,GAAGD,QAAQ,CAACvC,MAAD,CAAlB;;AAEA,MAAIwC,CAAC,IAAI,CAACA,CAAC,CAAChC,KAAR,IAAiBgC,CAAC,CAACzC,GAAvB,EAA4B;AAC1B,WAAOyC,CAAC,CAACzC,GAAF,CAAM,CAAN,CAAP;AACD;;AAED,SAAO,IAAP;AACD;;AAED,SAAS0C,6BAAT,CAAuC;AAACxB,EAAAA,IAAD;AAAOC,EAAAA,MAAP;AAAeW,EAAAA,UAAf;AAA2Ba,EAAAA;AAA3B,CAAvC,EAA+E;AAC7E/C,EAAAA,GAAG,CAACgD,MAAJ,CAAWd,UAAX,EAAuB,wBAAvB;AACAlC,EAAAA,GAAG,CAACgD,MAAJ,CAAW1B,IAAX,EAAiB,oBAAjB;AACAtB,EAAAA,GAAG,CAACgD,MAAJ,CAAWzB,MAAX,EAAmB,sBAAnB;AAEAvB,EAAAA,GAAG,CAACgD,MAAJ,CAAWD,UAAU,CAACE,UAAX,KAA0BtD,YAAY,CAACuD,EAAlD,EAAsD,8BAAtD;AACAlD,EAAAA,GAAG,CAACgD,MAAJ,CAAWD,UAAU,CAACI,UAAtB,EAAkC,wBAAlC;AACAnD,EAAAA,GAAG,CAACgD,MAAJ,CAAWD,UAAU,CAACzC,WAAtB,EAAmC,4BAAnC;AACD;;AAED,OAAO,eAAe8C,cAAf,CAA8B;AACnC9B,EAAAA,IADmC;AAEnCC,EAAAA,MAFmC;AAGnCW,EAAAA,UAHmC;AAInCC,EAAAA,WAJmC;AAKnCX,EAAAA,SALmC;AAMnCC,EAAAA,OANmC;AAOnCpB,EAAAA,MAPmC;AAQnCqB,EAAAA;AARmC,CAA9B,EASJ;AAGD,QAAM;AAACtB,IAAAA,GAAD;AAAME,IAAAA,WAAN;AAAmB+C,IAAAA,SAAnB;AAA8BT,IAAAA;AAA9B,MAA0C,MAAMU,aAAa,CAAC;AAClEhC,IAAAA,IADkE;AAElEC,IAAAA,MAFkE;AAGlEW,IAAAA,UAHkE;AAIlEC,IAAAA,WAJkE;AAKlEX,IAAAA,SALkE;AAMlEC,IAAAA,OANkE;AAOlEpB,IAAAA,MAPkE;AAQlEqB,IAAAA;AARkE,GAAD,CAAnE;AAWA,QAAM6B,IAAI,GAAG,MAAMrD,OAAO,CAAC;AAACE,IAAAA,GAAD;AAAMC,IAAAA,MAAM,EAAEgD,SAAd;AAAyB/C,IAAAA;AAAzB,GAAD,CAA1B;AACA,QAAMkD,MAAM,GAAG;AAACD,IAAAA,IAAD;AAAOlD,IAAAA,MAAM,EAAEgD;AAAf,GAAf;;AACA,MAAI3B,MAAJ,EAAY;AACV8B,IAAAA,MAAM,CAAC9B,MAAP,GAAgBkB,QAAQ,CAAClB,MAAzB;AACD;;AAED,SAAO8B,MAAP;AACD;;AAED,eAAeF,aAAf,CAA6B;AAC3BhC,EAAAA,IAD2B;AAE3BC,EAAAA,MAF2B;AAG3BW,EAAAA,UAH2B;AAI3BC,EAAAA,WAJ2B;AAK3BX,EAAAA,SAL2B;AAM3BC,EAAAA,OAN2B;AAO3BpB,EAAAA,MAP2B;AAQ3BqB,EAAAA;AAR2B,CAA7B,EASG;AACD,QAAM+B,kBAAkB,GAAGhE,qBAAqB,EAAhD;AAGA,QAAMsD,UAAU,GAAG,EACjB,IAAIU,kBAAkB,CAACR,UAAnB,KAAkCtD,YAAY,CAACuD,EAA/C,IAAqDO,kBAAzD,CADiB;AAEjB,OAAGtB;AAFc,GAAnB;AAIAW,EAAAA,6BAA6B,CAAC;AAACxB,IAAAA,IAAD;AAAOC,IAAAA,MAAP;AAAeW,IAAAA,UAAf;AAA2Ba,IAAAA;AAA3B,GAAD,CAA7B;;AAEA,MAAI,CAACA,UAAU,CAACV,OAAhB,EAAyB;AACvBU,IAAAA,UAAU,CAACV,OAAX,GAAqB3C,oBAAoB,CAACqD,UAAU,CAACI,UAAZ,CAAzC;AACD;;AAED,QAAMP,QAAQ,GAAG,MAAMX,gBAAgB,CAAC;AACtCX,IAAAA,IADsC;AAEtCC,IAAAA,MAFsC;AAGtCW,IAAAA,UAHsC;AAItCC,IAAAA,WAAW,EAAEY,UAJyB;AAKtCvB,IAAAA,SALsC;AAMtCC,IAAAA,OANsC;AAOtCC,IAAAA;AAPsC,GAAD,CAAvC;AASA,MAAItB,GAAJ;AACA,MAAIiD,SAAJ;;AAEA,MAAIhD,MAAJ,EAAY;AACVgD,IAAAA,SAAS,GAAGhD,MAAZ;AACAD,IAAAA,GAAG,GAAGuC,kBAAkB,CAACC,QAAD,EAAWvC,MAAX,CAAxB;AACAL,IAAAA,GAAG,CAACgD,MAAJ,CAAW5C,GAAX,mBAA0BC,MAA1B;AACD,GAJD,MAIO;AAEL,UAAMqD,kBAAkB,GAAG,CAAC7D,OAAO,CAAC8D,OAAT,EAAkB9D,OAAO,CAAC0C,IAA1B,EAAgC1C,OAAO,CAACkB,MAAxC,EAAgDlB,OAAO,CAAC+D,QAAxD,CAA3B;;AACA,SAAK,MAAMC,CAAX,IAAgBH,kBAAhB,EAAoC;AAClCtD,MAAAA,GAAG,GAAGuC,kBAAkB,CAACC,QAAD,EAAWiB,CAAX,CAAxB;;AACA,UAAIzD,GAAJ,EAAS;AACPiD,QAAAA,SAAS,GAAGQ,CAAZ;AACA;AACD;AACF;AACF;;AAED,QAAM;AAACvD,IAAAA;AAAD,MAAgByC,UAAtB;AACA,SAAO;AAAC3C,IAAAA,GAAD;AAAME,IAAAA,WAAN;AAAmB+C,IAAAA,SAAnB;AAA8BT,IAAAA;AAA9B,GAAP;AACD;;AAED,OAAO,eAAekB,OAAf,CAAuB;AAACxC,EAAAA,IAAD;AAAOC,EAAAA,MAAP;AAAeW,EAAAA,UAAf;AAA2BC,EAAAA,WAA3B;AAAwCX,EAAAA,SAAxC;AAAmDC,EAAAA,OAAnD;AAA4DpB,EAAAA;AAA5D,CAAvB,EAA4F;AACjGL,EAAAA,GAAG,CAAC+D,UAAJ,CAAe,SAAf,EAA0B,gBAA1B;AACA,QAAMC,SAAS,GAAG,MAAMZ,cAAc,CAAC;AACrC9B,IAAAA,IADqC;AAErCC,IAAAA,MAFqC;AAGrCW,IAAAA,UAHqC;AAIrCC,IAAAA,WAJqC;AAKrCX,IAAAA,SALqC;AAMrCC,IAAAA,OANqC;AAOrCpB,IAAAA,MAPqC;AAQrCqB,IAAAA,MAAM,EAAE;AAR6B,GAAD,CAAtC;AAUA,SAAOsC,SAAS,CAACT,IAAjB;AACD;;AAGD,eAAeU,gBAAf,CAAgCC,OAAhC,EAAyC5D,WAAzC,EAAsD6B,WAAtD,EAAmE;AAEjE,QAAM;AAACgC,IAAAA,cAAc,EAAEjC,UAAjB;AAA6BX,IAAAA,MAA7B;AAAqCD,IAAAA;AAArC,MAA6C4C,OAAnD;AACA,QAAM;AAAC9D,IAAAA,GAAD;AAAMiD,IAAAA;AAAN,MAAmB,MAAMC,aAAa,CAAC;AAC3CnB,IAAAA,WAAW,EAAE,EAAC,GAAGA,WAAJ;AAAiB7B,MAAAA;AAAjB,KAD8B;AAE3C4B,IAAAA,UAF2C;AAG3CX,IAAAA,MAH2C;AAI3CD,IAAAA;AAJ2C,GAAD,CAA5C;AAQA,QAAM8C,KAAK,GAAGC,QAAQ,CAAC,IAAIC,eAAJ,CAAoBlE,GAApB,EAAyBmE,GAAzB,CAA6B,OAA7B,CAAD,EAAwC,EAAxC,CAAtB;;AACA,MAAIH,KAAK,IAAIF,OAAO,CAACE,KAAR,KAAkBA,KAA/B,EAAsC;AACpC,WAAO,KAAP;AACD;;AACDF,EAAAA,OAAO,CAACE,KAAR,GAAgBA,KAAhB;AAGA,QAAMb,IAAI,GAAG,MAAMrD,OAAO,CAAC;AAACE,IAAAA,GAAD;AAAMC,IAAAA,MAAM,EAAEgD,SAAd;AAAyB/C,IAAAA;AAAzB,GAAD,CAA1B;AACA4D,EAAAA,OAAO,CAACX,IAAR,GAAeA,IAAf;AACA,SAAO,IAAP;AACD;;AAED,eAAeiB,iBAAf,CAAiC;AAACC,EAAAA,QAAD;AAAWC,EAAAA;AAAX,CAAjC,EAAoDvC,WAApD,EAAiE;AAC/D,QAAMwC,QAAQ,GAAGF,QAAQ,CAACG,GAAT,CAAaV,OAAO,IAAID,gBAAgB,CAACC,OAAD,EAAUQ,KAAV,EAAiBvC,WAAjB,CAAxC,CAAjB;AACA,SAAO,MAAM0C,OAAO,CAACC,GAAR,CAAYH,QAAZ,CAAb;AACD;;AAED,OAAO,eAAeI,QAAf,CAAwB;AAACC,EAAAA,UAAD;AAAa7C,EAAAA,WAAb;AAA0B8C,EAAAA,WAA1B;AAAuCC,EAAAA;AAAvC,CAAxB,EAA2E;AAChF,QAAMzB,kBAAkB,GAAGhE,qBAAqB,EAAhD;AACA,QAAMsD,UAAU,GAAG,EACjB,IAAIU,kBAAkB,CAACR,UAAnB,KAAkCtD,YAAY,CAACuD,EAA/C,IAAqDO,kBAAzD,CADiB;AAEjB,OAAGtB;AAFc,GAAnB;AAKAnC,EAAAA,GAAG,CAACgD,MAAJ,CAAWgC,UAAX;AAEAhF,EAAAA,GAAG,CAACgD,MAAJ,CAAWD,UAAU,CAACE,UAAX,KAA0BtD,YAAY,CAACuD,EAAlD,EAAsD,8BAAtD;AACAlD,EAAAA,GAAG,CAACgD,MAAJ,CAAWD,UAAU,CAACI,UAAtB,EAAkC,wBAAlC;;AACA,MAAI,CAACJ,UAAU,CAACV,OAAhB,EAAyB;AACvBU,IAAAA,UAAU,CAACV,OAAX,GAAqB3C,oBAAoB,CAACqD,UAAU,CAACI,UAAZ,CAAzC;AACD;;AAED,MAAI8B,WAAW,IAAIC,SAAnB,EAA8B;AAC5BlF,IAAAA,GAAG,CAACgD,MAAJ,CAAWkC,SAAX,EAAsB,gDAAtB;AACAlF,IAAAA,GAAG,CAACgD,MAAJ,CAAW,OAAOkC,SAAP,KAAqB,UAAhC,EAA4C,gCAA5C;AACAlF,IAAAA,GAAG,CAACgD,MAAJ,CAAWiC,WAAW,GAAG,CAAzB,EAA4B,yCAA5B;AACD;;AAED,QAAM7E,GAAG,aAAM2C,UAAU,CAACV,OAAjB,qBAAmC2C,UAAnC,CAAT;AACA,QAAMJ,GAAG,GAAG,MAAM1E,OAAO,CAAC;AAACE,IAAAA;AAAD,GAAD,CAAzB;AAIA,MAAI+E,eAAJ;;AACA,MAAIF,WAAJ,EAAiB;AACf,UAAMG,UAAU,GAAGC,WAAW,CAAC,YAAY;AACzC,YAAMC,OAAO,GAAG,MAAMd,iBAAiB,CAACI,GAAD,EAAMzC,WAAN,CAAvC;;AACA,UAAImD,OAAO,CAACC,IAAR,CAAaC,CAAC,IAAIA,CAAC,KAAK,IAAxB,CAAJ,EAAmC;AACjCN,QAAAA,SAAS,CAACnF,QAAQ,CAAC6E,GAAD,CAAT,CAAT;AACD;AACF,KAL6B,EAK3BK,WAAW,GAAG,IALa,CAA9B;;AAMAE,IAAAA,eAAe,GAAG,MAAM;AACtBM,MAAAA,aAAa,CAACL,UAAD,CAAb;AACD,KAFD;AAGD;;AAGD,QAAMZ,iBAAiB,CAACI,GAAD,EAAMzC,WAAN,CAAvB;AACA,SAAO,EACL,GAAGpC,QAAQ,CAAC6E,GAAD,CADN;AAEL,OAAG;AAACO,MAAAA;AAAD;AAFE,GAAP;AAID","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {getDefaultCredentials, buildMapsUrlFromBase} from '../config';\nimport {API_VERSIONS, encodeParameter, FORMATS, MAP_TYPES} from './maps-api-common';\nimport {parseMap} from './parseMap';\nimport {log} from '@deck.gl/core';\n\nconst MAX_GET_LENGTH = 2048;\n\n/**\n * Request against Maps API\n */\nasync function request({method, url, format, accessToken, body}) {\n let response;\n\n const headers = {\n Accept: 'application/json'\n };\n\n if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n\n try {\n /* global fetch */\n /* eslint no-undef: \"error\" */\n response = await fetch(url, {\n method,\n headers,\n body\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n\n if (format === FORMATS.NDJSON) {\n return response;\n }\n\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, error: json.error});\n }\n\n return json.rows ? json.rows : json;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, error}) {\n switch (response.status) {\n case 400:\n throw new Error(`Bad request. ${error}`);\n case 401:\n case 403:\n throw new Error(`Unauthorized access. ${error}`);\n default:\n throw new Error(error);\n }\n}\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({type, source, geoColumn, columns, schema}) {\n const parameters = [encodeParameter('client', 'deck-gl-carto')];\n if (schema) {\n parameters.push(encodeParameter('schema', true));\n }\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (type === MAP_TYPES.TABLE) {\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n }\n\n return parameters.join('&');\n}\n\nexport async function mapInstantiation({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n schema\n}) {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({type, source, geoColumn, columns, schema})}`;\n const {accessToken} = credentials;\n\n const format = 'json';\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: 'deck-gl-carto'\n });\n return await request({method: 'POST', url: baseUrl, format, accessToken, body});\n }\n\n return await request({url, format, accessToken});\n}\n\nfunction getUrlFromMetadata(metadata, format) {\n const m = metadata[format];\n\n if (m && !m.error && m.url) {\n return m.url[0];\n }\n\n return null;\n}\n\nfunction checkFetchLayerDataParameters({type, source, connection, localCreds}) {\n log.assert(connection, 'Must define connection');\n log.assert(type, 'Must define a type');\n log.assert(source, 'Must define a source');\n\n log.assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n log.assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n log.assert(localCreds.accessToken, 'Must define an accessToken');\n}\n\nexport async function fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n schema\n}) {\n // Internally we split data fetching into two parts to allow us to\n // conditionally fetch the actual data, depending on the metadata state\n const {url, accessToken, mapFormat, metadata} = await _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n schema\n });\n\n const data = await request({url, format: mapFormat, accessToken});\n const result = {data, format: mapFormat};\n if (schema) {\n result.schema = metadata.schema;\n }\n\n return result;\n}\n\nasync function _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n schema\n}) {\n const defaultCredentials = getDefaultCredentials();\n // Only pick up default credentials if they have been defined for\n // correct API version\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n };\n checkFetchLayerDataParameters({type, source, connection, localCreds});\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n schema\n });\n let url;\n let mapFormat;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n log.assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.JSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n }\n\n const {accessToken} = localCreds;\n return {url, accessToken, mapFormat, metadata};\n}\n\nexport async function getData({type, source, connection, credentials, geoColumn, columns, format}) {\n log.deprecated('getData', 'fetchLayerData')();\n const layerData = await fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n schema: false\n });\n return layerData.data;\n}\n\n/* global clearInterval, setInterval, URLSearchParams */\nasync function _fetchMapDataset(dataset, accessToken, credentials) {\n // First fetch metadata\n const {connectionName: connection, source, type} = dataset;\n const {url, mapFormat} = await _fetchDataUrl({\n credentials: {...credentials, accessToken},\n connection,\n source,\n type\n });\n\n // Extract the last time the data changed\n const cache = parseInt(new URLSearchParams(url).get('cache'), 10);\n if (cache && dataset.cache === cache) {\n return false;\n }\n dataset.cache = cache;\n\n // Only fetch if the data has changed\n const data = await request({url, format: mapFormat, accessToken});\n dataset.data = data;\n return true;\n}\n\nasync function fillInMapDatasets({datasets, token}, credentials) {\n const promises = datasets.map(dataset => _fetchMapDataset(dataset, token, credentials));\n return await Promise.all(promises);\n}\n\nexport async function fetchMap({cartoMapId, credentials, autoRefresh, onNewData}) {\n const defaultCredentials = getDefaultCredentials();\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n };\n\n log.assert(cartoMapId, `Must define CARTO map id: fetchMap({cartoMapId: 'XXXX-XXXX-XXXX'})`);\n\n log.assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n log.assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n if (autoRefresh || onNewData) {\n log.assert(onNewData, 'Must define `onNewData` when using autoRefresh');\n log.assert(typeof onNewData === 'function', '`onNewData` must be a function');\n log.assert(autoRefresh > 0, '`autoRefresh` must be a positive number');\n }\n\n const url = `${localCreds.mapsUrl}/public/${cartoMapId}`;\n const map = await request({url});\n\n // Periodically check if the data has changed. Note that this\n // will not update when a map is published.\n let stopAutoRefresh;\n if (autoRefresh) {\n const intervalId = setInterval(async () => {\n const changed = await fillInMapDatasets(map, credentials);\n if (changed.some(v => v === true)) {\n onNewData(parseMap(map));\n }\n }, autoRefresh * 1000);\n stopAutoRefresh = () => {\n clearInterval(intervalId);\n };\n }\n\n // Mutates map.datasets so that dataset.data contains data\n await fillInMapDatasets(map, credentials);\n return {\n ...parseMap(map),\n ...{stopAutoRefresh}\n };\n}\n"],"file":"maps-v3-client.js"}
1
+ {"version":3,"sources":["../../../src/api/maps-v3-client.js"],"names":["getDefaultCredentials","buildMapsUrlFromBase","API_VERSIONS","encodeParameter","FORMATS","MAP_TYPES","parseMap","log","MAX_GET_LENGTH","DEFAULT_CLIENT","request","method","url","format","accessToken","body","response","headers","Accept","Authorization","fetch","error","Error","NDJSON","json","ok","dealWithError","rows","status","getParameters","type","source","geoColumn","columns","schema","clientId","parameters","push","sourceName","QUERY","TABLE","join","mapInstantiation","connection","credentials","baseUrl","mapsUrl","length","JSON","stringify","q","client","getUrlFromMetadata","metadata","m","checkFetchLayerDataParameters","localCreds","assert","apiVersion","V3","apiBaseUrl","fetchLayerData","mapFormat","_fetchDataUrl","data","result","defaultCredentials","prioritizedFormats","GEOJSON","TILEJSON","f","getData","deprecated","layerData","_fetchMapDataset","dataset","connectionName","cache","parseInt","URLSearchParams","get","fillInMapDatasets","datasets","token","promises","map","Promise","all","fetchMap","cartoMapId","autoRefresh","onNewData","stopAutoRefresh","intervalId","setInterval","changed","some","v","clearInterval"],"mappings":"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","sourcesContent":["/**\n * Maps API Client for Carto 3\n */\nimport {getDefaultCredentials, buildMapsUrlFromBase} from '../config';\nimport {API_VERSIONS, encodeParameter, FORMATS, MAP_TYPES} from './maps-api-common';\nimport {parseMap} from './parseMap';\nimport {log} from '@deck.gl/core';\n\nconst MAX_GET_LENGTH = 2048;\nconst DEFAULT_CLIENT = 'deck-gl-carto';\n\n/**\n * Request against Maps API\n */\nasync function request({method, url, format, accessToken, body}) {\n let response;\n\n const headers = {\n Accept: 'application/json'\n };\n\n if (accessToken) {\n headers.Authorization = `Bearer ${accessToken}`;\n }\n\n if (method === 'POST') {\n headers['Content-Type'] = 'application/json';\n }\n\n try {\n /* global fetch */\n /* eslint no-undef: \"error\" */\n response = await fetch(url, {\n method,\n headers,\n body\n });\n } catch (error) {\n throw new Error(`Failed to connect to Maps API: ${error}`);\n }\n\n if (format === FORMATS.NDJSON) {\n return response;\n }\n\n const json = await response.json();\n\n if (!response.ok) {\n dealWithError({response, error: json.error});\n }\n\n return json.rows ? json.rows : json;\n}\n\n/**\n * Display proper message from Maps API error\n */\nfunction dealWithError({response, error}) {\n switch (response.status) {\n case 400:\n throw new Error(`Bad request. ${error}`);\n case 401:\n case 403:\n throw new Error(`Unauthorized access. ${error}`);\n default:\n throw new Error(error);\n }\n}\n\n/**\n * Build a URL with all required parameters\n */\nfunction getParameters({type, source, geoColumn, columns, schema, clientId}) {\n const parameters = [encodeParameter('client', clientId || DEFAULT_CLIENT)];\n if (schema) {\n parameters.push(encodeParameter('schema', true));\n }\n\n const sourceName = type === MAP_TYPES.QUERY ? 'q' : 'name';\n parameters.push(encodeParameter(sourceName, source));\n\n if (type === MAP_TYPES.TABLE) {\n if (geoColumn) {\n parameters.push(encodeParameter('geo_column', geoColumn));\n }\n if (columns) {\n parameters.push(encodeParameter('columns', columns.join(',')));\n }\n }\n\n return parameters.join('&');\n}\n\nexport async function mapInstantiation({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n schema,\n clientId\n}) {\n const baseUrl = `${credentials.mapsUrl}/${connection}/${type}`;\n const url = `${baseUrl}?${getParameters({type, source, geoColumn, columns, schema, clientId})}`;\n const {accessToken} = credentials;\n\n const format = 'json';\n\n if (url.length > MAX_GET_LENGTH && type === MAP_TYPES.QUERY) {\n // need to be a POST request\n const body = JSON.stringify({\n q: source,\n client: clientId || DEFAULT_CLIENT\n });\n return await request({method: 'POST', url: baseUrl, format, accessToken, body});\n }\n\n return await request({url, format, accessToken});\n}\n\nfunction getUrlFromMetadata(metadata, format) {\n const m = metadata[format];\n\n if (m && !m.error && m.url) {\n return m.url[0];\n }\n\n return null;\n}\n\nfunction checkFetchLayerDataParameters({type, source, connection, localCreds}) {\n log.assert(connection, 'Must define connection');\n log.assert(type, 'Must define a type');\n log.assert(source, 'Must define a source');\n\n log.assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n log.assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n log.assert(localCreds.accessToken, 'Must define an accessToken');\n}\n\nexport async function fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n schema,\n clientId\n}) {\n // Internally we split data fetching into two parts to allow us to\n // conditionally fetch the actual data, depending on the metadata state\n const {url, accessToken, mapFormat, metadata} = await _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n schema,\n clientId\n });\n\n const data = await request({url, format: mapFormat, accessToken});\n const result = {data, format: mapFormat};\n if (schema) {\n result.schema = metadata.schema;\n }\n\n return result;\n}\n\nasync function _fetchDataUrl({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n schema,\n clientId\n}) {\n const defaultCredentials = getDefaultCredentials();\n // Only pick up default credentials if they have been defined for\n // correct API version\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n };\n checkFetchLayerDataParameters({type, source, connection, localCreds});\n\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n const metadata = await mapInstantiation({\n type,\n source,\n connection,\n credentials: localCreds,\n geoColumn,\n columns,\n schema,\n clientId\n });\n let url;\n let mapFormat;\n\n if (format) {\n mapFormat = format;\n url = getUrlFromMetadata(metadata, format);\n log.assert(url, `Format ${format} not available`);\n } else {\n // guess map format\n const prioritizedFormats = [FORMATS.GEOJSON, FORMATS.JSON, FORMATS.NDJSON, FORMATS.TILEJSON];\n for (const f of prioritizedFormats) {\n url = getUrlFromMetadata(metadata, f);\n if (url) {\n mapFormat = f;\n break;\n }\n }\n }\n\n const {accessToken} = localCreds;\n return {url, accessToken, mapFormat, metadata};\n}\n\nexport async function getData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n clientId\n}) {\n log.deprecated('getData', 'fetchLayerData')();\n const layerData = await fetchLayerData({\n type,\n source,\n connection,\n credentials,\n geoColumn,\n columns,\n format,\n schema: false,\n clientId\n });\n return layerData.data;\n}\n\n/* global clearInterval, setInterval, URLSearchParams */\nasync function _fetchMapDataset(dataset, accessToken, credentials, clientId) {\n // First fetch metadata\n const {connectionName: connection, source, type} = dataset;\n const {url, mapFormat} = await _fetchDataUrl({\n credentials: {...credentials, accessToken},\n connection,\n source,\n type,\n clientId\n });\n\n // Extract the last time the data changed\n const cache = parseInt(new URLSearchParams(url).get('cache'), 10);\n if (cache && dataset.cache === cache) {\n return false;\n }\n dataset.cache = cache;\n\n // Only fetch if the data has changed\n const data = await request({url, format: mapFormat, accessToken});\n dataset.data = data;\n return true;\n}\n\nasync function fillInMapDatasets({datasets, token}, clientId, credentials) {\n const promises = datasets.map(dataset => _fetchMapDataset(dataset, token, credentials, clientId));\n return await Promise.all(promises);\n}\n\nexport async function fetchMap({cartoMapId, clientId, credentials, autoRefresh, onNewData}) {\n const defaultCredentials = getDefaultCredentials();\n const localCreds = {\n ...(defaultCredentials.apiVersion === API_VERSIONS.V3 && defaultCredentials),\n ...credentials\n };\n\n log.assert(cartoMapId, `Must define CARTO map id: fetchMap({cartoMapId: 'XXXX-XXXX-XXXX'})`);\n\n log.assert(localCreds.apiVersion === API_VERSIONS.V3, 'Method only available for v3');\n log.assert(localCreds.apiBaseUrl, 'Must define apiBaseUrl');\n if (!localCreds.mapsUrl) {\n localCreds.mapsUrl = buildMapsUrlFromBase(localCreds.apiBaseUrl);\n }\n\n if (autoRefresh || onNewData) {\n log.assert(onNewData, 'Must define `onNewData` when using autoRefresh');\n log.assert(typeof onNewData === 'function', '`onNewData` must be a function');\n log.assert(autoRefresh > 0, '`autoRefresh` must be a positive number');\n }\n\n const url = `${localCreds.mapsUrl}/public/${cartoMapId}`;\n const map = await request({url});\n\n // Periodically check if the data has changed. Note that this\n // will not update when a map is published.\n let stopAutoRefresh;\n if (autoRefresh) {\n const intervalId = setInterval(async () => {\n const changed = await fillInMapDatasets(map, clientId, credentials);\n if (changed.some(v => v === true)) {\n onNewData(parseMap(map));\n }\n }, autoRefresh * 1000);\n stopAutoRefresh = () => {\n clearInterval(intervalId);\n };\n }\n\n // Mutates map.datasets so that dataset.data contains data\n await fillInMapDatasets(map, clientId, credentials);\n return {\n ...parseMap(map),\n ...{stopAutoRefresh}\n };\n}\n"],"file":"maps-v3-client.js"}
@@ -1,4 +1,4 @@
1
- import { LAYER_MAP, getColorAccessor, getSizeAccessor, getTextAccessor, getTextPixelOffsetAccessor } from './layer-map';
1
+ import { getLayer, getColorAccessor, getSizeAccessor, getTextAccessor, getTextPixelOffsetAccessor } from './layer-map';
2
2
  import { _flatten as flatten, log } from '@deck.gl/core';
3
3
  export function parseMap(json) {
4
4
  const {
@@ -29,30 +29,34 @@ export function parseMap(json) {
29
29
  config,
30
30
  visualChannels
31
31
  }) => {
32
- log.assert(type in LAYER_MAP, "Unsupported layer type: ".concat(type));
33
- const {
34
- Layer,
35
- propMap,
36
- defaultProps
37
- } = LAYER_MAP[type];
38
- const {
39
- dataId
40
- } = config;
41
- const dataset = datasets.find(d => d.id === dataId);
42
- log.assert(dataset, "No dataset matching dataId: ".concat(dataId));
43
- const {
44
- data
45
- } = dataset;
46
- log.assert(data, "No data loaded for dataId: ".concat(dataId));
47
- return new Layer({
48
- id,
49
- data,
50
- ...defaultProps,
51
- ...createBlendingProps(layerBlending),
52
- ...(!config.textLabel && createInteractionProps(interactionConfig)),
53
- ...createStyleProps(config, propMap),
54
- ...createChannelProps(visualChannels, type, config, data)
55
- });
32
+ try {
33
+ const {
34
+ Layer,
35
+ propMap,
36
+ defaultProps
37
+ } = getLayer(type, config);
38
+ const {
39
+ dataId
40
+ } = config;
41
+ const dataset = datasets.find(d => d.id === dataId);
42
+ log.assert(dataset, "No dataset matching dataId: ".concat(dataId));
43
+ const {
44
+ data
45
+ } = dataset;
46
+ log.assert(data, "No data loaded for dataId: ".concat(dataId));
47
+ return new Layer({
48
+ id,
49
+ data,
50
+ ...defaultProps,
51
+ ...createBlendingProps(layerBlending),
52
+ ...(!config.textLabel && createInteractionProps(interactionConfig)),
53
+ ...createStyleProps(config, propMap),
54
+ ...createChannelProps(visualChannels, type, config, data)
55
+ });
56
+ } catch (e) {
57
+ log.error(e.message)();
58
+ return undefined;
59
+ }
56
60
  })
57
61
  };
58
62
  }
@@ -171,8 +175,8 @@ function createChannelProps(visualChannels, type, config, data) {
171
175
  }
172
176
 
173
177
  if (strokeColorField) {
174
- const opacity = visConfig.strokeOpacity !== undefined ? visConfig.strokeOpacity / visConfig.opacity : 1;
175
- result.getLineColor = getColorAccessor(strokeColorField, strokeColorScale, visConfig.colorRange, opacity, data);
178
+ const opacity = visConfig.strokeOpacity !== undefined ? visConfig.strokeOpacity : 1;
179
+ result.getLineColor = getColorAccessor(strokeColorField, strokeColorScale, visConfig.strokeColorRange, opacity, data);
176
180
  }
177
181
 
178
182
  if (heightField) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/api/parseMap.js"],"names":["LAYER_MAP","getColorAccessor","getSizeAccessor","getTextAccessor","getTextPixelOffsetAccessor","_flatten","flatten","log","parseMap","json","keplerMapConfig","datasets","assert","version","mapState","mapStyle","config","layers","layerBlending","interactionConfig","visState","id","title","description","createdAt","updatedAt","initialViewState","extractTextLayers","reverse","map","type","visualChannels","Layer","propMap","defaultProps","dataId","dataset","find","d","data","createBlendingProps","textLabel","createInteractionProps","createStyleProps","createChannelProps","rest","configRest","filter","t","field","name","label","visConfig","opacity","parameters","blendFunc","blendEquation","pickable","tooltip","enabled","autoHighlight","mapProps","source","target","mapping","sourceKey","sourceValue","targetKey","undefined","result","highlightColor","enable3d","colorField","colorScale","sizeField","sizeScale","strokeColorField","strokeColorScale","heightField","heightScale","textLabelField","getFillColor","colorRange","strokeOpacity","getLineColor","getElevation","heightRange","sizeRange","getPointRadius","radiusRange","getText","pointType","radius","getTextPixelOffset"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {\n LAYER_MAP,\n getColorAccessor,\n getSizeAccessor,\n getTextAccessor,\n getTextPixelOffsetAccessor\n} from './layer-map';\nimport {_flatten as flatten, log} from '@deck.gl/core';\n\nexport function parseMap(json) {\n const {keplerMapConfig, datasets} = json;\n log.assert(keplerMapConfig.version === 'v1', 'Only support Kepler v1');\n const {mapState, mapStyle} = keplerMapConfig.config;\n const {layers, layerBlending, interactionConfig} = keplerMapConfig.config.visState;\n\n return {\n id: json.id,\n title: json.title,\n description: json.description,\n createdAt: json.createdAt,\n updatedAt: json.updatedAt,\n initialViewState: mapState,\n mapStyle,\n layers: extractTextLayers(layers.reverse()).map(({id, type, config, visualChannels}) => {\n log.assert(type in LAYER_MAP, `Unsupported layer type: ${type}`);\n const {Layer, propMap, defaultProps} = LAYER_MAP[type];\n\n const {dataId} = config;\n const dataset = datasets.find(d => d.id === dataId);\n log.assert(dataset, `No dataset matching dataId: ${dataId}`);\n const {data} = dataset;\n log.assert(data, `No data loaded for dataId: ${dataId}`);\n return new Layer({\n id,\n data,\n ...defaultProps,\n ...createBlendingProps(layerBlending),\n ...(!config.textLabel && createInteractionProps(interactionConfig)),\n ...createStyleProps(config, propMap),\n ...createChannelProps(visualChannels, type, config, data) // Must come after style\n });\n })\n };\n}\n\nfunction extractTextLayers(layers) {\n return flatten(\n layers.map(({id, config, ...rest}) => {\n const {textLabel, ...configRest} = config;\n return [\n // Original layer without textLabel\n {id, config: configRest, ...rest},\n\n // One layer per valid text label, with full opacity\n ...textLabel\n .filter(t => t.field)\n .map(t => {\n return {\n id: `${id}-label-${t.field.name}`,\n config: {\n textLabel: t,\n ...configRest,\n label: `${config.label}-label-${t.field.name}`,\n visConfig: {...configRest.visConfig, opacity: 1}\n },\n ...rest\n };\n })\n ];\n })\n );\n}\n\nfunction createBlendingProps(layerBlending) {\n if (layerBlending === 'additive') {\n return {\n parameters: {\n blendFunc: [GL.SRC_ALPHA, GL.DST_ALPHA],\n blendEquation: GL.FUNC_ADD\n }\n };\n } else if (layerBlending === 'subtractive') {\n return {\n parameters: {\n blendFunc: [GL.ONE, GL.ONE_MINUS_DST_COLOR, GL.SRC_ALPHA, GL.DST_ALPHA],\n blendEquation: [GL.FUNC_SUBTRACT, GL.FUNC_ADD]\n }\n };\n }\n\n return {};\n}\n\nfunction createInteractionProps(interactionConfig) {\n const pickable = interactionConfig && interactionConfig.tooltip.enabled;\n return {\n autoHighlight: pickable,\n pickable\n };\n}\n\nfunction mapProps(source, target, mapping) {\n for (const sourceKey in mapping) {\n const sourceValue = source[sourceKey];\n const targetKey = mapping[sourceKey];\n if (sourceValue === undefined) {\n // eslint-disable-next-line no-continue\n continue;\n }\n if (typeof targetKey === 'string') {\n target[targetKey] = sourceValue;\n } else if (typeof targetKey === 'object') {\n // Nested definition, recurse down one level\n mapProps(sourceValue, target, targetKey);\n }\n }\n}\n\nfunction createStyleProps(config, mapping) {\n const result = {};\n mapProps(config, result, mapping);\n result.highlightColor = config.visConfig.enable3d ? [255, 255, 255, 60] : [252, 242, 26, 255];\n return result;\n}\n\n/* eslint-disable complexity */\nfunction createChannelProps(visualChannels, type, config, data) {\n const {colorField, colorScale, sizeField, sizeScale, strokeColorField, strokeColorScale} =\n visualChannels;\n let {heightField, heightScale} = visualChannels;\n if (type === 'hexagonId') {\n heightField = sizeField;\n heightScale = sizeScale;\n }\n const {textLabel, visConfig} = config;\n const result = {};\n const textLabelField = textLabel && textLabel.field;\n if (colorField) {\n result.getFillColor = getColorAccessor(\n colorField,\n colorScale,\n visConfig.colorRange,\n 1, // Rely on layer opacity\n data\n );\n }\n if (strokeColorField) {\n const opacity =\n visConfig.strokeOpacity !== undefined ? visConfig.strokeOpacity / visConfig.opacity : 1;\n result.getLineColor = getColorAccessor(\n strokeColorField,\n strokeColorScale,\n visConfig.colorRange,\n opacity,\n data\n );\n }\n if (heightField) {\n result.getElevation = getSizeAccessor(\n heightField,\n heightScale,\n visConfig.heightRange || visConfig.sizeRange,\n data\n );\n }\n if (sizeField) {\n result.getPointRadius = getSizeAccessor(\n sizeField,\n sizeScale,\n visConfig.radiusRange || visConfig.sizeRange,\n data\n );\n }\n if (textLabelField) {\n result.getText = getTextAccessor(textLabelField, data);\n result.pointType = 'text';\n const radius = result.getPointRadius || visConfig.radius;\n result.getTextPixelOffset = getTextPixelOffsetAccessor(textLabel, radius);\n }\n\n return result;\n}\n"],"file":"parseMap.js"}
1
+ {"version":3,"sources":["../../../src/api/parseMap.js"],"names":["getLayer","getColorAccessor","getSizeAccessor","getTextAccessor","getTextPixelOffsetAccessor","_flatten","flatten","log","parseMap","json","keplerMapConfig","datasets","assert","version","mapState","mapStyle","config","layers","layerBlending","interactionConfig","visState","id","title","description","createdAt","updatedAt","initialViewState","extractTextLayers","reverse","map","type","visualChannels","Layer","propMap","defaultProps","dataId","dataset","find","d","data","createBlendingProps","textLabel","createInteractionProps","createStyleProps","createChannelProps","e","error","message","undefined","rest","configRest","filter","t","field","name","label","visConfig","opacity","parameters","blendFunc","blendEquation","pickable","tooltip","enabled","autoHighlight","mapProps","source","target","mapping","sourceKey","sourceValue","targetKey","result","highlightColor","enable3d","colorField","colorScale","sizeField","sizeScale","strokeColorField","strokeColorScale","heightField","heightScale","textLabelField","getFillColor","colorRange","strokeOpacity","getLineColor","strokeColorRange","getElevation","heightRange","sizeRange","getPointRadius","radiusRange","getText","pointType","radius","getTextPixelOffset"],"mappings":"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","sourcesContent":["import GL from '@luma.gl/constants';\nimport {\n getLayer,\n getColorAccessor,\n getSizeAccessor,\n getTextAccessor,\n getTextPixelOffsetAccessor\n} from './layer-map';\nimport {_flatten as flatten, log} from '@deck.gl/core';\n\nexport function parseMap(json) {\n const {keplerMapConfig, datasets} = json;\n log.assert(keplerMapConfig.version === 'v1', 'Only support Kepler v1');\n const {mapState, mapStyle} = keplerMapConfig.config;\n const {layers, layerBlending, interactionConfig} = keplerMapConfig.config.visState;\n\n return {\n id: json.id,\n title: json.title,\n description: json.description,\n createdAt: json.createdAt,\n updatedAt: json.updatedAt,\n initialViewState: mapState,\n mapStyle,\n layers: extractTextLayers(layers.reverse()).map(({id, type, config, visualChannels}) => {\n try {\n const {Layer, propMap, defaultProps} = getLayer(type, config);\n const {dataId} = config;\n const dataset = datasets.find(d => d.id === dataId);\n log.assert(dataset, `No dataset matching dataId: ${dataId}`);\n const {data} = dataset;\n log.assert(data, `No data loaded for dataId: ${dataId}`);\n return new Layer({\n id,\n data,\n ...defaultProps,\n ...createBlendingProps(layerBlending),\n ...(!config.textLabel && createInteractionProps(interactionConfig)),\n ...createStyleProps(config, propMap),\n ...createChannelProps(visualChannels, type, config, data) // Must come after style\n });\n } catch (e) {\n log.error(e.message)();\n return undefined;\n }\n })\n };\n}\n\nfunction extractTextLayers(layers) {\n return flatten(\n layers.map(({id, config, ...rest}) => {\n const {textLabel, ...configRest} = config;\n return [\n // Original layer without textLabel\n {id, config: configRest, ...rest},\n\n // One layer per valid text label, with full opacity\n ...textLabel\n .filter(t => t.field)\n .map(t => {\n return {\n id: `${id}-label-${t.field.name}`,\n config: {\n textLabel: t,\n ...configRest,\n label: `${config.label}-label-${t.field.name}`,\n visConfig: {...configRest.visConfig, opacity: 1}\n },\n ...rest\n };\n })\n ];\n })\n );\n}\n\nfunction createBlendingProps(layerBlending) {\n if (layerBlending === 'additive') {\n return {\n parameters: {\n blendFunc: [GL.SRC_ALPHA, GL.DST_ALPHA],\n blendEquation: GL.FUNC_ADD\n }\n };\n } else if (layerBlending === 'subtractive') {\n return {\n parameters: {\n blendFunc: [GL.ONE, GL.ONE_MINUS_DST_COLOR, GL.SRC_ALPHA, GL.DST_ALPHA],\n blendEquation: [GL.FUNC_SUBTRACT, GL.FUNC_ADD]\n }\n };\n }\n\n return {};\n}\n\nfunction createInteractionProps(interactionConfig) {\n const pickable = interactionConfig && interactionConfig.tooltip.enabled;\n return {\n autoHighlight: pickable,\n pickable\n };\n}\n\nfunction mapProps(source, target, mapping) {\n for (const sourceKey in mapping) {\n const sourceValue = source[sourceKey];\n const targetKey = mapping[sourceKey];\n if (sourceValue === undefined) {\n // eslint-disable-next-line no-continue\n continue;\n }\n if (typeof targetKey === 'string') {\n target[targetKey] = sourceValue;\n } else if (typeof targetKey === 'object') {\n // Nested definition, recurse down one level\n mapProps(sourceValue, target, targetKey);\n }\n }\n}\n\nfunction createStyleProps(config, mapping) {\n const result = {};\n mapProps(config, result, mapping);\n result.highlightColor = config.visConfig.enable3d ? [255, 255, 255, 60] : [252, 242, 26, 255];\n return result;\n}\n\n/* eslint-disable complexity */\nfunction createChannelProps(visualChannels, type, config, data) {\n const {colorField, colorScale, sizeField, sizeScale, strokeColorField, strokeColorScale} =\n visualChannels;\n let {heightField, heightScale} = visualChannels;\n if (type === 'hexagonId') {\n heightField = sizeField;\n heightScale = sizeScale;\n }\n const {textLabel, visConfig} = config;\n const result = {};\n const textLabelField = textLabel && textLabel.field;\n if (colorField) {\n result.getFillColor = getColorAccessor(\n colorField,\n colorScale,\n visConfig.colorRange,\n 1, // Rely on layer opacity\n data\n );\n }\n if (strokeColorField) {\n const opacity = visConfig.strokeOpacity !== undefined ? visConfig.strokeOpacity : 1;\n result.getLineColor = getColorAccessor(\n strokeColorField,\n strokeColorScale,\n visConfig.strokeColorRange,\n opacity,\n data\n );\n }\n if (heightField) {\n result.getElevation = getSizeAccessor(\n heightField,\n heightScale,\n visConfig.heightRange || visConfig.sizeRange,\n data\n );\n }\n if (sizeField) {\n result.getPointRadius = getSizeAccessor(\n sizeField,\n sizeScale,\n visConfig.radiusRange || visConfig.sizeRange,\n data\n );\n }\n if (textLabelField) {\n result.getText = getTextAccessor(textLabelField, data);\n result.pointType = 'text';\n const radius = result.getPointRadius || visConfig.radius;\n result.getTextPixelOffset = getTextPixelOffsetAccessor(textLabel, radius);\n }\n\n return result;\n}\n"],"file":"parseMap.js"}
package/dist/esm/index.js CHANGED
@@ -1,5 +1,6 @@
1
1
  export { getDefaultCredentials, setDefaultCredentials } from './config.js';
2
2
  export { default as CartoLayer } from './layers/carto-layer';
3
+ export { default as _CartoDynamicTileLayer } from './layers/carto-dynamic-tile-layer';
3
4
  export { default as BASEMAP } from './basemap';
4
5
  export { default as colorBins } from './style/color-bins-style';
5
6
  export { default as colorCategories } from './style/color-categories-style';
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/index.js"],"names":["getDefaultCredentials","setDefaultCredentials","default","CartoLayer","BASEMAP","colorBins","colorCategories","colorContinuous","FORMATS","MAP_TYPES","API_VERSIONS","fetchLayerData","fetchMap","getDataV2","_getDataV2","getData","mapInstantiation","_mapInstantiation"],"mappings":"AAAA,SAAQA,qBAAR,EAA+BC,qBAA/B,QAA2D,aAA3D;AACA,SAAQC,OAAO,IAAIC,UAAnB,QAAoC,sBAApC;AACA,SAAQD,OAAO,IAAIE,OAAnB,QAAiC,WAAjC;AACA,SAAQF,OAAO,IAAIG,SAAnB,QAAmC,0BAAnC;AACA,SAAQH,OAAO,IAAII,eAAnB,QAAyC,gCAAzC;AACA,SAAQJ,OAAO,IAAIK,eAAnB,QAAyC,gCAAzC;AACA,SACEC,OADF,EAEEC,SAFF,EAGEC,YAHF,EAIEC,cAJF,EAKEC,QALF,EAMEC,SAAS,IAAIC,UANf,EAOEC,OAPF,EAQEC,gBAAgB,IAAIC,iBARtB,QASO,OATP","sourcesContent":["export {getDefaultCredentials, setDefaultCredentials} from './config.js';\nexport {default as CartoLayer} from './layers/carto-layer';\nexport {default as BASEMAP} from './basemap';\nexport {default as colorBins} from './style/color-bins-style';\nexport {default as colorCategories} from './style/color-categories-style';\nexport {default as colorContinuous} from './style/color-continuous-style';\nexport {\n FORMATS,\n MAP_TYPES,\n API_VERSIONS,\n fetchLayerData,\n fetchMap,\n getDataV2 as _getDataV2,\n getData,\n mapInstantiation as _mapInstantiation\n} from './api';\n"],"file":"index.js"}
1
+ {"version":3,"sources":["../../src/index.js"],"names":["getDefaultCredentials","setDefaultCredentials","default","CartoLayer","_CartoDynamicTileLayer","BASEMAP","colorBins","colorCategories","colorContinuous","FORMATS","MAP_TYPES","API_VERSIONS","fetchLayerData","fetchMap","getDataV2","_getDataV2","getData","mapInstantiation","_mapInstantiation"],"mappings":"AAAA,SAAQA,qBAAR,EAA+BC,qBAA/B,QAA2D,aAA3D;AACA,SAAQC,OAAO,IAAIC,UAAnB,QAAoC,sBAApC;AACA,SAAQD,OAAO,IAAIE,sBAAnB,QAAgD,mCAAhD;AACA,SAAQF,OAAO,IAAIG,OAAnB,QAAiC,WAAjC;AACA,SAAQH,OAAO,IAAII,SAAnB,QAAmC,0BAAnC;AACA,SAAQJ,OAAO,IAAIK,eAAnB,QAAyC,gCAAzC;AACA,SAAQL,OAAO,IAAIM,eAAnB,QAAyC,gCAAzC;AACA,SACEC,OADF,EAEEC,SAFF,EAGEC,YAHF,EAIEC,cAJF,EAKEC,QALF,EAMEC,SAAS,IAAIC,UANf,EAOEC,OAPF,EAQEC,gBAAgB,IAAIC,iBARtB,QASO,OATP","sourcesContent":["export {getDefaultCredentials, setDefaultCredentials} from './config.js';\nexport {default as CartoLayer} from './layers/carto-layer';\nexport {default as _CartoDynamicTileLayer} from './layers/carto-dynamic-tile-layer';\nexport {default as BASEMAP} from './basemap';\nexport {default as colorBins} from './style/color-bins-style';\nexport {default as colorCategories} from './style/color-categories-style';\nexport {default as colorContinuous} from './style/color-continuous-style';\nexport {\n FORMATS,\n MAP_TYPES,\n API_VERSIONS,\n fetchLayerData,\n fetchMap,\n getDataV2 as _getDataV2,\n getData,\n mapInstantiation as _mapInstantiation\n} from './api';\n"],"file":"index.js"}
@@ -0,0 +1,97 @@
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
@@ -0,0 +1 @@
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,8 +1,9 @@
1
1
  import { CompositeLayer, log } from '@deck.gl/core';
2
+ import CartoDynamicTileLayer from './carto-dynamic-tile-layer';
2
3
  import { MVTLayer } from '@deck.gl/geo-layers';
3
4
  import { GeoJsonLayer } from '@deck.gl/layers';
4
5
  import { fetchLayerData, getDataV2, API_VERSIONS } from '../api';
5
- import { FORMATS, MAP_TYPES } from '../api/maps-api-common';
6
+ import { FORMATS, MAP_TYPES, TILE_FORMATS } from '../api/maps-api-common';
6
7
  import { getDefaultCredentials } from '../config';
7
8
  const defaultProps = {
8
9
  data: null,
@@ -22,6 +23,7 @@ const defaultProps = {
22
23
  credentials: null,
23
24
  connection: null,
24
25
  format: null,
26
+ clientId: null,
25
27
  geoColumn: null,
26
28
  columns: {
27
29
  type: 'array',
@@ -100,6 +102,7 @@ export default class CartoLayer extends CompositeLayer {
100
102
  const {
101
103
  type,
102
104
  data: source,
105
+ clientId,
103
106
  credentials,
104
107
  ...rest
105
108
  } = this.props;
@@ -123,6 +126,7 @@ export default class CartoLayer extends CompositeLayer {
123
126
  result = await fetchLayerData({
124
127
  type,
125
128
  source,
129
+ clientId,
126
130
  credentials,
127
131
  ...rest
128
132
  });
@@ -152,8 +156,11 @@ export default class CartoLayer extends CompositeLayer {
152
156
  updateTriggers
153
157
  } = this.props;
154
158
  let layer;
159
+ const tilesFormat = apiVersion === API_VERSIONS.V3 && format === FORMATS.TILEJSON && new URLSearchParams(data.tiles[0]).get('format');
155
160
 
156
- if (apiVersion === API_VERSIONS.V1 || apiVersion === API_VERSIONS.V2 || format === FORMATS.TILEJSON) {
161
+ if (tilesFormat && tilesFormat !== TILE_FORMATS.MVT) {
162
+ layer = CartoDynamicTileLayer;
163
+ } else if (apiVersion === API_VERSIONS.V1 || apiVersion === API_VERSIONS.V2 || format === FORMATS.TILEJSON) {
157
164
  layer = MVTLayer;
158
165
  } else {
159
166
  layer = GeoJsonLayer;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/layers/carto-layer.js"],"names":["CompositeLayer","log","MVTLayer","GeoJsonLayer","fetchLayerData","getDataV2","API_VERSIONS","FORMATS","MAP_TYPES","getDefaultCredentials","defaultProps","data","type","onDataLoad","value","compare","onDataError","optional","uniqueIdProperty","credentials","connection","format","geoColumn","columns","CartoLayer","initializeState","state","apiVersion","isLoaded","getSubLayers","length","_checkProps","props","localCreds","assert","Object","values","includes","V1","V2","QUERY","TILESET","V3","TABLE","Array","isArray","updateState","oldProps","changeFlags","shouldUpdateData","dataChanged","JSON","stringify","setState","_updateData","source","rest","localConfig","result","err","renderLayers","updateTriggers","layer","TILEJSON","getSubLayerProps","id","layerName"],"mappings":"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","sourcesContent":["import {CompositeLayer, log} from '@deck.gl/core';\nimport {MVTLayer} from '@deck.gl/geo-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {fetchLayerData, getDataV2, API_VERSIONS} from '../api';\nimport {FORMATS, MAP_TYPES} from '../api/maps-api-common';\nimport {getDefaultCredentials} from '../config';\n\nconst defaultProps = {\n // (String, required): data resource to load. table name, sql query or tileset name.\n data: null,\n // (Enum (MAP_TYPES), required)\n type: null,\n onDataLoad: {type: 'function', value: data => {}, compare: false},\n onDataError: {type: 'function', value: null, compare: false, optional: true},\n uniqueIdProperty: 'cartodb_id',\n\n // override carto credentials for the layer, set to null to read from default\n credentials: null,\n\n /*********************/\n /* API v3 PARAMETERS */\n /**********************/\n // (String, required): connection name at CARTO platform\n connection: null,\n\n // (String, optional): format of data\n format: null,\n\n // (String, optional): name of the `geo_column` in the CARTO platform. Use this override the default column ('geom'), from which the geometry information should be fetched.\n geoColumn: null,\n\n // (Array<String>, optional): names of columns to fetch. By default, all columns are fetched.\n columns: {type: 'array', value: null}\n};\n\nexport default class CartoLayer extends CompositeLayer {\n initializeState() {\n this.state = {\n data: null,\n apiVersion: null\n };\n }\n\n get isLoaded() {\n return this.getSubLayers().length > 0 && super.isLoaded;\n }\n\n _checkProps(props) {\n const {type, credentials, connection, geoColumn, columns} = props;\n const localCreds = {...getDefaultCredentials(), ...credentials};\n const {apiVersion} = localCreds;\n\n log.assert(\n Object.values(API_VERSIONS).includes(apiVersion),\n `Invalid apiVersion ${apiVersion}. Use API_VERSIONS enum.`\n );\n\n if (apiVersion === API_VERSIONS.V1 || apiVersion === API_VERSIONS.V2) {\n log.assert(\n type === MAP_TYPES.QUERY || type === MAP_TYPES.TILESET,\n `Invalid type ${type}. Use type MAP_TYPES.QUERY or MAP_TYPES.TILESET for apiVersion ${apiVersion}`\n );\n log.assert(!connection, `Connection prop is not supported for apiVersion ${apiVersion}`);\n log.assert(!geoColumn, `geoColumn prop is not supported for apiVersion ${apiVersion}`);\n log.assert(!columns, `columns prop is not supported for apiVersion ${apiVersion}`);\n } else if (apiVersion === API_VERSIONS.V3) {\n log.assert(connection, 'Missing mandatory connection parameter');\n log.assert(\n Object.values(MAP_TYPES).includes(type),\n `Invalid type ${type}. Use MAP_TYPES enum.`\n );\n if (type !== MAP_TYPES.TABLE) {\n log.assert(!geoColumn, `geoColumn prop is only supported for type ${MAP_TYPES.TABLE}`);\n log.assert(!columns, `columns prop is only supported for type ${MAP_TYPES.TABLE}`);\n }\n if (columns) {\n log.assert(Array.isArray(columns), 'columns prop must be an Array');\n }\n }\n }\n\n updateState({props, oldProps, changeFlags}) {\n this._checkProps(props);\n const shouldUpdateData =\n changeFlags.dataChanged ||\n props.connection !== oldProps.connection ||\n props.geoColumn !== oldProps.geoColumn ||\n JSON.stringify(props.columns) !== JSON.stringify(oldProps.columns) ||\n props.type !== oldProps.type ||\n JSON.stringify(props.credentials) !== JSON.stringify(oldProps.credentials);\n\n if (shouldUpdateData) {\n this.setState({data: null, apiVersion: null});\n this._updateData();\n }\n }\n\n async _updateData() {\n try {\n const {type, data: source, credentials, ...rest} = this.props;\n const localConfig = {...getDefaultCredentials(), ...credentials};\n const {apiVersion} = localConfig;\n\n let result;\n if (apiVersion === API_VERSIONS.V1 || apiVersion === API_VERSIONS.V2) {\n result = {data: await getDataV2({type, source, credentials})};\n } else {\n result = await fetchLayerData({type, source, credentials, ...rest});\n }\n\n this.setState({...result, apiVersion});\n this.props.onDataLoad(result.data);\n } catch (err) {\n if (this.props.onDataError) {\n this.props.onDataError(err);\n } else {\n throw err;\n }\n }\n }\n\n renderLayers() {\n const {data, format, apiVersion} = this.state;\n\n if (!data) return null;\n\n const {updateTriggers} = this.props;\n\n let layer;\n\n if (\n apiVersion === API_VERSIONS.V1 ||\n apiVersion === API_VERSIONS.V2 ||\n format === FORMATS.TILEJSON\n ) {\n layer = MVTLayer;\n } else {\n layer = GeoJsonLayer;\n }\n\n const {uniqueIdProperty} = defaultProps;\n const props = {uniqueIdProperty, ...this.props};\n delete props.data;\n\n // eslint-disable-next-line new-cap\n return new layer(\n props,\n this.getSubLayerProps({\n id: `carto-${layer.layerName}`,\n data,\n updateTriggers\n })\n );\n }\n}\n\nCartoLayer.layerName = 'CartoLayer';\nCartoLayer.defaultProps = defaultProps;\n"],"file":"carto-layer.js"}
1
+ {"version":3,"sources":["../../../src/layers/carto-layer.js"],"names":["CompositeLayer","log","CartoDynamicTileLayer","MVTLayer","GeoJsonLayer","fetchLayerData","getDataV2","API_VERSIONS","FORMATS","MAP_TYPES","TILE_FORMATS","getDefaultCredentials","defaultProps","data","type","onDataLoad","value","compare","onDataError","optional","uniqueIdProperty","credentials","connection","format","clientId","geoColumn","columns","CartoLayer","initializeState","state","apiVersion","isLoaded","getSubLayers","length","_checkProps","props","localCreds","assert","Object","values","includes","V1","V2","QUERY","TILESET","V3","TABLE","Array","isArray","updateState","oldProps","changeFlags","shouldUpdateData","dataChanged","JSON","stringify","setState","_updateData","source","rest","localConfig","result","err","renderLayers","updateTriggers","layer","tilesFormat","TILEJSON","URLSearchParams","tiles","get","MVT","getSubLayerProps","id","layerName"],"mappings":"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","sourcesContent":["import {CompositeLayer, log} from '@deck.gl/core';\nimport CartoDynamicTileLayer from './carto-dynamic-tile-layer';\nimport {MVTLayer} from '@deck.gl/geo-layers';\nimport {GeoJsonLayer} from '@deck.gl/layers';\nimport {fetchLayerData, getDataV2, API_VERSIONS} from '../api';\nimport {FORMATS, MAP_TYPES, TILE_FORMATS} from '../api/maps-api-common';\nimport {getDefaultCredentials} from '../config';\n\nconst defaultProps = {\n // (String, required): data resource to load. table name, sql query or tileset name.\n data: null,\n // (Enum (MAP_TYPES), required)\n type: null,\n onDataLoad: {type: 'function', value: data => {}, compare: false},\n onDataError: {type: 'function', value: null, compare: false, optional: true},\n uniqueIdProperty: 'cartodb_id',\n\n // override carto credentials for the layer, set to null to read from default\n credentials: null,\n\n /*********************/\n /* API v3 PARAMETERS */\n /**********************/\n // (String, required): connection name at CARTO platform\n connection: null,\n\n // (String, optional): format of data\n format: null,\n\n // (String, optional): clientId identifier used for internal tracing, place here a string to identify the client who is doing the request.\n clientId: null,\n\n // (String, optional): name of the `geo_column` in the CARTO platform. Use this override the default column ('geom'), from which the geometry information should be fetched.\n geoColumn: null,\n\n // (Array<String>, optional): names of columns to fetch. By default, all columns are fetched.\n columns: {type: 'array', value: null}\n};\n\nexport default class CartoLayer extends CompositeLayer {\n initializeState() {\n this.state = {\n data: null,\n apiVersion: null\n };\n }\n\n get isLoaded() {\n return this.getSubLayers().length > 0 && super.isLoaded;\n }\n\n _checkProps(props) {\n const {type, credentials, connection, geoColumn, columns} = props;\n const localCreds = {...getDefaultCredentials(), ...credentials};\n const {apiVersion} = localCreds;\n\n log.assert(\n Object.values(API_VERSIONS).includes(apiVersion),\n `Invalid apiVersion ${apiVersion}. Use API_VERSIONS enum.`\n );\n\n if (apiVersion === API_VERSIONS.V1 || apiVersion === API_VERSIONS.V2) {\n log.assert(\n type === MAP_TYPES.QUERY || type === MAP_TYPES.TILESET,\n `Invalid type ${type}. Use type MAP_TYPES.QUERY or MAP_TYPES.TILESET for apiVersion ${apiVersion}`\n );\n log.assert(!connection, `Connection prop is not supported for apiVersion ${apiVersion}`);\n log.assert(!geoColumn, `geoColumn prop is not supported for apiVersion ${apiVersion}`);\n log.assert(!columns, `columns prop is not supported for apiVersion ${apiVersion}`);\n } else if (apiVersion === API_VERSIONS.V3) {\n log.assert(connection, 'Missing mandatory connection parameter');\n log.assert(\n Object.values(MAP_TYPES).includes(type),\n `Invalid type ${type}. Use MAP_TYPES enum.`\n );\n if (type !== MAP_TYPES.TABLE) {\n log.assert(!geoColumn, `geoColumn prop is only supported for type ${MAP_TYPES.TABLE}`);\n log.assert(!columns, `columns prop is only supported for type ${MAP_TYPES.TABLE}`);\n }\n if (columns) {\n log.assert(Array.isArray(columns), 'columns prop must be an Array');\n }\n }\n }\n\n updateState({props, oldProps, changeFlags}) {\n this._checkProps(props);\n const shouldUpdateData =\n changeFlags.dataChanged ||\n props.connection !== oldProps.connection ||\n props.geoColumn !== oldProps.geoColumn ||\n JSON.stringify(props.columns) !== JSON.stringify(oldProps.columns) ||\n props.type !== oldProps.type ||\n JSON.stringify(props.credentials) !== JSON.stringify(oldProps.credentials);\n\n if (shouldUpdateData) {\n this.setState({data: null, apiVersion: null});\n this._updateData();\n }\n }\n\n async _updateData() {\n try {\n const {type, data: source, clientId, credentials, ...rest} = this.props;\n const localConfig = {...getDefaultCredentials(), ...credentials};\n const {apiVersion} = localConfig;\n\n let result;\n if (apiVersion === API_VERSIONS.V1 || apiVersion === API_VERSIONS.V2) {\n result = {data: await getDataV2({type, source, credentials})};\n } else {\n result = await fetchLayerData({type, source, clientId, credentials, ...rest});\n }\n\n this.setState({...result, apiVersion});\n this.props.onDataLoad(result.data);\n } catch (err) {\n if (this.props.onDataError) {\n this.props.onDataError(err);\n } else {\n throw err;\n }\n }\n }\n\n renderLayers() {\n const {data, format, apiVersion} = this.state;\n\n if (!data) return null;\n\n const {updateTriggers} = this.props;\n\n let layer;\n\n /* global URLSearchParams */\n const tilesFormat =\n apiVersion === API_VERSIONS.V3 &&\n format === FORMATS.TILEJSON &&\n new URLSearchParams(data.tiles[0]).get('format');\n\n if (tilesFormat && tilesFormat !== TILE_FORMATS.MVT) {\n layer = CartoDynamicTileLayer;\n } else if (\n apiVersion === API_VERSIONS.V1 ||\n apiVersion === API_VERSIONS.V2 ||\n format === FORMATS.TILEJSON\n ) {\n layer = MVTLayer;\n } else {\n layer = GeoJsonLayer;\n }\n\n const {uniqueIdProperty} = defaultProps;\n const props = {uniqueIdProperty, ...this.props};\n delete props.data;\n\n // eslint-disable-next-line new-cap\n return new layer(\n props,\n this.getSubLayerProps({\n id: `carto-${layer.layerName}`,\n data,\n updateTriggers\n })\n );\n }\n}\n\nCartoLayer.layerName = 'CartoLayer';\nCartoLayer.defaultProps = defaultProps;\n"],"file":"carto-layer.js"}