UNPKG

@edugouvfr/ngx-dsfr

Version:

NgxDsfr est un portage Angular des éléments d'interface du Système de Design de l'État Français (DSFR).

183 lines 21.6 kB
import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core'; import { DefaultControlComponent, DsfrSeverityConst, newUniqueId } from '../../shared'; import { DsfrInputTypeConst } from './form-input.model'; import * as i0 from "@angular/core"; const INPUT_TYPE_TO_MODE = { 'date': '', 'datetime-local': '', 'email': 'email', 'number': 'numeric', 'password': '', 'search': 'search', 'tel': 'tel', 'text': '', 'textarea': '', 'time': '', }; /** * BaseInputComponent n'embarque que les propriétés d'un input Html */ export class BaseInputComponent extends DefaultControlComponent { constructor() { super(...arguments); /** * Une chaîne de caractères, on ou off, qui indique si la correction automatique est activée. * [Safari uniquement](https://developer.mozilla.org/fr/docs/Web/HTML/Element/input#autocorrect). * @since 1.6 */ this.autoCorrect = true; /** * Indique si le champ est obligatoire ou non, faux par défaut. */ this.required = false; /** Désactive la correction orthographique sur les champs relatifs au nom et aux prénoms. */ this.spellCheck = true; /** * Change la mise en page d'un input accompagné d'un bouton. */ this.inputWrapMode = 'addon'; /** * Message d'information lié au composant */ this.message = undefined; /** * Émet un événement, si la propriété `pattern` est définie, à chaque changement de la valeur de l'input avec * une valeur booléenne indiquant si le `pattern` est validé ou non. */ this.patternValueChange = new EventEmitter(); /** * Id de la div affichant les messages d'erreur ou de validation. * @internal */ this.messagesGroupId = newUniqueId(); this._type = DsfrInputTypeConst.TEXT; } get type() { return this._type; } /** @deprecated since 1.11.0 use placeholder instead (all lowercase) */ get placeHolder() { return this.placeholder; } /** * Permet de récupérer le message d'erreur s'il existe * @since 1.11 */ get error() { return this.severity === DsfrSeverityConst.ERROR ? this.message : undefined; } /** * Permet de récupérer le message de validation s'il existe * @since 1.11 */ get valid() { return this.severity === DsfrSeverityConst.SUCCESS ? this.message : undefined; } /** * Type de l'input, 'text' par défaut. */ set type(value) { this._type = value; this.inputMode = INPUT_TYPE_TO_MODE[this._type] || undefined; // TODO 2.0 A Supprimer le pattern par défaut if (this._type === DsfrInputTypeConst.NUMBER && !this.pattern) { this.pattern = '[0-9]*'; } } /** * Positionne un message d'erreur * @since 1.11 */ set error(value) { this.message = value; this.severity = DsfrSeverityConst.ERROR; } /** * Positionne un message de validation * @since 1.11 */ set valid(value) { this.message = value; this.severity = DsfrSeverityConst.SUCCESS; } /** @deprecated since 1.11.0 use placeholder instead (all lowercase) */ set placeHolder(value) { this.placeholder = value; } /** * À l'écoute de la valeur afin d'émettre un événement dans le cas où on a un pattern. * @internal */ onPatternValueChange() { if (!this.pattern) return; const isValid = new RegExp('^' + this.pattern + '$').test(this.value); this.patternValueChange.emit(isValid); } /** @internal */ isNumber() { return this.type === DsfrInputTypeConst.NUMBER; } /** @internal */ hasMessages() { return !!this.message && this.severity !== undefined; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BaseInputComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BaseInputComponent, selector: "ng-component", inputs: { autocomplete: "autocomplete", ariaAutocomplete: "ariaAutocomplete", ariaExpanded: "ariaExpanded", ariaLabel: "ariaLabel", role: "role", autoCorrect: "autoCorrect", required: "required", placeholder: "placeholder", min: "min", max: "max", minLength: "minLength", maxLength: "maxLength", spellCheck: "spellCheck", icon: "icon", pattern: "pattern", customClass: "customClass", inputWrapMode: "inputWrapMode", message: "message", severity: "severity", type: "type", error: "error", valid: "valid", placeHolder: "placeHolder" }, outputs: { patternValueChange: "patternValueChange" }, host: { listeners: { "input": "onPatternValueChange()" } }, usesInheritance: true, ngImport: i0, template: '', isInline: true }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BaseInputComponent, decorators: [{ type: Component, args: [{ template: '' }] }], propDecorators: { autocomplete: [{ type: Input }], ariaAutocomplete: [{ type: Input }], ariaExpanded: [{ type: Input }], ariaLabel: [{ type: Input }], role: [{ type: Input }], autoCorrect: [{ type: Input }], required: [{ type: Input }], placeholder: [{ type: Input }], min: [{ type: Input }], max: [{ type: Input }], minLength: [{ type: Input }], maxLength: [{ type: Input }], spellCheck: [{ type: Input }], icon: [{ type: Input }], pattern: [{ type: Input }], customClass: [{ type: Input }], inputWrapMode: [{ type: Input }], message: [{ type: Input }], severity: [{ type: Input }], patternValueChange: [{ type: Output }], type: [{ type: Input }], error: [{ type: Input }], valid: [{ type: Input }], placeHolder: [{ type: Input }], onPatternValueChange: [{ type: HostListener, args: ['input'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1pbnB1dC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZHNmci1jb21wb25lbnRzL3NyYy9saWIvZm9ybXMvZm9ybS1pbnB1dC9iYXNlLWlucHV0LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsdUJBQXVCLEVBQWdCLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNyRyxPQUFPLEVBQWdDLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7O0FBRXRGLE1BQU0sa0JBQWtCLEdBQUc7SUFDekIsTUFBTSxFQUFFLEVBQUU7SUFDVixnQkFBZ0IsRUFBRSxFQUFFO0lBQ3BCLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFFBQVEsRUFBRSxTQUFTO0lBQ25CLFVBQVUsRUFBRSxFQUFFO0lBQ2QsUUFBUSxFQUFFLFFBQVE7SUFDbEIsS0FBSyxFQUFFLEtBQUs7SUFDWixNQUFNLEVBQUUsRUFBRTtJQUNWLFVBQVUsRUFBRSxFQUFFO0lBQ2QsTUFBTSxFQUFFLEVBQUU7Q0FDWCxDQUFDO0FBRUY7O0dBRUc7QUFFSCxNQUFNLE9BQWdCLGtCQUFtQixTQUFRLHVCQUErQjtJQURoRjs7UUFrREU7Ozs7V0FJRztRQUNNLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBRTVCOztXQUVHO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQTJCMUIsNEZBQTRGO1FBQ25GLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFpQjNCOztXQUVHO1FBQ00sa0JBQWEsR0FBdUIsT0FBTyxDQUFDO1FBRXJEOztXQUVHO1FBQ00sWUFBTyxHQUF1QixTQUFTLENBQUM7UUFPakQ7OztXQUdHO1FBQ08sdUJBQWtC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QUk7c0JBQVosS0FBSztnQkFPRyxXQUFXO3NCQUFuQixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxHQUFHO3NCQUFYLEtBQUs7Z0JBS0csR0FBRztzQkFBWCxLQUFLO2dCQUtHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBS0csU0FBUztzQkFBakIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLElBQUk7c0JBQVosS0FBSztnQkFLRyxPQUFPO3NCQUFmLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSztnQkFLRyxhQUFhO3NCQUFyQixLQUFLO2dCQUtHLE9BQU87c0JBQWYsS0FBSztnQkFLRyxRQUFRO3NCQUFoQixLQUFLO2dCQU1JLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkE2Q00sSUFBSTtzQkFBaEIsS0FBSztnQkFhTyxLQUFLO3NCQUFqQixLQUFLO2dCQVNPLEtBQUs7c0JBQWpCLEtBQUs7Z0JBTU8sV0FBVztzQkFBdkIsS0FBSztnQkFTTixvQkFBb0I7c0JBRG5CLFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERlZmF1bHRDb250cm9sQ29tcG9uZW50LCBEc2ZyU2V2ZXJpdHksIERzZnJTZXZlcml0eUNvbnN0LCBuZXdVbmlxdWVJZCB9IGZyb20gJy4uLy4uL3NoYXJlZCc7XG5pbXBvcnQgeyBEc2ZySW5wdXRNb2RlLCBEc2ZySW5wdXRUeXBlLCBEc2ZySW5wdXRUeXBlQ29uc3QgfSBmcm9tICcuL2Zvcm0taW5wdXQubW9kZWwnO1xuXG5jb25zdCBJTlBVVF9UWVBFX1RPX01PREUgPSB7XG4gICdkYXRlJzogJycsXG4gICdkYXRldGltZS1sb2NhbCc6ICcnLFxuICAnZW1haWwnOiAnZW1haWwnLFxuICAnbnVtYmVyJzogJ251bWVyaWMnLFxuICAncGFzc3dvcmQnOiAnJyxcbiAgJ3NlYXJjaCc6ICdzZWFyY2gnLFxuICAndGVsJzogJ3RlbCcsXG4gICd0ZXh0JzogJycsXG4gICd0ZXh0YXJlYSc6ICcnLFxuICAndGltZSc6ICcnLFxufTtcblxuLyoqXG4gKiBCYXNlSW5wdXRDb21wb25lbnQgbidlbWJhcnF1ZSBxdWUgbGVzIHByb3ByacOpdMOpcyBkJ3VuIGlucHV0IEh0bWxcbiAqL1xuQENvbXBvbmVudCh7IHRlbXBsYXRlOiAnJyB9KVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VJbnB1dENvbXBvbmVudCBleHRlbmRzIERlZmF1bHRDb250cm9sQ29tcG9uZW50PHN0cmluZz4ge1xuICAvKipcbiAgICogTCdhdHRyaWJ1dCBIVE1MIGRlIHNhaXNpZSBzZW1pLWF1dG9tYXRpcXVlIHBlcm1ldCBhdXggZMOpdmVsb3BwZXVycyBXZWIgZGUgc3DDqWNpZmllciBsJ8OpdmVudHVlbGxlIGF1dG9yaXNhdGlvblxuICAgKiBkb250IGRpc3Bvc2UgbCdhZ2VudCB1dGlsaXNhdGV1ciBwb3VyIGZvdXJuaXIgdW5lIGFzc2lzdGFuY2UgYXV0b21hdGlzw6llIGRhbnMgbGUgcmVtcGxpc3NhZ2UgZGVzIHZhbGV1cnMgZGVzXG4gICAqIGNoYW1wcyBkdSBmb3JtdWxhaXJlLCBhaW5zaSBxdWUgZGVzIGNvbnNlaWxzIGF1IG5hdmlnYXRldXIgcXVhbnQgYXUgdHlwZSBkJ2luZm9ybWF0aW9ucyBhdHRlbmR1ZXMgZGFucyBsZSBjaGFtcC5cbiAgICogRXggOiBlbWFpbCwgbmFtZSwgZXRjLlxuICAgKi9cbiAgQElucHV0KCkgYXV0b2NvbXBsZXRlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgLyoqXG4gICAqIPCfkZMgQ29ycmVzcG9uZCDDoCBsJ2F0dHJpYnV0IGBhcmlhLWF1dG9jb21wbGV0ZWAuPGJyIC8+XG4gICAqIEwnYXR0cmlidXQgYGFyaWEtYXV0b2NvbXBsZXRlYCBpbmRpcXVlIHNpIGxhIHNhaXNpZSBkZSB0ZXh0ZSBwZXV0IGTDqWNsZW5jaGVyIGwnYWZmaWNoYWdlIGQndW5lIG91IHBsdXNpZXVyc1xuICAgKiBwcsOpZGljdGlvbnMgZGUgbGEgdmFsZXVyIHByw6l2dWUgcGFyIGwndXRpbGlzYXRldXIgcG91ciB1bmUgem9uZSBkZSBsaXN0ZSBkw6lyb3VsYW50ZSwgdW5lIHpvbmUgZGUgcmVjaGVyY2hlIG91XG4gICAqIHVuZSB6b25lIGRlIHRleHRlIGV0IHNww6ljaWZpZSBjb21tZW50IGxlcyBwcsOpZGljdGlvbnMgc2Vyb250IHByw6lzZW50w6llcyBzaSBlbGxlcyBzb250IGVmZmVjdHXDqWVzLlxuICAgKiBFeCA6IGBhcmlhQXV0b2NvbXBsZXRlPVwibGlzdFwiYCBsb3JzcXVlIGxhIHNhaXNpZSBkJ3VuZSB2YWxldXIgZmFpdCBhcHBhcmFpdHJlIHVuZSBsaXN0ZSBkZSBzdWdnZXN0aW9ucy48YnIgLz5cbiAgICogVmFsZXVyIHBhciBkw6lmYXV0IDogYHVuZGVmaW5lZGAgKG4nYXBwYXJhaXQgcGFzIGNvbW1lIGF0dHJpYnV0IGRhbnMgbCdodG1sKS5cbiAgICogQHNpbmNlIDEuNFxuICAgKi9cbiAgQElucHV0KCkgYXJpYUF1dG9jb21wbGV0ZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiDwn5GTIENvcnJlc3BvbmQgw6AgbCdhdHRyaWJ1dCBgYXJpYS1leHBhbmRlZGAuPGJyIC8+XG4gICAqIEwnYXR0cmlidXQgYGFyaWEtZXhwYW5kZWRgIGVzdCBkw6lmaW5pIHN1ciB1biDDqWzDqW1lbnQgcG91ciBpbmRpcXVlciBzaSB1biBjb250csO0bGUgZXN0IGTDqXZlbG9wcMOpIG91IHLDqWR1aXQsXG4gICAqIGV0IHNpIGxlcyDDqWzDqW1lbnRzIGNvbnRyw7Rsw6lzIHNvbnQgYWZmaWNow6lzIG91IG1hc3F1w6lzLiA8YnIgLz5cbiAgICogVmFsZXVyIHBhciBkw6lmYXV0IDogYHVuZGVmaW5lZGAgKG4nYXBwYXJhaXQgcGFzIGNvbW1lIGF0dHJpYnV0IGRhbnMgbCdodG1sKS5cbiAgICogQHNpbmNlIDEuNFxuICAgKi9cbiAgQElucHV0KCkgYXJpYUV4cGFuZGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiDwn5GTIENvcnJlc3BvbmQgw6AgbCdhdHRyaWJ1dCBgYXJpYS1sYWJlbGAuPGJyIC8+XG4gICAqIEwnYXR0cmlidXQgYGFyaWEtbGFiZWxgIGVzdCB1dGlsaXPDqSBwb3VyIGTDqWZpbmlyIHVuZSBsw6lnZW5kZSBub24gdmlzaWJsZSBhc3NvY2nDqWUgw6AgdW4gw6lsw6ltZW50IEhUTUwgZG9udCBsZVxuICAgKiBzZW5zIGVzdCB0cmFuc21pcyB1bmlxdWVtZW50IHBhciBsZSB2aXN1ZWwuPGJyIC8+XG4gICAqIFZhbGV1ciBwYXIgZMOpZmF1dCA6IGB1bmRlZmluZWRgIChuJ2FwcGFyYWl0IHBhcyBjb21tZSBhdHRyaWJ1dCBkYW5zIGwnaHRtbCkuXG4gICAqL1xuICBASW5wdXQoKSBhcmlhTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICog8J+RkyBMZXMgW3LDtGxlcyBBUklBXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BY2Nlc3NpYmlsaXR5L0FSSUEvUm9sZXMpIGZvdXJuaXNzZW50IHVuZVxuICAgKiBzaWduaWZpY2F0aW9uIHPDqW1hbnRpcXVlIGF1IGNvbnRlbnUsIHBlcm1ldHRhbnQgYXV4IGxlY3RldXJzIGQnw6ljcmFuIGV0IMOgIGQnYXV0cmVzIG91dGlscyBkZSBwcsOpc2VudGVyIGV0XG4gICAqIGRlIHByZW5kcmUgZW4gY2hhcmdlIGwnaW50ZXJhY3Rpb24gYXZlYyB1biBvYmpldCBkJ3VuZSBtYW5pw6hyZSBjb2jDqXJlbnRlIGF2ZWMgbGVzIGF0dGVudGVzIGRlcyB1dGlsaXNhdGV1cnNcbiAgICogY29uY2VybmFudCBjZSB0eXBlIGQnb2JqZXQuIExlcyByw7RsZXMgQVJJQSBwZXV2ZW50IMOqdHJlIHV0aWxpc8OpcyBwb3VyIGTDqWNyaXJlIGRlcyDDqWzDqW1lbnRzIHF1aSBuJ2V4aXN0ZW50XG4gICAqIHBhcyBuYXRpdmVtZW50IGVuIEhUTUwgb3UgcXVpIGV4aXN0ZW50LCBtYWlzIG5lIGLDqW7DqWZpY2llbnQgcGFzIGVuY29yZSBkJ3VuZSBwcmlzZSBlbiBjaGFyZ2UgY29tcGzDqHRlIHBhclxuICAgKiBsZSBuYXZpZ2F0ZXVyLiBFeCA6IGB0b29sYmFyYCwgYHRhYnBhbmVsYCwgZXRjLjxiciAvPlxuICAgKiBWYWxldXIgcGFyIGTDqWZhdXQgOiBgdW5kZWZpbmVkYCAobidhcHBhcmFpdCBwYXMgY29tbWUgYXR0cmlidXQgZGFucyBsJ2h0bWwpLlxuICAgKiBAc2luY2UgMS40XG4gICAqL1xuICBASW5wdXQoKSByb2xlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFVuZSBjaGHDrm5lIGRlIGNhcmFjdMOocmVzLCBvbiBvdSBvZmYsIHF1aSBpbmRpcXVlIHNpIGxhIGNvcnJlY3Rpb24gYXV0b21hdGlxdWUgZXN0IGFjdGl2w6llLlxuICAgKiBbU2FmYXJpIHVuaXF1ZW1lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2ZyL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNhdXRvY29ycmVjdCkuXG4gICAqIEBzaW5jZSAxLjZcbiAgICovXG4gIEBJbnB1dCgpIGF1dG9Db3JyZWN0ID0gdHJ1ZTtcblxuICAvKipcbiAgICogSW5kaXF1ZSBzaSBsZSBjaGFtcCBlc3Qgb2JsaWdhdG9pcmUgb3Ugbm9uLCBmYXV4IHBhciBkw6lmYXV0LlxuICAgKi9cbiAgQElucHV0KCkgcmVxdWlyZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogUGxhY2Vob2xkZXIgZGUgbCdpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0IG1pbiBkZSBsJ2lucHV0LlxuICAgKi9cbiAgQElucHV0KCkgbWluOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0IG1heCBkZSBsJ2lucHV0LlxuICAgKi9cbiAgQElucHV0KCkgbWF4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0IG1pbkxlbmd0aCBkZSBsJ2lucHV0LlxuICAgKi9cbiAgQElucHV0KCkgbWluTGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEF0dHJpYnV0IG1heExlbmd0aCBkZSBsJ2lucHV0LlxuICAgKi9cbiAgQElucHV0KCkgbWF4TGVuZ3RoOiBudW1iZXI7XG5cbiAgLyoqIETDqXNhY3RpdmUgbGEgY29ycmVjdGlvbiBvcnRob2dyYXBoaXF1ZSBzdXIgbGVzIGNoYW1wcyByZWxhdGlmcyBhdSBub20gZXQgYXV4IHByw6lub21zLiAqL1xuICBASW5wdXQoKSBzcGVsbENoZWNrID0gdHJ1ZTtcblxuICAvKipcbiAgICogQWpvdXRlIHVuIGljb24gw6AgZHJvaXRlIGRhbnMgbGUgY2hhbXAgZGUgc2Fpc2llLlxuICAgKi9cbiAgQElucHV0KCkgaWNvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQYXR0ZXJuIGRlIGwnaW5wdXQuXG4gICAqL1xuICBASW5wdXQoKSBwYXR0ZXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFqb3V0IGQndW4gc3R5bGUgc3DDqWNpZmlxdWUsIHBlcm1ldCBwYXIgZXhlbXBsZSBkZSBsYSBsaW1pdGVyIGxhIGxhcmdldXIgZCd1biBpbnB1dC5cbiAgICovXG4gIEBJbnB1dCgpIGN1c3RvbUNsYXNzOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENoYW5nZSBsYSBtaXNlIGVuIHBhZ2UgZCd1biBpbnB1dCBhY2NvbXBhZ27DqSBkJ3VuIGJvdXRvbi5cbiAgICovXG4gIEBJbnB1dCgpIGlucHV0V3JhcE1vZGU6ICdhZGRvbicgfCAnYWN0aW9uJyA9ICdhZGRvbic7XG5cbiAgLyoqXG4gICAqIE1lc3NhZ2UgZCdpbmZvcm1hdGlvbiBsacOpIGF1IGNvbXBvc2FudFxuICAgKi9cbiAgQElucHV0KCkgbWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBSZXByw6lzZW50ZSBsYSBzw6l2w6lyaXTDqSBkdSBtZXNzYWdlLiDwn5SlIGBXQVJOSU5HYCBuJ2VzdCBwYXMgZ8OpcsOpIGRhbnMgY2V0dGUgdmVyc2lvbi5cbiAgICovXG4gIEBJbnB1dCgpIHNldmVyaXR5OiBEc2ZyU2V2ZXJpdHk7XG5cbiAgLyoqXG4gICAqIMOJbWV0IHVuIMOpdsOpbmVtZW50LCBzaSBsYSBwcm9wcmnDqXTDqSBgcGF0dGVybmAgZXN0IGTDqWZpbmllLCDDoCBjaGFxdWUgY2hhbmdlbWVudCBkZSBsYSB2YWxldXIgZGUgbCdpbnB1dCBhdmVjXG4gICAqIHVuZSB2YWxldXIgYm9vbMOpZW5uZSBpbmRpcXVhbnQgc2kgbGUgYHBhdHRlcm5gIGVzdCB2YWxpZMOpIG91IG5vbi5cbiAgICovXG4gIEBPdXRwdXQoKSBwYXR0ZXJuVmFsdWVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgLyoqXG4gICAqIEwnaW5wdXQgbW9kZSBlc3QgaW5pdGlhbGlzw6kgcGFyIGTDqWZhdXQgZW4gZm9uY3Rpb24gZHUgdHlwZSBkZSBsJ2lucHV0LCAnZGVjaW1hbCcsICd1cmwnIG5lIHNvbnQgcGFzIHRyYWl0w6kgcG91clxuICAgKiBsJ2luc3RhbnQuXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgaW5wdXRNb2RlOiBEc2ZySW5wdXRNb2RlO1xuXG4gIC8qKlxuICAgKiBJZCBkZSBsYSBkaXYgYWZmaWNoYW50IGxlcyBtZXNzYWdlcyBkJ2VycmV1ciBvdSBkZSB2YWxpZGF0aW9uLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHJlYWRvbmx5IG1lc3NhZ2VzR3JvdXBJZCA9IG5ld1VuaXF1ZUlkKCk7XG5cbiAgcHJpdmF0ZSBfdHlwZTogRHNmcklucHV0VHlwZSA9IERzZnJJbnB1dFR5cGVDb25zdC5URVhUO1xuXG4gIGdldCB0eXBlKCk6IERzZnJJbnB1dFR5cGUge1xuICAgIHJldHVybiB0aGlzLl90eXBlO1xuICB9XG5cbiAgLyoqIEBkZXByZWNhdGVkIHNpbmNlIDEuMTEuMCB1c2UgcGxhY2Vob2xkZXIgaW5zdGVhZCAoYWxsIGxvd2VyY2FzZSkgKi9cbiAgZ2V0IHBsYWNlSG9sZGVyKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucGxhY2Vob2xkZXI7XG4gIH1cblxuICAvKipcbiAgICogUGVybWV0IGRlIHLDqWN1cMOpcmVyIGxlIG1lc3NhZ2UgZCdlcnJldXIgcydpbCBleGlzdGVcbiAgICogQHNpbmNlIDEuMTFcbiAgICovXG4gIGdldCBlcnJvcigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnNldmVyaXR5ID09PSBEc2ZyU2V2ZXJpdHlDb25zdC5FUlJPUiA/IHRoaXMubWVzc2FnZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBQZXJtZXQgZGUgcsOpY3Vww6lyZXIgbGUgbWVzc2FnZSBkZSB2YWxpZGF0aW9uIHMnaWwgZXhpc3RlXG4gICAqIEBzaW5jZSAxLjExXG4gICAqL1xuICBnZXQgdmFsaWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5zZXZlcml0eSA9PT0gRHNmclNldmVyaXR5Q29uc3QuU1VDQ0VTUyA/IHRoaXMubWVzc2FnZSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUeXBlIGRlIGwnaW5wdXQsICd0ZXh0JyBwYXIgZMOpZmF1dC5cbiAgICovXG4gIEBJbnB1dCgpIHNldCB0eXBlKHZhbHVlOiBEc2ZySW5wdXRUeXBlKSB7XG4gICAgdGhpcy5fdHlwZSA9IHZhbHVlO1xuICAgIHRoaXMuaW5wdXRNb2RlID0gPERzZnJJbnB1dE1vZGU+SU5QVVRfVFlQRV9UT19NT0RFW3RoaXMuX3R5cGVdIHx8IHVuZGVmaW5lZDtcbiAgICAvLyBUT0RPIDIuMCBBIFN1cHByaW1lciBsZSBwYXR0ZXJuIHBhciBkw6lmYXV0XG4gICAgaWYgKHRoaXMuX3R5cGUgPT09IERzZnJJbnB1dFR5cGVDb25zdC5OVU1CRVIgJiYgIXRoaXMucGF0dGVybikge1xuICAgICAgdGhpcy5wYXR0ZXJuID0gJ1swLTldKic7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFBvc2l0aW9ubmUgdW4gbWVzc2FnZSBkJ2VycmV1clxuICAgKiBAc2luY2UgMS4xMVxuICAgKi9cbiAgQElucHV0KCkgc2V0IGVycm9yKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICB0aGlzLm1lc3NhZ2UgPSB2YWx1ZTtcbiAgICB0aGlzLnNldmVyaXR5ID0gRHNmclNldmVyaXR5Q29uc3QuRVJST1I7XG4gIH1cblxuICAvKipcbiAgICogUG9zaXRpb25uZSB1biBtZXNzYWdlIGRlIHZhbGlkYXRpb25cbiAgICogQHNpbmNlIDEuMTFcbiAgICovXG4gIEBJbnB1dCgpIHNldCB2YWxpZCh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgdGhpcy5tZXNzYWdlID0gdmFsdWU7XG4gICAgdGhpcy5zZXZlcml0eSA9IERzZnJTZXZlcml0eUNvbnN0LlNVQ0NFU1M7XG4gIH1cblxuICAvKiogQGRlcHJlY2F0ZWQgc2luY2UgMS4xMS4wIHVzZSBwbGFjZWhvbGRlciBpbnN0ZWFkIChhbGwgbG93ZXJjYXNlKSAqL1xuICBASW5wdXQoKSBzZXQgcGxhY2VIb2xkZXIodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiDDgCBsJ8OpY291dGUgZGUgbGEgdmFsZXVyIGFmaW4gZCfDqW1ldHRyZSB1biDDqXbDqW5lbWVudCBkYW5zIGxlIGNhcyBvw7kgb24gYSB1biBwYXR0ZXJuLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIEBIb3N0TGlzdGVuZXIoJ2lucHV0JylcbiAgb25QYXR0ZXJuVmFsdWVDaGFuZ2UoKSB7XG4gICAgaWYgKCF0aGlzLnBhdHRlcm4pIHJldHVybjtcbiAgICBjb25zdCBpc1ZhbGlkID0gbmV3IFJlZ0V4cCgnXicgKyB0aGlzLnBhdHRlcm4gKyAnJCcpLnRlc3QodGhpcy52YWx1ZSEpO1xuICAgIHRoaXMucGF0dGVyblZhbHVlQ2hhbmdlLmVtaXQoaXNWYWxpZCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGlzTnVtYmVyKCkge1xuICAgIHJldHVybiB0aGlzLnR5cGUgPT09IERzZnJJbnB1dFR5cGVDb25zdC5OVU1CRVI7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIGhhc01lc3NhZ2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMubWVzc2FnZSAmJiB0aGlzLnNldmVyaXR5ICE9PSB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==