tuain-ng-forms-lib 17.2.21 → 17.2.22

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.
Files changed (106) hide show
  1. package/.browserslistrc +16 -0
  2. package/.yarn/cache/nanoid-npm-4.0.0-924f5c6312-7d5946df5c.zip +0 -0
  3. package/.yarn/cache/tslib-npm-2.4.1-36f0ed04db-19480d6e03.zip +0 -0
  4. package/.yarn/cache/yn-npm-5.0.0-b001dab23c-f0ec7710d3.zip +0 -0
  5. package/.yarn/install-state.gz +0 -0
  6. package/karma.conf.js +44 -0
  7. package/ng-package.json +11 -0
  8. package/package.json +2 -16
  9. package/src/lib/classes/forms/action.ts +117 -0
  10. package/src/lib/classes/forms/element.ts +26 -0
  11. package/src/lib/classes/forms/field.ts +522 -0
  12. package/src/lib/classes/forms/form.constants.ts +28 -0
  13. package/src/lib/classes/forms/form.ts +692 -0
  14. package/src/lib/classes/forms/piece-propagate.ts +47 -0
  15. package/src/lib/classes/forms/piece.ts +164 -0
  16. package/src/lib/classes/forms/section.ts +165 -0
  17. package/src/lib/classes/forms/subsection.ts +109 -0
  18. package/src/lib/classes/forms/table/action.ts +41 -0
  19. package/src/lib/classes/forms/table/column.ts +94 -0
  20. package/src/lib/classes/forms/table/row-data.ts +121 -0
  21. package/src/lib/classes/forms/table/table.ts +582 -0
  22. package/src/lib/components/elements/action.component.ts +70 -0
  23. package/src/lib/components/elements/field.component.ts +115 -0
  24. package/src/lib/components/elements/layout/element.component.ts +14 -0
  25. package/src/lib/components/elements/layout/form-error.component.ts +11 -0
  26. package/src/lib/components/elements/layout/form-header.component.ts +14 -0
  27. package/src/lib/components/elements/layout/piece.component.ts +60 -0
  28. package/src/lib/components/elements/layout/section.component.ts +52 -0
  29. package/src/lib/components/elements/layout/sub-section.component.ts +52 -0
  30. package/src/lib/components/elements/tables/table-record-action.component.ts +66 -0
  31. package/src/lib/components/elements/tables/table-record-field.component.ts +20 -0
  32. package/src/lib/components/elements/tables/table.component.ts +112 -0
  33. package/src/lib/components/forms/basic-form.ts +1464 -0
  34. package/src/lib/services/event-manager.service.ts +45 -0
  35. package/src/lib/services/file-manager.service.ts +7 -0
  36. package/src/lib/services/form-manager.service.ts +89 -0
  37. package/src/lib/services/icon-dictionary.service.ts +159 -0
  38. package/src/lib/tuain-ng-forms-lib.module.ts +40 -0
  39. package/{public-api.d.ts → src/public-api.ts} +5 -0
  40. package/src/test.ts +27 -0
  41. package/tsconfig.lib.json +15 -0
  42. package/tsconfig.lib.prod.json +10 -0
  43. package/tsconfig.spec.json +17 -0
  44. package/esm2022/lib/classes/forms/action.mjs +0 -106
  45. package/esm2022/lib/classes/forms/element.mjs +0 -25
  46. package/esm2022/lib/classes/forms/field.mjs +0 -474
  47. package/esm2022/lib/classes/forms/form.constants.mjs +0 -26
  48. package/esm2022/lib/classes/forms/form.mjs +0 -608
  49. package/esm2022/lib/classes/forms/piece-propagate.mjs +0 -39
  50. package/esm2022/lib/classes/forms/piece.mjs +0 -134
  51. package/esm2022/lib/classes/forms/section.mjs +0 -151
  52. package/esm2022/lib/classes/forms/subsection.mjs +0 -99
  53. package/esm2022/lib/classes/forms/table/action.mjs +0 -38
  54. package/esm2022/lib/classes/forms/table/column.mjs +0 -74
  55. package/esm2022/lib/classes/forms/table/row-data.mjs +0 -116
  56. package/esm2022/lib/classes/forms/table/table.mjs +0 -535
  57. package/esm2022/lib/components/elements/action.component.mjs +0 -70
  58. package/esm2022/lib/components/elements/field.component.mjs +0 -115
  59. package/esm2022/lib/components/elements/layout/element.component.mjs +0 -21
  60. package/esm2022/lib/components/elements/layout/form-error.component.mjs +0 -23
  61. package/esm2022/lib/components/elements/layout/form-header.component.mjs +0 -23
  62. package/esm2022/lib/components/elements/layout/piece.component.mjs +0 -64
  63. package/esm2022/lib/components/elements/layout/section.component.mjs +0 -56
  64. package/esm2022/lib/components/elements/layout/sub-section.component.mjs +0 -56
  65. package/esm2022/lib/components/elements/tables/table-record-action.component.mjs +0 -72
  66. package/esm2022/lib/components/elements/tables/table-record-field.component.mjs +0 -31
  67. package/esm2022/lib/components/elements/tables/table.component.mjs +0 -109
  68. package/esm2022/lib/components/forms/basic-form.mjs +0 -1399
  69. package/esm2022/lib/services/event-manager.service.mjs +0 -43
  70. package/esm2022/lib/services/file-manager.service.mjs +0 -7
  71. package/esm2022/lib/services/form-manager.service.mjs +0 -81
  72. package/esm2022/lib/tuain-ng-forms-lib.module.mjs +0 -71
  73. package/esm2022/public-api.mjs +0 -19
  74. package/esm2022/tuain-ng-forms-lib.mjs +0 -5
  75. package/fesm2022/tuain-ng-forms-lib.mjs +0 -4593
  76. package/fesm2022/tuain-ng-forms-lib.mjs.map +0 -1
  77. package/index.d.ts +0 -5
  78. package/lib/classes/forms/action.d.ts +0 -40
  79. package/lib/classes/forms/element.d.ts +0 -9
  80. package/lib/classes/forms/field.d.ts +0 -206
  81. package/lib/classes/forms/form.constants.d.ts +0 -25
  82. package/lib/classes/forms/form.d.ts +0 -232
  83. package/lib/classes/forms/piece-propagate.d.ts +0 -13
  84. package/lib/classes/forms/piece.d.ts +0 -51
  85. package/lib/classes/forms/section.d.ts +0 -43
  86. package/lib/classes/forms/subsection.d.ts +0 -42
  87. package/lib/classes/forms/table/action.d.ts +0 -16
  88. package/lib/classes/forms/table/column.d.ts +0 -33
  89. package/lib/classes/forms/table/row-data.d.ts +0 -14
  90. package/lib/classes/forms/table/table.d.ts +0 -145
  91. package/lib/components/elements/action.component.d.ts +0 -22
  92. package/lib/components/elements/field.component.d.ts +0 -47
  93. package/lib/components/elements/layout/element.component.d.ts +0 -8
  94. package/lib/components/elements/layout/form-error.component.d.ts +0 -8
  95. package/lib/components/elements/layout/form-header.component.d.ts +0 -9
  96. package/lib/components/elements/layout/piece.component.d.ts +0 -18
  97. package/lib/components/elements/layout/section.component.d.ts +0 -13
  98. package/lib/components/elements/layout/sub-section.component.d.ts +0 -13
  99. package/lib/components/elements/tables/table-record-action.component.d.ts +0 -18
  100. package/lib/components/elements/tables/table-record-field.component.d.ts +0 -12
  101. package/lib/components/elements/tables/table.component.d.ts +0 -44
  102. package/lib/components/forms/basic-form.d.ts +0 -256
  103. package/lib/services/event-manager.service.d.ts +0 -11
  104. package/lib/services/file-manager.service.d.ts +0 -6
  105. package/lib/services/form-manager.service.d.ts +0 -28
  106. package/lib/tuain-ng-forms-lib.module.d.ts +0 -20
