Sanakey
2021-06-04 355a84d740a2a9dfa1d67cb2d2e11843d42809ac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
"use strict";
var __assign = (this && this.__assign) || function () {
    __assign = Object.assign || function(t) {
        for (var s, i = 1, n = arguments.length; i < n; i++) {
            s = arguments[i];
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
                t[p] = s[p];
        }
        return t;
    };
    return __assign.apply(this, arguments);
};
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
var __generator = (this && this.__generator) || function (thisArg, body) {
    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
    function verb(n) { return function (v) { return step([n, v]); }; }
    function step(op) {
        if (f) throw new TypeError("Generator is already executing.");
        while (_) try {
            if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
            if (y = 0, t) op = [op[0] & 2, t.value];
            switch (op[0]) {
                case 0: case 1: t = op; break;
                case 4: _.label++; return { value: op[1], done: false };
                case 5: _.label++; y = op[1]; op = [0]; continue;
                case 7: op = _.ops.pop(); _.trys.pop(); continue;
                default:
                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
                    if (t[2]) _.ops.pop();
                    _.trys.pop(); continue;
            }
            op = body.call(thisArg, _);
        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
    }
};
Component({
    options: {
        styleIsolation: "shared",
        addGlobalClass: true,
        multipleSlots: true
    },
    properties: {
        url: {
            type: String,
            value: ""
        },
        fileDeleteUrl: {
            type: String,
            value: ""
        },
        description: {
            type: String,
            value: "建议尺寸:500x500像素,72分辨率"
        },
        previewSize: {
            type: String,
            value: "500rpx"
        },
        imageFit: {
            type: String,
            value: "aspectFill"
        },
        hasSlot: {
            type: Boolean,
            value: false
        },
        multiple: {
            type: Boolean,
            value: false
        },
        imgList: {
            type: Array,
            value: []
        },
        isMustUpload: {
            type: Boolean,
            value: true
        }
    },
    data: {
        imgList: [],
        coverImage: '',
        images: ''
    },
    lifetimes: {
        ready: function () {
            console.log(this.data.imgList);
        }
    },
    observers: {
        'imgList': function (val) {
            console.log('监听图片列表imgList', val, this.data.imgList);
            if (val.length > 0) {
                if (this.data.multiple) {
                    this.getImgUnid('images');
                }
                else {
                    this.getImgUnid('coverImage');
                }
            }
        }
    },
    methods: {
        uploadSingleFile: function (event) {
            return __awaiter(this, void 0, void 0, function () {
                var file, _a, err, result, imgList;
                return __generator(this, function (_b) {
                    switch (_b.label) {
                        case 0:
                            file = event.detail.file;
                            console.log(event, file);
                            return [4, this.uploadFile({
                                    file: file,
                                    url: this.data.url,
                                    formData: {}
                                })];
                        case 1:
                            _a = _b.sent(), err = _a[0], result = _a[1];
                            if (err) {
                                console.log(err);
                                return [2];
                            }
                            console.log(result);
                            imgList = this.data.imgList;
                            imgList.push(__assign({}, result));
                            this.setData({ imgList: imgList });
                            console.log('单张上传后imgList。。。', imgList);
                            this.getImgUnid('coverImage');
                            return [2];
                    }
                });
            });
        },
        uploadMultipleFile: function (event) {
            return __awaiter(this, void 0, void 0, function () {
                var file, imgList, unid, url, i, _a, err, result;
                return __generator(this, function (_b) {
                    switch (_b.label) {
                        case 0:
                            file = event.detail.file;
                            console.log(event, file);
                            imgList = this.data.imgList;
                            unid = this.data.imgList[0] && this.data.imgList[0].unid || '';
                            url = this.data.url;
                            i = 0;
                            _b.label = 1;
                        case 1:
                            if (!(i < file.length)) return [3, 4];
                            if (unid) {
                                url += "&unid=" + unid;
                            }
                            console.log(url);
                            return [4, this.uploadFile({
                                    file: file[i],
                                    url: url,
                                    formData: {}
                                })];
                        case 2:
                            _a = _b.sent(), err = _a[0], result = _a[1];
                            if (err) {
                                console.log(err);
                                return [2];
                            }
                            console.log(result);
                            imgList.push(__assign({}, result));
                            unid = result.unid;
                            _b.label = 3;
                        case 3:
                            i++;
                            return [3, 1];
                        case 4:
                            this.setData({ imgList: imgList });
                            console.log('多张上传后imgList。。。', imgList);
                            this.getImgUnid('images');
                            if (this.data.isMustUpload) {
                                this.checkImages("images", "请至少上传一张图片");
                            }
                            return [2];
                    }
                });
            });
        },
        deleteFile: function (event) {
            return __awaiter(this, void 0, void 0, function () {
                var _a, imgList, fileDeleteUrl, index, _b, err, result;
                return __generator(this, function (_c) {
                    switch (_c.label) {
                        case 0:
                            _a = this.data, imgList = _a.imgList, fileDeleteUrl = _a.fileDeleteUrl;
                            index = event.detail.index;
                            console.log(index, 'dd');
                            return [4, wx.$utils.to(wx.$http.request({
                                    url: fileDeleteUrl,
                                    data: {
                                        unid: imgList[index].unid,
                                        seq: imgList[index].seq,
                                    }
                                }))];
                        case 1:
                            _b = _c.sent(), err = _b[0], result = _b[1];
                            if (err) {
                                console.log(err);
                                return [2];
                            }
                            console.log(result);
                            if (result.state === "success") {
                                imgList.splice(index, 1);
                                this.setData({
                                    imgList: imgList
                                });
                            }
                            console.log('删除后imgList。。。', imgList);
                            if (this.data.multiple) {
                                this.getImgUnid('images');
                            }
                            else {
                                this.getImgUnid('coverImage');
                            }
                            return [2];
                    }
                });
            });
        },
        uploadFile: function (param) {
            return __awaiter(this, void 0, void 0, function () {
                var _a, err, result;
                return __generator(this, function (_b) {
                    switch (_b.label) {
                        case 0: return [4, wx.$utils.to(wx.$http.uploadFile({
                                url: param.url,
                                formData: param.formData,
                                filePath: param.file.url
                            }))];
                        case 1:
                            _a = _b.sent(), err = _a[0], result = _a[1];
                            return [2, [err, result]];
                    }
                });
            });
        },
        getImgList: function () {
            return this.data.imgList;
        },
        getImgUnid: function (type) {
            var _a, _b;
            var unid;
            if (!this.data.imgList[0]) {
                unid = undefined;
                this.setData((_a = {},
                    _a[type] = unid,
                    _a));
                console.log(type, '图unid', unid);
                return unid;
            }
            unid = this.data.imgList[0].unid + ';';
            var seq = this.data.imgList.reduce(function (total, current) {
                console.log('total:', total, 'current.seq:', current.seq);
                return total + ';' + current.seq;
            }, ' ');
            var res = unid + seq.replace(' ;', '').replace(new RegExp(' ', 'gm'), '');
            this.setData((_b = {},
                _b[type] = res,
                _b));
            console.log(type, '图unid+seq', res);
            return res;
        },
        checkImages: function (images, msg) {
            var _a, _b;
            if (!this.data[images]) {
                this.setData((_a = {},
                    _a[images + "Error"] = msg,
                    _a));
                return false;
            }
            this.setData((_b = {},
                _b[images + "Error"] = "",
                _b));
            return true;
        },
        getCoverImageUnid: function () {
            return this.data.coverImage;
        },
        getImagesUnid: function () {
            return this.data.images;
        },
        clearImagesData: function () {
            this.setData({
                imgList: [],
                images: '',
                coverImage: ''
            });
        },
        startUpload: function () {
            var fileUpload = this.selectComponent('#my-file-uploader');
            console.log('准备上传。。。');
            fileUpload.startUpload();
        }
    }
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQU1BLFNBQVMsQ0FBQztJQUlSLE9BQU8sRUFBRTtRQUNQLGNBQWMsRUFBQyxRQUFRO1FBQ3ZCLGNBQWMsRUFBQyxJQUFJO1FBQ25CLGFBQWEsRUFBRSxJQUFJO0tBQ3BCO0lBQ0QsVUFBVSxFQUFFO1FBQ1YsR0FBRyxFQUFDO1lBQ0YsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsRUFBRTtTQUNWO1FBQ0QsYUFBYSxFQUFDO1lBQ1osSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsRUFBRTtTQUNWO1FBQ0QsV0FBVyxFQUFDO1lBQ1YsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsc0JBQXNCO1NBQzlCO1FBQ0QsV0FBVyxFQUFDO1lBQ1YsSUFBSSxFQUFFLE1BQU07WUFDWixLQUFLLEVBQUUsUUFBUTtTQUNoQjtRQUNELFFBQVEsRUFBQztZQUNQLElBQUksRUFBRSxNQUFNO1lBQ1osS0FBSyxFQUFFLFlBQVk7U0FDcEI7UUFDRCxPQUFPLEVBQUM7WUFDTixJQUFJLEVBQUMsT0FBTztZQUNaLEtBQUssRUFBRSxLQUFLO1NBQ2I7UUFDRCxRQUFRLEVBQUM7WUFDUCxJQUFJLEVBQUMsT0FBTztZQUNaLEtBQUssRUFBRSxLQUFLO1NBQ2I7UUFDRCxPQUFPLEVBQUM7WUFDTixJQUFJLEVBQUMsS0FBSztZQUNWLEtBQUssRUFBRSxFQUFFO1NBQ1Y7UUFDRCxZQUFZLEVBQUM7WUFDWCxJQUFJLEVBQUMsT0FBTztZQUNaLEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRjtJQUtELElBQUksRUFBRTtRQUNKLE9BQU8sRUFBTyxFQUFFO1FBQ2hCLFVBQVUsRUFBQyxFQUFFO1FBQ2IsTUFBTSxFQUFDLEVBQUU7S0FDVjtJQUNELFNBQVMsRUFBQztR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LFlBQUMsTUFBYSxFQUFFLEdBQVU7O1lBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFO2dCQUN0QixJQUFJLENBQUMsT0FBTztvQkFDVixHQUFDLE1BQU0sR0FBRyxPQUFPLElBQUcsR0FBRzt3QkFDdkIsQ0FBQztnQkFDSCxPQUFPLEtBQUssQ0FBQzthQUNkO1lBQ0QsSUFBSSxDQUFDLE9BQU87Z0JBQ1YsR0FBQyxNQUFNLEdBQUcsT0FBTyxJQUFHLEVBQUU7b0JBQ3RCLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQztRQUVkLENBQUM7UUFDRCxpQkFBaUI7WUFDZixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBQzlCLENBQUM7UUFDRCxhQUFhO1lBQ1gsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUMxQixDQUFDO1FBQ0QsZUFBZTtZQUNiLElBQUksQ0FBQyxPQUFPLENBQUM7Z0JBQ1gsT0FBTyxFQUFDLEVBQUU7Z0JBQ1YsTUFBTSxFQUFDLEVBQUU7Z0JBQ1QsVUFBVSxFQUFDLEVBQUU7YUFDZCxDQUFDLENBQUE7UUFDSixDQUFDO1FBQ0QsV0FBVztZQUNULElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUMzRCxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQ3ZCLFVBQVUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQixDQUFDO0tBV0Y7Q0FDRixDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJ0eXBlIGZpbGUgPSB7XHJcbiAgZmlsZTogc3RyaW5nLFxyXG4gIHVybDogc3RyaW5nXHJcbn1cclxudHlwZSBJbWFnZXMgPSAnY292ZXJJbWFnZSd8J2ltYWdlcyc7XHJcbi8vIGNvbnN0IGFwcCA9IGdldEFwcDxJQXBwT3B0aW9uPigpO1xyXG5Db21wb25lbnQoe1xyXG4gIC8qKlxyXG4gICAqIOe7hOS7tueahOWxnuaAp+WIl+ihqFxyXG4gICAqL1xyXG4gIG9wdGlvbnM6IHtcclxuICAgIHN0eWxlSXNvbGF0aW9uOlwic2hhcmVkXCIsXHJcbiAgICBhZGRHbG9iYWxDbGFzczp0cnVlLFxyXG4gICAgbXVsdGlwbGVTbG90czogdHJ1ZSAvLyDlnKjnu4Tku7blrprkuYnml7bnmoTpgInpobnkuK3lkK/nlKjlpJpzbG905pSv5oyBXHJcbiAgfSxcclxuICBwcm9wZXJ0aWVzOiB7XHJcbiAgICB1cmw6e1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIHZhbHVlOiBcIlwiXHJcbiAgICB9LFxyXG4gICAgZmlsZURlbGV0ZVVybDp7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgdmFsdWU6IFwiXCJcclxuICAgIH0sXHJcbiAgICBkZXNjcmlwdGlvbjp7XHJcbiAgICAgIHR5cGU6IFN0cmluZyxcclxuICAgICAgdmFsdWU6IFwi5bu66K6u5bC65a+4OjUwMHg1MDDlg4/ntKDvvIw3MuWIhui+qOeOh1wiXHJcbiAgICB9LFxyXG4gICAgcHJldmlld1NpemU6e1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIHZhbHVlOiBcIjUwMHJweFwiXHJcbiAgICB9LFxyXG4gICAgaW1hZ2VGaXQ6e1xyXG4gICAgICB0eXBlOiBTdHJpbmcsXHJcbiAgICAgIHZhbHVlOiBcImFzcGVjdEZpbGxcIlxyXG4gICAgfSxcclxuICAgIGhhc1Nsb3Q6e1xyXG4gICAgICB0eXBlOkJvb2xlYW4sXHJcbiAgICAgIHZhbHVlOiBmYWxzZVxyXG4gICAgfSxcclxuICAgIG11bHRpcGxlOntcclxuICAgICAgdHlwZTpCb29sZWFuLFxyXG4gICAgICB2YWx1ZTogZmFsc2VcclxuICAgIH0sXHJcbiAgICBpbWdMaXN0OntcclxuICAgICAgdHlwZTpBcnJheSxcclxuICAgICAgdmFsdWU6IFtdXHJcbiAgICB9LFxyXG4gICAgaXNNdXN0VXBsb2FkOntcclxuICAgICAgdHlwZTpCb29sZWFuLFxyXG4gICAgICB2YWx1ZTogdHJ1ZVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIC8qKlxyXG4gICAqIOe7hOS7tueahOWIneWni+aVsOaNrlxyXG4gICAqL1xyXG4gIGRhdGE6IHtcclxuICAgIGltZ0xpc3Q6IDxhbnk+W10sXHJcbiAgICBjb3ZlckltYWdlOicnLFxyXG4gICAgaW1hZ2VzOicnXHJcbiAgfSxcclxuICBsaWZldGltZXM6e1xyXG4gICAgcmVhZHkoKXtcclxuICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhLmltZ0xpc3QpO1xyXG5cclxuICAgIH1cclxuICB9LFxyXG4gIG9ic2VydmVyczoge1xyXG4gICAgJ2ltZ0xpc3QnOiBmdW5jdGlvbih2YWwpIHtcclxuICAgICAgY29uc29sZS5sb2coJ+ebkeWQrOWbvueJh+WIl+ihqGltZ0xpc3QnLHZhbCx0aGlzLmRhdGEuaW1nTGlzdClcclxuICAgICAgaWYgKHZhbC5sZW5ndGg+MCkge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEubXVsdGlwbGUpe1xyXG4gICAgICAgICAgdGhpcy5nZXRJbWdVbmlkKCdpbWFnZXMnKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5nZXRJbWdVbmlkKCdjb3ZlckltYWdlJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH0sXHJcbiAgLyoqXHJcbiAgICog57uE5Lu255qE5pa55rOV5YiX6KGoXHJcbiAgICovXHJcbiAgbWV0aG9kczoge1xyXG4gICAgYXN5bmMgdXBsb2FkU2luZ2xlRmlsZShldmVudDphbnkpIHtcclxuICAgICAgY29uc3QgeyBmaWxlIH0gPSBldmVudC5kZXRhaWw7XHJcbiAgICAgIGNvbnNvbGUubG9nKGV2ZW50LGZpbGUpO1xyXG4gICAgICAvLyDlvZPorr7nva4gbXV0aXBsZSDkuLogdHJ1ZSDml7YsIGZpbGUg5Li65pWw57uE5qC85byP77yM5ZCm5YiZ5Li65a+56LGh5qC85byPXHJcbiAgICAgIGxldCBbZXJyLHJlc3VsdF0gPSBhd2FpdCB0aGlzLnVwbG9hZEZpbGUoe1xyXG4gICAgICAgIGZpbGUsXHJcbiAgICAgICAgdXJsOiB0aGlzLmRhdGEudXJsLFxyXG4gICAgICAgIGZvcm1EYXRhOntcclxuICAgICAgICAgIC8vIGlzQ292ZXJJbWFnZTp0cnVlLFxyXG4gICAgICAgICAgLy8gZm9ybWlkOjcxMDgwMlxyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmIChlcnIpe1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAgIGxldCBpbWdMaXN0ID0gdGhpcy5kYXRhLmltZ0xpc3Q7XHJcbiAgICAgIGltZ0xpc3QucHVzaCh7IC4uLnJlc3VsdCB9KTtcclxuICAgICAgdGhpcy5zZXREYXRhKHsgaW1nTGlzdCB9KTtcclxuICAgICAgY29uc29sZS5sb2coJ+WNleW8oOS4iuS8oOWQjmltZ0xpc3TjgILjgILjgIInLGltZ0xpc3QpO1xyXG4gICAgICB0aGlzLmdldEltZ1VuaWQoJ2NvdmVySW1hZ2UnKTtcclxuICAgICAgLy8gdGhpcy50cmlnZ2VyRXZlbnQoJ2dldENvdmVySW1hZ2UnLHtcclxuICAgICAgLy8gICBpbWdMaXN0XHJcbiAgICAgIC8vIH0pXHJcblxyXG4gICAgfSxcclxuICAgIGFzeW5jIHVwbG9hZE11bHRpcGxlRmlsZShldmVudDphbnkpIHtcclxuICAgICAgY29uc3QgeyBmaWxlIH0gPSBldmVudC5kZXRhaWw7XHJcbiAgICAgIGNvbnNvbGUubG9nKGV2ZW50LGZpbGUpO1xyXG4gICAgICBsZXQgaW1nTGlzdCA9IHRoaXMuZGF0YS5pbWdMaXN0O1xyXG4gICAgICBsZXQgdW5pZCA9IHRoaXMuZGF0YS5pbWdMaXN0WzBdJiZ0aGlzLmRhdGEuaW1nTGlzdFswXS51bmlkfHwnJztcclxuICAgICAgbGV0IHVybCA9IHRoaXMuZGF0YS51cmw7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGlmICh1bmlkKXtcclxuICAgICAgICAgIHVybCs9YCZ1bmlkPSR7dW5pZH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyh1cmwpO1xyXG4gICAgICAgIC8vIOW9k+iuvue9riBtdXRpcGxlIOS4uiB0cnVlIOaXtiwgZmlsZSDkuLrmlbDnu4TmoLzlvI/vvIzlkKbliJnkuLrlr7nosaHmoLzlvI9cclxuICAgICAgICBsZXQgW2VycixyZXN1bHRdID0gYXdhaXQgdGhpcy51cGxvYWRGaWxlKHtcclxuICAgICAgICAgIGZpbGU6ZmlsZVtpXSxcclxuICAgICAgICAgIHVybCxcclxuICAgICAgICAgIGZvcm1EYXRhOntcclxuICAgICAgICAgICAgLy8gaXNDb3ZlckltYWdlOnRydWUsXHJcbiAgICAgICAgICAgIC8vIGZvcm1pZDo3MTA4MDJcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoZXJyKXtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XHJcbiAgICAgICAgaW1nTGlzdC5wdXNoKHsgLi4ucmVzdWx0IH0pO1xyXG4gICAgICAgIHVuaWQgPSByZXN1bHQudW5pZDtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zZXREYXRhKHsgaW1nTGlzdCB9KTtcclxuICAgICAgY29uc29sZS5sb2coJ+WkmuW8oOS4iuS8oOWQjmltZ0xpc3TjgILjgILjgIInLGltZ0xpc3QpO1xyXG4gICAgICB0aGlzLmdldEltZ1VuaWQoJ2ltYWdlcycpO1xyXG4gICAgICBpZiAodGhpcy5kYXRhLmlzTXVzdFVwbG9hZCl7XHJcbiAgICAgICAgdGhpcy5jaGVja0ltYWdlcyhcImltYWdlc1wiLCBcIuivt+iHs+WwkeS4iuS8oOS4gOW8oOWbvueJh1wiKVxyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyB0aGlzLnRyaWdnZXJFdmVudCgnZ2V0Q292ZXJJbWFnZScse1xyXG4gICAgICAvLyAgIGltZ0xpc3RcclxuICAgICAgLy8gfSlcclxuXHJcbiAgICB9LFxyXG4gICAgYXN5bmMgZGVsZXRlRmlsZShldmVudDphbnkpe1xyXG4gICAgICBsZXQge2ltZ0xpc3QsZmlsZURlbGV0ZVVybH0gPSB0aGlzLmRhdGE7XHJcbiAgICAgIGxldCB7aW5kZXh9ID0gZXZlbnQuZGV0YWlsO1xyXG4gICAgICBjb25zb2xlLmxvZyhpbmRleCwnZGQnKTtcclxuICAgICAgbGV0IFtlcnIscmVzdWx0XSA9IGF3YWl0IHd4LiR1dGlscy50byhcclxuICAgICAgICB3eC4kaHR0cC5yZXF1ZXN0KHtcclxuICAgICAgICAgIHVybDogZmlsZURlbGV0ZVVybCxcclxuICAgICAgICAgIGRhdGE6e1xyXG4gICAgICAgICAgICB1bmlkOmltZ0xpc3RbaW5kZXhdLnVuaWQsXHJcbiAgICAgICAgICAgIHNlcTppbWdMaXN0W2luZGV4XS5zZXEsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgaWYgKGVycil7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2cocmVzdWx0KTtcclxuICAgICAgaWYgKHJlc3VsdC5zdGF0ZSA9PT0gXCJzdWNjZXNzXCIpe1xyXG4gICAgICAgIGltZ0xpc3Quc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB0aGlzLnNldERhdGEoe1xyXG4gICAgICAgICAgaW1nTGlzdFxyXG4gICAgICAgIH0pXHJcbiAgICAgIH1cclxuICAgICAgY29uc29sZS5sb2coJ+WIoOmZpOWQjmltZ0xpc3TjgILjgILjgIInLGltZ0xpc3QpO1xyXG4gICAgICBpZiAodGhpcy5kYXRhLm11bHRpcGxlKXtcclxuICAgICAgICB0aGlzLmdldEltZ1VuaWQoJ2ltYWdlcycpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZ2V0SW1nVW5pZCgnY292ZXJJbWFnZScpO1xyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgYXN5bmMgdXBsb2FkRmlsZShwYXJhbTphbnkpe1xyXG4gICAgICBsZXQgW2VycixyZXN1bHRdID0gYXdhaXQgd3guJHV0aWxzLnRvKFxyXG4gICAgICAgIHd4LiRodHRwLnVwbG9hZEZpbGUoe1xyXG4gICAgICAgICAgdXJsOnBhcmFtLnVybCxcclxuICAgICAgICAgIGZvcm1EYXRhOnBhcmFtLmZvcm1EYXRhLFxyXG4gICAgICAgICAgZmlsZVBhdGg6cGFyYW0uZmlsZS51cmxcclxuICAgICAgICB9KVxyXG4gICAgICApXHJcbiAgICAgICAgcmV0dXJuIFtlcnIscmVzdWx0XTtcclxuICAgIH0sXHJcblxyXG4gICAgZ2V0SW1nTGlzdCgpe1xyXG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmltZ0xpc3Q7XHJcbiAgICB9LFxyXG4gICAgLy8gZ2V0U2luZ2xlSW1nVW5pZCgpe1xyXG4gICAgLy8gICBsZXQgdW5pZDpzdHJpbmd8Ym9vbGVhbnx1bmRlZmluZWQ7XHJcbiAgICAvLyAgIGlmICh0aGlzLmRhdGEuaW1nTGlzdFswXSl7XHJcbiAgICAvLyAgICAgdW5pZCA9IHRoaXMuZGF0YS5pbWdMaXN0WzBdLnVuaWQrJzsnK3RoaXMuZGF0YS5pbWdMaXN0WzBdLnNlcTtcclxuICAgIC8vICAgfSBlbHNlIHtcclxuICAgIC8vICAgICB1bmlkID0gdW5kZWZpbmVkO1xyXG4gICAgLy8gICB9XHJcbiAgICAvLyAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAvLyAgICAgY292ZXJJbWc6dW5pZFxyXG4gICAgLy8gICB9KTtcclxuICAgIC8vICAgY29uc29sZS5sb2coJ+WwgemdouWbvnVuaWQnLHVuaWQpO1xyXG4gICAgLy8gICByZXR1cm4gdW5pZDtcclxuICAgIC8vIH0sXHJcbiAgICBnZXRJbWdVbmlkKHR5cGU6c3RyaW5nKXtcclxuICAgICAgbGV0IHVuaWQ6c3RyaW5nfGJvb2xlYW58dW5kZWZpbmVkO1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YS5pbWdMaXN0WzBdKXtcclxuICAgICAgICB1bmlkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgICBbdHlwZV06dW5pZFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHR5cGUsJ+WbvnVuaWQnLHVuaWQpO1xyXG4gICAgICAgIHJldHVybiB1bmlkO1xyXG4gICAgICB9XHJcbiAgICAgIHVuaWQgPSB0aGlzLmRhdGEuaW1nTGlzdFswXS51bmlkKyc7JztcclxuICAgICAgbGV0IHNlcSA9IHRoaXMuZGF0YS5pbWdMaXN0LnJlZHVjZSgodG90YWw6c3RyaW5nLGN1cnJlbnQ6YW55KT0+e1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCd0b3RhbDonLHRvdGFsLCdjdXJyZW50LnNlcTonLGN1cnJlbnQuc2VxKTtcclxuICAgICAgICByZXR1cm4gdG90YWwrJzsnK2N1cnJlbnQuc2VxXHJcbiAgICAgIH0sJyAnKVxyXG4gICAgICBsZXQgcmVzID0gdW5pZCtzZXEucmVwbGFjZSgnIDsnLCcnKS5yZXBsYWNlKG5ldyBSZWdFeHAoJyAnLCAnZ20nKSwgJycpXHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgW3R5cGVdOnJlc1xyXG4gICAgICB9KTtcclxuICAgICAgY29uc29sZS5sb2codHlwZSwn5Zu+dW5pZCtzZXEnLHJlcyk7XHJcbiAgICAgIHJldHVybiByZXM7XHJcbiAgICB9LFxyXG4gICAgY2hlY2tJbWFnZXMoaW1hZ2VzOkltYWdlcywgbXNnOnN0cmluZykge1xyXG4gICAgICBpZiAoIXRoaXMuZGF0YVtpbWFnZXNdKSB7XHJcbiAgICAgICAgdGhpcy5zZXREYXRhKHtcclxuICAgICAgICAgIFtpbWFnZXMgKyBcIkVycm9yXCJdOiBtc2csXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgW2ltYWdlcyArIFwiRXJyb3JcIl06IFwiXCIsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgLy8gdGhpcy5oYW5kbGVMaXZlVGltZSgpXHJcbiAgICB9LFxyXG4gICAgZ2V0Q292ZXJJbWFnZVVuaWQoKXtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5jb3ZlckltYWdlO1xyXG4gICAgfSxcclxuICAgIGdldEltYWdlc1VuaWQoKXtcclxuICAgICAgcmV0dXJuIHRoaXMuZGF0YS5pbWFnZXM7XHJcbiAgICB9LFxyXG4gICAgY2xlYXJJbWFnZXNEYXRhKCl7XHJcbiAgICAgIHRoaXMuc2V0RGF0YSh7XHJcbiAgICAgICAgaW1nTGlzdDpbXSxcclxuICAgICAgICBpbWFnZXM6JycsXHJcbiAgICAgICAgY292ZXJJbWFnZTonJ1xyXG4gICAgICB9KVxyXG4gICAgfSxcclxuICAgIHN0YXJ0VXBsb2FkKCl7XHJcbiAgICAgIGxldCBmaWxlVXBsb2FkID0gdGhpcy5zZWxlY3RDb21wb25lbnQoJyNteS1maWxlLXVwbG9hZGVyJyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCflh4blpIfkuIrkvKDjgILjgILjgIInKTtcclxuICAgICAgZmlsZVVwbG9hZC5zdGFydFVwbG9hZCgpO1xyXG4gICAgfVxyXG4gICAgICAvLyBhc3luYyBkZWxldGVGaWxlKHBhcmFtOmFueSl7XHJcbiAgICAgIC8vICAgbGV0IFtlcnIscmVzdWx0XSA9IGF3YWl0IHd4LiR1dGlscy50byhcclxuICAgICAgLy8gICAgIHd4LiRodHRwLnVwbG9hZEZpbGUoe1xyXG4gICAgICAvLyAgICAgICB1cmw6cGFyYW0udXJsLFxyXG4gICAgICAvLyAgICAgICBmb3JtRGF0YTpwYXJhbS5mb3JtRGF0YSxcclxuICAgICAgLy8gICAgICAgZmlsZVBhdGg6cGFyYW0uZmlsZS51cmxcclxuICAgICAgLy8gICAgIH0pXHJcbiAgICAgIC8vICAgKVxyXG4gICAgICAvLyAgIHJldHVybiBbZXJyLHJlc3VsdF07XHJcbiAgICAgIC8vIH1cclxuICB9XHJcbn0pXHJcbiJdfQ==