kepler.gl 3.1.0-alpha.6 → 3.1.0

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 (190) hide show
  1. package/dist/src/actions/src/action-types.d.ts +2 -0
  2. package/dist/src/actions/src/ui-state-actions.d.ts +16 -0
  3. package/dist/src/ai-assistant/src/actions.d.ts +1 -1
  4. package/dist/src/ai-assistant/src/components/ai-assistant-component.d.ts +2 -1
  5. package/dist/src/ai-assistant/src/constants.d.ts +3 -3
  6. package/dist/src/ai-assistant/src/reducers/index.d.ts +1 -1
  7. package/dist/src/ai-assistant/src/tools/basemap-functions.d.ts +1 -1
  8. package/dist/src/ai-assistant/src/tools/filter-function.d.ts +1 -1
  9. package/dist/src/ai-assistant/src/tools/layer-creation-function.d.ts +1 -1
  10. package/dist/src/ai-assistant/src/tools/layer-style-function.d.ts +1 -1
  11. package/dist/src/ai-assistant/src/tools/loadurl-function.d.ts +1 -1
  12. package/dist/src/ai-assistant/src/tools/utils.d.ts +73 -0
  13. package/dist/src/components/src/common/data-table/index.d.ts +1 -1
  14. package/dist/src/components/src/common/data-table/option-dropdown.d.ts +3 -3
  15. package/dist/src/components/src/common/file-uploader/file-drop.d.ts +2 -2
  16. package/dist/src/components/src/kepler-gl.d.ts +5 -0
  17. package/dist/src/components/src/loading-indicator.d.ts +13 -0
  18. package/dist/src/components/src/map-container.d.ts +3 -0
  19. package/dist/src/constants/src/default-settings.d.ts +1 -0
  20. package/dist/src/duckdb/src/plugin.d.ts +1 -0
  21. package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +13 -0
  22. package/dist/src/duckdb/src/table/duckdb-table.d.ts +7 -2
  23. package/dist/src/reducers/src/ui-state-updaters.d.ts +10 -0
  24. package/dist/src/reducers/src/vis-state-updaters.d.ts +1 -0
  25. package/dist/src/reducers/src/vis-state.d.ts +4 -0
  26. package/dist/src/utils/src/application-config.d.ts +2 -0
  27. package/dist/src/utils/src/observe-dimensions.d.ts +2 -1
  28. package/package.json +5 -3
  29. package/src/actions/dist/action-types.d.ts +2 -0
  30. package/src/actions/dist/action-types.js +2 -1
  31. package/src/actions/dist/ui-state-actions.d.ts +16 -0
  32. package/src/actions/dist/ui-state-actions.js +17 -2
  33. package/src/actions/package.json +8 -8
  34. package/src/actions/src/action-types.ts +1 -0
  35. package/src/actions/src/ui-state-actions.ts +22 -0
  36. package/src/ai-assistant/README.md +76 -0
  37. package/src/ai-assistant/dist/actions.d.ts +1 -1
  38. package/src/ai-assistant/dist/actions.js +2 -2
  39. package/src/ai-assistant/dist/components/ai-assistant-component.d.ts +2 -1
  40. package/src/ai-assistant/dist/components/ai-assistant-component.js +64 -23
  41. package/src/ai-assistant/dist/components/ai-assistant-config.js +67 -54
  42. package/src/ai-assistant/dist/constants.d.ts +3 -3
  43. package/src/ai-assistant/dist/constants.js +4 -4
  44. package/src/ai-assistant/dist/reducers/index.d.ts +1 -1
  45. package/src/ai-assistant/dist/reducers/index.js +2 -2
  46. package/src/ai-assistant/dist/tools/basemap-functions.d.ts +1 -1
  47. package/src/ai-assistant/dist/tools/basemap-functions.js +1 -1
  48. package/src/ai-assistant/dist/tools/filter-function.d.ts +1 -1
  49. package/src/ai-assistant/dist/tools/filter-function.js +9 -6
  50. package/src/ai-assistant/dist/tools/layer-creation-function.d.ts +1 -1
  51. package/src/ai-assistant/dist/tools/layer-creation-function.js +1 -1
  52. package/src/ai-assistant/dist/tools/layer-style-function.d.ts +1 -1
  53. package/src/ai-assistant/dist/tools/layer-style-function.js +1 -1
  54. package/src/ai-assistant/dist/tools/loadurl-function.d.ts +1 -1
  55. package/src/ai-assistant/dist/tools/loadurl-function.js +1 -1
  56. package/src/ai-assistant/dist/tools/utils.d.ts +73 -0
  57. package/src/ai-assistant/dist/tools/utils.js +211 -3
  58. package/src/ai-assistant/package.json +13 -9
  59. package/src/ai-assistant/src/actions.ts +2 -2
  60. package/src/ai-assistant/src/components/ai-assistant-component.tsx +56 -23
  61. package/src/ai-assistant/src/components/ai-assistant-config.tsx +63 -46
  62. package/src/ai-assistant/src/config/models.json +32 -0
  63. package/src/ai-assistant/src/constants.ts +7 -2
  64. package/src/ai-assistant/src/reducers/index.ts +2 -2
  65. package/src/ai-assistant/src/tools/basemap-functions.tsx +1 -1
  66. package/src/ai-assistant/src/tools/filter-function.tsx +11 -7
  67. package/src/ai-assistant/src/tools/layer-creation-function.tsx +1 -1
  68. package/src/ai-assistant/src/tools/layer-style-function.tsx +1 -1
  69. package/src/ai-assistant/src/tools/loadurl-function.tsx +1 -1
  70. package/src/ai-assistant/src/tools/utils.ts +212 -2
  71. package/src/cloud-providers/package.json +2 -2
  72. package/src/common-utils/package.json +3 -3
  73. package/src/components/dist/common/data-table/header-cell.js +10 -10
  74. package/src/components/dist/common/data-table/index.d.ts +1 -1
  75. package/src/components/dist/common/data-table/index.js +1 -1
  76. package/src/components/dist/common/data-table/option-dropdown.d.ts +3 -3
  77. package/src/components/dist/common/data-table/option-dropdown.js +5 -5
  78. package/src/components/dist/common/file-uploader/file-drop.d.ts +2 -2
  79. package/src/components/dist/common/file-uploader/file-drop.js +1 -1
  80. package/src/components/dist/common/portaled.js +1 -1
  81. package/src/components/dist/editor/editor.js +1 -1
  82. package/src/components/dist/kepler-gl.d.ts +5 -0
  83. package/src/components/dist/kepler-gl.js +7 -2
  84. package/src/components/dist/loading-indicator.d.ts +13 -0
  85. package/src/components/dist/loading-indicator.js +40 -0
  86. package/src/components/dist/map-container.d.ts +3 -0
  87. package/src/components/dist/map-container.js +11 -3
  88. package/src/components/dist/modals/save-map-modal.js +4 -3
  89. package/src/components/package.json +15 -15
  90. package/src/components/src/common/data-table/header-cell.tsx +5 -3
  91. package/src/components/src/common/data-table/index.tsx +1 -1
  92. package/src/components/src/common/data-table/option-dropdown.tsx +7 -7
  93. package/src/components/src/common/file-uploader/file-drop.tsx +11 -11
  94. package/src/components/src/common/portaled.tsx +12 -12
  95. package/src/components/src/editor/editor.tsx +3 -3
  96. package/src/components/src/kepler-gl.tsx +7 -2
  97. package/src/components/src/loading-indicator.tsx +49 -0
  98. package/src/components/src/map-container.tsx +19 -1
  99. package/src/components/src/modals/save-map-modal.tsx +6 -2
  100. package/src/constants/dist/default-settings.d.ts +1 -0
  101. package/src/constants/dist/default-settings.js +13 -9
  102. package/src/constants/dist/keyevent.js +1 -1
  103. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/72/80/7a7c561d7985e92aab7b9683e7baf5a0286b353a8f2609c4c71099f668d012be027929e4bbac937f9aa0c9a61be3bd4405136f582895f05aa0313c8efa42 +1 -0
  104. package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/8f/f6/b66955867599392dc69ff1db64419e83c087a82c2e3d4b6418d49ac6bc80e3200dd6c86cdfd4a2cf98ce573f71a5281b86ba3df8a7210e02544f63054191 +1 -0
  105. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/bd/ba/47ea8fcb11ecd5cd47ad867052e58b1f7e0c8dc5f8918a36fe90eaf45981 +2 -0
  106. package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/f0/6e/aadf3c48345aa72e7b2fb92e8c9788d04986b55caf83daa3fbd749c37c44 +2 -0
  107. package/src/constants/package.json +2 -2
  108. package/src/constants/src/default-settings.ts +11 -5
  109. package/src/constants/src/keyevent.ts +2 -2
  110. package/src/constants/umd/keplergl.min.js +1 -1
  111. package/src/deckgl-arrow-layers/package.json +1 -1
  112. package/src/deckgl-layers/package.json +4 -4
  113. package/src/duckdb/dist/components/preview-data-panel.js +2 -11
  114. package/src/duckdb/dist/components/sql-panel.js +7 -3
  115. package/src/duckdb/dist/components/tree.js +5 -4
  116. package/src/duckdb/dist/plugin.d.ts +1 -0
  117. package/src/duckdb/dist/plugin.js +9 -2
  118. package/src/duckdb/dist/processors/data-processor.js +4 -5
  119. package/src/duckdb/dist/table/duckdb-table-utils.d.ts +13 -0
  120. package/src/duckdb/dist/table/duckdb-table-utils.js +110 -0
  121. package/src/duckdb/dist/table/duckdb-table.d.ts +7 -2
  122. package/src/duckdb/dist/table/duckdb-table.js +189 -44
  123. package/src/duckdb/package.json +6 -6
  124. package/src/duckdb/src/components/preview-data-panel.tsx +0 -5
  125. package/src/duckdb/src/components/sql-panel.tsx +4 -2
  126. package/src/duckdb/src/components/tree.tsx +5 -1
  127. package/src/duckdb/src/plugin.ts +8 -1
  128. package/src/duckdb/src/processors/data-processor.ts +3 -4
  129. package/src/duckdb/src/table/duckdb-table-utils.ts +106 -0
  130. package/src/duckdb/src/table/duckdb-table.ts +134 -33
  131. package/src/effects/package.json +5 -5
  132. package/src/layers/dist/icon-layer/icon-layer.js +1 -1
  133. package/src/layers/dist/index.d.ts +3 -0
  134. package/src/layers/dist/index.js +6 -7
  135. package/src/layers/dist/point-layer/point-layer.d.ts +1 -1
  136. package/src/layers/dist/point-layer/point-layer.js +8 -2
  137. package/src/layers/package.json +9 -9
  138. package/src/layers/src/icon-layer/icon-layer.ts +8 -10
  139. package/src/layers/src/index.ts +5 -5
  140. package/src/layers/src/point-layer/point-layer.ts +6 -1
  141. package/src/localization/package.json +1 -1
  142. package/src/processors/dist/data-processor.js +2 -4
  143. package/src/processors/package.json +7 -7
  144. package/src/processors/src/data-processor.ts +1 -3
  145. package/src/reducers/dist/ui-state-updaters.d.ts +10 -0
  146. package/src/reducers/dist/ui-state-updaters.js +22 -2
  147. package/src/reducers/dist/ui-state.js +2 -2
  148. package/src/reducers/dist/vis-state-updaters.d.ts +1 -0
  149. package/src/reducers/dist/vis-state-updaters.js +21 -5
  150. package/src/reducers/dist/vis-state.d.ts +4 -0
  151. package/src/reducers/package.json +16 -16
  152. package/src/reducers/src/ui-state-updaters.ts +24 -0
  153. package/src/reducers/src/ui-state.ts +3 -1
  154. package/src/reducers/src/vis-state-updaters.ts +24 -5
  155. package/src/schemas/dist/dataset-schema.js +38 -2
  156. package/src/schemas/package.json +8 -7
  157. package/src/schemas/src/dataset-schema.ts +43 -1
  158. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5f/aa/96c67b383dbcd2b95625113a5389c6078fd8a53e6fc73a054229709f2dac1e0a409e7117049485a569fbebf8434a319451842671398904bfe1a7f7b5991c +1 -0
  159. package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/af/aa/228fbff58007b23eea5eb6cc7d2da1f0af1d8a7024129a416ea88b4df0ad7afc7aec93b09f3dd42a98f1d6a6f4dce6b53204818da85ef5becc42f928a64d +1 -0
  160. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/40/72/cac221d8459e6b743bc62ecdb370ed854b21ec30d3f7f4c06c7d1d7ffde2 +2 -0
  161. package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/c1/39/f7cd1d5947ec6e5d82bfa07041271344eb02f9e67bf5823acf2f22c2d01f +2 -0
  162. package/src/styles/package.json +2 -2
  163. package/src/styles/umd/keplergl.min.js +1 -1
  164. package/src/table/dist/dataset-utils.js +10 -4
  165. package/src/table/package.json +5 -5
  166. package/src/table/src/dataset-utils.ts +7 -1
  167. package/src/tasks/package.json +2 -2
  168. package/src/types/package.json +1 -1
  169. package/src/types/reducers.d.ts +2 -0
  170. package/src/utils/dist/application-config.d.ts +2 -0
  171. package/src/utils/dist/application-config.js +4 -2
  172. package/src/utils/dist/data-utils.js +14 -2
  173. package/src/utils/dist/dataset-utils.js +5 -3
  174. package/src/utils/dist/dom-to-image.js +1 -1
  175. package/src/utils/dist/dom-utils.js +1 -1
  176. package/src/utils/dist/map-style-utils/mapbox-gl-style-editor.js +7 -1
  177. package/src/utils/dist/observe-dimensions.d.ts +2 -1
  178. package/src/utils/dist/observe-dimensions.js +10 -4
  179. package/src/utils/dist/utils.js +1 -1
  180. package/src/utils/package.json +4 -4
  181. package/src/utils/src/application-config.ts +9 -1
  182. package/src/utils/src/data-utils.ts +13 -1
  183. package/src/utils/src/dataset-utils.ts +1 -1
  184. package/src/utils/src/dom-to-image.ts +5 -6
  185. package/src/utils/src/dom-utils.ts +15 -15
  186. package/src/utils/src/map-style-utils/mapbox-gl-style-editor.ts +6 -0
  187. package/src/utils/src/observe-dimensions.ts +9 -4
  188. package/src/utils/src/utils.ts +8 -8
  189. package/umd/keplergl.min.css +1 -1
  190. package/umd/keplergl.min.js +1499 -1428
