UNPKG

dbweb-common

Version:

用`yarn add dbweb-common`安装,不要忘记修改`angular.json`里的 `architect\build\options\assets`,加上

439 lines 30.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { HttpEventType } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { CurrentApiService, ProjectService, ElementsService } from 'dbweb-core'; import { MatSnackBar } from '@angular/material'; /** @type {?} */ const MUST = 'MUST'; /** * @record */ function ImportField() { } if (false) { /** @type {?} */ ImportField.prototype.Name; /** @type {?} */ ImportField.prototype.Alias; /** @type {?} */ ImportField.prototype.Type; /** @type {?} */ ImportField.prototype.MaxLength; /** @type {?} */ ImportField.prototype.Style; /** @type {?} */ ImportField.prototype.PrimaryKey; /** @type {?} */ ImportField.prototype.Remark; } /** * @record */ function MapField() { } if (false) { /** @type {?} */ MapField.prototype.Name; /** @type {?} */ MapField.prototype.Style; /** @type {?} */ MapField.prototype.MapName; /** @type {?} */ MapField.prototype.Value; /** @type {?} */ MapField.prototype.Remark; } /** * @record */ function RefreshPreviewParam() { } if (false) { /** @type {?} */ RefreshPreviewParam.prototype.FileName; /** @type {?} */ RefreshPreviewParam.prototype.Format; /** @type {?} */ RefreshPreviewParam.prototype.Encoding; /** @type {?} */ RefreshPreviewParam.prototype.FirstHead; } /** * @record */ function RefreshPreviewResult() { } if (false) { /** @type {?} */ RefreshPreviewResult.prototype.Title; /** @type {?} */ RefreshPreviewResult.prototype.Rows; /** @type {?} */ RefreshPreviewResult.prototype.Error; } /** * @record */ function DoImportParam() { } if (false) { /** @type {?} */ DoImportParam.prototype.FileName; /** @type {?} */ DoImportParam.prototype.FirstHead; /** @type {?} */ DoImportParam.prototype.Encoding; /** @type {?} */ DoImportParam.prototype.Format; /** @type {?} */ DoImportParam.prototype.Fields; } /** * @record */ export function DoImportResult() { } if (false) { /** @type {?} */ DoImportResult.prototype.TaskInfoURL; /** @type {?} */ DoImportResult.prototype.TaskInfoSign; /** @type {?} */ DoImportResult.prototype.BrowseTaskElement; } /** * @record */ export function ImportInfo() { } if (false) { /** @type {?} */ ImportInfo.prototype.TableName; /** @type {?} */ ImportInfo.prototype.TableTotal; /** @type {?} */ ImportInfo.prototype.TableCanRemove; /** @type {?} */ ImportInfo.prototype.Fields; /** @type {?} */ ImportInfo.prototype.NullIden; } /** * @record */ export function RemoveTableDataResult() { } if (false) { /** @type {?} */ RemoveTableDataResult.prototype.Total; /** @type {?} */ RemoveTableDataResult.prototype.CanRemove; } export class ImportService { /** * @param {?} api * @param {?} prj * @param {?} eles * @param {?} snackBar */ constructor(api, prj, eles, snackBar) { this.api = api; this.prj = prj; this.eles = eles; this.snackBar = snackBar; this.step = 'select-file'; // 服务端唯一的临时文件名 this.firstHead = true; // 是否是首行的标识 // 是否是首行的标识 this.format = 'CSV'; this.encoding = 'UTF8'; this.previewData = { Have: false, Title: null, Rows: null, Error: '' }; } /** * @return {?} */ init() { this.GetImportInfo().subscribe((/** * @param {?} v * @return {?} */ v => { this.tableName = v.TableName; this.tableTotal = v.TableTotal; this.tableCanRemove = v.TableCanRemove; this.fields = v.Fields; this.nullIden = v.NullIden; this.mapFields = v.Fields.map((/** * @param {?} fld * @return {?} */ fld => ({ Name: fld.Name, Style: fld.Style, MapName: '', Value: '', Remark: fld.Remark }))); })); } /** * @return {?} */ GetImportInfo() { return this.api.get('get-import-info'); } /** * @return {?} */ mustFields() { if (this.fields) { return this.fields.filter((/** * @param {?} v * @return {?} */ v => v.Style === MUST)).map((/** * @param {?} v * @return {?} */ v => v.Name)); } else { return []; } } /** * @return {?} */ primaryKeyFields() { if (this.fields) { return this.fields.filter((/** * @param {?} v * @return {?} */ v => v.PrimaryKey)).map((/** * @param {?} v * @return {?} */ v => v.Name)); } else { return []; } } /** * @return {?} */ fileType() { if (this.file) { /** @type {?} */ const list = this.file.name.split('.'); if (list.length > 1) { return '.' + list[1]; } } return ''; } // 上传文件使用了返回的路由,所以需要自己调用原生的http请求 /** * @return {?} */ upload() { /** @type {?} */ let sentBegin; this.api.upload(this.file, 'content', 'upload-import-file').subscribe((/** * @param {?} event * @return {?} */ event => { switch (event.type) { case HttpEventType.Sent: // 小于500毫秒的上传,不显示中间的上传进度界面,防止界面闪烁 sentBegin = setTimeout((/** * @return {?} */ () => { this.step = 'upload'; sentBegin = null; }), 500); break; case HttpEventType.UploadProgress: this.uploadProgress = Math.round(event.loaded / event.total * 100); break; case HttpEventType.Response: if (sentBegin) { clearTimeout(sentBegin); sentBegin = null; } this.step = 'setting'; this.serverTempFileName = event.body; this.previewData.Error = ''; this.previewData.Have = false; break; default: console.log(event); break; } })); } /** * @return {?} */ refreshPreview() { this.api .post('refresh-preview', (/** @type {?} */ ({ FileName: this.serverTempFileName, Format: this.format, Encoding: this.encoding, FirstHead: this.firstHead }))) .subscribe((/** * @param {?} rev * @return {?} */ rev => { this.previewData.Have = true; this.previewData.Title = rev.Title; this.previewData.Rows = rev.Rows; this.previewData.Error = rev.Error; this.mapFields.forEach((/** * @param {?} v * @param {?} index * @return {?} */ (v, index) => { if (this.firstHead) { v.MapName = this.previewData.Title.find((/** * @param {?} str * @return {?} */ str => str.toLowerCase() === v.Name.toLowerCase())); if (!v.MapName) { // 根据别名再找一遍 /** @type {?} */ const alias = this.fields.find((/** * @param {?} afield * @return {?} */ afield => afield.Name === v.Name)).Alias; v.MapName = this.previewData.Title.find((/** * @param {?} str * @return {?} */ str => str.toLowerCase() === alias.toLowerCase())); } } else { v.MapName = this.previewData.Title[index]; } if (v.MapName === undefined) { v.MapName = '(SKIP)'; } })); console.log('------', this.previewData.Have || this.previewData.Error); })); } /** * @return {?} */ doImport() { this.api .post('do-import', (/** @type {?} */ ({ FileName: this.serverTempFileName, FirstHead: this.firstHead, Encoding: this.encoding, Format: this.format, Fields: this.mapFields.map((/** * @param {?} v * @return {?} */ v => ({ Name: v.Name, MapName: v.MapName, Value: v.Value }))), NullIden: this.nullIden }))) .subscribe((/** * @param {?} v * @return {?} */ v => { this.step = 'done'; this.taskInfoURL = this.prj.frontURL('task', v.TaskInfoURL); this.eles.addElement(v.BrowseTaskElement); this.eles.setURLSign(v.TaskInfoURL, v.TaskInfoSign); })); } /** * @return {?} */ removeTableData() { this.api.post('remove-table-data').subscribe((/** * @param {?} v * @return {?} */ v => { this.tableTotal = v.Total; this.tableCanRemove = v.CanRemove; this.snackBar.open('成功删除数据', '关闭', { duration: 5000 }); })); } } ImportService.decorators = [ { type: Injectable } ]; /** @nocollapse */ ImportService.ctorParameters = () => [ { type: CurrentApiService }, { type: ProjectService }, { type: ElementsService }, { type: MatSnackBar } ]; if (false) { /** @type {?} */ ImportService.prototype.step; /** @type {?} */ ImportService.prototype.tableName; /** @type {?} */ ImportService.prototype.tableTotal; /** @type {?} */ ImportService.prototype.tableCanRemove; /** @type {?} */ ImportService.prototype.fields; /** @type {?} */ ImportService.prototype.file; /** @type {?} */ ImportService.prototype.uploadProgress; /** @type {?} */ ImportService.prototype.serverTempFileName; /** @type {?} */ ImportService.prototype.firstHead; /** @type {?} */ ImportService.prototype.format; /** @type {?} */ ImportService.prototype.encoding; /** @type {?} */ ImportService.prototype.nullIden; /** @type {?} */ ImportService.prototype.previewData; /** @type {?} */ ImportService.prototype.mapFields; /** @type {?} */ ImportService.prototype.taskInfoURL; /** * @type {?} * @private */ ImportService.prototype.api; /** * @type {?} * @private */ ImportService.prototype.prj; /** * @type {?} * @private */ ImportService.prototype.eles; /** * @type {?} * @private */ ImportService.prototype.snackBar; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9kYndlYi1jb21tb24vIiwic291cmNlcyI6WyJsaWIvaW1wb3J0L2ltcG9ydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsY0FBYyxFQUFFLGVBQWUsRUFBWSxNQUFNLFlBQVksQ0FBQztBQUMxRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7O01BQzFDLElBQUksR0FBRyxNQUFNOzs7O0FBRW5CLDBCQVFDOzs7SUFQQSwyQkFBYTs7SUFDYiw0QkFBYzs7SUFDZCwyQkFBYTs7SUFDYixnQ0FBa0I7O0lBQ2xCLDRCQUFjOztJQUNkLGlDQUFvQjs7SUFDcEIsNkJBQWU7Ozs7O0FBRWhCLHVCQU1DOzs7SUFMQSx3QkFBYTs7SUFDYix5QkFBYzs7SUFDZCwyQkFBZ0I7O0lBQ2hCLHlCQUFjOztJQUNkLDBCQUFlOzs7OztBQUVoQixrQ0FLQzs7O0lBSkEsdUNBQWlCOztJQUNqQixxQ0FBZTs7SUFDZix1Q0FBaUI7O0lBQ2pCLHdDQUFtQjs7Ozs7QUFFcEIsbUNBSUM7OztJQUhBLHFDQUFnQjs7SUFDaEIsb0NBQWlCOztJQUNqQixxQ0FBYzs7Ozs7QUFFZiw0QkFVQzs7O0lBVEEsaUNBQWlCOztJQUNqQixrQ0FBbUI7O0lBQ25CLGlDQUFpQjs7SUFDakIsK0JBQWU7O0lBQ2YsK0JBSUk7Ozs7O0FBRUwsb0NBSUM7OztJQUhBLHFDQUFvQjs7SUFDcEIsc0NBQXFCOztJQUNyQiwyQ0FBNEI7Ozs7O0FBRTdCLGdDQU1DOzs7SUFMQSwrQkFBa0I7O0lBQ2xCLGdDQUFtQjs7SUFDbkIsb0NBQXVCOztJQUN2Qiw0QkFBc0I7O0lBQ3RCLDhCQUFpQjs7Ozs7QUFFbEIs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Q0FBc0I7O0lBRXRCLG9DQUFvQjs7Ozs7SUFHbkIsNEJBQThCOzs7OztJQUM5Qiw0QkFBMkI7Ozs7O0lBQzNCLDZCQUE2Qjs7Ozs7SUFDN0IsaUNBQTZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEV2ZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDdXJyZW50QXBpU2VydmljZSwgUHJvamVjdFNlcnZpY2UsIEVsZW1lbnRzU2VydmljZSwgSUVsZW1lbnQgfSBmcm9tICdkYndlYi1jb3JlJztcclxuaW1wb3J0IHsgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7XHJcbmNvbnN0IE1VU1QgPSAnTVVTVCc7XHJcblxyXG5pbnRlcmZhY2UgSW1wb3J0RmllbGQge1xyXG5cdE5hbWU6IHN0cmluZztcclxuXHRBbGlhczogc3RyaW5nO1xyXG5cdFR5cGU6IHN0cmluZztcclxuXHRNYXhMZW5ndGg6IG51bWJlcjtcclxuXHRTdHlsZTogc3RyaW5nO1xyXG5cdFByaW1hcnlLZXk6IGJvb2xlYW47XHJcblx0UmVtYXJrOiBzdHJpbmc7XHJcbn1cclxuaW50ZXJmYWNlIE1hcEZpZWxkIHtcclxuXHROYW1lOiBzdHJpbmc7XHJcblx0U3R5bGU6IHN0cmluZztcclxuXHRNYXBOYW1lOiBzdHJpbmc7XHJcblx0VmFsdWU6IHN0cmluZztcclxuXHRSZW1hcms6IHN0cmluZztcclxufVxyXG5pbnRlcmZhY2UgUmVmcmVzaFByZXZpZXdQYXJhbSB7XHJcblx0RmlsZU5hbWU6IHN0cmluZztcclxuXHRGb3JtYXQ6IHN0cmluZztcclxuXHRFbmNvZGluZzogc3RyaW5nO1xyXG5cdEZpcnN0SGVhZDogYm9vbGVhbjtcclxufVxyXG5pbnRlcmZhY2UgUmVmcmVzaFByZXZpZXdSZXN1bHQge1xyXG5cdFRpdGxlOiBzdHJpbmdbXTtcclxuXHRSb3dzOiBzdHJpbmdbXVtdO1xyXG5cdEVycm9yOiBzdHJpbmc7XHJcbn1cclxuaW50ZXJmYWNlIERvSW1wb3J0UGFyYW0ge1xyXG5cdEZpbGVOYW1lOiBzdHJpbmc7XHJcblx0Rmlyc3RIZWFkOiBib29sZWFuO1xyXG5cdEVuY29kaW5nOiBzdHJpbmc7XHJcblx0Rm9ybWF0OiBzdHJpbmc7XHJcblx0RmllbGRzOiB7XHJcblx0XHROYW1lOiBzdHJpbmc7XHJcblx0XHRNYXBOYW1lOiBzdHJpbmc7XHJcblx0XHRWYWx1ZTogc3RyaW5nO1xyXG5cdH1bXTtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIERvSW1wb3J0UmVzdWx0IHtcclxuXHRUYXNrSW5mb1VSTDogc3RyaW5nO1xyXG5cdFRhc2tJbmZvU2lnbjogc3RyaW5nO1xyXG5cdEJyb3dzZVRhc2tFbGVtZW50OiBJRWxlbWVudDtcclxufVxyXG5leHBvcnQgaW50ZXJmYWNlIEltcG9ydEluZm8ge1xyXG5cdFRhYmxlTmFtZTogc3RyaW5nO1xyXG5cdFRhYmxlVG90YWw6IG51bWJlcjtcclxuXHRUYWJsZUNhblJlbW92ZTogbnVtYmVyO1xyXG5cdEZpZWxkczogSW1wb3J0RmllbGRbXTtcclxuXHROdWxsSWRlbjogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgUmVtb3ZlVGFibGVEYXRhUmVzdWx0IHtcclxuXHRUb3RhbDogbnVtYmVyO1xyXG5cdENhblJlbW92ZTogbnVtYmVyO1xyXG59XHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEltcG9ydFNlcnZpY2Uge1xyXG5cdHN0ZXA6ICdzZWxlY3QtZmlsZScgfCAndXBsb2FkJyB8ICdzZXR0aW5nJyB8ICdkb25lJyA9ICdzZWxlY3QtZmlsZSc7XHJcblx0dGFibGVOYW1lOiBzdHJpbmc7XHJcblx0dGFibGVUb3RhbDogbnVtYmVyO1xyXG5cdHRhYmxlQ2FuUmVtb3ZlOiBudW1iZXI7XHJcblx0ZmllbGRzOiBJbXBvcnRGaWVsZFtdO1xyXG5cdGZpbGU6IEZpbGU7XHJcblx0dXBsb2FkUHJvZ3Jlc3M6IG51bWJlcjtcclxuXHRzZXJ2ZXJUZW1wRmlsZU5hbWU6IHN0cmluZzsgLy8g5pyN5Yqh56uv5ZSv5LiA55qE5Li05pe25paH5Lu25ZCNXHJcblxyXG5cdGZpcnN0SGVhZCA9IHRydWU7IC8vIOaYr+WQpuaYr+mmluihjOeahOagh+ivhlxyXG5cdGZvcm1hdDogJ0NTVicgfCAnVFhUJyA9ICdDU1YnO1xyXG5cdGVuY29kaW5nOiAnVVRGOCcgfCAnR0JLJyA9ICdVVEY4JztcclxuXHRudWxsSWRlbjogc3RyaW5nO1xyXG5cdHByZXZpZXdEYXRhOiB7XHJcblx0XHRIYXZlOiBib29sZWFuO1xyXG5cdFx0VGl0bGU6IHN0cmluZ1tdO1xyXG5cdFx0Um93czogc3RyaW5nW11bXTtcclxuXHRcdEVycm9yOiBzdHJpbmc7XHJcblx0fSA9IHsgSGF2ZTogZmFsc2UsIFRpdGxlOiBudWxsLCBSb3dzOiBudWxsLCBFcnJvcjogJycgfTtcclxuXHRtYXBGaWVsZHM6IE1hcEZpZWxkW107XHJcblxyXG5cdHRhc2tJbmZvVVJMOiBzdHJpbmc7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0cHJpdmF0ZSBhcGk6IEN1cnJlbnRBcGlTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBwcmo6IFByb2plY3RTZXJ2aWNlLFxyXG5cdFx0cHJpdmF0ZSBlbGVzOiBFbGVtZW50c1NlcnZpY2UsXHJcblx0XHRwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhclxyXG5cdCkge31cclxuXHRpbml0KCkge1xyXG5cdFx0dGhpcy5HZXRJbXBvcnRJbmZvKCkuc3Vic2NyaWJlKHYgPT4ge1xyXG5cdFx0XHR0aGlzLnRhYmxlTmFtZSA9IHYuVGFibGVOYW1lO1xyXG5cdFx0XHR0aGlzLnRhYmxlVG90YWwgPSB2LlRhYmxlVG90YWw7XHJcblx0XHRcdHRoaXMudGFibGVDYW5SZW1vdmUgPSB2LlRhYmxlQ2FuUmVtb3ZlO1xyXG5cdFx0XHR0aGlzLmZpZWxkcyA9IHYuRmllbGRzO1xyXG5cdFx0XHR0aGlzLm51bGxJZGVuID0gdi5OdWxsSWRlbjtcclxuXHRcdFx0dGhpcy5tYXBGaWVsZHMgPSB2LkZpZWxkcy5tYXAoZmxkID0+ICh7XHJcblx0XHRcdFx0TmFtZTogZmxkLk5hbWUsXHJcblx0XHRcdFx0U3R5bGU6IGZsZC5TdHlsZSxcclxuXHRcdFx0XHRNYXBOYW1lOiAnJyxcclxuXHRcdFx0XHRWYWx1ZTogJycsXHJcblx0XHRcdFx0UmVtYXJrOiBmbGQuUmVtYXJrXHJcblx0XHRcdH0pKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRHZXRJbXBvcnRJbmZvKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuYXBpLmdldDxJbXBvcnRJbmZvPignZ2V0LWltcG9ydC1pbmZvJyk7XHJcblx0fVxyXG5cdG11c3RGaWVsZHMoKSB7XHJcblx0XHRpZiAodGhpcy5maWVsZHMpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZmllbGRzLmZpbHRlcih2ID0+IHYuU3R5bGUgPT09IE1VU1QpLm1hcCh2ID0+IHYuTmFtZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXR1cm4gW107XHJcblx0XHR9XHJcblx0fVxyXG5cdHByaW1hcnlLZXlGaWVsZHMoKSB7XHJcblx0XHRpZiAodGhpcy5maWVsZHMpIHtcclxuXHRcdFx0cmV0dXJuIHRoaXMuZmllbGRzLmZpbHRlcih2ID0+IHYuUHJpbWFyeUtleSkubWFwKHYgPT4gdi5OYW1lKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiBbXTtcclxuXHRcdH1cclxuXHR9XHJcblx0ZmlsZVR5cGUoKSB7XHJcblx0XHRpZiAodGhpcy5maWxlKSB7XHJcblx0XHRcdGNvbnN0IGxpc3QgPSB0aGlzLmZpbGUubmFtZS5zcGxpdCgnLicpO1xyXG5cdFx0XHRpZiAobGlzdC5sZW5ndGggPiAxKSB7XHJcblx0XHRcdFx0cmV0dXJuICcuJyArIGxpc3RbMV07XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiAnJztcclxuXHR9XHJcblx0Ly8g5LiK5Lyg5paH5Lu25L2/55So5LqG6L+U5Zue55qE6Lev55Sx77yM5omA5Lul6ZyA6KaB6Ieq5bex6LCD55So5Y6f55Sf55qEaHR0cOivt+axglxyXG5cdHVwbG9hZCgpIHtcclxuXHRcdGxldCBzZW50QmVnaW46IE5vZGVKUy5UaW1lb3V0O1xyXG5cdFx0dGhpcy5hcGkudXBsb2FkPHN0cmluZz4odGhpcy5maWxlLCAnY29udGVudCcsICd1cGxvYWQtaW1wb3J0LWZpbGUnKS5zdWJzY3JpYmUoZXZlbnQgPT4ge1xyXG5cdFx0XHRzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcclxuXHRcdFx0XHRjYXNlIEh0dHBFdmVudFR5cGUuU2VudDpcclxuXHRcdFx0XHRcdC8vIOWwj+S6jjUwMOavq+enkueahOS4iuS8oO+8jOS4jeaYvuekuuS4remXtOeahOS4iuS8oOi/m+W6pueVjOmdou+8jOmYsuatoueVjOmdoumXqueDgVxyXG5cdFx0XHRcdFx0c2VudEJlZ2luID0gc2V0VGltZW91dCgoKSA9PiB7XHJcblx0XHRcdFx0XHRcdHRoaXMuc3RlcCA9ICd1cGxvYWQnO1xyXG5cdFx0XHRcdFx0XHRzZW50QmVnaW4gPSBudWxsO1xyXG5cdFx0XHRcdFx0fSwgNTAwKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgSHR0cEV2ZW50VHlwZS5VcGxvYWRQcm9ncmVzczpcclxuXHRcdFx0XHRcdHRoaXMudXBsb2FkUHJvZ3Jlc3MgPSBNYXRoLnJvdW5kKGV2ZW50LmxvYWRlZCAvIGV2ZW50LnRvdGFsICogMTAwKTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgSHR0cEV2ZW50VHlwZS5SZXNwb25zZTpcclxuXHRcdFx0XHRcdGlmIChzZW50QmVnaW4pIHtcclxuXHRcdFx0XHRcdFx0Y2xlYXJUaW1lb3V0KHNlbnRCZWdpbik7XHJcblx0XHRcdFx0XHRcdHNlbnRCZWdpbiA9IG51bGw7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLnN0ZXAgPSAnc2V0dGluZyc7XHJcblx0XHRcdFx0XHR0aGlzLnNlcnZlclRlbXBGaWxlTmFtZSA9IGV2ZW50LmJvZHk7XHJcblx0XHRcdFx0XHR0aGlzLnByZXZpZXdEYXRhLkVycm9yID0gJyc7XHJcblx0XHRcdFx0XHR0aGlzLnByZXZpZXdEYXRhLkhhdmUgPSBmYWxzZTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRjb25zb2xlLmxvZyhldmVudCk7XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHJlZnJlc2hQcmV2aWV3KCkge1xyXG5cdFx0dGhpcy5hcGlcclxuXHRcdFx0LnBvc3Q8UmVmcmVzaFByZXZpZXdSZXN1bHQ+KCdyZWZyZXNoLXByZXZpZXcnLCB7XHJcblx0XHRcdFx0RmlsZU5hbWU6IHRoaXMuc2VydmVyVGVtcEZpbGVOYW1lLFxyXG5cdFx0XHRcdEZvcm1hdDogdGhpcy5mb3JtYXQsXHJcblx0XHRcdFx0RW5jb2Rpbmc6IHRoaXMuZW5jb2RpbmcsXHJcblx0XHRcdFx0Rmlyc3RIZWFkOiB0aGlzLmZpcnN0SGVhZFxyXG5cdFx0XHR9IGFzIFJlZnJlc2hQcmV2aWV3UGFyYW0pXHJcblx0XHRcdC5zdWJzY3JpYmUocmV2ID0+IHtcclxuXHRcdFx0XHR0aGlzLnByZXZpZXdEYXRhLkhhdmUgPSB0cnVlO1xyXG5cdFx0XHRcdHRoaXMucHJldmlld0RhdGEuVGl0bGUgPSByZXYuVGl0bGU7XHJcblx0XHRcdFx0dGhpcy5wcmV2aWV3RGF0YS5Sb3dzID0gcmV2LlJvd3M7XHJcblx0XHRcdFx0dGhpcy5wcmV2aWV3RGF0YS5FcnJvciA9IHJldi5FcnJvcjtcclxuXHRcdFx0XHR0aGlzLm1hcEZpZWxkcy5mb3JFYWNoKCh2LCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKHRoaXMuZmlyc3RIZWFkKSB7XHJcblx0XHRcdFx0XHRcdHYuTWFwTmFtZSA9IHRoaXMucHJldmlld0RhdGEuVGl0bGUuZmluZChzdHIgPT4gc3RyLnRvTG93ZXJDYXNlKCkgPT09IHYuTmFtZS50b0xvd2VyQ2FzZSgpKTtcclxuXHRcdFx0XHRcdFx0aWYgKCF2Lk1hcE5hbWUpIHtcclxuXHRcdFx0XHRcdFx0XHQvLyDmoLnmja7liKvlkI3lho3mib7kuIDpgY1cclxuXHRcdFx0XHRcdFx0XHRjb25zdCBhbGlhcyA9IHRoaXMuZmllbGRzLmZpbmQoYWZpZWxkID0+IGFmaWVsZC5OYW1lID09PSB2Lk5hbWUpLkFsaWFzO1xyXG5cdFx0XHRcdFx0XHRcdHYuTWFwTmFtZSA9IHRoaXMucHJldmlld0RhdGEuVGl0bGUuZmluZChzdHIgPT4gc3RyLnRvTG93ZXJDYXNlKCkgPT09IGFsaWFzLnRvTG93ZXJDYXNlKCkpO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHR2Lk1hcE5hbWUgPSB0aGlzLnByZXZpZXdEYXRhLlRpdGxlW2luZGV4XTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGlmICh2Lk1hcE5hbWUgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0XHR2Lk1hcE5hbWUgPSAnKFNLSVApJztcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0XHRjb25zb2xlLmxvZygnLS0tLS0tJywgdGhpcy5wcmV2aWV3RGF0YS5IYXZlIHx8IHRoaXMucHJldmlld0RhdGEuRXJyb3IpO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcblx0ZG9JbXBvcnQoKSB7XHJcblx0XHR0aGlzLmFwaVxyXG5cdFx0XHQucG9zdDxEb0ltcG9ydFJlc3VsdD4oJ2RvLWltcG9ydCcsIHtcclxuXHRcdFx0XHRGaWxlTmFtZTogdGhpcy5zZXJ2ZXJUZW1wRmlsZU5hbWUsXHJcblx0XHRcdFx0Rmlyc3RIZWFkOiB0aGlzLmZpcnN0SGVhZCxcclxuXHRcdFx0XHRFbmNvZGluZzogdGhpcy5lbmNvZGluZyxcclxuXHRcdFx0XHRGb3JtYXQ6IHRoaXMuZm9ybWF0LFxyXG5cdFx0XHRcdEZpZWxkczogdGhpcy5tYXBGaWVsZHMubWFwKHYgPT4gKHtcclxuXHRcdFx0XHRcdE5hbWU6IHYuTmFtZSxcclxuXHRcdFx0XHRcdE1hcE5hbWU6IHYuTWFwTmFtZSxcclxuXHRcdFx0XHRcdFZhbHVlOiB2LlZhbHVlXHJcblx0XHRcdFx0fSkpLFxyXG5cdFx0XHRcdE51bGxJZGVuOiB0aGlzLm51bGxJZGVuXHJcblx0XHRcdH0gYXMgRG9JbXBvcnRQYXJhbSlcclxuXHRcdFx0LnN1YnNjcmliZSh2ID0+IHtcclxuXHRcdFx0XHR0aGlzLnN0ZXAgPSAnZG9uZSc7XHJcblx0XHRcdFx0dGhpcy50YXNrSW5mb1VSTCA9IHRoaXMucHJqLmZyb250VVJMKCd0YXNrJywgdi5UYXNrSW5mb1VSTCk7XHJcblx0XHRcdFx0dGhpcy5lbGVzLmFkZEVsZW1lbnQodi5Ccm93c2VUYXNrRWxlbWVudCk7XHJcblx0XHRcdFx0dGhpcy5lbGVzLnNldFVSTFNpZ24odi5UYXNrSW5mb1VSTCwgdi5UYXNrSW5mb1NpZ24pO1xyXG5cdFx0XHR9KTtcclxuXHR9XHJcblx0cmVtb3ZlVGFibGVEYXRhKCkge1xyXG5cdFx0dGhpcy5hcGkucG9zdDxSZW1vdmVUYWJsZURhdGFSZXN1bHQ+KCdyZW1vdmUtdGFibGUtZGF0YScpLnN1YnNjcmliZSh2ID0+IHtcclxuXHRcdFx0dGhpcy50YWJsZVRvdGFsID0gdi5Ub3RhbDtcclxuXHRcdFx0dGhpcy50YWJsZUNhblJlbW92ZSA9IHYuQ2FuUmVtb3ZlO1xyXG5cdFx0XHR0aGlzLnNuYWNrQmFyLm9wZW4oJ+aIkOWKn+WIoOmZpOaVsOaNricsICflhbPpl60nLCB7IGR1cmF0aW9uOiA1MDAwIH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbiJdfQ==