mirror of
https://gitee.com/x-extends/vxe-table-plugin-export-xlsx.git
synced 2026-01-21 05:21:33 +08:00
216 lines
22 KiB
JavaScript
216 lines
22 KiB
JavaScript
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports["default"] = exports.VXETablePluginExport = void 0;
|
|
|
|
var _xeUtils = _interopRequireDefault(require("xe-utils/methods/xe-utils"));
|
|
|
|
var XLSX = _interopRequireWildcard(require("xlsx"));
|
|
|
|
function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; }
|
|
|
|
function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
|
|
function toBuffer(wbout) {
|
|
var buf = new ArrayBuffer(wbout.length);
|
|
var view = new Uint8Array(buf);
|
|
|
|
for (var index = 0; index !== wbout.length; ++index) {
|
|
view[index] = wbout.charCodeAt(index) & 0xFF;
|
|
}
|
|
|
|
return buf;
|
|
}
|
|
|
|
function exportXLSX(params) {
|
|
var options = params.options,
|
|
columns = params.columns,
|
|
datas = params.datas;
|
|
var sheetName = options.sheetName,
|
|
type = options.type,
|
|
isHeader = options.isHeader,
|
|
original = options.original;
|
|
var colHead = {};
|
|
|
|
if (isHeader) {
|
|
columns.forEach(function (column) {
|
|
colHead[column.id] = original ? column.property : column.getTitle();
|
|
});
|
|
}
|
|
|
|
var rowList = datas.map(function (row) {
|
|
var item = {};
|
|
columns.forEach(function (column) {
|
|
item[column.id] = original ? _xeUtils["default"].get(row, column.property) : row[column.id];
|
|
});
|
|
return item;
|
|
});
|
|
var book = XLSX.utils.book_new();
|
|
var sheet = XLSX.utils.json_to_sheet((isHeader ? [colHead] : []).concat(rowList), {
|
|
skipHeader: true
|
|
}); // 转换数据
|
|
|
|
XLSX.utils.book_append_sheet(book, sheet, sheetName);
|
|
var wbout = XLSX.write(book, {
|
|
bookType: type,
|
|
bookSST: false,
|
|
type: 'binary'
|
|
});
|
|
var blob = new Blob([toBuffer(wbout)], {
|
|
type: 'application/octet-stream'
|
|
}); // 保存导出
|
|
|
|
download(blob, options);
|
|
}
|
|
|
|
function download(blob, options) {
|
|
if (window.Blob) {
|
|
var filename = options.filename,
|
|
type = options.type;
|
|
|
|
if (navigator.msSaveBlob) {
|
|
navigator.msSaveBlob(blob, filename);
|
|
} else {
|
|
var linkElem = document.createElement('a');
|
|
linkElem.target = '_blank';
|
|
linkElem.download = "".concat(filename, ".").concat(type);
|
|
linkElem.href = URL.createObjectURL(blob);
|
|
document.body.appendChild(linkElem);
|
|
linkElem.click();
|
|
document.body.removeChild(linkElem);
|
|
}
|
|
} else {
|
|
console.error('[vxe-table-plugin-export] The current environment does not support exports.');
|
|
}
|
|
}
|
|
|
|
function replaceDoubleQuotation(val) {
|
|
return val.replace(/^"/, '').replace(/"$/, '');
|
|
}
|
|
|
|
function parseCsv(columns, content) {
|
|
var list = content.split('\n');
|
|
var fields = [];
|
|
var rows = [];
|
|
|
|
if (list.length) {
|
|
var rList = list.slice(1);
|
|
list[0].split(',').forEach(function (val) {
|
|
var field = replaceDoubleQuotation(val);
|
|
|
|
if (field) {
|
|
fields.push(field);
|
|
}
|
|
});
|
|
rList.forEach(function (r) {
|
|
if (r) {
|
|
var item = {};
|
|
r.split(',').forEach(function (val, colIndex) {
|
|
item[fields[colIndex]] = replaceDoubleQuotation(val);
|
|
});
|
|
rows.push(item);
|
|
}
|
|
});
|
|
}
|
|
|
|
return {
|
|
fields: fields,
|
|
rows: rows
|
|
};
|
|
}
|
|
|
|
function checkImportData(columns, fields, rows) {
|
|
var tableFields = [];
|
|
columns.forEach(function (column) {
|
|
var field = column.property;
|
|
|
|
if (field) {
|
|
tableFields.push(field);
|
|
}
|
|
});
|
|
return tableFields.every(function (field) {
|
|
return fields.includes(field);
|
|
});
|
|
}
|
|
|
|
function importXLSX(params) {
|
|
var $table = params.$table,
|
|
columns = params.columns,
|
|
options = params.options,
|
|
file = params.file;
|
|
var _importCallback = $table._importCallback;
|
|
var fileReader = new FileReader();
|
|
|
|
fileReader.onload = function (e) {
|
|
var workbook = XLSX.read(e.target.result, {
|
|
type: 'binary'
|
|
});
|
|
var csvData = XLSX.utils.sheet_to_csv(workbook.Sheets.Sheet1);
|
|
var rest = parseCsv(columns, csvData);
|
|
var fields = rest.fields,
|
|
rows = rest.rows;
|
|
var status = checkImportData(columns, fields, rows);
|
|
|
|
if (status) {
|
|
$table.createData(rows).then(function (data) {
|
|
if (options.mode === 'append') {
|
|
$table.insertAt(data, -1);
|
|
} else {
|
|
$table.reloadData(data);
|
|
}
|
|
});
|
|
}
|
|
|
|
if (_importCallback) {
|
|
_importCallback(status);
|
|
}
|
|
};
|
|
|
|
fileReader.readAsBinaryString(file);
|
|
}
|
|
|
|
function handleImportEvent(params) {
|
|
switch (params.options.type) {
|
|
case 'xlsx':
|
|
importXLSX(params);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
function handleExportEvent(params) {
|
|
switch (params.options.type) {
|
|
case 'xlsx':
|
|
exportXLSX(params);
|
|
return false;
|
|
}
|
|
}
|
|
/**
|
|
* 基于 vxe-table 表格的增强插件,支持导出 xlsx 等格式
|
|
*/
|
|
|
|
|
|
var VXETablePluginExport = {
|
|
install: function install(xtable) {
|
|
Object.assign(xtable.types, {
|
|
xlsx: 1
|
|
});
|
|
xtable.interceptor.mixin({
|
|
'event.import': handleImportEvent,
|
|
'event.export': handleExportEvent
|
|
});
|
|
}
|
|
};
|
|
exports.VXETablePluginExport = VXETablePluginExport;
|
|
|
|
if (typeof window !== 'undefined' && window.VXETable) {
|
|
window.VXETable.use(VXETablePluginExport);
|
|
}
|
|
|
|
var _default = VXETablePluginExport;
|
|
exports["default"] = _default;
|
|
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluZGV4LnRzIl0sIm5hbWVzIjpbInRvQnVmZmVyIiwid2JvdXQiLCJidWYiLCJBcnJheUJ1ZmZlciIsImxlbmd0aCIsInZpZXciLCJVaW50OEFycmF5IiwiaW5kZXgiLCJjaGFyQ29kZUF0IiwiZXhwb3J0WExTWCIsInBhcmFtcyIsIm9wdGlvbnMiLCJjb2x1bW5zIiwiZGF0YXMiLCJzaGVldE5hbWUiLCJ0eXBlIiwiaXNIZWFkZXIiLCJvcmlnaW5hbCIsImNvbEhlYWQiLCJmb3JFYWNoIiwiY29sdW1uIiwiaWQiLCJwcm9wZXJ0eSIsImdldFRpdGxlIiwicm93TGlzdCIsIm1hcCIsInJvdyIsIml0ZW0iLCJYRVV0aWxzIiwiZ2V0IiwiYm9vayIsIlhMU1giLCJ1dGlscyIsImJvb2tfbmV3Iiwic2hlZXQiLCJqc29uX3RvX3NoZWV0IiwiY29uY2F0Iiwic2tpcEhlYWRlciIsImJvb2tfYXBwZW5kX3NoZWV0Iiwid3JpdGUiLCJib29rVHlwZSIsImJvb2tTU1QiLCJibG9iIiwiQmxvYiIsImRvd25sb2FkIiwid2luZG93IiwiZmlsZW5hbWUiLCJuYXZpZ2F0b3IiLCJtc1NhdmVCbG9iIiwibGlua0VsZW0iLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJ0YXJnZXQiLCJocmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYm9keSIsImFwcGVuZENoaWxkIiwiY2xpY2siLCJyZW1vdmVDaGlsZCIsImNvbnNvbGUiLCJlcnJvciIsInJlcGxhY2VEb3VibGVRdW90YXRpb24iLCJ2YWwiLCJyZXBsYWNlIiwicGFyc2VDc3YiLCJjb250ZW50IiwibGlzdCIsInNwbGl0IiwiZmllbGRzIiwicm93cyIsInJMaXN0Iiwic2xpY2UiLCJmaWVsZCIsInB1c2giLCJyIiwiY29sSW5kZXgiLCJjaGVja0ltcG9ydERhdGEiLCJ0YWJsZUZpZWxkcyIsImV2ZXJ5IiwiaW5jbHVkZXMiLCJpbXBvcnRYTFNYIiwiJHRhYmxlIiwiZmlsZSIsIl9pbXBvcnRDYWxsYmFjayIsImZpbGVSZWFkZXIiLCJGaWxlUmVhZGVyIiwib25sb2FkIiwiZSIsIndvcmtib29rIiwicmVhZCIsInJlc3VsdCIsImNzdkRhdGEiLCJzaGVldF90b19jc3YiLCJTaGVldHMiLCJTaGVldDEiLCJyZXN0Iiwic3RhdHVzIiwiY3JlYXRlRGF0YSIsInRoZW4iLCJkYXRhIiwibW9kZSIsImluc2VydEF0IiwicmVsb2FkRGF0YSIsInJlYWRBc0JpbmFyeVN0cmluZyIsImhhbmRsZUltcG9ydEV2ZW50IiwiaGFuZGxlRXhwb3J0RXZlbnQiLCJWWEVUYWJsZVBsdWdpbkV4cG9ydCIsImluc3RhbGwiLCJ4dGFibGUiLCJPYmplY3QiLCJhc3NpZ24iLCJ0eXBlcyIsInhsc3giLCJpbnRlcmNlcHRvciIsIm1peGluIiwiVlhFVGFibGUiLCJ1c2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTs7QUFFQTs7Ozs7Ozs7QUFFQSxTQUFTQSxRQUFULENBQWtCQyxLQUFsQixFQUE0QjtBQUMxQixNQUFJQyxHQUFHLEdBQUcsSUFBSUMsV0FBSixDQUFnQkYsS0FBSyxDQUFDRyxNQUF0QixDQUFWO0FBQ0EsTUFBSUMsSUFBSSxHQUFHLElBQUlDLFVBQUosQ0FBZUosR0FBZixDQUFYOztBQUNBLE9BQUssSUFBSUssS0FBSyxHQUFHLENBQWpCLEVBQW9CQSxLQUFLLEtBQUtOLEtBQUssQ0FBQ0csTUFBcEMsRUFBNEMsRUFBRUcsS0FBOUM7QUFBcURGLElBQUFBLElBQUksQ0FBQ0UsS0FBRCxDQUFKLEdBQWNOLEtBQUssQ0FBQ08sVUFBTixDQUFpQkQsS0FBakIsSUFBMEIsSUFBeEM7QUFBckQ7O0FBQ0EsU0FBT0wsR0FBUDtBQUNEOztBQUVELFNBQVNPLFVBQVQsQ0FBb0JDLE1BQXBCLEVBQStCO0FBQUEsTUFDckJDLE9BRHFCLEdBQ09ELE1BRFAsQ0FDckJDLE9BRHFCO0FBQUEsTUFDWkMsT0FEWSxHQUNPRixNQURQLENBQ1pFLE9BRFk7QUFBQSxNQUNIQyxLQURHLEdBQ09ILE1BRFAsQ0FDSEcsS0FERztBQUFBLE1BRXJC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ImltcG9ydCBYRVV0aWxzIGZyb20gJ3hlLXV0aWxzL21ldGhvZHMveGUtdXRpbHMnXHJcbmltcG9ydCBWWEVUYWJsZSBmcm9tICd2eGUtdGFibGUvbGliL3Z4ZS10YWJsZSdcclxuaW1wb3J0ICogYXMgWExTWCBmcm9tICd4bHN4J1xyXG5cclxuZnVuY3Rpb24gdG9CdWZmZXIod2JvdXQ6IGFueSkge1xyXG4gIGxldCBidWYgPSBuZXcgQXJyYXlCdWZmZXIod2JvdXQubGVuZ3RoKVxyXG4gIGxldCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmKVxyXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggIT09IHdib3V0Lmxlbmd0aDsgKytpbmRleCkgdmlld1tpbmRleF0gPSB3Ym91dC5jaGFyQ29kZUF0KGluZGV4KSAmIDB4RkZcclxuICByZXR1cm4gYnVmXHJcbn1cclxuXHJcbmZ1bmN0aW9uIGV4cG9ydFhMU1gocGFyYW1zOiBhbnkpIHtcclxuICBjb25zdCB7IG9wdGlvbnMsIGNvbHVtbnMsIGRhdGFzIH0gPSBwYXJhbXNcclxuICBjb25zdCB7IHNoZWV0TmFtZSwgdHlwZSwgaXNIZWFkZXIsIG9yaWdpbmFsIH0gPSBvcHRpb25zXHJcbiAgY29uc3QgY29sSGVhZDogYW55ID0ge31cclxuICBpZiAoaXNIZWFkZXIpIHtcclxuICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sdW1uOiBhbnkpID0+IHtcclxuICAgICAgY29sSGVhZFtjb2x1bW4uaWRdID0gb3JpZ2luYWwgPyBjb2x1bW4ucHJvcGVydHkgOiBjb2x1bW4uZ2V0VGl0bGUoKVxyXG4gICAgfSlcclxuICB9XHJcbiAgY29uc3Qgcm93TGlzdCA9IGRhdGFzLm1hcCgocm93OiBhbnkpID0+IHtcclxuICAgIGNvbnN0IGl0ZW06IGFueSA9IHt9XHJcbiAgICBjb2x1bW5zLmZvckVhY2goKGNvbHVtbjogYW55KSA9PiB7XHJcbiAgICAgIGl0ZW1bY29sdW1uLmlkXSA9IG9yaWdpbmFsID8gWEVVdGlscy5nZXQocm93LCBjb2x1bW4ucHJvcGVydHkpIDogcm93W2NvbHVtbi5pZF1cclxuICAgIH0pXHJcbiAgICByZXR1cm4gaXRlbVxyXG4gIH0pXHJcbiAgY29uc3QgYm9vayA9IFhMU1gudXRpbHMuYm9va19uZXcoKVxyXG4gIGNvbnN0IHNoZWV0ID0gWExTWC51dGlscy5qc29uX3RvX3NoZWV0KChpc0hlYWRlciA/IFtjb2xIZWFkXSA6IFtdKS5jb25jYXQocm93TGlzdCksIHsgc2tpcEhlYWRlcjogdHJ1ZSB9KVxyXG4gIC8vIOi9rOaNouaVsOaNrlxyXG4gIFhMU1gudXRpbHMuYm9va19hcHBlbmRfc2hlZXQoYm9vaywgc2hlZXQsIHNoZWV0TmFtZSlcclxuICBjb25zdCB3Ym91dCA9IFhMU1gud3JpdGUoYm9vaywgeyBib29rVHlwZTogdHlwZSwgYm9va1NTVDogZmFsc2UsIHR5cGU6ICdiaW5hcnknIH0pXHJcbiAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFt0b0J1ZmZlcih3Ym91dCldLCB7IHR5cGU6ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIH0pXHJcbiAgLy8g5L+d5a2Y5a+85Ye6XHJcbiAgZG93bmxvYWQoYmxvYiwgb3B0aW9ucylcclxufVxyXG5cclxuZnVuY3Rpb24gZG93bmxvYWQoYmxvYjogQmxvYiwgb3B0aW9uczogYW55KSB7XHJcbiAgaWYgKHdpbmRvdy5CbG9iKSB7XHJcbiAgICBjb25zdCB7IGZpbGVuYW1lLCB0eXBlIH0gPSBvcHRpb25zXHJcbiAgICBpZiAobmF2aWdhdG9yLm1zU2F2ZUJsb2IpIHtcclxuICAgICAgbmF2aWdhdG9yLm1zU2F2ZUJsb2IoYmxvYiwgZmlsZW5hbWUpXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB2YXIgbGlua0VsZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJylcclxuICAgICAgbGlua0VsZW0udGFyZ2V0ID0gJ19ibGFuaydcclxuICAgICAgbGlua0VsZW0uZG93bmxvYWQgPSBgJHtmaWxlbmFtZX0uJHt0eXBlfWBcclxuICAgICAgbGlua0VsZW0uaHJlZiA9IFVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYilcclxuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rRWxlbSlcclxuICAgICAgbGlua0VsZW0uY2xpY2soKVxyXG4gICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGxpbmtFbGVtKVxyXG4gICAgfVxyXG4gIH0gZWxzZSB7XHJcbiAgICBjb25zb2xlLmVycm9yKCdbdnhlLXRhYmxlLXBsdWdpbi1leHBvcnRdIFRoZSBjdXJyZW50IGVudmlyb25tZW50IGRvZXMgbm90IHN1cHBvcnQgZXhwb3J0cy4nKVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVwbGFjZURvdWJsZVF1b3RhdGlvbih2YWw6IHN0cmluZykge1xyXG4gIHJldHVybiB2YWwucmVwbGFjZSgvXlwiLywgJycpLnJlcGxhY2UoL1wiJC8sICcnKVxyXG59XHJcblxyXG5mdW5jdGlvbiBwYXJzZUNzdihjb2x1bW5zOiBhbnlbXSwgY29udGVudDogc3RyaW5nKSB7XHJcbiAgY29uc3QgbGlzdDogc3RyaW5nW10gPSBjb250ZW50LnNwbGl0KCdcXG4nKVxyXG4gIGNvbnN0IGZpZWxkczogYW55W10gPSBbXVxyXG4gIGNvbnN0IHJvd3M6IGFueVtdID0gW11cclxuICBpZiAobGlzdC5sZW5ndGgpIHtcclxuICAgIGNvbnN0IHJMaXN0OiBzdHJpbmdbXSA9IGxpc3Quc2xpY2UoMSlcclxuICAgIGxpc3RbMF0uc3BsaXQoJywnKS5mb3JFYWNoKCh2YWw6IHN0cmluZykgPT4ge1xyXG4gICAgICBjb25zdCBmaWVsZDogc3RyaW5nID0gcmVwbGFjZURvdWJsZVF1b3RhdGlvbih2YWwpXHJcbiAgICAgIGlmIChmaWVsZCkge1xyXG4gICAgICAgIGZpZWxkcy5wdXNoKGZpZWxkKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgckxpc3QuZm9yRWFjaCgocjogc3RyaW5nKSA9PiB7XHJcbiAgICAgIGlmIChyKSB7XHJcbiAgICAgICAgY29uc3QgaXRlbTogYW55ID0ge31cclxuICAgICAgICByLnNwbGl0KCcsJykuZm9yRWFjaCgodmFsOiBzdHJpbmcsIGNvbEluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgIGl0ZW1bZmllbGRzW2NvbEluZGV4XV0gPSByZXBsYWNlRG91YmxlUXVvdGF0aW9uKHZhbClcclxuICAgICAgICB9KVxyXG4gICAgICAgIHJvd3MucHVzaChpdGVtKVxyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuICByZXR1cm4geyBmaWVsZHMsIHJvd3MgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjaGVja0ltcG9ydERhdGEoY29sdW1uczogYW55W10sIGZpZWxkczogc3RyaW5nW10sIHJvd3M6IGFueVtdKSB7XHJcbiAgbGV0IHRhYmxlRmllbGRzOiBzdHJpbmdbXSA9IFtdXHJcbiAgY29sdW1ucy5mb3JFYWNoKChjb2x1bW46IGFueSkgPT4ge1xyXG4gICAgbGV0IGZpZWxkOiBzdHJpbmcgPSBjb2x1bW4ucHJvcGVydHlcclxuICAgIGlmIChmaWVsZCkge1xyXG4gICAgICB0YWJsZUZpZWxkcy5wdXNoKGZpZWxkKVxyXG4gICAgfVxyXG4gIH0pXHJcbiAgcmV0dXJuIHRhYmxlRmllbGRzLmV2ZXJ5KChmaWVsZDogc3RyaW5nKSA9PiBmaWVsZHMuaW5jbHVkZXMoZmllbGQpKVxyXG59XHJcblxyXG5mdW5jdGlvbiBpbXBvcnRYTFNYKHBhcmFtczogYW55KSB7XHJcbiAgY29uc3QgeyAkdGFibGUsIGNvbHVtbnMsIG9wdGlvbnMsIGZpbGUgfSA9IHBhcmFtc1xyXG4gIGNvbnN0IHsgX2ltcG9ydENhbGxiYWNrIH0gPSAkdGFibGVcclxuICBjb25zdCBmaWxlUmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxyXG4gIGZpbGVSZWFkZXIub25sb2FkID0gKGU6IGFueSkgPT4ge1xyXG4gICAgY29uc3Qgd29ya2Jvb2sgPSBYTFNYLnJlYWQoZS50YXJnZXQucmVzdWx0LCB7IHR5cGU6ICdiaW5hcnknIH0pXHJcbiAgICBjb25zdCBjc3ZEYXRhOiBzdHJpbmcgPSBYTFNYLnV0aWxzLnNoZWV0X3RvX2Nzdih3b3JrYm9vay5TaGVldHMuU2hlZXQxKVxyXG4gICAgY29uc3QgcmVzdDogYW55ID0gcGFyc2VDc3YoY29sdW1ucywgY3N2RGF0YSlcclxuICAgIGNvbnN0IHsgZmllbGRzLCByb3dzIH0gPSByZXN0XHJcbiAgICBjb25zdCBzdGF0dXMgPSBjaGVja0ltcG9ydERhdGEoY29sdW1ucywgZmllbGRzLCByb3dzKVxyXG4gICAgaWYgKHN0YXR1cykge1xyXG4gICAgICAkdGFibGUuY3JlYXRlRGF0YShyb3dzKVxyXG4gICAgICAgIC50aGVuKChkYXRhOiBhbnlbXSkgPT4ge1xyXG4gICAgICAgICAgaWYgKG9wdGlvbnMubW9kZSA9PT0gJ2FwcGVuZCcpIHtcclxuICAgICAgICAgICAgJHRhYmxlLmluc2VydEF0KGRhdGEsIC0xKVxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgJHRhYmxlLnJlbG9hZERhdGEoZGF0YSlcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgfVxyXG4gICAgaWYgKF9pbXBvcnRDYWxsYmFjaykge1xyXG4gICAgICBfaW1wb3J0Q2FsbGJhY2soc3RhdHVzKVxyXG4gICAgfVxyXG4gIH1cclxuICBmaWxlUmVhZGVyLnJlYWRBc0JpbmFyeVN0cmluZyhmaWxlKVxyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVJbXBvcnRFdmVudChwYXJhbXM6IGFueSkge1xyXG4gIHN3aXRjaCAocGFyYW1zLm9wdGlvbnMudHlwZSkge1xyXG4gICAgY2FzZSAneGxzeCc6XHJcbiAgICAgIGltcG9ydFhMU1gocGFyYW1zKVxyXG4gICAgICByZXR1cm4gZmFsc2VcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZUV4cG9ydEV2ZW50KHBhcmFtczogYW55KSB7XHJcbiAgc3dpdGNoIChwYXJhbXMub3B0aW9ucy50eXBlKSB7XHJcbiAgICBjYXNlICd4bHN4JzpcclxuICAgICAgZXhwb3J0WExTWChwYXJhbXMpXHJcbiAgICAgIHJldHVybiBmYWxzZVxyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOWfuuS6jiB2eGUtdGFibGUg6KGo5qC855qE5aKe5by65o+S5Lu277yM5pSv5oyB5a+85Ye6IHhsc3gg562J5qC85byPXHJcbiAqL1xyXG5leHBvcnQgY29uc3QgVlhFVGFibGVQbHVnaW5FeHBvcnQgPSB7XHJcbiAgaW5zdGFsbCh4dGFibGU6IHR5cGVvZiBWWEVUYWJsZSkge1xyXG4gICAgT2JqZWN0LmFzc2lnbih4dGFibGUudHlwZXMsIHsgeGxzeDogMSB9KVxyXG4gICAgeHRhYmxlLmludGVyY2VwdG9yLm1peGluKHtcclxuICAgICAgJ2V2ZW50LmltcG9ydCc6IGhhbmRsZUltcG9ydEV2ZW50LFxyXG4gICAgICAnZXZlbnQuZXhwb3J0JzogaGFuZGxlRXhwb3J0RXZlbnRcclxuICAgIH0pXHJcbiAgfVxyXG59XHJcblxyXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LlZYRVRhYmxlKSB7XHJcbiAgd2luZG93LlZYRVRhYmxlLnVzZShWWEVUYWJsZVBsdWdpbkV4cG9ydClcclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgVlhFVGFibGVQbHVnaW5FeHBvcnRcclxuIl19
|