@@ -32,6 +32,7 @@ export declare const visStateReducerFactory: (initialState?: {}) => import("redu
32
32
  "3D": typeof import("@kepler.gl/layers").ScenegraphLayer;
33
33
  trip: typeof import("@kepler.gl/layers/dist/trip-layer/trip-layer").default;
34
34
  s2: typeof import("@kepler.gl/layers/dist/s2-geometry-layer/s2-geometry-layer").default;
35
+ vectorTile: typeof import("@kepler.gl/layers").VectorTileLayer;
35
36
  };
36
37
  animationConfig: import("@kepler.gl/types").AnimationConfig;
37
38
  editor: import("@kepler.gl/types").Editor;
@@ -84,6 +85,7 @@ export declare const visStateReducerFactory: (initialState?: {}) => import("redu
84
85
  "3D": typeof import("@kepler.gl/layers").ScenegraphLayer;
85
86
  trip: typeof import("@kepler.gl/layers/dist/trip-layer/trip-layer").default;
86
87
  s2: typeof import("@kepler.gl/layers/dist/s2-geometry-layer/s2-geometry-layer").default;
88
+ vectorTile: typeof import("@kepler.gl/layers").VectorTileLayer;
87
89
  };
88
90
  animationConfig: import("@kepler.gl/types").AnimationConfig;
89
91
  editor: import("@kepler.gl/types").Editor;
@@ -137,6 +139,7 @@ declare const _default: import("redux-actions").ReduxCompatibleReducer<{
137
139
  "3D": typeof import("@kepler.gl/layers").ScenegraphLayer;
138
140
  trip: typeof import("@kepler.gl/layers/dist/trip-layer/trip-layer").default;
139
141
  s2: typeof import("@kepler.gl/layers/dist/s2-geometry-layer/s2-geometry-layer").default;
142
+ vectorTile: typeof import("@kepler.gl/layers").VectorTileLayer;
140
143
  };
141
144
  animationConfig: import("@kepler.gl/types").AnimationConfig;
142
145
  editor: import("@kepler.gl/types").Editor;
@@ -189,6 +192,7 @@ declare const _default: import("redux-actions").ReduxCompatibleReducer<{
189
192
  "3D": typeof import("@kepler.gl/layers").ScenegraphLayer;
190
193
  trip: typeof import("@kepler.gl/layers/dist/trip-layer/trip-layer").default;
191
194
  s2: typeof import("@kepler.gl/layers/dist/s2-geometry-layer/s2-geometry-layer").default;
195
+ vectorTile: typeof import("@kepler.gl/layers").VectorTileLayer;
192
196
  };
193
197
  animationConfig: import("@kepler.gl/types").AnimationConfig;
194
198
  editor: import("@kepler.gl/types").Editor;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/reducers",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.0-alpha.6",
4
+ "version": "3.1.0",
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,21 +31,21 @@
31
31
  ],
32
32
  "dependencies": {
33
33
  "@dnd-kit/sortable": "^8.0.0",
34
- "@kepler.gl/actions": "3.1.0-alpha.6",
35
- "@kepler.gl/cloud-providers": "3.1.0-alpha.6",
36
- "@kepler.gl/common-utils": "3.1.0-alpha.6",
37
- "@kepler.gl/constants": "3.1.0-alpha.6",
38
- "@kepler.gl/deckgl-arrow-layers": "3.1.0-alpha.6",
39
- "@kepler.gl/deckgl-layers": "3.1.0-alpha.6",
40
- "@kepler.gl/effects": "3.1.0-alpha.6",
41
- "@kepler.gl/layers": "3.1.0-alpha.6",
42
- "@kepler.gl/localization": "3.1.0-alpha.6",
43
- "@kepler.gl/processors": "3.1.0-alpha.6",
44
- "@kepler.gl/schemas": "3.1.0-alpha.6",
45
- "@kepler.gl/table": "3.1.0-alpha.6",
46
- "@kepler.gl/tasks": "3.1.0-alpha.6",
47
- "@kepler.gl/types": "3.1.0-alpha.6",
48
- "@kepler.gl/utils": "3.1.0-alpha.6",
34
+ "@kepler.gl/actions": "3.1.0",
35
+ "@kepler.gl/cloud-providers": "3.1.0",
36
+ "@kepler.gl/common-utils": "3.1.0",
37
+ "@kepler.gl/constants": "3.1.0",
38
+ "@kepler.gl/deckgl-arrow-layers": "3.1.0",
39
+ "@kepler.gl/deckgl-layers": "3.1.0",
40
+ "@kepler.gl/effects": "3.1.0",
41
+ "@kepler.gl/layers": "3.1.0",
42
+ "@kepler.gl/localization": "3.1.0",
43
+ "@kepler.gl/processors": "3.1.0",
44
+ "@kepler.gl/schemas": "3.1.0",
45
+ "@kepler.gl/table": "3.1.0",
46
+ "@kepler.gl/tasks": "3.1.0",
47
+ "@kepler.gl/types": "3.1.0",
48
+ "@kepler.gl/utils": "3.1.0",
49
49
  "@loaders.gl/loader-utils": "^4.3.2",
50
50
  "@mapbox/geo-viewport": "^0.4.1",
51
51
  "@math.gl/web-mercator": "^3.6.2",
@@ -902,3 +902,27 @@ export const togglePanelListViewUpdater = (
902
902
  [stateProp]: listView
903
903
  };
904
904
  };
905
+
906
+ /**
907
+ * Update state of the loading indicator.
908
+ * @memberof uiStateUpdaters
909
+ * @param state uiState
910
+ * @param action
911
+ * @param action.payload Payload with change of number of active loading actions.
912
+ * @returns nextState
913
+ * @public
914
+ */
915
+ export const setLoadingIndicatorUpdater = (
916
+ state: UiState,
917
+ {payload: {change}}: UIStateActions.SetLoadingIndicatorAction
918
+ ): UiState => {
919
+ let {loadingIndicatorValue} = state;
920
+ if (!loadingIndicatorValue) {
921
+ loadingIndicatorValue = 0;
922
+ }
923
+
924
+ return {
925
+ ...state,
926
+ loadingIndicatorValue: Math.max(loadingIndicatorValue + change, 0)
927
+ };
928
+ };
@@ -44,7 +44,9 @@ const actionHandler = {
44
44
  [ActionTypes.TOGGLE_SPLIT_MAP]: uiStateUpdaters.toggleSplitMapUpdater,
45
45
  [ActionTypes.SHOW_DATASET_TABLE]: uiStateUpdaters.showDatasetTableUpdater,
46
46
  [ActionTypes.SET_LOCALE]: uiStateUpdaters.setLocaleUpdater,
47
- [ActionTypes.TOGGLE_PANEL_LIST_VIEW]: uiStateUpdaters.togglePanelListViewUpdater
47
+ [ActionTypes.TOGGLE_PANEL_LIST_VIEW]: uiStateUpdaters.togglePanelListViewUpdater,
48
+
49
+ [ActionTypes.SET_LOADING_INDICATOR]: uiStateUpdaters.setLoadingIndicatorUpdater
48
50
  };
49
51
 
50
52
  /* Reducer */
@@ -41,6 +41,7 @@ import {
41
41
  setFilter,
42
42
  processFileContent,
43
43
  fitBounds as fitMapBounds,
44
+ setLoadingIndicator,
44
45
  toggleLayerForMap,
45
46
  applyFilterConfig
46
47
  } from '@kepler.gl/actions';
@@ -71,7 +72,8 @@ import {
71
72
  updateFilterPlot,
72
73
  removeFilterPlot,
73
74
  isLayerAnimatable,
74
- isSideFilter
75
+ isSideFilter,
76
+ getApplicationConfig
75
77
  } from '@kepler.gl/utils';
76
78
  import {generateHashId, toArray} from '@kepler.gl/common-utils';
77
79
  // Mergers
@@ -2327,17 +2329,23 @@ export const updateVisDataUpdater = (
2327
2329
  })
2328
2330
  : state;
2329
2331
 
2332
+ // indicate that something is in progress
2333
+ const setIsLoadingTask = ACTION_TASK().map(() => {
2334
+ return setLoadingIndicator({change: 1});
2335
+ });
2336
+ const updatedState = withTask(previousState, setIsLoadingTask);
2337
+
2330
2338
  const datasets = toArray(action.datasets);
2331
2339
 
2332
2340
  const allCreateDatasetsTasks = datasets.map(
2333
2341
  ({info = {}, ...rest}) => createNewDataEntry({info, ...rest}, state.datasets) || {}
2334
2342
  );
2335
2343
  // call all Tasks
2336
- const tasks = Task.allSettled(allCreateDatasetsTasks).map(results =>
2344
+ const datasetTasks = Task.allSettled(allCreateDatasetsTasks).map(results =>
2337
2345
  createNewDatasetSuccess({results, addToMapOptions: options})
2338
2346
  );
2339
2347
 
2340
- return withTask(previousState, tasks);
2348
+ return withTask(updatedState, datasetTasks);
2341
2349
  };
2342
2350
 
2343
2351
  export const createNewDatasetSuccessUpdater = (
@@ -2376,7 +2384,16 @@ export const createNewDatasetSuccessUpdater = (
2376
2384
  layerMergers
2377
2385
  };
2378
2386
 
2379
- return applyMergersUpdater(mergedState, {mergers: datasetMergers, postMergerPayload});
2387
+ const updatedState = applyMergersUpdater(mergedState, {
2388
+ mergers: datasetMergers,
2389
+ postMergerPayload
2390
+ });
2391
+
2392
+ // resolve active loading initiated by updateVisDataUpdater
2393
+ const setIsLoadingTask = ACTION_TASK().map(() => {
2394
+ return setLoadingIndicator({change: -1});
2395
+ });
2396
+ return withTask(updatedState, setIsLoadingTask);
2380
2397
  };
2381
2398
 
