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.
- package/dist/src/actions/src/action-types.d.ts +2 -0
- package/dist/src/actions/src/ui-state-actions.d.ts +16 -0
- package/dist/src/ai-assistant/src/actions.d.ts +1 -1
- package/dist/src/ai-assistant/src/components/ai-assistant-component.d.ts +2 -1
- package/dist/src/ai-assistant/src/constants.d.ts +3 -3
- package/dist/src/ai-assistant/src/reducers/index.d.ts +1 -1
- package/dist/src/ai-assistant/src/tools/basemap-functions.d.ts +1 -1
- package/dist/src/ai-assistant/src/tools/filter-function.d.ts +1 -1
- package/dist/src/ai-assistant/src/tools/layer-creation-function.d.ts +1 -1
- package/dist/src/ai-assistant/src/tools/layer-style-function.d.ts +1 -1
- package/dist/src/ai-assistant/src/tools/loadurl-function.d.ts +1 -1
- package/dist/src/ai-assistant/src/tools/utils.d.ts +73 -0
- package/dist/src/components/src/common/data-table/index.d.ts +1 -1
- package/dist/src/components/src/common/data-table/option-dropdown.d.ts +3 -3
- package/dist/src/components/src/common/file-uploader/file-drop.d.ts +2 -2
- package/dist/src/components/src/kepler-gl.d.ts +5 -0
- package/dist/src/components/src/loading-indicator.d.ts +13 -0
- package/dist/src/components/src/map-container.d.ts +3 -0
- package/dist/src/constants/src/default-settings.d.ts +1 -0
- package/dist/src/duckdb/src/plugin.d.ts +1 -0
- package/dist/src/duckdb/src/table/duckdb-table-utils.d.ts +13 -0
- package/dist/src/duckdb/src/table/duckdb-table.d.ts +7 -2
- package/dist/src/reducers/src/ui-state-updaters.d.ts +10 -0
- package/dist/src/reducers/src/vis-state-updaters.d.ts +1 -0
- package/dist/src/reducers/src/vis-state.d.ts +4 -0
- package/dist/src/utils/src/application-config.d.ts +2 -0
- package/dist/src/utils/src/observe-dimensions.d.ts +2 -1
- package/package.json +5 -3
- package/src/actions/dist/action-types.d.ts +2 -0
- package/src/actions/dist/action-types.js +2 -1
- package/src/actions/dist/ui-state-actions.d.ts +16 -0
- package/src/actions/dist/ui-state-actions.js +17 -2
- package/src/actions/package.json +8 -8
- package/src/actions/src/action-types.ts +1 -0
- package/src/actions/src/ui-state-actions.ts +22 -0
- package/src/ai-assistant/README.md +76 -0
- package/src/ai-assistant/dist/actions.d.ts +1 -1
- package/src/ai-assistant/dist/actions.js +2 -2
- package/src/ai-assistant/dist/components/ai-assistant-component.d.ts +2 -1
- package/src/ai-assistant/dist/components/ai-assistant-component.js +64 -23
- package/src/ai-assistant/dist/components/ai-assistant-config.js +67 -54
- package/src/ai-assistant/dist/constants.d.ts +3 -3
- package/src/ai-assistant/dist/constants.js +4 -4
- package/src/ai-assistant/dist/reducers/index.d.ts +1 -1
- package/src/ai-assistant/dist/reducers/index.js +2 -2
- package/src/ai-assistant/dist/tools/basemap-functions.d.ts +1 -1
- package/src/ai-assistant/dist/tools/basemap-functions.js +1 -1
- package/src/ai-assistant/dist/tools/filter-function.d.ts +1 -1
- package/src/ai-assistant/dist/tools/filter-function.js +9 -6
- package/src/ai-assistant/dist/tools/layer-creation-function.d.ts +1 -1
- package/src/ai-assistant/dist/tools/layer-creation-function.js +1 -1
- package/src/ai-assistant/dist/tools/layer-style-function.d.ts +1 -1
- package/src/ai-assistant/dist/tools/layer-style-function.js +1 -1
- package/src/ai-assistant/dist/tools/loadurl-function.d.ts +1 -1
- package/src/ai-assistant/dist/tools/loadurl-function.js +1 -1
- package/src/ai-assistant/dist/tools/utils.d.ts +73 -0
- package/src/ai-assistant/dist/tools/utils.js +211 -3
- package/src/ai-assistant/package.json +13 -9
- package/src/ai-assistant/src/actions.ts +2 -2
- package/src/ai-assistant/src/components/ai-assistant-component.tsx +56 -23
- package/src/ai-assistant/src/components/ai-assistant-config.tsx +63 -46
- package/src/ai-assistant/src/config/models.json +32 -0
- package/src/ai-assistant/src/constants.ts +7 -2
- package/src/ai-assistant/src/reducers/index.ts +2 -2
- package/src/ai-assistant/src/tools/basemap-functions.tsx +1 -1
- package/src/ai-assistant/src/tools/filter-function.tsx +11 -7
- package/src/ai-assistant/src/tools/layer-creation-function.tsx +1 -1
- package/src/ai-assistant/src/tools/layer-style-function.tsx +1 -1
- package/src/ai-assistant/src/tools/loadurl-function.tsx +1 -1
- package/src/ai-assistant/src/tools/utils.ts +212 -2
- package/src/cloud-providers/package.json +2 -2
- package/src/common-utils/package.json +3 -3
- package/src/components/dist/common/data-table/header-cell.js +10 -10
- package/src/components/dist/common/data-table/index.d.ts +1 -1
- package/src/components/dist/common/data-table/index.js +1 -1
- package/src/components/dist/common/data-table/option-dropdown.d.ts +3 -3
- package/src/components/dist/common/data-table/option-dropdown.js +5 -5
- package/src/components/dist/common/file-uploader/file-drop.d.ts +2 -2
- package/src/components/dist/common/file-uploader/file-drop.js +1 -1
- package/src/components/dist/common/portaled.js +1 -1
- package/src/components/dist/editor/editor.js +1 -1
- package/src/components/dist/kepler-gl.d.ts +5 -0
- package/src/components/dist/kepler-gl.js +7 -2
- package/src/components/dist/loading-indicator.d.ts +13 -0
- package/src/components/dist/loading-indicator.js +40 -0
- package/src/components/dist/map-container.d.ts +3 -0
- package/src/components/dist/map-container.js +11 -3
- package/src/components/dist/modals/save-map-modal.js +4 -3
- package/src/components/package.json +15 -15
- package/src/components/src/common/data-table/header-cell.tsx +5 -3
- package/src/components/src/common/data-table/index.tsx +1 -1
- package/src/components/src/common/data-table/option-dropdown.tsx +7 -7
- package/src/components/src/common/file-uploader/file-drop.tsx +11 -11
- package/src/components/src/common/portaled.tsx +12 -12
- package/src/components/src/editor/editor.tsx +3 -3
- package/src/components/src/kepler-gl.tsx +7 -2
- package/src/components/src/loading-indicator.tsx +49 -0
- package/src/components/src/map-container.tsx +19 -1
- package/src/components/src/modals/save-map-modal.tsx +6 -2
- package/src/constants/dist/default-settings.d.ts +1 -0
- package/src/constants/dist/default-settings.js +13 -9
- package/src/constants/dist/keyevent.js +1 -1
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/72/80/7a7c561d7985e92aab7b9683e7baf5a0286b353a8f2609c4c71099f668d012be027929e4bbac937f9aa0c9a61be3bd4405136f582895f05aa0313c8efa42 +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/8f/f6/b66955867599392dc69ff1db64419e83c087a82c2e3d4b6418d49ac6bc80e3200dd6c86cdfd4a2cf98ce573f71a5281b86ba3df8a7210e02544f63054191 +1 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/bd/ba/47ea8fcb11ecd5cd47ad867052e58b1f7e0c8dc5f8918a36fe90eaf45981 +2 -0
- package/src/constants/node_modules/.cache/terser-webpack-plugin/index-v5/f0/6e/aadf3c48345aa72e7b2fb92e8c9788d04986b55caf83daa3fbd749c37c44 +2 -0
- package/src/constants/package.json +2 -2
- package/src/constants/src/default-settings.ts +11 -5
- package/src/constants/src/keyevent.ts +2 -2
- package/src/constants/umd/keplergl.min.js +1 -1
- package/src/deckgl-arrow-layers/package.json +1 -1
- package/src/deckgl-layers/package.json +4 -4
- package/src/duckdb/dist/components/preview-data-panel.js +2 -11
- package/src/duckdb/dist/components/sql-panel.js +7 -3
- package/src/duckdb/dist/components/tree.js +5 -4
- package/src/duckdb/dist/plugin.d.ts +1 -0
- package/src/duckdb/dist/plugin.js +9 -2
- package/src/duckdb/dist/processors/data-processor.js +4 -5
- package/src/duckdb/dist/table/duckdb-table-utils.d.ts +13 -0
- package/src/duckdb/dist/table/duckdb-table-utils.js +110 -0
- package/src/duckdb/dist/table/duckdb-table.d.ts +7 -2
- package/src/duckdb/dist/table/duckdb-table.js +189 -44
- package/src/duckdb/package.json +6 -6
- package/src/duckdb/src/components/preview-data-panel.tsx +0 -5
- package/src/duckdb/src/components/sql-panel.tsx +4 -2
- package/src/duckdb/src/components/tree.tsx +5 -1
- package/src/duckdb/src/plugin.ts +8 -1
- package/src/duckdb/src/processors/data-processor.ts +3 -4
- package/src/duckdb/src/table/duckdb-table-utils.ts +106 -0
- package/src/duckdb/src/table/duckdb-table.ts +134 -33
- package/src/effects/package.json +5 -5
- package/src/layers/dist/icon-layer/icon-layer.js +1 -1
- package/src/layers/dist/index.d.ts +3 -0
- package/src/layers/dist/index.js +6 -7
- package/src/layers/dist/point-layer/point-layer.d.ts +1 -1
- package/src/layers/dist/point-layer/point-layer.js +8 -2
- package/src/layers/package.json +9 -9
- package/src/layers/src/icon-layer/icon-layer.ts +8 -10
- package/src/layers/src/index.ts +5 -5
- package/src/layers/src/point-layer/point-layer.ts +6 -1
- package/src/localization/package.json +1 -1
- package/src/processors/dist/data-processor.js +2 -4
- package/src/processors/package.json +7 -7
- package/src/processors/src/data-processor.ts +1 -3
- package/src/reducers/dist/ui-state-updaters.d.ts +10 -0
- package/src/reducers/dist/ui-state-updaters.js +22 -2
- package/src/reducers/dist/ui-state.js +2 -2
- package/src/reducers/dist/vis-state-updaters.d.ts +1 -0
- package/src/reducers/dist/vis-state-updaters.js +21 -5
- package/src/reducers/dist/vis-state.d.ts +4 -0
- package/src/reducers/package.json +16 -16
- package/src/reducers/src/ui-state-updaters.ts +24 -0
- package/src/reducers/src/ui-state.ts +3 -1
- package/src/reducers/src/vis-state-updaters.ts +24 -5
- package/src/schemas/dist/dataset-schema.js +38 -2
- package/src/schemas/package.json +8 -7
- package/src/schemas/src/dataset-schema.ts +43 -1
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/5f/aa/96c67b383dbcd2b95625113a5389c6078fd8a53e6fc73a054229709f2dac1e0a409e7117049485a569fbebf8434a319451842671398904bfe1a7f7b5991c +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/content-v2/sha512/af/aa/228fbff58007b23eea5eb6cc7d2da1f0af1d8a7024129a416ea88b4df0ad7afc7aec93b09f3dd42a98f1d6a6f4dce6b53204818da85ef5becc42f928a64d +1 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/40/72/cac221d8459e6b743bc62ecdb370ed854b21ec30d3f7f4c06c7d1d7ffde2 +2 -0
- package/src/styles/node_modules/.cache/terser-webpack-plugin/index-v5/c1/39/f7cd1d5947ec6e5d82bfa07041271344eb02f9e67bf5823acf2f22c2d01f +2 -0
- package/src/styles/package.json +2 -2
- package/src/styles/umd/keplergl.min.js +1 -1
- package/src/table/dist/dataset-utils.js +10 -4
- package/src/table/package.json +5 -5
- package/src/table/src/dataset-utils.ts +7 -1
- package/src/tasks/package.json +2 -2
- package/src/types/package.json +1 -1
- package/src/types/reducers.d.ts +2 -0
- package/src/utils/dist/application-config.d.ts +2 -0
- package/src/utils/dist/application-config.js +4 -2
- package/src/utils/dist/data-utils.js +14 -2
- package/src/utils/dist/dataset-utils.js +5 -3
- package/src/utils/dist/dom-to-image.js +1 -1
- package/src/utils/dist/dom-utils.js +1 -1
- package/src/utils/dist/map-style-utils/mapbox-gl-style-editor.js +7 -1
- package/src/utils/dist/observe-dimensions.d.ts +2 -1
- package/src/utils/dist/observe-dimensions.js +10 -4
- package/src/utils/dist/utils.js +1 -1
- package/src/utils/package.json +4 -4
- package/src/utils/src/application-config.ts +9 -1
- package/src/utils/src/data-utils.ts +13 -1
- package/src/utils/src/dataset-utils.ts +1 -1
- package/src/utils/src/dom-to-image.ts +5 -6
- package/src/utils/src/dom-utils.ts +15 -15
- package/src/utils/src/map-style-utils/mapbox-gl-style-editor.ts +6 -0
- package/src/utils/src/observe-dimensions.ts +9 -4
- package/src/utils/src/utils.ts +8 -8
- package/umd/keplergl.min.css +1 -1
- package/umd/keplergl.min.js +1499 -1428
|
@@ -15,24 +15,45 @@ var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime
|
|
|
15
15
|
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
|
|
16
16
|
var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
|
|
17
17
|
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
|
|
18
|
-
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
19
18
|
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
19
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
20
20
|
var arrow = _interopRequireWildcard(require("apache-arrow"));
|
|
21
21
|
var _constants = require("@kepler.gl/constants");
|
|
22
22
|
var _table = require("@kepler.gl/table");
|
|
23
23
|
var _processors = require("@kepler.gl/processors");
|
|
24
24
|
var _init = require("../init");
|
|
25
25
|
var _dataProcessor = require("../processors/data-processor");
|
|
26
|
+
var _duckdbTableUtils = require("./duckdb-table-utils");
|
|
26
27
|
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
27
28
|
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
|
|
29
|
+
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
30
|
+
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
|
|
31
|
+
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
|
|
28
32
|
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; }
|
|
29
33
|
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; }
|
|
30
34
|
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)); }
|
|
31
35
|
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
|
|
32
36
|
function _superPropGet(t, e, r, o) { var p = (0, _get2["default"])((0, _getPrototypeOf2["default"])(1 & o ? t.prototype : t), e, r); return 2 & o ? function (t) { return p.apply(r, t); } : p; } // SPDX-License-Identifier: MIT
|
|
33
37
|
// Copyright contributors to the kepler.gl project
|
|
34
|
-
// TODO
|
|
35
|
-
|
|
38
|
+
// TODO use files from disk or url directly, without parsing by loaders and then ingection into DeckDb
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* Default DuckDb geometry columns created by ST_READ
|
|
42
|
+
*/
|
|
43
|
+
var DUCKDB_GEOM_COLUMN = 'geom';
|
|
44
|
+
var DUCKDB_WKB_COLUMN = 'wkb_geometry';
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
Default column name for processed geojson in Kepler.
|
|
48
|
+
Use this name to rename default 'geom' column from DuckDb
|
|
49
|
+
in order to support Kepler maps saved before introduction of DuckDb plugin.
|
|
50
|
+
*/
|
|
51
|
+
var KEPLER_GEOM_FROM_GEOJSON_COLUMN = '_geojson';
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Names of columns that most likely contain binary wkb geometry
|
|
55
|
+
*/
|
|
56
|
+
var SUGGESTED_GEOM_COLUMNS = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, KEPLER_GEOM_FROM_GEOJSON_COLUMN, true), DUCKDB_GEOM_COLUMN, true), "geometry", true);
|
|
36
57
|
/**
|
|
37
58
|
* Creates an arrow table from arrow vectors and fields.
|
|
38
59
|
* @param columns An array of arrow vectors.
|
|
@@ -139,7 +160,7 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
139
160
|
_context3.next = 5;
|
|
140
161
|
return db.registerFileText(this.id, JSON.stringify(rows));
|
|
141
162
|
case 5:
|
|
142
|
-
createTableSql = "\n install spatial;\n load spatial;\n CREATE TABLE '".concat(this.label, "' AS \n SELECT *\n FROM ST_READ('").concat(this.id, "');\n ");
|
|
163
|
+
createTableSql = "\n install spatial;\n load spatial;\n CREATE TABLE '".concat(this.label, "' AS \n SELECT *\n FROM ST_READ('").concat(this.id, "', keep_wkb = TRUE);\n ALTER TABLE '").concat(this.label, "' RENAME '").concat(DUCKDB_WKB_COLUMN, "' TO '").concat(KEPLER_GEOM_FROM_GEOJSON_COLUMN, "';\n ");
|
|
143
164
|
_context3.next = 8;
|
|
144
165
|
return c.query(createTableSql);
|
|
145
166
|
case 8:
|
|
@@ -150,6 +171,10 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
150
171
|
_context3.t0 = _context3["catch"](1);
|
|
151
172
|
console.error('importGeoJsonData', _context3.t0);
|
|
152
173
|
case 13:
|
|
174
|
+
return _context3.abrupt("return", {
|
|
175
|
+
addWKBMetadata: (0, _defineProperty2["default"])({}, KEPLER_GEOM_FROM_GEOJSON_COLUMN, true)
|
|
176
|
+
});
|
|
177
|
+
case 14:
|
|
153
178
|
case "end":
|
|
154
179
|
return _context3.stop();
|
|
155
180
|
}
|
|
@@ -191,6 +216,12 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
191
216
|
// 1) Arrow Type with extension name: geoarrow.point and format: +w:2 is not currently supported in DuckDB.
|
|
192
217
|
console.error('importArrowData', _context4.t0);
|
|
193
218
|
case 13:
|
|
219
|
+
return _context4.abrupt("return", {
|
|
220
|
+
addWKBMetadata: _objectSpread({}, SUGGESTED_GEOM_COLUMNS),
|
|
221
|
+
// use metadata from arrow table
|
|
222
|
+
useNewFields: true
|
|
223
|
+
});
|
|
224
|
+
case 14:
|
|
194
225
|
case "end":
|
|
195
226
|
return _context4.stop();
|
|
196
227
|
}
|
|
@@ -210,7 +241,7 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
210
241
|
key: "createTableAndGetArrow",
|
|
211
242
|
value: (function () {
|
|
212
243
|
var _createTableAndGetArrow = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(data) {
|
|
213
|
-
var db, c, tableName, format, _data$rows, _data$rows2, _data$rows3, _data$cols, fields, cols, _data$fields,
|
|
244
|
+
var db, c, tableName, format, _data$rows, _data$rows2, _data$rows3, _data$cols, importDetails, fields, cols, _data$fields, _ref5, _ref5$addWKBMetadata, addWKBMetadata, _ref5$useNewFields, useNewFields, canCastST_asWKB, getArrowQuery, arrowResult;
|
|
214
245
|
return _regenerator["default"].wrap(function _callee5$(_context5) {
|
|
215
246
|
while (1) switch (_context5.prev = _context5.next) {
|
|
216
247
|
case 0:
|
|
@@ -248,11 +279,11 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
248
279
|
c: c
|
|
249
280
|
});
|
|
250
281
|
case 14:
|
|
251
|
-
_context5.next =
|
|
282
|
+
_context5.next = 29;
|
|
252
283
|
break;
|
|
253
284
|
case 16:
|
|
254
285
|
if (!(format === _constants.DATASET_FORMATS.geojson)) {
|
|
255
|
-
_context5.next =
|
|
286
|
+
_context5.next = 22;
|
|
256
287
|
break;
|
|
257
288
|
}
|
|
258
289
|
_context5.next = 19;
|
|
@@ -262,71 +293,72 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
262
293
|
c: c
|
|
263
294
|
});
|
|
264
295
|
case 19:
|
|
265
|
-
|
|
296
|
+
importDetails = _context5.sent;
|
|
297
|
+
_context5.next = 29;
|
|
266
298
|
break;
|
|
267
|
-
case
|
|
299
|
+
case 22:
|
|
268
300
|
if (!(format === _constants.DATASET_FORMATS.arrow)) {
|
|
269
|
-
_context5.next =
|
|
301
|
+
_context5.next = 28;
|
|
270
302
|
break;
|
|
271
303
|
}
|
|
272
|
-
_context5.next =
|
|
304
|
+
_context5.next = 25;
|
|
273
305
|
return this.importArrowData({
|
|
274
306
|
data: data,
|
|
275
307
|
db: db,
|
|
276
308
|
c: c
|
|
277
309
|
});
|
|
278
|
-
case
|
|
279
|
-
|
|
310
|
+
case 25:
|
|
311
|
+
importDetails = _context5.sent;
|
|
312
|
+
_context5.next = 29;
|
|
280
313
|
break;
|
|
281
|
-
case
|
|
314
|
+
case 28:
|
|
282
315
|
console.error('Unrecognized format', format);
|
|
283
|
-
case
|
|
316
|
+
case 29:
|
|
284
317
|
fields = [];
|
|
285
318
|
cols = [];
|
|
286
|
-
_context5.prev =
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
})); // TODO don't do this for all columns named 'geom', check whether it's a wkb and not something else!
|
|
294
|
-
// query and transform geometry column to wkb
|
|
295
|
-
_context5.next = 36;
|
|
296
|
-
return c.query("SELECT * ".concat(hasBinaryGeoField ? "EXCLUDE ".concat(GEOMETRY_COLUMN, ", ST_AsWKB(").concat(GEOMETRY_COLUMN, ") as ").concat(GEOMETRY_COLUMN) : '', " FROM '").concat(tableName, "';"));
|
|
297
|
-
case 36:
|
|
298
|
-
arrowResult = _context5.sent;
|
|
299
|
-
geoField = arrowResult.schema.fields.find(function (f) {
|
|
300
|
-
return f.name === GEOMETRY_COLUMN && arrow.DataType.isBinary(f.type);
|
|
319
|
+
_context5.prev = 31;
|
|
320
|
+
_ref5 = importDetails || {}, _ref5$addWKBMetadata = _ref5.addWKBMetadata, addWKBMetadata = _ref5$addWKBMetadata === void 0 ? {} : _ref5$addWKBMetadata, _ref5$useNewFields = _ref5.useNewFields, useNewFields = _ref5$useNewFields === void 0 ? false : _ref5$useNewFields; // Try to figure out whether geometry should be transformed by ST_AsWKB
|
|
321
|
+
// TODO if canCastST_asWKB contains any keys then add ST_AsWKB to the following query
|
|
322
|
+
_context5.next = 35;
|
|
323
|
+
return tryST_AsWKB({
|
|
324
|
+
tableName: tableName,
|
|
325
|
+
c: c
|
|
301
326
|
});
|
|
302
|
-
|
|
303
|
-
|
|
327
|
+
case 35:
|
|
328
|
+
canCastST_asWKB = _context5.sent;
|
|
329
|
+
getArrowQuery = "SELECT * FROM '".concat(tableName, "';");
|
|
330
|
+
_context5.next = 39;
|
|
331
|
+
return c.query(getArrowQuery);
|
|
332
|
+
case 39:
|
|
333
|
+
arrowResult = _context5.sent;
|
|
334
|
+
restoreGeoarrowMetadata(arrowResult, canCastST_asWKB, addWKBMetadata);
|
|
335
|
+
fields = useNewFields ? (0, _processors.arrowSchemaToFields)(arrowResult.schema) : (_data$fields = data.fields) !== null && _data$fields !== void 0 ? _data$fields : (0, _processors.arrowSchemaToFields)(arrowResult.schema);
|
|
304
336
|
cols = (0, _toConsumableArray2["default"])(Array(arrowResult.numCols).keys()).map(function (i) {
|
|
305
337
|
return arrowResult.getChildAt(i);
|
|
306
338
|
}).filter(function (col) {
|
|
307
339
|
return col;
|
|
308
340
|
});
|
|
309
|
-
_context5.next =
|
|
341
|
+
_context5.next = 48;
|
|
310
342
|
break;
|
|
311
|
-
case
|
|
312
|
-
_context5.prev =
|
|
313
|
-
_context5.t0 = _context5["catch"](
|
|
343
|
+
case 45:
|
|
344
|
+
_context5.prev = 45;
|
|
345
|
+
_context5.t0 = _context5["catch"](31);
|
|
314
346
|
// Known issues:
|
|
315
347
|
// 1) ST_AsWKB binder error, no type match
|
|
316
348
|
console.error('DuckDb table: binary geometry column to wkb', _context5.t0);
|
|
317
|
-
case 46:
|
|
318
|
-
_context5.next = 48;
|
|
319
|
-
return c.close();
|
|
320
349
|
case 48:
|
|
350
|
+
_context5.next = 50;
|
|
351
|
+
return c.close();
|
|
352
|
+
case 50:
|
|
321
353
|
return _context5.abrupt("return", {
|
|
322
354
|
fields: fields,
|
|
323
355
|
cols: cols
|
|
324
356
|
});
|
|
325
|
-
case
|
|
357
|
+
case 51:
|
|
326
358
|
case "end":
|
|
327
359
|
return _context5.stop();
|
|
328
360
|
}
|
|
329
|
-
}, _callee5, this, [[
|
|
361
|
+
}, _callee5, this, [[31, 45]]);
|
|
330
362
|
}));
|
|
331
363
|
function createTableAndGetArrow(_x6) {
|
|
332
364
|
return _createTableAndGetArrow.apply(this, arguments);
|
|
@@ -336,12 +368,12 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
336
368
|
}, {
|
|
337
369
|
key: "importData",
|
|
338
370
|
value: function () {
|
|
339
|
-
var _importData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(
|
|
371
|
+
var _importData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(_ref6) {
|
|
340
372
|
var data, _yield$this$createTab, fields, cols;
|
|
341
373
|
return _regenerator["default"].wrap(function _callee6$(_context6) {
|
|
342
374
|
while (1) switch (_context6.prev = _context6.next) {
|
|
343
375
|
case 0:
|
|
344
|
-
data =
|
|
376
|
+
data = _ref6.data;
|
|
345
377
|
if (!(this.type === _constants.DatasetType.VECTOR_TILE)) {
|
|
346
378
|
_context6.next = 4;
|
|
347
379
|
break;
|
|
@@ -417,6 +449,13 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
417
449
|
}()
|
|
418
450
|
}]);
|
|
419
451
|
}(_table.KeplerTable);
|
|
452
|
+
/**
|
|
453
|
+
* Try to restore geoarrow metadata lost during DuckDb ingestion.
|
|
454
|
+
* Note that this function can generate wrong geometry types.
|
|
455
|
+
* @param arrowTable Arrow table to update.
|
|
456
|
+
* @param canCastST_asWKB A map with fields that are likely in DeckDB's internal WBK format.
|
|
457
|
+
* @param addWKBMetadata A map with field names that usually used to store WKB geometry.
|
|
458
|
+
*/
|
|
420
459
|
(0, _defineProperty2["default"])(KeplerGlDuckDbTable, "getFileProcessor", function (data, inputFormat) {
|
|
421
460
|
var processor;
|
|
422
461
|
var format;
|
|
@@ -440,4 +479,110 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
440
479
|
format: format
|
|
441
480
|
};
|
|
442
481
|
});
|
|
443
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfdGFibGUiLCJfcHJvY2Vzc29ycyIsIl9pbml0IiwiX2RhdGFQcm9jZXNzb3IiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwiR0VPTUVUUllfQ09MVU1OIiwicmVzdG9yZUFycm93VGFibGUiLCJjb2x1bW5zIiwiZmllbGRzIiwiY3JlYU9wdHMiLCJtYXAiLCJmaWVsZCIsImluZGV4IiwibmFtZSIsIlRhYmxlIiwiZHJvcElmVGFibGVFeGlzdHMiLCJfcmVmIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJjIiwidGFibGVOYW1lIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsInF1ZXJ5IiwiY29uY2F0IiwidDAiLCJjb25zb2xlIiwiZXJyb3IiLCJzdG9wIiwiX3giLCJfeDIiLCJLZXBsZXJHbER1Y2tEYlRhYmxlIiwiZXhwb3J0cyIsIl9LZXBsZXJUYWJsZSIsInByb3BzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJfaW1wb3J0Um93RGF0YSIsIl9jYWxsZWUyIiwiX3JlZjIiLCJkYXRhIiwiZGIiLCJyb3dzIiwicm93c0ZvckRiIiwiY3JlYXRlVGFibGVTcWwiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJBcnJheSIsImlzQXJyYXkiLCJyb3ciLCJuZXdSb3ciLCJyZWdpc3RlckZpbGVUZXh0IiwiaWQiLCJKU09OIiwic3RyaW5naWZ5IiwicmVkdWNlIiwiYWNjIiwiZHVja0RCQ29sdW1uVHlwZSIsImxhYmVsIiwibG9nIiwiaW1wb3J0Um93RGF0YSIsIl94MyIsIl9pbXBvcnRHZW9Kc29uRGF0YSIsIl9jYWxsZWUzIiwiX3JlZjMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJpbXBvcnRHZW9Kc29uRGF0YSIsIl94NCIsIl9pbXBvcnRBcnJvd0RhdGEiLCJfY2FsbGVlNCIsIl9yZWY0IiwiYXJyb3dUYWJsZSIsInNldHVwU3FsIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiY29scyIsImluc2VydEFycm93VGFibGUiLCJpbXBvcnRBcnJvd0RhdGEiLCJfeDUiLCJfY3JlYXRlVGFibGVBbmRHZXRBcnJvdyIsIl9jYWxsZWU1IiwiZm9ybWF0IiwiX2RhdGEkcm93cyIsIl9kYXRhJHJvd3MyIiwiX2RhdGEkcm93czMiLCJfZGF0YSRjb2xzIiwiX2RhdGEkZmllbGRzIiwiZHVtbXlSZXN1bHQiLCJoYXNCaW5hcnlHZW9GaWVsZCIsImFycm93UmVzdWx0IiwiZ2VvRmllbGQiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJnZXREdWNrREIiLCJzZW50IiwiY29ubmVjdCIsIm1ldGFkYXRhIiwiX3R5cGVvZjIiLCJEQVRBU0VUX0ZPUk1BVFMiLCJ0eXBlIiwiZ2VvanNvbiIsIlZlY3RvciIsInNjaGVtYSIsImZpbmQiLCJmIiwiRGF0YVR5cGUiLCJpc0JpbmFyeSIsImFycm93U2NoZW1hVG9GaWVsZHMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwibnVtQ29scyIsImdldENoaWxkQXQiLCJjb2wiLCJjbG9zZSIsImFicnVwdCIsImNyZWF0ZVRhYmxlQW5kR2V0QXJyb3ciLCJfeDYiLCJfaW1wb3J0RGF0YSIsIl9jYWxsZWU2IiwiX3JlZjUiLCJfeWllbGQkdGhpcyRjcmVhdGVUYWIiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJEYXRhc2V0VHlwZSIsIlZFQ1RPUl9USUxFIiwiaW1wb3J0RGF0YSIsIl94NyIsIl91cGRhdGUiLCJfY2FsbGVlNyIsIl95aWVsZCR0aGlzJGNyZWF0ZVRhYjIiLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJ1cGRhdGUiLCJfeDgiLCJLZXBsZXJUYWJsZSIsImlucHV0Rm9ybWF0IiwicHJvY2Vzc29yIiwiaXNBcnJvd0RhdGEiLCJwcm9jZXNzQXJyb3dCYXRjaGVzIiwia2VwbGVyZ2wiLCJpc0tlcGxlckdsTWFwIiwicHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYiIsImlzUm93T2JqZWN0IiwicHJvY2Vzc0NzdlJvd09iamVjdCIsImlzR2VvSnNvbiIsInByb2Nlc3NHZW9qc29uIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RhYmxlL2R1Y2tkYi10YWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IHtBc3luY0R1Y2tEQiwgQXN5bmNEdWNrREJDb25uZWN0aW9ufSBmcm9tICdAZHVja2RiL2R1Y2tkYi13YXNtJztcblxuaW1wb3J0IHtEYXRhc2V0VHlwZSwgREFUQVNFVF9GT1JNQVRTfSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7RmllbGQsIFByb3RvRGF0YXNldEZpZWxkfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIGFycm93U2NoZW1hVG9GaWVsZHMsXG4gIGlzQXJyb3dEYXRhLFxuICBpc0dlb0pzb24sXG4gIGlzS2VwbGVyR2xNYXAsXG4gIGlzUm93T2JqZWN0LFxuICBwcm9jZXNzQXJyb3dCYXRjaGVzXG59IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5cbmltcG9ydCB7Z2V0RHVja0RCfSBmcm9tICcuLi9pbml0JztcbmltcG9ydCB7XG4gIHByb2Nlc3NDc3ZSb3dPYmplY3QsXG4gIHByb2Nlc3NHZW9qc29uLFxuICBwcm9jZXNzS2VwbGVyZ2xKU09OZm9yRHVja0RiLFxuICBQcm9jZXNzb3JSZXN1bHRcbn0gZnJvbSAnLi4vcHJvY2Vzc29ycy9kYXRhLXByb2Nlc3Nvcic7XG5cbi8vIFRPRE8gZm9ybWF0IGdlb2pzb24sIGFsbCBiaW5hcnkgZ2VvZ3NvbiBjb2x1bW5zIHNob3VsZCBiZSB0cmFuZm9ybWVkIHRvIHdrYlxuY29uc3QgR0VPTUVUUllfQ09MVU1OID0gJ2dlb20nO1xuXG50eXBlIEltcG9ydERhdGFUb0R1Y2tQcm9wcyA9IHtcbiAgZGF0YTogUHJvY2Vzc29yUmVzdWx0O1xuICBkYjogQXN5bmNEdWNrREI7XG4gIGM6IEFzeW5jRHVja0RCQ29ubmVjdGlvbjtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJvdyB0YWJsZSBmcm9tIGFycm93IHZlY3RvcnMgYW5kIGZpZWxkcy5cbiAqIEBwYXJhbSBjb2x1bW5zIEFuIGFycmF5IG9mIGFycm93IHZlY3RvcnMuXG4gKiBAcGFyYW0gZmllbGRzIEFuIGFycmF5IG9mIGZpZWxkcyBwZXIgYXJyb3cgdmVjdG9yLlxuICogQHJldHVybnMgQW4gYXJyb3cgdGFibGUuXG4gKi9cbi8vIFRPRE86IGNvbnNpZGVyIHVzaW5nIG9yaWdpbmFsIGRyYWcmZHJvcHBlZCBhcnJvdyB0YWJsZSwgYXMgaXQgY291bGQgY29udGFpbiBleHRyYSBtZXRhZGF0YSwgbm90IHBhc3NlZCB0byB0aGUgZmllbGRzLlxuY29uc3QgcmVzdG9yZUFycm93VGFibGUgPSAoY29sdW1uczogYXJyb3cuVmVjdG9yW10sIGZpZWxkczogUHJvdG9EYXRhc2V0RmllbGRbXSkgPT4ge1xuICBjb25zdCBjcmVhT3B0cyA9IHt9O1xuICBmaWVsZHMubWFwKChmaWVsZCwgaW5kZXgpID0+IHtcbiAgICBjcmVhT3B0c1tmaWVsZC5uYW1lXSA9IGNvbHVtbnNbaW5kZXhdO1xuICB9KTtcbiAgcmV0dXJuIG5ldyBhcnJvdy5UYWJsZShjcmVhT3B0cyk7XG59O1xuXG5jb25zdCBkcm9wSWZUYWJsZUV4aXN0cyA9IGFzeW5jIChjOiBBc3luY0R1Y2tEQkNvbm5lY3Rpb24sIHRhYmxlTmFtZTogc3RyaW5nKSA9PiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgYy5xdWVyeShgRFJPUCBUQUJMRSBJRiBFWElTVFMgXCIke3RhYmxlTmFtZX1cIjtgKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdEcm9wcGluZyB0YWJsZSBmYWlsZWQnLCB0YWJsZU5hbWUsIGVycm9yKTtcbiAgfVxufTtcblxuZXhwb3J0IGNsYXNzIEtlcGxlckdsRHVja0RiVGFibGUgZXh0ZW5kcyBLZXBsZXJUYWJsZSB7XG4gIGRlY2xhcmUgcmVhZG9ubHkgaWQ6IHN0cmluZztcbiAgZGVjbGFyZSBsYWJlbDogc3RyaW5nO1xuICBkZWNsYXJlIHR5cGU6IHN0cmluZztcbiAgZGVjbGFyZSBtZXRhZGF0YTogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydFJvd0RhdGEoe2RhdGEsIGRiLCBjfTogSW1wb3J0RGF0YVRvRHVja1Byb3BzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtmaWVsZHMsIHJvd3N9ID0gZGF0YTtcblxuICAgICAgLy8gREFUQVNFVF9GT1JNQVRTLmtlcGxlcmdsIGxvYWRzIGRhdGEgYXMgYW55W11bXSBpbnN0ZWFkIG9mIFt7fV1cbiAgICAgIC8vIFRPRE8gcG90ZW50aWFsIG1lbW9yeSB1c2FnZSBleHBsb3Npb246IG9yaWdpbmFsIGRhdGEsIG5ldyBvYmplY3QgYW5kIHRoZW4gRHVja0RiIHRhYmxlXG4gICAgICBjb25zdCByb3dzRm9yRGIgPSBBcnJheS5pc0FycmF5KHJvd3NbMF0pXG4gICAgICAgID8gcm93cy5tYXAocm93ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1JvdyA9IHt9O1xuICAgICAgICAgICAgcm93LmZvckVhY2goKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBuZXdSb3dbZmllbGRzW2luZGV4XS5uYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3Um93O1xuICAgICAgICAgIH0pXG4gICAgICAgIDogcm93cztcblxuICAgICAgYXdhaXQgZGIucmVnaXN0ZXJGaWxlVGV4dCh0aGlzLmlkLCBKU09OLnN0cmluZ2lmeShyb3dzRm9yRGIpKTtcblxuICAgICAgY29uc3QgY29sdW1ucyA9IGZpZWxkcy5yZWR1Y2UoKGFjYywgZmllbGQsIGluZGV4KSA9PiB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgVE9ETyBleHRlbmQgZmllbGRzIHRvIGNvbnRhaW4gZHVja0RCQ29sdW1uVHlwZVxuICAgICAgICByZXR1cm4gYCR7YWNjfSR7aW5kZXggPiAwID8gJywnIDogJyd9ICcke2ZpZWxkLm5hbWV9JzogJyR7ZmllbGQuZHVja0RCQ29sdW1uVHlwZX0nYDtcbiAgICAgIH0sICcnKTtcblxuICAgICAgY29uc3QgY3JlYXRlVGFibGVTcWwgPSBgXG4gICAgICAgIENSRUFURSBUQUJMRSAnJHt0aGlzLmxhYmVsfScgQVNcbiAgICAgICAgU0VMRUNUICpcbiAgICAgICAgRlJPTSByZWFkX2pzb24oJyR7dGhpcy5pZH0nLFxuICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5zID0geyR7Y29sdW1uc319KTtcbiAgICAgIGA7XG4gICAgICBhd2FpdCBjLnF1ZXJ5KGNyZWF0ZVRhYmxlU3FsKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5sb2coJ2ltcG9ydFJvd0RhdGEnLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW1wb3J0R2VvSnNvbkRhdGEoe2RhdGEsIGRiLCBjfTogSW1wb3J0RGF0YVRvRHVja1Byb3BzKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtyb3dzfSA9IGRhdGE7XG4gICAgICBhd2FpdCBkYi5yZWdpc3RlckZpbGVUZXh0KHRoaXMuaWQsIEpTT04uc3RyaW5naWZ5KHJvd3MpKTtcblxuICAgICAgY29uc3QgY3JlYXRlVGFibGVTcWwgPSBgXG4gICAgICAgIGluc3RhbGwgc3BhdGlhbDtcbiAgICAgICAgbG9hZCBzcGF0aWFsO1xuICAgICAgICBDUkVBVEUgVEFCTEUgJyR7dGhpcy5sYWJlbH0nIEFTIFxuICAgICAgICBTRUxFQ1QgKlxuICAgICAgICBGUk9NIFNUX1JFQUQoJyR7dGhpcy5pZH0nKTtcbiAgICAgIGA7XG4gICAgICBhd2FpdCBjLnF1ZXJ5KGNyZWF0ZVRhYmxlU3FsKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignaW1wb3J0R2VvSnNvbkRhdGEnLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgaW1wb3J0QXJyb3dEYXRhKHtkYXRhLCBkYiwgY306IEltcG9ydERhdGFUb0R1Y2tQcm9wcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICAvLyAxKSBkYXRhLnJvd3MgY29udGFpbnMgYW4gYXJyb3cgdGFibGUgY3JlYXRlZCBieSBBZGQgdG8gTWFwIGRhdGEgZnJvbSBEdWNrRGIgcXVlcnkuXG4gICAgICAvLyAyKSBhcnJvdyB0YWJsZSBpcyBpbiBjb2xzICYgZmllbGRzIHdoZW4gYSBmaWxlIGlzIGRyYWdnZWQgJiBkcm9wcGVkIGludG8gQWRkIERhdGEgVG8gTWFwIGRpYWxvZy5cbiAgICAgIGNvbnN0IGFycm93VGFibGUgPVxuICAgICAgICBkYXRhLnJvd3MgaW5zdGFuY2VvZiBhcnJvdy5UYWJsZVxuICAgICAgICAgID8gZGF0YS5yb3dzXG4gICAgICAgICAgOiByZXN0b3JlQXJyb3dUYWJsZShkYXRhLmNvbHMgfHwgW10sIGRhdGEuZmllbGRzKTtcblxuICAgICAgY29uc3Qgc2V0dXBTcWwgPSBgXG4gICAgICAgIGluc3RhbGwgc3BhdGlhbDtcbiAgICAgICAgbG9hZCBzcGF0aWFsO1xuICAgICAgYDtcbiAgICAgIGF3YWl0IGMucXVlcnkoc2V0dXBTcWwpO1xuICAgICAgYXdhaXQgYy5pbnNlcnRBcnJvd1RhYmxlKGFycm93VGFibGUsIHtuYW1lOiB0aGlzLmxhYmVsfSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEtub3duIGlzc3VlczpcbiAgICAgIC8vIDEpIEFycm93IFR5cGUgd2l0aCBleHRlbnNpb24gbmFtZTogZ2VvYXJyb3cucG9pbnQgYW5kIGZvcm1hdDogK3c6MiBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBpbiBEdWNrREIuXG4gICAgICBjb25zb2xlLmVycm9yKCdpbXBvcnRBcnJvd0RhdGEnLCBlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0YWJsZSBmcm9tIGRhdGEsIHJldHVybnMgYW4gYXJyb3cgdGFibGUgd2l0aCB0aGUgZGF0YVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7ZmllbGRzOiBGaWVsZFtdLCBjb2xzOiBhbnlbXX0+fVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVRhYmxlQW5kR2V0QXJyb3coZGF0YSk6IFByb21pc2U8e2ZpZWxkczogYW55W107IGNvbHM6IGFycm93LlZlY3RvcltdfT4ge1xuICAgIGNvbnN0IGRiID0gYXdhaXQgZ2V0RHVja0RCKCk7XG4gICAgY29uc3QgYyA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcblxuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRoaXMubGFiZWw7XG4gICAgYXdhaXQgZHJvcElmVGFibGVFeGlzdHMoYywgdGFibGVOYW1lKTtcblxuICAgIGxldCBmb3JtYXQgPSB0aGlzLm1ldGFkYXRhLmZvcm1hdDtcbiAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgLy8gZm9ybWF0IGlzIG1pc3Npbmcgd2hlbiB3ZSBsb2FkIEtlcGxlci5nbCBleGFtcGxlc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5yb3dzPy5bMF0pIHx8IHR5cGVvZiBkYXRhLnJvd3M/LlswXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLnJvdztcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5yb3dzPy50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5nZW9qc29uO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmNvbHM/LlswXSBpbnN0YW5jZW9mIGFycm93LlZlY3Rvcikge1xuICAgICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMuYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLnJvdykge1xuICAgICAgYXdhaXQgdGhpcy5pbXBvcnRSb3dEYXRhKHtkYXRhLCBkYiwgY30pO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbikge1xuICAgICAgYXdhaXQgdGhpcy5pbXBvcnRHZW9Kc29uRGF0YSh7ZGF0YSwgZGIsIGN9KTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmFycm93KSB7XG4gICAgICBhd2FpdCB0aGlzLmltcG9ydEFycm93RGF0YSh7ZGF0YSwgZGIsIGN9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignVW5yZWNvZ25pemVkIGZvcm1hdCcsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgbGV0IGZpZWxkczogRmllbGRbXSA9IFtdO1xuICAgIGxldCBjb2xzOiBhcnJvdy5WZWN0b3JbXSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFdlIG5lZWQgdG8gdHJhbnNmb3JtIHRoZSBiaW5hcnkgZ2VvbWV0cnkgY29sdW1uIHRvIHByb3BlciB3a2IuXG4gICAgICAvLyBGaXJzdCBjaGVjayB3aGV0aGVyIHN1Y2ggYSBjb2x1bW4gZXhpc3RzLCB0aGVuIHF1ZXJ5IHdpdGggU1RfQXNXS0IuXG4gICAgICBjb25zdCBkdW1teVJlc3VsdCA9IGF3YWl0IGMucXVlcnkoYFxuICAgICAgICBTRUxFQ1QgKiBGUk9NICcke3RhYmxlTmFtZX0nIExJTUlUIDA7XG4gICAgICBgKTtcbiAgICAgIGNvbnN0IGhhc0JpbmFyeUdlb0ZpZWxkID0gQm9vbGVhbihcbiAgICAgICAgZHVtbXlSZXN1bHQuc2NoZW1hLmZpZWxkcy5maW5kKFxuICAgICAgICAgIGYgPT4gZi5uYW1lID09PSBHRU9NRVRSWV9DT0xVTU4gJiYgYXJyb3cuRGF0YVR5cGUuaXNCaW5hcnkoZi50eXBlKVxuICAgICAgICApXG4gICAgICApO1xuXG4gICAgICAvLyBUT0RPIGRvbid0IGRvIHRoaXMgZm9yIGFsbCBjb2x1bW5zIG5hbWVkICdnZW9tJywgY2hlY2sgd2hldGhlciBpdCdzIGEgd2tiIGFuZCBub3Qgc29tZXRoaW5nIGVsc2UhXG4gICAgICAvLyBxdWVyeSBhbmQgdHJhbnNmb3JtIGdlb21ldHJ5IGNvbHVtbiB0byB3a2JcbiAgICAgIGNvbnN0IGFycm93UmVzdWx0ID0gYXdhaXQgYy5xdWVyeShcbiAgICAgICAgYFNFTEVDVCAqICR7XG4gICAgICAgICAgaGFzQmluYXJ5R2VvRmllbGRcbiAgICAgICAgICAgID8gYEVYQ0xVREUgJHtHRU9NRVRSWV9DT0xVTU59LCBTVF9Bc1dLQigke0dFT01FVFJZX0NPTFVNTn0pIGFzICR7R0VPTUVUUllfQ09MVU1OfWBcbiAgICAgICAgICAgIDogJydcbiAgICAgICAgfSBGUk9NICcke3RhYmxlTmFtZX0nO2BcbiAgICAgICk7XG4gICAgICBjb25zdCBnZW9GaWVsZCA9IGFycm93UmVzdWx0LnNjaGVtYS5maWVsZHMuZmluZChcbiAgICAgICAgZiA9PiBmLm5hbWUgPT09IEdFT01FVFJZX0NPTFVNTiAmJiBhcnJvdy5EYXRhVHlwZS5pc0JpbmFyeShmLnR5cGUpXG4gICAgICApO1xuICAgICAgZ2VvRmllbGQ/Lm1ldGFkYXRhLnNldCgnQVJST1c6ZXh0ZW5zaW9uOm5hbWUnLCAnZ2VvYXJyb3cud2tiJyk7XG5cbiAgICAgIGZpZWxkcyA9IGRhdGEuZmllbGRzID8/IGFycm93U2NoZW1hVG9GaWVsZHMoYXJyb3dSZXN1bHQuc2NoZW1hKTtcbiAgICAgIGNvbHMgPSBbLi4uQXJyYXkoYXJyb3dSZXN1bHQubnVtQ29scykua2V5cygpXVxuICAgICAgICAubWFwKGkgPT4gYXJyb3dSZXN1bHQuZ2V0Q2hpbGRBdChpKSlcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sKSBhcyBhcnJvdy5WZWN0b3JbXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gS25vd24gaXNzdWVzOlxuICAgICAgLy8gMSkgU1RfQXNXS0IgYmluZGVyIGVycm9yLCBubyB0eXBlIG1hdGNoXG4gICAgICBjb25zb2xlLmVycm9yKCdEdWNrRGIgdGFibGU6IGJpbmFyeSBnZW9tZXRyeSBjb2x1bW4gdG8gd2tiJywgZXJyb3IpO1xuICAgIH1cblxuICAgIGF3YWl0IGMuY2xvc2UoKTtcblxuICAgIHJldHVybiB7ZmllbGRzLCBjb2xzfTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydERhdGEoe2RhdGF9OiB7ZGF0YTogUHJvY2Vzc29yUmVzdWx0fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFZlY3RvclRpbGUgaXMgYSBzcGVjaWFsIGNhc2UsIGlnbm9yZSBmb3Igbm93XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gRGF0YXNldFR5cGUuVkVDVE9SX1RJTEUpIHtcbiAgICAgIHN1cGVyLmltcG9ydERhdGEoe2RhdGE6IHsuLi5kYXRhLCByb3dzOiBbXX19KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7ZmllbGRzLCBjb2xzfSA9IGF3YWl0IHRoaXMuY3JlYXRlVGFibGVBbmRHZXRBcnJvdyhkYXRhKTtcblxuICAgIHN1cGVyLmltcG9ydERhdGEoe2RhdGE6IHtmaWVsZHMsIGNvbHMsIHJvd3M6IFtdfX0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKGRhdGEpIHtcbiAgICAvLyBWZWN0b3JUaWxlIGlzIGEgc3BlY2lhbCBjYXNlLCBpZ25vcmUgZm9yIG5vd1xuICAgIGlmICh0aGlzLnR5cGUgPT09IERhdGFzZXRUeXBlLlZFQ1RPUl9USUxFKSB7XG4gICAgICBzdXBlci5pbXBvcnREYXRhKHtkYXRhfSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCB7Y29sc30gPSBhd2FpdCB0aGlzLmNyZWF0ZVRhYmxlQW5kR2V0QXJyb3coZGF0YSk7XG5cbiAgICByZXR1cm4gc3VwZXIudXBkYXRlKHtjb2xzLCByb3dzOiBbXSwgZmllbGRzOiBbXX0pO1xuICB9XG5cbiAgc3RhdGljIGdldEZpbGVQcm9jZXNzb3IgPSBmdW5jdGlvbiAoZGF0YTogYW55LCBpbnB1dEZvcm1hdD86IHN0cmluZykge1xuICAgIGxldCBwcm9jZXNzb3I7XG4gICAgbGV0IGZvcm1hdDtcbiAgICBpZiAoaW5wdXRGb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5hcnJvdyB8fCBpc0Fycm93RGF0YShkYXRhKSkge1xuICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLmFycm93O1xuICAgICAgLy8gVE9ETyBpbmplc3QgYXJyb3cgZmlsZXMgZnJvbSBkaXNrIHdpdGhvdXQgbG9hZGVyc1xuICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc0Fycm93QmF0Y2hlcztcbiAgICB9IGVsc2UgaWYgKGlucHV0Rm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMua2VwbGVyZ2wgfHwgaXNLZXBsZXJHbE1hcChkYXRhKSkge1xuICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLmtlcGxlcmdsO1xuICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYjtcbiAgICB9IGVsc2UgaWYgKGlucHV0Rm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMucm93IHx8IGlzUm93T2JqZWN0KGRhdGEpKSB7XG4gICAgICAvLyBjc3YgZmlsZSBnb2VzIGhlcmVcbiAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5yb3c7XG4gICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzQ3N2Um93T2JqZWN0OyAvLyBkaXJlY3RseSBpbXBvcnQganNvbiBvYmplY3QgaW50byBkdWNrZGItd2FzbVxuICAgIH0gZWxzZSBpZiAoaW5wdXRGb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5nZW9qc29uIHx8IGlzR2VvSnNvbihkYXRhKSkge1xuICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLmdlb2pzb247XG4gICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzR2VvanNvbjtcbiAgICB9XG4gICAgcmV0dXJuIHtwcm9jZXNzb3IsIGZvcm1hdH07XG4gIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxNQUFBLEdBQUFGLE9BQUE7QUFFQSxJQUFB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
|
|
482
|
+
(0, _defineProperty2["default"])(KeplerGlDuckDbTable, "getInputDataValidator", function () {
|
|
483
|
+
return function (d) {
|
|
484
|
+
return d;
|
|
485
|
+
};
|
|
486
|
+
});
|
|
487
|
+
var restoreGeoarrowMetadata = /*#__PURE__*/function () {
|
|
488
|
+
var _ref7 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee8(arrowTable, canCastST_asWKB, addWKBMetadata) {
|
|
489
|
+
return _regenerator["default"].wrap(function _callee8$(_context8) {
|
|
490
|
+
while (1) switch (_context8.prev = _context8.next) {
|
|
491
|
+
case 0:
|
|
492
|
+
arrowTable.schema.fields.forEach(function (f) {
|
|
493
|
+
if (arrow.DataType.isBinary(f.type) && (addWKBMetadata[f.name] || canCastST_asWKB[f.name])) {
|
|
494
|
+
f.metadata.set('ARROW:extension:name', 'geoarrow.wkb');
|
|
495
|
+
} else if ((0, _duckdbTableUtils.isGeoArrowPoint)(f.type)) {
|
|
496
|
+
f.metadata.set('ARROW:extension:name', 'geoarrow.point');
|
|
497
|
+
} else if ((0, _duckdbTableUtils.isGeoArrowLineString)(f.type)) {
|
|
498
|
+
f.metadata.set('ARROW:extension:name', 'geoarrow.linestring');
|
|
499
|
+
} else if ((0, _duckdbTableUtils.isGeoArrowPolygon)(f.type)) {
|
|
500
|
+
f.metadata.set('ARROW:extension:name', 'geoarrow.polygon');
|
|
501
|
+
} else if ((0, _duckdbTableUtils.isGeoArrowMultiPoint)(f.type)) {
|
|
502
|
+
f.metadata.set('ARROW:extension:name', 'geoarrow.multipoint');
|
|
503
|
+
} else if ((0, _duckdbTableUtils.isGeoArrowMultiLineString)(f.type)) {
|
|
504
|
+
f.metadata.set('ARROW:extension:name', 'geoarrow.multilinestring');
|
|
505
|
+
} else if ((0, _duckdbTableUtils.isGeoArrowMultiPolygon)(f.type)) {
|
|
506
|
+
f.metadata.set('ARROW:extension:name', 'geoarrow.multipolygon');
|
|
507
|
+
}
|
|
508
|
+
});
|
|
509
|
+
case 1:
|
|
510
|
+
case "end":
|
|
511
|
+
return _context8.stop();
|
|
512
|
+
}
|
|
513
|
+
}, _callee8);
|
|
514
|
+
}));
|
|
515
|
+
return function restoreGeoarrowMetadata(_x9, _x10, _x11) {
|
|
516
|
+
return _ref7.apply(this, arguments);
|
|
517
|
+
};
|
|
518
|
+
}();
|
|
519
|
+
|
|
520
|
+
/**
|
|
521
|
+
* For all binary columns tries to transform geometry from DuckDB's internal format into proper WKB.
|
|
522
|
+
* @param props
|
|
523
|
+
* @returns A map of fields that should be transformed to valid WKB.
|
|
524
|
+
*/
|
|
525
|
+
var tryST_AsWKB = /*#__PURE__*/function () {
|
|
526
|
+
var _ref8 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee9(props) {
|
|
527
|
+
var c, tableName, resultWithSchema, binaryColumns, canCastST_asWKB, _iterator, _step, column, columnName, query;
|
|
528
|
+
return _regenerator["default"].wrap(function _callee9$(_context9) {
|
|
529
|
+
while (1) switch (_context9.prev = _context9.next) {
|
|
530
|
+
case 0:
|
|
531
|
+
c = props.c, tableName = props.tableName;
|
|
532
|
+
_context9.next = 3;
|
|
533
|
+
return c.query("\n SELECT * FROM '".concat(tableName, "' LIMIT 0;\n "));
|
|
534
|
+
case 3:
|
|
535
|
+
resultWithSchema = _context9.sent;
|
|
536
|
+
binaryColumns = resultWithSchema.schema.fields.filter(function (f) {
|
|
537
|
+
return arrow.DataType.isBinary(f.type);
|
|
538
|
+
});
|
|
539
|
+
canCastST_asWKB = {};
|
|
540
|
+
_iterator = _createForOfIteratorHelper(binaryColumns);
|
|
541
|
+
_context9.prev = 7;
|
|
542
|
+
_iterator.s();
|
|
543
|
+
case 9:
|
|
544
|
+
if ((_step = _iterator.n()).done) {
|
|
545
|
+
_context9.next = 24;
|
|
546
|
+
break;
|
|
547
|
+
}
|
|
548
|
+
column = _step.value;
|
|
549
|
+
_context9.prev = 11;
|
|
550
|
+
columnName = column.name;
|
|
551
|
+
query = "SELECT * EXCLUDE ".concat(columnName, ", ST_AsWKB(").concat(columnName, ") as ").concat(columnName, " FROM '").concat(tableName, "' LIMIT 1;");
|
|
552
|
+
_context9.next = 16;
|
|
553
|
+
return c.query(query);
|
|
554
|
+
case 16:
|
|
555
|
+
canCastST_asWKB[column.name] = true;
|
|
556
|
+
_context9.next = 22;
|
|
557
|
+
break;
|
|
558
|
+
case 19:
|
|
559
|
+
_context9.prev = 19;
|
|
560
|
+
_context9.t0 = _context9["catch"](11);
|
|
561
|
+
canCastST_asWKB[column.name] = false;
|
|
562
|
+
case 22:
|
|
563
|
+
_context9.next = 9;
|
|
564
|
+
break;
|
|
565
|
+
case 24:
|
|
566
|
+
_context9.next = 29;
|
|
567
|
+
break;
|
|
568
|
+
case 26:
|
|
569
|
+
_context9.prev = 26;
|
|
570
|
+
_context9.t1 = _context9["catch"](7);
|
|
571
|
+
_iterator.e(_context9.t1);
|
|
572
|
+
case 29:
|
|
573
|
+
_context9.prev = 29;
|
|
574
|
+
_iterator.f();
|
|
575
|
+
return _context9.finish(29);
|
|
576
|
+
case 32:
|
|
577
|
+
return _context9.abrupt("return", canCastST_asWKB);
|
|
578
|
+
case 33:
|
|
579
|
+
case "end":
|
|
580
|
+
return _context9.stop();
|
|
581
|
+
}
|
|
582
|
+
}, _callee9, null, [[7, 26, 29, 32], [11, 19]]);
|
|
583
|
+
}));
|
|
584
|
+
return function tryST_AsWKB(_x12) {
|
|
585
|
+
return _ref8.apply(this, arguments);
|
|
586
|
+
};
|
|
587
|
+
}();
|
|
588
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfdGFibGUiLCJfcHJvY2Vzc29ycyIsIl9pbml0IiwiX2RhdGFQcm9jZXNzb3IiLCJfZHVja2RiVGFibGVVdGlscyIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiQXJyYXkiLCJpc0FycmF5IiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwibGVuZ3RoIiwiX24iLCJGIiwicyIsImRvbmUiLCJ2YWx1ZSIsImYiLCJUeXBlRXJyb3IiLCJvIiwibmV4dCIsIl9hcnJheUxpa2VUb0FycmF5IiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwiRFVDS0RCX0dFT01fQ09MVU1OIiwiRFVDS0RCX1dLQl9DT0xVTU4iLCJLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OIiwiU1VHR0VTVEVEX0dFT01fQ09MVU1OUyIsInJlc3RvcmVBcnJvd1RhYmxlIiwiY29sdW1ucyIsImZpZWxkcyIsImNyZWFPcHRzIiwibWFwIiwiZmllbGQiLCJpbmRleCIsIlRhYmxlIiwiZHJvcElmVGFibGVFeGlzdHMiLCJfcmVmIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJjIiwidGFibGVOYW1lIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwicXVlcnkiLCJjb25jYXQiLCJ0MCIsImNvbnNvbGUiLCJlcnJvciIsInN0b3AiLCJfeCIsIl94MiIsIktlcGxlckdsRHVja0RiVGFibGUiLCJleHBvcnRzIiwiX0tlcGxlclRhYmxlIiwicHJvcHMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJfaW1wb3J0Um93RGF0YSIsIl9jYWxsZWUyIiwiX3JlZjIiLCJkYXRhIiwiZGIiLCJyb3dzIiwicm93c0ZvckRiIiwiY3JlYXRlVGFibGVTcWwiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJyb3ciLCJuZXdSb3ciLCJyZWdpc3RlckZpbGVUZXh0IiwiaWQiLCJKU09OIiwic3RyaW5naWZ5IiwicmVkdWNlIiwiYWNjIiwiZHVja0RCQ29sdW1uVHlwZSIsImxhYmVsIiwibG9nIiwiaW1wb3J0Um93RGF0YSIsIl94MyIsIl9pbXBvcnRHZW9Kc29uRGF0YSIsIl9jYWxsZWUzIiwiX3JlZjMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJhYnJ1cHQiLCJhZGRXS0JNZXRhZGF0YSIsImltcG9ydEdlb0pzb25EYXRhIiwiX3g0IiwiX2ltcG9ydEFycm93RGF0YSIsIl9jYWxsZWU0IiwiX3JlZjQiLCJhcnJvd1RhYmxlIiwic2V0dXBTcWwiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJjb2xzIiwiaW5zZXJ0QXJyb3dUYWJsZSIsInVzZU5ld0ZpZWxkcyIsImltcG9ydEFycm93RGF0YSIsIl94NSIsIl9jcmVhdGVUYWJsZUFuZEdldEFycm93IiwiX2NhbGxlZTUiLCJmb3JtYXQiLCJfZGF0YSRyb3dzIiwiX2RhdGEkcm93czIiLCJfZGF0YSRyb3dzMyIsIl9kYXRhJGNvbHMiLCJpbXBvcnREZXRhaWxzIiwiX2RhdGEkZmllbGRzIiwiX3JlZjUiLCJfcmVmNSRhZGRXS0JNZXRhZGF0YSIsIl9yZWY1JHVzZU5ld0ZpZWxkcyIsImNhbkNhc3RTVF9hc1dLQiIsImdldEFycm93UXVlcnkiLCJhcnJvd1Jlc3VsdCIsIl9jYWxsZWU1JCIsIl9jb250ZXh0NSIsImdldER1Y2tEQiIsInNlbnQiLCJjb25uZWN0IiwibWV0YWRhdGEiLCJfdHlwZW9mMiIsIkRBVEFTRVRfRk9STUFUUyIsInR5cGUiLCJnZW9qc29uIiwiVmVjdG9yIiwidHJ5U1RfQXNXS0IiLCJyZXN0b3JlR2VvYXJyb3dNZXRhZGF0YSIsImFycm93U2NoZW1hVG9GaWVsZHMiLCJzY2hlbWEiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwibnVtQ29scyIsImdldENoaWxkQXQiLCJjb2wiLCJjbG9zZSIsImNyZWF0ZVRhYmxlQW5kR2V0QXJyb3ciLCJfeDYiLCJfaW1wb3J0RGF0YSIsIl9jYWxsZWU2IiwiX3JlZjYiLCJfeWllbGQkdGhpcyRjcmVhdGVUYWIiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJEYXRhc2V0VHlwZSIsIlZFQ1RPUl9USUxFIiwiaW1wb3J0RGF0YSIsIl94NyIsIl91cGRhdGUiLCJfY2FsbGVlNyIsIl95aWVsZCR0aGlzJGNyZWF0ZVRhYjIiLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJ1cGRhdGUiLCJfeDgiLCJLZXBsZXJUYWJsZSIsImlucHV0Rm9ybWF0IiwicHJvY2Vzc29yIiwiaXNBcnJvd0RhdGEiLCJwcm9jZXNzQXJyb3dCYXRjaGVzIiwia2VwbGVyZ2wiLCJpc0tlcGxlckdsTWFwIiwicHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYiIsImlzUm93T2JqZWN0IiwicHJvY2Vzc0NzdlJvd09iamVjdCIsImlzR2VvSnNvbiIsInByb2Nlc3NHZW9qc29uIiwiZCIsIl9yZWY3IiwiX2NhbGxlZTgiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJEYXRhVHlwZSIsImlzQmluYXJ5IiwiaXNHZW9BcnJvd1BvaW50IiwiaXNHZW9BcnJvd0xpbmVTdHJpbmciLCJpc0dlb0Fycm93UG9seWdvbiIsImlzR2VvQXJyb3dNdWx0aVBvaW50IiwiaXNHZW9BcnJvd011bHRpTGluZVN0cmluZyIsImlzR2VvQXJyb3dNdWx0aVBvbHlnb24iLCJfeDkiLCJfeDEwIiwiX3gxMSIsIl9yZWY4IiwiX2NhbGxlZTkiLCJyZXN1bHRXaXRoU2NoZW1hIiwiYmluYXJ5Q29sdW1ucyIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY29sdW1uIiwiY29sdW1uTmFtZSIsIl9jYWxsZWU5JCIsIl9jb250ZXh0OSIsInQxIiwiZmluaXNoIiwiX3gxMiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YWJsZS9kdWNrZGItdGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcbmltcG9ydCB7QXN5bmNEdWNrREIsIEFzeW5jRHVja0RCQ29ubmVjdGlvbn0gZnJvbSAnQGR1Y2tkYi9kdWNrZGItd2FzbSc7XG5cbmltcG9ydCB7RGF0YXNldFR5cGUsIERBVEFTRVRfRk9STUFUU30gZnJvbSAnQGtlcGxlci5nbC9jb25zdGFudHMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge0ZpZWxkLCBQcm90b0RhdGFzZXRGaWVsZH0gZnJvbSAnQGtlcGxlci5nbC90eXBlcyc7XG5pbXBvcnQge1xuICBhcnJvd1NjaGVtYVRvRmllbGRzLFxuICBpc0Fycm93RGF0YSxcbiAgaXNHZW9Kc29uLFxuICBpc0tlcGxlckdsTWFwLFxuICBpc1Jvd09iamVjdCxcbiAgcHJvY2Vzc0Fycm93QmF0Y2hlc1xufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuXG5pbXBvcnQge2dldER1Y2tEQn0gZnJvbSAnLi4vaW5pdCc7XG5pbXBvcnQge1xuICBwcm9jZXNzQ3N2Um93T2JqZWN0LFxuICBwcm9jZXNzR2VvanNvbixcbiAgcHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYixcbiAgUHJvY2Vzc29yUmVzdWx0XG59IGZyb20gJy4uL3Byb2Nlc3NvcnMvZGF0YS1wcm9jZXNzb3InO1xuXG5pbXBvcnQge1xuICBpc0dlb0Fycm93UG9pbnQsXG4gIGlzR2VvQXJyb3dMaW5lU3RyaW5nLFxuICBpc0dlb0Fycm93UG9seWdvbixcbiAgaXNHZW9BcnJvd011bHRpUG9pbnQsXG4gIGlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmcsXG4gIGlzR2VvQXJyb3dNdWx0aVBvbHlnb25cbn0gZnJvbSAnLi9kdWNrZGItdGFibGUtdXRpbHMnO1xuXG4vLyBUT0RPIHVzZSBmaWxlcyBmcm9tIGRpc2sgb3IgdXJsIGRpcmVjdGx5LCB3aXRob3V0IHBhcnNpbmcgYnkgbG9hZGVycyBhbmQgdGhlbiBpbmdlY3Rpb24gaW50byBEZWNrRGJcblxuLyoqXG4gKiBEZWZhdWx0IER1Y2tEYiBnZW9tZXRyeSBjb2x1bW5zIGNyZWF0ZWQgYnkgU1RfUkVBRFxuICovXG5jb25zdCBEVUNLREJfR0VPTV9DT0xVTU4gPSAnZ2VvbSc7XG5jb25zdCBEVUNLREJfV0tCX0NPTFVNTiA9ICd3a2JfZ2VvbWV0cnknO1xuXG4vKipcbiBEZWZhdWx0IGNvbHVtbiBuYW1lIGZvciBwcm9jZXNzZWQgZ2VvanNvbiBpbiBLZXBsZXIuXG4gVXNlIHRoaXMgbmFtZSB0byByZW5hbWUgZGVmYXVsdCAnZ2VvbScgY29sdW1uIGZyb20gRHVja0RiXG4gaW4gb3JkZXIgdG8gc3VwcG9ydCBLZXBsZXIgbWFwcyBzYXZlZCBiZWZvcmUgaW50cm9kdWN0aW9uIG9mIER1Y2tEYiBwbHVnaW4uXG4gKi9cbmNvbnN0IEtFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU4gPSAnX2dlb2pzb24nO1xuXG4vKipcbiAqIE5hbWVzIG9mIGNvbHVtbnMgdGhhdCBtb3N0IGxpa2VseSBjb250YWluIGJpbmFyeSB3a2IgZ2VvbWV0cnlcbiAqL1xuY29uc3QgU1VHR0VTVEVEX0dFT01fQ09MVU1OUyA9IHtcbiAgW0tFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU5dOiB0cnVlLFxuICBbRFVDS0RCX0dFT01fQ09MVU1OXTogdHJ1ZSxcbiAgZ2VvbWV0cnk6IHRydWVcbn07XG5cbnR5cGUgSW1wb3J0RGF0YVRvRHVja1Byb3BzID0ge1xuICBkYXRhOiBQcm9jZXNzb3JSZXN1bHQ7XG4gIGRiOiBBc3luY0R1Y2tEQjtcbiAgYzogQXN5bmNEdWNrREJDb25uZWN0aW9uO1xufTtcblxudHlwZSBJbXBvcnREYXRhVG9EdWNrUmVzdWx0ID0ge1xuICAvLyBEdWNrRGIgZHJvcHMgZ2VvYXJyb3cgbWV0YWRhdGEsIHNvIHRyeSB0byBwcmVzZXJ2ZSBzb21ldGluZ1xuICBhZGRXS0JNZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICAvLyBVc2UgZmllbGRzIGZyb20gYXJyb3cgdGFibGUgZXZlbiBpZiBmaWVsZHMgYXJlIHByb3ZpZGVkXG4gIHVzZU5ld0ZpZWxkcz86IGJvb2xlYW47XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgYW4gYXJyb3cgdGFibGUgZnJvbSBhcnJvdyB2ZWN0b3JzIGFuZCBmaWVsZHMuXG4gKiBAcGFyYW0gY29sdW1ucyBBbiBhcnJheSBvZiBhcnJvdyB2ZWN0b3JzLlxuICogQHBhcmFtIGZpZWxkcyBBbiBhcnJheSBvZiBmaWVsZHMgcGVyIGFycm93IHZlY3Rvci5cbiAqIEByZXR1cm5zIEFuIGFycm93IHRhYmxlLlxuICovXG4vLyBUT0RPOiBjb25zaWRlciB1c2luZyBvcmlnaW5hbCBkcmFnJmRyb3BwZWQgYXJyb3cgdGFibGUsIGFzIGl0IGNvdWxkIGNvbnRhaW4gZXh0cmEgbWV0YWRhdGEsIG5vdCBwYXNzZWQgdG8gdGhlIGZpZWxkcy5cbmNvbnN0IHJlc3RvcmVBcnJvd1RhYmxlID0gKGNvbHVtbnM6IGFycm93LlZlY3RvcltdLCBmaWVsZHM6IFByb3RvRGF0YXNldEZpZWxkW10pID0+IHtcbiAgY29uc3QgY3JlYU9wdHMgPSB7fTtcbiAgZmllbGRzLm1hcCgoZmllbGQsIGluZGV4KSA9PiB7XG4gICAgY3JlYU9wdHNbZmllbGQubmFtZV0gPSBjb2x1bW5zW2luZGV4XTtcbiAgfSk7XG4gIHJldHVybiBuZXcgYXJyb3cuVGFibGUoY3JlYU9wdHMpO1xufTtcblxuY29uc3QgZHJvcElmVGFibGVFeGlzdHMgPSBhc3luYyAoYzogQXN5bmNEdWNrREJDb25uZWN0aW9uLCB0YWJsZU5hbWU6IHN0cmluZykgPT4ge1xuICB0cnkge1xuICAgIGF3YWl0IGMucXVlcnkoYERST1AgVEFCTEUgSUYgRVhJU1RTIFwiJHt0YWJsZU5hbWV9XCI7YCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRHJvcHBpbmcgdGFibGUgZmFpbGVkJywgdGFibGVOYW1lLCBlcnJvcik7XG4gIH1cbn07XG5cbmV4cG9ydCBjbGFzcyBLZXBsZXJHbER1Y2tEYlRhYmxlIGV4dGVuZHMgS2VwbGVyVGFibGUge1xuICBkZWNsYXJlIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIGRlY2xhcmUgbGFiZWw6IHN0cmluZztcbiAgZGVjbGFyZSB0eXBlOiBzdHJpbmc7XG4gIGRlY2xhcmUgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBhc3luYyBpbXBvcnRSb3dEYXRhKHtkYXRhLCBkYiwgY306IEltcG9ydERhdGFUb0R1Y2tQcm9wcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7ZmllbGRzLCByb3dzfSA9IGRhdGE7XG5cbiAgICAgIC8vIERBVEFTRVRfRk9STUFUUy5rZXBsZXJnbCBsb2FkcyBkYXRhIGFzIGFueVtdW10gaW5zdGVhZCBvZiBbe31dXG4gICAgICAvLyBUT0RPIHBvdGVudGlhbCBtZW1vcnkgdXNhZ2UgZXhwbG9zaW9uOiBvcmlnaW5hbCBkYXRhLCBuZXcgb2JqZWN0IGFuZCB0aGVuIER1Y2tEYiB0YWJsZVxuICAgICAgY29uc3Qgcm93c0ZvckRiID0gQXJyYXkuaXNBcnJheShyb3dzWzBdKVxuICAgICAgICA/IHJvd3MubWFwKHJvdyA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSb3cgPSB7fTtcbiAgICAgICAgICAgIHJvdy5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkc1tpbmRleF0ubmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgICAgICB9KVxuICAgICAgICA6IHJvd3M7XG5cbiAgICAgIGF3YWl0IGRiLnJlZ2lzdGVyRmlsZVRleHQodGhpcy5pZCwgSlNPTi5zdHJpbmdpZnkocm93c0ZvckRiKSk7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnMgPSBmaWVsZHMucmVkdWNlKChhY2MsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE8gZXh0ZW5kIGZpZWxkcyB0byBjb250YWluIGR1Y2tEQkNvbHVtblR5cGVcbiAgICAgICAgcmV0dXJuIGAke2FjY30ke2luZGV4ID4gMCA/ICcsJyA6ICcnfSAnJHtmaWVsZC5uYW1lfSc6ICcke2ZpZWxkLmR1Y2tEQkNvbHVtblR5cGV9J2A7XG4gICAgICB9LCAnJyk7XG5cbiAgICAgIGNvbnN0IGNyZWF0ZVRhYmxlU3FsID0gYFxuICAgICAgICBDUkVBVEUgVEFCTEUgJyR7dGhpcy5sYWJlbH0nIEFTXG4gICAgICAgIFNFTEVDVCAqXG4gICAgICAgIEZST00gcmVhZF9qc29uKCcke3RoaXMuaWR9JyxcbiAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IHske2NvbHVtbnN9fSk7XG4gICAgICBgO1xuICAgICAgYXdhaXQgYy5xdWVyeShjcmVhdGVUYWJsZVNxbCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdpbXBvcnRSb3dEYXRhJywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGltcG9ydEdlb0pzb25EYXRhKHtkYXRhLCBkYiwgY306IEltcG9ydERhdGFUb0R1Y2tQcm9wcyk6IFByb21pc2U8SW1wb3J0RGF0YVRvRHVja1Jlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7cm93c30gPSBkYXRhO1xuICAgICAgYXdhaXQgZGIucmVnaXN0ZXJGaWxlVGV4dCh0aGlzLmlkLCBKU09OLnN0cmluZ2lmeShyb3dzKSk7XG5cbiAgICAgIGNvbnN0IGNyZWF0ZVRhYmxlU3FsID0gYFxuICAgICAgICBpbnN0YWxsIHNwYXRpYWw7XG4gICAgICAgIGxvYWQgc3BhdGlhbDtcbiAgICAgICAgQ1JFQVRFIFRBQkxFICcke3RoaXMubGFiZWx9JyBBUyBcbiAgICAgICAgU0VMRUNUICpcbiAgICAgICAgRlJPTSBTVF9SRUFEKCcke3RoaXMuaWR9Jywga2VlcF93a2IgPSBUUlVFKTtcbiAgICAgICAgQUxURVIgVEFCTEUgJyR7dGhpcy5sYWJlbH0nIFJFTkFNRSAnJHtEVUNLREJfV0tCX0NPTFVNTn0nIFRPICcke0tFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU59JztcbiAgICAgIGA7XG4gICAgICBhd2FpdCBjLnF1ZXJ5KGNyZWF0ZVRhYmxlU3FsKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignaW1wb3J0R2VvSnNvbkRhdGEnLCBlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGFkZFdLQk1ldGFkYXRhOiB7W0tFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU5dOiB0cnVlfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBpbXBvcnRBcnJvd0RhdGEoe2RhdGEsIGRiLCBjfTogSW1wb3J0RGF0YVRvRHVja1Byb3BzKTogUHJvbWlzZTxJbXBvcnREYXRhVG9EdWNrUmVzdWx0PiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIDEpIGRhdGEucm93cyBjb250YWlucyBhbiBhcnJvdyB0YWJsZSBjcmVhdGVkIGJ5IEFkZCB0byBNYXAgZGF0YSBmcm9tIER1Y2tEYiBxdWVyeS5cbiAgICAgIC8vIDIpIGFycm93IHRhYmxlIGlzIGluIGNvbHMgJiBmaWVsZHMgd2hlbiBhIGZpbGUgaXMgZHJhZ2dlZCAmIGRyb3BwZWQgaW50byBBZGQgRGF0YSBUbyBNYXAgZGlhbG9nLlxuICAgICAgY29uc3QgYXJyb3dUYWJsZSA9XG4gICAgICAgIGRhdGEucm93cyBpbnN0YW5jZW9mIGFycm93LlRhYmxlXG4gICAgICAgICAgPyBkYXRhLnJvd3NcbiAgICAgICAgICA6IHJlc3RvcmVBcnJvd1RhYmxlKGRhdGEuY29scyB8fCBbXSwgZGF0YS5maWVsZHMpO1xuXG4gICAgICBjb25zdCBzZXR1cFNxbCA9IGBcbiAgICAgICAgaW5zdGFsbCBzcGF0aWFsO1xuICAgICAgICBsb2FkIHNwYXRpYWw7XG4gICAgICBgO1xuICAgICAgYXdhaXQgYy5xdWVyeShzZXR1cFNxbCk7XG4gICAgICBhd2FpdCBjLmluc2VydEFycm93VGFibGUoYXJyb3dUYWJsZSwge25hbWU6IHRoaXMubGFiZWx9KTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gS25vd24gaXNzdWVzOlxuICAgICAgLy8gMSkgQXJyb3cgVHlwZSB3aXRoIGV4dGVuc2lvbiBuYW1lOiBnZW9hcnJvdy5wb2ludCBhbmQgZm9ybWF0OiArdzoyIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIER1Y2tEQi5cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ltcG9ydEFycm93RGF0YScsIGVycm9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgYWRkV0tCTWV0YWRhdGE6IHsuLi5TVUdHRVNURURfR0VPTV9DT0xVTU5TfSxcbiAgICAgIC8vIHVzZSBtZXRhZGF0YSBmcm9tIGFycm93IHRhYmxlXG4gICAgICB1c2VOZXdGaWVsZHM6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0YWJsZSBmcm9tIGRhdGEsIHJldHVybnMgYW4gYXJyb3cgdGFibGUgd2l0aCB0aGUgZGF0YVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7ZmllbGRzOiBGaWVsZFtdLCBjb2xzOiBhbnlbXX0+fVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVRhYmxlQW5kR2V0QXJyb3coZGF0YSk6IFByb21pc2U8e2ZpZWxkczogYW55W107IGNvbHM6IGFycm93LlZlY3RvcltdfT4ge1xuICAgIGNvbnN0IGRiID0gYXdhaXQgZ2V0RHVja0RCKCk7XG4gICAgY29uc3QgYyA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcblxuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRoaXMubGFiZWw7XG4gICAgYXdhaXQgZHJvcElmVGFibGVFeGlzdHMoYywgdGFibGVOYW1lKTtcblxuICAgIGxldCBmb3JtYXQgPSB0aGlzLm1ldGFkYXRhLmZvcm1hdDtcbiAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgLy8gZm9ybWF0IGlzIG1pc3Npbmcgd2hlbiB3ZSBsb2FkIEtlcGxlci5nbCBleGFtcGxlc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5yb3dzPy5bMF0pIHx8IHR5cGVvZiBkYXRhLnJvd3M/LlswXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLnJvdztcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5yb3dzPy50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5nZW9qc29uO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmNvbHM/LlswXSBpbnN0YW5jZW9mIGFycm93LlZlY3Rvcikge1xuICAgICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMuYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGltcG9ydERldGFpbHM6IEltcG9ydERhdGFUb0R1Y2tSZXN1bHQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLnJvdykge1xuICAgICAgYXdhaXQgdGhpcy5pbXBvcnRSb3dEYXRhKHtkYXRhLCBkYiwgY30pO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbikge1xuICAgICAgaW1wb3J0RGV0YWlscyA9IGF3YWl0IHRoaXMuaW1wb3J0R2VvSnNvbkRhdGEoe2RhdGEsIGRiLCBjfSk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5hcnJvdykge1xuICAgICAgaW1wb3J0RGV0YWlscyA9IGF3YWl0IHRoaXMuaW1wb3J0QXJyb3dEYXRhKHtkYXRhLCBkYiwgY30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVbnJlY29nbml6ZWQgZm9ybWF0JywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBsZXQgZmllbGRzOiBGaWVsZFtdID0gW107XG4gICAgbGV0IGNvbHM6IGFycm93LlZlY3RvcltdID0gW107XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge2FkZFdLQk1ldGFkYXRhID0ge30sIHVzZU5ld0ZpZWxkcyA9IGZhbHNlfSA9IGltcG9ydERldGFpbHMgfHwge307XG5cbiAgICAgIC8vIFRyeSB0byBmaWd1cmUgb3V0IHdoZXRoZXIgZ2VvbWV0cnkgc2hvdWxkIGJlIHRyYW5zZm9ybWVkIGJ5IFNUX0FzV0tCXG4gICAgICAvLyBUT0RPIGlmIGNhbkNhc3RTVF9hc1dLQiBjb250YWlucyBhbnkga2V5cyB0aGVuIGFkZCBTVF9Bc1dLQiB0byB0aGUgZm9sbG93aW5nIHF1ZXJ5XG4gICAgICBjb25zdCBjYW5DYXN0U1RfYXNXS0IgPSBhd2FpdCB0cnlTVF9Bc1dLQih7dGFibGVOYW1lLCBjfSk7XG5cbiAgICAgIGNvbnN0IGdldEFycm93UXVlcnkgPSBgU0VMRUNUICogRlJPTSAnJHt0YWJsZU5hbWV9JztgO1xuICAgICAgY29uc3QgYXJyb3dSZXN1bHQgPSBhd2FpdCBjLnF1ZXJ5KGdldEFycm93UXVlcnkpO1xuXG4gICAgICByZXN0b3JlR2VvYXJyb3dNZXRhZGF0YShhcnJvd1Jlc3VsdCwgY2FuQ2FzdFNUX2FzV0tCLCBhZGRXS0JNZXRhZGF0YSk7XG5cbiAgICAgIGZpZWxkcyA9IHVzZU5ld0ZpZWxkc1xuICAgICAgICA/IGFycm93U2NoZW1hVG9GaWVsZHMoYXJyb3dSZXN1bHQuc2NoZW1hKVxuICAgICAgICA6IGRhdGEuZmllbGRzID8/IGFycm93U2NoZW1hVG9GaWVsZHMoYXJyb3dSZXN1bHQuc2NoZW1hKTtcbiAgICAgIGNvbHMgPSBbLi4uQXJyYXkoYXJyb3dSZXN1bHQubnVtQ29scykua2V5cygpXVxuICAgICAgICAubWFwKGkgPT4gYXJyb3dSZXN1bHQuZ2V0Q2hpbGRBdChpKSlcbiAgICAgICAgLmZpbHRlcihjb2wgPT4gY29sKSBhcyBhcnJvdy5WZWN0b3JbXTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gS25vd24gaXNzdWVzOlxuICAgICAgLy8gMSkgU1RfQXNXS0IgYmluZGVyIGVycm9yLCBubyB0eXBlIG1hdGNoXG4gICAgICBjb25zb2xlLmVycm9yKCdEdWNrRGIgdGFibGU6IGJpbmFyeSBnZW9tZXRyeSBjb2x1bW4gdG8gd2tiJywgZXJyb3IpO1xuICAgIH1cblxuICAgIGF3YWl0IGMuY2xvc2UoKTtcblxuICAgIHJldHVybiB7ZmllbGRzLCBjb2xzfTtcbiAgfVxuXG4gIGFzeW5jIGltcG9ydERhdGEoe2RhdGF9OiB7ZGF0YTogUHJvY2Vzc29yUmVzdWx0fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIFZlY3RvclRpbGUgaXMgYSBzcGVjaWFsIGNhc2UsIGlnbm9yZSBmb3Igbm93XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gRGF0YXNldFR5cGUuVkVDVE9SX1RJTEUpIHtcbiAgICAgIHN1cGVyLmltcG9ydERhdGEoe2RhdGE6IHsuLi5kYXRhLCByb3dzOiBbXX19KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB7ZmllbGRzLCBjb2xzfSA9IGF3YWl0IHRoaXMuY3JlYXRlVGFibGVBbmRHZXRBcnJvdyhkYXRhKTtcblxuICAgIHN1cGVyLmltcG9ydERhdGEoe2RhdGE6IHtmaWVsZHMsIGNvbHMsIHJvd3M6IFtdfX0pO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlKGRhdGEpIHtcbiAgICAvLyBWZWN0b3JUaWxlIGlzIGEgc3BlY2lhbCBjYXNlLCBpZ25vcmUgZm9yIG5vd1xuICAgIGlmICh0aGlzLnR5cGUgPT09IERhdGFzZXRUeXBlLlZFQ1RPUl9USUxFKSB7XG4gICAgICBzdXBlci5pbXBvcnREYXRhKHtkYXRhfSk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCB7Y29sc30gPSBhd2FpdCB0aGlzLmNyZWF0ZVRhYmxlQW5kR2V0QXJyb3coZGF0YSk7XG5cbiAgICByZXR1cm4gc3VwZXIudXBkYXRlKHtjb2xzLCByb3dzOiBbXSwgZmllbGRzOiBbXX0pO1xuICB9XG5cbiAgc3RhdGljIGdldEZpbGVQcm9jZXNzb3IgPSBmdW5jdGlvbiAoZGF0YTogYW55LCBpbnB1dEZvcm1hdD86IHN0cmluZykge1xuICAgIGxldCBwcm9jZXNzb3I7XG4gICAgbGV0IGZvcm1hdDtcbiAgICBpZiAoaW5wdXRGb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5hcnJvdyB8fCBpc0Fycm93RGF0YShkYXRhKSkge1xuICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLmFycm93O1xuICAgICAgLy8gVE9ETyBpbmplc3QgYXJyb3cgZmlsZXMgZnJvbSBkaXNrIHdpdGhvdXQgbG9hZGVyc1xuICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc0Fycm93QmF0Y2hlcztcbiAgICB9IGVsc2UgaWYgKGlucHV0Rm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMua2VwbGVyZ2wgfHwgaXNLZXBsZXJHbE1hcChkYXRhKSkge1xuICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLmtlcGxlcmdsO1xuICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYjtcbiAgICB9IGVsc2UgaWYgKGlucHV0Rm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMucm93IHx8IGlzUm93T2JqZWN0KGRhdGEpKSB7XG4gICAgICAvLyBjc3YgZmlsZSBnb2VzIGhlcmVcbiAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5yb3c7XG4gICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzQ3N2Um93T2JqZWN0OyAvLyBkaXJlY3RseSBpbXBvcnQganNvbiBvYmplY3QgaW50byBkdWNrZGItd2FzbVxuICAgIH0gZWxzZSBpZiAoaW5wdXRGb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5nZW9qc29uIHx8IGlzR2VvSnNvbihkYXRhKSkge1xuICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLmdlb2pzb247XG4gICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzR2VvanNvbjtcbiAgICB9XG4gICAgcmV0dXJuIHtwcm9jZXNzb3IsIGZvcm1hdH07XG4gIH07XG5cbiAgc3RhdGljIGdldElucHV0RGF0YVZhbGlkYXRvciA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZCA9PiBkO1xuICB9O1xufVxuXG4vKipcbiAqIFRyeSB0byByZXN0b3JlIGdlb2Fycm93IG1ldGFkYXRhIGxvc3QgZHVyaW5nIER1Y2tEYiBpbmdlc3Rpb24uXG4gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gZ2VuZXJhdGUgd3JvbmcgZ2VvbWV0cnkgdHlwZXMuXG4gKiBAcGFyYW0gYXJyb3dUYWJsZSBBcnJvdyB0YWJsZSB0byB1cGRhdGUuXG4gKiBAcGFyYW0gY2FuQ2FzdFNUX2FzV0tCIEEgbWFwIHdpdGggZmllbGRzIHRoYXQgYXJlIGxpa2VseSBpbiBEZWNrREIncyBpbnRlcm5hbCBXQksgZm9ybWF0LlxuICogQHBhcmFtIGFkZFdLQk1ldGFkYXRhIEEgbWFwIHdpdGggZmllbGQgbmFtZXMgdGhhdCB1c3VhbGx5IHVzZWQgdG8gc3RvcmUgV0tCIGdlb21ldHJ5LlxuICovXG5jb25zdCByZXN0b3JlR2VvYXJyb3dNZXRhZGF0YSA9IGFzeW5jIChcbiAgYXJyb3dUYWJsZTogYXJyb3cuVGFibGUsXG4gIGNhbkNhc3RTVF9hc1dLQjogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sXG4gIGFkZFdLQk1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPlxuKSA9PiB7XG4gIGFycm93VGFibGUuc2NoZW1hLmZpZWxkcy5mb3JFYWNoKGYgPT4ge1xuICAgIGlmIChhcnJvdy5EYXRhVHlwZS5pc0JpbmFyeShmLnR5cGUpICYmIChhZGRXS0JNZXRhZGF0YVtmLm5hbWVdIHx8IGNhbkNhc3RTVF9hc1dLQltmLm5hbWVdKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoJ0FSUk9XOmV4dGVuc2lvbjpuYW1lJywgJ2dlb2Fycm93LndrYicpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd1BvaW50KGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KCdBUlJPVzpleHRlbnNpb246bmFtZScsICdnZW9hcnJvdy5wb2ludCcpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd0xpbmVTdHJpbmcoZi50eXBlKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoJ0FSUk9XOmV4dGVuc2lvbjpuYW1lJywgJ2dlb2Fycm93LmxpbmVzdHJpbmcnKTtcbiAgICB9IGVsc2UgaWYgKGlzR2VvQXJyb3dQb2x5Z29uKGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KCdBUlJPVzpleHRlbnNpb246bmFtZScsICdnZW9hcnJvdy5wb2x5Z29uJyk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TXVsdGlQb2ludChmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldCgnQVJST1c6ZXh0ZW5zaW9uOm5hbWUnLCAnZ2VvYXJyb3cubXVsdGlwb2ludCcpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd011bHRpTGluZVN0cmluZyhmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldCgnQVJST1c6ZXh0ZW5zaW9uOm5hbWUnLCAnZ2VvYXJyb3cubXVsdGlsaW5lc3RyaW5nJyk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TXVsdGlQb2x5Z29uKGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KCdBUlJPVzpleHRlbnNpb246bmFtZScsICdnZW9hcnJvdy5tdWx0aXBvbHlnb24nKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBGb3IgYWxsIGJpbmFyeSBjb2x1bW5zIHRyaWVzIHRvIHRyYW5zZm9ybSBnZW9tZXRyeSBmcm9tIER1Y2tEQidzIGludGVybmFsIGZvcm1hdCBpbnRvIHByb3BlciBXS0IuXG4gKiBAcGFyYW0gcHJvcHNcbiAqIEByZXR1cm5zIEEgbWFwIG9mIGZpZWxkcyB0aGF0IHNob3VsZCBiZSB0cmFuc2Zvcm1lZCB0byB2YWxpZCBXS0IuXG4gKi9cbmNvbnN0IHRyeVNUX0FzV0tCID0gYXN5bmMgKHByb3BzOiB7dGFibGVOYW1lOiBzdHJpbmc7IGM6IEFzeW5jRHVja0RCQ29ubmVjdGlvbn0pID0+IHtcbiAgY29uc3Qge2MsIHRhYmxlTmFtZX0gPSBwcm9wcztcblxuICBjb25zdCByZXN1bHRXaXRoU2NoZW1hID0gYXdhaXQgYy5xdWVyeShgXG4gICAgICAgIFNFTEVDVCAqIEZST00gJyR7dGFibGVOYW1lfScgTElNSVQgMDtcbiAgICAgIGApO1xuICBjb25zdCBiaW5hcnlDb2x1bW5zID0gcmVzdWx0V2l0aFNjaGVtYS5zY2hlbWEuZmllbGRzLmZpbHRlcihmID0+IGFycm93LkRhdGFUeXBlLmlzQmluYXJ5KGYudHlwZSkpO1xuXG4gIGNvbnN0IGNhbkNhc3RTVF9hc1dLQjogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcbiAgZm9yIChjb25zdCBjb2x1bW4gb2YgYmluYXJ5Q29sdW1ucykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb2x1bW5OYW1lID0gY29sdW1uLm5hbWU7XG4gICAgICBjb25zdCBxdWVyeSA9IGBTRUxFQ1QgKiBFWENMVURFICR7Y29sdW1uTmFtZX0sIFNUX0FzV0tCKCR7Y29sdW1uTmFtZX0pIGFzICR7Y29sdW1uTmFtZX0gRlJPTSAnJHt0YWJsZU5hbWV9JyBMSU1JVCAxO2A7XG4gICAgICBhd2FpdCBjLnF1ZXJ5KHF1ZXJ5KTtcblxuICAgICAgY2FuQ2FzdFNUX2FzV0tCW2NvbHVtbi5uYW1lXSA9IHRydWU7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNhbkNhc3RTVF9hc1dLQltjb2x1bW4ubmFtZV0gPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2FuQ2FzdFNUX2FzV0tCO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUdBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLE1BQUEsR0FBQUYsT0FBQTtBQUVBLElBQUFHLFdBQUEsR0FBQUgsT0FBQTtBQVNBLElBQUFJLEtBQUEsR0FBQUosT0FBQTtBQUNBLElBQUFLLGNBQUEsR0FBQUwsT0FBQTtBQU9BLElBQUFNLGlCQUFBLEdBQUFOLE9BQUE7QUFPOEIsU0FBQU8seUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEs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
|
package/src/duckdb/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/duckdb",
|
|
3
3
|
"author": "Shan He <heshan0131@gmail.com>",
|
|
4
|
-
"version": "3.1.0
|
|
4
|
+
"version": "3.1.0",
|
|
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.0
|
|
30
|
-
"@kepler.gl/constants": "3.1.0
|
|
31
|
-
"@kepler.gl/processors": "3.1.0
|
|
32
|
-
"@kepler.gl/table": "3.1.0
|
|
33
|
-
"@kepler.gl/types": "3.1.0
|
|
29
|
+
"@kepler.gl/common-utils": "3.1.0",
|
|
30
|
+
"@kepler.gl/constants": "3.1.0",
|
|
31
|
+
"@kepler.gl/processors": "3.1.0",
|
|
32
|
+
"@kepler.gl/table": "3.1.0",
|
|
33
|
+
"@kepler.gl/types": "3.1.0",
|
|
34
34
|
"@monaco-editor/react": "^4.6.0",
|
|
35
35
|
"@radix-ui/react-collapsible": "^1.1.0",
|
|
36
36
|
"apache-arrow": ">=15.0.0",
|
|
@@ -59,8 +59,6 @@ const PreviewDataPanelWOTheme: React.FC<PreviewDataPanelProps> = ({
|
|
|
59
59
|
const [pinnedColumns, setPinnedColumns] = useState<string[]>(defaultPinnedColumns);
|
|
60
60
|
const fields = useMemo(() => arrowSchemaToFields(result.schema), [result.schema]);
|
|
61
61
|
const dataContainer = useMemo(() => {
|
|
62
|
-
// const fields = arrowSchemaToFields(result.schema);
|
|
63
|
-
|
|
64
62
|
const cols = [...Array(result.numCols).keys()].map(i => result.getChildAt(i));
|
|
65
63
|
|
|
66
64
|
const dataContainer = createDataContainer(cols, {
|
|
@@ -145,11 +143,8 @@ const PreviewDataPanelWOTheme: React.FC<PreviewDataPanelProps> = ({
|
|
|
145
143
|
cellSizeCache={cellSizeCache}
|
|
146
144
|
dataContainer={dataContainer}
|
|
147
145
|
pinnedColumns={pinnedColumns}
|
|
148
|
-
// sortColumn={sortColumnConfig}
|
|
149
146
|
copyTableColumn={copyTableColumn}
|
|
150
147
|
pinTableColumn={pinTableColumn}
|
|
151
|
-
// sortTableColumn={setTableSortColumn}
|
|
152
|
-
setColumnDisplayFormat={setColumnDisplayFormat ?? (() => null)}
|
|
153
148
|
/>
|
|
154
149
|
);
|
|
155
150
|
};
|
|
@@ -118,6 +118,8 @@ type SqlPanelProps = {
|
|
|
118
118
|
initialSql?: string;
|
|
119
119
|
};
|
|
120
120
|
|
|
121
|
+
const SCHEMA_PANEL_STYLE = {overflow: 'auto'};
|
|
122
|
+
|
|
121
123
|
export const SqlPanel: React.FC<SqlPanelProps> = ({initialSql = ''}) => {
|
|
122
124
|
const [sql, setSql] = useState(() => {
|
|
123
125
|
const params = new URLSearchParams(window.location.search);
|
|
@@ -184,7 +186,7 @@ export const SqlPanel: React.FC<SqlPanelProps> = ({initialSql = ''}) => {
|
|
|
184
186
|
},
|
|
185
187
|
info: {
|
|
186
188
|
id: generateHashId(),
|
|
187
|
-
label: `
|
|
189
|
+
label: `query_result${counter > 0 ? `_${counter}` : ''}`,
|
|
188
190
|
format: 'arrow'
|
|
189
191
|
}
|
|
190
192
|
};
|
|
@@ -196,7 +198,7 @@ export const SqlPanel: React.FC<SqlPanelProps> = ({initialSql = ''}) => {
|
|
|
196
198
|
return (
|
|
197
199
|
<StyledSqlPanel>
|
|
198
200
|
<PanelGroup direction="horizontal">
|
|
199
|
-
<Panel defaultSize={20} minSize={15}>
|
|
201
|
+
<Panel defaultSize={20} minSize={15} style={SCHEMA_PANEL_STYLE}>
|
|
200
202
|
<SchemaPanel setTableSchema={setTableSchema} />
|
|
201
203
|
</Panel>
|
|
202
204
|
|
|
@@ -83,8 +83,12 @@ function TreeNode<T>(props: TreeNodeProps<T>): JSX.Element | null {
|
|
|
83
83
|
);
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
+
const StyledDatasetNode = styled.div`
|
|
87
|
+
font-weight: bold;
|
|
88
|
+
`;
|
|
89
|
+
|
|
86
90
|
export const DatasetNode = ({node}) => {
|
|
87
|
-
return <
|
|
91
|
+
return <StyledDatasetNode>{node.object.tableName}</StyledDatasetNode>;
|
|
88
92
|
};
|
|
89
93
|
|
|
90
94
|
const StyledColumnNode = styled.div`
|