kepler.gl 3.1.9 → 3.1.10

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 (66) hide show
  1. package/README.md +21 -21
  2. package/dist/src/components/src/common/link-renderer.d.ts +6 -2
  3. package/dist/src/components/src/index.d.ts +1 -0
  4. package/dist/src/components/src/map-container.d.ts +1 -0
  5. package/dist/src/components/src/plot-container.d.ts +1 -0
  6. package/dist/src/components/src/side-panel/layer-manager.d.ts +1 -0
  7. package/dist/src/duckdb/src/index.d.ts +1 -0
  8. package/dist/src/duckdb/src/processors/data-processor.d.ts +8 -0
  9. package/dist/src/utils/src/data-utils.d.ts +1 -0
  10. package/package.json +2 -2
  11. package/src/actions/package.json +8 -8
  12. package/src/ai-assistant/package.json +7 -7
  13. package/src/cloud-providers/package.json +2 -2
  14. package/src/common-utils/package.json +3 -3
  15. package/src/components/dist/common/link-renderer.d.ts +6 -2
  16. package/src/components/dist/common/link-renderer.js +1 -1
  17. package/src/components/dist/index.d.ts +1 -0
  18. package/src/components/dist/index.js +44 -1
  19. package/src/components/dist/map-container.d.ts +1 -0
  20. package/src/components/dist/map-container.js +2 -1
  21. package/src/components/dist/plot-container.d.ts +1 -0
  22. package/src/components/dist/plot-container.js +7 -4
  23. package/src/components/dist/side-panel/layer-manager.d.ts +1 -0
  24. package/src/components/dist/side-panel/layer-manager.js +5 -3
  25. package/src/components/dist/side-panel/layer-panel/color-scale-selector.js +16 -9
  26. package/src/components/package.json +16 -16
  27. package/src/components/src/common/link-renderer.tsx +7 -2
  28. package/src/components/src/index.ts +8 -0
  29. package/src/components/src/map-container.tsx +4 -0
  30. package/src/components/src/plot-container.tsx +9 -3
  31. package/src/components/src/side-panel/layer-manager.tsx +4 -2
  32. package/src/components/src/side-panel/layer-panel/color-scale-selector.tsx +22 -9
  33. package/src/constants/dist/default-settings.js +2 -2
  34. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/e4/a7/04d0f645deb094cab21e70c2457f3b87750bee1dfea9b3ad1d4f746ae10ff013d960af8a46b1f87a10409989d6a352c21e29a8784a161a84f83a310955e2 +1 -0
  35. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/b2/5f/6daa692cacd1234803d6a5abefef0c49aae2d1403e4d8e53140088950a04 +2 -0
  36. package/src/constants/package.json +2 -2
  37. package/src/constants/umd/keplergl.min.js +1 -1
  38. package/src/deckgl-arrow-layers/package.json +2 -2
  39. package/src/deckgl-layers/package.json +4 -4
  40. package/src/duckdb/dist/index.d.ts +1 -0
  41. package/src/duckdb/dist/index.js +24 -2
  42. package/src/duckdb/dist/processors/data-processor.d.ts +8 -0
  43. package/src/duckdb/dist/processors/data-processor.js +23 -1
  44. package/src/duckdb/package.json +6 -6
  45. package/src/duckdb/src/index.ts +5 -0
  46. package/src/duckdb/src/processors/data-processor.ts +25 -1
  47. package/src/effects/package.json +5 -5
  48. package/src/layers/package.json +9 -9
  49. package/src/localization/package.json +1 -1
  50. package/src/processors/package.json +7 -7
  51. package/src/reducers/package.json +16 -16
  52. package/src/schemas/package.json +7 -7
  53. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/41/e3/d873c0efff87c4438d34d09be942ff6877947926c2309949e1eea8a58722c9ebf1e9451b44f62996d3590f398318e2fd17f19613445810226c8354b7d746 +1 -0
  54. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/9d/95/efc8c9f0bdd09b105646cf5e34b067e621726ceeb296771ff7da9e2e03b4 +2 -0
  55. package/src/styles/package.json +2 -2
  56. package/src/styles/umd/keplergl.min.js +1 -1
  57. package/src/table/package.json +5 -5
  58. package/src/tasks/package.json +2 -2
  59. package/src/types/package.json +1 -1
  60. package/src/utils/dist/data-scale-utils.js +35 -16
  61. package/src/utils/dist/data-utils.d.ts +1 -0
  62. package/src/utils/dist/data-utils.js +2 -1
  63. package/src/utils/package.json +4 -4
  64. package/src/utils/src/data-scale-utils.ts +34 -21
  65. package/src/utils/src/data-utils.ts +1 -0
  66. package/umd/keplergl.min.js +1027 -1027
@@ -7,7 +7,10 @@ var _exportNames = {
7
7
  DuckDBWasmAdapter: true,
8
8
  SqlPanel: true,
9
9
  restoreGeoarrowMetadata: true,
10
- KeplerGlDuckDbTable: true
10
+ KeplerGlDuckDbTable: true,
11
+ consolidateFieldTypes: true,
12
+ extendFieldsWithDuckDBColumnType: true,
13
+ fieldTypeToColumnType: true
11
14
  };
12
15
  Object.defineProperty(exports, "DuckDBWasmAdapter", {
13
16
  enumerable: true,
@@ -27,7 +30,25 @@ Object.defineProperty(exports, "SqlPanel", {
27
30
  return _components.SqlPanel;
28
31
  }
29
32
  });
33
+ Object.defineProperty(exports, "consolidateFieldTypes", {
34
+ enumerable: true,
35
+ get: function get() {
36
+ return _dataProcessor.consolidateFieldTypes;
37
+ }
38
+ });
30
39
  exports["default"] = void 0;
40
+ Object.defineProperty(exports, "extendFieldsWithDuckDBColumnType", {
41
+ enumerable: true,
42
+ get: function get() {
43
+ return _dataProcessor.extendFieldsWithDuckDBColumnType;
44
+ }
45
+ });
46
+ Object.defineProperty(exports, "fieldTypeToColumnType", {
47
+ enumerable: true,
48
+ get: function get() {
49
+ return _dataProcessor.fieldTypeToColumnType;
50
+ }
51
+ });
31
52
  Object.defineProperty(exports, "restoreGeoarrowMetadata", {
32
53
  enumerable: true,
33
54
  get: function get() {
@@ -50,7 +71,8 @@ Object.keys(_duckdbTableUtils).forEach(function (key) {
50
71
  }
51
72
  });
52
73
  });
74
+ var _dataProcessor = require("./processors/data-processor");
53
75
  // SPDX-License-Identifier: MIT
54
76
  // Copyright contributors to the kepler.gl project
55
77
  var _default = exports["default"] = _plugin.keplerGlDuckDBPlugin;
56
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHVja2RiV2FzbUFkYXB0ZXIiLCJyZXF1aXJlIiwiX2NvbXBvbmVudHMiLCJfcGx1Z2luIiwiX2R1Y2tkYlRhYmxlIiwiX2R1Y2tkYlRhYmxlVXRpbHMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIl9leHBvcnROYW1lcyIsImV4cG9ydHMiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJfZGVmYXVsdCIsImtlcGxlckdsRHVja0RCUGx1Z2luIl0sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmV4cG9ydCB7RHVja0RCV2FzbUFkYXB0ZXJ9IGZyb20gJy4vYWRhcHRlcnMvZHVja2RiLXdhc20tYWRhcHRlcic7XG5leHBvcnQge1NxbFBhbmVsfSBmcm9tICcuL2NvbXBvbmVudHMnO1xuaW1wb3J0IHtrZXBsZXJHbER1Y2tEQlBsdWdpbn0gZnJvbSAnLi9wbHVnaW4nO1xuZXhwb3J0IHtyZXN0b3JlR2VvYXJyb3dNZXRhZGF0YSwgS2VwbGVyR2xEdWNrRGJUYWJsZX0gZnJvbSAnLi90YWJsZS9kdWNrZGItdGFibGUnO1xuZXhwb3J0ICogZnJvbSAnLi90YWJsZS9kdWNrZGItdGFibGUtdXRpbHMnO1xuZXhwb3J0IGRlZmF1bHQga2VwbGVyR2xEdWNrREJQbHVnaW47XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLGtCQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxPQUFBLEdBQUFGLE9BQUE7QUFDQSxJQUFBRyxZQUFBLEdBQUFILE9BQUE7QUFDQSxJQUFBSSxpQkFBQSxHQUFBSixPQUFBO0FBQUFLLE1BQUEsQ0FBQUMsSUFBQSxDQUFBRixpQkFBQSxFQUFBRyxPQUFBLFdBQUFDLEdBQUE7RUFBQSxJQUFBQSxHQUFBLGtCQUFBQSxHQUFBO0VBQUEsSUFBQUgsTUFBQSxDQUFBSSxTQUFBLENBQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBQyxZQUFBLEVBQUFKLEdBQUE7RUFBQSxJQUFBQSxHQUFBLElBQUFLLE9BQUEsSUFBQUEsT0FBQSxDQUFBTCxHQUFBLE1BQUFKLGlCQUFBLENBQUFJLEdBQUE7RUFBQUgsTUFBQSxDQUFBUyxjQUFBLENBQUFELE9BQUEsRUFBQUwsR0FBQTtJQUFBTyxVQUFBO0lBQUFDLEdBQUEsV0FBQUEsSUFBQTtNQUFBLE9BQUFaLGlCQUFBLENBQUFJLEdBQUE7SUFBQTtFQUFBO0FBQUE7QUFQQTtBQUNBO0FBQUEsSUFBQVMsUUFBQSxHQUFBSixPQUFBLGNBT2VLLDRCQUFvQiIsImlnbm9yZUxpc3QiOltdfQ==
78
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHVja2RiV2FzbUFkYXB0ZXIiLCJyZXF1aXJlIiwiX2NvbXBvbmVudHMiLCJfcGx1Z2luIiwiX2R1Y2tkYlRhYmxlIiwiX2R1Y2tkYlRhYmxlVXRpbHMiLCJPYmplY3QiLCJrZXlzIiwiZm9yRWFjaCIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIl9leHBvcnROYW1lcyIsImV4cG9ydHMiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJnZXQiLCJfZGF0YVByb2Nlc3NvciIsIl9kZWZhdWx0Iiwia2VwbGVyR2xEdWNrREJQbHVnaW4iXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuZXhwb3J0IHtEdWNrREJXYXNtQWRhcHRlcn0gZnJvbSAnLi9hZGFwdGVycy9kdWNrZGItd2FzbS1hZGFwdGVyJztcbmV4cG9ydCB7U3FsUGFuZWx9IGZyb20gJy4vY29tcG9uZW50cyc7XG5pbXBvcnQge2tlcGxlckdsRHVja0RCUGx1Z2lufSBmcm9tICcuL3BsdWdpbic7XG5leHBvcnQge3Jlc3RvcmVHZW9hcnJvd01ldGFkYXRhLCBLZXBsZXJHbER1Y2tEYlRhYmxlfSBmcm9tICcuL3RhYmxlL2R1Y2tkYi10YWJsZSc7XG5leHBvcnQgKiBmcm9tICcuL3RhYmxlL2R1Y2tkYi10YWJsZS11dGlscyc7XG5leHBvcnQgZGVmYXVsdCBrZXBsZXJHbER1Y2tEQlBsdWdpbjtcbmV4cG9ydCB7XG4gIGNvbnNvbGlkYXRlRmllbGRUeXBlcyxcbiAgZXh0ZW5kRmllbGRzV2l0aER1Y2tEQkNvbHVtblR5cGUsXG4gIGZpZWxkVHlwZVRvQ29sdW1uVHlwZVxufSBmcm9tICcuL3Byb2Nlc3NvcnMvZGF0YS1wcm9jZXNzb3InO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxrQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsT0FBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsWUFBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksaUJBQUEsR0FBQUosT0FBQTtBQUFBSyxNQUFBLENBQUFDLElBQUEsQ0FBQUYsaUJBQUEsRUFBQUcsT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFILE1BQUEsQ0FBQUksU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQUMsWUFBQSxFQUFBSixHQUFBO0VBQUEsSUFBQUEsR0FBQSxJQUFBSyxPQUFBLElBQUFBLE9BQUEsQ0FBQUwsR0FBQSxNQUFBSixpQkFBQSxDQUFBSSxHQUFBO0VBQUFILE1BQUEsQ0FBQVMsY0FBQSxDQUFBRCxPQUFBLEVBQUFMLEdBQUE7SUFBQU8sVUFBQTtJQUFBQyxHQUFBLFdBQUFBLElBQUE7TUFBQSxPQUFBWixpQkFBQSxDQUFBSSxHQUFBO0lBQUE7RUFBQTtBQUFBO0FBRUEsSUFBQVMsY0FBQSxHQUFBakIsT0FBQTtBQVRBO0FBQ0E7QUFBQSxJQUFBa0IsUUFBQSxHQUFBTCxPQUFBLGNBT2VNLDRCQUFvQiIsImlnbm9yZUxpc3QiOltdfQ==
@@ -15,5 +15,13 @@ export declare function columnTypeToFieldType(columnType: string): string | null
15
15
  export declare function fieldTypeToColumnType(fieldType: string): string | null;
16
16
  export declare function processKeplerglJSONforDuckDb(keplerJson: any): Promise<ReturnType<typeof processKeplerglJSON>>;
17
17
  export declare function processCsvRowObject(rawData: Record<string, string | null>[]): Promise<ProcessorResult>;
18
+ export declare function consolidateFieldTypes(fields: any, schema: any): any;
18
19
  export declare function processGeojson(rawData: unknown): ProcessorResult;
20
+ /**
21
+ * A utility function to extend existing fields with native DuckDB column type.
22
+ * @param fields Array of fields to extend.
23
+ * @param typeOverrides An optional mapping of DuckDB column types to override.
24
+ * @returns An array of fields with the DuckDB column type extended.
25
+ */
26
+ export declare function extendFieldsWithDuckDBColumnType(fields: ProtoDatasetField[], typeOverrides: Record<string, string>): Promise<ProtoDatasetField[]>;
19
27
  export {};
@@ -6,6 +6,8 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.CSV_NULLS = exports.COLUMN_TYPES_PRIORITIES = void 0;
8
8
  exports.columnTypeToFieldType = columnTypeToFieldType;
9
+ exports.consolidateFieldTypes = consolidateFieldTypes;
10
+ exports.extendFieldsWithDuckDBColumnType = extendFieldsWithDuckDBColumnType;
9
11
  exports.fieldTypeToColumnType = fieldTypeToColumnType;
10
12
  exports.processCsvRowObject = processCsvRowObject;
11
13
  exports.processGeojson = processGeojson;
@@ -328,4 +330,24 @@ function processGeojson(rawData) {
328
330
  // fields: []
329
331
  };
330
332
  }
