UNPKG

@codice-progressio/input-validaciones

Version:
247 lines 26.4 kB
import { Injectable } from '@angular/core'; import * as i0 from "@angular/core"; export class InputValidacionesService { /** * Si el campo tiene valores invalidos retorna false ( Esto sirve para * bootstrap * * @param {AbstractControl} campo El campo que se quiere comprobar * @returns {boolean} * @memberof InputValidacionesService */ invalid(campo) { return campo.touched && campo.invalid; } /** * * Si el campo tiene valores validos retorna true * * @param {AbstractControl} campo El campo que se quiere comprobar * @returns {boolean} * @memberof InputValidacionesService */ valid(campo) { return campo.touched && campo.valid; } /** *Valida una url * * @param {AbstractControl} campo * @returns {*} * @memberof InputValidacionesService */ urlValidator(campo, mensaje = 'La url no es valida') { if (campo.pristine) { return null; } // tslint:disable-next-line:max-line-length const URL_REGEXP = /^(http?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/; campo.markAsTouched(); if (URL_REGEXP.test(campo.value)) { return null; } return { invalidUrl: true, url: campo.value, mensaje, }; } /** *Valida que dos campos llamados password y confirm coincidan. * * @param {FormGroup} group El formulario completo * @returns {*} * @memberof InputValidacionesService */ matchPassword(group, mensaje = 'Las contraseñas no coinciden') { const password = group.controls.password; const confirm = group.controls.confirm; if (password.pristine || confirm.pristine) { return null; } group.markAsTouched(); if (password.value === confirm.value) { return null; } return { invalidPassword: true, mensaje, }; } numberValidator(campo, mensaje = 'No es un numero valido') { if (campo.pristine) { return null; } const NUMBER_REGEXP = /^\-?[0-9]+(?:\.[0-9]+)?$/; campo.markAsTouched(); if (NUMBER_REGEXP.test(campo.value)) { return null; } return { invalidNumber: true, mensaje, }; } /** *Valida que solo sean numeros. No lo debes de llamar como funcion, si no como un tipo callback. * * @param {*} campo * @returns {*} * @memberof ValidacionesService */ onlyIntegers(campo, mensaje = 'Solo se permiten números enteteros') { if (campo.pristine) { return null; } campo.markAsTouched(); const INTEGERS_REGEXP = /^[0-9]+$/; if (INTEGERS_REGEXP.test(campo.value)) { return null; } return { notInteger: true, mensaje }; } ssnValidator(ssn) { if (ssn.pristine) { return null; } const SSN_REGEXP = /^(?!219-09-9999|078-05-1120)(?!666|000|9\d{2})\d{3}-(?!00)\d{2}-(?!0{4})\d{4}$/; ssn.markAsTouched(); if (SSN_REGEXP.test(ssn.value)) { return null; } return { invalidSsn: true, }; } // Validates US phone numbers phoneValidator(number) { if (number.pristine) { return null; } const PHONE_REGEXP = /^(\([0-9]{3}\) |[0-9]{3}-)[0-9]{3}-[0-9]{4}$/; number.markAsTouched(); if (PHONE_REGEXP.test(number.value)) { return null; } return { invalidNumber: true, }; } // Validates zip codes zipCodeValidator(zip) { if (zip.pristine) { return null; } const ZIP_REGEXP = /^[0-9]{5}(?:-[0-9]{4})?$/; zip.markAsTouched(); if (ZIP_REGEXP.test(zip.value)) { return null; } return { invalidZip: true, }; } /** *Valida un registro federal del contribuyente Mexicano * * @param {AbstractControl} campo * @param {string} [mensaje='RFC invalido'] * @returns {*} * @memberof InputValidacionesService */ rfc(campo, mensaje = 'RFC invalido') { let _rfc_pattern_pm = '^(([A-ZÑ&]{3})([0-9]{2})([0][13578]|[1][02])(([0][1-9]|[12][\\d])|[3][01])([A-Z0-9]{3}))|' + '(([A-ZÑ&]{3})([0-9]{2})([0][13456789]|[1][012])(([0][1-9]|[12][\\d])|[3][0])([A-Z0-9]{3}))|' + '(([A-ZÑ&]{3})([02468][048]|[13579][26])[0][2]([0][1-9]|[12][\\d])([A-Z0-9]{3}))|' + '(([A-ZÑ&]{3})([0-9]{2})[0][2]([0][1-9]|[1][0-9]|[2][0-8])([A-Z0-9]{3}))$'; // patron del RFC, persona fisica let _rfc_pattern_pf = '^(([A-ZÑ&]{4})([0-9]{2})([0][13578]|[1][02])(([0][1-9]|[12][\\d])|[3][01])([A-Z0-9]{3}))|' + '(([A-ZÑ&]{4})([0-9]{2})([0][13456789]|[1][012])(([0][1-9]|[12][\\d])|[3][0])([A-Z0-9]{3}))|' + '(([A-ZÑ&]{4})([02468][048]|[13579][26])[0][2]([0][1-9]|[12][\\d])([A-Z0-9]{3}))|' + '(([A-ZÑ&]{4})([0-9]{2})[0][2]([0][1-9]|[1][0-9]|[2][0-8])([A-Z0-9]{3}))$'; let error = { general: { mensaje } }; if (!campo.value) return null; if (campo.value.match(_rfc_pattern_pm) || campo.value.match(_rfc_pattern_pf)) { let r = campo.value.length; if (r > 11 && r < 14) return null; } return error; } /** *Valida la estructura de una CURP Mexicana * * @param {AbstractControl} campo * @param {string} [mensaje='CURP invalida'] * @returns * @memberof InputValidacionesService */ curp(campo, mensaje = 'CURP invalida') { let curp_pattern = /^([A-Z][AEIOUX][A-Z]{2}\d{2}(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])[HM](?:AS|B[CS]|C[CLMSH]|D[FG]|G[TR]|HG|JC|M[CNS]|N[ETL]|OC|PL|Q[TR]|S[PLR]|T[CSL]|VZ|YN|ZS)[B-DF-HJ-NP-TV-Z]{3}[A-Z\d])(\d)$/; let error = { general: { mensaje } }; if (!campo.value) return null; if (campo.value.match(curp_pattern)) { if (campo.value.length == 18) return null; } return error; } /** * Valida el formato de un numero de seguridad social Mexicano (NSS) * * @param {AbstractControl} campo * @param {string} [mensaje='Numero de seguridad no valido'] * @returns * @memberof InputValidacionesService */ nss(campo, mensaje = 'Numero de seguridad no valido') { let NSS_pattern = /^(\d{2})(\d{2})(\d{2})\d{5}$/; let error = { general: { mensaje } }; if (!campo.value) return null; if (campo.value.match(NSS_pattern)) { if (campo.value.length === 11) return null; } return error; } fechaMenorQue(campoFecha1, campoFecha2, campoValidador = { general: { mensaje: 'Se han encontrado fechas invalidas', }, }) { return (c) => { const date1 = c.get(campoFecha1).value; const date2 = c.get(campoFecha2).value; if (date1 !== null && date2 !== null && date1 > date2) { c.get(campoFecha1).setErrors({ general: { mensaje: 'Esta fecha tiene que ser menor que la de finalizacion', }, }); c.get(campoFecha2).setErrors({ general: { mensaje: 'Esta fecha tiene que ser mayor que la de inicio', }, }); return campoValidador; } c.get(campoFecha1).updateValueAndValidity({ onlySelf: true }); c.get(campoFecha2).updateValueAndValidity({ onlySelf: true }); return null; }; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: InputValidacionesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: InputValidacionesService, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.1", ngImport: i0, type: InputValidacionesService, decorators: [{ type: Injectable, args: [{ providedIn: 'root', }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5wdXQtdmFsaWRhY2lvbmVzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9pbnB1dC12YWxpZGFjaW9uZXMvc3JjL2xpYi9pbnB1dC12YWxpZGFjaW9uZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQU0zQyxNQUFNLE9BQU8sd0JBQXdCO0lBQ25DOzs7Ozs7O09BT0c7SUFDSCxPQUFPLENBQUMsS0FBc0I7UUFDNUIsT0FBTyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsS0FBc0I7UUFDMUIsT0FBTyxLQUFLLENBQUMsT0FBTyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUM7SUFDdEMsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNILFlBQVksQ0FBQyxLQUFzQixFQUFFLE9BQU8sR0FBRyxxQkFBcUI7UUFDbEUsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsMkNBQTJDO1FBQzNDLE1BQU0sVUFBVSxHQUFHLDJUQUEyVCxDQUFDO1FBQy9VLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QixJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTztZQUNMLFVBQVUsRUFBRSxJQUFJO1lBQ2hCLEdBQUcsRUFBRSxLQUFLLENBQUMsS0FBSztZQUNoQixPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxhQUFhLENBQ1gsS0FBZ0IsRUFDaEIsT0FBTyxHQUFHLDhCQUE4QjtRQUV4QyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUN6QyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQztRQUN2QyxJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQzFDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QixJQUFJLFFBQVEsQ0FBQyxLQUFLLEtBQUssT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ3JDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU87WUFDTCxlQUFlLEVBQUUsSUFBSTtZQUNyQixPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRCxlQUFlLENBQ2IsS0FBc0IsRUFDdEIsT0FBTyxHQUFHLHdCQUF3QjtRQUVsQyxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNuQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLGFBQWEsR0FBRywwQkFBMEIsQ0FBQztRQUNqRCxLQUFLLENBQUMsYUFBYSxFQUFFLENBQUM7UUFFdEIsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3BDLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU87WUFDTCxhQUFhLEVBQUUsSUFBSTtZQUNuQixPQUFPO1NBQ1IsQ0FBQztJQUNKLENBQUM7SUFFRDs7Ozs7OztLQU9DO0lBQ0QsWUFBWSxDQUNWLEtBQXNCLEVBQ3RCLE9BQU8sR0FBRyxvQ0FBb0M7UUFFOUMsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsS0FBSyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RCLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQztRQUVuQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBRUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUNELFlBQVksQ0FBQyxHQUFHO1FBQ2QsSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxVQUFVLEdBQUcsZ0ZBQWdGLENBQUM7UUFDcEcsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3BCLElBQUksVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxPQUFPO1lBQ0wsVUFBVSxFQUFFLElBQUk7U0FDakIsQ0FBQztJQUNKLENBQUM7SUFDRCw2QkFBNkI7SUFDN0IsY0FBYyxDQUFDLE1BQU07UUFDbkIsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDcEIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsTUFBTSxZQUFZLEdBQUcsOENBQThDLENBQUM7UUFDcEUsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksWUFBWSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwQyxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxPQUFPO1lBQ0wsYUFBYSxFQUFFLElBQUk7U0FDcEIsQ0FBQztJQUNKLENBQUM7SUFDRCxzQkFBc0I7SUFDdEIsZ0JBQWdCLENBQUMsR0FBRztRQUNsQixJQUFJLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNqQixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRywwQkFBMEIsQ0FBQztRQUM5QyxHQUFHLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDcEIsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU87WUFDTCxVQUFVLEVBQUUsSUFBSTtTQUNqQixDQUFDO0lBQ0osQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxHQUFHLENBQUMsS0FBc0IsRUFBRSxPQUFPLEdBQUcsY0FBYztRQUNsRCxJQUFJLGVBQWUsR0FDakIsMkZBQTJGO1lBQzNGLDZGQUE2RjtZQUM3RixrRkFBa0Y7WUFDbEYsMEVBQTBFLENBQUM7UUFDN0UsaUNBQWlDO1FBQ2pDLElBQUksZUFBZSxHQUNqQiwyRkFBMkY7WUFDM0YsNkZBQTZGO1lBQzdGLGtGQUFrRjtZQUNsRiwwRUFBMEUsQ0FBQztRQUU3RSxJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDOUIsSUFDRSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUM7WUFDbEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQ2xDLENBQUM7WUFDRCxJQUFJLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQztZQUMzQixJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDcEMsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxJQUFJLENBQUMsS0FBc0IsRUFBRSxPQUFPLEdBQUcsZUFBZTtRQUNwRCxJQUFJLFlBQVksR0FBRyxtTUFBbU0sQ0FBQztRQUV2TixJQUFJLEtBQUssR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFFOUIsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1lBQ3BDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLElBQUksRUFBRTtnQkFBRSxPQUFPLElBQUksQ0FBQztRQUM1QyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILEdBQUcsQ0FBQyxLQUFzQixFQUFFLE9BQU8sR0FBRywrQkFBK0I7UUFDbkUsSUFBSSxXQUFXLEdBQUcsOEJBQThCLENBQUM7UUFFakQsSUFBSSxLQUFLLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzlCLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLEVBQUU7Z0JBQUUsT0FBTyxJQUFJLENBQUM7UUFDN0MsQ0FBQztRQUVELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGFBQWEsQ0FDWCxXQUFtQixFQUNuQixXQUFtQixFQUNuQixpQkFBcUI7UUFDbkIsT0FBTyxFQUFFO1lBQ1AsT0FBTyxFQUFFLG9DQUFvQztTQUM5QztLQUNGO1FBRUQsT0FBTyxDQUFDLENBQWtCLEVBQXFDLEVBQUU7WUFDL0QsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDdkMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxLQUFLLENBQUM7WUFDdkMsSUFBSSxLQUFLLEtBQUssSUFBSSxJQUFJLEtBQUssS0FBSyxJQUFJLElBQUksS0FBSyxHQUFHLEtBQUssRUFBRSxDQUFDO2dCQUN0RCxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsT0FBTyxFQUFFO3dCQUNQLE9BQU8sRUFBRSx1REFBdUQ7cUJBQ2pFO2lCQUNGLENBQUMsQ0FBQztnQkFDSCxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDLFNBQVMsQ0FBQztvQkFDM0IsT0FBTyxFQUFFO3dCQUNQLE9BQU8sRUFBRSxpREFBaUQ7cUJBQzNEO2lCQUNGLENBQUMsQ0FBQztnQkFDSCxPQUFPLGNBQWMsQ0FBQztZQUN4QixDQUFDO1lBRUQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQzlELENBQUMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsc0JBQXNCLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUM5RCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQztJQUNKLENBQUM7dUdBM1FVLHdCQUF3QjsyR0FBeEIsd0JBQXdCLGNBRnZCLE1BQU07OzJGQUVQLHdCQUF3QjtrQkFIcEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9yRm4gfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBJbnB1dFZhbGlkYWNpb25lc1NlcnZpY2Uge1xuICAvKipcbiAgICogU2kgZWwgY2FtcG8gdGllbmUgdmFsb3JlcyBpbnZhbGlkb3MgcmV0b3JuYSBmYWxzZSAoIEVzdG8gc2lydmUgcGFyYVxuICAgKiBib290c3RyYXBcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdENvbnRyb2x9IGNhbXBvIEVsIGNhbXBvIHF1ZSBzZSBxdWllcmUgY29tcHJvYmFyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAbWVtYmVyb2YgSW5wdXRWYWxpZGFjaW9uZXNTZXJ2aWNlXG4gICAqL1xuICBpbnZhbGlkKGNhbXBvOiBBYnN0cmFjdENvbnRyb2wpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY2FtcG8udG91Y2hlZCAmJiBjYW1wby5pbnZhbGlkO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFNpIGVsIGNhbXBvIHRpZW5lIHZhbG9yZXMgdmFsaWRvcyByZXRvcm5hIHRydWVcbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdENvbnRyb2x9IGNhbXBvIEVsIGNhbXBvIHF1ZSBzZSBxdWllcmUgY29tcHJvYmFyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKiBAbWVtYmVyb2YgSW5wdXRWYWxpZGFjaW9uZXNTZXJ2aWNlXG4gICAqL1xuICB2YWxpZChjYW1wbzogQWJzdHJhY3RDb250cm9sKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGNhbXBvLnRvdWNoZWQgJiYgY2FtcG8udmFsaWQ7XG4gIH1cblxuICAvKipcbiAgICpWYWxpZGEgdW5hIHVybFxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY2FtcG9cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBtZW1iZXJvZiBJbnB1dFZhbGlkYWNpb25lc1NlcnZpY2VcbiAgICovXG4gIHVybFZhbGlkYXRvcihjYW1wbzogQWJzdHJhY3RDb250cm9sLCBtZW5zYWplID0gJ0xhIHVybCBubyBlcyB2YWxpZGEnKTogYW55IHtcbiAgICBpZiAoY2FtcG8ucHJpc3RpbmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgY29uc3QgVVJMX1JFR0VYUCA9IC9eKGh0dHA/fGZ0cCk6XFwvXFwvKFthLXpBLVowLTkuLV0rKDpbYS16QS1aMC05LiYlJC1dKykqQCkqKCgyNVswLTVdfDJbMC00XVswLTldfDFbMC05XXsyfXxbMS05XVswLTldPykoXFwuKDI1WzAtNV18MlswLTRdWzAtOV18MVswLTldezJ9fFsxLTldP1swLTldKSl7M318KFthLXpBLVowLTktXStcXC4pKlthLXpBLVowLTktXStcXC4oY29tfGVkdXxnb3Z8aW50fG1pbHxuZXR8b3JnfGJpenxhcnBhfGluZm98bmFtZXxwcm98YWVyb3xjb29wfG11c2V1bXxbYS16QS1aXXsyfSkpKDpbMC05XSspKihcXC8oJHxbYS16QS1aMC05Liw/J1xcXFwrJiUkIz1+Xy1dKykpKiQvO1xuICAgIGNhbXBvLm1hcmtBc1RvdWNoZWQoKTtcbiAgICBpZiAoVVJMX1JFR0VYUC50ZXN0KGNhbXBvLnZhbHVlKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpbnZhbGlkVXJsOiB0cnVlLFxuICAgICAgdXJsOiBjYW1wby52YWx1ZSxcbiAgICAgIG1lbnNhamUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKlZhbGlkYSBxdWUgZG9zIGNhbXBvcyBsbGFtYWRvcyBwYXNzd29yZCB5IGNvbmZpcm0gY29pbmNpZGFuLlxuICAgKlxuICAgKiBAcGFyYW0ge0Zvcm1Hcm91cH0gZ3JvdXAgRWwgZm9ybXVsYXJpbyBjb21wbGV0b1xuICAgKiBAcmV0dXJucyB7Kn1cbiAgICogQG1lbWJlcm9mIElucHV0VmFsaWRhY2lvbmVzU2VydmljZVxuICAgKi9cbiAgbWF0Y2hQYXNzd29yZChcbiAgICBncm91cDogRm9ybUdyb3VwLFxuICAgIG1lbnNhamUgPSAnTGFzIGNvbnRyYXNlw7FhcyBubyBjb2luY2lkZW4nXG4gICk6IGFueSB7XG4gICAgY29uc3QgcGFzc3dvcmQgPSBncm91cC5jb250cm9scy5wYXNzd29yZDtcbiAgICBjb25zdCBjb25maXJtID0gZ3JvdXAuY29udHJvbHMuY29uZmlybTtcbiAgICBpZiAocGFzc3dvcmQucHJpc3RpbmUgfHwgY29uZmlybS5wcmlzdGluZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGdyb3VwLm1hcmtBc1RvdWNoZWQoKTtcbiAgICBpZiAocGFzc3dvcmQudmFsdWUgPT09IGNvbmZpcm0udmFsdWUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaW52YWxpZFBhc3N3b3JkOiB0cnVlLFxuICAgICAgbWVuc2FqZSxcbiAgICB9O1xuICB9XG5cbiAgbnVtYmVyVmFsaWRhdG9yKFxuICAgIGNhbXBvOiBBYnN0cmFjdENvbnRyb2wsXG4gICAgbWVuc2FqZSA9ICdObyBlcyB1biBudW1lcm8gdmFsaWRvJ1xuICApOiBhbnkge1xuICAgIGlmIChjYW1wby5wcmlzdGluZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IE5VTUJFUl9SRUdFWFAgPSAvXlxcLT9bMC05XSsoPzpcXC5bMC05XSspPyQvO1xuICAgIGNhbXBvLm1hcmtBc1RvdWNoZWQoKTtcblxuICAgIGlmIChOVU1CRVJfUkVHRVhQLnRlc3QoY2FtcG8udmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW52YWxpZE51bWJlcjogdHJ1ZSxcbiAgICAgIG1lbnNhamUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICpWYWxpZGEgcXVlIHNvbG8gc2VhbiBudW1lcm9zLiBObyBsbyBkZWJlcyBkZSBsbGFtYXJcbiBjb21vIGZ1bmNpb24sIHNpIG5vIGNvbW8gdW4gdGlwbyBjYWxsYmFjay4gXG4gKlxuICogQHBhcmFtIHsqfSBjYW1wb1xuICogQHJldHVybnMgeyp9XG4gKiBAbWVtYmVyb2YgVmFsaWRhY2lvbmVzU2VydmljZVxuICovXG4gIG9ubHlJbnRlZ2VycyhcbiAgICBjYW1wbzogQWJzdHJhY3RDb250cm9sLFxuICAgIG1lbnNhamUgPSAnU29sbyBzZSBwZXJtaXRlbiBuw7ptZXJvcyBlbnRldGVyb3MnXG4gICk6IGFueSB7XG4gICAgaWYgKGNhbXBvLnByaXN0aW5lKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY2FtcG8ubWFya0FzVG91Y2hlZCgpO1xuICAgIGNvbnN0IElOVEVHRVJTX1JFR0VYUCA9IC9eWzAtOV0rJC87XG5cbiAgICBpZiAoSU5URUdFUlNfUkVHRVhQLnRlc3QoY2FtcG8udmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4geyBub3RJbnRlZ2VyOiB0cnVlLCBtZW5zYWplIH07XG4gIH1cbiAgc3NuVmFsaWRhdG9yKHNzbik6IGFueSB7XG4gICAgaWYgKHNzbi5wcmlzdGluZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IFNTTl9SRUdFWFAgPSAvXig/ITIxOS0wOS05OTk5fDA3OC0wNS0xMTIwKSg/ITY2NnwwMDB8OVxcZHsyfSlcXGR7M30tKD8hMDApXFxkezJ9LSg/ITB7NH0pXFxkezR9JC87XG4gICAgc3NuLm1hcmtBc1RvdWNoZWQoKTtcbiAgICBpZiAoU1NOX1JFR0VYUC50ZXN0KHNzbi52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaW52YWxpZFNzbjogdHJ1ZSxcbiAgICB9O1xuICB9XG4gIC8vIFZhbGlkYXRlcyBVUyBwaG9uZSBudW1iZXJzXG4gIHBob25lVmFsaWRhdG9yKG51bWJlcik6IGFueSB7XG4gICAgaWYgKG51bWJlci5wcmlzdGluZSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IFBIT05FX1JFR0VYUCA9IC9eKFxcKFswLTldezN9XFwpIHxbMC05XXszfS0pWzAtOV17M30tWzAtOV17NH0kLztcbiAgICBudW1iZXIubWFya0FzVG91Y2hlZCgpO1xuICAgIGlmIChQSE9ORV9SRUdFWFAudGVzdChudW1iZXIudmFsdWUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgaW52YWxpZE51bWJlcjogdHJ1ZSxcbiAgICB9O1xuICB9XG4gIC8vIFZhbGlkYXRlcyB6aXAgY29kZXNcbiAgemlwQ29kZVZhbGlkYXRvcih6aXApOiBhbnkge1xuICAgIGlmICh6aXAucHJpc3RpbmUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBaSVBfUkVHRVhQID0gL15bMC05XXs1fSg/Oi1bMC05XXs0fSk/JC87XG4gICAgemlwLm1hcmtBc1RvdWNoZWQoKTtcbiAgICBpZiAoWklQX1JFR0VYUC50ZXN0KHppcC52YWx1ZSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaW52YWxpZFppcDogdHJ1ZSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqVmFsaWRhIHVuIHJlZ2lzdHJvIGZlZGVyYWwgZGVsIGNvbnRyaWJ1eWVudGUgTWV4aWNhbm9cbiAgICpcbiAgICogQHBhcmFtIHtBYnN0cmFjdENvbnRyb2x9IGNhbXBvXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbWVuc2FqZT0nUkZDIGludmFsaWRvJ11cbiAgICogQHJldHVybnMgeyp9XG4gICAqIEBtZW1iZXJvZiBJbnB1dFZhbGlkYWNpb25lc1NlcnZpY2VcbiAgICovXG4gIHJmYyhjYW1wbzogQWJzdHJhY3RDb250cm9sLCBtZW5zYWplID0gJ1JGQyBpbnZhbGlkbycpOiBhbnkge1xuICAgIGxldCBfcmZjX3BhdHRlcm5fcG0gPVxuICAgICAgJ14oKFtBLVrDkSZdezN9KShbMC05XXsyfSkoWzBdWzEzNTc4XXxbMV1bMDJdKSgoWzBdWzEtOV18WzEyXVtcXFxcZF0pfFszXVswMV0pKFtBLVowLTldezN9KSl8JyArXG4gICAgICAnKChbQS1aw5EmXXszfSkoWzAtOV17Mn0pKFswXVsxMzQ1Njc4OV18WzFdWzAxMl0pKChbMF1bMS05XXxbMTJdW1xcXFxkXSl8WzNdWzBdKShbQS1aMC05XXszfSkpfCcgK1xuICAgICAgJygoW0EtWsORJl17M30pKFswMjQ2OF1bMDQ4XXxbMTM1NzldWzI2XSlbMF1bMl0oWzBdWzEtOV18WzEyXVtcXFxcZF0pKFtBLVowLTldezN9KSl8JyArXG4gICAgICAnKChbQS1aw5EmXXszfSkoWzAtOV17Mn0pWzBdWzJdKFswXVsxLTldfFsxXVswLTldfFsyXVswLThdKShbQS1aMC05XXszfSkpJCc7XG4gICAgLy8gcGF0cm9uIGRlbCBSRkMsIHBlcnNvbmEgZmlzaWNhXG4gICAgbGV0IF9yZmNfcGF0dGVybl9wZiA9XG4gICAgICAnXigoW0EtWsORJl17NH0pKFswLTldezJ9KShbMF1bMTM1NzhdfFsxXVswMl0pKChbMF1bMS05XXxbMTJdW1xcXFxkXSl8WzNdWzAxXSkoW0EtWjAtOV17M30pKXwnICtcbiAgICAgICcoKFtBLVrDkSZdezR9KShbMC05XXsyfSkoWzBdWzEzNDU2Nzg5XXxbMV1bMDEyXSkoKFswXVsxLTldfFsxMl1bXFxcXGRdKXxbM11bMF0pKFtBLVowLTldezN9KSl8JyArXG4gICAgICAnKChbQS1aw5EmXXs0fSkoWzAyNDY4XVswNDhdfFsxMzU3OV1bMjZdKVswXVsyXShbMF1bMS05XXxbMTJdW1xcXFxkXSkoW0EtWjAtOV17M30pKXwnICtcbiAgICAgICcoKFtBLVrDkSZdezR9KShbMC05XXsyfSlbMF1bMl0oWzBdWzEtOV18WzFdWzAtOV18WzJdWzAtOF0pKFtBLVowLTldezN9KSkkJztcblxuICAgIGxldCBlcnJvciA9IHsgZ2VuZXJhbDogeyBtZW5zYWplIH0gfTtcbiAgICBpZiAoIWNhbXBvLnZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoXG4gICAgICBjYW1wby52YWx1ZS5tYXRjaChfcmZjX3BhdHRlcm5fcG0pIHx8XG4gICAgICBjYW1wby52YWx1ZS5tYXRjaChfcmZjX3BhdHRlcm5fcGYpXG4gICAgKSB7XG4gICAgICBsZXQgciA9IGNhbXBvLnZhbHVlLmxlbmd0aDtcbiAgICAgIGlmIChyID4gMTEgJiYgciA8IDE0KSByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gZXJyb3I7XG4gIH1cblxuICAvKipcbiAgICpWYWxpZGEgbGEgZXN0cnVjdHVyYSBkZSB1bmEgQ1VSUCBNZXhpY2FuYVxuICAgKlxuICAgKiBAcGFyYW0ge0Fic3RyYWN0Q29udHJvbH0gY2FtcG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IFttZW5zYWplPSdDVVJQIGludmFsaWRhJ11cbiAgICogQHJldHVybnNcbiAgICogQG1lbWJlcm9mIElucHV0VmFsaWRhY2lvbmVzU2VydmljZVxuICAgKi9cbiAgY3VycChjYW1wbzogQWJzdHJhY3RDb250cm9sLCBtZW5zYWplID0gJ0NVUlAgaW52YWxpZGEnKSB7XG4gICAgbGV0IGN1cnBfcGF0dGVybiA9IC9eKFtBLVpdW0FFSU9VWF1bQS1aXXsyfVxcZHsyfSg/OjBbMS05XXwxWzAtMl0pKD86MFsxLTldfFsxMl1cXGR8M1swMV0pW0hNXSg/OkFTfEJbQ1NdfENbQ0xNU0hdfERbRkddfEdbVFJdfEhHfEpDfE1bQ05TXXxOW0VUTF18T0N8UEx8UVtUUl18U1tQTFJdfFRbQ1NMXXxWWnxZTnxaUylbQi1ERi1ISi1OUC1UVi1aXXszfVtBLVpcXGRdKShcXGQpJC87XG5cbiAgICBsZXQgZXJyb3IgPSB7IGdlbmVyYWw6IHsgbWVuc2FqZSB9IH07XG4gICAgaWYgKCFjYW1wby52YWx1ZSkgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoY2FtcG8udmFsdWUubWF0Y2goY3VycF9wYXR0ZXJuKSkge1xuICAgICAgaWYgKGNhbXBvLnZhbHVlLmxlbmd0aCA9PSAxOCkgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYSBlbCBmb3JtYXRvIGRlIHVuIG51bWVybyBkZSBzZWd1cmlkYWQgc29jaWFsIE1leGljYW5vIChOU1MpXG4gICAqXG4gICAqIEBwYXJhbSB7QWJzdHJhY3RDb250cm9sfSBjYW1wb1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW21lbnNhamU9J051bWVybyBkZSBzZWd1cmlkYWQgbm8gdmFsaWRvJ11cbiAgICogQHJldHVybnNcbiAgICogQG1lbWJlcm9mIElucHV0VmFsaWRhY2lvbmVzU2VydmljZVxuICAgKi9cbiAgbnNzKGNhbXBvOiBBYnN0cmFjdENvbnRyb2wsIG1lbnNhamUgPSAnTnVtZXJvIGRlIHNlZ3VyaWRhZCBubyB2YWxpZG8nKSB7XG4gICAgbGV0IE5TU19wYXR0ZXJuID0gL14oXFxkezJ9KShcXGR7Mn0pKFxcZHsyfSlcXGR7NX0kLztcblxuICAgIGxldCBlcnJvciA9IHsgZ2VuZXJhbDogeyBtZW5zYWplIH0gfTtcbiAgICBpZiAoIWNhbXBvLnZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICBpZiAoY2FtcG8udmFsdWUubWF0Y2goTlNTX3BhdHRlcm4pKSB7XG4gICAgICBpZiAoY2FtcG8udmFsdWUubGVuZ3RoID09PSAxMSkgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9yO1xuICB9XG5cbiAgZmVjaGFNZW5vclF1ZShcbiAgICBjYW1wb0ZlY2hhMTogc3RyaW5nLFxuICAgIGNhbXBvRmVjaGEyOiBzdHJpbmcsXG4gICAgY2FtcG9WYWxpZGFkb3I6IHt9ID0ge1xuICAgICAgZ2VuZXJhbDoge1xuICAgICAgICBtZW5zYWplOiAnU2UgaGFuIGVuY29udHJhZG8gZmVjaGFzIGludmFsaWRhcycsXG4gICAgICB9LFxuICAgIH1cbiAgKTogVmFsaWRhdG9yRm4ge1xuICAgIHJldHVybiAoYzogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gfCBudWxsID0+IHtcbiAgICAgIGNvbnN0IGRhdGUxID0gYy5nZXQoY2FtcG9GZWNoYTEpLnZhbHVlO1xuICAgICAgY29uc3QgZGF0ZTIgPSBjLmdldChjYW1wb0ZlY2hhMikudmFsdWU7XG4gICAgICBpZiAoZGF0ZTEgIT09IG51bGwgJiYgZGF0ZTIgIT09IG51bGwgJiYgZGF0ZTEgPiBkYXRlMikge1xuICAgICAgICBjLmdldChjYW1wb0ZlY2hhMSkuc2V0RXJyb3JzKHtcbiAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICBtZW5zYWplOiAnRXN0YSBmZWNoYSB0aWVuZSBxdWUgc2VyIG1lbm9yIHF1ZSBsYSBkZSBmaW5hbGl6YWNpb24nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBjLmdldChjYW1wb0ZlY2hhMikuc2V0RXJyb3JzKHtcbiAgICAgICAgICBnZW5lcmFsOiB7XG4gICAgICAgICAgICBtZW5zYWplOiAnRXN0YSBmZWNoYSB0aWVuZSBxdWUgc2VyIG1heW9yIHF1ZSBsYSBkZSBpbmljaW8nLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY2FtcG9WYWxpZGFkb3I7XG4gICAgICB9XG5cbiAgICAgIGMuZ2V0KGNhbXBvRmVjaGExKS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgb25seVNlbGY6IHRydWUgfSk7XG4gICAgICBjLmdldChjYW1wb0ZlY2hhMikudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh7IG9ubHlTZWxmOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgfVxufVxuIl19