@carto/api-client 0.5.0-alpha.11 → 0.5.0-alpha.13

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/package.json CHANGED
@@ -8,7 +8,7 @@
8
8
  "homepage": "https://github.com/CartoDB/carto-api-client#readme",
9
9
  "author": "Don McCurdy <donmccurdy@carto.com>",
10
10
  "packageManager": "yarn@4.3.1",
11
- "version": "0.5.0-alpha.11",
11
+ "version": "0.5.0-alpha.13",
12
12
  "license": "MIT",
13
13
  "publishConfig": {
14
14
  "access": "public"
@@ -109,10 +109,10 @@
109
109
  "thenby": "^1.3.4",
110
110
  "tinybench": "^3.1.1",
111
111
  "tsup": "^8.3.6",
112
- "typescript": "~5.7.3",
112
+ "typescript": "~5.8.2",
113
113
  "typescript-eslint": "^8.24.0",
114
114
  "vite": "^6.1.0",
115
- "vitest": "3.0.5"
115
+ "vitest": "3.0.7"
116
116
  },
117
117
  "stableVersion": "0.4.6"
118
118
  }
@@ -8,6 +8,16 @@ type TimeFilter = Filters['string'][FilterType.TIME] & {
8
8
  params?: {offsetBy?: number};
9
9
  };
10
10
 
11
+ /**
12
+ * deck.gl's DataFilterExtension supports GPU filtering with 1–4 values. We
13
+ * allocate filters[0] to generic filters and filters[1] to time filters.
14
+ *
15
+ * getFilterValue() _must_ return an array of the same size as the filterSize
16
+ * used to initialize the DataFilterExtension. We document that users must use
17
+ * filterSize=4 for compatibility with @link {getDataFilterExtensionProps}.
18
+ */
19
+ const DEFAULT_FILTER_SIZE = 4;
20
+
11
21
  /** @experimental Prefer type definition from deck.gl. */
12
22
  export type _DataFilterExtensionProps = {
13
23
  filterRange: number[][];
@@ -17,22 +27,30 @@ export type _DataFilterExtensionProps = {
17
27
 
18
28
  /**
19
29
  * Creates props for DataFilterExtension, from `@deck.gl/extensions`, given
20
- * a set of filters.
30
+ * a set of filters. Requires that DataFilterExtension is initialized with
31
+ * filterSize=4, where the CARTO filters will occupy the first two slots.
32
+ *
33
+ * @example To create a deck.gl layer with GPU data filtering:
34
+ * ```typescript
35
+ * import {DataFilterExtension} from '@deck.gl/extensions';
36
+ * import {VectorTileLayer} from '@deck.gl/layers';
37
+ * import {getDataFilterExtensionProps} from '@carto/api-client';
21
38
  *
22
- * @privateRemarks DataFilterExtension accepts up to 4 values to filter. This
23
- * implementation uses the 1st for all filters except the time filter, and the
24
- * 2nd for the time filter.
39
+ * const layer = new VectorTileLayer({
40
+ * data: data,
41
+ * extensions: [new DataFilterExtension({filterSize: 4})],
42
+ * ...getDataFilterExtensionProps(filters),
43
+ * });
44
+ * ```
25
45
  */
26
46
  export function getDataFilterExtensionProps(
27
47
  filters: Filters,
28
- filtersLogicalOperator?: FilterLogicalOperator,
29
- filterSize?: 0 | 1 | 2 | 3 | 4
48
+ filtersLogicalOperator?: FilterLogicalOperator
30
49
  ): _DataFilterExtensionProps {
31
- filterSize ??= 4;
32
50
  const {filtersWithoutTimeType, timeColumn, timeFilter} =
33
51
  getFiltersByType(filters);
34
52
  return {
35
- filterRange: getFilterRange(timeFilter, filterSize),
53
+ filterRange: getFilterRange(timeFilter, DEFAULT_FILTER_SIZE),
36
54
  updateTriggers: getUpdateTriggers(
37
55
  filtersWithoutTimeType,
38
56
  timeColumn,
@@ -42,7 +60,7 @@ export function getDataFilterExtensionProps(
42
60
  filtersWithoutTimeType,
43
61
  timeColumn,
44
62
  timeFilter,
45
- filterSize,
63
+ DEFAULT_FILTER_SIZE,
46
64
  filtersLogicalOperator
47
65
  ),
48
66
  };
@@ -145,10 +145,9 @@ export class WidgetTilesetSource extends WidgetSource<WidgetTilesetSourceProps>
145
145
  function onMessage(e: MessageEvent) {
146
146
  const response = e.data as WorkerResponse;
147
147
  if (response.requestId !== requestId) return;
148
+ if (signal?.aborted) return; // handled by 'abort' listener
148
149
 
149
- if (signal?.aborted) {
150
- reject!(new Error(signal.reason));
151
- } else if (response.ok) {
150
+ if (response.ok) {
152
151
  resolve!(response.result as T);
153
152
  } else {
154
153
  reject!(new Error(response.error));