UNPKG

@indice/ng-components

Version:

Indice common components for Angular v12

109 lines 18.7 kB
import { formatDate } from "@angular/common"; export var Operators; (function (Operators) { Operators.EQUALS = { label: '=', value: 'eq', description: 'Ίσο με' }; Operators.NOT_EQUALS = { label: '≠', value: 'neq', description: 'Διάφορο του' }; Operators.GREATER_THAN = { label: '>', value: 'gt', description: 'Μεγαλύτερο από' }; Operators.LESS_THAN = { label: '<', value: 'lt', description: 'Μικρότερο από' }; Operators.GREATER_THAN_EQUAL = { label: '≥', value: 'gte', description: 'Μεγαλύτερο ή ίσο με' }; Operators.LESS_THAN_EQUAL = { label: '≤', value: 'lte', description: 'Μικρότερο ή ίσο με' }; Operators.CONTAINS = { label: '∋', value: 'contains', description: 'Περιέχει' }; Operators.IN = { label: '1..n', value: 'in', description: 'Μέσα σε' }; })(Operators || (Operators = {})); export var QueryParameters; (function (QueryParameters) { QueryParameters["VIEW"] = "view"; QueryParameters["PAGE_SIZE"] = "pagesize"; QueryParameters["PAGE"] = "page"; QueryParameters["SEARCH"] = "search"; QueryParameters["SORT_FIELD"] = "sort"; QueryParameters["SORT_DIRECTION"] = "dir"; QueryParameters["FILTER"] = "filter"; QueryParameters["FILTER_FROM"] = "from"; QueryParameters["FILTER_TO"] = "to"; })(QueryParameters || (QueryParameters = {})); export const OperatorOptions = { 'string': [Operators.EQUALS, Operators.NOT_EQUALS, Operators.CONTAINS], 'array': [Operators.EQUALS, Operators.NOT_EQUALS] }; export class FilterClause { constructor(member, value, operator, dataType, searchOptions) { this.member = member; this.value = value; this.operator = operator || Operators.EQUALS.value; this.dataType = dataType === undefined ? 'string' : dataType; // uiName if (this.dataType === 'datetime') { // special treatment for dates this.uiName = this.member === QueryParameters.FILTER_FROM ? 'Από' : 'Έως'; } else { this.uiName = this.member; let fo = {}; if (searchOptions && searchOptions.length > 0) { fo = searchOptions.find((f) => { return f.field === this.member; }); } if (fo && fo?.name?.length > 0) { this.uiName = fo.name; } } // We don't want a uiOperator for the datetime dataType. For strings and arrays we have the equals/not-equals/contains operators. The switch case can be expanded for more data types/operators when needed. if (this.dataType === 'datetime') { this.uiOperator = ''; } else { switch (this.operator) { case (Operators.EQUALS.value): this.uiOperator = Operators.EQUALS.label; break; case (Operators.NOT_EQUALS.value): this.uiOperator = Operators.NOT_EQUALS.label; break; case (Operators.CONTAINS.value): this.uiOperator = Operators.CONTAINS.label; break; } } // uiValue this.uiValue = this.value; if ((this.dataType === 'datetime')) { this.uiValue = formatDate(new Date(this.value), 'dd/MM/yyyy', 'en-US'); } let fo; if (searchOptions && searchOptions.length > 0) { fo = searchOptions.find((f) => { return f.field === this.member; }); } if (fo && fo.options) { // special treatment for arrays, if there is an options property then it is an array this.dataType = 'array'; this.uiValue = fo.options.find((option) => { return option.value === this.value; })?.label; } } static parse(text) { const pattern = /^\s*([A-Za-z_][A-Za-z0-9_\.]+)::(eq|neq|gt|lt|gte|lte|contains|in)::(\((string|integer|number|boolean|datetime)\))?(.+)\s*$/gi; if (text != null) { const matches = pattern.exec(text); if (matches != null) { const path = matches[1]; const op = matches[2]; const dt = matches[4]; const v = matches[5]; return new FilterClause(path, v, op, dt); } } return undefined; } toString() { if (this.dataType !== 'string' && this.dataType !== 'array') { return `${this.member}::${this.operator}::(${this.dataType})${this.value}`; } else { return `${this.member}::${this.operator}::${this.value}`; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL2FkdmFuY2VkLXNlYXJjaC9tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE1BQU0sS0FBVyxTQUFTLENBU3pCO0FBVEQsV0FBaUIsU0FBUztJQUNYLGdCQUFNLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQzVELG9CQUFVLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ3RFLHNCQUFZLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLENBQUM7SUFDMUUsbUJBQVMsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsZUFBZSxFQUFFLENBQUM7SUFDdEUsNEJBQWtCLEdBQUcsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLHFCQUFxQixFQUFFLENBQUM7SUFDdEYseUJBQWUsR0FBRyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsQ0FBQztJQUNsRixrQkFBUSxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQztJQUN0RSxZQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUs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QStILENBQUM7UUFDaEosSUFBSSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7WUFDakIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNuQyxJQUFJLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDcEIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN4QixNQUFNLEVBQUUsR0FBb0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLEVBQUUsR0FBb0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBRXJCLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDM0MsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRU0sUUFBUTtRQUNiLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUM1RCxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUMsUUFBUSxNQUFNLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdFLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDM0QsQ0FBQztJQUNILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdERhdGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcblxyXG5leHBvcnQgbmFtZXNwYWNlIE9wZXJhdG9ycyB7XHJcbiAgZXhwb3J0IGNvbnN0IEVRVUFMUyA9IHsgbGFiZWw6ICc9JywgdmFsdWU6ICdlcScsIGRlc2NyaXB0aW9uOiAnzorPg86/IM68zrUnIH07XHJcbiAgZXhwb3J0IGNvbnN0IE5PVF9FUVVBTFMgPSB7IGxhYmVsOiAn4omgJywgdmFsdWU6ICduZXEnLCBkZXNjcmlwdGlvbjogJ86UzrnOrM+Gzr/Pgc6/IM+Ezr/PhScgfTtcclxuICBleHBvcnQgY29uc3QgR1JFQVRFUl9USEFOID0geyBsYWJlbDogJz4nLCB2YWx1ZTogJ2d0JywgZGVzY3JpcHRpb246ICfOnM61zrPOsc67z43PhM61z4HOvyDOsc+Az4wnIH07XHJcbiAgZXhwb3J0IGNvbnN0IExFU1NfVEhBTiA9IHsgbGFiZWw6ICc8JywgdmFsdWU6ICdsdCcsIGRlc2NyaXB0aW9uOiAnzpzOuc66z4HPjM+EzrXPgc6/IM6xz4DPjCcgfTtcclxuICBleHBvcnQgY29uc3QgR1JFQVRFUl9USEFOX0VRVUFMID0geyBsYWJlbDogJ+KJpScsIHZhbHVlOiAnZ3RlJywgZGVzY3JpcHRpb246ICfOnM61zrPOsc67z43PhM61z4HOvyDOriDOr8+Dzr8gzrzOtScgfTtcclxuICBleHBvcnQgY29uc3QgTEVTU19USEFOX0VRVUFMID0geyBsYWJlbDogJ+KJpCcsIHZhbHVlOiAnbHRlJywgZGVzY3JpcHRpb246ICfOnM65zrrPgc+Mz4TOtc+Bzr8gzq4gzq/Pg86/IM68zrUnIH07XHJcbiAgZXhwb3J0IGNvbnN0IENPTlRBSU5TID0geyBsYWJlbDogJ+KIiycsIHZhbHVlOiAnY29udGFpbnMnLCBkZXNjcmlwdGlvbjogJ86gzrXPgc65zq3Ph861zrknIH07XHJcbiAgZXhwb3J0IGNvbnN0IElOID0geyBsYWJlbDogJzEuLm4nLCB2YWx1ZTogJ2luJywgZGVzY3JpcHRpb246ICfOnM6tz4POsSDPg861JyB9O1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBRdWVyeVBhcmFtZXRlcnMge1xyXG4gIFZJRVcgPSAndmlldycsXHJcbiAgUEFHRV9TSVpFID0gJ3BhZ2VzaXplJyxcclxuICBQQUdFID0gJ3BhZ2UnLFxyXG4gIFNFQVJDSCA9ICdzZWFyY2gnLFxyXG4gIFNPUlRfRklFTEQgPSAnc29ydCcsXHJcbiAgU09SVF9ESVJFQ1RJT04gPSAnZGlyJyxcclxuICBGSUxURVIgPSAnZmlsdGVyJyxcclxuICBGSUxURVJfRlJPTSA9ICdmcm9tJyxcclxuICBGSUxURVJfVE8gPSAndG8nXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoT3B0aW9uIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICBkYXRhVHlwZTogRmlsdGVyQ2xhdXNlLkR0O1xyXG4gIGFycmF5PzogYm9vbGVhbjtcclxuICBtdWx0aVRlcm0/OiBib29sZWFuO1xyXG4gIG9wdGlvbnM/OiBTZWxlY3RJbnB1dE9wdGlvbltdO1xyXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xyXG4gIHJlYWRvbmx5PzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RJbnB1dE9wdGlvbiB7XHJcbiAgdmFsdWU6IGFueTtcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgbmFtZXNwYWNlIEZpbHRlckNsYXVzZSB7XHJcbiAgZXhwb3J0IHR5cGUgT3AgPSAnZXEnIHwgJ25lcScgfCAnZ3QnIHwgJ2x0JyB8ICdndGUnIHwgJ2x0ZScgfCAnY29udGFpbnMnIHwgJ2luJztcclxuICBleHBvcnQgdHlwZSBEdCA9ICdzdHJpbmcnIHwgJ2ludGVnZXInIHwgJ251bWJlcicgfCAnYm9vbGVhbicgfCAnZGF0ZXRpbWUnIHwgJ2FycmF5JyB8ICdkYXRlcmFuZ2UnIHwgdW5kZWZpbmVkO1xyXG59XHJcblxyXG4vLyBEaWN0aW9uYXJ5IHdpdGggdGhlIERhdGFUeXBlIGFzIGEga2V5IGFuZCB0aGUgdmFsdWUgYW4gYXJyYXkgb2YgYXZhaWxhYmxlIG9wZXJhdG9ycy5cclxuZXhwb3J0IGludGVyZmFjZSBJRGljdGlvbmFyeTxUPiB7XHJcbiAgW2tleTogc3RyaW5nXTogVDtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IE9wZXJhdG9yT3B0aW9uczogSURpY3Rpb25hcnk8eyBsYWJlbDogc3RyaW5nOyB2YWx1ZTogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9W10+ID0ge1xyXG4gICdzdHJpbmcnOiBbT3BlcmF0b3JzLkVRVUFMUywgT3BlcmF0b3JzLk5PVF9FUVVBTFMsIE9wZXJhdG9ycy5DT05UQUlOU10sXHJcbiAgJ2FycmF5JzogW09wZXJhdG9ycy5FUVVBTFMsIE9wZXJhdG9ycy5OT1RfRVFVQUxTXVxyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIEZpbHRlckNsYXVzZSB7XHJcbiAgLy8gTWVtYmVyIHBhdGggdG8gY29tcGFyZVxyXG4gIHB1YmxpYyBtZW1iZXI6IHN0cmluZztcclxuICAvLyBWYWx1ZSB0byBjb21wYXJlIGFnYWluc3RcclxuICBwdWJsaWMgdmFsdWU6IGFueTtcclxuICAvLyBUaGUgb3BlcmF0b3IgdG8gYXBwbHkgYmV0d2VlbiB0aGUgSW5kaWNlLlR5cGVzLkZpbHRlckNsYXVzZS5NZW1iZXIgYW5kIEluZGljZS5UeXBlcy5GaWx0ZXJDbGF1c2UuVmFsdWVcclxuICBwdWJsaWMgb3BlcmF0b3I6IEZpbHRlckNsYXVzZS5PcDtcclxuICAvLyBUaGUgSW5kaWNlLlR5cGVzLkpzb25EYXRhVHlwZSBvZiB0aGUgZGF0YSBJbmRpY2UuVHlwZXMuRmlsdGVyQ2xhdXNlLk1lbWJlclxyXG4gIHB1YmxpYyBkYXRhVHlwZTogRmlsdGVyQ2xhdXNlLkR0O1xyXG5cclxuICBwdWJsaWMgdWlOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XHJcbiAgcHVibGljIHVpT3BlcmF0b3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcclxuICBwdWJsaWMgdWlWYWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xyXG5cclxuICBwdWJsaWMgY29uc3RydWN0b3IobWVtYmVyOiBzdHJpbmcsIHZhbHVlOiBhbnksIG9wZXJhdG9yPzogRmlsdGVyQ2xhdXNlLk9wLCBkYXRhVHlwZT86IEZpbHRlckNsYXVzZS5EdCwgc2VhcmNoT3B0aW9ucz86IFNlYXJjaE9wdGlvbltdKSB7IC8vIHllYXAsIHdlIGRvIG5lZWQgc2VhcmNoT3B0aW9ucyBmb3IgdGhlIHVpIHZpZXcgbW9kZWxcclxuICAgIHRoaXMubWVtYmVyID0gbWVtYmVyO1xyXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xyXG4gICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yIHx8IE9wZXJhdG9ycy5FUVVBTFMudmFsdWUgYXMgRmlsdGVyQ2xhdXNlLk9wO1xyXG4gICAgdGhpcy5kYXRhVHlwZSA9IGRhdGFUeXBlID09PSB1bmRlZmluZWQgPyAnc3RyaW5nJyA6IGRhdGFUeXBlO1xyXG4gICAgLy8gdWlOYW1lXHJcbiAgICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gJ2RhdGV0aW1lJykgeyAvLyBzcGVjaWFsIHRyZWF0bWVudCBmb3IgZGF0ZXNcclxuICAgICAgdGhpcy51aU5hbWUgPSB0aGlzLm1lbWJlciA9PT0gUXVlcnlQYXJhbWV0ZXJzLkZJTFRFUl9GUk9NID8gJ86Rz4DPjCcgOiAnzojPic+CJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudWlOYW1lID0gdGhpcy5tZW1iZXI7XHJcbiAgICAgIGxldCBmbyA9IDxhbnk+e307XHJcbiAgICAgIGlmIChzZWFyY2hPcHRpb25zICYmIHNlYXJjaE9wdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIGZvID0gc2VhcmNoT3B0aW9ucy5maW5kKChmKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gZi5maWVsZCA9PT0gdGhpcy5tZW1iZXI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChmbyAmJiBmbz8ubmFtZT8ubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMudWlOYW1lID0gZm8ubmFtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gV2UgZG9uJ3Qgd2FudCBhIHVpT3BlcmF0b3IgZm9yIHRoZSBkYXRldGltZSBkYXRhVHlwZS4gRm9yIHN0cmluZ3MgYW5kIGFycmF5cyB3ZSBoYXZlIHRoZSBlcXVhbHMvbm90LWVxdWFscy9jb250YWlucyBvcGVyYXRvcnMuIFRoZSBzd2l0Y2ggY2FzZSBjYW4gYmUgZXhwYW5kZWQgZm9yIG1vcmUgZGF0YSB0eXBlcy9vcGVyYXRvcnMgd2hlbiBuZWVkZWQuXHJcbiAgICBpZiAodGhpcy5kYXRhVHlwZSA9PT0gJ2RhdGV0aW1lJykge1xyXG4gICAgICB0aGlzLnVpT3BlcmF0b3IgPSAnJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHN3aXRjaCAodGhpcy5vcGVyYXRvcikge1xyXG4gICAgICAgIGNhc2UgKE9wZXJhdG9ycy5FUVVBTFMudmFsdWUpOlxyXG4gICAgICAgICAgdGhpcy51aU9wZXJhdG9yID0gT3BlcmF0b3JzLkVRVUFMUy5sYWJlbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgKE9wZXJhdG9ycy5OT1RfRVFVQUxTLnZhbHVlKTpcclxuICAgICAgICAgIHRoaXMudWlPcGVyYXRvciA9IE9wZXJhdG9ycy5OT1RfRVFVQUxTLmxhYmVsO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAoT3BlcmF0b3JzLkNPTlRBSU5TLnZhbHVlKTpcclxuICAgICAgICAgIHRoaXMudWlPcGVyYXRvciA9IE9wZXJhdG9ycy5DT05UQUlOUy5sYWJlbDtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyB1aVZhbHVlXHJcbiAgICB0aGlzLnVpVmFsdWUgPSB0aGlzLnZhbHVlO1xyXG4gICAgaWYgKCh0aGlzLmRhdGFUeXBlID09PSAnZGF0ZXRpbWUnKSkge1xyXG4gICAgICB0aGlzLnVpVmFsdWUgPSBmb3JtYXREYXRlKG5ldyBEYXRlKHRoaXMudmFsdWUpLCAnZGQvTU0veXl5eScsICdlbi1VUycpO1xyXG4gICAgfVxyXG4gICAgbGV0IGZvOiBTZWFyY2hPcHRpb24gfCB1bmRlZmluZWQ7XHJcbiAgICBpZiAoc2VhcmNoT3B0aW9ucyAmJiBzZWFyY2hPcHRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgZm8gPSBzZWFyY2hPcHRpb25zLmZpbmQoKGYpID0+IHtcclxuICAgICAgICByZXR1cm4gZi5maWVsZCA9PT0gdGhpcy5tZW1iZXI7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYgKGZvICYmIGZvLm9wdGlvbnMpIHsgLy8gc3BlY2lhbCB0cmVhdG1lbnQgZm9yIGFycmF5cywgaWYgdGhlcmUgaXMgYW4gb3B0aW9ucyBwcm9wZXJ0eSB0aGVuIGl0IGlzIGFuIGFycmF5XHJcbiAgICAgIHRoaXMuZGF0YVR5cGUgPSAnYXJyYXknO1xyXG4gICAgICB0aGlzLnVpVmFsdWUgPSBmbyEub3B0aW9ucyEuZmluZCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIG9wdGlvbi52YWx1ZSA9PT0gdGhpcy52YWx1ZTtcclxuICAgICAgfSk/LmxhYmVsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBwYXJzZSh0ZXh0OiBzdHJpbmcpOiBGaWx0ZXJDbGF1c2UgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgcGF0dGVybiA9IC9eXFxzKihbQS1aYS16X11bQS1aYS16MC05X1xcLl0rKTo6KGVxfG5lcXxndHxsdHxndGV8bHRlfGNvbnRhaW5zfGluKTo6KFxcKChzdHJpbmd8aW50ZWdlcnxudW1iZXJ8Ym9vbGVhbnxkYXRldGltZSlcXCkpPyguKylcXHMqJC9naTtcclxuICAgIGlmICh0ZXh0ICE9IG51bGwpIHtcclxuICAgICAgY29uc3QgbWF0Y2hlcyA9IHBhdHRlcm4uZXhlYyh0ZXh0KTtcclxuICAgICAgaWYgKG1hdGNoZXMgIT0gbnVsbCkge1xyXG4gICAgICAgIGNvbnN0IHBhdGggPSBtYXRjaGVzWzFdO1xyXG4gICAgICAgIGNvbnN0IG9wID0gPEZpbHRlckNsYXVzZS5PcD5tYXRjaGVzWzJdO1xyXG4gICAgICAgIGNvbnN0IGR0ID0gPEZpbHRlckNsYXVzZS5EdD5tYXRjaGVzWzRdO1xyXG4gICAgICAgIGNvbnN0IHYgPSBtYXRjaGVzWzVdO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IEZpbHRlckNsYXVzZShwYXRoLCB2LCBvcCwgZHQpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHRvU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICBpZiAodGhpcy5kYXRhVHlwZSAhPT0gJ3N0cmluZycgJiYgdGhpcy5kYXRhVHlwZSAhPT0gJ2FycmF5Jykge1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy5tZW1iZXJ9Ojoke3RoaXMub3BlcmF0b3J9OjooJHt0aGlzLmRhdGFUeXBlfSkke3RoaXMudmFsdWV9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLm1lbWJlcn06OiR7dGhpcy5vcGVyYXRvcn06OiR7dGhpcy52YWx1ZX1gO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iXX0=