@aquera/ngx-smart-table 0.0.17-alpha → 0.0.19-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.
Files changed (170) hide show
  1. package/{fesm2020 → fesm2022}/aquera-ngx-smart-table.mjs +1579 -2101
  2. package/fesm2022/aquera-ngx-smart-table.mjs.map +1 -0
  3. package/package.json +8 -16
  4. package/types/aquera-ngx-smart-table.d.ts +5909 -0
  5. package/aquera-ngx-smart-table.d.ts +0 -5
  6. package/esm2020/aquera-ngx-smart-table.mjs +0 -5
  7. package/esm2020/lib/builder/components/builder-preview/builder-preview.component.mjs +0 -63
  8. package/esm2020/lib/builder/components/builder-toolbar/builder-toolbar.component.mjs +0 -115
  9. package/esm2020/lib/builder/components/column-editor/column-editor.component.mjs +0 -206
  10. package/esm2020/lib/builder/components/column-list/column-list.component.mjs +0 -125
  11. package/esm2020/lib/builder/components/definition-builder/definition-builder.component.mjs +0 -105
  12. package/esm2020/lib/builder/components/table-config-editor/table-config-editor.component.mjs +0 -132
  13. package/esm2020/lib/builder/definition-builder.module.mjs +0 -70
  14. package/esm2020/lib/builder/models/builder-state.interface.mjs +0 -5
  15. package/esm2020/lib/builder/services/definition-builder.service.mjs +0 -251
  16. package/esm2020/lib/builder/services/definition-export.service.mjs +0 -167
  17. package/esm2020/lib/builder/services/definition-import.service.mjs +0 -193
  18. package/esm2020/lib/builder/services/sample-data-generator.service.mjs +0 -126
  19. package/esm2020/lib/builder/utils/config-validator.util.mjs +0 -165
  20. package/esm2020/lib/builder/utils/typescript-generator.util.mjs +0 -206
  21. package/esm2020/lib/editors/index.mjs +0 -9
  22. package/esm2020/lib/editors/nile-autocomplete-editor.mjs +0 -228
  23. package/esm2020/lib/editors/nile-calendar-editor.mjs +0 -211
  24. package/esm2020/lib/editors/nile-date-picker-editor.mjs +0 -188
  25. package/esm2020/lib/editors/nile-input-editor.mjs +0 -235
  26. package/esm2020/lib/editors/nile-select-editor.mjs +0 -498
  27. package/esm2020/lib/factories/column-config.factory.mjs +0 -231
  28. package/esm2020/lib/models/autosave-config.interface.mjs +0 -8
  29. package/esm2020/lib/models/base-column-config.class.mjs +0 -253
  30. package/esm2020/lib/models/cell-strategies.interface.mjs +0 -6
  31. package/esm2020/lib/models/cell-types.mjs +0 -147
  32. package/esm2020/lib/models/column-action.interface.mjs +0 -6
  33. package/esm2020/lib/models/column-config.interface.mjs +0 -43
  34. package/esm2020/lib/models/column-config.utils.mjs +0 -101
  35. package/esm2020/lib/models/row-action.interface.mjs +0 -5
  36. package/esm2020/lib/models/row-validator.interface.mjs +0 -2
  37. package/esm2020/lib/models/schema-validation.interface.mjs +0 -2
  38. package/esm2020/lib/models/sheet-action.interface.mjs +0 -5
  39. package/esm2020/lib/models/sheet-config.interface.mjs +0 -5
  40. package/esm2020/lib/models/table-config.interface.mjs +0 -107
  41. package/esm2020/lib/models/table-validator.interface.mjs +0 -2
  42. package/esm2020/lib/models/workbook-action.interface.mjs +0 -5
  43. package/esm2020/lib/models/workbook-config.interface.mjs +0 -5
  44. package/esm2020/lib/renderer/components/st-add-column-button/st-add-column-button.component.mjs +0 -24
  45. package/esm2020/lib/renderer/components/st-cell/st-cell.component.mjs +0 -397
  46. package/esm2020/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.mjs +0 -103
  47. package/esm2020/lib/renderer/components/st-column-filter/st-column-filter.component.mjs +0 -383
  48. package/esm2020/lib/renderer/components/st-column-menu/st-column-menu.component.mjs +0 -232
  49. package/esm2020/lib/renderer/components/st-column-visibility/st-column-visibility.component.mjs +0 -97
  50. package/esm2020/lib/renderer/components/st-header/st-header.component.mjs +0 -157
  51. package/esm2020/lib/renderer/components/st-pagination/st-pagination.component.mjs +0 -87
  52. package/esm2020/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.mjs +0 -167
  53. package/esm2020/lib/renderer/components/st-sheet/st-sheet.component.mjs +0 -165
  54. package/esm2020/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.mjs +0 -112
  55. package/esm2020/lib/renderer/components/st-table/st-table.component.mjs +0 -1453
  56. package/esm2020/lib/renderer/components/st-table-actions/st-table-actions.component.mjs +0 -169
  57. package/esm2020/lib/renderer/components/st-workbook/st-workbook.component.mjs +0 -581
  58. package/esm2020/lib/renderer/directives/click-outside.directive.mjs +0 -28
  59. package/esm2020/lib/renderer/directives/st-column-resize.directive.mjs +0 -108
  60. package/esm2020/lib/renderer/directives/st-keyboard-navigation.directive.mjs +0 -83
  61. package/esm2020/lib/renderer/models/cell-state.interface.mjs +0 -66
  62. package/esm2020/lib/renderer/models/cell.class.mjs +0 -389
  63. package/esm2020/lib/renderer/models/row-validation-state.interface.mjs +0 -7
  64. package/esm2020/lib/renderer/models/sheet-state.class.mjs +0 -90
  65. package/esm2020/lib/renderer/models/sheet-state.interface.mjs +0 -5
  66. package/esm2020/lib/renderer/models/table-state.class.mjs +0 -871
  67. package/esm2020/lib/renderer/models/table-state.interface.mjs +0 -5
  68. package/esm2020/lib/renderer/models/table-types.mjs +0 -29
  69. package/esm2020/lib/renderer/models/table-validation-state.interface.mjs +0 -7
  70. package/esm2020/lib/renderer/models/workbook-state.class.mjs +0 -174
  71. package/esm2020/lib/renderer/models/workbook-state.interface.mjs +0 -5
  72. package/esm2020/lib/renderer/models/z-index.enum.mjs +0 -55
  73. package/esm2020/lib/schemas/table-config.schema.mjs +0 -472
  74. package/esm2020/lib/services/autosave.service.mjs +0 -92
  75. package/esm2020/lib/services/custom-validation-rules.util.mjs +0 -124
  76. package/esm2020/lib/services/json-schema-validator.service.mjs +0 -216
  77. package/esm2020/lib/services/row-validation.service.mjs +0 -42
  78. package/esm2020/lib/services/validation-logger.service.mjs +0 -177
  79. package/esm2020/lib/services/virtual-scroll.service.mjs +0 -52
  80. package/esm2020/lib/shared/shared-table-components.module.mjs +0 -35
  81. package/esm2020/lib/smart-table.module.mjs +0 -124
  82. package/esm2020/lib/strategies/default-editors.mjs +0 -433
  83. package/esm2020/lib/strategies/default-formatters.mjs +0 -238
  84. package/esm2020/lib/strategies/default-validators.mjs +0 -327
  85. package/esm2020/public-api.mjs +0 -146
  86. package/fesm2015/aquera-ngx-smart-table.mjs +0 -12347
  87. package/fesm2015/aquera-ngx-smart-table.mjs.map +0 -1
  88. package/fesm2020/aquera-ngx-smart-table.mjs.map +0 -1
  89. package/lib/builder/components/builder-preview/builder-preview.component.d.ts +0 -31
  90. package/lib/builder/components/builder-toolbar/builder-toolbar.component.d.ts +0 -53
  91. package/lib/builder/components/column-editor/column-editor.component.d.ts +0 -69
  92. package/lib/builder/components/column-list/column-list.component.d.ts +0 -65
  93. package/lib/builder/components/definition-builder/definition-builder.component.d.ts +0 -58
  94. package/lib/builder/components/table-config-editor/table-config-editor.component.d.ts +0 -32
  95. package/lib/builder/definition-builder.module.d.ts +0 -15
  96. package/lib/builder/models/builder-state.interface.d.ts +0 -93
  97. package/lib/builder/services/definition-builder.service.d.ts +0 -80
  98. package/lib/builder/services/definition-export.service.d.ts +0 -59
  99. package/lib/builder/services/definition-import.service.d.ts +0 -31
  100. package/lib/builder/services/sample-data-generator.service.d.ts +0 -41
  101. package/lib/builder/utils/config-validator.util.d.ts +0 -32
  102. package/lib/builder/utils/typescript-generator.util.d.ts +0 -29
  103. package/lib/editors/index.d.ts +0 -8
  104. package/lib/editors/nile-autocomplete-editor.d.ts +0 -102
  105. package/lib/editors/nile-calendar-editor.d.ts +0 -88
  106. package/lib/editors/nile-date-picker-editor.d.ts +0 -97
  107. package/lib/editors/nile-input-editor.d.ts +0 -67
  108. package/lib/editors/nile-select-editor.d.ts +0 -113
  109. package/lib/factories/column-config.factory.d.ts +0 -73
  110. package/lib/models/autosave-config.interface.d.ts +0 -23
  111. package/lib/models/base-column-config.class.d.ts +0 -115
  112. package/lib/models/cell-strategies.interface.d.ts +0 -188
  113. package/lib/models/cell-types.d.ts +0 -337
  114. package/lib/models/column-action.interface.d.ts +0 -86
  115. package/lib/models/column-config.interface.d.ts +0 -272
  116. package/lib/models/column-config.utils.d.ts +0 -37
  117. package/lib/models/row-action.interface.d.ts +0 -86
  118. package/lib/models/row-validator.interface.d.ts +0 -37
  119. package/lib/models/schema-validation.interface.d.ts +0 -42
  120. package/lib/models/sheet-action.interface.d.ts +0 -59
  121. package/lib/models/sheet-config.interface.d.ts +0 -41
  122. package/lib/models/table-config.interface.d.ts +0 -251
  123. package/lib/models/table-validator.interface.d.ts +0 -40
  124. package/lib/models/workbook-action.interface.d.ts +0 -95
  125. package/lib/models/workbook-config.interface.d.ts +0 -107
  126. package/lib/renderer/components/st-add-column-button/st-add-column-button.component.d.ts +0 -9
  127. package/lib/renderer/components/st-cell/st-cell.component.d.ts +0 -69
  128. package/lib/renderer/components/st-column-editor-modal/st-column-editor-modal.component.d.ts +0 -39
  129. package/lib/renderer/components/st-column-filter/st-column-filter.component.d.ts +0 -139
  130. package/lib/renderer/components/st-column-menu/st-column-menu.component.d.ts +0 -81
  131. package/lib/renderer/components/st-column-visibility/st-column-visibility.component.d.ts +0 -44
  132. package/lib/renderer/components/st-header/st-header.component.d.ts +0 -93
  133. package/lib/renderer/components/st-pagination/st-pagination.component.d.ts +0 -42
  134. package/lib/renderer/components/st-row-actions-dropdown/st-row-actions-dropdown.component.d.ts +0 -67
  135. package/lib/renderer/components/st-sheet/st-sheet.component.d.ts +0 -98
  136. package/lib/renderer/components/st-sheet-actions/st-sheet-actions.component.d.ts +0 -58
  137. package/lib/renderer/components/st-table/st-table.component.d.ts +0 -380
  138. package/lib/renderer/components/st-table-actions/st-table-actions.component.d.ts +0 -77
  139. package/lib/renderer/components/st-workbook/st-workbook.component.d.ts +0 -275
  140. package/lib/renderer/directives/click-outside.directive.d.ts +0 -10
  141. package/lib/renderer/directives/st-column-resize.directive.d.ts +0 -44
  142. package/lib/renderer/directives/st-keyboard-navigation.directive.d.ts +0 -19
  143. package/lib/renderer/models/cell-state.interface.d.ts +0 -118
  144. package/lib/renderer/models/cell.class.d.ts +0 -174
  145. package/lib/renderer/models/row-validation-state.interface.d.ts +0 -27
  146. package/lib/renderer/models/sheet-state.class.d.ts +0 -67
  147. package/lib/renderer/models/sheet-state.interface.d.ts +0 -55
  148. package/lib/renderer/models/table-state.class.d.ts +0 -320
  149. package/lib/renderer/models/table-state.interface.d.ts +0 -18
  150. package/lib/renderer/models/table-types.d.ts +0 -228
  151. package/lib/renderer/models/table-validation-state.interface.d.ts +0 -34
  152. package/lib/renderer/models/workbook-state.class.d.ts +0 -117
  153. package/lib/renderer/models/workbook-state.interface.d.ts +0 -71
  154. package/lib/renderer/models/z-index.enum.d.ts +0 -44
  155. package/lib/schemas/table-config.schema.d.ts +0 -455
  156. package/lib/services/autosave.service.d.ts +0 -73
  157. package/lib/services/custom-validation-rules.util.d.ts +0 -12
  158. package/lib/services/json-schema-validator.service.d.ts +0 -49
  159. package/lib/services/row-validation.service.d.ts +0 -17
  160. package/lib/services/validation-logger.service.d.ts +0 -87
  161. package/lib/services/virtual-scroll.service.d.ts +0 -44
  162. package/lib/shared/shared-table-components.module.d.ts +0 -9
  163. package/lib/smart-table.module.d.ts +0 -26
  164. package/lib/strategies/default-editors.d.ts +0 -109
  165. package/lib/strategies/default-formatters.d.ts +0 -116
  166. package/lib/strategies/default-validators.d.ts +0 -113
  167. package/public-api.d.ts +0 -70
  168. package/src/lib/builder/README.md +0 -30
  169. package/src/lib/editors/README.md +0 -303
  170. package/src/lib/renderer/components/st-column-filter/README.md +0 -286
@@ -1,231 +0,0 @@
1
- /**
2
- * Column configuration factory
3
- * Simplifies creation of common column types with sensible defaults
4
- */
5
- import { DEFAULT_COLUMN_CONFIG } from '../models/column-config.interface';
6
- import { CellDataType } from '../models/cell-types';
7
- import { Cell } from '../renderer/models/cell.class';
8
- import { StringFormatter, NumberFormatter, CurrencyFormatter, DateFormatter, BooleanFormatter } from '../strategies/default-formatters';
9
- import { PatternValidators } from '../strategies/default-validators';
10
- import { TextEditor, NumberEditor, DateEditor, SelectEditor, BooleanEditor } from '../strategies/default-editors';
11
- import { deepMergeColumnConfig } from '../models/column-config.utils';
12
- /**
13
- * Column configuration factory - Factory Pattern
14
- * Provides convenient methods to create pre-configured column types
15
- */
16
- export class ColumnConfigFactory {
17
- /**
18
- * Create a text column
19
- */
20
- static text(key, options) {
21
- const config = deepMergeColumnConfig(DEFAULT_COLUMN_CONFIG, {
22
- key,
23
- header: key.charAt(0).toUpperCase() + key.slice(1),
24
- dataType: CellDataType.STRING,
25
- formatter: new StringFormatter(),
26
- editor: new TextEditor(),
27
- }, options || {});
28
- return {
29
- ...config,
30
- createCell(rowData, rowIndex) {
31
- const valueGetter = options?.valueGetter || ((data) => data[key]);
32
- const value = valueGetter(rowData);
33
- return new Cell(this, value, rowData, rowIndex);
34
- }
35
- };
36
- }
37
- /**
38
- * Create a number column
39
- */
40
- static number(key, options) {
41
- const config = deepMergeColumnConfig(DEFAULT_COLUMN_CONFIG, {
42
- key,
43
- header: key.charAt(0).toUpperCase() + key.slice(1),
44
- dataType: CellDataType.NUMBER,
45
- formatter: new NumberFormatter({ decimals: 2 }),
46
- validator: PatternValidators.custom((val) => typeof val === 'number' && !isNaN(val), 'Must be a valid number'),
47
- editor: new NumberEditor(),
48
- }, options || {});
49
- return {
50
- ...config,
51
- createCell(rowData, rowIndex) {
52
- const valueGetter = options?.valueGetter || ((data) => data[key]);
53
- const value = valueGetter(rowData);
54
- return new Cell(this, value, rowData, rowIndex);
55
- }
56
- };
57
- }
58
- /**
59
- * Create a currency column
60
- */
61
- static currency(key, options) {
62
- const currency = options?.currency || 'USD';
63
- const locale = options?.locale || 'en-US';
64
- const config = deepMergeColumnConfig(DEFAULT_COLUMN_CONFIG, {
65
- key,
66
- header: key.charAt(0).toUpperCase() + key.slice(1),
67
- dataType: CellDataType.NUMBER,
68
- formatter: new CurrencyFormatter({ currency, locale }),
69
- validator: PatternValidators.chain(PatternValidators.custom((val) => typeof val === 'number' && !isNaN(val), 'Must be a valid number'), PatternValidators.range(0, undefined, 'Amount must be positive')),
70
- editor: new NumberEditor({ min: 0, step: 0.01 }),
71
- }, options || {});
72
- return {
73
- ...config,
74
- createCell(rowData, rowIndex) {
75
- const valueGetter = options?.valueGetter || ((data) => data[key]);
76
- const value = valueGetter(rowData);
77
- return new Cell(this, value, rowData, rowIndex);
78
- }
79
- };
80
- }
81
- /**
82
- * Create a date column
83
- */
84
- static date(key, options) {
85
- const dateStyle = options?.dateStyle || 'medium';
86
- const locale = options?.locale || 'en-US';
87
- const config = deepMergeColumnConfig(DEFAULT_COLUMN_CONFIG, {
88
- key,
89
- header: key.charAt(0).toUpperCase() + key.slice(1),
90
- dataType: CellDataType.DATE,
91
- formatter: new DateFormatter({ dateStyle, locale }),
92
- editor: new DateEditor(),
93
- }, options || {});
94
- return {
95
- ...config,
96
- createCell(rowData, rowIndex) {
97
- const valueGetter = options?.valueGetter || ((data) => data[key]);
98
- const value = valueGetter(rowData);
99
- return new Cell(this, value, rowData, rowIndex);
100
- }
101
- };
102
- }
103
- /**
104
- * Create a boolean column
105
- */
106
- static boolean(key, options) {
107
- const trueValue = options?.trueValue || 'Yes';
108
- const falseValue = options?.falseValue || 'No';
109
- const config = deepMergeColumnConfig(DEFAULT_COLUMN_CONFIG, {
110
- key,
111
- header: key.charAt(0).toUpperCase() + key.slice(1),
112
- dataType: CellDataType.BOOLEAN,
113
- formatter: new BooleanFormatter({ trueValue, falseValue }),
114
- editor: new BooleanEditor(),
115
- }, options || {});
116
- return {
117
- ...config,
118
- createCell(rowData, rowIndex) {
119
- const valueGetter = options?.valueGetter || ((data) => data[key]);
120
- const value = valueGetter(rowData);
121
- return new Cell(this, value, rowData, rowIndex);
122
- }
123
- };
124
- }
125
- /**
126
- * Create a select/dropdown column
127
- */
128
- static select(key, selectOptions, options) {
129
- const config = deepMergeColumnConfig(DEFAULT_COLUMN_CONFIG, {
130
- key,
131
- header: key.charAt(0).toUpperCase() + key.slice(1),
132
- editor: new SelectEditor({ options: selectOptions }),
133
- }, options || {});
134
- return {
135
- ...config,
136
- createCell(rowData, rowIndex) {
137
- const valueGetter = options?.valueGetter || ((data) => data[key]);
138
- const value = valueGetter(rowData);
139
- return new Cell(this, value, rowData, rowIndex);
140
- }
141
- };
142
- }
143
- /**
144
- * Create an email column
145
- */
146
- static email(key, options) {
147
- const config = deepMergeColumnConfig(DEFAULT_COLUMN_CONFIG, {
148
- key,
149
- header: key.charAt(0).toUpperCase() + key.slice(1),
150
- dataType: CellDataType.STRING,
151
- formatter: new StringFormatter(),
152
- validator: PatternValidators.email(),
153
- editor: new TextEditor({ placeholder: 'email@example.com' }),
154
- }, options || {});
155
- return {
156
- ...config,
157
- createCell(rowData, rowIndex) {
158
- const valueGetter = options?.valueGetter || ((data) => data[key]);
159
- const value = valueGetter(rowData);
160
- return new Cell(this, value, rowData, rowIndex);
161
- }
162
- };
163
- }
164
- /**
165
- * Create a readonly column
166
- */
167
- static readonly(key, options) {
168
- const config = deepMergeColumnConfig(DEFAULT_COLUMN_CONFIG, {
169
- key,
170
- header: key.charAt(0).toUpperCase() + key.slice(1),
171
- editable: false,
172
- }, options || {});
173
- return {
174
- ...config,
175
- createCell(rowData, rowIndex) {
176
- const valueGetter = options?.valueGetter || ((data) => data[key]);
177
- const value = valueGetter(rowData);
178
- return new Cell(this, value, rowData, rowIndex);
179
- }
180
- };
181
- }
182
- /**
183
- * Create a custom column with full control
184
- */
185
- static custom(config) {
186
- if (!config.key) {
187
- throw new Error('Column key is required');
188
- }
189
- const mergedConfig = deepMergeColumnConfig(DEFAULT_COLUMN_CONFIG, {
190
- header: config.key.charAt(0).toUpperCase() + config.key.slice(1),
191
- }, config);
192
- return {
193
- ...mergedConfig,
194
- createCell(rowData, rowIndex) {
195
- const valueGetter = config.valueGetter || ((data) => data[config.key]);
196
- const value = valueGetter(rowData);
197
- return new Cell(this, value, rowData, rowIndex);
198
- }
199
- };
200
- }
201
- /**
202
- * Create multiple columns at once from a simple configuration
203
- */
204
- static fromKeys(keys) {
205
- return keys.map(keyConfig => {
206
- if (typeof keyConfig === 'string' || typeof keyConfig === 'number' || typeof keyConfig === 'symbol') {
207
- return ColumnConfigFactory.text(String(keyConfig));
208
- }
209
- else {
210
- const { key, type = 'text', options = {} } = keyConfig;
211
- const keyStr = String(key);
212
- switch (type) {
213
- case 'number':
214
- return ColumnConfigFactory.number(keyStr, options);
215
- case 'date':
216
- return ColumnConfigFactory.date(keyStr, options);
217
- case 'boolean':
218
- return ColumnConfigFactory.boolean(keyStr, options);
219
- case 'text':
220
- default:
221
- return ColumnConfigFactory.text(keyStr, options);
222
- }
223
- }
224
- });
225
- }
226
- }
227
- /**
228
- * Convenience exports for common column types
229
- */
230
- export const Columns = ColumnConfigFactory;
231
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWNvbmZpZy5mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9mYWN0b3JpZXMvY29sdW1uLWNvbmZpZy5mYWN0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBZ0IscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUN4RixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDcEQsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3JELE9BQU8sRUFDTCxlQUFlLEVBQ2YsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixhQUFhLEVBQ2IsZ0JBQWdCLEVBQ2pCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUNMLGlCQUFpQixFQUNsQixNQUFNLGtDQUFrQyxDQUFDO0FBQzFDLE9BQU8sRUFDTCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixZQUFZLEVBQ1osYUFBYSxFQUNkLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFdEU7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLG1CQUFtQjtJQUM5Qjs7T0FFRztJQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBVyxFQUFFLE9BQXVDO1FBQzlELE1BQU0sTUFBTSxHQUFHLHFCQUFxQixDQUNsQyxxQkFBcUIsRUFDckI7WUFDRSxHQUFHO1lBQ0gsTUFBTSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDbEQsUUFBUSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQzdCLFNBQVMsRUFBRSxJQUFJLGVBQWUsRUFBRTtZQUNoQyxNQUFNLEVB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O0lBRUQ7O09BRUc7SUFDSCxNQUFNLENBQUMsUUFBUSxDQUNiLElBQXFHO1FBRXJHLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRTtZQUMxQixJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsSUFBSSxPQUFPLFNBQVMsS0FBSyxRQUFRLElBQUksT0FBTyxTQUFTLEtBQUssUUFBUSxFQUFFO2dCQUNuRyxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQzthQUNwRDtpQkFBTTtnQkFDTCxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksR0FBRyxNQUFNLEVBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxHQUFHLFNBQVMsQ0FBQztnQkFDdkQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUUzQixRQUFRLElBQUksRUFBRTtvQkFDWixLQUFLLFFBQVE7d0JBQ1gsT0FBTyxtQkFBbUIsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNyRCxLQUFLLE1BQU07d0JBQ1QsT0FBTyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUNuRCxLQUFLLFNBQVM7d0JBQ1osT0FBTyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO29CQUN0RCxLQUFLLE1BQU0sQ0FBQztvQkFDWjt3QkFDRSxPQUFPLG1CQUFtQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7aUJBQ3BEO2FBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb2x1bW4gY29uZmlndXJhdGlvbiBmYWN0b3J5XG4gKiBTaW1wbGlmaWVzIGNyZWF0aW9uIG9mIGNvbW1vbiBjb2x1bW4gdHlwZXMgd2l0aCBzZW5zaWJsZSBkZWZhdWx0c1xuICovXG5cbmltcG9ydCB7IENvbHVtbkNvbmZpZywgREVGQVVMVF9DT0xVTU5fQ09ORklHIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IENlbGxEYXRhVHlwZSB9IGZyb20gJy4uL21vZGVscy9jZWxsLXR5cGVzJztcbmltcG9ydCB7IENlbGwgfSBmcm9tICcuLi9yZW5kZXJlci9tb2RlbHMvY2VsbC5jbGFzcyc7XG5pbXBvcnQge1xuICBTdHJpbmdGb3JtYXR0ZXIsXG4gIE51bWJlckZvcm1hdHRlcixcbiAgQ3VycmVuY3lGb3JtYXR0ZXIsXG4gIERhdGVGb3JtYXR0ZXIsXG4gIEJvb2xlYW5Gb3JtYXR0ZXJcbn0gZnJvbSAnLi4vc3RyYXRlZ2llcy9kZWZhdWx0LWZvcm1hdHRlcnMnO1xuaW1wb3J0IHtcbiAgUGF0dGVyblZhbGlkYXRvcnNcbn0gZnJvbSAnLi4vc3RyYXRlZ2llcy9kZWZhdWx0LXZhbGlkYXRvcnMnO1xuaW1wb3J0IHtcbiAgVGV4dEVkaXRvcixcbiAgTnVtYmVyRWRpdG9yLFxuICBEYXRlRWRpdG9yLFxuICBTZWxlY3RFZGl0b3IsXG4gIEJvb2xlYW5FZGl0b3Jcbn0gZnJvbSAnLi4vc3RyYXRlZ2llcy9kZWZhdWx0LWVkaXRvcnMnO1xuaW1wb3J0IHsgZGVlcE1lcmdlQ29sdW1uQ29uZmlnIH0gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi1jb25maWcudXRpbHMnO1xuXG4vKipcbiAqIENvbHVtbiBjb25maWd1cmF0aW9uIGZhY3RvcnkgLSBGYWN0b3J5IFBhdHRlcm5cbiAqIFByb3ZpZGVzIGNvbnZlbmllbnQgbWV0aG9kcyB0byBjcmVhdGUgcHJlLWNvbmZpZ3VyZWQgY29sdW1uIHR5cGVzXG4gKi9cbmV4cG9ydCBjbGFzcyBDb2x1bW5Db25maWdGYWN0b3J5IHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHRleHQgY29sdW1uXG4gICAqL1xuICBzdGF0aWMgdGV4dChrZXk6IHN0cmluZywgb3B0aW9ucz86IFBhcnRpYWw8Q29sdW1uQ29uZmlnPHN0cmluZz4+KTogQ29sdW1uQ29uZmlnPHN0cmluZz4ge1xuICAgIGNvbnN0IGNvbmZpZyA9IGRlZXBNZXJnZUNvbHVtbkNvbmZpZyhcbiAgICAgIERFRkFVTFRfQ09MVU1OX0NPTkZJRyxcbiAgICAgIHtcbiAgICAgICAga2V5LFxuICAgICAgICBoZWFkZXI6IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKSxcbiAgICAgICAgZGF0YVR5cGU6IENlbGxEYXRhVHlwZS5TVFJJTkcsXG4gICAgICAgIGZvcm1hdHRlcjogbmV3IFN0cmluZ0Zvcm1hdHRlcigpLFxuICAgICAgICBlZGl0b3I6IG5ldyBUZXh0RWRpdG9yKCksXG4gICAgICB9LFxuICAgICAgb3B0aW9ucyB8fCB7fVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgY3JlYXRlQ2VsbChyb3dEYXRhOiBhbnksIHJvd0luZGV4PzogbnVtYmVyKTogQ2VsbDxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgdmFsdWVHZXR0ZXIgPSBvcHRpb25zPy52YWx1ZUdldHRlciB8fCAoKGRhdGE6IGFueSkgPT4gZGF0YVtrZXldKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZUdldHRlcihyb3dEYXRhKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDZWxsKHRoaXMsIHZhbHVlLCByb3dEYXRhLCByb3dJbmRleCk7XG4gICAgICB9XG4gICAgfSBhcyBDb2x1bW5Db25maWc8c3RyaW5nPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSBudW1iZXIgY29sdW1uXG4gICAqL1xuICBzdGF0aWMgbnVtYmVyKGtleTogc3RyaW5nLCBvcHRpb25zPzogUGFydGlhbDxDb2x1bW5Db25maWc8bnVtYmVyPj4pOiBDb2x1bW5Db25maWc8bnVtYmVyPiB7XG4gICAgY29uc3QgY29uZmlnID0gZGVlcE1lcmdlQ29sdW1uQ29uZmlnKFxuICAgICAgREVGQVVMVF9DT0xVTU5fQ09ORklHLFxuICAgICAge1xuICAgICAgICBrZXksXG4gICAgICAgIGhlYWRlcjoga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpLFxuICAgICAgICBkYXRhVHlwZTogQ2VsbERhdGFUeXBlLk5VTUJFUixcbiAgICAgICAgZm9ybWF0dGVyOiBuZXcgTnVtYmVyRm9ybWF0dGVyKHsgZGVjaW1hbHM6IDIgfSksXG4gICAgICAgIHZhbGlkYXRvcjogUGF0dGVyblZhbGlkYXRvcnMuY3VzdG9tKCh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmICFpc05hTih2YWwpLCAnTXVzdCBiZSBhIHZhbGlkIG51bWJlcicpLFxuICAgICAgICBlZGl0b3I6IG5ldyBOdW1iZXJFZGl0b3IoKSxcbiAgICAgIH0sXG4gICAgICBvcHRpb25zIHx8IHt9XG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBjcmVhdGVDZWxsKHJvd0RhdGE6IGFueSwgcm93SW5kZXg/OiBudW1iZXIpOiBDZWxsPG51bWJlcj4ge1xuICAgICAgICBjb25zdCB2YWx1ZUdldHRlciA9IG9wdGlvbnM/LnZhbHVlR2V0dGVyIHx8ICgoZGF0YTogYW55KSA9PiBkYXRhW2tleV0pO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlR2V0dGVyKHJvd0RhdGEpO1xuICAgICAgICByZXR1cm4gbmV3IENlbGwodGhpcywgdmFsdWUsIHJvd0RhdGEsIHJvd0luZGV4KTtcbiAgICAgIH1cbiAgICB9IGFzIENvbHVtbkNvbmZpZzxudW1iZXI+O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGN1cnJlbmN5IGNvbHVtblxuICAgKi9cbiAgc3RhdGljIGN1cnJlbmN5KGtleTogc3RyaW5nLCBvcHRpb25zPzogUGFydGlhbDxDb2x1bW5Db25maWc8bnVtYmVyPj4gJiB7XG4gICAgY3VycmVuY3k/OiBzdHJpbmc7XG4gICAgbG9jYWxlPzogc3RyaW5nO1xuICB9KTogQ29sdW1uQ29uZmlnPG51bWJlcj4ge1xuICAgIGNvbnN0IGN1cnJlbmN5ID0gKG9wdGlvbnMgYXMgYW55KT8uY3VycmVuY3kgfHwgJ1VTRCc7XG4gICAgY29uc3QgbG9jYWxlID0gKG9wdGlvbnMgYXMgYW55KT8ubG9jYWxlIHx8ICdlbi1VUyc7XG5cbiAgICBjb25zdCBjb25maWcgPSBkZWVwTWVyZ2VDb2x1bW5Db25maWcoXG4gICAgICBERUZBVUxUX0NPTFVNTl9DT05GSUcsXG4gICAgICB7XG4gICAgICAgIGtleSxcbiAgICAgICAgaGVhZGVyOiBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSksXG4gICAgICAgIGRhdGFUeXBlOiBDZWxsRGF0YVR5cGUuTlVNQkVSLFxuICAgICAgICBmb3JtYXR0ZXI6IG5ldyBDdXJyZW5jeUZvcm1hdHRlcih7IGN1cnJlbmN5LCBsb2NhbGUgfSksXG4gICAgICAgIHZhbGlkYXRvcjogUGF0dGVyblZhbGlkYXRvcnMuY2hhaW4oXG4gICAgICAgICAgUGF0dGVyblZhbGlkYXRvcnMuY3VzdG9tKCh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICdudW1iZXInICYmICFpc05hTih2YWwpLCAnTXVzdCBiZSBhIHZhbGlkIG51bWJlcicpLFxuICAgICAgICAgIFBhdHRlcm5WYWxpZGF0b3JzLnJhbmdlKDAsIHVuZGVmaW5lZCwgJ0Ftb3VudCBtdXN0IGJlIHBvc2l0aXZlJylcbiAgICAgICAgKSxcbiAgICAgICAgZWRpdG9yOiBuZXcgTnVtYmVyRWRpdG9yKHsgbWluOiAwLCBzdGVwOiAwLjAxIH0pLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnMgfHwge31cbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGNyZWF0ZUNlbGwocm93RGF0YTogYW55LCByb3dJbmRleD86IG51bWJlcik6IENlbGw8bnVtYmVyPiB7XG4gICAgICAgIGNvbnN0IHZhbHVlR2V0dGVyID0gb3B0aW9ucz8udmFsdWVHZXR0ZXIgfHwgKChkYXRhOiBhbnkpID0+IGRhdGFba2V5XSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVHZXR0ZXIocm93RGF0YSk7XG4gICAgICAgIHJldHVybiBuZXcgQ2VsbCh0aGlzLCB2YWx1ZSwgcm93RGF0YSwgcm93SW5kZXgpO1xuICAgICAgfVxuICAgIH0gYXMgQ29sdW1uQ29uZmlnPG51bWJlcj47XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgZGF0ZSBjb2x1bW5cbiAgICovXG4gIHN0YXRpYyBkYXRlKGtleTogc3RyaW5nLCBvcHRpb25zPzogUGFydGlhbDxDb2x1bW5Db25maWc8RGF0ZT4+ICYge1xuICAgIGRhdGVTdHlsZT86ICdmdWxsJyB8ICdsb25nJyB8ICdtZWRpdW0nIHwgJ3Nob3J0JztcbiAgICBsb2NhbGU/OiBzdHJpbmc7XG4gIH0pOiBDb2x1bW5Db25maWc8RGF0ZT4ge1xuICAgIGNvbnN0IGRhdGVTdHlsZSA9IChvcHRpb25zIGFzIGFueSk/LmRhdGVTdHlsZSB8fCAnbWVkaXVtJztcbiAgICBjb25zdCBsb2NhbGUgPSAob3B0aW9ucyBhcyBhbnkpPy5sb2NhbGUgfHwgJ2VuLVVTJztcblxuICAgIGNvbnN0IGNvbmZpZyA9IGRlZXBNZXJnZUNvbHVtbkNvbmZpZyhcbiAgICAgIERFRkFVTFRfQ09MVU1OX0NPTkZJRyxcbiAgICAgIHtcbiAgICAgICAga2V5LFxuICAgICAgICBoZWFkZXI6IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKSxcbiAgICAgICAgZGF0YVR5cGU6IENlbGxEYXRhVHlwZS5EQVRFLFxuICAgICAgICBmb3JtYXR0ZXI6IG5ldyBEYXRlRm9ybWF0dGVyKHsgZGF0ZVN0eWxlLCBsb2NhbGUgfSksXG4gICAgICAgIGVkaXRvcjogbmV3IERhdGVFZGl0b3IoKSxcbiAgICAgIH0sXG4gICAgICBvcHRpb25zIHx8IHt9XG4gICAgKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5jb25maWcsXG4gICAgICBjcmVhdGVDZWxsKHJvd0RhdGE6IGFueSwgcm93SW5kZXg/OiBudW1iZXIpOiBDZWxsPERhdGU+IHtcbiAgICAgICAgY29uc3QgdmFsdWVHZXR0ZXIgPSBvcHRpb25zPy52YWx1ZUdldHRlciB8fCAoKGRhdGE6IGFueSkgPT4gZGF0YVtrZXldKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZUdldHRlcihyb3dEYXRhKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDZWxsKHRoaXMsIHZhbHVlLCByb3dEYXRhLCByb3dJbmRleCk7XG4gICAgICB9XG4gICAgfSBhcyBDb2x1bW5Db25maWc8RGF0ZT47XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgYm9vbGVhbiBjb2x1bW5cbiAgICovXG4gIHN0YXRpYyBib29sZWFuKGtleTogc3RyaW5nLCBvcHRpb25zPzogUGFydGlhbDxDb2x1bW5Db25maWc8Ym9vbGVhbj4+ICYge1xuICAgIHRydWVWYWx1ZT86IHN0cmluZztcbiAgICBmYWxzZVZhbHVlPzogc3RyaW5nO1xuICB9KTogQ29sdW1uQ29uZmlnPGJvb2xlYW4+IHtcbiAgICBjb25zdCB0cnVlVmFsdWUgPSAob3B0aW9ucyBhcyBhbnkpPy50cnVlVmFsdWUgfHwgJ1llcyc7XG4gICAgY29uc3QgZmFsc2VWYWx1ZSA9IChvcHRpb25zIGFzIGFueSk/LmZhbHNlVmFsdWUgfHwgJ05vJztcblxuICAgIGNvbnN0IGNvbmZpZyA9IGRlZXBNZXJnZUNvbHVtbkNvbmZpZyhcbiAgICAgIERFRkFVTFRfQ09MVU1OX0NPTkZJRyxcbiAgICAgIHtcbiAgICAgICAga2V5LFxuICAgICAgICBoZWFkZXI6IGtleS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKSxcbiAgICAgICAgZGF0YVR5cGU6IENlbGxEYXRhVHlwZS5CT09MRUFOLFxuICAgICAgICBmb3JtYXR0ZXI6IG5ldyBCb29sZWFuRm9ybWF0dGVyKHsgdHJ1ZVZhbHVlLCBmYWxzZVZhbHVlIH0pLFxuICAgICAgICBlZGl0b3I6IG5ldyBCb29sZWFuRWRpdG9yKCksXG4gICAgICB9LFxuICAgICAgb3B0aW9ucyB8fCB7fVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgY3JlYXRlQ2VsbChyb3dEYXRhOiBhbnksIHJvd0luZGV4PzogbnVtYmVyKTogQ2VsbDxib29sZWFuPiB7XG4gICAgICAgIGNvbnN0IHZhbHVlR2V0dGVyID0gb3B0aW9ucz8udmFsdWVHZXR0ZXIgfHwgKChkYXRhOiBhbnkpID0+IGRhdGFba2V5XSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVHZXR0ZXIocm93RGF0YSk7XG4gICAgICAgIHJldHVybiBuZXcgQ2VsbCh0aGlzLCB2YWx1ZSwgcm93RGF0YSwgcm93SW5kZXgpO1xuICAgICAgfVxuICAgIH0gYXMgQ29sdW1uQ29uZmlnPGJvb2xlYW4+O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIHNlbGVjdC9kcm9wZG93biBjb2x1bW5cbiAgICovXG4gIHN0YXRpYyBzZWxlY3Q8VCA9IHN0cmluZz4oXG4gICAga2V5OiBzdHJpbmcsXG4gICAgc2VsZWN0T3B0aW9uczogQXJyYXk8eyB2YWx1ZTogVDsgbGFiZWw6IHN0cmluZyB9PixcbiAgICBvcHRpb25zPzogUGFydGlhbDxDb2x1bW5Db25maWc8VD4+XG4gICk6IENvbHVtbkNvbmZpZzxUPiB7XG4gICAgY29uc3QgY29uZmlnID0gZGVlcE1lcmdlQ29sdW1uQ29uZmlnKFxuICAgICAgREVGQVVMVF9DT0xVTU5fQ09ORklHLFxuICAgICAge1xuICAgICAgICBrZXksXG4gICAgICAgIGhlYWRlcjoga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpLFxuICAgICAgICBlZGl0b3I6IG5ldyBTZWxlY3RFZGl0b3IoeyBvcHRpb25zOiBzZWxlY3RPcHRpb25zIH0pLFxuICAgICAgfSxcbiAgICAgIG9wdGlvbnMgfHwge31cbiAgICApO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmNvbmZpZyxcbiAgICAgIGNyZWF0ZUNlbGwocm93RGF0YTogYW55LCByb3dJbmRleD86IG51bWJlcik6IENlbGw8VD4ge1xuICAgICAgICBjb25zdCB2YWx1ZUdldHRlciA9IG9wdGlvbnM/LnZhbHVlR2V0dGVyIHx8ICgoZGF0YTogYW55KSA9PiBkYXRhW2tleV0pO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHZhbHVlR2V0dGVyKHJvd0RhdGEpO1xuICAgICAgICByZXR1cm4gbmV3IENlbGwodGhpcywgdmFsdWUsIHJvd0RhdGEsIHJvd0luZGV4KTtcbiAgICAgIH1cbiAgICB9IGFzIENvbHVtbkNvbmZpZzxUPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gZW1haWwgY29sdW1uXG4gICAqL1xuICBzdGF0aWMgZW1haWwoa2V5OiBzdHJpbmcsIG9wdGlvbnM/OiBQYXJ0aWFsPENvbHVtbkNvbmZpZzxzdHJpbmc+Pik6IENvbHVtbkNvbmZpZzxzdHJpbmc+IHtcbiAgICBjb25zdCBjb25maWcgPSBkZWVwTWVyZ2VDb2x1bW5Db25maWcoXG4gICAgICBERUZBVUxUX0NPTFVNTl9DT05GSUcsXG4gICAgICB7XG4gICAgICAgIGtleSxcbiAgICAgICAgaGVhZGVyOiBrZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBrZXkuc2xpY2UoMSksXG4gICAgICAgIGRhdGFUeXBlOiBDZWxsRGF0YVR5cGUuU1RSSU5HLFxuICAgICAgICBmb3JtYXR0ZXI6IG5ldyBTdHJpbmdGb3JtYXR0ZXIoKSxcbiAgICAgICAgdmFsaWRhdG9yOiBQYXR0ZXJuVmFsaWRhdG9ycy5lbWFpbCgpLFxuICAgICAgICBlZGl0b3I6IG5ldyBUZXh0RWRpdG9yKHsgcGxhY2Vob2xkZXI6ICdlbWFpbEBleGFtcGxlLmNvbScgfSksXG4gICAgICB9LFxuICAgICAgb3B0aW9ucyB8fCB7fVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgY3JlYXRlQ2VsbChyb3dEYXRhOiBhbnksIHJvd0luZGV4PzogbnVtYmVyKTogQ2VsbDxzdHJpbmc+IHtcbiAgICAgICAgY29uc3QgdmFsdWVHZXR0ZXIgPSBvcHRpb25zPy52YWx1ZUdldHRlciB8fCAoKGRhdGE6IGFueSkgPT4gZGF0YVtrZXldKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZUdldHRlcihyb3dEYXRhKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDZWxsKHRoaXMsIHZhbHVlLCByb3dEYXRhLCByb3dJbmRleCk7XG4gICAgICB9XG4gICAgfSBhcyBDb2x1bW5Db25maWc8c3RyaW5nPjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgYSByZWFkb25seSBjb2x1bW5cbiAgICovXG4gIHN0YXRpYyByZWFkb25seTxUID0gYW55PihrZXk6IHN0cmluZywgb3B0aW9ucz86IFBhcnRpYWw8Q29sdW1uQ29uZmlnPFQ+Pik6IENvbHVtbkNvbmZpZzxUPiB7XG4gICAgY29uc3QgY29uZmlnID0gZGVlcE1lcmdlQ29sdW1uQ29uZmlnKFxuICAgICAgREVGQVVMVF9DT0xVTU5fQ09ORklHLFxuICAgICAge1xuICAgICAgICBrZXksXG4gICAgICAgIGhlYWRlcjoga2V5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpLFxuICAgICAgICBlZGl0YWJsZTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgb3B0aW9ucyB8fCB7fVxuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgY3JlYXRlQ2VsbChyb3dEYXRhOiBhbnksIHJvd0luZGV4PzogbnVtYmVyKTogQ2VsbDxUPiB7XG4gICAgICAgIGNvbnN0IHZhbHVlR2V0dGVyID0gb3B0aW9ucz8udmFsdWVHZXR0ZXIgfHwgKChkYXRhOiBhbnkpID0+IGRhdGFba2V5XSk7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsdWVHZXR0ZXIocm93RGF0YSk7XG4gICAgICAgIHJldHVybiBuZXcgQ2VsbCh0aGlzLCB2YWx1ZSwgcm93RGF0YSwgcm93SW5kZXgpO1xuICAgICAgfVxuICAgIH0gYXMgQ29sdW1uQ29uZmlnPFQ+O1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSBhIGN1c3RvbSBjb2x1bW4gd2l0aCBmdWxsIGNvbnRyb2xcbiAgICovXG4gIHN0YXRpYyBjdXN0b208VCA9IGFueT4oY29uZmlnOiBQYXJ0aWFsPENvbHVtbkNvbmZpZzxUPj4gJiB7IGtleTogc3RyaW5nIH0pOiBDb2x1bW5Db25maWc8VD4ge1xuICAgIGlmICghY29uZmlnLmtleSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb2x1bW4ga2V5IGlzIHJlcXVpcmVkJyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVyZ2VkQ29uZmlnID0gZGVlcE1lcmdlQ29sdW1uQ29uZmlnKFxuICAgICAgREVGQVVMVF9DT0xVTU5fQ09ORklHLFxuICAgICAge1xuICAgICAgICBoZWFkZXI6IGNvbmZpZy5rZXkuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBjb25maWcua2V5LnNsaWNlKDEpLFxuICAgICAgfSxcbiAgICAgIGNvbmZpZ1xuICAgICk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4ubWVyZ2VkQ29uZmlnLFxuICAgICAgY3JlYXRlQ2VsbChyb3dEYXRhOiBhbnksIHJvd0luZGV4PzogbnVtYmVyKTogQ2VsbDxUPiB7XG4gICAgICAgIGNvbnN0IHZhbHVlR2V0dGVyID0gY29uZmlnLnZhbHVlR2V0dGVyIHx8ICgoZGF0YTogYW55KSA9PiBkYXRhW2NvbmZpZy5rZXldKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB2YWx1ZUdldHRlcihyb3dEYXRhKTtcbiAgICAgICAgcmV0dXJuIG5ldyBDZWxsKHRoaXMsIHZhbHVlLCByb3dEYXRhLCByb3dJbmRleCk7XG4gICAgICB9XG4gICAgfSBhcyBDb2x1bW5Db25maWc8VD47XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIG11bHRpcGxlIGNvbHVtbnMgYXQgb25jZSBmcm9tIGEgc2ltcGxlIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHN0YXRpYyBmcm9tS2V5czxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgYW55Pj4oXG4gICAga2V5czogQXJyYXk8a2V5b2YgVCB8IHsga2V5OiBrZXlvZiBUOyB0eXBlPzogJ3RleHQnIHwgJ251bWJlcicgfCAnZGF0ZScgfCAnYm9vbGVhbic7IG9wdGlvbnM/OiBhbnkgfT5cbiAgKTogQ29sdW1uQ29uZmlnPGFueT5bXSB7XG4gICAgcmV0dXJuIGtleXMubWFwKGtleUNvbmZpZyA9PiB7XG4gICAgICBpZiAodHlwZW9mIGtleUNvbmZpZyA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIGtleUNvbmZpZyA9PT0gJ251bWJlcicgfHwgdHlwZW9mIGtleUNvbmZpZyA9PT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgcmV0dXJuIENvbHVtbkNvbmZpZ0ZhY3RvcnkudGV4dChTdHJpbmcoa2V5Q29uZmlnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGtleSwgdHlwZSA9ICd0ZXh0Jywgb3B0aW9ucyA9IHt9IH0gPSBrZXlDb25maWc7XG4gICAgICAgIGNvbnN0IGtleVN0ciA9IFN0cmluZyhrZXkpO1xuICAgICAgICBcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgY2FzZSAnbnVtYmVyJzpcbiAgICAgICAgICAgIHJldHVybiBDb2x1bW5Db25maWdGYWN0b3J5Lm51bWJlcihrZXlTdHIsIG9wdGlvbnMpO1xuICAgICAgICAgIGNhc2UgJ2RhdGUnOlxuICAgICAgICAgICAgcmV0dXJuIENvbHVtbkNvbmZpZ0ZhY3RvcnkuZGF0ZShrZXlTdHIsIG9wdGlvbnMpO1xuICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICAgICAgcmV0dXJuIENvbHVtbkNvbmZpZ0ZhY3RvcnkuYm9vbGVhbihrZXlTdHIsIG9wdGlvbnMpO1xuICAgICAgICAgIGNhc2UgJ3RleHQnOlxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gQ29sdW1uQ29uZmlnRmFjdG9yeS50ZXh0KGtleVN0ciwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIENvbnZlbmllbmNlIGV4cG9ydHMgZm9yIGNvbW1vbiBjb2x1bW4gdHlwZXNcbiAqL1xuZXhwb3J0IGNvbnN0IENvbHVtbnMgPSBDb2x1bW5Db25maWdGYWN0b3J5O1xuXG4iXX0=
@@ -1,8 +0,0 @@
1
- /**
2
- * Default autosave configuration
3
- */
4
- export const DEFAULT_AUTOSAVE_CONFIG = {
5
- enabled: true,
6
- strategy: 'lazy'
7
- };
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXV0b3NhdmUtY29uZmlnLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvbW9kZWxzL2F1dG9zYXZlLWNvbmZpZy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBc0JBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQW1CO0lBQ3JELE9BQU8sRUFBRSxJQUFJO0lBQ2IsUUFBUSxFQUFFLE1BQU07Q0FDakIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQXV0b3NhdmUgc3RyYXRlZ3kgdHlwZXNcbiAqL1xuZXhwb3J0IHR5cGUgQXV0b3NhdmVTdHJhdGVneSA9ICdsYXp5JyB8ICdlYWdlcic7XG5cbi8qKlxuICogQXV0b3NhdmUgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdXRvc2F2ZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIGF1dG9zYXZlIGlzIGVuYWJsZWRcbiAgICovXG4gIGVuYWJsZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEF1dG9zYXZlIHN0cmF0ZWd5OlxuICAgKiAtICdsYXp5JzogU2F2ZXMgYWZ0ZXIgdXNlciBzdG9wcyBtYWtpbmcgY2hhbmdlcyAoMnMgZGVib3VuY2UpXG4gICAqIC0gJ2VhZ2VyJzogU2F2ZXMgb24gZXZlcnkgY2hhbmdlICgxMDBtcyBkZWJvdW5jZSlcbiAgICovXG4gIHN0cmF0ZWd5OiBBdXRvc2F2ZVN0cmF0ZWd5O1xufVxuXG4vKipcbiAqIERlZmF1bHQgYXV0b3NhdmUgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9BVVRPU0FWRV9DT05GSUc6IEF1dG9zYXZlQ29uZmlnID0ge1xuICBlbmFibGVkOiB0cnVlLFxuICBzdHJhdGVneTogJ2xhenknXG59O1xuXG4iXX0=
@@ -1,253 +0,0 @@
1
- /**
2
- * Base column configuration class implementing Template Method pattern
3
- */
4
- import { DEFAULT_COLUMN_CONFIG } from './column-config.interface';
5
- import { Cell } from '../renderer/models/cell.class';
6
- import { deepMergeColumnConfig } from './column-config.utils';
7
- /**
8
- * Abstract base class for column configurations
9
- * Implements Template Method pattern for cell operations
10
- */
11
- export class BaseColumnConfig {
12
- constructor(config) {
13
- const merged = deepMergeColumnConfig(DEFAULT_COLUMN_CONFIG, config);
14
- this.key = merged.key;
15
- this.header = merged.header;
16
- this.dataType = merged.dataType;
17
- this.formatter = merged.formatter;
18
- this.validator = merged.validator;
19
- this.editor = merged.editor;
20
- this.parser = merged.parser;
21
- this.editable = merged.editable;
22
- this.editMode = merged.editMode;
23
- this.sortable = merged.sortable;
24
- this.filterable = merged.filterable;
25
- this.resizable = merged.resizable;
26
- this.width = merged.width;
27
- this.minWidth = merged.minWidth;
28
- this.maxWidth = merged.maxWidth;
29
- this.alignment = merged.alignment;
30
- this.verticalAlignment = merged.verticalAlignment;
31
- this.truncate = merged.truncate;
32
- this.tooltip = merged.tooltip;
33
- this.className = merged.className;
34
- this.style = merged.style;
35
- this.cellTemplate = merged.cellTemplate;
36
- this.headerTemplate = merged.headerTemplate;
37
- this.visible = merged.visible;
38
- this.pinned = merged.pinned;
39
- this.sortPriority = merged.sortPriority;
40
- this.comparator = merged.comparator;
41
- this.valueGetter = merged.valueGetter;
42
- this.valueSetter = merged.valueSetter;
43
- this.hooks = merged.hooks;
44
- this.showLoadingIndicator = merged.showLoadingIndicator;
45
- this.metadata = merged.metadata;
46
- }
47
- /**
48
- * Factory method to create a cell (Factory Pattern)
49
- * Can be overridden by subclasses for custom cell creation
50
- */
51
- createCell(rowData, rowIndex) {
52
- const value = this.extractValue(rowData);
53
- const cell = new Cell(this, value, rowData, rowIndex);
54
- // Apply any post-creation hooks
55
- this.afterCellCreated(cell, rowData, rowIndex);
56
- return cell;
57
- }
58
- /**
59
- * Template method for processing cell edit workflow
60
- * Defines the algorithm steps that subclasses can customize
61
- */
62
- processEdit(cell, newValue) {
63
- // Step 1: Before edit hook
64
- if (!this.beforeEdit(cell, newValue)) {
65
- return false;
66
- }
67
- // Step 2: Parse the value
68
- const parsedValue = this.parseValue(newValue);
69
- if (parsedValue === undefined) {
70
- return false;
71
- }
72
- // Step 3: Validate the parsed value
73
- const validationResult = this.validateValue(parsedValue, cell.getRowData());
74
- if (!validationResult.valid) {
75
- this.onValidationFailed(cell, validationResult);
76
- return false;
77
- }
78
- // Step 4: Apply the value
79
- const success = cell.saveEdit(parsedValue);
80
- if (success) {
81
- // Step 5: After edit hook
82
- this.afterEdit(cell, parsedValue);
83
- // Step 6: Update row data if valueSetter is provided
84
- if (this.valueSetter) {
85
- this.valueSetter(cell.getRowData(), parsedValue);
86
- }
87
- }
88
- return success;
89
- }
90
- /**
91
- * Hook: Before edit validation (can be overridden)
92
- */
93
- beforeEdit(cell, newValue) {
94
- if (this.hooks?.beforeEdit) {
95
- this.hooks.beforeEdit({
96
- value: newValue,
97
- previousValue: cell.getValue(),
98
- rowData: cell.getRowData(),
99
- columnKey: this.key,
100
- rowIndex: cell.getRowIndex()
101
- });
102
- }
103
- return true;
104
- }
105
- /**
106
- * Hook: After edit completion (can be overridden)
107
- */
108
- afterEdit(cell, newValue) {
109
- if (this.hooks?.afterEdit) {
110
- this.hooks.afterEdit({
111
- value: newValue,
112
- previousValue: cell.getValue(),
113
- rowData: cell.getRowData(),
114
- columnKey: this.key,
115
- rowIndex: cell.getRowIndex()
116
- });
117
- }
118
- }
119
- /**
120
- * Hook: After cell is created (can be overridden)
121
- */
122
- afterCellCreated(cell, rowData, rowIndex) {
123
- // Subclasses can override to perform post-creation setup
124
- }
125
- /**
126
- * Hook: When validation fails (can be overridden)
127
- */
128
- onValidationFailed(cell, validationResult) {
129
- if (this.hooks?.onValidationError) {
130
- this.hooks.onValidationError({
131
- value: cell.getValue(),
132
- rowData: cell.getRowData(),
133
- columnKey: this.key,
134
- rowIndex: cell.getRowIndex()
135
- });
136
- }
137
- }
138
- /**
139
- * Extract value from row data (can be overridden)
140
- */
141
- extractValue(rowData) {
142
- if (this.valueGetter) {
143
- return this.valueGetter(rowData);
144
- }
145
- return rowData[this.key];
146
- }
147
- /**
148
- * Parse value using parser if available (can be overridden)
149
- */
150
- parseValue(value) {
151
- if (this.parser) {
152
- try {
153
- return this.parser.parse(value);
154
- }
155
- catch (error) {
156
- console.error(`Failed to parse value for column ${this.key}:`, error);
157
- return undefined;
158
- }
159
- }
160
- return value;
161
- }
162
- /**
163
- * Validate value using validator if available (can be overridden)
164
- */
165
- validateValue(value, rowData) {
166
- if (this.validator) {
167
- if (this.validator.validateWithContext) {
168
- return this.validator.validateWithContext(value, rowData, this.key);
169
- }
170
- return this.validator.validate(value);
171
- }
172
- return { valid: true };
173
- }
174
- /**
175
- * Format value for display (can be overridden)
176
- */
177
- formatValue(value, rowData) {
178
- if (this.formatter) {
179
- if (this.formatter.formatWithContext && rowData) {
180
- return this.formatter.formatWithContext(value, rowData, this.key);
181
- }
182
- return this.formatter.format(value);
183
- }
184
- return String(value ?? '');
185
- }
186
- /**
187
- * Get cell tooltip (can be overridden)
188
- */
189
- getTooltip(value, rowData) {
190
- if (!this.tooltip) {
191
- return undefined;
192
- }
193
- if (typeof this.tooltip === 'function') {
194
- return this.tooltip(value, rowData);
195
- }
196
- return this.tooltip;
197
- }
198
- /**
199
- * Get cell class names (can be overridden)
200
- */
201
- getClassName(value, rowData) {
202
- if (!this.className) {
203
- return undefined;
204
- }
205
- if (typeof this.className === 'function') {
206
- return this.className(value, rowData);
207
- }
208
- return this.className;
209
- }
210
- /**
211
- * Get cell styles (can be overridden)
212
- */
213
- getStyle(value, rowData) {
214
- if (!this.style) {
215
- return undefined;
216
- }
217
- if (typeof this.style === 'function') {
218
- return this.style(value, rowData);
219
- }
220
- return this.style;
221
- }
222
- /**
223
- * Compare two values for sorting (can be overridden)
224
- */
225
- compare(a, b) {
226
- if (this.comparator) {
227
- return this.comparator(a, b);
228
- }
229
- // Default comparison
230
- if (a === b)
231
- return 0;
232
- if (a == null)
233
- return -1;
234
- if (b == null)
235
- return 1;
236
- if (typeof a === 'number' && typeof b === 'number') {
237
- return a - b;
238
- }
239
- if (a instanceof Date && b instanceof Date) {
240
- return a.getTime() - b.getTime();
241
- }
242
- return String(a).localeCompare(String(b));
243
- }
244
- }
245
- /**
246
- * Concrete implementation for simple use cases
247
- */
248
- export class SimpleColumnConfig extends BaseColumnConfig {
249
- constructor(config) {
250
- super(config);
251
- }
252
- }
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1jb2x1bW4tY29uZmlnLmNsYXNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtdGFibGUvc3JjL2xpYi9tb2RlbHMvYmFzZS1jb2x1bW4tY29uZmlnLmNsYXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsT0FBTyxFQUFnQixxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2hGLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUlyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU5RDs7O0dBR0c7QUFDSCxNQUFNLE9BQWdCLGdCQUFnQjtJQWtDcEMsWUFBWSxNQUFrRDtRQUM1RCxNQUFNLE1BQU0sR0FBRyxxQkFBcUIsQ0FBQyxxQkFBcUIsRUFBRSxNQUFNLENBQW9CLENBQUM7UUFFdkYsSUFBSSxDQUFDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7UUFDNUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzVCLElBQUksQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQztRQUNoQyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUM7UUFDaEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFD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QUFDLFlBQVksSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLEVBQUU7WUFDMUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2xDO1FBRUQsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUM7Q0FDRjtBQUVEOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGtCQUE0QixTQUFRLGdCQUFtQjtJQUNsRSxZQUFZLE1BQWtEO1FBQzVELEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNoQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEJhc2UgY29sdW1uIGNvbmZpZ3VyYXRpb24gY2xhc3MgaW1wbGVtZW50aW5nIFRlbXBsYXRlIE1ldGhvZCBwYXR0ZXJuXG4gKi9cblxuaW1wb3J0IHsgQ29sdW1uQ29uZmlnLCBERUZBVUxUX0NPTFVNTl9DT05GSUcgfSBmcm9tICcuL2NvbHVtbi1jb25maWcuaW50ZXJmYWNlJztcbmltcG9ydCB7IENlbGwgfSBmcm9tICcuLi9yZW5kZXJlci9tb2RlbHMvY2VsbC5jbGFzcyc7XG5pbXBvcnQgeyBDZWxsRm9ybWF0dGVyLCBDZWxsVmFsaWRhdG9yLCBDZWxsRWRpdG9yLCBDZWxsUGFyc2VyLCBDZWxsTGlmZWN5Y2xlSG9va3MgfSBmcm9tICcuL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2VsbEFsaWdubWVudCwgQ2VsbFZlcnRpY2FsQWxpZ25tZW50LCBFZGl0TW9kZSwgQ2VsbERhdGFUeXBlLCBWYWxpZGF0aW9uUmVzdWx0IH0gZnJvbSAnLi9jZWxsLXR5cGVzJztcbmltcG9ydCB7IFRlbXBsYXRlUmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBkZWVwTWVyZ2VDb2x1bW5Db25maWcgfSBmcm9tICcuL2NvbHVtbi1jb25maWcudXRpbHMnO1xuXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIGNvbHVtbiBjb25maWd1cmF0aW9uc1xuICogSW1wbGVtZW50cyBUZW1wbGF0ZSBNZXRob2QgcGF0dGVybiBmb3IgY2VsbCBvcGVyYXRpb25zXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ29sdW1uQ29uZmlnPFQgPSBhbnk+IGltcGxlbWVudHMgQ29sdW1uQ29uZmlnPFQ+IHtcbiAgcmVhZG9ubHkga2V5OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGhlYWRlcj86IHN0cmluZztcbiAgcmVhZG9ubHkgZGF0YVR5cGU/OiBDZWxsRGF0YVR5cGU7XG4gIHJlYWRvbmx5IGZvcm1hdHRlcj86IENlbGxGb3JtYXR0ZXI8VD47XG4gIHJlYWRvbmx5IHZhbGlkYXRvcj86IENlbGxWYWxpZGF0b3I8VD47XG4gIHJlYWRvbmx5IGVkaXRvcj86IENlbGxFZGl0b3I8VD47XG4gIHJlYWRvbmx5IHBhcnNlcj86IENlbGxQYXJzZXI8VD47XG4gIHJlYWRvbmx5IGVkaXRhYmxlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZWRpdE1vZGU/OiBFZGl0TW9kZTtcbiAgcmVhZG9ubHkgc29ydGFibGU/OiBib29sZWFuO1xuICByZWFkb25seSBmaWx0ZXJhYmxlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcmVzaXphYmxlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgd2lkdGg/OiBudW1iZXIgfCBzdHJpbmc7XG4gIHJlYWRvbmx5IG1pbldpZHRoPzogbnVtYmVyO1xuICByZWFkb25seSBtYXhXaWR0aD86IG51bWJlcjtcbiAgcmVhZG9ubHkgYWxpZ25tZW50PzogQ2VsbEFsaWdubWVudDtcbiAgcmVhZG9ubHkgdmVydGljYWxBbGlnbm1lbnQ/OiBDZWxsVmVydGljYWxBbGlnbm1lbnQ7XG4gIHJlYWRvbmx5IHRydW5jYXRlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgdG9vbHRpcD86IHN0cmluZyB8ICgodmFsdWU6IFQsIHJvd0RhdGE6IGFueSkgPT4gc3RyaW5nKTtcbiAgcmVhZG9ubHkgY2xhc3NOYW1lPzogc3RyaW5nIHwgc3RyaW5nW10gfCAoKHZhbHVlOiBULCByb3dEYXRhOiBhbnkpID0+IHN0cmluZyB8IHN0cmluZ1tdKTtcbiAgcmVhZG9ubHkgc3R5bGU/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgKCh2YWx1ZTogVCwgcm93RGF0YTogYW55KSA9PiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTtcbiAgcmVhZG9ubHkgY2VsbFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8YW55PjtcbiAgcmVhZG9ubHkgaGVhZGVyVGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICByZWFkb25seSB2aXNpYmxlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgcGlubmVkPzogJ2xlZnQnIHwgJ3JpZ2h0JyB8IGZhbHNlO1xuICByZWFkb25seSBzb3J0UHJpb3JpdHk/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGNvbXBhcmF0b3I/OiAoYTogVCwgYjogVCkgPT4gbnVtYmVyO1xuICByZWFkb25seSB2YWx1ZUdldHRlcj86IChyb3dEYXRhOiBhbnkpID0+IFQ7XG4gIHJlYWRvbmx5IHZhbHVlU2V0dGVyPzogKHJvd0RhdGE6IGFueSwgdmFsdWU6IFQpID0+IHZvaWQ7XG4gIHJlYWRvbmx5IGhvb2tzPzogQ2VsbExpZmVjeWNsZUhvb2tzPFQ+O1xuICByZWFkb25seSBzaG93TG9hZGluZ0luZGljYXRvcj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55PjtcblxuICBjb25zdHJ1Y3Rvcihjb25maWc6IFBhcnRpYWw8Q29sdW1uQ29uZmlnPFQ+PiAmIHsga2V5OiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IG1lcmdlZCA9IGRlZXBNZXJnZUNvbHVtbkNvbmZpZyhERUZBVUxUX0NPTFVNTl9DT05GSUcsIGNvbmZpZykgYXMgQ29sdW1uQ29uZmlnPFQ+O1xuICAgIFxuICAgIHRoaXMua2V5ID0gbWVyZ2VkLmtleTtcbiAgICB0aGlzLmhlYWRlciA9IG1lcmdlZC5oZWFkZXI7XG4gICAgdGhpcy5kYXRhVHlwZSA9IG1lcmdlZC5kYXRhVHlwZTtcbiAgICB0aGlzLmZvcm1hdHRlciA9IG1lcmdlZC5mb3JtYXR0ZXI7XG4gICAgdGhpcy52YWxpZGF0b3IgPSBtZXJnZWQudmFsaWRhdG9yO1xuICAgIHRoaXMuZWRpdG9yID0gbWVyZ2VkLmVkaXRvcjtcbiAgICB0aGlzLnBhcnNlciA9IG1lcmdlZC5wYXJzZXI7XG4gICAgdGhpcy5lZGl0YWJsZSA9IG1lcmdlZC5lZGl0YWJsZTtcbiAgICB0aGlzLmVkaXRNb2RlID0gbWVyZ2VkLmVkaXRNb2RlO1xuICAgIHRoaXMuc29ydGFibGUgPSBtZXJnZWQuc29ydGFibGU7XG4gICAgdGhpcy5maWx0ZXJhYmxlID0gbWVyZ2VkLmZpbHRlcmFibGU7XG4gICAgdGhpcy5yZXNpemFibGUgPSBtZXJnZWQucmVzaXphYmxlO1xuICAgIHRoaXMud2lkdGggPSBtZXJnZWQud2lkdGg7XG4gICAgdGhpcy5taW5XaWR0aCA9IG1lcmdlZC5taW5XaWR0aDtcbiAgICB0aGlzLm1heFdpZHRoID0gbWVyZ2VkLm1heFdpZHRoO1xuICAgIHRoaXMuYWxpZ25tZW50ID0gbWVyZ2VkLmFsaWdubWVudDtcbiAgICB0aGlzLnZlcnRpY2FsQWxpZ25tZW50ID0gbWVyZ2VkLnZlcnRpY2FsQWxpZ25tZW50O1xuICAgIHRoaXMudHJ1bmNhdGUgPSBtZXJnZWQudHJ1bmNhdGU7XG4gICAgdGhpcy50b29sdGlwID0gbWVyZ2VkLnRvb2x0aXA7XG4gICAgdGhpcy5jbGFzc05hbWUgPSBtZXJnZWQuY2xhc3NOYW1lO1xuICAgIHRoaXMuc3R5bGUgPSBtZXJnZWQuc3R5bGU7XG4gICAgdGhpcy5jZWxsVGVtcGxhdGUgPSBtZXJnZWQuY2VsbFRlbXBsYXRlO1xuICAgIHRoaXMuaGVhZGVyVGVtcGxhdGUgPSBtZXJnZWQuaGVhZGVyVGVtcGxhdGU7XG4gICAgdGhpcy52aXNpYmxlID0gbWVyZ2VkLnZpc2libGU7XG4gICAgdGhpcy5waW5uZWQgPSBtZXJnZWQucGlubmVkO1xuICAgIHRoaXMuc29ydFByaW9yaXR5ID0gbWVyZ2VkLnNvcnRQcmlvcml0eTtcbiAgICB0aGlzLmNvbXBhcmF0b3IgPSBtZXJnZWQuY29tcGFyYXRvcjtcbiAgICB0aGlzLnZhbHVlR2V0dGVyID0gbWVyZ2VkLnZhbHVlR2V0dGVyO1xuICAgIHRoaXMudmFsdWVTZXR0ZXIgPSBtZXJnZWQudmFsdWVTZXR0ZXI7XG4gICAgdGhpcy5ob29rcyA9IG1lcmdlZC5ob29rcztcbiAgICB0aGlzLnNob3dMb2FkaW5nSW5kaWNhdG9yID0gbWVyZ2VkLnNob3dMb2FkaW5nSW5kaWNhdG9yO1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXJnZWQubWV0YWRhdGE7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSBtZXRob2QgdG8gY3JlYXRlIGEgY2VsbCAoRmFjdG9yeSBQYXR0ZXJuKVxuICAgKiBDYW4gYmUgb3ZlcnJpZGRlbiBieSBzdWJjbGFzc2VzIGZvciBjdXN0b20gY2VsbCBjcmVhdGlvblxuICAgKi9cbiAgY3JlYXRlQ2VsbChyb3dEYXRhOiBhbnksIHJvd0luZGV4PzogbnVtYmVyKTogQ2VsbDxUPiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLmV4dHJhY3RWYWx1ZShyb3dEYXRhKTtcbiAgICBjb25zdCBjZWxsID0gbmV3IENlbGw8VD4odGhpcywgdmFsdWUsIHJvd0RhdGEsIHJvd0luZGV4KTtcbiAgICBcbiAgICAvLyBBcHBseSBhbnkgcG9zdC1jcmVhdGlvbiBob29rc1xuICAgIHRoaXMuYWZ0ZXJDZWxsQ3JlYXRlZChjZWxsLCByb3dEYXRhLCByb3dJbmRleCk7XG4gICAgXG4gICAgcmV0dXJuIGNlbGw7XG4gIH1cblxuICAvKipcbiAgICogVGVtcGxhdGUgbWV0aG9kIGZvciBwcm9jZXNzaW5nIGNlbGwgZWRpdCB3b3JrZmxvd1xuICAgKiBEZWZpbmVzIHRoZSBhbGdvcml0aG0gc3RlcHMgdGhhdCBzdWJjbGFzc2VzIGNhbiBjdXN0b21pemVcbiAgICovXG4gIHByb2Nlc3NFZGl0KGNlbGw6IENlbGw8VD4sIG5ld1ZhbHVlOiBUKTogYm9vbGVhbiB7XG4gICAgLy8gU3RlcCAxOiBCZWZvcmUgZWRpdCBob29rXG4gICAgaWYgKCF0aGlzLmJlZm9yZUVkaXQoY2VsbCwgbmV3VmFsdWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gU3RlcCAyOiBQYXJzZSB0aGUgdmFsdWVcbiAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMucGFyc2VWYWx1ZShuZXdWYWx1ZSk7XG4gICAgaWYgKHBhcnNlZFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTdGVwIDM6IFZhbGlkYXRlIHRoZSBwYXJzZWQgdmFsdWVcbiAgICBjb25zdCB2YWxpZGF0aW9uUmVzdWx0ID0gdGhpcy52YWxpZGF0ZVZhbHVlKHBhcnNlZFZhbHVlLCBjZWxsLmdldFJvd0RhdGEoKSk7XG4gICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0LnZhbGlkKSB7XG4gICAgICB0aGlzLm9uVmFsaWRhdGlvbkZhaWxlZChjZWxsLCB2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBTdGVwIDQ6IEFwcGx5IHRoZSB2YWx1ZVxuICAgIGNvbnN0IHN1Y2Nlc3MgPSBjZWxsLnNhdmVFZGl0KHBhcnNlZFZhbHVlKTtcbiAgICBcbiAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgLy8gU3RlcCA1OiBBZnRlciBlZGl0IGhvb2tcbiAgICAgIHRoaXMuYWZ0ZXJFZGl0KGNlbGwsIHBhcnNlZFZhbHVlKTtcbiAgICAgIFxuICAgICAgLy8gU3RlcCA2OiBVcGRhdGUgcm93IGRhdGEgaWYgdmFsdWVTZXR0ZXIgaXMgcHJvdmlkZWRcbiAgICAgIGlmICh0aGlzLnZhbHVlU2V0dGVyKSB7XG4gICAgICAgIHRoaXMudmFsdWVTZXR0ZXIoY2VsbC5nZXRSb3dEYXRhKCksIHBhcnNlZFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3VjY2VzcztcbiAgfVxuXG4gIC8qKlxuICAgKiBIb29rOiBCZWZvcmUgZWRpdCB2YWxpZGF0aW9uIChjYW4gYmUgb3ZlcnJpZGRlbilcbiAgICovXG4gIHByb3RlY3RlZCBiZWZvcmVFZGl0KGNlbGw6IENlbGw8VD4sIG5ld1ZhbHVlOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuaG9va3M/LmJlZm9yZUVkaXQpIHtcbiAgICAgIHRoaXMuaG9va3MuYmVmb3JlRWRpdCh7XG4gICAgICAgIHZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgcHJldmlvdXNWYWx1ZTogY2VsbC5nZXRWYWx1ZSgpLFxuICAgICAgICByb3dEYXRhOiBjZWxsLmdldFJvd0RhdGEoKSxcbiAgICAgICAgY29sdW1uS2V5OiB0aGlzLmtleSxcbiAgICAgICAgcm93SW5kZXg6IGNlbGwuZ2V0Um93SW5kZXgoKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEhvb2s6IEFmdGVyIGVkaXQgY29tcGxldGlvbiAoY2FuIGJlIG92ZXJyaWRkZW4pXG4gICAqL1xuICBwcm90ZWN0ZWQgYWZ0ZXJFZGl0KGNlbGw6IENlbGw8VD4sIG5ld1ZhbHVlOiBUKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaG9va3M/LmFmdGVyRWRpdCkge1xuICAgICAgdGhpcy5ob29rcy5hZnRlckVkaXQoe1xuICAgICAgICB2YWx1ZTogbmV3VmFsdWUsXG4gICAgICAgIHByZXZpb3VzVmFsdWU6IGNlbGwuZ2V0VmFsdWUoKSxcbiAgICAgICAgcm93RGF0YTogY2VsbC5nZXRSb3dEYXRhKCksXG4gICAgICAgIGNvbHVtbktleTogdGhpcy5rZXksXG4gICAgICAgIHJvd0luZGV4OiBjZWxsLmdldFJvd0luZGV4KClcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBIb29rOiBBZnRlciBjZWxsIGlzIGNyZWF0ZWQgKGNhbiBiZSBvdmVycmlkZGVuKVxuICAgKi9cbiAgcHJvdGVjdGVkIGFmdGVyQ2VsbENyZWF0ZWQoY2VsbDogQ2VsbDxUPiwgcm93RGF0YTogYW55LCByb3dJbmRleD86IG51bWJlcik6IHZvaWQge1xuICAgIC8vIFN1YmNsYXNzZXMgY2FuIG92ZXJyaWRlIHRvIHBlcmZvcm0gcG9zdC1jcmVhdGlvbiBzZXR1cFxuICB9XG5cbiAgLyoqXG4gICAqIEhvb2s6IFdoZW4gdmFsaWRhdGlvbiBmYWlscyAoY2FuIGJlIG92ZXJyaWRkZW4pXG4gICAqL1xuICBwcm90ZWN0ZWQgb25WYWxpZGF0aW9uRmFpbGVkKGNlbGw6IENlbGw8VD4sIHZhbGlkYXRpb25SZXN1bHQ6IFZhbGlkYXRpb25SZXN1bHQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5ob29rcz8ub25WYWxpZGF0aW9uRXJyb3IpIHtcbiAgICAgIHRoaXMuaG9va3Mub25WYWxpZGF0aW9uRXJyb3Ioe1xuICAgICAgICB2YWx1ZTogY2VsbC5nZXRWYWx1ZSgpLFxuICAgICAgICByb3dEYXRhOiBjZWxsLmdldFJvd0RhdGEoKSxcbiAgICAgICAgY29sdW1uS2V5OiB0aGlzLmtleSxcbiAgICAgICAgcm93SW5kZXg6IGNlbGwuZ2V0Um93SW5kZXgoKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgdmFsdWUgZnJvbSByb3cgZGF0YSAoY2FuIGJlIG92ZXJyaWRkZW4pXG4gICAqL1xuICBwcm90ZWN0ZWQgZXh0cmFjdFZhbHVlKHJvd0RhdGE6IGFueSk6IFQge1xuICAgIGlmICh0aGlzLnZhbHVlR2V0dGVyKSB7XG4gICAgICByZXR1cm4gdGhpcy52YWx1ZUdldHRlcihyb3dEYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIHJvd0RhdGFbdGhpcy5rZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIHZhbHVlIHVzaW5nIHBhcnNlciBpZiBhdmFpbGFibGUgKGNhbiBiZSBvdmVycmlkZGVuKVxuICAgKi9cbiAgcHJvdGVjdGVkIHBhcnNlVmFsdWUodmFsdWU6IGFueSk6IFQgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnBhcnNlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VyLnBhcnNlKHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBwYXJzZSB2YWx1ZSBmb3IgY29sdW1uICR7dGhpcy5rZXl9OmAsIGVycm9yKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHZhbHVlIHVzaW5nIHZhbGlkYXRvciBpZiBhdmFpbGFibGUgKGNhbiBiZSBvdmVycmlkZGVuKVxuICAgKi9cbiAgcHJvdGVjdGVkIHZhbGlkYXRlVmFsdWUodmFsdWU6IFQsIHJvd0RhdGE6IGFueSk6IFZhbGlkYXRpb25SZXN1bHQge1xuICAgIGlmICh0aGlzLnZhbGlkYXRvcikge1xuICAgICAgaWYgKHRoaXMudmFsaWRhdG9yLnZhbGlkYXRlV2l0aENvbnRleHQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdG9yLnZhbGlkYXRlV2l0aENvbnRleHQodmFsdWUsIHJvd0RhdGEsIHRoaXMua2V5KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnZhbGlkYXRvci52YWxpZGF0ZSh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB7IHZhbGlkOiB0cnVlIH07XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHZhbHVlIGZvciBkaXNwbGF5IChjYW4gYmUgb3ZlcnJpZGRlbilcbiAgICovXG4gIGZvcm1hdFZhbHVlKHZhbHVlOiBULCByb3dEYXRhPzogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5mb3JtYXR0ZXIpIHtcbiAgICAgIGlmICh0aGlzLmZvcm1hdHRlci5mb3JtYXRXaXRoQ29udGV4dCAmJiByb3dEYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdHRlci5mb3JtYXRXaXRoQ29udGV4dCh2YWx1ZSwgcm93RGF0YSwgdGhpcy5rZXkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0dGVyLmZvcm1hdCh2YWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcodmFsdWUgPz8gJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjZWxsIHRvb2x0aXAgKGNhbiBiZSBvdmVycmlkZGVuKVxuICAgKi9cbiAgZ2V0VG9vbHRpcCh2YWx1ZTogVCwgcm93RGF0YTogYW55KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMudG9vbHRpcCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgXG4gICAgaWYgKHR5cGVvZiB0aGlzLnRvb2x0aXAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLnRvb2x0aXAodmFsdWUsIHJvd0RhdGEpO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gdGhpcy50b29sdGlwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjZWxsIGNsYXNzIG5hbWVzIChjYW4gYmUgb3ZlcnJpZGRlbilcbiAgICovXG4gIGdldENsYXNzTmFtZSh2YWx1ZTogVCwgcm93RGF0YTogYW55KTogc3RyaW5nIHwgc3RyaW5nW10gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5jbGFzc05hbWUpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIFxuICAgIGlmICh0eXBlb2YgdGhpcy5jbGFzc05hbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsYXNzTmFtZSh2YWx1ZSwgcm93RGF0YSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB0aGlzLmNsYXNzTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2VsbCBzdHlsZXMgKGNhbiBiZSBvdmVycmlkZGVuKVxuICAgKi9cbiAgZ2V0U3R5bGUodmFsdWU6IFQsIHJvd0RhdGE6IGFueSk6IFJlY29yZDxzdHJpbmcsIGFueT4gfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5zdHlsZSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgXG4gICAgaWYgKHR5cGVvZiB0aGlzLnN0eWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5zdHlsZSh2YWx1ZSwgcm93RGF0YSk7XG4gICAgfVxuICAgIFxuICAgIHJldHVybiB0aGlzLnN0eWxlO1xuICB9XG5cbiAgLyoqXG4gICAqIENvbXBhcmUgdHdvIHZhbHVlcyBmb3Igc29ydGluZyAoY2FuIGJlIG92ZXJyaWRkZW4pXG4gICAqL1xuICBjb21wYXJlKGE6IFQsIGI6IFQpOiBudW1iZXIge1xuICAgIGlmICh0aGlzLmNvbXBhcmF0b3IpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbXBhcmF0b3IoYSwgYik7XG4gICAgfVxuICAgIFxuICAgIC8vIERlZmF1bHQgY29tcGFyaXNvblxuICAgIGlmIChhID09PSBiKSByZXR1cm4gMDtcbiAgICBpZiAoYSA9PSBudWxsKSByZXR1cm4gLTE7XG4gICAgaWYgKGIgPT0gbnVsbCkgcmV0dXJuIDE7XG4gICAgXG4gICAgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgYiA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBhIC0gYjtcbiAgICB9XG4gICAgXG4gICAgaWYgKGEgaW5zdGFuY2VvZiBEYXRlICYmIGIgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICByZXR1cm4gYS5nZXRUaW1lKCkgLSBiLmdldFRpbWUoKTtcbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIFN0cmluZyhhKS5sb2NhbGVDb21wYXJlKFN0cmluZyhiKSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25jcmV0ZSBpbXBsZW1lbnRhdGlvbiBmb3Igc2ltcGxlIHVzZSBjYXNlc1xuICovXG5leHBvcnQgY2xhc3MgU2ltcGxlQ29sdW1uQ29uZmlnPFQgPSBhbnk+IGV4dGVuZHMgQmFzZUNvbHVtbkNvbmZpZzxUPiB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogUGFydGlhbDxDb2x1bW5Db25maWc8VD4+ICYgeyBrZXk6IHN0cmluZyB9KSB7XG4gICAgc3VwZXIoY29uZmlnKTtcbiAgfVxufVxuXG4iXX0=
@@ -1,6 +0,0 @@
1
- /**
2
- * Strategy interfaces for cell behavior
3
- * These interfaces define pluggable strategies for formatting, validation, and editing
4
- */
5
- export {};
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2VsbC1zdHJhdGVnaWVzLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NtYXJ0LXRhYmxlL3NyYy9saWIvbW9kZWxzL2NlbGwtc3RyYXRlZ2llcy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7OztHQUdHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTdHJhdGVneSBpbnRlcmZhY2VzIGZvciBjZWxsIGJlaGF2aW9yXG4gKiBUaGVzZSBpbnRlcmZhY2VzIGRlZmluZSBwbHVnZ2FibGUgc3RyYXRlZ2llcyBmb3IgZm9ybWF0dGluZywgdmFsaWRhdGlvbiwgYW5kIGVkaXRpbmdcbiAqL1xuXG5pbXBvcnQgeyBWYWxpZGF0aW9uUmVzdWx0LCBDZWxsRXZlbnQgfSBmcm9tICcuL2NlbGwtdHlwZXMnO1xuXG4vKipcbiAqIFN0cmF0ZWd5IGludGVyZmFjZSBmb3IgZm9ybWF0dGluZyBjZWxsIHZhbHVlcyBmb3IgZGlzcGxheVxuICogRm9ybWF0dGVycyBhcmUgc3RhdGVsZXNzIGFuZCBjYW4gYmUgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSBjZWxsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENlbGxGb3JtYXR0ZXI8VCA9IGFueT4ge1xuICAvKipcbiAgICogRm9ybWF0cyBhIHZhbHVlIGZvciBkaXNwbGF5XG4gICAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gZm9ybWF0XG4gICAqIEByZXR1cm5zIEZvcm1hdHRlZCBzdHJpbmcgcmVwcmVzZW50YXRpb25cbiAgICovXG4gIGZvcm1hdCh2YWx1ZTogVCk6IHN0cmluZztcblxuICAvKipcbiAgICogT3B0aW9uYWwgbWV0aG9kIHRvIGZvcm1hdCB2YWx1ZSB3aXRoIGFkZGl0aW9uYWwgY29udGV4dFxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIGZvcm1hdFxuICAgKiBAcGFyYW0gcm93RGF0YSBUaGUgZW50aXJlIHJvdyBkYXRhXG4gICAqIEBwYXJhbSBjb2x1bW5LZXkgVGhlIGNvbHVtbiBrZXlcbiAgICogQHJldHVybnMgRm9ybWF0dGVkIHN0cmluZyByZXByZXNlbnRhdGlvblxuICAgKi9cbiAgZm9ybWF0V2l0aENvbnRleHQ/KHZhbHVlOiBULCByb3dEYXRhOiBhbnksIGNvbHVtbktleTogc3RyaW5nKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFN0cmF0ZWd5IGludGVyZmFjZSBmb3IgdmFsaWRhdGluZyBjZWxsIHZhbHVlc1xuICogVmFsaWRhdG9ycyBhcmUgc3RhdGVsZXNzIGFuZCBjYW4gYmUgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSBjZWxsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENlbGxWYWxpZGF0b3I8VCA9IGFueT4ge1xuICAvKipcbiAgICogVmFsaWRhdGVzIGEgY2VsbCB2YWx1ZVxuICAgKiBAcGFyYW0gdmFsdWUgVGhlIHZhbHVlIHRvIHZhbGlkYXRlXG4gICAqIEByZXR1cm5zIFZhbGlkYXRpb24gcmVzdWx0IHdpdGggc3VjY2VzcyBmbGFnIGFuZCBvcHRpb25hbCBlcnJvciBtZXNzYWdlc1xuICAgKi9cbiAgdmFsaWRhdGUodmFsdWU6IFQpOiBWYWxpZGF0aW9uUmVzdWx0O1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBtZXRob2QgdG8gdmFsaWRhdGUgd2l0aCBhZGRpdGlvbmFsIGNvbnRleHRcbiAgICogQHBhcmFtIHZhbHVlIFRoZSB2YWx1ZSB0byB2YWxpZGF0ZVxuICAgKiBAcGFyYW0gcm93RGF0YSBUaGUgZW50aXJlIHJvdyBkYXRhXG4gICAqIEBwYXJhbSBjb2x1bW5LZXkgVGhlIGNvbHVtbiBrZXlcbiAgICogQHJldHVybnMgVmFsaWRhdGlvbiByZXN1bHRcbiAgICovXG4gIHZhbGlkYXRlV2l0aENvbnRleHQ/KHZhbHVlOiBULCByb3dEYXRhOiBhbnksIGNvbHVtbktleTogc3RyaW5nKTogVmFsaWRhdGlvblJlc3VsdDtcblxuICAvKipcbiAgICogT3B0aW9uYWwgZXJyb3IgbWVzc2FnZSB0ZW1wbGF0ZVxuICAgKi9cbiAgZXJyb3JNZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVkaXRvciBjb250ZXh0IHByb3ZpZGVkIHRvIGNlbGwgZWRpdG9yc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENlbGxFZGl0b3JDb250ZXh0PFQgPSBhbnk+IHtcbiAgLyoqXG4gICAqIEN1cnJlbnQgY2VsbCB2YWx1ZVxuICAgKi9cbiAgdmFsdWU6IFQ7XG5cbiAgLyoqXG4gICAqIFJvdyBkYXRhIGNvbnRleHRcbiAgICovXG4gIHJvd0RhdGE/OiBhbnk7XG5cbiAgLyoqXG4gICAqIENvbHVtbiBrZXlcbiAgICovXG4gIGNvbHVtbktleTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSb3cgaW5kZXhcbiAgICovXG4gIHJvd0luZGV4PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDYWxsYmFjayB3aGVuIHZhbHVlIGNoYW5nZXNcbiAgICovXG4gIG9uQ2hhbmdlOiAobmV3VmFsdWU6IFQpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIHNhdmUgdGhlIGVkaXRlZCB2YWx1ZVxuICAgKi9cbiAgb25TYXZlOiAobmV3VmFsdWU6IFQpID0+IHZvaWQ7XG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIHRvIGNhbmNlbCBlZGl0aW5nXG4gICAqL1xuICBvbkNhbmNlbDogKCkgPT4gdm9pZDtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGVsZW1lbnQgZm9yIHRoZSBlZGl0b3JcbiAgICovXG4gIGNvbnRhaW5lcj86IEhUTUxFbGVtZW50O1xufVxuXG4vKipcbiAqIFN0cmF0ZWd5IGludGVyZmFjZSBmb3IgaGFuZGxpbmcgaW5saW5lIGNlbGwgZWRpdGluZ1xuICogRWRpdG9ycyBhcmUgc3RhdGVsZXNzIGFuZCBjYW4gYmUgc2hhcmVkIGFjcm9zcyBtdWx0aXBsZSBjZWxsc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIENlbGxFZGl0b3I8VCA9IGFueT4ge1xuICAvKipcbiAgICogV2hldGhlciB0aGlzIGVkaXRvciBzaG91bGQgcmVjZWl2ZSB0aGUgaW5pdGlhbCBrZXlwcmVzcyBjaGFyYWN0ZXJcbiAgICogd2hlbiBzdGFydGluZyBlZGl0IG1vZGUgdmlhIGtleWJvYXJkLlxuICAgKiAtIHRydWUgKGRlZmF1bHQpOiBJbml0aWFsIGtleXByZXNzIGNoYXJhY3RlciBiZWNvbWVzIHRoZSBzdGFydGluZyB2YWx1ZVxuICAgKiAtIGZhbHNlOiBJbml0aWFsIGtleXByZXNzIGp1c3QgdHJpZ2dlcnMgZWRpdCBtb2RlLCBjaGFyYWN0ZXIgaXMgaWdub3JlZFxuICAgKi9cbiAgYWNjZXB0c0luaXRpYWxLZXlwcmVzcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYW5kIHJlbmRlciB0aGUgZWRpdG9yXG4gICAqIEBwYXJhbSBjb250ZXh0IEVkaXRvciBjb250ZXh0IHdpdGggdmFsdWUsIGNhbGxiYWNrcywgYW5kIGNvbnRhaW5lclxuICAgKi9cbiAgZWRpdChjb250ZXh0OiBDZWxsRWRpdG9yQ29udGV4dDxUPik6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNsZWFudXAgd2hlbiBlZGl0b3IgaXMgZGVzdHJveWVkXG4gICAqL1xuICBkZXN0cm95PygpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBtZXRob2QgdG8gZm9jdXMgdGhlIGVkaXRvclxuICAgKi9cbiAgZm9jdXM/KCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIG1ldGhvZCB0byBnZXQgY3VycmVudCBlZGl0b3IgdmFsdWUgd2l0aG91dCBzYXZpbmdcbiAgICovXG4gIGdldEN1cnJlbnRWYWx1ZT8oKTogVDtcbn1cblxuLyoqXG4gKiBQYXJzZXIgaW50ZXJmYWNlIGZvciBjb252ZXJ0aW5nIHVzZXIgaW5wdXQgdG8gdHlwZWQgdmFsdWVzXG4gKiBVc2VkIGJ5IGVkaXRvcnMgdG8gY29udmVydCBzdHJpbmcgaW5wdXQgdG8gcHJvcGVyIGRhdGEgdHlwZXNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDZWxsUGFyc2VyPFQgPSBhbnk+IHtcbiAgLyoqXG4gICAqIFBhcnNlIHVzZXIgaW5wdXQgdG8gdHlwZWQgdmFsdWVcbiAgICogQHBhcmFtIGlucHV0IFVzZXIgaW5wdXQgKHVzdWFsbHkgc3RyaW5nKVxuICAgKiBAcmV0dXJucyBQYXJzZWQgdHlwZWQgdmFsdWVcbiAgICovXG4gIHBhcnNlKGlucHV0OiBhbnkpOiBUO1xuXG4gIC8qKlxuICAgKiBPcHRpb25hbCBtZXRob2QgdG8gY2hlY2sgaWYgaW5wdXQgY2FuIGJlIHBhcnNlZFxuICAgKiBAcGFyYW0gaW5wdXQgVXNlciBpbnB1dFxuICAgKiBAcmV0dXJucyBUcnVlIGlmIGlucHV0IGNhbiBiZSBwYXJzZWRcbiAgICovXG4gIGNhblBhcnNlPyhpbnB1dDogYW55KTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDb21wb3NpdGUgdmFsaWRhdG9yIHRoYXQgY2hhaW5zIG11bHRpcGxlIHZhbGlkYXRvcnNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb21wb3NpdGVWYWxpZGF0b3I8VCA9IGFueT4gZXh0ZW5kcyBDZWxsVmFsaWRhdG9yPFQ+IHtcbiAgLyoqXG4gICAqIEFkZCBhIHZhbGlkYXRvciB0byB0aGUgY2hhaW5cbiAgICovXG4gIGFkZFZhbGlkYXRvcih2YWxpZGF0b3I6IENlbGxWYWxpZGF0b3I8VD4pOiB0aGlzO1xuXG4gIC8qKlxuICAgKiBHZXQgYWxsIHZhbGlkYXRvcnMgaW4gdGhlIGNoYWluXG4gICAqL1xuICBnZXRWYWxpZGF0b3JzKCk6IENlbGxWYWxpZGF0b3I8VD5bXTtcbn1cblxuLyoqXG4gKiBFdmVudCBoYW5kbGVyIHR5cGVzIGZvciBjZWxsIGxpZmVjeWNsZSBldmVudHNcbiAqL1xuZXhwb3J0IHR5cGUgQ2VsbEV2ZW50SGFuZGxlcjxUID0gYW55PiA9IChldmVudDogQ2VsbEV2ZW50PFQ+KSA9PiB2b2lkO1xuXG4vKipcbiAqIENlbGwgbGlmZWN5Y2xlIGhvb2tzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2VsbExpZmVjeWNsZUhvb2tzPFQgPSBhbnk+IHtcbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgZWRpdGluZyBzdGFydHNcbiAgICovXG4gIGJlZm9yZUVkaXQ/OiBDZWxsRXZlbnRIYW5kbGVyPFQ+O1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgd2hlbiBlZGl0IG1vZGUgaXMgZW50ZXJlZFxuICAgKi9cbiAgb25FZGl0PzogQ2VsbEV2ZW50SGFuZGxlcjxUPjtcblxuICAvKipcbiAgICogQ2FsbGVkIGFmdGVyIGVkaXQgbW9kZSBpcyBleGl0ZWRcbiAgICovXG4gIGFmdGVyRWRpdD86IENlbGxFdmVudEhhbmRsZXI8VD47XG5cbiAgLyoqXG4gICAqIENhbGxlZCBiZWZvcmUgdmFsdWUgaXMgc2F2ZWRcbiAgICovXG4gIGJlZm9yZVNhdmU/OiBDZWxsRXZlbnRIYW5kbGVyPFQ+O1xuXG4gIC8qKlxuICAgKiBDYWxsZWQgYWZ0ZXIgdmFsdWUgaXMgc2F2ZWRcbiAgICovXG4gIG9uU2F2ZT86IENlbGxFdmVudEhhbmRsZXI8VD47XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIGVkaXQgaXMgY2FuY2VsbGVkXG4gICAqL1xuICBvbkNhbmNlbD86IENlbGxFdmVudEhhbmRsZXI8VD47XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHZhbGlkYXRpb24gZmFpbHNcbiAgICovXG4gIG9uVmFsaWRhdGlvbkVycm9yPzogQ2VsbEV2ZW50SGFuZGxlcjxUPjtcblxuICAvKipcbiAgICogQ2FsbGVkIHdoZW4gY2VsbCB2YWx1ZSBjaGFuZ2VzXG4gICAqL1xuICBvbkNoYW5nZT86IENlbGxFdmVudEhhbmRsZXI8VD47XG59XG5cbiJdfQ==