@seniorsistemas/angular-components 19.1.0 → 19.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +58 -25
- package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +8 -8
- package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +140 -99
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +12 -12
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
- package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-number-field.mjs +2 -3
- package/esm2022/locale/lib/locale/apply-localized-mask.mjs +19 -0
- package/esm2022/locale/lib/locale/pipes/localized-bignumber-impure.pipe.mjs +1 -1
- package/esm2022/locale/lib/locale/pipes/localized-bignumber.pipe.mjs +5 -4
- package/esm2022/locale/public-api.mjs +2 -1
- package/esm2022/number-input/lib/number-input/number-input.directive.mjs +12 -148
- package/esm2022/number-input/lib/number-input/number-input.module.mjs +5 -5
- package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +32 -35
- package/esm2022/table/lib/table/table-column/table-columns.component.mjs +20 -4
- package/esm2022/table/public-api.mjs +2 -1
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +139 -98
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +19 -19
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +2 -3
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-locale.mjs +22 -4
- package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-number-input.mjs +14 -151
- package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +31 -34
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs +21 -6
- package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
- package/inline-edit/lib/inline-edit/fields/inline-edit-number-field.d.ts +2 -3
- package/locale/lib/locale/apply-localized-mask.d.ts +9 -0
- package/locale/lib/locale/pipes/localized-bignumber-impure.pipe.d.ts +2 -3
- package/locale/lib/locale/pipes/localized-bignumber.pipe.d.ts +3 -2
- package/locale/public-api.d.ts +1 -0
- package/number-input/lib/number-input/number-input.directive.d.ts +7 -47
- package/number-input/lib/number-input/number-input.module.d.ts +2 -2
- package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +8 -9
- package/package.json +1 -1
- package/table/public-api.d.ts +1 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { OnInit, OnChanges, SimpleChanges } from '@angular/core';
|
|
2
|
+
import { AbstractControl, ValidationErrors } from '@angular/forms';
|
|
3
|
+
import { NumericMaskDirective } from '@seniorsistemas/angular-components/numeric-mask';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
/**
|
|
6
|
-
* @deprecated
|
|
6
|
+
* @deprecated Este enum não tem mais efeito. O alinhamento do campo é sempre `'right'`.
|
|
7
7
|
*/
|
|
8
8
|
export declare enum BignumberAlignmentOption {
|
|
9
9
|
RIGHT = "right",
|
|
@@ -22,66 +22,99 @@ export declare enum BignumberAlignmentOption {
|
|
|
22
22
|
*
|
|
23
23
|
* @category Inputs
|
|
24
24
|
*/
|
|
25
|
-
export declare class BignumberInputDirective extends
|
|
26
|
-
private readonly localeService;
|
|
25
|
+
export declare class BignumberInputDirective extends NumericMaskDirective implements OnInit, OnChanges {
|
|
27
26
|
/**
|
|
28
|
-
* @description Número total de dígitos significativos aceitos pelo campo.
|
|
27
|
+
* @description Número total de dígitos significativos aceitos pelo campo (parte inteira + parte decimal).
|
|
28
|
+
*
|
|
29
|
+
* Durante a digitação, o campo limita fisicamente o número de caracteres via `maxLength`.
|
|
30
|
+
* Ao colar um valor que ultrapasse o limite, o evento `pasteRejected` é emitido e a colagem é cancelada.
|
|
31
|
+
* Após sair do campo (blur) ou ao submeter o formulário, se o valor ultrapassar `precision`,
|
|
32
|
+
* o campo ficará inválido com o erro `exceedsPrecision: { precision, actual }`.
|
|
29
33
|
*
|
|
30
34
|
* @default 15
|
|
31
35
|
*/
|
|
32
|
-
precision: number
|
|
36
|
+
precision: import("@angular/core").InputSignal<number>;
|
|
33
37
|
/**
|
|
38
|
+
* @deprecated Use `minDecimalPlaces` e `maxDecimalPlaces` ao invés deste.
|
|
34
39
|
* @description Número de casas decimais exibidas e aceitas pelo campo.
|
|
40
|
+
* Quando informado, repassa o valor para `minDecimalPlaces` e `maxDecimalPlaces`.
|
|
41
|
+
*
|
|
42
|
+
* @default 0
|
|
43
|
+
*/
|
|
44
|
+
scale: import("@angular/core").InputSignal<number>;
|
|
45
|
+
/**
|
|
46
|
+
* @description Número mínimo de casas decimais exibidas.
|
|
47
|
+
*
|
|
48
|
+
* @default 0
|
|
49
|
+
*/
|
|
50
|
+
minDecimalPlaces: import("@angular/core").ModelSignal<number>;
|
|
51
|
+
/**
|
|
52
|
+
* @description Número máximo de casas decimais aceitas.
|
|
35
53
|
*
|
|
36
54
|
* @default 0
|
|
37
55
|
*/
|
|
38
|
-
|
|
56
|
+
maxDecimalPlaces: import("@angular/core").ModelSignal<number>;
|
|
39
57
|
/**
|
|
40
58
|
* @description Separador decimal personalizado. Quando não informado,
|
|
41
59
|
* utiliza o separador definido pelo locale ativo da aplicação.
|
|
42
60
|
*/
|
|
43
|
-
decimalSeparator
|
|
61
|
+
decimalSeparator: import("@angular/core").ModelSignal<string>;
|
|
62
|
+
/**
|
|
63
|
+
* @deprecated Use `thousandSeparator` ao invés deste.
|
|
64
|
+
* @description Separador de milhar personalizado. Recomenda-se migrar para `thousandSeparator`.
|
|
65
|
+
*/
|
|
66
|
+
thousandsSeparator: import("@angular/core").InputSignal<string | undefined>;
|
|
44
67
|
/**
|
|
45
68
|
* @description Separador de milhar personalizado. Quando não informado,
|
|
46
69
|
* utiliza o separador definido pelo locale ativo da aplicação.
|
|
47
70
|
*/
|
|
48
|
-
|
|
71
|
+
thousandSeparator: import("@angular/core").ModelSignal<string>;
|
|
49
72
|
/**
|
|
50
|
-
* @
|
|
51
|
-
*
|
|
52
|
-
* @default 'left'
|
|
73
|
+
* @deprecated Este input não tem mais efeito e pode ser removido.
|
|
74
|
+
* O alinhamento do campo é sempre `'right'`, conforme o comportamento padrão da máscara numérica.
|
|
53
75
|
*/
|
|
54
|
-
alignTo:
|
|
76
|
+
alignTo: import("@angular/core").InputSignal<"right" | "left">;
|
|
55
77
|
/**
|
|
56
78
|
* @description Permite a entrada de valores negativos.
|
|
57
79
|
*
|
|
58
80
|
* @default true
|
|
59
81
|
*/
|
|
60
|
-
allowNegative: boolean
|
|
82
|
+
allowNegative: import("@angular/core").InputSignal<boolean>;
|
|
61
83
|
/**
|
|
62
84
|
* @description Texto de placeholder exibido quando o campo está vazio.
|
|
63
85
|
*/
|
|
64
|
-
placeholder
|
|
86
|
+
placeholder: import("@angular/core").ModelSignal<string | undefined>;
|
|
65
87
|
maxLength?: number;
|
|
66
88
|
/**
|
|
67
|
-
* @description Emitido quando uma
|
|
89
|
+
* @description Emitido quando uma colagem (paste) é rejeitada pela validação do campo.
|
|
68
90
|
* Emite a string colada que foi recusada.
|
|
69
91
|
*/
|
|
70
|
-
pasteRejected:
|
|
71
|
-
private
|
|
72
|
-
|
|
92
|
+
pasteRejected: import("@angular/core").OutputEmitterRef<string>;
|
|
93
|
+
private _decimalSeparatorExplicit;
|
|
94
|
+
private _thousandSeparatorExplicit;
|
|
95
|
+
constructor();
|
|
73
96
|
ngOnInit(): void;
|
|
74
97
|
ngOnChanges(changes: SimpleChanges): void;
|
|
98
|
+
/**
|
|
99
|
+
* Overrides base paste handler to add precision validation.
|
|
100
|
+
* If the pasted value exceeds `precision` digits, the paste is rejected.
|
|
101
|
+
*/
|
|
75
102
|
onPaste(event: ClipboardEvent): void;
|
|
76
103
|
/**
|
|
77
|
-
*
|
|
104
|
+
* Overrides locale-derived separators with explicitly set inputs, if provided.
|
|
105
|
+
* If no explicit separator is set, the locale-derived value is used.
|
|
106
|
+
*/
|
|
107
|
+
protected updateSeparators(): void;
|
|
108
|
+
/**
|
|
109
|
+
* Overrides base validator to add precision validation.
|
|
110
|
+
* If the total number of significant digits exceeds `precision`, returns an `exceedsPrecision` error.
|
|
78
111
|
*/
|
|
79
|
-
|
|
112
|
+
validate(control: AbstractControl): ValidationErrors | null;
|
|
80
113
|
/**
|
|
81
114
|
* Responsible to calculate the field maximum length considering the separators.
|
|
82
115
|
*/
|
|
83
116
|
private calculateMaxLength;
|
|
84
|
-
private
|
|
117
|
+
private updatePlaceholder;
|
|
85
118
|
static ɵfac: i0.ɵɵFactoryDeclaration<BignumberInputDirective, never>;
|
|
86
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<BignumberInputDirective, "input[sBignumberInput]", never, { "precision": { "alias": "precision"; "required": false; }; "scale": { "alias": "scale"; "required": false; }; "decimalSeparator": { "alias": "decimalSeparator"; "required": false; }; "thousandsSeparator": { "alias": "thousandsSeparator"; "required": false; }; "alignTo": { "alias": "alignTo"; "required": false; }; "allowNegative": { "alias": "allowNegative"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; }, { "pasteRejected": "pasteRejected"; }, never, never, false, never>;
|
|
119
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<BignumberInputDirective, "input[sBignumberInput]", never, { "precision": { "alias": "precision"; "required": false; "isSignal": true; }; "scale": { "alias": "scale"; "required": false; "isSignal": true; }; "minDecimalPlaces": { "alias": "minDecimalPlaces"; "required": false; "isSignal": true; }; "maxDecimalPlaces": { "alias": "maxDecimalPlaces"; "required": false; "isSignal": true; }; "decimalSeparator": { "alias": "decimalSeparator"; "required": false; "isSignal": true; }; "thousandsSeparator": { "alias": "thousandsSeparator"; "required": false; "isSignal": true; }; "thousandSeparator": { "alias": "thousandSeparator"; "required": false; "isSignal": true; }; "alignTo": { "alias": "alignTo"; "required": false; "isSignal": true; }; "allowNegative": { "alias": "allowNegative"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; }, { "minDecimalPlaces": "minDecimalPlacesChange"; "maxDecimalPlaces": "maxDecimalPlacesChange"; "decimalSeparator": "decimalSeparatorChange"; "thousandSeparator": "thousandSeparatorChange"; "placeholder": "placeholderChange"; "pasteRejected": "pasteRejected"; }, never, never, false, never>;
|
|
87
120
|
}
|
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
import { ChangeDetectorRef, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges } from '@angular/core';
|
|
2
2
|
import { ControlValueAccessor, FormGroup } from '@angular/forms';
|
|
3
3
|
import { TranslateService } from '@ngx-translate/core';
|
|
4
|
-
import {
|
|
4
|
+
import { LoadingStateIndicators } from '@seniorsistemas/angular-components/loading-state';
|
|
5
|
+
import { LocalizedBignumberOptions } from '@seniorsistemas/angular-components/locale';
|
|
5
6
|
import { HotkeysService } from 'angular2-hotkeys';
|
|
6
7
|
import { SortMeta } from 'primeng/api';
|
|
7
8
|
import { AutoComplete, AutoCompleteCompleteEvent } from 'primeng/autocomplete';
|
|
8
9
|
import { Table, TableLazyLoadEvent } from 'primeng/table';
|
|
9
|
-
import { DefaultFilter } from './types/default-filter';
|
|
10
|
-
import { LabelOptions } from './types/label-options';
|
|
11
|
-
import { LoadingStateIndicators } from '@seniorsistemas/angular-components/loading-state';
|
|
12
10
|
import { DynamicStructure } from '../../configurations/structure/structure';
|
|
13
11
|
import { BignumberFieldConfig } from '../../form-field/configurations/fields/bignumber-field';
|
|
14
12
|
import { CurrencyFieldConfig } from '../../form-field/configurations/fields/currency-field';
|
|
@@ -17,6 +15,8 @@ import { NumberFieldConfig } from '../../form-field/configurations/fields/number
|
|
|
17
15
|
import { SelectFieldConfig } from '../../form-field/configurations/fields/select-field';
|
|
18
16
|
import { TextFieldConfig } from '../../form-field/configurations/fields/text-field';
|
|
19
17
|
import { LookupSearchRequest } from './models/lookup-api.model';
|
|
18
|
+
import { DefaultFilter } from './types/default-filter';
|
|
19
|
+
import { LabelOptions } from './types/label-options';
|
|
20
20
|
import * as i0 from "@angular/core";
|
|
21
21
|
export declare class LookupComponent implements ControlValueAccessor, OnChanges, OnInit, OnDestroy {
|
|
22
22
|
private readonly hotkeysService;
|
|
@@ -128,10 +128,10 @@ export declare class LookupComponent implements ControlValueAccessor, OnChanges,
|
|
|
128
128
|
getColWidth(label: string): string;
|
|
129
129
|
getScale(scale: any): number;
|
|
130
130
|
private isFunction;
|
|
131
|
-
getDoubleMaskConfig(col: NumberFieldConfig | BignumberFieldConfig):
|
|
132
|
-
getMoneyMaskConfig(col: CurrencyFieldConfig):
|
|
133
|
-
getIntegerMaskConfig(col: BignumberFieldConfig | NumberFieldConfig):
|
|
134
|
-
getNumberMaskConfig(col: NumberFieldConfig | BignumberFieldConfig):
|
|
131
|
+
getDoubleMaskConfig(col: NumberFieldConfig | BignumberFieldConfig): LocalizedBignumberOptions;
|
|
132
|
+
getMoneyMaskConfig(col: CurrencyFieldConfig): LocalizedBignumberOptions;
|
|
133
|
+
getIntegerMaskConfig(col: BignumberFieldConfig | NumberFieldConfig): LocalizedBignumberOptions;
|
|
134
|
+
getNumberMaskConfig(col: NumberFieldConfig | BignumberFieldConfig): LocalizedBignumberOptions;
|
|
135
135
|
parseValueMaskValue(col: DynamicType, rowData: any): any;
|
|
136
136
|
fieldHasMask(field: DynamicType): field is NumberFieldConfig | BignumberFieldConfig | TextFieldConfig;
|
|
137
137
|
onTableRowDoubleClick(rowData: any): void;
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { Directive,
|
|
1
|
+
import { Directive, forwardRef, input, model, output } from '@angular/core';
|
|
2
2
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
3
|
-
import {
|
|
4
|
-
import { first } from 'rxjs/operators';
|
|
3
|
+
import { NumericMaskDirective } from '@seniorsistemas/angular-components/numeric-mask';
|
|
5
4
|
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@seniorsistemas/angular-components/locale";
|
|
7
5
|
/**
|
|
8
|
-
* @deprecated
|
|
6
|
+
* @deprecated Este enum não tem mais efeito. O alinhamento do campo é sempre `'right'`.
|
|
9
7
|
*/
|
|
10
8
|
export var BignumberAlignmentOption;
|
|
11
9
|
(function (BignumberAlignmentOption) {
|
|
@@ -25,134 +23,198 @@ export var BignumberAlignmentOption;
|
|
|
25
23
|
*
|
|
26
24
|
* @category Inputs
|
|
27
25
|
*/
|
|
28
|
-
export class BignumberInputDirective extends
|
|
29
|
-
localeService;
|
|
26
|
+
export class BignumberInputDirective extends NumericMaskDirective {
|
|
30
27
|
/**
|
|
31
|
-
* @description Número total de dígitos significativos aceitos pelo campo.
|
|
28
|
+
* @description Número total de dígitos significativos aceitos pelo campo (parte inteira + parte decimal).
|
|
29
|
+
*
|
|
30
|
+
* Durante a digitação, o campo limita fisicamente o número de caracteres via `maxLength`.
|
|
31
|
+
* Ao colar um valor que ultrapasse o limite, o evento `pasteRejected` é emitido e a colagem é cancelada.
|
|
32
|
+
* Após sair do campo (blur) ou ao submeter o formulário, se o valor ultrapassar `precision`,
|
|
33
|
+
* o campo ficará inválido com o erro `exceedsPrecision: { precision, actual }`.
|
|
32
34
|
*
|
|
33
35
|
* @default 15
|
|
34
36
|
*/
|
|
35
|
-
precision = 15;
|
|
37
|
+
precision = input(15);
|
|
36
38
|
/**
|
|
39
|
+
* @deprecated Use `minDecimalPlaces` e `maxDecimalPlaces` ao invés deste.
|
|
37
40
|
* @description Número de casas decimais exibidas e aceitas pelo campo.
|
|
41
|
+
* Quando informado, repassa o valor para `minDecimalPlaces` e `maxDecimalPlaces`.
|
|
38
42
|
*
|
|
39
43
|
* @default 0
|
|
40
44
|
*/
|
|
41
|
-
scale = 0;
|
|
45
|
+
scale = input(0);
|
|
46
|
+
/**
|
|
47
|
+
* @description Número mínimo de casas decimais exibidas.
|
|
48
|
+
*
|
|
49
|
+
* @default 0
|
|
50
|
+
*/
|
|
51
|
+
minDecimalPlaces = model(0);
|
|
52
|
+
/**
|
|
53
|
+
* @description Número máximo de casas decimais aceitas.
|
|
54
|
+
*
|
|
55
|
+
* @default 0
|
|
56
|
+
*/
|
|
57
|
+
maxDecimalPlaces = model(0);
|
|
42
58
|
/**
|
|
43
59
|
* @description Separador decimal personalizado. Quando não informado,
|
|
44
60
|
* utiliza o separador definido pelo locale ativo da aplicação.
|
|
45
61
|
*/
|
|
46
|
-
decimalSeparator;
|
|
62
|
+
decimalSeparator = model(',');
|
|
63
|
+
/**
|
|
64
|
+
* @deprecated Use `thousandSeparator` ao invés deste.
|
|
65
|
+
* @description Separador de milhar personalizado. Recomenda-se migrar para `thousandSeparator`.
|
|
66
|
+
*/
|
|
67
|
+
thousandsSeparator = input(undefined);
|
|
47
68
|
/**
|
|
48
69
|
* @description Separador de milhar personalizado. Quando não informado,
|
|
49
70
|
* utiliza o separador definido pelo locale ativo da aplicação.
|
|
50
71
|
*/
|
|
51
|
-
|
|
72
|
+
thousandSeparator = model('.');
|
|
52
73
|
/**
|
|
53
|
-
* @
|
|
54
|
-
*
|
|
55
|
-
* @default 'left'
|
|
74
|
+
* @deprecated Este input não tem mais efeito e pode ser removido.
|
|
75
|
+
* O alinhamento do campo é sempre `'right'`, conforme o comportamento padrão da máscara numérica.
|
|
56
76
|
*/
|
|
57
|
-
alignTo = '
|
|
77
|
+
alignTo = input('right');
|
|
58
78
|
/**
|
|
59
79
|
* @description Permite a entrada de valores negativos.
|
|
60
80
|
*
|
|
61
81
|
* @default true
|
|
62
82
|
*/
|
|
63
|
-
allowNegative = true;
|
|
83
|
+
allowNegative = input(true);
|
|
64
84
|
/**
|
|
65
85
|
* @description Texto de placeholder exibido quando o campo está vazio.
|
|
66
86
|
*/
|
|
67
|
-
placeholder;
|
|
87
|
+
placeholder = model(undefined);
|
|
68
88
|
maxLength;
|
|
69
89
|
/**
|
|
70
|
-
* @description Emitido quando uma
|
|
90
|
+
* @description Emitido quando uma colagem (paste) é rejeitada pela validação do campo.
|
|
71
91
|
* Emite a string colada que foi recusada.
|
|
72
92
|
*/
|
|
73
|
-
pasteRejected =
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
// super(injector);
|
|
79
|
-
// this._angularComponentsLocaleService = injector.get(LocaleService);
|
|
80
|
-
// this.onLocaleService();
|
|
81
|
-
// }
|
|
82
|
-
//TODO: Remover esse constructor
|
|
83
|
-
constructor(_elementRef, _keyValueDiffers, localeService) {
|
|
84
|
-
super({ align: '', allowNegative: true, decimal: '', precision: 0, prefix: '', suffix: '', thousands: '' }, _elementRef, _keyValueDiffers);
|
|
85
|
-
this.localeService = localeService;
|
|
86
|
-
this.onLocaleService();
|
|
93
|
+
pasteRejected = output();
|
|
94
|
+
_decimalSeparatorExplicit = false;
|
|
95
|
+
_thousandSeparatorExplicit = false;
|
|
96
|
+
constructor() {
|
|
97
|
+
super();
|
|
87
98
|
}
|
|
88
99
|
ngOnInit() {
|
|
89
|
-
this.updateVariables();
|
|
90
100
|
super.ngOnInit();
|
|
101
|
+
this.updatePlaceholder();
|
|
91
102
|
}
|
|
103
|
+
// ngOnChanges handles all signal writes reactively, avoiding the need for
|
|
104
|
+
// effect() with allowSignalWrites. The decimalSeparator/thousandSeparator inputs
|
|
105
|
+
// have truthy defaults, so ngOnChanges is necessary to distinguish "parent bound this"
|
|
106
|
+
// from "it's just the default value".
|
|
92
107
|
ngOnChanges(changes) {
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
108
|
+
if (changes['decimalSeparator'] && this.decimalSeparator()) {
|
|
109
|
+
this._decimalSeparatorExplicit = true;
|
|
110
|
+
}
|
|
111
|
+
if (changes['thousandSeparator'] && this.thousandSeparator()) {
|
|
112
|
+
this._thousandSeparatorExplicit = true;
|
|
96
113
|
}
|
|
97
|
-
|
|
114
|
+
if (changes['thousandsSeparator']) {
|
|
115
|
+
const val = this.thousandsSeparator();
|
|
116
|
+
if (val !== undefined) {
|
|
117
|
+
this._thousandSeparatorExplicit = true;
|
|
118
|
+
this.thousandSeparator.set(val);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
if (changes['scale']) {
|
|
122
|
+
this.minDecimalPlaces.set(this.scale());
|
|
123
|
+
this.maxDecimalPlaces.set(this.scale());
|
|
124
|
+
}
|
|
125
|
+
if (changes['scale'] ||
|
|
98
126
|
changes['decimalSeparator'] ||
|
|
127
|
+
changes['thousandSeparator'] ||
|
|
99
128
|
changes['thousandsSeparator'] ||
|
|
100
|
-
changes['
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
if (
|
|
104
|
-
this.
|
|
129
|
+
changes['precision']) {
|
|
130
|
+
this.calculateMaxLength();
|
|
131
|
+
}
|
|
132
|
+
if (changes['scale'] || changes['decimalSeparator']) {
|
|
133
|
+
this.updatePlaceholder();
|
|
105
134
|
}
|
|
106
135
|
}
|
|
136
|
+
/**
|
|
137
|
+
* Overrides base paste handler to add precision validation.
|
|
138
|
+
* If the pasted value exceeds `precision` digits, the paste is rejected.
|
|
139
|
+
*/
|
|
107
140
|
onPaste(event) {
|
|
108
141
|
const pastedText = event.clipboardData?.getData('text') ?? '';
|
|
142
|
+
const effectiveThousandSep = this.thousandsSeparator() ?? this.thousandSeparator();
|
|
109
143
|
const numericText = pastedText
|
|
110
|
-
.replace(new RegExp(`\\${
|
|
111
|
-
.replace(this.decimalSeparator, '.');
|
|
144
|
+
.replace(new RegExp(`\\${effectiveThousandSep}`, 'g'), '')
|
|
145
|
+
.replace(this.decimalSeparator(), '.');
|
|
112
146
|
const [intPart, decimalPart = ''] = numericText.split('.');
|
|
113
|
-
const totalDigits = intPart.replace(/\D/g, '').length + decimalPart.slice(0, this.scale).length;
|
|
114
|
-
if (totalDigits > this.precision) {
|
|
147
|
+
const totalDigits = intPart.replace(/\D/g, '').length + decimalPart.slice(0, this.scale()).length;
|
|
148
|
+
if (totalDigits > this.precision()) {
|
|
115
149
|
event.preventDefault();
|
|
116
150
|
this.pasteRejected.emit(pastedText);
|
|
151
|
+
return;
|
|
117
152
|
}
|
|
153
|
+
super.onPaste(event);
|
|
118
154
|
}
|
|
119
155
|
/**
|
|
120
|
-
*
|
|
156
|
+
* Overrides locale-derived separators with explicitly set inputs, if provided.
|
|
157
|
+
* If no explicit separator is set, the locale-derived value is used.
|
|
121
158
|
*/
|
|
122
|
-
|
|
123
|
-
this.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
159
|
+
updateSeparators() {
|
|
160
|
+
const explicitDecimal = this._decimalSeparatorExplicit ? this.decimalSeparator() : undefined;
|
|
161
|
+
const explicitThousand = this._thousandSeparatorExplicit
|
|
162
|
+
? (this.thousandsSeparator() ?? this.thousandSeparator())
|
|
163
|
+
: undefined;
|
|
164
|
+
super.updateSeparators();
|
|
165
|
+
if (explicitDecimal !== undefined) {
|
|
166
|
+
this.decimalSeparator.set(explicitDecimal);
|
|
167
|
+
}
|
|
168
|
+
if (explicitThousand !== undefined) {
|
|
169
|
+
this.thousandSeparator.set(explicitThousand);
|
|
170
|
+
}
|
|
132
171
|
this.calculateMaxLength();
|
|
172
|
+
this.updatePlaceholder();
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Overrides base validator to add precision validation.
|
|
176
|
+
* If the total number of significant digits exceeds `precision`, returns an `exceedsPrecision` error.
|
|
177
|
+
*/
|
|
178
|
+
validate(control) {
|
|
179
|
+
const baseErrors = super.validate(control);
|
|
180
|
+
if (!control.value || !this.precision()) {
|
|
181
|
+
return baseErrors ?? null;
|
|
182
|
+
}
|
|
183
|
+
const numericStr = String(control.value).replace('-', '');
|
|
184
|
+
const [intPart, decimalPart = ''] = numericStr.split('.');
|
|
185
|
+
const totalDigits = intPart.length + decimalPart.length;
|
|
186
|
+
if (totalDigits > this.precision()) {
|
|
187
|
+
return {
|
|
188
|
+
...baseErrors,
|
|
189
|
+
exceedsPrecision: {
|
|
190
|
+
precision: this.precision(),
|
|
191
|
+
actual: totalDigits,
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
return baseErrors ?? null;
|
|
133
196
|
}
|
|
134
197
|
/**
|
|
135
198
|
* Responsible to calculate the field maximum length considering the separators.
|
|
136
199
|
*/
|
|
137
200
|
calculateMaxLength() {
|
|
138
|
-
const decSepLength = this.decimalSeparator?.length ?? 0;
|
|
139
|
-
const
|
|
201
|
+
const decSepLength = this.decimalSeparator()?.length ?? 0;
|
|
202
|
+
const effectiveThousandSep = this.thousandsSeparator() ?? this.thousandSeparator();
|
|
203
|
+
const thoSepLength = effectiveThousandSep?.length ?? 0;
|
|
140
204
|
const DIGITS_GROUP_SIZE = 3;
|
|
141
|
-
let maxLength = this.precision + (this.scale ? decSepLength : 0);
|
|
142
|
-
maxLength +=
|
|
205
|
+
let maxLength = this.precision() + (this.scale() ? decSepLength : 0);
|
|
206
|
+
maxLength +=
|
|
207
|
+
Math.ceil((this.precision() - (this.scale() ? this.scale() : 0)) / DIGITS_GROUP_SIZE - 1) * thoSepLength;
|
|
143
208
|
this.maxLength = maxLength;
|
|
144
209
|
}
|
|
145
|
-
|
|
146
|
-
this.
|
|
147
|
-
|
|
148
|
-
.
|
|
149
|
-
|
|
150
|
-
this.decimalSeparator = this.decimalSeparator ?? this.localeService.getDecimalSeparator();
|
|
151
|
-
this.thousandsSeparator = this.thousandsSeparator ?? this.localeService.getGroupingSeparator();
|
|
152
|
-
});
|
|
210
|
+
updatePlaceholder() {
|
|
211
|
+
const scale = this.scale();
|
|
212
|
+
if (!this.placeholder() && scale) {
|
|
213
|
+
this.placeholder.set(`0${this.decimalSeparator()}${''.padEnd(scale, '0')}`);
|
|
214
|
+
}
|
|
153
215
|
}
|
|
154
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BignumberInputDirective, deps: [
|
|
155
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
216
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BignumberInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
217
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: BignumberInputDirective, selector: "input[sBignumberInput]", inputs: { precision: { classPropertyName: "precision", publicName: "precision", isSignal: true, isRequired: false, transformFunction: null }, scale: { classPropertyName: "scale", publicName: "scale", isSignal: true, isRequired: false, transformFunction: null }, minDecimalPlaces: { classPropertyName: "minDecimalPlaces", publicName: "minDecimalPlaces", isSignal: true, isRequired: false, transformFunction: null }, maxDecimalPlaces: { classPropertyName: "maxDecimalPlaces", publicName: "maxDecimalPlaces", isSignal: true, isRequired: false, transformFunction: null }, decimalSeparator: { classPropertyName: "decimalSeparator", publicName: "decimalSeparator", isSignal: true, isRequired: false, transformFunction: null }, thousandsSeparator: { classPropertyName: "thousandsSeparator", publicName: "thousandsSeparator", isSignal: true, isRequired: false, transformFunction: null }, thousandSeparator: { classPropertyName: "thousandSeparator", publicName: "thousandSeparator", isSignal: true, isRequired: false, transformFunction: null }, alignTo: { classPropertyName: "alignTo", publicName: "alignTo", isSignal: true, isRequired: false, transformFunction: null }, allowNegative: { classPropertyName: "allowNegative", publicName: "allowNegative", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { minDecimalPlaces: "minDecimalPlacesChange", maxDecimalPlaces: "maxDecimalPlacesChange", decimalSeparator: "decimalSeparatorChange", thousandSeparator: "thousandSeparatorChange", placeholder: "placeholderChange", pasteRejected: "pasteRejected" }, host: { properties: { "attr.placeholder": "placeholder()", "attr.maxLength": "maxLength" } }, providers: [
|
|
156
218
|
{
|
|
157
219
|
provide: NG_VALUE_ACCESSOR,
|
|
158
220
|
// NOSONAR - 'BignumberInputDirective' is deprecated.
|
|
@@ -165,6 +227,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
165
227
|
type: Directive,
|
|
166
228
|
args: [{
|
|
167
229
|
selector: 'input[sBignumberInput]',
|
|
230
|
+
host: {
|
|
231
|
+
'[attr.placeholder]': 'placeholder()',
|
|
232
|
+
'[attr.maxLength]': 'maxLength',
|
|
233
|
+
},
|
|
168
234
|
providers: [
|
|
169
235
|
{
|
|
170
236
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -174,30 +240,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
174
240
|
},
|
|
175
241
|
],
|
|
176
242
|
}]
|
|
177
|
-
}], ctorParameters: () => [
|
|
178
|
-
type: Input
|
|
179
|
-
}], scale: [{
|
|
180
|
-
type: Input
|
|
181
|
-
}], decimalSeparator: [{
|
|
182
|
-
type: Input
|
|
183
|
-
}], thousandsSeparator: [{
|
|
184
|
-
type: Input
|
|
185
|
-
}], alignTo: [{
|
|
186
|
-
type: Input
|
|
187
|
-
}], allowNegative: [{
|
|
188
|
-
type: Input
|
|
189
|
-
}], placeholder: [{
|
|
190
|
-
type: Input
|
|
191
|
-
}, {
|
|
192
|
-
type: HostBinding,
|
|
193
|
-
args: ['attr.placeholder']
|
|
194
|
-
}], maxLength: [{
|
|
195
|
-
type: HostBinding,
|
|
196
|
-
args: ['attr.maxLength']
|
|
197
|
-
}], pasteRejected: [{
|
|
198
|
-
type: Output
|
|
199
|
-
}], onPaste: [{
|
|
200
|
-
type: HostListener,
|
|
201
|
-
args: ['paste', ['$event']]
|
|
202
|
-
}] } });
|
|
203
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlnbnVtYmVyLWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9iaWdudW1iZXItaW5wdXQvc3JjL2xpYi9iaWdudW1iZXItaW5wdXQvYmlnbnVtYmVyLWlucHV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUVULFlBQVksRUFDWixVQUFVLEVBQ1YsV0FBVyxFQUNYLFlBQVksRUFDWixLQUFLLEVBSUwsTUFBTSxHQUVULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzFELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7O0FBSXZDOztHQUVHO0FBQ0gsTUFBTSxDQUFOLElBQVksd0JBR1g7QUFIRCxXQUFZLHdCQUF3QjtJQUNoQywyQ0FBZSxDQUFBO0lBQ2YseUNBQWEsQ0FBQTtBQUNqQixDQUFDLEVBSFcsd0JBQXdCLEtBQXhCLHdCQUF3QixRQUduQztBQUVEOzs7Ozs7Ozs7Ozs7R0FZRztBQVlILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxxQkFBcUI7SUFnRnpDO0lBL0VyQjs7OztPQUlHO0lBRUksU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUV0Qjs7OztPQUlHO0lBRUksS0FBSyxHQUFHLENBQUMsQ0FBQztJQUVqQjs7O09BR0c7SUFFSSxnQkFBZ0IsQ0FBVTtJQUVqQzs7O09BR0c7SUFFSSxrQkFBa0IsQ0FBVTtJQUVuQzs7OztPQUlHO0lBRUksT0FBTyxHQUFxQixNQUFNLENBQUM7SUFFMUM7Ozs7T0FJRztJQUVJLGFBQWEsR0FBRyxJQUFJLENBQUM7SUFFNUI7O09BRUc7SUFHSSxXQUFXLENBQVU7SUFHckIsU0FBUyxD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SSxJQUFJLENBQUMsYUFBYSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDMUYsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDbkcsQ0FBQyxDQUFDLENBQUM7SUFDWCxDQUFDO3dHQTFLUSx1QkFBdUI7NEZBQXZCLHVCQUF1QixtY0FUckI7WUFDUDtnQkFDSSxPQUFPLEVBQUUsaUJBQWlCO2dCQUMxQixxREFBcUQ7Z0JBQ3JELFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsdUJBQXVCLENBQUM7Z0JBQ3RELEtBQUssRUFBRSxJQUFJO2FBQ2Q7U0FDSjs7NEZBRVEsdUJBQXVCO2tCQVhuQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx3QkFBd0I7b0JBQ2xDLFNBQVMsRUFBRTt3QkFDUDs0QkFDSSxPQUFPLEVBQUUsaUJBQWlCOzRCQUMxQixxREFBcUQ7NEJBQ3JELFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLHdCQUF3QixDQUFDOzRCQUN0RCxLQUFLLEVBQUUsSUFBSTt5QkFDZDtxQkFDSjtpQkFDSjt5SUFRVSxTQUFTO3NCQURmLEtBQUs7Z0JBU0MsS0FBSztzQkFEWCxLQUFLO2dCQVFDLGdCQUFnQjtzQkFEdEIsS0FBSztnQkFRQyxrQkFBa0I7c0JBRHhCLEtBQUs7Z0JBU0MsT0FBTztzQkFEYixLQUFLO2dCQVNDLGFBQWE7c0JBRG5CLEtBQUs7Z0JBUUMsV0FBVztzQkFGakIsS0FBSzs7c0JBQ0wsV0FBVzt1QkFBQyxrQkFBa0I7Z0JBSXhCLFNBQVM7c0JBRGYsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBUXRCLGFBQWE7c0JBRG5CLE1BQU07Z0JBd0RBLE9BQU87c0JBRGIsWUFBWTt1QkFBQyxPQUFPLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBmb3J3YXJkUmVmLFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIEhvc3RMaXN0ZW5lcixcbiAgICBJbnB1dCxcbiAgICBLZXlWYWx1ZURpZmZlcnMsXG4gICAgT25DaGFuZ2VzLFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG4gICAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgQ3VycmVuY3lNYXNrRGlyZWN0aXZlIH0gZnJvbSAnbmcyLWN1cnJlbmN5LW1hc2snO1xuaW1wb3J0IHsgZmlyc3QgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBbGlnbm1lbnRPcHRpb25zIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL25nMi1jdXJyZW5jeS1tYXNrJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2xvY2FsZSc7XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgU2hvdWxkIHVzZSAnQWxpZ25tZW50T3B0aW9ucycgZnJvbSBAc2VuaW9yc2lzdGVtYXMvbmcyLWN1cnJlbmN5LW1hc2sgaW5zdGVhZFxuICovXG5leHBvcnQgZW51bSBCaWdudW1iZXJBbGlnbm1lbnRPcHRpb24ge1xuICAgIFJJR0hUID0gJ3JpZ2h0JyxcbiAgICBMRUZUID0gJ2xlZnQnLFxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFV0aWxpemUgYSBkaXJldGl2YSBgQmlnTnVtYmVySW5wdXRgIGFvIGludsOpcyBkZXN0YS5cbiAqIEBkZXNjcmlwdGlvbiBEaXJldGl2YSBkZSBtw6FzY2FyYSBwYXJhIGNhbXBvcyBkZSBlbnRyYWRhIGRlIG7Dum1lcm9zIGRlIGdyYW5kZSBwcmVjaXPDo28sXG4gKiBhZGFwdGFkYSBkbyBgQ3VycmVuY3lNYXNrRGlyZWN0aXZlYC4gUGVybWl0ZSBjb25maWd1cmFyIHByZWNpc8OjbywgZXNjYWxhLFxuICogc2VwYXJhZG9yZXMgZGVjaW1haXMgZSBkZSBtaWxoYXIgZGUgYWNvcmRvIGNvbSBvIGxvY2FsZSBkYSBhcGxpY2HDp8Ojby5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlucHV0IHNCaWdudW1iZXJJbnB1dCBbcHJlY2lzaW9uXT1cIjE1XCIgW3NjYWxlXT1cIjJcIiBbYWxsb3dOZWdhdGl2ZV09XCJmYWxzZVwiIC8+XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnaW5wdXRbc0JpZ251bWJlcklucHV0XScsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgLy8gTk9TT05BUiAtICdCaWdudW1iZXJJbnB1dERpcmVjdGl2ZScgaXMgZGVwcmVjYXRlZC5cbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEJpZ251bWJlcklucHV0RGlyZWN0aXZlKSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEJpZ251bWJlcklucHV0RGlyZWN0aXZlIGV4dGVuZHMgQ3VycmVuY3lNYXNrRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBOw7ptZXJvIHRvdGFsIGRlIGTDrWdpdG9zIHNpZ25pZmljYXRpdm9zIGFjZWl0b3MgcGVsbyBjYW1wby5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDE1XG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcHJlY2lzaW9uID0gMTU7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gTsO6bWVybyBkZSBjYXNhcyBkZWNpbWFpcyBleGliaWRhcyBlIGFjZWl0YXMgcGVsbyBjYW1wby5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzY2FsZSA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU2VwYXJhZG9yIGRlY2ltYWwgcGVyc29uYWxpemFkby4gUXVhbmRvIG7Do28gaW5mb3JtYWRvLFxuICAgICAqIHV0aWxpemEgbyBzZXBhcmFkb3IgZGVmaW5pZG8gcGVsbyBsb2NhbGUgYXRpdm8gZGEgYXBsaWNhw6fDo28uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZGVjaW1hbFNlcGFyYXRvcj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXBhcmFkb3IgZGUgbWlsaGFyIHBlcnNvbmFsaXphZG8uIFF1YW5kbyBuw6NvIGluZm9ybWFkbyxcbiAgICAgKiB1dGlsaXphIG8gc2VwYXJhZG9yIGRlZmluaWRvIHBlbG8gbG9jYWxlIGF0aXZvIGRhIGFwbGljYcOnw6NvLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHRob3VzYW5kc1NlcGFyYXRvcj86IHN0cmluZztcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBBbGluaGFtZW50byBkbyBjb250ZcO6ZG8gZG8gY2FtcG8uIEFjZWl0YSBgJ2xlZnQnYCBvdSBgJ3JpZ2h0J2AuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnbGVmdCdcbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhbGlnblRvOiAnbGVmdCcgfCAncmlnaHQnID0gJ2xlZnQnO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFBlcm1pdGUgYSBlbnRyYWRhIGRlIHZhbG9yZXMgbmVnYXRpdm9zLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgdHJ1ZVxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGFsbG93TmVnYXRpdmUgPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFRleHRvIGRlIHBsYWNlaG9sZGVyIGV4aWJpZG8gcXVhbmRvIG8gY2FtcG8gZXN0w6EgdmF6aW8uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIucGxhY2Vob2xkZXInKVxuICAgIHB1YmxpYyBwbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAgIEBIb3N0QmluZGluZygnYXR0ci5tYXhMZW5ndGgnKVxuICAgIHB1YmxpYyBtYXhMZW5ndGg/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gdW1hIGNvbMOpIChwYXN0ZSkgw6kgcmVqZWl0YWRhIHBlbGEgdmFsaWRhw6fDo28gZG8gY2FtcG8uXG4gICAgICogRW1pdGUgYSBzdHJpbmcgY29sYWRhIHF1ZSBmb2kgcmVjdXNhZGEuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIHBhc3RlUmVqZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVnZXggPSAvXFxkLztcblxuICAgIC8vVE9ETzogQWp1c3RlIG5vIG5nMi1jdXJyZW5jeS1tYXNrIHBhcmEgdXRpbGl6YXIgZXNzZSBDw7NkaWdvIChhcGxpY2FkbyBuYSB0YXJlZmE6IFNEUy0zMDUpXG4gICAgLy8gcHJpdmF0ZSByZWFkb25seSBfYW5ndWxhckNvbXBvbmVudHNMb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlO1xuXG4gICAgLy8gY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yKSB7XG4gICAgLy8gc3VwZXIoaW5qZWN0b3IpO1xuXG4gICAgLy8gdGhpcy5fYW5ndWxhckNvbXBvbmVudHNMb2NhbGVTZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KExvY2FsZVNlcnZpY2UpO1xuICAgIC8vIHRoaXMub25Mb2NhbGVTZXJ2aWNlKCk7XG4gICAgLy8gfVxuXG4gICAgLy9UT0RPOiAgUmVtb3ZlciBlc3NlIGNvbnN0cnVjdG9yXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIF9lbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICBfa2V5VmFsdWVEaWZmZXJzOiBLZXlWYWx1ZURpZmZlcnMsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbG9jYWxlU2VydmljZTogTG9jYWxlU2VydmljZSxcbiAgICApIHtcbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgICB7IGFsaWduOiAnJywgYWxsb3dOZWdhdGl2ZTogdHJ1ZSwgZGVjaW1hbDogJycsIHByZWNpc2lvbjogMCwgcHJlZml4OiAnJywgc3VmZml4OiAnJywgdGhvdXNhbmRzOiAnJyB9LFxuICAgICAgICAgICAgX2VsZW1lbnRSZWYsXG4gICAgICAgICAgICBfa2V5VmFsdWVEaWZmZXJzLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMub25Mb2NhbGVTZXJ2aWNlKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnVwZGF0ZVZhcmlhYmxlcygpO1xuXG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgY29uc3QgcGxhY2Vob2xkZXJDaGFuZ2UgPSBjaGFuZ2VzWydwbGFjZWhvbGRlciddPy5jdXJyZW50VmFsdWU7XG4gICAgICAgIGlmICghcGxhY2Vob2xkZXJDaGFuZ2UgJiYgdGhpcy5zY2FsZSkge1xuICAgICAgICAgICAgdGhpcy5wbGFjZWhvbGRlciA9IGAwJHt0aGlzLmRlY2ltYWxTZXBhcmF0b3J9JHsnJy5wYWRFbmQodGhpcy5zY2FsZSwgJzAnKX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZmlnQ2hhbmdlZCA9XG4gICAgICAgICAgICBjaGFuZ2VzWydzY2FsZSddIHx8XG4gICAgICAgICAgICBjaGFuZ2VzWydkZWNpbWFsU2VwYXJhdG9yJ10gfHxcbiAgICAgICAgICAgIGNoYW5nZXNbJ3Rob3VzYW5kc1NlcGFyYXRvciddIHx8XG4gICAgICAgICAgICBjaGFuZ2VzWydhbGlnblRvJ10gfHxcbiAgICAgICAgICAgIGNoYW5nZXNbJ3ByZWNpc2lvbiddIHx8XG4gICAgICAgICAgICBjaGFuZ2VzWydhbGxvd05lZ2F0aXZlJ107XG5cbiAgICAgICAgaWYgKGNvbmZpZ0NoYW5nZWQpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVmFyaWFibGVzKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASG9zdExpc3RlbmVyKCdwYXN0ZScsIFsnJGV2ZW50J10pXG4gICAgcHVibGljIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBhc3RlZFRleHQgPSBldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgPz8gJyc7XG4gICAgICAgIGNvbnN0IG51bWVyaWNUZXh0ID0gcGFzdGVkVGV4dFxuICAgICAgICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXCR7dGhpcy50aG91c2FuZHNTZXBhcmF0b3J9YCwgJ2cnKSwgJycpXG4gICAgICAgICAgICAucmVwbGFjZSh0aGlzLmRlY2ltYWxTZXBhcmF0b3IgYXMgc3RyaW5nLCAnLicpO1xuICAgICAgICBjb25zdCBbaW50UGFydCwgZGVjaW1hbFBhcnQgPSAnJ10gPSBudW1lcmljVGV4dC5zcGxpdCgnLicpO1xuICAgICAgICBjb25zdCB0b3RhbERpZ2l0cyA9IGludFBhcnQucmVwbGFjZSgvXFxEL2csICcnKS5sZW5ndGggKyBkZWNpbWFsUGFydC5zbGljZSgwLCB0aGlzLnNjYWxlKS5sZW5ndGg7XG5cbiAgICAgICAgaWYgKHRvdGFsRGlnaXRzID4gdGhpcy5wcmVjaXNpb24pIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnBhc3RlUmVqZWN0ZWQuZW1pdChwYXN0ZWRUZXh0KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZSB0aGUgb3B0aW9ucyB2YWx1ZXMgYWNjb3JkaW5nIHRvIHRoZSBkaXJlY3RpdmUgaW5wdXQgdmFsdWVzLlxuICAgICAqL1xuICAgIHByaXZhdGUgdXBkYXRlVmFyaWFibGVzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICBhbGlnbjogdGhpcy5hbGlnblRvLFxuICAgICAgICAgICAgZGVjaW1hbDogdGhpcy5kZWNpbWFsU2VwYXJhdG9yLFxuICAgICAgICAgICAgdGhvdXNhbmRzOiB0aGlzLnRob3VzYW5kc1NlcGFyYXRvcixcbiAgICAgICAgICAgIHByZWNpc2lvbjogdGhpcy5zY2FsZSB8fCAwLFxuICAgICAgICAgICAgcHJlZml4OiAnJyxcbiAgICAgICAgICAgIHN1ZmZpeDogJycsXG4gICAgICAgICAgICBhbGxvd05lZ2F0aXZlOiB0aGlzLmFsbG93TmVnYXRpdmUsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTWF4TGVuZ3RoKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmVzcG9uc2libGUgdG8gY2FsY3VsYXRlIHRoZSBmaWVsZCBtYXhpbXVtIGxlbmd0aCBjb25zaWRlcmluZyB0aGUgc2VwYXJhdG9ycy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNhbGN1bGF0ZU1heExlbmd0aCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZGVjU2VwTGVuZ3RoID0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yPy5sZW5ndGggPz8gMDtcbiAgICAgICAgY29uc3QgdGhvU2VwTGVuZ3RoID0gdGhpcy50aG91c2FuZHNTZXBhcmF0b3I/Lmxlbmd0aCA/PyAwO1xuXG4gICAgICAgIGNvbnN0IERJR0lUU19HUk9VUF9TSVpFID0gMztcblxuICAgICAgICBsZXQgbWF4TGVuZ3RoID0gdGhpcy5wcmVjaXNpb24gKyAodGhpcy5zY2FsZSA/IGRlY1NlcExlbmd0aCA6IDApO1xuICAgICAgICBtYXhMZW5ndGggKz0gTWF0aC5jZWlsKCh0aGlzLnByZWNpc2lvbiAtICh0aGlzLnNjYWxlID8gdGhpcy5zY2FsZSA6IDApKSAvIERJR0lUU19HUk9VUF9TSVpFIC0gMSkgKiB0aG9TZXBMZW5ndGg7XG5cbiAgICAgICAgdGhpcy5tYXhMZW5ndGggPSBtYXhMZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkxvY2FsZVNlcnZpY2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMubG9jYWxlU2VydmljZVxuICAgICAgICAgICAgLmdldExvY2FsZSgpXG4gICAgICAgICAgICAucGlwZShmaXJzdCgpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWNpbWFsU2VwYXJhdG9yID0gdGhpcy5kZWNpbWFsU2VwYXJhdG9yID8/IHRoaXMubG9jYWxlU2VydmljZS5nZXREZWNpbWFsU2VwYXJhdG9yKCk7XG4gICAgICAgICAgICAgICAgdGhpcy50aG91c2FuZHNTZXBhcmF0b3IgPSB0aGlzLnRob3VzYW5kc1NlcGFyYXRvciA/PyB0aGlzLmxvY2FsZVNlcnZpY2UuZ2V0R3JvdXBpbmdTZXBhcmF0b3IoKTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbn1cblxuIl19
|
|
243
|
+
}], ctorParameters: () => [] });
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlnbnVtYmVyLWlucHV0LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy9iaWdudW1iZXItaW5wdXQvc3JjL2xpYi9iaWdudW1iZXItaW5wdXQvYmlnbnVtYmVyLWlucHV0LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBQzlHLE9BQU8sRUFBRSxpQkFBaUIsRUFBcUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQzs7QUFFdkY7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSx3QkFHWDtBQUhELFdBQVksd0JBQXdCO0lBQ2hDLDJDQUFlLENBQUE7SUFDZix5Q0FBYSxDQUFBO0FBQ2pCLENBQUMsRUFIVyx3QkFBd0IsS0FBeEIsd0JBQXdCLFFBR25DO0FBRUQ7Ozs7Ozs7Ozs7OztHQVlHO0FBZ0JILE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxvQkFBb0I7SUFDN0Q7Ozs7Ozs7OztPQVNHO0lBQ0ksU0FBUyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUU3Qjs7Ozs7O09BTUc7SUFDSSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXhCOzs7O09BSUc7SUFDYSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFNUM7Ozs7T0FJRztJQUNhLGdCQUFnQixHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1Qzs7O09BR0c7SUFDYSxnQkFBZ0IsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFOUM7OztPQUdHO0lBQ0ksa0JBQWtCLEdBQUcsS0FBSyxDQUFxQixT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QUNyRCxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDO2dCQUN0RCxLQUFLLEVBQUUsSUFBSTthQUNkO1NBQ0o7OzRGQUVRLHVCQUF1QjtrQkFmbkMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsd0JBQXdCO29CQUNsQyxJQUFJLEVBQUU7d0JBQ0Ysb0JBQW9CLEVBQUUsZUFBZTt3QkFDckMsa0JBQWtCLEVBQUUsV0FBVztxQkFDbEM7b0JBQ0QsU0FBUyxFQUFFO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxpQkFBaUI7NEJBQzFCLHFEQUFxRDs0QkFDckQsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsd0JBQXdCLENBQUM7NEJBQ3RELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBmb3J3YXJkUmVmLCBpbnB1dCwgbW9kZWwsIE9uSW5pdCwgT25DaGFuZ2VzLCBvdXRwdXQsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTFVFX0FDQ0VTU09SLCBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE51bWVyaWNNYXNrRGlyZWN0aXZlIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9udW1lcmljLW1hc2snO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIEVzdGUgZW51bSBuw6NvIHRlbSBtYWlzIGVmZWl0by4gTyBhbGluaGFtZW50byBkbyBjYW1wbyDDqSBzZW1wcmUgYCdyaWdodCdgLlxuICovXG5leHBvcnQgZW51bSBCaWdudW1iZXJBbGlnbm1lbnRPcHRpb24ge1xuICAgIFJJR0hUID0gJ3JpZ2h0JyxcbiAgICBMRUZUID0gJ2xlZnQnLFxufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFV0aWxpemUgYSBkaXJldGl2YSBgQmlnTnVtYmVySW5wdXRgIGFvIGludsOpcyBkZXN0YS5cbiAqIEBkZXNjcmlwdGlvbiBEaXJldGl2YSBkZSBtw6FzY2FyYSBwYXJhIGNhbXBvcyBkZSBlbnRyYWRhIGRlIG7Dum1lcm9zIGRlIGdyYW5kZSBwcmVjaXPDo28sXG4gKiBhZGFwdGFkYSBkbyBgQ3VycmVuY3lNYXNrRGlyZWN0aXZlYC4gUGVybWl0ZSBjb25maWd1cmFyIHByZWNpc8OjbywgZXNjYWxhLFxuICogc2VwYXJhZG9yZXMgZGVjaW1haXMgZSBkZSBtaWxoYXIgZGUgYWNvcmRvIGNvbSBvIGxvY2FsZSBkYSBhcGxpY2HDp8Ojby5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGlucHV0IHNCaWdudW1iZXJJbnB1dCBbcHJlY2lzaW9uXT1cIjE1XCIgW3NjYWxlXT1cIjJcIiBbYWxsb3dOZWdhdGl2ZV09XCJmYWxzZVwiIC8+XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgSW5wdXRzXG4gKi9cbkBEaXJlY3RpdmUoe1xuICAgIHNlbGVjdG9yOiAnaW5wdXRbc0JpZ251bWJlcklucHV0XScsXG4gICAgaG9zdDoge1xuICAgICAgICAnW2F0dHIucGxhY2Vob2xkZXJdJzogJ3BsYWNlaG9sZGVyKCknLFxuICAgICAgICAnW2F0dHIubWF4TGVuZ3RoXSc6ICdtYXhMZW5ndGgnLFxuICAgIH0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgLy8gTk9TT05BUiAtICdCaWdudW1iZXJJbnB1dERpcmVjdGl2ZScgaXMgZGVwcmVjYXRlZC5cbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IEJpZ251bWJlcklucHV0RGlyZWN0aXZlKSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIEJpZ251bWJlcklucHV0RGlyZWN0aXZlIGV4dGVuZHMgTnVtZXJpY01hc2tEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIE7Dum1lcm8gdG90YWwgZGUgZMOtZ2l0b3Mgc2lnbmlmaWNhdGl2b3MgYWNlaXRvcyBwZWxvIGNhbXBvIChwYXJ0ZSBpbnRlaXJhICsgcGFydGUgZGVjaW1hbCkuXG4gICAgICpcbiAgICAgKiBEdXJhbnRlIGEgZGlnaXRhw6fDo28sIG8gY2FtcG8gbGltaXRhIGZpc2ljYW1lbnRlIG8gbsO6bWVybyBkZSBjYXJhY3RlcmVzIHZpYSBgbWF4TGVuZ3RoYC5cbiAgICAgKiBBbyBjb2xhciB1bSB2YWxvciBxdWUgdWx0cmFwYXNzZSBvIGxpbWl0ZSwgbyBldmVudG8gYHBhc3RlUmVqZWN0ZWRgIMOpIGVtaXRpZG8gZSBhIGNvbGFnZW0gw6kgY2FuY2VsYWRhLlxuICAgICAqIEFww7NzIHNhaXIgZG8gY2FtcG8gKGJsdXIpIG91IGFvIHN1Ym1ldGVyIG8gZm9ybXVsw6FyaW8sIHNlIG8gdmFsb3IgdWx0cmFwYXNzYXIgYHByZWNpc2lvbmAsXG4gICAgICogbyBjYW1wbyBmaWNhcsOhIGludsOhbGlkbyBjb20gbyBlcnJvIGBleGNlZWRzUHJlY2lzaW9uOiB7IHByZWNpc2lvbiwgYWN0dWFsIH1gLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMTVcbiAgICAgKi9cbiAgICBwdWJsaWMgcHJlY2lzaW9uID0gaW5wdXQoMTUpO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIGBtaW5EZWNpbWFsUGxhY2VzYCBlIGBtYXhEZWNpbWFsUGxhY2VzYCBhbyBpbnbDqXMgZGVzdGUuXG4gICAgICogQGRlc2NyaXB0aW9uIE7Dum1lcm8gZGUgY2FzYXMgZGVjaW1haXMgZXhpYmlkYXMgZSBhY2VpdGFzIHBlbG8gY2FtcG8uXG4gICAgICogUXVhbmRvIGluZm9ybWFkbywgcmVwYXNzYSBvIHZhbG9yIHBhcmEgYG1pbkRlY2ltYWxQbGFjZXNgIGUgYG1heERlY2ltYWxQbGFjZXNgLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHB1YmxpYyBzY2FsZSA9IGlucHV0KDApO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIE7Dum1lcm8gbcOtbmltbyBkZSBjYXNhcyBkZWNpbWFpcyBleGliaWRhcy5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IDBcbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbWluRGVjaW1hbFBsYWNlcyA9IG1vZGVsKDApO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIE7Dum1lcm8gbcOheGltbyBkZSBjYXNhcyBkZWNpbWFpcyBhY2VpdGFzLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgMFxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBtYXhEZWNpbWFsUGxhY2VzID0gbW9kZWwoMCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU2VwYXJhZG9yIGRlY2ltYWwgcGVyc29uYWxpemFkby4gUXVhbmRvIG7Do28gaW5mb3JtYWRvLFxuICAgICAqIHV0aWxpemEgbyBzZXBhcmFkb3IgZGVmaW5pZG8gcGVsbyBsb2NhbGUgYXRpdm8gZGEgYXBsaWNhw6fDo28uXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGRlY2ltYWxTZXBhcmF0b3IgPSBtb2RlbCgnLCcpO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgVXNlIGB0aG91c2FuZFNlcGFyYXRvcmAgYW8gaW52w6lzIGRlc3RlLlxuICAgICAqIEBkZXNjcmlwdGlvbiBTZXBhcmFkb3IgZGUgbWlsaGFyIHBlcnNvbmFsaXphZG8uIFJlY29tZW5kYS1zZSBtaWdyYXIgcGFyYSBgdGhvdXNhbmRTZXBhcmF0b3JgLlxuICAgICAqL1xuICAgIHB1YmxpYyB0aG91c2FuZHNTZXBhcmF0b3IgPSBpbnB1dDxzdHJpbmcgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gU2VwYXJhZG9yIGRlIG1pbGhhciBwZXJzb25hbGl6YWRvLiBRdWFuZG8gbsOjbyBpbmZvcm1hZG8sXG4gICAgICogdXRpbGl6YSBvIHNlcGFyYWRvciBkZWZpbmlkbyBwZWxvIGxvY2FsZSBhdGl2byBkYSBhcGxpY2HDp8Ojby5cbiAgICAgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgdGhvdXNhbmRTZXBhcmF0b3IgPSBtb2RlbCgnLicpO1xuXG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgRXN0ZSBpbnB1dCBuw6NvIHRlbSBtYWlzIGVmZWl0byBlIHBvZGUgc2VyIHJlbW92aWRvLlxuICAgICAqIE8gYWxpbmhhbWVudG8gZG8gY2FtcG8gw6kgc2VtcHJlIGAncmlnaHQnYCwgY29uZm9ybWUgbyBjb21wb3J0YW1lbnRvIHBhZHLDo28gZGEgbcOhc2NhcmEgbnVtw6lyaWNhLlxuICAgICAqL1xuICAgIHB1YmxpYyBhbGlnblRvID0gaW5wdXQ8J2xlZnQnIHwgJ3JpZ2h0Jz4oJ3JpZ2h0Jyk7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gUGVybWl0ZSBhIGVudHJhZGEgZGUgdmFsb3JlcyBuZWdhdGl2b3MuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCB0cnVlXG4gICAgICovXG4gICAgcHVibGljIG92ZXJyaWRlIGFsbG93TmVnYXRpdmUgPSBpbnB1dCh0cnVlKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUZXh0byBkZSBwbGFjZWhvbGRlciBleGliaWRvIHF1YW5kbyBvIGNhbXBvIGVzdMOhIHZhemlvLlxuICAgICAqL1xuICAgIHB1YmxpYyBwbGFjZWhvbGRlciA9IG1vZGVsPHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcblxuICAgIHB1YmxpYyBtYXhMZW5ndGg/OiBudW1iZXI7XG5cbiAgICAvKipcbiAgICAgKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gdW1hIGNvbGFnZW0gKHBhc3RlKSDDqSByZWplaXRhZGEgcGVsYSB2YWxpZGHDp8OjbyBkbyBjYW1wby5cbiAgICAgKiBFbWl0ZSBhIHN0cmluZyBjb2xhZGEgcXVlIGZvaSByZWN1c2FkYS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcGFzdGVSZWplY3RlZCA9IG91dHB1dDxzdHJpbmc+KCk7XG5cbiAgICBwcml2YXRlIF9kZWNpbWFsU2VwYXJhdG9yRXhwbGljaXQgPSBmYWxzZTtcbiAgICBwcml2YXRlIF90aG91c2FuZFNlcGFyYXRvckV4cGxpY2l0ID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMudXBkYXRlUGxhY2Vob2xkZXIoKTtcbiAgICB9XG5cbiAgICAvLyBuZ09uQ2hhbmdlcyBoYW5kbGVzIGFsbCBzaWduYWwgd3JpdGVzIHJlYWN0aXZlbHksIGF2b2lkaW5nIHRoZSBuZWVkIGZvclxuICAgIC8vIGVmZmVjdCgpIHdpdGggYWxsb3dTaWduYWxXcml0ZXMuIFRoZSBkZWNpbWFsU2VwYXJhdG9yL3Rob3VzYW5kU2VwYXJhdG9yIGlucHV0c1xuICAgIC8vIGhhdmUgdHJ1dGh5IGRlZmF1bHRzLCBzbyBuZ09uQ2hhbmdlcyBpcyBuZWNlc3NhcnkgdG8gZGlzdGluZ3Vpc2ggXCJwYXJlbnQgYm91bmQgdGhpc1wiXG4gICAgLy8gZnJvbSBcIml0J3MganVzdCB0aGUgZGVmYXVsdCB2YWx1ZVwiLlxuICAgIHB1YmxpYyBvdmVycmlkZSBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmIChjaGFuZ2VzWydkZWNpbWFsU2VwYXJhdG9yJ10gJiYgdGhpcy5kZWNpbWFsU2VwYXJhdG9yKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2RlY2ltYWxTZXBhcmF0b3JFeHBsaWNpdCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNoYW5nZXNbJ3Rob3VzYW5kU2VwYXJhdG9yJ10gJiYgdGhpcy50aG91c2FuZFNlcGFyYXRvcigpKSB7XG4gICAgICAgICAgICB0aGlzLl90aG91c2FuZFNlcGFyYXRvckV4cGxpY2l0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hhbmdlc1sndGhvdXNhbmRzU2VwYXJhdG9yJ10pIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMudGhvdXNhbmRzU2VwYXJhdG9yKCk7XG4gICAgICAgICAgICBpZiAodmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl90aG91c2FuZFNlcGFyYXRvckV4cGxpY2l0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yLnNldCh2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzWydzY2FsZSddKSB7XG4gICAgICAgICAgICB0aGlzLm1pbkRlY2ltYWxQbGFjZXMuc2V0KHRoaXMuc2NhbGUoKSk7XG4gICAgICAgICAgICB0aGlzLm1heERlY2ltYWxQbGFjZXMuc2V0KHRoaXMuc2NhbGUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgY2hhbmdlc1snc2NhbGUnXSB8fFxuICAgICAgICAgICAgY2hhbmdlc1snZGVjaW1hbFNlcGFyYXRvciddIHx8XG4gICAgICAgICAgICBjaGFuZ2VzWyd0aG91c2FuZFNlcGFyYXRvciddIHx8XG4gICAgICAgICAgICBjaGFuZ2VzWyd0aG91c2FuZHNTZXBhcmF0b3InXSB8fFxuICAgICAgICAgICAgY2hhbmdlc1sncHJlY2lzaW9uJ11cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLmNhbGN1bGF0ZU1heExlbmd0aCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGFuZ2VzWydzY2FsZSddIHx8IGNoYW5nZXNbJ2RlY2ltYWxTZXBhcmF0b3InXSkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQbGFjZWhvbGRlcigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogT3ZlcnJpZGVzIGJhc2UgcGFzdGUgaGFuZGxlciB0byBhZGQgcHJlY2lzaW9uIHZhbGlkYXRpb24uXG4gICAgICogSWYgdGhlIHBhc3RlZCB2YWx1ZSBleGNlZWRzIGBwcmVjaXNpb25gIGRpZ2l0cywgdGhlIHBhc3RlIGlzIHJlamVjdGVkLlxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSBvblBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gZXZlbnQuY2xpcGJvYXJkRGF0YT8uZ2V0RGF0YSgndGV4dCcpID8/ICcnO1xuICAgICAgICBjb25zdCBlZmZlY3RpdmVUaG91c2FuZFNlcCA9IHRoaXMudGhvdXNhbmRzU2VwYXJhdG9yKCkgPz8gdGhpcy50aG91c2FuZFNlcGFyYXRvcigpO1xuICAgICAgICBjb25zdCBudW1lcmljVGV4dCA9IHBhc3RlZFRleHRcbiAgICAgICAgICAgIC5yZXBsYWNlKG5ldyBSZWdFeHAoYFxcXFwke2VmZmVjdGl2ZVRob3VzYW5kU2VwfWAsICdnJyksICcnKVxuICAgICAgICAgICAgLnJlcGxhY2UodGhpcy5kZWNpbWFsU2VwYXJhdG9yKCksICcuJyk7XG4gICAgICAgIGNvbnN0IFtpbnRQYXJ0LCBkZWNpbWFsUGFydCA9ICcnXSA9IG51bWVyaWNUZXh0LnNwbGl0KCcuJyk7XG4gICAgICAgIGNvbnN0IHRvdGFsRGlnaXRzID0gaW50UGFydC5yZXBsYWNlKC9cXEQvZywgJycpLmxlbmd0aCArIGRlY2ltYWxQYXJ0LnNsaWNlKDAsIHRoaXMuc2NhbGUoKSkubGVuZ3RoO1xuXG4gICAgICAgIGlmICh0b3RhbERpZ2l0cyA+IHRoaXMucHJlY2lzaW9uKCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB0aGlzLnBhc3RlUmVqZWN0ZWQuZW1pdChwYXN0ZWRUZXh0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN1cGVyLm9uUGFzdGUoZXZlbnQpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE92ZXJyaWRlcyBsb2NhbGUtZGVyaXZlZCBzZXBhcmF0b3JzIHdpdGggZXhwbGljaXRseSBzZXQgaW5wdXRzLCBpZiBwcm92aWRlZC5cbiAgICAgKiBJZiBubyBleHBsaWNpdCBzZXBhcmF0b3IgaXMgc2V0LCB0aGUgbG9jYWxlLWRlcml2ZWQgdmFsdWUgaXMgdXNlZC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlU2VwYXJhdG9ycygpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZXhwbGljaXREZWNpbWFsID0gdGhpcy5fZGVjaW1hbFNlcGFyYXRvckV4cGxpY2l0ID8gdGhpcy5kZWNpbWFsU2VwYXJhdG9yKCkgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGV4cGxpY2l0VGhvdXNhbmQgPSB0aGlzLl90aG91c2FuZFNlcGFyYXRvckV4cGxpY2l0XG4gICAgICAgICAgICA/ICh0aGlzLnRob3VzYW5kc1NlcGFyYXRvcigpID8/IHRoaXMudGhvdXNhbmRTZXBhcmF0b3IoKSlcbiAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIHN1cGVyLnVwZGF0ZVNlcGFyYXRvcnMoKTtcblxuICAgICAgICBpZiAoZXhwbGljaXREZWNpbWFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVjaW1hbFNlcGFyYXRvci5zZXQoZXhwbGljaXREZWNpbWFsKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXhwbGljaXRUaG91c2FuZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnRob3VzYW5kU2VwYXJhdG9yLnNldChleHBsaWNpdFRob3VzYW5kKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlTWF4TGVuZ3RoKCk7XG4gICAgICAgIHRoaXMudXBkYXRlUGxhY2Vob2xkZXIoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPdmVycmlkZXMgYmFzZSB2YWxpZGF0b3IgdG8gYWRkIHByZWNpc2lvbiB2YWxpZGF0aW9uLlxuICAgICAqIElmIHRoZSB0b3RhbCBudW1iZXIgb2Ygc2lnbmlmaWNhbnQgZGlnaXRzIGV4Y2VlZHMgYHByZWNpc2lvbmAsIHJldHVybnMgYW4gYGV4Y2VlZHNQcmVjaXNpb25gIGVycm9yLlxuICAgICAqL1xuICAgIHB1YmxpYyBvdmVycmlkZSB2YWxpZGF0ZShjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IGJhc2VFcnJvcnMgPSBzdXBlci52YWxpZGF0ZShjb250cm9sKTtcblxuICAgICAgICBpZiAoIWNvbnRyb2wudmFsdWUgfHwgIXRoaXMucHJlY2lzaW9uKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlRXJyb3JzID8/IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW1lcmljU3RyID0gU3RyaW5nKGNvbnRyb2wudmFsdWUpLnJlcGxhY2UoJy0nLCAnJyk7XG4gICAgICAgIGNvbnN0IFtpbnRQYXJ0LCBkZWNpbWFsUGFydCA9ICcnXSA9IG51bWVyaWNTdHIuc3BsaXQoJy4nKTtcbiAgICAgICAgY29uc3QgdG90YWxEaWdpdHMgPSBpbnRQYXJ0Lmxlbmd0aCArIGRlY2ltYWxQYXJ0Lmxlbmd0aDtcblxuICAgICAgICBpZiAodG90YWxEaWdpdHMgPiB0aGlzLnByZWNpc2lvbigpKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIC4uLmJhc2VFcnJvcnMsXG4gICAgICAgICAgICAgICAgZXhjZWVkc1ByZWNpc2lvbjoge1xuICAgICAgICAgICAgICAgICAgICBwcmVjaXNpb246IHRoaXMucHJlY2lzaW9uKCksXG4gICAgICAgICAgICAgICAgICAgIGFjdHVhbDogdG90YWxEaWdpdHMsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYmFzZUVycm9ycyA/PyBudWxsO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlc3BvbnNpYmxlIHRvIGNhbGN1bGF0ZSB0aGUgZmllbGQgbWF4aW11bSBsZW5ndGggY29uc2lkZXJpbmcgdGhlIHNlcGFyYXRvcnMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBjYWxjdWxhdGVNYXhMZW5ndGgoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGRlY1NlcExlbmd0aCA9IHRoaXMuZGVjaW1hbFNlcGFyYXRvcigpPy5sZW5ndGggPz8gMDtcbiAgICAgICAgY29uc3QgZWZmZWN0aXZlVGhvdXNhbmRTZXAgPSB0aGlzLnRob3VzYW5kc1NlcGFyYXRvcigpID8/IHRoaXMudGhvdXNhbmRTZXBhcmF0b3IoKTtcbiAgICAgICAgY29uc3QgdGhvU2VwTGVuZ3RoID0gZWZmZWN0aXZlVGhvdXNhbmRTZXA/Lmxlbmd0aCA/PyAwO1xuXG4gICAgICAgIGNvbnN0IERJR0lUU19HUk9VUF9TSVpFID0gMztcblxuICAgICAgICBsZXQgbWF4TGVuZ3RoID0gdGhpcy5wcmVjaXNpb24oKSArICh0aGlzLnNjYWxlKCkgPyBkZWNTZXBMZW5ndGggOiAwKTtcbiAgICAgICAgbWF4TGVuZ3RoICs9XG4gICAgICAgICAgICBNYXRoLmNlaWwoKHRoaXMucHJlY2lzaW9uKCkgLSAodGhpcy5zY2FsZSgpID8gdGhpcy5zY2FsZSgpIDogMCkpIC8gRElHSVRTX0dST1VQX1NJWkUgLSAxKSAqIHRob1NlcExlbmd0aDtcblxuICAgICAgICB0aGlzLm1heExlbmd0aCA9IG1heExlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVBsYWNlaG9sZGVyKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBzY2FsZSA9IHRoaXMuc2NhbGUoKTtcbiAgICAgICAgaWYgKCF0aGlzLnBsYWNlaG9sZGVyKCkgJiYgc2NhbGUpIHtcbiAgICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXIuc2V0KGAwJHt0aGlzLmRlY2ltYWxTZXBhcmF0b3IoKX0keycnLnBhZEVuZChzY2FsZSwgJzAnKX1gKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuIl19
|