skapps-tools
Version:
Tools for SKAPPS apps
165 lines (117 loc) • 30.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.LTS = void 0;
var _skappsLocalization = _interopRequireDefault(require("skapps-localization"));
var _skappsData = require("skapps-data");
var _esm = require("date-fns/esm");
var _locale = require("date-fns/locale");
var _Tools = require("./Tools");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
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; }
var LTS = function LTS() {
_classCallCheck(this, LTS);
};
exports.LTS = LTS;
_defineProperty(LTS, "getObjName", function (op) {
return op ? op.objname ? op.objname.toLowerCase() : "" : "";
});
_defineProperty(LTS, "getFieldName", function (op) {
return op ? op.name ? op.name.toLowerCase() : "" : "";
});
_defineProperty(LTS, "getListLabel", function (op) {
if (LTS.getObjName(op) === "" || LTS.getFieldName(op) === "") {
return "";
}
return _skappsLocalization["default"].getString(_skappsData.E.LABELSTRING.LABELSPEROBJECT + LTS.getObjName(op) + _skappsData.E.LABELSTRING.LISTLABEL + LTS.getFieldName(op), _skappsLocalization["default"].getLanguage());
});
_defineProperty(LTS, "getListHint", function (op) {
if (LTS.getObjName(op) === "" || LTS.getFieldName(op) === "") {
return "";
}
return _skappsLocalization["default"].getString(_skappsData.E.LABELSTRING.LABELSPEROBJECT + LTS.getObjName(op) + _skappsData.E.LABELSTRING.LISTHINT + LTS.getFieldName(op), _skappsLocalization["default"].getLanguage());
});
_defineProperty(LTS, "getDetailLabel", function (op) {
if (LTS.getObjName(op) === "" || LTS.getFieldName(op) === "") {
return "";
}
return _skappsLocalization["default"].getString(_skappsData.E.LABELSTRING.LABELSPEROBJECT + LTS.getObjName(op) + _skappsData.E.LABELSTRING.DETAILLABEL + LTS.getFieldName(op), _skappsLocalization["default"].getLanguage());
});
_defineProperty(LTS, "getDetailPlaceHolder", function (op) {
if (LTS.getObjName(op) === "" || LTS.getFieldName(op) === "") {
return "";
}
return _skappsLocalization["default"].getString(_skappsData.E.LABELSTRING.LABELSPEROBJECT + LTS.getObjName(op) + _skappsData.E.LABELSTRING.DETAILPLACEHOLDER + LTS.getFieldName(op), _skappsLocalization["default"].getLanguage());
});
_defineProperty(LTS, "getDetailHelperText", function (op) {
if (LTS.getObjName(op) === "" || LTS.getFieldName(op) === "") {
return "";
}
return _skappsLocalization["default"].getString(_skappsData.E.LABELSTRING.LABELSPEROBJECT + LTS.getObjName(op) + _skappsData.E.LABELSTRING.DETAILHELPERTEXT + LTS.getFieldName(op), _skappsLocalization["default"].getLanguage());
});
_defineProperty(LTS, "getEnumLabel", function (enumName, enumValue) {
if (_Tools.TS.isEmpty(enumName) || _Tools.TS.isEmpty(enumValue)) {
return "";
}
var label = _skappsLocalization["default"].getString(_skappsData.E.LABELSTRING.LABELSPERENUM + enumName.toLowerCase() + "." + enumValue.toLowerCase(), _skappsLocalization["default"].getLanguage());
return _Tools.TS.isEmpty(label) ? enumValue : label;
});
_defineProperty(LTS, "getLabelForValue", function (op) {
var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : op.value;
var labelforvalue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : op.labelforvalue;
//check if op and value args are filled
if (_Tools.TS.isEmpty(op, _skappsData.D.Enum_FIELDTYPE.OBJECT) || _Tools.TS.isEmpty(value) || _Tools.TS.isEmpty(op.fieldtype) || _Tools.TS.isEmpty(op.type)) {
return "";
} //DATETIME fields
if (op.fieldtype === _skappsData.D.Enum_FIELDTYPE.DATE || op.fieldtype === _skappsData.D.Enum_FIELDTYPE.TIME || op.fieldtype === _skappsData.D.Enum_FIELDTYPE.DATETIME) {
console.log("DATETIME STRING FROM DATABASE: " + value);
var dateParsed = new Date(value);
var formatString = 'd MMMM yyyy';
if (op.fieldtype === _skappsData.D.Enum_FIELDTYPE.TIME) {
formatString = 'HH:mm:ss.SSS';
}
if (op.fieldtype === _skappsData.D.Enum_FIELDTYPE.DATETIME) {
formatString = 'd MMMM yyyy, HH:mm:ss.SSS';
}
return (0, _esm.format)(dateParsed, formatString, {
locale: LTS.getLocale()
});
} //BOOLEANS
if (op.type.toLowerCase().indexOf("boolean") >= 0) {
return value === "1" ? _skappsLocalization["default"].generic.yes : _skappsLocalization["default"].generic.no;
} //check if this is an enumerate field
if (op.enumerate) {
return LTS.getEnumLabel(op.name, value);
} //check labelforvalue: if filled, return it
if (!_Tools.TS.isEmpty(labelforvalue)) {
if (labelforvalue === _skappsData.P.NONE) {
return "";
} else {
return labelforvalue;
}
} //in all other cases just return value
return value;
});
_defineProperty(LTS, "getLocale", function () {
var locale = _locale.enGB;
if (_skappsLocalization["default"].getLanguage() === _skappsData.D.Enum_LANGUAGECODE.nl) {
locale = _locale.nl;
}
if (_skappsLocalization["default"].getLanguage() === _skappsData.D.Enum_LANGUAGECODE.en) {
locale = _locale.enGB;
}
_Tools.TS.logDebug(_skappsData.E.PAGENAME.LANGUAGETOOLS, "getLocale").addVarStr("LANGUAGE:" + _skappsLocalization["default"].getLanguage(), "LOCALE:" + JSON.stringify(locale)).log();
return locale;
});
_defineProperty(LTS, "getForThisOrThat", function (objName) {
//this function exists to set the title for collections in very specific dutch case where different nouns require different translations of for this
if (_skappsLocalization["default"].getLanguage() === _skappsData.D.Enum_LANGUAGECODE.nl) {
if (objName === _skappsData.D.Enum_OBJECTNAME.Account || objName === _skappsData.D.Enum_OBJECTNAME.Address || objName === _skappsData.D.Enum_OBJECTNAME.Airport || objName === _skappsData.D.Enum_OBJECTNAME.BatchDocument || objName === _skappsData.D.Enum_OBJECTNAME.BatchField || objName === _skappsData.D.Enum_OBJECTNAME.Case || objName === _skappsData.D.Enum_OBJECTNAME.ClientObject || objName === _skappsData.D.Enum_OBJECTNAME.Company || objName === _skappsData.D.Enum_OBJECTNAME.Country || objName === _skappsData.D.Enum_OBJECTNAME.Document || objName === _skappsData.D.Enum_OBJECTNAME.Label || objName === _skappsData.D.Enum_OBJECTNAME.BatchFieldDetails || objName === _skappsData.D.Enum_OBJECTNAME.Template || objName === _skappsData.D.Enum_OBJECTNAME.TemplateField || objName === _skappsData.D.Enum_OBJECTNAME.TemplateSheet) {
return _skappsLocalization["default"].generic.forthis.toLowerCase();
}
}
return _skappsLocalization["default"].generic.forthat.toLowerCase();
});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9MYW5ndWFnZVRvb2xzLnRzeCJdLCJuYW1lcyI6WyJMVFMiLCJvcCIsIm9iam5hbWUiLCJ0b0xvd2VyQ2FzZSIsIm5hbWUiLCJnZXRPYmpOYW1lIiwiZ2V0RmllbGROYW1lIiwiTFMiLCJnZXRTdHJpbmciLCJFIiwiTEFCRUxTVFJJTkciLCJMQUJFTFNQRVJPQkpFQ1QiLCJMSVNUTEFCRUwiLCJnZXRMYW5ndWFnZSIsIkxJU1RISU5UIiwiREVUQUlMTEFCRUwiLCJERVRBSUxQTEFDRUhPTERFUiIsIkRFVEFJTEhFTFBFUlRFWFQiLCJlbnVtTmFtZSIsImVudW1WYWx1ZSIsIlRTIiwiaXNFbXB0eSIsImxhYmVsIiwiTEFCRUxTUEVSRU5VTSIsInZhbHVlIiwibGFiZWxmb3J2YWx1ZSIsIkQiLCJFbnVtX0ZJRUxEVFlQRSIsIk9CSkVDVCIsImZpZWxkdHlwZSIsInR5cGUiLCJEQVRFIiwiVElNRSIsIkRBVEVUSU1FIiwiY29uc29sZSIsImxvZyIsImRhdGVQYXJzZWQiLCJEYXRlIiwiZm9ybWF0U3RyaW5nIiwibG9jYWxlIiwiZ2V0TG9jYWxlIiwiaW5kZXhPZiIsImdlbmVyaWMiLCJ5ZXMiLCJubyIsImVudW1lcmF0ZSIsImdldEVudW1MYWJlbCIsIlAiLCJOT05FIiwiZW5HQiIsIkVudW1fTEFOR1VBR0VDT0RFIiwibmwiLCJlbiIsImxvZ0RlYnVnIiwiUEFHRU5BTUUiLCJMQU5HVUFHRVRPT0xTIiwiYWRkVmFyU3RyIiwiSlNPTiIsInN0cmluZ2lmeSIsIm9iak5hbWUiLCJFbnVtX09CSkVDVE5BTUUiLCJBY2NvdW50IiwiQWRkcmVzcyIsIkFpcnBvcnQiLCJCYXRjaERvY3VtZW50IiwiQmF0Y2hGaWVsZCIsIkNhc2UiLCJDbGllbnRPYmplY3QiLCJDb21wYW55IiwiQ291bnRyeSIsIkRvY3VtZW50IiwiTGFiZWwiLCJCYXRjaEZpZWxkRGV0YWlscyIsIlRlbXBsYXRlIiwiVGVtcGxhdGVGaWVsZCIsIlRlbXBsYXRlU2hlZXQiLCJmb3J0aGlz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QjFFLFdBQW5CLEVBQVA7QUFDSCxDIiwic291cmNlc0NvbnRlbnQiOlsi77u/aW1wb3J0IExTIGZyb20gJ3NrYXBwcy1sb2NhbGl6YXRpb24nOyBcclxuaW1wb3J0IHsgUCwgRCwgRSB9IGZyb20gJ3NrYXBwcy1kYXRhJztcclxuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnZGF0ZS1mbnMvZXNtJztcclxuaW1wb3J0IHsgbmwsIGVuR0IgfSBmcm9tICdkYXRlLWZucy9sb2NhbGUnO1xyXG5pbXBvcnQgeyBMb2NhbGUgfSBmcm9tICdkYXRlLWZucyc7XHJcbmltcG9ydCB7IFRTIH0gZnJvbSAnLi9Ub29scyc7XHJcblxyXG5leHBvcnQgY2xhc3MgTFRTIHtcclxuICAgIHN0YXRpYyBnZXRPYmpOYW1lID0gKG9wOiBELk9iamVjdFByb3BlcnR5KTpzdHJpbmcgPT4ge1xyXG4gICAgICAgIHJldHVybiBvcD9vcC5vYmpuYW1lP29wLm9iam5hbWUudG9Mb3dlckNhc2UoKTpcIlwiOlwiXCI7ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0RmllbGROYW1lID0gKG9wOiBELk9iamVjdFByb3BlcnR5KTpzdHJpbmcgPT4ge1xyXG4gICAgICAgIHJldHVybiBvcD9vcC5uYW1lP29wLm5hbWUudG9Mb3dlckNhc2UoKTpcIlwiOlwiXCI7ICAgICAgICBcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0TGlzdExhYmVsID0gKG9wOiBELk9iamVjdFByb3BlcnR5KTogc3RyaW5nID0+IHtcclxuXHJcbiAgICAgICAgaWYgKExUUy5nZXRPYmpOYW1lKG9wKT09PVwiXCIgfHwgTFRTLmdldEZpZWxkTmFtZShvcCk9PT1cIlwiKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgICAgIHJldHVybiBMUy5nZXRTdHJpbmcoRS5MQUJFTFNUUklORy5MQUJFTFNQRVJPQkpFQ1QgKyBMVFMuZ2V0T2JqTmFtZShvcCkgKyBFLkxBQkVMU1RSSU5HLkxJU1RMQUJFTCArIExUUy5nZXRGaWVsZE5hbWUob3ApLFxyXG4gICAgICAgICAgICBMUy5nZXRMYW5ndWFnZSgpKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0TGlzdEhpbnQgPSAob3A6IEQuT2JqZWN0UHJvcGVydHkpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIGlmIChMVFMuZ2V0T2JqTmFtZShvcCk9PT1cIlwiIHx8IExUUy5nZXRGaWVsZE5hbWUob3ApPT09XCJcIikge3JldHVybiBcIlwiO31cclxuICAgICAgICByZXR1cm4gTFMuZ2V0U3RyaW5nKEUuTEFCRUxTVFJJTkcuTEFCRUxTUEVST0JKRUNUICsgTFRTLmdldE9iak5hbWUob3ApICsgRS5MQUJFTFNUUklORy5MSVNUSElOVCArIExUUy5nZXRGaWVsZE5hbWUob3ApLCBMUy5nZXRMYW5ndWFnZSgpKVxyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXREZXRhaWxMYWJlbCA9IChvcDogRC5PYmplY3RQcm9wZXJ0eSk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgaWYgKExUUy5nZXRPYmpOYW1lKG9wKT09PVwiXCIgfHwgTFRTLmdldEZpZWxkTmFtZShvcCk9PT1cIlwiKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgICAgIHJldHVybiBMUy5nZXRTdHJpbmcoRS5MQUJFTFNUUklORy5MQUJFTFNQRVJPQkpFQ1QgKyBMVFMuZ2V0T2JqTmFtZShvcCkgKyBFLkxBQkVMU1RSSU5HLkRFVEFJTExBQkVMICsgTFRTLmdldEZpZWxkTmFtZShvcCksIExTLmdldExhbmd1YWdlKCkpXHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldERldGFpbFBsYWNlSG9sZGVyID0gKG9wOiBELk9iamVjdFByb3BlcnR5KTogc3RyaW5nID0+IHtcclxuICAgICAgICBpZiAoTFRTLmdldE9iak5hbWUob3ApPT09XCJcIiB8fCBMVFMuZ2V0RmllbGROYW1lKG9wKT09PVwiXCIpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICAgICAgcmV0dXJuIExTLmdldFN0cmluZyhFLkxBQkVMU1RSSU5HLkxBQkVMU1BFUk9CSkVDVCArIExUUy5nZXRPYmpOYW1lKG9wKSArIEUuTEFCRUxTVFJJTkcuREVUQUlMUExBQ0VIT0xERVIgKyBMVFMuZ2V0RmllbGROYW1lKG9wKSwgTFMuZ2V0TGFuZ3VhZ2UoKSlcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0RGV0YWlsSGVscGVyVGV4dCA9IChvcDogRC5PYmplY3RQcm9wZXJ0eSk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgaWYgKExUUy5nZXRPYmpOYW1lKG9wKT09PVwiXCIgfHwgTFRTLmdldEZpZWxkTmFtZShvcCk9PT1cIlwiKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgICAgIHJldHVybiBMUy5nZXRTdHJpbmcoRS5MQUJFTFNUUklORy5MQUJFTFNQRVJPQkpFQ1QgKyBMVFMuZ2V0T2JqTmFtZShvcCkgKyBFLkxBQkVMU1RSSU5HLkRFVEFJTEhFTFBFUlRFWFQgKyBMVFMuZ2V0RmllbGROYW1lKG9wKSwgTFMuZ2V0TGFuZ3VhZ2UoKSlcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0RW51bUxhYmVsID0gKGVudW1OYW1lOiBzdHJpbmcsIGVudW1WYWx1ZTogc3RyaW5nKTogc3RyaW5nID0+IHtcclxuICAgICAgICBpZiAoVFMuaXNFbXB0eShlbnVtTmFtZSkgfHwgVFMuaXNFbXB0eShlbnVtVmFsdWUpKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgICAgIGxldCBsYWJlbDpzdHJpbmcgPSBMUy5nZXRTdHJpbmcoRS5MQUJFTFNUUklORy5MQUJFTFNQRVJFTlVNICsgZW51bU5hbWUudG9Mb3dlckNhc2UoKSArIFwiLlwiICsgZW51bVZhbHVlLnRvTG93ZXJDYXNlKCksIExTLmdldExhbmd1YWdlKCkpXHJcbiAgICAgICAgcmV0dXJuIChUUy5pc0VtcHR5KGxhYmVsKT9lbnVtVmFsdWU6bGFiZWwpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRMYWJlbEZvclZhbHVlID0gKG9wOiBELk9iamVjdFByb3BlcnR5LCB2YWx1ZTogc3RyaW5nID0gb3AudmFsdWUsIGxhYmVsZm9ydmFsdWU6IHN0cmluZyA9IG9wLmxhYmVsZm9ydmFsdWUpOiBzdHJpbmcgPT4ge1xyXG4gICAgICAgIC8vY2hlY2sgaWYgb3AgYW5kIHZhbHVlIGFyZ3MgYXJlIGZpbGxlZFxyXG4gICAgICAgIGlmIChUUy5pc0VtcHR5KG9wLCBELkVudW1fRklFTERUWVBFLk9CSkVDVCkgfHwgVFMuaXNFbXB0eSh2YWx1ZSkgfHwgVFMuaXNFbXB0eShvcC5maWVsZHR5cGUpIHx8IFRTLmlzRW1wdHkob3AudHlwZSkpIFxyXG4gICAgICAgIHsgcmV0dXJuIFwiXCI7IH1cclxuICAgICAgICAvL0RBVEVUSU1FIGZpZWxkc1xyXG4gICAgICAgIGlmIChvcC5maWVsZHR5cGUgPT09IEQuRW51bV9GSUVMRFRZUEUuREFURSB8fCBvcC5maWVsZHR5cGUgPT09IEQuRW51bV9GSUVMRFRZUEUuVElNRSB8fCBvcC5maWVsZHR5cGUgPT09IEQuRW51bV9GSUVMRFRZUEUuREFURVRJTUUpe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkRBVEVUSU1FIFNUUklORyBGUk9NIERBVEFCQVNFOiBcIiArIHZhbHVlKTtcclxuICAgICAgICAgICAgbGV0IGRhdGVQYXJzZWQ6IERhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIGxldCBmb3JtYXRTdHJpbmc6IHN0cmluZyA9ICdkIE1NTU0geXl5eSc7XHJcbiAgICAgICAgICAgIGlmIChvcC5maWVsZHR5cGUgPT09IEQuRW51bV9GSUVMRFRZUEUuVElNRSkge2Zvcm1hdFN0cmluZyA9ICdISDptbTpzcy5TU1MnO31cclxuICAgICAgICAgICAgaWYgKG9wLmZpZWxkdHlwZSA9PT0gRC5FbnVtX0ZJRUxEVFlQRS5EQVRFVElNRSkge2Zvcm1hdFN0cmluZyA9ICdkIE1NTU0geXl5eSwgSEg6bW06c3MuU1NTJzt9XHJcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXQoZGF0ZVBhcnNlZCwgZm9ybWF0U3RyaW5nLCB7IGxvY2FsZTogTFRTLmdldExvY2FsZSgpIH0pOyBcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9CT09MRUFOU1xyXG4gICAgICAgIGlmIChvcC50eXBlLnRvTG93ZXJDYXNlKCkuaW5kZXhPZihcImJvb2xlYW5cIikgPj0gMCkgeyByZXR1cm4gKHZhbHVlID09PSBcIjFcIiA/IExTLmdlbmVyaWMueWVzIDogTFMuZ2VuZXJpYy5ubyk7IH1cclxuICAgICAgICAvL2NoZWNrIGlmIHRoaXMgaXMgYW4gZW51bWVyYXRlIGZpZWxkXHJcbiAgICAgICAgaWYgKG9wLmVudW1lcmF0ZSkgeyByZXR1cm4gTFRTLmdldEVudW1MYWJlbChvcC5uYW1lLCB2YWx1ZSk7fVxyXG4gICAgICAgIC8vY2hlY2sgbGFiZWxmb3J2YWx1ZTogaWYgZmlsbGVkLCByZXR1cm4gaXRcclxuICAgICAgICBpZiAoIVRTLmlzRW1wdHkobGFiZWxmb3J2YWx1ZSkpIHtcclxuICAgICAgICAgICAgaWYgKGxhYmVsZm9ydmFsdWUgPT09IFAuTk9ORSkgeyByZXR1cm4gXCJcIjsgfSBlbHNlIHsgcmV0dXJuIGxhYmVsZm9ydmFsdWU7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy9pbiBhbGwgb3RoZXIgY2FzZXMganVzdCByZXR1cm4gdmFsdWVcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldExvY2FsZSA9ICgpOiBMb2NhbGUgPT4ge1xyXG4gICAgICAgIGxldCBsb2NhbGU6IExvY2FsZSA9IGVuR0I7XHJcbiAgICAgICAgaWYgKExTLmdldExhbmd1YWdlKCkgPT09IEQuRW51bV9MQU5HVUFHRUNPREUubmwpIHsgbG9jYWxlID0gbmw7IH1cclxuICAgICAgICBpZiAoTFMuZ2V0TGFuZ3VhZ2UoKSA9PT0gRC5FbnVtX0xBTkdVQUdFQ09ERS5lbikgeyBsb2NhbGUgPSBlbkdCOyB9XHJcbiAgICAgICAgVFMubG9nRGVidWcoRS5QQUdFTkFNRS5MQU5HVUFHRVRPT0xTLCBcImdldExvY2FsZVwiKS5hZGRWYXJTdHIoXCJMQU5HVUFHRTpcIiArIExTLmdldExhbmd1YWdlKCksIFwiTE9DQUxFOlwiICsgSlNPTi5zdHJpbmdpZnkobG9jYWxlKSkubG9nKCk7XHJcbiAgICAgICAgcmV0dXJuIGxvY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0Rm9yVGhpc09yVGhhdCA9IChvYmpOYW1lOiBELkVudW1fT0JKRUNUTkFNRSk6IHN0cmluZyA9PiB7XHJcbiAgICAgICAgLy90aGlzIGZ1bmN0aW9uIGV4aXN0cyB0byBzZXQgdGhlIHRpdGxlIGZvciBjb2xsZWN0aW9ucyBpbiB2ZXJ5IHNwZWNpZmljIGR1dGNoIGNhc2Ugd2hlcmUgZGlmZmVyZW50IG5vdW5zIHJlcXVpcmUgZGlmZmVyZW50IHRyYW5zbGF0aW9ucyBvZiBmb3IgdGhpc1xyXG4gICAgICAgIGlmIChMUy5nZXRMYW5ndWFnZSgpID09PSBELkVudW1fTEFOR1VBR0VDT0RFLm5sKSB7XHJcbiAgICAgICAgICAgIGlmIChvYmpOYW1lID09PSBELkVudW1fT0JKRUNUTkFNRS5BY2NvdW50IHx8IG9iak5hbWUgPT09IEQuRW51bV9PQkpFQ1ROQU1FLkFkZHJlc3MgfHwgb2JqTmFtZSA9PT0gRC5FbnVtX09CSkVDVE5BTUUuQWlycG9ydCB8fCBvYmpOYW1lID09PSBELkVudW1fT0JKRUNUTkFNRS5CYXRjaERvY3VtZW50IHx8IG9iak5hbWUgPT09IEQuRW51bV9PQkpFQ1ROQU1FLkJhdGNoRmllbGQgfHwgb2JqTmFtZSA9PT0gRC5FbnVtX09CSkVDVE5BTUUuQ2FzZSB8fCBvYmpOYW1lID09PSBELkVudW1fT0JKRUNUTkFNRS5DbGllbnRPYmplY3QgfHwgb2JqTmFtZSA9PT0gRC5FbnVtX09CSkVDVE5BTUUuQ29tcGFueSB8fCBvYmpOYW1lID09PSBELkVudW1fT0JKRUNUTkFNRS5Db3VudHJ5IHx8IG9iak5hbWUgPT09IEQuRW51bV9PQkpFQ1ROQU1FLkRvY3VtZW50IHx8IG9iak5hbWUgPT09IEQuRW51bV9PQkpFQ1ROQU1FLkxhYmVsIHx8IG9iak5hbWUgPT09IEQuRW51bV9PQkpFQ1ROQU1FLkJhdGNoRmllbGREZXRhaWxzIHx8IG9iak5hbWUgPT09IEQuRW51bV9PQkpFQ1ROQU1FLlRlbXBsYXRlIHx8IG9iak5hbWUgPT09IEQuRW51bV9PQkpFQ1ROQU1FLlRlbXBsYXRlRmllbGQgfHwgb2JqTmFtZSA9PT0gRC5FbnVtX09CSkVDVE5BTUUuVGVtcGxhdGVTaGVldCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIExTLmdlbmVyaWMuZm9ydGhpcy50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBMUy5nZW5lcmljLmZvcnRoYXQudG9Mb3dlckNhc2UoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBzdGF0aWMgZ2V0RGF0ZU9iamVjdCA9ICh2OiBzdHJpbmcsIHR5cGU6IEQuRW51bV9GSUVMRFRZUEUpOiBEYXRlID0+IHtcclxuICAgICAgICBsZXQgZGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHYpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiVE9TVFJJTkc6IFwiKyBkYXRlLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiVE9EQVRFU1RSSU5HOiBcIisgZGF0ZS50b0RhdGVTdHJpbmcoKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJUT1RJTUVTVFJJTkc6IFwiKyBkYXRlLnRvVGltZVN0cmluZygpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRPVVRDU1RSSU5HOiBcIisgZGF0ZS50b1VUQ1N0cmluZygpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRPTE9DQUxFU1RSSU5HOiBcIisgZGF0ZS50b0xvY2FsZVN0cmluZygpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIlRPTE9DQUxFREFURVNUUklORzogXCIrIGRhdGUudG9Mb2NhbGVEYXRlU3RyaW5nKCkpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiVE9MT0NBTEVUSU1FU1RSSU5HOiBcIisgZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJUT0lTT1NUUklORzogXCIrIGRhdGUudG9JU09TdHJpbmcoKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJHRVREQVRFOiBcIisgZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJHRVRUSU1FOiBcIisgZGF0ZS5nZXRUaW1lKCkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJHRVREQVk6IFwiKyBkYXRlLmdldERheSgpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiR0VUTU9OVEg6IFwiKyBkYXRlLmdldE1vbnRoKCkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJHRVRGVUxMWUVBUjogXCIrIGRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkdFVEhPVVJTOiBcIisgZGF0ZS5nZXRIb3VycygpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiR0VUTUlOVVRFUzogXCIrIGRhdGUuZ2V0TWludXRlcygpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiR0VUU0VDT05EUzogXCIrIGRhdGUuZ2V0U2Vjb25kcygpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiR0VUTUlMTElTRUNPTkRTOiBcIisgZGF0ZS5nZXRNaWxsaXNlY29uZHMoKS50b1N0cmluZygpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkdFVFRJTUVaT05FT0ZGU0VUOiBESUZGIElOIE1JTlVURVMgTE9DQUwgVE8gVVRDOiBcIisgZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiR0VUVVRDREFURTogXCIrIGRhdGUuZ2V0VVRDRGF0ZSgpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiR0VUVVRDREFZOiBcIisgZGF0ZS5nZXRVVENEYXkoKS50b1N0cmluZygpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkdFVFVUQ01PTlRIOiBcIisgZGF0ZS5nZXRVVENNb250aCgpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiR0VUVVRDRlVMTFlFQVI6IFwiKyBkYXRlLmdldFVUQ0Z1bGxZZWFyKCkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJHRVRVVENIT1VSUzogXCIrIGRhdGUuZ2V0VVRDSG91cnMoKS50b1N0cmluZygpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkdFVFVUQ01JTlVURVM6IFwiKyBkYXRlLmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkdFVFVUQ1NFQ09ORFM6IFwiKyBkYXRlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkdFVFVUQ01JTExJU0VDT05EUzogXCIrIGRhdGUuZ2V0VVRDTWlsbGlzZWNvbmRzKCkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgaWYgKHR5cGUgPT09IEQuRW51bV9GSUVMRFRZUEUuREFURSkge1xyXG4gICAgICAgICAgICAvL2NoZWNrIGlmIHRpbWUgcGFydCBpcyBwcmVzZW50IGluIHN0cmluZ1xyXG4gICAgICAgICAgICBsZXQgZGF0ZVBhcnQ6IHN0cmluZyA9IHY7XHJcbiAgICAgICAgICAgIGlmICh2LnRyaW0oKS5pbmRleE9mKFwiIFwiKSA+IDAgfHwgdi50cmltKCkuaW5kZXhPZihcIlRcIikgPiAwKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZVRpbWVTZXBhcmF0b3I6IHN0cmluZyA9IFwiIFwiO1xyXG4gICAgICAgICAgICAgICAgaWYgKHYudHJpbSgpLmluZGV4T2YoXCJUXCIpID4gMCkge2RhdGVUaW1lU2VwYXJhdG9yID0gXCJUXCI7fVxyXG4gICAgICAgICAgICAgICAgZGF0ZVBhcnQgPSB2LnN1YnN0cigwLHYudHJpbSgpLmluZGV4T2YoZGF0ZVRpbWVTZXBhcmF0b3IpKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiREFURVBBUlQ6IFwiKyBkYXRlUGFydCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9jaGVjayBmb3IgZGF0ZSBkZWxpbWl0ZXJcclxuICAgICAgICAgICAgbGV0IGRhdGVEZWxpbWl0ZXI6c3RyaW5nID0gXCItXCI7XHJcbiAgICAgICAgICAgIGlmICh2LmluZGV4T2YoXCIvXCIpID49IDApIHtkYXRlRGVsaW1pdGVyID0gXCIvXCJ9ICAgICAgICAgICBcclxuICAgICAgICAgICAgLy9zcGxpdCBkYXRlXHJcbiAgICAgICAgICAgIGxldCB5OiBzdHJpbmcgPSBkYXRlUGFydC5zcGxpdChkYXRlRGVsaW1pdGVyKVsyXTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJZRUFSOiBcIit5LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICBsZXQgbTogc3RyaW5nID0gZGF0ZVBhcnQuc3BsaXQoZGF0ZURlbGltaXRlcilbMV07XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTU9OVEg6IFwiK20udG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIGxldCBkOiBzdHJpbmcgPSBkYXRlUGFydC5zcGxpdChkYXRlRGVsaW1pdGVyKVswXTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJEQVk6IFwiK2QudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgRGF0ZShOdW1iZXIoeSksIE51bWJlcihtKSwgTnVtYmVyKGQpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9pZiAodHlwZSA9PT0gRC5FbnVtX0ZJRUxEVFlQRS5USU1FKSB7XHJcbiAgICAgICAgLy8gICAgbGV0IHJldDogRGF0ZSA9IERhdGUubm93KCk7XHJcbiAgICAgICAgLy8gICAgLy9zcGxpdCBkYXRlXHJcbiAgICAgICAgLy8gICAgbGV0IHk6IHN0cmluZyA9IHYuc3BsaXQoXCItXCIpWzJdO1xyXG4gICAgICAgIC8vICAgIGxldCBtOiBzdHJpbmcgPSB2LnNwbGl0KFwiLVwiKVsxXTtcclxuICAgICAgICAvLyAgICBsZXQgZDogc3RyaW5nID0gdi5zcGxpdChcIi1cIilbMF07XHJcbiAgICAgICAgLy8gICAgcmV0dXJuIG5ldyBEYXRlKE51bWJlcih5KSwgTnVtYmVyKG0pLCBOdW1iZXIoZCkpO1xyXG4gICAgICAgIC8vfVxyXG4gICAgICAgIGlmICh0eXBlID09PSBELkVudW1fRklFTERUWVBFLkRBVEVUSU1FKSB7XHJcbiAgICAgICAgICAgIC8vdHJhbnNsYXRlICcyNS02LTIwMTggMTA6MTg6MTEnIHRvICcyMDE4LTEyLTMwVDIwOjU5OjA5J1xyXG4gICAgICAgICAgICBsZXQgdjI6IHN0cmluZyA9IHYucmVwbGFjZShcIjpcIiwgXCJ8XCIpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVjI6IFwiK3YyKTtcclxuICAgICAgICAgICAgbGV0IHYzOiBzdHJpbmcgPSB2Mi5yZXBsYWNlKFwiOlwiLCBcInxcIik7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJWMzogXCIrdjMpO1xyXG4gICAgICAgICAgICBsZXQgdjQ6IHN0cmluZ1tdID0gdjMuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiVjRbMF06IFwiK3Y0WzBdK1wifFY0WzFdOiBcIit2NFsxXSk7XHJcbiAgICAgICAgICAgIGxldCBkdDogc3RyaW5nID0gdjRbMF07XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJEVDogXCIrZHQpO1xyXG4gICAgICAgICAgICAvL2xldCBhOiBudW1iZXIgPSB2LmluZGV4T2YoXCIgXCIpO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiQTogXCIrYS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgLy9sZXQgYjpudW1iZXIgPSB2Lmxlbmd0aC0xO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiQjogXCIrYi50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgbGV0IHRpOiBzdHJpbmcgPSB2NFsxXTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIlRJOiBcIit0aSk7XHJcbiAgICAgICAgICAgIC8vc3BsaXQgZGF0ZVxyXG4gICAgICAgICAgICBsZXQgeTogc3RyaW5nID0gZHQuc3BsaXQoXCItXCIpWzJdO1xyXG4gICAgICAgICAgICBsZXQgbTogc3RyaW5nID0gZHQuc3BsaXQoXCItXCIpWzFdO1xyXG4gICAgICAgICAgICBsZXQgZDogc3RyaW5nID0gZHQuc3BsaXQoXCItXCIpWzBdO1xyXG4gICAgICAgICAgICAvL3NwbGl0IHRpbWVcclxuICAgICAgICAgICAgbGV0IHNzOiBzdHJpbmcgPSB0aS5zcGxpdChcInxcIilbMl07XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coXCJTUzogXCIrc3MpO1xyXG4gICAgICAgICAgICBsZXQgbW06IHN0cmluZyA9IHRpLnNwbGl0KFwifFwiKVsxXTtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcIk1NOiBcIittbSk7XHJcbiAgICAgICAgICAgIGxldCBoaDogc3RyaW5nID0gdGkuc3BsaXQoXCJ8XCIpWzBdO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiSEg6IFwiK2hoKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKE51bWJlcih5KSwgTnVtYmVyKG0pLCBOdW1iZXIoZCksIE51bWJlcihoaCksIE51bWJlcihtbSksIE51bWJlcihzcykpO1xyXG4gICAgICAgICAgICAvL3NldCByZXR1cm5zdHJpbmdcclxuICAgICAgICAgICAgLy9sZXQgcmV0OiBzdHJpbmcgPSBgJHt5fS0ke219LSR7ZH1UJHtoaH1cXDoke21tfVxcOiR7c3N9YDtcclxuICAgICAgICAgICAgLy9sZXQgcjE6IHN0cmluZyA9IHkgKyBcIi1cIiArIG0gKyBcIi1cIiArIGQgKyBcIlRcIiArIHRpOyAvL2hoICsgXCJ8XCIgKyBtbSArIFwifFwiICsgc3M7XHJcbiAgICAgICAgICAgIC8vbGV0IHIyOnN0cmluZyA9IHIxLnJlcGxhY2UoXCJ8XCIsXCI6XCIpO1xyXG4gICAgICAgICAgICAvL2xldCByMzpzdHJpbmcgPSByMi5yZXBsYWNlKFwifFwiLFwiOlwiKTtcclxuICAgICAgICAgICAgLy9UUy5sb2dEZWJ1ZyhFLlBBR0VOQU1FLkxBTkdVQUdFVE9PTFMsIFwiZ2V0VmFsaWREYXRlVGltZVN0cmluZ1wiKS5hZGRWYXJTdHIoXCJUSU1FU1RSSU5HLVRJOlwiK3RpLFwiREFURVRJTUUtU1RSSU5HOlwiICsgcjEpLmxvZygpO1xyXG4gICAgICAgICAgICAvL3JldHVybiByMTtcclxuICAgICAgICAgICAgLy9yZXR1cm4gXCIyMDE4LTEyLTMwVDIwOjU5OjA5XCI7XHJcbiAgICAgICAgfSBcclxuICAgIH0qL1xyXG59XHJcbiJdfQ==