@netgrif/components-core
Version:
Netgrif Application engine frontend core Angular library
161 lines • 25.4 kB
JavaScript
import { DataField } from '../../models/abstract-data-field';
import { ComponentPrefixes } from '../../models/component';
export var I18nFieldValidation;
(function (I18nFieldValidation) {
I18nFieldValidation["TRANSLATION_REQUIRED"] = "translationRequired";
I18nFieldValidation["TRANSLATION_ONLY"] = "translationOnly";
I18nFieldValidation["REQUIRED_I18N"] = "requiredI18n";
})(I18nFieldValidation || (I18nFieldValidation = {}));
export const DEFAULT_LANGUAGE_CODE = 'xx';
export class I18nField extends DataField {
getTypedComponentType() {
return ComponentPrefixes.I18N + this.getComponentType();
}
static defaultValueNonEquality(a, b) {
return (!(!a.defaultValue && !b.defaultValue)
&& ((!a.defaultValue && !!b.defaultValue)
|| (!b.defaultValue && !!a.defaultValue)
|| (a.defaultValue !== b.defaultValue)));
}
static keyNonEquality(a, b) {
return (!(!a.key && !b.key) && ((!a.key && !!b.key) || (!b.key && !!a.key) || (a.key !== b.key)));
}
static translationsNonEquality(a, b) {
return (!(!a.translations && !b.translations)
&& ((!a.translations && !!b.translations) || (!b.translations && !!a.translations)));
}
static translationsEquality(a, b) {
const aKeys = !!a.translations ? Object.keys(a.translations).sort() : [];
const bKeys = !!b.translations ? Object.keys(b.translations).sort() : [];
if (aKeys.length !== bKeys.length
|| !aKeys.every((element, index) => {
return element === bKeys[index];
})) {
return false;
}
for (const k in a.translations) {
if (a.translations[k] !== b.translations[k]) {
return false;
}
}
return true;
}
static toObject(templateValue) {
const object = {};
object[DEFAULT_LANGUAGE_CODE] = templateValue?.defaultValue ?? "";
if (!!templateValue) {
for (const k in templateValue.translations) {
if (Object.prototype.hasOwnProperty.call(templateValue.translations, k)) {
object[k] = templateValue.translations[k];
}
}
}
return object;
}
static fromObject(templateValue, templateKey) {
const i18nObject = {
defaultValue: templateValue[DEFAULT_LANGUAGE_CODE],
key: templateKey,
translations: {}
};
for (const [key, value] of Object.entries(templateValue)) {
if (key === DEFAULT_LANGUAGE_CODE) {
continue;
}
i18nObject.translations[key] = value;
}
return i18nObject;
}
constructor(stringId, title, value, behavior, placeholder, description, layout, validations, _component) {
if (typeof value === 'string') {
value = { defaultValue: value };
}
super(stringId, title, value, behavior, placeholder, description, layout, validations, _component);
}
valueEquality(a, b) {
if (!a && !b) {
return true;
}
if ((!a && !!b) || (!b && !!a)) {
return false;
}
if ((!a.defaultValue && !b.defaultValue) && (!a.translations && !b.translations) && (!a.key && !b.key)) {
return true;
}
if (I18nField.defaultValueNonEquality(a, b) || I18nField.keyNonEquality(a, b) || I18nField.translationsNonEquality(a, b)) {
return false;
}
return I18nField.translationsEquality(a, b);
}
get updated() {
return this._update.asObservable();
}
calculateValidity(forValidRequired, formControl) {
const isDisabled = formControl.disabled;
if (forValidRequired) {
formControl.enable();
}
formControl.clearValidators();
if (forValidRequired) {
formControl.setValidators(this.behavior.required ? [this.validRequiredI18n] : []);
}
else {
formControl.setValidators(this.resolveFormControlValidators());
}
formControl.updateValueAndValidity();
const validity = this._determineFormControlValidity(formControl);
isDisabled ? formControl.disable() : formControl.enable();
return validity;
}
resolveFormControlValidators() {
const result = [];
if (this.behavior.required) {
result.push(this.validRequiredI18n);
}
if (this.validations) {
if (this._validators) {
result.push(...this._validators);
}
else {
this._validators = this.resolveValidations();
result.push(...this._validators);
}
}
return result;
}
resolveValidations() {
const result = [];
this.validations.forEach(item => {
if (item.validationRule.includes(I18nFieldValidation.TRANSLATION_REQUIRED)) {
const tmp = item.validationRule.split(' ');
if (tmp[1] !== undefined) {
result.push(this.validTranslationRequired(tmp[1].replace(' ', '').split(',')));
}
}
if (item.validationRule.includes(I18nFieldValidation.TRANSLATION_ONLY)) {
const tmp = item.validationRule.split(' ');
if (tmp[1] !== undefined) {
result.push(this.validTranslationOnly(tmp[1].replace(' ', '').split(',')));
}
}
});
return result;
}
validTranslationRequired(countries) {
return (fc) => {
return countries.every(languageCode => languageCode in fc.value.translations)
? null : ({ translationRequired: true });
};
}
validTranslationOnly(countries) {
return (fc) => {
return Object.keys(fc.value.translations).every(translation => countries.includes(translation))
? null : ({ translationOnly: true });
};
}
validRequiredI18n(fc) {
return (fc.value.defaultValue === '' && !!fc.value?.translations && Object.keys(fc.value.translations).length === 0)
? ({ requiredI18n: true }) : null;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi1maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvZGF0YS1maWVsZHMvaTE4bi1maWVsZC9tb2RlbHMvaTE4bi1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFJM0QsT0FBTyxFQUFZLGlCQUFpQixFQUFDLE1BQU0sd0JBQXdCLENBQUM7QUFLcEUsTUFBTSxDQUFOLElBQVksbUJBSVg7QUFKRCxXQUFZLG1CQUFtQjtJQUMzQixtRUFBNEMsQ0FBQTtJQUM1QywyREFBb0MsQ0FBQTtJQUNwQyxxREFBOEIsQ0FBQTtBQUNsQyxDQUFDLEVBSlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQUk5QjtBQUVELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQztBQUUxQyxNQUFNLE9BQU8sU0FBVSxTQUFRLFNBQXlCO0lBRTdDLHFCQUFxQjtRQUN4QixPQUFPLGlCQUFpQixDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUM1RCxDQUFDO0lBQ08sTUFBTSxDQUFDLHVCQUF1QixDQUFDLENBQWlCLEVBQUUsQ0FBaUI7UUFDdkUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO2VBQ3RDLENBQ0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7bUJBQ2xDLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO21CQUNyQyxDQUFDLENBQUMsQ0FBQyxZQUFZLEtBQUssQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUN6QyxDQUFD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QyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUMzRixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsZUFBZSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUM7UUFDM0MsQ0FBQyxDQUFDO0lBQ04sQ0FBQztJQUVPLGlCQUFpQixDQUFDLEVBQWU7UUFDckMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsWUFBWSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxZQUFZLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUM7WUFDaEgsQ0FBQyxDQUFDLENBQUMsRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hDLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0YUZpZWxkfSBmcm9tICcuLi8uLi9tb2RlbHMvYWJzdHJhY3QtZGF0YS1maWVsZCc7XG5pbXBvcnQge0JlaGF2aW9yfSBmcm9tICcuLi8uLi9tb2RlbHMvYmVoYXZpb3InO1xuaW1wb3J0IHtMYXlvdXR9IGZyb20gJy4uLy4uL21vZGVscy9sYXlvdXQnO1xuaW1wb3J0IHtWYWxpZGF0aW9ufSBmcm9tICcuLi8uLi9tb2RlbHMvdmFsaWRhdGlvbic7XG5pbXBvcnQge0NvbXBvbmVudCwgQ29tcG9uZW50UHJlZml4ZXN9IGZyb20gJy4uLy4uL21vZGVscy9jb21wb25lbnQnO1xuaW1wb3J0IHtJMThuRmllbGRUcmFuc2xhdGlvbnMsIEkxOG5GaWVsZFZhbHVlfSBmcm9tICcuL2kxOG4tZmllbGQtdmFsdWUnO1xuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcbmltcG9ydCB7Rm9ybUNvbnRyb2wsIFZhbGlkYXRvckZufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmV4cG9ydCBlbnVtIEkxOG5GaWVsZFZhbGlkYXRpb24ge1xuICAgIFRSQU5TTEFUSU9OX1JFUVVJUkVEID0gJ3RyYW5zbGF0aW9uUmVxdWlyZWQnLFxuICAgIFRSQU5TTEFUSU9OX09OTFkgPSAndHJhbnNsYXRpb25Pbmx5JyxcbiAgICBSRVFVSVJFRF9JMThOID0gJ3JlcXVpcmVkSTE4bidcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfTEFOR1VBR0VfQ09ERSA9ICd4eCc7XG5cbmV4cG9ydCBjbGFzcyBJMThuRmllbGQgZXh0ZW5kcyBEYXRhRmllbGQ8STE4bkZpZWxkVmFsdWU+IHtcblxuICAgIHB1YmxpYyBnZXRUeXBlZENvbXBvbmVudFR5cGUoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIENvbXBvbmVudFByZWZpeGVzLkkxOE4gKyB0aGlzLmdldENvbXBvbmVudFR5cGUoKTtcbiAgICB9XG4gICAgcHJpdmF0ZSBzdGF0aWMgZGVmYXVsdFZhbHVlTm9uRXF1YWxpdHkoYTogSTE4bkZpZWxkVmFsdWUsIGI6IEkxOG5GaWVsZFZhbHVlKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAoISghYS5kZWZhdWx0VmFsdWUgJiYgIWIuZGVmYXVsdFZhbHVlKVxuICAgICAgICAgICAgJiYgKFxuICAgICAgICAgICAgICAgICghYS5kZWZhdWx0VmFsdWUgJiYgISFiLmRlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgICAgICB8fCAoIWIuZGVmYXVsdFZhbHVlICYmICEhYS5kZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICAgICAgfHwgKGEuZGVmYXVsdFZhbHVlICE9PSBiLmRlZmF1bHRWYWx1ZSlcbiAgICAgICAgICAgICkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGtleU5vbkVxdWFsaXR5KGE6IEkxOG5GaWVsZFZhbHVlLCBiOiBJMThuRmllbGRWYWx1ZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKCEoIWEua2V5ICYmICFiLmtleSkgJiYgKCghYS5rZXkgJiYgISFiLmtleSkgfHwgKCFiLmtleSAmJiAhIWEua2V5KSB8fCAoYS5rZXkgIT09IGIua2V5KSkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIHRyYW5zbGF0aW9uc05vbkVxdWFsaXR5KGE6IEkxOG5GaWVsZFZhbHVlLCBiOiBJMThuRmllbGRWYWx1ZSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKCEoIWEudHJhbnNsYXRpb25zICYmICFiLnRyYW5zbGF0aW9ucylcbiAgICAgICAgICAgICYmICgoIWEudHJhbnNsYXRpb25zICYmICEhYi50cmFuc2xhdGlvbnMpIHx8ICghYi50cmFuc2xhdGlvbnMgJiYgISFhLnRyYW5zbGF0aW9ucykpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXRpYyB0cmFuc2xhdGlvbnNFcXVhbGl0eShhOiBJMThuRmllbGRWYWx1ZSwgYjogSTE4bkZpZWxkVmFsdWUpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgYUtleXMgPSAhIWEudHJhbnNsYXRpb25zID8gT2JqZWN0LmtleXMoYS50cmFuc2xhdGlvbnMpLnNvcnQoKSA6IFtdO1xuICAgICAgICBjb25zdCBiS2V5cyA9ICEhYi50cmFuc2xhdGlvbnMgPyBPYmplY3Qua2V5cyhiLnRyYW5zbGF0aW9ucykuc29ydCgpIDogW107XG4gICAgICAgIGlmIChhS2V5cy5sZW5ndGggIT09IGJLZXlzLmxlbmd0aFxuICAgICAgICAgICAgfHwgIWFLZXlzLmV2ZXJ5KChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBlbGVtZW50ID09PSBiS2V5c1tpbmRleF07XG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgayBpbiBhLnRyYW5zbGF0aW9ucykge1xuICAgICAgICAgICAgaWYgKGEudHJhbnNsYXRpb25zW2tdICE9PSBiLnRyYW5zbGF0aW9uc1trXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIHRvT2JqZWN0KHRlbXBsYXRlVmFsdWU6IEkxOG5GaWVsZFZhbHVlKTogSTE4bkZpZWxkVHJhbnNsYXRpb25zIHtcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0ge307XG4gICAgICAgIG9iamVjdFtERUZBVUxUX0xBTkdVQUdFX0NPREVdID0gdGVtcGxhdGVWYWx1ZT8uZGVmYXVsdFZhbHVlID8/IFwiXCI7XG4gICAgICAgIGlmICghIXRlbXBsYXRlVmFsdWUpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgayBpbiB0ZW1wbGF0ZVZhbHVlLnRyYW5zbGF0aW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGVtcGxhdGVWYWx1ZS50cmFuc2xhdGlvbnMsIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIG9iamVjdFtrXSA9IHRlbXBsYXRlVmFsdWUudHJhbnNsYXRpb25zW2tdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgIH1cblxuICAgIHB1YmxpYyBzdGF0aWMgZnJvbU9iamVjdCh0ZW1wbGF0ZVZhbHVlOiBJMThuRmllbGRUcmFuc2xhdGlvbnMsIHRlbXBsYXRlS2V5OiBzdHJpbmcpOiBJMThuRmllbGRWYWx1ZSB7XG4gICAgICAgIGNvbnN0IGkxOG5PYmplY3QgPSB7XG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IHRlbXBsYXRlVmFsdWVbREVGQVVMVF9MQU5HVUFHRV9DT0RFXSxcbiAgICAgICAgICAgIGtleTogdGVtcGxhdGVLZXksXG4gICAgICAgICAgICB0cmFuc2xhdGlvbnM6IHt9XG4gICAgICAgIH07XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRlbXBsYXRlVmFsdWUpKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBERUZBVUxUX0xBTkdVQUdFX0NPREUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGkxOG5PYmplY3QudHJhbnNsYXRpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaTE4bk9iamVjdCBhcyBJMThuRmllbGRWYWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvcihzdHJpbmdJZDogc3RyaW5nLCB0aXRsZTogc3RyaW5nLCB2YWx1ZTogSTE4bkZpZWxkVmFsdWUgfCBzdHJpbmcsIGJlaGF2aW9yOiBCZWhhdmlvciwgcGxhY2Vob2xkZXI/OiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsIGxheW91dD86IExheW91dCwgdmFsaWRhdGlvbnM/OiBBcnJheTxWYWxpZGF0aW9uPiwgX2NvbXBvbmVudD86IENvbXBvbmVudCkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFsdWUgPSB7ZGVmYXVsdFZhbHVlOiB2YWx1ZX07XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoc3RyaW5nSWQsIHRpdGxlLCB2YWx1ZSwgYmVoYXZpb3IsIHBsYWNlaG9sZGVyLCBkZXNjcmlwdGlvbiwgbGF5b3V0LCB2YWxpZGF0aW9ucywgX2NvbXBvbmVudCk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHZhbHVlRXF1YWxpdHkoYTogSTE4bkZpZWxkVmFsdWUsIGI6IEkxOG5GaWVsZFZhbHVlKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICghYSAmJiAhYikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCghYSAmJiAhIWIpIHx8ICghYiAmJiAhIWEpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCghYS5kZWZhdWx0VmFsdWUgJiYgIWIuZGVmYXVsdFZhbHVlKSAmJiAoIWEudHJhbnNsYXRpb25zICYmICFiLnRyYW5zbGF0aW9ucykgJiYgKCFhLmtleSAmJiAhYi5rZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoSTE4bkZpZWxkLmRlZmF1bHRWYWx1ZU5vbkVxdWFsaXR5KGEsIGIpIHx8IEkxOG5GaWVsZC5rZXlOb25FcXVhbGl0eShhLCBiKSB8fCBJMThuRmllbGQudHJhbnNsYXRpb25zTm9uRXF1YWxpdHkoYSwgYikpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gSTE4bkZpZWxkLnRyYW5zbGF0aW9uc0VxdWFsaXR5KGEsIGIpO1xuICAgIH1cblxuICAgIGdldCB1cGRhdGVkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fdXBkYXRlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCBjYWxjdWxhdGVWYWxpZGl0eShmb3JWYWxpZFJlcXVpcmVkOiBib29sZWFuLCBmb3JtQ29udHJvbDogRm9ybUNvbnRyb2wpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGZvcm1Db250cm9sLmRpc2FibGVkO1xuICAgICAgICBpZiAoZm9yVmFsaWRSZXF1aXJlZCkge1xuICAgICAgICAgICAgZm9ybUNvbnRyb2wuZW5hYmxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XG4gICAgICAgIGlmIChmb3JWYWxpZFJlcXVpcmVkKSB7XG4gICAgICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMuYmVoYXZpb3IucmVxdWlyZWQgPyBbdGhpcy52YWxpZFJlcXVpcmVkSTE4bl0gOiBbXSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmb3JtQ29udHJvbC5zZXRWYWxpZGF0b3JzKHRoaXMucmVzb2x2ZUZvcm1Db250cm9sVmFsaWRhdG9ycygpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICAgIGNvbnN0IHZhbGlkaXR5ID0gdGhpcy5fZGV0ZXJtaW5lRm9ybUNvbnRyb2xWYWxpZGl0eShmb3JtQ29udHJvbCk7XG4gICAgICAgIGlzRGlzYWJsZWQgPyBmb3JtQ29udHJvbC5kaXNhYmxlKCkgOiBmb3JtQ29udHJvbC5lbmFibGUoKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkaXR5O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlRm9ybUNvbnRyb2xWYWxpZGF0b3JzKCk6IEFycmF5PFZhbGlkYXRvckZuPiB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gICAgICAgIGlmICh0aGlzLmJlaGF2aW9yLnJlcXVpcmVkKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnZhbGlkUmVxdWlyZWRJMThuKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnZhbGlkYXRpb25zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fdmFsaWRhdG9ycykge1xuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuX3ZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl92YWxpZGF0b3JzID0gdGhpcy5yZXNvbHZlVmFsaWRhdGlvbnMoKTtcbiAgICAgICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLl92YWxpZGF0b3JzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHJlc29sdmVWYWxpZGF0aW9ucygpOiBBcnJheTxWYWxpZGF0b3JGbj4ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcblxuICAgICAgICB0aGlzLnZhbGlkYXRpb25zLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpZiAoaXRlbS52YWxpZGF0aW9uUnVsZS5pbmNsdWRlcyhJMThuRmllbGRWYWxpZGF0aW9uLlRSQU5TTEFUSU9OX1JFUVVJUkVEKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRtcCA9IGl0ZW0udmFsaWRhdGlvblJ1bGUuc3BsaXQoJyAnKTtcbiAgICAgICAgICAgICAgICBpZiAodG1wWzFdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy52YWxpZFRyYW5zbGF0aW9uUmVxdWlyZWQodG1wWzFdLnJlcGxhY2UoJyAnLCAnJykuc3BsaXQoJywnKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdGVtLnZhbGlkYXRpb25SdWxlLmluY2x1ZGVzKEkxOG5GaWVsZFZhbGlkYXRpb24uVFJBTlNMQVRJT05fT05MWSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSBpdGVtLnZhbGlkYXRpb25SdWxlLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgaWYgKHRtcFsxXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMudmFsaWRUcmFuc2xhdGlvbk9ubHkodG1wWzFdLnJlcGxhY2UoJyAnLCAnJykuc3BsaXQoJywnKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkVHJhbnNsYXRpb25SZXF1aXJlZChjb3VudHJpZXM6IEFycmF5PHN0cmluZz4pOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoZmM6IEZvcm1Db250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvdW50cmllcy5ldmVyeShsYW5ndWFnZUNvZGUgPT4gbGFuZ3VhZ2VDb2RlIGluIGZjLnZhbHVlLnRyYW5zbGF0aW9ucylcbiAgICAgICAgICAgICAgICA/IG51bGwgOiAoe3RyYW5zbGF0aW9uUmVxdWlyZWQ6IHRydWV9KTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkVHJhbnNsYXRpb25Pbmx5KGNvdW50cmllczogQXJyYXk8c3RyaW5nPik6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIChmYzogRm9ybUNvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZmMudmFsdWUudHJhbnNsYXRpb25zKS5ldmVyeSh0cmFuc2xhdGlvbiA9PiBjb3VudHJpZXMuaW5jbHVkZXModHJhbnNsYXRpb24pKVxuICAgICAgICAgICAgICAgID8gbnVsbCA6ICh7dHJhbnNsYXRpb25Pbmx5OiB0cnVlfSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZFJlcXVpcmVkSTE4bihmYzogRm9ybUNvbnRyb2wpOiB7IFtrOiBzdHJpbmddOiBib29sZWFuIH0ge1xuICAgICAgICByZXR1cm4gKGZjLnZhbHVlLmRlZmF1bHRWYWx1ZSA9PT0gJycgJiYgISFmYy52YWx1ZT8udHJhbnNsYXRpb25zICYmIE9iamVjdC5rZXlzKGZjLnZhbHVlLnRyYW5zbGF0aW9ucykubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgPyAoe3JlcXVpcmVkSTE4bjogdHJ1ZX0pIDogbnVsbDtcbiAgICB9XG59XG4iXX0=