@deck.gl/carto 9.0.29 → 9.0.31

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 (49) hide show
  1. package/dist/api/common.d.ts +1 -1
  2. package/dist/api/common.d.ts.map +1 -1
  3. package/dist/api/common.js +2 -1
  4. package/dist/api/fetch-map.d.ts +7 -1
  5. package/dist/api/fetch-map.d.ts.map +1 -1
  6. package/dist/api/fetch-map.js +17 -15
  7. package/dist/api/query.d.ts.map +1 -1
  8. package/dist/api/query.js +3 -2
  9. package/dist/api/request-with-parameters.d.ts +2 -1
  10. package/dist/api/request-with-parameters.d.ts.map +1 -1
  11. package/dist/api/request-with-parameters.js +3 -3
  12. package/dist/cartoRasterTile-worker.js +1 -1
  13. package/dist/cartoSpatialTile-worker.js +1 -1
  14. package/dist/cartoVectorTile-worker.js +1 -1
  15. package/dist/dist.dev.js +57 -30
  16. package/dist/index.cjs +132 -180
  17. package/dist/index.cjs.map +2 -2
  18. package/dist/layers/cluster-tile-layer.d.ts.map +1 -1
  19. package/dist/layers/cluster-tile-layer.js +20 -9
  20. package/dist/layers/cluster-utils.d.ts +1 -1
  21. package/dist/layers/cluster-utils.d.ts.map +1 -1
  22. package/dist/layers/cluster-utils.js +5 -5
  23. package/dist/layers/h3-tile-layer.js +4 -3
  24. package/dist/layers/heatmap-tile-layer.js +3 -3
  25. package/dist/layers/point-label-layer.js +6 -5
  26. package/dist/layers/post-process-utils.js +89 -85
  27. package/dist/layers/quadbin-layer.js +4 -3
  28. package/dist/layers/quadbin-tile-layer.js +4 -3
  29. package/dist/layers/raster-layer.js +5 -4
  30. package/dist/layers/raster-tile-layer.js +4 -3
  31. package/dist/layers/schema/carto-raster-tile-loader.js +1 -1
  32. package/dist/layers/schema/carto-spatial-tile-loader.js +1 -1
  33. package/dist/layers/schema/carto-vector-tile-loader.js +1 -1
  34. package/dist/layers/spatial-index-tile-layer.js +4 -3
  35. package/dist/layers/vector-tile-layer.js +4 -3
  36. package/dist/sources/base-source.d.ts.map +1 -1
  37. package/dist/sources/base-source.js +10 -6
  38. package/dist/sources/types.d.ts +6 -0
  39. package/dist/sources/types.d.ts.map +1 -1
  40. package/dist.min.js +9 -9
  41. package/package.json +2 -2
  42. package/src/api/common.ts +3 -1
  43. package/src/api/fetch-map.ts +38 -18
  44. package/src/api/query.ts +3 -1
  45. package/src/api/request-with-parameters.ts +5 -3
  46. package/src/layers/cluster-tile-layer.ts +14 -1
  47. package/src/layers/cluster-utils.ts +5 -4
  48. package/src/sources/base-source.ts +10 -6
  49. package/src/sources/types.ts +7 -0
@@ -1,5 +1,5 @@
1
1
  export declare const DEFAULT_API_BASE_URL = "https://gcp-us-east1.api.carto.com";
2
2
  export declare const DEFAULT_CLIENT = "deck-gl-carto";
3
3
  export declare const V3_MINOR_VERSION = "3.4";
4
- export declare const MAX_GET_LENGTH = 8192;
4
+ export declare const DEFAULT_MAX_LENGTH_URL = 7000;
5
5
  //# sourceMappingURL=common.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/api/common.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,uCAAuC,CAAC;AACzE,eAAO,MAAM,cAAc,kBAAkB,CAAC;AAC9C,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AACtC,eAAO,MAAM,cAAc,OAAO,CAAC"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/api/common.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,oBAAoB,uCAAuC,CAAC;AACzE,eAAO,MAAM,cAAc,kBAAkB,CAAC;AAC9C,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAGtC,eAAO,MAAM,sBAAsB,OAAO,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export const DEFAULT_API_BASE_URL = 'https://gcp-us-east1.api.carto.com';
2
2
  export const DEFAULT_CLIENT = 'deck-gl-carto';
3
3
  export const V3_MINOR_VERSION = '3.4';
4
- export const MAX_GET_LENGTH = 8192;
4
+ // Fastly default limit is 8192; leave some padding.
5
+ export const DEFAULT_MAX_LENGTH_URL = 7000;
@@ -30,6 +30,12 @@ export type FetchMapOptions = {
30
30
  * Callback function that will be invoked whenever data in layers is changed. If provided, `autoRefresh` must also be provided.
31
31
  */
32
32
  onNewData?: (map: any) => void;
33
+ /**
34
+ * Maximum URL character length. Above this limit, requests use POST.
35
+ * Used to avoid browser and CDN limits.
36
+ * @default {@link DEFAULT_MAX_LENGTH_URL}
37
+ */
38
+ maxLengthURL?: number;
33
39
  };
34
40
  export type FetchMapResult = ParseMapResult & {
35
41
  /**
@@ -38,5 +44,5 @@ export type FetchMapResult = ParseMapResult & {
38
44
  basemap: Basemap | null;
39
45
  stopAutoRefresh?: () => void;
40
46
  };
41
- export declare function fetchMap({ accessToken, apiBaseUrl, cartoMapId, clientId, headers, autoRefresh, onNewData }: FetchMapOptions): Promise<FetchMapResult>;
47
+ export declare function fetchMap({ accessToken, apiBaseUrl, cartoMapId, clientId, headers, autoRefresh, onNewData, maxLengthURL }: FetchMapOptions): Promise<FetchMapResult>;
42
48
  //# sourceMappingURL=fetch-map.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-map.d.ts","sourceRoot":"","sources":["../../src/api/fetch-map.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,cAAc,EAAW,uBAAoB;AAGrD,OAAO,KAAK,EAAkB,OAAO,EAAmC,mBAAgB;AAyLxF,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C;;OAEG;IACH,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAGF,wBAAsB,QAAQ,CAAC,EAC7B,WAAW,EACX,UAAiC,EACjC,UAAU,EACV,QAAyB,EACzB,OAAY,EACZ,WAAW,EACX,SAAS,EACV,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAmF3C"}
1
+ {"version":3,"file":"fetch-map.d.ts","sourceRoot":"","sources":["../../src/api/fetch-map.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAC,cAAc,EAAW,uBAAoB;AAGrD,OAAO,KAAK,EAAkB,OAAO,EAAmC,mBAAgB;AA+LxF,MAAM,MAAM,eAAe,GAAG;IAC5B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB;;OAEG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC;IAE/B;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,cAAc,GAAG;IAC5C;;OAEG;IACH,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;CAC9B,CAAC;AAGF,wBAAsB,QAAQ,CAAC,EAC7B,WAAW,EACX,UAAiC,EACjC,UAAU,EACV,QAAyB,EACzB,OAAY,EACZ,WAAW,EACX,SAAS,EACT,YAAqC,EACtC,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAyF3C"}
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable camelcase */
2
2
  import { CartoAPIError } from "./carto-api-error.js";
3
- import { DEFAULT_API_BASE_URL, DEFAULT_CLIENT } from "./common.js";
3
+ import { DEFAULT_API_BASE_URL, DEFAULT_CLIENT, DEFAULT_MAX_LENGTH_URL } from "./common.js";
4
4
  import { buildPublicMapUrl, buildStatsUrl } from "./endpoints.js";
5
5
  import { h3QuerySource, h3TableSource, quadbinQuerySource, quadbinTableSource, vectorQuerySource, vectorTableSource, vectorTilesetSource } from "../sources/index.js";
6
6
  import { parseMap } from "./parse-map.js";
@@ -8,8 +8,8 @@ import { requestWithParameters } from "./request-with-parameters.js";
8
8
  import { assert } from "../utils.js";
9
9
  import { fetchBasemapProps } from "./basemap.js";
10
10
  /* global clearInterval, setInterval, URL */
11
- /* eslint-disable complexity, max-statements */
12
- async function _fetchMapDataset(dataset, accessToken, apiBaseUrl, clientId, headers) {
11
+ /* eslint-disable complexity, max-statements, max-params */
12
+ async function _fetchMapDataset(dataset, accessToken, apiBaseUrl, clientId, headers, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {
13
13
  const { aggregationExp, aggregationResLevel, connectionName, columns, format, geoColumn, source, type, queryParameters } = dataset;
14
14
  const cache = {};
15
15
  const globalOptions = {
@@ -19,7 +19,8 @@ async function _fetchMapDataset(dataset, accessToken, apiBaseUrl, clientId, head
19
19
  clientId,
20
20
  connectionName,
21
21
  format,
22
- headers
22
+ headers,
23
+ maxLengthURL
23
24
  };
24
25
  if (type === 'tileset') {
25
26
  // TODO do we want a generic tilesetSource?
@@ -68,7 +69,7 @@ async function _fetchMapDataset(dataset, accessToken, apiBaseUrl, clientId, head
68
69
  }
69
70
  return cacheChanged;
70
71
  }
71
- async function _fetchTilestats(attribute, dataset, accessToken, apiBaseUrl) {
72
+ async function _fetchTilestats(attribute, dataset, accessToken, apiBaseUrl, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {
72
73
  const { connectionName, data, id, source, type, queryParameters } = dataset;
73
74
  const errorContext = {
74
75
  requestType: 'Tile stats',
@@ -96,7 +97,8 @@ async function _fetchTilestats(attribute, dataset, accessToken, apiBaseUrl) {
96
97
  baseUrl,
97
98
  headers,
98
99
  parameters,
99
- errorContext
100
+ errorContext,
101
+ maxLengthURL
100
102
  });
101
103
  // Replace tilestats for attribute with value from API
102
104
  const { attributes } = data.tilestats.layers[0];
@@ -104,11 +106,11 @@ async function _fetchTilestats(attribute, dataset, accessToken, apiBaseUrl) {
104
106
  attributes[index] = stats;
105
107
  return true;
106
108
  }
107
- async function fillInMapDatasets({ datasets, token }, clientId, apiBaseUrl, headers) {
108
- const promises = datasets.map(dataset => _fetchMapDataset(dataset, token, apiBaseUrl, clientId, headers));
109
+ async function fillInMapDatasets({ datasets, token }, clientId, apiBaseUrl, headers, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {
110
+ const promises = datasets.map(dataset => _fetchMapDataset(dataset, token, apiBaseUrl, clientId, headers, maxLengthURL));
109
111
  return await Promise.all(promises);
110
112
  }
111
- async function fillInTileStats({ datasets, keplerMapConfig, token }, apiBaseUrl) {
113
+ async function fillInTileStats({ datasets, keplerMapConfig, token }, apiBaseUrl, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {
112
114
  const attributes = [];
113
115
  const { layers } = keplerMapConfig.config.visState;
114
116
  for (const layer of layers) {
@@ -130,11 +132,11 @@ async function fillInTileStats({ datasets, keplerMapConfig, token }, apiBaseUrl)
130
132
  filteredAttributes.push(a);
131
133
  }
132
134
  }
133
- const promises = filteredAttributes.map(({ attribute, dataset }) => _fetchTilestats(attribute, dataset, token, apiBaseUrl));
135
+ const promises = filteredAttributes.map(({ attribute, dataset }) => _fetchTilestats(attribute, dataset, token, apiBaseUrl, maxLengthURL));
134
136
  return await Promise.all(promises);
135
137
  }
136
138
  /* eslint-disable max-statements */
137
- export async function fetchMap({ accessToken, apiBaseUrl = DEFAULT_API_BASE_URL, cartoMapId, clientId = DEFAULT_CLIENT, headers = {}, autoRefresh, onNewData }) {
139
+ export async function fetchMap({ accessToken, apiBaseUrl = DEFAULT_API_BASE_URL, cartoMapId, clientId = DEFAULT_CLIENT, headers = {}, autoRefresh, onNewData, maxLengthURL = DEFAULT_MAX_LENGTH_URL }) {
138
140
  assert(cartoMapId, 'Must define CARTO map id: fetchMap({cartoMapId: "XXXX-XXXX-XXXX"})');
139
141
  assert(apiBaseUrl, 'Must define apiBaseUrl');
140
142
  if (accessToken) {
@@ -147,7 +149,7 @@ export async function fetchMap({ accessToken, apiBaseUrl = DEFAULT_API_BASE_URL,
147
149
  }
148
150
  const baseUrl = buildPublicMapUrl({ apiBaseUrl, cartoMapId });
149
151
  const errorContext = { requestType: 'Public map', mapId: cartoMapId };
150
- const map = await requestWithParameters({ baseUrl, headers, errorContext });
152
+ const map = await requestWithParameters({ baseUrl, headers, errorContext, maxLengthURL });
151
153
  // Periodically check if the data has changed. Note that this
152
154
  // will not update when a map is published.
153
155
  let stopAutoRefresh;
@@ -157,7 +159,7 @@ export async function fetchMap({ accessToken, apiBaseUrl = DEFAULT_API_BASE_URL,
157
159
  const changed = await fillInMapDatasets(map, clientId, apiBaseUrl, {
158
160
  ...headers,
159
161
  'If-Modified-Since': new Date().toUTCString()
160
- });
162
+ }, maxLengthURL);
161
163
  if (onNewData && changed.some(v => v === true)) {
162
164
  onNewData(parseMap(map));
163
165
  }
@@ -181,10 +183,10 @@ export async function fetchMap({ accessToken, apiBaseUrl = DEFAULT_API_BASE_URL,
181
183
  const [basemap] = await Promise.all([
182
184
  fetchBasemapProps({ config: map.keplerMapConfig.config, errorContext }),
183
185
  // Mutates map.datasets so that dataset.data contains data
184
- fillInMapDatasets(map, clientId, apiBaseUrl, headers)
186
+ fillInMapDatasets(map, clientId, apiBaseUrl, headers, maxLengthURL)
185
187
  ]);
186
188
  // Mutates attributes in visualChannels to contain tile stats
187
- await fillInTileStats(map, apiBaseUrl);
189
+ await fillInTileStats(map, apiBaseUrl, maxLengthURL);
188
190
  const out = { ...parseMap(map), basemap, ...{ stopAutoRefresh } };
189
191
  const textLayers = out.layers.filter(layer => {
190
192
  const pointType = layer.props.pointType || '';
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/api/query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAC,4BAAyB;AAKrF,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;AAGzF,eAAO,MAAM,KAAK,YAA4B,YAAY,KAAG,QAAQ,WAAW,CA8B/E,CAAC"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/api/query.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAC,aAAa,EAAE,kBAAkB,EAAE,WAAW,EAAC,4BAAyB;AAKrF,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,IAAI,CAAC,kBAAkB,EAAE,mBAAmB,CAAC,CAAC;AAGzF,eAAO,MAAM,KAAK,YAA4B,YAAY,KAAG,QAAQ,WAAW,CAgC/E,CAAC"}
package/dist/api/query.js CHANGED
@@ -2,7 +2,7 @@ import { SOURCE_DEFAULTS } from "../sources/index.js";
2
2
  import { buildQueryUrl } from "./endpoints.js";
3
3
  import { requestWithParameters } from "./request-with-parameters.js";
4
4
  export const query = async function (options) {
5
- const { apiBaseUrl = SOURCE_DEFAULTS.apiBaseUrl, clientId = SOURCE_DEFAULTS.clientId, connectionName, sqlQuery, queryParameters } = options;
5
+ const { apiBaseUrl = SOURCE_DEFAULTS.apiBaseUrl, clientId = SOURCE_DEFAULTS.clientId, maxLengthURL = SOURCE_DEFAULTS.maxLengthURL, connectionName, sqlQuery, queryParameters } = options;
6
6
  const urlParameters = { q: sqlQuery };
7
7
  if (queryParameters) {
8
8
  urlParameters.queryParameters = JSON.stringify(queryParameters);
@@ -20,6 +20,7 @@ export const query = async function (options) {
20
20
  baseUrl,
21
21
  parameters,
22
22
  headers,
23
- errorContext
23
+ errorContext,
24
+ maxLengthURL
24
25
  });
25
26
  };
@@ -1,8 +1,9 @@
1
1
  import type { APIErrorContext } from "./types.js";
2
- export declare function requestWithParameters<T = any>({ baseUrl, parameters, headers: customHeaders, errorContext }: {
2
+ export declare function requestWithParameters<T = any>({ baseUrl, parameters, headers: customHeaders, errorContext, maxLengthURL }: {
3
3
  baseUrl: string;
4
4
  parameters?: Record<string, unknown>;
5
5
  headers?: Record<string, string>;
6
6
  errorContext: APIErrorContext;
7
+ maxLengthURL?: number;
7
8
  }): Promise<T>;
8
9
  //# sourceMappingURL=request-with-parameters.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request-with-parameters.d.ts","sourceRoot":"","sources":["../../src/api/request-with-parameters.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,eAAe,EAAC,mBAAgB;AAmB7C,wBAAsB,qBAAqB,CAAC,CAAC,GAAG,GAAG,EAAE,EACnD,OAAO,EACP,UAAe,EACf,OAAO,EAAE,aAAkB,EAC3B,YAAY,EACb,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,eAAe,CAAC;CAC/B,GAAG,OAAO,CAAC,CAAC,CAAC,CAsCb"}
1
+ {"version":3,"file":"request-with-parameters.d.ts","sourceRoot":"","sources":["../../src/api/request-with-parameters.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAC,eAAe,EAAC,mBAAgB;AAmB7C,wBAAsB,qBAAqB,CAAC,CAAC,GAAG,GAAG,EAAE,EACnD,OAAO,EACP,UAAe,EACf,OAAO,EAAE,aAAkB,EAC3B,YAAY,EACZ,YAAqC,EACtC,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,YAAY,EAAE,eAAe,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,GAAG,OAAO,CAAC,CAAC,CAAC,CAsCb"}
@@ -1,7 +1,7 @@
1
1
  import { VERSION } from '@deck.gl/core';
2
2
  import { isPureObject } from "../utils.js";
3
3
  import { CartoAPIError } from "./carto-api-error.js";
4
- import { MAX_GET_LENGTH, V3_MINOR_VERSION } from "./common.js";
4
+ import { DEFAULT_MAX_LENGTH_URL, V3_MINOR_VERSION } from "./common.js";
5
5
  /**
6
6
  * Parameters added to all requests issued with `requestWithParameters()`.
7
7
  * These parameters override parameters already in the base URL, but not
@@ -16,7 +16,7 @@ const DEFAULT_HEADERS = {
16
16
  'Content-Type': 'application/json'
17
17
  };
18
18
  const REQUEST_CACHE = new Map();
19
- export async function requestWithParameters({ baseUrl, parameters = {}, headers: customHeaders = {}, errorContext }) {
19
+ export async function requestWithParameters({ baseUrl, parameters = {}, headers: customHeaders = {}, errorContext, maxLengthURL = DEFAULT_MAX_LENGTH_URL }) {
20
20
  parameters = { ...DEFAULT_PARAMETERS, ...parameters };
21
21
  baseUrl = excludeURLParameters(baseUrl, Object.keys(parameters));
22
22
  const key = createCacheKey(baseUrl, parameters, customHeaders);
@@ -26,7 +26,7 @@ export async function requestWithParameters({ baseUrl, parameters = {}, headers:
26
26
  const url = createURLWithParameters(baseUrl, parameters);
27
27
  const headers = { ...DEFAULT_HEADERS, ...customHeaders };
28
28
  /* global fetch */
29
- const fetchPromise = url.length > MAX_GET_LENGTH
29
+ const fetchPromise = url.length > maxLengthURL
30
30
  ? fetch(baseUrl, { method: 'POST', body: JSON.stringify(parameters), headers })
31
31
  : fetch(url, { headers });
32
32
  let response;
@@ -1008,7 +1008,7 @@
1008
1008
  }
1009
1009
 
1010
1010
  // src/layers/schema/carto-raster-tile-loader.ts
1011
- var VERSION = true ? "9.0.29" : "latest";
1011
+ var VERSION = true ? "9.0.31" : "latest";
1012
1012
  var id = "cartoRasterTile";
1013
1013
  var DEFAULT_OPTIONS = {
1014
1014
  cartoRasterTile: {
@@ -1397,7 +1397,7 @@
1397
1397
  }
1398
1398
 
1399
1399
  // src/layers/schema/carto-spatial-tile-loader.ts
1400
- var VERSION = true ? "9.0.29" : "latest";
1400
+ var VERSION = true ? "9.0.31" : "latest";
1401
1401
  var id = "cartoSpatialTile";
1402
1402
  var DEFAULT_OPTIONS = {
1403
1403
  cartoSpatialTile: {
@@ -1625,7 +1625,7 @@
1625
1625
  }
1626
1626
 
1627
1627
  // src/layers/schema/carto-vector-tile-loader.ts
1628
- var VERSION = true ? "9.0.29" : "latest";
1628
+ var VERSION = true ? "9.0.31" : "latest";
1629
1629
  var id = "cartoVectorTile";
1630
1630
  var DEFAULT_OPTIONS = {
1631
1631
  cartoVectorTile: {
package/dist/dist.dev.js CHANGED
@@ -7259,17 +7259,17 @@ var __exports__ = (() => {
7259
7259
 
7260
7260
  // src/layers/cluster-utils.ts
7261
7261
  var import_core = __toESM(require_core2(), 1);
7262
- function aggregateTile(tile, aggregationLevels, properties = [], getPosition, getWeight) {
7262
+ function aggregateTile(tile, tileAggregationCache, aggregationLevels, properties = [], getPosition, getWeight) {
7263
7263
  if (!tile.content)
7264
7264
  return false;
7265
7265
  if (!tile.userData)
7266
7266
  tile.userData = {};
7267
- const cell0 = tile.userData[aggregationLevels]?.[0];
7267
+ const cell0 = tileAggregationCache.get(aggregationLevels)?.[0];
7268
7268
  if (cell0) {
7269
7269
  if (properties.every((property) => property.name in cell0)) {
7270
7270
  return false;
7271
7271
  }
7272
- tile.userData = {};
7272
+ tileAggregationCache.clear();
7273
7273
  }
7274
7274
  const out = {};
7275
7275
  for (const cell of tile.content) {
@@ -7309,7 +7309,7 @@ var __exports__ = (() => {
7309
7309
  }
7310
7310
  }
7311
7311
  }
7312
- tile.userData[aggregationLevels] = Object.values(out);
7312
+ tileAggregationCache.set(aggregationLevels, Object.values(out));
7313
7313
  return true;
7314
7314
  }
7315
7315
  function extractAggregationProperties(tile) {
@@ -7871,6 +7871,10 @@ var __exports__ = (() => {
7871
7871
  tileSize: DEFAULT_TILE_SIZE
7872
7872
  };
7873
7873
  var ClusterGeoJsonLayer = class extends import_geo_layers2.TileLayer {
7874
+ initializeState() {
7875
+ super.initializeState();
7876
+ this.state.aggregationCache = /* @__PURE__ */ new WeakMap();
7877
+ }
7874
7878
  renderLayers() {
7875
7879
  const visibleTiles = this.state.tileset?.tiles.filter((tile) => {
7876
7880
  return tile.isLoaded && tile.content && this.state.tileset.isTileVisible(tile);
@@ -7881,21 +7885,28 @@ var __exports__ = (() => {
7881
7885
  visibleTiles.sort((a, b) => b.zoom - a.zoom);
7882
7886
  const { zoom } = this.context.viewport;
7883
7887
  const { clusterLevel, getPosition, getWeight } = this.props;
7888
+ const { aggregationCache } = this.state;
7884
7889
  const properties = extractAggregationProperties(visibleTiles[0]);
7885
7890
  const data = [];
7886
7891
  let needsUpdate = false;
7887
7892
  for (const tile of visibleTiles) {
7888
7893
  const overZoom = Math.round(zoom - tile.zoom);
7889
7894
  const aggregationLevels = Math.round(clusterLevel) - overZoom;
7895
+ let tileAggregationCache = aggregationCache.get(tile.content);
7896
+ if (!tileAggregationCache) {
7897
+ tileAggregationCache = /* @__PURE__ */ new Map();
7898
+ aggregationCache.set(tile.content, tileAggregationCache);
7899
+ }
7890
7900
  const didAggregate = aggregateTile(
7891
7901
  tile,
7902
+ tileAggregationCache,
7892
7903
  aggregationLevels,
7893
7904
  properties,
7894
7905
  getPosition,
7895
7906
  getWeight
7896
7907
  );
7897
7908
  needsUpdate ||= didAggregate;
7898
- data.push(...tile.userData[aggregationLevels]);
7909
+ data.push(...tileAggregationCache.get(aggregationLevels));
7899
7910
  }
7900
7911
  data.sort((a, b) => Number(b.count - a.count));
7901
7912
  const clusterIds = data?.map((tile) => tile.id);
@@ -13001,7 +13012,7 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
13001
13012
  var DEFAULT_API_BASE_URL = "https://gcp-us-east1.api.carto.com";
13002
13013
  var DEFAULT_CLIENT = "deck-gl-carto";
13003
13014
  var V3_MINOR_VERSION = "3.4";
13004
- var MAX_GET_LENGTH = 8192;
13015
+ var DEFAULT_MAX_LENGTH_URL = 7e3;
13005
13016
 
13006
13017
  // src/api/endpoints.ts
13007
13018
  function joinPath(...args) {
@@ -13057,7 +13068,8 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
13057
13068
  baseUrl,
13058
13069
  parameters = {},
13059
13070
  headers: customHeaders = {},
13060
- errorContext
13071
+ errorContext,
13072
+ maxLengthURL = DEFAULT_MAX_LENGTH_URL
13061
13073
  }) {
13062
13074
  parameters = { ...DEFAULT_PARAMETERS, ...parameters };
13063
13075
  baseUrl = excludeURLParameters(baseUrl, Object.keys(parameters));
@@ -13067,7 +13079,7 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
13067
13079
  }
13068
13080
  const url = createURLWithParameters(baseUrl, parameters);
13069
13081
  const headers = { ...DEFAULT_HEADERS, ...customHeaders };
13070
- const fetchPromise = url.length > MAX_GET_LENGTH ? fetch(baseUrl, { method: "POST", body: JSON.stringify(parameters), headers }) : fetch(url, { headers });
13082
+ const fetchPromise = url.length > maxLengthURL ? fetch(baseUrl, { method: "POST", body: JSON.stringify(parameters), headers }) : fetch(url, { headers });
13071
13083
  let response;
13072
13084
  let responseJson;
13073
13085
  const jsonPromise = fetchPromise.then((_response) => {
@@ -13117,7 +13129,8 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
13117
13129
  apiBaseUrl: DEFAULT_API_BASE_URL,
13118
13130
  clientId: DEFAULT_CLIENT,
13119
13131
  format: "tilejson",
13120
- headers: {}
13132
+ headers: {},
13133
+ maxLengthURL: DEFAULT_MAX_LENGTH_URL
13121
13134
  };
13122
13135
  async function baseSource(endpoint, options, urlParameters) {
13123
13136
  const { accessToken, connectionName, cache, ...optionalOptions } = options;
@@ -13128,7 +13141,7 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
13128
13141
  }
13129
13142
  }
13130
13143
  const baseUrl = buildSourceUrl(mergedOptions);
13131
- const { clientId, format: format2 } = mergedOptions;
13144
+ const { clientId, maxLengthURL, format: format2 } = mergedOptions;
13132
13145
  const headers = { Authorization: `Bearer ${options.accessToken}`, ...options.headers };
13133
13146
  const parameters = { client: clientId, ...urlParameters };
13134
13147
  const errorContext = {
@@ -13141,7 +13154,8 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
13141
13154
  baseUrl,
13142
13155
  parameters,
13143
13156
  headers,
13144
- errorContext
13157
+ errorContext,
13158
+ maxLengthURL
13145
13159
  });
13146
13160
  const dataUrl = mapInstantiation[format2].url[0];
13147
13161
  if (cache) {
@@ -13152,7 +13166,8 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
13152
13166
  const json = await requestWithParameters({
13153
13167
  baseUrl: dataUrl,
13154
13168
  headers,
13155
- errorContext
13169
+ errorContext,
13170
+ maxLengthURL
13156
13171
  });
13157
13172
  if (accessToken) {
13158
13173
  json.accessToken = accessToken;
@@ -13162,7 +13177,8 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
13162
13177
  return await requestWithParameters({
13163
13178
  baseUrl: dataUrl,
13164
13179
  headers,
13165
- errorContext
13180
+ errorContext,
13181
+ maxLengthURL
13166
13182
  });
13167
13183
  }
13168
13184
 
@@ -14082,7 +14098,7 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
14082
14098
  }
14083
14099
 
14084
14100
  // src/api/fetch-map.ts
14085
- async function _fetchMapDataset(dataset, accessToken, apiBaseUrl, clientId, headers) {
14101
+ async function _fetchMapDataset(dataset, accessToken, apiBaseUrl, clientId, headers, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {
14086
14102
  const {
14087
14103
  aggregationExp,
14088
14104
  aggregationResLevel,
@@ -14102,7 +14118,8 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
14102
14118
  clientId,
14103
14119
  connectionName,
14104
14120
  format: format2,
14105
- headers
14121
+ headers,
14122
+ maxLengthURL
14106
14123
  };
14107
14124
  if (type === "tileset") {
14108
14125
  dataset.data = await vectorTilesetSource({ ...globalOptions, tableName: source });
@@ -14143,7 +14160,7 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
14143
14160
  }
14144
14161
  return cacheChanged;
14145
14162
  }
14146
- async function _fetchTilestats(attribute, dataset, accessToken, apiBaseUrl) {
14163
+ async function _fetchTilestats(attribute, dataset, accessToken, apiBaseUrl, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {
14147
14164
  const { connectionName, data, id: id4, source, type, queryParameters } = dataset;
14148
14165
  const errorContext = {
14149
14166
  requestType: "Tile stats",
@@ -14171,20 +14188,21 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
14171
14188
  baseUrl,
14172
14189
  headers,
14173
14190
  parameters,
14174
- errorContext
14191
+ errorContext,
14192
+ maxLengthURL
14175
14193
  });
14176
14194
  const { attributes } = data.tilestats.layers[0];
14177
14195
  const index2 = attributes.findIndex((d) => d.attribute === attribute);
14178
14196
  attributes[index2] = stats;
14179
14197
  return true;
14180
14198
  }
14181
- async function fillInMapDatasets({ datasets, token }, clientId, apiBaseUrl, headers) {
14199
+ async function fillInMapDatasets({ datasets, token }, clientId, apiBaseUrl, headers, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {
14182
14200
  const promises = datasets.map(
14183
- (dataset) => _fetchMapDataset(dataset, token, apiBaseUrl, clientId, headers)
14201
+ (dataset) => _fetchMapDataset(dataset, token, apiBaseUrl, clientId, headers, maxLengthURL)
14184
14202
  );
14185
14203
  return await Promise.all(promises);
14186
14204
  }
14187
- async function fillInTileStats({ datasets, keplerMapConfig, token }, apiBaseUrl) {
14205
+ async function fillInTileStats({ datasets, keplerMapConfig, token }, apiBaseUrl, maxLengthURL = DEFAULT_MAX_LENGTH_URL) {
14188
14206
  const attributes = [];
14189
14207
  const { layers } = keplerMapConfig.config.visState;
14190
14208
  for (const layer of layers) {
@@ -14207,7 +14225,7 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
14207
14225
  }
14208
14226
  }
14209
14227
  const promises = filteredAttributes.map(
14210
- ({ attribute, dataset }) => _fetchTilestats(attribute, dataset, token, apiBaseUrl)
14228
+ ({ attribute, dataset }) => _fetchTilestats(attribute, dataset, token, apiBaseUrl, maxLengthURL)
14211
14229
  );
14212
14230
  return await Promise.all(promises);
14213
14231
  }
@@ -14218,7 +14236,8 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
14218
14236
  clientId = DEFAULT_CLIENT,
14219
14237
  headers = {},
14220
14238
  autoRefresh,
14221
- onNewData
14239
+ onNewData,
14240
+ maxLengthURL = DEFAULT_MAX_LENGTH_URL
14222
14241
  }) {
14223
14242
  assert2(cartoMapId, 'Must define CARTO map id: fetchMap({cartoMapId: "XXXX-XXXX-XXXX"})');
14224
14243
  assert2(apiBaseUrl, "Must define apiBaseUrl");
@@ -14235,14 +14254,20 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
14235
14254
  }
14236
14255
  const baseUrl = buildPublicMapUrl({ apiBaseUrl, cartoMapId });
14237
14256
  const errorContext = { requestType: "Public map", mapId: cartoMapId };
14238
- const map2 = await requestWithParameters({ baseUrl, headers, errorContext });
14257
+ const map2 = await requestWithParameters({ baseUrl, headers, errorContext, maxLengthURL });
14239
14258
  let stopAutoRefresh;
14240
14259
  if (autoRefresh) {
14241
14260
  const intervalId = setInterval(async () => {
14242
- const changed = await fillInMapDatasets(map2, clientId, apiBaseUrl, {
14243
- ...headers,
14244
- "If-Modified-Since": new Date().toUTCString()
14245
- });
14261
+ const changed = await fillInMapDatasets(
14262
+ map2,
14263
+ clientId,
14264
+ apiBaseUrl,
14265
+ {
14266
+ ...headers,
14267
+ "If-Modified-Since": new Date().toUTCString()
14268
+ },
14269
+ maxLengthURL
14270
+ );
14246
14271
  if (onNewData && changed.some((v) => v === true)) {
14247
14272
  onNewData(parseMap(map2));
14248
14273
  }
@@ -14266,9 +14291,9 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
14266
14291
  });
14267
14292
  const [basemap] = await Promise.all([
14268
14293
  fetchBasemapProps({ config: map2.keplerMapConfig.config, errorContext }),
14269
- fillInMapDatasets(map2, clientId, apiBaseUrl, headers)
14294
+ fillInMapDatasets(map2, clientId, apiBaseUrl, headers, maxLengthURL)
14270
14295
  ]);
14271
- await fillInTileStats(map2, apiBaseUrl);
14296
+ await fillInTileStats(map2, apiBaseUrl, maxLengthURL);
14272
14297
  const out = { ...parseMap(map2), basemap, ...{ stopAutoRefresh } };
14273
14298
  const textLayers = out.layers.filter((layer) => {
14274
14299
  const pointType = layer.props.pointType || "";
@@ -14289,6 +14314,7 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
14289
14314
  const {
14290
14315
  apiBaseUrl = SOURCE_DEFAULTS.apiBaseUrl,
14291
14316
  clientId = SOURCE_DEFAULTS.clientId,
14317
+ maxLengthURL = SOURCE_DEFAULTS.maxLengthURL,
14292
14318
  connectionName,
14293
14319
  sqlQuery,
14294
14320
  queryParameters
@@ -14310,7 +14336,8 @@ ${formatErrorKey(key)}: ${errorContext[key]}`;
14310
14336
  baseUrl,
14311
14337
  parameters,
14312
14338
  headers,
14313
- errorContext
14339
+ errorContext,
14340
+ maxLengthURL
14314
14341
  });
14315
14342
  };
14316
14343