2382
2399
  /**
@@ -2773,7 +2790,9 @@ export const nextFileBatchUpdater = (
2773
2790
  });
2774
2791
 
2775
2792
  return withTask(stateWithProgress, [
2776
- ...(fileName.endsWith('arrow') && accumulated?.data?.length > 0
2793
+ ...(getApplicationConfig().useArrowProgressiveLoading &&
2794
+ fileName.endsWith('arrow') &&
2795
+ accumulated?.data?.length > 0
2777
2796
  ? [
2778
2797
  PROCESS_FILE_DATA({content: accumulated, fileCache: []}).bimap(
2779
2798
  result => loadFilesSuccess(result),
@@ -13,9 +13,12 @@ var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/ge
13
13
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
14
14
  var _lodash = _interopRequireDefault(require("lodash.pick"));
15
15
  var _window = require("global/window");
16
+ var _apacheArrow = require("apache-arrow");
17
+ var _constants = require("@kepler.gl/constants");
16
18
  var _versions = require("./versions");
17
19
  var _schema = _interopRequireDefault(require("./schema"));
18
20
  var _commonUtils = require("@kepler.gl/common-utils");
21
+ var _utils = require("@kepler.gl/utils");
19
22
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
20
23
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
21
24
  function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); }
@@ -75,6 +78,34 @@ var propertiesV1 = exports.propertiesV1 = _objectSpread(_objectSpread({}, proper
75
78
  metadata: null,
76
79
  disableDataOperation: null
77
80
  });
81
+
82
+ /**
83
+ * TODO Consider moving this cast to ArrowDataContainer?
84
+ * Prepare a data container for export as part of json / html.
85
+ * 1) Arrow tables can store Timestamps as BigInts, so convert numbers to ISOStrings compatible with Kepler.gl's TIMESTAMP.
86
+ * @param dataContainer A data container to flatten.
87
+ * @returns Row based data.
88
+ */
89
+ var getAllDataForSaving = function getAllDataForSaving(dataContainer) {
90
+ var allData = dataContainer.flattenData();
91
+ if (dataContainer instanceof _utils.ArrowDataContainer) {
92
+ var numColumns = dataContainer.numColumns();
93
+ var _loop = function _loop(columnIndex) {
94
+ var _column$type;
95
+ var column = dataContainer.getColumn(columnIndex);
96
+ var typeId = (_column$type = column.type) === null || _column$type === void 0 ? void 0 : _column$type.typeId;
97
+ if (typeId === _apacheArrow.Type.Timestamp || typeId === _apacheArrow.Type.Date || typeId === _apacheArrow.Type.Time) {
98
+ allData.forEach(function (row) {
99
+ row[columnIndex] = new Date(row[columnIndex]).toISOString();
100
+ });
101
+ }
102
+ };
103
+ for (var columnIndex = 0; columnIndex < numColumns; ++columnIndex) {
104
+ _loop(columnIndex);
105
+ }
106
+ }
107
+ return allData;
108
+ };
78
109
  var DatasetSchema = exports.DatasetSchema = /*#__PURE__*/function (_Schema2) {
79
110
  function DatasetSchema() {
80
111
  var _this2;
@@ -91,7 +122,12 @@ var DatasetSchema = exports.DatasetSchema = /*#__PURE__*/function (_Schema2) {
91
122
  key: "save",
92
123
  value: function save(dataset) {
93
124
  var datasetFlattened = dataset.dataContainer ? _objectSpread(_objectSpread({}, dataset), {}, {
94
- allData: dataset.dataContainer.flattenData()
125
+ allData: getAllDataForSaving(dataset.dataContainer),
126
+ // we use flattenData to save arrow tables,
127
+ // but once flattened it's not an arrow file anymore.
128
+ metadata: _objectSpread(_objectSpread({}, dataset.metadata), dataset.metadata.format === _constants.DATASET_FORMATS.arrow ? {
129
+ format: _constants.DATASET_FORMATS.row
130
+ } : {})
95
131
  }) : dataset;
96
132
  return this.savePropertiesOrApplySchema(datasetFlattened)[this.key];
97
133
  }
@@ -154,4 +190,4 @@ var datasetSchema = exports.datasetSchema = (0, _defineProperty2["default"])((0,
154
190
  properties: propertiesV1
155
191
  }));
156
192
  var _default = exports["default"] = datasetSchema;
157
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfd2luZG93IiwiX3ZlcnNpb25zIiwiX3NjaGVtYSIsIl9jb21tb25VdGlscyIsIm93bktleXMiLCJlIiwiciIsInQiLCJPYmplY3QiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibyIsImZpbHRlciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJwdXNoIiwiYXBwbHkiLCJfb2JqZWN0U3ByZWFkIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiZm9yRWFjaCIsIl9kZWZpbmVQcm9wZXJ0eTIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlZmluZVByb3BlcnR5IiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJjYWxsIiwiZmllbGRQcm9wZXJ0aWVzVjAiLCJleHBvcnRzIiwibmFtZSIsInR5cGUiLCJmaWVsZFByb3BlcnRpZXNWMSIsImZvcm1hdCIsImFuYWx5emVyVHlwZSIsIm1ldGFkYXRhIiwiRmllbGRTY2hlbWEiLCJfU2NoZW1hIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJzYXZlIiwiZmllbGRzIiwiX3RoaXMiLCJtYXAiLCJmIiwic2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hIiwibG9hZCIsIlNjaGVtYSIsInByb3BlcnRpZXNWMCIsImlkIiwibGFiZWwiLCJjb2xvciIsImFsbERhdGEiLCJ2ZXJzaW9uIiwiVkVSU0lPTlMiLCJ2MCIsInByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzVjEiLCJ2MSIsImRpc2FibGVEYXRhT3BlcmF0aW9uIiwiRGF0YXNldFNjaGVtYSIsIl9TY2hlbWEyIiwiX3RoaXMyIiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjb25jYXQiLCJkYXRhc2V0IiwiZGF0YXNldEZsYXR0ZW5lZCIsImRhdGFDb250YWluZXIiLCJmbGF0dGVuRGF0YSIsInVwZGF0ZWRGaWVsZHMiLCJuZWVkQ2FsY3VsYXRlTWV0YSIsImhhc093blByb3BlcnR5IiwiZmllbGRPcmRlciIsInNhbXBsZURhdGEiLCJnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZSIsInJvd3MiLCJtZXRhIiwiZ2V0RmllbGRzRnJvbURhdGEiLCJpIiwicGljayIsImdsb2JhbENvbnNvbGUiLCJ3YXJuIiwiZGF0YSIsImluZm8iLCJkYXRhc2V0U2NoZW1hIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi9zcmMvZGF0YXNldC1zY2hlbWEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHBpY2sgZnJvbSAnbG9kYXNoLnBpY2snO1xuaW1wb3J0IHtjb25zb2xlIGFzIGdsb2JhbENvbnNvbGV9IGZyb20gJ2dsb2JhbC93aW5kb3cnO1xuXG5pbXBvcnQge1Byb3RvRGF0YXNldCwgUkdCQ29sb3IsIEpzb25PYmplY3R9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge1ZFUlNJT05TfSBmcm9tICcuL3ZlcnNpb25zJztcbmltcG9ydCBTY2hlbWEgZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHtnZXRGaWVsZHNGcm9tRGF0YSwgZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emV9IGZyb20gJ0BrZXBsZXIuZ2wvY29tbW9uLXV0aWxzJztcblxuZXhwb3J0IHR5cGUgU2F2ZWRGaWVsZCA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGZvcm1hdD86IHN0cmluZztcbiAgYW5hbHl6ZXJUeXBlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUGFyc2VkRmllbGQgPSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBmb3JtYXQ6IHN0cmluZztcbiAgYW5hbHl6ZXJUeXBlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBTYXZlZERhdGFzZXRWMSA9IHtcbiAgdmVyc2lvbjogJ3YxJztcbiAgZGF0YToge1xuICAgIGlkOiBzdHJpbmc7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgICBjb2xvcjogUkdCQ29sb3I7XG4gICAgYWxsRGF0YTogYW55W11bXTtcbiAgICBmaWVsZHM6IFNhdmVkRmllbGRbXTtcbiAgICB0eXBlPzogc3RyaW5nO1xuICAgIG1ldGFkYXRhPzogSnNvbk9iamVjdDtcbiAgICBkaXNhYmxlRGF0YU9wZXJhdGlvbj86IGJvb2xlYW47XG4gIH07XG59O1xuXG5leHBvcnQgdHlwZSBQYXJzZWREYXRhc2V0ID0ge1xuICBkYXRhOiB7XG4gICAgZmllbGRzOiBQYXJzZWRGaWVsZFtdO1xuICAgIHJvd3M6IGFueVtdW107XG4gIH07XG4gIGluZm86IHtcbiAgICBpZD86IHN0cmluZztcbiAgICBsYWJlbD86IHN0cmluZztcbiAgICBjb2xvcj86IFJHQkNvbG9yO1xuICB9O1xufTtcblxuLy8gdmVyc2lvbiB2MFxuZXhwb3J0IGNvbnN0IGZpZWxkUHJvcGVydGllc1YwID0ge1xuICBuYW1lOiBudWxsLFxuICB0eXBlOiBudWxsXG59O1xuXG5leHBvcnQgY29uc3QgZmllbGRQcm9wZXJ0aWVzVjEgPSB7XG4gIG5hbWU6IG51bGwsXG4gIHR5cGU6IG51bGwsXG4gIGZvcm1hdDogbnVsbCxcbiAgYW5hbHl6ZXJUeXBlOiBudWxsLFxuICBtZXRhZGF0YTogbnVsbFxufTtcblxuZXhwb3J0IGNsYXNzIEZpZWxkU2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAgc2F2ZShmaWVsZHMpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW3RoaXMua2V5XTogZmllbGRzLm1hcChmID0+IHRoaXMuc2F2ZVByb3BlcnRpZXNPckFwcGx5U2NoZW1hKGYpW3RoaXMua2V5XSlcbiAgICB9O1xuICB9XG4gIGxvYWQoZmllbGRzKSB7XG4gICAgcmV0dXJuIHtbdGhpcy5rZXldOiBmaWVsZHN9O1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0aWVzVjAgPSB7XG4gIGlkOiBudWxsLFxuICBsYWJlbDogbnVsbCxcbiAgY29sb3I6IG51bGwsXG4gIGFsbERhdGE6IG51bGwsXG4gIGZpZWxkczogbmV3IEZpZWxkU2NoZW1hKHtcbiAgICBrZXk6ICdmaWVsZHMnLFxuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IGZpZWxkUHJvcGVydGllc1YwXG4gIH0pXG59O1xuXG5leHBvcnQgY29uc3QgcHJvcGVydGllc1YxID0ge1xuICAuLi5wcm9wZXJ0aWVzVjAsXG4gIGZpZWxkczogbmV3IEZpZWxkU2NoZW1hKHtcbiAgICBrZXk6ICdmaWVsZHMnLFxuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IGZpZWxkUHJvcGVydGllc1YxXG4gIH0pLFxuICB0eXBlOiBudWxsLFxuICBtZXRhZGF0YTogbnVsbCxcbiAgZGlzYWJsZURhdGFPcGVyYXRpb246IG51bGxcbn07XG5cbmV4cG9ydCBjbGFzcyBEYXRhc2V0U2NoZW1hIGV4dGVuZHMgU2NoZW1hIHtcbiAga2V5ID0gJ2RhdGFzZXQnO1xuXG4gIHNhdmUoZGF0YXNldDogS2VwbGVyVGFibGUpOiBTYXZlZERhdGFzZXRWMVsnZGF0YSddIHtcbiAgICBjb25zdCBkYXRhc2V0RmxhdHRlbmVkID0gZGF0YXNldC5kYXRhQ29udGFpbmVyXG4gICAgICA/IHtcbiAgICAgICAgICAuLi5kYXRhc2V0LFxuICAgICAgICAgIGFsbERhdGE6IGRhdGFzZXQuZGF0YUNvbnRhaW5lci5mbGF0dGVuRGF0YSgpXG4gICAgICAgIH1cbiAgICAgIDogZGF0YXNldDtcblxuICAgIHJldHVybiB0aGlzLnNhdmVQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYShkYXRhc2V0RmxhdHRlbmVkKVt0aGlzLmtleV07XG4gIH1cbiAgbG9hZChkYXRhc2V0OiBTYXZlZERhdGFzZXRWMVsnZGF0YSddKTogUHJvdG9EYXRhc2V0IHtcbiAgICBjb25zdCB7ZmllbGRzLCBhbGxEYXRhfSA9IGRhdGFzZXQ7XG4gICAgbGV0IHVwZGF0ZWRGaWVsZHMgPSBmaWVsZHM7XG5cbiAgICAvLyByZWNhbGN1bGF0ZSBmaWVsZCB0eXBlXG4gICAgLy8gYmVjYXVzZSB3ZSBoYXZlIHVwZGF0ZWQgdHlwZS1hbmFseXplclxuICAgIC8vIHdlIG5lZWQgdG8gYWRkIGZvcm1hdCB0byBlYWNoIGZpZWxkXG4gICAgY29uc3QgbmVlZENhbGN1bGF0ZU1ldGEgPVxuICAgICAgZmllbGRzWzBdICYmXG4gICAgICAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmaWVsZHNbMF0sICdmb3JtYXQnKSB8fFxuICAgICAgICAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGZpZWxkc1swXSwgJ2FuYWx5emVyVHlwZScpKTtcblxuICAgIGlmIChuZWVkQ2FsY3VsYXRlTWV0YSkge1xuICAgICAgY29uc3QgZmllbGRPcmRlciA9IGZpZWxkcy5tYXAoZiA9PiBmLm5hbWUpO1xuXG4gICAgICBjb25zdCBzYW1wbGVEYXRhID0gZ2V0U2FtcGxlRm9yVHlwZUFuYWx5emUoe1xuICAgICAgICBmaWVsZHM6IGZpZWxkT3JkZXIsXG4gICAgICAgIHJvd3M6IGFsbERhdGFcbiAgICAgIH0pO1xuICAgICAgY29uc3QgbWV0YSA9IGdldEZpZWxkc0Zyb21EYXRhKHNhbXBsZURhdGEsIGZpZWxkT3JkZXIpO1xuXG4gICAgICB1cGRhdGVkRmllbGRzID0gbWV0YS5tYXAoKGYsIGkpID0+ICh7XG4gICAgICAgIC4uLnBpY2sobWV0YVtpXSwgWyduYW1lJywgJ3R5cGUnLCAnZm9ybWF0J10pLFxuICAgICAgICBhbmFseXplclR5cGU6IG1ldGFbaV0uYW5hbHl6ZXJUeXBlXG4gICAgICB9KSk7XG5cbiAgICAgIHVwZGF0ZWRGaWVsZHMuZm9yRWFjaCgoZiwgaSkgPT4ge1xuICAgICAgICBpZiAoZmllbGRzW2ldLnR5cGUgIT09IGYudHlwZSkge1xuICAgICAgICAgIC8vIGlmIG5ld2x5IGRldGVjdGVkIGZpZWxkIHR5cGUgaXMgZGlmZmVyZW50IGZyb20gc2F2ZWQgdHlwZVxuICAgICAgICAgIC8vIHdlIGxvZyBpdCBidXQgd29uJ3QgdXBkYXRlIGl0LCBjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGJyZWFrIHBlb3BsZSdzIG1hcFxuICAgICAgICAgIGdsb2JhbENvbnNvbGUud2FybihgZGV0ZWN0ICR7Zi5uYW1lfSB0eXBlIGlzIG5vdyAke2YudHlwZX0gaW5zdGVhZCBvZiAke2ZpZWxkc1tpXS50eXBlfWApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBnZXQgZm9ybWF0IG9mIGFsbCBmaWVsZHNcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YToge2ZpZWxkczogdXBkYXRlZEZpZWxkcywgcm93czogZGF0YXNldC5hbGxEYXRhfSxcbiAgICAgIGluZm86IHBpY2soZGF0YXNldCwgWydpZCcsICdsYWJlbCcsICdjb2xvcicsICd0eXBlJ10pLFxuICAgICAgLi4uKGRhdGFzZXQubWV0YWRhdGEgPyB7bWV0YWRhdGE6IGRhdGFzZXQubWV0YWRhdGF9IDoge30pLFxuICAgICAgLi4uKGRhdGFzZXQuZGlzYWJsZURhdGFPcGVyYXRpb24gPyB7ZGlzYWJsZURhdGFPcGVyYXRpb246IGRhdGFzZXQuZGlzYWJsZURhdGFPcGVyYXRpb259IDoge30pXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZGF0YXNldFNjaGVtYSA9IHtcbiAgW1ZFUlNJT05TLnYwXTogbmV3IERhdGFzZXRTY2hlbWEoe1xuICAgIGtleTogJ2RhdGFzZXQnLFxuICAgIHZlcnNpb246IFZFUlNJT05TLnYwLFxuICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXNWMFxuICB9KSxcbiAgW1ZFUlNJT05TLnYxXTogbmV3IERhdGFzZXRTY2hlbWEoe1xuICAgIGtleTogJ2RhdGFzZXQnLFxuICAgIHZlcnNpb246IFZFUlNJT05TLnYxLFxuICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXNWMVxuICB9KVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZGF0YXNldFNjaGVtYTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUQsT0FBQTtBQUlBLElBQUFFLFNBQUEsR0FBQUYsT0FBQTtBQUNBLElBQUFHLE9BQUEsR0FBQUosc0JBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFJLFlBQUEsR0FBQUosT0FBQTtBQUFtRixTQUFBSyxRQUFBQyxDQUFBLEVBQUFDLENBQUEsUUFBQUMsQ0FBQSxHQUFBQyxNQUFBLENBQUFDLElBQUEsQ0FBQUosQ0FBQSxPQUFBRyxNQUFBLENBQUFFLHFCQUFBLFFBQUFDLENBQUEsR0FBQUgsTUFBQSxDQUFBRSxxQkFBQSxDQUFBTCxDQUFBLEdBQUFDLENBQUEsS0FBQUssQ0FBQSxHQUFBQSxDQUFBLENBQUFDLE1BQUEsV0FBQU4sQ0FBQSxXQUFBRSxNQUFBLENBQUFLLHdCQUFBLENBQUFSLENBQUEsRUFBQUMsQ0FBQSxFQUFBUSxVQUFBLE9BQUFQLENBQUEsQ0FBQVEsSUFBQSxDQUFBQyxLQUFBLENBQUFULENBQUEsRUFBQUksQ0FBQSxZQUFBSixDQUFBO0FBQUEsU0FBQVUsY0FBQVosQ0FBQSxhQUFBQyxDQUFBLE1BQUFBLENBQUEsR0FBQVksU0FBQSxDQUFBQyxNQUFBLEVBQUFiLENBQUEsVUFBQUMsQ0FBQSxXQUFBVyxTQUFBLENBQUFaLENBQUEsSUFBQVksU0FBQSxDQUFBWixD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
193
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfbG9kYXNoIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsInJlcXVpcmUiLCJfd2luZG93IiwiX2FwYWNoZUFycm93IiwiX2NvbnN0YW50cyIsIl92ZXJzaW9ucyIsIl9zY2hlbWEiLCJfY29tbW9uVXRpbHMiLCJfdXRpbHMiLCJvd25LZXlzIiwiZSIsInIiLCJ0IiwiT2JqZWN0Iiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsIl9jYWxsU3VwZXIiLCJfZ2V0UHJvdG90eXBlT2YyIiwiX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4yIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlJlZmxlY3QiLCJjb25zdHJ1Y3QiLCJjb25zdHJ1Y3RvciIsIkJvb2xlYW4iLCJwcm90b3R5cGUiLCJ2YWx1ZU9mIiwiY2FsbCIsImZpZWxkUHJvcGVydGllc1YwIiwiZXhwb3J0cyIsIm5hbWUiLCJ0eXBlIiwiZmllbGRQcm9wZXJ0aWVzVjEiLCJmb3JtYXQiLCJhbmFseXplclR5cGUiLCJtZXRhZGF0YSIsIkZpZWxkU2NoZW1hIiwiX1NjaGVtYSIsIl9jbGFzc0NhbGxDaGVjazIiLCJfaW5oZXJpdHMyIiwiX2NyZWF0ZUNsYXNzMiIsImtleSIsInZhbHVlIiwic2F2ZSIsImZpZWxkcyIsIl90aGlzIiwibWFwIiwiZiIsInNhdmVQcm9wZXJ0aWVzT3JBcHBseVNjaGVtYSIsImxvYWQiLCJTY2hlbWEiLCJwcm9wZXJ0aWVzVjAiLCJpZCIsImxhYmVsIiwiY29sb3IiLCJhbGxEYXRhIiwidmVyc2lvbiIsIlZFUlNJT05TIiwidjAiLCJwcm9wZXJ0aWVzIiwicHJvcGVydGllc1YxIiwidjEiLCJkaXNhYmxlRGF0YU9wZXJhdGlvbiIsImdldEFsbERhdGFGb3JTYXZpbmciLCJkYXRhQ29udGFpbmVyIiwiZmxhdHRlbkRhdGEiLCJBcnJvd0RhdGFDb250YWluZXIiLCJudW1Db2x1bW5zIiwiX2xvb3AiLCJjb2x1bW5JbmRleCIsIl9jb2x1bW4kdHlwZSIsImNvbHVtbiIsImdldENvbHVtbiIsInR5cGVJZCIsIkFycm93VHlwZXMiLCJUaW1lc3RhbXAiLCJEYXRlIiwiVGltZSIsInJvdyIsInRvSVNPU3RyaW5nIiwiRGF0YXNldFNjaGVtYSIsIl9TY2hlbWEyIiwiX3RoaXMyIiwiX2xlbiIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjb25jYXQiLCJkYXRhc2V0IiwiZGF0YXNldEZsYXR0ZW5lZCIsIkRBVEFTRVRfRk9STUFUUyIsImFycm93IiwidXBkYXRlZEZpZWxkcyIsIm5lZWRDYWxjdWxhdGVNZXRhIiwiaGFzT3duUHJvcGVydHkiLCJmaWVsZE9yZGVyIiwic2FtcGxlRGF0YSIsImdldFNhbXBsZUZvclR5cGVBbmFseXplIiwicm93cyIsIm1ldGEiLCJnZXRGaWVsZHNGcm9tRGF0YSIsImkiLCJwaWNrIiwiZ2xvYmFsQ29uc29sZSIsIndhcm4iLCJkYXRhIiwiaW5mbyIsImRhdGFzZXRTY2hlbWEiLCJfZGVmYXVsdCJdLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhc2V0LXNjaGVtYS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgcGljayBmcm9tICdsb2Rhc2gucGljayc7XG5pbXBvcnQge2NvbnNvbGUgYXMgZ2xvYmFsQ29uc29sZX0gZnJvbSAnZ2xvYmFsL3dpbmRvdyc7XG5pbXBvcnQge1R5cGUgYXMgQXJyb3dUeXBlc30gZnJvbSAnYXBhY2hlLWFycm93JztcblxuaW1wb3J0IHtEQVRBU0VUX0ZPUk1BVFN9IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7UHJvdG9EYXRhc2V0LCBSR0JDb2xvciwgSnNvbk9iamVjdH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7VkVSU0lPTlN9IGZyb20gJy4vdmVyc2lvbnMnO1xuaW1wb3J0IFNjaGVtYSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQge2dldEZpZWxkc0Zyb21EYXRhLCBnZXRTYW1wbGVGb3JUeXBlQW5hbHl6ZX0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtBcnJvd0RhdGFDb250YWluZXIsIERhdGFDb250YWluZXJJbnRlcmZhY2V9IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBTYXZlZEZpZWxkID0ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU6IHN0cmluZztcbiAgZm9ybWF0Pzogc3RyaW5nO1xuICBhbmFseXplclR5cGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBQYXJzZWRGaWVsZCA9IHtcbiAgbmFtZTogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGZvcm1hdDogc3RyaW5nO1xuICBhbmFseXplclR5cGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFNhdmVkRGF0YXNldFYxID0ge1xuICB2ZXJzaW9uOiAndjEnO1xuICBkYXRhOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGNvbG9yOiBSR0JDb2xvcjtcbiAgICBhbGxEYXRhOiBhbnlbXVtdO1xuICAgIGZpZWxkczogU2F2ZWRGaWVsZFtdO1xuICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgbWV0YWRhdGE/OiBKc29uT2JqZWN0O1xuICAgIGRpc2FibGVEYXRhT3BlcmF0aW9uPzogYm9vbGVhbjtcbiAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIFBhcnNlZERhdGFzZXQgPSB7XG4gIGRhdGE6IHtcbiAgICBmaWVsZHM6IFBhcnNlZEZpZWxkW107XG4gICAgcm93czogYW55W11bXTtcbiAgfTtcbiAgaW5mbzoge1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGxhYmVsPzogc3RyaW5nO1xuICAgIGNvbG9yPzogUkdCQ29sb3I7XG4gIH07XG59O1xuXG4vLyB2ZXJzaW9uIHYwXG5leHBvcnQgY29uc3QgZmllbGRQcm9wZXJ0aWVzVjAgPSB7XG4gIG5hbWU6IG51bGwsXG4gIHR5cGU6IG51bGxcbn07XG5cbmV4cG9ydCBjb25zdCBmaWVsZFByb3BlcnRpZXNWMSA9IHtcbiAgbmFtZTogbnVsbCxcbiAgdHlwZTogbnVsbCxcbiAgZm9ybWF0OiBudWxsLFxuICBhbmFseXplclR5cGU6IG51bGwsXG4gIG1ldGFkYXRhOiBudWxsXG59O1xuXG5leHBvcnQgY2xhc3MgRmllbGRTY2hlbWEgZXh0ZW5kcyBTY2hlbWEge1xuICBzYXZlKGZpZWxkcykge1xuICAgIHJldHVybiB7XG4gICAgICBbdGhpcy5rZXldOiBmaWVsZHMubWFwKGYgPT4gdGhpcy5zYXZlUHJvcGVydGllc09yQXBwbHlTY2hlbWEoZilbdGhpcy5rZXldKVxuICAgIH07XG4gIH1cbiAgbG9hZChmaWVsZHMpIHtcbiAgICByZXR1cm4ge1t0aGlzLmtleV06IGZpZWxkc307XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHByb3BlcnRpZXNWMCA9IHtcbiAgaWQ6IG51bGwsXG4gIGxhYmVsOiBudWxsLFxuICBjb2xvcjogbnVsbCxcbiAgYWxsRGF0YTogbnVsbCxcbiAgZmllbGRzOiBuZXcgRmllbGRTY2hlbWEoe1xuICAgIGtleTogJ2ZpZWxkcycsXG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjAsXG4gICAgcHJvcGVydGllczogZmllbGRQcm9wZXJ0aWVzVjBcbiAgfSlcbn07XG5cbmV4cG9ydCBjb25zdCBwcm9wZXJ0aWVzVjEgPSB7XG4gIC4uLnByb3BlcnRpZXNWMCxcbiAgZmllbGRzOiBuZXcgRmllbGRTY2hlbWEoe1xuICAgIGtleTogJ2ZpZWxkcycsXG4gICAgdmVyc2lvbjogVkVSU0lPTlMudjEsXG4gICAgcHJvcGVydGllczogZmllbGRQcm9wZXJ0aWVzVjFcbiAgfSksXG4gIHR5cGU6IG51bGwsXG4gIG1ldGFkYXRhOiBudWxsLFxuICBkaXNhYmxlRGF0YU9wZXJhdGlvbjogbnVsbFxufTtcblxuLyoqXG4gKiBUT0RPIENvbnNpZGVyIG1vdmluZyB0aGlzIGNhc3QgdG8gQXJyb3dEYXRhQ29udGFpbmVyP1xuICogUHJlcGFyZSBhIGRhdGEgY29udGFpbmVyIGZvciBleHBvcnQgYXMgcGFydCBvZiBqc29uIC8gaHRtbC5cbiAqIDEpIEFycm93IHRhYmxlcyBjYW4gc3RvcmUgVGltZXN0YW1wcyBhcyBCaWdJbnRzLCBzbyBjb252ZXJ0IG51bWJlcnMgdG8gSVNPU3RyaW5ncyBjb21wYXRpYmxlIHdpdGggS2VwbGVyLmdsJ3MgVElNRVNUQU1QLlxuICogQHBhcmFtIGRhdGFDb250YWluZXIgQSBkYXRhIGNvbnRhaW5lciB0byBmbGF0dGVuLlxuICogQHJldHVybnMgUm93IGJhc2VkIGRhdGEuXG4gKi9cbmNvbnN0IGdldEFsbERhdGFGb3JTYXZpbmcgPSAoZGF0YUNvbnRhaW5lcjogRGF0YUNvbnRhaW5lckludGVyZmFjZSk6IGFueVtdW10gPT4ge1xuICBjb25zdCBhbGxEYXRhID0gZGF0YUNvbnRhaW5lci5mbGF0dGVuRGF0YSgpO1xuXG4gIGlmIChkYXRhQ29udGFpbmVyIGluc3RhbmNlb2YgQXJyb3dEYXRhQ29udGFpbmVyKSB7XG4gICAgY29uc3QgbnVtQ29sdW1ucyA9IGRhdGFDb250YWluZXIubnVtQ29sdW1ucygpO1xuXG4gICAgZm9yIChsZXQgY29sdW1uSW5kZXggPSAwOyBjb2x1bW5JbmRleCA8IG51bUNvbHVtbnM7ICsrY29sdW1uSW5kZXgpIHtcbiAgICAgIGNvbnN0IGNvbHVtbiA9IGRhdGFDb250YWluZXIuZ2V0Q29sdW1uKGNvbHVtbkluZGV4KTtcbiAgICAgIGNvbnN0IHR5cGVJZCA9IGNvbHVtbi50eXBlPy50eXBlSWQ7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVJZCA9PT0gQXJyb3dUeXBlcy5UaW1lc3RhbXAgfHxcbiAgICAgICAgdHlwZUlkID09PSBBcnJvd1R5cGVzLkRhdGUgfHxcbiAgICAgICAgdHlwZUlkID09PSBBcnJvd1R5cGVzLlRpbWVcbiAgICAgICkge1xuICAgICAgICBhbGxEYXRhLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICByb3dbY29sdW1uSW5kZXhdID0gbmV3IERhdGUocm93W2NvbHVtbkluZGV4XSkudG9JU09TdHJpbmcoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGFsbERhdGE7XG59O1xuXG5leHBvcnQgY2xhc3MgRGF0YXNldFNjaGVtYSBleHRlbmRzIFNjaGVtYSB7XG4gIGtleSA9ICdkYXRhc2V0JztcblxuICBzYXZlKGRhdGFzZXQ6IEtlcGxlclRhYmxlKTogU2F2ZWREYXRhc2V0VjFbJ2RhdGEnXSB7XG4gICAgY29uc3QgZGF0YXNldEZsYXR0ZW5lZCA9IGRhdGFzZXQuZGF0YUNvbnRhaW5lclxuICAgICAgPyB7XG4gICAgICAgICAgLi4uZGF0YXNldCxcbiAgICAgICAgICBhbGxEYXRhOiBnZXRBbGxEYXRhRm9yU2F2aW5nKGRhdGFzZXQuZGF0YUNvbnRhaW5lciksXG4gICAgICAgICAgLy8gd2UgdXNlIGZsYXR0ZW5EYXRhIHRvIHNhdmUgYXJyb3cgdGFibGVzLFxuICAgICAgICAgIC8vIGJ1dCBvbmNlIGZsYXR0ZW5lZCBpdCdzIG5vdCBhbiBhcnJvdyBmaWxlIGFueW1vcmUuXG4gICAgICAgICAgbWV0YWRhdGE6IHtcbiAgICAgICAgICAgIC4uLmRhdGFzZXQubWV0YWRhdGEsXG4gICAgICAgICAgICAuLi4oZGF0YXNldC5tZXRhZGF0YS5mb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5hcnJvd1xuICAgICAgICAgICAgICA/IHtmb3JtYXQ6IERBVEFTRVRfRk9STUFUUy5yb3d9XG4gICAgICAgICAgICAgIDoge30pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA6IGRhdGFzZXQ7XG5cbiAgICByZXR1cm4gdGhpcy5zYXZlUHJvcGVydGllc09yQXBwbHlTY2hlbWEoZGF0YXNldEZsYXR0ZW5lZClbdGhpcy5rZXldO1xuICB9XG4gIGxvYWQoZGF0YXNldDogU2F2ZWREYXRhc2V0VjFbJ2RhdGEnXSk6IFByb3RvRGF0YXNldCB7XG4gICAgY29uc3Qge2ZpZWxkcywgYWxsRGF0YX0gPSBkYXRhc2V0O1xuICAgIGxldCB1cGRhdGVkRmllbGRzID0gZmllbGRzO1xuXG4gICAgLy8gcmVjYWxjdWxhdGUgZmllbGQgdHlwZVxuICAgIC8vIGJlY2F1c2Ugd2UgaGF2ZSB1cGRhdGVkIHR5cGUtYW5hbHl6ZXJcbiAgICAvLyB3ZSBuZWVkIHRvIGFkZCBmb3JtYXQgdG8gZWFjaCBmaWVsZFxuICAgIGNvbnN0IG5lZWRDYWxjdWxhdGVNZXRhID1cbiAgICAgIGZpZWxkc1swXSAmJlxuICAgICAgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZmllbGRzWzBdLCAnZm9ybWF0JykgfHxcbiAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChmaWVsZHNbMF0sICdhbmFseXplclR5cGUnKSk7XG5cbiAgICBpZiAobmVlZENhbGN1bGF0ZU1ldGEpIHtcbiAgICAgIGNvbnN0IGZpZWxkT3JkZXIgPSBmaWVsZHMubWFwKGYgPT4gZi5uYW1lKTtcblxuICAgICAgY29uc3Qgc2FtcGxlRGF0YSA9IGdldFNhbXBsZUZvclR5cGVBbmFseXplKHtcbiAgICAgICAgZmllbGRzOiBmaWVsZE9yZGVyLFxuICAgICAgICByb3dzOiBhbGxEYXRhXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IG1ldGEgPSBnZXRGaWVsZHNGcm9tRGF0YShzYW1wbGVEYXRhLCBmaWVsZE9yZGVyKTtcblxuICAgICAgdXBkYXRlZEZpZWxkcyA9IG1ldGEubWFwKChmLCBpKSA9PiAoe1xuICAgICAgICAuLi5waWNrKG1ldGFbaV0sIFsnbmFtZScsICd0eXBlJywgJ2Zvcm1hdCddKSxcbiAgICAgICAgYW5hbHl6ZXJUeXBlOiBtZXRhW2ldLmFuYWx5emVyVHlwZVxuICAgICAgfSkpO1xuXG4gICAgICB1cGRhdGVkRmllbGRzLmZvckVhY2goKGYsIGkpID0+IHtcbiAgICAgICAgaWYgKGZpZWxkc1tpXS50eXBlICE9PSBmLnR5cGUpIHtcbiAgICAgICAgICAvLyBpZiBuZXdseSBkZXRlY3RlZCBmaWVsZCB0eXBlIGlzIGRpZmZlcmVudCBmcm9tIHNhdmVkIHR5cGVcbiAgICAgICAgICAvLyB3ZSBsb2cgaXQgYnV0IHdvbid0IHVwZGF0ZSBpdCwgY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBicmVhayBwZW9wbGUncyBtYXBcbiAgICAgICAgICBnbG9iYWxDb25zb2xlLndhcm4oYGRldGVjdCAke2YubmFtZX0gdHlwZSBpcyBub3cgJHtmLnR5cGV9IGluc3RlYWQgb2YgJHtmaWVsZHNbaV0udHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gZ2V0IGZvcm1hdCBvZiBhbGwgZmllbGRzXG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHtmaWVsZHM6IHVwZGF0ZWRGaWVsZHMsIHJvd3M6IGRhdGFzZXQuYWxsRGF0YX0sXG4gICAgICBpbmZvOiBwaWNrKGRhdGFzZXQsIFsnaWQnLCAnbGFiZWwnLCAnY29sb3InLCAndHlwZSddKSxcbiAgICAgIC4uLihkYXRhc2V0Lm1ldGFkYXRhID8ge21ldGFkYXRhOiBkYXRhc2V0Lm1ldGFkYXRhfSA6IHt9KSxcbiAgICAgIC4uLihkYXRhc2V0LmRpc2FibGVEYXRhT3BlcmF0aW9uID8ge2Rpc2FibGVEYXRhT3BlcmF0aW9uOiBkYXRhc2V0LmRpc2FibGVEYXRhT3BlcmF0aW9ufSA6IHt9KVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGRhdGFzZXRTY2hlbWEgPSB7XG4gIFtWRVJTSU9OUy52MF06IG5ldyBEYXRhc2V0U2NoZW1hKHtcbiAgICBrZXk6ICdkYXRhc2V0JyxcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MCxcbiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzVjBcbiAgfSksXG4gIFtWRVJTSU9OUy52MV06IG5ldyBEYXRhc2V0U2NoZW1hKHtcbiAgICBrZXk6ICdkYXRhc2V0JyxcbiAgICB2ZXJzaW9uOiBWRVJTSU9OUy52MSxcbiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzVjFcbiAgfSlcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGRhdGFzZXRTY2hlbWE7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxPQUFBLEdBQUFDLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFBRyxVQUFBLEdBQUFILE9BQUE7QUFHQSxJQUFBSSxTQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxPQUFBLEdBQUFOLHNCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBTSxZQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxNQUFBLEdBQUFQLE9BQUE7QUFBNEUsU0FBQVEsUUFBQUMsQ0FBQSxFQUFBQyxDQUFBLFFBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxJQUFBLENBQUFKLENBQUEsT0FBQUcsTUFBQSxDQUFBRSxxQkFBQSxRQUFBQyxDQUFBLEdBQUFILE1BQUEsQ0FBQUUscUJBQUEsQ0FBQUwsQ0FBQSxHQUFBQyxDQUFBLEtBQUFLLENBQUEsR0FBQUEsQ0FBQSxDQUFBQyxNQUFBLFdBQUFOLENBQUEsV0FBQUUsTUFBQSxDQUFBSyx3QkFBQSxDQUFBUixDQUFBLEVBQUFDLENBQUEsRUFBQVEsVUFBQSxPQUFBUCxDQUFBLENBQUFRLElBQUEsQ0FBQUMsS0FBQSxDQUFBVCxDQUFBLEVBQUFJLENBQUEsWUFBQUosQ0FBQTtBQUFBLFNBQUFVLGNBQUFaLENB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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@kepler.gl/schemas",
3
3
  "author": "Shan He <shan@uber.com>",
4
- "version": "3.1.0-alpha.6",
4
+ "version": "3.1.0",
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,16 +30,17 @@
30
30
  "umd"
31
31
  ],
32
32
  "dependencies": {
33
- "@kepler.gl/common-utils": "3.1.0-alpha.6",
34
- "@kepler.gl/constants": "3.1.0-alpha.6",
35
- "@kepler.gl/layers": "3.1.0-alpha.6",
36
- "@kepler.gl/table": "3.1.0-alpha.6",
37
- "@kepler.gl/types": "3.1.0-alpha.6",
38
- "@kepler.gl/utils": "3.1.0-alpha.6",
33
+ "@kepler.gl/common-utils": "3.1.0",
34
+ "@kepler.gl/constants": "3.1.0",
35
+ "@kepler.gl/layers": "3.1.0",
36
+ "@kepler.gl/table": "3.1.0",
37
+ "@kepler.gl/types": "3.1.0",
38
+ "@kepler.gl/utils": "3.1.0",
39
39
  "@loaders.gl/loader-utils": "^4.3.2",
40
40
  "@types/keymirror": "^0.1.1",
41
41
  "@types/lodash.clonedeep": "^4.5.7",
42
42
  "@types/lodash.pick": "^4.4.6",
43
+ "apache-arrow": ">=15.0.0",
43
44
  "global": "^4.3.0",
44
45
  "keymirror": "^0.1.1",
45
46
  "lodash.clonedeep": "^4.0.1",
@@ -3,12 +3,15 @@
3
3
 
4
4
  import pick from 'lodash.pick';
5
5
  import {console as globalConsole} from 'global/window';
6
+ import {Type as ArrowTypes} from 'apache-arrow';
6
7
 
8
+ import {DATASET_FORMATS} from '@kepler.gl/constants';
7
9
  import {ProtoDataset, RGBColor, JsonObject} from '@kepler.gl/types';
8
10
  import {KeplerTable} from '@kepler.gl/table';
9
11
  import {VERSIONS} from './versions';
10
12
  import Schema from './schema';
11
13
  import {getFieldsFromData, getSampleForTypeAnalyze} from '@kepler.gl/common-utils';
14
+ import {ArrowDataContainer, DataContainerInterface} from '@kepler.gl/utils';
12
15
 
13
16
  export type SavedField = {
14
17
  name: string;
@@ -99,6 +102,37 @@ export const propertiesV1 = {
99
102
  disableDataOperation: null
100
103
  };
101
104
 
105
+ /**
106
+ * TODO Consider moving this cast to ArrowDataContainer?
107
+ * Prepare a data container for export as part of json / html.
108
+ * 1) Arrow tables can store Timestamps as BigInts, so convert numbers to ISOStrings compatible with Kepler.gl's TIMESTAMP.
109
+ * @param dataContainer A data container to flatten.
110
+ * @returns Row based data.
111
+ */
112
+ const getAllDataForSaving = (dataContainer: DataContainerInterface): any[][] => {
113
+ const allData = dataContainer.flattenData();
114
+
115
+ if (dataContainer instanceof ArrowDataContainer) {
116
+ const numColumns = dataContainer.numColumns();
117
+
118
+ for (let columnIndex = 0; columnIndex < numColumns; ++columnIndex) {
119
+ const column = dataContainer.getColumn(columnIndex);
120
+ const typeId = column.type?.typeId;
121
+ if (
122
+ typeId === ArrowTypes.Timestamp ||
123
+ typeId === ArrowTypes.Date ||
124
+ typeId === ArrowTypes.Time
125
+ ) {
126
+ allData.forEach(row => {
127
+ row[columnIndex] = new Date(row[columnIndex]).toISOString();
128
+ });
129
+ }
130
+ }
131
+ }
132
+
133
+ return allData;
134
+ };
135
+
102
136
  export class DatasetSchema extends Schema {
103
137
  key = 'dataset';
104
138
 
@@ -106,7 +140,15 @@ export class DatasetSchema extends Schema {
106
140
  const datasetFlattened = dataset.dataContainer
107
141
  ? {
108
142
  ...dataset,
109
- allData: dataset.dataContainer.flattenData()
143
+ allData: getAllDataForSaving(dataset.dataContainer),
144
+ // we use flattenData to save arrow tables,
145
+ // but once flattened it's not an arrow file anymore.
146
+ metadata: {
147
+ ...dataset.metadata,
148
+ ...(dataset.metadata.format === DATASET_FORMATS.arrow
149
+ ? {format: DATASET_FORMATS.row}
150
+ : {})
151
+ }
110
152
  }
111
153
  : dataset;
112
154