331
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2VvanNvbk5vcm1hbGl6ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvbW1vblV0aWxzIiwiX2NvbnN0YW50cyIsIl9wcm9jZXNzb3JzIiwiX3V0aWxzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiQ1NWX05VTExTIiwiZXhwb3J0cyIsIkNPTFVNTl9UWVBFUyIsIkNPTFVNTl9UWVBFU19QUklPUklUSUVTIiwiY29sdW1uVHlwZVRvRmllbGRUeXBlIiwiY29sdW1uVHlwZSIsIkJPT0xFQU4iLCJBTExfRklFTERfVFlQRVMiLCJEQVRFIiwiZGF0ZSIsIklOVEVHRVIiLCJpbnRlZ2VyIiwiRkxPQVQiLCJyZWFsIiwiVkFSQ0hBUiIsInN0cmluZyIsIlRJTUVTVEFNUCIsInRpbWVzdGFtcCIsIkdFT01FVFJZIiwiZ2VvanNvbiIsImNvbnNvbGUiLCJ3YXJuIiwiY29uY2F0IiwiZmllbGRUeXBlVG9Db2x1bW5UeXBlIiwiZmllbGRUeXBlIiwicHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYiIsIl94IiwiX3Byb2Nlc3NLZXBsZXJnbEpTT05mb3JEdWNrRGIiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsImtlcGxlckpzb24iLCJyZXMiLCJkYXRhc2V0cyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiX2xvb3AyIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQyIiwicHJldiIsInByb2Nlc3NLZXBsZXJnbEpTT04iLCJkYXRhc2V0Iiwicm93c0FsbCIsImZpZWxkc0FsbCIsImhlYWRlciIsInNhbXBsZSIsInNjaGVtYSIsImZpZWxkc1VwZCIsIl9sb29wMiQiLCJfY29udGV4dCIsImRhdGEiLCJyb3dzIiwiZmllbGRzIiwibWFwIiwiZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUiLCJzbmlmZkNzdlNjaGVtYSIsInQwIiwic2VudCIsInJlZHVjZSIsImFjYyIsImZpZWxkIiwidHlwZSIsImNvbnNvbGlkYXRlRmllbGRUeXBlcyIsImkiLCJzdG9wIiwiZGVsZWdhdGVZaWVsZCIsInQxIiwiZmluaXNoIiwiYWJydXB0IiwicHJvY2Vzc0NzdlJvd09iamVjdCIsIl94MiIsIl9wcm9jZXNzQ3N2Um93T2JqZWN0IiwiX2NhbGxlZTIiLCJyYXdEYXRhIiwiZmllbGRzV0FuYWx5emVyVHlwZSIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MyIsImNsZWFuVXBGYWxzeUNzdlZhbHVlIiwiZ2V0RmllbGRzRnJvbURhdGEiLCJyZSIsIlJlZ0V4cCIsIl9sb29wIiwia2V5IiwibWF0Y2giLCJjb2x1bW5OYW1lIiwiZGV0ZWN0ZWRDb2x1bW5UeXBlIiwiZHVja0RCQ29sdW1uVHlwZSIsInRvQ1NWUm93Iiwicm93IiwiclRvU3RyIiwibm90TnVsbG9yVW5kZWZpbmVkIiwiU3RyaW5nIiwicmVwbGFjZSIsImluY2x1ZGVzIiwiam9pbiIsIl94MyIsIl9zbmlmZkNzdlNjaGVtYSIsIl9jYWxsZWUzIiwiaGVhZGVyUm93IiwiY3N2Q29udGVudCIsImRiIiwiYyIsImZpbGVOYW1lIiwicmVzdWx0Iiwic2NoZW1hUmVzdWx0IiwiY29sdW1ucyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0NCIsImFjY3UiLCJ2YWx1ZXMiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImRhdGFiYXNlIiwiZXJyb3IiLCJjb25uZWN0IiwiZ2VuZXJhdGVIYXNoSWQiLCJyZWdpc3RlckZpbGVUZXh0IiwicXVlcnkiLCJ0b0FycmF5IiwidG9KU09OIiwiQ29sdW1ucyIsImdldCIsInByb2Nlc3NHZW9qc29uIiwibm9ybWFsaXplZEdlb2pzb24iLCJub3JtYWxpemUiLCJmZWF0dXJlcyIsIkVycm9yIiwiR1VJREVTX0ZJTEVfRk9STUFUX0RPQyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzb3JzL2RhdGEtcHJvY2Vzc29yLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5pbXBvcnQgbm9ybWFsaXplIGZyb20gJ0BtYXBib3gvZ2VvanNvbi1ub3JtYWxpemUnO1xuXG5pbXBvcnQge1xuICBnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZSxcbiAgZ2V0RmllbGRzRnJvbURhdGEsXG4gIGdlbmVyYXRlSGFzaElkLFxuICBub3ROdWxsb3JVbmRlZmluZWRcbn0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtQcm90b0RhdGFzZXRGaWVsZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0FMTF9GSUVMRF9UWVBFUywgR1VJREVTX0ZJTEVfRk9STUFUX0RPQ30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtwcm9jZXNzS2VwbGVyZ2xKU09OfSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuaW1wb3J0IHtnZXRBcHBsaWNhdGlvbkNvbmZpZ30gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmV4cG9ydCBjb25zdCBDU1ZfTlVMTFMgPSAvXihudWxsfE5VTEx8TnVsbHxOYU58XFwvTnx8KSQvO1xuXG50eXBlIFJvd3NBc0FycmF5ID0gYW55W11bXTtcbnR5cGUgUm93c0FzT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbnR5cGUgUm93RGF0YSA9IFJvd3NBc0FycmF5IHwgUm93c0FzT2JqZWN0O1xuXG5leHBvcnQgdHlwZSBQcm9jZXNzb3JSZXN1bHQgPSB7XG4gIGNvbHM/OiBhcnJvdy5WZWN0b3JbXTtcbiAgcm93czogUm93RGF0YTtcbiAgZmllbGRzOiBQcm90b0RhdGFzZXRGaWVsZFtdO1xufTtcblxuZW51bSBDT0xVTU5fVFlQRVMge1xuICBHRU9NRVRSWSA9ICdHRU9NRVRSWScsXG4gIEJPT0xFQU4gPSAnQk9PTEVBTicsXG4gIElOVEVHRVIgPSAnSU5URUdFUicsXG4gIEZMT0FUID0gJ0ZMT0FUJyxcbiAgVElNRSA9ICdUSU1FJyxcbiAgREFURSA9ICdEQVRFJyxcbiAgVElNRVNUQU1QID0gJ1RJTUVTVEFNUCcsXG4gIFZBUkNIQVIgPSAnVkFSQ0hBUidcbn1cbi8vIGh0dHBzOi8vZHVja2RiLm9yZy9kb2NzL2RhdGEvY3N2L2F1dG9fZGV0ZWN0aW9uLmh0bWwjdHlwZS1kZXRlY3Rpb25cbmV4cG9ydCBjb25zdCBDT0xVTU5fVFlQRVNfUFJJT1JJVElFUyA9IFtcbiAgJ0dFT01FVFJZJyxcbiAgJ0JPT0xFQU4nLFxuICAnSU5URUdFUicsXG4gICdGTE9BVCcsXG4gICdUSU1FJyxcbiAgJ0RBVEUnLFxuICAnVElNRVNUQU1QJyxcbiAgJ1ZBUkNIQVInXG5dO1xuXG5leHBvcnQgZnVuY3Rpb24gY29sdW1uVHlwZVRvRmllbGRUeXBlKGNvbHVtblR5cGU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBzd2l0Y2ggKGNvbHVtblR5cGUpIHtcbiAgICBjYXNlIENPTFVNTl9UWVBFUy5CT09MRUFOOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5ib29sZWFuO1xuICAgIGNhc2UgQ09MVU1OX1RZUEVTLkRBVEU6XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmRhdGU7XG4gICAgY2FzZSBDT0xVTU5fVFlQRVMuSU5URUdFUjpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuaW50ZWdlcjtcbiAgICBjYXNlIENPTFVNTl9UWVBFUy5GTE9BVDpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMucmVhbDtcbiAgICBjYXNlIENPTFVNTl9UWVBFUy5WQVJDSEFSOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5zdHJpbmc7XG4gICAgY2FzZSBDT0xVTU5fVFlQRVMuVElNRVNUQU1QOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA7XG4gICAgY2FzZSBDT0xVTU5fVFlQRVMuR0VPTUVUUlk6XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmdlb2pzb247XG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIGlzIHRoZXJlIGFueSBvdGhlciB0eXBlIHdlIGRpZG4ndCBjb3Zlcj9cbiAgICAgIGNvbnNvbGUud2FybihgVW5zdXBwb3J0ZWQgRHVja0RCIENvbHVtbiB0eXBlOiAke2NvbHVtblR5cGV9YCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmllbGRUeXBlVG9Db2x1bW5UeXBlKGZpZWxkVHlwZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIHN3aXRjaCAoZmllbGRUeXBlKSB7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuYm9vbGVhbjpcbiAgICAgIHJldHVybiBDT0xVTU5fVFlQRVMuQk9PTEVBTjtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5kYXRlOlxuICAgICAgcmV0dXJuIENPTFVNTl9UWVBFUy5EQVRFO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI6XG4gICAgICByZXR1cm4gQ09MVU1OX1RZUEVTLklOVEVHRVI7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMucmVhbDpcbiAgICAgIHJldHVybiBDT0xVTU5fVFlQRVMuRkxPQVQ7XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuc3RyaW5nOlxuICAgICAgcmV0dXJuIENPTFVNTl9UWVBFUy5WQVJDSEFSO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnRpbWVzdGFtcDpcbiAgICAgIHJldHVybiBDT0xVTU5fVFlQRVMuVElNRVNUQU1QO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmdlb2pzb246XG4gICAgICByZXR1cm4gQ09MVU1OX1RZUEVTLkdFT01FVFJZO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBpcyB0aGVyZSBhbnkgb3RoZXIgdHlwZSB3ZSBkaWRuJ3QgY292ZXI/XG4gICAgICBjb25zb2xlLndhcm4oYFVuc3VwcG9ydGVkIEZpZWxkIHR5cGUgZm9yIER1Y2tEYjogJHtmaWVsZFR5cGV9YCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuXG4vKlxuICogUHJvY2VzcyB1cGxvYWRlZCBleHBvcnRlZCBLZXBsZXJnbCBqc29uIG1hcC5cbiAqIFdlIG5lZWQgdG8gcG9wdWxhdGUgZmllbGQgd2l0aCBwcm9wZXIgRHVja0RiIGNvbXBhdGlibGUgdHlwZS5cbiAqL1xuLy8gVE9ETzogbWVyZ2Ugd2l0aCBsb2dpYyBmcm9tIHByb2Nlc3NDc3ZSb3dPYmplY3QuIERpZmZlcmVudCBmb3JtYXRzOiBbW11dIHZzIFt7fV1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzS2VwbGVyZ2xKU09OZm9yRHVja0RiKFxuICBrZXBsZXJKc29uXG4pOiBQcm9taXNlPFJldHVyblR5cGU8dHlwZW9mIHByb2Nlc3NLZXBsZXJnbEpTT04+PiB7XG4gIGNvbnN0IHJlcyA9IHByb2Nlc3NLZXBsZXJnbEpTT04oa2VwbGVySnNvbik7XG5cbiAgY29uc3QgZGF0YXNldHMgPSByZXM/LmRhdGFzZXRzIHx8IFtdO1xuICBmb3IgKGNvbnN0IGRhdGFzZXQgb2YgZGF0YXNldHMpIHtcbiAgICBjb25zdCByb3dzQWxsID0gZGF0YXNldC5kYXRhLnJvd3M7XG4gICAgY29uc3QgZmllbGRzQWxsID0gZGF0YXNldC5kYXRhLmZpZWxkcztcblxuICAgIGNvbnN0IGhlYWRlciA9IGZpZWxkc0FsbC5tYXAoZiA9PiBmLm5hbWUpO1xuICAgIGNvbnN0IHNhbXBsZSA9IGdldFNhbXBsZUZvclR5cGVBbmFseXplKHtmaWVsZHM6IGhlYWRlciwgcm93czogcm93c0FsbH0pO1xuXG4gICAgY29uc3Qgc2NoZW1hID1cbiAgICAgIHNhbXBsZS5sZW5ndGggPiAwXG4gICAgICAgID8gYXdhaXQgc25pZmZDc3ZTY2hlbWEoc2FtcGxlKVxuICAgICAgICA6IGZpZWxkc0FsbC5yZWR1Y2UoKGFjYywgZmllbGQpID0+IHtcbiAgICAgICAgICAgIGFjY1tmaWVsZC5uYW1lXSA9IGZpZWxkVHlwZVRvQ29sdW1uVHlwZShmaWVsZC50eXBlKTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSwge30pO1xuICAgIGNvbnN0IGZpZWxkc1VwZCA9IGNvbnNvbGlkYXRlRmllbGRUeXBlcyhkYXRhc2V0LmRhdGEuZmllbGRzLCBzY2hlbWEpO1xuXG4gICAgZGF0YXNldC5kYXRhLmZpZWxkcyA9IGZpZWxkc0FsbC5tYXAoKGYsIGkpID0+IHtcbiAgICAgIHJldHVybiB7Li4uZmllbGRzVXBkW2ldLCAuLi5mfTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiByZXM7XG59XG5cbi8qXG4gKiBQcm9jZXNzIHVwbG9hZGVkIGNzdiByZXR1cm5lZCBieSBsb2FkZXJzLmdsIGFzIHJvdyBvYmplY3QgYW5kIHN0cmluZyB2YWx1ZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0NzdlJvd09iamVjdChcbiAgcmF3RGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD5bXVxuKTogUHJvbWlzZTxQcm9jZXNzb3JSZXN1bHQ+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJhd0RhdGEpIHx8ICFyYXdEYXRhLmxlbmd0aCkge1xuICAgIHJldHVybiB7XG4gICAgICBmaWVsZHM6IFtdLFxuICAgICAgcm93czogW11cbiAgICB9O1xuICB9XG5cbiAgY29uc3QgaGVhZGVyID0gT2JqZWN0LmtleXMocmF3RGF0YVswXSk7IC8vIFtsYXQsIGxuZywgdmFsdWVdXG5cbiAgLy8gcm93IG9iamVjdCBjYW4gc3RpbGwgY29udGFpbiB2YWx1ZXMgbGlrZSBgTnVsbGAgb3IgYE4vQWBcbiAgY2xlYW5VcEZhbHN5Q3N2VmFsdWUocmF3RGF0YSk7XG4gIGNvbnN0IHNhbXBsZSA9IGdldFNhbXBsZUZvclR5cGVBbmFseXplKHtmaWVsZHM6IGhlYWRlciwgcm93czogcmF3RGF0YX0pO1xuICAvLyBhZGQgc2FtcGxlIGRhdGEgdG8gZHVja2RiIGFuZCBnZXQgc2NoZW1hXG4gIGNvbnN0IHNjaGVtYSA9IGF3YWl0IHNuaWZmQ3N2U2NoZW1hKHNhbXBsZSk7XG5cbiAgY29uc3QgZmllbGRzV0FuYWx5emVyVHlwZSA9IGdldEZpZWxkc0Zyb21EYXRhKHNhbXBsZSwgaGVhZGVyKTtcblxuICBjb25zdCBmaWVsZHMgPSBjb25zb2xpZGF0ZUZpZWxkVHlwZXMoZmllbGRzV0FuYWx5emVyVHlwZSwgc2NoZW1hKTtcblxuICByZXR1cm4ge3Jvd3M6IHJhd0RhdGEsIGZpZWxkc307XG59XG5cbmZ1bmN0aW9uIGNsZWFuVXBGYWxzeUNzdlZhbHVlKHJvd3M6IFJvd0RhdGEpOiB2b2lkIHtcbiAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKENTVl9OVUxMUywgJ2cnKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dzLmxlbmd0aDsgaSsrKSB7XG4gICAgT2JqZWN0LmtleXMocm93c1tpXSkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgLy8gaGVyZSB3ZSBwYXJzZSBlbXB0eSBkYXRhIGFzIG51bGxcbiAgICAgIGlmICh0eXBlb2Ygcm93c1tpXVtrZXldID09PSAnc3RyaW5nJyAmJiAocm93c1tpXVtrZXldIGFzIHN0cmluZykubWF0Y2gocmUpKSB7XG4gICAgICAgIHJvd3NbaV1ba2V5XSA9IG51bGw7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLy8gYWxpZ24gdHlwZSBhbmFseXplciB0eXBlcyB3aXRoIER1Y2tEQiBjc3YgYXV0byBkZXRlY3RlZCBjb2x1bW4gdHlwZXNcbmZ1bmN0aW9uIGNvbnNvbGlkYXRlRmllbGRUeXBlcyhmaWVsZHMsIHNjaGVtYSkge1xuICByZXR1cm4gZmllbGRzLm1hcChmaWVsZCA9PiB7XG4gICAgY29uc3QgY29sdW1uTmFtZSA9IGZpZWxkLm5hbWU7XG5cbiAgICBjb25zdCBkZXRlY3RlZENvbHVtblR5cGUgPSBzY2hlbWFbY29sdW1uTmFtZV07XG5cbiAgICAvLyBUT0RPIGNvbHVtblR5cGVUb0ZpZWxkVHlwZSB0cmFuZm9ybXMgZGV0ZWN0ZWQgdGltZXN0YW1wcyB0byBzdHJpbmcsXG4gICAgLy8gY29tcGxldGVseSBicmVha2luZyB0aW1lIGZpbHRlciBsb2dpYy5cbiAgICAvLyBjb25zdCBmaWVsZFR5cGUgPSBjb2x1bW5UeXBlVG9GaWVsZFR5cGUoZGV0ZWN0ZWRDb2x1bW5UeXBlKSB8fCBmaWVsZC50eXBlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmZpZWxkLFxuICAgICAgLy8gdHlwZTogZmllbGRUeXBlLFxuICAgICAgZHVja0RCQ29sdW1uVHlwZTogZGV0ZWN0ZWRDb2x1bW5UeXBlXG4gICAgfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHRvQ1NWUm93KHJvdzogdW5rbm93bltdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAke3Jvd1xuICAgIC5tYXAociA9PiB7XG4gICAgICBjb25zdCByVG9TdHIgPSBub3ROdWxsb3JVbmRlZmluZWQocikgPyBTdHJpbmcocikucmVwbGFjZSgvXCIvZywgJ1xcXFxcIicpIDogJyc7XG4gICAgICByZXR1cm4gclRvU3RyLmluY2x1ZGVzKCcsJykgPyBgXCIke3JUb1N0cn1cImAgOiByVG9TdHI7XG4gICAgfSlcbiAgICAuam9pbignLCcpfVxcbmA7XG59XG5cbi8vIFVzZSBEdWNja0RCIHRvIGRldGVjdCBjc3YgY29sdW1uIHNjaGVtYVxuYXN5bmMgZnVuY3Rpb24gc25pZmZDc3ZTY2hlbWEoc2FtcGxlOiBSb3dEYXRhKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShzYW1wbGUpIHx8IHNhbXBsZS5sZW5ndGggPCAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGhlYWRlclJvdyA9IHRvQ1NWUm93KE9iamVjdC5rZXlzKHNhbXBsZVswXSkpO1xuXG4gIGNvbnN0IGNzdkNvbnRlbnQgPSAoc2FtcGxlIGFzIChhbnlbXSB8IFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtdKS5yZWR1Y2UoXG4gICAgKGFjY3U6IHN0cmluZywgcm93KSA9PiBgJHthY2N1fSR7dG9DU1ZSb3coT2JqZWN0LnZhbHVlcyhyb3cpKX1gLFxuICAgIGhlYWRlclJvd1xuICApO1xuXG4gIGNvbnN0IGRiID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5kYXRhYmFzZTtcbiAgaWYgKCFkYikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ1RoZSBkYXRhYmFzZSBpcyBub3QgY29uZmlndXJlZCBwcm9wZXJseS4nKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgYyA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcblxuICBjb25zdCBmaWxlTmFtZSA9IGdlbmVyYXRlSGFzaElkKCk7XG4gIGF3YWl0IGRiLnJlZ2lzdGVyRmlsZVRleHQoYCR7ZmlsZU5hbWV9LSR7Z2VuZXJhdGVIYXNoSWR9LmNzdmAsIGNzdkNvbnRlbnQpO1xuXG4gIC8vIGh0dHBzOi8vZHVja2RiLm9yZy9kb2NzL2RhdGEvY3N2L2F1dG9fZGV0ZWN0aW9uLmh0bWxcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYy5xdWVyeShgXG4gICAgICAgIEZST00gc25pZmZfY3N2KCcke2ZpbGVOYW1lfS0ke2dlbmVyYXRlSGFzaElkfS5jc3YnLCBcbiAgICAgICAgc2FtcGxlX3NpemUgPSA1MDAsXG4gICAgICAgIGF1dG9fdHlwZV9jYW5kaWRhdGVzID0gWydGTE9BVCcsICdJTlRFR0VSJywgJ1RJTUVTVEFNUCcsICdEQVRFJywgJ1RJTUUnLCAnVkFSQ0hBUicsICdCT09MRUFOJ10pO1xuICAgIGApO1xuXG4gIGNvbnN0IHNjaGVtYVJlc3VsdCA9IHJlc3VsdC50b0FycmF5KCkubWFwKHJvdyA9PiByb3cudG9KU09OKCkpO1xuXG4gIGNvbnN0IGNvbHVtbnMgPSBzY2hlbWFSZXN1bHRbMF0uQ29sdW1ucztcbiAgY29uc3Qgc2NoZW1hID0ge307XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY29sdW1ucy5sZW5ndGg7IGkrKykge1xuICAgIHNjaGVtYVtjb2x1bW5zLmdldChpKS5uYW1lXSA9IGNvbHVtbnMuZ2V0KGkpLnR5cGU7XG4gIH1cblxuICByZXR1cm4gc2NoZW1hO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc0dlb2pzb24ocmF3RGF0YTogdW5rbm93bik6IFByb2Nlc3NvclJlc3VsdCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRHZW9qc29uID0gbm9ybWFsaXplKHJhd0RhdGEpO1xuXG4gIGlmICghbm9ybWFsaXplZEdlb2pzb24gfHwgIUFycmF5LmlzQXJyYXkobm9ybWFsaXplZEdlb2pzb24uZmVhdHVyZXMpKSB7XG4gICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXG4gICAgICBgUmVhZCBGaWxlIEZhaWxlZDogRmlsZSBpcyBub3QgYSB2YWxpZCBHZW9KU09OLiBSZWFkIG1vcmUgYWJvdXQgW3N1cHBvcnRlZCBmaWxlIGZvcm1hdF0oJHtHVUlERVNfRklMRV9GT1JNQVRfRE9DfSlgXG4gICAgKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgRG9uJ3QgcGFzcyBlbXB0eSBmaWVsZHMsIGFzIGR1Y2sgZGIgb3V0cHV0cyBhbiBlbXB0eSBkYXRhc2V0XG4gIHJldHVybiB7XG4gICAgcm93czogbm9ybWFsaXplZEdlb2pzb25cbiAgICAvLyBUT0RPIGdldCBmaWVsZHMgdG8gcHJlc2VydmUgZmllbGQgbmFtZXM/XG4gICAgLy8gZmllbGRzOiBbXVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFJQSxJQUFBQSxpQkFBQSxHQUFBQyxzQkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsWUFBQSxHQUFBRCxPQUFBO0FBT0EsSUFBQUUsVUFBQSxHQUFBRixPQUFBO0FBQ0EsSUFBQUcsV0FBQSxHQUFBSCxPQUFBO0FBQ0EsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBQXNELFNBQUFLLDJCQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSx5QkFBQUMsTUFBQSxJQUFBSCxDQUFBLENBQUFHLE1BQUEsQ0FBQUMsUUFBQSxLQUFBSixDQUFBLHFCQUFBRSxDQUFBLFFBQUFHLEtBQUEsQ0FBQUMsT0FBQSxDQUFBTixDQUFBLE1BQUFFLENBQUEsR0FBQUssMkJBQUEsQ0FBQVAsQ0FBQSxNQUFBQyxDQUFBLElBQUFELENBQUEsdUJBQUFBLENBQUEsQ0FBQVEsTUFBQSxJQUFBTixDQUFBLEtBQUFGLENBQUEsR0FBQUUsQ0FBQSxPQUFBTyxFQUFBLE1BQUFDLENBQUEsWUFBQUEsRUFBQSxlQUFBQyxDQUFBLEVBQUFELENBQUEsRUFBQUUsQ0FBQSxXQUFBQSxFQUFBLFdBQUFILEVBQUEsSUFBQVQsQ0FBQSxDQUFBUSxNQUFBLEtBQUFLLElBQUEsV0FBQUEsSUFBQSxNQUFBQyxLQUFBLEVBQUFkLENBQUEsQ0FBQVMsRUFBQSxVQUFBUixDQUFBLFdBQUFBLEVBQUFELENBQUEsVUFBQUEsQ0FBQSxLQUFBZSxDQUFBLEVBQUFMLENBQUEsZ0JBQUFNLFNBQUEsaUpBQUFDLENBQUEsRUFBQUMsQ0FBQSxPQUFBQyxDQUFBLGdCQUFBUixDQUFBLFdBQUFBLEVBQUEsSUFBQVQsQ0FBQSxHQUFB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
333
+
334
+ /**
335
+ * A utility function to extend existing fields with native DuckDB column type.
336
+ * @param fields Array of fields to extend.
337
+ * @param typeOverrides An optional mapping of DuckDB column types to override.
338
+ * @returns An array of fields with the DuckDB column type extended.
339
+ */
340
+ function extendFieldsWithDuckDBColumnType(fields, typeOverrides) {
341
+ var schema = fields.reduce(function (acc, field) {
342
+ acc[field.name] = fieldTypeToColumnType(field.type);
343
+ return acc;
344
+ }, {});
345
+ var updatedFields = consolidateFieldTypes(fields, schema);
346
+ updatedFields.forEach(function (field) {
347
+ if (typeOverrides[field.duckDBColumnType]) {
348
+ field.duckDBColumnType = typeOverrides[field.duckDBColumnType];
349
+ }
350
+ });
351
+ return updatedFields;
352
+ }
353
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ2VvanNvbk5vcm1hbGl6ZSIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJyZXF1aXJlIiwiX2NvbW1vblV0aWxzIiwiX2NvbnN0YW50cyIsIl9wcm9jZXNzb3JzIiwiX3V0aWxzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJyIiwiZSIsInQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJuIiwiZG9uZSIsInZhbHVlIiwiZiIsIlR5cGVFcnJvciIsIm8iLCJhIiwidSIsImNhbGwiLCJuZXh0IiwiX2FycmF5TGlrZVRvQXJyYXkiLCJ0b1N0cmluZyIsInNsaWNlIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiZnJvbSIsInRlc3QiLCJvd25LZXlzIiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiQ1NWX05VTExTIiwiZXhwb3J0cyIsIkNPTFVNTl9UWVBFUyIsIkNPTFVNTl9UWVBFU19QUklPUklUSUVTIiwiY29sdW1uVHlwZVRvRmllbGRUeXBlIiwiY29sdW1uVHlwZSIsIkJPT0xFQU4iLCJBTExfRklFTERfVFlQRVMiLCJEQVRFIiwiZGF0ZSIsIklOVEVHRVIiLCJpbnRlZ2VyIiwiRkxPQVQiLCJyZWFsIiwiVkFSQ0hBUiIsInN0cmluZyIsIlRJTUVTVEFNUCIsInRpbWVzdGFtcCIsIkdFT01FVFJZIiwiZ2VvanNvbiIsImNvbnNvbGUiLCJ3YXJuIiwiY29uY2F0IiwiZmllbGRUeXBlVG9Db2x1bW5UeXBlIiwiZmllbGRUeXBlIiwicHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYiIsIl94IiwiX3Byb2Nlc3NLZXBsZXJnbEpTT05mb3JEdWNrRGIiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsImtlcGxlckpzb24iLCJyZXMiLCJkYXRhc2V0cyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiX2xvb3AyIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQyIiwicHJldiIsInByb2Nlc3NLZXBsZXJnbEpTT04iLCJkYXRhc2V0Iiwicm93c0FsbCIsImZpZWxkc0FsbCIsImhlYWRlciIsInNhbXBsZSIsInNjaGVtYSIsImZpZWxkc1VwZCIsIl9sb29wMiQiLCJfY29udGV4dCIsImRhdGEiLCJyb3dzIiwiZmllbGRzIiwibWFwIiwiZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUiLCJzbmlmZkNzdlNjaGVtYSIsInQwIiwic2VudCIsInJlZHVjZSIsImFjYyIsImZpZWxkIiwidHlwZSIsImNvbnNvbGlkYXRlRmllbGRUeXBlcyIsImkiLCJzdG9wIiwiZGVsZWdhdGVZaWVsZCIsInQxIiwiZmluaXNoIiwiYWJydXB0IiwicHJvY2Vzc0NzdlJvd09iamVjdCIsIl94MiIsIl9wcm9jZXNzQ3N2Um93T2JqZWN0IiwiX2NhbGxlZTIiLCJyYXdEYXRhIiwiZmllbGRzV0FuYWx5emVyVHlwZSIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MyIsImNsZWFuVXBGYWxzeUNzdlZhbHVlIiwiZ2V0RmllbGRzRnJvbURhdGEiLCJyZSIsIlJlZ0V4cCIsIl9sb29wIiwia2V5IiwibWF0Y2giLCJjb2x1bW5OYW1lIiwiZGV0ZWN0ZWRDb2x1bW5UeXBlIiwiZHVja0RCQ29sdW1uVHlwZSIsInRvQ1NWUm93Iiwicm93IiwiclRvU3RyIiwibm90TnVsbG9yVW5kZWZpbmVkIiwiU3RyaW5nIiwicmVwbGFjZSIsImluY2x1ZGVzIiwiam9pbiIsIl94MyIsIl9zbmlmZkNzdlNjaGVtYSIsIl9jYWxsZWUzIiwiaGVhZGVyUm93IiwiY3N2Q29udGVudCIsImRiIiwiYyIsImZpbGVOYW1lIiwicmVzdWx0Iiwic2NoZW1hUmVzdWx0IiwiY29sdW1ucyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0NCIsImFjY3UiLCJ2YWx1ZXMiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImRhdGFiYXNlIiwiZXJyb3IiLCJjb25uZWN0IiwiZ2VuZXJhdGVIYXNoSWQiLCJyZWdpc3RlckZpbGVUZXh0IiwicXVlcnkiLCJ0b0FycmF5IiwidG9KU09OIiwiQ29sdW1ucyIsImdldCIsInByb2Nlc3NHZW9qc29uIiwibm9ybWFsaXplZEdlb2pzb24iLCJub3JtYWxpemUiLCJmZWF0dXJlcyIsIkVycm9yIiwiR1VJREVTX0ZJTEVfRk9STUFUX0RPQyIsImV4dGVuZEZpZWxkc1dpdGhEdWNrREJDb2x1bW5UeXBlIiwidHlwZU92ZXJyaWRlcyIsInVwZGF0ZWRGaWVsZHMiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvcHJvY2Vzc29ycy9kYXRhLXByb2Nlc3Nvci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IG5vcm1hbGl6ZSBmcm9tICdAbWFwYm94L2dlb2pzb24tbm9ybWFsaXplJztcblxuaW1wb3J0IHtcbiAgZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUsXG4gIGdldEZpZWxkc0Zyb21EYXRhLFxuICBnZW5lcmF0ZUhhc2hJZCxcbiAgbm90TnVsbG9yVW5kZWZpbmVkXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcbmltcG9ydCB7UHJvdG9EYXRhc2V0RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtBTExfRklFTERfVFlQRVMsIEdVSURFU19GSUxFX0ZPUk1BVF9ET0N9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7cHJvY2Vzc0tlcGxlcmdsSlNPTn0gZnJvbSAnQGtlcGxlci5nbC9wcm9jZXNzb3JzJztcbmltcG9ydCB7Z2V0QXBwbGljYXRpb25Db25maWd9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgQ1NWX05VTExTID0gL14obnVsbHxOVUxMfE51bGx8TmFOfFxcL058fCkkLztcblxudHlwZSBSb3dzQXNBcnJheSA9IGFueVtdW107XG50eXBlIFJvd3NBc09iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+W107XG50eXBlIFJvd0RhdGEgPSBSb3dzQXNBcnJheSB8IFJvd3NBc09iamVjdDtcblxuZXhwb3J0IHR5cGUgUHJvY2Vzc29yUmVzdWx0ID0ge1xuICBjb2xzPzogYXJyb3cuVmVjdG9yW107XG4gIHJvd3M6IFJvd0RhdGE7XG4gIGZpZWxkczogUHJvdG9EYXRhc2V0RmllbGRbXTtcbn07XG5cbmVudW0gQ09MVU1OX1RZUEVTIHtcbiAgR0VPTUVUUlkgPSAnR0VPTUVUUlknLFxuICBCT09MRUFOID0gJ0JPT0xFQU4nLFxuICBJTlRFR0VSID0gJ0lOVEVHRVInLFxuICBGTE9BVCA9ICdGTE9BVCcsXG4gIFRJTUUgPSAnVElNRScsXG4gIERBVEUgPSAnREFURScsXG4gIFRJTUVTVEFNUCA9ICdUSU1FU1RBTVAnLFxuICBWQVJDSEFSID0gJ1ZBUkNIQVInXG59XG4vLyBodHRwczovL2R1Y2tkYi5vcmcvZG9jcy9kYXRhL2Nzdi9hdXRvX2RldGVjdGlvbi5odG1sI3R5cGUtZGV0ZWN0aW9uXG5leHBvcnQgY29uc3QgQ09MVU1OX1RZUEVTX1BSSU9SSVRJRVMgPSBbXG4gICdHRU9NRVRSWScsXG4gICdCT09MRUFOJyxcbiAgJ0lOVEVHRVInLFxuICAnRkxPQVQnLFxuICAnVElNRScsXG4gICdEQVRFJyxcbiAgJ1RJTUVTVEFNUCcsXG4gICdWQVJDSEFSJ1xuXTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNvbHVtblR5cGVUb0ZpZWxkVHlwZShjb2x1bW5UeXBlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgc3dpdGNoIChjb2x1bW5UeXBlKSB7XG4gICAgY2FzZSBDT0xVTU5fVFlQRVMuQk9PTEVBTjpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuYm9vbGVhbjtcbiAgICBjYXNlIENPTFVNTl9UWVBFUy5EQVRFOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5kYXRlO1xuICAgIGNhc2UgQ09MVU1OX1RZUEVTLklOVEVHRVI6XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLmludGVnZXI7XG4gICAgY2FzZSBDT0xVTU5fVFlQRVMuRkxPQVQ6XG4gICAgICByZXR1cm4gQUxMX0ZJRUxEX1RZUEVTLnJlYWw7XG4gICAgY2FzZSBDT0xVTU5fVFlQRVMuVkFSQ0hBUjpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMuc3RyaW5nO1xuICAgIGNhc2UgQ09MVU1OX1RZUEVTLlRJTUVTVEFNUDpcbiAgICAgIHJldHVybiBBTExfRklFTERfVFlQRVMudGltZXN0YW1wO1xuICAgIGNhc2UgQ09MVU1OX1RZUEVTLkdFT01FVFJZOlxuICAgICAgcmV0dXJuIEFMTF9GSUVMRF9UWVBFUy5nZW9qc29uO1xuICAgIGRlZmF1bHQ6XG4gICAgICAvLyBpcyB0aGVyZSBhbnkgb3RoZXIgdHlwZSB3ZSBkaWRuJ3QgY292ZXI/XG4gICAgICBjb25zb2xlLndhcm4oYFVuc3VwcG9ydGVkIER1Y2tEQiBDb2x1bW4gdHlwZTogJHtjb2x1bW5UeXBlfWApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZWxkVHlwZVRvQ29sdW1uVHlwZShmaWVsZFR5cGU6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBzd2l0Y2ggKGZpZWxkVHlwZSkge1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLmJvb2xlYW46XG4gICAgICByZXR1cm4gQ09MVU1OX1RZUEVTLkJPT0xFQU47XG4gICAgY2FzZSBBTExfRklFTERfVFlQRVMuZGF0ZTpcbiAgICAgIHJldHVybiBDT0xVTU5fVFlQRVMuREFURTtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5pbnRlZ2VyOlxuICAgICAgcmV0dXJuIENPTFVNTl9UWVBFUy5JTlRFR0VSO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnJlYWw6XG4gICAgICByZXR1cm4gQ09MVU1OX1RZUEVTLkZMT0FUO1xuICAgIGNhc2UgQUxMX0ZJRUxEX1RZUEVTLnN0cmluZzpcbiAgICAgIHJldHVybiBDT0xVTU5fVFlQRVMuVkFSQ0hBUjtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy50aW1lc3RhbXA6XG4gICAgICByZXR1cm4gQ09MVU1OX1RZUEVTLlRJTUVTVEFNUDtcbiAgICBjYXNlIEFMTF9GSUVMRF9UWVBFUy5nZW9qc29uOlxuICAgICAgcmV0dXJuIENPTFVNTl9UWVBFUy5HRU9NRVRSWTtcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gaXMgdGhlcmUgYW55IG90aGVyIHR5cGUgd2UgZGlkbid0IGNvdmVyP1xuICAgICAgY29uc29sZS53YXJuKGBVbnN1cHBvcnRlZCBGaWVsZCB0eXBlIGZvciBEdWNrRGI6ICR7ZmllbGRUeXBlfWApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cblxuLypcbiAqIFByb2Nlc3MgdXBsb2FkZWQgZXhwb3J0ZWQgS2VwbGVyZ2wganNvbiBtYXAuXG4gKiBXZSBuZWVkIHRvIHBvcHVsYXRlIGZpZWxkIHdpdGggcHJvcGVyIER1Y2tEYiBjb21wYXRpYmxlIHR5cGUuXG4gKi9cbi8vIFRPRE86IG1lcmdlIHdpdGggbG9naWMgZnJvbSBwcm9jZXNzQ3N2Um93T2JqZWN0LiBEaWZmZXJlbnQgZm9ybWF0czogW1tdXSB2cyBbe31dXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYihcbiAga2VwbGVySnNvblxuKTogUHJvbWlzZTxSZXR1cm5UeXBlPHR5cGVvZiBwcm9jZXNzS2VwbGVyZ2xKU09OPj4ge1xuICBjb25zdCByZXMgPSBwcm9jZXNzS2VwbGVyZ2xKU09OKGtlcGxlckpzb24pO1xuXG4gIGNvbnN0IGRhdGFzZXRzID0gcmVzPy5kYXRhc2V0cyB8fCBbXTtcbiAgZm9yIChjb25zdCBkYXRhc2V0IG9mIGRhdGFzZXRzKSB7XG4gICAgY29uc3Qgcm93c0FsbCA9IGRhdGFzZXQuZGF0YS5yb3dzO1xuICAgIGNvbnN0IGZpZWxkc0FsbCA9IGRhdGFzZXQuZGF0YS5maWVsZHM7XG5cbiAgICBjb25zdCBoZWFkZXIgPSBmaWVsZHNBbGwubWFwKGYgPT4gZi5uYW1lKTtcbiAgICBjb25zdCBzYW1wbGUgPSBnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZSh7ZmllbGRzOiBoZWFkZXIsIHJvd3M6IHJvd3NBbGx9KTtcblxuICAgIGNvbnN0IHNjaGVtYSA9XG4gICAgICBzYW1wbGUubGVuZ3RoID4gMFxuICAgICAgICA/IGF3YWl0IHNuaWZmQ3N2U2NoZW1hKHNhbXBsZSlcbiAgICAgICAgOiBmaWVsZHNBbGwucmVkdWNlKChhY2MsIGZpZWxkKSA9PiB7XG4gICAgICAgICAgICBhY2NbZmllbGQubmFtZV0gPSBmaWVsZFR5cGVUb0NvbHVtblR5cGUoZmllbGQudHlwZSk7XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgIH0sIHt9KTtcbiAgICBjb25zdCBmaWVsZHNVcGQgPSBjb25zb2xpZGF0ZUZpZWxkVHlwZXMoZGF0YXNldC5kYXRhLmZpZWxkcywgc2NoZW1hKTtcblxuICAgIGRhdGFzZXQuZGF0YS5maWVsZHMgPSBmaWVsZHNBbGwubWFwKChmLCBpKSA9PiB7XG4gICAgICByZXR1cm4gey4uLmZpZWxkc1VwZFtpXSwgLi4uZn07XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcmVzO1xufVxuXG4vKlxuICogUHJvY2VzcyB1cGxvYWRlZCBjc3YgcmV0dXJuZWQgYnkgbG9hZGVycy5nbCBhcyByb3cgb2JqZWN0IGFuZCBzdHJpbmcgdmFsdWVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NDc3ZSb3dPYmplY3QoXG4gIHJhd0RhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+W11cbik6IFByb21pc2U8UHJvY2Vzc29yUmVzdWx0PiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShyYXdEYXRhKSB8fCAhcmF3RGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgZmllbGRzOiBbXSxcbiAgICAgIHJvd3M6IFtdXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlciA9IE9iamVjdC5rZXlzKHJhd0RhdGFbMF0pOyAvLyBbbGF0LCBsbmcsIHZhbHVlXVxuXG4gIC8vIHJvdyBvYmplY3QgY2FuIHN0aWxsIGNvbnRhaW4gdmFsdWVzIGxpa2UgYE51bGxgIG9yIGBOL0FgXG4gIGNsZWFuVXBGYWxzeUNzdlZhbHVlKHJhd0RhdGEpO1xuICBjb25zdCBzYW1wbGUgPSBnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZSh7ZmllbGRzOiBoZWFkZXIsIHJvd3M6IHJhd0RhdGF9KTtcbiAgLy8gYWRkIHNhbXBsZSBkYXRhIHRvIGR1Y2tkYiBhbmQgZ2V0IHNjaGVtYVxuICBjb25zdCBzY2hlbWEgPSBhd2FpdCBzbmlmZkNzdlNjaGVtYShzYW1wbGUpO1xuXG4gIGNvbnN0IGZpZWxkc1dBbmFseXplclR5cGUgPSBnZXRGaWVsZHNGcm9tRGF0YShzYW1wbGUsIGhlYWRlcik7XG5cbiAgY29uc3QgZmllbGRzID0gY29uc29saWRhdGVGaWVsZFR5cGVzKGZpZWxkc1dBbmFseXplclR5cGUsIHNjaGVtYSk7XG5cbiAgcmV0dXJuIHtyb3dzOiByYXdEYXRhLCBmaWVsZHN9O1xufVxuXG5mdW5jdGlvbiBjbGVhblVwRmFsc3lDc3ZWYWx1ZShyb3dzOiBSb3dEYXRhKTogdm9pZCB7XG4gIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChDU1ZfTlVMTFMsICdnJyk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcm93cy5sZW5ndGg7IGkrKykge1xuICAgIE9iamVjdC5rZXlzKHJvd3NbaV0pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIC8vIGhlcmUgd2UgcGFyc2UgZW1wdHkgZGF0YSBhcyBudWxsXG4gICAgICBpZiAodHlwZW9mIHJvd3NbaV1ba2V5XSA9PT0gJ3N0cmluZycgJiYgKHJvd3NbaV1ba2V5XSBhcyBzdHJpbmcpLm1hdGNoKHJlKSkge1xuICAgICAgICByb3dzW2ldW2tleV0gPSBudWxsO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbi8vIGFsaWduIHR5cGUgYW5hbHl6ZXIgdHlwZXMgd2l0aCBEdWNrREIgY3N2IGF1dG8gZGV0ZWN0ZWQgY29sdW1uIHR5cGVzXG5leHBvcnQgZnVuY3Rpb24gY29uc29saWRhdGVGaWVsZFR5cGVzKGZpZWxkcywgc2NoZW1hKSB7XG4gIHJldHVybiBmaWVsZHMubWFwKGZpZWxkID0+IHtcbiAgICBjb25zdCBjb2x1bW5OYW1lID0gZmllbGQubmFtZTtcblxuICAgIGNvbnN0IGRldGVjdGVkQ29sdW1uVHlwZSA9IHNjaGVtYVtjb2x1bW5OYW1lXTtcblxuICAgIC8vIFRPRE8gY29sdW1uVHlwZVRvRmllbGRUeXBlIHRyYW5mb3JtcyBkZXRlY3RlZCB0aW1lc3RhbXBzIHRvIHN0cmluZyxcbiAgICAvLyBjb21wbGV0ZWx5IGJyZWFraW5nIHRpbWUgZmlsdGVyIGxvZ2ljLlxuICAgIC8vIGNvbnN0IGZpZWxkVHlwZSA9IGNvbHVtblR5cGVUb0ZpZWxkVHlwZShkZXRlY3RlZENvbHVtblR5cGUpIHx8IGZpZWxkLnR5cGU7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZmllbGQsXG4gICAgICAvLyB0eXBlOiBmaWVsZFR5cGUsXG4gICAgICBkdWNrREJDb2x1bW5UeXBlOiBkZXRlY3RlZENvbHVtblR5cGVcbiAgICB9O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdG9DU1ZSb3cocm93OiB1bmtub3duW10pOiBzdHJpbmcge1xuICByZXR1cm4gYCR7cm93XG4gICAgLm1hcChyID0+IHtcbiAgICAgIGNvbnN0IHJUb1N0ciA9IG5vdE51bGxvclVuZGVmaW5lZChyKSA/IFN0cmluZyhyKS5yZXBsYWNlKC9cIi9nLCAnXFxcXFwiJykgOiAnJztcbiAgICAgIHJldHVybiByVG9TdHIuaW5jbHVkZXMoJywnKSA/IGBcIiR7clRvU3RyfVwiYCA6IHJUb1N0cjtcbiAgICB9KVxuICAgIC5qb2luKCcsJyl9XFxuYDtcbn1cblxuLy8gVXNlIER1Y2NrREIgdG8gZGV0ZWN0IGNzdiBjb2x1bW4gc2NoZW1hXG5hc3luYyBmdW5jdGlvbiBzbmlmZkNzdlNjaGVtYShzYW1wbGU6IFJvd0RhdGEpIHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHNhbXBsZSkgfHwgc2FtcGxlLmxlbmd0aCA8IDApIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgaGVhZGVyUm93ID0gdG9DU1ZSb3coT2JqZWN0LmtleXMoc2FtcGxlWzBdKSk7XG5cbiAgY29uc3QgY3N2Q29udGVudCA9IChzYW1wbGUgYXMgKGFueVtdIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW10pLnJlZHVjZShcbiAgICAoYWNjdTogc3RyaW5nLCByb3cpID0+IGAke2FjY3V9JHt0b0NTVlJvdyhPYmplY3QudmFsdWVzKHJvdykpfWAsXG4gICAgaGVhZGVyUm93XG4gICk7XG5cbiAgY29uc3QgZGIgPSBnZXRBcHBsaWNhdGlvbkNvbmZpZygpLmRhdGFiYXNlO1xuICBpZiAoIWRiKSB7XG4gICAgY29uc29sZS5lcnJvcignVGhlIGRhdGFiYXNlIGlzIG5vdCBjb25maWd1cmVkIHByb3Blcmx5LicpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBjID0gYXdhaXQgZGIuY29ubmVjdCgpO1xuXG4gIGNvbnN0IGZpbGVOYW1lID0gZ2VuZXJhdGVIYXNoSWQoKTtcbiAgYXdhaXQgZGIucmVnaXN0ZXJGaWxlVGV4dChgJHtmaWxlTmFtZX0tJHtnZW5lcmF0ZUhhc2hJZH0uY3N2YCwgY3N2Q29udGVudCk7XG5cbiAgLy8gaHR0cHM6Ly9kdWNrZGIub3JnL2RvY3MvZGF0YS9jc3YvYXV0b19kZXRlY3Rpb24uaHRtbFxuICBjb25zdCByZXN1bHQgPSBhd2FpdCBjLnF1ZXJ5KGBcbiAgICAgICAgRlJPTSBzbmlmZl9jc3YoJyR7ZmlsZU5hbWV9LSR7Z2VuZXJhdGVIYXNoSWR9LmNzdicsIFxuICAgICAgICBzYW1wbGVfc2l6ZSA9IDUwMCxcbiAgICAgICAgYXV0b190eXBlX2NhbmRpZGF0ZXMgPSBbJ0ZMT0FUJywgJ0lOVEVHRVInLCAnVElNRVNUQU1QJywgJ0RBVEUnLCAnVElNRScsICdWQVJDSEFSJywgJ0JPT0xFQU4nXSk7XG4gICAgYCk7XG5cbiAgY29uc3Qgc2NoZW1hUmVzdWx0ID0gcmVzdWx0LnRvQXJyYXkoKS5tYXAocm93ID0+IHJvdy50b0pTT04oKSk7XG5cbiAgY29uc3QgY29sdW1ucyA9IHNjaGVtYVJlc3VsdFswXS5Db2x1bW5zO1xuICBjb25zdCBzY2hlbWEgPSB7fTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2x1bW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgc2NoZW1hW2NvbHVtbnMuZ2V0KGkpLm5hbWVdID0gY29sdW1ucy5nZXQoaSkudHlwZTtcbiAgfVxuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzR2VvanNvbihyYXdEYXRhOiB1bmtub3duKTogUHJvY2Vzc29yUmVzdWx0IHtcbiAgY29uc3Qgbm9ybWFsaXplZEdlb2pzb24gPSBub3JtYWxpemUocmF3RGF0YSk7XG5cbiAgaWYgKCFub3JtYWxpemVkR2VvanNvbiB8fCAhQXJyYXkuaXNBcnJheShub3JtYWxpemVkR2VvanNvbi5mZWF0dXJlcykpIHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihcbiAgICAgIGBSZWFkIEZpbGUgRmFpbGVkOiBGaWxlIGlzIG5vdCBhIHZhbGlkIEdlb0pTT04uIFJlYWQgbW9yZSBhYm91dCBbc3VwcG9ydGVkIGZpbGUgZm9ybWF0XSgke0dVSURFU19GSUxFX0ZPUk1BVF9ET0N9KWBcbiAgICApO1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciBEb24ndCBwYXNzIGVtcHR5IGZpZWxkcywgYXMgZHVjayBkYiBvdXRwdXRzIGFuIGVtcHR5IGRhdGFzZXRcbiAgcmV0dXJuIHtcbiAgICByb3dzOiBub3JtYWxpemVkR2VvanNvblxuICAgIC8vIFRPRE8gZ2V0IGZpZWxkcyB0byBwcmVzZXJ2ZSBmaWVsZCBuYW1lcz9cbiAgICAvLyBmaWVsZHM6IFtdXG4gIH07XG59XG5cbi8qKlxuICogQSB1dGlsaXR5IGZ1bmN0aW9uIHRvIGV4dGVuZCBleGlzdGluZyBmaWVsZHMgd2l0aCBuYXRpdmUgRHVja0RCIGNvbHVtbiB0eXBlLlxuICogQHBhcmFtIGZpZWxkcyBBcnJheSBvZiBmaWVsZHMgdG8gZXh0ZW5kLlxuICogQHBhcmFtIHR5cGVPdmVycmlkZXMgQW4gb3B0aW9uYWwgbWFwcGluZyBvZiBEdWNrREIgY29sdW1uIHR5cGVzIHRvIG92ZXJyaWRlLlxuICogQHJldHVybnMgQW4gYXJyYXkgb2YgZmllbGRzIHdpdGggdGhlIER1Y2tEQiBjb2x1bW4gdHlwZSBleHRlbmRlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZEZpZWxkc1dpdGhEdWNrREJDb2x1bW5UeXBlKFxuICBmaWVsZHM6IFByb3RvRGF0YXNldEZpZWxkW10sXG4gIHR5cGVPdmVycmlkZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbik6IFByb21pc2U8UHJvdG9EYXRhc2V0RmllbGRbXT4ge1xuICBjb25zdCBzY2hlbWEgPSBmaWVsZHMucmVkdWNlKChhY2MsIGZpZWxkKSA9PiB7XG4gICAgYWNjW2ZpZWxkLm5hbWVdID0gZmllbGRUeXBlVG9Db2x1bW5UeXBlKGZpZWxkLnR5cGUpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcblxuICBjb25zdCB1cGRhdGVkRmllbGRzID0gY29uc29saWRhdGVGaWVsZFR5cGVzKGZpZWxkcywgc2NoZW1hKTtcbiAgdXBkYXRlZEZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICBpZiAodHlwZU92ZXJyaWRlc1tmaWVsZC5kdWNrREJDb2x1bW5UeXBlXSkge1xuICAgICAgZmllbGQuZHVja0RCQ29sdW1uVHlwZSA9IHR5cGVPdmVycmlkZXNbZmllbGQuZHVja0RCQ29sdW1uVHlwZV07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHVwZGF0ZWRGaWVsZHM7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBSUEsSUFBQUEsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFlBQUEsR0FBQUQsT0FBQTtBQU9BLElBQUFFLFVBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLFdBQUEsR0FBQUgsT0FBQTtBQUNBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUFzRCxTQUFBSywyQkFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEseUJBQUFDLE1BQUEsSUFBQUgsQ0FBQSxDQUFBRyxNQUFBLENBQUFDLFFBQUEsS0FBQUosQ0FBQSxxQkFBQUUsQ0FBQSxRQUFBRyxLQUFBLENBQUFDLE9BQUEsQ0FBQU4sQ0FBQSxNQUFBRSxDQUFBLEdBQUFLLDJCQUFBLENBQUFQLENBQUEsTUFBQUMsQ0FBQSxJQUFBRCxDQUFBLHVCQUFBQSxDQUFBLENBQUFRLE1BQUEsSUFBQU4sQ0FBQSxLQUFBRixDQUFBLEdBQUFFLENBQUEsT0FBQU8sRUFBQSxNQUFBQyxDQUFBLFlBQUFBLEVBQUEsZUFBQUMsQ0FBQSxFQUFBRCxDQUFBLEVBQUFFLENBQUEsV0FBQUEsRUFBQSxXQUFBSCxFQUFBLElBQUFULENBQUEsQ0FBQVEsTUFBQSxLQUFBSyxJQUFBLFdBQUFBLElBQUEsTUFBQUMsS0FBQSxFQUFBZCxDQUFBLENBQUFTLEVBQUEsVUFBQVIsQ0FBQSxXQUFBQSxFQUFBRCxDQUFBLFVBQUFBLENBQUEsS0FBQWUsQ0FBQSxFQUFBTCxDQUFBLGdCQUFBTSxTQUFBLGlKQUFBQyxDQUFBLEVBQUFDLENBQUEsT0FBQUMsQ0FBQSxnQkFBQVIsQ0FBQSxX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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/duckdb",
3
3
  "author": "Shan He <heshan0131@gmail.com>",
4
- "version": "3.1.9",
4
+ "version": "3.1.10",
5
5
  "description": "DuckDB plugin for Kepler.gl",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -26,11 +26,11 @@
26
26
  ],
27
27
  "dependencies": {
28
28
  "@duckdb/duckdb-wasm": "^1.28.0",
29
- "@kepler.gl/common-utils": "3.1.9",
30
- "@kepler.gl/constants": "3.1.9",
31
- "@kepler.gl/processors": "3.1.9",
32
- "@kepler.gl/table": "3.1.9",
33
- "@kepler.gl/types": "3.1.9",
29
+ "@kepler.gl/common-utils": "3.1.10",
30
+ "@kepler.gl/constants": "3.1.10",
31
+ "@kepler.gl/processors": "3.1.10",
32
+ "@kepler.gl/table": "3.1.10",
33
+ "@kepler.gl/types": "3.1.10",
34
34
  "@monaco-editor/react": "^4.6.0",
35
35
  "@radix-ui/react-collapsible": "^1.1.0",
36
36
  "apache-arrow": ">=15.0.0",
@@ -7,3 +7,8 @@ import {keplerGlDuckDBPlugin} from './plugin';
7
7
  export {restoreGeoarrowMetadata, KeplerGlDuckDbTable} from './table/duckdb-table';
8
8
  export * from './table/duckdb-table-utils';
9
9
  export default keplerGlDuckDBPlugin;
10
+ export {
11
+ consolidateFieldTypes,
12
+ extendFieldsWithDuckDBColumnType,
13
+ fieldTypeToColumnType
14
+ } from './processors/data-processor';
@@ -171,7 +171,7 @@ function cleanUpFalsyCsvValue(rows: RowData): void {
171
171
  }
172
172
 
173
173
  // align type analyzer types with DuckDB csv auto detected column types
174
- function consolidateFieldTypes(fields, schema) {
174
+ export function consolidateFieldTypes(fields, schema) {
175
175
  return fields.map(field => {
176
176
  const columnName = field.name;
177
177
 
@@ -255,3 +255,27 @@ export function processGeojson(rawData: unknown): ProcessorResult {
255
255
  // fields: []
256
256
  };
257
257
  }
258
+
259
+ /**
260
+ * A utility function to extend existing fields with native DuckDB column type.
261
+ * @param fields Array of fields to extend.
262
+ * @param typeOverrides An optional mapping of DuckDB column types to override.
263
+ * @returns An array of fields with the DuckDB column type extended.
264
+ */
265
+ export function extendFieldsWithDuckDBColumnType(
266
+ fields: ProtoDatasetField[],
267
+ typeOverrides: Record<string, string>
268
+ ): Promise<ProtoDatasetField[]> {
269
+ const schema = fields.reduce((acc, field) => {
270
+ acc[field.name] = fieldTypeToColumnType(field.type);
271
+ return acc;
272
+ }, {});
273
+
274
+ const updatedFields = consolidateFieldTypes(fields, schema);
275
+ updatedFields.forEach(field => {
276
+ if (typeOverrides[field.duckDBColumnType]) {
277
+ field.duckDBColumnType = typeOverrides[field.duckDBColumnType];
278
+ }
279
+ });
280
+ return updatedFields;
281
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/effects",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.9",
4
+ "version": "3.1.10",
5
5
  "description": "kepler.gl viaual effects",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -31,10 +31,10 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@deck.gl/core": "^8.9.27",
34
- "@kepler.gl/common-utils": "3.1.9",
35
- "@kepler.gl/constants": "3.1.9",
36
- "@kepler.gl/types": "3.1.9",
37
- "@kepler.gl/utils": "3.1.9",
34
+ "@kepler.gl/common-utils": "3.1.10",
35
+ "@kepler.gl/constants": "3.1.10",
36
+ "@kepler.gl/types": "3.1.10",
37
+ "@kepler.gl/utils": "3.1.10",
38
38
  "@luma.gl/core": "^8.5.20",
39
39
  "@luma.gl/shadertools": "^8.5.20",
40
40
  "moment-timezone": "^0.5.35",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/layers",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.9",
4
+ "version": "3.1.10",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -36,14 +36,14 @@
36
36
  "@deck.gl/geo-layers": "^8.9.27",
37
37
  "@deck.gl/layers": "^8.9.27",
38
38
  "@deck.gl/mesh-layers": "^8.9.27",
39
- "@kepler.gl/common-utils": "3.1.9",
40
- "@kepler.gl/constants": "3.1.9",
41
- "@kepler.gl/deckgl-arrow-layers": "3.1.9",
42
- "@kepler.gl/deckgl-layers": "3.1.9",
43
- "@kepler.gl/localization": "3.1.9",
44
- "@kepler.gl/table": "3.1.9",
45
- "@kepler.gl/types": "3.1.9",
46
- "@kepler.gl/utils": "3.1.9",
39
+ "@kepler.gl/common-utils": "3.1.10",
40
+ "@kepler.gl/constants": "3.1.10",
41
+ "@kepler.gl/deckgl-arrow-layers": "3.1.10",
42
+ "@kepler.gl/deckgl-layers": "3.1.10",
43
+ "@kepler.gl/localization": "3.1.10",
44
+ "@kepler.gl/table": "3.1.10",
45
+ "@kepler.gl/types": "3.1.10",
46
+ "@kepler.gl/utils": "3.1.10",
47
47
  "@loaders.gl/arrow": "^4.3.2",
48
48
  "@loaders.gl/core": "^4.3.2",
49
49
  "@loaders.gl/gis": "^4.3.2",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/localization",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.9",
4
+ "version": "3.1.10",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/processors",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.9",
4
+ "version": "3.1.10",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -31,12 +31,12 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@danmarshall/deckgl-typings": "4.9.22",
34
- "@kepler.gl/common-utils": "3.1.9",
35
- "@kepler.gl/constants": "3.1.9",
36
- "@kepler.gl/schemas": "3.1.9",
37
- "@kepler.gl/table": "3.1.9",
38
- "@kepler.gl/types": "3.1.9",
39
- "@kepler.gl/utils": "3.1.9",
34
+ "@kepler.gl/common-utils": "3.1.10",
35
+ "@kepler.gl/constants": "3.1.10",
36
+ "@kepler.gl/schemas": "3.1.10",
37
+ "@kepler.gl/table": "3.1.10",
38
+ "@kepler.gl/types": "3.1.10",
39
+ "@kepler.gl/utils": "3.1.10",
40
40
  "@loaders.gl/arrow": "^4.3.2",
41
41
  "@loaders.gl/core": "^4.3.2",
42
42
  "@loaders.gl/csv": "^4.3.2",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/reducers",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.9",
4
+ "version": "3.1.10",
5
5
  "description": "kepler.gl constants used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -30,21 +30,21 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/actions": "3.1.9",
34
- "@kepler.gl/cloud-providers": "3.1.9",
35
- "@kepler.gl/common-utils": "3.1.9",
36
- "@kepler.gl/constants": "3.1.9",
37
- "@kepler.gl/deckgl-arrow-layers": "3.1.9",
38
- "@kepler.gl/deckgl-layers": "3.1.9",
39
- "@kepler.gl/effects": "3.1.9",
40
- "@kepler.gl/layers": "3.1.9",
41
- "@kepler.gl/localization": "3.1.9",
42
- "@kepler.gl/processors": "3.1.9",
43
- "@kepler.gl/schemas": "3.1.9",
44
- "@kepler.gl/table": "3.1.9",
45
- "@kepler.gl/tasks": "3.1.9",
46
- "@kepler.gl/types": "3.1.9",
47
- "@kepler.gl/utils": "3.1.9",
33
+ "@kepler.gl/actions": "3.1.10",
34
+ "@kepler.gl/cloud-providers": "3.1.10",
35
+ "@kepler.gl/common-utils": "3.1.10",
36
+ "@kepler.gl/constants": "3.1.10",
37
+ "@kepler.gl/deckgl-arrow-layers": "3.1.10",
38
+ "@kepler.gl/deckgl-layers": "3.1.10",
39
+ "@kepler.gl/effects": "3.1.10",
40
+ "@kepler.gl/layers": "3.1.10",
41
+ "@kepler.gl/localization": "3.1.10",
42
+ "@kepler.gl/processors": "3.1.10",
43
+ "@kepler.gl/schemas": "3.1.10",
44
+ "@kepler.gl/table": "3.1.10",
45
+ "@kepler.gl/tasks": "3.1.10",
46
+ "@kepler.gl/types": "3.1.10",
47
+ "@kepler.gl/utils": "3.1.10",
48
48
  "@loaders.gl/loader-utils": "^4.3.2",
49
49
  "@mapbox/geo-viewport": "^0.4.1",
50
50
  "@math.gl/web-mercator": "^3.6.2",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/schemas",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.9",
4
+ "version": "3.1.10",
5
5
  "description": "kepler.gl schemas used by kepler.gl components, actions and reducers",
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
@@ -30,12 +30,12 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/common-utils": "3.1.9",
34
- "@kepler.gl/constants": "3.1.9",
35
- "@kepler.gl/layers": "3.1.9",
36
- "@kepler.gl/table": "3.1.9",
37
- "@kepler.gl/types": "3.1.9",
38
- "@kepler.gl/utils": "3.1.9",
33
+ "@kepler.gl/common-utils": "3.1.10",
34
+ "@kepler.gl/constants": "3.1.10",
35
+ "@kepler.gl/layers": "3.1.10",
36
+ "@kepler.gl/table": "3.1.10",
37
+ "@kepler.gl/types": "3.1.10",
38
+ "@kepler.gl/utils": "3.1.10",
39
39
  "@loaders.gl/loader-utils": "^4.3.2",
40
40
  "@types/keymirror": "^0.1.1",
41
41
  "@types/lodash": "4.17.5",