@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
JavaScript
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==