@kepler.gl/duckdb 3.3.0-alpha.4 → 3.3.0-alpha.6

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 (39) hide show
  1. package/dist/cjs/adapters/duckdb-wasm-adapter.js +258 -0
  2. package/dist/{components → cjs/components}/index.js +1 -1
  3. package/dist/cjs/components/monaco-editor.js +174 -0
  4. package/dist/cjs/components/preview-data-panel.js +127 -0
  5. package/dist/cjs/components/schema-panel.js +170 -0
  6. package/dist/cjs/components/sql-panel.js +395 -0
  7. package/dist/cjs/components/tree.js +90 -0
  8. package/dist/{index.js → cjs/index.js} +1 -1
  9. package/dist/{plugin.js → cjs/plugin.js} +1 -1
  10. package/dist/cjs/processors/data-processor.js +353 -0
  11. package/dist/cjs/table/duckdb-table-utils.js +668 -0
  12. package/dist/cjs/table/duckdb-table.js +479 -0
  13. package/dist/{table → cjs/table}/index.js +1 -1
  14. package/dist/cjs/utils/perf.js +46 -0
  15. package/dist/esm/adapters/duckdb-wasm-adapter.js +251 -0
  16. package/dist/esm/components/index.js +9 -0
  17. package/dist/esm/components/monaco-editor.js +167 -0
  18. package/dist/esm/components/preview-data-panel.js +120 -0
  19. package/dist/esm/components/schema-panel.js +164 -0
  20. package/dist/esm/components/sql-panel.js +388 -0
  21. package/dist/esm/components/tree.js +82 -0
  22. package/dist/esm/index.js +9 -0
  23. package/dist/esm/plugin.js +22 -0
  24. package/dist/esm/processors/data-processor.js +342 -0
  25. package/dist/esm/table/duckdb-table-utils.js +644 -0
  26. package/dist/esm/table/duckdb-table.js +474 -0
  27. package/dist/esm/table/index.js +5 -0
  28. package/dist/esm/utils/perf.js +40 -0
  29. package/package.json +22 -20
  30. package/dist/adapters/duckdb-wasm-adapter.js +0 -258
  31. package/dist/components/monaco-editor.js +0 -174
  32. package/dist/components/preview-data-panel.js +0 -127
  33. package/dist/components/schema-panel.js +0 -170
  34. package/dist/components/sql-panel.js +0 -395
  35. package/dist/components/tree.js +0 -90
  36. package/dist/processors/data-processor.js +0 -353
  37. package/dist/table/duckdb-table-utils.js +0 -668
  38. package/dist/table/duckdb-table.js +0 -479
  39. package/dist/utils/perf.js +0 -46
@@ -0,0 +1,395 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.SqlPanel = void 0;
9
+ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
+ var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
+ var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
12
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
14
+ var _react = _interopRequireWildcard(require("react"));
15
+ var _reactRedux = require("react-redux");
16
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
17
+ var _reactResizablePanels = require("react-resizable-panels");
18
+ var _actions = require("@kepler.gl/actions");
19
+ var _commonUtils = require("@kepler.gl/common-utils");
20
+ var _components = require("@kepler.gl/components");
21
+ var _processors = require("@kepler.gl/processors");
22
+ var _styles = require("@kepler.gl/styles");
23
+ var _utils = require("@kepler.gl/utils");
24
+ var _monacoEditor = _interopRequireDefault(require("./monaco-editor"));
25
+ var _schemaPanel = require("./schema-panel");
26
+ var _previewDataPanel = require("./preview-data-panel");
27
+ var _duckdbTableUtils = require("../table/duckdb-table-utils");
28
+ var _templateObject, _templateObject2, _templateObject3, _templateObject4, _templateObject5, _templateObject6, _templateObject7, _templateObject8, _templateObject9, _templateObject0, _templateObject1, _templateObject10; // SPDX-License-Identifier: MIT
29
+ // Copyright contributors to the kepler.gl project
30
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
31
+ 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; } } }; }
32
+ 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; } }
33
+ 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; }
34
+ var StyledSqlPanel = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n height: 100%;\n background-color: ", ";\n border-left: 1px solid #333;\n"])), _styles.sidePanelBg);
35
+ var StyledSqlActions = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n flex: 0 0 50px;\n display: flex;\n padding-top: 12px;\n align-items: center;\n flex-direction: column;\n justify-content: flex-start;\n border-bottom: 1px solid #333;\n"])));
36
+ var StyledSqlEditor = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: row;\n flex: 1;\n min-width: 0; // Prevents flex child from overflowing\n height: 100%;\n"])));
37
+ var StyledEditorPanel = _styledComponents["default"].div(_templateObject4 || (_templateObject4 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n display: flex;\n height: 100%;\n flex-direction: row;\n gap: 5px;\n flex-grow: 1;\n"])), _styles.sidePanelBg);
38
+ var StyledDataPanel = _styledComponents["default"].div(_templateObject5 || (_templateObject5 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n flex-direction: column;\n height: 100%;\n background: white;\n"])));
39
+ var StyledEditor = _styledComponents["default"].div(_templateObject6 || (_templateObject6 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n padding: 12px 12px 12px 0;\n background-color: rgb(30, 30, 30);\n opacity: ", ";\n width: 100%;\n height: 100%;\n min-height: 0; // Prevents flex child from overflowing\n"])), function (props) {
40
+ return props.isRunning ? 0.5 : 1;
41
+ });
42
+ var StyledResultActions = _styledComponents["default"].div(_templateObject7 || (_templateObject7 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: white;\n padding: 2px 12px;\n display: flex;\n justify-content: space-between;\n align-items: center;\n font-size: 12px;\n"])));
43
+ var StyledResizeHandle = (0, _styledComponents["default"])(_reactResizablePanels.PanelResizeHandle)(_templateObject8 || (_templateObject8 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n width: 4px;\n cursor: col-resize;\n\n &:hover {\n background-color: #555;\n }\n"])), _styles.panelBorderColor);
44
+ var StyledVerticalResizeHandle = (0, _styledComponents["default"])(_reactResizablePanels.PanelResizeHandle)(_templateObject9 || (_templateObject9 = (0, _taggedTemplateLiteral2["default"])(["\n background-color: ", ";\n height: 4px;\n cursor: row-resize;\n\n &:hover {\n background-color: #555;\n }\n"])), _styles.panelBorderColor);
45
+ var StyledLoadingContainer = _styledComponents["default"].div(_templateObject0 || (_templateObject0 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n"])));
46
+ var StyledErrorContainer = _styledComponents["default"].pre(_templateObject1 || (_templateObject1 = (0, _taggedTemplateLiteral2["default"])(["\n padding: 12px;\n color: red;\n font-size: 12px;\n background-color: ", ";\n height: 100%;\n overflow: auto;\n"])), _styles.sidePanelBg);
47
+ var StyledFileDropArea = (0, _styledComponents["default"])(_components.FileDrop)(_templateObject10 || (_templateObject10 = (0, _taggedTemplateLiteral2["default"])(["\n height: 100%;\n border-width: 1px;\n border: 1px ", "\n ", ";\n .file-drop-target {\n height: 100%;\n }\n"])), function (props) {
48
+ return props.dragOver ? 'solid' : 'dashed';
49
+ }, function (props) {
50
+ return props.dragOver ? props.theme.subtextColorLT : 'transparent';
51
+ });
52
+ var SCHEMA_PANEL_STYLE = {
53
+ overflow: 'auto'
54
+ };
55
+ var SqlPanel = exports.SqlPanel = function SqlPanel(_ref) {
56
+ var _ref$initialSql = _ref.initialSql,
57
+ initialSql = _ref$initialSql === void 0 ? '' : _ref$initialSql;
58
+ var _useState = (0, _react.useState)(function () {
59
+ var params = new URLSearchParams(window.location.search);
60
+ return params.get('sql') || initialSql;
61
+ }),
62
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
63
+ sql = _useState2[0],
64
+ setSql = _useState2[1];
65
+ var _useState3 = (0, _react.useState)(null),
66
+ _useState4 = (0, _slicedToArray2["default"])(_useState3, 2),
67
+ droppedFile = _useState4[0],
68
+ setDroppedFile = _useState4[1];
69
+ var _useState5 = (0, _react.useState)(false),
70
+ _useState6 = (0, _slicedToArray2["default"])(_useState5, 2),
71
+ dragState = _useState6[0],
72
+ setDragState = _useState6[1];
73
+ var _useState7 = (0, _react.useState)(null),
74
+ _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
75
+ result = _useState8[0],
76
+ setResult = _useState8[1];
77
+ var _useState9 = (0, _react.useState)(0),
78
+ _useState0 = (0, _slicedToArray2["default"])(_useState9, 2),
79
+ schemaUpdateTrigger = _useState0[0],
80
+ setSchemaUpdateTrigger = _useState0[1];
81
+ var _useState1 = (0, _react.useState)(null),
82
+ _useState10 = (0, _slicedToArray2["default"])(_useState1, 2),
83
+ error = _useState10[0],
84
+ setError = _useState10[1];
85
+ var _useState11 = (0, _react.useState)(0),
86
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
87
+ counter = _useState12[0],
88
+ setCounter = _useState12[1];
89
+ var _useState13 = (0, _react.useState)([]),
90
+ _useState14 = (0, _slicedToArray2["default"])(_useState13, 2),
91
+ tableSchema = _useState14[0],
92
+ setTableSchema = _useState14[1];
93
+ var _useState15 = (0, _react.useState)(false),
94
+ _useState16 = (0, _slicedToArray2["default"])(_useState15, 2),
95
+ isRunning = _useState16[0],
96
+ setIsRunning = _useState16[1];
97
+ var _useState17 = (0, _react.useState)(function () {
98
+ return (0, _utils.isAppleDevice)();
99
+ }),
100
+ _useState18 = (0, _slicedToArray2["default"])(_useState17, 1),
101
+ isMac = _useState18[0];
102
+ var dispatch = (0, _reactRedux.useDispatch)();
103
+ var droppedFileAreaRef = (0, _react.useRef)(null);
104
+ (0, _react.useEffect)(function () {
105
+ var currentUrl = new URL(window.location.href);
106
+ if (sql) {
107
+ currentUrl.searchParams.set('sql', sql);
108
+ } else {
109
+ currentUrl.searchParams["delete"]('sql');
110
+ }
111
+ window.history.replaceState({}, '', currentUrl.toString());
112
+ }, [sql]);
113
+ var runQuery = (0, _react.useCallback)(/*#__PURE__*/(0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee() {
114
+ var adjustedQuery, db, connection, tempTableName, sqlStatements, arrowResult, tableDuckDBTypes, _iterator, _step, statement, isLastQuery, duckDbColumns, _adjustedQuery;
115
+ return _regenerator["default"].wrap(function _callee$(_context) {
116
+ while (1) switch (_context.prev = _context.next) {
117
+ case 0:
118
+ setIsRunning(true);
119
+ _context.prev = 1;
120
+ adjustedQuery = sql ? (0, _duckdbTableUtils.removeSQLComments)(sql) : null;
121
+ if (adjustedQuery) {
122
+ _context.next = 6;
123
+ break;
124
+ }
125
+ setError(new Error('Query is empty'));
126
+ return _context.abrupt("return");
127
+ case 6:
128
+ db = (0, _utils.getApplicationConfig)().database;
129
+ if (db) {
130
+ _context.next = 10;
131
+ break;
132
+ }
133
+ setError(new Error('The database is not configured properly.'));
134
+ return _context.abrupt("return");
135
+ case 10:
136
+ _context.next = 12;
137
+ return db.connect();
138
+ case 12:
139
+ connection = _context.sent;
140
+ // TODO find a cheap way to get DuckDb types with a single query to a remote resource - temp table? cte?
141
+ tempTableName = 'temp_keplergl_table'; // remove comments
142
+ sqlStatements = (0, _duckdbTableUtils.splitSqlStatements)(adjustedQuery);
143
+ arrowResult = null;
144
+ tableDuckDBTypes = {};
145
+ _iterator = _createForOfIteratorHelper(sqlStatements);
146
+ _context.prev = 18;
147
+ _iterator.s();
148
+ case 20:
149
+ if ((_step = _iterator.n()).done) {
150
+ _context.next = 48;
151
+ break;
152
+ }
153
+ statement = _step.value;
154
+ isLastQuery = statement === sqlStatements[sqlStatements.length - 1];
155
+ _context.t0 = isLastQuery;
156
+ if (!_context.t0) {
157
+ _context.next = 28;
158
+ break;
159
+ }
160
+ _context.next = 27;
161
+ return (0, _duckdbTableUtils.checkIsSelectQuery)(connection, statement);
162
+ case 27:
163
+ _context.t0 = _context.sent;
164
+ case 28:
165
+ if (!_context.t0) {
166
+ _context.next = 44;
167
+ break;
168
+ }
169
+ _context.next = 31;
170
+ return connection.query("CREATE OR REPLACE TABLE '".concat(tempTableName, "' AS ").concat(statement));
171
+ case 31:
172
+ _context.next = 33;
173
+ return (0, _duckdbTableUtils.getDuckDBColumnTypes)(connection, tempTableName);
174
+ case 33:
175
+ duckDbColumns = _context.sent;
176
+ tableDuckDBTypes = (0, _duckdbTableUtils.getDuckDBColumnTypesMap)(duckDbColumns);
177
+
178
+ // 3) cast GEOMETRY columns to WKB and BigInt to double.
179
+ _adjustedQuery = (0, _duckdbTableUtils.castDuckDBTypesForKepler)(tempTableName, duckDbColumns);
180
+ _context.next = 38;
181
+ return connection.query(_adjustedQuery);
182
+ case 38:
183
+ arrowResult = _context.sent;
184
+ // 4) set geoarrow extension for the arrow table as DuckDB doesn't support the geoarrow extension.
185
+ (0, _duckdbTableUtils.setGeoArrowWKBExtension)(arrowResult, duckDbColumns);
186
+
187
+ // 5) remove temp table
188
+ _context.next = 42;
189
+ return connection.query("DROP TABLE ".concat(tempTableName, ";"));
190
+ case 42:
191
+ _context.next = 46;
192
+ break;
193
+ case 44:
194
+ _context.next = 46;
195
+ return connection.query(statement);
196
+ case 46:
197
+ _context.next = 20;
198
+ break;
199
+ case 48:
200
+ _context.next = 53;
201
+ break;
202
+ case 50:
203
+ _context.prev = 50;
204
+ _context.t1 = _context["catch"](18);
205
+ _iterator.e(_context.t1);
206
+ case 53:
207
+ _context.prev = 53;
208
+ _iterator.f();
209
+ return _context.finish(53);
210
+ case 56:
211
+ // Show preview only for the result of the last query
212
+ if (arrowResult) {
213
+ setResult({
214
+ table: arrowResult,
215
+ tableDuckDBTypes: tableDuckDBTypes
216
+ });
217
+ setError(null);
218
+ }
219
+ _context.next = 59;
220
+ return connection.close();
221
+ case 59:
222
+ _context.next = 64;
223
+ break;
224
+ case 61:
225
+ _context.prev = 61;
226
+ _context.t2 = _context["catch"](1);
227
+ setError(_context.t2);
228
+ case 64:
229
+ _context.prev = 64;
230
+ setIsRunning(false);
231
+ return _context.finish(64);
232
+ case 67:
233
+ // Indicate that there may be a possible change in DuckDB.
234
+ setSchemaUpdateTrigger(Date.now());
235
+ case 68:
236
+ case "end":
237
+ return _context.stop();
238
+ }
239
+ }, _callee, null, [[1, 61, 64, 67], [18, 50, 53, 56]]);
240
+ })), [sql]);
241
+ var onChange = (0, _react.useCallback)(function (value) {
242
+ setSql(value);
243
+ }, [setSql]);
244
+ var onAddResultToMap = (0, _react.useCallback)(function () {
245
+ if (!result) return;
246
+ var keplerFields = (0, _processors.arrowSchemaToFields)(result.table, result.tableDuckDBTypes);
247
+ var datasetToAdd = {
248
+ data: {
249
+ fields: keplerFields,
250
+ // TODO type AddDataToMapPayload -> rows -> + arrow.Table
251
+ rows: result.table
252
+ },
253
+ info: {
254
+ id: (0, _commonUtils.generateHashId)(),
255
+ label: "query_result".concat(counter > 0 ? "_".concat(counter) : ''),
256
+ format: 'arrow'
257
+ }
258
+ };
259
+ dispatch((0, _actions.addDataToMap)({
260
+ datasets: [datasetToAdd]
261
+ }));
262
+ setCounter(counter + 1);
263
+ }, [result, counter, dispatch]);
264
+ var isValidFileType = (0, _react.useCallback)(function (filename) {
265
+ var fileExt = _duckdbTableUtils.SUPPORTED_DUCKDB_DROP_EXTENSIONS.find(function (ext) {
266
+ return filename.endsWith(ext);
267
+ });
268
+ return Boolean(fileExt);
269
+ }, []);
270
+ var createTableFromDroppedFile = (0, _react.useCallback)(/*#__PURE__*/function () {
271
+ var _ref3 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee2(droppedFile) {
272
+ var _error;
273
+ return _regenerator["default"].wrap(function _callee2$(_context2) {
274
+ while (1) switch (_context2.prev = _context2.next) {
275
+ case 0:
276
+ if (!droppedFile) {
277
+ _context2.next = 5;
278
+ break;
279
+ }
280
+ _context2.next = 3;
281
+ return (0, _duckdbTableUtils.tableFromFile)(droppedFile);
282
+ case 3:
283
+ _error = _context2.sent;
284
+ if (_error) {
285
+ setError(_error);
286
+ } else {
287
+ setError(null);
288
+ }
289
+ case 5:
290
+ setDroppedFile(null);
291
+ setDragState(false);
292
+ case 7:
293
+ case "end":
294
+ return _context2.stop();
295
+ }
296
+ }, _callee2);
297
+ }));
298
+ return function (_x) {
299
+ return _ref3.apply(this, arguments);
300
+ };
301
+ }(), []);
302
+ (0, _react.useEffect)(function () {
303
+ createTableFromDroppedFile(droppedFile);
304
+ }, [droppedFile, createTableFromDroppedFile]);
305
+ var handleFileInput = (0, _react.useCallback)(function (fileList, event) {
306
+ if (event) {
307
+ event.preventDefault();
308
+ event.stopPropagation();
309
+ }
310
+ var files = (0, _toConsumableArray2["default"])(fileList).filter(Boolean);
311
+ var disableExtensionFilter = false;
312
+ var filesToLoad = [];
313
+ var errorFiles = [];
314
+ var _iterator2 = _createForOfIteratorHelper(files),
315
+ _step2;
316
+ try {
317
+ for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
318
+ var file = _step2.value;
319
+ if (disableExtensionFilter || isValidFileType(file.name)) {
320
+ filesToLoad.push(file);
321
+ } else {
322
+ errorFiles.push(file.name);
323
+ }
324
+ }
325
+ } catch (err) {
326
+ _iterator2.e(err);
327
+ } finally {
328
+ _iterator2.f();
329
+ }
330
+ if (filesToLoad.length > 0) {
331
+ setDroppedFile(filesToLoad[0]);
332
+ } else if (errorFiles.length > 0) {
333
+ setError(new Error("Unsupported file formats: ".concat(errorFiles.join(', '))));
334
+ }
335
+ }, [isValidFileType]);
336
+ return /*#__PURE__*/_react["default"].createElement(StyledSqlPanel, null, /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.PanelGroup, {
337
+ direction: "horizontal"
338
+ }, /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, {
339
+ defaultSize: 20,
340
+ minSize: 15,
341
+ style: SCHEMA_PANEL_STYLE,
342
+ className: "schema-panel"
343
+ }, /*#__PURE__*/_react["default"].createElement(StyledFileDropArea, {
344
+ dragOver: dragState,
345
+ onDragOver: function onDragOver() {
346
+ return setDragState(true);
347
+ },
348
+ onDragLeave: function onDragLeave() {
349
+ return setDragState(false);
350
+ },
351
+ frame: droppedFileAreaRef.current || document,
352
+ onDrop: handleFileInput,
353
+ className: "file-uploader__file-drop"
354
+ }, /*#__PURE__*/_react["default"].createElement(_schemaPanel.SchemaPanel, {
355
+ setTableSchema: setTableSchema,
356
+ droppedFile: droppedFile,
357
+ schemaUpdateTrigger: schemaUpdateTrigger
358
+ }))), /*#__PURE__*/_react["default"].createElement(StyledResizeHandle, null), /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, {
359
+ minSize: 40
360
+ }, /*#__PURE__*/_react["default"].createElement(StyledSqlEditor, null, /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.PanelGroup, {
361
+ direction: "vertical"
362
+ }, /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, {
363
+ defaultSize: 30,
364
+ className: "editor-panel"
365
+ }, /*#__PURE__*/_react["default"].createElement(StyledEditorPanel, null, /*#__PURE__*/_react["default"].createElement(StyledSqlActions, null, /*#__PURE__*/_react["default"].createElement(_components.IconButton, {
366
+ "data-tip": true,
367
+ "data-for": "run-query-tooltip",
368
+ onClick: runQuery,
369
+ disabled: isRunning || !sql
370
+ }, /*#__PURE__*/_react["default"].createElement(_components.Icons.Play, {
371
+ height: "18px"
372
+ }), /*#__PURE__*/_react["default"].createElement(_components.Tooltip, {
373
+ id: "run-query-tooltip",
374
+ place: "top",
375
+ effect: "solid"
376
+ }, "Run Query (", isMac ? '⌘Enter' : 'Ctrl+Enter', " or Shift+Enter)"))), /*#__PURE__*/_react["default"].createElement(StyledEditor, {
377
+ isRunning: isRunning
378
+ }, /*#__PURE__*/_react["default"].createElement(_monacoEditor["default"], {
379
+ isReadOnly: isRunning,
380
+ onRunQuery: runQuery,
381
+ onChange: onChange,
382
+ tableSchema: tableSchema,
383
+ code: sql
384
+ })))), /*#__PURE__*/_react["default"].createElement(StyledVerticalResizeHandle, null), /*#__PURE__*/_react["default"].createElement(_reactResizablePanels.Panel, {
385
+ className: "preview-panel"
386
+ }, isRunning ? /*#__PURE__*/_react["default"].createElement(StyledLoadingContainer, null, /*#__PURE__*/_react["default"].createElement(_components.LoadingSpinner, null)) : error ? /*#__PURE__*/_react["default"].createElement(StyledErrorContainer, null, /*#__PURE__*/_react["default"].createElement("div", null, error.message)) : result ? /*#__PURE__*/_react["default"].createElement(StyledDataPanel, null, /*#__PURE__*/_react["default"].createElement(StyledResultActions, null, /*#__PURE__*/_react["default"].createElement(_components.Button, {
387
+ secondary: true,
388
+ onClick: onAddResultToMap
389
+ }, "Add to Map"), /*#__PURE__*/_react["default"].createElement("div", null, result.table.numRows, " rows")), /*#__PURE__*/_react["default"].createElement(_previewDataPanel.PreviewDataPanel, {
390
+ result: result,
391
+ dataTableStyle: {},
392
+ onAddResultToMap: onAddResultToMap
393
+ })) : null))))));
394
+ };
395
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RSZWR1eCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9yZWFjdFJlc2l6YWJsZVBhbmVscyIsIl9hY3Rpb25zIiwiX2NvbW1vblV0aWxzIiwiX2NvbXBvbmVudHMiLCJfcHJvY2Vzc29ycyIsIl9zdHlsZXMiLCJfdXRpbHMiLCJfbW9uYWNvRWRpdG9yIiwiX3NjaGVtYVBhbmVsIiwiX3ByZXZpZXdEYXRhUGFuZWwiLCJfZHVja2RiVGFibGVVdGlscyIsIl90ZW1wbGF0ZU9iamVjdCIsIl90ZW1wbGF0ZU9iamVjdDIiLCJfdGVtcGxhdGVPYmplY3QzIiwiX3RlbXBsYXRlT2JqZWN0NCIsIl90ZW1wbGF0ZU9iamVjdDUiLCJfdGVtcGxhdGVPYmplY3Q2IiwiX3RlbXBsYXRlT2JqZWN0NyIsIl90ZW1wbGF0ZU9iamVjdDgiLCJfdGVtcGxhdGVPYmplY3Q5IiwiX3RlbXBsYXRlT2JqZWN0MCIsIl90ZW1wbGF0ZU9iamVjdDEiLCJfdGVtcGxhdGVPYmplY3QxMCIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJUeXBlRXJyb3IiLCJhIiwidSIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlN0eWxlZFNxbFBhbmVsIiwic3R5bGVkIiwiZGl2IiwiX3RhZ2dlZFRlbXBsYXRlTGl0ZXJhbDIiLCJzaWRlUGFuZWxCZyIsIlN0eWxlZFNxbEFjdGlvbnMiLCJTdHlsZWRTcWxFZGl0b3IiLCJTdHlsZWRFZGl0b3JQYW5lbCIsIlN0eWxlZERhdGFQYW5lbCIsIlN0eWxlZEVkaXRvciIsInByb3BzIiwiaXNSdW5uaW5nIiwiU3R5bGVkUmVzdWx0QWN0aW9ucyIsIlN0eWxlZFJlc2l6ZUhhbmRsZSIsIlBhbmVsUmVzaXplSGFuZGxlIiwicGFuZWxCb3JkZXJDb2xvciIsIlN0eWxlZFZlcnRpY2FsUmVzaXplSGFuZGxlIiwiU3R5bGVkTG9hZGluZ0NvbnRhaW5lciIsIlN0eWxlZEVycm9yQ29udGFpbmVyIiwicHJlIiwiU3R5bGVkRmlsZURyb3BBcmVhIiwiRmlsZURyb3AiLCJkcmFnT3ZlciIsInRoZW1lIiwic3VidGV4dENvbG9yTFQiLCJTQ0hFTUFfUEFORUxfU1RZTEUiLCJvdmVyZmxvdyIsIlNxbFBhbmVsIiwiZXhwb3J0cyIsIl9yZWYiLCJfcmVmJGluaXRpYWxTcWwiLCJpbml0aWFsU3FsIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJwYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXMiLCJ3aW5kb3ciLCJsb2NhdGlvbiIsInNlYXJjaCIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJzcWwiLCJzZXRTcWwiLCJfdXNlU3RhdGUzIiwiX3VzZVN0YXRlNCIsImRyb3BwZWRGaWxlIiwic2V0RHJvcHBlZEZpbGUiLCJfdXNlU3RhdGU1IiwiX3VzZVN0YXRlNiIsImRyYWdTdGF0ZSIsInNldERyYWdTdGF0ZSIsIl91c2VTdGF0ZTciLCJfdXNlU3RhdGU4IiwicmVzdWx0Iiwic2V0UmVzdWx0IiwiX3VzZVN0YXRlOSIsIl91c2VTdGF0ZTAiLCJzY2hlbWFVcGRhdGVUcmlnZ2VyIiwic2V0U2NoZW1hVXBkYXRlVHJpZ2dlciIsIl91c2VTdGF0ZTEiLCJfdXNlU3RhdGUxMCIsImVycm9yIiwic2V0RXJyb3IiLCJfdXNlU3RhdGUxMSIsIl91c2VTdGF0ZTEyIiwiY291bnRlciIsInNldENvdW50ZXIiLCJfdXNlU3RhdGUxMyIsIl91c2VTdGF0ZTE0IiwidGFibGVTY2hlbWEiLCJzZXRUYWJsZVNjaGVtYSIsIl91c2VTdGF0ZTE1IiwiX3VzZVN0YXRlMTYiLCJzZXRJc1J1bm5pbmciLCJfdXNlU3RhdGUxNyIsImlzQXBwbGVEZXZpY2UiLCJfdXNlU3RhdGUxOCIsImlzTWFjIiwiZGlzcGF0Y2giLCJ1c2VEaXNwYXRjaCIsImRyb3BwZWRGaWxlQXJlYVJlZiIsInVzZVJlZiIsInVzZUVmZmVjdCIsImN1cnJlbnRVcmwiLCJVUkwiLCJocmVmIiwic2VhcmNoUGFyYW1zIiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsInJ1blF1ZXJ5IiwidXNlQ2FsbGJhY2siLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsImFkanVzdGVkUXVlcnkiLCJkYiIsImNvbm5lY3Rpb24iLCJ0ZW1wVGFibGVOYW1lIiwic3FsU3RhdGVtZW50cyIsImFycm93UmVzdWx0IiwidGFibGVEdWNrREJUeXBlcyIsIl9pdGVyYXRvciIsIl9zdGVwIiwic3RhdGVtZW50IiwiaXNMYXN0UXVlcnkiLCJkdWNrRGJDb2x1bW5zIiwiX2FkanVzdGVkUXVlcnkiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJyZW1vdmVTUUxDb21tZW50cyIsIkVycm9yIiwiYWJydXB0IiwiZ2V0QXBwbGljYXRpb25Db25maWciLCJkYXRhYmFzZSIsImNvbm5lY3QiLCJzZW50Iiwic3BsaXRTcWxTdGF0ZW1lbnRzIiwidDAiLCJjaGVja0lzU2VsZWN0UXVlcnkiLCJxdWVyeSIsImNvbmNhdCIsImdldER1Y2tEQkNvbHVtblR5cGVzIiwiZ2V0RHVja0RCQ29sdW1uVHlwZXNNYXAiLCJjYXN0RHVja0RCVHlwZXNGb3JLZXBsZXIiLCJzZXRHZW9BcnJvd1dLQkV4dGVuc2lvbiIsInQxIiwiZmluaXNoIiwidGFibGUiLCJjbG9zZSIsInQyIiwiRGF0ZSIsIm5vdyIsInN0b3AiLCJvbkNoYW5nZSIsIm9uQWRkUmVzdWx0VG9NYXAiLCJrZXBsZXJGaWVsZHMiLCJhcnJvd1NjaGVtYVRvRmllbGRzIiwiZGF0YXNldFRvQWRkIiwiZGF0YSIsImZpZWxkcyIsInJvd3MiLCJpbmZvIiwiaWQiLCJnZW5lcmF0ZUhhc2hJZCIsImxhYmVsIiwiZm9ybWF0IiwiYWRkRGF0YVRvTWFwIiwiZGF0YXNldHMiLCJpc1ZhbGlkRmlsZVR5cGUiLCJmaWxlbmFtZSIsImZpbGVFeHQiLCJTVVBQT1JURURfRFVDS0RCX0RST1BfRVhURU5TSU9OUyIsImZpbmQiLCJleHQiLCJlbmRzV2l0aCIsIkJvb2xlYW4iLCJjcmVhdGVUYWJsZUZyb21Ecm9wcGVkRmlsZSIsIl9yZWYzIiwiX2NhbGxlZTIiLCJfZXJyb3IiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJ0YWJsZUZyb21GaWxlIiwiX3giLCJhcHBseSIsImFyZ3VtZW50cyIsImhhbmRsZUZpbGVJbnB1dCIsImZpbGVMaXN0IiwiZXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsImZpbGVzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsImZpbHRlciIsImRpc2FibGVFeHRlbnNpb25GaWx0ZXIiLCJmaWxlc1RvTG9hZCIsImVycm9yRmlsZXMiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwiZmlsZSIsInB1c2giLCJlcnIiLCJqb2luIiwiY3JlYXRlRWxlbWVudCIsIlBhbmVsR3JvdXAiLCJkaXJlY3Rpb24iLCJQYW5lbCIsImRlZmF1bHRTaXplIiwibWluU2l6ZSIsInN0eWxlIiwiY2xhc3NOYW1lIiwib25EcmFnT3ZlciIsIm9uRHJhZ0xlYXZlIiwiZnJhbWUiLCJjdXJyZW50IiwiZG9jdW1lbnQiLCJvbkRyb3AiLCJTY2hlbWFQYW5lbCIsIkljb25CdXR0b24iLCJvbkNsaWNrIiwiZGlzYWJsZWQiLCJJY29ucyIsIlBsYXkiLCJoZWlnaHQiLCJUb29sdGlwIiwicGxhY2UiLCJlZmZlY3QiLCJpc1JlYWRPbmx5Iiwib25SdW5RdWVyeSIsImNvZGUiLCJMb2FkaW5nU3Bpbm5lciIsIm1lc3NhZ2UiLCJCdXR0b24iLCJzZWNvbmRhcnkiLCJudW1Sb3dzIiwiUHJldmlld0RhdGFQYW5lbCIsImRhdGFUYWJsZVN0eWxlIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc3FsLXBhbmVsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IFJlYWN0LCB7dXNlQ2FsbGJhY2ssIHVzZVN0YXRlLCB1c2VFZmZlY3QsIHVzZVJlZn0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VEaXNwYXRjaH0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge1BhbmVsLCBQYW5lbEdyb3VwLCBQYW5lbFJlc2l6ZUhhbmRsZX0gZnJvbSAncmVhY3QtcmVzaXphYmxlLXBhbmVscyc7XG5cbmltcG9ydCB7YWRkRGF0YVRvTWFwfSBmcm9tICdAa2VwbGVyLmdsL2FjdGlvbnMnO1xuaW1wb3J0IHtnZW5lcmF0ZUhhc2hJZH0gZnJvbSAnQGtlcGxlci5nbC9jb21tb24tdXRpbHMnO1xuaW1wb3J0IHtCdXR0b24sIEZpbGVEcm9wLCBJY29uQnV0dG9uLCBJY29ucywgTG9hZGluZ1NwaW5uZXIsIFRvb2x0aXB9IGZyb20gJ0BrZXBsZXIuZ2wvY29tcG9uZW50cyc7XG5pbXBvcnQge2Fycm93U2NoZW1hVG9GaWVsZHN9IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5pbXBvcnQge3NpZGVQYW5lbEJnLCBwYW5lbEJvcmRlckNvbG9yfSBmcm9tICdAa2VwbGVyLmdsL3N0eWxlcyc7XG5pbXBvcnQge2lzQXBwbGVEZXZpY2UsIGdldEFwcGxpY2F0aW9uQ29uZmlnfSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IE1vbmFjb0VkaXRvciBmcm9tICcuL21vbmFjby1lZGl0b3InO1xuaW1wb3J0IHtTY2hlbWFQYW5lbCwgU2NoZW1hU3VnZ2VzdGlvbn0gZnJvbSAnLi9zY2hlbWEtcGFuZWwnO1xuaW1wb3J0IHtQcmV2aWV3RGF0YVBhbmVsLCBRdWVyeVJlc3VsdH0gZnJvbSAnLi9wcmV2aWV3LWRhdGEtcGFuZWwnO1xuXG5pbXBvcnQge1xuICBjYXN0RHVja0RCVHlwZXNGb3JLZXBsZXIsXG4gIGdldER1Y2tEQkNvbHVtblR5cGVzLFxuICBnZXREdWNrREJDb2x1bW5UeXBlc01hcCxcbiAgc2V0R2VvQXJyb3dXS0JFeHRlbnNpb24sXG4gIHNwbGl0U3FsU3RhdGVtZW50cyxcbiAgY2hlY2tJc1NlbGVjdFF1ZXJ5LFxuICByZW1vdmVTUUxDb21tZW50cyxcbiAgdGFibGVGcm9tRmlsZSxcbiAgU1VQUE9SVEVEX0RVQ0tEQl9EUk9QX0VYVEVOU0lPTlNcbn0gZnJvbSAnLi4vdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzJztcblxuY29uc3QgU3R5bGVkU3FsUGFuZWwgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIGJhY2tncm91bmQtY29sb3I6ICR7c2lkZVBhbmVsQmd9O1xuICBib3JkZXItbGVmdDogMXB4IHNvbGlkICMzMzM7XG5gO1xuXG5jb25zdCBTdHlsZWRTcWxBY3Rpb25zID0gc3R5bGVkLmRpdmBcbiAgZmxleDogMCAwIDUwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIHBhZGRpbmctdG9wOiAxMnB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzO1xuYDtcblxuY29uc3QgU3R5bGVkU3FsRWRpdG9yID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgZmxleDogMTtcbiAgbWluLXdpZHRoOiAwOyAvLyBQcmV2ZW50cyBmbGV4IGNoaWxkIGZyb20gb3ZlcmZsb3dpbmdcbiAgaGVpZ2h0OiAxMDAlO1xuYDtcblxuY29uc3QgU3R5bGVkRWRpdG9yUGFuZWwgPSBzdHlsZWQuZGl2YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAke3NpZGVQYW5lbEJnfTtcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiAxMDAlO1xuICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICBnYXA6IDVweDtcbiAgZmxleC1ncm93OiAxO1xuYDtcblxuY29uc3QgU3R5bGVkRGF0YVBhbmVsID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgaGVpZ2h0OiAxMDAlO1xuICBiYWNrZ3JvdW5kOiB3aGl0ZTtcbmA7XG5cbmNvbnN0IFN0eWxlZEVkaXRvciA9IHN0eWxlZC5kaXY8e2lzUnVubmluZzogYm9vbGVhbn0+YFxuICBkaXNwbGF5OiBmbGV4O1xuICBwYWRkaW5nOiAxMnB4IDEycHggMTJweCAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMzAsIDMwLCAzMCk7XG4gIG9wYWNpdHk6ICR7cHJvcHMgPT4gKHByb3BzLmlzUnVubmluZyA/IDAuNSA6IDEpfTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgbWluLWhlaWdodDogMDsgLy8gUHJldmVudHMgZmxleCBjaGlsZCBmcm9tIG92ZXJmbG93aW5nXG5gO1xuXG5jb25zdCBTdHlsZWRSZXN1bHRBY3Rpb25zID0gc3R5bGVkLmRpdmBcbiAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDJweCAxMnB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbmA7XG5cbmNvbnN0IFN0eWxlZFJlc2l6ZUhhbmRsZSA9IHN0eWxlZChQYW5lbFJlc2l6ZUhhbmRsZSlgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cGFuZWxCb3JkZXJDb2xvcn07XG4gIHdpZHRoOiA0cHg7XG4gIGN1cnNvcjogY29sLXJlc2l6ZTtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTU1O1xuICB9XG5gO1xuXG5jb25zdCBTdHlsZWRWZXJ0aWNhbFJlc2l6ZUhhbmRsZSA9IHN0eWxlZChQYW5lbFJlc2l6ZUhhbmRsZSlgXG4gIGJhY2tncm91bmQtY29sb3I6ICR7cGFuZWxCb3JkZXJDb2xvcn07XG4gIGhlaWdodDogNHB4O1xuICBjdXJzb3I6IHJvdy1yZXNpemU7XG5cbiAgJjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzU1NTtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkTG9hZGluZ0NvbnRhaW5lciA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IDEwMCU7XG5gO1xuXG5jb25zdCBTdHlsZWRFcnJvckNvbnRhaW5lciA9IHN0eWxlZC5wcmVgXG4gIHBhZGRpbmc6IDEycHg7XG4gIGNvbG9yOiByZWQ7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogJHtzaWRlUGFuZWxCZ307XG4gIGhlaWdodDogMTAwJTtcbiAgb3ZlcmZsb3c6IGF1dG87XG5gO1xuXG5pbnRlcmZhY2UgU3R5bGVkRHJhZ1BhbmVsUHJvcHMge1xuICBkcmFnT3Zlcj86IGJvb2xlYW47XG59XG5cbmNvbnN0IFN0eWxlZEZpbGVEcm9wQXJlYSA9IHN0eWxlZChGaWxlRHJvcCk8U3R5bGVkRHJhZ1BhbmVsUHJvcHM+YFxuICBoZWlnaHQ6IDEwMCU7XG4gIGJvcmRlci13aWR0aDogMXB4O1xuICBib3JkZXI6IDFweCAke3Byb3BzID0+IChwcm9wcy5kcmFnT3ZlciA/ICdzb2xpZCcgOiAnZGFzaGVkJyl9XG4gICAgJHtwcm9wcyA9PiAocHJvcHMuZHJhZ092ZXIgPyBwcm9wcy50aGVtZS5zdWJ0ZXh0Q29sb3JMVCA6ICd0cmFuc3BhcmVudCcpfTtcbiAgLmZpbGUtZHJvcC10YXJnZXQge1xuICAgIGhlaWdodDogMTAwJTtcbiAgfVxuYDtcblxudHlwZSBTcWxQYW5lbFByb3BzID0ge1xuICBpbml0aWFsU3FsPzogc3RyaW5nO1xufTtcblxuY29uc3QgU0NIRU1BX1BBTkVMX1NUWUxFID0ge292ZXJmbG93OiAnYXV0byd9O1xuXG5leHBvcnQgY29uc3QgU3FsUGFuZWw6IFJlYWN0LkZDPFNxbFBhbmVsUHJvcHM+ID0gKHtpbml0aWFsU3FsID0gJyd9KSA9PiB7XG4gIGNvbnN0IFtzcWwsIHNldFNxbF0gPSB1c2VTdGF0ZSgoKSA9PiB7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcbiAgICByZXR1cm4gcGFyYW1zLmdldCgnc3FsJykgfHwgaW5pdGlhbFNxbDtcbiAgfSk7XG4gIGNvbnN0IFtkcm9wcGVkRmlsZSwgc2V0RHJvcHBlZEZpbGVdID0gdXNlU3RhdGU8RmlsZSB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbZHJhZ1N0YXRlLCBzZXREcmFnU3RhdGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbcmVzdWx0LCBzZXRSZXN1bHRdID0gdXNlU3RhdGU8bnVsbCB8IFF1ZXJ5UmVzdWx0PihudWxsKTtcbiAgY29uc3QgW3NjaGVtYVVwZGF0ZVRyaWdnZXIsIHNldFNjaGVtYVVwZGF0ZVRyaWdnZXJdID0gdXNlU3RhdGU8bnVtYmVyPigwKTtcbiAgY29uc3QgW2Vycm9yLCBzZXRFcnJvcl0gPSB1c2VTdGF0ZTxFcnJvciB8IG51bGw+KG51bGwpO1xuICBjb25zdCBbY291bnRlciwgc2V0Q291bnRlcl0gPSB1c2VTdGF0ZSgwKTtcbiAgY29uc3QgW3RhYmxlU2NoZW1hLCBzZXRUYWJsZVNjaGVtYV0gPSB1c2VTdGF0ZTxTY2hlbWFTdWdnZXN0aW9uW10+KFtdKTtcbiAgY29uc3QgW2lzUnVubmluZywgc2V0SXNSdW5uaW5nXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzTWFjXSA9IHVzZVN0YXRlKCgpID0+IGlzQXBwbGVEZXZpY2UoKSk7XG4gIGNvbnN0IGRpc3BhdGNoID0gdXNlRGlzcGF0Y2goKTtcblxuICBjb25zdCBkcm9wcGVkRmlsZUFyZWFSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjb25zdCBjdXJyZW50VXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgaWYgKHNxbCkge1xuICAgICAgY3VycmVudFVybC5zZWFyY2hQYXJhbXMuc2V0KCdzcWwnLCBzcWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50VXJsLnNlYXJjaFBhcmFtcy5kZWxldGUoJ3NxbCcpO1xuICAgIH1cbiAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sICcnLCBjdXJyZW50VXJsLnRvU3RyaW5nKCkpO1xuICB9LCBbc3FsXSk7XG5cbiAgY29uc3QgcnVuUXVlcnkgPSB1c2VDYWxsYmFjayhhc3luYyAoKSA9PiB7XG4gICAgc2V0SXNSdW5uaW5nKHRydWUpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBhZGp1c3RlZFF1ZXJ5ID0gc3FsID8gcmVtb3ZlU1FMQ29tbWVudHMoc3FsKSA6IG51bGw7XG4gICAgICBpZiAoIWFkanVzdGVkUXVlcnkpIHtcbiAgICAgICAgc2V0RXJyb3IobmV3IEVycm9yKCdRdWVyeSBpcyBlbXB0eScpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBkYiA9IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZGF0YWJhc2U7XG4gICAgICBpZiAoIWRiKSB7XG4gICAgICAgIHNldEVycm9yKG5ldyBFcnJvcignVGhlIGRhdGFiYXNlIGlzIG5vdCBjb25maWd1cmVkIHByb3Blcmx5LicpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgY29ubmVjdGlvbiA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcblxuICAgICAgLy8gVE9ETyBmaW5kIGEgY2hlYXAgd2F5IHRvIGdldCBEdWNrRGIgdHlwZXMgd2l0aCBhIHNpbmdsZSBxdWVyeSB0byBhIHJlbW90ZSByZXNvdXJjZSAtIHRlbXAgdGFibGU/IGN0ZT9cbiAgICAgIGNvbnN0IHRlbXBUYWJsZU5hbWUgPSAndGVtcF9rZXBsZXJnbF90YWJsZSc7XG5cbiAgICAgIC8vIHJlbW92ZSBjb21tZW50c1xuICAgICAgY29uc3Qgc3FsU3RhdGVtZW50cyA9IHNwbGl0U3FsU3RhdGVtZW50cyhhZGp1c3RlZFF1ZXJ5KTtcblxuICAgICAgbGV0IGFycm93UmVzdWx0OiBhcnJvdy5UYWJsZSB8IG51bGwgPSBudWxsO1xuICAgICAgbGV0IHRhYmxlRHVja0RCVHlwZXMgPSB7fTtcblxuICAgICAgZm9yIChjb25zdCBzdGF0ZW1lbnQgb2Ygc3FsU3RhdGVtZW50cykge1xuICAgICAgICBjb25zdCBpc0xhc3RRdWVyeSA9IHN0YXRlbWVudCA9PT0gc3FsU3RhdGVtZW50c1tzcWxTdGF0ZW1lbnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAoaXNMYXN0UXVlcnkgJiYgKGF3YWl0IGNoZWNrSXNTZWxlY3RRdWVyeShjb25uZWN0aW9uLCBzdGF0ZW1lbnQpKSkge1xuICAgICAgICAgIC8vIDEpIGNyZWF0ZSB0ZW1wIHRhYmxlIGZyb20gdGhlIG9yaWdpbmFsIHF1ZXJ5LlxuICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoYENSRUFURSBPUiBSRVBMQUNFIFRBQkxFICcke3RlbXBUYWJsZU5hbWV9JyBBUyAke3N0YXRlbWVudH1gKTtcblxuICAgICAgICAgIC8vIDIpIHF1ZXJ5IGR1Y2tkYiB0eXBlcyBhbmQgZGV0ZWN0IGNhbmRpZGF0ZSBjb2x1bW5zIGZvciBTVF9hc1dLQiB0cmFuc2Zvcm0uXG4gICAgICAgICAgY29uc3QgZHVja0RiQ29sdW1ucyA9IGF3YWl0IGdldER1Y2tEQkNvbHVtblR5cGVzKGNvbm5lY3Rpb24sIHRlbXBUYWJsZU5hbWUpO1xuICAgICAgICAgIHRhYmxlRHVja0RCVHlwZXMgPSBnZXREdWNrREJDb2x1bW5UeXBlc01hcChkdWNrRGJDb2x1bW5zKTtcblxuICAgICAgICAgIC8vIDMpIGNhc3QgR0VPTUVUUlkgY29sdW1ucyB0byBXS0IgYW5kIEJpZ0ludCB0byBkb3VibGUuXG4gICAgICAgICAgY29uc3QgYWRqdXN0ZWRRdWVyeSA9IGNhc3REdWNrREJUeXBlc0ZvcktlcGxlcih0ZW1wVGFibGVOYW1lLCBkdWNrRGJDb2x1bW5zKTtcbiAgICAgICAgICBhcnJvd1Jlc3VsdCA9IGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoYWRqdXN0ZWRRdWVyeSk7XG5cbiAgICAgICAgICAvLyA0KSBzZXQgZ2VvYXJyb3cgZXh0ZW5zaW9uIGZvciB0aGUgYXJyb3cgdGFibGUgYXMgRHVja0RCIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZ2VvYXJyb3cgZXh0ZW5zaW9uLlxuICAgICAgICAgIHNldEdlb0Fycm93V0tCRXh0ZW5zaW9uKGFycm93UmVzdWx0LCBkdWNrRGJDb2x1bW5zKTtcblxuICAgICAgICAgIC8vIDUpIHJlbW92ZSB0ZW1wIHRhYmxlXG4gICAgICAgICAgYXdhaXQgY29ubmVjdGlvbi5xdWVyeShgRFJPUCBUQUJMRSAke3RlbXBUYWJsZU5hbWV9O2ApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoc3RhdGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBTaG93IHByZXZpZXcgb25seSBmb3IgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBxdWVyeVxuICAgICAgaWYgKGFycm93UmVzdWx0KSB7XG4gICAgICAgIHNldFJlc3VsdCh7dGFibGU6IGFycm93UmVzdWx0LCB0YWJsZUR1Y2tEQlR5cGVzfSk7XG4gICAgICAgIHNldEVycm9yKG51bGwpO1xuICAgICAgfVxuXG4gICAgICBhd2FpdCBjb25uZWN0aW9uLmNsb3NlKCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgc2V0RXJyb3IoZSBhcyBFcnJvcik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHNldElzUnVubmluZyhmYWxzZSk7XG4gICAgfVxuXG4gICAgLy8gSW5kaWNhdGUgdGhhdCB0aGVyZSBtYXkgYmUgYSBwb3NzaWJsZSBjaGFuZ2UgaW4gRHVja0RCLlxuICAgIHNldFNjaGVtYVVwZGF0ZVRyaWdnZXIoRGF0ZS5ub3coKSk7XG4gIH0sIFtzcWxdKTtcblxuICBjb25zdCBvbkNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIHZhbHVlID0+IHtcbiAgICAgIHNldFNxbCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0U3FsXVxuICApO1xuXG4gIGNvbnN0IG9uQWRkUmVzdWx0VG9NYXAgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFyZXN1bHQpIHJldHVybjtcblxuICAgIGNvbnN0IGtlcGxlckZpZWxkcyA9IGFycm93U2NoZW1hVG9GaWVsZHMocmVzdWx0LnRhYmxlLCByZXN1bHQudGFibGVEdWNrREJUeXBlcyk7XG5cbiAgICBjb25zdCBkYXRhc2V0VG9BZGQgPSB7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIGZpZWxkczoga2VwbGVyRmllbGRzLFxuICAgICAgICAvLyBUT0RPIHR5cGUgQWRkRGF0YVRvTWFwUGF5bG9hZCAtPiByb3dzIC0+ICsgYXJyb3cuVGFibGVcbiAgICAgICAgcm93czogcmVzdWx0LnRhYmxlIGFzIGFueVxuICAgICAgfSxcbiAgICAgIGluZm86IHtcbiAgICAgICAgaWQ6IGdlbmVyYXRlSGFzaElkKCksXG4gICAgICAgIGxhYmVsOiBgcXVlcnlfcmVzdWx0JHtjb3VudGVyID4gMCA/IGBfJHtjb3VudGVyfWAgOiAnJ31gLFxuICAgICAgICBmb3JtYXQ6ICdhcnJvdydcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGlzcGF0Y2goYWRkRGF0YVRvTWFwKHtkYXRhc2V0czogW2RhdGFzZXRUb0FkZF19KSk7XG4gICAgc2V0Q291bnRlcihjb3VudGVyICsgMSk7XG4gIH0sIFtyZXN1bHQsIGNvdW50ZXIsIGRpc3BhdGNoXSk7XG5cbiAgY29uc3QgaXNWYWxpZEZpbGVUeXBlID0gdXNlQ2FsbGJhY2soZmlsZW5hbWUgPT4ge1xuICAgIGNvbnN0IGZpbGVFeHQgPSBTVVBQT1JURURfRFVDS0RCX0RST1BfRVhURU5TSU9OUy5maW5kKGV4dCA9PiBmaWxlbmFtZS5lbmRzV2l0aChleHQpKTtcbiAgICByZXR1cm4gQm9vbGVhbihmaWxlRXh0KTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGNyZWF0ZVRhYmxlRnJvbURyb3BwZWRGaWxlID0gdXNlQ2FsbGJhY2soYXN5bmMgKGRyb3BwZWRGaWxlOiBGaWxlIHwgbnVsbCkgPT4ge1xuICAgIGlmIChkcm9wcGVkRmlsZSkge1xuICAgICAgY29uc3QgZXJyb3IgPSBhd2FpdCB0YWJsZUZyb21GaWxlKGRyb3BwZWRGaWxlKTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBzZXRFcnJvcihlcnJvcik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRFcnJvcihudWxsKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzZXREcm9wcGVkRmlsZShudWxsKTtcbiAgICBzZXREcmFnU3RhdGUoZmFsc2UpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBjcmVhdGVUYWJsZUZyb21Ecm9wcGVkRmlsZShkcm9wcGVkRmlsZSk7XG4gIH0sIFtkcm9wcGVkRmlsZSwgY3JlYXRlVGFibGVGcm9tRHJvcHBlZEZpbGVdKTtcblxuICBjb25zdCBoYW5kbGVGaWxlSW5wdXQgPSB1c2VDYWxsYmFjayhcbiAgICAoZmlsZUxpc3Q6IEZpbGVMaXN0LCBldmVudDogRHJhZ0V2ZW50KSA9PiB7XG4gICAgICBpZiAoZXZlbnQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVzID0gWy4uLmZpbGVMaXN0XS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAgIGNvbnN0IGRpc2FibGVFeHRlbnNpb25GaWx0ZXIgPSBmYWxzZTtcblxuICAgICAgY29uc3QgZmlsZXNUb0xvYWQ6IEZpbGVbXSA9IFtdO1xuICAgICAgY29uc3QgZXJyb3JGaWxlczogc3RyaW5nW10gPSBbXTtcbiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiBmaWxlcykge1xuICAgICAgICBpZiAoZGlzYWJsZUV4dGVuc2lvbkZpbHRlciB8fCBpc1ZhbGlkRmlsZVR5cGUoZmlsZS5uYW1lKSkge1xuICAgICAgICAgIGZpbGVzVG9Mb2FkLnB1c2goZmlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZXJyb3JGaWxlcy5wdXNoKGZpbGUubmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbGVzVG9Mb2FkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2V0RHJvcHBlZEZpbGUoZmlsZXNUb0xvYWRbMF0pO1xuICAgICAgfSBlbHNlIGlmIChlcnJvckZpbGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgc2V0RXJyb3IobmV3IEVycm9yKGBVbnN1cHBvcnRlZCBmaWxlIGZvcm1hdHM6ICR7ZXJyb3JGaWxlcy5qb2luKCcsICcpfWApKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtpc1ZhbGlkRmlsZVR5cGVdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkU3FsUGFuZWw+XG4gICAgICA8UGFuZWxHcm91cCBkaXJlY3Rpb249XCJob3Jpem9udGFsXCI+XG4gICAgICAgIDxQYW5lbCBkZWZhdWx0U2l6ZT17MjB9IG1pblNpemU9ezE1fSBzdHlsZT17U0NIRU1BX1BBTkVMX1NUWUxFfSBjbGFzc05hbWU9XCJzY2hlbWEtcGFuZWxcIj5cbiAgICAgICAgICA8U3R5bGVkRmlsZURyb3BBcmVhXG4gICAgICAgICAgICBkcmFnT3Zlcj17ZHJhZ1N0YXRlfVxuICAgICAgICAgICAgb25EcmFnT3Zlcj17KCkgPT4gc2V0RHJhZ1N0YXRlKHRydWUpfVxuICAgICAgICAgICAgb25EcmFnTGVhdmU9eygpID0+IHNldERyYWdTdGF0ZShmYWxzZSl9XG4gICAgICAgICAgICBmcmFtZT17ZHJvcHBlZEZpbGVBcmVhUmVmLmN1cnJlbnQgfHwgZG9jdW1lbnR9XG4gICAgICAgICAgICBvbkRyb3A9e2hhbmRsZUZpbGVJbnB1dH1cbiAgICAgICAgICAgIGNsYXNzTmFtZT1cImZpbGUtdXBsb2FkZXJfX2ZpbGUtZHJvcFwiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNjaGVtYVBhbmVsXG4gICAgICAgICAgICAgIHNldFRhYmxlU2NoZW1hPXtzZXRUYWJsZVNjaGVtYX1cbiAgICAgICAgICAgICAgZHJvcHBlZEZpbGU9e2Ryb3BwZWRGaWxlfVxuICAgICAgICAgICAgICBzY2hlbWFVcGRhdGVUcmlnZ2VyPXtzY2hlbWFVcGRhdGVUcmlnZ2VyfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L1N0eWxlZEZpbGVEcm9wQXJlYT5cbiAgICAgICAgPC9QYW5lbD5cblxuICAgICAgICA8U3R5bGVkUmVzaXplSGFuZGxlIC8+XG5cbiAgICAgICAgPFBhbmVsIG1pblNpemU9ezQwfT5cbiAgICAgICAgICA8U3R5bGVkU3FsRWRpdG9yPlxuICAgICAgICAgICAgPFBhbmVsR3JvdXAgZGlyZWN0aW9uPVwidmVydGljYWxcIj5cbiAgICAgICAgICAgICAgPFBhbmVsIGRlZmF1bHRTaXplPXszMH0gY2xhc3NOYW1lPVwiZWRpdG9yLXBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPFN0eWxlZEVkaXRvclBhbmVsPlxuICAgICAgICAgICAgICAgICAgPFN0eWxlZFNxbEFjdGlvbnM+XG4gICAgICAgICAgICAgICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgZGF0YS10aXBcbiAgICAgICAgICAgICAgICAgICAgICBkYXRhLWZvcj1cInJ1bi1xdWVyeS10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXtydW5RdWVyeX1cbiAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZD17aXNSdW5uaW5nIHx8ICFzcWx9XG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbnMuUGxheSBoZWlnaHQ9XCIxOHB4XCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICA8VG9vbHRpcCBpZD1cInJ1bi1xdWVyeS10b29sdGlwXCIgcGxhY2U9XCJ0b3BcIiBlZmZlY3Q9XCJzb2xpZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgUnVuIFF1ZXJ5ICh7aXNNYWMgPyAn4oyYRW50ZXInIDogJ0N0cmwrRW50ZXInfSBvciBTaGlmdCtFbnRlcilcbiAgICAgICAgICAgICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICAgICAgICAgICAgIDwvSWNvbkJ1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkU3FsQWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRFZGl0b3IgaXNSdW5uaW5nPXtpc1J1bm5pbmd9PlxuICAgICAgICAgICAgICAgICAgICA8TW9uYWNvRWRpdG9yXG4gICAgICAgICAgICAgICAgICAgICAgaXNSZWFkT25seT17aXNSdW5uaW5nfVxuICAgICAgICAgICAgICAgICAgICAgIG9uUnVuUXVlcnk9e3J1blF1ZXJ5fVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtvbkNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICB0YWJsZVNjaGVtYT17dGFibGVTY2hlbWF9XG4gICAgICAgICAgICAgICAgICAgICAgY29kZT17c3FsfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRFZGl0b3I+XG4gICAgICAgICAgICAgICAgPC9TdHlsZWRFZGl0b3JQYW5lbD5cbiAgICAgICAgICAgICAgPC9QYW5lbD5cblxuICAgICAgICAgICAgICA8U3R5bGVkVmVydGljYWxSZXNpemVIYW5kbGUgLz5cbiAgICAgICAgICAgICAgPFBhbmVsIGNsYXNzTmFtZT1cInByZXZpZXctcGFuZWxcIj5cbiAgICAgICAgICAgICAgICB7aXNSdW5uaW5nID8gKFxuICAgICAgICAgICAgICAgICAgPFN0eWxlZExvYWRpbmdDb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxMb2FkaW5nU3Bpbm5lciAvPlxuICAgICAgICAgICAgICAgICAgPC9TdHlsZWRMb2FkaW5nQ29udGFpbmVyPlxuICAgICAgICAgICAgICAgICkgOiBlcnJvciA/IChcbiAgICAgICAgICAgICAgICAgIDxTdHlsZWRFcnJvckNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdj57ZXJyb3IubWVzc2FnZX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkRXJyb3JDb250YWluZXI+XG4gICAgICAgICAgICAgICAgKSA6IHJlc3VsdCA/IChcbiAgICAgICAgICAgICAgICAgIDxTdHlsZWREYXRhUGFuZWw+XG4gICAgICAgICAgICAgICAgICAgIDxTdHlsZWRSZXN1bHRBY3Rpb25zPlxuICAgICAgICAgICAgICAgICAgICAgIDxCdXR0b24gc2Vjb25kYXJ5IG9uQ2xpY2s9e29uQWRkUmVzdWx0VG9NYXB9PlxuICAgICAgICAgICAgICAgICAgICAgICAgQWRkIHRvIE1hcFxuICAgICAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgIDxkaXY+e3Jlc3VsdC50YWJsZS5udW1Sb3dzfSByb3dzPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvU3R5bGVkUmVzdWx0QWN0aW9ucz5cbiAgICAgICAgICAgICAgICAgICAgPFByZXZpZXdEYXRhUGFuZWxcbiAgICAgICAgICAgICAgICAgICAgICByZXN1bHQ9e3Jlc3VsdH1cbiAgICAgICAgICAgICAgICAgICAgICBkYXRhVGFibGVTdHlsZT17e319XG4gICAgICAgICAgICAgICAgICAgICAgb25BZGRSZXN1bHRUb01hcD17b25BZGRSZXN1bHRUb01hcH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvU3R5bGVkRGF0YVBhbmVsPlxuICAgICAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgICAgICA8L1BhbmVsPlxuICAgICAgICAgICAgPC9QYW5lbEdyb3VwPlxuICAgICAgICAgIDwvU3R5bGVkU3FsRWRpdG9yPlxuICAgICAgICA8L1BhbmVsPlxuICAgICAgPC9QYW5lbEdyb3VwPlxuICAgIDwvU3R5bGVkU3FsUGFuZWw+XG4gICk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBSUEsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBQ0EsSUFBQUMsV0FBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLHFCQUFBLEdBQUFKLE9BQUE7QUFFQSxJQUFBSyxRQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxZQUFBLEdBQUFOLE9BQUE7QUFDQSxJQUFBTyxXQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxXQUFBLEdBQUFSLE9BQUE7QUFDQSxJQUFBUyxPQUFBLEdBQUFULE9BQUE7QUFDQSxJQUFBVSxNQUFBLEdBQUFWLE9BQUE7QUFFQSxJQUFBVyxhQUFBLEdBQUFSLHNCQUFBLENBQUFILE9BQUE7QUFDQSxJQUFBWSxZQUFBLEdBQUFaLE9BQUE7QUFDQSxJQUFBYSxpQkFBQSxHQUFBYixPQUFBO0FBRUEsSUFBQWMsaUJBQUEsR0FBQWQsT0FBQTtB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QUEsQ0FBQ2pMLFlBQVk7SUFBQ0UsU0FBUyxFQUFFQTtFQUFVLGdCQUNqQ25GLE1BQUEsWUFBQWtRLGFBQUEsQ0FBQ3JQLGFBQUEsV0FBWTtJQUNYNlEsVUFBVSxFQUFFdk0sU0FBVTtJQUN0QndNLFVBQVUsRUFBRTFILFFBQVM7SUFDckIrQyxRQUFRLEVBQUVBLFFBQVM7SUFDbkJuRSxXQUFXLEVBQUVBLFdBQVk7SUFDekIrSSxJQUFJLEVBQUUzSztFQUFJLENBQ1gsQ0FDVyxDQUNHLENBQ2QsQ0FBQyxlQUVSakgsTUFBQSxZQUFBa1EsYUFBQSxDQUFDMUssMEJBQTBCLE1BQUUsQ0FBQyxlQUM5QnhGLE1BQUEsWUFBQWtRLGFBQUEsQ0FBQzVQLHFCQUFBLENBQUErUCxLQUFLO0lBQUNJLFNBQVMsRUFBQztFQUFlLEdBQzdCdEwsU0FBUyxnQkFDUm5GLE1BQUEsWUFBQWtRLGFBQUEsQ0FBQ3pLLHNCQUFzQixxQkFDckJ6RixNQUFBLFlBQUFrUSxhQUFBLENBQUN6UCxXQUFBLENBQUFvUixjQUFjLE1BQUUsQ0FDSyxDQUFDLEdBQ3ZCeEosS0FBSyxnQkFDUHJJLE1BQUEsWUFBQWtRLGFBQUEsQ0FBQ3hLLG9CQUFvQixxQkFDbkIxRixNQUFBLFlBQUFrUSxhQUFBLGNBQU03SCxLQUFLLENBQUN5SixPQUFhLENBQ0wsQ0FBQyxHQUNyQmpLLE1BQU0sZ0JBQ1I3SCxNQUFBLFlBQUFrUSxhQUFBLENBQUNsTCxlQUFlLHFCQUNkaEYsTUFBQSxZQUFBa1EsYUFBQSxDQUFDOUssbUJBQW1CLHFCQUNsQnBGLE1BQUEsWUFBQWtRLGFBQUEsQ0FBQ3pQLFdBQUEsQ0FBQXNSLE1BQU07SUFBQ0MsU0FBUztJQUFDZCxPQUFPLEVBQUVqRTtFQUFpQixHQUFDLFlBRXJDLENBQUMsZUFDVGpOLE1BQUEsWUFBQWtRLGFBQUEsY0FBTXJJLE1BQU0sQ0FBQzZFLEtBQUssQ0FBQ3VGLE9BQU8sRUFBQyxPQUFVLENBQ2xCLENBQUMsZUFDdEJqUyxNQUFBLFlBQUFrUSxhQUFBLENBQUNuUCxpQkFBQSxDQUFBbVIsZ0JBQWdCO0lBQ2ZySyxNQUFNLEVBQUVBLE1BQU87SUFDZnNLLGNBQWMsRUFBRSxDQUFDLENBQUU7SUFDbkJsRixnQkFBZ0IsRUFBRUE7RUFBaUIsQ0FDcEMsQ0FDYyxDQUFDLEdBQ2hCLElBQ0MsQ0FDRyxDQUNHLENBQ1osQ0FDRyxDQUNFLENBQUM7QUFFckIsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.DatasetNode = exports.ColumnNode = void 0;
9
+ exports.Tree = Tree;
10
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
11
+ var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
12
+ var _reactCollapsible = require("@radix-ui/react-collapsible");
13
+ var _styledComponents = _interopRequireDefault(require("styled-components"));
14
+ var _react = _interopRequireWildcard(require("react"));
15
+ var _classnames = _interopRequireDefault(require("classnames"));
16
+ var _components = require("@kepler.gl/components");
17
+ var _templateObject, _templateObject2, _templateObject3; // SPDX-License-Identifier: MIT
18
+ // Copyright contributors to the kepler.gl project
19
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
20
+ // TODO: consider using react-vtree/react-window for virtualization
21
+
22
+ /**
23
+ * Component that renders a generic tree.
24
+ * @param treeData - The tree data.
25
+ * @param renderNode - A function that renders a tree node.
26
+ */
27
+ function Tree(props) {
28
+ var treeData = props.treeData,
29
+ renderNode = props.renderNode;
30
+ return /*#__PURE__*/_react["default"].createElement("div", {
31
+ className: "flex flex-col"
32
+ }, /*#__PURE__*/_react["default"].createElement(TreeNode, {
33
+ treeData: treeData,
34
+ renderNode: renderNode
35
+ }));
36
+ }
37
+ var StyledCollapsibleTriggerContent = _styledComponents["default"].div(_templateObject || (_templateObject = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n width: 100%;\n cursor: pointer;\n align-items: center;\n"])));
38
+ /**
39
+ * Component that renders a tree node.
40
+ */
41
+ function TreeNode(props) {
42
+ var treeData = props.treeData,
43
+ renderNode = props.renderNode;
44
+ var children = treeData.children;
45
+ var _useState = (0, _react.useState)(Boolean(treeData.isOpen)),
46
+ _useState2 = (0, _slicedToArray2["default"])(_useState, 2),
47
+ isOpen = _useState2[0],
48
+ setIsOpen = _useState2[1];
49
+ (0, _react.useEffect)(function () {
50
+ setIsOpen(Boolean(treeData.isOpen));
51
+ }, [treeData.isOpen]);
52
+ if (!children) {
53
+ return renderNode(treeData, isOpen);
54
+ }
55
+ return /*#__PURE__*/_react["default"].createElement(_reactCollapsible.Collapsible, {
56
+ open: isOpen,
57
+ onOpenChange: setIsOpen
58
+ }, /*#__PURE__*/_react["default"].createElement(_reactCollapsible.CollapsibleTrigger, {
59
+ className: "w-full",
60
+ asChild: true
61
+ }, /*#__PURE__*/_react["default"].createElement(StyledCollapsibleTriggerContent, null, /*#__PURE__*/_react["default"].createElement(_components.Icons.ArrowRight, {
62
+ className: (0, _classnames["default"])('flex-shrink-0 text-gray-500', {
63
+ 'rotate-90 transform': isOpen
64
+ }),
65
+ height: "18px"
66
+ }), renderNode(treeData, isOpen))), /*#__PURE__*/_react["default"].createElement(_reactCollapsible.CollapsibleContent, {
67
+ className: "pl-4"
68
+ }, isOpen ? children.map(function (child) {
69
+ return /*#__PURE__*/_react["default"].createElement(TreeNode, {
70
+ key: child.key,
71
+ treeData: child,
72
+ renderNode: renderNode
73
+ });
74
+ }) : null));
75
+ }
76
+ var StyledDatasetNode = _styledComponents["default"].div(_templateObject2 || (_templateObject2 = (0, _taggedTemplateLiteral2["default"])(["\n font-weight: bold;\n"])));
77
+ var DatasetNode = exports.DatasetNode = function DatasetNode(_ref) {
78
+ var node = _ref.node;
79
+ return /*#__PURE__*/_react["default"].createElement(StyledDatasetNode, null, node.object.tableName);
80
+ };
81
+ var StyledColumnNode = _styledComponents["default"].div(_templateObject3 || (_templateObject3 = (0, _taggedTemplateLiteral2["default"])(["\n display: flex;\n align-items: center;\n padding: 4px 0;\n margin-left: 16px;\n\n .column-name {\n margin-left: 8px;\n }\n"])));
82
+ var ColumnNode = exports.ColumnNode = function ColumnNode(_ref2) {
83
+ var node = _ref2.node;
84
+ return /*#__PURE__*/_react["default"].createElement(StyledColumnNode, null, /*#__PURE__*/_react["default"].createElement(_components.FieldToken, {
85
+ type: node.object.fieldType
86
+ }), /*#__PURE__*/_react["default"].createElement("div", {
87
+ className: "column-name"
88
+ }, node.object.name));
89
+ };
90
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3RDb2xsYXBzaWJsZSIsInJlcXVpcmUiLCJfc3R5bGVkQ29tcG9uZW50cyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsIl9jbGFzc25hbWVzIiwiX2NvbXBvbmVudHMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsImUiLCJ0IiwiV2Vha01hcCIsInIiLCJuIiwiX19lc01vZHVsZSIsIm8iLCJpIiwiZiIsIl9fcHJvdG9fXyIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJzZXQiLCJfdCIsImhhc093blByb3BlcnR5IiwiY2FsbCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiVHJlZSIsInByb3BzIiwidHJlZURhdGEiLCJyZW5kZXJOb2RlIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsIlRyZWVOb2RlIiwiU3R5bGVkQ29sbGFwc2libGVUcmlnZ2VyQ29udGVudCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwiY2hpbGRyZW4iLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIkJvb2xlYW4iLCJpc09wZW4iLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwic2V0SXNPcGVuIiwidXNlRWZmZWN0IiwiQ29sbGFwc2libGUiLCJvcGVuIiwib25PcGVuQ2hhbmdlIiwiQ29sbGFwc2libGVUcmlnZ2VyIiwiYXNDaGlsZCIsIkljb25zIiwiQXJyb3dSaWdodCIsImNsYXNzTmFtZXMiLCJoZWlnaHQiLCJDb2xsYXBzaWJsZUNvbnRlbnQiLCJtYXAiLCJjaGlsZCIsImtleSIsIlN0eWxlZERhdGFzZXROb2RlIiwiRGF0YXNldE5vZGUiLCJleHBvcnRzIiwiX3JlZiIsIm5vZGUiLCJvYmplY3QiLCJ0YWJsZU5hbWUiLCJTdHlsZWRDb2x1bW5Ob2RlIiwiQ29sdW1uTm9kZSIsIl9yZWYyIiwiRmllbGRUb2tlbiIsInR5cGUiLCJmaWVsZFR5cGUiLCJuYW1lIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdHJlZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0IHtDb2xsYXBzaWJsZSwgQ29sbGFwc2libGVUcmlnZ2VyLCBDb2xsYXBzaWJsZUNvbnRlbnR9IGZyb20gJ0ByYWRpeC11aS9yZWFjdC1jb2xsYXBzaWJsZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcbmltcG9ydCBSZWFjdCwge3VzZUVmZmVjdCwgdXNlU3RhdGV9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBjbGFzc05hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuXG5pbXBvcnQge0ljb25zLCBGaWVsZFRva2VufSBmcm9tICdAa2VwbGVyLmdsL2NvbXBvbmVudHMnO1xuXG5leHBvcnQgdHlwZSBUcmVlTm9kZURhdGE8VD4gPSB7XG4gIGtleTogc3RyaW5nO1xuICBvYmplY3Q6IFQ7XG4gIGNoaWxkcmVuPzogVHJlZU5vZGVEYXRhPFQ+W107XG4gIGlzT3Blbj86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUcmVlUHJvcHM8VD4gPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgdHJlZURhdGE6IFRyZWVOb2RlRGF0YTxUPjtcbiAgcmVuZGVyTm9kZTogVHJlZU5vZGVQcm9wczxUPlsncmVuZGVyTm9kZSddO1xufTtcblxuLy8gVE9ETzogY29uc2lkZXIgdXNpbmcgcmVhY3QtdnRyZWUvcmVhY3Qtd2luZG93IGZvciB2aXJ0dWFsaXphdGlvblxuXG4vKipcbiAqIENvbXBvbmVudCB0aGF0IHJlbmRlcnMgYSBnZW5lcmljIHRyZWUuXG4gKiBAcGFyYW0gdHJlZURhdGEgLSBUaGUgdHJlZSBkYXRhLlxuICogQHBhcmFtIHJlbmRlck5vZGUgLSBBIGZ1bmN0aW9uIHRoYXQgcmVuZGVycyBhIHRyZWUgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIFRyZWU8VD4ocHJvcHM6IFRyZWVQcm9wczxUPik6IFJlYWN0LlJlYWN0RWxlbWVudCB7XG4gIGNvbnN0IHt0cmVlRGF0YSwgcmVuZGVyTm9kZX0gPSBwcm9wcztcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgIDxUcmVlTm9kZTxUPiB0cmVlRGF0YT17dHJlZURhdGF9IHJlbmRlck5vZGU9e3JlbmRlck5vZGV9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCB0eXBlIFRyZWVOb2RlUHJvcHM8VD4gPSB7XG4gIHRyZWVEYXRhOiBUcmVlTm9kZURhdGE8VD47XG4gIHJlbmRlck5vZGU6IChub2RlOiBUcmVlTm9kZURhdGE8VD4sIGlzT3BlbjogYm9vbGVhbikgPT4gSlNYLkVsZW1lbnQgfCBudWxsO1xufTtcblxuY29uc3QgU3R5bGVkQ29sbGFwc2libGVUcmlnZ2VyQ29udGVudCA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIHdpZHRoOiAxMDAlO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5gO1xuLyoqXG4gKiBDb21wb25lbnQgdGhhdCByZW5kZXJzIGEgdHJlZSBub2RlLlxuICovXG5mdW5jdGlvbiBUcmVlTm9kZTxUPihwcm9wczogVHJlZU5vZGVQcm9wczxUPik6IEpTWC5FbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IHt0cmVlRGF0YSwgcmVuZGVyTm9kZX0gPSBwcm9wcztcbiAgY29uc3Qge2NoaWxkcmVufSA9IHRyZWVEYXRhO1xuICBjb25zdCBbaXNPcGVuLCBzZXRJc09wZW5dID0gdXNlU3RhdGUoQm9vbGVhbih0cmVlRGF0YS5pc09wZW4pKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBzZXRJc09wZW4oQm9vbGVhbih0cmVlRGF0YS5pc09wZW4pKTtcbiAgfSwgW3RyZWVEYXRhLmlzT3Blbl0pO1xuICBpZiAoIWNoaWxkcmVuKSB7XG4gICAgcmV0dXJuIHJlbmRlck5vZGUodHJlZURhdGEsIGlzT3Blbik7XG4gIH1cbiAgcmV0dXJuIChcbiAgICA8Q29sbGFwc2libGUgb3Blbj17aXNPcGVufSBvbk9wZW5DaGFuZ2U9e3NldElzT3Blbn0+XG4gICAgICA8Q29sbGFwc2libGVUcmlnZ2VyIGNsYXNzTmFtZT1cInctZnVsbFwiIGFzQ2hpbGQ+XG4gICAgICAgIDxTdHlsZWRDb2xsYXBzaWJsZVRyaWdnZXJDb250ZW50PlxuICAgICAgICAgIDxJY29ucy5BcnJvd1JpZ2h0XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoJ2ZsZXgtc2hyaW5rLTAgdGV4dC1ncmF5LTUwMCcsIHsncm90YXRlLTkwIHRyYW5zZm9ybSc6IGlzT3Blbn0pfVxuICAgICAgICAgICAgaGVpZ2h0PVwiMThweFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgICB7cmVuZGVyTm9kZSh0cmVlRGF0YSwgaXNPcGVuKX1cbiAgICAgICAgPC9TdHlsZWRDb2xsYXBzaWJsZVRyaWdnZXJDb250ZW50PlxuICAgICAgPC9Db2xsYXBzaWJsZVRyaWdnZXI+XG4gICAgICA8Q29sbGFwc2libGVDb250ZW50IGNsYXNzTmFtZT1cInBsLTRcIj5cbiAgICAgICAge2lzT3BlblxuICAgICAgICAgID8gY2hpbGRyZW4ubWFwKGNoaWxkID0+IChcbiAgICAgICAgICAgICAgPFRyZWVOb2RlPFQ+IGtleT17Y2hpbGQua2V5fSB0cmVlRGF0YT17Y2hpbGR9IHJlbmRlck5vZGU9e3JlbmRlck5vZGV9IC8+XG4gICAgICAgICAgICApKVxuICAgICAgICAgIDogbnVsbH1cbiAgICAgIDwvQ29sbGFwc2libGVDb250ZW50PlxuICAgIDwvQ29sbGFwc2libGU+XG4gICk7XG59XG5cbmNvbnN0IFN0eWxlZERhdGFzZXROb2RlID0gc3R5bGVkLmRpdmBcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG5gO1xuXG5leHBvcnQgY29uc3QgRGF0YXNldE5vZGUgPSAoe25vZGV9KSA9PiB7XG4gIHJldHVybiA8U3R5bGVkRGF0YXNldE5vZGU+e25vZGUub2JqZWN0LnRhYmxlTmFtZX08L1N0eWxlZERhdGFzZXROb2RlPjtcbn07XG5cbmNvbnN0IFN0eWxlZENvbHVtbk5vZGUgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiA0cHggMDtcbiAgbWFyZ2luLWxlZnQ6IDE2cHg7XG5cbiAgLmNvbHVtbi1uYW1lIHtcbiAgICBtYXJnaW4tbGVmdDogOHB4O1xuICB9XG5gO1xuZXhwb3J0IGNvbnN0IENvbHVtbk5vZGUgPSAoe25vZGV9KSA9PiB7XG4gIHJldHVybiAoXG4gICAgPFN0eWxlZENvbHVtbk5vZGU+XG4gICAgICA8RmllbGRUb2tlbiB0eXBlPXtub2RlLm9iamVjdC5maWVsZFR5cGV9IC8+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbHVtbi1uYW1lXCI+e25vZGUub2JqZWN0Lm5hbWV9PC9kaXY+XG4gICAgPC9TdHlsZWRDb2x1bW5Ob2RlPlxuICApO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxpQkFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsaUJBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUNBLElBQUFLLFdBQUEsR0FBQUgsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFNLFdBQUEsR0FBQU4sT0FBQTtBQUF3RCxJQUFBTyxlQUFBLEVBQUFDLGdCQUFBLEVBQUFDLGdCQUFBLEVBUnhEO0FBQ0E7QUFBQSxTQUFBTCx3QkFBQU0sQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9B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
@@ -63,4 +63,4 @@ Object.keys(_dataProcessor).forEach(function (key) {
63
63
  }
64
64
  });
65
65
  });
66
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHVja2RiV2FzbUFkYXB0ZXIiLCJyZXF1aXJlIiwiX3BsdWdpbiIsIl9kdWNrZGJUYWJsZSIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiX2V4cG9ydE5hbWVzIiwiZXhwb3J0cyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsIl9kdWNrZGJUYWJsZVV0aWxzIiwiX2RhdGFQcm9jZXNzb3IiXSwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuZXhwb3J0IHtEdWNrREJXYXNtQWRhcHRlcn0gZnJvbSAnLi9hZGFwdGVycy9kdWNrZGItd2FzbS1hZGFwdGVyJztcbmV4cG9ydCB7a2VwbGVyR2xEdWNrREJQbHVnaW4sIGtlcGxlckdsRHVja0RCUGx1Z2luIGFzIGRlZmF1bHR9IGZyb20gJy4vcGx1Z2luJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUvZHVja2RiLXRhYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvY2Vzc29ycy9kYXRhLXByb2Nlc3Nvcic7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLGtCQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFBQUcsTUFBQSxDQUFBQyxJQUFBLENBQUFGLFlBQUEsRUFBQUcsT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFILE1BQUEsQ0FBQUksU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQUMsWUFBQSxFQUFBSixHQUFBO0VBQUEsSUFBQUEsR0FBQSxJQUFBSyxPQUFBLElBQUFBLE9BQUEsQ0FBQUwsR0FBQSxNQUFBSixZQUFBLENBQUFJLEdBQUE7RUFBQUgsTUFBQSxDQUFBUyxjQUFBLENBQUFELE9BQUEsRUFBQUwsR0FBQTtJQUFBTyxVQUFBO0lBQUFDLEdBQUEsV0FBQUEsSUFBQTtNQUFBLE9BQUFaLFlBQUEsQ0FBQUksR0FBQTtJQUFBO0VBQUE7QUFBQTtBQUNBLElBQUFTLGlCQUFBLEdBQUFmLE9BQUE7QUFBQUcsTUFBQSxDQUFBQyxJQUFBLENBQUFXLGlCQUFBLEVBQUFWLE9BQUEsV0FBQUMsR0FBQTtFQUFBLElBQUFBLEdBQUEsa0JBQUFBLEdBQUE7RUFBQSxJQUFBSCxNQUFBLENBQUFJLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFDLFlBQUEsRUFBQUosR0FBQTtFQUFBLElBQUFBLEdBQUEsSUFBQUssT0FBQSxJQUFBQSxPQUFBLENBQUFMLEdBQUEsTUFBQVMsaUJBQUEsQ0FBQVQsR0FBQTtFQUFBSCxNQUFBLENBQUFTLGNBQUEsQ0FBQUQsT0FBQSxFQUFBTCxHQUFBO0lBQUFPLFVBQUE7SUFBQUMsR0FBQSxXQUFBQSxJQUFBO01BQUEsT0FBQUMsaUJBQUEsQ0FBQVQsR0FBQTtJQUFBO0VBQUE7QUFBQTtBQUNBLElBQUFVLGNBQUEsR0FBQWhCLE9BQUE7QUFBQUcsTUFBQSxDQUFBQyxJQUFBLENBQUFZLGNBQUEsRUFBQVgsT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFILE1BQUEsQ0FBQUksU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQUMsWUFBQSxFQUFBSixHQUFBO0VBQUEsSUFBQUEsR0FBQSxJQUFBSyxPQUFBLElBQUFBLE9BQUEsQ0FBQUwsR0FBQSxNQUFBVSxjQUFBLENBQUFWLEdBQUE7RUFBQUgsTUFBQSxDQUFBUyxjQUFBLENBQUFELE9BQUEsRUFBQUwsR0FBQTtJQUFBTyxVQUFBO0lBQUFDLEdBQUEsV0FBQUEsSUFBQTtNQUFBLE9BQUFFLGNBQUEsQ0FBQVYsR0FBQTtJQUFBO0VBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
66
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHVja2RiV2FzbUFkYXB0ZXIiLCJyZXF1aXJlIiwiX3BsdWdpbiIsIl9kdWNrZGJUYWJsZSIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwia2V5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiX2V4cG9ydE5hbWVzIiwiZXhwb3J0cyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsIl9kdWNrZGJUYWJsZVV0aWxzIiwiX2RhdGFQcm9jZXNzb3IiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuZXhwb3J0IHtEdWNrREJXYXNtQWRhcHRlcn0gZnJvbSAnLi9hZGFwdGVycy9kdWNrZGItd2FzbS1hZGFwdGVyJztcbmV4cG9ydCB7a2VwbGVyR2xEdWNrREJQbHVnaW4sIGtlcGxlckdsRHVja0RCUGx1Z2luIGFzIGRlZmF1bHR9IGZyb20gJy4vcGx1Z2luJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUvZHVja2RiLXRhYmxlJztcbmV4cG9ydCAqIGZyb20gJy4vdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzJztcbmV4cG9ydCAqIGZyb20gJy4vcHJvY2Vzc29ycy9kYXRhLXByb2Nlc3Nvcic7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLGtCQUFBLEdBQUFDLE9BQUE7QUFDQSxJQUFBQyxPQUFBLEdBQUFELE9BQUE7QUFDQSxJQUFBRSxZQUFBLEdBQUFGLE9BQUE7QUFBQUcsTUFBQSxDQUFBQyxJQUFBLENBQUFGLFlBQUEsRUFBQUcsT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFILE1BQUEsQ0FBQUksU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQUMsWUFBQSxFQUFBSixHQUFBO0VBQUEsSUFBQUEsR0FBQSxJQUFBSyxPQUFBLElBQUFBLE9BQUEsQ0FBQUwsR0FBQSxNQUFBSixZQUFBLENBQUFJLEdBQUE7RUFBQUgsTUFBQSxDQUFBUyxjQUFBLENBQUFELE9BQUEsRUFBQUwsR0FBQTtJQUFBTyxVQUFBO0lBQUFDLEdBQUEsV0FBQUEsSUFBQTtNQUFBLE9BQUFaLFlBQUEsQ0FBQUksR0FBQTtJQUFBO0VBQUE7QUFBQTtBQUNBLElBQUFTLGlCQUFBLEdBQUFmLE9BQUE7QUFBQUcsTUFBQSxDQUFBQyxJQUFBLENBQUFXLGlCQUFBLEVBQUFWLE9BQUEsV0FBQUMsR0FBQTtFQUFBLElBQUFBLEdBQUEsa0JBQUFBLEdBQUE7RUFBQSxJQUFBSCxNQUFBLENBQUFJLFNBQUEsQ0FBQUMsY0FBQSxDQUFBQyxJQUFBLENBQUFDLFlBQUEsRUFBQUosR0FBQTtFQUFBLElBQUFBLEdBQUEsSUFBQUssT0FBQSxJQUFBQSxPQUFBLENBQUFMLEdBQUEsTUFBQVMsaUJBQUEsQ0FBQVQsR0FBQTtFQUFBSCxNQUFBLENBQUFTLGNBQUEsQ0FBQUQsT0FBQSxFQUFBTCxHQUFBO0lBQUFPLFVBQUE7SUFBQUMsR0FBQSxXQUFBQSxJQUFBO01BQUEsT0FBQUMsaUJBQUEsQ0FBQVQsR0FBQTtJQUFBO0VBQUE7QUFBQTtBQUNBLElBQUFVLGNBQUEsR0FBQWhCLE9BQUE7QUFBQUcsTUFBQSxDQUFBQyxJQUFBLENBQUFZLGNBQUEsRUFBQVgsT0FBQSxXQUFBQyxHQUFBO0VBQUEsSUFBQUEsR0FBQSxrQkFBQUEsR0FBQTtFQUFBLElBQUFILE1BQUEsQ0FBQUksU0FBQSxDQUFBQyxjQUFBLENBQUFDLElBQUEsQ0FBQUMsWUFBQSxFQUFBSixHQUFBO0VBQUEsSUFBQUEsR0FBQSxJQUFBSyxPQUFBLElBQUFBLE9BQUEsQ0FBQUwsR0FBQSxNQUFBVSxjQUFBLENBQUFWLEdBQUE7RUFBQUgsTUFBQSxDQUFBUyxjQUFBLENBQUFELE9BQUEsRUFBQUwsR0FBQTtJQUFBTyxVQUFBO0lBQUFDLEdBQUEsV0FBQUEsSUFBQTtNQUFBLE9BQUFFLGNBQUEsQ0FBQVYsR0FBQTtJQUFBO0VBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
@@ -26,4 +26,4 @@ var keplerGlDuckDBPlugin = exports.keplerGlDuckDBPlugin = {
26
26
  }))();
27
27
  }
28
28
  };
29
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJrZXBsZXJHbER1Y2tEQlBsdWdpbiIsImV4cG9ydHMiLCJuYW1lIiwiaW5pdCIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImNvbnNvbGUiLCJsb2ciLCJzdG9wIl0sInNvdXJjZXMiOlsiLi4vc3JjL3BsdWdpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5leHBvcnQgY29uc3Qga2VwbGVyR2xEdWNrREJQbHVnaW4gPSB7XG4gIG5hbWU6ICdkdWNrZGInLFxuICBhc3luYyBpbml0KCkge1xuICAgIGNvbnNvbGUubG9nKCdrZXBsZXIuZ2wgRHVja0RCIFBsdWdpbiBpbml0aWFsaXplZCcpO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVPLElBQU1BLG9CQUFvQixHQUFBQyxPQUFBLENBQUFELG9CQUFBLEdBQUc7RUFDbENFLElBQUksRUFBRSxRQUFRO0VBQ1JDLElBQUksV0FBSkEsSUFBSUEsQ0FBQSxFQUFHO0lBQUEsV0FBQUMsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxVQUFBQyxRQUFBO01BQUEsT0FBQUYsWUFBQSxZQUFBRyxJQUFBLFVBQUFDLFNBQUFDLFFBQUE7UUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtVQUFBO1lBQ1hDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLHFDQUFxQyxDQUFDO1VBQUM7VUFBQTtZQUFBLE9BQUFKLFFBQUEsQ0FBQUssSUFBQTtRQUFBO01BQUEsR0FBQVIsT0FBQTtJQUFBO0VBQ3JEO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==
29
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJrZXBsZXJHbER1Y2tEQlBsdWdpbiIsImV4cG9ydHMiLCJuYW1lIiwiaW5pdCIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImNvbnNvbGUiLCJsb2ciLCJzdG9wIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BsdWdpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5leHBvcnQgY29uc3Qga2VwbGVyR2xEdWNrREJQbHVnaW4gPSB7XG4gIG5hbWU6ICdkdWNrZGInLFxuICBhc3luYyBpbml0KCkge1xuICAgIGNvbnNvbGUubG9nKCdrZXBsZXIuZ2wgRHVja0RCIFBsdWdpbiBpbml0aWFsaXplZCcpO1xuICB9XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQTtBQUNBOztBQUVPLElBQU1BLG9CQUFvQixHQUFBQyxPQUFBLENBQUFELG9CQUFBLEdBQUc7RUFDbENFLElBQUksRUFBRSxRQUFRO0VBQ1JDLElBQUksV0FBSkEsSUFBSUEsQ0FBQSxFQUFHO0lBQUEsV0FBQUMsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxVQUFBQyxRQUFBO01BQUEsT0FBQUYsWUFBQSxZQUFBRyxJQUFBLFVBQUFDLFNBQUFDLFFBQUE7UUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtVQUFBO1lBQ1hDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDLHFDQUFxQyxDQUFDO1VBQUM7VUFBQTtZQUFBLE9BQUFKLFFBQUEsQ0FBQUssSUFBQTtRQUFBO01BQUEsR0FBQVIsT0FBQTtJQUFBO0VBQ3JEO0FBQ0YsQ0FBQyIsImlnbm9yZUxpc3QiOltdfQ==