nsc-react-component 2.8.54 → 2.9.0
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/lib/base/form/filed/FormItem.js +3 -3
- package/lib/base/table/index.d.ts +7 -0
- package/lib/base/table/index.js +123 -12
- package/lib/base/upload/Dragger.d.ts +38 -0
- package/lib/base/upload/Dragger.js +568 -0
- package/lib/base/upload/Upload.d.ts +39 -0
- package/lib/base/upload/Upload.js +571 -0
- package/lib/base/upload/index.d.ts +23 -2
- package/lib/base/upload/index.js +5 -3
- package/lib/page/BasePage/index.d.ts +1 -5
- package/lib/page/BasePage/index.js +16 -118
- package/package.json +1 -1
|
@@ -0,0 +1,571 @@
|
|
|
1
|
+
function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
|
|
2
|
+
|
|
3
|
+
import "antd/es/upload/style/css";
|
|
4
|
+
import _Upload from "antd/es/upload";
|
|
5
|
+
|
|
6
|
+
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
|
7
|
+
|
|
8
|
+
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
|
|
9
|
+
|
|
10
|
+
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
|
|
11
|
+
|
|
12
|
+
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
|
|
13
|
+
|
|
14
|
+
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
|
|
15
|
+
|
|
16
|
+
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
|
|
17
|
+
|
|
18
|
+
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
|
|
19
|
+
|
|
20
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
21
|
+
|
|
22
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
23
|
+
|
|
24
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
|
|
25
|
+
|
|
26
|
+
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
|
|
27
|
+
|
|
28
|
+
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
|
|
29
|
+
|
|
30
|
+
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
|
|
31
|
+
|
|
32
|
+
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
|
|
33
|
+
|
|
34
|
+
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); }
|
|
35
|
+
|
|
36
|
+
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
|
|
37
|
+
|
|
38
|
+
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = _getPrototypeOf(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = _getPrototypeOf(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return _possibleConstructorReturn(this, result); }; }
|
|
39
|
+
|
|
40
|
+
function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); }
|
|
41
|
+
|
|
42
|
+
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
|
|
43
|
+
|
|
44
|
+
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
45
|
+
|
|
46
|
+
function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); }
|
|
47
|
+
|
|
48
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
49
|
+
|
|
50
|
+
import * as React from "react";
|
|
51
|
+
import file from "nsc-file";
|
|
52
|
+
import message from "../message";
|
|
53
|
+
import omit from "omit.js";
|
|
54
|
+
import { getLess } from "../../utils";
|
|
55
|
+
import styles from "./index.less";
|
|
56
|
+
import cls from "classnames";
|
|
57
|
+
import FileIcon from "../common/FileIcon";
|
|
58
|
+
import { DeleteOutlined, DownloadOutlined, EyeOutlined } from "@ant-design/icons";
|
|
59
|
+
var upload = file.upload,
|
|
60
|
+
download = file.download,
|
|
61
|
+
previewDocument = file.previewDocument;
|
|
62
|
+
var Dragger = _Upload.Dragger;
|
|
63
|
+
|
|
64
|
+
var NscUpload = /*#__PURE__*/function (_React$PureComponent) {
|
|
65
|
+
_inherits(NscUpload, _React$PureComponent);
|
|
66
|
+
|
|
67
|
+
var _super = _createSuper(NscUpload);
|
|
68
|
+
|
|
69
|
+
function NscUpload() {
|
|
70
|
+
var _this;
|
|
71
|
+
|
|
72
|
+
_classCallCheck(this, NscUpload);
|
|
73
|
+
|
|
74
|
+
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
|
|
75
|
+
args[_key] = arguments[_key];
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
_this = _super.call.apply(_super, [this].concat(args));
|
|
79
|
+
|
|
80
|
+
_defineProperty(_assertThisInitialized(_this), "state", {
|
|
81
|
+
fileList: [],
|
|
82
|
+
viewId: "",
|
|
83
|
+
fileListStore: [],
|
|
84
|
+
fileNames: []
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
_defineProperty(_assertThisInitialized(_this), "customRequest", /*#__PURE__*/function () {
|
|
88
|
+
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(options) {
|
|
89
|
+
var file, _this$props, onComplete, onProcess, sliceSize, onProgress, res, fileId;
|
|
90
|
+
|
|
91
|
+
return regeneratorRuntime.wrap(function _callee$(_context) {
|
|
92
|
+
while (1) {
|
|
93
|
+
switch (_context.prev = _context.next) {
|
|
94
|
+
case 0:
|
|
95
|
+
file = options.file;
|
|
96
|
+
_this$props = _this.props, onComplete = _this$props.onComplete, onProcess = _this$props.onProcess, sliceSize = _this$props.sliceSize;
|
|
97
|
+
|
|
98
|
+
onProgress = function onProgress(totalProgress) {
|
|
99
|
+
options.onProgress({
|
|
100
|
+
percent: totalProgress
|
|
101
|
+
}, file);
|
|
102
|
+
|
|
103
|
+
_this.onProcess({
|
|
104
|
+
percent: totalProgress,
|
|
105
|
+
file: file
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
onProcess && onProcess({
|
|
109
|
+
percent: totalProgress,
|
|
110
|
+
file: file
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
_context.prev = 3;
|
|
115
|
+
_context.next = 6;
|
|
116
|
+
return upload({
|
|
117
|
+
file: file,
|
|
118
|
+
onProgress: onProgress,
|
|
119
|
+
partSize: sliceSize
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
case 6:
|
|
123
|
+
res = _context.sent;
|
|
124
|
+
fileId = null;
|
|
125
|
+
|
|
126
|
+
if (res.code == 200) {
|
|
127
|
+
fileId = res.data.attachId;
|
|
128
|
+
options.onSuccess();
|
|
129
|
+
} else {
|
|
130
|
+
options.onError();
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
_this.onComplete({
|
|
134
|
+
file: options.file,
|
|
135
|
+
fileId: fileId,
|
|
136
|
+
status: res.code == 200 ? "success" : "error"
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
onComplete && onComplete({
|
|
140
|
+
file: options.file,
|
|
141
|
+
fileId: fileId,
|
|
142
|
+
status: res.code == 200 ? "success" : "error"
|
|
143
|
+
});
|
|
144
|
+
_context.next = 18;
|
|
145
|
+
break;
|
|
146
|
+
|
|
147
|
+
case 13:
|
|
148
|
+
_context.prev = 13;
|
|
149
|
+
_context.t0 = _context["catch"](3);
|
|
150
|
+
|
|
151
|
+
_this.onComplete({
|
|
152
|
+
file: options.file,
|
|
153
|
+
fileId: "",
|
|
154
|
+
status: "error"
|
|
155
|
+
});
|
|
156
|
+
|
|
157
|
+
onComplete && onComplete({
|
|
158
|
+
file: options.file,
|
|
159
|
+
fileId: "",
|
|
160
|
+
status: "error"
|
|
161
|
+
});
|
|
162
|
+
options.onError();
|
|
163
|
+
|
|
164
|
+
case 18:
|
|
165
|
+
case "end":
|
|
166
|
+
return _context.stop();
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}, _callee, null, [[3, 13]]);
|
|
170
|
+
}));
|
|
171
|
+
|
|
172
|
+
return function (_x) {
|
|
173
|
+
return _ref.apply(this, arguments);
|
|
174
|
+
};
|
|
175
|
+
}());
|
|
176
|
+
|
|
177
|
+
return _this;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
_createClass(NscUpload, [{
|
|
181
|
+
key: "componentDidMount",
|
|
182
|
+
value: function componentDidMount() {
|
|
183
|
+
if (this.props.fileList) {
|
|
184
|
+
this.convertFileList();
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}, {
|
|
188
|
+
key: "convertFileList",
|
|
189
|
+
value: function convertFileList(list) {
|
|
190
|
+
var fileList = this.props.fileList;
|
|
191
|
+
var newFileList = [];
|
|
192
|
+
var oldList = list ? list : fileList;
|
|
193
|
+
oldList.map(function (item) {
|
|
194
|
+
var temp = _objectSpread(_objectSpread({}, item), {}, {
|
|
195
|
+
name: item.name || item.fileName,
|
|
196
|
+
type: item.type,
|
|
197
|
+
size: item.size
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
newFileList.push(temp);
|
|
201
|
+
});
|
|
202
|
+
this.setState({
|
|
203
|
+
fileList: newFileList,
|
|
204
|
+
fileListStore: fileList
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}, {
|
|
208
|
+
key: "componentDidUpdate",
|
|
209
|
+
value: function componentDidUpdate(preProps, preState) {
|
|
210
|
+
if (this.props.fileList) {
|
|
211
|
+
if (JSON.stringify(this.props.fileList) !== JSON.stringify(this.state.fileListStore)) {
|
|
212
|
+
this.convertFileList();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}, {
|
|
217
|
+
key: "getFileList",
|
|
218
|
+
value: function getFileList() {
|
|
219
|
+
return this.state.fileList;
|
|
220
|
+
}
|
|
221
|
+
}, {
|
|
222
|
+
key: "setFileList",
|
|
223
|
+
value: function setFileList(fileList) {
|
|
224
|
+
this.convertFileList(fileList);
|
|
225
|
+
}
|
|
226
|
+
}, {
|
|
227
|
+
key: "beforeUpload",
|
|
228
|
+
value: function () {
|
|
229
|
+
var _beforeUpload = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee3(file, ofileList) {
|
|
230
|
+
var _this2 = this;
|
|
231
|
+
|
|
232
|
+
var _this$props2, _this$props2$maxSize, maxSize, allowFileSuffix, _this$props2$checkSam, checkSameFile, maxCount, showUploadList, propsList, onListChange, _this$state, fileList, fileListStore, size, fileNames, checkList, res, newList, length, i;
|
|
233
|
+
|
|
234
|
+
return regeneratorRuntime.wrap(function _callee3$(_context3) {
|
|
235
|
+
while (1) {
|
|
236
|
+
switch (_context3.prev = _context3.next) {
|
|
237
|
+
case 0:
|
|
238
|
+
_this$props2 = this.props, _this$props2$maxSize = _this$props2.maxSize, maxSize = _this$props2$maxSize === void 0 ? 100 : _this$props2$maxSize, allowFileSuffix = _this$props2.allowFileSuffix, _this$props2$checkSam = _this$props2.checkSameFile, checkSameFile = _this$props2$checkSam === void 0 ? true : _this$props2$checkSam, maxCount = _this$props2.maxCount, showUploadList = _this$props2.showUploadList, propsList = _this$props2.fileList, onListChange = _this$props2.onListChange;
|
|
239
|
+
_this$state = this.state, fileList = _this$state.fileList, fileListStore = _this$state.fileListStore;
|
|
240
|
+
|
|
241
|
+
if (!(allowFileSuffix && !this.checkFileType(file))) {
|
|
242
|
+
_context3.next = 5;
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
message.error("".concat(file.name, "\u6587\u4EF6\u7C7B\u578B\u4E0D\u5141\u8BB8\u4E0A\u4F20\uFF0C\u8BF7\u4E0A\u4F20\u540E\u7F00\u4E3A").concat(allowFileSuffix, "\u7684\u7C7B\u578B\u6587\u4EF6\uFF01"));
|
|
247
|
+
return _context3.abrupt("return", false);
|
|
248
|
+
|
|
249
|
+
case 5:
|
|
250
|
+
if (!(maxSize !== false)) {
|
|
251
|
+
_context3.next = 11;
|
|
252
|
+
break;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
if (maxSize === true) {
|
|
256
|
+
maxSize = 100;
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
size = maxSize * 1024 * 1024;
|
|
260
|
+
|
|
261
|
+
if (!(size < file.size)) {
|
|
262
|
+
_context3.next = 11;
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
message.error("".concat(file.name, "\u6587\u4EF6\u5927\u5C0F\u8D85\u8FC7").concat(maxSize, "M\uFF0C\u8BF7\u91CD\u65B0\u4E0A\u4F20\uFF01"));
|
|
267
|
+
return _context3.abrupt("return", false);
|
|
268
|
+
|
|
269
|
+
case 11:
|
|
270
|
+
fileNames = [];
|
|
271
|
+
|
|
272
|
+
if (!checkSameFile) {
|
|
273
|
+
_context3.next = 18;
|
|
274
|
+
break;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
checkList = this.props.fileList ? fileListStore : fileList;
|
|
278
|
+
checkList.map(function (item) {
|
|
279
|
+
fileNames.push(item.name || item.fileName);
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
if (!(fileNames.indexOf(file.name) > -1 && showUploadList !== false)) {
|
|
283
|
+
_context3.next = 18;
|
|
284
|
+
break;
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
message.error("\u6587\u4EF6".concat(file.name, "\u5DF2\u5728\u4E0A\u4F20\u5217\u8868\u4E2D\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9\u6587\u4EF6\uFF01"));
|
|
288
|
+
return _context3.abrupt("return", false);
|
|
289
|
+
|
|
290
|
+
case 18:
|
|
291
|
+
if (!this.props.beforeUpload) {
|
|
292
|
+
_context3.next = 24;
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
_context3.next = 21;
|
|
297
|
+
return this.props.beforeUpload(file, ofileList);
|
|
298
|
+
|
|
299
|
+
case 21:
|
|
300
|
+
res = _context3.sent;
|
|
301
|
+
|
|
302
|
+
if (!(res === false)) {
|
|
303
|
+
_context3.next = 24;
|
|
304
|
+
break;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
return _context3.abrupt("return", false);
|
|
308
|
+
|
|
309
|
+
case 24:
|
|
310
|
+
newList = _toConsumableArray(fileList);
|
|
311
|
+
ofileList.map( /*#__PURE__*/function () {
|
|
312
|
+
var _ref2 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee2(item) {
|
|
313
|
+
var temp;
|
|
314
|
+
return regeneratorRuntime.wrap(function _callee2$(_context2) {
|
|
315
|
+
while (1) {
|
|
316
|
+
switch (_context2.prev = _context2.next) {
|
|
317
|
+
case 0:
|
|
318
|
+
if (!(allowFileSuffix && !_this2.checkFileType(item) || size < item.size || checkSameFile && fileNames.indexOf(item.name) > -1)) {
|
|
319
|
+
temp = {
|
|
320
|
+
fileName: item.name,
|
|
321
|
+
percent: 0,
|
|
322
|
+
status: "uploading",
|
|
323
|
+
uid: item.uid,
|
|
324
|
+
name: item.name,
|
|
325
|
+
type: item.type,
|
|
326
|
+
size: item.size
|
|
327
|
+
};
|
|
328
|
+
newList.push(temp);
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
case 1:
|
|
332
|
+
case "end":
|
|
333
|
+
return _context2.stop();
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}, _callee2);
|
|
337
|
+
}));
|
|
338
|
+
|
|
339
|
+
return function (_x4) {
|
|
340
|
+
return _ref2.apply(this, arguments);
|
|
341
|
+
};
|
|
342
|
+
}());
|
|
343
|
+
|
|
344
|
+
if (maxCount && newList.length > maxCount) {
|
|
345
|
+
length = newList.length - maxCount;
|
|
346
|
+
|
|
347
|
+
for (i = 0; i < length; i++) {
|
|
348
|
+
newList.splice(0, 1);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
onListChange && onListChange(newList);
|
|
353
|
+
this.setState({
|
|
354
|
+
fileList: newList
|
|
355
|
+
});
|
|
356
|
+
|
|
357
|
+
case 29:
|
|
358
|
+
case "end":
|
|
359
|
+
return _context3.stop();
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
}, _callee3, this);
|
|
363
|
+
}));
|
|
364
|
+
|
|
365
|
+
function beforeUpload(_x2, _x3) {
|
|
366
|
+
return _beforeUpload.apply(this, arguments);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
return beforeUpload;
|
|
370
|
+
}()
|
|
371
|
+
}, {
|
|
372
|
+
key: "checkFileType",
|
|
373
|
+
value: function checkFileType(file) {
|
|
374
|
+
var allowFileSuffix = this.props.allowFileSuffix;
|
|
375
|
+
var names = file.name.split(".");
|
|
376
|
+
var suffix = names[names.length - 1];
|
|
377
|
+
|
|
378
|
+
if (allowFileSuffix.indexOf(suffix) > -1) {
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
return false;
|
|
383
|
+
}
|
|
384
|
+
}, {
|
|
385
|
+
key: "onProcess",
|
|
386
|
+
value: function onProcess(_ref3) {
|
|
387
|
+
var percent = _ref3.percent,
|
|
388
|
+
file = _ref3.file;
|
|
389
|
+
var fileList = this.state.fileList;
|
|
390
|
+
var onListChange = this.props.onListChange;
|
|
391
|
+
var newList = [];
|
|
392
|
+
fileList.map(function (item) {
|
|
393
|
+
var newFile = _objectSpread({}, item);
|
|
394
|
+
|
|
395
|
+
if (file.uid == item.uid) {
|
|
396
|
+
newFile.percent = percent;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
newList.push(newFile);
|
|
400
|
+
});
|
|
401
|
+
this.setState({
|
|
402
|
+
fileList: newList
|
|
403
|
+
});
|
|
404
|
+
onListChange && onListChange(fileList);
|
|
405
|
+
}
|
|
406
|
+
}, {
|
|
407
|
+
key: "onComplete",
|
|
408
|
+
value: function onComplete(file) {
|
|
409
|
+
var fileList = this.state.fileList;
|
|
410
|
+
var newList = [];
|
|
411
|
+
fileList.map(function (item) {
|
|
412
|
+
var newFile = _objectSpread({}, item);
|
|
413
|
+
|
|
414
|
+
if (file.file.uid == item.uid) {
|
|
415
|
+
newFile.status = file.status == "success" ? "done" : file.status;
|
|
416
|
+
newFile.fileId = file.fileId;
|
|
417
|
+
newFile.url = "/api/jquick-resource/oss/endpoint/download-files?attachId=".concat(file.fileId, "&_tpk=").concat(window.localStorage.getItem("token"));
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
newList.push(newFile);
|
|
421
|
+
});
|
|
422
|
+
this.setState({
|
|
423
|
+
fileList: newList
|
|
424
|
+
});
|
|
425
|
+
var onListChange = this.props.onListChange;
|
|
426
|
+
onListChange && onListChange(newList);
|
|
427
|
+
}
|
|
428
|
+
}, {
|
|
429
|
+
key: "onDelete",
|
|
430
|
+
value: function onDelete(file) {
|
|
431
|
+
var fileList = this.state.fileList;
|
|
432
|
+
var onListChange = this.props.onListChange;
|
|
433
|
+
var newList = [];
|
|
434
|
+
fileList.map(function (item) {
|
|
435
|
+
//通过文件名判断,上传是文件名是唯一的
|
|
436
|
+
if (item.name !== file.name || item.fileId !== file.fileId || item.uid !== file.uid) {
|
|
437
|
+
newList.push(item);
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
this.setState({
|
|
441
|
+
fileList: newList
|
|
442
|
+
});
|
|
443
|
+
onListChange && onListChange(newList);
|
|
444
|
+
}
|
|
445
|
+
}, {
|
|
446
|
+
key: "render",
|
|
447
|
+
value: function render() {
|
|
448
|
+
var _this3 = this;
|
|
449
|
+
|
|
450
|
+
var _this$props3 = this.props,
|
|
451
|
+
fileList = _this$props3.fileList,
|
|
452
|
+
fileCard = _this$props3.fileCard,
|
|
453
|
+
_this$props3$showUplo = _this$props3.showUploadList,
|
|
454
|
+
showUploadList = _this$props3$showUplo === void 0 ? {
|
|
455
|
+
showDownloadIcon: true,
|
|
456
|
+
showPreviewIcon: false,
|
|
457
|
+
showRemoveIcon: true,
|
|
458
|
+
downloadIcon: null,
|
|
459
|
+
removeIcon: null,
|
|
460
|
+
previewIcon: null
|
|
461
|
+
} : _this$props3$showUplo;
|
|
462
|
+
var newprops = omit(this.props, ["sliceSize", "maxSize", "onComplete", "onProcess", "allowFileSuffix", "useDefaultList", "fileCard", "onListChange"]);
|
|
463
|
+
var defaultProps = {
|
|
464
|
+
customRequest: this.customRequest.bind(this),
|
|
465
|
+
multiple: true
|
|
466
|
+
};
|
|
467
|
+
|
|
468
|
+
if (fileCard) {
|
|
469
|
+
defaultProps = _objectSpread(_objectSpread({}, defaultProps), {}, {
|
|
470
|
+
itemRender: function itemRender(originNode, file, currFileList) {
|
|
471
|
+
var name = file.name || file.fileName;
|
|
472
|
+
var names = name === null || name === void 0 ? void 0 : name.split(".");
|
|
473
|
+
var suffix = names ? names[names.length - 1] : "";
|
|
474
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
475
|
+
className: getLess(styles, "file-item")
|
|
476
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
477
|
+
className: cls(getLess(styles, "content"), _defineProperty({}, getLess(styles, "content_error"), file.status == "error"))
|
|
478
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
479
|
+
className: getLess(styles, "mark-picture")
|
|
480
|
+
}, /*#__PURE__*/React.createElement(FileIcon, {
|
|
481
|
+
suffix: suffix,
|
|
482
|
+
fileId: file.fileId
|
|
483
|
+
})), /*#__PURE__*/React.createElement("div", {
|
|
484
|
+
className: getLess(styles, "name")
|
|
485
|
+
}, file.name || file.fileName), /*#__PURE__*/React.createElement("div", {
|
|
486
|
+
className: getLess(styles, "icon")
|
|
487
|
+
}, showUploadList.showPreviewIcon && file.status == "done" && /*#__PURE__*/React.createElement("div", {
|
|
488
|
+
onClick: function onClick() {
|
|
489
|
+
if (_this3.props.onPreview) {
|
|
490
|
+
_this3.props.onPreview(file);
|
|
491
|
+
} else {
|
|
492
|
+
previewDocument(file.fileId);
|
|
493
|
+
}
|
|
494
|
+
},
|
|
495
|
+
style: {
|
|
496
|
+
cursor: "pointer"
|
|
497
|
+
}
|
|
498
|
+
}, showUploadList.downloadIcon ? showUploadList.downloadIcon : /*#__PURE__*/React.createElement(EyeOutlined, null)), showUploadList.showDownloadIcon && file.status == "done" && /*#__PURE__*/React.createElement("div", {
|
|
499
|
+
onClick: function onClick() {
|
|
500
|
+
if (_this3.props.onDownload) {
|
|
501
|
+
_this3.props.onDownload(file);
|
|
502
|
+
} else {
|
|
503
|
+
download(file.fileId);
|
|
504
|
+
}
|
|
505
|
+
},
|
|
506
|
+
style: {
|
|
507
|
+
cursor: "pointer"
|
|
508
|
+
}
|
|
509
|
+
}, showUploadList.downloadIcon ? showUploadList.downloadIcon : /*#__PURE__*/React.createElement(DownloadOutlined, null)), showUploadList.showRemoveIcon && /*#__PURE__*/React.createElement("div", {
|
|
510
|
+
onClick: function onClick() {
|
|
511
|
+
if (_this3.props.onRemove) {
|
|
512
|
+
_this3.props.onRemove(file);
|
|
513
|
+
} else {
|
|
514
|
+
_this3.onDelete(file);
|
|
515
|
+
}
|
|
516
|
+
},
|
|
517
|
+
style: {
|
|
518
|
+
cursor: "pointer"
|
|
519
|
+
}
|
|
520
|
+
}, showUploadList.downloadIcon ? showUploadList.downloadIcon : /*#__PURE__*/React.createElement(DeleteOutlined, null)))), file.status == "uploading" && /*#__PURE__*/React.createElement("div", {
|
|
521
|
+
className: getLess(styles, "process")
|
|
522
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
523
|
+
className: getLess(styles, "percent"),
|
|
524
|
+
style: {
|
|
525
|
+
width: file.percent + "%"
|
|
526
|
+
}
|
|
527
|
+
})));
|
|
528
|
+
}
|
|
529
|
+
});
|
|
530
|
+
} else {
|
|
531
|
+
defaultProps = _objectSpread(_objectSpread({}, defaultProps), {}, {
|
|
532
|
+
onDownload: function onDownload(file) {
|
|
533
|
+
download(file.fileId);
|
|
534
|
+
},
|
|
535
|
+
onRemove: function onRemove(file) {
|
|
536
|
+
_this3.onDelete(file);
|
|
537
|
+
},
|
|
538
|
+
onPreview: function onPreview(file) {
|
|
539
|
+
if (file !== null && file !== void 0 && file.fileId) {
|
|
540
|
+
previewDocument(file.fileId);
|
|
541
|
+
}
|
|
542
|
+
},
|
|
543
|
+
showUploadList: _objectSpread({}, showUploadList)
|
|
544
|
+
});
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(_Upload, _extends({}, defaultProps, newprops, {
|
|
548
|
+
beforeUpload: this.beforeUpload.bind(this),
|
|
549
|
+
fileList: this.state.fileList // onChange={({ file, fileList, event }) => {
|
|
550
|
+
// console.log("onChangefile", file);
|
|
551
|
+
// console.log("onChangefileList", fileList);
|
|
552
|
+
// const { onChange, onListChange } = this.props;
|
|
553
|
+
// this.setState({
|
|
554
|
+
// fileList: fileList,
|
|
555
|
+
// });
|
|
556
|
+
// onListChange && onListChange(fileList);
|
|
557
|
+
// onChange && onChange({ file, fileList, event });
|
|
558
|
+
// }}
|
|
559
|
+
|
|
560
|
+
})));
|
|
561
|
+
}
|
|
562
|
+
}]);
|
|
563
|
+
|
|
564
|
+
return NscUpload;
|
|
565
|
+
}(React.PureComponent); // export default withZhLocale(NscUpload);
|
|
566
|
+
|
|
567
|
+
|
|
568
|
+
_defineProperty(NscUpload, "Dragger", Dragger);
|
|
569
|
+
|
|
570
|
+
export { NscUpload as default };
|
|
571
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2Jhc2UvdXBsb2FkL1VwbG9hZC50c3giXSwibmFtZXMiOlsiUmVhY3QiLCJmaWxlIiwibWVzc2FnZSIsIm9taXQiLCJnZXRMZXNzIiwic3R5bGVzIiwiY2xzIiwiRmlsZUljb24iLCJEZWxldGVPdXRsaW5lZCIsIkRvd25sb2FkT3V0bGluZWQiLCJFeWVPdXRsaW5lZCIsInVwbG9hZCIsImRvd25sb2FkIiwicHJldmlld0RvY3VtZW50IiwiRHJhZ2dlciIsIk5zY1VwbG9hZCIsImZpbGVMaXN0Iiwidmlld0lkIiwiZmlsZUxpc3RTdG9yZSIsImZpbGVOYW1lcyIsIm9wdGlvbnMiLCJwcm9wcyIsIm9uQ29tcGxldGUiLCJvblByb2Nlc3MiLCJzbGljZVNpemUiLCJvblByb2dyZXNzIiwidG90YWxQcm9ncmVzcyIsInBlcmNlbnQiLCJwYXJ0U2l6ZSIsInJlcyIsImZpbGVJZCIsImNvZGUiLCJkYXRhIiwiYXR0YWNoSWQiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwic3RhdHVzIiwiY29udmVydEZpbGVMaXN0IiwibGlzdCIsIm5ld0ZpbGVMaXN0Iiwib2xkTGlzdCIsIm1hcCIsIml0ZW0iLCJ0ZW1wIiwibmFtZSIsImZpbGVOYW1lIiwidHlwZSIsInNpemUiLCJwdXNoIiwic2V0U3RhdGUiLCJwcmVQcm9wcyIsInByZVN0YXRlIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXRlIiwib2ZpbGVMaXN0IiwibWF4U2l6ZSIsImFsbG93RmlsZVN1ZmZpeCIsImNoZWNrU2FtZUZpbGUiLCJtYXhDb3VudCIsInNob3dVcGxvYWRMaXN0IiwicHJvcHNMaXN0Iiwib25MaXN0Q2hhbmdlIiwiY2hlY2tGaWxlVHlwZSIsImVycm9yIiwiY2hlY2tMaXN0IiwiaW5kZXhPZiIsImJlZm9yZVVwbG9hZCIsIm5ld0xpc3QiLCJ1aWQiLCJsZW5ndGgiLCJpIiwic3BsaWNlIiwibmFtZXMiLCJzcGxpdCIsInN1ZmZpeCIsIm5ld0ZpbGUiLCJ1cmwiLCJ3aW5kb3ciLCJsb2NhbFN0b3JhZ2UiLCJnZXRJdGVtIiwiZmlsZUNhcmQiLCJzaG93RG93bmxvYWRJY29uIiwic2hvd1ByZXZpZXdJY29uIiwic2hvd1JlbW92ZUljb24iLCJkb3dubG9hZEljb24iLCJyZW1vdmVJY29uIiwicHJldmlld0ljb24iLCJuZXdwcm9wcyIsImRlZmF1bHRQcm9wcyIsImN1c3RvbVJlcXVlc3QiLCJiaW5kIiwibXVsdGlwbGUiLCJpdGVtUmVuZGVyIiwib3JpZ2luTm9kZSIsImN1cnJGaWxlTGlzdCIsIm9uUHJldmlldyIsImN1cnNvciIsIm9uRG93bmxvYWQiLCJvblJlbW92ZSIsIm9uRGVsZXRlIiwid2lkdGgiLCJQdXJlQ29tcG9uZW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxLQUFLQSxLQUFaLE1BQXVCLE9BQXZCO0FBRUEsT0FBT0MsSUFBUCxNQUFpQixVQUFqQjtBQUNBLE9BQU9DLE9BQVAsTUFBb0IsWUFBcEI7QUFFQSxPQUFPQyxJQUFQLE1BQWlCLFNBQWpCO0FBQ0EsU0FBU0MsT0FBVCxRQUF3QixhQUF4QjtBQUNBLE9BQU9DLE1BQVAsTUFBbUIsY0FBbkI7QUFDQSxPQUFPQyxHQUFQLE1BQWdCLFlBQWhCO0FBQ0EsT0FBT0MsUUFBUCxNQUFxQixvQkFBckI7QUFDQSxTQUNFQyxjQURGLEVBRUVDLGdCQUZGLEVBR0VDLFdBSEYsUUFJTyxtQkFKUDtBQU1BLElBQVFDLE1BQVIsR0FBOENWLElBQTlDLENBQVFVLE1BQVI7QUFBQSxJQUFnQkMsUUFBaEIsR0FBOENYLElBQTlDLENBQWdCVyxRQUFoQjtBQUFBLElBQTBCQyxlQUExQixHQUE4Q1osSUFBOUMsQ0FBMEJZLGVBQTFCO0FBQ0EsSUFBUUMsT0FBUixXQUFRQSxPQUFSOztJQVlxQkMsUzs7Ozs7Ozs7Ozs7Ozs7Ozs0REFFWDtBQUFFQyxNQUFBQSxRQUFRLEVBQUUsRUFBWjtBQUFnQkMsTUFBQUEsTUFBTSxF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QUFDRDtBQUNGLFdBWlM7QUFhVjhCLFVBQUFBLGNBQWMsb0JBQU9BLGNBQVA7QUFiSixVQUFaO0FBZUQ7O0FBQ0QsMEJBQ0UsdURBQ0UsMENBQ002QixZQUROLEVBRU1ELFFBRk47QUFHRSxRQUFBLFlBQVksRUFBRSxLQUFLckIsWUFBTCxDQUFrQndCLElBQWxCLENBQXVCLElBQXZCLENBSGhCO0FBSUUsUUFBQSxRQUFRLEVBQUUsS0FBS3JDLEtBQUwsQ0FBV3RDLFFBSnZCLENBS0U7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBZEYsU0FERixDQURGO0FBb0JEOzs7O0VBNVhvQ2hCLEtBQUssQ0FBQ3NHLGEsR0E4WDdDOzs7Z0JBOVhxQnZGLFMsYUFDRkQsTzs7U0FERUMsUyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xyXG5pbXBvcnQgeyBVcGxvYWQsIFVwbG9hZFByb3BzIH0gZnJvbSBcImFudGRcIjtcclxuaW1wb3J0IGZpbGUgZnJvbSBcIm5zYy1maWxlXCI7XHJcbmltcG9ydCBtZXNzYWdlIGZyb20gXCIuLi9tZXNzYWdlXCI7XHJcbmltcG9ydCB3aXRoWmhMb2NhbGUgZnJvbSBcIi4uL2NvbW1vbi93aXRoWmhMb2NhbGVcIjtcclxuaW1wb3J0IG9taXQgZnJvbSBcIm9taXQuanNcIjtcclxuaW1wb3J0IHsgZ2V0TGVzcyB9IGZyb20gXCIuLi8uLi91dGlsc1wiO1xyXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL2luZGV4Lmxlc3NcIjtcclxuaW1wb3J0IGNscyBmcm9tIFwiY2xhc3NuYW1lc1wiO1xyXG5pbXBvcnQgRmlsZUljb24gZnJvbSBcIi4uL2NvbW1vbi9GaWxlSWNvblwiO1xyXG5pbXBvcnQge1xyXG4gIERlbGV0ZU91dGxpbmVkLFxyXG4gIERvd25sb2FkT3V0bGluZWQsXHJcbiAgRXllT3V0bGluZWQsXHJcbn0gZnJvbSBcIkBhbnQtZGVzaWduL2ljb25zXCI7XHJcbmltcG9ydCBQZGZWaWV3ZXIgZnJvbSBcIi4uL3BkZnZpd2VyXCI7XHJcbmNvbnN0IHsgdXBsb2FkLCBkb3dubG9hZCwgcHJldmlld0RvY3VtZW50IH0gPSBmaWxlO1xyXG5jb25zdCB7IERyYWdnZXIgfSA9IFVwbG9hZDtcclxuaW50ZXJmYWNlIElVcGxvYWRQcm9wcyBleHRlbmRzIFVwbG9hZFByb3BzIHtcclxuICBzbGljZVNpemU/OiBudW1iZXI7XHJcbiAgbWF4U2l6ZT86IG51bWJlciB8IGJvb2xlYW47XHJcbiAgb25Qcm9jZXNzPzogKHByb2Nlc3MpID0+IHZvaWQ7XHJcbiAgb25Db21wbGV0ZT86ICh7IGZpbGUsIGZpbGVJZCwgc3RhdHVzIH0pID0+IHZvaWQ7XHJcbiAgYWxsb3dGaWxlU3VmZml4PzogQXJyYXk8U3RyaW5nPjsgLy/lhYHorrjkuIrkvKDmianlsZXlkI0s5LiN5bimLlxyXG4gIHVzZURlZmF1bHRMaXN0PzogYm9vbGVhbjsgLy/mmK/lkKbkvb/nlKjpu5jorqTnmoRmaWxlTGlzdFxyXG4gIGZpbGVDYXJkPzogYm9vbGVhbjtcclxuICBvbkxpc3RDaGFuZ2U/OiBhbnk7XHJcbiAgY2hlY2tTYW1lRmlsZT86IGJvb2xlYW47XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTnNjVXBsb2FkIGV4dGVuZHMgUmVhY3QuUHVyZUNvbXBvbmVudDxJVXBsb2FkUHJvcHMsIGFueT4ge1xyXG4gIHN0YXRpYyBEcmFnZ2VyID0gRHJhZ2dlcjtcclxuICBzdGF0ZSA9IHsgZmlsZUxpc3Q6IFtdLCB2aWV3SWQ6IFwiXCIsIGZpbGVMaXN0U3RvcmU6IFtdLCBmaWxlTmFtZXM6IFtdIH07XHJcbiAgY29tcG9uZW50RGlkTW91bnQoKSB7XHJcbiAgICBpZiAodGhpcy5wcm9wcy5maWxlTGlzdCkge1xyXG4gICAgICB0aGlzLmNvbnZlcnRGaWxlTGlzdCgpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjb252ZXJ0RmlsZUxpc3QobGlzdD86IEFycmF5PE9iamVjdD4pIHtcclxuICAgIGNvbnN0IHsgZmlsZUxpc3QgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBjb25zdCBuZXdGaWxlTGlzdCA9IFtdO1xyXG4gICAgbGV0IG9sZExpc3QgPSBsaXN0ID8gbGlzdCA6IGZpbGVMaXN0O1xyXG4gICAgb2xkTGlzdC5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBsZXQgdGVtcCA9IHtcclxuICAgICAgICAuLi5pdGVtLFxyXG4gICAgICAgIG5hbWU6IGl0ZW0ubmFtZSB8fCBpdGVtLmZpbGVOYW1lLFxyXG4gICAgICAgIHR5cGU6IGl0ZW0udHlwZSxcclxuICAgICAgICBzaXplOiBpdGVtLnNpemUsXHJcbiAgICAgIH07XHJcbiAgICAgIG5ld0ZpbGVMaXN0LnB1c2godGVtcCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBmaWxlTGlzdDogbmV3RmlsZUxpc3QsXHJcbiAgICAgIGZpbGVMaXN0U3RvcmU6IGZpbGVMaXN0LFxyXG4gICAgfSk7XHJcbiAgfVxyXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmVQcm9wcywgcHJlU3RhdGUpIHtcclxuICAgIGlmICh0aGlzLnByb3BzLmZpbGVMaXN0KSB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnByb3BzLmZpbGVMaXN0KSAhPT1cclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXRlLmZpbGVMaXN0U3RvcmUpXHJcbiAgICAgICkge1xyXG4gICAgICAgIHRoaXMuY29udmVydEZpbGVMaXN0KCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgZ2V0RmlsZUxpc3QoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5maWxlTGlzdDtcclxuICB9XHJcbiAgc2V0RmlsZUxpc3QoZmlsZUxpc3Q6IEFycmF5PE9iamVjdD4pIHtcclxuICAgIHRoaXMuY29udmVydEZpbGVMaXN0KGZpbGVMaXN0KTtcclxuICB9XHJcbiAgYXN5bmMgYmVmb3JlVXBsb2FkKGZpbGUsIG9maWxlTGlzdCkge1xyXG4gICAgbGV0IHtcclxuICAgICAgbWF4U2l6ZSA9IDEwMCxcclxuICAgICAgYWxsb3dGaWxlU3VmZml4LFxyXG4gICAgICBjaGVja1NhbWVGaWxlID0gdHJ1ZSxcclxuICAgICAgbWF4Q291bnQsXHJcbiAgICAgIHNob3dVcGxvYWRMaXN0LFxyXG4gICAgICBmaWxlTGlzdDogcHJvcHNMaXN0LFxyXG4gICAgICBvbkxpc3RDaGFuZ2UsXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGxldCB7IGZpbGVMaXN0LCBmaWxlTGlzdFN0b3JlIH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgbGV0IHNpemU6IG51bWJlcjtcclxuICAgIGlmIChhbGxvd0ZpbGVTdWZmaXggJiYgIXRoaXMuY2hlY2tGaWxlVHlwZShmaWxlKSkge1xyXG4gICAgICBtZXNzYWdlLmVycm9yKFxyXG4gICAgICAgIGAke2ZpbGUubmFtZX3mlofku7bnsbvlnovkuI3lhYHorrjkuIrkvKDvvIzor7fkuIrkvKDlkI7nvIDkuLoke2FsbG93RmlsZVN1ZmZpeH3nmoTnsbvlnovmlofku7bvvIFgXHJcbiAgICAgICk7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmIChtYXhTaXplICE9PSBmYWxzZSkge1xyXG4gICAgICBpZiAobWF4U2l6ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgIG1heFNpemUgPSAxMDA7XHJcbiAgICAgIH1cclxuICAgICAgc2l6ZSA9IG1heFNpemUgKiAxMDI0ICogMTAyNDtcclxuICAgICAgaWYgKHNpemUgPCBmaWxlLnNpemUpIHtcclxuICAgICAgICBtZXNzYWdlLmVycm9yKGAke2ZpbGUubmFtZX3mlofku7blpKflsI/otoXov4cke21heFNpemV9Te+8jOivt+mHjeaWsOS4iuS8oO+8gWApO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGZpbGVOYW1lcyA9IFtdO1xyXG4gICAgaWYgKGNoZWNrU2FtZUZpbGUpIHtcclxuICAgICAgY29uc3QgY2hlY2tMaXN0ID0gdGhpcy5wcm9wcy5maWxlTGlzdCA/IGZpbGVMaXN0U3RvcmUgOiBmaWxlTGlzdDtcclxuICAgICAgY2hlY2tMaXN0Lm1hcCgoaXRlbSkgPT4ge1xyXG4gICAgICAgIGZpbGVOYW1lcy5wdXNoKGl0ZW0ubmFtZSB8fCBpdGVtLmZpbGVOYW1lKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgICBpZiAoZmlsZU5hbWVzLmluZGV4T2YoZmlsZS5uYW1lKSA+IC0xICYmIHNob3dVcGxvYWRMaXN0ICE9PSBmYWxzZSkge1xyXG4gICAgICAgIG1lc3NhZ2UuZXJyb3IoYOaWh+S7tiR7ZmlsZS5uYW1lfeW3suWcqOS4iuS8oOWIl+ihqOS4re+8jOivt+mHjeaWsOmAieaLqeaWh+S7tu+8gWApO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLnByb3BzLmJlZm9yZVVwbG9hZCkge1xyXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLnByb3BzLmJlZm9yZVVwbG9hZChmaWxlLCBvZmlsZUxpc3QpO1xyXG4gICAgICBpZiAocmVzID09PSBmYWxzZSkge1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3QgbmV3TGlzdCA9IFsuLi5maWxlTGlzdF07XHJcbiAgICBvZmlsZUxpc3QubWFwKGFzeW5jIChpdGVtKSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICAhKFxyXG4gICAgICAgICAgKGFsbG93RmlsZVN1ZmZpeCAmJiAhdGhpcy5jaGVja0ZpbGVUeXBlKGl0ZW0pKSB8fFxyXG4gICAgICAgICAgc2l6ZSA8IGl0ZW0uc2l6ZSB8fFxyXG4gICAgICAgICAgKGNoZWNrU2FtZUZpbGUgJiYgZmlsZU5hbWVzLmluZGV4T2YoaXRlbS5uYW1lKSA+IC0xKVxyXG4gICAgICAgIClcclxuICAgICAgKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcCA9IHtcclxuICAgICAgICAgIGZpbGVOYW1lOiBpdGVtLm5hbWUsXHJcbiAgICAgICAgICBwZXJjZW50OiAwLFxyXG4gICAgICAgICAgc3RhdHVzOiBcInVwbG9hZGluZ1wiLFxyXG4gICAgICAgICAgdWlkOiBpdGVtLnVpZCxcclxuICAgICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICAgIHR5cGU6IGl0ZW0udHlwZSxcclxuICAgICAgICAgIHNpemU6IGl0ZW0uc2l6ZSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIG5ld0xpc3QucHVzaCh0ZW1wKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKG1heENvdW50ICYmIG5ld0xpc3QubGVuZ3RoID4gbWF4Q291bnQpIHtcclxuICAgICAgbGV0IGxlbmd0aCA9IG5ld0xpc3QubGVuZ3RoIC0gbWF4Q291bnQ7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBuZXdMaXN0LnNwbGljZSgwLCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgb25MaXN0Q2hhbmdlICYmIG9uTGlzdENoYW5nZShuZXdMaXN0KTtcclxuICAgIHRoaXMuc2V0U3RhdGUoeyBmaWxlTGlzdDogbmV3TGlzdCB9KTtcclxuICB9XHJcbiAgY2hlY2tGaWxlVHlwZShmaWxlKSB7XHJcbiAgICBjb25zdCB7IGFsbG93RmlsZVN1ZmZpeCB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IG5hbWVzID0gZmlsZS5uYW1lLnNwbGl0KFwiLlwiKTtcclxuICAgIGNvbnN0IHN1ZmZpeCA9IG5hbWVzW25hbWVzLmxlbmd0aCAtIDFdO1xyXG4gICAgaWYgKGFsbG93RmlsZVN1ZmZpeC5pbmRleE9mKHN1ZmZpeCkgPiAtMSkge1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgb25Qcm9jZXNzKHsgcGVyY2VudCwgZmlsZSB9OiBhbnkpIHtcclxuICAgIGNvbnN0IHsgZmlsZUxpc3QgfSA9IHRoaXMuc3RhdGU7XHJcbiAgICBjb25zdCB7IG9uTGlzdENoYW5nZSB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IG5ld0xpc3Q6IGFueSA9IFtdO1xyXG4gICAgZmlsZUxpc3QubWFwKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgY29uc3QgbmV3RmlsZSA9IHsgLi4uaXRlbSB9O1xyXG4gICAgICBpZiAoZmlsZS51aWQgPT0gaXRlbS51aWQpIHtcclxuICAgICAgICBuZXdGaWxlLnBlcmNlbnQgPSBwZXJjZW50O1xyXG4gICAgICB9XHJcbiAgICAgIG5ld0xpc3QucHVzaChuZXdGaWxlKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgIGZpbGVMaXN0OiBuZXdMaXN0LFxyXG4gICAgfSk7XHJcbiAgICBvbkxpc3RDaGFuZ2UgJiYgb25MaXN0Q2hhbmdlKGZpbGVMaXN0KTtcclxuICB9XHJcbiAgb25Db21wbGV0ZShmaWxlKSB7XHJcbiAgICBjb25zdCB7IGZpbGVMaXN0IH0gPSB0aGlzLnN0YXRlO1xyXG4gICAgY29uc3QgbmV3TGlzdDogYW55ID0gW107XHJcbiAgICBmaWxlTGlzdC5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBuZXdGaWxlID0geyAuLi5pdGVtIH07XHJcbiAgICAgIGlmIChmaWxlLmZpbGUudWlkID09IGl0ZW0udWlkKSB7XHJcbiAgICAgICAgbmV3RmlsZS5zdGF0dXMgPSBmaWxlLnN0YXR1cyA9PSBcInN1Y2Nlc3NcIiA/IFwiZG9uZVwiIDogZmlsZS5zdGF0dXM7XHJcbiAgICAgICAgbmV3RmlsZS5maWxlSWQgPSBmaWxlLmZpbGVJZDtcclxuICAgICAgICBuZXdGaWxlLnVybCA9IGAvYXBpL2pxdWljay1yZXNvdXJjZS9vc3MvZW5kcG9pbnQvZG93bmxvYWQtZmlsZXM/YXR0YWNoSWQ9JHtcclxuICAgICAgICAgIGZpbGUuZmlsZUlkXHJcbiAgICAgICAgfSZfdHBrPSR7d2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKFwidG9rZW5cIil9YDtcclxuICAgICAgfVxyXG4gICAgICBuZXdMaXN0LnB1c2gobmV3RmlsZSk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBmaWxlTGlzdDogbmV3TGlzdCxcclxuICAgIH0pO1xyXG4gICAgY29uc3QgeyBvbkxpc3RDaGFuZ2UgfSA9IHRoaXMucHJvcHM7XHJcbiAgICBvbkxpc3RDaGFuZ2UgJiYgb25MaXN0Q2hhbmdlKG5ld0xpc3QpO1xyXG4gIH1cclxuICBjdXN0b21SZXF1ZXN0ID0gYXN5bmMgKG9wdGlvbnMpID0+IHtcclxuICAgIGNvbnN0IGZpbGUgPSBvcHRpb25zLmZpbGU7XHJcbiAgICBjb25zdCB7IG9uQ29tcGxldGUsIG9uUHJvY2Vzcywgc2xpY2VTaXplIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3Qgb25Qcm9ncmVzcyA9ICh0b3RhbFByb2dyZXNzOiBhbnkpID0+IHtcclxuICAgICAgb3B0aW9ucy5vblByb2dyZXNzKHsgcGVyY2VudDogdG90YWxQcm9ncmVzcyB9LCBmaWxlKTtcclxuICAgICAgdGhpcy5vblByb2Nlc3MoeyBwZXJjZW50OiB0b3RhbFByb2dyZXNzLCBmaWxlOiBmaWxlIH0pO1xyXG4gICAgICBvblByb2Nlc3MgJiYgb25Qcm9jZXNzKHsgcGVyY2VudDogdG90YWxQcm9ncmVzcywgZmlsZTogZmlsZSB9KTtcclxuICAgIH07XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCByZXM6IGFueSA9IGF3YWl0IHVwbG9hZCh7XHJcbiAgICAgICAgZmlsZTogZmlsZSxcclxuICAgICAgICBvblByb2dyZXNzOiBvblByb2dyZXNzLFxyXG4gICAgICAgIHBhcnRTaXplOiBzbGljZVNpemUsXHJcbiAgICAgIH0pO1xyXG4gICAgICBsZXQgZmlsZUlkID0gbnVsbDtcclxuICAgICAgaWYgKHJlcy5jb2RlID09IDIwMCkge1xyXG4gICAgICAgIGZpbGVJZCA9IHJlcy5kYXRhLmF0dGFjaElkO1xyXG4gICAgICAgIG9wdGlvbnMub25TdWNjZXNzKCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgb3B0aW9ucy5vbkVycm9yKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5vbkNvbXBsZXRlKHtcclxuICAgICAgICBmaWxlOiBvcHRpb25zLmZpbGUsXHJcbiAgICAgICAgZmlsZUlkOiBmaWxlSWQsXHJcbiAgICAgICAgc3RhdHVzOiByZXMuY29kZSA9PSAyMDAgPyBcInN1Y2Nlc3NcIiA6IFwiZXJyb3JcIixcclxuICAgICAgfSk7XHJcbiAgICAgIG9uQ29tcGxldGUgJiZcclxuICAgICAgICBvbkNvbXBsZXRlKHtcclxuICAgICAgICAgIGZpbGU6IG9wdGlvbnMuZmlsZSxcclxuICAgICAgICAgIGZpbGVJZDogZmlsZUlkLFxyXG4gICAgICAgICAgc3RhdHVzOiByZXMuY29kZSA9PSAyMDAgPyBcInN1Y2Nlc3NcIiA6IFwiZXJyb3JcIixcclxuICAgICAgICB9KTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgdGhpcy5vbkNvbXBsZXRlKHtcclxuICAgICAgICBmaWxlOiBvcHRpb25zLmZpbGUsXHJcbiAgICAgICAgZmlsZUlkOiBcIlwiLFxyXG4gICAgICAgIHN0YXR1czogXCJlcnJvclwiLFxyXG4gICAgICB9KTtcclxuICAgICAgb25Db21wbGV0ZSAmJlxyXG4gICAgICAgIG9uQ29tcGxldGUoeyBmaWxlOiBvcHRpb25zLmZpbGUsIGZpbGVJZDogXCJcIiwgc3RhdHVzOiBcImVycm9yXCIgfSk7XHJcbiAgICAgIG9wdGlvbnMub25FcnJvcigpO1xyXG4gICAgfVxyXG4gIH07XHJcbiAgb25EZWxldGUoZmlsZSkge1xyXG4gICAgY29uc3QgeyBmaWxlTGlzdCB9ID0gdGhpcy5zdGF0ZTtcclxuICAgIGNvbnN0IHsgb25MaXN0Q2hhbmdlIH0gPSB0aGlzLnByb3BzO1xyXG4gICAgY29uc3QgbmV3TGlzdDogYW55ID0gW107XHJcbiAgICBmaWxlTGlzdC5tYXAoKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAvL+mAmui/h+aWh+S7tuWQjeWIpOaWre+8jOS4iuS8oOaYr+aWh+S7tuWQjeaYr+WUr+S4gOeahFxyXG4gICAgICBpZiAoXHJcbiAgICAgICAgaXRlbS5uYW1lICE9PSBmaWxlLm5hbWUgfHxcclxuICAgICAgICBpdGVtLmZpbGVJZCAhPT0gZmlsZS5maWxlSWQgfHxcclxuICAgICAgICBpdGVtLnVpZCAhPT0gZmlsZS51aWRcclxuICAgICAgKSB7XHJcbiAgICAgICAgbmV3TGlzdC5wdXNoKGl0ZW0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc2V0U3RhdGUoe1xyXG4gICAgICBmaWxlTGlzdDogbmV3TGlzdCxcclxuICAgIH0pO1xyXG4gICAgb25MaXN0Q2hhbmdlICYmIG9uTGlzdENoYW5nZShuZXdMaXN0KTtcclxuICB9XHJcbiAgcmVuZGVyKCk6IFJlYWN0LlJlYWN0Tm9kZSB7XHJcbiAgICBsZXQge1xyXG4gICAgICBmaWxlTGlzdCxcclxuICAgICAgZmlsZUNhcmQsXHJcbiAgICAgIHNob3dVcGxvYWRMaXN0ID0ge1xyXG4gICAgICAgIHNob3dEb3dubG9hZEljb246IHRydWUsXHJcbiAgICAgICAgc2hvd1ByZXZpZXdJY29uOiBmYWxzZSxcclxuICAgICAgICBzaG93UmVtb3ZlSWNvbjogdHJ1ZSxcclxuICAgICAgICBkb3dubG9hZEljb246IG51bGwsXHJcbiAgICAgICAgcmVtb3ZlSWNvbjogbnVsbCxcclxuICAgICAgICBwcmV2aWV3SWNvbjogbnVsbCxcclxuICAgICAgfSBhcyBhbnksXHJcbiAgICB9ID0gdGhpcy5wcm9wcztcclxuICAgIGNvbnN0IG5ld3Byb3BzID0gb21pdCh0aGlzLnByb3BzLCBbXHJcbiAgICAgIFwic2xpY2VTaXplXCIsXHJcbiAgICAgIFwibWF4U2l6ZVwiLFxyXG4gICAgICBcIm9uQ29tcGxldGVcIixcclxuICAgICAgXCJvblByb2Nlc3NcIixcclxuICAgICAgXCJhbGxvd0ZpbGVTdWZmaXhcIixcclxuICAgICAgXCJ1c2VEZWZhdWx0TGlzdFwiLFxyXG4gICAgICBcImZpbGVDYXJkXCIsXHJcbiAgICAgIFwib25MaXN0Q2hhbmdlXCIsXHJcbiAgICBdKTtcclxuICAgIGxldCBkZWZhdWx0UHJvcHMgPSB7XHJcbiAgICAgIGN1c3RvbVJlcXVlc3Q6IHRoaXMuY3VzdG9tUmVxdWVzdC5iaW5kKHRoaXMpLFxyXG4gICAgICBtdWx0aXBsZTogdHJ1ZSxcclxuICAgIH0gYXMgSVVwbG9hZFByb3BzO1xyXG4gICAgaWYgKGZpbGVDYXJkKSB7XHJcbiAgICAgIGRlZmF1bHRQcm9wcyA9IHtcclxuICAgICAgICAuLi5kZWZhdWx0UHJvcHMsXHJcbiAgICAgICAgaXRlbVJlbmRlcjogKG9yaWdpbk5vZGUsIGZpbGU6IGFueSwgY3VyckZpbGVMaXN0KSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBuYW1lID0gZmlsZS5uYW1lIHx8IGZpbGUuZmlsZU5hbWU7XHJcbiAgICAgICAgICBjb25zdCBuYW1lcyA9IG5hbWU/LnNwbGl0KFwiLlwiKTtcclxuICAgICAgICAgIGNvbnN0IHN1ZmZpeCA9IG5hbWVzID8gbmFtZXNbbmFtZXMubGVuZ3RoIC0gMV0gOiBcIlwiO1xyXG4gICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcImZpbGUtaXRlbVwiKX0+XHJcbiAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbHMoZ2V0TGVzcyhzdHlsZXMsIFwiY29udGVudFwiKSwge1xyXG4gICAgICAgICAgICAgICAgICBbZ2V0TGVzcyhzdHlsZXMsIFwiY29udGVudF9lcnJvclwiKV06IGZpbGUuc3RhdHVzID09IFwiZXJyb3JcIixcclxuICAgICAgICAgICAgICAgIH0pfVxyXG4gICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJtYXJrLXBpY3R1cmVcIil9PlxyXG4gICAgICAgICAgICAgICAgICA8RmlsZUljb24gc3VmZml4PXtzdWZmaXh9IGZpbGVJZD17ZmlsZS5maWxlSWR9IC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJuYW1lXCIpfT5cclxuICAgICAgICAgICAgICAgICAge2ZpbGUubmFtZSB8fCBmaWxlLmZpbGVOYW1lfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Z2V0TGVzcyhzdHlsZXMsIFwiaWNvblwiKX0+XHJcbiAgICAgICAgICAgICAgICAgIHtzaG93VXBsb2FkTGlzdC5zaG93UHJldmlld0ljb24gJiYgZmlsZS5zdGF0dXMgPT0gXCJkb25lXCIgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMub25QcmV2aWV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblByZXZpZXcoZmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlld0RvY3VtZW50KGZpbGUuZmlsZUlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IGN1cnNvcjogXCJwb2ludGVyXCIgfX1cclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICB7c2hvd1VwbG9hZExpc3QuZG93bmxvYWRJY29uID8gKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93VXBsb2FkTGlzdC5kb3dubG9hZEljb25cclxuICAgICAgICAgICAgICAgICAgICAgICkgOiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxFeWVPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAge3Nob3dVcGxvYWRMaXN0LnNob3dEb3dubG9hZEljb24gJiYgZmlsZS5zdGF0dXMgPT0gXCJkb25lXCIgJiYgKFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucHJvcHMub25Eb3dubG9hZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJvcHMub25Eb3dubG9hZChmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkb3dubG9hZChmaWxlLmZpbGVJZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT17eyBjdXJzb3I6IFwicG9pbnRlclwiIH19XHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAge3Nob3dVcGxvYWRMaXN0LmRvd25sb2FkSWNvbiA/IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd1VwbG9hZExpc3QuZG93bmxvYWRJY29uXHJcbiAgICAgICAgICAgICAgICAgICAgICApIDogKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8RG93bmxvYWRPdXRsaW5lZCAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgKX1cclxuICAgICAgICAgICAgICAgICAge3Nob3dVcGxvYWRMaXN0LnNob3dSZW1vdmVJY29uICYmIChcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnByb3BzLm9uUmVtb3ZlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9wcy5vblJlbW92ZShmaWxlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uRGVsZXRlKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3sgY3Vyc29yOiBcInBvaW50ZXJcIiB9fVxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIHtzaG93VXBsb2FkTGlzdC5kb3dubG9hZEljb24gPyAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dVcGxvYWRMaXN0LmRvd25sb2FkSWNvblxyXG4gICAgICAgICAgICAgICAgICAgICAgKSA6IChcclxuICAgICAgICAgICAgICAgICAgICAgICAgPERlbGV0ZU91dGxpbmVkIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAge2ZpbGUuc3RhdHVzID09IFwidXBsb2FkaW5nXCIgJiYgKFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2dldExlc3Moc3R5bGVzLCBcInByb2Nlc3NcIil9PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMZXNzKHN0eWxlcywgXCJwZXJjZW50XCIpfVxyXG4gICAgICAgICAgICAgICAgICAgIHN0eWxlPXt7IHdpZHRoOiBmaWxlLnBlcmNlbnQgKyBcIiVcIiB9fVxyXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICApfVxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGRlZmF1bHRQcm9wcyA9IHtcclxuICAgICAgICAuLi5kZWZhdWx0UHJvcHMsXHJcbiAgICAgICAgb25Eb3dubG9hZDogKGZpbGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZG93bmxvYWQoZmlsZS5maWxlSWQpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25SZW1vdmU6IChmaWxlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9uRGVsZXRlKGZpbGUpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgb25QcmV2aWV3OiAoZmlsZTogYW55KSA9PiB7XHJcbiAgICAgICAgICBpZiAoZmlsZT8uZmlsZUlkKSB7XHJcbiAgICAgICAgICAgIHByZXZpZXdEb2N1bWVudChmaWxlLmZpbGVJZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzaG93VXBsb2FkTGlzdDogeyAuLi5zaG93VXBsb2FkTGlzdCB9LFxyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgPD5cclxuICAgICAgICA8VXBsb2FkXHJcbiAgICAgICAgICB7Li4uZGVmYXVsdFByb3BzfVxyXG4gICAgICAgICAgey4uLm5ld3Byb3BzfVxyXG4gICAgICAgICAgYmVmb3JlVXBsb2FkPXt0aGlzLmJlZm9yZVVwbG9hZC5iaW5kKHRoaXMpfVxyXG4gICAgICAgICAgZmlsZUxpc3Q9e3RoaXMuc3RhdGUuZmlsZUxpc3R9XHJcbiAgICAgICAgICAvLyBvbkNoYW5nZT17KHsgZmlsZSwgZmlsZUxpc3QsIGV2ZW50IH0pID0+IHtcclxuICAgICAgICAgIC8vICAgY29uc29sZS5sb2coXCJvbkNoYW5nZWZpbGVcIiwgZmlsZSk7XHJcbiAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKFwib25DaGFuZ2VmaWxlTGlzdFwiLCBmaWxlTGlzdCk7XHJcbiAgICAgICAgICAvLyAgIGNvbnN0IHsgb25DaGFuZ2UsIG9uTGlzdENoYW5nZSB9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICAgIC8vICAgdGhpcy5zZXRTdGF0ZSh7XHJcbiAgICAgICAgICAvLyAgICAgZmlsZUxpc3Q6IGZpbGVMaXN0LFxyXG4gICAgICAgICAgLy8gICB9KTtcclxuICAgICAgICAgIC8vICAgb25MaXN0Q2hhbmdlICYmIG9uTGlzdENoYW5nZShmaWxlTGlzdCk7XHJcbiAgICAgICAgICAvLyAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHsgZmlsZSwgZmlsZUxpc3QsIGV2ZW50IH0pO1xyXG4gICAgICAgICAgLy8gfX1cclxuICAgICAgICAvPlxyXG4gICAgICA8Lz5cclxuICAgICk7XHJcbiAgfVxyXG59XHJcbi8vIGV4cG9ydCBkZWZhdWx0IHdpdGhaaExvY2FsZShOc2NVcGxvYWQpO1xyXG4iXX0=
|