@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
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as arrow from 'apache-arrow';
|
|
2
|
+
import * as duckdb from '@duckdb/duckdb-wasm';
|
|
3
|
+
import { AsyncDuckDB, DuckDBConfig, AsyncDuckDBConnection } from '@duckdb/duckdb-wasm';
|
|
4
|
+
import { DatabaseAdapter, DatabaseConnection } from '@kepler.gl/utils';
|
|
5
|
+
declare class Connection implements DatabaseConnection {
|
|
6
|
+
private connection;
|
|
7
|
+
constructor(connection: AsyncDuckDBConnection);
|
|
8
|
+
query(statement: string): Promise<arrow.Table>;
|
|
9
|
+
insertArrowTable(arrowTable: arrow.Table, params: {
|
|
10
|
+
name: string;
|
|
11
|
+
}): Promise<void>;
|
|
12
|
+
close(): Promise<void>;
|
|
13
|
+
}
|
|
14
|
+
declare type DuckDBWasmAdapterProps = {
|
|
15
|
+
debug?: boolean;
|
|
16
|
+
config?: DuckDBConfig;
|
|
17
|
+
} | Promise<AsyncDuckDB>;
|
|
18
|
+
export declare class DuckDBWasmAdapter implements DatabaseAdapter {
|
|
19
|
+
private duckDB;
|
|
20
|
+
constructor(options: DuckDBWasmAdapterProps);
|
|
21
|
+
connect(): Promise<Connection>;
|
|
22
|
+
registerFileText(filename: string, content: any): Promise<void>;
|
|
23
|
+
registerFileHandle(name: string, handle: any, protocol: duckdb.DuckDBDataProtocol, directIO: boolean): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.DuckDBWasmAdapter = void 0;
|
|
9
|
+
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
10
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
11
|
+
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
|
|
12
|
+
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
|
|
13
|
+
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
|
|
14
|
+
var _duckdbWasm = _interopRequireWildcard(require("@duckdb/duckdb-wasm"));
|
|
15
|
+
var duckdb = _duckdbWasm;
|
|
16
|
+
var _perf = require("../utils/perf");
|
|
17
|
+
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); }
|
|
18
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(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; }
|
|
19
|
+
// SPDX-License-Identifier: MIT
|
|
20
|
+
// Copyright contributors to the kepler.gl project
|
|
21
|
+
var Connection = /*#__PURE__*/function () {
|
|
22
|
+
function Connection(connection) {
|
|
23
|
+
(0, _classCallCheck2["default"])(this, Connection);
|
|
24
|
+
(0, _defineProperty2["default"])(this, "connection", void 0);
|
|
25
|
+
this.connection = connection;
|
|
26
|
+
}
|
|
27
|
+
return (0, _createClass2["default"])(Connection, [{
|
|
28
|
+
key: "query",
|
|
29
|
+
value: function () {
|
|
30
|
+
var _query = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(statement) {
|
|
31
|
+
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
32
|
+
while (1) switch (_context.prev = _context.next) {
|
|
33
|
+
case 0:
|
|
34
|
+
return _context.abrupt("return", this.connection.query(statement));
|
|
35
|
+
case 1:
|
|
36
|
+
case "end":
|
|
37
|
+
return _context.stop();
|
|
38
|
+
}
|
|
39
|
+
}, _callee, this);
|
|
40
|
+
}));
|
|
41
|
+
function query(_x) {
|
|
42
|
+
return _query.apply(this, arguments);
|
|
43
|
+
}
|
|
44
|
+
return query;
|
|
45
|
+
}()
|
|
46
|
+
}, {
|
|
47
|
+
key: "insertArrowTable",
|
|
48
|
+
value: function () {
|
|
49
|
+
var _insertArrowTable = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(arrowTable, params) {
|
|
50
|
+
return _regenerator["default"].wrap(function _callee2$(_context2) {
|
|
51
|
+
while (1) switch (_context2.prev = _context2.next) {
|
|
52
|
+
case 0:
|
|
53
|
+
_context2.next = 2;
|
|
54
|
+
return this.connection.insertArrowTable(arrowTable, params);
|
|
55
|
+
case 2:
|
|
56
|
+
case "end":
|
|
57
|
+
return _context2.stop();
|
|
58
|
+
}
|
|
59
|
+
}, _callee2, this);
|
|
60
|
+
}));
|
|
61
|
+
function insertArrowTable(_x2, _x3) {
|
|
62
|
+
return _insertArrowTable.apply(this, arguments);
|
|
63
|
+
}
|
|
64
|
+
return insertArrowTable;
|
|
65
|
+
}()
|
|
66
|
+
}, {
|
|
67
|
+
key: "close",
|
|
68
|
+
value: function () {
|
|
69
|
+
var _close = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
|
|
70
|
+
return _regenerator["default"].wrap(function _callee3$(_context3) {
|
|
71
|
+
while (1) switch (_context3.prev = _context3.next) {
|
|
72
|
+
case 0:
|
|
73
|
+
_context3.next = 2;
|
|
74
|
+
return this.connection.close();
|
|
75
|
+
case 2:
|
|
76
|
+
case "end":
|
|
77
|
+
return _context3.stop();
|
|
78
|
+
}
|
|
79
|
+
}, _callee3, this);
|
|
80
|
+
}));
|
|
81
|
+
function close() {
|
|
82
|
+
return _close.apply(this, arguments);
|
|
83
|
+
}
|
|
84
|
+
return close;
|
|
85
|
+
}()
|
|
86
|
+
}]);
|
|
87
|
+
}();
|
|
88
|
+
var DuckDBWasmAdapter = exports.DuckDBWasmAdapter = /*#__PURE__*/function () {
|
|
89
|
+
function DuckDBWasmAdapter(options) {
|
|
90
|
+
(0, _classCallCheck2["default"])(this, DuckDBWasmAdapter);
|
|
91
|
+
(0, _defineProperty2["default"])(this, "duckDB", void 0);
|
|
92
|
+
// pass existing AsyncDuckDB object created elsewhere
|
|
93
|
+
if (options instanceof Promise || options instanceof _duckdbWasm.AsyncDuckDB) {
|
|
94
|
+
this.duckDB = options;
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// or create a new AsyncDuckDB object
|
|
99
|
+
var _ref = options || {},
|
|
100
|
+
_ref$debug = _ref.debug,
|
|
101
|
+
debug = _ref$debug === void 0 ? false : _ref$debug,
|
|
102
|
+
config = _ref.config;
|
|
103
|
+
this.duckDB = initializeDuckDbWasm(config, debug);
|
|
104
|
+
}
|
|
105
|
+
return (0, _createClass2["default"])(DuckDBWasmAdapter, [{
|
|
106
|
+
key: "connect",
|
|
107
|
+
value: function () {
|
|
108
|
+
var _connect = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4() {
|
|
109
|
+
var db, c;
|
|
110
|
+
return _regenerator["default"].wrap(function _callee4$(_context4) {
|
|
111
|
+
while (1) switch (_context4.prev = _context4.next) {
|
|
112
|
+
case 0:
|
|
113
|
+
_context4.next = 2;
|
|
114
|
+
return this.duckDB;
|
|
115
|
+
case 2:
|
|
116
|
+
db = _context4.sent;
|
|
117
|
+
_context4.next = 5;
|
|
118
|
+
return db.connect();
|
|
119
|
+
case 5:
|
|
120
|
+
c = _context4.sent;
|
|
121
|
+
return _context4.abrupt("return", new Connection(c));
|
|
122
|
+
case 7:
|
|
123
|
+
case "end":
|
|
124
|
+
return _context4.stop();
|
|
125
|
+
}
|
|
126
|
+
}, _callee4, this);
|
|
127
|
+
}));
|
|
128
|
+
function connect() {
|
|
129
|
+
return _connect.apply(this, arguments);
|
|
130
|
+
}
|
|
131
|
+
return connect;
|
|
132
|
+
}()
|
|
133
|
+
}, {
|
|
134
|
+
key: "registerFileText",
|
|
135
|
+
value: function () {
|
|
136
|
+
var _registerFileText = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(filename, content) {
|
|
137
|
+
var db;
|
|
138
|
+
return _regenerator["default"].wrap(function _callee5$(_context5) {
|
|
139
|
+
while (1) switch (_context5.prev = _context5.next) {
|
|
140
|
+
case 0:
|
|
141
|
+
_context5.next = 2;
|
|
142
|
+
return this.duckDB;
|
|
143
|
+
case 2:
|
|
144
|
+
db = _context5.sent;
|
|
145
|
+
_context5.next = 5;
|
|
146
|
+
return db.registerFileText(filename, content);
|
|
147
|
+
case 5:
|
|
148
|
+
case "end":
|
|
149
|
+
return _context5.stop();
|
|
150
|
+
}
|
|
151
|
+
}, _callee5, this);
|
|
152
|
+
}));
|
|
153
|
+
function registerFileText(_x4, _x5) {
|
|
154
|
+
return _registerFileText.apply(this, arguments);
|
|
155
|
+
}
|
|
156
|
+
return registerFileText;
|
|
157
|
+
}()
|
|
158
|
+
}, {
|
|
159
|
+
key: "registerFileHandle",
|
|
160
|
+
value: function () {
|
|
161
|
+
var _registerFileHandle = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6(name, handle, protocol, directIO) {
|
|
162
|
+
var db;
|
|
163
|
+
return _regenerator["default"].wrap(function _callee6$(_context6) {
|
|
164
|
+
while (1) switch (_context6.prev = _context6.next) {
|
|
165
|
+
case 0:
|
|
166
|
+
_context6.next = 2;
|
|
167
|
+
return this.duckDB;
|
|
168
|
+
case 2:
|
|
169
|
+
db = _context6.sent;
|
|
170
|
+
_context6.next = 5;
|
|
171
|
+
return db.registerFileHandle(name, handle, protocol, directIO);
|
|
172
|
+
case 5:
|
|
173
|
+
case "end":
|
|
174
|
+
return _context6.stop();
|
|
175
|
+
}
|
|
176
|
+
}, _callee6, this);
|
|
177
|
+
}));
|
|
178
|
+
function registerFileHandle(_x6, _x7, _x8, _x9) {
|
|
179
|
+
return _registerFileHandle.apply(this, arguments);
|
|
180
|
+
}
|
|
181
|
+
return registerFileHandle;
|
|
182
|
+
}()
|
|
183
|
+
}]);
|
|
184
|
+
}();
|
|
185
|
+
/**
|
|
186
|
+
* Initialize DuckDB with a browser-specific Wasm bundle.
|
|
187
|
+
*/
|
|
188
|
+
var initializeDuckDbWasm = /*#__PURE__*/function () {
|
|
189
|
+
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(config, debug) {
|
|
190
|
+
var start, JSDELIVR_BUNDLES, bundle, worker_url, worker, logger, db, res, buffer, fileNameMatch;
|
|
191
|
+
return _regenerator["default"].wrap(function _callee7$(_context7) {
|
|
192
|
+
while (1) switch (_context7.prev = _context7.next) {
|
|
193
|
+
case 0:
|
|
194
|
+
start = performance.now(); // Select a bundle based on browser checks
|
|
195
|
+
JSDELIVR_BUNDLES = duckdb.getJsDelivrBundles();
|
|
196
|
+
_context7.next = 4;
|
|
197
|
+
return duckdb.selectBundle(JSDELIVR_BUNDLES);
|
|
198
|
+
case 4:
|
|
199
|
+
bundle = _context7.sent;
|
|
200
|
+
if (bundle.mainWorker) {
|
|
201
|
+
_context7.next = 7;
|
|
202
|
+
break;
|
|
203
|
+
}
|
|
204
|
+
throw new Error('Failed to initialize DuckDB');
|
|
205
|
+
case 7:
|
|
206
|
+
worker_url = URL.createObjectURL(new Blob(["importScripts(\"".concat(bundle.mainWorker, "\");")], {
|
|
207
|
+
type: 'text/javascript'
|
|
208
|
+
})); // Instantiate the async version of DuckDB-wasm
|
|
209
|
+
worker = new Worker(worker_url);
|
|
210
|
+
logger = debug ? new duckdb.ConsoleLogger() : new duckdb.VoidLogger();
|
|
211
|
+
db = new _duckdbWasm.AsyncDuckDB(logger, worker);
|
|
212
|
+
_context7.next = 13;
|
|
213
|
+
return db.instantiate(bundle.mainModule, bundle.pthreadWorker);
|
|
214
|
+
case 13:
|
|
215
|
+
URL.revokeObjectURL(worker_url);
|
|
216
|
+
if (!config) {
|
|
217
|
+
_context7.next = 28;
|
|
218
|
+
break;
|
|
219
|
+
}
|
|
220
|
+
if (!config.path) {
|
|
221
|
+
_context7.next = 26;
|
|
222
|
+
break;
|
|
223
|
+
}
|
|
224
|
+
_context7.next = 18;
|
|
225
|
+
return fetch(config.path);
|
|
226
|
+
case 18:
|
|
227
|
+
res = _context7.sent;
|
|
228
|
+
_context7.next = 21;
|
|
229
|
+
return res.arrayBuffer();
|
|
230
|
+
case 21:
|
|
231
|
+
buffer = _context7.sent;
|
|
232
|
+
fileNameMatch = config.path.match(/[^/]*$/);
|
|
233
|
+
if (fileNameMatch) {
|
|
234
|
+
config.path = fileNameMatch[0];
|
|
235
|
+
}
|
|
236
|
+
_context7.next = 26;
|
|
237
|
+
return db.registerFileBuffer(config.path, new Uint8Array(buffer));
|
|
238
|
+
case 26:
|
|
239
|
+
_context7.next = 28;
|
|
240
|
+
return db.open(config);
|
|
241
|
+
case 28:
|
|
242
|
+
if (debug) {
|
|
243
|
+
(0, _perf.logElapsedTime)('DuckDB initialized', start);
|
|
244
|
+
if (config) {
|
|
245
|
+
console.debug("DuckDbConfig: ".concat(JSON.stringify(config, null, 2)));
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return _context7.abrupt("return", db);
|
|
249
|
+
case 30:
|
|
250
|
+
case "end":
|
|
251
|
+
return _context7.stop();
|
|
252
|
+
}
|
|
253
|
+
}, _callee7);
|
|
254
|
+
}));
|
|
255
|
+
return function initializeDuckDbWasm(_x10, _x11) {
|
|
256
|
+
return _ref2.apply(this, arguments);
|
|
257
|
+
};
|
|
258
|
+
}();
|
|
259
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZHVja2RiV2FzbSIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwicmVxdWlyZSIsImR1Y2tkYiIsIl9wZXJmIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiQ29ubmVjdGlvbiIsImNvbm5lY3Rpb24iLCJfY2xhc3NDYWxsQ2hlY2syIiwiX2RlZmluZVByb3BlcnR5MiIsIl9jcmVhdGVDbGFzczIiLCJrZXkiLCJ2YWx1ZSIsIl9xdWVyeSIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlIiwic3RhdGVtZW50Iiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImFicnVwdCIsInF1ZXJ5Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfaW5zZXJ0QXJyb3dUYWJsZSIsIl9jYWxsZWUyIiwiYXJyb3dUYWJsZSIsInBhcmFtcyIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsImluc2VydEFycm93VGFibGUiLCJfeDIiLCJfeDMiLCJfY2xvc2UiLCJfY2FsbGVlMyIsIl9jYWxsZWUzJCIsIl9jb250ZXh0MyIsImNsb3NlIiwiRHVja0RCV2FzbUFkYXB0ZXIiLCJleHBvcnRzIiwib3B0aW9ucyIsIlByb21pc2UiLCJBc3luY0R1Y2tEQiIsImR1Y2tEQiIsIl9yZWYiLCJfcmVmJGRlYnVnIiwiZGVidWciLCJjb25maWciLCJpbml0aWFsaXplRHVja0RiV2FzbSIsIl9jb25uZWN0IiwiX2NhbGxlZTQiLCJkYiIsImMiLCJfY2FsbGVlNCQiLCJfY29udGV4dDQiLCJzZW50IiwiY29ubmVjdCIsIl9yZWdpc3RlckZpbGVUZXh0IiwiX2NhbGxlZTUiLCJmaWxlbmFtZSIsImNvbnRlbnQiLCJfY2FsbGVlNSQiLCJfY29udGV4dDUiLCJyZWdpc3RlckZpbGVUZXh0IiwiX3g0IiwiX3g1IiwiX3JlZ2lzdGVyRmlsZUhhbmRsZSIsIl9jYWxsZWU2IiwibmFtZSIsImhhbmRsZSIsInByb3RvY29sIiwiZGlyZWN0SU8iLCJfY2FsbGVlNiQiLCJfY29udGV4dDYiLCJyZWdpc3RlckZpbGVIYW5kbGUiLCJfeDYiLCJfeDciLCJfeDgiLCJfeDkiLCJfcmVmMiIsIl9jYWxsZWU3Iiwic3RhcnQiLCJKU0RFTElWUl9CVU5ETEVTIiwiYnVuZGxlIiwid29ya2VyX3VybCIsIndvcmtlciIsImxvZ2dlciIsInJlcyIsImJ1ZmZlciIsImZpbGVOYW1lTWF0Y2giLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJwZXJmb3JtYW5jZSIsIm5vdyIsImdldEpzRGVsaXZyQnVuZGxlcyIsInNlbGVjdEJ1bmRsZSIsIm1haW5Xb3JrZXIiLCJFcnJvciIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIkJsb2IiLCJjb25jYXQiLCJ0eXBlIiwiV29ya2VyIiwiQ29uc29sZUxvZ2dlciIsIlZvaWRMb2dnZXIiLCJpbnN0YW50aWF0ZSIsIm1haW5Nb2R1bGUiLCJwdGhyZWFkV29ya2VyIiwicmV2b2tlT2JqZWN0VVJMIiwicGF0aCIsImZldGNoIiwiYXJyYXlCdWZmZXIiLCJtYXRjaCIsInJlZ2lzdGVyRmlsZUJ1ZmZlciIsIlVpbnQ4QXJyYXkiLCJvcGVuIiwibG9nRWxhcHNlZFRpbWUiLCJjb25zb2xlIiwiSlNPTiIsInN0cmluZ2lmeSIsIl94MTAiLCJfeDExIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FkYXB0ZXJzL2R1Y2tkYi13YXNtLWFkYXB0ZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVFxuLy8gQ29weXJpZ2h0IGNvbnRyaWJ1dG9ycyB0byB0aGUga2VwbGVyLmdsIHByb2plY3RcblxuaW1wb3J0ICogYXMgYXJyb3cgZnJvbSAnYXBhY2hlLWFycm93JztcbmltcG9ydCAqIGFzIGR1Y2tkYiBmcm9tICdAZHVja2RiL2R1Y2tkYi13YXNtJztcbmltcG9ydCB7QXN5bmNEdWNrREIsIER1Y2tEQkNvbmZpZywgQXN5bmNEdWNrREJDb25uZWN0aW9ufSBmcm9tICdAZHVja2RiL2R1Y2tkYi13YXNtJztcblxuaW1wb3J0IHtEYXRhYmFzZUFkYXB0ZXIsIERhdGFiYXNlQ29ubmVjdGlvbn0gZnJvbSAnQGtlcGxlci5nbC91dGlscyc7XG5cbmltcG9ydCB7bG9nRWxhcHNlZFRpbWV9IGZyb20gJy4uL3V0aWxzL3BlcmYnO1xuXG5jbGFzcyBDb25uZWN0aW9uIGltcGxlbWVudHMgRGF0YWJhc2VDb25uZWN0aW9uIHtcbiAgcHJpdmF0ZSBjb25uZWN0aW9uOiBBc3luY0R1Y2tEQkNvbm5lY3Rpb247XG5cbiAgY29uc3RydWN0b3IoY29ubmVjdGlvbjogQXN5bmNEdWNrREJDb25uZWN0aW9uKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uID0gY29ubmVjdGlvbjtcbiAgfVxuXG4gIGFzeW5jIHF1ZXJ5KHN0YXRlbWVudDogc3RyaW5nKTogUHJvbWlzZTxhcnJvdy5UYWJsZT4ge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb24ucXVlcnkoc3RhdGVtZW50KTtcbiAgfVxuXG4gIGFzeW5jIGluc2VydEFycm93VGFibGUoYXJyb3dUYWJsZTogYXJyb3cuVGFibGUsIHBhcmFtczoge25hbWU6IHN0cmluZ30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCB0aGlzLmNvbm5lY3Rpb24uaW5zZXJ0QXJyb3dUYWJsZShhcnJvd1RhYmxlLCBwYXJhbXMpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2UoKSB7XG4gICAgYXdhaXQgdGhpcy5jb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cbn1cblxudHlwZSBEdWNrREJXYXNtQWRhcHRlclByb3BzID1cbiAgfCB7XG4gICAgICBkZWJ1Zz86IGJvb2xlYW47XG4gICAgICBjb25maWc/OiBEdWNrREJDb25maWc7XG4gICAgfVxuICB8IFByb21pc2U8QXN5bmNEdWNrREI+O1xuXG5leHBvcnQgY2xhc3MgRHVja0RCV2FzbUFkYXB0ZXIgaW1wbGVtZW50cyBEYXRhYmFzZUFkYXB0ZXIge1xuICBwcml2YXRlIGR1Y2tEQjogUHJvbWlzZTxBc3luY0R1Y2tEQj47XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogRHVja0RCV2FzbUFkYXB0ZXJQcm9wcykge1xuICAgIC8vIHBhc3MgZXhpc3RpbmcgQXN5bmNEdWNrREIgb2JqZWN0IGNyZWF0ZWQgZWxzZXdoZXJlXG4gICAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBQcm9taXNlIHx8IG9wdGlvbnMgaW5zdGFuY2VvZiBBc3luY0R1Y2tEQikge1xuICAgICAgdGhpcy5kdWNrREIgPSBvcHRpb25zIGFzIGFueTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBvciBjcmVhdGUgYSBuZXcgQXN5bmNEdWNrREIgb2JqZWN0XG4gICAgY29uc3Qge2RlYnVnID0gZmFsc2UsIGNvbmZpZ30gPSBvcHRpb25zIHx8IHt9O1xuICAgIHRoaXMuZHVja0RCID0gaW5pdGlhbGl6ZUR1Y2tEYldhc20oY29uZmlnLCBkZWJ1Zyk7XG4gIH1cblxuICBhc3luYyBjb25uZWN0KCkge1xuICAgIGNvbnN0IGRiID0gYXdhaXQgdGhpcy5kdWNrREI7XG4gICAgY29uc3QgYyA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcbiAgICByZXR1cm4gbmV3IENvbm5lY3Rpb24oYyk7XG4gIH1cblxuICBhc3luYyByZWdpc3RlckZpbGVUZXh0KGZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQpIHtcbiAgICBjb25zdCBkYiA9IGF3YWl0IHRoaXMuZHVja0RCO1xuICAgIGF3YWl0IGRiLnJlZ2lzdGVyRmlsZVRleHQoZmlsZW5hbWUsIGNvbnRlbnQpO1xuICB9XG5cbiAgYXN5bmMgcmVnaXN0ZXJGaWxlSGFuZGxlKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBoYW5kbGU6IGFueSxcbiAgICBwcm90b2NvbDogZHVja2RiLkR1Y2tEQkRhdGFQcm90b2NvbCxcbiAgICBkaXJlY3RJTzogYm9vbGVhblxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBkYiA9IGF3YWl0IHRoaXMuZHVja0RCO1xuICAgIGF3YWl0IGRiLnJlZ2lzdGVyRmlsZUhhbmRsZShuYW1lLCBoYW5kbGUsIHByb3RvY29sLCBkaXJlY3RJTyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJbml0aWFsaXplIER1Y2tEQiB3aXRoIGEgYnJvd3Nlci1zcGVjaWZpYyBXYXNtIGJ1bmRsZS5cbiAqL1xuY29uc3QgaW5pdGlhbGl6ZUR1Y2tEYldhc20gPSBhc3luYyAoXG4gIGNvbmZpZz86IER1Y2tEQkNvbmZpZyxcbiAgZGVidWc/OiBib29sZWFuXG4pOiBQcm9taXNlPEFzeW5jRHVja0RCPiA9PiB7XG4gIGNvbnN0IHN0YXJ0ID0gcGVyZm9ybWFuY2Uubm93KCk7XG5cbiAgLy8gU2VsZWN0IGEgYnVuZGxlIGJhc2VkIG9uIGJyb3dzZXIgY2hlY2tzXG4gIGNvbnN0IEpTREVMSVZSX0JVTkRMRVMgPSBkdWNrZGIuZ2V0SnNEZWxpdnJCdW5kbGVzKCk7XG4gIGNvbnN0IGJ1bmRsZSA9IGF3YWl0IGR1Y2tkYi5zZWxlY3RCdW5kbGUoSlNERUxJVlJfQlVORExFUyk7XG4gIGlmICghYnVuZGxlLm1haW5Xb3JrZXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhaWxlZCB0byBpbml0aWFsaXplIER1Y2tEQicpO1xuICB9XG5cbiAgY29uc3Qgd29ya2VyX3VybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoXG4gICAgbmV3IEJsb2IoW2BpbXBvcnRTY3JpcHRzKFwiJHtidW5kbGUubWFpbldvcmtlcn1cIik7YF0sIHtcbiAgICAgIHR5cGU6ICd0ZXh0L2phdmFzY3JpcHQnXG4gICAgfSlcbiAgKTtcblxuICAvLyBJbnN0YW50aWF0ZSB0aGUgYXN5bmMgdmVyc2lvbiBvZiBEdWNrREItd2FzbVxuICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKHdvcmtlcl91cmwpO1xuICBjb25zdCBsb2dnZXIgPSBkZWJ1ZyA/IG5ldyBkdWNrZGIuQ29uc29sZUxvZ2dlcigpIDogbmV3IGR1Y2tkYi5Wb2lkTG9nZ2VyKCk7XG4gIGNvbnN0IGRiID0gbmV3IEFzeW5jRHVja0RCKGxvZ2dlciwgd29ya2VyKTtcbiAgYXdhaXQgZGIuaW5zdGFudGlhdGUoYnVuZGxlLm1haW5Nb2R1bGUsIGJ1bmRsZS5wdGhyZWFkV29ya2VyKTtcbiAgVVJMLnJldm9rZU9iamVjdFVSTCh3b3JrZXJfdXJsKTtcblxuICBpZiAoY29uZmlnKSB7XG4gICAgaWYgKGNvbmZpZy5wYXRoKSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaChjb25maWcucGF0aCk7XG4gICAgICBjb25zdCBidWZmZXIgPSBhd2FpdCByZXMuYXJyYXlCdWZmZXIoKTtcbiAgICAgIGNvbnN0IGZpbGVOYW1lTWF0Y2ggPSBjb25maWcucGF0aC5tYXRjaCgvW14vXSokLyk7XG4gICAgICBpZiAoZmlsZU5hbWVNYXRjaCkge1xuICAgICAgICBjb25maWcucGF0aCA9IGZpbGVOYW1lTWF0Y2hbMF07XG4gICAgICB9XG4gICAgICBhd2FpdCBkYi5yZWdpc3RlckZpbGVCdWZmZXIoY29uZmlnLnBhdGgsIG5ldyBVaW50OEFycmF5KGJ1ZmZlcikpO1xuICAgIH1cbiAgICBhd2FpdCBkYi5vcGVuKGNvbmZpZyk7XG4gIH1cblxuICBpZiAoZGVidWcpIHtcbiAgICBsb2dFbGFwc2VkVGltZSgnRHVja0RCIGluaXRpYWxpemVkJywgc3RhcnQpO1xuICAgIGlmIChjb25maWcpIHtcbiAgICAgIGNvbnNvbGUuZGVidWcoYER1Y2tEYkNvbmZpZzogJHtKU09OLnN0cmluZ2lmeShjb25maWcsIG51bGwsIDIpfWApO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZGI7XG59O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBSUEsSUFBQUEsV0FBQSxHQUFB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
|
|
@@ -15,8 +15,8 @@ var _reactRedux = require("react-redux");
|
|
|
15
15
|
var _styledComponents = _interopRequireDefault(require("styled-components"));
|
|
16
16
|
var _components = require("@kepler.gl/components");
|
|
17
17
|
var _processors = require("@kepler.gl/processors");
|
|
18
|
+
var _utils = require("@kepler.gl/utils");
|
|
18
19
|
var _tree = require("./tree");
|
|
19
|
-
var _init = require("../init");
|
|
20
20
|
var _duckdbTableUtils = require("../table/duckdb-table-utils");
|
|
21
21
|
var _templateObject, _templateObject2, _templateObject3, _templateObject4; // SPDX-License-Identifier: MIT
|
|
22
22
|
// Copyright contributors to the kepler.gl project
|
|
@@ -112,31 +112,35 @@ var SchemaPanel = exports.SchemaPanel = function SchemaPanel(_ref) {
|
|
|
112
112
|
return _regenerator["default"].wrap(function _callee$(_context) {
|
|
113
113
|
while (1) switch (_context.prev = _context.next) {
|
|
114
114
|
case 0:
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
115
|
+
db = (0, _utils.getApplicationConfig)().database;
|
|
116
|
+
if (db) {
|
|
117
|
+
_context.next = 4;
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
console.error('The database is not configured properly.');
|
|
121
|
+
return _context.abrupt("return");
|
|
122
|
+
case 4:
|
|
123
|
+
_context.next = 6;
|
|
120
124
|
return db.connect();
|
|
121
|
-
case
|
|
125
|
+
case 6:
|
|
122
126
|
c = _context.sent;
|
|
123
|
-
_context.next =
|
|
127
|
+
_context.next = 9;
|
|
124
128
|
return c.query('SHOW TABLES;');
|
|
125
|
-
case
|
|
129
|
+
case 9:
|
|
126
130
|
tableResult = _context.sent;
|
|
127
131
|
tableNames = (_tableResult$getChild = tableResult.getChildAt(0)) === null || _tableResult$getChild === void 0 ? void 0 : _tableResult$getChild.toJSON();
|
|
128
|
-
_context.next =
|
|
132
|
+
_context.next = 13;
|
|
129
133
|
return Promise.all((_ref3 = tableNames || []) === null || _ref3 === void 0 ? void 0 : _ref3.map(function (name) {
|
|
130
134
|
return getColumnSchema(c, name);
|
|
131
135
|
}));
|
|
132
|
-
case
|
|
136
|
+
case 13:
|
|
133
137
|
result = _context.sent;
|
|
134
138
|
tableSchema = getSchemaSuggestion(result);
|
|
135
139
|
setColumnSchemas(result);
|
|
136
140
|
setTableSchema(tableSchema);
|
|
137
|
-
_context.next =
|
|
141
|
+
_context.next = 19;
|
|
138
142
|
return c.close();
|
|
139
|
-
case
|
|
143
|
+
case 19:
|
|
140
144
|
case "end":
|
|
141
145
|
return _context.stop();
|
|
142
146
|
}
|
|
@@ -164,4 +168,4 @@ var SchemaPanel = exports.SchemaPanel = function SchemaPanel(_ref) {
|
|
|
164
168
|
});
|
|
165
169
|
}) : droppedFile ? /*#__PURE__*/_react["default"].createElement(StyledLoadingSpinnerWrapper, null, /*#__PURE__*/_react["default"].createElement(_components.LoadingSpinner, null)) : /*#__PURE__*/_react["default"].createElement(SchemaPanelDropMessage, null));
|
|
166
170
|
};
|
|
167
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RSZWR1eCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb21wb25lbnRzIiwiX3Byb2Nlc3NvcnMiLCJfdHJlZSIsIl9pbml0IiwiX2R1Y2tkYlRhYmxlVXRpbHMiLCJfdGVtcGxhdGVPYmplY3QiLCJfdGVtcGxhdGVPYmplY3QyIiwiX3RlbXBsYXRlT2JqZWN0MyIsIl90ZW1wbGF0ZU9iamVjdDQiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJlIiwiV2Vha01hcCIsInIiLCJ0IiwiX19lc01vZHVsZSIsIl90eXBlb2YiLCJoYXMiLCJnZXQiLCJuIiwiX19wcm90b19fIiwiYSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwidSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImkiLCJzZXQiLCJTdHlsZWRTY2hlbWFQYW5lbCIsInN0eWxlZCIsImRpdiIsIl90YWdnZWRUZW1wbGF0ZUxpdGVyYWwyIiwicHJvcHMiLCJ0aGVtZSIsInRleHRDb2xvciIsImZvbnRGYW1pbHkiLCJTdHlsZWRMb2FkaW5nU3Bpbm5lcldyYXBwZXIiLCJnZXRDb2x1bW5TY2hlbWEiLCJfeCIsIl94MiIsIl9nZXRDb2x1bW5TY2hlbWEiLCJhcHBseSIsImFyZ3VtZW50cyIsIl9hc3luY1RvR2VuZXJhdG9yMiIsIl9yZWdlbmVyYXRvciIsIm1hcmsiLCJfY2FsbGVlMiIsImNvbm5lY3Rpb24iLCJ0YWJsZU5hbWUiLCJjb2x1bW5SZXN1bHQiLCJjb2x1bW5EZXNjcmliZSIsImtlcGxlckZpZWxkcyIsIndyYXAiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJwcmV2IiwibmV4dCIsInF1ZXJ5IiwiY29uY2F0Iiwic2VudCIsImdldER1Y2tEQkNvbHVtblR5cGVzIiwiYXJyb3dTY2hlbWFUb0ZpZWxkcyIsImdldER1Y2tEQkNvbHVtblR5cGVzTWFwIiwiYWJydXB0Iiwia2V5Iiwib2JqZWN0IiwidHlwZSIsImNoaWxkcmVuIiwic2NoZW1hIiwiZmllbGRzIiwibWFwIiwiZmllbGQiLCJmaWVsZEluZGV4IiwibmFtZSIsImFycm93VHlwZSIsImZpZWxkVHlwZSIsInN0b3AiLCJnZXRTY2hlbWFTdWdnZXN0aW9uIiwicmVzdWx0IiwicmVkdWNlIiwiYWNjdSIsImRhdGEiLCJjb2x1bW5zIiwiY2hpbGQiLCJjb2x1bW5fbmFtZSIsInRhYmxlX25hbWUiLCJTdHlsZWRTY2hlbWFQYW5lbERyb3BNZXNzYWdlIiwiU3R5bGVkQWRkSWNvbiIsIkljb25zIiwiQWRkIiwiU2NoZW1hUGFuZWxEcm9wTWVzc2FnZSIsImV4cG9ydHMiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwiU2NoZW1hUGFuZWwiLCJfcmVmIiwic2V0VGFibGVTY2hlbWEiLCJkcm9wcGVkRmlsZSIsInNjaGVtYVVwZGF0ZVRyaWdnZXIiLCJfdXNlU3RhdGUiLCJ1c2VTdGF0ZSIsIl91c2VTdGF0ZTIiLCJfc2xpY2VkVG9BcnJheTIiLCJjb2x1bW5TY2hlbWFzIiwic2V0Q29sdW1uU2NoZW1hcyIsImRhdGFzZXRzIiwidXNlU2VsZWN0b3IiLCJzdGF0ZSIsIl9zdGF0ZSRkZW1vIiwiZGVtbyIsImtlcGxlckdsIiwidmlzU3RhdGUiLCJnZXRUYWJsZVNjaGVtYSIsInVzZUNhbGxiYWNrIiwiX2NhbGxlZSIsIl90YWJsZVJlc3VsdCRnZXRDaGlsZCIsIl9yZWYzIiwiZGIiLCJjIiwidGFibGVSZXN1bHQiLCJ0YWJsZU5hbWVzIiwidGFibGVTY2hlbWEiLCJfY2FsbGVlJCIsIl9jb250ZXh0IiwiZ2V0RHVja0RCIiwiY29ubmVjdCIsImdldENoaWxkQXQiLCJ0b0pTT04iLCJQcm9taXNlIiwiYWxsIiwiY2xvc2UiLCJ1c2VFZmZlY3QiLCJsZW5ndGgiLCJUcmVlIiwidHJlZURhdGEiLCJyZW5kZXJOb2RlIiwibm9kZSIsIkRhdGFzZXROb2RlIiwiQ29sdW1uTm9kZSIsIkxvYWRpbmdTcGlubmVyIl0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbXBvbmVudHMvc2NoZW1hLXBhbmVsLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUXG4vLyBDb3B5cmlnaHQgY29udHJpYnV0b3JzIHRvIHRoZSBrZXBsZXIuZ2wgcHJvamVjdFxuXG5pbXBvcnQgUmVhY3QsIHt1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZX0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHt1c2VTZWxlY3Rvcn0gZnJvbSAncmVhY3QtcmVkdXgnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQge0FzeW5jRHVja0RCQ29ubmVjdGlvbn0gZnJvbSAnQGR1Y2tkYi9kdWNrZGItd2FzbSc7XG5cbmltcG9ydCB7TG9hZGluZ1NwaW5uZXIsIEljb25zfSBmcm9tICdAa2VwbGVyLmdsL2NvbXBvbmVudHMnO1xuaW1wb3J0IHthcnJvd1NjaGVtYVRvRmllbGRzfSBmcm9tICdAa2VwbGVyLmdsL3Byb2Nlc3NvcnMnO1xuaW1wb3J0IHtWaXNTdGF0ZX0gZnJvbSAnQGtlcGxlci5nbC9zY2hlbWFzJztcblxuaW1wb3J0IHtUcmVlLCBEYXRhc2V0Tm9kZSwgQ29sdW1uTm9kZSwgVHJlZU5vZGVEYXRhfSBmcm9tICcuL3RyZWUnO1xuaW1wb3J0IHtnZXREdWNrREJ9IGZyb20gJy4uL2luaXQnO1xuaW1wb3J0IHtnZXREdWNrREJDb2x1bW5UeXBlcywgZ2V0RHVja0RCQ29sdW1uVHlwZXNNYXB9IGZyb20gJy4uL3RhYmxlL2R1Y2tkYi10YWJsZS11dGlscyc7XG5cbi8vIFRPRE8gbm90ZSB0aGF0IGRlbW8gc3RhdGUgaXMgYXZhaWxhYmxlIGluIGRlbW8tYXBwLCBidXQgbm90IHdoZW4gYWRkIG1vZHVsZXMgdG8gZGVwZW5kZW5jaWVzIGluIGEgY3VzdG9tIG1hcFxudHlwZSBTdGF0ZSA9IHtcbiAgZGVtbz86IHtcbiAgICBrZXBsZXJHbDoge1xuICAgICAgbWFwOiB7XG4gICAgICAgIHZpc1N0YXRlOiBWaXNTdGF0ZTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbmNvbnN0IFN0eWxlZFNjaGVtYVBhbmVsID0gc3R5bGVkLmRpdmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yfTtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBwYWRkaW5nOiAxMnB4O1xuICBmb250LWZhbWlseTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5mb250RmFtaWx5fTtcbiAgaGVpZ2h0OiAxMDAlO1xuYDtcblxuY29uc3QgU3R5bGVkTG9hZGluZ1NwaW5uZXJXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGhlaWdodDogMTAwJTtcbmA7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENvbHVtblNjaGVtYShjb25uZWN0aW9uOiBBc3luY0R1Y2tEQkNvbm5lY3Rpb24sIHRhYmxlTmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IGNvbHVtblJlc3VsdCA9IGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoYFNlbGVjdCAqIGZyb20gJyR7dGFibGVOYW1lfScgTElNSVQgMTtgKTtcblxuICBjb25zdCBjb2x1bW5EZXNjcmliZSA9IGF3YWl0IGdldER1Y2tEQkNvbHVtblR5cGVzKGNvbm5lY3Rpb24sIHRhYmxlTmFtZSk7XG4gIGNvbnN0IGtlcGxlckZpZWxkcyA9IGFycm93U2NoZW1hVG9GaWVsZHMoY29sdW1uUmVzdWx0LCBnZXREdWNrREJDb2x1bW5UeXBlc01hcChjb2x1bW5EZXNjcmliZSkpO1xuXG4gIHJldHVybiB7XG4gICAga2V5OiB0YWJsZU5hbWUsXG4gICAgb2JqZWN0OiB7XG4gICAgICB0eXBlOiAnZGF0YXNldCcsXG4gICAgICB0YWJsZU5hbWU6IHRhYmxlTmFtZVxuICAgIH0sXG4gICAgY2hpbGRyZW46IGNvbHVtblJlc3VsdC5zY2hlbWEuZmllbGRzLm1hcCgoZmllbGQsIGZpZWxkSW5kZXgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogZmllbGQubmFtZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgdHlwZTogJ2NvbHVtbicsXG4gICAgICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgICAgICBhcnJvd1R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgZmllbGRUeXBlOiBrZXBsZXJGaWVsZHNbZmllbGRJbmRleF0udHlwZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNjaGVtYVN1Z2dlc3Rpb24gPSB7Y29sdW1uX25hbWU6IHN0cmluZzsgdGFibGVfbmFtZTogc3RyaW5nfTtcblxuZnVuY3Rpb24gZ2V0U2NoZW1hU3VnZ2VzdGlvbihyZXN1bHQ6IHtrZXk6IHN0cmluZzsgY2hpbGRyZW46IHtrZXk6IHN0cmluZ31bXX1bXSkge1xuICByZXR1cm4gcmVzdWx0LnJlZHVjZSgoYWNjdSwgZGF0YSkgPT4ge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBkYXRhLmNoaWxkcmVuLm1hcChjaGlsZCA9PiAoe1xuICAgICAgY29sdW1uX25hbWU6IGNoaWxkLmtleSxcbiAgICAgIHRhYmxlX25hbWU6IGRhdGEua2V5XG4gICAgfSkpO1xuICAgIHJldHVybiBhY2N1LmNvbmNhdChjb2x1bW5zKTtcbiAgfSwgW10gYXMgU2NoZW1hU3VnZ2VzdGlvbltdKTtcbn1cblxudHlwZSBTY2hlbWFQYW5lbFByb3BzID0ge1xuICBzZXRUYWJsZVNjaGVtYTogKHRhYmxlU2NoZW1hOiBTY2hlbWFTdWdnZXN0aW9uW10pID0+IHZvaWQ7XG4gIGRyb3BwZWRGaWxlOiBGaWxlIHwgbnVsbDtcbiAgc2NoZW1hVXBkYXRlVHJpZ2dlcjogbnVtYmVyO1xufTtcblxuY29uc3QgU3R5bGVkU2NoZW1hUGFuZWxEcm9wTWVzc2FnZSA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICBkaXYge1xuICAgIG1hcmdpbjogNXB4O1xuICB9XG4gIC5oZWFkZXIge1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgfVxuICAuYm9sZCB7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkQWRkSWNvbiA9IHN0eWxlZChJY29ucy5BZGQpYFxuICBkaXNwbGF5OiBpbmxpbmU7XG4gIG1hcmdpbi10b3A6IC0zcHg7XG5gO1xuXG5leHBvcnQgY29uc3QgU2NoZW1hUGFuZWxEcm9wTWVzc2FnZSA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkU2NoZW1hUGFuZWxEcm9wTWVzc2FnZT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGVhZGVyXCI+XG4gICAgICAgIDxTdHlsZWRBZGRJY29uIC8+IEFkZCBmaWxlcyB0byBEdWNrREJcbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJib2xkXCI+U3VwcG9ydGVkIGZvcm1hdHM6IDwvZGl2PlxuICAgICAgPGRpdj4uY3N2LCAuanNvbiwgLmdlb2pzb24sIC5wYXJxdWV0LCAuYXJyb3c8L2Rpdj5cbiAgICAgIDxkaXY+RmlsZXMgeW91IGFkZCB3aWxsIHN0YXkgbG9jYWwgdG8geW91ciBicm93c2VyLjwvZGl2PlxuICAgIDwvU3R5bGVkU2NoZW1hUGFuZWxEcm9wTWVzc2FnZT5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBTY2hlbWFQYW5lbCA9ICh7XG4gIHNldFRhYmxlU2NoZW1hLFxuICBkcm9wcGVkRmlsZSxcbiAgc2NoZW1hVXBkYXRlVHJpZ2dlclxufTogU2NoZW1hUGFuZWxQcm9wcykgPT4ge1xuICBjb25zdCBbY29sdW1uU2NoZW1hcywgc2V0Q29sdW1uU2NoZW1hc10gPSB1c2VTdGF0ZTxUcmVlTm9kZURhdGE8e3R5cGU6IHN0cmluZ30+W10+KFtdKTtcbiAgY29uc3QgZGF0YXNldHMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFN0YXRlKSA9PiBzdGF0ZT8uZGVtbz8ua2VwbGVyR2w/Lm1hcD8udmlzU3RhdGUuZGF0YXNldHMpO1xuXG4gIGNvbnN0IGdldFRhYmxlU2NoZW1hID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRiID0gYXdhaXQgZ2V0RHVja0RCKCk7XG4gICAgY29uc3QgYyA9IGF3YWl0IGRiLmNvbm5lY3QoKTtcblxuICAgIGNvbnN0IHRhYmxlUmVzdWx0ID0gYXdhaXQgYy5xdWVyeSgnU0hPVyBUQUJMRVM7Jyk7XG5cbiAgICBjb25zdCB0YWJsZU5hbWVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCA9IHRhYmxlUmVzdWx0LmdldENoaWxkQXQoMCk/LnRvSlNPTigpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5hbGwoKHRhYmxlTmFtZXMgfHwgW10pPy5tYXAobmFtZSA9PiBnZXRDb2x1bW5TY2hlbWEoYywgbmFtZSkpKTtcbiAgICBjb25zdCB0YWJsZVNjaGVtYSA9IGdldFNjaGVtYVN1Z2dlc3Rpb24ocmVzdWx0KTtcblxuICAgIHNldENvbHVtblNjaGVtYXMocmVzdWx0KTtcbiAgICBzZXRUYWJsZVNjaGVtYSh0YWJsZVNjaGVtYSk7XG4gICAgYXdhaXQgYy5jbG9zZSgpO1xuXG4gICAgLy8gc2NoZW1hVXBkYXRlVHJpZ2dlciBpbmRpY2F0ZXMgcG9zc2libGUgY2hhbmdlIGluIER1Y2tEQlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW3NldENvbHVtblNjaGVtYXMsIHNldFRhYmxlU2NoZW1hLCBzY2hlbWFVcGRhdGVUcmlnZ2VyXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBnZXRUYWJsZVNjaGVtYSgpO1xuICB9LCBbZGF0YXNldHMsIGRyb3BwZWRGaWxlLCBnZXRUYWJsZVNjaGVtYV0pO1xuXG4gIHJldHVybiAoXG4gICAgPFN0eWxlZFNjaGVtYVBhbmVsPlxuICAgICAge2NvbHVtblNjaGVtYXM/Lmxlbmd0aCA/IChcbiAgICAgICAgY29sdW1uU2NoZW1hcy5tYXAoZGF0YSA9PiAoXG4gICAgICAgICAgPFRyZWVcbiAgICAgICAgICAgIGtleT17ZGF0YS5rZXl9XG4gICAgICAgICAgICB0cmVlRGF0YT17ZGF0YX1cbiAgICAgICAgICAgIHJlbmRlck5vZGU9e25vZGUgPT4ge1xuICAgICAgICAgICAgICBpZiAobm9kZS5vYmplY3QudHlwZSA9PT0gJ2RhdGFzZXQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDxEYXRhc2V0Tm9kZSBub2RlPXtub2RlfSAvPjtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLm9iamVjdC50eXBlID09PSAnY29sdW1uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiA8Q29sdW1uTm9kZSBub2RlPXtub2RlfSAvPjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH19XG4gICAgICAgICAgLz5cbiAgICAgICAgKSlcbiAgICAgICkgOiBkcm9wcGVkRmlsZSA/IChcbiAgICAgICAgPFN0eWxlZExvYWRpbmdTcGlubmVyV3JhcHBlcj5cbiAgICAgICAgICA8TG9hZGluZ1NwaW5uZXIgLz5cbiAgICAgICAgPC9TdHlsZWRMb2FkaW5nU3Bpbm5lcldyYXBwZXI+XG4gICAgICApIDogKFxuICAgICAgICA8U2NoZW1hUGFuZWxEcm9wTWVzc2FnZSAvPlxuICAgICAgKX1cbiAgICA8L1N0eWxlZFNjaGVtYVBhbmVsPlxuICApO1xufTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBR0EsSUFBQUEsTUFBQSxHQUFBQyx1QkFBQSxDQUFBQyxPQUFB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
|
|
171
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfcmVhY3RSZWR1eCIsIl9zdHlsZWRDb21wb25lbnRzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9jb21wb25lbnRzIiwiX3Byb2Nlc3NvcnMiLCJfdXRpbHMiLCJfdHJlZSIsIl9kdWNrZGJUYWJsZVV0aWxzIiwiX3RlbXBsYXRlT2JqZWN0IiwiX3RlbXBsYXRlT2JqZWN0MiIsIl90ZW1wbGF0ZU9iamVjdDMiLCJfdGVtcGxhdGVPYmplY3Q0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiU3R5bGVkU2NoZW1hUGFuZWwiLCJzdHlsZWQiLCJkaXYiLCJfdGFnZ2VkVGVtcGxhdGVMaXRlcmFsMiIsInByb3BzIiwidGhlbWUiLCJ0ZXh0Q29sb3IiLCJmb250RmFtaWx5IiwiU3R5bGVkTG9hZGluZ1NwaW5uZXJXcmFwcGVyIiwiZ2V0Q29sdW1uU2NoZW1hIiwiX3giLCJfeDIiLCJfZ2V0Q29sdW1uU2NoZW1hIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZTIiLCJjb25uZWN0aW9uIiwidGFibGVOYW1lIiwiY29sdW1uUmVzdWx0IiwiY29sdW1uRGVzY3JpYmUiLCJrZXBsZXJGaWVsZHMiLCJ3cmFwIiwiX2NhbGxlZTIkIiwiX2NvbnRleHQyIiwicHJldiIsIm5leHQiLCJxdWVyeSIsImNvbmNhdCIsInNlbnQiLCJnZXREdWNrREJDb2x1bW5UeXBlcyIsImFycm93U2NoZW1hVG9GaWVsZHMiLCJnZXREdWNrREJDb2x1bW5UeXBlc01hcCIsImFicnVwdCIsImtleSIsIm9iamVjdCIsInR5cGUiLCJjaGlsZHJlbiIsInNjaGVtYSIsImZpZWxkcyIsIm1hcCIsImZpZWxkIiwiZmllbGRJbmRleCIsIm5hbWUiLCJhcnJvd1R5cGUiLCJmaWVsZFR5cGUiLCJzdG9wIiwiZ2V0U2NoZW1hU3VnZ2VzdGlvbiIsInJlc3VsdCIsInJlZHVjZSIsImFjY3UiLCJkYXRhIiwiY29sdW1ucyIsImNoaWxkIiwiY29sdW1uX25hbWUiLCJ0YWJsZV9uYW1lIiwiU3R5bGVkU2NoZW1hUGFuZWxEcm9wTWVzc2FnZSIsIlN0eWxlZEFkZEljb24iLCJJY29ucyIsIkFkZCIsIlNjaGVtYVBhbmVsRHJvcE1lc3NhZ2UiLCJleHBvcnRzIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsIlNjaGVtYVBhbmVsIiwiX3JlZiIsInNldFRhYmxlU2NoZW1hIiwiZHJvcHBlZEZpbGUiLCJzY2hlbWFVcGRhdGVUcmlnZ2VyIiwiX3VzZVN0YXRlIiwidXNlU3RhdGUiLCJfdXNlU3RhdGUyIiwiX3NsaWNlZFRvQXJyYXkyIiwiY29sdW1uU2NoZW1hcyIsInNldENvbHVtblNjaGVtYXMiLCJkYXRhc2V0cyIsInVzZVNlbGVjdG9yIiwic3RhdGUiLCJfc3RhdGUkZGVtbyIsImRlbW8iLCJrZXBsZXJHbCIsInZpc1N0YXRlIiwiZ2V0VGFibGVTY2hlbWEiLCJ1c2VDYWxsYmFjayIsIl9jYWxsZWUiLCJfdGFibGVSZXN1bHQkZ2V0Q2hpbGQiLCJfcmVmMyIsImRiIiwiYyIsInRhYmxlUmVzdWx0IiwidGFibGVOYW1lcyIsInRhYmxlU2NoZW1hIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsImdldEFwcGxpY2F0aW9uQ29uZmlnIiwiZGF0YWJhc2UiLCJjb25zb2xlIiwiZXJyb3IiLCJjb25uZWN0IiwiZ2V0Q2hpbGRBdCIsInRvSlNPTiIsIlByb21pc2UiLCJhbGwiLCJjbG9zZSIsInVzZUVmZmVjdCIsImxlbmd0aCIsIlRyZWUiLCJ0cmVlRGF0YSIsInJlbmRlck5vZGUiLCJub2RlIiwiRGF0YXNldE5vZGUiLCJDb2x1bW5Ob2RlIiwiTG9hZGluZ1NwaW5uZXIiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9zY2hlbWEtcGFuZWwudHN4Il0sInNvdXJjZXNDb250ZW50IjpbIi8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVRcbi8vIENvcHlyaWdodCBjb250cmlidXRvcnMgdG8gdGhlIGtlcGxlci5nbCBwcm9qZWN0XG5cbmltcG9ydCBSZWFjdCwge3VzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVN0YXRlfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQge3VzZVNlbGVjdG9yfSBmcm9tICdyZWFjdC1yZWR1eCc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJztcblxuaW1wb3J0IHtMb2FkaW5nU3Bpbm5lciwgSWNvbnN9IGZyb20gJ0BrZXBsZXIuZ2wvY29tcG9uZW50cyc7XG5pbXBvcnQge2Fycm93U2NoZW1hVG9GaWVsZHN9IGZyb20gJ0BrZXBsZXIuZ2wvcHJvY2Vzc29ycyc7XG5pbXBvcnQge1Zpc1N0YXRlfSBmcm9tICdAa2VwbGVyLmdsL3NjaGVtYXMnO1xuaW1wb3J0IHtnZXRBcHBsaWNhdGlvbkNvbmZpZywgRGF0YWJhc2VDb25uZWN0aW9ufSBmcm9tICdAa2VwbGVyLmdsL3V0aWxzJztcblxuaW1wb3J0IHtUcmVlLCBEYXRhc2V0Tm9kZSwgQ29sdW1uTm9kZSwgVHJlZU5vZGVEYXRhfSBmcm9tICcuL3RyZWUnO1xuaW1wb3J0IHtnZXREdWNrREJDb2x1bW5UeXBlcywgZ2V0RHVja0RCQ29sdW1uVHlwZXNNYXB9IGZyb20gJy4uL3RhYmxlL2R1Y2tkYi10YWJsZS11dGlscyc7XG5cbi8vIFRPRE8gbm90ZSB0aGF0IGRlbW8gc3RhdGUgaXMgYXZhaWxhYmxlIGluIGRlbW8tYXBwLCBidXQgbm90IHdoZW4gYWRkIG1vZHVsZXMgdG8gZGVwZW5kZW5jaWVzIGluIGEgY3VzdG9tIG1hcFxudHlwZSBTdGF0ZSA9IHtcbiAgZGVtbz86IHtcbiAgICBrZXBsZXJHbDoge1xuICAgICAgbWFwOiB7XG4gICAgICAgIHZpc1N0YXRlOiBWaXNTdGF0ZTtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbmNvbnN0IFN0eWxlZFNjaGVtYVBhbmVsID0gc3R5bGVkLmRpdmBcbiAgY29sb3I6ICR7cHJvcHMgPT4gcHJvcHMudGhlbWUudGV4dENvbG9yfTtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBwYWRkaW5nOiAxMnB4O1xuICBmb250LWZhbWlseTogJHtwcm9wcyA9PiBwcm9wcy50aGVtZS5mb250RmFtaWx5fTtcbiAgaGVpZ2h0OiAxMDAlO1xuYDtcblxuY29uc3QgU3R5bGVkTG9hZGluZ1NwaW5uZXJXcmFwcGVyID0gc3R5bGVkLmRpdmBcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGhlaWdodDogMTAwJTtcbmA7XG5cbmFzeW5jIGZ1bmN0aW9uIGdldENvbHVtblNjaGVtYShjb25uZWN0aW9uOiBEYXRhYmFzZUNvbm5lY3Rpb24sIHRhYmxlTmFtZTogc3RyaW5nKSB7XG4gIGNvbnN0IGNvbHVtblJlc3VsdCA9IGF3YWl0IGNvbm5lY3Rpb24ucXVlcnkoYFNlbGVjdCAqIGZyb20gJyR7dGFibGVOYW1lfScgTElNSVQgMTtgKTtcblxuICBjb25zdCBjb2x1bW5EZXNjcmliZSA9IGF3YWl0IGdldER1Y2tEQkNvbHVtblR5cGVzKGNvbm5lY3Rpb24sIHRhYmxlTmFtZSk7XG4gIGNvbnN0IGtlcGxlckZpZWxkcyA9IGFycm93U2NoZW1hVG9GaWVsZHMoY29sdW1uUmVzdWx0LCBnZXREdWNrREJDb2x1bW5UeXBlc01hcChjb2x1bW5EZXNjcmliZSkpO1xuXG4gIHJldHVybiB7XG4gICAga2V5OiB0YWJsZU5hbWUsXG4gICAgb2JqZWN0OiB7XG4gICAgICB0eXBlOiAnZGF0YXNldCcsXG4gICAgICB0YWJsZU5hbWU6IHRhYmxlTmFtZVxuICAgIH0sXG4gICAgY2hpbGRyZW46IGNvbHVtblJlc3VsdC5zY2hlbWEuZmllbGRzLm1hcCgoZmllbGQsIGZpZWxkSW5kZXgpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGtleTogZmllbGQubmFtZSxcbiAgICAgICAgb2JqZWN0OiB7XG4gICAgICAgICAgdHlwZTogJ2NvbHVtbicsXG4gICAgICAgICAgbmFtZTogZmllbGQubmFtZSxcbiAgICAgICAgICBhcnJvd1R5cGU6IGZpZWxkLnR5cGUsXG4gICAgICAgICAgZmllbGRUeXBlOiBrZXBsZXJGaWVsZHNbZmllbGRJbmRleF0udHlwZVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pXG4gIH07XG59XG5cbmV4cG9ydCB0eXBlIFNjaGVtYVN1Z2dlc3Rpb24gPSB7Y29sdW1uX25hbWU6IHN0cmluZzsgdGFibGVfbmFtZTogc3RyaW5nfTtcblxuZnVuY3Rpb24gZ2V0U2NoZW1hU3VnZ2VzdGlvbihyZXN1bHQ6IHtrZXk6IHN0cmluZzsgY2hpbGRyZW46IHtrZXk6IHN0cmluZ31bXX1bXSkge1xuICByZXR1cm4gcmVzdWx0LnJlZHVjZSgoYWNjdSwgZGF0YSkgPT4ge1xuICAgIGNvbnN0IGNvbHVtbnMgPSBkYXRhLmNoaWxkcmVuLm1hcChjaGlsZCA9PiAoe1xuICAgICAgY29sdW1uX25hbWU6IGNoaWxkLmtleSxcbiAgICAgIHRhYmxlX25hbWU6IGRhdGEua2V5XG4gICAgfSkpO1xuICAgIHJldHVybiBhY2N1LmNvbmNhdChjb2x1bW5zKTtcbiAgfSwgW10gYXMgU2NoZW1hU3VnZ2VzdGlvbltdKTtcbn1cblxudHlwZSBTY2hlbWFQYW5lbFByb3BzID0ge1xuICBzZXRUYWJsZVNjaGVtYTogKHRhYmxlU2NoZW1hOiBTY2hlbWFTdWdnZXN0aW9uW10pID0+IHZvaWQ7XG4gIGRyb3BwZWRGaWxlOiBGaWxlIHwgbnVsbDtcbiAgc2NoZW1hVXBkYXRlVHJpZ2dlcjogbnVtYmVyO1xufTtcblxuY29uc3QgU3R5bGVkU2NoZW1hUGFuZWxEcm9wTWVzc2FnZSA9IHN0eWxlZC5kaXZgXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcblxuICBkaXYge1xuICAgIG1hcmdpbjogNXB4O1xuICB9XG4gIC5oZWFkZXIge1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgfVxuICAuYm9sZCB7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgfVxuYDtcblxuY29uc3QgU3R5bGVkQWRkSWNvbiA9IHN0eWxlZChJY29ucy5BZGQpYFxuICBkaXNwbGF5OiBpbmxpbmU7XG4gIG1hcmdpbi10b3A6IC0zcHg7XG5gO1xuXG5leHBvcnQgY29uc3QgU2NoZW1hUGFuZWxEcm9wTWVzc2FnZSA9ICgpID0+IHtcbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkU2NoZW1hUGFuZWxEcm9wTWVzc2FnZT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaGVhZGVyXCI+XG4gICAgICAgIDxTdHlsZWRBZGRJY29uIC8+IEFkZCBmaWxlcyB0byBEdWNrREJcbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzc05hbWU9XCJib2xkXCI+U3VwcG9ydGVkIGZvcm1hdHM6IDwvZGl2PlxuICAgICAgPGRpdj4uY3N2LCAuanNvbiwgLmdlb2pzb24sIC5wYXJxdWV0LCAuYXJyb3c8L2Rpdj5cbiAgICAgIDxkaXY+RmlsZXMgeW91IGFkZCB3aWxsIHN0YXkgbG9jYWwgdG8geW91ciBicm93c2VyLjwvZGl2PlxuICAgIDwvU3R5bGVkU2NoZW1hUGFuZWxEcm9wTWVzc2FnZT5cbiAgKTtcbn07XG5cbmV4cG9ydCBjb25zdCBTY2hlbWFQYW5lbCA9ICh7XG4gIHNldFRhYmxlU2NoZW1hLFxuICBkcm9wcGVkRmlsZSxcbiAgc2NoZW1hVXBkYXRlVHJpZ2dlclxufTogU2NoZW1hUGFuZWxQcm9wcykgPT4ge1xuICBjb25zdCBbY29sdW1uU2NoZW1hcywgc2V0Q29sdW1uU2NoZW1hc10gPSB1c2VTdGF0ZTxUcmVlTm9kZURhdGE8e3R5cGU6IHN0cmluZ30+W10+KFtdKTtcbiAgY29uc3QgZGF0YXNldHMgPSB1c2VTZWxlY3Rvcigoc3RhdGU6IFN0YXRlKSA9PiBzdGF0ZT8uZGVtbz8ua2VwbGVyR2w/Lm1hcD8udmlzU3RhdGUuZGF0YXNldHMpO1xuXG4gIGNvbnN0IGdldFRhYmxlU2NoZW1hID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGRiID0gZ2V0QXBwbGljYXRpb25Db25maWcoKS5kYXRhYmFzZTtcbiAgICBpZiAoIWRiKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdUaGUgZGF0YWJhc2UgaXMgbm90IGNvbmZpZ3VyZWQgcHJvcGVybHkuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGMgPSBhd2FpdCBkYi5jb25uZWN0KCk7XG5cbiAgICBjb25zdCB0YWJsZVJlc3VsdCA9IGF3YWl0IGMucXVlcnkoJ1NIT1cgVEFCTEVTOycpO1xuXG4gICAgY29uc3QgdGFibGVOYW1lczogc3RyaW5nW10gfCB1bmRlZmluZWQgPSB0YWJsZVJlc3VsdC5nZXRDaGlsZEF0KDApPy50b0pTT04oKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UuYWxsKCh0YWJsZU5hbWVzIHx8IFtdKT8ubWFwKG5hbWUgPT4gZ2V0Q29sdW1uU2NoZW1hKGMsIG5hbWUpKSk7XG4gICAgY29uc3QgdGFibGVTY2hlbWEgPSBnZXRTY2hlbWFTdWdnZXN0aW9uKHJlc3VsdCk7XG5cbiAgICBzZXRDb2x1bW5TY2hlbWFzKHJlc3VsdCk7XG4gICAgc2V0VGFibGVTY2hlbWEodGFibGVTY2hlbWEpO1xuICAgIGF3YWl0IGMuY2xvc2UoKTtcblxuICAgIC8vIHNjaGVtYVVwZGF0ZVRyaWdnZXIgaW5kaWNhdGVzIHBvc3NpYmxlIGNoYW5nZSBpbiBEdWNrREJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gIH0sIFtzZXRDb2x1bW5TY2hlbWFzLCBzZXRUYWJsZVNjaGVtYSwgc2NoZW1hVXBkYXRlVHJpZ2dlcl0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgZ2V0VGFibGVTY2hlbWEoKTtcbiAgfSwgW2RhdGFzZXRzLCBkcm9wcGVkRmlsZSwgZ2V0VGFibGVTY2hlbWFdKTtcblxuICByZXR1cm4gKFxuICAgIDxTdHlsZWRTY2hlbWFQYW5lbD5cbiAgICAgIHtjb2x1bW5TY2hlbWFzPy5sZW5ndGggPyAoXG4gICAgICAgIGNvbHVtblNjaGVtYXMubWFwKGRhdGEgPT4gKFxuICAgICAgICAgIDxUcmVlXG4gICAgICAgICAgICBrZXk9e2RhdGEua2V5fVxuICAgICAgICAgICAgdHJlZURhdGE9e2RhdGF9XG4gICAgICAgICAgICByZW5kZXJOb2RlPXtub2RlID0+IHtcbiAgICAgICAgICAgICAgaWYgKG5vZGUub2JqZWN0LnR5cGUgPT09ICdkYXRhc2V0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiA8RGF0YXNldE5vZGUgbm9kZT17bm9kZX0gLz47XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAobm9kZS5vYmplY3QudHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPENvbHVtbk5vZGUgbm9kZT17bm9kZX0gLz47XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9fVxuICAgICAgICAgIC8+XG4gICAgICAgICkpXG4gICAgICApIDogZHJvcHBlZEZpbGUgPyAoXG4gICAgICAgIDxTdHlsZWRMb2FkaW5nU3Bpbm5lcldyYXBwZXI+XG4gICAgICAgICAgPExvYWRpbmdTcGlubmVyIC8+XG4gICAgICAgIDwvU3R5bGVkTG9hZGluZ1NwaW5uZXJXcmFwcGVyPlxuICAgICAgKSA6IChcbiAgICAgICAgPFNjaGVtYVBhbmVsRHJvcE1lc3NhZ2UgLz5cbiAgICAgICl9XG4gICAgPC9TdHlsZWRTY2hlbWFQYW5lbD5cbiAgKTtcbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7OztBQUdBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFDLFdBQUEsR0FBQUQsT0FBQTtBQUNBLElBQUFFLGlCQUFBLEdBQUFDLHNCQUFBLENBQUFILE9BQUE7QUFFQSxJQUFBSSxXQUFBLEdBQUFKLE9BQUE7QUFDQSxJQUFBSyxXQUFBLEdBQUFMLE9BQUE7QUFFQSxJQUFBTSxNQUFBLEdBQUFOLE9BQUE7QUFFQSxJQUFBTyxLQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxpQkFBQSxHQUFBUixPQUFBO0FBQTBGLElBQUFTLGVBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFiMUY7QUFDQTtBQUFBLFNBQUFDLHlCQUFBQyxDQUFBLDZCQUFBQyxPQUFBLG1CQUFBQyxDQUFBLE9BQUFELE9BQUEsSUFBQUUsQ0FBQSxPQUFBRixPQUFBLFlBQUFGLHdCQUFBLFlBQUFBLHlCQUFBQyxDQUFBLFdBQUFBLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLEtBQUFGLENBQUE7QUFBQSxTQUFBZix3QkFBQWUsQ0FBQSxFQUFBRSxDQUFBLFNBQUFBLENBQUEsSUFBQUYsQ0FBQSxJQUFBQSxDQUFBLENBQUFJLFVBQUEsU0FBQUosQ0FBQSxlQUFBQSxDQUFBLGdCQUFBSyxPQUFBLENBQUFMLENBQUEsMEJBQUFBLENBQUEsc0JBQUFBLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FBQVEsQ0FBQSxLQUFBQyxTQUFBLFVBQUFDLENBQUEsR0FBQUMsTUFBQSxDQUFBQyxjQUFBLElBQUFELE1BQUEsQ0FBQUUsd0JBQUEsV0FBQUMs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
|