@kepler.gl/duckdb 3.1.1 → 3.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adapters/duckdb-wasm-adapter.d.ts +25 -0
- package/dist/adapters/duckdb-wasm-adapter.js +259 -0
- package/dist/components/schema-panel.js +18 -14
- package/dist/components/sql-panel.js +52 -49
- package/dist/index.d.ts +4 -2
- package/dist/index.js +33 -2
- package/dist/plugin.js +2 -12
- package/dist/processors/data-processor.js +17 -13
- package/dist/table/duckdb-table-utils.d.ts +4 -4
- package/dist/table/duckdb-table-utils.js +50 -44
- package/dist/table/duckdb-table.d.ts +10 -3
- package/dist/table/duckdb-table.js +67 -70
- package/package.json +6 -6
- package/dist/init.d.ts +0 -19
- package/dist/init.js +0 -160
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import * as arrow from 'apache-arrow';
|
|
2
|
-
import { AsyncDuckDB, AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';
|
|
3
2
|
import { KeplerTable } from '@kepler.gl/table';
|
|
3
|
+
import { DatabaseAdapter, DatabaseConnection } from '@kepler.gl/utils';
|
|
4
4
|
import { ProcessorResult } from '../processors/data-processor';
|
|
5
5
|
declare type ImportDataToDuckProps = {
|
|
6
6
|
data: ProcessorResult & {
|
|
7
7
|
arrowSchema: arrow.Schema;
|
|
8
8
|
};
|
|
9
|
-
db:
|
|
10
|
-
c:
|
|
9
|
+
db: DatabaseAdapter;
|
|
10
|
+
c: DatabaseConnection;
|
|
11
11
|
};
|
|
12
12
|
declare type ImportDataToDuckResult = {
|
|
13
13
|
geoarrowMetadata?: Record<string, string>;
|
|
@@ -41,4 +41,11 @@ export declare class KeplerGlDuckDbTable extends KeplerTable {
|
|
|
41
41
|
};
|
|
42
42
|
static getInputDataValidator: () => (d: any) => any;
|
|
43
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* Try to restore geoarrow metadata lost during DuckDb ingestion.
|
|
46
|
+
* Note that this function can generate wrong geometry types.
|
|
47
|
+
* @param arrowTable Arrow table to update.
|
|
48
|
+
* @param geoarrowMetadata A map with field names that usually used to store geoarrow geometry.
|
|
49
|
+
*/
|
|
50
|
+
export declare const restoreGeoarrowMetadata: (arrowTable: arrow.Table, geoarrowMetadata: Record<string, string>) => void;
|
|
44
51
|
export {};
|
|
@@ -5,7 +5,7 @@ var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", {
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
|
-
exports.KeplerGlDuckDbTable = void 0;
|
|
8
|
+
exports.restoreGeoarrowMetadata = exports.KeplerGlDuckDbTable = void 0;
|
|
9
9
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
10
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
11
11
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
@@ -21,7 +21,7 @@ var arrow = _interopRequireWildcard(require("apache-arrow"));
|
|
|
21
21
|
var _constants = require("@kepler.gl/constants");
|
|
22
22
|
var _processors = require("@kepler.gl/processors");
|
|
23
23
|
var _table = require("@kepler.gl/table");
|
|
24
|
-
var
|
|
24
|
+
var _utils = require("@kepler.gl/utils");
|
|
25
25
|
var _dataProcessor = require("../processors/data-processor");
|
|
26
26
|
var _duckdbTableUtils = require("./duckdb-table-utils");
|
|
27
27
|
var _duckdbTableUtils2 = require("../table/duckdb-table-utils");
|
|
@@ -210,17 +210,27 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
210
210
|
while (1) switch (_context4.prev = _context4.next) {
|
|
211
211
|
case 0:
|
|
212
212
|
_context4.next = 2;
|
|
213
|
-
return (0,
|
|
213
|
+
return (0, _utils.getApplicationConfig)().database;
|
|
214
214
|
case 2:
|
|
215
215
|
db = _context4.sent;
|
|
216
|
-
|
|
216
|
+
if (db) {
|
|
217
|
+
_context4.next = 6;
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
console.error('The database is not configured properly.');
|
|
221
|
+
return _context4.abrupt("return", {
|
|
222
|
+
fields: [],
|
|
223
|
+
cols: []
|
|
224
|
+
});
|
|
225
|
+
case 6:
|
|
226
|
+
_context4.next = 8;
|
|
217
227
|
return db.connect();
|
|
218
|
-
case
|
|
228
|
+
case 8:
|
|
219
229
|
c = _context4.sent;
|
|
220
230
|
tableName = this.label;
|
|
221
|
-
_context4.next =
|
|
231
|
+
_context4.next = 12;
|
|
222
232
|
return (0, _duckdbTableUtils2.dropTableIfExists)(c, tableName);
|
|
223
|
-
case
|
|
233
|
+
case 12:
|
|
224
234
|
format = this.metadata.format;
|
|
225
235
|
if (!format) {
|
|
226
236
|
// format is missing when we load Kepler.gl examples
|
|
@@ -233,65 +243,65 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
233
243
|
}
|
|
234
244
|
}
|
|
235
245
|
if (!(format === _constants.DATASET_FORMATS.row)) {
|
|
236
|
-
_context4.next =
|
|
246
|
+
_context4.next = 19;
|
|
237
247
|
break;
|
|
238
248
|
}
|
|
239
|
-
_context4.next =
|
|
249
|
+
_context4.next = 17;
|
|
240
250
|
return this.importRowData({
|
|
241
251
|
data: data,
|
|
242
252
|
db: db,
|
|
243
253
|
c: c
|
|
244
254
|
});
|
|
245
|
-
case
|
|
246
|
-
_context4.next =
|
|
255
|
+
case 17:
|
|
256
|
+
_context4.next = 32;
|
|
247
257
|
break;
|
|
248
|
-
case
|
|
258
|
+
case 19:
|
|
249
259
|
if (!(format === _constants.DATASET_FORMATS.geojson)) {
|
|
250
|
-
_context4.next =
|
|
260
|
+
_context4.next = 25;
|
|
251
261
|
break;
|
|
252
262
|
}
|
|
253
|
-
_context4.next =
|
|
263
|
+
_context4.next = 22;
|
|
254
264
|
return this.importGeoJsonData({
|
|
255
265
|
data: data,
|
|
256
266
|
db: db,
|
|
257
267
|
c: c
|
|
258
268
|
});
|
|
259
|
-
case
|
|
269
|
+
case 22:
|
|
260
270
|
importDetails = _context4.sent;
|
|
261
|
-
_context4.next =
|
|
271
|
+
_context4.next = 32;
|
|
262
272
|
break;
|
|
263
|
-
case
|
|
273
|
+
case 25:
|
|
264
274
|
if (!(format === _constants.DATASET_FORMATS.arrow)) {
|
|
265
|
-
_context4.next =
|
|
275
|
+
_context4.next = 31;
|
|
266
276
|
break;
|
|
267
277
|
}
|
|
268
|
-
_context4.next =
|
|
278
|
+
_context4.next = 28;
|
|
269
279
|
return this.importArrowData({
|
|
270
280
|
data: data,
|
|
271
281
|
db: db,
|
|
272
282
|
c: c
|
|
273
283
|
});
|
|
274
|
-
case
|
|
284
|
+
case 28:
|
|
275
285
|
importDetails = _context4.sent;
|
|
276
|
-
_context4.next =
|
|
286
|
+
_context4.next = 32;
|
|
277
287
|
break;
|
|
278
|
-
case
|
|
288
|
+
case 31:
|
|
279
289
|
console.error('Unrecognized format', format);
|
|
280
|
-
case
|
|
290
|
+
case 32:
|
|
281
291
|
fields = [];
|
|
282
292
|
cols = [];
|
|
283
|
-
_context4.prev =
|
|
293
|
+
_context4.prev = 34;
|
|
284
294
|
_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;
|
|
285
|
-
_context4.next =
|
|
295
|
+
_context4.next = 38;
|
|
286
296
|
return (0, _duckdbTableUtils2.getDuckDBColumnTypes)(c, tableName);
|
|
287
|
-
case
|
|
297
|
+
case 38:
|
|
288
298
|
duckDbColumns = _context4.sent;
|
|
289
299
|
tableDuckDBTypes = (0, _duckdbTableUtils2.getDuckDBColumnTypesMap)(duckDbColumns);
|
|
290
300
|
columnsToConvertToWKB = (0, _duckdbTableUtils2.getGeometryColumns)(duckDbColumns);
|
|
291
301
|
adjustedQuery = (0, _duckdbTableUtils2.constructST_asWKBQuery)(tableName, columnsToConvertToWKB);
|
|
292
|
-
_context4.next =
|
|
302
|
+
_context4.next = 44;
|
|
293
303
|
return c.query(adjustedQuery);
|
|
294
|
-
case
|
|
304
|
+
case 44:
|
|
295
305
|
arrowResult = _context4.sent;
|
|
296
306
|
// TODO if format is an arrow table then just use the original one, instead of the new table from the query?
|
|
297
307
|
|
|
@@ -302,25 +312,25 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
302
312
|
}).filter(function (col) {
|
|
303
313
|
return col;
|
|
304
314
|
});
|
|
305
|
-
_context4.next =
|
|
315
|
+
_context4.next = 53;
|
|
306
316
|
break;
|
|
307
|
-
case 47:
|
|
308
|
-
_context4.prev = 47;
|
|
309
|
-
_context4.t0 = _context4["catch"](31);
|
|
310
|
-
console.error('DuckDB table: createTableAndGetArrow', _context4.t0);
|
|
311
317
|
case 50:
|
|
312
|
-
_context4.
|
|
318
|
+
_context4.prev = 50;
|
|
319
|
+
_context4.t0 = _context4["catch"](34);
|
|
320
|
+
console.error('DuckDB table: createTableAndGetArrow', _context4.t0);
|
|
321
|
+
case 53:
|
|
322
|
+
_context4.next = 55;
|
|
313
323
|
return c.close();
|
|
314
|
-
case
|
|
324
|
+
case 55:
|
|
315
325
|
return _context4.abrupt("return", {
|
|
316
326
|
fields: fields,
|
|
317
327
|
cols: cols
|
|
318
328
|
});
|
|
319
|
-
case
|
|
329
|
+
case 56:
|
|
320
330
|
case "end":
|
|
321
331
|
return _context4.stop();
|
|
322
332
|
}
|
|
323
|
-
}, _callee4, this, [[
|
|
333
|
+
}, _callee4, this, [[34, 50]]);
|
|
324
334
|
}));
|
|
325
335
|
function createTableAndGetArrow(_x4) {
|
|
326
336
|
return _createTableAndGetArrow.apply(this, arguments);
|
|
@@ -445,36 +455,23 @@ var KeplerGlDuckDbTable = exports.KeplerGlDuckDbTable = /*#__PURE__*/function (_
|
|
|
445
455
|
return d;
|
|
446
456
|
};
|
|
447
457
|
});
|
|
448
|
-
var restoreGeoarrowMetadata =
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.MULTIPOLYGON);
|
|
468
|
-
}
|
|
469
|
-
});
|
|
470
|
-
case 1:
|
|
471
|
-
case "end":
|
|
472
|
-
return _context7.stop();
|
|
473
|
-
}
|
|
474
|
-
}, _callee7);
|
|
475
|
-
}));
|
|
476
|
-
return function restoreGeoarrowMetadata(_x7, _x8) {
|
|
477
|
-
return _ref6.apply(this, arguments);
|
|
478
|
-
};
|
|
479
|
-
}();
|
|
480
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl9pbml0IiwiX2RhdGFQcm9jZXNzb3IiLCJfZHVja2RiVGFibGVVdGlscyIsIl9kdWNrZGJUYWJsZVV0aWxzMiIsIl9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZSIsImUiLCJXZWFrTWFwIiwiciIsInQiLCJfX2VzTW9kdWxlIiwiX3R5cGVvZjMiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJvd25LZXlzIiwia2V5cyIsImdldE93blByb3BlcnR5U3ltYm9scyIsIm8iLCJmaWx0ZXIiLCJlbnVtZXJhYmxlIiwicHVzaCIsImFwcGx5IiwiX29iamVjdFNwcmVhZCIsImFyZ3VtZW50cyIsImxlbmd0aCIsImZvckVhY2giLCJfZGVmaW5lUHJvcGVydHkyIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfY2FsbFN1cGVyIiwiX2dldFByb3RvdHlwZU9mMiIsIl9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuMiIsIl9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiY29uc3RydWN0b3IiLCJCb29sZWFuIiwicHJvdG90eXBlIiwidmFsdWVPZiIsIl9zdXBlclByb3BHZXQiLCJwIiwiX2dldDIiLCJEVUNLREJfR0VPTV9DT0xVTU4iLCJEVUNLREJfV0tCX0NPTFVNTiIsIktFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU4iLCJTVUdHRVNURURfR0VPTV9DT0xVTU5TIiwiR0VPQVJST1dfRVhURU5TSU9OUyIsIldLQiIsIktlcGxlckdsRHVja0RiVGFibGUiLCJleHBvcnRzIiwiX0tlcGxlclRhYmxlIiwicHJvcHMiLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2luaGVyaXRzMiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsIl9pbXBvcnRSb3dEYXRhIiwiX2FzeW5jVG9HZW5lcmF0b3IyIiwiX3JlZ2VuZXJhdG9yIiwibWFyayIsIl9jYWxsZWUiLCJfcmVmIiwiZGF0YSIsImRiIiwiYyIsImZpZWxkcyIsInJvd3MiLCJyb3dzRm9yRGIiLCJjb2x1bW5zIiwiY3JlYXRlVGFibGVTcWwiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiQXJyYXkiLCJpc0FycmF5IiwibWFwIiwicm93IiwibmV3Um93IiwiaW5kZXgiLCJuYW1lIiwicmVnaXN0ZXJGaWxlVGV4dCIsImlkIiwiSlNPTiIsInN0cmluZ2lmeSIsInJlZHVjZSIsImFjYyIsImZpZWxkIiwiY29uY2F0IiwiZHVja0RCQ29sdW1uVHlwZSIsImxhYmVsIiwicXVlcnkiLCJ0MCIsImNvbnNvbGUiLCJsb2ciLCJzdG9wIiwiaW1wb3J0Um93RGF0YSIsIl94IiwiX2ltcG9ydEdlb0pzb25EYXRhIiwiX2NhbGxlZTIiLCJfcmVmMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImVycm9yIiwiYWJydXB0IiwiZ2VvYXJyb3dNZXRhZGF0YSIsImltcG9ydEdlb0pzb25EYXRhIiwiX3gyIiwiX2ltcG9ydEFycm93RGF0YSIsIl9jYWxsZWUzIiwiX3JlZjMiLCJhZGp1c3RlZE1ldGFkYXRhIiwiYXJyb3dUYWJsZSIsInNldHVwU3FsIiwiX2NhbGxlZTMkIiwiX2NvbnRleHQzIiwiVGFibGUiLCJyZXN0b3JlQXJyb3dUYWJsZSIsImNvbHMiLCJhcnJvd1NjaGVtYSIsInJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyIsImluc2VydEFycm93VGFibGUiLCJyZXN0b3JlVW5zdXBwb3J0ZWRFeHRlbnNpb25zIiwidXNlTmV3RmllbGRzIiwiaW1wb3J0QXJyb3dEYXRhIiwiX3gzIiwiX2NyZWF0ZVRhYmxlQW5kR2V0QXJyb3ciLCJfY2FsbGVlNCIsInRhYmxlTmFtZSIsImZvcm1hdCIsIl9kYXRhJHJvd3MiLCJfZGF0YSRyb3dzMiIsIl9kYXRhJHJvd3MzIiwiX2RhdGEkY29scyIsImltcG9ydERldGFpbHMiLCJfZGF0YSRmaWVsZHMiLCJfcmVmNCIsIl9yZWY0JGdlb2Fycm93TWV0YWRhdCIsIl9yZWY0JHVzZU5ld0ZpZWxkcyIsImR1Y2tEYkNvbHVtbnMiLCJ0YWJsZUR1Y2tEQlR5cGVzIiwiY29sdW1uc1RvQ29udmVydFRvV0tCIiwiYWRqdXN0ZWRRdWVyeSIsImFycm93UmVzdWx0IiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0IiwiZ2V0RHVja0RCIiwic2VudCIsImNvbm5lY3QiLCJkcm9wVGFibGVJZkV4aXN0cyIsIm1ldGFkYXRhIiwiX3R5cGVvZjIiLCJEQVRBU0VUX0ZPUk1BVFMiLCJ0eXBlIiwiZ2VvanNvbiIsIlZlY3RvciIsImdldER1Y2tEQkNvbHVtblR5cGVzIiwiZ2V0RHVja0RCQ29sdW1uVHlwZXNNYXAiLCJnZXRHZW9tZXRyeUNvbHVtbnMiLCJjb25zdHJ1Y3RTVF9hc1dLQlF1ZXJ5IiwicmVzdG9yZUdlb2Fycm93TWV0YWRhdGEiLCJhcnJvd1NjaGVtYVRvRmllbGRzIiwiX3RvQ29uc3VtYWJsZUFycmF5MiIsIm51bUNvbHMiLCJnZXRDaGlsZEF0IiwiY29sIiwiY2xvc2UiLCJjcmVhdGVUYWJsZUFuZEdldEFycm93IiwiX3g0IiwiX2ltcG9ydERhdGEiLCJfY2FsbGVlNSIsIl9yZWY1IiwiX3lpZWxkJHRoaXMkY3JlYXRlVGFiIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiRGF0YXNldFR5cGUiLCJWRUNUT1JfVElMRSIsImltcG9ydERhdGEiLCJfeDUiLCJfdXBkYXRlIiwiX2NhbGxlZTYiLCJfeWllbGQkdGhpcyRjcmVhdGVUYWIyIiwiX2NhbGxlZTYkIiwiX2NvbnRleHQ2IiwidXBkYXRlIiwiX3g2IiwiS2VwbGVyVGFibGUiLCJpbnB1dEZvcm1hdCIsInByb2Nlc3NvciIsImlzQXJyb3dEYXRhIiwicHJvY2Vzc0Fycm93QmF0Y2hlcyIsImtlcGxlcmdsIiwiaXNLZXBsZXJHbE1hcCIsInByb2Nlc3NLZXBsZXJnbEpTT05mb3JEdWNrRGIiLCJpc1Jvd09iamVjdCIsInByb2Nlc3NDc3ZSb3dPYmplY3QiLCJpc0dlb0pzb24iLCJwcm9jZXNzR2VvanNvbiIsImQiLCJfcmVmNiIsIl9jYWxsZWU3IiwiX2NhbGxlZTckIiwiX2NvbnRleHQ3Iiwic2NoZW1hIiwiZiIsIkRhdGFUeXBlIiwiaXNCaW5hcnkiLCJHRU9BUlJPV19NRVRBREFUQV9LRVkiLCJpc0dlb0Fycm93UG9pbnQiLCJQT0lOVCIsImlzR2VvQXJyb3dMaW5lU3RyaW5nIiwiTElORVNUUklORyIsImlzR2VvQXJyb3dQb2x5Z29uIiwiUE9MWUdPTiIsImlzR2VvQXJyb3dNdWx0aVBvaW50IiwiTVVMVElQT0lOVCIsImlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmciLCJNVUxUSUxJTkVTVFJJTkciLCJpc0dlb0Fycm93TXVsdGlQb2x5Z29uIiwiTVVMVElQT0xZR09OIiwiX3g3IiwiX3g4Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RhYmxlL2R1Y2tkYi10YWJsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgKiBhcyBhcnJvdyBmcm9tICdhcGFjaGUtYXJyb3cnO1xuaW1wb3J0IHtBc3luY0R1Y2tEQiwgQXN5bmNEdWNrREJDb25uZWN0aW9ufSBmcm9tICdAZHVja2RiL2R1Y2tkYi13YXNtJztcblxuaW1wb3J0IHtcbiAgRGF0YXNldFR5cGUsXG4gIERBVEFTRVRfRk9STUFUUyxcbiAgR0VPQVJST1dfRVhURU5TSU9OUyxcbiAgR0VPQVJST1dfTUVUQURBVEFfS0VZXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIGFycm93U2NoZW1hVG9GaWVsZHMsXG4gIGlzQXJyb3dEYXRhLFxuICBpc0dlb0pzb24sXG4gIGlzS2VwbGVyR2xNYXAsXG4gIGlzUm93T2JqZWN0LFxuICBwcm9jZXNzQXJyb3dCYXRjaGVzXG59IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuXG5pbXBvcnQge2dldER1Y2tEQn0gZnJvbSAnLi4vaW5pdCc7XG5pbXBvcnQge1xuICBwcm9jZXNzQ3N2Um93T2JqZWN0LFxuICBwcm9jZXNzR2VvanNvbixcbiAgcHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYixcbiAgUHJvY2Vzc29yUmVzdWx0XG59IGZyb20gJy4uL3Byb2Nlc3NvcnMvZGF0YS1wcm9jZXNzb3InO1xuXG5pbXBvcnQge1xuICBpc0dlb0Fycm93UG9pbnQsXG4gIGlzR2VvQXJyb3dMaW5lU3RyaW5nLFxuICBpc0dlb0Fycm93UG9seWdvbixcbiAgaXNHZW9BcnJvd011bHRpUG9pbnQsXG4gIGlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmcsXG4gIGlzR2VvQXJyb3dNdWx0aVBvbHlnb25cbn0gZnJvbSAnLi9kdWNrZGItdGFibGUtdXRpbHMnO1xuXG5pbXBvcnQge1xuICBjb25zdHJ1Y3RTVF9hc1dLQlF1ZXJ5LFxuICBkcm9wVGFibGVJZkV4aXN0cyxcbiAgZ2V0RHVja0RCQ29sdW1uVHlwZXMsXG4gIGdldER1Y2tEQkNvbHVtblR5cGVzTWFwLFxuICBnZXRHZW9tZXRyeUNvbHVtbnMsXG4gIHJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyxcbiAgcmVzdG9yZUFycm93VGFibGUsXG4gIHJlc3RvcmVVbnN1cHBvcnRlZEV4dGVuc2lvbnNcbn0gZnJvbSAnLi4vdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzJztcblxuLy8gVE9ETyB1c2UgZmlsZXMgZnJvbSBkaXNrIG9yIHVybCBkaXJlY3RseSwgd2l0aG91dCBwYXJzaW5nIGJ5IGxvYWRlcnMgYW5kIHRoZW4gaW5nZWN0aW9uIGludG8gRGVja0RiXG5cbi8qKlxuICogRGVmYXVsdCBEdWNrRGIgZ2VvbWV0cnkgY29sdW1ucyBjcmVhdGVkIGJ5IFNUX1JFQURcbiAqL1xuY29uc3QgRFVDS0RCX0dFT01fQ09MVU1OID0gJ2dlb20nO1xuY29uc3QgRFVDS0RCX1dLQl9DT0xVTU4gPSAnd2tiX2dlb21ldHJ5JztcblxuLyoqXG4gRGVmYXVsdCBjb2x1bW4gbmFtZSBmb3IgcHJvY2Vzc2VkIGdlb2pzb24gaW4gS2VwbGVyLlxuIFVzZSB0aGlzIG5hbWUgdG8gcmVuYW1lIGRlZmF1bHQgJ2dlb20nIGNvbHVtbiBmcm9tIER1Y2tEYlxuIGluIG9yZGVyIHRvIHN1cHBvcnQgS2VwbGVyIG1hcHMgc2F2ZWQgYmVmb3JlIGludHJvZHVjdGlvbiBvZiBEdWNrRGIgcGx1Z2luLlxuICovXG5jb25zdCBLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OID0gJ19nZW9qc29uJztcblxuLyoqXG4gKiBOYW1lcyBvZiBjb2x1bW5zIHRoYXQgbW9zdCBsaWtlbHkgY29udGFpbiBiaW5hcnkgd2tiIGdlb21ldHJ5XG4gKi9cbmNvbnN0IFNVR0dFU1RFRF9HRU9NX0NPTFVNTlMgPSB7XG4gIFtLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OXTogR0VPQVJST1dfRVhURU5TSU9OUy5XS0IsXG4gIFtEVUNLREJfR0VPTV9DT0xVTU5dOiBHRU9BUlJPV19FWFRFTlNJT05TLldLQixcbiAgZ2VvbWV0cnk6IEdFT0FSUk9XX0VYVEVOU0lPTlMuV0tCXG59O1xuXG50eXBlIEltcG9ydERhdGFUb0R1Y2tQcm9wcyA9IHtcbiAgZGF0YTogUHJvY2Vzc29yUmVzdWx0ICYge2Fycm93U2NoZW1hOiBhcnJvdy5TY2hlbWF9O1xuICBkYjogQXN5bmNEdWNrREI7XG4gIGM6IEFzeW5jRHVja0RCQ29ubmVjdGlvbjtcbn07XG5cbnR5cGUgSW1wb3J0RGF0YVRvRHVja1Jlc3VsdCA9IHtcbiAgLy8gRHVja0RiIGRyb3BzIGdlb2Fycm93IG1ldGFkYXRhLCBzbyB0cnkgdG8gcHJlc2VydmUgYW5kIHRoZW4gcmVzdG9yZSB0aGUgZXh0ZW5zaW9uIG5hbWVcbiAgZ2VvYXJyb3dNZXRhZGF0YT86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIC8vIFVzZSBmaWVsZHMgZnJvbSBhcnJvdyB0YWJsZSBldmVuIGlmIGZpZWxkcyBhcmUgcHJvdmlkZWRcbiAgdXNlTmV3RmllbGRzPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjbGFzcyBLZXBsZXJHbER1Y2tEYlRhYmxlIGV4dGVuZHMgS2VwbGVyVGFibGUge1xuICBkZWNsYXJlIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIGRlY2xhcmUgbGFiZWw6IHN0cmluZztcbiAgZGVjbGFyZSB0eXBlOiBzdHJpbmc7XG4gIGRlY2xhcmUgbWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbiAgY29uc3RydWN0b3IocHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG4gIH1cblxuICBhc3luYyBpbXBvcnRSb3dEYXRhKHtkYXRhLCBkYiwgY306IEltcG9ydERhdGFUb0R1Y2tQcm9wcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7ZmllbGRzLCByb3dzfSA9IGRhdGE7XG5cbiAgICAgIC8vIERBVEFTRVRfRk9STUFUUy5rZXBsZXJnbCBsb2FkcyBkYXRhIGFzIGFueVtdW10gaW5zdGVhZCBvZiBbe31dXG4gICAgICAvLyBUT0RPIHBvdGVudGlhbCBtZW1vcnkgdXNhZ2UgZXhwbG9zaW9uOiBvcmlnaW5hbCBkYXRhLCBuZXcgb2JqZWN0IGFuZCB0aGVuIER1Y2tEYiB0YWJsZVxuICAgICAgY29uc3Qgcm93c0ZvckRiID0gQXJyYXkuaXNBcnJheShyb3dzWzBdKVxuICAgICAgICA/IHJvd3MubWFwKHJvdyA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdSb3cgPSB7fTtcbiAgICAgICAgICAgIHJvdy5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgbmV3Um93W2ZpZWxkc1tpbmRleF0ubmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ld1JvdztcbiAgICAgICAgICB9KVxuICAgICAgICA6IHJvd3M7XG5cbiAgICAgIGF3YWl0IGRiLnJlZ2lzdGVyRmlsZVRleHQodGhpcy5pZCwgSlNPTi5zdHJpbmdpZnkocm93c0ZvckRiKSk7XG5cbiAgICAgIGNvbnN0IGNvbHVtbnMgPSBmaWVsZHMucmVkdWNlKChhY2MsIGZpZWxkLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFRPRE8gZXh0ZW5kIGZpZWxkcyB0byBjb250YWluIGR1Y2tEQkNvbHVtblR5cGVcbiAgICAgICAgcmV0dXJuIGAke2FjY30ke2luZGV4ID4gMCA/ICcsJyA6ICcnfSAnJHtmaWVsZC5uYW1lfSc6ICcke2ZpZWxkLmR1Y2tEQkNvbHVtblR5cGV9J2A7XG4gICAgICB9LCAnJyk7XG5cbiAgICAgIGNvbnN0IGNyZWF0ZVRhYmxlU3FsID0gYFxuICAgICAgICBDUkVBVEUgVEFCTEUgJyR7dGhpcy5sYWJlbH0nIEFTXG4gICAgICAgIFNFTEVDVCAqXG4gICAgICAgIEZST00gcmVhZF9qc29uKCcke3RoaXMuaWR9JyxcbiAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucyA9IHske2NvbHVtbnN9fSk7XG4gICAgICBgO1xuICAgICAgYXdhaXQgYy5xdWVyeShjcmVhdGVUYWJsZVNxbCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdpbXBvcnRSb3dEYXRhJywgZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGltcG9ydEdlb0pzb25EYXRhKHtkYXRhLCBkYiwgY306IEltcG9ydERhdGFUb0R1Y2tQcm9wcyk6IFByb21pc2U8SW1wb3J0RGF0YVRvRHVja1Jlc3VsdD4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7cm93c30gPSBkYXRhO1xuICAgICAgYXdhaXQgZGIucmVnaXN0ZXJGaWxlVGV4dCh0aGlzLmlkLCBKU09OLnN0cmluZ2lmeShyb3dzKSk7XG5cbiAgICAgIGNvbnN0IGNyZWF0ZVRhYmxlU3FsID0gYFxuICAgICAgICBpbnN0YWxsIHNwYXRpYWw7XG4gICAgICAgIGxvYWQgc3BhdGlhbDtcbiAgICAgICAgQ1JFQVRFIFRBQkxFICcke3RoaXMubGFiZWx9JyBBUyBcbiAgICAgICAgU0VMRUNUICpcbiAgICAgICAgRlJPTSBTVF9SRUFEKCcke3RoaXMuaWR9Jywga2VlcF93a2IgPSBUUlVFKTtcbiAgICAgICAgQUxURVIgVEFCTEUgJyR7dGhpcy5sYWJlbH0nIFJFTkFNRSAnJHtEVUNLREJfV0tCX0NPTFVNTn0nIFRPICcke0tFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU59JztcbiAgICAgIGA7XG4gICAgICBhd2FpdCBjLnF1ZXJ5KGNyZWF0ZVRhYmxlU3FsKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignaW1wb3J0R2VvSnNvbkRhdGEnLCBlcnJvcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIF9nZW9qc29uIGNvbHVtbiBpcyBjcmVhdGVkIGZyb20gZ2VvbWV0cnkgd2l0aCBrZWVwX3drYiBmbGFnIGFuZCBjb250YWlucyB2YWxpZCBXS0IgZGF0YS5cbiAgICAgIGdlb2Fycm93TWV0YWRhdGE6IHtbS0VQTEVSX0dFT01fRlJPTV9HRU9KU09OX0NPTFVNTl06IEdFT0FSUk9XX0VYVEVOU0lPTlMuV0tCfVxuICAgIH07XG4gIH1cblxuICBhc3luYyBpbXBvcnRBcnJvd0RhdGEoe2RhdGEsIGN9OiBJbXBvcnREYXRhVG9EdWNrUHJvcHMpOiBQcm9taXNlPEltcG9ydERhdGFUb0R1Y2tSZXN1bHQ+IHtcbiAgICBsZXQgYWRqdXN0ZWRNZXRhZGF0YSA9IHt9O1xuICAgIHRyeSB7XG4gICAgICAvLyAxKSBkYXRhLnJvd3MgY29udGFpbnMgYW4gYXJyb3cgdGFibGUgY3JlYXRlZCBieSBBZGQgdG8gTWFwIGRhdGEgZnJvbSBEdWNrRGIgcXVlcnkuXG4gICAgICAvLyAyKSBhcnJvdyB0YWJsZSBpcyBpbiBjb2xzICYgZmllbGRzIHdoZW4gYSBmaWxlIGlzIGRyYWdnZWQgJiBkcm9wcGVkIGludG8gQWRkIERhdGEgVG8gTWFwIGRpYWxvZy5cbiAgICAgIGNvbnN0IGFycm93VGFibGUgPVxuICAgICAgICBkYXRhLnJvd3MgaW5zdGFuY2VvZiBhcnJvdy5UYWJsZVxuICAgICAgICAgID8gZGF0YS5yb3dzXG4gICAgICAgICAgOiByZXN0b3JlQXJyb3dUYWJsZShkYXRhLmNvbHMgfHwgW10sIGRhdGEuZmllbGRzLCBkYXRhLmFycm93U2NoZW1hKTtcblxuICAgICAgLy8gcmVtb3ZlIHVuc3VwcG9ydGVkIGV4dGVuc2lvbnMgZnJvbSBhbiBhcnJvdyB0YWJsZSB0aGF0IHRocm93IGV4Y2VwdGlvbnMgaW4gRHVja0RCLlxuICAgICAgYWRqdXN0ZWRNZXRhZGF0YSA9IHJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyhhcnJvd1RhYmxlKTtcblxuICAgICAgY29uc3Qgc2V0dXBTcWwgPSBgXG4gICAgICAgIGluc3RhbGwgc3BhdGlhbDtcbiAgICAgICAgbG9hZCBzcGF0aWFsO1xuICAgICAgYDtcbiAgICAgIGF3YWl0IGMucXVlcnkoc2V0dXBTcWwpO1xuICAgICAgYXdhaXQgYy5pbnNlcnRBcnJvd1RhYmxlKGFycm93VGFibGUsIHtuYW1lOiB0aGlzLmxhYmVsfSk7XG5cbiAgICAgIC8vIHJlc3RvcmUgdW5zdXBwb3J0ZWQgZXh0ZW5zaW9ucyB0aGF0IHRocm93IGV4Y2VwdGlvbnMgaW4gRHVja0RiXG4gICAgICByZXN0b3JlVW5zdXBwb3J0ZWRFeHRlbnNpb25zKGFycm93VGFibGUsIGFkanVzdGVkTWV0YWRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBLbm93biBpc3N1ZXM6XG4gICAgICAvLyAxKSBBcnJvdyBUeXBlIHdpdGggZXh0ZW5zaW9uIG5hbWU6IGdlb2Fycm93LnBvaW50IGFuZCBmb3JtYXQ6ICt3OjIgaXMgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWQgaW4gRHVja0RCLlxuICAgICAgY29uc29sZS5lcnJvcignaW1wb3J0QXJyb3dEYXRhJywgZXJyb3IpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBnZW9hcnJvd01ldGFkYXRhOiB7Li4uU1VHR0VTVEVEX0dFT01fQ09MVU1OUywgLi4uYWRqdXN0ZWRNZXRhZGF0YX0sXG4gICAgICAvLyB1c2UgZmllbGRzIGdlbmVyYXRlZCBmcm9tIHRoZSBjcmVhdGVkIGFycm93IHRhYmxlXG4gICAgICB1c2VOZXdGaWVsZHM6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZXMgYSB0YWJsZSBmcm9tIGRhdGEsIHJldHVybnMgYW4gYXJyb3cgdGFibGUgd2l0aCB0aGUgZGF0YVxuICAgKiBAcGFyYW0gZGF0YVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7ZmllbGRzOiBGaWVsZFtdLCBjb2xzOiBhbnlbXX0+fVxuICAgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIGNyZWF0ZVRhYmxlQW5kR2V0QXJyb3coZGF0YSk6IFByb21pc2U8e2ZpZWxkczogYW55W107IGNvbHM6IGFycm93LlZlY3RvcltdfT4ge1xuICAgIGNvbnN0IGRiID0gYXdhaXQgZ2V0RHVja0RCKCk7XG4gICAgY29uc3QgYyA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcblxuICAgIGNvbnN0IHRhYmxlTmFtZSA9IHRoaXMubGFiZWw7XG4gICAgYXdhaXQgZHJvcFRhYmxlSWZFeGlzdHMoYywgdGFibGVOYW1lKTtcblxuICAgIGxldCBmb3JtYXQgPSB0aGlzLm1ldGFkYXRhLmZvcm1hdDtcbiAgICBpZiAoIWZvcm1hdCkge1xuICAgICAgLy8gZm9ybWF0IGlzIG1pc3Npbmcgd2hlbiB3ZSBsb2FkIEtlcGxlci5nbCBleGFtcGxlc1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YS5yb3dzPy5bMF0pIHx8IHR5cGVvZiBkYXRhLnJvd3M/LlswXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLnJvdztcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5yb3dzPy50eXBlID09PSAnRmVhdHVyZUNvbGxlY3Rpb24nKSB7XG4gICAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5nZW9qc29uO1xuICAgICAgfSBlbHNlIGlmIChkYXRhLmNvbHM/LlswXSBpbnN0YW5jZW9mIGFycm93LlZlY3Rvcikge1xuICAgICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMuYXJyb3c7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGltcG9ydERldGFpbHM6IEltcG9ydERhdGFUb0R1Y2tSZXN1bHQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLnJvdykge1xuICAgICAgYXdhaXQgdGhpcy5pbXBvcnRSb3dEYXRhKHtkYXRhLCBkYiwgY30pO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbikge1xuICAgICAgaW1wb3J0RGV0YWlscyA9IGF3YWl0IHRoaXMuaW1wb3J0R2VvSnNvbkRhdGEoe2RhdGEsIGRiLCBjfSk7XG4gICAgfSBlbHNlIGlmIChmb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5hcnJvdykge1xuICAgICAgaW1wb3J0RGV0YWlscyA9IGF3YWl0IHRoaXMuaW1wb3J0QXJyb3dEYXRhKHtkYXRhLCBkYiwgY30pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdVbnJlY29nbml6ZWQgZm9ybWF0JywgZm9ybWF0KTtcbiAgICB9XG5cbiAgICBsZXQgZmllbGRzOiBGaWVsZFtdID0gW107XG4gICAgbGV0IGNvbHM6IGFycm93LlZlY3RvcltdID0gW107XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qge2dlb2Fycm93TWV0YWRhdGEgPSB7fSwgdXNlTmV3RmllbGRzID0gZmFsc2V9ID0gaW1wb3J0RGV0YWlscyB8fCB7fTtcblxuICAgICAgY29uc3QgZHVja0RiQ29sdW1ucyA9IGF3YWl0IGdldER1Y2tEQkNvbHVtblR5cGVzKGMsIHRhYmxlTmFtZSk7XG4gICAgICBjb25zdCB0YWJsZUR1Y2tEQlR5cGVzID0gZ2V0RHVja0RCQ29sdW1uVHlwZXNNYXAoZHVja0RiQ29sdW1ucyk7XG4gICAgICBjb25zdCBjb2x1bW5zVG9Db252ZXJ0VG9XS0IgPSBnZXRHZW9tZXRyeUNvbHVtbnMoZHVja0RiQ29sdW1ucyk7XG4gICAgICBjb25zdCBhZGp1c3RlZFF1ZXJ5ID0gY29uc3RydWN0U1RfYXNXS0JRdWVyeSh0YWJsZU5hbWUsIGNvbHVtbnNUb0NvbnZlcnRUb1dLQik7XG4gICAgICBjb25zdCBhcnJvd1Jlc3VsdCA9IGF3YWl0IGMucXVlcnkoYWRqdXN0ZWRRdWVyeSk7XG5cbiAgICAgIC8vIFRPRE8gaWYgZm9ybWF0IGlzIGFuIGFycm93IHRhYmxlIHRoZW4ganVzdCB1c2UgdGhlIG9yaWdpbmFsIG9uZSwgaW5zdGVhZCBvZiB0aGUgbmV3IHRhYmxlIGZyb20gdGhlIHF1ZXJ5P1xuXG4gICAgICByZXN0b3JlR2VvYXJyb3dNZXRhZGF0YShhcnJvd1Jlc3VsdCwgZ2VvYXJyb3dNZXRhZGF0YSk7XG5cbiAgICAgIGZpZWxkcyA9IHVzZU5ld0ZpZWxkc1xuICAgICAgICA/IGFycm93U2NoZW1hVG9GaWVsZHMoYXJyb3dSZXN1bHQsIHRhYmxlRHVja0RCVHlwZXMpXG4gICAgICAgIDogZGF0YS5maWVsZHMgPz8gYXJyb3dTY2hlbWFUb0ZpZWxkcyhhcnJvd1Jlc3VsdCwgdGFibGVEdWNrREJUeXBlcyk7XG4gICAgICBjb2xzID0gWy4uLkFycmF5KGFycm93UmVzdWx0Lm51bUNvbHMpLmtleXMoKV1cbiAgICAgICAgLm1hcChpID0+IGFycm93UmVzdWx0LmdldENoaWxkQXQoaSkpXG4gICAgICAgIC5maWx0ZXIoY29sID0+IGNvbCkgYXMgYXJyb3cuVmVjdG9yW107XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0R1Y2tEQiB0YWJsZTogY3JlYXRlVGFibGVBbmRHZXRBcnJvdycsIGVycm9yKTtcbiAgICB9XG5cbiAgICBhd2FpdCBjLmNsb3NlKCk7XG5cbiAgICByZXR1cm4ge2ZpZWxkcywgY29sc307XG4gIH1cblxuICBhc3luYyBpbXBvcnREYXRhKHtkYXRhfToge2RhdGE6IFByb2Nlc3NvclJlc3VsdH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBWZWN0b3JUaWxlIGlzIGEgc3BlY2lhbCBjYXNlLCBpZ25vcmUgZm9yIG5vd1xuICAgIGlmICh0aGlzLnR5cGUgPT09IERhdGFzZXRUeXBlLlZFQ1RPUl9USUxFKSB7XG4gICAgICBzdXBlci5pbXBvcnREYXRhKHtkYXRhOiB7Li4uZGF0YSwgcm93czogW119fSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qge2ZpZWxkcywgY29sc30gPSBhd2FpdCB0aGlzLmNyZWF0ZVRhYmxlQW5kR2V0QXJyb3coZGF0YSk7XG5cbiAgICBzdXBlci5pbXBvcnREYXRhKHtkYXRhOiB7ZmllbGRzLCBjb2xzLCByb3dzOiBbXX19KTtcbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZShkYXRhKSB7XG4gICAgLy8gVmVjdG9yVGlsZSBpcyBhIHNwZWNpYWwgY2FzZSwgaWdub3JlIGZvciBub3dcbiAgICBpZiAodGhpcy50eXBlID09PSBEYXRhc2V0VHlwZS5WRUNUT1JfVElMRSkge1xuICAgICAgc3VwZXIuaW1wb3J0RGF0YSh7ZGF0YX0pO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgY29uc3Qge2NvbHN9ID0gYXdhaXQgdGhpcy5jcmVhdGVUYWJsZUFuZEdldEFycm93KGRhdGEpO1xuXG4gICAgcmV0dXJuIHN1cGVyLnVwZGF0ZSh7Y29scywgcm93czogW10sIGZpZWxkczogW119KTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRGaWxlUHJvY2Vzc29yID0gZnVuY3Rpb24gKGRhdGE6IGFueSwgaW5wdXRGb3JtYXQ/OiBzdHJpbmcpIHtcbiAgICBsZXQgcHJvY2Vzc29yO1xuICAgIGxldCBmb3JtYXQ7XG4gICAgaWYgKGlucHV0Rm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMuYXJyb3cgfHwgaXNBcnJvd0RhdGEoZGF0YSkpIHtcbiAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5hcnJvdztcbiAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3NBcnJvd0JhdGNoZXM7XG4gICAgfSBlbHNlIGlmIChpbnB1dEZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmtlcGxlcmdsIHx8IGlzS2VwbGVyR2xNYXAoZGF0YSkpIHtcbiAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5rZXBsZXJnbDtcbiAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3NLZXBsZXJnbEpTT05mb3JEdWNrRGI7XG4gICAgfSBlbHNlIGlmIChpbnB1dEZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLnJvdyB8fCBpc1Jvd09iamVjdChkYXRhKSkge1xuICAgICAgLy8gY3N2IGZpbGUgZ29lcyBoZXJlXG4gICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMucm93O1xuICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc0NzdlJvd09iamVjdDsgLy8gZGlyZWN0bHkgaW1wb3J0IGpzb24gb2JqZWN0IGludG8gZHVja2RiLXdhc21cbiAgICB9IGVsc2UgaWYgKGlucHV0Rm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbiB8fCBpc0dlb0pzb24oZGF0YSkpIHtcbiAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5nZW9qc29uO1xuICAgICAgcHJvY2Vzc29yID0gcHJvY2Vzc0dlb2pzb247XG4gICAgfVxuICAgIHJldHVybiB7cHJvY2Vzc29yLCBmb3JtYXR9O1xuICB9O1xuXG4gIHN0YXRpYyBnZXRJbnB1dERhdGFWYWxpZGF0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgLy8gSW4gRHVja0RCIG1vZGUgZGF0YSBpcyB2YWxpZGF0ZWQgbGF0ZXIgZHVyaW5nIGltcG9ydC5cbiAgICByZXR1cm4gZCA9PiBkO1xuICB9O1xufVxuXG4vKipcbiAqIFRyeSB0byByZXN0b3JlIGdlb2Fycm93IG1ldGFkYXRhIGxvc3QgZHVyaW5nIER1Y2tEYiBpbmdlc3Rpb24uXG4gKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBjYW4gZ2VuZXJhdGUgd3JvbmcgZ2VvbWV0cnkgdHlwZXMuXG4gKiBAcGFyYW0gYXJyb3dUYWJsZSBBcnJvdyB0YWJsZSB0byB1cGRhdGUuXG4gKiBAcGFyYW0gZ2VvYXJyb3dNZXRhZGF0YSBBIG1hcCB3aXRoIGZpZWxkIG5hbWVzIHRoYXQgdXN1YWxseSB1c2VkIHRvIHN0b3JlIGdlb2Fycm93IGdlb21ldHJ5LlxuICovXG5jb25zdCByZXN0b3JlR2VvYXJyb3dNZXRhZGF0YSA9IGFzeW5jIChcbiAgYXJyb3dUYWJsZTogYXJyb3cuVGFibGUsXG4gIGdlb2Fycm93TWV0YWRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5cbikgPT4ge1xuICBhcnJvd1RhYmxlLnNjaGVtYS5maWVsZHMuZm9yRWFjaChmID0+IHtcbiAgICBpZiAoYXJyb3cuRGF0YVR5cGUuaXNCaW5hcnkoZi50eXBlKSAmJiBnZW9hcnJvd01ldGFkYXRhW2YubmFtZV0pIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgZ2VvYXJyb3dNZXRhZGF0YVtmLm5hbWVdKTtcbiAgICB9IGVsc2UgaWYgKGlzR2VvQXJyb3dQb2ludChmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuUE9JTlQpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd0xpbmVTdHJpbmcoZi50eXBlKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBHRU9BUlJPV19FWFRFTlNJT05TLkxJTkVTVFJJTkcpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd1BvbHlnb24oZi50eXBlKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBHRU9BUlJPV19FWFRFTlNJT05TLlBPTFlHT04pO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd011bHRpUG9pbnQoZi50eXBlKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBHRU9BUlJPV19FWFRFTlNJT05TLk1VTFRJUE9JTlQpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd011bHRpTGluZVN0cmluZyhmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuTVVMVElMSU5FU1RSSU5HKTtcbiAgICB9IGVsc2UgaWYgKGlzR2VvQXJyb3dNdWx0aVBvbHlnb24oZi50eXBlKSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBHRU9BUlJPV19FWFRFTlNJT05TLk1VTFRJUE9MWUdPTik7XG4gICAgfVxuICB9KTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFHQSxJQUFBQSxLQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFHQSxJQUFBQyxVQUFBLEdBQUFELE9BQUE7QUFNQSxJQUFBRSxXQUFBLEdBQUFGLE9BQUE7QUFRQSxJQUFBRyxNQUFBLEdBQUFILE9BQUE7QUFHQSxJQUFBSSxLQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxjQUFBLEdBQUFMLE9BQUE7QUFPQSxJQUFBTSxpQkFBQSxHQUFBTixPQUFBO0FBU0EsSUFBQU8sa0JBQUEsR0FBQVAsT0FBQTtBQVNxQyxTQUFBUSx5QkFBQUMsQ0FBQSw2QkFBQUMsT0FBQSxtQkFBQUMsQ0FBQSxPQUFBRCxPQUFBLElBQUFFLENBQUEsT0FBQUYsT0FBQSxZQUFB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
|
|
458
|
+
var restoreGeoarrowMetadata = exports.restoreGeoarrowMetadata = function restoreGeoarrowMetadata(arrowTable, geoarrowMetadata) {
|
|
459
|
+
arrowTable.schema.fields.forEach(function (f) {
|
|
460
|
+
if (arrow.DataType.isBinary(f.type) && geoarrowMetadata[f.name]) {
|
|
461
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, geoarrowMetadata[f.name]);
|
|
462
|
+
} else if ((0, _duckdbTableUtils.isGeoArrowPoint)(f.type)) {
|
|
463
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.POINT);
|
|
464
|
+
} else if ((0, _duckdbTableUtils.isGeoArrowLineString)(f.type)) {
|
|
465
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.LINESTRING);
|
|
466
|
+
} else if ((0, _duckdbTableUtils.isGeoArrowPolygon)(f.type)) {
|
|
467
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.POLYGON);
|
|
468
|
+
} else if ((0, _duckdbTableUtils.isGeoArrowMultiPoint)(f.type)) {
|
|
469
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.MULTIPOINT);
|
|
470
|
+
} else if ((0, _duckdbTableUtils.isGeoArrowMultiLineString)(f.type)) {
|
|
471
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.MULTILINESTRING);
|
|
472
|
+
} else if ((0, _duckdbTableUtils.isGeoArrowMultiPolygon)(f.type)) {
|
|
473
|
+
f.metadata.set(_constants.GEOARROW_METADATA_KEY, _constants.GEOARROW_EXTENSIONS.MULTIPOLYGON);
|
|
474
|
+
}
|
|
475
|
+
});
|
|
476
|
+
};
|
|
477
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJhcnJvdyIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsIl9jb25zdGFudHMiLCJfcHJvY2Vzc29ycyIsIl90YWJsZSIsIl91dGlscyIsIl9kYXRhUHJvY2Vzc29yIiwiX2R1Y2tkYlRhYmxlVXRpbHMiLCJfZHVja2RiVGFibGVVdGlsczIiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YzIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NhbGxTdXBlciIsIl9nZXRQcm90b3R5cGVPZjIiLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybjIiLCJfaXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiUmVmbGVjdCIsImNvbnN0cnVjdCIsImNvbnN0cnVjdG9yIiwiQm9vbGVhbiIsInByb3RvdHlwZSIsInZhbHVlT2YiLCJfc3VwZXJQcm9wR2V0IiwicCIsIl9nZXQyIiwiRFVDS0RCX0dFT01fQ09MVU1OIiwiRFVDS0RCX1dLQl9DT0xVTU4iLCJLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OIiwiU1VHR0VTVEVEX0dFT01fQ09MVU1OUyIsIkdFT0FSUk9XX0VYVEVOU0lPTlMiLCJXS0IiLCJLZXBsZXJHbER1Y2tEYlRhYmxlIiwiZXhwb3J0cyIsIl9LZXBsZXJUYWJsZSIsInByb3BzIiwiX2NsYXNzQ2FsbENoZWNrMiIsIl9pbmhlcml0czIiLCJfY3JlYXRlQ2xhc3MyIiwia2V5IiwidmFsdWUiLCJfaW1wb3J0Um93RGF0YSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwiX3JlZiIsImRhdGEiLCJkYiIsImMiLCJmaWVsZHMiLCJyb3dzIiwicm93c0ZvckRiIiwiY29sdW1ucyIsImNyZWF0ZVRhYmxlU3FsIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsIkFycmF5IiwiaXNBcnJheSIsIm1hcCIsInJvdyIsIm5ld1JvdyIsImluZGV4IiwibmFtZSIsInJlZ2lzdGVyRmlsZVRleHQiLCJpZCIsIkpTT04iLCJzdHJpbmdpZnkiLCJyZWR1Y2UiLCJhY2MiLCJmaWVsZCIsImNvbmNhdCIsImR1Y2tEQkNvbHVtblR5cGUiLCJsYWJlbCIsInF1ZXJ5IiwidDAiLCJjb25zb2xlIiwibG9nIiwic3RvcCIsImltcG9ydFJvd0RhdGEiLCJfeCIsIl9pbXBvcnRHZW9Kc29uRGF0YSIsIl9jYWxsZWUyIiwiX3JlZjIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJlcnJvciIsImFicnVwdCIsImdlb2Fycm93TWV0YWRhdGEiLCJpbXBvcnRHZW9Kc29uRGF0YSIsIl94MiIsIl9pbXBvcnRBcnJvd0RhdGEiLCJfY2FsbGVlMyIsIl9yZWYzIiwiYWRqdXN0ZWRNZXRhZGF0YSIsImFycm93VGFibGUiLCJzZXR1cFNxbCIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsIlRhYmxlIiwicmVzdG9yZUFycm93VGFibGUiLCJjb2xzIiwiYXJyb3dTY2hlbWEiLCJyZW1vdmVVbnN1cHBvcnRlZEV4dGVuc2lvbnMiLCJpbnNlcnRBcnJvd1RhYmxlIiwicmVzdG9yZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyIsInVzZU5ld0ZpZWxkcyIsImltcG9ydEFycm93RGF0YSIsIl94MyIsIl9jcmVhdGVUYWJsZUFuZEdldEFycm93IiwiX2NhbGxlZTQiLCJ0YWJsZU5hbWUiLCJmb3JtYXQiLCJfZGF0YSRyb3dzIiwiX2RhdGEkcm93czIiLCJfZGF0YSRyb3dzMyIsIl9kYXRhJGNvbHMiLCJpbXBvcnREZXRhaWxzIiwiX2RhdGEkZmllbGRzIiwiX3JlZjQiLCJfcmVmNCRnZW9hcnJvd01ldGFkYXQiLCJfcmVmNCR1c2VOZXdGaWVsZHMiLCJkdWNrRGJDb2x1bW5zIiwidGFibGVEdWNrREJUeXBlcyIsImNvbHVtbnNUb0NvbnZlcnRUb1dLQiIsImFkanVzdGVkUXVlcnkiLCJhcnJvd1Jlc3VsdCIsIl9jYWxsZWU0JCIsIl9jb250ZXh0NCIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiZGF0YWJhc2UiLCJzZW50IiwiY29ubmVjdCIsImRyb3BUYWJsZUlmRXhpc3RzIiwibWV0YWRhdGEiLCJfdHlwZW9mMiIsIkRBVEFTRVRfRk9STUFUUyIsInR5cGUiLCJnZW9qc29uIiwiVmVjdG9yIiwiZ2V0RHVja0RCQ29sdW1uVHlwZXMiLCJnZXREdWNrREJDb2x1bW5UeXBlc01hcCIsImdldEdlb21ldHJ5Q29sdW1ucyIsImNvbnN0cnVjdFNUX2FzV0tCUXVlcnkiLCJyZXN0b3JlR2VvYXJyb3dNZXRhZGF0YSIsImFycm93U2NoZW1hVG9GaWVsZHMiLCJfdG9Db25zdW1hYmxlQXJyYXkyIiwibnVtQ29scyIsImdldENoaWxkQXQiLCJjb2wiLCJjbG9zZSIsImNyZWF0ZVRhYmxlQW5kR2V0QXJyb3ciLCJfeDQiLCJfaW1wb3J0RGF0YSIsIl9jYWxsZWU1IiwiX3JlZjUiLCJfeWllbGQkdGhpcyRjcmVhdGVUYWIiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJEYXRhc2V0VHlwZSIsIlZFQ1RPUl9USUxFIiwiaW1wb3J0RGF0YSIsIl94NSIsIl91cGRhdGUiLCJfY2FsbGVlNiIsIl95aWVsZCR0aGlzJGNyZWF0ZVRhYjIiLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJ1cGRhdGUiLCJfeDYiLCJLZXBsZXJUYWJsZSIsImlucHV0Rm9ybWF0IiwicHJvY2Vzc29yIiwiaXNBcnJvd0RhdGEiLCJwcm9jZXNzQXJyb3dCYXRjaGVzIiwia2VwbGVyZ2wiLCJpc0tlcGxlckdsTWFwIiwicHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYiIsImlzUm93T2JqZWN0IiwicHJvY2Vzc0NzdlJvd09iamVjdCIsImlzR2VvSnNvbiIsInByb2Nlc3NHZW9qc29uIiwiZCIsInNjaGVtYSIsImYiLCJEYXRhVHlwZSIsImlzQmluYXJ5IiwiR0VPQVJST1dfTUVUQURBVEFfS0VZIiwiaXNHZW9BcnJvd1BvaW50IiwiUE9JTlQiLCJpc0dlb0Fycm93TGluZVN0cmluZyIsIkxJTkVTVFJJTkciLCJpc0dlb0Fycm93UG9seWdvbiIsIlBPTFlHT04iLCJpc0dlb0Fycm93TXVsdGlQb2ludCIsIk1VTFRJUE9JTlQiLCJpc0dlb0Fycm93TXVsdGlMaW5lU3RyaW5nIiwiTVVMVElMSU5FU1RSSU5HIiwiaXNHZW9BcnJvd011bHRpUG9seWdvbiIsIk1VTFRJUE9MWUdPTiJdLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90YWJsZS9kdWNrZGItdGFibGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcblxuaW1wb3J0IHtcbiAgRGF0YXNldFR5cGUsXG4gIERBVEFTRVRfRk9STUFUUyxcbiAgR0VPQVJST1dfRVhURU5TSU9OUyxcbiAgR0VPQVJST1dfTUVUQURBVEFfS0VZXG59IGZyb20gJ0BrZXBsZXIuZ2wvY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIGFycm93U2NoZW1hVG9GaWVsZHMsXG4gIGlzQXJyb3dEYXRhLFxuICBpc0dlb0pzb24sXG4gIGlzS2VwbGVyR2xNYXAsXG4gIGlzUm93T2JqZWN0LFxuICBwcm9jZXNzQXJyb3dCYXRjaGVzXG59IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5pbXBvcnQge0tlcGxlclRhYmxlfSBmcm9tICdAa2VwbGVyLmdsL3RhYmxlJztcbmltcG9ydCB7RmllbGR9IGZyb20gJ0BrZXBsZXIuZ2wvdHlwZXMnO1xuaW1wb3J0IHtnZXRBcHBsaWNhdGlvbkNvbmZpZywgRGF0YWJhc2VBZGFwdGVyLCBEYXRhYmFzZUNvbm5lY3Rpb259IGZyb20gJ0BrZXBsZXIuZ2wvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBwcm9jZXNzQ3N2Um93T2JqZWN0LFxuICBwcm9jZXNzR2VvanNvbixcbiAgcHJvY2Vzc0tlcGxlcmdsSlNPTmZvckR1Y2tEYixcbiAgUHJvY2Vzc29yUmVzdWx0XG59IGZyb20gJy4uL3Byb2Nlc3NvcnMvZGF0YS1wcm9jZXNzb3InO1xuXG5pbXBvcnQge1xuICBpc0dlb0Fycm93UG9pbnQsXG4gIGlzR2VvQXJyb3dMaW5lU3RyaW5nLFxuICBpc0dlb0Fycm93UG9seWdvbixcbiAgaXNHZW9BcnJvd011bHRpUG9pbnQsXG4gIGlzR2VvQXJyb3dNdWx0aUxpbmVTdHJpbmcsXG4gIGlzR2VvQXJyb3dNdWx0aVBvbHlnb25cbn0gZnJvbSAnLi9kdWNrZGItdGFibGUtdXRpbHMnO1xuXG5pbXBvcnQge1xuICBjb25zdHJ1Y3RTVF9hc1dLQlF1ZXJ5LFxuICBkcm9wVGFibGVJZkV4aXN0cyxcbiAgZ2V0RHVja0RCQ29sdW1uVHlwZXMsXG4gIGdldER1Y2tEQkNvbHVtblR5cGVzTWFwLFxuICBnZXRHZW9tZXRyeUNvbHVtbnMsXG4gIHJlbW92ZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyxcbiAgcmVzdG9yZUFycm93VGFibGUsXG4gIHJlc3RvcmVVbnN1cHBvcnRlZEV4dGVuc2lvbnNcbn0gZnJvbSAnLi4vdGFibGUvZHVja2RiLXRhYmxlLXV0aWxzJztcblxuLy8gVE9ETyB1c2UgZmlsZXMgZnJvbSBkaXNrIG9yIHVybCBkaXJlY3RseSwgd2l0aG91dCBwYXJzaW5nIGJ5IGxvYWRlcnMgYW5kIHRoZW4gaW5nZWN0aW9uIGludG8gRGVja0RiXG5cbi8qKlxuICogRGVmYXVsdCBEdWNrRGIgZ2VvbWV0cnkgY29sdW1ucyBjcmVhdGVkIGJ5IFNUX1JFQURcbiAqL1xuY29uc3QgRFVDS0RCX0dFT01fQ09MVU1OID0gJ2dlb20nO1xuY29uc3QgRFVDS0RCX1dLQl9DT0xVTU4gPSAnd2tiX2dlb21ldHJ5JztcblxuLyoqXG4gRGVmYXVsdCBjb2x1bW4gbmFtZSBmb3IgcHJvY2Vzc2VkIGdlb2pzb24gaW4gS2VwbGVyLlxuIFVzZSB0aGlzIG5hbWUgdG8gcmVuYW1lIGRlZmF1bHQgJ2dlb20nIGNvbHVtbiBmcm9tIER1Y2tEYlxuIGluIG9yZGVyIHRvIHN1cHBvcnQgS2VwbGVyIG1hcHMgc2F2ZWQgYmVmb3JlIGludHJvZHVjdGlvbiBvZiBEdWNrRGIgcGx1Z2luLlxuICovXG5jb25zdCBLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OID0gJ19nZW9qc29uJztcblxuLyoqXG4gKiBOYW1lcyBvZiBjb2x1bW5zIHRoYXQgbW9zdCBsaWtlbHkgY29udGFpbiBiaW5hcnkgd2tiIGdlb21ldHJ5XG4gKi9cbmNvbnN0IFNVR0dFU1RFRF9HRU9NX0NPTFVNTlMgPSB7XG4gIFtLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OXTogR0VPQVJST1dfRVhURU5TSU9OUy5XS0IsXG4gIFtEVUNLREJfR0VPTV9DT0xVTU5dOiBHRU9BUlJPV19FWFRFTlNJT05TLldLQixcbiAgZ2VvbWV0cnk6IEdFT0FSUk9XX0VYVEVOU0lPTlMuV0tCXG59O1xuXG50eXBlIEltcG9ydERhdGFUb0R1Y2tQcm9wcyA9IHtcbiAgZGF0YTogUHJvY2Vzc29yUmVzdWx0ICYge2Fycm93U2NoZW1hOiBhcnJvdy5TY2hlbWF9O1xuICBkYjogRGF0YWJhc2VBZGFwdGVyO1xuICBjOiBEYXRhYmFzZUNvbm5lY3Rpb247XG59O1xuXG50eXBlIEltcG9ydERhdGFUb0R1Y2tSZXN1bHQgPSB7XG4gIC8vIER1Y2tEYiBkcm9wcyBnZW9hcnJvdyBtZXRhZGF0YSwgc28gdHJ5IHRvIHByZXNlcnZlIGFuZCB0aGVuIHJlc3RvcmUgdGhlIGV4dGVuc2lvbiBuYW1lXG4gIGdlb2Fycm93TWV0YWRhdGE/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAvLyBVc2UgZmllbGRzIGZyb20gYXJyb3cgdGFibGUgZXZlbiBpZiBmaWVsZHMgYXJlIHByb3ZpZGVkXG4gIHVzZU5ld0ZpZWxkcz86IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY2xhc3MgS2VwbGVyR2xEdWNrRGJUYWJsZSBleHRlbmRzIEtlcGxlclRhYmxlIHtcbiAgZGVjbGFyZSByZWFkb25seSBpZDogc3RyaW5nO1xuICBkZWNsYXJlIGxhYmVsOiBzdHJpbmc7XG4gIGRlY2xhcmUgdHlwZTogc3RyaW5nO1xuICBkZWNsYXJlIG1ldGFkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICB9XG5cbiAgYXN5bmMgaW1wb3J0Um93RGF0YSh7ZGF0YSwgZGIsIGN9OiBJbXBvcnREYXRhVG9EdWNrUHJvcHMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge2ZpZWxkcywgcm93c30gPSBkYXRhO1xuXG4gICAgICAvLyBEQVRBU0VUX0ZPUk1BVFMua2VwbGVyZ2wgbG9hZHMgZGF0YSBhcyBhbnlbXVtdIGluc3RlYWQgb2YgW3t9XVxuICAgICAgLy8gVE9ETyBwb3RlbnRpYWwgbWVtb3J5IHVzYWdlIGV4cGxvc2lvbjogb3JpZ2luYWwgZGF0YSwgbmV3IG9iamVjdCBhbmQgdGhlbiBEdWNrRGIgdGFibGVcbiAgICAgIGNvbnN0IHJvd3NGb3JEYiA9IEFycmF5LmlzQXJyYXkocm93c1swXSlcbiAgICAgICAgPyByb3dzLm1hcChyb3cgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3Um93ID0ge307XG4gICAgICAgICAgICByb3cuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgIG5ld1Jvd1tmaWVsZHNbaW5kZXhdLm5hbWVdID0gdmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBuZXdSb3c7XG4gICAgICAgICAgfSlcbiAgICAgICAgOiByb3dzO1xuXG4gICAgICBhd2FpdCBkYi5yZWdpc3RlckZpbGVUZXh0KHRoaXMuaWQsIEpTT04uc3RyaW5naWZ5KHJvd3NGb3JEYikpO1xuXG4gICAgICBjb25zdCBjb2x1bW5zID0gZmllbGRzLnJlZHVjZSgoYWNjLCBmaWVsZCwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBUT0RPIGV4dGVuZCBmaWVsZHMgdG8gY29udGFpbiBkdWNrREJDb2x1bW5UeXBlXG4gICAgICAgIHJldHVybiBgJHthY2N9JHtpbmRleCA+IDAgPyAnLCcgOiAnJ30gJyR7ZmllbGQubmFtZX0nOiAnJHtmaWVsZC5kdWNrREJDb2x1bW5UeXBlfSdgO1xuICAgICAgfSwgJycpO1xuXG4gICAgICBjb25zdCBjcmVhdGVUYWJsZVNxbCA9IGBcbiAgICAgICAgQ1JFQVRFIFRBQkxFICcke3RoaXMubGFiZWx9JyBBU1xuICAgICAgICBTRUxFQ1QgKlxuICAgICAgICBGUk9NIHJlYWRfanNvbignJHt0aGlzLmlkfScsXG4gICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMgPSB7JHtjb2x1bW5zfX0pO1xuICAgICAgYDtcbiAgICAgIGF3YWl0IGMucXVlcnkoY3JlYXRlVGFibGVTcWwpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmxvZygnaW1wb3J0Um93RGF0YScsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpbXBvcnRHZW9Kc29uRGF0YSh7ZGF0YSwgZGIsIGN9OiBJbXBvcnREYXRhVG9EdWNrUHJvcHMpOiBQcm9taXNlPEltcG9ydERhdGFUb0R1Y2tSZXN1bHQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qge3Jvd3N9ID0gZGF0YTtcbiAgICAgIGF3YWl0IGRiLnJlZ2lzdGVyRmlsZVRleHQodGhpcy5pZCwgSlNPTi5zdHJpbmdpZnkocm93cykpO1xuXG4gICAgICBjb25zdCBjcmVhdGVUYWJsZVNxbCA9IGBcbiAgICAgICAgaW5zdGFsbCBzcGF0aWFsO1xuICAgICAgICBsb2FkIHNwYXRpYWw7XG4gICAgICAgIENSRUFURSBUQUJMRSAnJHt0aGlzLmxhYmVsfScgQVMgXG4gICAgICAgIFNFTEVDVCAqXG4gICAgICAgIEZST00gU1RfUkVBRCgnJHt0aGlzLmlkfScsIGtlZXBfd2tiID0gVFJVRSk7XG4gICAgICAgIEFMVEVSIFRBQkxFICcke3RoaXMubGFiZWx9JyBSRU5BTUUgJyR7RFVDS0RCX1dLQl9DT0xVTU59JyBUTyAnJHtLRVBMRVJfR0VPTV9GUk9NX0dFT0pTT05fQ09MVU1OfSc7XG4gICAgICBgO1xuICAgICAgYXdhaXQgYy5xdWVyeShjcmVhdGVUYWJsZVNxbCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ltcG9ydEdlb0pzb25EYXRhJywgZXJyb3IpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAvLyBfZ2VvanNvbiBjb2x1bW4gaXMgY3JlYXRlZCBmcm9tIGdlb21ldHJ5IHdpdGgga2VlcF93a2IgZmxhZyBhbmQgY29udGFpbnMgdmFsaWQgV0tCIGRhdGEuXG4gICAgICBnZW9hcnJvd01ldGFkYXRhOiB7W0tFUExFUl9HRU9NX0ZST01fR0VPSlNPTl9DT0xVTU5dOiBHRU9BUlJPV19FWFRFTlNJT05TLldLQn1cbiAgICB9O1xuICB9XG5cbiAgYXN5bmMgaW1wb3J0QXJyb3dEYXRhKHtkYXRhLCBjfTogSW1wb3J0RGF0YVRvRHVja1Byb3BzKTogUHJvbWlzZTxJbXBvcnREYXRhVG9EdWNrUmVzdWx0PiB7XG4gICAgbGV0IGFkanVzdGVkTWV0YWRhdGEgPSB7fTtcbiAgICB0cnkge1xuICAgICAgLy8gMSkgZGF0YS5yb3dzIGNvbnRhaW5zIGFuIGFycm93IHRhYmxlIGNyZWF0ZWQgYnkgQWRkIHRvIE1hcCBkYXRhIGZyb20gRHVja0RiIHF1ZXJ5LlxuICAgICAgLy8gMikgYXJyb3cgdGFibGUgaXMgaW4gY29scyAmIGZpZWxkcyB3aGVuIGEgZmlsZSBpcyBkcmFnZ2VkICYgZHJvcHBlZCBpbnRvIEFkZCBEYXRhIFRvIE1hcCBkaWFsb2cuXG4gICAgICBjb25zdCBhcnJvd1RhYmxlID1cbiAgICAgICAgZGF0YS5yb3dzIGluc3RhbmNlb2YgYXJyb3cuVGFibGVcbiAgICAgICAgICA/IGRhdGEucm93c1xuICAgICAgICAgIDogcmVzdG9yZUFycm93VGFibGUoZGF0YS5jb2xzIHx8IFtdLCBkYXRhLmZpZWxkcywgZGF0YS5hcnJvd1NjaGVtYSk7XG5cbiAgICAgIC8vIHJlbW92ZSB1bnN1cHBvcnRlZCBleHRlbnNpb25zIGZyb20gYW4gYXJyb3cgdGFibGUgdGhhdCB0aHJvdyBleGNlcHRpb25zIGluIER1Y2tEQi5cbiAgICAgIGFkanVzdGVkTWV0YWRhdGEgPSByZW1vdmVVbnN1cHBvcnRlZEV4dGVuc2lvbnMoYXJyb3dUYWJsZSk7XG5cbiAgICAgIGNvbnN0IHNldHVwU3FsID0gYFxuICAgICAgICBpbnN0YWxsIHNwYXRpYWw7XG4gICAgICAgIGxvYWQgc3BhdGlhbDtcbiAgICAgIGA7XG4gICAgICBhd2FpdCBjLnF1ZXJ5KHNldHVwU3FsKTtcbiAgICAgIGF3YWl0IGMuaW5zZXJ0QXJyb3dUYWJsZShhcnJvd1RhYmxlLCB7bmFtZTogdGhpcy5sYWJlbH0pO1xuXG4gICAgICAvLyByZXN0b3JlIHVuc3VwcG9ydGVkIGV4dGVuc2lvbnMgdGhhdCB0aHJvdyBleGNlcHRpb25zIGluIER1Y2tEYlxuICAgICAgcmVzdG9yZVVuc3VwcG9ydGVkRXh0ZW5zaW9ucyhhcnJvd1RhYmxlLCBhZGp1c3RlZE1ldGFkYXRhKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gS25vd24gaXNzdWVzOlxuICAgICAgLy8gMSkgQXJyb3cgVHlwZSB3aXRoIGV4dGVuc2lvbiBuYW1lOiBnZW9hcnJvdy5wb2ludCBhbmQgZm9ybWF0OiArdzoyIGlzIG5vdCBjdXJyZW50bHkgc3VwcG9ydGVkIGluIER1Y2tEQi5cbiAgICAgIGNvbnNvbGUuZXJyb3IoJ2ltcG9ydEFycm93RGF0YScsIGVycm9yKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZ2VvYXJyb3dNZXRhZGF0YTogey4uLlNVR0dFU1RFRF9HRU9NX0NPTFVNTlMsIC4uLmFkanVzdGVkTWV0YWRhdGF9LFxuICAgICAgLy8gdXNlIGZpZWxkcyBnZW5lcmF0ZWQgZnJvbSB0aGUgY3JlYXRlZCBhcnJvdyB0YWJsZVxuICAgICAgdXNlTmV3RmllbGRzOiB0cnVlXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgdGFibGUgZnJvbSBkYXRhLCByZXR1cm5zIGFuIGFycm93IHRhYmxlIHdpdGggdGhlIGRhdGFcbiAgICogQHBhcmFtIGRhdGFcbiAgICogQHJldHVybnMge1Byb21pc2U8e2ZpZWxkczogRmllbGRbXSwgY29sczogYW55W119Pn1cbiAgICovXG4gIHByb3RlY3RlZCBhc3luYyBjcmVhdGVUYWJsZUFuZEdldEFycm93KGRhdGEpOiBQcm9taXNlPHtmaWVsZHM6IGFueVtdOyBjb2xzOiBhcnJvdy5WZWN0b3JbXX0+IHtcbiAgICBjb25zdCBkYiA9IGF3YWl0IGdldEFwcGxpY2F0aW9uQ29uZmlnKCkuZGF0YWJhc2U7XG4gICAgaWYgKCFkYikge1xuICAgICAgY29uc29sZS5lcnJvcignVGhlIGRhdGFiYXNlIGlzIG5vdCBjb25maWd1cmVkIHByb3Blcmx5LicpO1xuICAgICAgcmV0dXJuIHtmaWVsZHM6IFtdLCBjb2xzOiBbXX07XG4gICAgfVxuICAgIGNvbnN0IGMgPSBhd2FpdCBkYi5jb25uZWN0KCk7XG5cbiAgICBjb25zdCB0YWJsZU5hbWUgPSB0aGlzLmxhYmVsO1xuICAgIGF3YWl0IGRyb3BUYWJsZUlmRXhpc3RzKGMsIHRhYmxlTmFtZSk7XG5cbiAgICBsZXQgZm9ybWF0ID0gdGhpcy5tZXRhZGF0YS5mb3JtYXQ7XG4gICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgIC8vIGZvcm1hdCBpcyBtaXNzaW5nIHdoZW4gd2UgbG9hZCBLZXBsZXIuZ2wgZXhhbXBsZXNcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGRhdGEucm93cz8uWzBdKSB8fCB0eXBlb2YgZGF0YS5yb3dzPy5bMF0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvcm1hdCA9IERBVEFTRVRfRk9STUFUUy5yb3c7XG4gICAgICB9IGVsc2UgaWYgKGRhdGEucm93cz8udHlwZSA9PT0gJ0ZlYXR1cmVDb2xsZWN0aW9uJykge1xuICAgICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbjtcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5jb2xzPy5bMF0gaW5zdGFuY2VvZiBhcnJvdy5WZWN0b3IpIHtcbiAgICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLmFycm93O1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBpbXBvcnREZXRhaWxzOiBJbXBvcnREYXRhVG9EdWNrUmVzdWx0IHwgdW5kZWZpbmVkO1xuICAgIGlmIChmb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5yb3cpIHtcbiAgICAgIGF3YWl0IHRoaXMuaW1wb3J0Um93RGF0YSh7ZGF0YSwgZGIsIGN9KTtcbiAgICB9IGVsc2UgaWYgKGZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmdlb2pzb24pIHtcbiAgICAgIGltcG9ydERldGFpbHMgPSBhd2FpdCB0aGlzLmltcG9ydEdlb0pzb25EYXRhKHtkYXRhLCBkYiwgY30pO1xuICAgIH0gZWxzZSBpZiAoZm9ybWF0ID09PSBEQVRBU0VUX0ZPUk1BVFMuYXJyb3cpIHtcbiAgICAgIGltcG9ydERldGFpbHMgPSBhd2FpdCB0aGlzLmltcG9ydEFycm93RGF0YSh7ZGF0YSwgZGIsIGN9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5lcnJvcignVW5yZWNvZ25pemVkIGZvcm1hdCcsIGZvcm1hdCk7XG4gICAgfVxuXG4gICAgbGV0IGZpZWxkczogRmllbGRbXSA9IFtdO1xuICAgIGxldCBjb2xzOiBhcnJvdy5WZWN0b3JbXSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHtnZW9hcnJvd01ldGFkYXRhID0ge30sIHVzZU5ld0ZpZWxkcyA9IGZhbHNlfSA9IGltcG9ydERldGFpbHMgfHwge307XG5cbiAgICAgIGNvbnN0IGR1Y2tEYkNvbHVtbnMgPSBhd2FpdCBnZXREdWNrREJDb2x1bW5UeXBlcyhjLCB0YWJsZU5hbWUpO1xuICAgICAgY29uc3QgdGFibGVEdWNrREJUeXBlcyA9IGdldER1Y2tEQkNvbHVtblR5cGVzTWFwKGR1Y2tEYkNvbHVtbnMpO1xuICAgICAgY29uc3QgY29sdW1uc1RvQ29udmVydFRvV0tCID0gZ2V0R2VvbWV0cnlDb2x1bW5zKGR1Y2tEYkNvbHVtbnMpO1xuICAgICAgY29uc3QgYWRqdXN0ZWRRdWVyeSA9IGNvbnN0cnVjdFNUX2FzV0tCUXVlcnkodGFibGVOYW1lLCBjb2x1bW5zVG9Db252ZXJ0VG9XS0IpO1xuICAgICAgY29uc3QgYXJyb3dSZXN1bHQgPSBhd2FpdCBjLnF1ZXJ5KGFkanVzdGVkUXVlcnkpO1xuXG4gICAgICAvLyBUT0RPIGlmIGZvcm1hdCBpcyBhbiBhcnJvdyB0YWJsZSB0aGVuIGp1c3QgdXNlIHRoZSBvcmlnaW5hbCBvbmUsIGluc3RlYWQgb2YgdGhlIG5ldyB0YWJsZSBmcm9tIHRoZSBxdWVyeT9cblxuICAgICAgcmVzdG9yZUdlb2Fycm93TWV0YWRhdGEoYXJyb3dSZXN1bHQsIGdlb2Fycm93TWV0YWRhdGEpO1xuXG4gICAgICBmaWVsZHMgPSB1c2VOZXdGaWVsZHNcbiAgICAgICAgPyBhcnJvd1NjaGVtYVRvRmllbGRzKGFycm93UmVzdWx0LCB0YWJsZUR1Y2tEQlR5cGVzKVxuICAgICAgICA6IGRhdGEuZmllbGRzID8/IGFycm93U2NoZW1hVG9GaWVsZHMoYXJyb3dSZXN1bHQsIHRhYmxlRHVja0RCVHlwZXMpO1xuICAgICAgY29scyA9IFsuLi5BcnJheShhcnJvd1Jlc3VsdC5udW1Db2xzKS5rZXlzKCldXG4gICAgICAgIC5tYXAoaSA9PiBhcnJvd1Jlc3VsdC5nZXRDaGlsZEF0KGkpKVxuICAgICAgICAuZmlsdGVyKGNvbCA9PiBjb2wpIGFzIGFycm93LlZlY3RvcltdO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdEdWNrREIgdGFibGU6IGNyZWF0ZVRhYmxlQW5kR2V0QXJyb3cnLCBlcnJvcik7XG4gICAgfVxuXG4gICAgYXdhaXQgYy5jbG9zZSgpO1xuXG4gICAgcmV0dXJuIHtmaWVsZHMsIGNvbHN9O1xuICB9XG5cbiAgYXN5bmMgaW1wb3J0RGF0YSh7ZGF0YX06IHtkYXRhOiBQcm9jZXNzb3JSZXN1bHR9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gVmVjdG9yVGlsZSBpcyBhIHNwZWNpYWwgY2FzZSwgaWdub3JlIGZvciBub3dcbiAgICBpZiAodGhpcy50eXBlID09PSBEYXRhc2V0VHlwZS5WRUNUT1JfVElMRSkge1xuICAgICAgc3VwZXIuaW1wb3J0RGF0YSh7ZGF0YTogey4uLmRhdGEsIHJvd3M6IFtdfX0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHtmaWVsZHMsIGNvbHN9ID0gYXdhaXQgdGhpcy5jcmVhdGVUYWJsZUFuZEdldEFycm93KGRhdGEpO1xuXG4gICAgc3VwZXIuaW1wb3J0RGF0YSh7ZGF0YToge2ZpZWxkcywgY29scywgcm93czogW119fSk7XG4gIH1cblxuICBhc3luYyB1cGRhdGUoZGF0YSkge1xuICAgIC8vIFZlY3RvclRpbGUgaXMgYSBzcGVjaWFsIGNhc2UsIGlnbm9yZSBmb3Igbm93XG4gICAgaWYgKHRoaXMudHlwZSA9PT0gRGF0YXNldFR5cGUuVkVDVE9SX1RJTEUpIHtcbiAgICAgIHN1cGVyLmltcG9ydERhdGEoe2RhdGF9KTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IHtjb2xzfSA9IGF3YWl0IHRoaXMuY3JlYXRlVGFibGVBbmRHZXRBcnJvdyhkYXRhKTtcblxuICAgIHJldHVybiBzdXBlci51cGRhdGUoe2NvbHMsIHJvd3M6IFtdLCBmaWVsZHM6IFtdfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0RmlsZVByb2Nlc3NvciA9IGZ1bmN0aW9uIChkYXRhOiBhbnksIGlucHV0Rm9ybWF0Pzogc3RyaW5nKSB7XG4gICAgbGV0IHByb2Nlc3NvcjtcbiAgICBsZXQgZm9ybWF0O1xuICAgIGlmIChpbnB1dEZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmFycm93IHx8IGlzQXJyb3dEYXRhKGRhdGEpKSB7XG4gICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMuYXJyb3c7XG4gICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzQXJyb3dCYXRjaGVzO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRGb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5rZXBsZXJnbCB8fCBpc0tlcGxlckdsTWFwKGRhdGEpKSB7XG4gICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMua2VwbGVyZ2w7XG4gICAgICBwcm9jZXNzb3IgPSBwcm9jZXNzS2VwbGVyZ2xKU09OZm9yRHVja0RiO1xuICAgIH0gZWxzZSBpZiAoaW5wdXRGb3JtYXQgPT09IERBVEFTRVRfRk9STUFUUy5yb3cgfHwgaXNSb3dPYmplY3QoZGF0YSkpIHtcbiAgICAgIC8vIGNzdiBmaWxlIGdvZXMgaGVyZVxuICAgICAgZm9ybWF0ID0gREFUQVNFVF9GT1JNQVRTLnJvdztcbiAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3NDc3ZSb3dPYmplY3Q7IC8vIGRpcmVjdGx5IGltcG9ydCBqc29uIG9iamVjdCBpbnRvIGR1Y2tkYi13YXNtXG4gICAgfSBlbHNlIGlmIChpbnB1dEZvcm1hdCA9PT0gREFUQVNFVF9GT1JNQVRTLmdlb2pzb24gfHwgaXNHZW9Kc29uKGRhdGEpKSB7XG4gICAgICBmb3JtYXQgPSBEQVRBU0VUX0ZPUk1BVFMuZ2VvanNvbjtcbiAgICAgIHByb2Nlc3NvciA9IHByb2Nlc3NHZW9qc29uO1xuICAgIH1cbiAgICByZXR1cm4ge3Byb2Nlc3NvciwgZm9ybWF0fTtcbiAgfTtcblxuICBzdGF0aWMgZ2V0SW5wdXREYXRhVmFsaWRhdG9yID0gZnVuY3Rpb24gKCkge1xuICAgIC8vIEluIER1Y2tEQiBtb2RlIGRhdGEgaXMgdmFsaWRhdGVkIGxhdGVyIGR1cmluZyBpbXBvcnQuXG4gICAgcmV0dXJuIGQgPT4gZDtcbiAgfTtcbn1cblxuLyoqXG4gKiBUcnkgdG8gcmVzdG9yZSBnZW9hcnJvdyBtZXRhZGF0YSBsb3N0IGR1cmluZyBEdWNrRGIgaW5nZXN0aW9uLlxuICogTm90ZSB0aGF0IHRoaXMgZnVuY3Rpb24gY2FuIGdlbmVyYXRlIHdyb25nIGdlb21ldHJ5IHR5cGVzLlxuICogQHBhcmFtIGFycm93VGFibGUgQXJyb3cgdGFibGUgdG8gdXBkYXRlLlxuICogQHBhcmFtIGdlb2Fycm93TWV0YWRhdGEgQSBtYXAgd2l0aCBmaWVsZCBuYW1lcyB0aGF0IHVzdWFsbHkgdXNlZCB0byBzdG9yZSBnZW9hcnJvdyBnZW9tZXRyeS5cbiAqL1xuZXhwb3J0IGNvbnN0IHJlc3RvcmVHZW9hcnJvd01ldGFkYXRhID0gKFxuICBhcnJvd1RhYmxlOiBhcnJvdy5UYWJsZSxcbiAgZ2VvYXJyb3dNZXRhZGF0YTogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuKSA9PiB7XG4gIGFycm93VGFibGUuc2NoZW1hLmZpZWxkcy5mb3JFYWNoKGYgPT4ge1xuICAgIGlmIChhcnJvdy5EYXRhVHlwZS5pc0JpbmFyeShmLnR5cGUpICYmIGdlb2Fycm93TWV0YWRhdGFbZi5uYW1lXSkge1xuICAgICAgZi5tZXRhZGF0YS5zZXQoR0VPQVJST1dfTUVUQURBVEFfS0VZLCBnZW9hcnJvd01ldGFkYXRhW2YubmFtZV0pO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd1BvaW50KGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5QT0lOVCk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TGluZVN0cmluZyhmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuTElORVNUUklORyk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93UG9seWdvbihmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuUE9MWUdPTik7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TXVsdGlQb2ludChmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuTVVMVElQT0lOVCk7XG4gICAgfSBlbHNlIGlmIChpc0dlb0Fycm93TXVsdGlMaW5lU3RyaW5nKGYudHlwZSkpIHtcbiAgICAgIGYubWV0YWRhdGEuc2V0KEdFT0FSUk9XX01FVEFEQVRBX0tFWSwgR0VPQVJST1dfRVhURU5TSU9OUy5NVUxUSUxJTkVTVFJJTkcpO1xuICAgIH0gZWxzZSBpZiAoaXNHZW9BcnJvd011bHRpUG9seWdvbihmLnR5cGUpKSB7XG4gICAgICBmLm1ldGFkYXRhLnNldChHRU9BUlJPV19NRVRBREFUQV9LRVksIEdFT0FSUk9XX0VYVEVOU0lPTlMuTVVMVElQT0xZR09OKTtcbiAgICB9XG4gIH0pO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLEtBQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUVBLElBQUFDLFVBQUEsR0FBQUQsT0FBQTtBQU1BLElBQUFFLFdBQUEsR0FBQUYsT0FBQTtBQVFBLElBQUFHLE1BQUEsR0FBQUgsT0FBQTtBQUVBLElBQUFJLE1BQUEsR0FBQUosT0FBQTtBQUVBLElBQUFLLGNBQUEsR0FBQUwsT0FBQTtBQU9BLElBQUFNLGlCQUFBLEdBQUFOLE9BQUE7QUFTQSxJQUFBTyxr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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kepler.gl/duckdb",
|
|
3
3
|
"author": "Shan He <heshan0131@gmail.com>",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.3",
|
|
5
5
|
"description": "DuckDB plugin for Kepler.gl",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"main": "dist/index.js",
|
|
@@ -26,11 +26,11 @@
|
|
|
26
26
|
],
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"@duckdb/duckdb-wasm": "^1.28.0",
|
|
29
|
-
"@kepler.gl/common-utils": "3.1.
|
|
30
|
-
"@kepler.gl/constants": "3.1.
|
|
31
|
-
"@kepler.gl/processors": "3.1.
|
|
32
|
-
"@kepler.gl/table": "3.1.
|
|
33
|
-
"@kepler.gl/types": "3.1.
|
|
29
|
+
"@kepler.gl/common-utils": "3.1.3",
|
|
30
|
+
"@kepler.gl/constants": "3.1.3",
|
|
31
|
+
"@kepler.gl/processors": "3.1.3",
|
|
32
|
+
"@kepler.gl/table": "3.1.3",
|
|
33
|
+
"@kepler.gl/types": "3.1.3",
|
|
34
34
|
"@monaco-editor/react": "^4.6.0",
|
|
35
35
|
"@radix-ui/react-collapsible": "^1.1.0",
|
|
36
36
|
"apache-arrow": ">=15.0.0",
|
package/dist/init.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { AsyncDuckDB, DuckDBConfig } from '@duckdb/duckdb-wasm';
|
|
2
|
-
export declare let DEBUG: boolean | undefined;
|
|
3
|
-
/**
|
|
4
|
-
* Initialize DuckDB, ensuring we only initialize it once.
|
|
5
|
-
*
|
|
6
|
-
* @param debug If true, log DuckDB logs and elapsed times to the console.
|
|
7
|
-
* @param config An optional DuckDBConfig object.
|
|
8
|
-
*/
|
|
9
|
-
export declare function initializeDuckDb(options?: {
|
|
10
|
-
debug?: boolean;
|
|
11
|
-
config?: DuckDBConfig;
|
|
12
|
-
}): Promise<AsyncDuckDB>;
|
|
13
|
-
/**
|
|
14
|
-
* Get the instance of DuckDB, initializing it if needed.
|
|
15
|
-
*
|
|
16
|
-
* Typically `useDuckDB` is used in React components instead, but this
|
|
17
|
-
* method provides access outside of React contexts.
|
|
18
|
-
*/
|
|
19
|
-
export declare const getDuckDB: () => Promise<AsyncDuckDB>;
|