UNPKG

@netgrif/components-core

Version:

Netgrif Application engine frontend core Angular library

107 lines 19.2 kB
import moment from 'moment'; import { DataField } from '../../models/abstract-data-field'; export var AbstractTimeInstanceFieldValidation; (function (AbstractTimeInstanceFieldValidation) { AbstractTimeInstanceFieldValidation["BETWEEN"] = "between"; AbstractTimeInstanceFieldValidation["WORKDAY"] = "workday"; AbstractTimeInstanceFieldValidation["WEEKEND"] = "weekend"; AbstractTimeInstanceFieldValidation["REQUIRED"] = "required"; AbstractTimeInstanceFieldValidation["VALID_BETWEEN"] = "validBetween"; AbstractTimeInstanceFieldValidation["VALID_WORKDAY"] = "validWorkday"; AbstractTimeInstanceFieldValidation["VALID_WEEKEND"] = "validWeekend"; })(AbstractTimeInstanceFieldValidation || (AbstractTimeInstanceFieldValidation = {})); export class AbstractTimeInstanceField extends DataField { min; max; constructor(stringId, title, value, behavior, placeholder, description, layout, validations, component, parentTaskId) { super(stringId, title, value, behavior, placeholder, description, layout, validations, component, parentTaskId); } static isEqual(a, b, granularity) { return (!a && !b) || (!!a && !!b && a.isSame(b, granularity)); } /** * Parse date from string: * date is string 'past' - return string 'past' * date is string 'future' - return string 'future' * date is string 'today'/'now' - return moment instance of current date/time * date is string build by combination of 'today'/'now'+/-ISO8601 (eg. today-P1DT1H) - return parsed moment instance of date * date is string of specific date - return moment instance of this specific date * @param date - string that should be parsed */ static parseDate(date) { if (date.includes('past')) { return 'past'; } else if (date.includes('future')) { return 'future'; } else if (date.includes('today') || date.includes('now')) { if (date.includes('+') || date.includes('-')) { const difference = date.includes('+') ? date.split('+')[1] : date.split('-')[1]; if (date.includes('today')) { return date.includes('+') ? moment().startOf('day').add(moment.duration(difference)) : moment().startOf('day').subtract(moment.duration(difference)); } if (date.includes('now')) { return date.includes('+') ? moment().add(moment.duration(difference)) : moment().subtract(moment.duration(difference)); } } return date.includes('today') ? moment().startOf('day') : moment(); } else { const newDate = moment(date); return newDate.isValid ? newDate : null; } } resolveValidations() { const result = []; this.validations.forEach(item => { if (item.validationRule.includes(AbstractTimeInstanceFieldValidation.BETWEEN)) { const tmp = item.validationRule.split(' '); const ranges = tmp[1].split(','); const start = AbstractTimeInstanceField.parseDate(ranges[0]); const end = AbstractTimeInstanceField.parseDate(ranges[1]); if (start && end) { if (start === 'past' && moment(end).isValid()) { result.push(this.validFromPast(moment(end))); this.max = moment(end); } else if (end === 'future' && moment(start).isValid()) { result.push(this.validToFuture(moment(start))); this.min = moment(start); } else if (moment(start).isValid() && moment(end).isValid()) { result.push(this.validBetween(moment(start), moment(end))); this.min = moment(start); this.max = moment(end); } } } else if (item.validationRule.includes(AbstractTimeInstanceFieldValidation.WORKDAY)) { result.push(this.validWorkday); } else if (item.validationRule.includes(AbstractTimeInstanceFieldValidation.WEEKEND)) { result.push(this.validWeekend); } }); return result; } validFromPast(range) { return (fc) => fc.value > range ? { validBetween: true } : null; } validToFuture(range) { return (fc) => fc.value < range ? { validBetween: true } : null; } validBetween(first, second) { return (fc) => fc.value < first || fc.value > second ? { validBetween: true } : null; } validWorkday(fc) { const dayOfWeek = !!fc.value ? fc.value.isoWeekday() : null; return dayOfWeek === 6 || dayOfWeek === 7 ? { validWorkday: true } : null; } validWeekend(fc) { const dayOfWeek = !!fc.value ? fc.value.isoWeekday() : null; return dayOfWeek >= 1 && dayOfWeek <= 5 ? { validWeekend: true } : null; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3QtdGltZS1pbnN0YW5jZS1maWVsZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25ldGdyaWYtY29tcG9uZW50cy1jb3JlL3NyYy9saWIvZGF0YS1maWVsZHMvdGltZS1pbnN0YW5jZS1hYnN0cmFjdC1maWVsZC9tb2RlbHMvYWJzdHJhY3QtdGltZS1pbnN0YW5jZS1maWVsZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLE1BQWdCLE1BQU0sUUFBUSxDQUFDO0FBR3RDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUUzRCxNQUFNLENBQU4sSUFBWSxtQ0FRWDtBQVJELFdBQVksbUNBQW1DO0lBQzNDLDBEQUFtQixDQUFBO0lBQ25CLDBEQUFtQixDQUFBO0lBQ25CLDBEQUFtQixDQUFBO0lBQ25CLDREQUFxQixDQUFBO0lBQ3JCLHFFQUE4QixDQUFBO0lBQzlCLHFFQUE4QixDQUFBO0lBQzlCLHFFQUE4QixDQUFBO0FBQ2xDLENBQUMsRUFSVyxtQ0FBbUMsS0FBbkMsbUNBQW1DLFFBUTlDO0FBRUQsTUFBTSxPQUFnQix5QkFBMEIsU0FBUSxTQUFpQjtJQUU5RCxHQUFHLENBQVM7SUFDWixHQUFHLENBQVM7SUFFbkIsWUFBc0IsUUFBZ0IsRUFBRSxLQUFhLEVBQUUsS0FBYSxFQUFFLFFBQWtCLEVBQUUsV0FBb0IsRUFDeEYsV0FBb0IsRUFBRSxNQUFlLEVBQUUsV0FBaUIsRUFBRSxTQUFxQixFQUFFLFlBQXFCO1FBQ3hILEtBQUssQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNwSCxDQUFDO0lBRU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFTLEVBQUUsQ0FBUyxFQUFFLFdBQXVDO1FBQy9FLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFZO1FBQ2hDLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUN2QixPQUFPLE1BQU0sQ0FBQztTQUNqQjthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUNoQyxPQUFPLFFBQVEsQ0FBQztTQUNuQjthQUFNLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3ZELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUMxQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNoRixJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7b0JBQ3hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUNoRixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7aUJBQ3ZFO2dCQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtvQkFDdEIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO2lCQUMxSDthQUNKO1lBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDO1NBQ3RFO2FBQU07WUFDSCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0IsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztTQUMzQztJQUNMLENBQUM7SUFFUyxrQkFBa0I7UUFDeEIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBRWxCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQzVCLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsbUNBQW1DLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQzNFLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUMzQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUVqQyxNQUFNLEtBQUssR0FBRyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzdELE1BQU0sR0FBRyxHQUFHLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFFM0QsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO29CQUNkLElBQUksS0FBSyxLQUFLLE1BQU0sSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQzNDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUM3QyxJQUFJLENBQUMsR0FBRyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDMUI7eUJBQU0sSUFBSSxHQUFHLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRTt3QkFDcEQsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQy9DLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3FCQUM1Qjt5QkFBTSxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUUsSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7d0JBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDM0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3pCLElBQUksQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUMxQjtpQkFDSjthQUNKO2lCQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsbUNBQW1DLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2xGLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2xDO2lCQUFNLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsbUNBQW1DLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ2xGLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2FBQ2xDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRVMsYUFBYSxDQUFDLEtBQWE7UUFDakMsT0FBTyxDQUFDLEVBQWUsRUFBaUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQzlHLENBQUM7SUFFUyxhQUFhLENBQUMsS0FBYTtRQUNqQyxPQUFPLENBQUMsRUFBZSxFQUFpQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUMsWUFBWSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDOUcsQ0FBQztJQUVTLFlBQVksQ0FBQyxLQUFhLEVBQUUsTUFBYztRQUNoRCxPQUFPLENBQUMsRUFBZSxFQUFpQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUMsWUFBWSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDbkksQ0FBQztJQUVTLFlBQVksQ0FBQyxFQUFlO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDNUQsT0FBTyxTQUFTLEtBQUssQ0FBQyxJQUFJLFNBQVMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsWUFBWSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDNUUsQ0FBQztJQUVTLFlBQVksQ0FBQyxFQUFlO1FBQ2xDLE1BQU0sU0FBUyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDNUQsT0FBTyxTQUFTLElBQUksQ0FBQyxJQUFJLFNBQVMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUMsWUFBWSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDMUUsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtCZWhhdmlvcn0gZnJvbSAnLi4vLi4vbW9kZWxzL2JlaGF2aW9yJztcbmltcG9ydCB7Rm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgbW9tZW50LCB7TW9tZW50fSBmcm9tICdtb21lbnQnO1xuaW1wb3J0IHtMYXlvdXR9IGZyb20gJy4uLy4uL21vZGVscy9sYXlvdXQnO1xuaW1wb3J0IHtDb21wb25lbnR9IGZyb20gJy4uLy4uL21vZGVscy9jb21wb25lbnQnO1xuaW1wb3J0IHtEYXRhRmllbGR9IGZyb20gJy4uLy4uL21vZGVscy9hYnN0cmFjdC1kYXRhLWZpZWxkJztcblxuZXhwb3J0IGVudW0gQWJzdHJhY3RUaW1lSW5zdGFuY2VGaWVsZFZhbGlkYXRpb24ge1xuICAgIEJFVFdFRU4gPSAnYmV0d2VlbicsXG4gICAgV09SS0RBWSA9ICd3b3JrZGF5JyxcbiAgICBXRUVLRU5EID0gJ3dlZWtlbmQnLFxuICAgIFJFUVVJUkVEID0gJ3JlcXVpcmVkJyxcbiAgICBWQUxJRF9CRVRXRUVOID0gJ3ZhbGlkQmV0d2VlbicsXG4gICAgVkFMSURfV09SS0RBWSA9ICd2YWxpZFdvcmtkYXknLFxuICAgIFZBTElEX1dFRUtFTkQgPSAndmFsaWRXZWVrZW5kJ1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RUaW1lSW5zdGFuY2VGaWVsZCBleHRlbmRzIERhdGFGaWVsZDxNb21lbnQ+IHtcblxuICAgIHB1YmxpYyBtaW46IE1vbWVudDtcbiAgICBwdWJsaWMgbWF4OiBNb21lbnQ7XG5cbiAgICBwcm90ZWN0ZWQgY29uc3RydWN0b3Ioc3RyaW5nSWQ6IHN0cmluZywgdGl0bGU6IHN0cmluZywgdmFsdWU6IE1vbWVudCwgYmVoYXZpb3I6IEJlaGF2aW9yLCBwbGFjZWhvbGRlcj86IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb24/OiBzdHJpbmcsIGxheW91dD86IExheW91dCwgdmFsaWRhdGlvbnM/OiBhbnksIGNvbXBvbmVudD86IENvbXBvbmVudCwgcGFyZW50VGFza0lkPzogc3RyaW5nKSB7XG4gICAgICAgIHN1cGVyKHN0cmluZ0lkLCB0aXRsZSwgdmFsdWUsIGJlaGF2aW9yLCBwbGFjZWhvbGRlciwgZGVzY3JpcHRpb24sIGxheW91dCwgdmFsaWRhdGlvbnMsIGNvbXBvbmVudCwgcGFyZW50VGFza0lkKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGlzRXF1YWwoYTogTW9tZW50LCBiOiBNb21lbnQsIGdyYW51bGFyaXR5PzogbW9tZW50LnVuaXRPZlRpbWUuU3RhcnRPZik6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gKCFhICYmICFiKSB8fCAoISFhICYmICEhYiAmJiBhLmlzU2FtZShiLCBncmFudWxhcml0eSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlIGRhdGUgZnJvbSBzdHJpbmc6XG4gICAgICogZGF0ZSBpcyBzdHJpbmcgJ3Bhc3QnIC0gcmV0dXJuIHN0cmluZyAncGFzdCdcbiAgICAgKiBkYXRlIGlzIHN0cmluZyAnZnV0dXJlJyAtIHJldHVybiBzdHJpbmcgJ2Z1dHVyZSdcbiAgICAgKiBkYXRlIGlzIHN0cmluZyAndG9kYXknLydub3cnIC0gcmV0dXJuIG1vbWVudCBpbnN0YW5jZSBvZiBjdXJyZW50IGRhdGUvdGltZVxuICAgICAqIGRhdGUgaXMgc3RyaW5nIGJ1aWxkIGJ5IGNvbWJpbmF0aW9uIG9mICd0b2RheScvJ25vdycrLy1JU084NjAxIChlZy4gdG9kYXktUDFEVDFIKSAtIHJldHVybiBwYXJzZWQgbW9tZW50IGluc3RhbmNlIG9mIGRhdGVcbiAgICAgKiBkYXRlIGlzIHN0cmluZyBvZiBzcGVjaWZpYyBkYXRlIC0gcmV0dXJuIG1vbWVudCBpbnN0YW5jZSBvZiB0aGlzIHNwZWNpZmljIGRhdGVcbiAgICAgKiBAcGFyYW0gZGF0ZSAtIHN0cmluZyB0aGF0IHNob3VsZCBiZSBwYXJzZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc3RhdGljIHBhcnNlRGF0ZShkYXRlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKGRhdGUuaW5jbHVkZXMoJ3Bhc3QnKSkge1xuICAgICAgICAgICAgcmV0dXJuICdwYXN0JztcbiAgICAgICAgfSBlbHNlIGlmIChkYXRlLmluY2x1ZGVzKCdmdXR1cmUnKSkge1xuICAgICAgICAgICAgcmV0dXJuICdmdXR1cmUnO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGUuaW5jbHVkZXMoJ3RvZGF5JykgfHwgZGF0ZS5pbmNsdWRlcygnbm93JykpIHtcbiAgICAgICAgICAgIGlmIChkYXRlLmluY2x1ZGVzKCcrJykgfHwgZGF0ZS5pbmNsdWRlcygnLScpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGlmZmVyZW5jZSA9IGRhdGUuaW5jbHVkZXMoJysnKSA/IGRhdGUuc3BsaXQoJysnKVsxXSA6IGRhdGUuc3BsaXQoJy0nKVsxXTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZS5pbmNsdWRlcygndG9kYXknKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZS5pbmNsdWRlcygnKycpID8gbW9tZW50KCkuc3RhcnRPZignZGF5JykuYWRkKG1vbWVudC5kdXJhdGlvbihkaWZmZXJlbmNlKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbW9tZW50KCkuc3RhcnRPZignZGF5Jykuc3VidHJhY3QobW9tZW50LmR1cmF0aW9uKGRpZmZlcmVuY2UpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGRhdGUuaW5jbHVkZXMoJ25vdycpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRlLmluY2x1ZGVzKCcrJykgPyBtb21lbnQoKS5hZGQobW9tZW50LmR1cmF0aW9uKGRpZmZlcmVuY2UpKSA6IG1vbWVudCgpLnN1YnRyYWN0KG1vbWVudC5kdXJhdGlvbihkaWZmZXJlbmNlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRhdGUuaW5jbHVkZXMoJ3RvZGF5JykgPyBtb21lbnQoKS5zdGFydE9mKCdkYXknKSA6IG1vbWVudCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZSA9IG1vbWVudChkYXRlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXdEYXRlLmlzVmFsaWQgPyBuZXdEYXRlIDogbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb3RlY3RlZCByZXNvbHZlVmFsaWRhdGlvbnMoKTogQXJyYXk8VmFsaWRhdG9yRm4+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XG5cbiAgICAgICAgdGhpcy52YWxpZGF0aW9ucy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgaWYgKGl0ZW0udmFsaWRhdGlvblJ1bGUuaW5jbHVkZXMoQWJzdHJhY3RUaW1lSW5zdGFuY2VGaWVsZFZhbGlkYXRpb24uQkVUV0VFTikpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXAgPSBpdGVtLnZhbGlkYXRpb25SdWxlLnNwbGl0KCcgJyk7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFuZ2VzID0gdG1wWzFdLnNwbGl0KCcsJyk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdGFydCA9IEFic3RyYWN0VGltZUluc3RhbmNlRmllbGQucGFyc2VEYXRlKHJhbmdlc1swXSk7XG4gICAgICAgICAgICAgICAgY29uc3QgZW5kID0gQWJzdHJhY3RUaW1lSW5zdGFuY2VGaWVsZC5wYXJzZURhdGUocmFuZ2VzWzFdKTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGFydCAmJiBlbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0ID09PSAncGFzdCcgJiYgbW9tZW50KGVuZCkuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh0aGlzLnZhbGlkRnJvbVBhc3QobW9tZW50KGVuZCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWF4ID0gbW9tZW50KGVuZCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZW5kID09PSAnZnV0dXJlJyAmJiBtb21lbnQoc3RhcnQpLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy52YWxpZFRvRnV0dXJlKG1vbWVudChzdGFydCkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWluID0gbW9tZW50KHN0YXJ0KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChtb21lbnQoc3RhcnQpLmlzVmFsaWQoKSAmJiBtb21lbnQoZW5kKS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHRoaXMudmFsaWRCZXR3ZWVuKG1vbWVudChzdGFydCksIG1vbWVudChlbmQpKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1pbiA9IG1vbWVudChzdGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1heCA9IG1vbWVudChlbmQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnZhbGlkYXRpb25SdWxlLmluY2x1ZGVzKEFic3RyYWN0VGltZUluc3RhbmNlRmllbGRWYWxpZGF0aW9uLldPUktEQVkpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy52YWxpZFdvcmtkYXkpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnZhbGlkYXRpb25SdWxlLmluY2x1ZGVzKEFic3RyYWN0VGltZUluc3RhbmNlRmllbGRWYWxpZGF0aW9uLldFRUtFTkQpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2godGhpcy52YWxpZFdlZWtlbmQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2YWxpZEZyb21QYXN0KHJhbmdlOiBNb21lbnQpOiBWYWxpZGF0b3JGbiB7XG4gICAgICAgIHJldHVybiAoZmM6IEZvcm1Db250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwgPT4gZmMudmFsdWUgPiByYW5nZSA/IHt2YWxpZEJldHdlZW46IHRydWV9IDogbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmFsaWRUb0Z1dHVyZShyYW5nZTogTW9tZW50KTogVmFsaWRhdG9yRm4ge1xuICAgICAgICByZXR1cm4gKGZjOiBGb3JtQ29udHJvbCk6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBudWxsID0+IGZjLnZhbHVlIDwgcmFuZ2UgPyB7dmFsaWRCZXR3ZWVuOiB0cnVlfSA6IG51bGw7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIHZhbGlkQmV0d2VlbihmaXJzdDogTW9tZW50LCBzZWNvbmQ6IE1vbWVudCk6IFZhbGlkYXRvckZuIHtcbiAgICAgICAgcmV0dXJuIChmYzogRm9ybUNvbnRyb2wpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCA9PiBmYy52YWx1ZSA8IGZpcnN0IHx8IGZjLnZhbHVlID4gc2Vjb25kID8ge3ZhbGlkQmV0d2VlbjogdHJ1ZX0gOiBudWxsO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCB2YWxpZFdvcmtkYXkoZmM6IEZvcm1Db250cm9sKSB7XG4gICAgICAgIGNvbnN0IGRheU9mV2VlayA9ICEhZmMudmFsdWUgPyBmYy52YWx1ZS5pc29XZWVrZGF5KCkgOiBudWxsO1xuICAgICAgICByZXR1cm4gZGF5T2ZXZWVrID09PSA2IHx8IGRheU9mV2VlayA9PT0gNyA/IHt2YWxpZFdvcmtkYXk6IHRydWV9IDogbnVsbDtcbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdmFsaWRXZWVrZW5kKGZjOiBGb3JtQ29udHJvbCkge1xuICAgICAgICBjb25zdCBkYXlPZldlZWsgPSAhIWZjLnZhbHVlID8gZmMudmFsdWUuaXNvV2Vla2RheSgpIDogbnVsbDtcbiAgICAgICAgcmV0dXJuIGRheU9mV2VlayA+PSAxICYmIGRheU9mV2VlayA8PSA1ID8ge3ZhbGlkV2Vla2VuZDogdHJ1ZX0gOiBudWxsO1xuICAgIH1cbn1cbiJdfQ==