vxe-table-plugin-export-xlsx-xhx 1.0.2 → 1.0.3
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/index.common.js +25 -31
- package/dist/index.js +29 -35
- package/dist/index.min.js +1 -1
- package/package.json +1 -1
package/dist/index.common.js
CHANGED
@@ -3,19 +3,16 @@
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
4
4
|
value: true
|
5
5
|
});
|
6
|
-
exports["default"] = exports.VXETablePluginExportXLSX = void 0;
|
7
|
-
var _xeUtils = _interopRequireDefault(require("xe-utils/methods/xe-utils"));
|
8
|
-
var _xlsx = _interopRequireDefault(require("xlsx"));
|
9
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
10
6
|
/* eslint-disable no-unused-vars */
|
11
|
-
|
7
|
+
var xe_utils_1 = require("xe-utils/methods/xe-utils");
|
8
|
+
var xlsx_1 = require("xlsx");
|
12
9
|
/* eslint-enable no-unused-vars */
|
13
10
|
var _vxetable;
|
14
11
|
function getCellLabel(column, cellValue) {
|
15
12
|
if (cellValue) {
|
16
13
|
switch (column.cellType) {
|
17
14
|
case 'string':
|
18
|
-
return
|
15
|
+
return xe_utils_1["default"].toValueString(cellValue);
|
19
16
|
case 'number':
|
20
17
|
if (!isNaN(cellValue)) {
|
21
18
|
return Number(cellValue);
|
@@ -31,7 +28,7 @@ function getCellLabel(column, cellValue) {
|
|
31
28
|
return cellValue;
|
32
29
|
}
|
33
30
|
function getFooterCellValue($table, opts, rows, column) {
|
34
|
-
var cellValue =
|
31
|
+
var cellValue = xe_utils_1["default"].toString(rows[$table.$getColumnIndex(column)]);
|
35
32
|
return cellValue;
|
36
33
|
}
|
37
34
|
function toBuffer(wbout) {
|
@@ -59,7 +56,7 @@ function exportXLSX(params) {
|
|
59
56
|
// const rowList = datas
|
60
57
|
if (isHeader) {
|
61
58
|
columns.forEach(function (column) {
|
62
|
-
colHead[column.id] =
|
59
|
+
colHead[column.id] = xe_utils_1["default"].toString(original ? column.property : column.getTitle());
|
63
60
|
});
|
64
61
|
}
|
65
62
|
// 新增部分
|
@@ -71,8 +68,7 @@ function exportXLSX(params) {
|
|
71
68
|
return rest;
|
72
69
|
});
|
73
70
|
if (isFooter) {
|
74
|
-
var
|
75
|
-
footerData = _$table$getTableData.footerData;
|
71
|
+
var footerData = $table.getTableData().footerData;
|
76
72
|
var footers = footerFilterMethod ? footerData.filter(footerFilterMethod) : footerData;
|
77
73
|
footers.forEach(function (rows) {
|
78
74
|
var item = {};
|
@@ -82,13 +78,13 @@ function exportXLSX(params) {
|
|
82
78
|
footList.push(item);
|
83
79
|
});
|
84
80
|
}
|
85
|
-
var book =
|
86
|
-
var sheet =
|
81
|
+
var book = xlsx_1["default"].utils.book_new();
|
82
|
+
var sheet = xlsx_1["default"].utils.json_to_sheet((isHeader ? [colHead] : []).concat(rowList).concat(footList), {
|
87
83
|
skipHeader: true
|
88
84
|
});
|
89
85
|
// 转换数据
|
90
|
-
|
91
|
-
var wbout =
|
86
|
+
xlsx_1["default"].utils.book_append_sheet(book, sheet, sheetName);
|
87
|
+
var wbout = xlsx_1["default"].write(book, {
|
92
88
|
bookType: type,
|
93
89
|
bookSST: false,
|
94
90
|
type: 'binary'
|
@@ -110,11 +106,11 @@ function downloadFile(blob, options) {
|
|
110
106
|
var filename = options.filename,
|
111
107
|
type = options.type;
|
112
108
|
if (navigator.msSaveBlob) {
|
113
|
-
navigator.msSaveBlob(blob,
|
109
|
+
navigator.msSaveBlob(blob, filename + "." + type);
|
114
110
|
} else {
|
115
111
|
var linkElem = document.createElement('a');
|
116
112
|
linkElem.target = '_blank';
|
117
|
-
linkElem.download =
|
113
|
+
linkElem.download = filename + "." + type;
|
118
114
|
linkElem.href = URL.createObjectURL(blob);
|
119
115
|
document.body.appendChild(linkElem);
|
120
116
|
linkElem.click();
|
@@ -136,13 +132,13 @@ function parseCsv(columns, content) {
|
|
136
132
|
list[0].split(',').map(replaceDoubleQuotation);
|
137
133
|
rList.forEach(function (r) {
|
138
134
|
if (r) {
|
139
|
-
var
|
135
|
+
var item_1 = {};
|
140
136
|
r.split(',').forEach(function (val, colIndex) {
|
141
137
|
if (fields[colIndex]) {
|
142
|
-
|
138
|
+
item_1[fields[colIndex]] = replaceDoubleQuotation(val);
|
143
139
|
}
|
144
140
|
});
|
145
|
-
rows.push(
|
141
|
+
rows.push(item_1);
|
146
142
|
}
|
147
143
|
});
|
148
144
|
}
|
@@ -171,13 +167,13 @@ function importXLSX(params) {
|
|
171
167
|
var _importResolve = $table._importResolve;
|
172
168
|
var fileReader = new FileReader();
|
173
169
|
fileReader.onload = function (e) {
|
174
|
-
var workbook =
|
170
|
+
var workbook = xlsx_1["default"].read(e.target.result, {
|
175
171
|
type: 'binary'
|
176
172
|
});
|
177
|
-
var csvData =
|
178
|
-
var
|
179
|
-
fields =
|
180
|
-
rows =
|
173
|
+
var csvData = xlsx_1["default"].utils.sheet_to_csv(workbook.Sheets.Sheet1);
|
174
|
+
var _a = parseCsv(columns, csvData),
|
175
|
+
fields = _a.fields,
|
176
|
+
rows = _a.rows;
|
181
177
|
var status = checkImportData(columns, fields, rows);
|
182
178
|
if (status) {
|
183
179
|
$table.createData(rows).then(function (data) {
|
@@ -189,7 +185,7 @@ function importXLSX(params) {
|
|
189
185
|
});
|
190
186
|
if (options.message !== false) {
|
191
187
|
_vxetable.modal.message({
|
192
|
-
message:
|
188
|
+
message: xe_utils_1["default"].template(_vxetable.t('vxe.table.impSuccess'), [rows.length]),
|
193
189
|
status: 'success'
|
194
190
|
});
|
195
191
|
}
|
@@ -221,7 +217,7 @@ function handleExportEvent(params) {
|
|
221
217
|
/**
|
222
218
|
* 基于 vxe-table 表格的增强插件,支持导出 xlsx 格式
|
223
219
|
*/
|
224
|
-
|
220
|
+
exports.VXETablePluginExportXLSX = {
|
225
221
|
install: function install(xtable) {
|
226
222
|
var interceptor = xtable.interceptor;
|
227
223
|
_vxetable = xtable;
|
@@ -234,10 +230,8 @@ var VXETablePluginExportXLSX = {
|
|
234
230
|
});
|
235
231
|
}
|
236
232
|
};
|
237
|
-
exports.VXETablePluginExportXLSX = VXETablePluginExportXLSX;
|
238
233
|
if (typeof window !== 'undefined' && window.VXETable) {
|
239
|
-
window.VXETable.use(VXETablePluginExportXLSX);
|
234
|
+
window.VXETable.use(exports.VXETablePluginExportXLSX);
|
240
235
|
}
|
241
|
-
|
242
|
-
exports["default"] = _default;
|
243
|
-
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIiwiaW5kZXguanMiXSwibmFtZXMiOlsiX3Z4ZXRhYmxlIiwiZ2V0Q2VsbExhYmVsIiwiY29sdW1uIiwiY2VsbFZhbHVlIiwiY2VsbFR5cGUiLCJYRVV0aWxzIiwidG9WYWx1ZVN0cmluZyIsImlzTmFOIiwiTnVtYmVyIiwibGVuZ3RoIiwiZ2V0Rm9vdGVyQ2VsbFZhbHVlIiwiJHRhYmxlIiwib3B0cyIsInJvd3MiLCJ0b1N0cmluZyIsIiRnZXRDb2x1bW5JbmRleCIsInRvQnVmZmVyIiwid2JvdXQiLCJidWYiLCJBcnJheUJ1ZmZlciIsInZpZXciLCJVaW50OEFycmF5IiwiaW5kZXgiLCJjaGFyQ29kZUF0IiwiZXhwb3J0WExTWCIsInBhcmFtcyIsIm9wdGlvbnMiLCJjb2x1bW5zIiwiZGF0YXMiLCJzaGVldE5hbWUiLCJ0eXBlIiwiaXNIZWFkZXIiLCJpc0Zvb3RlciIsIm9yaWdpbmFsIiwibWVzc2FnZSIsImZvb3RlckZpbHRlck1ldGhvZCIsImNvbEhlYWQiLCJmb290TGlzdCIsImZvckVhY2giLCJpZCIsInByb3BlcnR5IiwiZ2V0VGl0bGUiLCJyb3dMaXN0IiwibWFwIiwiaXRlbSIsInJlc3QiLCJnZXRUYWJsZURhdGEiLCJmb290ZXJEYXRhIiwiZm9vdGVycyIsImZpbHRlciIsInB1c2giLCJib29rIiwiWExTWCIsInV0aWxzIiwiYm9va19uZXciLCJzaGVldCIsImpzb25fdG9fc2hlZXQiLCJjb25jYXQiLCJza2lwSGVhZGVyIiwiYm9va19hcHBlbmRfc2hlZXQiLCJ3cml0ZSIsImJvb2tUeXBlIiwiYm9va1NTVCIsImJsb2IiLCJCbG9iIiwiZG93bmxvYWRGaWxlIiwibW9kYWwiLCJ0Iiwic3RhdHVzIiwid2luZG93IiwiZmlsZW5hbWUiLCJuYXZpZ2F0b3IiLCJtc1NhdmVCbG9iIiwibGlua0VsZW0iLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ0YXJnZXQiLCJkb3dubG9hZCIsImhyZWYiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJjbGljayIsInJlbW92ZUNoaWxkIiwiY29uc29sZSIsImVycm9yIiwicmVwbGFjZURvdWJsZVF1b3RhdGlvbiIsInZhbCIsInJlcGxhY2UiLCJwYXJzZUNzdiIsImNvbnRlbnQiLCJsaXN0Iiwic3BsaXQiLCJmaWVsZHMiLCJyTGlzdCIsInNsaWNlIiwiciIsImNvbEluZGV4IiwiY2hlY2tJbXBvcnREYXRhIiwidGFibGVGaWVsZHMiLCJmaWVsZCIsImV2ZXJ5IiwiaW5jbHVkZXMiLCJpbXBvcnRYTFNYIiwiZmlsZSIsIl9pbXBvcnRSZXNvbHZlIiwiZmlsZVJlYWRlciIsIkZpbGVSZWFkZXIiLCJvbmxvYWQiLCJlIiwid29ya2Jvb2siLCJyZWFkIiwicmVzdWx0IiwiY3N2RGF0YSIsInNoZWV0X3RvX2NzdiIsIlNoZWV0cyIsIlNoZWV0MSIsImNyZWF0ZURhdGEiLCJ0aGVuIiwiZGF0YSIsIm1vZGUiLCJpbnNlcnRBdCIsInJlbG9hZERhdGEiLCJ0ZW1wbGF0ZSIsInJlYWRBc0JpbmFyeVN0cmluZyIsImhhbmRsZUltcG9ydEV2ZW50IiwiaGFuZGxlRXhwb3J0RXZlbnQiLCJWWEVUYWJsZVBsdWdpbkV4cG9ydFhMU1giLCJpbnN0YWxsIiwieHRhYmxlIiwiaW50ZXJjZXB0b3IiLCJPYmplY3QiLCJhc3NpZ24iLCJ0eXBlcyIsInhsc3giLCJtaXhpbiIsIlZYRVRhYmxlIiwidXNlIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFDQTtBQVNBO0FBQXVCO0FBVnZCOztBQVdBO0FBRUEsSUFBSUEsU0FBMEI7QUFHOUIsU0FBU0MsWUFBWSxDQUFFQyxNQUFvQixFQUFFQyxTQUFjLEVBQUE7RUFDekQsSUFBSUEsU0FBUyxFQUFFO0lBQ2IsUUFBUUQsTUFBTSxDQUFDRSxRQUFRO01BQ3JCLEtBQUssUUFBUTtRQUNYLE9BQU9DLG1CQUFPLENBQUNDLGFBQWEsQ0FBQ0gsU0FBUyxDQUFDO01BQ3pDLEtBQUssUUFBUTtRQUNYLElBQUksQ0FBQ0ksS0FBSyxDQUFDSixT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QUFRLEVBQUU7RUFDcERwRSxNQUFNLENBQUNvRSxRQUFRLENBQUNDLEdBQUcsQ0FBQ1Ysd0JBQXdCLENBQUM7QUN0Qi9DO0FEdUJDLGVBRWNBLHdCQUF3QjtBQUFBIiwiZmlsZSI6ImluZGV4LmNvbW1vbi5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbmltcG9ydCBYRVV0aWxzIGZyb20gJ3hlLXV0aWxzL21ldGhvZHMveGUtdXRpbHMnXHJcbmltcG9ydCB7XHJcbiAgVlhFVGFibGUsXHJcbiAgVGFibGUsXHJcbiAgSW50ZXJjZXB0b3JFeHBvcnRQYXJhbXMsXHJcbiAgSW50ZXJjZXB0b3JJbXBvcnRQYXJhbXMsXHJcbiAgQ29sdW1uQ29uZmlnLFxyXG4gIEV4cG9ydE9wdG9uc1xyXG59IGZyb20gJ3Z4ZS10YWJsZS9saWIvdnhlLXRhYmxlJ1xyXG5pbXBvcnQgWExTWCBmcm9tICd4bHN4J1xyXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXHJcblxyXG5sZXQgX3Z4ZXRhYmxlOiB0eXBlb2YgVlhFVGFibGVcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRDZWxsTGFiZWwgKGNvbHVtbjogQ29sdW1uQ29uZmlnLCBjZWxsVmFsdWU6IGFueSkge1xyXG4gIGlmIChjZWxsVmFsdWUpIHtcclxuICAgIHN3aXRjaCAoY29sdW1uLmNlbGxUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgcmV0dXJuIFhFVXRpbHMudG9WYWx1ZVN0cmluZyhjZWxsVmFsdWUpXHJcbiAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgaWYgKCFpc05hTihjZWxsVmFsdWUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gTnVtYmVyKGNlbGxWYWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBpZiAoY2VsbFZhbHVlLmxlbmd0aCA8IDEyICYmICFpc05hTihjZWxsVmFsdWUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gTnVtYmVyKGNlbGxWYWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGNlbGxWYWx1ZVxyXG59XHJcblxyXG5cclxuXHJcbmZ1bmN0aW9uIGdldEZvb3RlckNlbGxWYWx1ZSAoJHRhYmxlOiBUYWJsZSwgb3B0czogRXhwb3J0T3B0b25zLCByb3dzOiBhbnlbXSwgY29sdW1uOiBDb2x1bW5Db25maWcpIHtcclxuICB2YXIgY2VsbFZhbHVlID0gWEVVdGlscy50b1N0cmluZyhyb3dzWyR0YWJsZS4kZ2V0Q29sdW1uSW5kZXgoY29sdW1uKV0pXHJcbiAgcmV0dXJuIGNlbGxWYWx1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiB0b0J1ZmZlciAod2JvdXQ6IGFueSkge1xyXG4gIGxldCBidWYgPSBuZXcgQXJyYXlCdWZmZXIod2JvdXQubGVuZ3RoKVxyXG4gIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxyXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggIT09IHdib3V0Lmxlbmd0aDsgKytpbmRleCkgdmlld1tpbmRleF0gPSB3Ym91dC5jaGFyQ29kZUF0KGluZGV4KSAmIDB4RkZcclxuICByZXR1cm4gYnVmXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4cG9ydFhMU1ggKHBhcmFtczogSW50ZXJjZXB0b3JFeHBvcnRQYXJhbXMpIHtcclxuICBjb25zdCB7ICR0YWJsZSwgb3B0aW9ucywgY29sdW1ucywgZGF0YXMgfSA9IHBhcmFtc1xyXG4gIGNvbnN0IHsgc2hlZXROYW1lLCB0eXBlLCBpc0hlYWRlciwgaXNGb290ZXIsIG9yaWdpbmFsLCBtZXNzYWdlLCBmb290ZXJGaWx0ZXJNZXRob2QgfSA9IG9wdGlvbnNcclxuICBjb25zdCBjb2xIZWFkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cclxuICBjb25zdCBmb290TGlzdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW11cclxuICAvLyBjb25zdCByb3dMaXN0ID0gZGF0YXNcclxuXHJcbiAgaWYgKGlzSGVhZGVyKSB7XHJcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICBjb2xIZWFkW2NvbHVtbi5pZF0gPSBYRVV0aWxzLnRvU3RyaW5nKG9yaWdpbmFsID8gY29sdW1uLnByb3BlcnR5IDogY29sdW1uLmdldFRpdGxlKCkpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8g5paw5aKe6YOo5YiGXHJcbiAgY29uc3Qgcm93TGlzdCA9IGRhdGFzLm1hcChpdGVtID0+IHtcclxuICAgIGNvbnN0IHJlc3Q6IGFueSA9IHt9XHJcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICByZXN0W2NvbHVtbi5pZF0gPSBnZXRDZWxsTGFiZWwoY29sdW1uLCBpdGVtW2NvbHVtbi5pZF0pXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIHJlc3RcclxuICB9KVxyXG5cclxuICBpZiAoaXNGb290ZXIpIHtcclxuICAgIGNvbnN0IHsgZm9vdGVyRGF0YSB9ID0gJHRhYmxlLmdldFRhYmxlRGF0YSgpXHJcbiAgICBjb25zdCBmb290ZXJzID0gZm9vdGVyRmlsdGVyTWV0aG9kID8gZm9vdGVyRGF0YS5maWx0ZXIoZm9vdGVyRmlsdGVyTWV0aG9kKSA6IGZvb3RlckRhdGFcclxuICAgIGZvb3RlcnMuZm9yRWFjaCgocm93cykgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cclxuICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgICBpdGVtW2NvbHVtbi5pZF0gPSBnZXRGb290ZXJDZWxsVmFsdWUoJHRhYmxlLCBvcHRpb25zLCByb3dzLCBjb2x1bW4pXHJcbiAgICAgIH0pXHJcbiAgICAgIGZvb3RMaXN0LnB1c2goaXRlbSlcclxuICAgIH0pXHJcbiAgfVxyXG4gIGNvbnN0IGJvb2sgPSBYTFNYLnV0aWxzLmJvb2tfbmV3KClcclxuICBjb25zdCBzaGVldCA9IFhMU1gudXRpbHMuanNvbl90b19zaGVldCgoaXNIZWFkZXIgPyBbY29sSGVhZF0gOiBbXSkuY29uY2F0KHJvd0xpc3QpLmNvbmNhdChmb290TGlzdCksIHsgc2tpcEhlYWRlcjogdHJ1ZSB9KVxyXG4gIC8vIOi9rOaNouaVsOaNrlxyXG4gIFhMU1gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQoYm9vaywgc2hlZXQsIHNoZWV0TmFtZSlcclxuICBjb25zdCB3Ym91dCA9IFhMU1gud3JpdGUoYm9vaywgeyBib29rVHlwZTogdHlwZSwgYm9va1NTVDogZmFsc2UsIHR5cGU6ICdiaW5hcnknIH0pXHJcbiAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt0b0J1ZmZlcih3Ym91dCldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIH0pXHJcbiAgLy8g5L+d5a2Y5a+85Ye6XHJcbiAgZG93bmxvYWRGaWxlKGJsb2IsIG9wdGlvbnMpXHJcbiAgaWYgKG1lc3NhZ2UgIT09IGZhbHNlKSB7XHJcbiAgICBfdnhldGFibGUubW9kYWwubWVzc2FnZSh7IG1lc3NhZ2U6IF92eGV0YWJsZS50KCd2eGUudGFibGUuZXhwU3VjY2VzcycpLCBzdGF0dXM6ICdzdWNjZXNzJyB9KVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZG93bmxvYWRGaWxlIChibG9iOiBCbG9iLCBvcHRpb25zOiBFeHBvcnRPcHRvbnMpIHtcclxuICBpZiAod2luZG93LkJsb2IpIHtcclxuICAgIGNvbnN0IHsgZmlsZW5hbWUsIHR5cGUgfSA9IG9wdGlvbnNcclxuICAgIGlmIChuYXZpZ2F0b3IubXNTYXZlQmxvYikge1xyXG4gICAgICBuYXZpZ2F0b3IubXNTYXZlQmxvYihibG9iLCBgJHtmaWxlbmFtZX0uJHt0eXBlfWApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgbGlua0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcclxuICAgICAgbGlua0VsZW0udGFyZ2V0ID0gJ19ibGFuaydcclxuICAgICAgbGlua0VsZW0uZG93bmxvYWQgPSBgJHtmaWxlbmFtZX0uJHt0eXBlfWBcclxuICAgICAgbGlua0VsZW0uaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rRWxlbSlcclxuICAgICAgbGlua0VsZW0uY2xpY2soKVxyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmtFbGVtKVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zb2xlLmVycm9yKF92eGV0YWJsZS50KCd2eGUuZXJyb3Iubm90RXhwJykpXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXBsYWNlRG91YmxlUXVvdGF0aW9uICh2YWw6IHN0cmluZykge1xyXG4gIHJldHVybiB2YWwucmVwbGFjZSgvXlwiLywgJycpLnJlcGxhY2UoL1wiJC8sICcnKVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNzdiAoY29sdW1uczogQ29sdW1uQ29uZmlnW10sIGNvbnRlbnQ6IHN0cmluZykge1xyXG4gIGNvbnN0IGxpc3QgPSBjb250ZW50LnNwbGl0KCdcXG4nKVxyXG4gIGNvbnN0IGZpZWxkczogc3RyaW5nW10gPSBbXVxyXG4gIGNvbnN0IHJvd3M6IGFueVtdID0gW11cclxuICBpZiAobGlzdC5sZW5ndGgpIHtcclxuICAgIGNvbnN0IHJMaXN0ID0gbGlzdC5zbGljZSgxKVxyXG4gICAgbGlzdFswXS5zcGxpdCgnLCcpLm1hcChyZXBsYWNlRG91YmxlUXVvdGF0aW9uKVxyXG4gICAgckxpc3QuZm9yRWFjaCgocikgPT4ge1xyXG4gICAgICBpZiAocikge1xyXG4gICAgICAgIGNvbnN0IGl0ZW06IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fVxyXG4gICAgICAgIHIuc3BsaXQoJywnKS5mb3JFYWNoKCh2YWwsIGNvbEluZGV4KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZmllbGRzW2NvbEluZGV4XSkge1xyXG4gICAgICAgICAgICBpdGVtW2ZpZWxkc1tjb2xJbmRleF1dID0gcmVwbGFjZURvdWJsZVF1b3RhdGlvbih2YWwpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICByb3dzLnB1c2goaXRlbSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgcmV0dXJuIHsgZmllbGRzLCByb3dzIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2hlY2tJbXBvcnREYXRhIChjb2x1bW5zOiBDb2x1bW5Db25maWdbXSwgZmllbGRzOiBzdHJpbmdbXSwgcm93czogYW55W10pIHtcclxuICBsZXQgdGFibGVGaWVsZHM6IHN0cmluZ1tdID0gW11cclxuICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgbGV0IGZpZWxkID0gY29sdW1uLnByb3BlcnR5XHJcbiAgICBpZiAoZmllbGQpIHtcclxuICAgICAgdGFibGVGaWVsZHMucHVzaChmaWVsZClcclxuICAgIH1cclxuICB9KVxyXG4gIHJldHVybiB0YWJsZUZpZWxkcy5ldmVyeSgoZmllbGQpID0+IGZpZWxkcy5pbmNsdWRlcyhmaWVsZCkpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGltcG9ydFhMU1ggKHBhcmFtczogSW50ZXJjZXB0b3JJbXBvcnRQYXJhbXMpIHtcclxuICBjb25zdCB7IGNvbHVtbnMsIG9wdGlvbnMsIGZpbGUgfSA9IHBhcmFtc1xyXG4gIGNvbnN0ICR0YWJsZTogYW55ID0gcGFyYW1zLiR0YWJsZVxyXG4gIGNvbnN0IHsgX2ltcG9ydFJlc29sdmUgfSA9ICR0YWJsZVxyXG4gIGNvbnN0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXHJcbiAgZmlsZVJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICBjb25zdCB3b3JrYm9vayA9IFhMU1gucmVhZChlLnRhcmdldC5yZXN1bHQsIHsgdHlwZTogJ2JpbmFyeScgfSlcclxuICAgIGNvbnN0IGNzdkRhdGE6IHN0cmluZyA9IFhMU1gudXRpbHMuc2hlZXRfdG9fY3N2KHdvcmtib29rLlNoZWV0cy5TaGVldDEpXHJcbiAgICBjb25zdCB7IGZpZWxkcywgcm93cyB9ID0gcGFyc2VDc3YoY29sdW1ucywgY3N2RGF0YSlcclxuICAgIGNvbnN0IHN0YXR1cyA9IGNoZWNrSW1wb3J0RGF0YShjb2x1bW5zLCBmaWVsZHMsIHJvd3MpXHJcbiAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICR0YWJsZS5jcmVhdGVEYXRhKHJvd3MpXHJcbiAgICAgICAgLnRoZW4oKGRhdGE6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICBpZiAob3B0aW9ucy5tb2RlID09PSAnYXBwZW5kJykge1xyXG4gICAgICAgICAgICAkdGFibGUuaW5zZXJ0QXQoZGF0YSwgLTEpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkdGFibGUucmVsb2FkRGF0YShkYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIGlmIChvcHRpb25zLm1lc3NhZ2UgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgX3Z4ZXRhYmxlLm1vZGFsLm1lc3NhZ2UoeyBtZXNzYWdlOiBYRVV0aWxzLnRlbXBsYXRlKF92eGV0YWJsZS50KCd2eGUudGFibGUuaW1wU3VjY2VzcycpLCBbcm93cy5sZW5ndGhdKSwgc3RhdHVzOiAnc3VjY2VzcycgfSlcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLm1lc3NhZ2UgIT09IGZhbHNlKSB7XHJcbiAgICAgIF92eGV0YWJsZS5tb2RhbC5tZXNzYWdlKHsgbWVzc2FnZTogX3Z4ZXRhYmxlLnQoJ3Z4ZS5lcnJvci5pbXBGaWVsZHMnKSwgc3RhdHVzOiAnZXJyb3InIH0pXHJcbiAgICB9XHJcbiAgICBpZiAoX2ltcG9ydFJlc29sdmUpIHtcclxuICAgICAgX2ltcG9ydFJlc29sdmUoc3RhdHVzKVxyXG4gICAgICAkdGFibGUuX2ltcG9ydFJlc29sdmUgPSBudWxsXHJcbiAgICB9XHJcbiAgfVxyXG4gIGZpbGVSZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGZpbGUpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZUltcG9ydEV2ZW50IChwYXJhbXM6IEludGVyY2VwdG9ySW1wb3J0UGFyYW1zKSB7XHJcbiAgaWYgKHBhcmFtcy5vcHRpb25zLnR5cGUgPT09ICd4bHN4Jykge1xyXG4gICAgaW1wb3J0WExTWChwYXJhbXMpXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZUV4cG9ydEV2ZW50IChwYXJhbXM6IEludGVyY2VwdG9yRXhwb3J0UGFyYW1zKSB7XHJcbiAgaWYgKHBhcmFtcy5vcHRpb25zLnR5cGUgPT09ICd4bHN4Jykge1xyXG4gICAgZXhwb3J0WExTWChwYXJhbXMpXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDln7rkuo4gdnhlLXRhYmxlIOihqOagvOeahOWinuW8uuaPkuS7tu+8jOaUr+aMgeWvvOWHuiB4bHN4IOagvOW8j1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFZYRVRhYmxlUGx1Z2luRXhwb3J0WExTWCA9IHtcclxuICBpbnN0YWxsICh4dGFibGU6IHR5cGVvZiBWWEVUYWJsZSkge1xyXG4gICAgY29uc3QgeyBpbnRlcmNlcHRvciB9ID0geHRhYmxlXHJcbiAgICBfdnhldGFibGUgPSB4dGFibGVcclxuICAgIE9iamVjdC5hc3NpZ24oeHRhYmxlLnR5cGVzLCB7IHhsc3g6IDEgfSlcclxuICAgIGludGVyY2VwdG9yLm1peGluKHtcclxuICAgICAgJ2V2ZW50LmltcG9ydCc6IGhhbmRsZUltcG9ydEV2ZW50LFxyXG4gICAgICAnZXZlbnQuZXhwb3J0JzogaGFuZGxlRXhwb3J0RXZlbnRcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlZYRVRhYmxlKSB7XHJcbiAgd2luZG93LlZYRVRhYmxlLnVzZShWWEVUYWJsZVBsdWdpbkV4cG9ydFhMU1gpXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZYRVRhYmxlUGx1Z2luRXhwb3J0WExTWFxyXG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xuaW1wb3J0IFhFVXRpbHMgZnJvbSAneGUtdXRpbHMvbWV0aG9kcy94ZS11dGlscyc7XG5pbXBvcnQgWExTWCBmcm9tICd4bHN4Jztcbi8qIGVzbGludC1lbmFibGUgbm8tdW51c2VkLXZhcnMgKi9cbmxldCBfdnhldGFibGU7XG5mdW5jdGlvbiBnZXRDZWxsTGFiZWwoY29sdW1uLCBjZWxsVmFsdWUpIHtcbiAgICBpZiAoY2VsbFZhbHVlKSB7XG4gICAgICAgIHN3aXRjaCAoY29sdW1uLmNlbGxUeXBlKSB7XG4gICAgICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgICAgIHJldHVybiBYRVV0aWxzLnRvVmFsdWVTdHJpbmcoY2VsbFZhbHVlKTtcbiAgICAgICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAgICAgaWYgKCFpc05hTihjZWxsVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoY2VsbFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGlmIChjZWxsVmFsdWUubGVuZ3RoIDwgMTIgJiYgIWlzTmFOKGNlbGxWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE51bWJlcihjZWxsVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY2VsbFZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0Rm9vdGVyQ2VsbFZhbHVlKCR0YWJsZSwgb3B0cywgcm93cywgY29sdW1uKSB7XG4gICAgdmFyIGNlbGxWYWx1ZSA9IFhFVXRpbHMudG9TdHJpbmcocm93c1skdGFibGUuJGdldENvbHVtbkluZGV4KGNvbHVtbildKTtcbiAgICByZXR1cm4gY2VsbFZhbHVlO1xufVxuZnVuY3Rpb24gdG9CdWZmZXIod2JvdXQpIHtcbiAgICBsZXQgYnVmID0gbmV3IEFycmF5QnVmZmVyKHdib3V0Lmxlbmd0aCk7XG4gICAgbGV0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggIT09IHdib3V0Lmxlbmd0aDsgKytpbmRleClcbiAgICAgICAgdmlld1tpbmRleF0gPSB3Ym91dC5jaGFyQ29kZUF0KGluZGV4KSAmIDB4RkY7XG4gICAgcmV0dXJuIGJ1Zjtcbn1cbmZ1bmN0aW9uIGV4cG9ydFhMU1gocGFyYW1zKSB7XG4gICAgY29uc3QgeyAkdGFibGUsIG9wdGlvbnMsIGNvbHVtbnMsIGRhdGFzIH0gPSBwYXJhbXM7XG4gICAgY29uc3QgeyBzaGVldE5hbWUsIHR5cGUsIGlzSGVhZGVyLCBpc0Zvb3Rlciwgb3JpZ2luYWwsIG1lc3NhZ2UsIGZvb3RlckZpbHRlck1ldGhvZCB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBjb2xIZWFkID0ge307XG4gICAgY29uc3QgZm9vdExpc3QgPSBbXTtcbiAgICAvLyBjb25zdCByb3dMaXN0ID0gZGF0YXNcbiAgICBpZiAoaXNIZWFkZXIpIHtcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgIGNvbEhlYWRbY29sdW1uLmlkXSA9IFhFVXRpbHMudG9TdHJpbmcob3JpZ2luYWwgPyBjb2x1bW4ucHJvcGVydHkgOiBjb2x1bW4uZ2V0VGl0bGUoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyDmlrDlop7pg6jliIZcbiAgICBjb25zdCByb3dMaXN0ID0gZGF0YXMubWFwKGl0ZW0gPT4ge1xuICAgICAgICBjb25zdCByZXN0ID0ge307XG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgICAgICByZXN0W2NvbHVtbi5pZF0gPSBnZXRDZWxsTGFiZWwoY29sdW1uLCBpdGVtW2NvbHVtbi5pZF0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3Q7XG4gICAgfSk7XG4gICAgaWYgKGlzRm9vdGVyKSB7XG4gICAgICAgIGNvbnN0IHsgZm9vdGVyRGF0YSB9ID0gJHRhYmxlLmdldFRhYmxlRGF0YSgpO1xuICAgICAgICBjb25zdCBmb290ZXJzID0gZm9vdGVyRmlsdGVyTWV0aG9kID8gZm9vdGVyRGF0YS5maWx0ZXIoZm9vdGVyRmlsdGVyTWV0aG9kKSA6IGZvb3RlckRhdGE7XG4gICAgICAgIGZvb3RlcnMuZm9yRWFjaCgocm93cykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHt9O1xuICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcbiAgICAgICAgICAgICAgICBpdGVtW2NvbHVtbi5pZF0gPSBnZXRGb290ZXJDZWxsVmFsdWUoJHRhYmxlLCBvcHRpb25zLCByb3dzLCBjb2x1bW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmb290TGlzdC5wdXNoKGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgYm9vayA9IFhMU1gudXRpbHMuYm9va19uZXcoKTtcbiAgICBjb25zdCBzaGVldCA9IFhMU1gudXRpbHMuanNvbl90b19zaGVldCgoaXNIZWFkZXIgPyBbY29sSGVhZF0gOiBbXSkuY29uY2F0KHJvd0xpc3QpLmNvbmNhdChmb290TGlzdCksIHsgc2tpcEhlYWRlcjogdHJ1ZSB9KTtcbiAgICAvLyDovazmjaLmlbDmja5cbiAgICBYTFNYLnV0aWxzLmJvb2tfYXBwZW5kX3NoZWV0KGJvb2ssIHNoZWV0LCBzaGVldE5hbWUpO1xuICAgIGNvbnN0IHdib3V0ID0gWExTWC53cml0ZShib29rLCB7IGJvb2tUeXBlOiB0eXBlLCBib29rU1NUOiBmYWxzZSwgdHlwZTogJ2JpbmFyeScgfSk7XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt0b0J1ZmZlcih3Ym91dCldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIH0pO1xuICAgIC8vIOS/neWtmOWvvOWHulxuICAgIGRvd25sb2FkRmlsZShibG9iLCBvcHRpb25zKTtcbiAgICBpZiAobWVzc2FnZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgX3Z4ZXRhYmxlLm1vZGFsLm1lc3NhZ2UoeyBtZXNzYWdlOiBfdnhldGFibGUudCgndnhlLnRhYmxlLmV4cFN1Y2Nlc3MnKSwgc3RhdHVzOiAnc3VjY2VzcycgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gZG93bmxvYWRGaWxlKGJsb2IsIG9wdGlvbnMpIHtcbiAgICBpZiAod2luZG93LkJsb2IpIHtcbiAgICAgICAgY29uc3QgeyBmaWxlbmFtZSwgdHlwZSB9ID0gb3B0aW9ucztcbiAgICAgICAgaWYgKG5hdmlnYXRvci5tc1NhdmVCbG9iKSB7XG4gICAgICAgICAgICBuYXZpZ2F0b3IubXNTYXZlQmxvYihibG9iLCBgJHtmaWxlbmFtZX0uJHt0eXBlfWApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxpbmtFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgbGlua0VsZW0udGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICAgICAgICBsaW5rRWxlbS5kb3dubG9hZCA9IGAke2ZpbGVuYW1lfS4ke3R5cGV9YDtcbiAgICAgICAgICAgIGxpbmtFbGVtLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rRWxlbSk7XG4gICAgICAgICAgICBsaW5rRWxlbS5jbGljaygpO1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChsaW5rRWxlbSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoX3Z4ZXRhYmxlLnQoJ3Z4ZS5lcnJvci5ub3RFeHAnKSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcmVwbGFjZURvdWJsZVF1b3RhdGlvbih2YWwpIHtcbiAgICByZXR1cm4gdmFsLnJlcGxhY2UoL15cIi8sICcnKS5yZXBsYWNlKC9cIiQvLCAnJyk7XG59XG5mdW5jdGlvbiBwYXJzZUNzdihjb2x1bW5zLCBjb250ZW50KSB7XG4gICAgY29uc3QgbGlzdCA9IGNvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICAgIGNvbnN0IGZpZWxkcyA9IFtdO1xuICAgIGNvbnN0IHJvd3MgPSBbXTtcbiAgICBpZiAobGlzdC5sZW5ndGgpIHtcbiAgICAgICAgY29uc3Qgckxpc3QgPSBsaXN0LnNsaWNlKDEpO1xuICAgICAgICBsaXN0WzBdLnNwbGl0KCcsJykubWFwKHJlcGxhY2VEb3VibGVRdW90YXRpb24pO1xuICAgICAgICByTGlzdC5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgICAgICBpZiAocikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB7fTtcbiAgICAgICAgICAgICAgICByLnNwbGl0KCcsJykuZm9yRWFjaCgodmFsLCBjb2xJbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2NvbEluZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVtmaWVsZHNbY29sSW5kZXhdXSA9IHJlcGxhY2VEb3VibGVRdW90YXRpb24odmFsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJvd3MucHVzaChpdGVtKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB7IGZpZWxkcywgcm93cyB9O1xufVxuZnVuY3Rpb24gY2hlY2tJbXBvcnREYXRhKGNvbHVtbnMsIGZpZWxkcywgcm93cykge1xuICAgIGxldCB0YWJsZUZpZWxkcyA9IFtdO1xuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XG4gICAgICAgIGxldCBmaWVsZCA9IGNvbHVtbi5wcm9wZXJ0eTtcbiAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICB0YWJsZUZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0YWJsZUZpZWxkcy5ldmVyeSgoZmllbGQpID0+IGZpZWxkcy5pbmNsdWRlcyhmaWVsZCkpO1xufVxuZnVuY3Rpb24gaW1wb3J0WExTWChwYXJhbXMpIHtcbiAgICBjb25zdCB7IGNvbHVtbnMsIG9wdGlvbnMsIGZpbGUgfSA9IHBhcmFtcztcbiAgICBjb25zdCAkdGFibGUgPSBwYXJhbXMuJHRhYmxlO1xuICAgIGNvbnN0IHsgX2ltcG9ydFJlc29sdmUgfSA9ICR0YWJsZTtcbiAgICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTtcbiAgICBmaWxlUmVhZGVyLm9ubG9hZCA9IChlKSA9PiB7XG4gICAgICAgIGNvbnN0IHdvcmtib29rID0gWExTWC5yZWFkKGUudGFyZ2V0LnJlc3VsdCwgeyB0eXBlOiAnYmluYXJ5JyB9KTtcbiAgICAgICAgY29uc3QgY3N2RGF0YSA9IFhMU1gudXRpbHMuc2hlZXRfdG9fY3N2KHdvcmtib29rLlNoZWV0cy5TaGVldDEpO1xuICAgICAgICBjb25zdCB7IGZpZWxkcywgcm93cyB9ID0gcGFyc2VDc3YoY29sdW1ucywgY3N2RGF0YSk7XG4gICAgICAgIGNvbnN0IHN0YXR1cyA9IGNoZWNrSW1wb3J0RGF0YShjb2x1bW5zLCBmaWVsZHMsIHJvd3MpO1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAkdGFibGUuY3JlYXRlRGF0YShyb3dzKVxuICAgICAgICAgICAgICAgIC50aGVuKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kZSA9PT0gJ2FwcGVuZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgJHRhYmxlLmluc2VydEF0KGRhdGEsIC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICR0YWJsZS5yZWxvYWREYXRhKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubWVzc2FnZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBfdnhldGFibGUubW9kYWwubWVzc2FnZSh7IG1lc3NhZ2U6IFhFVXRpbHMudGVtcGxhdGUoX3Z4ZXRhYmxlLnQoJ3Z4ZS50YWJsZS5pbXBTdWNjZXNzJyksIFtyb3dzLmxlbmd0aF0pLCBzdGF0dXM6ICdzdWNjZXNzJyB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChvcHRpb25zLm1lc3NhZ2UgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBfdnhldGFibGUubW9kYWwubWVzc2FnZSh7IG1lc3NhZ2U6IF92eGV0YWJsZS50KCd2eGUuZXJyb3IuaW1wRmllbGRzJyksIHN0YXR1czogJ2Vycm9yJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoX2ltcG9ydFJlc29sdmUpIHtcbiAgICAgICAgICAgIF9pbXBvcnRSZXNvbHZlKHN0YXR1cyk7XG4gICAgICAgICAgICAkdGFibGUuX2ltcG9ydFJlc29sdmUgPSBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBmaWxlUmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyhmaWxlKTtcbn1cbmZ1bmN0aW9uIGhhbmRsZUltcG9ydEV2ZW50KHBhcmFtcykge1xuICAgIGlmIChwYXJhbXMub3B0aW9ucy50eXBlID09PSAneGxzeCcpIHtcbiAgICAgICAgaW1wb3J0WExTWChwYXJhbXMpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gaGFuZGxlRXhwb3J0RXZlbnQocGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcy5vcHRpb25zLnR5cGUgPT09ICd4bHN4Jykge1xuICAgICAgICBleHBvcnRYTFNYKHBhcmFtcyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4vKipcbiAqIOWfuuS6jiB2eGUtdGFibGUg6KGo5qC855qE5aKe5by65o+S5Lu277yM5pSv5oyB5a+85Ye6IHhsc3gg5qC85byPXG4gKi9cbmV4cG9ydCBjb25zdCBWWEVUYWJsZVBsdWdpbkV4cG9ydFhMU1ggPSB7XG4gICAgaW5zdGFsbCh4dGFibGUpIHtcbiAgICAgICAgY29uc3QgeyBpbnRlcmNlcHRvciB9ID0geHRhYmxlO1xuICAgICAgICBfdnhldGFibGUgPSB4dGFibGU7XG4gICAgICAgIE9iamVjdC5hc3NpZ24oeHRhYmxlLnR5cGVzLCB7IHhsc3g6IDEgfSk7XG4gICAgICAgIGludGVyY2VwdG9yLm1peGluKHtcbiAgICAgICAgICAgICdldmVudC5pbXBvcnQnOiBoYW5kbGVJbXBvcnRFdmVudCxcbiAgICAgICAgICAgICdldmVudC5leHBvcnQnOiBoYW5kbGVFeHBvcnRFdmVudFxuICAgICAgICB9KTtcbiAgICB9XG59O1xuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5WWEVUYWJsZSkge1xuICAgIHdpbmRvdy5WWEVUYWJsZS51c2UoVlhFVGFibGVQbHVnaW5FeHBvcnRYTFNYKTtcbn1cbmV4cG9ydCBkZWZhdWx0IFZYRVRhYmxlUGx1Z2luRXhwb3J0WExTWDtcbiJdfQ==
|
236
|
+
exports["default"] = exports.VXETablePluginExportXLSX;
|
237
|
+
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LmpzIiwiaW5kZXgudHMiXSwibmFtZXMiOlsiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJleHBvcnRzIiwidmFsdWUiLCJ4ZV91dGlsc18xIiwicmVxdWlyZSIsInhsc3hfMSIsIl92eGV0YWJsZSIsImdldENlbGxMYWJlbCIsImNvbHVtbiIsImNlbGxWYWx1ZSIsImNlbGxUeXBlIiwidG9WYWx1ZVN0cmluZyIsImlzTmFOIiwiTnVtYmVyIiwibGVuZ3RoIiwiZ2V0Rm9vdGVyQ2VsbFZhbHVlIiwiJHRhYmxlIiwib3B0cyIsInJvd3MiLCJ0b1N0cmluZyIsIiRnZXRDb2x1bW5JbmRleCIsInRvQnVmZmVyIiwid2JvdXQiLCJidWYiLCJBcnJheUJ1ZmZlciIsInZpZXciLCJVaW50OEFycmF5IiwiaW5kZXgiLCJjaGFyQ29kZUF0IiwiZXhwb3J0WExTWCIsInBhcmFtcyIsIm9wdGlvbnMiLCJjb2x1bW5zIiwiZGF0YXMiLCJzaGVldE5hbWUiLCJ0eXBlIiwiaXNIZWFkZXIiLCJpc0Zvb3RlciIsIm9yaWdpbmFsIiwibWVzc2FnZSIsImZvb3RlckZpbHRlck1ldGhvZCIsImNvbEhlYWQiLCJmb290TGlzdCIsImZvckVhY2giLCJpZCIsInByb3BlcnR5IiwiZ2V0VGl0bGUiLCJyb3dMaXN0IiwibWFwIiwiaXRlbSIsInJlc3QiLCJmb290ZXJEYXRhIiwiZ2V0VGFibGVEYXRhIiwiZm9vdGVycyIsImZpbHRlciIsInB1c2giLCJib29rIiwidXRpbHMiLCJib29rX25ldyIsInNoZWV0IiwianNvbl90b19zaGVldCIsImNvbmNhdCIsInNraXBIZWFkZXIiLCJib29rX2FwcGVuZF9zaGVldCIsIndyaXRlIiwiYm9va1R5cGUiLCJib29rU1NUIiwiYmxvYiIsIkJsb2IiLCJkb3dubG9hZEZpbGUiLCJtb2RhbCIsInQiLCJzdGF0dXMiLCJ3aW5kb3ciLCJmaWxlbmFtZSIsIm5hdmlnYXRvciIsIm1zU2F2ZUJsb2IiLCJsaW5rRWxlbSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInRhcmdldCIsImRvd25sb2FkIiwiaHJlZiIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsImJvZHkiLCJhcHBlbmRDaGlsZCIsImNsaWNrIiwicmVtb3ZlQ2hpbGQiLCJjb25zb2xlIiwiZXJyb3IiLCJyZXBsYWNlRG91YmxlUXVvdGF0aW9uIiwidmFsIiwicmVwbGFjZSIsInBhcnNlQ3N2IiwiY29udGVudCIsImxpc3QiLCJzcGxpdCIsImZpZWxkcyIsInJMaXN0Iiwic2xpY2UiLCJyIiwiaXRlbV8xIiwiY29sSW5kZXgiLCJjaGVja0ltcG9ydERhdGEiLCJ0YWJsZUZpZWxkcyIsImZpZWxkIiwiZXZlcnkiLCJpbmNsdWRlcyIsImltcG9ydFhMU1giLCJmaWxlIiwiX2ltcG9ydFJlc29sdmUiLCJmaWxlUmVhZGVyIiwiRmlsZVJlYWRlciIsIm9ubG9hZCIsImUiLCJ3b3JrYm9vayIsInJlYWQiLCJyZXN1bHQiLCJjc3ZEYXRhIiwic2hlZXRfdG9fY3N2IiwiU2hlZXRzIiwiU2hlZXQxIiwiX2EiLCJjcmVhdGVEYXRhIiwidGhlbiIsImRhdGEiLCJtb2RlIiwiaW5zZXJ0QXQiLCJyZWxvYWREYXRhIiwidGVtcGxhdGUiLCJyZWFkQXNCaW5hcnlTdHJpbmciLCJoYW5kbGVJbXBvcnRFdmVudCIsImhhbmRsZUV4cG9ydEV2ZW50IiwiVlhFVGFibGVQbHVnaW5FeHBvcnRYTFNYIiwiaW5zdGFsbCIsInh0YWJsZSIsImludGVyY2VwdG9yIiwiYXNzaWduIiwidHlwZXMiLCJ4bHN4IiwibWl4aW4iLCJWWEVUYWJsZSIsInVzZSJdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTs7QUFDWkEsTUFBTSxDQUFDQyxjQUFjLENBQUNDLE9BQU8sRUFBRSxZQUFZLEVBQUU7RUFBRUMsS0FBSyxFQUFFO0FBQUssQ0FBQyxDQUFDO0FDRDdEO0FBQ0EsSUFBQUMsVUFBQSxHQUFBQyxPQUFBLENBQUEsMkJBQUEsQ0FBQTtBQVNBLElBQUFDLE1BQUEsR0FBQUQsT0FBQSxDQUFBLE1BQUEsQ0FBQTtBQUNB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Q3RCLElBQUFDLFdBQUEsR0FBQUQsTUFBQSxDQUFBQyxXQUFXO0lBQ25CbkksU0FBUyxHQUFHa0ksTUFBTTtJQUNsQnpJLE1BQU0sQ0FBQzJJLE1BQU0sQ0FBQ0YsTUFBTSxDQUFDRyxLQUFLLEVBQUU7TUFBRUMsSUFBSSxFQUFFO0lBQUMsQ0FBRSxDQUFDO0lBQ3hDSCxXQUFXLENBQUNJLEtBQUssQ0FBQztNQUNoQixjQUFjLEVBQUVULGlCQUFpQjtNQUNqQyxjQUFjLEVBQUVDO0lEbkJkLENDb0JILENBQUM7RUFDSjtBRG5CRixDQ29CQztBQUVELElBQUksT0FBTzVELE1BQU0sS0FBSyxXQUFXLElBQUlBLE1BQU0sQ0FBQ3FFLFFBQVEsRUFBRTtFQUNwRHJFLE1BQU0sQ0FBQ3FFLFFBQVEsQ0FBQ0MsR0FBRyxDQUFDOUksT0FBQSxDQUFBcUksd0JBQXdCLENBQUM7QURwQi9DO0FDdUJBckksT0FBQSxXQUFBLEdBQWVBLE9BQUEsQ0FBQXFJLHdCQUF3QiIsImZpbGUiOiJpbmRleC5jb21tb24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgeGVfdXRpbHNfMSA9IHJlcXVpcmUoXCJ4ZS11dGlscy9tZXRob2RzL3hlLXV0aWxzXCIpO1xudmFyIHhsc3hfMSA9IHJlcXVpcmUoXCJ4bHN4XCIpO1xuLyogZXNsaW50LWVuYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIF92eGV0YWJsZTtcbmZ1bmN0aW9uIGdldENlbGxMYWJlbChjb2x1bW4sIGNlbGxWYWx1ZSkge1xuICAgIGlmIChjZWxsVmFsdWUpIHtcbiAgICAgICAgc3dpdGNoIChjb2x1bW4uY2VsbFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHhlX3V0aWxzXzEuZGVmYXVsdC50b1ZhbHVlU3RyaW5nKGNlbGxWYWx1ZSk7XG4gICAgICAgICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICAgICAgICAgIGlmICghaXNOYU4oY2VsbFZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gTnVtYmVyKGNlbGxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBpZiAoY2VsbFZhbHVlLmxlbmd0aCA8IDEyICYmICFpc05hTihjZWxsVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBOdW1iZXIoY2VsbFZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGNlbGxWYWx1ZTtcbn1cbmZ1bmN0aW9uIGdldEZvb3RlckNlbGxWYWx1ZSgkdGFibGUsIG9wdHMsIHJvd3MsIGNvbHVtbikge1xuICAgIHZhciBjZWxsVmFsdWUgPSB4ZV91dGlsc18xLmRlZmF1bHQudG9TdHJpbmcocm93c1skdGFibGUuJGdldENvbHVtbkluZGV4KGNvbHVtbildKTtcbiAgICByZXR1cm4gY2VsbFZhbHVlO1xufVxuZnVuY3Rpb24gdG9CdWZmZXIod2JvdXQpIHtcbiAgICB2YXIgYnVmID0gbmV3IEFycmF5QnVmZmVyKHdib3V0Lmxlbmd0aCk7XG4gICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpO1xuICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggIT09IHdib3V0Lmxlbmd0aDsgKytpbmRleClcbiAgICAgICAgdmlld1tpbmRleF0gPSB3Ym91dC5jaGFyQ29kZUF0KGluZGV4KSAmIDB4RkY7XG4gICAgcmV0dXJuIGJ1Zjtcbn1cbmZ1bmN0aW9uIGV4cG9ydFhMU1gocGFyYW1zKSB7XG4gICAgdmFyICR0YWJsZSA9IHBhcmFtcy4kdGFibGUsIG9wdGlvbnMgPSBwYXJhbXMub3B0aW9ucywgY29sdW1ucyA9IHBhcmFtcy5jb2x1bW5zLCBkYXRhcyA9IHBhcmFtcy5kYXRhcztcbiAgICB2YXIgc2hlZXROYW1lID0gb3B0aW9ucy5zaGVldE5hbWUsIHR5cGUgPSBvcHRpb25zLnR5cGUsIGlzSGVhZGVyID0gb3B0aW9ucy5pc0hlYWRlciwgaXNGb290ZXIgPSBvcHRpb25zLmlzRm9vdGVyLCBvcmlnaW5hbCA9IG9wdGlvbnMub3JpZ2luYWwsIG1lc3NhZ2UgPSBvcHRpb25zLm1lc3NhZ2UsIGZvb3RlckZpbHRlck1ldGhvZCA9IG9wdGlvbnMuZm9vdGVyRmlsdGVyTWV0aG9kO1xuICAgIHZhciBjb2xIZWFkID0ge307XG4gICAgdmFyIGZvb3RMaXN0ID0gW107XG4gICAgLy8gY29uc3Qgcm93TGlzdCA9IGRhdGFzXG4gICAgaWYgKGlzSGVhZGVyKSB7XG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgICAgICBjb2xIZWFkW2NvbHVtbi5pZF0gPSB4ZV91dGlsc18xLmRlZmF1bHQudG9TdHJpbmcob3JpZ2luYWwgPyBjb2x1bW4ucHJvcGVydHkgOiBjb2x1bW4uZ2V0VGl0bGUoKSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyDmlrDlop7pg6jliIZcbiAgICB2YXIgcm93TGlzdCA9IGRhdGFzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICB2YXIgcmVzdCA9IHt9O1xuICAgICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICAgICAgcmVzdFtjb2x1bW4uaWRdID0gZ2V0Q2VsbExhYmVsKGNvbHVtbiwgaXRlbVtjb2x1bW4uaWRdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByZXN0O1xuICAgIH0pO1xuICAgIGlmIChpc0Zvb3Rlcikge1xuICAgICAgICB2YXIgZm9vdGVyRGF0YSA9ICR0YWJsZS5nZXRUYWJsZURhdGEoKS5mb290ZXJEYXRhO1xuICAgICAgICB2YXIgZm9vdGVycyA9IGZvb3RlckZpbHRlck1ldGhvZCA/IGZvb3RlckRhdGEuZmlsdGVyKGZvb3RlckZpbHRlck1ldGhvZCkgOiBmb290ZXJEYXRhO1xuICAgICAgICBmb290ZXJzLmZvckVhY2goZnVuY3Rpb24gKHJvd3MpIHtcbiAgICAgICAgICAgIHZhciBpdGVtID0ge307XG4gICAgICAgICAgICBjb2x1bW5zLmZvckVhY2goZnVuY3Rpb24gKGNvbHVtbikge1xuICAgICAgICAgICAgICAgIGl0ZW1bY29sdW1uLmlkXSA9IGdldEZvb3RlckNlbGxWYWx1ZSgkdGFibGUsIG9wdGlvbnMsIHJvd3MsIGNvbHVtbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGZvb3RMaXN0LnB1c2goaXRlbSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB2YXIgYm9vayA9IHhsc3hfMS5kZWZhdWx0LnV0aWxzLmJvb2tfbmV3KCk7XG4gICAgdmFyIHNoZWV0ID0geGxzeF8xLmRlZmF1bHQudXRpbHMuanNvbl90b19zaGVldCgoaXNIZWFkZXIgPyBbY29sSGVhZF0gOiBbXSkuY29uY2F0KHJvd0xpc3QpLmNvbmNhdChmb290TGlzdCksIHsgc2tpcEhlYWRlcjogdHJ1ZSB9KTtcbiAgICAvLyDovazmjaLmlbDmja5cbiAgICB4bHN4XzEuZGVmYXVsdC51dGlscy5ib29rX2FwcGVuZF9zaGVldChib29rLCBzaGVldCwgc2hlZXROYW1lKTtcbiAgICB2YXIgd2JvdXQgPSB4bHN4XzEuZGVmYXVsdC53cml0ZShib29rLCB7IGJvb2tUeXBlOiB0eXBlLCBib29rU1NUOiBmYWxzZSwgdHlwZTogJ2JpbmFyeScgfSk7XG4gICAgdmFyIGJsb2IgPSBuZXcgQmxvYihbdG9CdWZmZXIod2JvdXQpXSwgeyB0eXBlOiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyB9KTtcbiAgICAvLyDkv53lrZjlr7zlh7pcbiAgICBkb3dubG9hZEZpbGUoYmxvYiwgb3B0aW9ucyk7XG4gICAgaWYgKG1lc3NhZ2UgIT09IGZhbHNlKSB7XG4gICAgICAgIF92eGV0YWJsZS5tb2RhbC5tZXNzYWdlKHsgbWVzc2FnZTogX3Z4ZXRhYmxlLnQoJ3Z4ZS50YWJsZS5leHBTdWNjZXNzJyksIHN0YXR1czogJ3N1Y2Nlc3MnIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRvd25sb2FkRmlsZShibG9iLCBvcHRpb25zKSB7XG4gICAgaWYgKHdpbmRvdy5CbG9iKSB7XG4gICAgICAgIHZhciBmaWxlbmFtZSA9IG9wdGlvbnMuZmlsZW5hbWUsIHR5cGUgPSBvcHRpb25zLnR5cGU7XG4gICAgICAgIGlmIChuYXZpZ2F0b3IubXNTYXZlQmxvYikge1xuICAgICAgICAgICAgbmF2aWdhdG9yLm1zU2F2ZUJsb2IoYmxvYiwgZmlsZW5hbWUgKyBcIi5cIiArIHR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGxpbmtFbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgICAgbGlua0VsZW0udGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICAgICAgICBsaW5rRWxlbS5kb3dubG9hZCA9IGZpbGVuYW1lICsgXCIuXCIgKyB0eXBlO1xuICAgICAgICAgICAgbGlua0VsZW0uaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmtFbGVtKTtcbiAgICAgICAgICAgIGxpbmtFbGVtLmNsaWNrKCk7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmtFbGVtKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihfdnhldGFibGUudCgndnhlLmVycm9yLm5vdEV4cCcpKTtcbiAgICB9XG59XG5mdW5jdGlvbiByZXBsYWNlRG91YmxlUXVvdGF0aW9uKHZhbCkge1xuICAgIHJldHVybiB2YWwucmVwbGFjZSgvXlwiLywgJycpLnJlcGxhY2UoL1wiJC8sICcnKTtcbn1cbmZ1bmN0aW9uIHBhcnNlQ3N2KGNvbHVtbnMsIGNvbnRlbnQpIHtcbiAgICB2YXIgbGlzdCA9IGNvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICAgIHZhciBmaWVsZHMgPSBbXTtcbiAgICB2YXIgcm93cyA9IFtdO1xuICAgIGlmIChsaXN0Lmxlbmd0aCkge1xuICAgICAgICB2YXIgckxpc3QgPSBsaXN0LnNsaWNlKDEpO1xuICAgICAgICBsaXN0WzBdLnNwbGl0KCcsJykubWFwKHJlcGxhY2VEb3VibGVRdW90YXRpb24pO1xuICAgICAgICByTGlzdC5mb3JFYWNoKGZ1bmN0aW9uIChyKSB7XG4gICAgICAgICAgICBpZiAocikge1xuICAgICAgICAgICAgICAgIHZhciBpdGVtXzEgPSB7fTtcbiAgICAgICAgICAgICAgICByLnNwbGl0KCcsJykuZm9yRWFjaChmdW5jdGlvbiAodmFsLCBjb2xJbmRleCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmllbGRzW2NvbEluZGV4XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbV8xW2ZpZWxkc1tjb2xJbmRleF1dID0gcmVwbGFjZURvdWJsZVF1b3RhdGlvbih2YWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcm93cy5wdXNoKGl0ZW1fMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4geyBmaWVsZHM6IGZpZWxkcywgcm93czogcm93cyB9O1xufVxuZnVuY3Rpb24gY2hlY2tJbXBvcnREYXRhKGNvbHVtbnMsIGZpZWxkcywgcm93cykge1xuICAgIHZhciB0YWJsZUZpZWxkcyA9IFtdO1xuICAgIGNvbHVtbnMuZm9yRWFjaChmdW5jdGlvbiAoY29sdW1uKSB7XG4gICAgICAgIHZhciBmaWVsZCA9IGNvbHVtbi5wcm9wZXJ0eTtcbiAgICAgICAgaWYgKGZpZWxkKSB7XG4gICAgICAgICAgICB0YWJsZUZpZWxkcy5wdXNoKGZpZWxkKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0YWJsZUZpZWxkcy5ldmVyeShmdW5jdGlvbiAoZmllbGQpIHsgcmV0dXJuIGZpZWxkcy5pbmNsdWRlcyhmaWVsZCk7IH0pO1xufVxuZnVuY3Rpb24gaW1wb3J0WExTWChwYXJhbXMpIHtcbiAgICB2YXIgY29sdW1ucyA9IHBhcmFtcy5jb2x1bW5zLCBvcHRpb25zID0gcGFyYW1zLm9wdGlvbnMsIGZpbGUgPSBwYXJhbXMuZmlsZTtcbiAgICB2YXIgJHRhYmxlID0gcGFyYW1zLiR0YWJsZTtcbiAgICB2YXIgX2ltcG9ydFJlc29sdmUgPSAkdGFibGUuX2ltcG9ydFJlc29sdmU7XG4gICAgdmFyIGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpO1xuICAgIGZpbGVSZWFkZXIub25sb2FkID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgdmFyIHdvcmtib29rID0geGxzeF8xLmRlZmF1bHQucmVhZChlLnRhcmdldC5yZXN1bHQsIHsgdHlwZTogJ2JpbmFyeScgfSk7XG4gICAgICAgIHZhciBjc3ZEYXRhID0geGxzeF8xLmRlZmF1bHQudXRpbHMuc2hlZXRfdG9fY3N2KHdvcmtib29rLlNoZWV0cy5TaGVldDEpO1xuICAgICAgICB2YXIgX2EgPSBwYXJzZUNzdihjb2x1bW5zLCBjc3ZEYXRhKSwgZmllbGRzID0gX2EuZmllbGRzLCByb3dzID0gX2Eucm93cztcbiAgICAgICAgdmFyIHN0YXR1cyA9IGNoZWNrSW1wb3J0RGF0YShjb2x1bW5zLCBmaWVsZHMsIHJvd3MpO1xuICAgICAgICBpZiAoc3RhdHVzKSB7XG4gICAgICAgICAgICAkdGFibGUuY3JlYXRlRGF0YShyb3dzKVxuICAgICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMubW9kZSA9PT0gJ2FwcGVuZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgJHRhYmxlLmluc2VydEF0KGRhdGEsIC0xKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICR0YWJsZS5yZWxvYWREYXRhKGRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubWVzc2FnZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBfdnhldGFibGUubW9kYWwubWVzc2FnZSh7IG1lc3NhZ2U6IHhlX3V0aWxzXzEuZGVmYXVsdC50ZW1wbGF0ZShfdnhldGFibGUudCgndnhlLnRhYmxlLmltcFN1Y2Nlc3MnKSwgW3Jvd3MubGVuZ3RoXSksIHN0YXR1czogJ3N1Y2Nlc3MnIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG9wdGlvbnMubWVzc2FnZSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIF92eGV0YWJsZS5tb2RhbC5tZXNzYWdlKHsgbWVzc2FnZTogX3Z4ZXRhYmxlLnQoJ3Z4ZS5lcnJvci5pbXBGaWVsZHMnKSwgc3RhdHVzOiAnZXJyb3InIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChfaW1wb3J0UmVzb2x2ZSkge1xuICAgICAgICAgICAgX2ltcG9ydFJlc29sdmUoc3RhdHVzKTtcbiAgICAgICAgICAgICR0YWJsZS5faW1wb3J0UmVzb2x2ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGZpbGVSZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGZpbGUpO1xufVxuZnVuY3Rpb24gaGFuZGxlSW1wb3J0RXZlbnQocGFyYW1zKSB7XG4gICAgaWYgKHBhcmFtcy5vcHRpb25zLnR5cGUgPT09ICd4bHN4Jykge1xuICAgICAgICBpbXBvcnRYTFNYKHBhcmFtcyk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5mdW5jdGlvbiBoYW5kbGVFeHBvcnRFdmVudChwYXJhbXMpIHtcbiAgICBpZiAocGFyYW1zLm9wdGlvbnMudHlwZSA9PT0gJ3hsc3gnKSB7XG4gICAgICAgIGV4cG9ydFhMU1gocGFyYW1zKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbi8qKlxuICog5Z+65LqOIHZ4ZS10YWJsZSDooajmoLznmoTlop7lvLrmj5Lku7bvvIzmlK/mjIHlr7zlh7ogeGxzeCDmoLzlvI9cbiAqL1xuZXhwb3J0cy5WWEVUYWJsZVBsdWdpbkV4cG9ydFhMU1ggPSB7XG4gICAgaW5zdGFsbDogZnVuY3Rpb24gKHh0YWJsZSkge1xuICAgICAgICB2YXIgaW50ZXJjZXB0b3IgPSB4dGFibGUuaW50ZXJjZXB0b3I7XG4gICAgICAgIF92eGV0YWJsZSA9IHh0YWJsZTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbih4dGFibGUudHlwZXMsIHsgeGxzeDogMSB9KTtcbiAgICAgICAgaW50ZXJjZXB0b3IubWl4aW4oe1xuICAgICAgICAgICAgJ2V2ZW50LmltcG9ydCc6IGhhbmRsZUltcG9ydEV2ZW50LFxuICAgICAgICAgICAgJ2V2ZW50LmV4cG9ydCc6IGhhbmRsZUV4cG9ydEV2ZW50XG4gICAgICAgIH0pO1xuICAgIH1cbn07XG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlZYRVRhYmxlKSB7XG4gICAgd2luZG93LlZYRVRhYmxlLnVzZShleHBvcnRzLlZYRVRhYmxlUGx1Z2luRXhwb3J0WExTWCk7XG59XG5leHBvcnRzLmRlZmF1bHQgPSBleHBvcnRzLlZYRVRhYmxlUGx1Z2luRXhwb3J0WExTWDtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXHJcbmltcG9ydCBYRVV0aWxzIGZyb20gJ3hlLXV0aWxzL21ldGhvZHMveGUtdXRpbHMnXHJcbmltcG9ydCB7XHJcbiAgVlhFVGFibGUsXHJcbiAgVGFibGUsXHJcbiAgSW50ZXJjZXB0b3JFeHBvcnRQYXJhbXMsXHJcbiAgSW50ZXJjZXB0b3JJbXBvcnRQYXJhbXMsXHJcbiAgQ29sdW1uQ29uZmlnLFxyXG4gIEV4cG9ydE9wdG9uc1xyXG59IGZyb20gJ3Z4ZS10YWJsZS9saWIvdnhlLXRhYmxlJ1xyXG5pbXBvcnQgWExTWCBmcm9tICd4bHN4J1xyXG4vKiBlc2xpbnQtZW5hYmxlIG5vLXVudXNlZC12YXJzICovXHJcblxyXG5sZXQgX3Z4ZXRhYmxlOiB0eXBlb2YgVlhFVGFibGVcclxuXHJcblxyXG5mdW5jdGlvbiBnZXRDZWxsTGFiZWwgKGNvbHVtbjogQ29sdW1uQ29uZmlnLCBjZWxsVmFsdWU6IGFueSkge1xyXG4gIGlmIChjZWxsVmFsdWUpIHtcclxuICAgIHN3aXRjaCAoY29sdW1uLmNlbGxUeXBlKSB7XHJcbiAgICAgIGNhc2UgJ3N0cmluZyc6XHJcbiAgICAgICAgcmV0dXJuIFhFVXRpbHMudG9WYWx1ZVN0cmluZyhjZWxsVmFsdWUpXHJcbiAgICAgIGNhc2UgJ251bWJlcic6XHJcbiAgICAgICAgaWYgKCFpc05hTihjZWxsVmFsdWUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gTnVtYmVyKGNlbGxWYWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWtcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBpZiAoY2VsbFZhbHVlLmxlbmd0aCA8IDEyICYmICFpc05hTihjZWxsVmFsdWUpKSB7XHJcbiAgICAgICAgICByZXR1cm4gTnVtYmVyKGNlbGxWYWx1ZSlcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWtcclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIGNlbGxWYWx1ZVxyXG59XHJcblxyXG5cclxuXHJcbmZ1bmN0aW9uIGdldEZvb3RlckNlbGxWYWx1ZSAoJHRhYmxlOiBUYWJsZSwgb3B0czogRXhwb3J0T3B0b25zLCByb3dzOiBhbnlbXSwgY29sdW1uOiBDb2x1bW5Db25maWcpIHtcclxuICB2YXIgY2VsbFZhbHVlID0gWEVVdGlscy50b1N0cmluZyhyb3dzWyR0YWJsZS4kZ2V0Q29sdW1uSW5kZXgoY29sdW1uKV0pXHJcbiAgcmV0dXJuIGNlbGxWYWx1ZVxyXG59XHJcblxyXG5mdW5jdGlvbiB0b0J1ZmZlciAod2JvdXQ6IGFueSkge1xyXG4gIGxldCBidWYgPSBuZXcgQXJyYXlCdWZmZXIod2JvdXQubGVuZ3RoKVxyXG4gIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxyXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggIT09IHdib3V0Lmxlbmd0aDsgKytpbmRleCkgdmlld1tpbmRleF0gPSB3Ym91dC5jaGFyQ29kZUF0KGluZGV4KSAmIDB4RkZcclxuICByZXR1cm4gYnVmXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4cG9ydFhMU1ggKHBhcmFtczogSW50ZXJjZXB0b3JFeHBvcnRQYXJhbXMpIHtcclxuICBjb25zdCB7ICR0YWJsZSwgb3B0aW9ucywgY29sdW1ucywgZGF0YXMgfSA9IHBhcmFtc1xyXG4gIGNvbnN0IHsgc2hlZXROYW1lLCB0eXBlLCBpc0hlYWRlciwgaXNGb290ZXIsIG9yaWdpbmFsLCBtZXNzYWdlLCBmb290ZXJGaWx0ZXJNZXRob2QgfSA9IG9wdGlvbnNcclxuICBjb25zdCBjb2xIZWFkOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cclxuICBjb25zdCBmb290TGlzdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdID0gW11cclxuICAvLyBjb25zdCByb3dMaXN0ID0gZGF0YXNcclxuXHJcbiAgaWYgKGlzSGVhZGVyKSB7XHJcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICBjb2xIZWFkW2NvbHVtbi5pZF0gPSBYRVV0aWxzLnRvU3RyaW5nKG9yaWdpbmFsID8gY29sdW1uLnByb3BlcnR5IDogY29sdW1uLmdldFRpdGxlKCkpXHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgLy8g5paw5aKe6YOo5YiGXHJcbiAgY29uc3Qgcm93TGlzdCA9IGRhdGFzLm1hcChpdGVtID0+IHtcclxuICAgIGNvbnN0IHJlc3Q6IGFueSA9IHt9XHJcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgICByZXN0W2NvbHVtbi5pZF0gPSBnZXRDZWxsTGFiZWwoY29sdW1uLCBpdGVtW2NvbHVtbi5pZF0pXHJcbiAgICB9KVxyXG4gICAgcmV0dXJuIHJlc3RcclxuICB9KVxyXG5cclxuICBpZiAoaXNGb290ZXIpIHtcclxuICAgIGNvbnN0IHsgZm9vdGVyRGF0YSB9ID0gJHRhYmxlLmdldFRhYmxlRGF0YSgpXHJcbiAgICBjb25zdCBmb290ZXJzID0gZm9vdGVyRmlsdGVyTWV0aG9kID8gZm9vdGVyRGF0YS5maWx0ZXIoZm9vdGVyRmlsdGVyTWV0aG9kKSA6IGZvb3RlckRhdGFcclxuICAgIGZvb3RlcnMuZm9yRWFjaCgocm93cykgPT4ge1xyXG4gICAgICBjb25zdCBpdGVtOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge31cclxuICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW4pID0+IHtcclxuICAgICAgICBpdGVtW2NvbHVtbi5pZF0gPSBnZXRGb290ZXJDZWxsVmFsdWUoJHRhYmxlLCBvcHRpb25zLCByb3dzLCBjb2x1bW4pXHJcbiAgICAgIH0pXHJcbiAgICAgIGZvb3RMaXN0LnB1c2goaXRlbSlcclxuICAgIH0pXHJcbiAgfVxyXG4gIGNvbnN0IGJvb2sgPSBYTFNYLnV0aWxzLmJvb2tfbmV3KClcclxuICBjb25zdCBzaGVldCA9IFhMU1gudXRpbHMuanNvbl90b19zaGVldCgoaXNIZWFkZXIgPyBbY29sSGVhZF0gOiBbXSkuY29uY2F0KHJvd0xpc3QpLmNvbmNhdChmb290TGlzdCksIHsgc2tpcEhlYWRlcjogdHJ1ZSB9KVxyXG4gIC8vIOi9rOaNouaVsOaNrlxyXG4gIFhMU1gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQoYm9vaywgc2hlZXQsIHNoZWV0TmFtZSlcclxuICBjb25zdCB3Ym91dCA9IFhMU1gud3JpdGUoYm9vaywgeyBib29rVHlwZTogdHlwZSwgYm9va1NTVDogZmFsc2UsIHR5cGU6ICdiaW5hcnknIH0pXHJcbiAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt0b0J1ZmZlcih3Ym91dCldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIH0pXHJcbiAgLy8g5L+d5a2Y5a+85Ye6XHJcbiAgZG93bmxvYWRGaWxlKGJsb2IsIG9wdGlvbnMpXHJcbiAgaWYgKG1lc3NhZ2UgIT09IGZhbHNlKSB7XHJcbiAgICBfdnhldGFibGUubW9kYWwubWVzc2FnZSh7IG1lc3NhZ2U6IF92eGV0YWJsZS50KCd2eGUudGFibGUuZXhwU3VjY2VzcycpLCBzdGF0dXM6ICdzdWNjZXNzJyB9KVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gZG93bmxvYWRGaWxlIChibG9iOiBCbG9iLCBvcHRpb25zOiBFeHBvcnRPcHRvbnMpIHtcclxuICBpZiAod2luZG93LkJsb2IpIHtcclxuICAgIGNvbnN0IHsgZmlsZW5hbWUsIHR5cGUgfSA9IG9wdGlvbnNcclxuICAgIGlmIChuYXZpZ2F0b3IubXNTYXZlQmxvYikge1xyXG4gICAgICBuYXZpZ2F0b3IubXNTYXZlQmxvYihibG9iLCBgJHtmaWxlbmFtZX0uJHt0eXBlfWApXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgbGlua0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcclxuICAgICAgbGlua0VsZW0udGFyZ2V0ID0gJ19ibGFuaydcclxuICAgICAgbGlua0VsZW0uZG93bmxvYWQgPSBgJHtmaWxlbmFtZX0uJHt0eXBlfWBcclxuICAgICAgbGlua0VsZW0uaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rRWxlbSlcclxuICAgICAgbGlua0VsZW0uY2xpY2soKVxyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmtFbGVtKVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zb2xlLmVycm9yKF92eGV0YWJsZS50KCd2eGUuZXJyb3Iubm90RXhwJykpXHJcbiAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZXBsYWNlRG91YmxlUXVvdGF0aW9uICh2YWw6IHN0cmluZykge1xyXG4gIHJldHVybiB2YWwucmVwbGFjZSgvXlwiLywgJycpLnJlcGxhY2UoL1wiJC8sICcnKVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNzdiAoY29sdW1uczogQ29sdW1uQ29uZmlnW10sIGNvbnRlbnQ6IHN0cmluZykge1xyXG4gIGNvbnN0IGxpc3QgPSBjb250ZW50LnNwbGl0KCdcXG4nKVxyXG4gIGNvbnN0IGZpZWxkczogc3RyaW5nW10gPSBbXVxyXG4gIGNvbnN0IHJvd3M6IGFueVtdID0gW11cclxuICBpZiAobGlzdC5sZW5ndGgpIHtcclxuICAgIGNvbnN0IHJMaXN0ID0gbGlzdC5zbGljZSgxKVxyXG4gICAgbGlzdFswXS5zcGxpdCgnLCcpLm1hcChyZXBsYWNlRG91YmxlUXVvdGF0aW9uKVxyXG4gICAgckxpc3QuZm9yRWFjaCgocikgPT4ge1xyXG4gICAgICBpZiAocikge1xyXG4gICAgICAgIGNvbnN0IGl0ZW06IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fVxyXG4gICAgICAgIHIuc3BsaXQoJywnKS5mb3JFYWNoKCh2YWwsIGNvbEluZGV4KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZmllbGRzW2NvbEluZGV4XSkge1xyXG4gICAgICAgICAgICBpdGVtW2ZpZWxkc1tjb2xJbmRleF1dID0gcmVwbGFjZURvdWJsZVF1b3RhdGlvbih2YWwpXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICByb3dzLnB1c2goaXRlbSlcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcbiAgcmV0dXJuIHsgZmllbGRzLCByb3dzIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY2hlY2tJbXBvcnREYXRhIChjb2x1bW5zOiBDb2x1bW5Db25maWdbXSwgZmllbGRzOiBzdHJpbmdbXSwgcm93czogYW55W10pIHtcclxuICBsZXQgdGFibGVGaWVsZHM6IHN0cmluZ1tdID0gW11cclxuICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbikgPT4ge1xyXG4gICAgbGV0IGZpZWxkID0gY29sdW1uLnByb3BlcnR5XHJcbiAgICBpZiAoZmllbGQpIHtcclxuICAgICAgdGFibGVGaWVsZHMucHVzaChmaWVsZClcclxuICAgIH1cclxuICB9KVxyXG4gIHJldHVybiB0YWJsZUZpZWxkcy5ldmVyeSgoZmllbGQpID0+IGZpZWxkcy5pbmNsdWRlcyhmaWVsZCkpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGltcG9ydFhMU1ggKHBhcmFtczogSW50ZXJjZXB0b3JJbXBvcnRQYXJhbXMpIHtcclxuICBjb25zdCB7IGNvbHVtbnMsIG9wdGlvbnMsIGZpbGUgfSA9IHBhcmFtc1xyXG4gIGNvbnN0ICR0YWJsZTogYW55ID0gcGFyYW1zLiR0YWJsZVxyXG4gIGNvbnN0IHsgX2ltcG9ydFJlc29sdmUgfSA9ICR0YWJsZVxyXG4gIGNvbnN0IGZpbGVSZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXHJcbiAgZmlsZVJlYWRlci5vbmxvYWQgPSAoZTogYW55KSA9PiB7XHJcbiAgICBjb25zdCB3b3JrYm9vayA9IFhMU1gucmVhZChlLnRhcmdldC5yZXN1bHQsIHsgdHlwZTogJ2JpbmFyeScgfSlcclxuICAgIGNvbnN0IGNzdkRhdGE6IHN0cmluZyA9IFhMU1gudXRpbHMuc2hlZXRfdG9fY3N2KHdvcmtib29rLlNoZWV0cy5TaGVldDEpXHJcbiAgICBjb25zdCB7IGZpZWxkcywgcm93cyB9ID0gcGFyc2VDc3YoY29sdW1ucywgY3N2RGF0YSlcclxuICAgIGNvbnN0IHN0YXR1cyA9IGNoZWNrSW1wb3J0RGF0YShjb2x1bW5zLCBmaWVsZHMsIHJvd3MpXHJcbiAgICBpZiAoc3RhdHVzKSB7XHJcbiAgICAgICR0YWJsZS5jcmVhdGVEYXRhKHJvd3MpXHJcbiAgICAgICAgLnRoZW4oKGRhdGE6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgICBpZiAob3B0aW9ucy5tb2RlID09PSAnYXBwZW5kJykge1xyXG4gICAgICAgICAgICAkdGFibGUuaW5zZXJ0QXQoZGF0YSwgLTEpXHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAkdGFibGUucmVsb2FkRGF0YShkYXRhKVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgIGlmIChvcHRpb25zLm1lc3NhZ2UgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgX3Z4ZXRhYmxlLm1vZGFsLm1lc3NhZ2UoeyBtZXNzYWdlOiBYRVV0aWxzLnRlbXBsYXRlKF92eGV0YWJsZS50KCd2eGUudGFibGUuaW1wU3VjY2VzcycpLCBbcm93cy5sZW5ndGhdKSwgc3RhdHVzOiAnc3VjY2VzcycgfSlcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIGlmIChvcHRpb25zLm1lc3NhZ2UgIT09IGZhbHNlKSB7XHJcbiAgICAgIF92eGV0YWJsZS5tb2RhbC5tZXNzYWdlKHsgbWVzc2FnZTogX3Z4ZXRhYmxlLnQoJ3Z4ZS5lcnJvci5pbXBGaWVsZHMnKSwgc3RhdHVzOiAnZXJyb3InIH0pXHJcbiAgICB9XHJcbiAgICBpZiAoX2ltcG9ydFJlc29sdmUpIHtcclxuICAgICAgX2ltcG9ydFJlc29sdmUoc3RhdHVzKVxyXG4gICAgICAkdGFibGUuX2ltcG9ydFJlc29sdmUgPSBudWxsXHJcbiAgICB9XHJcbiAgfVxyXG4gIGZpbGVSZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nKGZpbGUpXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZUltcG9ydEV2ZW50IChwYXJhbXM6IEludGVyY2VwdG9ySW1wb3J0UGFyYW1zKSB7XHJcbiAgaWYgKHBhcmFtcy5vcHRpb25zLnR5cGUgPT09ICd4bHN4Jykge1xyXG4gICAgaW1wb3J0WExTWChwYXJhbXMpXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZUV4cG9ydEV2ZW50IChwYXJhbXM6IEludGVyY2VwdG9yRXhwb3J0UGFyYW1zKSB7XHJcbiAgaWYgKHBhcmFtcy5vcHRpb25zLnR5cGUgPT09ICd4bHN4Jykge1xyXG4gICAgZXhwb3J0WExTWChwYXJhbXMpXHJcbiAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDln7rkuo4gdnhlLXRhYmxlIOihqOagvOeahOWinuW8uuaPkuS7tu+8jOaUr+aMgeWvvOWHuiB4bHN4IOagvOW8j1xyXG4gKi9cclxuZXhwb3J0IGNvbnN0IFZYRVRhYmxlUGx1Z2luRXhwb3J0WExTWCA9IHtcclxuICBpbnN0YWxsICh4dGFibGU6IHR5cGVvZiBWWEVUYWJsZSkge1xyXG4gICAgY29uc3QgeyBpbnRlcmNlcHRvciB9ID0geHRhYmxlXHJcbiAgICBfdnhldGFibGUgPSB4dGFibGVcclxuICAgIE9iamVjdC5hc3NpZ24oeHRhYmxlLnR5cGVzLCB7IHhsc3g6IDEgfSlcclxuICAgIGludGVyY2VwdG9yLm1peGluKHtcclxuICAgICAgJ2V2ZW50LmltcG9ydCc6IGhhbmRsZUltcG9ydEV2ZW50LFxyXG4gICAgICAnZXZlbnQuZXhwb3J0JzogaGFuZGxlRXhwb3J0RXZlbnRcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlZYRVRhYmxlKSB7XHJcbiAgd2luZG93LlZYRVRhYmxlLnVzZShWWEVUYWJsZVBsdWdpbkV4cG9ydFhMU1gpXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZYRVRhYmxlUGx1Z2luRXhwb3J0WExTWFxyXG4iXX0=
|
package/dist/index.js
CHANGED
@@ -1,34 +1,31 @@
|
|
1
1
|
(function (global, factory) {
|
2
2
|
if (typeof define === "function" && define.amd) {
|
3
|
-
define("vxe-table-plugin-export-xlsx-xhx", [
|
3
|
+
define("vxe-table-plugin-export-xlsx-xhx", [], factory);
|
4
4
|
} else if (typeof exports !== "undefined") {
|
5
|
-
factory(
|
5
|
+
factory();
|
6
6
|
} else {
|
7
7
|
var mod = {
|
8
8
|
exports: {}
|
9
9
|
};
|
10
|
-
factory(
|
10
|
+
factory();
|
11
11
|
global.VXETablePluginExportXLSX = mod.exports.default;
|
12
12
|
}
|
13
|
-
})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function (
|
13
|
+
})(typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : this, function () {
|
14
14
|
"use strict";
|
15
15
|
|
16
|
-
Object.defineProperty(
|
16
|
+
Object.defineProperty(exports, "__esModule", {
|
17
17
|
value: true
|
18
18
|
});
|
19
|
-
_exports["default"] = _exports.VXETablePluginExportXLSX = void 0;
|
20
|
-
_xeUtils = _interopRequireDefault(_xeUtils);
|
21
|
-
_xlsx = _interopRequireDefault(_xlsx);
|
22
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
23
19
|
/* eslint-disable no-unused-vars */
|
24
|
-
|
20
|
+
var xe_utils_1 = require("xe-utils/methods/xe-utils");
|
21
|
+
var xlsx_1 = require("xlsx");
|
25
22
|
/* eslint-enable no-unused-vars */
|
26
23
|
var _vxetable;
|
27
24
|
function getCellLabel(column, cellValue) {
|
28
25
|
if (cellValue) {
|
29
26
|
switch (column.cellType) {
|
30
27
|
case 'string':
|
31
|
-
return
|
28
|
+
return xe_utils_1["default"].toValueString(cellValue);
|
32
29
|
case 'number':
|
33
30
|
if (!isNaN(cellValue)) {
|
34
31
|
return Number(cellValue);
|
@@ -44,7 +41,7 @@
|
|
44
41
|
return cellValue;
|
45
42
|
}
|
46
43
|
function getFooterCellValue($table, opts, rows, column) {
|
47
|
-
var cellValue =
|
44
|
+
var cellValue = xe_utils_1["default"].toString(rows[$table.$getColumnIndex(column)]);
|
48
45
|
return cellValue;
|
49
46
|
}
|
50
47
|
function toBuffer(wbout) {
|
@@ -72,7 +69,7 @@
|
|
72
69
|
// const rowList = datas
|
73
70
|
if (isHeader) {
|
74
71
|
columns.forEach(function (column) {
|
75
|
-
colHead[column.id] =
|
72
|
+
colHead[column.id] = xe_utils_1["default"].toString(original ? column.property : column.getTitle());
|
76
73
|
});
|
77
74
|
}
|
78
75
|
// 新增部分
|
@@ -84,8 +81,7 @@
|
|
84
81
|
return rest;
|
85
82
|
});
|
86
83
|
if (isFooter) {
|
87
|
-
var
|
88
|
-
footerData = _$table$getTableData.footerData;
|
84
|
+
var footerData = $table.getTableData().footerData;
|
89
85
|
var footers = footerFilterMethod ? footerData.filter(footerFilterMethod) : footerData;
|
90
86
|
footers.forEach(function (rows) {
|
91
87
|
var item = {};
|
@@ -95,13 +91,13 @@
|
|
95
91
|
footList.push(item);
|
96
92
|
});
|
97
93
|
}
|
98
|
-
var book =
|
99
|
-
var sheet =
|
94
|
+
var book = xlsx_1["default"].utils.book_new();
|
95
|
+
var sheet = xlsx_1["default"].utils.json_to_sheet((isHeader ? [colHead] : []).concat(rowList).concat(footList), {
|
100
96
|
skipHeader: true
|
101
97
|
});
|
102
98
|
// 转换数据
|
103
|
-
|
104
|
-
var wbout =
|
99
|
+
xlsx_1["default"].utils.book_append_sheet(book, sheet, sheetName);
|
100
|
+
var wbout = xlsx_1["default"].write(book, {
|
105
101
|
bookType: type,
|
106
102
|
bookSST: false,
|
107
103
|
type: 'binary'
|
@@ -123,11 +119,11 @@
|
|
123
119
|
var filename = options.filename,
|
124
120
|
type = options.type;
|
125
121
|
if (navigator.msSaveBlob) {
|
126
|
-
navigator.msSaveBlob(blob,
|
122
|
+
navigator.msSaveBlob(blob, filename + "." + type);
|
127
123
|
} else {
|
128
124
|
var linkElem = document.createElement('a');
|
129
125
|
linkElem.target = '_blank';
|
130
|
-
linkElem.download =
|
126
|
+
linkElem.download = filename + "." + type;
|
131
127
|
linkElem.href = URL.createObjectURL(blob);
|
132
128
|
document.body.appendChild(linkElem);
|
133
129
|
linkElem.click();
|
@@ -149,13 +145,13 @@
|
|
149
145
|
list[0].split(',').map(replaceDoubleQuotation);
|
150
146
|
rList.forEach(function (r) {
|
151
147
|
if (r) {
|
152
|
-
var
|
148
|
+
var item_1 = {};
|
153
149
|
r.split(',').forEach(function (val, colIndex) {
|
154
150
|
if (fields[colIndex]) {
|
155
|
-
|
151
|
+
item_1[fields[colIndex]] = replaceDoubleQuotation(val);
|
156
152
|
}
|
157
153
|
});
|
158
|
-
rows.push(
|
154
|
+
rows.push(item_1);
|
159
155
|
}
|
160
156
|
});
|
161
157
|
}
|
@@ -184,13 +180,13 @@
|
|
184
180
|
var _importResolve = $table._importResolve;
|
185
181
|
var fileReader = new FileReader();
|
186
182
|
fileReader.onload = function (e) {
|
187
|
-
var workbook =
|
183
|
+
var workbook = xlsx_1["default"].read(e.target.result, {
|
188
184
|
type: 'binary'
|
189
185
|
});
|
190
|
-
var csvData =
|
191
|
-
var
|
192
|
-
fields =
|
193
|
-
rows =
|
186
|
+
var csvData = xlsx_1["default"].utils.sheet_to_csv(workbook.Sheets.Sheet1);
|
187
|
+
var _a = parseCsv(columns, csvData),
|
188
|
+
fields = _a.fields,
|
189
|
+
rows = _a.rows;
|
194
190
|
var status = checkImportData(columns, fields, rows);
|
195
191
|
if (status) {
|
196
192
|
$table.createData(rows).then(function (data) {
|
@@ -202,7 +198,7 @@
|
|
202
198
|
});
|
203
199
|
if (options.message !== false) {
|
204
200
|
_vxetable.modal.message({
|
205
|
-
message:
|
201
|
+
message: xe_utils_1["default"].template(_vxetable.t('vxe.table.impSuccess'), [rows.length]),
|
206
202
|
status: 'success'
|
207
203
|
});
|
208
204
|
}
|
@@ -234,7 +230,7 @@
|
|
234
230
|
/**
|
235
231
|
* 基于 vxe-table 表格的增强插件,支持导出 xlsx 格式
|
236
232
|
*/
|
237
|
-
|
233
|
+
exports.VXETablePluginExportXLSX = {
|
238
234
|
install: function install(xtable) {
|
239
235
|
var interceptor = xtable.interceptor;
|
240
236
|
_vxetable = xtable;
|
@@ -247,10 +243,8 @@
|
|
247
243
|
});
|
248
244
|
}
|
249
245
|
};
|
250
|
-
_exports.VXETablePluginExportXLSX = VXETablePluginExportXLSX;
|
251
246
|
if (typeof window !== 'undefined' && window.VXETable) {
|
252
|
-
window.VXETable.use(VXETablePluginExportXLSX);
|
247
|
+
window.VXETable.use(exports.VXETablePluginExportXLSX);
|
253
248
|
}
|
254
|
-
|
255
|
-
_exports["default"] = _default;
|
249
|
+
exports["default"] = exports.VXETablePluginExportXLSX;
|
256
250
|
});
|
package/dist/index.min.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
!function(e,t){"function"==typeof define&&define.amd?define("vxe-table-plugin-export-xlsx-xhx",[
|
1
|
+
!function(e,t){"function"==typeof define&&define.amd?define("vxe-table-plugin-export-xlsx-xhx",[],t):"undefined"!=typeof exports?t():(t(),e.VXETablePluginExportXLSX={}.default)}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,function(){"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var p,m=require("xe-utils/methods/xe-utils"),g=require("xlsx");function t(e){var o=e.$table,t=e.options,r=e.columns,e=e.datas,n=t.sheetName,a=t.type,i=t.isHeader,s=t.isFooter,l=t.original,u=t.message,f=t.footerFilterMethod,c={},d=[],e=(i&&r.forEach(function(e){c[e.id]=m.default.toString(l?e.property:e.getTitle())}),e.map(function(t){var n={};return r.forEach(function(e){n[e.id]=function(e,t){if(t)switch(e.cellType){case"string":return m.default.toValueString(t);case"number":if(isNaN(t))break;return Number(t);default:if(t.length<12&&!isNaN(t))return Number(t)}return t}(e,t[e.id])}),n})),f=(s&&(s=o.getTableData().footerData,(f?s.filter(f):s).forEach(function(t){var n={};r.forEach(function(e){n[e.id]=m.default.toString(t[o.$getColumnIndex(e)])}),d.push(n)})),g.default.utils.book_new()),s=g.default.utils.json_to_sheet((i?[c]:[]).concat(e).concat(d),{skipHeader:!0}),i=(g.default.utils.book_append_sheet(f,s,n),g.default.write(f,{bookType:a,bookSST:!1,type:"binary"})),e=new Blob([function(e){for(var t=new ArrayBuffer(e.length),n=new Uint8Array(t),o=0;o!==e.length;++o)n[o]=255&e.charCodeAt(o);return t}(i)],{type:"application/octet-stream"}),s=t;window.Blob?(n=s.filename,s=s.type,navigator.msSaveBlob?navigator.msSaveBlob(e,n+"."+s):((f=document.createElement("a")).target="_blank",f.download=n+"."+s,f.href=URL.createObjectURL(e),document.body.appendChild(f),f.click(),document.body.removeChild(f))):console.error(p.t("vxe.error.notExp")),!1!==u&&p.modal.message({message:p.t("vxe.table.expSuccess"),status:"success"})}function f(e){return e.replace(/^"/,"").replace(/"$/,"")}function n(e){var i=e.columns,s=e.options,t=e.file,l=e.$table,u=l._importResolve,e=new FileReader;e.onload=function(e){var o,t,n,r,e=g.default.read(e.target.result,{type:"binary"}),e=g.default.utils.sheet_to_csv(e.Sheets.Sheet1),e=(e=(e=e).split("\n"),o=[],t=[],e.length&&(a=e.slice(1),e[0].split(",").map(f),a.forEach(function(e){var n;e&&(n={},e.split(",").forEach(function(e,t){o[t]&&(n[o[t]]=f(e))}),t.push(n))})),{fields:o,rows:t}),a=e.rows,e=(n=e.fields,r=[],i.forEach(function(e){e=e.property;e&&r.push(e)}),r.every(function(e){return n.includes(e)}));e?(l.createData(a).then(function(e){"append"===s.mode?l.insertAt(e,-1):l.reloadData(e)}),!1!==s.message&&p.modal.message({message:m.default.template(p.t("vxe.table.impSuccess"),[a.length]),status:"success"})):!1!==s.message&&p.modal.message({message:p.t("vxe.error.impFields"),status:"error"}),u&&(u(e),l._importResolve=null)},e.readAsBinaryString(t)}function o(e){if("xlsx"===e.options.type)return n(e),!1}function r(e){if("xlsx"===e.options.type)return t(e),!1}exports.VXETablePluginExportXLSX={install:function(e){var t=e.interceptor;p=e,Object.assign(e.types,{xlsx:1}),t.mixin({"event.import":o,"event.export":r})}},"undefined"!=typeof window&&window.VXETable&&window.VXETable.use(exports.VXETablePluginExportXLSX),exports.default=exports.VXETablePluginExportXLSX});
|