UNPKG

io.parrots

Version:

Parrots.io App

660 lines (659 loc) 62.1 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes} checked by tsc */ import * as tslib_1 from "tslib"; import { Headers, RequestOptions } from '@angular/http'; import { DataField } from 'com.phloxui'; import { ParrotsDataSchema } from '../../share/model/ParrotsDataSchema'; import { ClassesResource } from '../../share/resource/ClassesResource'; var ParrotsDataService = /** @class */ (function () { function ParrotsDataService(className, connectionMgr) { this.connectionMgr = connectionMgr; this.className = className; this.classesResource = connectionMgr.createResource(ClassesResource); } /** * @return {?} */ ParrotsDataService.prototype.loadDataSchema = /** * @return {?} */ function () { var _this = this; return new Promise(function (resolve, reject) { try { _this.classesResource.getSchemaInfo(_this.className).then(function (response) { try { // response should by in json if not reject in catch var /** @type {?} */ responseObj = response; var /** @type {?} */ dataFields = []; var /** @type {?} */ jsonSchema = responseObj; for (var /** @type {?} */ key in jsonSchema.properties) { var /** @type {?} */ selfJsonSchema = jsonSchema.properties[key]; if (selfJsonSchema === null || selfJsonSchema === undefined) { continue; } var /** @type {?} */ dataField = new DataField(key, key, selfJsonSchema.type, selfJsonSchema, null); dataFields.push(dataField); } var /** @type {?} */ resultSchema = new ParrotsDataSchema(responseObj.id, responseObj.id, dataFields, jsonSchema); resolve(resultSchema); } catch (/** @type {?} */ error) { reject(error); } }).catch(function (error) { reject(error); }); } catch (/** @type {?} */ error) { reject(error); } }); }; /** * @return {?} */ ParrotsDataService.prototype.loadData = /** * @return {?} */ function () { var _this = this; return new Promise(function (resolve, reject) { try { _this.classesResource.query(_this.className).then(function (response) { try { var /** @type {?} */ result = []; var /** @type {?} */ responseObj = response; if (responseObj !== null && responseObj !== undefined && responseObj.items !== null && responseObj.items !== undefined) { result = responseObj.items; } resolve(result); } catch (/** @type {?} */ err) { reject(err); } }, function (error) { reject(error); }); } catch (/** @type {?} */ error) { reject(error); } }); }; /** * @param {?} data * @return {?} */ ParrotsDataService.prototype.createData = /** * @param {?} data * @return {?} */ function (data) { var _this = this; return new Promise(function (resolve, reject) { _this.classesResource.create(data, _this.className).then(function (response) { try { var /** @type {?} */ result = {}; var /** @type {?} */ responseObj = response; if (responseObj !== null && responseObj !== undefined) { result = responseObj; } resolve(result); } catch (/** @type {?} */ error) { reject(error); } }, function (error) { reject(error); }); }); }; /** * @param {?} data * @return {?} */ ParrotsDataService.prototype._updateData = /** * @param {?} data * @return {?} */ function (data) { var _this = this; if (data === null || data === undefined || data === '') { return Promise.reject("Data's uuid was missing."); } return new Promise(function (resolve, reject) { _this.classesResource.update(data._uuid, _this.className, data).then(function (response) { try { var /** @type {?} */ result = {}; var /** @type {?} */ responseObj = response; if (responseObj !== null && responseObj !== undefined) { result = responseObj; } resolve(result); } catch (/** @type {?} */ error) { reject(error); } }, function (error) { reject(error); }); }); }; /** * @param {?} data * @return {?} */ ParrotsDataService.prototype.updateData = /** * @param {?} data * @return {?} */ function (data) { var _this = this; return new Promise(function (resolve, reject) { try { var /** @type {?} */ promArray = []; var /** @type {?} */ isDataArray_1 = Array.isArray(data); if (isDataArray_1) { try { for (var data_1 = tslib_1.__values(data), data_1_1 = data_1.next(); !data_1_1.done; data_1_1 = data_1.next()) { var d = data_1_1.value; promArray.push(_this._updateData(d)); } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (data_1_1 && !data_1_1.done && (_a = data_1.return)) _a.call(data_1); } finally { if (e_1) throw e_1.error; } } } else { promArray.push(_this._updateData(data)); } // wait for all Promise.all(promArray).then(function (values) { if (isDataArray_1) { resolve(values); } else { resolve(values[0]); } }, function (erros) { reject(erros); }); } catch (/** @type {?} */ error) { reject(error); } var e_1, _a; }); }; /** * @param {?} data * @return {?} */ ParrotsDataService.prototype._deleteData = /** * @param {?} data * @return {?} */ function (data) { var _this = this; if (data === null || data === undefined || data === '') { return Promise.reject("Data's uuid was missing."); } return new Promise(function (resolve, reject) { _this.classesResource.delete(data._uuid, _this.className).then(function (response) { try { var /** @type {?} */ result = {}; var /** @type {?} */ responseObj = response; if (responseObj !== null && responseObj !== undefined) { result = responseObj; } resolve(result); } catch (/** @type {?} */ error) { reject(error); } }, function (error) { reject(error); }); }); }; /** * @param {?} data * @return {?} */ ParrotsDataService.prototype.deleteData = /** * @param {?} data * @return {?} */ function (data) { var _this = this; return new Promise(function (resolve, reject) { try { var /** @type {?} */ promArray = []; var /** @type {?} */ isDataArray_2 = Array.isArray(data); if (isDataArray_2) { try { for (var data_2 = tslib_1.__values(data), data_2_1 = data_2.next(); !data_2_1.done; data_2_1 = data_2.next()) { var d = data_2_1.value; promArray.push(_this._deleteData(d)); } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (data_2_1 && !data_2_1.done && (_a = data_2.return)) _a.call(data_2); } finally { if (e_2) throw e_2.error; } } } else { promArray.push(_this._deleteData(data)); } // wait for all Promise.all(promArray).then(function (values) { if (isDataArray_2) { resolve(values); } else { resolve(values[0]); } }, function (erros) { reject(erros); }); } catch (/** @type {?} */ error) { reject(error); } var e_2, _a; }); }; /** * @param {?} data * @return {?} */ ParrotsDataService.prototype._destroyData = /** * @param {?} data * @return {?} */ function (data) { var _this = this; if (data === null || data === undefined || data === '') { return Promise.reject("Data's uuid was missing."); } return new Promise(function (resolve, reject) { _this.classesResource.delete(data._uuid, _this.className, true).then(function (response) { try { var /** @type {?} */ result = {}; var /** @type {?} */ responseObj = response; if (responseObj !== null && responseObj !== undefined) { result = responseObj; } resolve(result); } catch (/** @type {?} */ error) { reject(error); } }, function (error) { reject(error); }); }); }; /** * @param {?} data * @return {?} */ ParrotsDataService.prototype.destroyData = /** * @param {?} data * @return {?} */ function (data) { var _this = this; return new Promise(function (resolve, reject) { try { var /** @type {?} */ promArray = []; var /** @type {?} */ isDataArray_3 = Array.isArray(data); if (isDataArray_3) { try { for (var data_3 = tslib_1.__values(data), data_3_1 = data_3.next(); !data_3_1.done; data_3_1 = data_3.next()) { var d = data_3_1.value; promArray.push(_this._destroyData(d)); } } catch (e_3_1) { e_3 = { error: e_3_1 }; } finally { try { if (data_3_1 && !data_3_1.done && (_a = data_3.return)) _a.call(data_3); } finally { if (e_3) throw e_3.error; } } } else { promArray.push(_this._destroyData(data)); } // wait for all Promise.all(promArray).then(function (values) { if (isDataArray_3) { resolve(values); } else { resolve(values[0]); } }, function (erros) { reject(erros); }); } catch (/** @type {?} */ error) { reject(error); } var e_3, _a; }); }; /** * @param {?} data * @param {?=} fetchFields * @return {?} */ ParrotsDataService.prototype.fetchData = /** * @param {?} data * @param {?=} fetchFields * @return {?} */ function (data, fetchFields) { var _this = this; if (data === null || data === undefined || data === '') { return Promise.reject("Data's uuid was missing."); } return new Promise(function (resolve, reject) { try { var /** @type {?} */ requestOptions = new RequestOptions(); if (fetchFields !== null && fetchFields !== undefined && fetchFields !== '') { var /** @type {?} */ headers = new Headers(); headers.append("Fetch-Fields", fetchFields); requestOptions.headers = headers; } _this.classesResource.find(data._uuid, _this.className, undefined, undefined, requestOptions).then(function (response) { try { var /** @type {?} */ result = {}; var /** @type {?} */ responseObj = response; if (responseObj !== null && responseObj !== undefined) { // try to fetch obj result = responseObj; } resolve(result); } catch (/** @type {?} */ err) { reject(err); } }, function (error) { reject(error); }); } catch (/** @type {?} */ error) { reject(error); } }); }; /** * @param {?} data * @return {?} */ ParrotsDataService.prototype.findData = /** * @param {?} data * @return {?} */ function (data) { var _this = this; if (data === null || data === undefined || data === '') { return Promise.reject("Data's uuid was missing."); } return new Promise(function (resolve, reject) { _this.classesResource.find(data._uuid, _this.className).then(function (response) { try { var /** @type {?} */ result = {}; var /** @type {?} */ responseObj = response; if (responseObj !== null && responseObj !== undefined) { result = responseObj; } resolve(result); } catch (/** @type {?} */ error) { reject(error); } }, function (error) { reject(error); }); }); }; /** * @param {?} filterData * @return {?} */ ParrotsDataService.prototype.queryData = /** * @param {?} filterData * @return {?} */ function (filterData) { var _this = this; return new Promise(function (resolve, reject) { var /** @type {?} */ queryFilterDTO = {}; if (filterData !== null && filterData !== undefined) { if (filterData.filter !== null && filterData.filter !== undefined) { } if (filterData.sorting !== null && filterData.sorting !== undefined && filterData.sorting !== '') { var /** @type {?} */ sorting = filterData.sorting; var /** @type {?} */ sortStmt = ""; var /** @type {?} */ split = sorting.split(","); for (var /** @type {?} */ i = 0; i < split.length; i++) { sortStmt += split[i] + " and "; } if (sortStmt !== '') { sortStmt = sortStmt.slice(0, sortStmt.length - 5); } console.log("sortStmt: " + sortStmt); queryFilterDTO["ordering"] = sortStmt; } } _this.classesResource.queryWithFilter(_this.className, queryFilterDTO).then(function (response) { try { var /** @type {?} */ result = {}; var /** @type {?} */ responseObj = response; if (responseObj !== null && responseObj !== undefined && responseObj.items !== null && responseObj.items !== undefined) { result = responseObj.items; } resolve(result); } catch (/** @type {?} */ error) { reject(error); } }, function (error) { reject(error); }); }); }; /** * @param {?} data * @return {?} */ ParrotsDataService.prototype._recycleData = /** * @param {?} data * @return {?} */ function (data) { var _this = this; if (data === null || data === undefined || data === '') { return Promise.reject("Data's uuid was missing."); } return new Promise(function (resolve, reject) { _this.classesResource.recycle(data._uuid, _this.className).then(function (response) { try { var /** @type {?} */ result = {}; var /** @type {?} */ responseObj = response; if (responseObj !== null && responseObj !== undefined) { result = responseObj; } resolve(result); } catch (/** @type {?} */ error) { reject(error); } }, function (error) { reject(error); }); }); }; /** * @param {?} data * @return {?} */ ParrotsDataService.prototype.recycleData = /** * @param {?} data * @return {?} */ function (data) { var _this = this; return new Promise(function (resolve, reject) { try { var /** @type {?} */ promArray = []; var /** @type {?} */ isDataArray_4 = Array.isArray(data); if (isDataArray_4) { try { for (var data_4 = tslib_1.__values(data), data_4_1 = data_4.next(); !data_4_1.done; data_4_1 = data_4.next()) { var d = data_4_1.value; promArray.push(_this._recycleData(d)); } } catch (e_4_1) { e_4 = { error: e_4_1 }; } finally { try { if (data_4_1 && !data_4_1.done && (_a = data_4.return)) _a.call(data_4); } finally { if (e_4) throw e_4.error; } } } else { promArray.push(_this._recycleData(data)); } // wait for all Promise.all(promArray).then(function (values) { if (isDataArray_4) { resolve(values); } else { resolve(values[0]); } }, function (erros) { reject(erros); }); } catch (/** @type {?} */ error) { reject(error); } var e_4, _a; }); }; /** * @param {?} data * @return {?} */ ParrotsDataService.prototype._promoteData = /** * @param {?} data * @return {?} */ function (data) { var _this = this; if (data !== null && data !== undefined && data !== '') { if (data._version === null || data._version === undefined || data._version == '') { return Promise.reject("No Version to promote."); } } else { return Promise.reject("Data's uuid was missing."); } return new Promise(function (resolve, reject) { _this.classesResource.promoteVersion(data._version, data._uuid, _this.className).then(function (response) { try { var /** @type {?} */ result = {}; var /** @type {?} */ responseObj = response; if (responseObj !== null && responseObj !== undefined) { result = responseObj; } resolve(result); } catch (/** @type {?} */ error) { reject(error); } }, function (error) { reject(error); }); }); }; /** * @param {?} data * @return {?} */ ParrotsDataService.prototype.promoteData = /** * @param {?} data * @return {?} */ function (data) { var _this = this; return new Promise(function (resolve, reject) { try { var /** @type {?} */ promArray = []; var /** @type {?} */ isDataArray_5 = Array.isArray(data); if (isDataArray_5) { try { for (var data_5 = tslib_1.__values(data), data_5_1 = data_5.next(); !data_5_1.done; data_5_1 = data_5.next()) { var d = data_5_1.value; promArray.push(_this._promoteData(d)); } } catch (e_5_1) { e_5 = { error: e_5_1 }; } finally { try { if (data_5_1 && !data_5_1.done && (_a = data_5.return)) _a.call(data_5); } finally { if (e_5) throw e_5.error; } } } else { promArray.push(_this._promoteData(data)); } // wait for all Promise.all(promArray).then(function (values) { if (isDataArray_5) { resolve(values); } else { resolve(values[0]); } }, function (erros) { reject(erros); }); } catch (/** @type {?} */ error) { reject(error); } var e_5, _a; }); }; return ParrotsDataService; }()); export { ParrotsDataService }; function ParrotsDataService_tsickle_Closure_declarations() { /** @type {?} */ ParrotsDataService.prototype.connectionMgr; /** @type {?} */ ParrotsDataService.prototype.className; /** @type {?} */ ParrotsDataService.prototype.classesResource; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUGFycm90c0RhdGFTZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vaW8ucGFycm90cy8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnQvZWRpdG9yL1BhcnJvdHNEYXRhU2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBa0IsT0FBTyxFQUFFLGNBQWMsRUFBc0IsTUFBTSxlQUFlLENBQUM7QUFDNUYsT0FBTyxFQUFjLFNBQVMsRUFBYyxNQUFNLGFBQWEsQ0FBQztBQUVoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUV4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFdkUsSUFBQTtJQU1FLDRCQUFZLFNBQWlCLEVBQUUsYUFBd0M7UUFDckUsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7UUFDbkMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLGVBQWUsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0tBQ3RFOzs7O0lBRU0sMkNBQWM7Ozs7O1FBRW5CLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxVQUFDLE9BQU8sRUFBRSxNQUFNO1lBQ2pDLElBQUksQ0FBQztnQkFDSCxLQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxLQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQUMsUUFBUTtvQkFFL0QsSUFBSSxDQUFDOzt3QkFFSCxxQkFBSSxXQUFXLEdBQUcsUUFBUSxDQUFBO3dCQUMxQixxQkFBSSxVQUFVLEdBQWdCLEVBQUUsQ0FBQzt3QkFDakMscUJBQUksVUFBVSxHQUFlLFdBQVcsQ0FBQzt3QkFFekMsR0FBRyxDQUFDLENBQUMscUJBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDOzRCQUN0QyxxQkFBSSxjQUFjLEdBQWUsVUFBVSxD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b2hCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHAsIFJlc3BvbnNlLCBIZWFkZXJzLCBSZXF1ZXN0T3B0aW9ucywgUmVxdWVzdE9wdGlvbnNBcmdzIH0gZnJvbSAnQGFuZ3VsYXIvaHR0cCc7XG5pbXBvcnQgeyBEYXRhU2NoZW1hLCBEYXRhRmllbGQsIEpzb25TY2hlbWEgfSBmcm9tICdjb20ucGhsb3h1aSc7XG5pbXBvcnQgeyBJUGFycm90c0RhdGFTZXJ2aWNlLCB9IGZyb20gJy4vSVBhcnJvdHNEYXRhU2VydmljZSc7XG5pbXBvcnQgeyBQYXJyb3RzRGF0YVNjaGVtYSB9IGZyb20gJy4uLy4uL3NoYXJlL21vZGVsL1BhcnJvdHNEYXRhU2NoZW1hJztcbmltcG9ydCB7IEluc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIgfSBmcm9tICcuLi8uLi9zZXJ2aWNlL0luc3RhbmNlQ29ubmVjdGlvbk1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDbGFzc2VzUmVzb3VyY2UgfSBmcm9tICcuLi8uLi9zaGFyZS9yZXNvdXJjZS9DbGFzc2VzUmVzb3VyY2UnO1xuXG5leHBvcnQgY2xhc3MgUGFycm90c0RhdGFTZXJ2aWNlIGltcGxlbWVudHMgSVBhcnJvdHNEYXRhU2VydmljZSB7XG5cbiAgcHJpdmF0ZSBjb25uZWN0aW9uTWdyOiBJbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyO1xuICBwcml2YXRlIGNsYXNzTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIGNsYXNzZXNSZXNvdXJjZTogQ2xhc3Nlc1Jlc291cmNlO1xuXG4gIGNvbnN0cnVjdG9yKGNsYXNzTmFtZTogc3RyaW5nLCBjb25uZWN0aW9uTWdyOiBJbnN0YW5jZUNvbm5lY3Rpb25NYW5hZ2VyKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uTWdyID0gY29ubmVjdGlvbk1ncjtcbiAgICB0aGlzLmNsYXNzTmFtZSA9IGNsYXNzTmFtZTtcbiAgICB0aGlzLmNsYXNzZXNSZXNvdXJjZSA9IGNvbm5lY3Rpb25NZ3IuY3JlYXRlUmVzb3VyY2UoQ2xhc3Nlc1Jlc291cmNlKTtcbiAgfVxuXG4gIHB1YmxpYyBsb2FkRGF0YVNjaGVtYSgpOiBQcm9taXNlPFBhcnJvdHNEYXRhU2NoZW1hPiB7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5jbGFzc2VzUmVzb3VyY2UuZ2V0U2NoZW1hSW5mbyh0aGlzLmNsYXNzTmFtZSkudGhlbigocmVzcG9uc2UpID0+IHtcblxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyByZXNwb25zZSBzaG91bGQgYnkgaW4ganNvbiBpZiBub3QgcmVqZWN0IGluIGNhdGNoXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2VPYmogPSByZXNwb25zZVxuICAgICAgICAgICAgbGV0IGRhdGFGaWVsZHM6IERhdGFGaWVsZFtdID0gW107XG4gICAgICAgICAgICBsZXQganNvblNjaGVtYTogSnNvblNjaGVtYSA9IHJlc3BvbnNlT2JqO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBrZXkgaW4ganNvblNjaGVtYS5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgIGxldCBzZWxmSnNvblNjaGVtYTogSnNvblNjaGVtYSA9IGpzb25TY2hlbWEucHJvcGVydGllc1trZXldO1xuXG4gICAgICAgICAgICAgIGlmIChzZWxmSnNvblNjaGVtYSA9PT0gbnVsbCB8fCBzZWxmSnNvblNjaGVtYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBsZXQgZGF0YUZpZWxkOiBEYXRhRmllbGQgPSBuZXcgRGF0YUZpZWxkKGtleSwga2V5LCBzZWxmSnNvblNjaGVtYS50eXBlLCBzZWxmSnNvblNjaGVtYSwgbnVsbCk7XG4gICAgICAgICAgICAgIGRhdGFGaWVsZHMucHVzaChkYXRhRmllbGQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgcmVzdWx0U2NoZW1hOiBQYXJyb3RzRGF0YVNjaGVtYSA9IG5ldyBQYXJyb3RzRGF0YVNjaGVtYShyZXNwb25zZU9iai5pZCwgcmVzcG9uc2VPYmouaWQsIGRhdGFGaWVsZHMsIGpzb25TY2hlbWEpO1xuXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdFNjaGVtYSk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH0pLmNhdGNoKGVycm9yID0+IHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgbG9hZERhdGEoKTogUHJvbWlzZTxhbnk+IHtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuXG4gICAgICAgIHRoaXMuY2xhc3Nlc1Jlc291cmNlLnF1ZXJ5KHRoaXMuY2xhc3NOYW1lKS50aGVuKChyZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuXG4gICAgICAgICAgICBsZXQgcmVzcG9uc2VPYmogPSByZXNwb25zZVxuXG4gICAgICAgICAgICBpZiAocmVzcG9uc2VPYmogIT09IG51bGwgJiYgcmVzcG9uc2VPYmogIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICByZXNwb25zZU9iai5pdGVtcyAhPT0gbnVsbCAmJiByZXNwb25zZU9iai5pdGVtcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3BvbnNlT2JqLml0ZW1zO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICAgIH1cbiAgICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGNyZWF0ZURhdGEoZGF0YTogYW55KTogUHJvbWlzZTxhbnk+IHtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cbiAgICAgIHRoaXMuY2xhc3Nlc1Jlc291cmNlLmNyZWF0ZShkYXRhLCB0aGlzLmNsYXNzTmFtZSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgICAgdHJ5IHtcblxuICAgICAgICAgIGxldCByZXN1bHQ6IGFueSA9IHt9O1xuXG4gICAgICAgICAgbGV0IHJlc3BvbnNlT2JqID0gcmVzcG9uc2VcblxuICAgICAgICAgIGlmIChyZXNwb25zZU9iaiAhPT0gbnVsbCAmJiByZXNwb25zZU9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXNwb25zZU9iajtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG5cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9LCAoZXJyb3IpID0+IHtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIF91cGRhdGVEYXRhKGRhdGE6IGFueSk6IFByb21pc2U8YW55PiB7XG5cbiAgICBpZiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQgfHwgZGF0YSA9PT0gJycpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIkRhdGEncyB1dWlkIHdhcyBtaXNzaW5nLlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICB0aGlzLmNsYXNzZXNSZXNvdXJjZS51cGRhdGUoZGF0YS5fdXVpZCwgdGhpcy5jbGFzc05hbWUsIGRhdGEpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRyeSB7XG5cbiAgICAgICAgICBsZXQgcmVzdWx0OiBhbnkgPSB7fTtcblxuICAgICAgICAgIGxldCByZXNwb25zZU9iaiA9IHJlc3BvbnNlXG5cbiAgICAgICAgICBpZiAocmVzcG9uc2VPYmogIT09IG51bGwgJiYgcmVzcG9uc2VPYmogIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVzdWx0ID0gcmVzcG9uc2VPYmo7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfSwgKGVycm9yKSA9PiB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyB1cGRhdGVEYXRhKGRhdGE6IGFueSk6IFByb21pc2U8YW55PiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgbGV0IHByb21BcnJheTogUHJvbWlzZTxhbnk+W10gPSBbXTtcbiAgICAgICAgbGV0IGlzRGF0YUFycmF5ID0gQXJyYXkuaXNBcnJheShkYXRhKTtcbiAgICAgICAgaWYgKGlzRGF0YUFycmF5KSB7XG4gICAgICAgICAgZm9yIChsZXQgZCBvZiBkYXRhKSB7XG4gICAgICAgICAgICBwcm9tQXJyYXkucHVzaCh0aGlzLl91cGRhdGVEYXRhKGQpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcHJvbUFycmF5LnB1c2godGhpcy5fdXBkYXRlRGF0YShkYXRhKSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyB3YWl0IGZvciBhbGxcbiAgICAgICAgUHJvbWlzZS5hbGwocHJvbUFycmF5KS50aGVuKCh2YWx1ZXMpID0+IHtcbiAgICAgICAgICBpZiAoaXNEYXRhQXJyYXkpIHtcbiAgICAgICAgICAgIHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZXNbMF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSwgKGVycm9zKSA9PiB7XG4gICAgICAgICAgcmVqZWN0KGVycm9zKTtcbiAgICAgICAgfSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9kZWxldGVEYXRhKGRhdGE6IGFueSk6IFByb21pc2U8YW55PiB7XG5cbiAgICBpZiAoZGF0YSA9PT0gbnVsbCB8fCBkYXRhID09PSB1bmRlZmluZWQgfHwgZGF0YSA9PT0gJycpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChcIkRhdGEncyB1dWlkIHdhcyBtaXNzaW5nLlwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXG4gICAgICB0aGlzLmNsYXNzZXNSZXNvdXJjZS5kZWxldGUoZGF0YS5fdXVpZCwgdGhpcy5jbGFzc05hbWUpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICA