@aquera/ngx-smart-table 0.0.17-alpha → 0.0.18-alpha
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/{fesm2020 → fesm2022}/aquera-ngx-smart-table.mjs +1579 -2101
- package/fesm2022/aquera-ngx-smart-table.mjs.map +1 -0
- package/package.json +8 -16
- package/types/aquera-ngx-smart-table.d.ts +5909 -0
- package/aquera-ngx-smart-table.d.ts +0 -5
- package/esm2020/aquera-ngx-smart-table.mjs +0 -5
- package/esm2020/lib/builder/components/builder-preview/builder-preview.component.mjs +0 -63
- package/esm2020/lib/builder/components/builder-toolbar/builder-toolbar.component.mjs +0 -115
- package/esm2020/lib/builder/components/column-editor/column-editor.component.mjs +0 -206
- package/esm2020/lib/builder/components/column-list/column-list.component.mjs +0 -125
- package/esm2020/lib/builder/components/definition-builder/definition-builder.component.mjs +0 -105
- package/esm2020/lib/builder/components/table-config-editor/table-config-editor.component.mjs +0 -132
- package/esm2020/lib/builder/definition-builder.module.mjs +0 -70
- package/esm2020/lib/builder/models/builder-state.interface.mjs +0 -5
- package/esm2020/lib/builder/services/definition-builder.service.mjs +0 -251
- package/esm2020/lib/builder/services/definition-export.service.mjs +0 -167
- package/esm2020/lib/builder/services/definition-import.service.mjs +0 -193
- package/esm2020/lib/builder/services/sample-data-generator.service.mjs +0 -126
- package/esm2020/lib/builder/utils/config-validator.util.mjs +0 -165
- package/esm2020/lib/builder/utils/typescript-generator.util.mjs +0 -206
- package/esm2020/lib/editors/index.mjs +0 -9
- package/esm2020/lib/editors/nile-autocomplete-editor.mjs +0 -228
- package/esm2020/lib/editors/nile-calendar-editor.mjs +0 -211
- package/esm2020/lib/editors/nile-date-picker-editor.mjs +0 -188
- package/esm2020/lib/editors/nile-input-editor.mjs +0 -235
- package/esm2020/lib/editors/nile-select-editor.mjs +0 -498
- package/esm2020/lib/factories/column-config.factory.mjs +0 -231
- package/esm2020/lib/models/autosave-config.interface.mjs +0 -8
- package/esm2020/lib/models/base-column-config.class.mjs +0 -253
- package/esm2020/lib/models/cell-strategies.interface.mjs +0 -6
- package/esm2020/lib/models/cell-types.mjs +0 -147
- package/esm2020/lib/models/column-action.interface.mjs +0 -6
- package/esm2020/lib/models/column-config.interface.mjs +0 -43
- package/esm2020/lib/models/column-config.utils.mjs +0 -101
- package/esm2020/lib/models/row-action.interface.mjs +0 -5
- package/esm2020/lib/models/row-validator.interface.mjs +0 -2
- package/esm2020/lib/models/schema-validation.interface.mjs +0 -2
- package/esm2020/lib/models/sheet-action.interface.mjs +0 -5
- package/esm2020/lib/models/sheet-config.interface.mjs +0 -5
- package/esm2020/lib/models/table-config.interface.mjs +0 -107
- package/esm2020/lib/models/table-validator.interface.mjs +0 -2
- package/esm2020/lib/models/workbook-action.interface.mjs +0 -5
- package/esm2020/lib/models/workbook-config.interface.mjs +0 -5
- package/esm2020/lib/renderer/components/st-add-column-button/st-add-column-button.component.mjs +0 -24
- package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +0 -397
- package/esm2020/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.mjs +0 -103
- package/esm2020/lib/renderer/components/st-column-filter/st-column-filter.component.mjs +0 -383
- package/esm2020/lib/renderer/components/st-column-menu/st-column-menu.component.mjs +0 -232
- package/esm2020/lib/renderer/components/st-column-visibility/st-column-visibility.component.mjs +0 -97
- package/esm2020/lib/renderer/components/st-header/st-header.component.mjs +0 -157
- package/esm2020/lib/renderer/components/st-pagination/st-pagination.component.mjs +0 -87
- package/esm2020/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.mjs +0 -167
- package/esm2020/lib/renderer/components/st-sheet/st-sheet.component.mjs +0 -165
- package/esm2020/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.mjs +0 -112
- package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +0 -1453
- package/esm2020/lib/renderer/components/st-table-actions/st-table-actions.component.mjs +0 -169
- package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +0 -581
- package/esm2020/lib/renderer/directives/click-outside.directive.mjs +0 -28
- package/esm2020/lib/renderer/directives/st-column-resize.directive.mjs +0 -108
- package/esm2020/lib/renderer/directives/st-keyboard-navigation.directive.mjs +0 -83
- package/esm2020/lib/renderer/models/cell-state.interface.mjs +0 -66
- package/esm2020/lib/renderer/models/cell.class.mjs +0 -389
- package/esm2020/lib/renderer/models/row-validation-state.interface.mjs +0 -7
- package/esm2020/lib/renderer/models/sheet-state.class.mjs +0 -90
- package/esm2020/lib/renderer/models/sheet-state.interface.mjs +0 -5
- package/esm2020/lib/renderer/models/table-state.class.mjs +0 -871
- package/esm2020/lib/renderer/models/table-state.interface.mjs +0 -5
- package/esm2020/lib/renderer/models/table-types.mjs +0 -29
- package/esm2020/lib/renderer/models/table-validation-state.interface.mjs +0 -7
- package/esm2020/lib/renderer/models/workbook-state.class.mjs +0 -174
- package/esm2020/lib/renderer/models/workbook-state.interface.mjs +0 -5
- package/esm2020/lib/renderer/models/z-index.enum.mjs +0 -55
- package/esm2020/lib/schemas/table-config.schema.mjs +0 -472
- package/esm2020/lib/services/autosave.service.mjs +0 -92
- package/esm2020/lib/services/custom-validation-rules.util.mjs +0 -124
- package/esm2020/lib/services/json-schema-validator.service.mjs +0 -216
- package/esm2020/lib/services/row-validation.service.mjs +0 -42
- package/esm2020/lib/services/validation-logger.service.mjs +0 -177
- package/esm2020/lib/services/virtual-scroll.service.mjs +0 -52
- package/esm2020/lib/shared/shared-table-components.module.mjs +0 -35
- package/esm2020/lib/smart-table.module.mjs +0 -124
- package/esm2020/lib/strategies/default-editors.mjs +0 -433
- package/esm2020/lib/strategies/default-formatters.mjs +0 -238
- package/esm2020/lib/strategies/default-validators.mjs +0 -327
- package/esm2020/public-api.mjs +0 -146
- package/fesm2015/aquera-ngx-smart-table.mjs +0 -12347
- package/fesm2015/aquera-ngx-smart-table.mjs.map +0 -1
- package/fesm2020/aquera-ngx-smart-table.mjs.map +0 -1
- package/lib/builder/components/builder-preview/builder-preview.component.d.ts +0 -31
- package/lib/builder/components/builder-toolbar/builder-toolbar.component.d.ts +0 -53
- package/lib/builder/components/column-editor/column-editor.component.d.ts +0 -69
- package/lib/builder/components/column-list/column-list.component.d.ts +0 -65
- package/lib/builder/components/definition-builder/definition-builder.component.d.ts +0 -58
- package/lib/builder/components/table-config-editor/table-config-editor.component.d.ts +0 -32
- package/lib/builder/definition-builder.module.d.ts +0 -15
- package/lib/builder/models/builder-state.interface.d.ts +0 -93
- package/lib/builder/services/definition-builder.service.d.ts +0 -80
- package/lib/builder/services/definition-export.service.d.ts +0 -59
- package/lib/builder/services/definition-import.service.d.ts +0 -31
- package/lib/builder/services/sample-data-generator.service.d.ts +0 -41
- package/lib/builder/utils/config-validator.util.d.ts +0 -32
- package/lib/builder/utils/typescript-generator.util.d.ts +0 -29
- package/lib/editors/index.d.ts +0 -8
- package/lib/editors/nile-autocomplete-editor.d.ts +0 -102
- package/lib/editors/nile-calendar-editor.d.ts +0 -88
- package/lib/editors/nile-date-picker-editor.d.ts +0 -97
- package/lib/editors/nile-input-editor.d.ts +0 -67
- package/lib/editors/nile-select-editor.d.ts +0 -113
- package/lib/factories/column-config.factory.d.ts +0 -73
- package/lib/models/autosave-config.interface.d.ts +0 -23
- package/lib/models/base-column-config.class.d.ts +0 -115
- package/lib/models/cell-strategies.interface.d.ts +0 -188
- package/lib/models/cell-types.d.ts +0 -337
- package/lib/models/column-action.interface.d.ts +0 -86
- package/lib/models/column-config.interface.d.ts +0 -272
- package/lib/models/column-config.utils.d.ts +0 -37
- package/lib/models/row-action.interface.d.ts +0 -86
- package/lib/models/row-validator.interface.d.ts +0 -37
- package/lib/models/schema-validation.interface.d.ts +0 -42
- package/lib/models/sheet-action.interface.d.ts +0 -59
- package/lib/models/sheet-config.interface.d.ts +0 -41
- package/lib/models/table-config.interface.d.ts +0 -251
- package/lib/models/table-validator.interface.d.ts +0 -40
- package/lib/models/workbook-action.interface.d.ts +0 -95
- package/lib/models/workbook-config.interface.d.ts +0 -107
- package/lib/renderer/components/st-add-column-button/st-add-column-button.component.d.ts +0 -9
- package/lib/renderer/components/st-cell/st-cell.component.d.ts +0 -69
- package/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.d.ts +0 -39
- package/lib/renderer/components/st-column-filter/st-column-filter.component.d.ts +0 -139
- package/lib/renderer/components/st-column-menu/st-column-menu.component.d.ts +0 -81
- package/lib/renderer/components/st-column-visibility/st-column-visibility.component.d.ts +0 -44
- package/lib/renderer/components/st-header/st-header.component.d.ts +0 -93
- package/lib/renderer/components/st-pagination/st-pagination.component.d.ts +0 -42
- package/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.d.ts +0 -67
- package/lib/renderer/components/st-sheet/st-sheet.component.d.ts +0 -98
- package/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.d.ts +0 -58
- package/lib/renderer/components/st-table/st-table.component.d.ts +0 -380
- package/lib/renderer/components/st-table-actions/st-table-actions.component.d.ts +0 -77
- package/lib/renderer/components/st-workbook/st-workbook.component.d.ts +0 -275
- package/lib/renderer/directives/click-outside.directive.d.ts +0 -10
- package/lib/renderer/directives/st-column-resize.directive.d.ts +0 -44
- package/lib/renderer/directives/st-keyboard-navigation.directive.d.ts +0 -19
- package/lib/renderer/models/cell-state.interface.d.ts +0 -118
- package/lib/renderer/models/cell.class.d.ts +0 -174
- package/lib/renderer/models/row-validation-state.interface.d.ts +0 -27
- package/lib/renderer/models/sheet-state.class.d.ts +0 -67
- package/lib/renderer/models/sheet-state.interface.d.ts +0 -55
- package/lib/renderer/models/table-state.class.d.ts +0 -320
- package/lib/renderer/models/table-state.interface.d.ts +0 -18
- package/lib/renderer/models/table-types.d.ts +0 -228
- package/lib/renderer/models/table-validation-state.interface.d.ts +0 -34
- package/lib/renderer/models/workbook-state.class.d.ts +0 -117
- package/lib/renderer/models/workbook-state.interface.d.ts +0 -71
- package/lib/renderer/models/z-index.enum.d.ts +0 -44
- package/lib/schemas/table-config.schema.d.ts +0 -455
- package/lib/services/autosave.service.d.ts +0 -73
- package/lib/services/custom-validation-rules.util.d.ts +0 -12
- package/lib/services/json-schema-validator.service.d.ts +0 -49
- package/lib/services/row-validation.service.d.ts +0 -17
- package/lib/services/validation-logger.service.d.ts +0 -87
- package/lib/services/virtual-scroll.service.d.ts +0 -44
- package/lib/shared/shared-table-components.module.d.ts +0 -9
- package/lib/smart-table.module.d.ts +0 -26
- package/lib/strategies/default-editors.d.ts +0 -109
- package/lib/strategies/default-formatters.d.ts +0 -116
- package/lib/strategies/default-validators.d.ts +0 -113
- package/public-api.d.ts +0 -70
- package/src/lib/builder/README.md +0 -30
- package/src/lib/editors/README.md +0 -303
- package/src/lib/renderer/components/st-column-filter/README.md +0 -286
|
@@ -1,211 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Custom editor using NileCalendar from @aquera/nile-elements
|
|
3
|
-
* Provides date selection functionality for table cells
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Custom editor that uses NileCalendar component for date selection
|
|
7
|
-
* @template T The value type (string by default, formatted as YYYY-MM-DD)
|
|
8
|
-
*/
|
|
9
|
-
export class NileCalendarEditor {
|
|
10
|
-
constructor(options) {
|
|
11
|
-
this.options = options;
|
|
12
|
-
this.acceptsInitialKeypress = false;
|
|
13
|
-
this.eventListeners = [];
|
|
14
|
-
}
|
|
15
|
-
edit(context) {
|
|
16
|
-
if (!context.container) {
|
|
17
|
-
console.warn('NileCalendarEditor requires a container element');
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
// Create NileCalendar custom element using document.createElement
|
|
21
|
-
this.calendar = document.createElement('nile-calendar');
|
|
22
|
-
// Set initial value (NileCalendar expects Date object)
|
|
23
|
-
if (context.value) {
|
|
24
|
-
const dateValue = String(context.value);
|
|
25
|
-
// Convert string to Date object
|
|
26
|
-
const date = new Date(dateValue);
|
|
27
|
-
if (!isNaN(date.getTime())) {
|
|
28
|
-
this.calendar.value = date;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
this.calendar.className = 'st-cell-editor st-nile-calendar-editor';
|
|
32
|
-
// Apply inline styles for proper cell fitting
|
|
33
|
-
this.calendar.style.width = 'inherit';
|
|
34
|
-
this.calendar.style.height = 'inherit';
|
|
35
|
-
this.calendar.style.boxSizing = 'border-box';
|
|
36
|
-
// Apply all configuration options
|
|
37
|
-
this.applyOptions();
|
|
38
|
-
// Set up event listeners
|
|
39
|
-
this.setupEventListeners(context);
|
|
40
|
-
// Clear container and append calendar
|
|
41
|
-
context.container.innerHTML = '';
|
|
42
|
-
context.container.appendChild(this.calendar);
|
|
43
|
-
// Auto focus
|
|
44
|
-
if (this.options?.autoFocus !== false) {
|
|
45
|
-
setTimeout(() => {
|
|
46
|
-
this.calendar?.focus();
|
|
47
|
-
}, 0);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Apply all configuration options to the NileCalendar element
|
|
52
|
-
*/
|
|
53
|
-
applyOptions() {
|
|
54
|
-
if (!this.calendar)
|
|
55
|
-
return;
|
|
56
|
-
// Date format (default: ISO format)
|
|
57
|
-
const dateFormat = this.options?.dateFormat || 'YYYY-MM-DD';
|
|
58
|
-
this.calendar.setAttribute('dateFormat', dateFormat);
|
|
59
|
-
// Basic properties
|
|
60
|
-
if (this.options?.disabled) {
|
|
61
|
-
this.calendar.setAttribute('disabled', String(this.options.disabled));
|
|
62
|
-
}
|
|
63
|
-
if (this.options?.placeholder) {
|
|
64
|
-
this.calendar.setAttribute('placeholder', this.options.placeholder);
|
|
65
|
-
}
|
|
66
|
-
if (this.options?.helpText) {
|
|
67
|
-
this.calendar.setAttribute('help-text', this.options.helpText);
|
|
68
|
-
}
|
|
69
|
-
// Behavior options
|
|
70
|
-
if (this.options?.allowClear) {
|
|
71
|
-
this.calendar.setAttribute('allowClear', String(this.options.allowClear));
|
|
72
|
-
}
|
|
73
|
-
if (this.options?.doubleClickUnselect) {
|
|
74
|
-
this.calendar.setAttribute('doubleClickUnselect', String(this.options.doubleClickUnselect));
|
|
75
|
-
}
|
|
76
|
-
if (this.options?.showMonthDropdown) {
|
|
77
|
-
this.calendar.setAttribute('showMonthDropdown', String(this.options.showMonthDropdown));
|
|
78
|
-
}
|
|
79
|
-
if (this.options?.showYearDropdown) {
|
|
80
|
-
this.calendar.setAttribute('showYearDropdown', String(this.options.showYearDropdown));
|
|
81
|
-
}
|
|
82
|
-
if (this.options?.showManualInputs) {
|
|
83
|
-
this.calendar.setAttribute('showManualInputs', String(this.options.showManualInputs));
|
|
84
|
-
}
|
|
85
|
-
// Year range
|
|
86
|
-
if (this.options?.startYear) {
|
|
87
|
-
this.calendar.setAttribute('startYear', String(this.options.startYear));
|
|
88
|
-
}
|
|
89
|
-
if (this.options?.endYear) {
|
|
90
|
-
this.calendar.setAttribute('endYear', String(this.options.endYear));
|
|
91
|
-
}
|
|
92
|
-
// Allowed dates range
|
|
93
|
-
if (this.options?.allowedDates) {
|
|
94
|
-
this.calendar.setAttribute('allowedDates', JSON.stringify(this.options.allowedDates));
|
|
95
|
-
}
|
|
96
|
-
// Visual states - using attributes for properties that may not exist
|
|
97
|
-
if (this.options?.warning) {
|
|
98
|
-
this.calendar.setAttribute('warning', String(this.options.warning));
|
|
99
|
-
}
|
|
100
|
-
if (this.options?.error) {
|
|
101
|
-
this.calendar.setAttribute('error', String(this.options.error));
|
|
102
|
-
}
|
|
103
|
-
if (this.options?.success) {
|
|
104
|
-
this.calendar.setAttribute('success', String(this.options.success));
|
|
105
|
-
}
|
|
106
|
-
if (this.options?.errorMessage) {
|
|
107
|
-
this.calendar.setAttribute('error-message', this.options.errorMessage);
|
|
108
|
-
}
|
|
109
|
-
// Size
|
|
110
|
-
if (this.options?.size) {
|
|
111
|
-
this.calendar.setAttribute('size', this.options.size);
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Set up all event listeners with proper cleanup tracking
|
|
116
|
-
*/
|
|
117
|
-
setupEventListeners(context) {
|
|
118
|
-
if (!this.calendar)
|
|
119
|
-
return;
|
|
120
|
-
const validateOnSave = this.options?.validateOnSave !== false;
|
|
121
|
-
// Handle keyboard events (keydown is not replaced by custom events)
|
|
122
|
-
const keydownHandler = (e) => {
|
|
123
|
-
const keyEvent = e;
|
|
124
|
-
if (keyEvent.key === 'Enter') {
|
|
125
|
-
keyEvent.preventDefault();
|
|
126
|
-
keyEvent.stopPropagation();
|
|
127
|
-
this.saveValue(context, validateOnSave);
|
|
128
|
-
}
|
|
129
|
-
else if (keyEvent.key === 'Escape') {
|
|
130
|
-
keyEvent.preventDefault();
|
|
131
|
-
keyEvent.stopPropagation();
|
|
132
|
-
context.onCancel();
|
|
133
|
-
}
|
|
134
|
-
else if (keyEvent.key === 'Tab') {
|
|
135
|
-
keyEvent.preventDefault();
|
|
136
|
-
keyEvent.stopPropagation();
|
|
137
|
-
this.saveValue(context, validateOnSave);
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
this.calendar.addEventListener('keydown', keydownHandler);
|
|
141
|
-
this.eventListeners.push({ event: 'keydown', handler: keydownHandler });
|
|
142
|
-
// Use nile-change custom event for date selection
|
|
143
|
-
const changeHandler = (e) => {
|
|
144
|
-
const customEvent = e;
|
|
145
|
-
context.onSave(this.parseValue(customEvent.detail.value));
|
|
146
|
-
};
|
|
147
|
-
this.calendar.addEventListener('nile-change', changeHandler);
|
|
148
|
-
this.eventListeners.push({ event: 'nile-change', handler: changeHandler });
|
|
149
|
-
// Use nile-blur custom event (save on blur)
|
|
150
|
-
const blurHandler = (e) => {
|
|
151
|
-
const customEvent = e;
|
|
152
|
-
// Note: NileCalendar may not have validation methods
|
|
153
|
-
// Validation should be handled by the validator strategy instead
|
|
154
|
-
context.onSave(this.parseValue(customEvent.detail.value));
|
|
155
|
-
};
|
|
156
|
-
this.calendar.addEventListener('nile-blur', blurHandler);
|
|
157
|
-
this.eventListeners.push({ event: 'nile-blur', handler: blurHandler });
|
|
158
|
-
// Handle clear button if enabled
|
|
159
|
-
if (this.options?.allowClear) {
|
|
160
|
-
const clearHandler = (e) => {
|
|
161
|
-
context.onSave(this.parseValue(''));
|
|
162
|
-
};
|
|
163
|
-
this.calendar.addEventListener('nile-clear', clearHandler);
|
|
164
|
-
this.eventListeners.push({ event: 'nile-clear', handler: clearHandler });
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Save value with optional validation
|
|
169
|
-
*/
|
|
170
|
-
saveValue(context, validate) {
|
|
171
|
-
if (!this.calendar)
|
|
172
|
-
return;
|
|
173
|
-
// Note: NileCalendar may not have validation methods
|
|
174
|
-
// Validation should be handled by the validator strategy instead
|
|
175
|
-
context.onSave(this.getCurrentValue());
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Parse value to appropriate type
|
|
179
|
-
*/
|
|
180
|
-
parseValue(value) {
|
|
181
|
-
// Value is already in the correct format from nile-calendar
|
|
182
|
-
return (value || '');
|
|
183
|
-
}
|
|
184
|
-
destroy() {
|
|
185
|
-
// Remove all event listeners
|
|
186
|
-
if (this.calendar) {
|
|
187
|
-
this.eventListeners.forEach(({ event, handler }) => {
|
|
188
|
-
this.calendar?.removeEventListener(event, handler);
|
|
189
|
-
});
|
|
190
|
-
this.eventListeners = [];
|
|
191
|
-
this.calendar.remove();
|
|
192
|
-
this.calendar = undefined;
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
focus() {
|
|
196
|
-
this.calendar?.focus();
|
|
197
|
-
}
|
|
198
|
-
getCurrentValue() {
|
|
199
|
-
if (!this.calendar)
|
|
200
|
-
return '';
|
|
201
|
-
// NileCalendar.value is a Date object, convert to ISO string format
|
|
202
|
-
if (this.calendar.value instanceof Date) {
|
|
203
|
-
const year = this.calendar.value.getFullYear();
|
|
204
|
-
const month = String(this.calendar.value.getMonth() + 1).padStart(2, '0');
|
|
205
|
-
const day = String(this.calendar.value.getDate()).padStart(2, '0');
|
|
206
|
-
return `${year}-${month}-${day}`;
|
|
207
|
-
}
|
|
208
|
-
return '';
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1jYWxlbmRhci1lZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL2VkaXRvcnMvbmlsZS1jYWxlbmRhci1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHO0FBcUVIOzs7R0FHRztBQUNILE1BQU0sT0FBTyxrQkFBa0I7SUFNN0IsWUFBNkIsT0FBbUM7UUFBbkMsWUFBTyxHQUFQLE9BQU8sQ0FBNEI7UUFMaEUsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBR3ZCLG1CQUFjLEdBQXFELEVBQUUsQ0FBQztJQUVYLENBQUM7SUFFcEUsSUFBSSxDQUFDLE9BQTZCO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsaURBQWlELENBQUMsQ0FBQztZQUNoRSxPQUFPO1NBQ1I7UUFFRCxrRUFBa0U7UUFDbEUsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBRXhELHVEQUF1RDtRQUN2RCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7WUFDakIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN4QyxnQ0FBZ0M7WUFDaEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFBRTtnQkFDMUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2FBQzVCO1NBQ0Y7UUFFRCxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsR0FBRyx3Q0FBd0MsQ0FBQztRQUVuRSw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FB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Q0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDckQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUV6QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxRQUFRLEdBQUcsU0FBUyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxFQUFrQixDQUFDO1FBRTlDLG9FQUFvRTtRQUNwRSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxZQUFZLElBQUksRUFBRTtZQUN2QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMvQyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUMxRSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBQ25FLE9BQU8sR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztTQUNsRDtRQUVELE9BQU8sRUFBa0IsQ0FBQztJQUM1QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEN1c3RvbSBlZGl0b3IgdXNpbmcgTmlsZUNhbGVuZGFyIGZyb20gQGFxdWVyYS9uaWxlLWVsZW1lbnRzXG4gKiBQcm92aWRlcyBkYXRlIHNlbGVjdGlvbiBmdW5jdGlvbmFsaXR5IGZvciB0YWJsZSBjZWxsc1xuICovXG5cbmltcG9ydCB7IENlbGxFZGl0b3IsIENlbGxFZGl0b3JDb250ZXh0IH0gZnJvbSAnLi4vbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuXG4vKipcbiAqIERhdGUgcmFuZ2UgY29uZmlndXJhdGlvbiBmb3IgcmVzdHJpY3RpbmcgYWxsb3dlZCBkYXRlc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEFsbG93ZWREYXRlc1JhbmdlIHtcbiAgLyoqIFN0YXJ0IGRhdGUgaW4gSVNPIGZvcm1hdCAoWVlZWS1NTS1ERCkgKi9cbiAgc3RhcnREYXRlPzogc3RyaW5nO1xuICAvKiogRW5kIGRhdGUgaW4gSVNPIGZvcm1hdCAoWVlZWS1NTS1ERCkgKi9cbiAgZW5kRGF0ZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGludGVyZmFjZSBmb3IgTmlsZUNhbGVuZGFyRWRpdG9yXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmlsZUNhbGVuZGFyRWRpdG9yT3B0aW9ucyB7XG4gIC8vIEJhc2ljIHByb3BlcnRpZXNcbiAgLyoqIFBsYWNlaG9sZGVyIHRleHQgdG8gc2hvdyB3aGVuIG5vIGRhdGUgaXMgc2VsZWN0ZWQgKi9cbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIC8qKiBEaXNhYmxlIHRoZSBjYWxlbmRhciBjb250cm9sICovXG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgLyoqIEhlbHAgdGV4dCB0byBkaXNwbGF5IGJlbG93IHRoZSBjb250cm9sICovXG4gIGhlbHBUZXh0Pzogc3RyaW5nO1xuICBcbiAgLy8gRGF0ZSBjb25maWd1cmF0aW9uXG4gIC8qKiBEYXRlIGZvcm1hdCBmb3IgZGlzcGxheSAoZGVmYXVsdDogJ1lZWVktTU0tREQnKSAqL1xuICBkYXRlRm9ybWF0Pzogc3RyaW5nO1xuICAvKiogU3RhcnQgeWVhciBmb3IgeWVhciBkcm9wZG93biAqL1xuICBzdGFydFllYXI/OiBudW1iZXI7XG4gIC8qKiBFbmQgeWVhciBmb3IgeWVhciBkcm9wZG93biAqL1xuICBlbmRZZWFyPzogbnVtYmVyO1xuICAvKiogRGF0ZSByYW5nZSByZXN0cmljdGlvbnMgKi9cbiAgYWxsb3dlZERhdGVzPzogQWxsb3dlZERhdGVzUmFuZ2U7XG4gIFxuICAvLyBCZWhhdmlvciBvcHRpb25zXG4gIC8qKiBTaG93IGNsZWFyIGJ1dHRvbiBmb3IgcmVtb3ZpbmcgZGF0ZSAqL1xuICBhbGxvd0NsZWFyPzogYm9vbGVhbjtcbiAgLyoqIEFsbG93IGRvdWJsZS1jbGljayB0byB1bnNlbGVjdCBkYXRlICovXG4gIGRvdWJsZUNsaWNrVW5zZWxlY3Q/OiBib29sZWFuO1xuICAvKiogU2hvdyBtb250aCBzZWxlY3Rpb24gZHJvcGRvd24gKi9cbiAgc2hvd01vbnRoRHJvcGRvd24/OiBib29sZWFuO1xuICAvKiogU2hvdyB5ZWFyIHNlbGVjdGlvbiBkcm9wZG93biAqL1xuICBzaG93WWVhckRyb3Bkb3duPzogYm9vbGVhbjtcbiAgLyoqIEFsbG93IG1hbnVhbCBkYXRlIGlucHV0IHZpYSB0ZXh0IGZpZWxkcyAqL1xuICBzaG93TWFudWFsSW5wdXRzPzogYm9vbGVhbjtcbiAgLyoqIEF1dG8tZm9jdXMgdGhlIGNhbGVuZGFyIHdoZW4gZWRpdG9yIG9wZW5zICovXG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIFxuICAvLyBWaXN1YWwgc3RhdGVzXG4gIC8qKiBXYXJuaW5nIHN0YXRlIHN0eWxpbmcgKi9cbiAgd2FybmluZz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBzdGF0ZSBzdHlsaW5nICovXG4gIGVycm9yPzogYm9vbGVhbjtcbiAgLyoqIFN1Y2Nlc3Mgc3RhdGUgc3R5bGluZyAqL1xuICBzdWNjZXNzPzogYm9vbGVhbjtcbiAgLyoqIEVycm9yIG1lc3NhZ2UgdG8gZGlzcGxheSAqL1xuICBlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG4gIFxuICAvLyBTdHlsaW5nXG4gIC8qKiBTaXplIG9mIHRoZSBjYWxlbmRhciBjb250cm9sICovXG4gIHNpemU/OiAnc21hbGwnIHwgJ21lZGl1bScgfCAnbGFyZ2UnO1xuICBcbiAgLy8gQWR2YW5jZWQgb3B0aW9uc1xuICAvKiogVmFsaWRhdGUgYmVmb3JlIHNhdmluZyAoZGVmYXVsdDogdHJ1ZSkgKi9cbiAgdmFsaWRhdGVPblNhdmU/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEN1c3RvbSBlZGl0b3IgdGhhdCB1c2VzIE5pbGVDYWxlbmRhciBjb21wb25lbnQgZm9yIGRhdGUgc2VsZWN0aW9uXG4gKiBAdGVtcGxhdGUgVCBUaGUgdmFsdWUgdHlwZSAoc3RyaW5nIGJ5IGRlZmF1bHQsIGZvcm1hdHRlZCBhcyBZWVlZLU1NLUREKVxuICovXG5leHBvcnQgY2xhc3MgTmlsZUNhbGVuZGFyRWRpdG9yPFQgPSBzdHJpbmc+IGltcGxlbWVudHMgQ2VsbEVkaXRvcjxUPiB7XG4gIGFjY2VwdHNJbml0aWFsS2V5cHJlc3MgPSBmYWxzZTtcbiAgXG4gIHByaXZhdGUgY2FsZW5kYXI/OiBhbnk7XG4gIHByaXZhdGUgZXZlbnRMaXN0ZW5lcnM6IEFycmF5PHsgZXZlbnQ6IHN0cmluZzsgaGFuZGxlcjogRXZlbnRMaXN0ZW5lciB9PiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9ucz86IE5pbGVDYWxlbmRhckVkaXRvck9wdGlvbnMpIHt9XG5cbiAgZWRpdChjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPik6IHZvaWQge1xuICAgIGlmICghY29udGV4dC5jb250YWluZXIpIHtcbiAgICAgIGNvbnNvbGUud2FybignTmlsZUNhbGVuZGFyRWRpdG9yIHJlcXVpcmVzIGEgY29udGFpbmVyIGVsZW1lbnQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgTmlsZUNhbGVuZGFyIGN1c3RvbSBlbGVtZW50IHVzaW5nIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnRcbiAgICB0aGlzLmNhbGVuZGFyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbmlsZS1jYWxlbmRhcicpO1xuICAgIFxuICAgIC8vIFNldCBpbml0aWFsIHZhbHVlIChOaWxlQ2FsZW5kYXIgZXhwZWN0cyBEYXRlIG9iamVjdClcbiAgICBpZiAoY29udGV4dC52YWx1ZSkge1xuICAgICAgY29uc3QgZGF0ZVZhbHVlID0gU3RyaW5nKGNvbnRleHQudmFsdWUpO1xuICAgICAgLy8gQ29udmVydCBzdHJpbmcgdG8gRGF0ZSBvYmplY3RcbiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkYXRlVmFsdWUpO1xuICAgICAgaWYgKCFpc05hTihkYXRlLmdldFRpbWUoKSkpIHtcbiAgICAgICAgdGhpcy5jYWxlbmRhci52YWx1ZSA9IGRhdGU7XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIHRoaXMuY2FsZW5kYXIuY2xhc3NOYW1lID0gJ3N0LWNlbGwtZWRpdG9yIHN0LW5pbGUtY2FsZW5kYXItZWRpdG9yJztcbiAgICBcbiAgICAvLyBBcHBseSBpbmxpbmUgc3R5bGVzIGZvciBwcm9wZXIgY2VsbCBmaXR0aW5nXG4gICAgdGhpcy5jYWxlbmRhci5zdHlsZS53aWR0aCA9ICdpbmhlcml0JztcbiAgICB0aGlzLmNhbGVuZGFyLnN0eWxlLmhlaWdodCA9ICdpbmhlcml0JztcbiAgICB0aGlzLmNhbGVuZGFyLnN0eWxlLmJveFNpemluZyA9ICdib3JkZXItYm94JztcbiAgICBcbiAgICAvLyBBcHBseSBhbGwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAgdGhpcy5hcHBseU9wdGlvbnMoKTtcbiAgICBcbiAgICAvLyBTZXQgdXAgZXZlbnQgbGlzdGVuZXJzXG4gICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKGNvbnRleHQpO1xuICAgIFxuICAgIC8vIENsZWFyIGNvbnRhaW5lciBhbmQgYXBwZW5kIGNhbGVuZGFyXG4gICAgY29udGV4dC5jb250YWluZXIuaW5uZXJIVE1MID0gJyc7XG4gICAgY29udGV4dC5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5jYWxlbmRhcik7XG4gICAgXG4gICAgLy8gQXV0byBmb2N1c1xuICAgIGlmICh0aGlzLm9wdGlvbnM/LmF1dG9Gb2N1cyAhPT0gZmFsc2UpIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmNhbGVuZGFyPy5mb2N1cygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFsbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gdGhlIE5pbGVDYWxlbmRhciBlbGVtZW50XG4gICAqL1xuICBwcml2YXRlIGFwcGx5T3B0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FsZW5kYXIpIHJldHVybjtcbiAgICBcbiAgICAvLyBEYXRlIGZvcm1hdCAoZGVmYXVsdDogSVNPIGZvcm1hdClcbiAgICBjb25zdCBkYXRlRm9ybWF0ID0gdGhpcy5vcHRpb25zPy5kYXRlRm9ybWF0IHx8ICdZWVlZLU1NLUREJztcbiAgICB0aGlzLmNhbGVuZGFyLnNldEF0dHJpYnV0ZSgnZGF0ZUZvcm1hdCcsIGRhdGVGb3JtYXQpO1xuICAgIFxuICAgIC8vIEJhc2ljIHByb3BlcnRpZXNcbiAgICBpZiAodGhpcy5vcHRpb25zPy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5jYWxlbmRhci5zZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJywgU3RyaW5nKHRoaXMub3B0aW9ucy5kaXNhYmxlZCkpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5vcHRpb25zPy5wbGFjZWhvbGRlcikge1xuICAgICAgdGhpcy5jYWxlbmRhci5zZXRBdHRyaWJ1dGUoJ3BsYWNlaG9sZGVyJywgdGhpcy5vcHRpb25zLnBsYWNlaG9sZGVyKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uaGVscFRleHQpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdoZWxwLXRleHQnLCB0aGlzLm9wdGlvbnMuaGVscFRleHQpO1xuICAgIH1cbiAgICBcbiAgICAvLyBCZWhhdmlvciBvcHRpb25zXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uYWxsb3dDbGVhcikge1xuICAgICAgdGhpcy5jYWxlbmRhci5zZXRBdHRyaWJ1dGUoJ2FsbG93Q2xlYXInLCBTdHJpbmcodGhpcy5vcHRpb25zLmFsbG93Q2xlYXIpKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uZG91YmxlQ2xpY2tVbnNlbGVjdCkge1xuICAgICAgdGhpcy5jYWxlbmRhci5zZXRBdHRyaWJ1dGUoJ2RvdWJsZUNsaWNrVW5zZWxlY3QnLCBTdHJpbmcodGhpcy5vcHRpb25zLmRvdWJsZUNsaWNrVW5zZWxlY3QpKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uc2hvd01vbnRoRHJvcGRvd24pIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdzaG93TW9udGhEcm9wZG93bicsIFN0cmluZyh0aGlzLm9wdGlvbnMuc2hvd01vbnRoRHJvcGRvd24pKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uc2hvd1llYXJEcm9wZG93bikge1xuICAgICAgdGhpcy5jYWxlbmRhci5zZXRBdHRyaWJ1dGUoJ3Nob3dZZWFyRHJvcGRvd24nLCBTdHJpbmcodGhpcy5vcHRpb25zLnNob3dZZWFyRHJvcGRvd24pKTtcbiAgICB9XG4gICAgXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uc2hvd01hbnVhbElucHV0cykge1xuICAgICAgdGhpcy5jYWxlbmRhci5zZXRBdHRyaWJ1dGUoJ3Nob3dNYW51YWxJbnB1dHMnLCBTdHJpbmcodGhpcy5vcHRpb25zLnNob3dNYW51YWxJbnB1dHMpKTtcbiAgICB9XG4gICAgXG4gICAgLy8gWWVhciByYW5nZVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnN0YXJ0WWVhcikge1xuICAgICAgdGhpcy5jYWxlbmRhci5zZXRBdHRyaWJ1dGUoJ3N0YXJ0WWVhcicsIFN0cmluZyh0aGlzLm9wdGlvbnMuc3RhcnRZZWFyKSk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVuZFllYXIpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdlbmRZZWFyJywgU3RyaW5nKHRoaXMub3B0aW9ucy5lbmRZZWFyKSk7XG4gICAgfVxuICAgIFxuICAgIC8vIEFsbG93ZWQgZGF0ZXMgcmFuZ2VcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hbGxvd2VkRGF0ZXMpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdhbGxvd2VkRGF0ZXMnLCBKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnMuYWxsb3dlZERhdGVzKSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFZpc3VhbCBzdGF0ZXMgLSB1c2luZyBhdHRyaWJ1dGVzIGZvciBwcm9wZXJ0aWVzIHRoYXQgbWF5IG5vdCBleGlzdFxuICAgIGlmICh0aGlzLm9wdGlvbnM/Lndhcm5pbmcpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCd3YXJuaW5nJywgU3RyaW5nKHRoaXMub3B0aW9ucy53YXJuaW5nKSk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVycm9yKSB7XG4gICAgICB0aGlzLmNhbGVuZGFyLnNldEF0dHJpYnV0ZSgnZXJyb3InLCBTdHJpbmcodGhpcy5vcHRpb25zLmVycm9yKSk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnN1Y2Nlc3MpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdzdWNjZXNzJywgU3RyaW5nKHRoaXMub3B0aW9ucy5zdWNjZXNzKSk7XG4gICAgfVxuICAgIFxuICAgIGlmICh0aGlzLm9wdGlvbnM/LmVycm9yTWVzc2FnZSkge1xuICAgICAgdGhpcy5jYWxlbmRhci5zZXRBdHRyaWJ1dGUoJ2Vycm9yLW1lc3NhZ2UnLCB0aGlzLm9wdGlvbnMuZXJyb3JNZXNzYWdlKTtcbiAgICB9XG4gICAgXG4gICAgLy8gU2l6ZVxuICAgIGlmICh0aGlzLm9wdGlvbnM/LnNpemUpIHtcbiAgICAgIHRoaXMuY2FsZW5kYXIuc2V0QXR0cmlidXRlKCdzaXplJywgdGhpcy5vcHRpb25zLnNpemUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHByb3BlciBjbGVhbnVwIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FsZW5kYXIpIHJldHVybjtcbiAgICBcbiAgICBjb25zdCB2YWxpZGF0ZU9uU2F2ZSA9IHRoaXMub3B0aW9ucz8udmFsaWRhdGVPblNhdmUgIT09IGZhbHNlO1xuICAgIFxuICAgIC8vIEhhbmRsZSBrZXlib2FyZCBldmVudHMgKGtleWRvd24gaXMgbm90IHJlcGxhY2VkIGJ5IGN1c3RvbSBldmVudHMpXG4gICAgY29uc3Qga2V5ZG93bkhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGtleUV2ZW50ID0gZSBhcyBLZXlib2FyZEV2ZW50O1xuICAgICAgaWYgKGtleUV2ZW50LmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICBrZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5zYXZlVmFsdWUoY29udGV4dCwgdmFsaWRhdGVPblNhdmUpO1xuICAgICAgfSBlbHNlIGlmIChrZXlFdmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBjb250ZXh0Lm9uQ2FuY2VsKCk7XG4gICAgICB9IGVsc2UgaWYgKGtleUV2ZW50LmtleSA9PT0gJ1RhYicpIHtcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHRoaXMuc2F2ZVZhbHVlKGNvbnRleHQsIHZhbGlkYXRlT25TYXZlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMuY2FsZW5kYXIuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGtleWRvd25IYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ2tleWRvd24nLCBoYW5kbGVyOiBrZXlkb3duSGFuZGxlciB9KTtcbiAgICBcbiAgICAvLyBVc2UgbmlsZS1jaGFuZ2UgY3VzdG9tIGV2ZW50IGZvciBkYXRlIHNlbGVjdGlvblxuICAgIGNvbnN0IGNoYW5nZUhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGN1c3RvbUV2ZW50ID0gZSBhcyBDdXN0b21FdmVudDtcbiAgICAgIGNvbnRleHQub25TYXZlKHRoaXMucGFyc2VWYWx1ZShjdXN0b21FdmVudC5kZXRhaWwudmFsdWUpKTtcbiAgICB9O1xuICAgIHRoaXMuY2FsZW5kYXIuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1jaGFuZ2UnLCBjaGFuZ2VIYW5kbGVyKTtcbiAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2hhbmdlJywgaGFuZGxlcjogY2hhbmdlSGFuZGxlciB9KTtcbiAgICBcbiAgICAvLyBVc2UgbmlsZS1ibHVyIGN1c3RvbSBldmVudCAoc2F2ZSBvbiBibHVyKVxuICAgIGNvbnN0IGJsdXJIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBjdXN0b21FdmVudCA9IGUgYXMgQ3VzdG9tRXZlbnQ7XG4gICAgICAvLyBOb3RlOiBOaWxlQ2FsZW5kYXIgbWF5IG5vdCBoYXZlIHZhbGlkYXRpb24gbWV0aG9kc1xuICAgICAgLy8gVmFsaWRhdGlvbiBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgdmFsaWRhdG9yIHN0cmF0ZWd5IGluc3RlYWRcbiAgICAgIGNvbnRleHQub25TYXZlKHRoaXMucGFyc2VWYWx1ZShjdXN0b21FdmVudC5kZXRhaWwudmFsdWUpKTtcbiAgICB9O1xuICAgIHRoaXMuY2FsZW5kYXIuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1ibHVyJywgYmx1ckhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAnbmlsZS1ibHVyJywgaGFuZGxlcjogYmx1ckhhbmRsZXIgfSk7XG4gICAgXG4gICAgLy8gSGFuZGxlIGNsZWFyIGJ1dHRvbiBpZiBlbmFibGVkXG4gICAgaWYgKHRoaXMub3B0aW9ucz8uYWxsb3dDbGVhcikge1xuICAgICAgY29uc3QgY2xlYXJIYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnRleHQub25TYXZlKHRoaXMucGFyc2VWYWx1ZSgnJykpO1xuICAgICAgfTtcbiAgICAgIHRoaXMuY2FsZW5kYXIuYWRkRXZlbnRMaXN0ZW5lcignbmlsZS1jbGVhcicsIGNsZWFySGFuZGxlcik7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLnB1c2goeyBldmVudDogJ25pbGUtY2xlYXInLCBoYW5kbGVyOiBjbGVhckhhbmRsZXIgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdmFsdWUgd2l0aCBvcHRpb25hbCB2YWxpZGF0aW9uXG4gICAqL1xuICBwcml2YXRlIHNhdmVWYWx1ZShjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPiwgdmFsaWRhdGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2FsZW5kYXIpIHJldHVybjtcbiAgICBcbiAgICAvLyBOb3RlOiBOaWxlQ2FsZW5kYXIgbWF5IG5vdCBoYXZlIHZhbGlkYXRpb24gbWV0aG9kc1xuICAgIC8vIFZhbGlkYXRpb24gc2hvdWxkIGJlIGhhbmRsZWQgYnkgdGhlIHZhbGlkYXRvciBzdHJhdGVneSBpbnN0ZWFkXG4gICAgY29udGV4dC5vblNhdmUodGhpcy5nZXRDdXJyZW50VmFsdWUoKSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdmFsdWUgdG8gYXBwcm9wcmlhdGUgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBUIHtcbiAgICAvLyBWYWx1ZSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGZvcm1hdCBmcm9tIG5pbGUtY2FsZW5kYXJcbiAgICByZXR1cm4gKHZhbHVlIHx8ICcnKSBhcyB1bmtub3duIGFzIFQ7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIC8vIFJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzXG4gICAgaWYgKHRoaXMuY2FsZW5kYXIpIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoeyBldmVudCwgaGFuZGxlciB9KSA9PiB7XG4gICAgICAgIHRoaXMuY2FsZW5kYXI/LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzID0gW107XG4gICAgICBcbiAgICAgIHRoaXMuY2FsZW5kYXIucmVtb3ZlKCk7XG4gICAgICB0aGlzLmNhbGVuZGFyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIGZvY3VzKCk6IHZvaWQge1xuICAgIHRoaXMuY2FsZW5kYXI/LmZvY3VzKCk7XG4gIH1cblxuICBnZXRDdXJyZW50VmFsdWUoKTogVCB7XG4gICAgaWYgKCF0aGlzLmNhbGVuZGFyKSByZXR1cm4gJycgYXMgdW5rbm93biBhcyBUO1xuICAgIFxuICAgIC8vIE5pbGVDYWxlbmRhci52YWx1ZSBpcyBhIERhdGUgb2JqZWN0LCBjb252ZXJ0IHRvIElTTyBzdHJpbmcgZm9ybWF0XG4gICAgaWYgKHRoaXMuY2FsZW5kYXIudmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBjb25zdCB5ZWFyID0gdGhpcy5jYWxlbmRhci52YWx1ZS5nZXRGdWxsWWVhcigpO1xuICAgICAgY29uc3QgbW9udGggPSBTdHJpbmcodGhpcy5jYWxlbmRhci52YWx1ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIGNvbnN0IGRheSA9IFN0cmluZyh0aGlzLmNhbGVuZGFyLnZhbHVlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKTtcbiAgICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gIGFzIHVua25vd24gYXMgVDtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuICcnIGFzIHVua25vd24gYXMgVDtcbiAgfVxufVxuIl19
|
|
@@ -1,188 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Custom editor using NileDatePicker from @aquera/nile-elements
|
|
3
|
-
* Supports both single date and range selection with slot-based trigger div
|
|
4
|
-
* Returns string values for both modes:
|
|
5
|
-
* - Single mode: 'YYYY-MM-DD'
|
|
6
|
-
* - Range mode: 'YYYY-MM-DD - YYYY-MM-DD'
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* Custom editor using NileDatePicker component
|
|
10
|
-
* Supports both single date and range selection
|
|
11
|
-
* @template T The value type - string for both single and range modes
|
|
12
|
-
* Single mode: 'YYYY-MM-DD'
|
|
13
|
-
* Range mode: 'YYYY-MM-DD - YYYY-MM-DD'
|
|
14
|
-
*/
|
|
15
|
-
export class NileDatePickerEditor {
|
|
16
|
-
constructor(options) {
|
|
17
|
-
this.options = options;
|
|
18
|
-
this.acceptsInitialKeypress = false;
|
|
19
|
-
this.eventListeners = [];
|
|
20
|
-
}
|
|
21
|
-
edit(context) {
|
|
22
|
-
if (!context.container) {
|
|
23
|
-
console.warn('NileDatePickerEditor requires a container element');
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
// Create NileDatePicker using document.createElement
|
|
27
|
-
this.datePicker = document.createElement('nile-date-picker');
|
|
28
|
-
this.datePicker.className = 'st-cell-editor st-nile-date-picker-editor';
|
|
29
|
-
// Apply styles for cell fitting
|
|
30
|
-
this.datePicker.style.width = 'inherit';
|
|
31
|
-
this.datePicker.style.height = 'inherit';
|
|
32
|
-
this.datePicker.style.boxSizing = 'border-box';
|
|
33
|
-
// Create trigger div with slot
|
|
34
|
-
this.triggerDiv = document.createElement('div');
|
|
35
|
-
this.triggerDiv.setAttribute('slot', 'trigger');
|
|
36
|
-
this.triggerDiv.setAttribute('contenteditable', 'false');
|
|
37
|
-
this.triggerDiv.style.width = '100%';
|
|
38
|
-
this.triggerDiv.style.minHeight = '28px';
|
|
39
|
-
this.triggerDiv.style.cursor = 'pointer';
|
|
40
|
-
this.triggerDiv.style.boxSizing = 'border-box';
|
|
41
|
-
// Set initial value
|
|
42
|
-
this.setInitialValue(context.value);
|
|
43
|
-
// Apply configuration options
|
|
44
|
-
this.applyOptions();
|
|
45
|
-
// Append trigger to date picker (slot-based)
|
|
46
|
-
this.datePicker.appendChild(this.triggerDiv);
|
|
47
|
-
// Set up event listeners
|
|
48
|
-
this.setupEventListeners(context);
|
|
49
|
-
// Append to container
|
|
50
|
-
context.container.innerHTML = '';
|
|
51
|
-
context.container.appendChild(this.datePicker);
|
|
52
|
-
// Auto focus and open the date picker
|
|
53
|
-
if (this.options?.autoFocus !== false) {
|
|
54
|
-
setTimeout(() => {
|
|
55
|
-
this.triggerDiv?.focus();
|
|
56
|
-
// Trigger a click to open the date picker dropdown
|
|
57
|
-
this.triggerDiv?.click();
|
|
58
|
-
}, 0);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Set initial value in the trigger div
|
|
63
|
-
*/
|
|
64
|
-
setInitialValue(value) {
|
|
65
|
-
if (!this.triggerDiv)
|
|
66
|
-
return;
|
|
67
|
-
if (!value) {
|
|
68
|
-
this.triggerDiv.textContent = '';
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
// Both single and range modes use string value
|
|
72
|
-
this.triggerDiv.textContent = String(value);
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Apply configuration options to the date picker
|
|
76
|
-
* Note: Trigger is now a simple div, so input-specific options are not applied
|
|
77
|
-
*/
|
|
78
|
-
applyOptions() {
|
|
79
|
-
if (!this.datePicker)
|
|
80
|
-
return;
|
|
81
|
-
// Configure NileDatePicker
|
|
82
|
-
const dateFormat = this.options?.dateFormat || 'YYYY-MM-DD';
|
|
83
|
-
this.datePicker.setAttribute('dateFormat', dateFormat);
|
|
84
|
-
if (this.options?.range) {
|
|
85
|
-
this.datePicker.setAttribute('range', String(this.options.range));
|
|
86
|
-
}
|
|
87
|
-
if (this.options?.syncDatePicker) {
|
|
88
|
-
this.datePicker.setAttribute('syncDatePicker', String(this.options.syncDatePicker));
|
|
89
|
-
}
|
|
90
|
-
// Trigger div styling (disabled state can be indicated with opacity)
|
|
91
|
-
if (this.triggerDiv && this.options?.disabled) {
|
|
92
|
-
this.triggerDiv.style.opacity = '0.5';
|
|
93
|
-
this.triggerDiv.style.pointerEvents = 'none';
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Set up all event listeners with proper cleanup tracking
|
|
98
|
-
*/
|
|
99
|
-
setupEventListeners(context) {
|
|
100
|
-
if (!this.datePicker || !this.triggerDiv)
|
|
101
|
-
return;
|
|
102
|
-
const validateOnSave = this.options?.validateOnSave !== false;
|
|
103
|
-
// Keyboard events on trigger div
|
|
104
|
-
const keydownHandler = (e) => {
|
|
105
|
-
const keyEvent = e;
|
|
106
|
-
if (keyEvent.key === 'Enter') {
|
|
107
|
-
keyEvent.preventDefault();
|
|
108
|
-
keyEvent.stopPropagation();
|
|
109
|
-
this.saveValue(context, validateOnSave);
|
|
110
|
-
}
|
|
111
|
-
else if (keyEvent.key === 'Escape') {
|
|
112
|
-
keyEvent.preventDefault();
|
|
113
|
-
keyEvent.stopPropagation();
|
|
114
|
-
context.onCancel();
|
|
115
|
-
}
|
|
116
|
-
else if (keyEvent.key === 'Tab') {
|
|
117
|
-
keyEvent.preventDefault();
|
|
118
|
-
keyEvent.stopPropagation();
|
|
119
|
-
this.saveValue(context, validateOnSave);
|
|
120
|
-
}
|
|
121
|
-
else {
|
|
122
|
-
// Prevent all other keypresses from typing into the div
|
|
123
|
-
keyEvent.preventDefault();
|
|
124
|
-
}
|
|
125
|
-
};
|
|
126
|
-
this.triggerDiv.addEventListener('keydown', keydownHandler);
|
|
127
|
-
this.eventListeners.push({ event: 'keydown', handler: keydownHandler });
|
|
128
|
-
// nile-change event on date picker
|
|
129
|
-
const changeHandler = (e) => {
|
|
130
|
-
const customEvent = e;
|
|
131
|
-
// NileDatePicker detail has startDate and endDate, not a single value
|
|
132
|
-
const detail = customEvent.detail;
|
|
133
|
-
let dateValue = '';
|
|
134
|
-
if (detail.startDate && detail.endDate) {
|
|
135
|
-
// Range mode: combine startDate and endDate
|
|
136
|
-
dateValue = `${detail.startDate} - ${detail.endDate}`;
|
|
137
|
-
}
|
|
138
|
-
else if (detail.startDate) {
|
|
139
|
-
// Single mode: only startDate
|
|
140
|
-
dateValue = detail.startDate;
|
|
141
|
-
}
|
|
142
|
-
context.onSave(this.parseValue(dateValue));
|
|
143
|
-
};
|
|
144
|
-
this.datePicker.addEventListener('nile-change', changeHandler);
|
|
145
|
-
this.eventListeners.push({ event: 'nile-change', handler: changeHandler });
|
|
146
|
-
}
|
|
147
|
-
/**
|
|
148
|
-
* Save value with optional validation
|
|
149
|
-
*/
|
|
150
|
-
saveValue(context, validate) {
|
|
151
|
-
if (!this.datePicker)
|
|
152
|
-
return;
|
|
153
|
-
context.onSave(this.getCurrentValue());
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Parse value from string to appropriate type
|
|
157
|
-
*/
|
|
158
|
-
parseValue(value) {
|
|
159
|
-
// Both single and range modes return string
|
|
160
|
-
// Single mode: 'YYYY-MM-DD'
|
|
161
|
-
// Range mode: 'YYYY-MM-DD - YYYY-MM-DD'
|
|
162
|
-
return (value || '');
|
|
163
|
-
}
|
|
164
|
-
getCurrentValue() {
|
|
165
|
-
if (!this.triggerDiv) {
|
|
166
|
-
return '';
|
|
167
|
-
}
|
|
168
|
-
return this.parseValue(this.triggerDiv.textContent ?? '');
|
|
169
|
-
}
|
|
170
|
-
destroy() {
|
|
171
|
-
if (this.datePicker || this.triggerDiv) {
|
|
172
|
-
this.eventListeners.forEach(({ event, handler }) => {
|
|
173
|
-
this.datePicker?.removeEventListener(event, handler);
|
|
174
|
-
this.triggerDiv?.removeEventListener(event, handler);
|
|
175
|
-
});
|
|
176
|
-
this.eventListeners = [];
|
|
177
|
-
if (this.datePicker) {
|
|
178
|
-
this.datePicker.remove();
|
|
179
|
-
this.datePicker = undefined;
|
|
180
|
-
}
|
|
181
|
-
this.triggerDiv = undefined;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
focus() {
|
|
185
|
-
this.triggerDiv?.focus();
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmlsZS1kYXRlLXBpY2tlci1lZGl0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC10YWJsZS9zcmMvbGliL2VkaXRvcnMvbmlsZS1kYXRlLXBpY2tlci1lZGl0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBa0VIOzs7Ozs7R0FNRztBQUNILE1BQU0sT0FBTyxvQkFBb0I7SUFPL0IsWUFBNkIsT0FBcUM7UUFBckMsWUFBTyxHQUFQLE9BQU8sQ0FBOEI7UUFObEUsMkJBQXNCLEdBQUcsS0FBSyxDQUFDO1FBSXZCLG1CQUFjLEdBQXFELEVBQUUsQ0FBQztJQUVULENBQUM7SUFFdEUsSUFBSSxDQUFDLE9BQTZCO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQ3RCLE9BQU8sQ0FBQyxJQUFJLENBQUMsbURBQW1ELENBQUMsQ0FBQztZQUNsRSxPQUFPO1NBQ1I7UUFFRCxxREFBcUQ7UUFDckQsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEdBQUcsMkNBQTJDLENBQUM7UUFFeEUsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDeEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQztRQUN6QyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxTQUFTLEdBQUcsWUFBWSxDQUFDO1FBRS9DLCtCQUErQjtRQUMvQixJQUFJLENBQUMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxDQUFD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UUFDNUIsd0NBQXdDO1FBQ3hDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFpQixDQUFDO0lBQ3ZDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDcEIsT0FBTyxFQUFrQixDQUFDO1NBQzNCO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDdEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFO2dCQUNqRCxJQUFJLENBQUMsVUFBVSxFQUFFLG1CQUFtQixDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLFVBQVUsRUFBRSxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkQsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUV6QixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO2FBQzdCO1lBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7U0FDN0I7SUFDSCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDM0IsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVEYXRlUGlja2VyIGZyb20gQGFxdWVyYS9uaWxlLWVsZW1lbnRzXG4gKiBTdXBwb3J0cyBib3RoIHNpbmdsZSBkYXRlIGFuZCByYW5nZSBzZWxlY3Rpb24gd2l0aCBzbG90LWJhc2VkIHRyaWdnZXIgZGl2XG4gKiBSZXR1cm5zIHN0cmluZyB2YWx1ZXMgZm9yIGJvdGggbW9kZXM6XG4gKiAgIC0gU2luZ2xlIG1vZGU6ICdZWVlZLU1NLUREJ1xuICogICAtIFJhbmdlIG1vZGU6ICdZWVlZLU1NLUREIC0gWVlZWS1NTS1ERCdcbiAqL1xuXG5pbXBvcnQgeyBDZWxsRWRpdG9yLCBDZWxsRWRpdG9yQ29udGV4dCB9IGZyb20gJy4uL21vZGVscy9jZWxsLXN0cmF0ZWdpZXMuaW50ZXJmYWNlJztcblxuLyoqXG4gKiBEYXRlIHJhbmdlIHZhbHVlIGludGVyZmFjZSAoa2VwdCBmb3IgcmVmZXJlbmNlIGJ1dCBub3QgdXNlZCBhcyByZXR1cm4gdHlwZSlcbiAqIFRoZSBlZGl0b3IgcmV0dXJucyBzdHJpbmcgdmFsdWVzIGluc3RlYWRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEYXRlUmFuZ2Uge1xuICAvKiogU3RhcnQgZGF0ZSBpbiBJU08gZm9ybWF0IChZWVlZLU1NLUREKSAqL1xuICBzdGFydERhdGU6IHN0cmluZztcbiAgLyoqIEVuZCBkYXRlIGluIElTTyBmb3JtYXQgKFlZWVktTU0tREQpICovXG4gIGVuZERhdGU6IHN0cmluZztcbn1cblxuLyoqXG4gKiBPcHRpb25zIGludGVyZmFjZSBmb3IgTmlsZURhdGVQaWNrZXJFZGl0b3JcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOaWxlRGF0ZVBpY2tlckVkaXRvck9wdGlvbnMge1xuICAvLyBCYXNpYyBwcm9wZXJ0aWVzXG4gIC8qKiBQbGFjZWhvbGRlciB0ZXh0IHRvIHNob3cgd2hlbiBubyBkYXRlIGlzIHNlbGVjdGVkICovXG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICAvKiogTGFiZWwgZm9yIHRoZSB0cmlnZ2VyIGlucHV0ICovXG4gIGxhYmVsPzogc3RyaW5nO1xuICAvKiogRGlzYWJsZSB0aGUgZGF0ZSBwaWNrZXIgY29udHJvbCAqL1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIC8qKiBIZWxwIHRleHQgdG8gZGlzcGxheSBiZWxvdyB0aGUgY29udHJvbCAqL1xuICBoZWxwVGV4dD86IHN0cmluZztcbiAgXG4gIC8vIERhdGUgY29uZmlndXJhdGlvblxuICAvKiogRGF0ZSBmb3JtYXQgZm9yIGRpc3BsYXkgKGRlZmF1bHQ6ICdZWVlZLU1NLUREJykgKi9cbiAgZGF0ZUZvcm1hdD86IHN0cmluZztcbiAgLyoqIEVuYWJsZSByYW5nZSBzZWxlY3Rpb24gbW9kZSAqL1xuICByYW5nZT86IGJvb2xlYW47XG4gIC8qKiBTeW5jIGRhdGUgcGlja2VycyBpbiByYW5nZSBtb2RlICovXG4gIHN5bmNEYXRlUGlja2VyPzogYm9vbGVhbjtcbiAgXG4gIC8vIEJlaGF2aW9yIG9wdGlvbnNcbiAgLyoqIFNob3cgY2xlYXIgYnV0dG9uIGZvciByZW1vdmluZyBkYXRlICovXG4gIGNsZWFyYWJsZT86IGJvb2xlYW47XG4gIC8qKiBBdXRvLWZvY3VzIHRoZSBkYXRlIHBpY2tlciB3aGVuIGVkaXRvciBvcGVucyAqL1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBcbiAgLy8gVmlzdWFsIHN0YXRlc1xuICAvKiogV2FybmluZyBzdGF0ZSBzdHlsaW5nICovXG4gIHdhcm5pbmc/OiBib29sZWFuO1xuICAvKiogRXJyb3Igc3RhdGUgc3R5bGluZyAqL1xuICBlcnJvcj86IGJvb2xlYW47XG4gIC8qKiBTdWNjZXNzIHN0YXRlIHN0eWxpbmcgKi9cbiAgc3VjY2Vzcz86IGJvb2xlYW47XG4gIC8qKiBFcnJvciBtZXNzYWdlIHRvIGRpc3BsYXkgKi9cbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xuICBcbiAgLy8gU3R5bGluZyAoZm9yIHRyaWdnZXIgaW5wdXQpXG4gIC8qKiBTaXplIG9mIHRoZSBkYXRlIHBpY2tlciBjb250cm9sICovXG4gIHNpemU/OiBudW1iZXI7XG4gIC8qKiBGaWxsZWQgc3R5bGUgZm9yIHRoZSBpbnB1dCAqL1xuICBmaWxsZWQ/OiBib29sZWFuO1xuICAvKiogUGlsbCBzdHlsZSBmb3IgdGhlIGlucHV0ICovXG4gIHBpbGw/OiBib29sZWFuO1xuICBcbiAgLy8gQWR2YW5jZWRcbiAgLyoqIFZhbGlkYXRlIGJlZm9yZSBzYXZpbmcgKGRlZmF1bHQ6IHRydWUpICovXG4gIHZhbGlkYXRlT25TYXZlPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDdXN0b20gZWRpdG9yIHVzaW5nIE5pbGVEYXRlUGlja2VyIGNvbXBvbmVudFxuICogU3VwcG9ydHMgYm90aCBzaW5nbGUgZGF0ZSBhbmQgcmFuZ2Ugc2VsZWN0aW9uXG4gKiBAdGVtcGxhdGUgVCBUaGUgdmFsdWUgdHlwZSAtIHN0cmluZyBmb3IgYm90aCBzaW5nbGUgYW5kIHJhbmdlIG1vZGVzXG4gKiAgICAgICAgICAgIFNpbmdsZSBtb2RlOiAnWVlZWS1NTS1ERCdcbiAqICAgICAgICAgICAgUmFuZ2UgbW9kZTogJ1lZWVktTU0tREQgLSBZWVlZLU1NLUREJ1xuICovXG5leHBvcnQgY2xhc3MgTmlsZURhdGVQaWNrZXJFZGl0b3I8VCA9IHN0cmluZz4gaW1wbGVtZW50cyBDZWxsRWRpdG9yPFQ+IHtcbiAgYWNjZXB0c0luaXRpYWxLZXlwcmVzcyA9IGZhbHNlO1xuICBcbiAgcHJpdmF0ZSBkYXRlUGlja2VyPzogYW55O1xuICBwcml2YXRlIHRyaWdnZXJEaXY/OiBhbnk7XG4gIHByaXZhdGUgZXZlbnRMaXN0ZW5lcnM6IEFycmF5PHsgZXZlbnQ6IHN0cmluZzsgaGFuZGxlcjogRXZlbnRMaXN0ZW5lciB9PiA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgb3B0aW9ucz86IE5pbGVEYXRlUGlja2VyRWRpdG9yT3B0aW9ucykge31cblxuICBlZGl0KGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PFQ+KTogdm9pZCB7XG4gICAgaWYgKCFjb250ZXh0LmNvbnRhaW5lcikge1xuICAgICAgY29uc29sZS53YXJuKCdOaWxlRGF0ZVBpY2tlckVkaXRvciByZXF1aXJlcyBhIGNvbnRhaW5lciBlbGVtZW50Jyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIE5pbGVEYXRlUGlja2VyIHVzaW5nIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnRcbiAgICB0aGlzLmRhdGVQaWNrZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCduaWxlLWRhdGUtcGlja2VyJyk7XG4gICAgdGhpcy5kYXRlUGlja2VyLmNsYXNzTmFtZSA9ICdzdC1jZWxsLWVkaXRvciBzdC1uaWxlLWRhdGUtcGlja2VyLWVkaXRvcic7XG4gICAgXG4gICAgLy8gQXBwbHkgc3R5bGVzIGZvciBjZWxsIGZpdHRpbmdcbiAgICB0aGlzLmRhdGVQaWNrZXIuc3R5bGUud2lkdGggPSAnaW5oZXJpdCc7XG4gICAgdGhpcy5kYXRlUGlja2VyLnN0eWxlLmhlaWdodCA9ICdpbmhlcml0JztcbiAgICB0aGlzLmRhdGVQaWNrZXIuc3R5bGUuYm94U2l6aW5nID0gJ2JvcmRlci1ib3gnO1xuICAgIFxuICAgIC8vIENyZWF0ZSB0cmlnZ2VyIGRpdiB3aXRoIHNsb3RcbiAgICB0aGlzLnRyaWdnZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB0aGlzLnRyaWdnZXJEaXYuc2V0QXR0cmlidXRlKCdzbG90JywgJ3RyaWdnZXInKTtcbiAgICB0aGlzLnRyaWdnZXJEaXYuc2V0QXR0cmlidXRlKCdjb250ZW50ZWRpdGFibGUnLCAnZmFsc2UnKTtcbiAgICB0aGlzLnRyaWdnZXJEaXYuc3R5bGUud2lkdGggPSAnMTAwJSc7XG4gICAgdGhpcy50cmlnZ2VyRGl2LnN0eWxlLm1pbkhlaWdodCA9ICcyOHB4JztcbiAgICB0aGlzLnRyaWdnZXJEaXYuc3R5bGUuY3Vyc29yID0gJ3BvaW50ZXInO1xuICAgIHRoaXMudHJpZ2dlckRpdi5zdHlsZS5ib3hTaXppbmcgPSAnYm9yZGVyLWJveCc7XG4gICAgXG4gICAgLy8gU2V0IGluaXRpYWwgdmFsdWVcbiAgICB0aGlzLnNldEluaXRpYWxWYWx1ZShjb250ZXh0LnZhbHVlKTtcbiAgICBcbiAgICBcbiAgICAvLyBBcHBseSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICB0aGlzLmFwcGx5T3B0aW9ucygpO1xuICAgIFxuICAgIC8vIEFwcGVuZCB0cmlnZ2VyIHRvIGRhdGUgcGlja2VyIChzbG90LWJhc2VkKVxuICAgIHRoaXMuZGF0ZVBpY2tlci5hcHBlbmRDaGlsZCh0aGlzLnRyaWdnZXJEaXYpO1xuICAgIFxuICAgIC8vIFNldCB1cCBldmVudCBsaXN0ZW5lcnNcbiAgICB0aGlzLnNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dCk7XG4gICAgXG4gICAgLy8gQXBwZW5kIHRvIGNvbnRhaW5lclxuICAgIGNvbnRleHQuY29udGFpbmVyLmlubmVySFRNTCA9ICcnO1xuICAgIGNvbnRleHQuY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuZGF0ZVBpY2tlcik7XG4gICAgXG4gICAgLy8gQXV0byBmb2N1cyBhbmQgb3BlbiB0aGUgZGF0ZSBwaWNrZXJcbiAgICBpZiAodGhpcy5vcHRpb25zPy5hdXRvRm9jdXMgIT09IGZhbHNlKSB7XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGhpcy50cmlnZ2VyRGl2Py5mb2N1cygpO1xuICAgICAgICAvLyBUcmlnZ2VyIGEgY2xpY2sgdG8gb3BlbiB0aGUgZGF0ZSBwaWNrZXIgZHJvcGRvd25cbiAgICAgICAgdGhpcy50cmlnZ2VyRGl2Py5jbGljaygpO1xuICAgICAgfSwgMCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFNldCBpbml0aWFsIHZhbHVlIGluIHRoZSB0cmlnZ2VyIGRpdlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRJbml0aWFsVmFsdWUodmFsdWU6IFQgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnRyaWdnZXJEaXYpIHJldHVybjtcbiAgICBcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICB0aGlzLnRyaWdnZXJEaXYudGV4dENvbnRlbnQgPSAnJztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgXG4gICAgLy8gQm90aCBzaW5nbGUgYW5kIHJhbmdlIG1vZGVzIHVzZSBzdHJpbmcgdmFsdWVcbiAgICB0aGlzLnRyaWdnZXJEaXYudGV4dENvbnRlbnQgPSBTdHJpbmcodmFsdWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byB0aGUgZGF0ZSBwaWNrZXJcbiAgICogTm90ZTogVHJpZ2dlciBpcyBub3cgYSBzaW1wbGUgZGl2LCBzbyBpbnB1dC1zcGVjaWZpYyBvcHRpb25zIGFyZSBub3QgYXBwbGllZFxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseU9wdGlvbnMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRhdGVQaWNrZXIpIHJldHVybjtcbiAgICBcbiAgICAvLyBDb25maWd1cmUgTmlsZURhdGVQaWNrZXJcbiAgICBjb25zdCBkYXRlRm9ybWF0ID0gdGhpcy5vcHRpb25zPy5kYXRlRm9ybWF0IHx8ICdZWVlZLU1NLUREJztcbiAgICB0aGlzLmRhdGVQaWNrZXIuc2V0QXR0cmlidXRlKCdkYXRlRm9ybWF0JywgZGF0ZUZvcm1hdCk7XG4gICAgXG4gICAgaWYgKHRoaXMub3B0aW9ucz8ucmFuZ2UpIHtcbiAgICAgIHRoaXMuZGF0ZVBpY2tlci5zZXRBdHRyaWJ1dGUoJ3JhbmdlJywgU3RyaW5nKHRoaXMub3B0aW9ucy5yYW5nZSkpO1xuICAgIH1cbiAgICBcbiAgICBpZiAodGhpcy5vcHRpb25zPy5zeW5jRGF0ZVBpY2tlcikge1xuICAgICAgdGhpcy5kYXRlUGlja2VyLnNldEF0dHJpYnV0ZSgnc3luY0RhdGVQaWNrZXInLCBTdHJpbmcodGhpcy5vcHRpb25zLnN5bmNEYXRlUGlja2VyKSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFRyaWdnZXIgZGl2IHN0eWxpbmcgKGRpc2FibGVkIHN0YXRlIGNhbiBiZSBpbmRpY2F0ZWQgd2l0aCBvcGFjaXR5KVxuICAgIGlmICh0aGlzLnRyaWdnZXJEaXYgJiYgdGhpcy5vcHRpb25zPy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy50cmlnZ2VyRGl2LnN0eWxlLm9wYWNpdHkgPSAnMC41JztcbiAgICAgIHRoaXMudHJpZ2dlckRpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIGV2ZW50IGxpc3RlbmVycyB3aXRoIHByb3BlciBjbGVhbnVwIHRyYWNraW5nXG4gICAqL1xuICBwcml2YXRlIHNldHVwRXZlbnRMaXN0ZW5lcnMoY29udGV4dDogQ2VsbEVkaXRvckNvbnRleHQ8VD4pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGF0ZVBpY2tlciB8fCAhdGhpcy50cmlnZ2VyRGl2KSByZXR1cm47XG4gICAgXG4gICAgY29uc3QgdmFsaWRhdGVPblNhdmUgPSB0aGlzLm9wdGlvbnM/LnZhbGlkYXRlT25TYXZlICE9PSBmYWxzZTtcbiAgICBcbiAgICAvLyBLZXlib2FyZCBldmVudHMgb24gdHJpZ2dlciBkaXZcbiAgICBjb25zdCBrZXlkb3duSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3Qga2V5RXZlbnQgPSBlIGFzIEtleWJvYXJkRXZlbnQ7XG4gICAgICBpZiAoa2V5RXZlbnQua2V5ID09PSAnRW50ZXInKSB7XG4gICAgICAgIGtleUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGtleUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnNhdmVWYWx1ZShjb250ZXh0LCB2YWxpZGF0ZU9uU2F2ZSk7XG4gICAgICB9IGVsc2UgaWYgKGtleUV2ZW50LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAga2V5RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGNvbnRleHQub25DYW5jZWwoKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5RXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgICBrZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgdGhpcy5zYXZlVmFsdWUoY29udGV4dCwgdmFsaWRhdGVPblNhdmUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUHJldmVudCBhbGwgb3RoZXIga2V5cHJlc3NlcyBmcm9tIHR5cGluZyBpbnRvIHRoZSBkaXZcbiAgICAgICAga2V5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHRoaXMudHJpZ2dlckRpdi5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywga2V5ZG93bkhhbmRsZXIpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMucHVzaCh7IGV2ZW50OiAna2V5ZG93bicsIGhhbmRsZXI6IGtleWRvd25IYW5kbGVyIH0pO1xuICAgIFxuICAgIC8vIG5pbGUtY2hhbmdlIGV2ZW50IG9uIGRhdGUgcGlja2VyXG4gICAgY29uc3QgY2hhbmdlSGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgY29uc3QgY3VzdG9tRXZlbnQgPSBlIGFzIEN1c3RvbUV2ZW50O1xuICAgICAgLy8gTmlsZURhdGVQaWNrZXIgZGV0YWlsIGhhcyBzdGFydERhdGUgYW5kIGVuZERhdGUsIG5vdCBhIHNpbmdsZSB2YWx1ZVxuICAgICAgY29uc3QgZGV0YWlsID0gY3VzdG9tRXZlbnQuZGV0YWlsO1xuICAgICAgbGV0IGRhdGVWYWx1ZSA9ICcnO1xuICAgICAgXG4gICAgICBpZiAoZGV0YWlsLnN0YXJ0RGF0ZSAmJiBkZXRhaWwuZW5kRGF0ZSkge1xuICAgICAgICAvLyBSYW5nZSBtb2RlOiBjb21iaW5lIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZVxuICAgICAgICBkYXRlVmFsdWUgPSBgJHtkZXRhaWwuc3RhcnREYXRlfSAtICR7ZGV0YWlsLmVuZERhdGV9YDtcbiAgICAgIH0gZWxzZSBpZiAoZGV0YWlsLnN0YXJ0RGF0ZSkge1xuICAgICAgICAvLyBTaW5nbGUgbW9kZTogb25seSBzdGFydERhdGVcbiAgICAgICAgZGF0ZVZhbHVlID0gZGV0YWlsLnN0YXJ0RGF0ZTtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgY29udGV4dC5vblNhdmUodGhpcy5wYXJzZVZhbHVlKGRhdGVWYWx1ZSkpO1xuICAgIH07XG4gICAgdGhpcy5kYXRlUGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoJ25pbGUtY2hhbmdlJywgY2hhbmdlSGFuZGxlcik7XG4gICAgdGhpcy5ldmVudExpc3RlbmVycy5wdXNoKHsgZXZlbnQ6ICduaWxlLWNoYW5nZScsIGhhbmRsZXI6IGNoYW5nZUhhbmRsZXIgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB2YWx1ZSB3aXRoIG9wdGlvbmFsIHZhbGlkYXRpb25cbiAgICovXG4gIHByaXZhdGUgc2F2ZVZhbHVlKGNvbnRleHQ6IENlbGxFZGl0b3JDb250ZXh0PFQ+LCB2YWxpZGF0ZTogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICghdGhpcy5kYXRlUGlja2VyKSByZXR1cm47XG4gICAgY29udGV4dC5vblNhdmUodGhpcy5nZXRDdXJyZW50VmFsdWUoKSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2UgdmFsdWUgZnJvbSBzdHJpbmcgdG8gYXBwcm9wcmlhdGUgdHlwZVxuICAgKi9cbiAgcHJpdmF0ZSBwYXJzZVZhbHVlKHZhbHVlOiBzdHJpbmcpOiBUIHtcbiAgICAvLyBCb3RoIHNpbmdsZSBhbmQgcmFuZ2UgbW9kZXMgcmV0dXJuIHN0cmluZ1xuICAgIC8vIFNpbmdsZSBtb2RlOiAnWVlZWS1NTS1ERCdcbiAgICAvLyBSYW5nZSBtb2RlOiAnWVlZWS1NTS1ERCAtIFlZWVktTU0tREQnXG4gICAgcmV0dXJuICh2YWx1ZSB8fCAnJykgYXMgdW5rbm93biBhcyBUO1xuICB9XG5cbiAgZ2V0Q3VycmVudFZhbHVlKCk6IFQge1xuICAgIGlmICghdGhpcy50cmlnZ2VyRGl2KSB7XG4gICAgICByZXR1cm4gJycgYXMgdW5rbm93biBhcyBUO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdGhpcy5wYXJzZVZhbHVlKHRoaXMudHJpZ2dlckRpdi50ZXh0Q29udGVudCA/PyAnJyk7XG4gIH1cblxuICBkZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRhdGVQaWNrZXIgfHwgdGhpcy50cmlnZ2VyRGl2KSB7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzLmZvckVhY2goKHsgZXZlbnQsIGhhbmRsZXIgfSkgPT4ge1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXI/LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIpO1xuICAgICAgICB0aGlzLnRyaWdnZXJEaXY/LnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnQsIGhhbmRsZXIpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLmV2ZW50TGlzdGVuZXJzID0gW107XG4gICAgICBcbiAgICAgIGlmICh0aGlzLmRhdGVQaWNrZXIpIHtcbiAgICAgICAgdGhpcy5kYXRlUGlja2VyLnJlbW92ZSgpO1xuICAgICAgICB0aGlzLmRhdGVQaWNrZXIgPSB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgICBcbiAgICAgIHRoaXMudHJpZ2dlckRpdiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBmb2N1cygpOiB2b2lkIHtcbiAgICB0aGlzLnRyaWdnZXJEaXY/LmZvY3VzKCk7XG4gIH1cbn1cbiJdfQ==
|