@@ -1,474 +0,0 @@
1
- import { Subject } from 'rxjs';
2
- import yn from 'yn';
3
- import { elementTypes, NO_ERROR } from './form.constants';
4
- import { FormElement } from './element';
5
- const UNDEFINED = 'undefined';
6
- const DEFAULT_ERROR_TYPE = 'error';
7
- const DEFAULT_CAPTURE_TYPE = 'INPUT';
8
- const DEFAULT_ALIGNMENT = 'left';
9
- const STD_MAX_LENGTH = 50;
10
- const BIG_MAX_LENGTH = 500;
11
- const directChanges = [
12
- 'defaultEditable', 'defaultValue', 'alignment', 'required', 'errorCode', 'errorMessage', 'errorType',
13
- 'tooltip', 'info', 'format', 'intrinsicErrorMessage', 'outputOnly', 'captureType', 'title', 'type',
14
- 'maxLength', 'maxValue', 'minLength', 'minValue', 'validateOnServer', 'serverAction', 'visibleLabel',
15
- 'options', 'placeholder',
16
- ];
17
- const attrs = {
18
- captureType: { name: '_captureType', propagate: 'captureType' },
19
- errorCode: { name: '_errorCode', propagate: 'errorCode' },
20
- errorMessage: { name: '_errorMessage', propagate: 'errorMessage' },
21
- errorType: { name: '_errorType', propagate: 'errorType' },
22
- defaultValue: { name: '_defaultValue', propagate: 'defaultValue' },
23
- defaultEditable: { name: '_defaultEditable', propagate: 'defaultEditable' },
24
- fieldAlignment: { name: '_fieldAlignment', propagate: 'alignment' },
25
- fieldCode: { name: '_fieldCode', propagate: 'code' },
26
- fieldInfo: { name: '_fieldInfo', propagate: 'info' },
27
- fieldRequired: { name: '_fieldRequired', propagate: 'required' },
28
- fieldTitle: { name: '_fieldTitle', propagate: 'title' },
29
- fieldType: { name: '_fieldType', propagate: 'type' },
30
- fieldFormat: { name: '_fieldFormat', propagate: 'format' },
31
- fieldOptions: { name: '_fieldOptions', propagate: 'options' },
32
- focus: { name: '_focus', propagate: 'focus' },
33
- hasChanged: { name: '_hasChanged', propagate: 'hasChanged' },
34
- intrinsicErrorMessage: { name: '_intrinsicErrorMessage', propagate: null },
35
- maxLength: { name: '_maxLength', propagate: 'maxLength' },
36
- maxValue: { name: '_maxValue', propagate: 'maxValue' },
37
- minLength: { name: '_minLength', propagate: 'minLength' },
38
- minValue: { name: '_minValue', propagate: 'minValue' },
39
- onValidation: { name: '_onValidation', propagate: 'onValidation' },
40
- outputOnly: { name: '_outputOnly', propagate: 'outputOnly' },
41
- placeholder: { name: '_placeholder', propagate: 'placeholder' },
42
- tooltipText: { name: '_tooltipText', propagate: 'tooltip' },
43
- validateOnServer: { name: '_validateOnServer', propagate: 'validateOnServer' },
44
- value: { name: '_value', propagate: 'value' },
45
- visibleLabel: { name: '_visibleLabel', propagate: 'visibleLabel' },
46
- };
47
- export class FieldDescriptor extends FormElement {
48
- _customEvent = new Subject();
49
- _editionFinish = new Subject();
50
- _editionPartial = new Subject();
51
- _detailRequest = new Subject();
52
- _errorType = '';
53
- _errorCode = '';
54
- _errorMessage = '';
55
- _intrinsicErrorMessage = '';
56
- _minValue;
57
- _maxValue;
58
- _maxLength = 0;
59
- _minLength = 0;
60
- _focus = false;
61
- _onValidation = false;
62
- _validateOnServer = false;
63
- _value;
64
- _visibleLabel = false;
65
- _captureType = '';
66
- _defaultValue = '';
67
- _defaultEditable = false;
68
- _externalValue;
69
- _fieldAlignment = '';
70
- _fieldInfo = '';
71
- _fieldRequired = false;
72
- _fieldTitle = '';
73
- _fieldType = '';
74
- _fieldFormat = null;
75
- _hasChanged = false;
76
- _outputOnly = false;
77
- _tooltipText = '';
78
- _placeholder = '';
79
- _fieldCode = '';
80
- _fieldOptions = null;
81
- constructor(inputFieldReceived, formConfig) {
82
- super(inputFieldReceived, formConfig);
83
- this.propagationCustomAttributes = this._formConfig?.propagationCustomAttributes?.fields ?? [];
84
- this.elementType = elementTypes.field;
85
- const fld = (inputFieldReceived) ? inputFieldReceived : {};
86
- this.setAttr(attrs.fieldCode, fld.fieldCode);
87
- this.title = fld.fieldTitle ?? this._fieldCode;
88
- this.placeholder = fld.placeholder ?? this.title;
89
- this.type = fld.fieldTypeCode;
90
- this.captureType = fld.captureType ?? DEFAULT_CAPTURE_TYPE;
91
- const defaultValue = fld.defaultValue ?? null;
92
- if (this._fieldType === this._formConfig.fieldTypes.boolean) {
93
- this.defaultValue = defaultValue ?? false;
94
- }
95
- else {
96
- this.defaultValue = defaultValue;
97
- }
98
- const defaultTypeAlignment = (this._formConfig.tableFieldStyles[this._fieldType] != null)
99
- ? this._formConfig.tableFieldStyles[this._fieldType]['text-align'] : DEFAULT_ALIGNMENT;
100
- const fieldAlignment = (fld.alignment != null) ? fld.alignment.toLowerCase() : defaultTypeAlignment;
101
- this.alignment = fieldAlignment;
102
- this.info = fld.info || '';
103
- let fieldFormat;
104
- try {
105
- if (fld.format && typeof fld.format === 'string') {
106
- fieldFormat = new RegExp(fld.format);
107
- }
108
- else if (fld.format?.regExp) {
109
- fieldFormat = new RegExp(fld.format?.regExp);
110
- }
111
- }
112
- catch (e) {
113
- fieldFormat = null;
114
- }
115
- this.format = fieldFormat;
116
- this.validateOnServer = fld.serverAction ?? false;
117
- this.tooltip = fld.tooltip || '';
118
- this.defaultEditable = this.enabled;
119
- this.required = fld.required ?? false;
120
- this.outputOnly = fld.outputOnly ?? false;
121
- this.minLength = fld.minLength ?? 0;
122
- this.maxLength = fld.maxLength || (this._captureType === 'TEXTAREA' ? BIG_MAX_LENGTH : STD_MAX_LENGTH);
123
- this.intrinsicErrorMessage = this._formConfig?.fieldValidations?.[this._fieldType]?.message
124
- ?? this._formConfig?.fieldValidations?.DEFAULT?.message ?? '';
125
- this.setError(fld.errorCode, fld.errorMessage, fld.errorType ?? DEFAULT_ERROR_TYPE);
126
- this.setEditable(fld.editable ?? true);
127
- this.visibleLabel = fld.visibleLabel ?? true;
128
- this.setVisibility(fld.visible);
129
- this.options = fld.fieldOptions;
130
- this._setValue(fld.fieldValue ?? this._defaultValue ?? '');
131
- }
132
- get alignment() { return this._fieldAlignment; }
133
- set alignment(alignment) { this.setAttr(attrs.fieldAlignment, alignment); }
134
- get backend() { return this._validateOnServer; }
135
- get captureType() { return this._captureType; }
136
- set captureType(captureType) { this.setAttr(attrs.captureType, captureType); }
137
- get placeholder() { return this._placeholder; }
138
- set placeholder(placeholder) { this.setAttr(attrs.placeholder, placeholder); }
139
- get code() { return this._fieldCode; }
140
- get defaultValue() { return this._defaultValue; }
141
- set defaultValue(defaultValue) { this.setAttr(attrs.defaultValue, defaultValue); }
142
- get defaultEditable() { return this._defaultEditable; }
143
- set defaultEditable(editable) { this.setAttr(attrs.defaultEditable, editable); }
144
- get detailRequest() { return this._detailRequest.asObservable(); }
145
- get customEvent() { return this._customEvent.asObservable(); }
146
- get editionFinish() { return this._editionFinish.asObservable(); }
147
- get editionPartial() { return this._editionPartial.asObservable(); }
148
- get empty() {
149
- const fieldCurrentValue = this.value;
150
- if (fieldCurrentValue === undefined || fieldCurrentValue === null) {
151
- return true;
152
- }
153
- if (this._fieldType === this._formConfig.fieldTypes.array
154
- && Array.isArray(fieldCurrentValue) && fieldCurrentValue.length === 0) {
155
- return true;
156
- }
157
- ;
158
- if (this._fieldType === this._formConfig.fieldTypes.phone) {
159
- if (!Array.isArray(fieldCurrentValue)) {
160
- return true;
161
- }
162
- if (fieldCurrentValue.length !== 2 || !fieldCurrentValue[0] || !fieldCurrentValue[1]) {
163
- return true;
164
- }
165
- return false;
166
- }
167
- ;
168
- const arrayFieldTypes = this._formConfig.arrayFieldTypes ?? null;
169
- if (arrayFieldTypes && Object.keys(arrayFieldTypes).includes(this._fieldType)) {
170
- let arraySize = arrayFieldTypes[this._fieldType];
171
- arraySize = !Number.isNaN(+arraySize) ? +arraySize : 0;
172
- if (arraySize === 0) {
173
- return (Array.isArray(fieldCurrentValue) && fieldCurrentValue.length === 0);
174
- }
175
- return (Array.isArray(fieldCurrentValue) && fieldCurrentValue.length < arraySize);
176
- }
177
- ;
178
- return fieldCurrentValue === '';
179
- }
180
- get error() { return { type: this._errorType, code: this._errorCode, message: this._errorMessage }; }
181
- set error(errorObj) { this.setError(errorObj.code, errorObj.message, errorObj.type ?? DEFAULT_ERROR_TYPE); }
182
- get errorCode() { return this._errorCode; }
183
- set errorCode(code) { this.setError(code, this._errorMessage); }
184
- get errorMessage() { return this._errorMessage; }
185
- set errorMessage(msg) { this.setError(this._errorCode, msg); }
186
- get errorType() { return this._errorType; }
187
- get externalValue() { return this._externalValue; }
188
- get format() { return this._fieldFormat; }
189
- set format(format) { this.setAttr(attrs.fieldFormat, format); }
190
- get hasChanged() { return this._hasChanged; }
191
- set hasChanged(hasChanged) { this.setAttr(attrs.hasChanged, hasChanged); }
192
- get info() { return this._fieldInfo; }
193
- set info(newInfo) { this.setAttr(attrs.fieldInfo, newInfo); }
194
- set intrinsicErrorMessage(message) { this.setAttr(attrs.intrinsicErrorMessage, message); }
195
- get maxLength() { return (this._maxLength > 0) ? this._maxLength.toString() : ''; }
196
- set maxLength(requiredMaxLength) { this.setAttr(attrs.maxLength, requiredMaxLength ? +requiredMaxLength : null); }
197
- get maxValue() { return this._maxValue; }
198
- set maxValue(inputMaxValue) {
199
- let maxValue = inputMaxValue;
200
- if (this._fieldType === this._formConfig.fieldTypes.date) {
201
- maxValue = new Date(maxValue);
202
- }
203
- this.setAttr(attrs.maxValue, maxValue);
204
- }
205
- get minLength() { return this._minLength; }
206
- set minLength(requiredMinLength) {
207
- this.setAttr(attrs.minLength, requiredMinLength ? +requiredMinLength : null);
208
- }
209
- get minValue() { return this._minValue; }
210
- set minValue(inputMinValue) {
211
- let minValue = inputMinValue;
212
- if (this._fieldType === this._formConfig.fieldTypes.date) {
213
- minValue = new Date(minValue);
214
- }
215
- this.setAttr(attrs.minValue, minValue);
216
- }
217
- get name() { return this._fieldCode; }
218
- get options() {
219
- return this._fieldOptions?.map(option => {
220
- const optionCopy = { ...option };
221
- return optionCopy;
222
- }) ?? [];
223
- }
224
- set options(newOptions) {
225
- if ((!this._formConfig.captureTypesWithOptions.includes(this._captureType))
226
- || typeof newOptions === UNDEFINED || !newOptions
227
- || !Array.isArray(newOptions)) {
228
- return;
229
- }
230
- let fieldOptions = newOptions.map((option) => {
231
- if (option.text !== undefined && option.text !== null
232
- && option.value !== undefined && option.value !== null) {
233
- return { fieldOptionValue: option.text, fieldOptionId: option.value };
234
- }
235
- return option;
236
- });
237
- fieldOptions = (fieldOptions && Array.isArray(fieldOptions)
238
- && fieldOptions.length > 0) ? fieldOptions : [];
239
- this.setAttr(attrs.fieldOptions, fieldOptions);
240
- if (this._value) {
241
- if (this._fieldType === this._formConfig.fieldTypes.array && Array.isArray(this._value)) {
242
- const fieldValue = this._value?.filter(item => this._fieldOptions?.find(opt => opt.fieldOptionId === item));
243
- this.setAttr(attrs.value, fieldValue);
244
- }
245
- else {
246
- const valInOptions = this._fieldOptions?.find(item => item.fieldOptionId === this._value);
247
- if (!valInOptions) {
248
- this._setValue('');
249
- }
250
- }
251
- }
252
- if (this._fieldRequired && this._fieldOptions?.length === 1 && this._value !== this._fieldOptions?.[0].fieldOptionId) {
253
- this._setValue(this._fieldOptions?.[0].fieldOptionId);
254
- this.notifyEditionFinish();
255
- }
256
- }
257
- get optionText() { return this._fieldOptions?.find(item => item.fieldOptionId === this._value)?.fieldOptionValue ?? null; }
258
- get outputOnly() { return this._outputOnly; }
259
- set outputOnly(outputOnly) { this.setAttr(attrs.outputOnly, outputOnly); }
260
- get required() { return this._fieldRequired; }
261
- set required(required) { this.setAttr(attrs.fieldRequired, required ?? false); }
262
- get title() { return this._fieldTitle; }
263
- set title(title) { this.setAttr(attrs.fieldTitle, title?.toString() ?? ''); }
264
- get tooltip() { return this._tooltipText; }
265
- set tooltip(tooltip) { this.setAttr(attrs.tooltipText, tooltip); }
266
- get type() { return this._fieldType; }
267
- set type(fieldType) { this.setAttr(attrs.fieldType, fieldType); }
268
- get onValidation() { return this._onValidation; }
269
- get validating() { return this._onValidation; }
270
- set validating(isValidating) { this.setAttr(attrs.onValidation, isValidating); }
271
- get value() {
272
- return (this._fieldType === this._formConfig.fieldTypes.boolean
273
- || this._fieldType === this._formConfig.fieldTypes.check) ? yn(this._value) : this._value;
274
- }
275
- get validateOnServer() { return this._validateOnServer; }
276
- set validateOnServer(validateOnServer) { this.setAttr(attrs.validateOnServer, validateOnServer); }
277
- get serverAction() { return this._validateOnServer; }
278
- set serverAction(validateOnServer) { this.validateOnServer = validateOnServer; }
279
- set value(newValue) { this._setValue(newValue); }
280
- get visibleLabel() { return this._visibleLabel; }
281
- set visibleLabel(visibleLabel) { this.setAttr(attrs.visibleLabel, visibleLabel); }
282
- /**
283
- * @deprecated Use value
284
- */
285
- get fieldValue() { return this.value; }
286
- /**
287
- * @deprecated Use hasChanged
288
- */
289
- changed(hasChanged = true) { this.hasChanged = hasChanged; }
290
- clean() { this._setValue(this._defaultValue || ''); this.resetError(); }
291
- focus() { this.setAttr(attrs.focus, true); }
292
- getErrorCode() { return this.error.code; }
293
- setErrorCode(code) { this.setError(code, this._errorMessage); }
294
- getErrorMessage() { return this.error.message; }
295
- setErrorMessage(msg) { this.setError(this._errorCode, msg); }
296
- getRequired() { return this.required; }
297
- hasError() { return this._errorCode !== NO_ERROR; }
298
- hideLabel() { this.visibleLabel = false; }
299
- resetError() { (this._errorCode !== NO_ERROR) && this.setError(NO_ERROR, null); }
300
- setEditable(editable = true) { (editable) ? this.enable() : this.disable(); }
301
- setValue(newValue, widgetUpdate = true) { this._setValue(newValue, widgetUpdate); }
302
- showLabel() { this.visibleLabel = true; }
303
- /**
304
- * @deprecated Use code
305
- */
306
- get fieldCode() { return this._fieldCode; }
307
- /**
308
- * @deprecated Use title
309
- */
310
- setLabel(label) { this.title = label; }
311
- /**
312
- * @deprecated Use required
313
- */
314
- setRequired(required) { this.required = required; }
315
- /**
316
- * @deprecated Use changed
317
- */
318
- setChanged(hasChanged) { this.changed(hasChanged); }
319
- /**
320
- * @deprecated Use value
321
- */
322
- getValue() { return this.value; }
323
- /**
324
- * @deprecated Use empty
325
- */
326
- isEmpty() { return this.empty; }
327
- /**
328
- * @deprecated Use error
329
- */
330
- getError() { return this.error; }
331
- /**
332
- * @deprecated Use optionText
333
- */
334
- getOptionText() { return this.optionText; }
335
- /**
336
- * @deprecated Use options
337
- */
338
- getFieldOptions() { return this.options; }
339
- /**
340
- * @deprecated Use options
341
- */
342
- setFieldOptions(newOptions) { return this.options = newOptions; }
343
- /**
344
- * @deprecated Use intrinsicErrorMessage
345
- */
346
- setIntrinsicErrorMessage(message) { this.intrinsicErrorMessage = message; }
347
- /**
348
- * @deprecated Use maxValue
349
- */
350
- setMaxValue(inputMaxValue) { this.maxValue = inputMaxValue; }
351
- /**
352
- * @deprecated Use minValue
353
- */
354
- setMinValue(inputMinValue) { this.minValue = inputMinValue; }
355
- /**
356
- * @deprecated Use showLabel
357
- */
358
- setVisibleLabel(visibleLabel) { this.visibleLabel = visibleLabel; }
359
- notifyEditionPartial() {
360
- this.resetError();
361
- this._editionPartial.next({ code: this._fieldCode, intrinsicValidation: true });
362
- }
363
- triggerCustomEvent(eventName, eventData) {
364
- this._customEvent.next({ code: this._fieldCode, eventName, eventData });
365
- }
366
- notifyEditionFinish() {
367
- const fieldValue = this.value;
368
- this.resetError();
369
- const validationConfig = this._formConfig.fieldValidations?.[this._fieldType] ?? {};
370
- const { type, validation } = validationConfig;
371
- let message = validationConfig?.message;
372
- let intrinsicValidation = true;
373
- if (fieldValue && (validation || this._fieldFormat)) {
374
- if (type === 'regexp') {
375
- intrinsicValidation = (validation?.test(fieldValue) ?? true)
376
- && (this._fieldFormat?.test(fieldValue) ?? true);
377
- }
378
- else if (type === 'function' && typeof validation === 'function') {
379
- const { valid, message: customMessage } = validation(fieldValue, this);
380
- intrinsicValidation = valid;
381
- message = customMessage;
382
- }
383
- if (!intrinsicValidation) {
384
- this.setError('99', message ?? this._intrinsicErrorMessage);
385
- }
386
- }
387
- if (intrinsicValidation && fieldValue && this._minValue && fieldValue < this._minValue) {
388
- intrinsicValidation = false;
389
- this.setError('99', 'Campo con valor inferior al mínimo');
390
- }
391
- if (intrinsicValidation && fieldValue && this._maxValue && fieldValue > this._maxValue) {
392
- intrinsicValidation = false;
393
- this.setError('99', 'Campo con valor superior al máximo');
394
- }
395
- if (intrinsicValidation && fieldValue && typeof fieldValue === 'string'
396
- && this._minLength && fieldValue?.length < this._minLength) {
397
- intrinsicValidation = false;
398
- this.setError('99', `Longitud de ${this._fieldTitle} debe ser de al menos ${this._minLength}`);
399
- }
400
- this._editionFinish.next({ code: this._fieldCode, intrinsicValidation });
401
- }
402
- notifyEditionDetailRequest(detail) {
403
- const detailEvent = { code: this._fieldCode, detail };
404
- this._detailRequest.next(detailEvent);
405
- }
406
- setError(code, message, type = DEFAULT_ERROR_TYPE) {
407
- this.setAttr(attrs.errorCode, code ?? NO_ERROR);
408
- this.setAttr(attrs.errorType, (this._errorCode === NO_ERROR) ? '' : type);
409
- this.setAttr(attrs.errorMessage, message ?? '');
410
- }
411
- updateFromServer(fld) {
412
- const fieldKeys = Object.keys(fld);
413
- for (let index = 0; index < fieldKeys.length; index++) {
414
- const attrName = fieldKeys[index];
415
- const attrValue = fld[attrName];
416
- if (directChanges.includes(attrName)) {
417
- this[attrName] = attrValue;
418
- }
419
- else {
420
- (attrName === 'label') && (this.title = attrValue);
421
- (attrName === 'labelVisible') && (this.visibleLabel = attrValue);
422
- (attrName === 'editable') && this.setEditable(attrValue);
423
- (attrName === 'visible') && this.setVisibility(attrValue);
424
- (attrName === 'value') && (this._setValue(attrValue) && (this.hasChanged = false));
425
- (attrName === 'fieldValue') && (this._setValue(attrValue) && (this.hasChanged = false));
426
- (attrName === 'fieldOptions') && (this.options = attrValue);
427
- (attrName === 'fieldTitle') && (this.title = attrValue);
428
- (attrName === 'fieldTypeCode') && (this.type = attrValue);
429
- (attrName === 'fieldType') && (this.type = attrValue);
430
- (attrName === 'tooltipText') && (this.tooltip = attrValue);
431
- (attrName === 'customAttributes') && (this.setCustomAttributes(attrValue));
432
- }
433
- }
434
- }
435
- _setValue(newValue, widgetUpdate = true) {
436
- if (typeof newValue === UNDEFINED) {
437
- return true;
438
- }
439
- if (newValue === null && this.required) {
440
- return true;
441
- }
442
- let newFinalValue;
443
- if (this._fieldType === this._formConfig.fieldTypes.boolean
444
- || this._fieldType === this._formConfig.fieldTypes.check) {
445
- newFinalValue = yn(newValue) ?? false;
446
- }
447
- else if (this._fieldType === this._formConfig.fieldTypes.array
448
- || this._fieldType === this._formConfig.fieldTypes.map) {
449
- if (newValue === null || newValue === '') {
450
- newFinalValue = [];
451
- }
452
- else if (Array.isArray(newValue)) {
453
- newFinalValue = newValue;
454
- }
455
- else {
456
- newFinalValue = newValue.toString().split(',');
457
- }
458
- }
459
- else {
460
- newFinalValue = newValue;
461
- }
462
- if (this._value !== newFinalValue) {
463
- this._hasChanged = true;
464
- if (widgetUpdate) {
465
- this.setAttr(attrs.value, newFinalValue);
466
- }
467
- else {
468
- this._value = newFinalValue;
469
- }
470
- }
471
- return true;
472
- }
473
- }
474
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9jbGFzc2VzL2Zvcm1zL2ZpZWxkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBQ3BCLE9BQU8sRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUV4QyxNQUFNLFNBQVMsR0FBRyxXQUFXLENBQUM7QUFFOUIsTUFBTSxrQkFBa0IsR0FBRyxPQUFPLENBQUM7QUFDbkMsTUFBTSxvQkFBb0IsR0FBRyxPQUFPLENBQUM7QUFDckMsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUM7QUFFakMsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDO0FBQzFCLE1BQU0sY0FBYyxHQUFHLEdBQUcsQ0FBQztBQUUzQixNQUFNLGFBQWEsR0FBRztJQUNwQixpQkFBaUIsRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLFdBQVc7SUFDcEcsU0FBUyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsdUJBQXVCLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxPQUFPLEVBQUUsTUFBTTtJQUNsRyxXQUFXLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsa0JBQWtCLEVBQUUsY0FBYyxFQUFFLGNBQWM7SUFDcEcsU0FBUyxFQUFFLGFBQWE7Q0FDekIsQ0FBQztBQUVGLE1BQU0sS0FBSyxHQUFHO0lBQ1osV0FBVyxFQUFFLEVBQUUsSUFBSSxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFFO0lBQy9ELFNBQVMsRUFBRSxFQUFF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QUFHLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDakQsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sYUFBYSxHQUFHLFFBQVEsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLGFBQWEsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1lBQ3hCLElBQUksWUFBWSxFQUFFLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQztZQUMzQyxDQUFDO2lCQUFNLENBQUM7Z0JBQ04sSUFBSSxDQUFDLE1BQU0sR0FBRyxhQUFhLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB5biBmcm9tICd5bic7XG5pbXBvcnQgeyBlbGVtZW50VHlwZXMsIE5PX0VSUk9SIH0gZnJvbSAnLi9mb3JtLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBGb3JtRWxlbWVudCB9IGZyb20gJy4vZWxlbWVudCc7XG5cbmNvbnN0IFVOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuXG5jb25zdCBERUZBVUxUX0VSUk9SX1RZUEUgPSAnZXJyb3InO1xuY29uc3QgREVGQVVMVF9DQVBUVVJFX1RZUEUgPSAnSU5QVVQnO1xuY29uc3QgREVGQVVMVF9BTElHTk1FTlQgPSAnbGVmdCc7XG5cbmNvbnN0IFNURF9NQVhfTEVOR1RIID0gNTA7XG5jb25zdCBCSUdfTUFYX0xFTkdUSCA9IDUwMDtcblxuY29uc3QgZGlyZWN0Q2hhbmdlcyA9IFtcbiAgJ2RlZmF1bHRFZGl0YWJsZScsICdkZWZhdWx0VmFsdWUnLCAnYWxpZ25tZW50JywgJ3JlcXVpcmVkJywgJ2Vycm9yQ29kZScsICdlcnJvck1lc3NhZ2UnLCAnZXJyb3JUeXBlJyxcbiAgJ3Rvb2x0aXAnLCAnaW5mbycsICdmb3JtYXQnLCAnaW50cmluc2ljRXJyb3JNZXNzYWdlJywgJ291dHB1dE9ubHknLCAnY2FwdHVyZVR5cGUnLCAndGl0bGUnLCAndHlwZScsXG4gICdtYXhMZW5ndGgnLCAnbWF4VmFsdWUnLCAnbWluTGVuZ3RoJywgJ21pblZhbHVlJywgJ3ZhbGlkYXRlT25TZXJ2ZXInLCAnc2VydmVyQWN0aW9uJywgJ3Zpc2libGVMYWJlbCcsXG4gICdvcHRpb25zJywgJ3BsYWNlaG9sZGVyJyxcbl07XG5cbmNvbnN0IGF0dHJzID0ge1xuICBjYXB0dXJlVHlwZTogeyBuYW1lOiAnX2NhcHR1cmVUeXBlJywgcHJvcGFnYXRlOiAnY2FwdHVyZVR5cGUnIH0sXG4gIGVycm9yQ29kZTogeyBuYW1lOiAnX2Vycm9yQ29kZScsIHByb3BhZ2F0ZTogJ2Vycm9yQ29kZScgfSxcbiAgZXJyb3JNZXNzYWdlOiB7IG5hbWU6ICdfZXJyb3JNZXNzYWdlJywgcHJvcGFnYXRlOiAnZXJyb3JNZXNzYWdlJyB9LFxuICBlcnJvclR5cGU6IHsgbmFtZTogJ19lcnJvclR5cGUnLCBwcm9wYWdhdGU6ICdlcnJvclR5cGUnIH0sXG4gIGRlZmF1bHRWYWx1ZTogeyBuYW1lOiAnX2RlZmF1bHRWYWx1ZScsIHByb3BhZ2F0ZTogJ2RlZmF1bHRWYWx1ZScgfSxcbiAgZGVmYXVsdEVkaXRhYmxlOiB7IG5hbWU6ICdfZGVmYXVsdEVkaXRhYmxlJywgcHJvcGFnYXRlOiAnZGVmYXVsdEVkaXRhYmxlJyB9LFxuICBmaWVsZEFsaWdubWVudDogeyBuYW1lOiAnX2ZpZWxkQWxpZ25tZW50JywgcHJvcGFnYXRlOiAnYWxpZ25tZW50JyB9LFxuICBmaWVsZENvZGU6IHsgbmFtZTogJ19maWVsZENvZGUnLCBwcm9wYWdhdGU6ICdjb2RlJyB9LFxuICBmaWVsZEluZm86IHsgbmFtZTogJ19maWVsZEluZm8nLCBwcm9wYWdhdGU6ICdpbmZvJyB9LFxuICBmaWVsZFJlcXVpcmVkOiB7IG5hbWU6ICdfZmllbGRSZXF1aXJlZCcsIHByb3BhZ2F0ZTogJ3JlcXVpcmVkJyB9LFxuICBmaWVsZFRpdGxlOiB7IG5hbWU6ICdfZmllbGRUaXRsZScsIHByb3BhZ2F0ZTogJ3RpdGxlJyB9LFxuICBmaWVsZFR5cGU6IHsgbmFtZTogJ19maWVsZFR5cGUnLCBwcm9wYWdhdGU6ICd0eXBlJyB9LFxuICBmaWVsZEZvcm1hdDogeyBuYW1lOiAnX2ZpZWxkRm9ybWF0JywgcHJvcGFnYXRlOiAnZm9ybWF0JyB9LFxuICBmaWVsZE9wdGlvbnM6IHsgbmFtZTogJ19maWVsZE9wdGlvbnMnLCBwcm9wYWdhdGU6ICdvcHRpb25zJyB9LFxuICBmb2N1czogeyBuYW1lOiAnX2ZvY3VzJywgcHJvcGFnYXRlOiAnZm9jdXMnIH0sXG4gIGhhc0NoYW5nZWQ6IHsgbmFtZTogJ19oYXNDaGFuZ2VkJywgcHJvcGFnYXRlOiAnaGFzQ2hhbmdlZCcgfSxcbiAgaW50cmluc2ljRXJyb3JNZXNzYWdlOiB7IG5hbWU6ICdfaW50cmluc2ljRXJyb3JNZXNzYWdlJywgcHJvcGFnYXRlOiBudWxsIH0sXG4gIG1heExlbmd0aDogeyBuYW1lOiAnX21heExlbmd0aCcsIHByb3BhZ2F0ZTogJ21heExlbmd0aCcgfSxcbiAgbWF4VmFsdWU6IHsgbmFtZTogJ19tYXhWYWx1ZScsIHByb3BhZ2F0ZTogJ21heFZhbHVlJyB9LFxuICBtaW5MZW5ndGg6IHsgbmFtZTogJ19taW5MZW5ndGgnLCBwcm9wYWdhdGU6ICdtaW5MZW5ndGgnIH0sXG4gIG1pblZhbHVlOiB7IG5hbWU6ICdfbWluVmFsdWUnLCBwcm9wYWdhdGU6ICdtaW5WYWx1ZScgfSxcbiAgb25WYWxpZGF0aW9uOiB7IG5hbWU6ICdfb25WYWxpZGF0aW9uJywgcHJvcGFnYXRlOiAnb25WYWxpZGF0aW9uJyB9LFxuICBvdXRwdXRPbmx5OiB7IG5hbWU6ICdfb3V0cHV0T25seScsIHByb3BhZ2F0ZTogJ291dHB1dE9ubHknIH0sXG4gIHBsYWNlaG9sZGVyOiB7IG5hbWU6ICdfcGxhY2Vob2xkZXInLCBwcm9wYWdhdGU6ICdwbGFjZWhvbGRlcicgfSxcbiAgdG9vbHRpcFRleHQ6IHsgbmFtZTogJ190b29sdGlwVGV4dCcsIHByb3BhZ2F0ZTogJ3Rvb2x0aXAnIH0sXG4gIHZhbGlkYXRlT25TZXJ2ZXI6IHsgbmFtZTogJ192YWxpZGF0ZU9uU2VydmVyJywgcHJvcGFnYXRlOiAndmFsaWRhdGVPblNlcnZlcicgfSxcbiAgdmFsdWU6IHsgbmFtZTogJ192YWx1ZScsIHByb3BhZ2F0ZTogJ3ZhbHVlJyB9LFxuICB2aXNpYmxlTGFiZWw6IHsgbmFtZTogJ192aXNpYmxlTGFiZWwnLCBwcm9wYWdhdGU6ICd2aXNpYmxlTGFiZWwnIH0sXG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIERldGFpbEV2ZW50IHtcbiAgY29kZTogc3RyaW5nO1xuICBkZXRhaWw6IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGaWVsZE9wdGlvbiB7XG4gIGZpZWxkT3B0aW9uVmFsdWU6IHN0cmluZztcbiAgZmllbGRPcHRpb25JZDogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgRmllbGREZXNjcmlwdG9yIGV4dGVuZHMgRm9ybUVsZW1lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jdXN0b21FdmVudCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWRpdGlvbkZpbmlzaCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWRpdGlvblBhcnRpYWwgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2RldGFpbFJlcXVlc3QgPSBuZXcgU3ViamVjdDxEZXRhaWxFdmVudD4oKTtcblxuICBwcml2YXRlIF9lcnJvclR5cGU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9lcnJvckNvZGU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9lcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9pbnRyaW5zaWNFcnJvck1lc3NhZ2U6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9taW5WYWx1ZTogYW55O1xuICBwcml2YXRlIF9tYXhWYWx1ZTogYW55O1xuICBwcml2YXRlIF9tYXhMZW5ndGg6IG51bWJlciA9IDA7XG4gIHByaXZhdGUgX21pbkxlbmd0aDogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfZm9jdXM6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfb25WYWxpZGF0aW9uOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX3ZhbGlkYXRlT25TZXJ2ZXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfdmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBfdmlzaWJsZUxhYmVsOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2NhcHR1cmVUeXBlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfZGVmYXVsdFZhbHVlOiBhbnkgPSAnJztcbiAgcHJpdmF0ZSBfZGVmYXVsdEVkaXRhYmxlOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2V4dGVybmFsVmFsdWU6IGFueTtcbiAgcHJpdmF0ZSBfZmllbGRBbGlnbm1lbnQ6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9maWVsZEluZm86IGFueSA9ICcnO1xuICBwcml2YXRlIF9maWVsZFJlcXVpcmVkOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgX2ZpZWxkVGl0bGU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9maWVsZFR5cGU6IHN0cmluZyA9ICcnO1xuICBwcml2YXRlIF9maWVsZEZvcm1hdDogUmVnRXhwIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2hhc0NoYW5nZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBfb3V0cHV0T25seTogYm9vbGVhbiA9IGZhbHNlO1xuICBwcml2YXRlIF90b29sdGlwVGV4dDogc3RyaW5nID0gJyc7XG4gIHByaXZhdGUgX3BsYWNlaG9sZGVyOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfZmllbGRDb2RlOiBzdHJpbmcgPSAnJztcbiAgcHJpdmF0ZSBfZmllbGRPcHRpb25zOiBGaWVsZE9wdGlvbltdIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoaW5wdXRGaWVsZFJlY2VpdmVkLCBmb3JtQ29uZmlnKSB7XG4gICAgc3VwZXIoaW5wdXRGaWVsZFJlY2VpdmVkLCBmb3JtQ29uZmlnKTtcbiAgICB0aGlzLnByb3BhZ2F0aW9uQ3VzdG9tQXR0cmlidXRlcyA9IHRoaXMuX2Zvcm1Db25maWc/LnByb3BhZ2F0aW9uQ3VzdG9tQXR0cmlidXRlcz8uZmllbGRzID8/IFtdO1xuICAgIHRoaXMuZWxlbWVudFR5cGUgPSBlbGVtZW50VHlwZXMuZmllbGQ7XG4gICAgY29uc3QgZmxkID0gKGlucHV0RmllbGRSZWNlaXZlZCkgPyBpbnB1dEZpZWxkUmVjZWl2ZWQgOiB7fTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuZmllbGRDb2RlLCBmbGQuZmllbGRDb2RlKTtcbiAgICB0aGlzLnRpdGxlID0gZmxkLmZpZWxkVGl0bGUgPz8gdGhpcy5fZmllbGRDb2RlO1xuICAgIHRoaXMucGxhY2Vob2xkZXIgPSBmbGQucGxhY2Vob2xkZXIgPz8gdGhpcy50aXRsZTtcbiAgICB0aGlzLnR5cGUgPSBmbGQuZmllbGRUeXBlQ29kZTtcbiAgICB0aGlzLmNhcHR1cmVUeXBlID0gZmxkLmNhcHR1cmVUeXBlID8/IERFRkFVTFRfQ0FQVFVSRV9UWVBFO1xuXG4gICAgY29uc3QgZGVmYXVsdFZhbHVlID0gZmxkLmRlZmF1bHRWYWx1ZSA/PyBudWxsO1xuICAgIGlmICh0aGlzLl9maWVsZFR5cGUgPT09IHRoaXMuX2Zvcm1Db25maWcuZmllbGRUeXBlcy5ib29sZWFuKSB7XG4gICAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZSA/PyBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRUeXBlQWxpZ25tZW50ID0gKHRoaXMuX2Zvcm1Db25maWcudGFibGVGaWVsZFN0eWxlc1t0aGlzLl9maWVsZFR5cGVdICE9IG51bGwpXG4gICAgICA/IHRoaXMuX2Zvcm1Db25maWcudGFibGVGaWVsZFN0eWxlc1t0aGlzLl9maWVsZFR5cGVdWyd0ZXh0LWFsaWduJ10gOiBERUZBVUxUX0FMSUdOTUVOVDtcbiAgICBjb25zdCBmaWVsZEFsaWdubWVudCA9IChmbGQuYWxpZ25tZW50ICE9IG51bGwpID8gZmxkLmFsaWdubWVudC50b0xvd2VyQ2FzZSgpIDogZGVmYXVsdFR5cGVBbGlnbm1lbnQ7XG4gICAgdGhpcy5hbGlnbm1lbnQgPSBmaWVsZEFsaWdubWVudDtcbiAgICB0aGlzLmluZm8gPSBmbGQuaW5mbyB8fCAnJztcbiAgICBsZXQgZmllbGRGb3JtYXQ7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChmbGQuZm9ybWF0ICYmIHR5cGVvZiBmbGQuZm9ybWF0ID09PSAnc3RyaW5nJykge1xuICAgICAgICBmaWVsZEZvcm1hdCA9IG5ldyBSZWdFeHAoZmxkLmZvcm1hdCk7XG4gICAgICB9IGVsc2UgaWYgKGZsZC5mb3JtYXQ/LnJlZ0V4cCkge1xuICAgICAgICBmaWVsZEZvcm1hdCA9IG5ldyBSZWdFeHAoZmxkLmZvcm1hdD8ucmVnRXhwKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBmaWVsZEZvcm1hdCA9IG51bGw7XG4gICAgfVxuICAgIHRoaXMuZm9ybWF0ID0gZmllbGRGb3JtYXQ7XG4gICAgdGhpcy52YWxpZGF0ZU9uU2VydmVyID0gZmxkLnNlcnZlckFjdGlvbiA/PyBmYWxzZTtcbiAgICB0aGlzLnRvb2x0aXAgPSBmbGQudG9vbHRpcCB8fCAnJztcbiAgICB0aGlzLmRlZmF1bHRFZGl0YWJsZSA9IHRoaXMuZW5hYmxlZDtcbiAgICB0aGlzLnJlcXVpcmVkID0gZmxkLnJlcXVpcmVkID8/IGZhbHNlO1xuICAgIHRoaXMub3V0cHV0T25seSA9IGZsZC5vdXRwdXRPbmx5ID8/IGZhbHNlO1xuICAgIHRoaXMubWluTGVuZ3RoID0gZmxkLm1pbkxlbmd0aCA/PyAwO1xuICAgIHRoaXMubWF4TGVuZ3RoID0gZmxkLm1heExlbmd0aCB8fCAodGhpcy5fY2FwdHVyZVR5cGUgPT09ICdURVhUQVJFQScgPyBCSUdfTUFYX0xFTkdUSCA6IFNURF9NQVhfTEVOR1RIKTtcbiAgICB0aGlzLmludHJpbnNpY0Vycm9yTWVzc2FnZSA9IHRoaXMuX2Zvcm1Db25maWc/LmZpZWxkVmFsaWRhdGlvbnM/Llt0aGlzLl9maWVsZFR5cGVdPy5tZXNzYWdlXG4gICAgICA/PyB0aGlzLl9mb3JtQ29uZmlnPy5maWVsZFZhbGlkYXRpb25zPy5ERUZBVUxUPy5tZXNzYWdlID8/ICcnO1xuXG4gICAgdGhpcy5zZXRFcnJvcihmbGQuZXJyb3JDb2RlLCBmbGQuZXJyb3JNZXNzYWdlLCBmbGQuZXJyb3JUeXBlID8/IERFRkFVTFRfRVJST1JfVFlQRSk7XG4gICAgdGhpcy5zZXRFZGl0YWJsZShmbGQuZWRpdGFibGUgPz8gdHJ1ZSk7XG4gICAgdGhpcy52aXNpYmxlTGFiZWwgPSBmbGQudmlzaWJsZUxhYmVsID8/IHRydWU7XG4gICAgdGhpcy5zZXRWaXNpYmlsaXR5KGZsZC52aXNpYmxlKTtcbiAgICB0aGlzLm9wdGlvbnMgPSBmbGQuZmllbGRPcHRpb25zO1xuICAgIHRoaXMuX3NldFZhbHVlKGZsZC5maWVsZFZhbHVlID8/IHRoaXMuX2RlZmF1bHRWYWx1ZSA/PyAnJyk7XG4gIH1cblxuICBnZXQgYWxpZ25tZW50KCkgeyByZXR1cm4gdGhpcy5fZmllbGRBbGlnbm1lbnQ7IH1cbiAgc2V0IGFsaWdubWVudChhbGlnbm1lbnQpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLmZpZWxkQWxpZ25tZW50LCBhbGlnbm1lbnQpOyB9XG4gIGdldCBiYWNrZW5kKCkgeyByZXR1cm4gdGhpcy5fdmFsaWRhdGVPblNlcnZlcjsgfVxuXG4gIGdldCBjYXB0dXJlVHlwZSgpIHsgcmV0dXJuIHRoaXMuX2NhcHR1cmVUeXBlOyB9XG4gIHNldCBjYXB0dXJlVHlwZShjYXB0dXJlVHlwZSkgeyB0aGlzLnNldEF0dHIoYXR0cnMuY2FwdHVyZVR5cGUsIGNhcHR1cmVUeXBlKTsgfVxuXG4gIGdldCBwbGFjZWhvbGRlcigpIHsgcmV0dXJuIHRoaXMuX3BsYWNlaG9sZGVyOyB9XG4gIHNldCBwbGFjZWhvbGRlcihwbGFjZWhvbGRlcikgeyB0aGlzLnNldEF0dHIoYXR0cnMucGxhY2Vob2xkZXIsIHBsYWNlaG9sZGVyKTsgfVxuXG4gIGdldCBjb2RlKCkgeyByZXR1cm4gdGhpcy5fZmllbGRDb2RlOyB9XG4gIGdldCBkZWZhdWx0VmFsdWUoKSB7IHJldHVybiB0aGlzLl9kZWZhdWx0VmFsdWU7IH1cbiAgc2V0IGRlZmF1bHRWYWx1ZShkZWZhdWx0VmFsdWUpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLmRlZmF1bHRWYWx1ZSwgZGVmYXVsdFZhbHVlKTsgfVxuICBnZXQgZGVmYXVsdEVkaXRhYmxlKCkgeyByZXR1cm4gdGhpcy5fZGVmYXVsdEVkaXRhYmxlOyB9XG4gIHNldCBkZWZhdWx0RWRpdGFibGUoZWRpdGFibGUpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLmRlZmF1bHRFZGl0YWJsZSwgZWRpdGFibGUpOyB9XG4gIGdldCBkZXRhaWxSZXF1ZXN0KCkgeyByZXR1cm4gdGhpcy5fZGV0YWlsUmVxdWVzdC5hc09ic2VydmFibGUoKTsgfVxuICBnZXQgY3VzdG9tRXZlbnQoKSB7IHJldHVybiB0aGlzLl9jdXN0b21FdmVudC5hc09ic2VydmFibGUoKTsgfVxuICBnZXQgZWRpdGlvbkZpbmlzaCgpIHsgcmV0dXJuIHRoaXMuX2VkaXRpb25GaW5pc2guYXNPYnNlcnZhYmxlKCk7IH1cbiAgZ2V0IGVkaXRpb25QYXJ0aWFsKCkgeyByZXR1cm4gdGhpcy5fZWRpdGlvblBhcnRpYWwuYXNPYnNlcnZhYmxlKCk7IH1cblxuICBnZXQgZW1wdHkoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZmllbGRDdXJyZW50VmFsdWUgPSB0aGlzLnZhbHVlO1xuICAgIGlmIChmaWVsZEN1cnJlbnRWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGZpZWxkQ3VycmVudFZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2ZpZWxkVHlwZSA9PT0gdGhpcy5fZm9ybUNvbmZpZy5maWVsZFR5cGVzLmFycmF5XG4gICAgICAmJiBBcnJheS5pc0FycmF5KGZpZWxkQ3VycmVudFZhbHVlKSAmJiBmaWVsZEN1cnJlbnRWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgaWYgKHRoaXMuX2ZpZWxkVHlwZSA9PT0gdGhpcy5fZm9ybUNvbmZpZy5maWVsZFR5cGVzLnBob25lKSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZmllbGRDdXJyZW50VmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGZpZWxkQ3VycmVudFZhbHVlLmxlbmd0aCAhPT0gMiB8fCAhZmllbGRDdXJyZW50VmFsdWVbMF0gfHwgIWZpZWxkQ3VycmVudFZhbHVlWzFdKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgYXJyYXlGaWVsZFR5cGVzID0gdGhpcy5fZm9ybUNvbmZpZy5hcnJheUZpZWxkVHlwZXMgPz8gbnVsbDtcbiAgICBpZiAoYXJyYXlGaWVsZFR5cGVzICYmIE9iamVjdC5rZXlzKGFycmF5RmllbGRUeXBlcykuaW5jbHVkZXModGhpcy5fZmllbGRUeXBlKSkge1xuICAgICAgbGV0IGFycmF5U2l6ZSA9IGFycmF5RmllbGRUeXBlc1t0aGlzLl9maWVsZFR5cGVdO1xuICAgICAgYXJyYXlTaXplID0gIU51bWJlci5pc05hTigrYXJyYXlTaXplKSA/ICthcnJheVNpemUgOiAwO1xuICAgICAgaWYgKGFycmF5U2l6ZSA9PT0gMCkge1xuICAgICAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkoZmllbGRDdXJyZW50VmFsdWUpICYmIGZpZWxkQ3VycmVudFZhbHVlLmxlbmd0aCA9PT0gMCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gKEFycmF5LmlzQXJyYXkoZmllbGRDdXJyZW50VmFsdWUpICYmIGZpZWxkQ3VycmVudFZhbHVlLmxlbmd0aCA8IGFycmF5U2l6ZSk7XG4gICAgfTtcbiAgICByZXR1cm4gZmllbGRDdXJyZW50VmFsdWUgPT09ICcnO1xuICB9XG5cbiAgZ2V0IGVycm9yKCkgeyByZXR1cm4geyB0eXBlOiB0aGlzLl9lcnJvclR5cGUsIGNvZGU6IHRoaXMuX2Vycm9yQ29kZSwgbWVzc2FnZTogdGhpcy5fZXJyb3JNZXNzYWdlIH07IH1cbiAgc2V0IGVycm9yKGVycm9yT2JqKSB7IHRoaXMuc2V0RXJyb3IoZXJyb3JPYmouY29kZSwgZXJyb3JPYmoubWVzc2FnZSwgZXJyb3JPYmoudHlwZSA/PyBERUZBVUxUX0VSUk9SX1RZUEUpIH1cbiAgZ2V0IGVycm9yQ29kZSgpIHsgcmV0dXJuIHRoaXMuX2Vycm9yQ29kZTsgfVxuICBzZXQgZXJyb3JDb2RlKGNvZGUpIHsgdGhpcy5zZXRFcnJvcihjb2RlLCB0aGlzLl9lcnJvck1lc3NhZ2UpOyB9XG4gIGdldCBlcnJvck1lc3NhZ2UoKSB7IHJldHVybiB0aGlzLl9lcnJvck1lc3NhZ2U7IH1cbiAgc2V0IGVycm9yTWVzc2FnZShtc2cpIHsgdGhpcy5zZXRFcnJvcih0aGlzLl9lcnJvckNvZGUsIG1zZyk7IH1cbiAgZ2V0IGVycm9yVHlwZSgpIHsgcmV0dXJuIHRoaXMuX2Vycm9yVHlwZTsgfVxuICBnZXQgZXh0ZXJuYWxWYWx1ZSgpIHsgcmV0dXJuIHRoaXMuX2V4dGVybmFsVmFsdWU7IH1cbiAgZ2V0IGZvcm1hdCgpIHsgcmV0dXJuIHRoaXMuX2ZpZWxkRm9ybWF0OyB9XG4gIHNldCBmb3JtYXQoZm9ybWF0KSB7IHRoaXMuc2V0QXR0cihhdHRycy5maWVsZEZvcm1hdCwgZm9ybWF0KTsgfVxuICBnZXQgaGFzQ2hhbmdlZCgpIHsgcmV0dXJuIHRoaXMuX2hhc0NoYW5nZWQ7IH1cbiAgc2V0IGhhc0NoYW5nZWQoaGFzQ2hhbmdlZCkgeyB0aGlzLnNldEF0dHIoYXR0cnMuaGFzQ2hhbmdlZCwgaGFzQ2hhbmdlZCk7IH1cblxuICBnZXQgaW5mbygpIHsgcmV0dXJuIHRoaXMuX2ZpZWxkSW5mbzsgfVxuICBzZXQgaW5mbyhuZXdJbmZvOiBzdHJpbmcpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLmZpZWxkSW5mbywgbmV3SW5mbyk7IH1cbiAgc2V0IGludHJpbnNpY0Vycm9yTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLmludHJpbnNpY0Vycm9yTWVzc2FnZSwgbWVzc2FnZSk7IH1cbiAgZ2V0IG1heExlbmd0aCgpIHsgcmV0dXJuICh0aGlzLl9tYXhMZW5ndGggPiAwKSA/IHRoaXMuX21heExlbmd0aC50b1N0cmluZygpIDogJyc7IH1cbiAgc2V0IG1heExlbmd0aChyZXF1aXJlZE1heExlbmd0aDogYW55KSB7IHRoaXMuc2V0QXR0cihhdHRycy5tYXhMZW5ndGgsIHJlcXVpcmVkTWF4TGVuZ3RoID8gK3JlcXVpcmVkTWF4TGVuZ3RoIDogbnVsbCk7IH1cbiAgZ2V0IG1heFZhbHVlKCkgeyByZXR1cm4gdGhpcy5fbWF4VmFsdWU7IH1cblxuICBzZXQgbWF4VmFsdWUoaW5wdXRNYXhWYWx1ZSkge1xuICAgIGxldCBtYXhWYWx1ZSA9IGlucHV0TWF4VmFsdWU7XG4gICAgaWYgKHRoaXMuX2ZpZWxkVHlwZSA9PT0gdGhpcy5fZm9ybUNvbmZpZy5maWVsZFR5cGVzLmRhdGUpIHtcbiAgICAgIG1heFZhbHVlID0gbmV3IERhdGUobWF4VmFsdWUpO1xuICAgIH1cbiAgICB0aGlzLnNldEF0dHIoYXR0cnMubWF4VmFsdWUsIG1heFZhbHVlKTtcbiAgfVxuXG4gIGdldCBtaW5MZW5ndGgoKSB7IHJldHVybiB0aGlzLl9taW5MZW5ndGg7IH1cbiAgc2V0IG1pbkxlbmd0aChyZXF1aXJlZE1pbkxlbmd0aDogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRBdHRyKGF0dHJzLm1pbkxlbmd0aCwgcmVxdWlyZWRNaW5MZW5ndGggPyArcmVxdWlyZWRNaW5MZW5ndGggOiBudWxsKTtcbiAgfVxuICBnZXQgbWluVmFsdWUoKSB7IHJldHVybiB0aGlzLl9taW5WYWx1ZTsgfVxuXG4gIHNldCBtaW5WYWx1ZShpbnB1dE1pblZhbHVlKSB7XG4gICAgbGV0IG1pblZhbHVlID0gaW5wdXRNaW5WYWx1ZTtcbiAgICBpZiAodGhpcy5fZmllbGRUeXBlID09PSB0aGlzLl9mb3JtQ29uZmlnLmZpZWxkVHlwZXMuZGF0ZSkge1xuICAgICAgbWluVmFsdWUgPSBuZXcgRGF0ZShtaW5WYWx1ZSk7XG4gICAgfVxuICAgIHRoaXMuc2V0QXR0cihhdHRycy5taW5WYWx1ZSwgbWluVmFsdWUpO1xuICB9XG5cbiAgZ2V0IG5hbWUoKSB7IHJldHVybiB0aGlzLl9maWVsZENvZGU7IH1cblxuICBnZXQgb3B0aW9ucygpOiBGaWVsZE9wdGlvbltdIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2ZpZWxkT3B0aW9ucz8ubWFwKG9wdGlvbiA9PiB7XG4gICAgICBjb25zdCBvcHRpb25Db3B5OiBGaWVsZE9wdGlvbiA9IHsgLi4ub3B0aW9uIH07XG4gICAgICByZXR1cm4gb3B0aW9uQ29weTtcbiAgICB9KSA/PyBbXTtcbiAgfVxuXG4gIHNldCBvcHRpb25zKG5ld09wdGlvbnMpIHtcbiAgICBpZiAoKCF0aGlzLl9mb3JtQ29uZmlnLmNhcHR1cmVUeXBlc1dpdGhPcHRpb25zLmluY2x1ZGVzKHRoaXMuX2NhcHR1cmVUeXBlKSlcbiAgICAgIHx8IHR5cGVvZiBuZXdPcHRpb25zID09PSBVTkRFRklORUQgfHwgIW5ld09wdGlvbnNcbiAgICAgIHx8ICFBcnJheS5pc0FycmF5KG5ld09wdGlvbnMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBmaWVsZE9wdGlvbnMgPSBuZXdPcHRpb25zLm1hcCgob3B0aW9uOiBhbnkpID0+IHtcbiAgICAgIGlmIChvcHRpb24udGV4dCAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbi50ZXh0ICE9PSBudWxsXG4gICAgICAgICYmIG9wdGlvbi52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbi52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4geyBmaWVsZE9wdGlvblZhbHVlOiBvcHRpb24udGV4dCwgZmllbGRPcHRpb25JZDogb3B0aW9uLnZhbHVlIH07XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uO1xuICAgIH0pO1xuICAgIGZpZWxkT3B0aW9ucyA9IChmaWVsZE9wdGlvbnMgJiYgQXJyYXkuaXNBcnJheShmaWVsZE9wdGlvbnMpXG4gICAgICAmJiBmaWVsZE9wdGlvbnMubGVuZ3RoID4gMCkgPyBmaWVsZE9wdGlvbnMgOiBbXTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuZmllbGRPcHRpb25zLCBmaWVsZE9wdGlvbnMpO1xuICAgIGlmICh0aGlzLl92YWx1ZSkge1xuICAgICAgaWYgKHRoaXMuX2ZpZWxkVHlwZSA9PT0gdGhpcy5fZm9ybUNvbmZpZy5maWVsZFR5cGVzLmFycmF5ICYmIEFycmF5LmlzQXJyYXkodGhpcy5fdmFsdWUpKSB7XG4gICAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLl92YWx1ZT8uZmlsdGVyKGl0ZW0gPT5cbiAgICAgICAgICB0aGlzLl9maWVsZE9wdGlvbnM/LmZpbmQob3B0ID0+IG9wdC5maWVsZE9wdGlvbklkID09PSBpdGVtKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnNldEF0dHIoYXR0cnMudmFsdWUsIGZpZWxkVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgdmFsSW5PcHRpb25zID0gdGhpcy5fZmllbGRPcHRpb25zPy5maW5kKGl0ZW0gPT4gaXRlbS5maWVsZE9wdGlvbklkID09PSB0aGlzLl92YWx1ZSk7XG4gICAgICAgIGlmICghdmFsSW5PcHRpb25zKSB7XG4gICAgICAgICAgdGhpcy5fc2V0VmFsdWUoJycpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9maWVsZFJlcXVpcmVkICYmIHRoaXMuX2ZpZWxkT3B0aW9ucz8ubGVuZ3RoID09PSAxICYmIHRoaXMuX3ZhbHVlICE9PSB0aGlzLl9maWVsZE9wdGlvbnM/LlswXS5maWVsZE9wdGlvbklkKSB7XG4gICAgICB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9maWVsZE9wdGlvbnM/LlswXS5maWVsZE9wdGlvbklkKTtcbiAgICAgIHRoaXMubm90aWZ5RWRpdGlvbkZpbmlzaCgpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBvcHRpb25UZXh0KCkgeyByZXR1cm4gdGhpcy5fZmllbGRPcHRpb25zPy5maW5kKGl0ZW0gPT4gaXRlbS5maWVsZE9wdGlvbklkID09PSB0aGlzLl92YWx1ZSk/LmZpZWxkT3B0aW9uVmFsdWUgPz8gbnVsbDsgfVxuICBnZXQgb3V0cHV0T25seSgpIHsgcmV0dXJuIHRoaXMuX291dHB1dE9ubHk7IH1cbiAgc2V0IG91dHB1dE9ubHkob3V0cHV0T25seSkgeyB0aGlzLnNldEF0dHIoYXR0cnMub3V0cHV0T25seSwgb3V0cHV0T25seSk7IH1cbiAgZ2V0IHJlcXVpcmVkKCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5fZmllbGRSZXF1aXJlZDsgfVxuICBzZXQgcmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHsgdGhpcy5zZXRBdHRyKGF0dHJzLmZpZWxkUmVxdWlyZWQsIHJlcXVpcmVkID8/IGZhbHNlKTsgfVxuICBnZXQgdGl0bGUoKSB7IHJldHVybiB0aGlzLl9maWVsZFRpdGxlOyB9XG4gIHNldCB0aXRsZSh0aXRsZSkgeyB0aGlzLnNldEF0dHIoYXR0cnMuZmllbGRUaXRsZSwgdGl0bGU/LnRvU3RyaW5nKCkgPz8gJycpOyB9XG4gIGdldCB0b29sdGlwKCkgeyByZXR1cm4gdGhpcy5fdG9vbHRpcFRleHQ7IH1cbiAgc2V0IHRvb2x0aXAodG9vbHRpcCkgeyB0aGlzLnNldEF0dHIoYXR0cnMudG9vbHRpcFRleHQsIHRvb2x0aXApOyB9XG4gIGdldCB0eXBlKCkgeyByZXR1cm4gdGhpcy5fZmllbGRUeXBlOyB9XG4gIHNldCB0eXBlKGZpZWxkVHlwZSkgeyB0aGlzLnNldEF0dHIoYXR0cnMuZmllbGRUeXBlLCBmaWVsZFR5cGUpOyB9XG4gIGdldCBvblZhbGlkYXRpb24oKSB7IHJldHVybiB0aGlzLl9vblZhbGlkYXRpb247IH1cbiAgZ2V0IHZhbGlkYXRpbmcoKSB7IHJldHVybiB0aGlzLl9vblZhbGlkYXRpb247IH1cbiAgc2V0IHZhbGlkYXRpbmcoaXNWYWxpZGF0aW5nOiBib29sZWFuKSB7IHRoaXMuc2V0QXR0cihhdHRycy5vblZhbGlkYXRpb24sIGlzVmFsaWRhdGluZyk7IH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiAodGhpcy5fZmllbGRUeXBlID09PSB0aGlzLl9mb3JtQ29uZmlnLmZpZWxkVHlwZXMuYm9vbGVhblxuICAgICAgfHwgdGhpcy5fZmllbGRUeXBlID09PSB0aGlzLl9mb3JtQ29uZmlnLmZpZWxkVHlwZXMuY2hlY2spID8geW4odGhpcy5fdmFsdWUpIDogdGhpcy5fdmFsdWU7XG4gIH1cbiAgZ2V0IHZhbGlkYXRlT25TZXJ2ZXIoKSB7IHJldHVybiB0aGlzLl92YWxpZGF0ZU9uU2VydmVyOyB9XG4gIHNldCB2YWxpZGF0ZU9uU2VydmVyKHZhbGlkYXRlT25TZXJ2ZXIpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLnZhbGlkYXRlT25TZXJ2ZXIsIHZhbGlkYXRlT25TZXJ2ZXIpOyB9XG4gIGdldCBzZXJ2ZXJBY3Rpb24oKSB7IHJldHVybiB0aGlzLl92YWxpZGF0ZU9uU2VydmVyOyB9XG4gIHNldCBzZXJ2ZXJBY3Rpb24odmFsaWRhdGVPblNlcnZlcjogYm9vbGVhbikgeyB0aGlzLnZhbGlkYXRlT25TZXJ2ZXIgPSB2YWxpZGF0ZU9uU2VydmVyOyB9XG5cbiAgc2V0IHZhbHVlKG5ld1ZhbHVlKSB7IHRoaXMuX3NldFZhbHVlKG5ld1ZhbHVlKTsgfVxuICBnZXQgdmlzaWJsZUxhYmVsKCkgeyByZXR1cm4gdGhpcy5fdmlzaWJsZUxhYmVsOyB9XG4gIHNldCB2aXNpYmxlTGFiZWwodmlzaWJsZUxhYmVsOiBib29sZWFuKSB7IHRoaXMuc2V0QXR0cihhdHRycy52aXNpYmxlTGFiZWwsIHZpc2libGVMYWJlbCk7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHZhbHVlXG4gICAqL1xuICBnZXQgZmllbGRWYWx1ZSgpIHsgcmV0dXJuIHRoaXMudmFsdWU7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGhhc0NoYW5nZWRcbiAgICovXG4gIGNoYW5nZWQoaGFzQ2hhbmdlZCA9IHRydWUpIHsgdGhpcy5oYXNDaGFuZ2VkID0gaGFzQ2hhbmdlZDsgfVxuXG4gIGNsZWFuKCkgeyB0aGlzLl9zZXRWYWx1ZSh0aGlzLl9kZWZhdWx0VmFsdWUgfHwgJycpOyB0aGlzLnJlc2V0RXJyb3IoKTsgfVxuICBmb2N1cygpIHsgdGhpcy5zZXRBdHRyKGF0dHJzLmZvY3VzLCB0cnVlKTsgfVxuICBnZXRFcnJvckNvZGUoKSB7IHJldHVybiB0aGlzLmVycm9yLmNvZGU7IH1cbiAgc2V0RXJyb3JDb2RlKGNvZGUpIHsgdGhpcy5zZXRFcnJvcihjb2RlLCB0aGlzLl9lcnJvck1lc3NhZ2UpOyB9XG4gIGdldEVycm9yTWVzc2FnZSgpIHsgcmV0dXJuIHRoaXMuZXJyb3IubWVzc2FnZTsgfVxuICBzZXRFcnJvck1lc3NhZ2UobXNnKSB7IHRoaXMuc2V0RXJyb3IodGhpcy5fZXJyb3JDb2RlLCBtc2cpOyB9XG4gIGdldFJlcXVpcmVkKCkgeyByZXR1cm4gdGhpcy5yZXF1aXJlZDsgfVxuICBoYXNFcnJvcigpIHsgcmV0dXJuIHRoaXMuX2Vycm9yQ29kZSAhPT0gTk9fRVJST1I7IH1cbiAgaGlkZUxhYmVsKCkgeyB0aGlzLnZpc2libGVMYWJlbCA9IGZhbHNlOyB9XG4gIHJlc2V0RXJyb3IoKSB7ICh0aGlzLl9lcnJvckNvZGUgIT09IE5PX0VSUk9SKSAmJiB0aGlzLnNldEVycm9yKE5PX0VSUk9SLCBudWxsKTsgfVxuICBzZXRFZGl0YWJsZShlZGl0YWJsZTogYm9vbGVhbiA9IHRydWUpIHsgKGVkaXRhYmxlKSA/IHRoaXMuZW5hYmxlKCkgOiB0aGlzLmRpc2FibGUoKTsgfVxuICBzZXRWYWx1ZShuZXdWYWx1ZSwgd2lkZ2V0VXBkYXRlID0gdHJ1ZSkgeyB0aGlzLl9zZXRWYWx1ZShuZXdWYWx1ZSwgd2lkZ2V0VXBkYXRlKTsgfVxuICBzaG93TGFiZWwoKSB7IHRoaXMudmlzaWJsZUxhYmVsID0gdHJ1ZTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgY29kZVxuICAgKi9cbiAgZ2V0IGZpZWxkQ29kZSgpIHsgcmV0dXJuIHRoaXMuX2ZpZWxkQ29kZTsgfVxuXG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSB0aXRsZVxuICAgKi9cbiAgc2V0TGFiZWwobGFiZWwpIHsgdGhpcy50aXRsZSA9IGxhYmVsOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSByZXF1aXJlZFxuICAgKi9cbiAgc2V0UmVxdWlyZWQocmVxdWlyZWQ6IGJvb2xlYW4pIHsgdGhpcy5yZXF1aXJlZCA9IHJlcXVpcmVkOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBjaGFuZ2VkXG4gICAqL1xuICBzZXRDaGFuZ2VkKGhhc0NoYW5nZWQ6IGJvb2xlYW4pIHsgdGhpcy5jaGFuZ2VkKGhhc0NoYW5nZWQpOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSB2YWx1ZVxuICAgKi9cbiAgZ2V0VmFsdWUoKTogYW55IHsgcmV0dXJuIHRoaXMudmFsdWU7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGVtcHR5XG4gICAqL1xuICBpc0VtcHR5KCk6IGJvb2xlYW4geyByZXR1cm4gdGhpcy5lbXB0eSB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBlcnJvclxuICAgKi9cbiAgZ2V0RXJyb3IoKSB7IHJldHVybiB0aGlzLmVycm9yOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvcHRpb25UZXh0XG4gICAqL1xuICBnZXRPcHRpb25UZXh0KCkgeyByZXR1cm4gdGhpcy5vcHRpb25UZXh0OyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBvcHRpb25zXG4gICAqL1xuICBnZXRGaWVsZE9wdGlvbnMoKSB7IHJldHVybiB0aGlzLm9wdGlvbnM7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIG9wdGlvbnNcbiAgICovXG4gIHNldEZpZWxkT3B0aW9ucyhuZXdPcHRpb25zKSB7IHJldHVybiB0aGlzLm9wdGlvbnMgPSBuZXdPcHRpb25zOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBpbnRyaW5zaWNFcnJvck1lc3NhZ2VcbiAgICovXG4gIHNldEludHJpbnNpY0Vycm9yTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcpIHsgdGhpcy5pbnRyaW5zaWNFcnJvck1lc3NhZ2UgPSBtZXNzYWdlOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIFVzZSBtYXhWYWx1ZVxuICAgKi9cbiAgc2V0TWF4VmFsdWUoaW5wdXRNYXhWYWx1ZSkgeyB0aGlzLm1heFZhbHVlID0gaW5wdXRNYXhWYWx1ZTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgbWluVmFsdWVcbiAgICovXG4gIHNldE1pblZhbHVlKGlucHV0TWluVmFsdWUpIHsgdGhpcy5taW5WYWx1ZSA9IGlucHV0TWluVmFsdWU7IH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIHNob3dMYWJlbFxuICAgKi9cbiAgc2V0VmlzaWJsZUxhYmVsKHZpc2libGVMYWJlbDogYm9vbGVhbikgeyB0aGlzLnZpc2libGVMYWJlbCA9IHZpc2libGVMYWJlbDsgfVxuXG5cbiAgbm90aWZ5RWRpdGlvblBhcnRpYWwoKSB7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgdGhpcy5fZWRpdGlvblBhcnRpYWwubmV4dCh7IGNvZGU6IHRoaXMuX2ZpZWxkQ29kZSwgaW50cmluc2ljVmFsaWRhdGlvbjogdHJ1ZSB9KTtcbiAgfVxuXG4gIHRyaWdnZXJDdXN0b21FdmVudChldmVudE5hbWUsIGV2ZW50RGF0YSkge1xuICAgIHRoaXMuX2N1c3RvbUV2ZW50Lm5leHQoeyBjb2RlOiB0aGlzLl9maWVsZENvZGUsIGV2ZW50TmFtZSwgZXZlbnREYXRhIH0pO1xuICB9XG5cbiAgbm90aWZ5RWRpdGlvbkZpbmlzaCgpIHtcbiAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uQ29uZmlnID0gdGhpcy5fZm9ybUNvbmZpZy5maWVsZFZhbGlkYXRpb25zPy5bdGhpcy5fZmllbGRUeXBlXSA/PyB7fTtcbiAgICBjb25zdCB7IHR5cGUsIHZhbGlkYXRpb24gfSA9IHZhbGlkYXRpb25Db25maWc7XG4gICAgbGV0IG1lc3NhZ2UgPSB2YWxpZGF0aW9uQ29uZmlnPy5tZXNzYWdlO1xuICAgIGxldCBpbnRyaW5zaWNWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICBpZiAoZmllbGRWYWx1ZSAmJiAodmFsaWRhdGlvbiB8fCB0aGlzLl9maWVsZEZvcm1hdCkpIHtcbiAgICAgIGlmICh0eXBlID09PSAncmVnZXhwJykge1xuICAgICAgICBpbnRyaW5zaWNWYWxpZGF0aW9uID0gKHZhbGlkYXRpb24/LnRlc3QoZmllbGRWYWx1ZSkgPz8gdHJ1ZSlcbiAgICAgICAgICAmJiAodGhpcy5fZmllbGRGb3JtYXQ/LnRlc3QoZmllbGRWYWx1ZSkgPz8gdHJ1ZSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHZhbGlkYXRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY29uc3QgeyB2YWxpZCwgbWVzc2FnZTogY3VzdG9tTWVzc2FnZSB9ID0gdmFsaWRhdGlvbihmaWVsZFZhbHVlLCB0aGlzKTtcbiAgICAgICAgaW50cmluc2ljVmFsaWRhdGlvbiA9IHZhbGlkO1xuICAgICAgICBtZXNzYWdlID0gY3VzdG9tTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIGlmICghaW50cmluc2ljVmFsaWRhdGlvbikge1xuICAgICAgICB0aGlzLnNldEVycm9yKCc5OScsIG1lc3NhZ2UgPz8gdGhpcy5faW50cmluc2ljRXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGludHJpbnNpY1ZhbGlkYXRpb24gJiYgZmllbGRWYWx1ZSAmJiB0aGlzLl9taW5WYWx1ZSAmJiBmaWVsZFZhbHVlIDwgdGhpcy5fbWluVmFsdWUpIHtcbiAgICAgIGludHJpbnNpY1ZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IoJzk5JywgJ0NhbXBvIGNvbiB2YWxvciBpbmZlcmlvciBhbCBtw61uaW1vJyk7XG4gICAgfVxuICAgIGlmIChpbnRyaW5zaWNWYWxpZGF0aW9uICYmIGZpZWxkVmFsdWUgJiYgdGhpcy5fbWF4VmFsdWUgJiYgZmllbGRWYWx1ZSA+IHRoaXMuX21heFZhbHVlKSB7XG4gICAgICBpbnRyaW5zaWNWYWxpZGF0aW9uID0gZmFsc2U7XG4gICAgICB0aGlzLnNldEVycm9yKCc5OScsICdDYW1wbyBjb24gdmFsb3Igc3VwZXJpb3IgYWwgbcOheGltbycpO1xuICAgIH1cbiAgICBpZiAoaW50cmluc2ljVmFsaWRhdGlvbiAmJiBmaWVsZFZhbHVlICYmIHR5cGVvZiBmaWVsZFZhbHVlID09PSAnc3RyaW5nJ1xuICAgICAgJiYgdGhpcy5fbWluTGVuZ3RoICYmIGZpZWxkVmFsdWU/Lmxlbmd0aCA8IHRoaXMuX21pbkxlbmd0aCkge1xuICAgICAgaW50cmluc2ljVmFsaWRhdGlvbiA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRFcnJvcignOTknLCBgTG9uZ2l0dWQgZGUgJHt0aGlzLl9maWVsZFRpdGxlfSBkZWJlIHNlciBkZSBhbCBtZW5vcyAke3RoaXMuX21pbkxlbmd0aH1gKTtcbiAgICB9XG4gICAgdGhpcy5fZWRpdGlvbkZpbmlzaC5uZXh0KHsgY29kZTogdGhpcy5fZmllbGRDb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uIH0pO1xuICB9XG5cbiAgbm90aWZ5RWRpdGlvbkRldGFpbFJlcXVlc3QoZGV0YWlsOiBhbnkpIHtcbiAgICBjb25zdCBkZXRhaWxFdmVudDogRGV0YWlsRXZlbnQgPSB7IGNvZGU6IHRoaXMuX2ZpZWxkQ29kZSwgZGV0YWlsIH07XG4gICAgdGhpcy5fZGV0YWlsUmVxdWVzdC5uZXh0KGRldGFpbEV2ZW50KTtcbiAgfVxuXG4gIHNldEVycm9yKGNvZGUsIG1lc3NhZ2UsIHR5cGUgPSBERUZBVUxUX0VSUk9SX1RZUEUpIHtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuZXJyb3JDb2RlLCBjb2RlID8/IE5PX0VSUk9SKTtcbiAgICB0aGlzLnNldEF0dHIoYXR0cnMuZXJyb3JUeXBlLCAodGhpcy5fZXJyb3JDb2RlID09PSBOT19FUlJPUikgPyAnJyA6IHR5cGUpO1xuICAgIHRoaXMuc2V0QXR0cihhdHRycy5lcnJvck1lc3NhZ2UsIG1lc3NhZ2UgPz8gJycpO1xuICB9XG5cbiAgdXBkYXRlRnJvbVNlcnZlcihmbGQpIHtcbiAgICBjb25zdCBmaWVsZEtleXMgPSBPYmplY3Qua2V5cyhmbGQpO1xuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBmaWVsZEtleXMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICBjb25zdCBhdHRyTmFtZSA9IGZpZWxkS2V5c1tpbmRleF07XG4gICAgICBjb25zdCBhdHRyVmFsdWUgPSBmbGRbYXR0ck5hbWVdO1xuICAgICAgaWYgKGRpcmVjdENoYW5nZXMuaW5jbHVkZXMoYXR0ck5hbWUpKSB7XG4gICAgICAgIHRoaXNbYXR0ck5hbWVdID0gYXR0clZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgKGF0dHJOYW1lID09PSAnbGFiZWwnKSAmJiAodGhpcy50aXRsZSA9IGF0dHJWYWx1ZSk7XG4gICAgICAgIChhdHRyTmFtZSA9PT0gJ2xhYmVsVmlzaWJsZScpICYmICh0aGlzLnZpc2libGVMYWJlbCA9IGF0dHJWYWx1ZSk7XG4gICAgICAgIChhdHRyTmFtZSA9PT0gJ2VkaXRhYmxlJykgJiYgdGhpcy5zZXRFZGl0YWJsZShhdHRyVmFsdWUpO1xuICAgICAgICAoYXR0ck5hbWUgPT09ICd2aXNpYmxlJykgJiYgdGhpcy5zZXRWaXNpYmlsaXR5KGF0dHJWYWx1ZSk7XG4gICAgICAgIChhdHRyTmFtZSA9PT0gJ3ZhbHVlJykgJiYgKHRoaXMuX3NldFZhbHVlKGF0dHJWYWx1ZSkgJiYgKHRoaXMuaGFzQ2hhbmdlZCA9IGZhbHNlKSk7XG4gICAgICAgIChhdHRyTmFtZSA9PT0gJ2ZpZWxkVmFsdWUnKSAmJiAodGhpcy5fc2V0VmFsdWUoYXR0clZhbHVlKSAmJiAodGhpcy5oYXNDaGFuZ2VkID0gZmFsc2UpKTtcbiAgICAgICAgKGF0dHJOYW1lID09PSAnZmllbGRPcHRpb25zJykgJiYgKHRoaXMub3B0aW9ucyA9IGF0dHJWYWx1ZSk7XG4gICAgICAgIChhdHRyTmFtZSA9PT0gJ2ZpZWxkVGl0bGUnKSAmJiAodGhpcy50aXRsZSA9IGF0dHJWYWx1ZSk7XG4gICAgICAgIChhdHRyTmFtZSA9PT0gJ2ZpZWxkVHlwZUNvZGUnKSAmJiAodGhpcy50eXBlID0gYXR0clZhbHVlKTtcbiAgICAgICAgKGF0dHJOYW1lID09PSAnZmllbGRUeXBlJykgJiYgKHRoaXMudHlwZSA9IGF0dHJWYWx1ZSk7XG4gICAgICAgIChhdHRyTmFtZSA9PT0gJ3Rvb2x0aXBUZXh0JykgJiYgKHRoaXMudG9vbHRpcCA9IGF0dHJWYWx1ZSk7XG4gICAgICAgIChhdHRyTmFtZSA9PT0gJ2N1c3RvbUF0dHJpYnV0ZXMnKSAmJiAodGhpcy5zZXRDdXN0b21BdHRyaWJ1dGVzKGF0dHJWYWx1ZSkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldFZhbHVlKG5ld1ZhbHVlLCB3aWRnZXRVcGRhdGUgPSB0cnVlKSB7XG4gICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gVU5ERUZJTkVEKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG5ld1ZhbHVlID09PSBudWxsICYmIHRoaXMucmVxdWlyZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBsZXQgbmV3RmluYWxWYWx1ZTtcbiAgICBpZiAodGhpcy5fZmllbGRUeXBlID09PSB0aGlzLl9mb3JtQ29uZmlnLmZpZWxkVHlwZXMuYm9vbGVhblxuICAgICAgfHwgdGhpcy5fZmllbGRUeXBlID09PSB0aGlzLl9mb3JtQ29uZmlnLmZpZWxkVHlwZXMuY2hlY2spIHtcbiAgICAgIG5ld0ZpbmFsVmFsdWUgPSB5bihuZXdWYWx1ZSkgPz8gZmFsc2U7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9maWVsZFR5cGUgPT09IHRoaXMuX2Zvcm1Db25maWcuZmllbGRUeXBlcy5hcnJheVxuICAgICAgfHwgdGhpcy5fZmllbGRUeXBlID09PSB0aGlzLl9mb3JtQ29uZmlnLmZpZWxkVHlwZXMubWFwKSB7XG4gICAgICBpZiAobmV3VmFsdWUgPT09IG51bGwgfHwgbmV3VmFsdWUgPT09ICcnKSB7XG4gICAgICAgIG5ld0ZpbmFsVmFsdWUgPSBbXTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuZXdWYWx1ZSkpIHtcbiAgICAgICAgbmV3RmluYWxWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3RmluYWxWYWx1ZSA9IG5ld1ZhbHVlLnRvU3RyaW5nKCkuc3BsaXQoJywnKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RmluYWxWYWx1ZSA9IG5ld1ZhbHVlO1xuICAgIH1cbiAgICBpZiAodGhpcy5fdmFsdWUgIT09IG5ld0ZpbmFsVmFsdWUpIHtcbiAgICAgIHRoaXMuX2hhc0NoYW5nZWQgPSB0cnVlO1xuICAgICAgaWYgKHdpZGdldFVwZGF0ZSkge1xuICAgICAgICB0aGlzLnNldEF0dHIoYXR0cnMudmFsdWUsIG5ld0ZpbmFsVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fdmFsdWUgPSBuZXdGaW5hbFZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
@@ -1,26 +0,0 @@
1
- export const NO_ERROR = '00';
2
- export const HEADER = 'HEADER';
3
- export const elementTypes = {
4
- action: 'ACTION',
5
- field: 'FIELD',
6
- table: 'TABLE',
7
- };
8
- export const formActions = {
9
- tableAction: 'TABLEACTION',
10
- getData: 'GETDATA',
11
- getTableData: 'GETTABLEDATA',
12
- validate: 'VALIDATE',
13
- };
14
- export const operators = {
15
- G: 'G',
16
- L: 'L',
17
- GE: 'GE',
18
- LE: 'LE',
19
- EQ: 'EQ',
20
- NEQ: 'NEQ',
21
- HAS: 'HAS',
22
- NOTHAS: 'NOTHAS',
23
- BETWEEN: 'BETWEEN',
24
- IN: 'IN',
25
- };
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5jb25zdGFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90dWFpbi1uZy1mb3Jtcy1saWIvc3JjL2xpYi9jbGFzc2VzL2Zvcm1zL2Zvcm0uY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUM7QUFDN0IsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQztBQUUvQixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsTUFBTSxFQUFFLFFBQVE7SUFDaEIsS0FBSyxFQUFFLE9BQU87SUFDZCxLQUFLLEVBQUUsT0FBTztDQUNmLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUc7SUFDekIsV0FBVyxFQUFFLGFBQWE7SUFDMUIsT0FBTyxFQUFFLFNBQVM7SUFDbEIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsUUFBUSxFQUFFLFVBQVU7Q0FDckIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRztJQUN2QixDQUFDLEVBQUUsR0FBRztJQUNOLENBQUMsRUFBRSxHQUFHO0lBQ04sRUFBRSxFQUFFLElBQUk7SUFDUixFQUFFLEVBQUUsSUFBSTtJQUNSLEVBQUUsRUFBRSxJQUFJO0lBQ1IsR0FBRyxFQUFFLEtBQUs7SUFDVixHQUFHLEVBQUUsS0FBSztJQUNWLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLEVBQUUsRUFBRSxJQUFJO0NBQ1QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBOT19FUlJPUiA9ICcwMCc7XG5leHBvcnQgY29uc3QgSEVBREVSID0gJ0hFQURFUic7XG5cbmV4cG9ydCBjb25zdCBlbGVtZW50VHlwZXMgPSB7XG4gIGFjdGlvbjogJ0FDVElPTicsXG4gIGZpZWxkOiAnRklFTEQnLFxuICB0YWJsZTogJ1RBQkxFJyxcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JtQWN0aW9ucyA9IHtcbiAgdGFibGVBY3Rpb246ICdUQUJMRUFDVElPTicsXG4gIGdldERhdGE6ICdHRVREQVRBJyxcbiAgZ2V0VGFibGVEYXRhOiAnR0VUVEFCTEVEQVRBJyxcbiAgdmFsaWRhdGU6ICdWQUxJREFURScsXG59O1xuXG5leHBvcnQgY29uc3Qgb3BlcmF0b3JzID0ge1xuICBHOiAnRycsXG4gIEw6ICdMJyxcbiAgR0U6ICdHRScsXG4gIExFOiAnTEUnLFxuICBFUTogJ0VRJyxcbiAgTkVROiAnTkVRJyxcbiAgSEFTOiAnSEFTJyxcbiAgTk9USEFTOiAnTk9USEFTJyxcbiAgQkVUV0VFTjogJ0JFVFdFRU4nLFxuICBJTjogJ0lOJyxcbn07XG4iXX0=