@kepler.gl/duckdb 3.3.0-alpha.1 → 3.3.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) 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} +2 -2
  10. package/dist/cjs/processors/data-processor.js +353 -0
  11. package/dist/cjs/table/duckdb-table-utils.js +670 -0
  12. package/dist/cjs/table/duckdb-table.js +482 -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 +645 -0
  26. package/dist/esm/table/duckdb-table.js +477 -0
  27. package/dist/esm/table/index.js +5 -0
  28. package/dist/esm/utils/perf.js +40 -0
  29. package/dist/table/duckdb-table-utils.d.ts +7 -0
  30. package/package.json +24 -21
  31. package/dist/adapters/duckdb-wasm-adapter.js +0 -259
  32. package/dist/components/monaco-editor.js +0 -175
  33. package/dist/components/preview-data-panel.js +0 -128
  34. package/dist/components/schema-panel.js +0 -171
  35. package/dist/components/sql-panel.js +0 -396
  36. package/dist/components/tree.js +0 -91
  37. package/dist/processors/data-processor.js +0 -353
  38. package/dist/table/duckdb-table-utils.js +0 -669
  39. package/dist/table/duckdb-table.js +0 -480
  40. package/dist/utils/perf.js +0 -46
@@ -1,480 +0,0 @@
1
- "use strict";
2
-
3
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
- var _typeof3 = require("@babel/runtime/helpers/typeof");
5
- Object.defineProperty(exports, "__esModule", {
6
- value: true
7
- });
8
- exports.restoreGeoarrowMetadata = exports.KeplerGlDuckDbTable = void 0;
9
- var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
10
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
11
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
12
- var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
13
- var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
14
- var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
15
- var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
16
- var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
17
- var _get2 = _interopRequireDefault(require("@babel/runtime/helpers/get"));
18
- var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
19
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
20
- var arrow = _interopRequireWildcard(require("apache-arrow"));
21
- var _constants = require("@kepler.gl/constants");
22
- var _processors = require("@kepler.gl/processors");
23
- var _table = require("@kepler.gl/table");
24
- var _utils = require("@kepler.gl/utils");
25
- var _dataProcessor = require("../processors/data-processor");
26
- var _duckdbTableUtils = require("./duckdb-table-utils");
27
- var _duckdbTableUtils2 = require("../table/duckdb-table-utils");
28
- 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); }
29
- 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; }
30
- 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; }
31
- 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; }
32
- 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)); }
33
- function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
34
- 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
35
- // Copyright contributors to the kepler.gl project
36
- // TODO use files from disk or url directly, without parsing by loaders and then ingection into DeckDb
37
-
38
- /**
39
- * Default DuckDb geometry columns created by ST_READ
40
- */
41
- var DUCKDB_GEOM_COLUMN = 'geom';
42
- var DUCKDB_WKB_COLUMN = 'wkb_geometry';
43
-
44
- /**
45
- Default column name for processed geojson in Kepler.
46
- Use this name to rename default 'geom' column from DuckDb
47
- in order to support Kepler maps saved before introduction of DuckDb plugin.
48
- */
49
- var KEPLER_GEOM_FROM_GEOJSON_COLUMN = '_geojson';
50
-
51
- /**
52
- * Names of columns that most likely contain binary wkb geometry
53
- */
54
- var SUGGESTED_GEOM_COLUMNS = (0, _defineProperty2["default"])((0, _defineProperty2["default"])((0, _defineProperty2["default"])({}, KEPLER_GEOM_FROM_GEOJSON_COLUMN, _constants.GEOARROW_EXTENSIONS.WKB), DUCKDB_GEOM_COLUMN, _constants.GEOARROW_EXTENSIONS.WKB), "geometry", _constants.GEOARROW_EXTENSIONS.WKB);
55
- var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_KeplerTable) {
56
- function KeplerGlDuckDbTable(props) {
57
- (0, _classCallCheck2["default"])(this, KeplerGlDuckDbTable);
58
- return _callSuper(this, KeplerGlDuckDbTable, [props]);
59
- }
60
- (0, _inherits2["default"])(KeplerGlDuckDbTable, _KeplerTable);
61
- return (0, _createClass2["default"])(KeplerGlDuckDbTable, [{
62
- key: "importRowData",
63
- value: function () {
64
- var _importRowData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(_ref) {
65
- var data, db, c, fields, rows, rowsForDb, columns, createTableSql;
66
- return _regenerator["default"].wrap(function _callee$(_context) {
67
- while (1) switch (_context.prev = _context.next) {
68
- case 0:
69
- data = _ref.data, db = _ref.db, c = _ref.c;
70
- _context.prev = 1;
71
- fields = data.fields, rows = data.rows; // DATASET_FORMATS.keplergl loads data as any[][] instead of [{}]
72
- // TODO potential memory usage explosion: original data, new object and then DuckDb table
73
- rowsForDb = Array.isArray(rows[0]) ? rows.map(function (row) {
74
- var newRow = {};
75
- row.forEach(function (value, index) {
76
- newRow[fields[index].name] = value;
77
- });
78
- return newRow;
79
- }) : rows;
80
- _context.next = 6;
81
- return db.registerFileText(this.id, JSON.stringify(rowsForDb));
82
- case 6:
83
- columns = fields.reduce(function (acc, field, index) {
84
- // @ts-expect-error TODO extend fields to contain duckDBColumnType
85
- return "".concat(acc).concat(index > 0 ? ',' : '', " '").concat(field.name, "': '").concat(field.duckDBColumnType, "'");
86
- }, '');
87
- createTableSql = "\n CREATE TABLE '".concat(this.label, "' AS\n SELECT *\n FROM read_json('").concat(this.id, "',\n columns = {").concat(columns, "});\n ");
88
- _context.next = 10;
89
- return c.query(createTableSql);
90
- case 10:
91
- _context.next = 16;
92
- break;
93
- case 12:
94
- _context.prev = 12;
95
- _context.t0 = _context["catch"](1);
96
- console.log('importRowData', _context.t0);
97
- throw _context.t0;
98
- case 16:
99
- case "end":
100
- return _context.stop();
101
- }
102
- }, _callee, this, [[1, 12]]);
103
- }));
104
- function importRowData(_x) {
105
- return _importRowData.apply(this, arguments);
106
- }
107
- return importRowData;
108
- }()
109
- }, {
110
- key: "importGeoJsonData",
111
- value: function () {
112
- var _importGeoJsonData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(_ref2) {
113
- var data, db, c, rows, createTableSql;
114
- return _regenerator["default"].wrap(function _callee2$(_context2) {
115
- while (1) switch (_context2.prev = _context2.next) {
116
- case 0:
117
- data = _ref2.data, db = _ref2.db, c = _ref2.c;
118
- _context2.prev = 1;
119
- rows = data.rows;
120
- _context2.next = 5;
121
- return db.registerFileText(this.id, JSON.stringify(rows));
122
- case 5:
123
- 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 ");
124
- _context2.next = 8;
125
- return c.query(createTableSql);
126
- case 8:
127
- _context2.next = 14;
128
- break;
129
- case 10:
130
- _context2.prev = 10;
131
- _context2.t0 = _context2["catch"](1);
132
- console.error('importGeoJsonData', _context2.t0);
133
- throw _context2.t0;
134
- case 14:
135
- return _context2.abrupt("return", {
136
- // _geojson column is created from geometry with keep_wkb flag and contains valid WKB data.
137
- geoarrowMetadata: (0, _defineProperty2["default"])({}, KEPLER_GEOM_FROM_GEOJSON_COLUMN, _constants.GEOARROW_EXTENSIONS.WKB)
138
- });
139
- case 15:
140
- case "end":
141
- return _context2.stop();
142
- }
143
- }, _callee2, this, [[1, 10]]);
144
- }));
145
- function importGeoJsonData(_x2) {
146
- return _importGeoJsonData.apply(this, arguments);
147
- }
148
- return importGeoJsonData;
149
- }()
150
- }, {
151
- key: "importArrowData",
152
- value: function () {
153
- var _importArrowData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref3) {
154
- var data, c, adjustedMetadata, arrowTable, setupSql;
155
- return _regenerator["default"].wrap(function _callee3$(_context3) {
156
- while (1) switch (_context3.prev = _context3.next) {
157
- case 0:
158
- data = _ref3.data, c = _ref3.c;
159
- adjustedMetadata = {};
160
- _context3.prev = 2;
161
- // 1) data.rows contains an arrow table created by Add to Map data from DuckDb query.
162
- // 2) arrow table is in cols & fields when a file is dragged & dropped into Add Data To Map dialog.
163
- arrowTable = (0, _utils.isArrowTable)(data.rows) ? data.rows : (0, _duckdbTableUtils2.restoreArrowTable)(data.cols || [], data.fields, data.arrowSchema); // remove unsupported extensions from an arrow table that throw exceptions in DuckDB.
164
- adjustedMetadata = (0, _duckdbTableUtils2.removeUnsupportedExtensions)(arrowTable);
165
- setupSql = "\n install spatial;\n load spatial;\n ";
166
- _context3.next = 8;
167
- return c.query(setupSql);
168
- case 8:
169
- _context3.next = 10;
170
- return c.insertArrowTable(arrowTable, {
171
- name: this.label
172
- });
173
- case 10:
174
- // restore unsupported extensions that throw exceptions in DuckDb
175
- (0, _duckdbTableUtils2.restoreUnsupportedExtensions)(arrowTable, adjustedMetadata);
176
- _context3.next = 17;
177
- break;
178
- case 13:
179
- _context3.prev = 13;
180
- _context3.t0 = _context3["catch"](2);
181
- // Known issues:
182
- // 1) Arrow Type with extension name: geoarrow.point and format: +w:2 is not currently supported in DuckDB.
183
- console.error('importArrowData', _context3.t0);
184
- throw _context3.t0;
185
- case 17:
186
- return _context3.abrupt("return", {
187
- geoarrowMetadata: _objectSpread(_objectSpread({}, SUGGESTED_GEOM_COLUMNS), adjustedMetadata),
188
- // use fields generated from the created arrow table
189
- useNewFields: true
190
- });
191
- case 18:
192
- case "end":
193
- return _context3.stop();
194
- }
195
- }, _callee3, this, [[2, 13]]);
196
- }));
197
- function importArrowData(_x3) {
198
- return _importArrowData.apply(this, arguments);
199
- }
200
- return importArrowData;
201
- }()
202
- /**
203
- * Creates a table from data, returns an arrow table with the data
204
- * @param data
205
- * @returns {Promise<{fields: Field[], cols: any[]}>}
206
- */
207
- }, {
208
- key: "createTableAndGetArrow",
209
- value: (function () {
210
- var _createTableAndGetArrow = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(data) {
211
- var db, c, tableName, format, _data$rows, _data$rows2, _data$rows3, _data$cols, importDetails, fields, cols, _data$fields, _ref4, _ref4$geoarrowMetadat, geoarrowMetadata, _ref4$useNewFields, useNewFields, duckDbColumns, tableDuckDBTypes, adjustedQuery, arrowResult;
212
- return _regenerator["default"].wrap(function _callee4$(_context4) {
213
- while (1) switch (_context4.prev = _context4.next) {
214
- case 0:
215
- _context4.next = 2;
216
- return (0, _utils.getApplicationConfig)().database;
217
- case 2:
218
- db = _context4.sent;
219
- if (db) {
220
- _context4.next = 6;
221
- break;
222
- }
223
- console.error('The database is not configured properly.');
224
- return _context4.abrupt("return", {
225
- fields: [],
226
- cols: []
227
- });
228
- case 6:
229
- _context4.next = 8;
230
- return db.connect();
231
- case 8:
232
- c = _context4.sent;
233
- tableName = this.label;
234
- _context4.next = 12;
235
- return (0, _duckdbTableUtils2.dropTableIfExists)(c, tableName);
236
- case 12:
237
- format = this.metadata.format;
238
- if (!format) {
239
- // format is missing when we load Kepler.gl examples
240
- if (Array.isArray((_data$rows = data.rows) === null || _data$rows === void 0 ? void 0 : _data$rows[0]) || (0, _typeof2["default"])((_data$rows2 = data.rows) === null || _data$rows2 === void 0 ? void 0 : _data$rows2[0]) === 'object') {
241
- format = _constants.DATASET_FORMATS.row;
242
- } else if (((_data$rows3 = data.rows) === null || _data$rows3 === void 0 ? void 0 : _data$rows3.type) === 'FeatureCollection') {
243
- format = _constants.DATASET_FORMATS.geojson;
244
- } else if ((0, _utils.isArrowVector)((_data$cols = data.cols) === null || _data$cols === void 0 ? void 0 : _data$cols[0])) {
245
- format = _constants.DATASET_FORMATS.arrow;
246
- }
247
- }
248
- if (!(format === _constants.DATASET_FORMATS.row)) {
249
- _context4.next = 19;
250
- break;
251
- }
252
- _context4.next = 17;
253
- return this.importRowData({
254
- data: data,
255
- db: db,
256
- c: c
257
- });
258
- case 17:
259
- _context4.next = 32;
260
- break;
261
- case 19:
262
- if (!(format === _constants.DATASET_FORMATS.geojson)) {
263
- _context4.next = 25;
264
- break;
265
- }
266
- _context4.next = 22;
267
- return this.importGeoJsonData({
268
- data: data,
269
- db: db,
270
- c: c
271
- });
272
- case 22:
273
- importDetails = _context4.sent;
274
- _context4.next = 32;
275
- break;
276
- case 25:
277
- if (!(format === _constants.DATASET_FORMATS.arrow)) {
278
- _context4.next = 31;
279
- break;
280
- }
281
- _context4.next = 28;
282
- return this.importArrowData({
283
- data: data,
284
- db: db,
285
- c: c
286
- });
287
- case 28:
288
- importDetails = _context4.sent;
289
- _context4.next = 32;
290
- break;
291
- case 31:
292
- console.error('Unrecognized format', format);
293
- case 32:
294
- fields = [];
295
- cols = [];
296
- _context4.prev = 34;
297
- _ref4 = importDetails || {}, _ref4$geoarrowMetadat = _ref4.geoarrowMetadata, geoarrowMetadata = _ref4$geoarrowMetadat === void 0 ? {} : _ref4$geoarrowMetadat, _ref4$useNewFields = _ref4.useNewFields, useNewFields = _ref4$useNewFields === void 0 ? false : _ref4$useNewFields;
298
- _context4.next = 38;
299
- return (0, _duckdbTableUtils2.getDuckDBColumnTypes)(c, tableName);
300
- case 38:
301
- duckDbColumns = _context4.sent;
302
- tableDuckDBTypes = (0, _duckdbTableUtils2.getDuckDBColumnTypesMap)(duckDbColumns);
303
- adjustedQuery = (0, _duckdbTableUtils2.castDuckDBTypesForKepler)(tableName, duckDbColumns);
304
- _context4.next = 43;
305
- return c.query(adjustedQuery);
306
- case 43:
307
- arrowResult = _context4.sent;
308
- // TODO if format is an arrow table then just use the original one, instead of the new table from the query?
309
-
310
- restoreGeoarrowMetadata(arrowResult, geoarrowMetadata);
311
- fields = useNewFields ? (0, _processors.arrowSchemaToFields)(arrowResult, tableDuckDBTypes) : (_data$fields = data.fields) !== null && _data$fields !== void 0 ? _data$fields : (0, _processors.arrowSchemaToFields)(arrowResult, tableDuckDBTypes);
312
- cols = (0, _toConsumableArray2["default"])(Array(arrowResult.numCols).keys()).map(function (i) {
313
- return arrowResult.getChildAt(i);
314
- }).filter(function (col) {
315
- return col;
316
- });
317
- _context4.next = 53;
318
- break;
319
- case 49:
320
- _context4.prev = 49;
321
- _context4.t0 = _context4["catch"](34);
322
- console.error('DuckDB table: createTableAndGetArrow', _context4.t0);
323
- throw _context4.t0;
324
- case 53:
325
- _context4.next = 55;
326
- return c.close();
327
- case 55:
328
- return _context4.abrupt("return", {
329
- fields: fields,
330
- cols: cols
331
- });
332
- case 56:
333
- case "end":
334
- return _context4.stop();
335
- }
336
- }, _callee4, this, [[34, 49]]);
337
- }));
338
- function createTableAndGetArrow(_x4) {
339
- return _createTableAndGetArrow.apply(this, arguments);
340
- }
341
- return createTableAndGetArrow;
342
- }())
343
- }, {
344
- key: "importData",
345
- value: function () {
346
- var _importData = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(_ref5) {
347
- var data, _yield$this$createTab, fields, cols;
348
- return _regenerator["default"].wrap(function _callee5$(_context5) {
349
- while (1) switch (_context5.prev = _context5.next) {
350
- case 0:
351
- data = _ref5.data;
352
- if (!(this.type === _constants.DatasetType.VECTOR_TILE)) {
353
- _context5.next = 4;
354
- break;
355
- }
356
- _superPropGet(KeplerGlDuckDbTable, "importData", this, 3)([{
357
- data: _objectSpread(_objectSpread({}, data), {}, {
358
- rows: []
359
- })
360
- }]);
361
- return _context5.abrupt("return");
362
- case 4:
363
- _context5.next = 6;
364
- return this.createTableAndGetArrow(data);
365
- case 6:
366
- _yield$this$createTab = _context5.sent;
367
- fields = _yield$this$createTab.fields;
368
- cols = _yield$this$createTab.cols;
369
- _superPropGet(KeplerGlDuckDbTable, "importData", this, 3)([{
370
- data: {
371
- fields: fields,
372
- cols: cols,
373
- rows: []
374
- }
375
- }]);
376
- case 10:
377
- case "end":
378
- return _context5.stop();
379
- }
380
- }, _callee5, this);
381
- }));
382
- function importData(_x5) {
383
- return _importData.apply(this, arguments);
384
- }
385
- return importData;
386
- }()
387
- }, {
388
- key: "update",
389
- value: function () {
390
- var _update = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(data) {
391
- var _yield$this$createTab2, cols;
392
- return _regenerator["default"].wrap(function _callee6$(_context6) {
393
- while (1) switch (_context6.prev = _context6.next) {
394
- case 0:
395
- if (!(this.type === _constants.DatasetType.VECTOR_TILE)) {
396
- _context6.next = 3;
397
- break;
398
- }
399
- _superPropGet(KeplerGlDuckDbTable, "importData", this, 3)([{
400
- data: data
401
- }]);
402
- return _context6.abrupt("return", this);
403
- case 3:
404
- _context6.next = 5;
405
- return this.createTableAndGetArrow(data);
406
- case 5:
407
- _yield$this$createTab2 = _context6.sent;
408
- cols = _yield$this$createTab2.cols;
409
- return _context6.abrupt("return", _superPropGet(KeplerGlDuckDbTable, "update", this, 3)([{
410
- cols: cols,
411
- rows: [],
412
- fields: []
413
- }]));
414
- case 8:
415
- case "end":
416
- return _context6.stop();
417
- }
418
- }, _callee6, this);
419
- }));
420
- function update(_x6) {
421
- return _update.apply(this, arguments);
422
- }
423
- return update;
424
- }()
425
- }]);
426
- }(_table.KeplerTable);
427
- /**
428
- * Try to restore geoarrow metadata lost during DuckDb ingestion.
429
- * Note that this function can generate wrong geometry types.
430
- * @param arrowTable Arrow table to update.
431
- * @param geoarrowMetadata A map with field names that usually used to store geoarrow geometry.
432
- */
433
- (0, _defineProperty2["default"])(KeplerGlDuckDbTable, "getFileProcessor", function (data, inputFormat) {
434
- var processor;
435
- var format;
436
- if (inputFormat === _constants.DATASET_FORMATS.arrow || (0, _processors.isArrowData)(data)) {
437
- format = _constants.DATASET_FORMATS.arrow;
438
- processor = _processors.processArrowBatches;
439
- } else if (inputFormat === _constants.DATASET_FORMATS.keplergl || (0, _processors.isKeplerGlMap)(data)) {
440
- format = _constants.DATASET_FORMATS.keplergl;
441
- processor = _dataProcessor.processKeplerglJSONforDuckDb;
442
- } else if (inputFormat === _constants.DATASET_FORMATS.row || (0, _processors.isRowObject)(data)) {
443
- // csv file goes here
444
- format = _constants.DATASET_FORMATS.row;
445
- processor = _dataProcessor.processCsvRowObject; // directly import json object into duckdb-wasm
446
- } else if (inputFormat === _constants.DATASET_FORMATS.geojson || (0, _processors.isGeoJson)(data)) {
447
- format = _constants.DATASET_FORMATS.geojson;
448
- processor = _dataProcessor.processGeojson;
449
- }
450
- return {
451
- processor: processor,
452
- format: format
453
- };
454
- });
455
- (0, _defineProperty2["default"])(KeplerGlDuckDbTable, "getInputDataValidator", function () {
456
- // In DuckDB mode data is validated later during import.
457
- return function (d) {
458
- return d;
459
- };
460
- });
461
- var restoreGeoarrowMetadata = exports.restoreGeoarrowMetadata = function restoreGeoarrowMetadata(arrowTable, geoarrowMetadata) {
462
- arrowTable.schema.fields.forEach(function (f) {
463
- if (arrow.DataType.isBinary(f.type) && geoarrowMetadata[f.name]) {
464
- f.metadata.set(_constants.GEOARROW_METADATA_KEY, geoarrowMetadata[f.name]);
465
- } else if ((0, _duckdbTableUtils.isGeoArrowPoint)(f.type)) {
466
- f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.POINT);
467
- } else if ((0, _duckdbTableUtils.isGeoArrowLineString)(f.type)) {
468
- f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.LINESTRING);
469
- } else if ((0, _duckdbTableUtils.isGeoArrowPolygon)(f.type)) {
470
- f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.POLYGON);
471
- } else if ((0, _duckdbTableUtils.isGeoArrowMultiPoint)(f.type)) {
472
- f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.MULTIPOINT);
473
- } else if ((0, _duckdbTableUtils.isGeoArrowMultiLineString)(f.type)) {
474
- f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.MULTILINESTRING);
475
- } else if ((0, _duckdbTableUtils.isGeoArrowMultiPolygon)(f.type)) {
476
- f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.MULTIPOLYGON);
477
- }
478
- });
479
- };
480
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl91dGlscyIsIl9kYXRhUHJvY2Vzc29yIiwiX2R1Y2tkYlRhYmxlVXRpbHMiLCJfZHVja2RiVGFibGVVdGlsczIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwiRFVDS0RCX0dFT01fQ09MVU1OIiwiRFVDS0RCX1dLQl9DT0xVTU4iLCJLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OIiwiU1VHR0VTVEVEX0dFT01fQ09MVU1OUyIsIkdFT0FSUk9XX0VYVEVOU0lPTlMiLCJXS0IiLCJLZXBsZXJHbER1Y2tEYlRhYmxlIiwiZXhwb3J0cyIsIl9LZXBsZXJUYWJsZSIsInByb3BzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJfaW1wb3J0Um93RGF0YSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX3JlZiIsImRhdGEiLCJkYiIsImMiLCJmaWVsZHMiLCJyb3dzIiwicm93c0ZvckRiIiwiY29sdW1ucyIsImNyZWF0ZVRhYmxlU3FsIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsInJvdyIsIm5ld1JvdyIsImluZGV4IiwibmFtZSIsInJlZ2lzdGVyRmlsZVRleHQiLCJpZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWR1Y2UiLCJhY2MiLCJmaWVsZCIsImNvbmNhdCIsImR1Y2tEQkNvbHVtblR5cGUiLCJsYWJlbCIsInF1ZXJ5IiwidDAiLCJjb25zb2xlIiwibG9nIiwic3RvcCIsImltcG9ydFJvd0RhdGEiLCJfeCIsIl9pbXBvcnRHZW9Kc29uRGF0YSIsIl9jYWxsZWUyIiwiX3JlZjIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJlcnJvciIsImFicnVwdCIsImdlb2Fycm93TWV0YWRhdGEiLCJpbXBvcnRHZW9Kc29uRGF0YSIsIl94MiIsIl9pbXBvcnRBcnJvd0RhdGEiLCJfY2FsbGVlMyIsIl9yZWYzIiwiYWRqdXN0ZWRNZXRhZGF0YSIsImFycm93VGFibGUiLCJzZXR1cFNxbCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImlzQXJyb3dUYWJsZSIsInJlc3RvcmVBcnJvd1RhYmxlIiwiY29scyIsImFycm93U2NoZW1hIiwicmVtb3ZlVW5zdXBwb3J0ZWRFeHRlbnNpb25zIiwiaW5zZXJ0QXJyb3dUYWJsZSIsInJlc3RvcmVVbnN1cHBvcnRlZEV4dGVuc2lvbnMiLCJ1c2VOZXdGaWVsZHMiLCJpbXBvcnRBcnJvd0RhdGEiLCJfeDMiLCJfY3JlYXRlVGFibGVBbmRHZXRBcnJvdyIsIl9jYWxsZWU0IiwidGFibGVOYW1lIiwiZm9ybWF0IiwiX2RhdGEkcm93cyIsIl9kYXRhJHJvd3MyIiwiX2RhdGEkcm93czMiLCJfZGF0YSRjb2xzIiwiaW1wb3J0RGV0YWlscyIsIl9kYXRhJGZpZWxkcyIsIl9yZWY0IiwiX3JlZjQkZ2VvYXJyb3dNZXRhZGF0IiwiX3JlZjQkdXNlTmV3RmllbGRzIiwiZHVja0RiQ29sdW1ucyIsInRhYmxlRHVja0RCVHlwZXMiLCJhZGp1c3RlZFF1ZXJ5IiwiYXJyb3dSZXN1bHQiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJnZXRBcHBsaWNhdGlvbkNvbmZpZyIsImRhdGFiYXNlIiwic2VudCIsImNvbm5lY3QiLCJkcm9wVGFibGVJZkV4aXN0cyIsIm1ldGFkYXRhIiwiX3R5cGVvZjIiLCJEQVRBU0VUX0ZPUk1BVFMiLCJ0eXBlIiwiZ2VvanNvbiIsImlzQXJyb3dWZWN0b3IiLCJnZXREdWNrREJDb2x1bW5UeXBlcyIsImdldER1Y2tEQkNvbHVtblR5cGVzTWFwIiwiY2FzdER1Y2tEQlR5cGVzRm9yS2VwbGVyIiwicmVzdG9yZUdlb2Fycm93TWV0YWRhdGEiLCJhcnJvd1NjaGVtYVRvRmllbGRzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIm51bUNvbHMiLCJnZXRDaGlsZEF0IiwiY29sIiwiY2xvc2UiLCJjcmVhdGVUYWJsZUFuZEdldEFycm93IiwiX3g0IiwiX2ltcG9ydERhdGEiLCJfY2FsbGVlNSIsIl9yZWY1IiwiX3lpZWxkJHRoaXMkY3JlYXRlVGFiIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiRGF0YXNldFR5cGUiLCJWRUNUT1JfVElMRSIsImltcG9ydERhdGEiLCJfeDUiLCJfdXBkYXRlIiwiX2NhbGxlZTYiLCJfeWllbGQkdGhpcyRjcmVhdGVUYWIyIiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwidXBkYXRlIiwiX3g2IiwiS2VwbGVyVGFibGUiLCJpbnB1dEZvcm1hdCIsInByb2Nlc3NvciIsImlzQXJyb3dEYXRhIiwicHJvY2Vzc0Fycm93QmF0Y2hlcyIsImtlcGxlcmdsIiwiaXNLZXBsZXJHbE1hcCIsInByb2Nlc3NLZXBsZXJnbEpTT05mb3JEdWNrRGIiLCJpc1Jvd09iamVjdCIsInByb2Nlc3NDc3ZSb3dPYmplY3QiLCJpc0dlb0pzb24iLCJwcm9jZXNzR2VvanNvbiIsImQiLCJzY2hlbWEiLCJmIiwiRGF0YVR5cGUiLCJpc0JpbmFyeSIsIkdFT0FSUk9XX01FVEFEQVRBX0tFWSIsImlzR2VvQXJyb3dQb2ludCIsIlBPSU5UIiwiaXNHZW9BcnJvd0xpbmVTdHJpbmciLCJMSU5FU1RSSU5HIiwiaXNHZW9BcnJvd1BvbHlnb24iLCJQT0xZR09OIiwiaXNHZW9BcnJvd011bHRpUG9pbnQiLCJNVUxUSVBPSU5UIiwiaXNHZW9BcnJvd011bHRpTGluZVN0cmluZyIsIk1VTFRJTElORVNUUklORyIsImlzR2VvQXJyb3dNdWx0aVBvbHlnb24iLCJNVUxUSVBPTFlHT04iXSwic291cmNlcyI6WyIuLi8uLi9zcmMvdGFibGUvZHVja2RiLXRhYmxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCAqIGFzIGFycm93IGZyb20gJ2FwYWNoZS1hcnJvdyc7XG5cbmltcG9ydCB7XG4gIERhdGFzZXRUeXBlLFxuICBEQVRBU0VUX0ZPUk1BVFMsXG4gIEdFT0FSUk9XX0VYVEVOU0lPTlMsXG4gIEdFT0FSUk9XX01FVEFEQVRBX0tFWVxufSBmcm9tICdAa2VwbGVyLmdsL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBhcnJvd1NjaGVtYVRvRmllbGRzLFxuICBpc0Fycm93RGF0YSxcbiAgaXNHZW9Kc29uLFxuICBpc0tlcGxlckdsTWFwLFxuICBpc1Jvd09iamVjdCxcbiAgcHJvY2Vzc0Fycm93QmF0Y2hlc1xufSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuaW1wb3J0IHtLZXBsZXJUYWJsZX0gZnJvbSAnQGtlcGxlci5nbC90YWJsZSc7XG5pbXBvcnQge0ZpZWxkfSBmcm9tICdAa2VwbGVyLmdsL3R5cGVzJztcbmltcG9ydCB7XG4gIGdldEFwcGxpY2F0aW9uQ29uZmlnLFxuICBEYXRhYmFzZUFkYXB0ZXIsXG4gIERhdGFiYXNlQ29ubmVjdGlvbixcbiAgaXNBcnJvd1RhYmxlLFxuICBpc0Fycm93VmVjdG9yXG59IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBwcm9jZXNzQ3N2Um93T2JqZWN0LFxuICBwcm9jZXNzR2VvanNvbixcbiAgcHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYixcbiAgUHJvY2Vzc29yUmVzdWx0XG59IGZyb20gJy4uL3Byb2Nlc3NvcnMvZGF0YS1wcm9jZXNzb3InO1xuXG5pbXBvcnQge1xuICBpc0dlb0Fycm93UG9pbnQsXG4gIGlzR2VvQXJyb3dMaW5lU3RyaW5nLFxuICBpc0dlb0Fycm93UG9seWdvbixcbiAgaXNHZW9BcnJvd011bHRpUG9pbnQsXG4gIGlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmcsXG4gIGlzR2VvQXJyb3dNdWx0aVBvbHlnb25cbn0gZnJvbSAnLi9kdWNrZGItdGFibGUtdXRpbHMnO1xuXG5pbXBvcnQge1xuICBjYXN0RHVja0RCVHlwZXNGb3JLZXBsZXIsXG4gIGRyb3BUYWJsZUlmRXhpc3RzLFxuICBnZXREdWNrREJDb2x1bW5UeXBlcyxcbiAgZ2V0RHVja0RCQ29sdW1uVHlwZXNNYXAsXG4gIHJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyxcbiAgcmVzdG9yZUFycm93VGFibGUsXG4gIHJlc3RvcmVVbnN1cHBvcnRlZEV4dGVuc2lvbnNcbn0gZnJvbSAnLi4vdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzJztcblxuLy8gVE9ETyB1c2UgZmlsZXMgZnJvbSBkaXNrIG9yIHVybCBkaXJlY3RseSwgd2l0aG91dCBwYXJzaW5nIGJ5IGxvYWRlcnMgYW5kIHRoZW4gaW5nZWN0aW9uIGludG8gRGVja0RiXG5cbi8qKlxuICogRGVmYXVsdCBEdWNrRGIgZ2VvbWV0cnkgY29sdW1ucyBjcmVhdGVkIGJ5IFNUX1JFQURcbiAqL1xuY29uc3QgRFVDS0RCX0dFT01fQ09MVU1OID0gJ2dlb20nO1xuY29uc3QgRFVDS0RCX1dLQl9DT0xVTU4gPSAnd2tiX2dlb21ldHJ5JztcblxuLyoqXG4gRGVmYXVsdCBjb2x1bW4gbmFtZSBmb3IgcHJvY2Vzc2VkIGdlb2pzb24gaW4gS2VwbGVyLlxuIFVzZSB0aGlzIG5hbWUgdG8gcmVuYW1lIGRlZmF1bHQgJ2dlb20nIGNvbHVtbiBmcm9tIER1Y2tEYlxuIGluIG9yZGVyIHRvIHN1cHBvcnQgS2VwbGVyIG1hcHMgc2F2ZWQgYmVmb3JlIGludHJvZHVjdGlvbiBvZiBEdWNrRGIgcGx1Z2luLlxuICovXG5jb25zdCBLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OID0gJ19nZW9qc29uJztcblxuLyoqXG4gKiBOYW1lcyBvZiBjb2x1bW5zIHRoYXQgbW9zdCBsaWtlbHkgY29udGFpbiBiaW5hcnkgd2tiIGdlb21ldHJ5XG4gKi9cbmNvbnN0IFNVR0dFU1RFRF9HRU9NX0NPTFVNTlMgPSB7XG4gIFtLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OXTogR0VPQVJST1dfRVhURU5TSU9OUy5XS0IsXG4gIFtEVUNLREJfR0VPTV9DT0xVTU5dOiBHRU9BUlJPV19FWFRFTlNJT05TLldLQixcbiAgZ2VvbWV0cnk6IEdFT0FSUk9XX0VYVEVOU0lPTlMuV0tCXG59O1xuXG50eXBlIEltcG9ydERhdGFUb0R1Y2tQcm9wcyA9IHtcbiAgZGF0YTogUHJvY2Vzc29yUmVzdWx0ICYge2Fycm93U2NoZW1hOiBhcnJvdy5TY2hlbWF9O1xuICBkYjogRGF0YWJhc2VBZGFwdGVyO1xuICBjOiBEYXRhYmFzZUNvbm5lY3Rpb247XG59O1xuXG50eXBlIEltcG9ydERhdGFUb0R1Y2tSZXN1bHQgPSB7XG4gIC8vIER1Y2tEYiBkcm9wcyBnZW9hcnJvdyBtZXRhZGF0YSwgc28gdHJ5IHRvIHByZXNlcnZlIGFuZCB0aGVuIHJlc3RvcmUgdGhlIGV4dGVuc2lvbiBuYW1lXG4gIGdlb2Fycm93TWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvLyBVc2UgZmllbGRzIGZyb20gYXJyb3cgdGFibGUgZXZlbiBpZiBmaWVsZHMgYXJlIHByb3ZpZGVkXG4gIHVzZU5ld0ZpZWxkcz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY2xhc3MgS2VwbGVyR2xEdWNrRGJUYWJsZSBleHRlbmRzIEtlcGxlclRhYmxlIHtcbiAgZGVjbGFyZSByZWFkb25seSBpZDogc3RyaW5nO1xuICBkZWNsYXJlIGxhYmVsOiBzdHJpbmc7XG4gIGRlY2xhcmUgdHlwZTogc3RyaW5nO1xuICBkZWNsYXJlIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgYXN5bmMgaW1wb3J0Um93RGF0YSh7ZGF0YSwgZGIsIGN9OiBJbXBvcnREYXRhVG9EdWNrUHJvcHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge2ZpZWxkcywgcm93c30gPSBkYXRhO1xuXG4gICAgICAvLyBEQVRBU0VUX0ZPUk1BVFMua2VwbGVyZ2wgbG9hZHMgZGF0YSBhcyBhbnlbXVtdIGluc3RlYWQgb2YgW3t9XVxuICAgICAgLy8gVE9ETyBwb3RlbnRpYWwgbWVtb3J5IHVzYWdlIGV4cGxvc2lvbjogb3JpZ2luYWwgZGF0YSwgbmV3IG9iamVjdCBhbmQgdGhlbiBEdWNrRGIgdGFibGVcbiAgICAgIGNvbnN0IHJvd3NGb3JEYiA9IEFycmF5LmlzQXJyYXkocm93c1swXSlcbiAgICAgICAgPyByb3dzLm1hcChyb3cgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Um93ID0ge307XG4gICAgICAgICAgICByb3cuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZHNbaW5kZXhdLm5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXdSb3c7XG4gICAgICAgICAgfSlcbiAgICAgICAgOiByb3dzO1xuXG4gICAgICBhd2FpdCBkYi5yZWdpc3RlckZpbGVUZXh0KHRoaXMuaWQsIEpTT04uc3RyaW5naWZ5KHJvd3NGb3JEYikpO1xuXG4gICAgICBjb25zdCBjb2x1bW5zID0gZmllbGRzLnJlZHVjZSgoYWNjLCBmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUT0RPIGV4dGVuZCBmaWVsZHMgdG8gY29udGFpbiBkdWNrREJDb2x1bW5UeXBlXG4gICAgICAgIHJldHVybiBgJHthY2N9JHtpbmRleCA+IDAgPyAnLCcgOiAnJ30gJyR7ZmllbGQubmFtZX0nOiAnJHtmaWVsZC5kdWNrREJDb2x1bW5UeXBlfSdgO1xuICAgICAgfSwgJycpO1xuXG4gICAgICBjb25zdCBjcmVhdGVUYWJsZVNxbCA9IGBcbiAgICAgICAgQ1JFQVRFIFRBQkxFICcke3RoaXMubGFiZWx9JyBBU1xuICAgICAgICBTRUxFQ1QgKlxuICAgICAgICBGUk9NIHJlYWRfanNvbignJHt0aGlzLmlkfScsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSB7JHtjb2x1bW5zfX0pO1xuICAgICAgYDtcbiAgICAgIGF3YWl0IGMucXVlcnkoY3JlYXRlVGFibGVTcWwpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZygnaW1wb3J0Um93RGF0YScsIGVycm9yKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGltcG9ydEdlb0pzb25EYXRhKHtkYXRhLCBkYiwgY306IEltcG9ydERhdGFUb0R1Y2tQcm9wcyk6IFByb21pc2U8SW1wb3J0RGF0YVRvRHVja1Jlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7cm93c30gPSBkYXRhO1xuICAgICAgYXdhaXQgZGIucmVnaXN0ZXJGaWxlVGV4dCh0aGlzLmlkLCBKU09OLnN0cmluZ2lmeShyb3dzKSk7XG5cbiAgICAgIGNvbnN0IGNyZWF0ZVRhYmxlU3FsID0gYFxuICAgICAgICBpbnN0YWxsIHNwYXRpYWw7XG4gICAgICAgIGxvYWQgc3BhdGlhbDtcbiAgICAgICAgQ1JFQVRFIFRBQkxFICcke3RoaXMubGFiZWx9JyBBU1xuICAgICAgICBTRUxFQ1QgKlxuICAgICAgICBGUk9NIFNUX1JFQUQoJyR7dGhpcy5pZH0nLCBrZWVwX3drYiA9IFRSVUUpO1xuICAgICAgICBBTFRFUiBUQUJMRSAnJHt0aGlzLmxhYmVsfScgUkVOQU1FICcke0RVQ0tEQl9XS0JfQ09MVU1OfScgVE8gJyR7S0VQTEVSX0dFT01fRlJPTV9HRU9KU09OX0NPTFVNTn0nO1xuICAgICAgYDtcblxuICAgICAgYXdhaXQgYy5xdWVyeShjcmVhdGVUYWJsZVNxbCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ltcG9ydEdlb0pzb25EYXRhJywgZXJyb3IpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIF9nZW9qc29uIGNvbHVtbiBpcyBjcmVhdGVkIGZyb20gZ2VvbWV0cnkgd2l0aCBrZWVwX3drYiBmbGFnIGFuZCBjb250YWlucyB2YWxpZCBXS0IgZGF0YS5cbiAgICAgIGdlb2Fycm93TWV0YWRhdGE6IHtbS0VQTEVSX0dFT01fRlJPTV9HRU9KU09OX0NPTFVNTl06IEdFT0FSUk9XX0VYVEVOU0lPTlMuV0tCfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBpbXBvcnRBcnJvd0RhdGEoe2RhdGEsIGN9OiBJbXBvcnREYXRhVG9EdWNrUHJvcHMpOiBQcm9taXNlPEltcG9ydERhdGFUb0R1Y2tSZXN1bHQ+IHtcbiAgICBsZXQgYWRqdXN0ZWRNZXRhZGF0YSA9IHt9O1xuICAgIHRyeSB7XG4gICAgICAvLyAxKSBkYXRhLnJvd3MgY29udGFpbnMgYW4gYXJyb3cgdGFibGUgY3JlYXRlZCBieSBBZGQgdG8gTWFwIGRhdGEgZnJvbSBEdWNrRGIgcXVlcnkuXG4gICAgICAvLyAyKSBhcnJvdyB0YWJsZSBpcyBpbiBjb2xzICYgZmllbGRzIHdoZW4gYSBmaWxlIGlzIGRyYWdnZWQgJiBkcm9wcGVkIGludG8gQWRkIERhdGEgVG8gTWFwIGRpYWxvZy5cbiAgICAgIGNvbnN0IGFycm93VGFibGUgPSBpc0Fycm93VGFibGUoZGF0YS5yb3dzKVxuICAgICAgICA/IGRhdGEucm93c1xuICAgICAgICA6IHJlc3RvcmVBcnJvd1RhYmxlKGRhdGEuY29scyB8fCBbXSwgZGF0YS5maWVsZHMsIGRhdGEuYXJyb3dTY2hlbWEpO1xuXG4gICAgICAvLyByZW1vdmUgdW5zdXBwb3J0ZWQgZXh0ZW5zaW9ucyBmcm9tIGFuIGFycm93IHRhYmxlIHRoYXQgdGhyb3cgZXhjZXB0aW9ucyBpbiBEdWNrREIuXG4gICAgICBhZGp1c3RlZE1ldGFkYXRhID0gcmVtb3ZlVW5zdXBwb3J0ZWRFeHRlbnNpb25zKGFycm93VGFibGUpO1xuXG4gICAgICBjb25zdCBzZXR1cFNxbCA9IGBcbiAgICAgICAgaW5zdGFsbCBzcGF0aWFsO1xuICAgICAgICBsb2FkIHNwYXRpYWw7XG4gICAgICBgO1xuICAgICAgYXdhaXQgYy5xdWVyeShzZXR1cFNxbCk7XG4gICAgICBhd2FpdCBjLmluc2VydEFycm93VGFibGUoYXJyb3dUYWJsZSwge25hbWU6IHRoaXMubGFiZWx9KTtcblxuICAgICAgLy8gcmVzdG9yZSB1bnN1cHBvcnRlZCBleHRlbnNpb25zIHRoYXQgdGhyb3cgZXhjZXB0aW9ucyBpbiBEdWNrRGJcbiAgICAgIHJlc3RvcmVVbnN1cHBvcnRlZEV4dGVuc2lvbnMoYXJyb3dUYWJsZSwgYWRqdXN0ZWRNZXRhZGF0YSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEtub3duIGlzc3VlczpcbiAgICAgIC8vIDEpIEFycm93IFR5cGUgd2l0aCBleHRlbnNpb24gbmFtZTogZ2VvYXJyb3cucG9pbnQgYW5kIGZvcm1hdDogK3c6MiBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZCBpbiBEdWNrREIuXG4gICAgICBjb25zb2xlLmVycm9yKCdpbXBvcnRBcnJvd0RhdGEnLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2VvYXJyb3dNZXRhZGF0YTogey4uLlNVR0dFU1RFRF9HRU9NX0NPTFVNTlMsIC4uLmFkanVzdGVkTWV0YWRhdGF9LFxuICAgICAgLy8gdXNlIGZpZWxkcyBnZW5lcmF0ZWQgZnJvbSB0aGUgY3JlYXRlZCBhcnJvdyB0YWJsZVxuICAgICAgdXNlTmV3RmllbGRzOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGFibGUgZnJvbSBkYXRhLCByZXR1cm5zIGFuIGFycm93IHRhYmxlIHdpdGggdGhlIGRhdGFcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8e2ZpZWxkczogRmllbGRbXSwgY29sczogYW55W119Pn1cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBjcmVhdGVUYWJsZUFuZEdldEFycm93KGRhdGEpOiBQcm9taXNlPHtmaWVsZHM6IGFueVtdOyBjb2xzOiBhcnJvdy5WZWN0b3JbXX0+IHtcbiAgICBjb25zdCBkYiA9IGF3YWl0IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZGF0YWJhc2U7XG4gICAgaWYgKCFkYikge1xuICAgICAgY29uc29sZS5lcnJvcignVGhlIGRhdGFiYXNlIGlzIG5vdCBjb25maWd1cmVkIHByb3Blcmx5LicpO1xuICAgICAgcmV0dXJuIHtmaWVsZHM6IFtdLCBjb2xzOiBbXX07XG4gICAgfVxuICAgIGNvbnN0IGMgPSBhd2FpdCBkYi5jb25uZWN0KCk7XG5cbiAgICBjb25zdCB0YWJsZU5hbWUgPSB0aGlzLmxhYmVsO1xuICAgIGF3YWl0IGRyb3BUYWJsZUlmRXhpc3RzKGMsIHRhYmxlTmFtZSk7XG5cbiAgICBsZXQgZm9ybWF0ID0gdGhpcy5tZXRhZGF0YS5mb3JtYXQ7XG4gICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgIC8vIGZvcm1hdCBpcyBtaXNzaW5nIHdoZW4gd2UgbG9hZCBLZXBsZXIuZ2wgZXhhbXBsZXNcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEucm93cz8uWzBdKSB8fCB0eXBlb2YgZGF0YS5yb3dzPy5bMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5yb3c7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEucm93cz8udHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xuICAgICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbjtcbiAgICAgIH0gZWxzZSBpZiAoaXNBcnJvd1ZlY3RvcihkYXRhLmNvbHM/LlswXSkpIHtcbiAgICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLmFycm93O1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpbXBvcnREZXRhaWxzOiBJbXBvcnREYXRhVG9EdWNrUmVzdWx0IHwgdW5kZWZpbmVkO1xuICAgIGlmIChmb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5yb3cpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW1wb3J0Um93RGF0YSh7ZGF0YSwgZGIsIGN9KTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmdlb2pzb24pIHtcbiAgICAgIGltcG9ydERldGFpbHMgPSBhd2FpdCB0aGlzLmltcG9ydEdlb0pzb25EYXRhKHtkYXRhLCBkYiwgY30pO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMuYXJyb3cpIHtcbiAgICAgIGltcG9ydERldGFpbHMgPSBhd2FpdCB0aGlzLmltcG9ydEFycm93RGF0YSh7ZGF0YSwgZGIsIGN9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignVW5yZWNvZ25pemVkIGZvcm1hdCcsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgbGV0IGZpZWxkczogRmllbGRbXSA9IFtdO1xuICAgIGxldCBjb2xzOiBhcnJvdy5WZWN0b3JbXSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtnZW9hcnJvd01ldGFkYXRhID0ge30sIHVzZU5ld0ZpZWxkcyA9IGZhbHNlfSA9IGltcG9ydERldGFpbHMgfHwge307XG5cbiAgICAgIGNvbnN0IGR1Y2tEYkNvbHVtbnMgPSBhd2FpdCBnZXREdWNrREJDb2x1bW5UeXBlcyhjLCB0YWJsZU5hbWUpO1xuICAgICAgY29uc3QgdGFibGVEdWNrREJUeXBlcyA9IGdldER1Y2tEQkNvbHVtblR5cGVzTWFwKGR1Y2tEYkNvbHVtbnMpO1xuICAgICAgY29uc3QgYWRqdXN0ZWRRdWVyeSA9IGNhc3REdWNrREJUeXBlc0ZvcktlcGxlcih0YWJsZU5hbWUsIGR1Y2tEYkNvbHVtbnMpO1xuICAgICAgY29uc3QgYXJyb3dSZXN1bHQgPSBhd2FpdCBjLnF1ZXJ5KGFkanVzdGVkUXVlcnkpO1xuXG4gICAgICAvLyBUT0RPIGlmIGZvcm1hdCBpcyBhbiBhcnJvdyB0YWJsZSB0aGVuIGp1c3QgdXNlIHRoZSBvcmlnaW5hbCBvbmUsIGluc3RlYWQgb2YgdGhlIG5ldyB0YWJsZSBmcm9tIHRoZSBxdWVyeT9cblxuICAgICAgcmVzdG9yZUdlb2Fycm93TWV0YWRhdGEoYXJyb3dSZXN1bHQsIGdlb2Fycm93TWV0YWRhdGEpO1xuXG4gICAgICBmaWVsZHMgPSB1c2VOZXdGaWVsZHNcbiAgICAgICAgPyBhcnJvd1NjaGVtYVRvRmllbGRzKGFycm93UmVzdWx0LCB0YWJsZUR1Y2tEQlR5cGVzKVxuICAgICAgICA6IGRhdGEuZmllbGRzID8/IGFycm93U2NoZW1hVG9GaWVsZHMoYXJyb3dSZXN1bHQsIHRhYmxlRHVja0RCVHlwZXMpO1xuICAgICAgY29scyA9IFsuLi5BcnJheShhcnJvd1Jlc3VsdC5udW1Db2xzKS5rZXlzKCldXG4gICAgICAgIC5tYXAoaSA9PiBhcnJvd1Jlc3VsdC5nZXRDaGlsZEF0KGkpKVxuICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wpIGFzIGFycm93LlZlY3RvcltdO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdEdWNrREIgdGFibGU6IGNyZWF0ZVRhYmxlQW5kR2V0QXJyb3cnLCBlcnJvcik7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG5cbiAgICBhd2FpdCBjLmNsb3NlKCk7XG5cbiAgICByZXR1cm4ge2ZpZWxkcywgY29sc307XG4gIH1cblxuICBhc3luYyBpbXBvcnREYXRhKHtkYXRhfToge2RhdGE6IFByb2Nlc3NvclJlc3VsdH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBWZWN0b3JUaWxlIGlzIGEgc3BlY2lhbCBjYXNlLCBpZ25vcmUgZm9yIG5vd1xuICAgIGlmICh0aGlzLnR5cGUgPT09IERhdGFzZXRUeXBlLlZFQ1RPUl9USUxFKSB7XG4gICAgICBzdXBlci5pbXBvcnREYXRhKHtkYXRhOiB7Li4uZGF0YSwgcm93czogW119fSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2ZpZWxkcywgY29sc30gPSBhd2FpdCB0aGlzLmNyZWF0ZVRhYmxlQW5kR2V0QXJyb3coZGF0YSk7XG5cbiAgICBzdXBlci5pbXBvcnREYXRhKHtkYXRhOiB7ZmllbGRzLCBjb2xzLCByb3dzOiBbXX19KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShkYXRhKSB7XG4gICAgLy8gVmVjdG9yVGlsZSBpcyBhIHNwZWNpYWwgY2FzZSwgaWdub3JlIGZvciBub3dcbiAgICBpZiAodGhpcy50eXBlID09PSBEYXRhc2V0VHlwZS5WRUNUT1JfVElMRSkge1xuICAgICAgc3VwZXIuaW1wb3J0RGF0YSh7ZGF0YX0pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3Qge2NvbHN9ID0gYXdhaXQgdGhpcy5jcmVhdGVUYWJsZUFuZEdldEFycm93KGRhdGEpO1xuXG4gICAgcmV0dXJuIHN1cGVyLnVwZGF0ZSh7Y29scywgcm93czogW10sIGZpZWxkczogW119KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRGaWxlUHJvY2Vzc29yID0gZnVuY3Rpb24gKGRhdGE6IGFueSwgaW5wdXRGb3JtYXQ/OiBzdHJpbmcpIHtcbiAgICBsZXQgcHJvY2Vzc29yO1xuICAgIGxldCBmb3JtYXQ7XG4gICAgaWYgKGlucHV0Rm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMuYXJyb3cgfHwgaXNBcnJvd0RhdGEoZGF0YSkpIHtcbiAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5hcnJvdztcbiAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3NBcnJvd0JhdGNoZXM7XG4gICAgfSBlbHNlIGlmIChpbnB1dEZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmtlcGxlcmdsIHx8IGlzS2VwbGVyR2xNYXAoZGF0YSkpIHtcbiAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5rZXBsZXJnbDtcbiAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3NLZXBsZXJnbEpTT05mb3JEdWNrRGI7XG4gICAgfSBlbHNlIGlmIChpbnB1dEZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLnJvdyB8fCBpc1Jvd09iamVjdChkYXRhKSkge1xuICAgICAgLy8gY3N2IGZpbGUgZ29lcyBoZXJlXG4gICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMucm93O1xuICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc0NzdlJvd09iamVjdDsgLy8gZGlyZWN0bHkgaW1wb3J0IGpzb24gb2JqZWN0IGludG8gZHVja2RiLXdhc21cbiAgICB9IGVsc2UgaWYgKGlucHV0Rm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbiB8fCBpc0dlb0pzb24oZGF0YSkpIHtcbiAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5nZW9qc29uO1xuICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc0dlb2pzb247XG4gICAgfVxuICAgIHJldHVybiB7cHJvY2Vzc29yLCBmb3JtYXR9O1xuICB9O1xuXG4gIHN0YXRpYyBnZXRJbnB1dERhdGFWYWxpZGF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gSW4gRHVja0RCIG1vZGUgZGF0YSBpcyB2YWxpZGF0ZWQgbGF0ZXIgZHVyaW5nIGltcG9ydC5cbiAgICByZXR1cm4gZCA9PiBkO1xuICB9O1xufVxuXG4vKipcbiAqIFRyeSB0byByZXN0b3JlIGdlb2Fycm93IG1ldGFkYXRhIGxvc3QgZHVyaW5nIER1Y2tEYiBpbmdlc3Rpb24uXG4gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gZ2VuZXJhdGUgd3JvbmcgZ2VvbWV0cnkgdHlwZXMuXG4gKiBAcGFyYW0gYXJyb3dUYWJsZSBBcnJvdyB0YWJsZSB0byB1cGRhdGUuXG4gKiBAcGFyYW0gZ2VvYXJyb3dNZXRhZGF0YSBBIG1hcCB3aXRoIGZpZWxkIG5hbWVzIHRoYXQgdXN1YWxseSB1c2VkIHRvIHN0b3JlIGdlb2Fycm93IGdlb21ldHJ5LlxuICovXG5leHBvcnQgY29uc3QgcmVzdG9yZUdlb2Fycm93TWV0YWRhdGEgPSAoXG4gIGFycm93VGFibGU6IGFycm93LlRhYmxlLFxuICBnZW9hcnJvd01ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+XG4pID0+IHtcbiAgYXJyb3dUYWJsZS5zY2hlbWEuZmllbGRzLmZvckVhY2goZiA9PiB7XG4gICAgaWYgKGFycm93LkRhdGFUeXBlLmlzQmluYXJ5KGYudHlwZSkgJiYgZ2VvYXJyb3dNZXRhZGF0YVtmLm5hbWVdKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIGdlb2Fycm93TWV0YWRhdGFbZi5uYW1lXSk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93UG9pbnQoZi50eXBlKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBHRU9BUlJPV19FWFRFTlNJT05TLlBPSU5UKTtcbiAgICB9IGVsc2UgaWYgKGlzR2VvQXJyb3dMaW5lU3RyaW5nKGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5MSU5FU1RSSU5HKTtcbiAgICB9IGVsc2UgaWYgKGlzR2VvQXJyb3dQb2x5Z29uKGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5QT0xZR09OKTtcbiAgICB9IGVsc2UgaWYgKGlzR2VvQXJyb3dNdWx0aVBvaW50KGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5NVUxUSVBPSU5UKTtcbiAgICB9IGVsc2UgaWYgKGlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmcoZi50eXBlKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBHRU9BUlJPV19FWFRFTlNJT05TLk1VTFRJTElORVNUUklORyk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TXVsdGlQb2x5Z29uKGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5NVUxUSVBPTFlHT04pO1xuICAgIH1cbiAgfSk7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsS0FBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFBO0FBRUEsSUFBQUMsVUFBQSxHQUFBRCxPQUFBO0FBTUEsSUFBQUUsV0FBQSxHQUFBRixPQUFBO0FBUUEsSUFBQUcsTUFBQSxHQUFBSCxPQUFBO0FBRUEsSUFBQUksTUFBQSxHQUFBSixPQUFBO0FBUUEsSUFBQUssY0FBQSxHQUFBTCxPQUFBO0FBT0EsSUFBQU0saUJBQUEsR0FBQU4sT0FBQTtBQVNBLElBQUFPLGtCQUFBLEdBQUFQLE9BQUE7QUFRcUMsU0FBQVEseUJB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
@@ -1,46 +0,0 @@
1
- "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.logElapsedTime = void 0;
7
- // SPDX-License-Identifier: MIT
8
- // Copyright contributors to the kepler.gl project
9
-
10
- // git@github.com:holdenmatt/duckdb-wasm-kit.git
11
- var FgRed = '\x1b[31m';
12
- var ResetColors = '\x1b[0m';
13
-
14
- /**
15
- * Format a time interval between start/end timestamps.
16
- *
17
- * If no end time is given, use the current time.
18
- */
19
- var formatElapsedTime = function formatElapsedTime(label, start) {
20
- var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
21
- var endTime = end !== null && end !== void 0 ? end : performance.now();
22
- var elapsed = endTime - start;
23
- var timeString;
24
- switch (true) {
25
- case elapsed >= 1000:
26
- timeString = "".concat((elapsed / 1000).toFixed(1), "s");
27
- break;
28
- case elapsed >= 1:
29
- timeString = "".concat(elapsed.toFixed(0), "ms");
30
- break;
31
- default:
32
- timeString = "".concat(elapsed.toFixed(3), "ms");
33
- break;
34
- }
35
- var message = "".concat(FgRed, "[").concat(timeString, "] ").concat(ResetColors).concat(label);
36
- return message;
37
- };
38
-
39
- /**
40
- * Print the elapsed time to console.debug.
41
- */
42
- var logElapsedTime = exports.logElapsedTime = function logElapsedTime(label, start) {
43
- var end = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined;
44
- console.debug(formatElapsedTime(label, start, end));
45
- };
46
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJGZ1JlZCIsIlJlc2V0Q29sb3JzIiwiZm9ybWF0RWxhcHNlZFRpbWUiLCJsYWJlbCIsInN0YXJ0IiwiZW5kIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiZW5kVGltZSIsInBlcmZvcm1hbmNlIiwibm93IiwiZWxhcHNlZCIsInRpbWVTdHJpbmciLCJjb25jYXQiLCJ0b0ZpeGVkIiwibWVzc2FnZSIsImxvZ0VsYXBzZWRUaW1lIiwiZXhwb3J0cyIsImNvbnNvbGUiLCJkZWJ1ZyJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9wZXJmLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbi8vIGdpdEBnaXRodWIuY29tOmhvbGRlbm1hdHQvZHVja2RiLXdhc20ta2l0LmdpdFxuY29uc3QgRmdSZWQgPSAnXFx4MWJbMzFtJztcbmNvbnN0IFJlc2V0Q29sb3JzID0gJ1xceDFiWzBtJztcblxuLyoqXG4gKiBGb3JtYXQgYSB0aW1lIGludGVydmFsIGJldHdlZW4gc3RhcnQvZW5kIHRpbWVzdGFtcHMuXG4gKlxuICogSWYgbm8gZW5kIHRpbWUgaXMgZ2l2ZW4sIHVzZSB0aGUgY3VycmVudCB0aW1lLlxuICovXG5jb25zdCBmb3JtYXRFbGFwc2VkVGltZSA9IChcbiAgbGFiZWw6IHN0cmluZyxcbiAgc3RhcnQ6IG51bWJlcixcbiAgZW5kOiBudW1iZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWRcbik6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGVuZFRpbWUgPSBlbmQgPz8gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IGVsYXBzZWQgPSBlbmRUaW1lIC0gc3RhcnQ7XG5cbiAgbGV0IHRpbWVTdHJpbmc6IHN0cmluZztcbiAgc3dpdGNoICh0cnVlKSB7XG4gICAgY2FzZSBlbGFwc2VkID49IDEwMDA6XG4gICAgICB0aW1lU3RyaW5nID0gYCR7KGVsYXBzZWQgLyAxMDAwKS50b0ZpeGVkKDEpfXNgO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBlbGFwc2VkID49IDE6XG4gICAgICB0aW1lU3RyaW5nID0gYCR7ZWxhcHNlZC50b0ZpeGVkKDApfW1zYDtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aW1lU3RyaW5nID0gYCR7ZWxhcHNlZC50b0ZpeGVkKDMpfW1zYDtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgY29uc3QgbWVzc2FnZSA9IGAke0ZnUmVkfVske3RpbWVTdHJpbmd9XSAke1Jlc2V0Q29sb3JzfSR7bGFiZWx9YDtcbiAgcmV0dXJuIG1lc3NhZ2U7XG59O1xuXG4vKipcbiAqIFByaW50IHRoZSBlbGFwc2VkIHRpbWUgdG8gY29uc29sZS5kZWJ1Zy5cbiAqL1xuZXhwb3J0IGNvbnN0IGxvZ0VsYXBzZWRUaW1lID0gKFxuICBsYWJlbDogc3RyaW5nLFxuICBzdGFydDogbnVtYmVyLFxuICBlbmQ6IG51bWJlciB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZFxuKSA9PiB7XG4gIGNvbnNvbGUuZGVidWcoZm9ybWF0RWxhcHNlZFRpbWUobGFiZWwsIHN0YXJ0LCBlbmQpKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ0E7O0FBRUE7QUFDQSxJQUFNQSxLQUFLLEdBQUcsVUFBVTtBQUN4QixJQUFNQyxXQUFXLEdBQUcsU0FBUzs7QUFFN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLElBQU1DLGlCQUFpQixHQUFHLFNBQXBCQSxpQkFBaUJBLENBQ3JCQyxLQUFhLEVBQ2JDLEtBQWEsRUFFRjtFQUFBLElBRFhDLEdBQXVCLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFFLFNBQUEsR0FBQUYsU0FBQSxNQUFHRSxTQUFTO0VBRW5DLElBQU1DLE9BQU8sR0FBR0osR0FBRyxhQUFIQSxHQUFHLGNBQUhBLEdBQUcsR0FBSUssV0FBVyxDQUFDQyxHQUFHLENBQUMsQ0FBQztFQUN4QyxJQUFNQyxPQUFPLEdBQUdILE9BQU8sR0FBR0wsS0FBSztFQUUvQixJQUFJUyxVQUFrQjtFQUN0QixRQUFRLElBQUk7SUFDVixLQUFLRCxPQUFPLElBQUksSUFBSTtNQUNsQkMsVUFBVSxNQUFBQyxNQUFBLENBQU0sQ0FBQ0YsT0FBTyxHQUFHLElBQUksRUFBRUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFHO01BQzlDO0lBQ0YsS0FBS0gsT0FBTyxJQUFJLENBQUM7TUFDZkMsVUFBVSxNQUFBQyxNQUFBLENBQU1GLE9BQU8sQ0FBQ0csT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFJO01BQ3RDO0lBQ0Y7TUFDRUYsVUFBVSxNQUFBQyxNQUFBLENBQU1GLE9BQU8sQ0FBQ0csT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFJO01BQ3RDO0VBQ0o7RUFFQSxJQUFNQyxPQUFPLE1BQUFGLE1BQUEsQ0FBTWQsS0FBSyxPQUFBYyxNQUFBLENBQUlELFVBQVUsUUFBQUMsTUFBQSxDQUFLYixXQUFXLEVBQUFhLE1BQUEsQ0FBR1gsS0FBSyxDQUFFO0VBQ2hFLE9BQU9hLE9BQU87QUFDaEIsQ0FBQzs7QUFFRDtBQUNBO0FBQ0E7QUFDTyxJQUFNQyxjQUFjLEdBQUFDLE9BQUEsQ0FBQUQsY0FBQSxHQUFHLFNBQWpCQSxjQUFjQSxDQUN6QmQsS0FBYSxFQUNiQyxLQUFhLEVBRVY7RUFBQSxJQURIQyxHQUF1QixHQUFBQyxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBRSxTQUFBLEdBQUFGLFNBQUEsTUFBR0UsU0FBUztFQUVuQ1csT0FBTyxDQUFDQyxLQUFLLENBQUNsQixpQkFBaUIsQ0FBQ0MsS0FBSyxFQUFFQyxLQUFLLEVBQUVDLEdBQUcsQ0FBQyxDQUFDO0FBQ3JELENBQUMiLCJpZ25vcmVMaXN0IjpbXX0=