@deck.gl/carto 9.0.29 → 9.0.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/api/common.d.ts +1 -1
- package/dist/api/common.d.ts.map +1 -1
- package/dist/api/common.js +2 -1
- package/dist/api/fetch-map.d.ts +7 -1
- package/dist/api/fetch-map.d.ts.map +1 -1
- package/dist/api/fetch-map.js +17 -15
- package/dist/api/query.d.ts.map +1 -1
- package/dist/api/query.js +3 -2
- package/dist/api/request-with-parameters.d.ts +2 -1
- package/dist/api/request-with-parameters.d.ts.map +1 -1
- package/dist/api/request-with-parameters.js +3 -3
- package/dist/cartoRasterTile-worker.js +1 -1
- package/dist/cartoSpatialTile-worker.js +1 -1
- package/dist/cartoVectorTile-worker.js +1 -1
- package/dist/dist.dev.js +57 -30
- package/dist/index.cjs +49 -32
- package/dist/index.cjs.map +2 -2
- package/dist/layers/cluster-tile-layer.d.ts.map +1 -1
- package/dist/layers/cluster-tile-layer.js +12 -2
- package/dist/layers/cluster-utils.d.ts +1 -1
- package/dist/layers/cluster-utils.d.ts.map +1 -1
- package/dist/layers/cluster-utils.js +5 -5
- package/dist/layers/schema/carto-raster-tile-loader.js +1 -1
- package/dist/layers/schema/carto-spatial-tile-loader.js +1 -1
- package/dist/layers/schema/carto-vector-tile-loader.js +1 -1
- package/dist/sources/base-source.d.ts.map +1 -1
- package/dist/sources/base-source.js +10 -6
- package/dist/sources/types.d.ts +6 -0
- package/dist/sources/types.d.ts.map +1 -1
- package/dist.min.js +9 -9
- package/package.json +2 -2
- package/src/api/common.ts +3 -1
- package/src/api/fetch-map.ts +38 -18
- package/src/api/query.ts +3 -1
- package/src/api/request-with-parameters.ts +5 -3
- package/src/layers/cluster-tile-layer.ts +14 -1
- package/src/layers/cluster-utils.ts +5 -4
- package/src/sources/base-source.ts +10 -6
- package/src/sources/types.ts +7 -0
package/dist/api/common.d.ts
CHANGED
|
@@ -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
|
|
4
|
+
export declare const DEFAULT_MAX_LENGTH_URL = 7000;
|
|
5
5
|
//# sourceMappingURL=common.d.ts.map
|
package/dist/api/common.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/api/common.js
CHANGED
|
@@ -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
|
-
|
|
4
|
+
// Fastly default limit is 8192; leave some padding.
|
|
5
|
+
export const DEFAULT_MAX_LENGTH_URL = 7000;
|
package/dist/api/fetch-map.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/api/fetch-map.js
CHANGED
|
@@ -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 || '';
|
package/dist/api/query.d.ts.map
CHANGED
|
@@ -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,
|
|
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,
|
|
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 {
|
|
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 >
|
|
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.
|
|
1011
|
+
var VERSION = true ? "9.0.30" : "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.
|
|
1400
|
+
var VERSION = true ? "9.0.30" : "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.
|
|
1628
|
+
var VERSION = true ? "9.0.30" : "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 =
|
|
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
|
-
|
|
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
|
-
|
|
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(...
|
|
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
|
|
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 >
|
|
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(
|
|
14243
|
-
|
|
14244
|
-
|
|
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
|
|