@den4ik92/ng2-smart-table 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/esm2020/den4ik92-ng2-smart-table.mjs +5 -0
  2. package/esm2020/lib/components/cell/cell-edit-mode/custom-edit.component.mjs +50 -0
  3. package/esm2020/lib/components/cell/cell-edit-mode/default-edit.component.mjs +84 -0
  4. package/esm2020/lib/components/cell/cell-edit-mode/edit-cell-default.mjs +35 -0
  5. package/esm2020/lib/components/cell/cell-edit-mode/edit-cell.component.mjs +75 -0
  6. package/esm2020/lib/components/cell/cell-editors/checkbox-editor.component.mjs +37 -0
  7. package/esm2020/lib/components/cell/cell-editors/completer-editor.component.mjs +38 -0
  8. package/esm2020/lib/components/cell/cell-editors/default-editor.mjs +29 -0
  9. package/esm2020/lib/components/cell/cell-editors/input-editor.component.mjs +33 -0
  10. package/esm2020/lib/components/cell/cell-editors/select-editor.component.mjs +55 -0
  11. package/esm2020/lib/components/cell/cell-editors/textarea-editor.component.mjs +35 -0
  12. package/esm2020/lib/components/cell/cell-view-mode/custom-view.component.mjs +63 -0
  13. package/esm2020/lib/components/cell/cell-view-mode/view-cell.component.mjs +59 -0
  14. package/esm2020/lib/components/cell/cell-view-mode/view-cell.mjs +2 -0
  15. package/esm2020/lib/components/cell/cell.component.mjs +82 -0
  16. package/esm2020/lib/components/cell/cell.module.mjs +80 -0
  17. package/esm2020/lib/components/filter/custom-filter.component.mjs +53 -0
  18. package/esm2020/lib/components/filter/default-filter.component.mjs +100 -0
  19. package/esm2020/lib/components/filter/filter-default.mjs +35 -0
  20. package/esm2020/lib/components/filter/filter-types/checkbox-filter.component.mjs +65 -0
  21. package/esm2020/lib/components/filter/filter-types/completer-filter.component.mjs +52 -0
  22. package/esm2020/lib/components/filter/filter-types/default-filter.mjs +34 -0
  23. package/esm2020/lib/components/filter/filter-types/input-filter.component.mjs +51 -0
  24. package/esm2020/lib/components/filter/filter-types/select-filter.component.mjs +71 -0
  25. package/esm2020/lib/components/filter/filter.component.mjs +91 -0
  26. package/esm2020/lib/components/filter/filter.module.mjs +67 -0
  27. package/esm2020/lib/components/pager/pager.component.mjs +284 -0
  28. package/esm2020/lib/components/pager/pager.module.mjs +29 -0
  29. package/esm2020/lib/components/tbody/cells/create-cancel.component.mjs +52 -0
  30. package/esm2020/lib/components/tbody/cells/custom.component.mjs +56 -0
  31. package/esm2020/lib/components/tbody/cells/edit-delete.component.mjs +103 -0
  32. package/esm2020/lib/components/tbody/tbody.component.mjs +206 -0
  33. package/esm2020/lib/components/tbody/tbody.module.mjs +48 -0
  34. package/esm2020/lib/components/thead/cells/actions-title.component.mjs +36 -0
  35. package/esm2020/lib/components/thead/cells/actions.component.mjs +44 -0
  36. package/esm2020/lib/components/thead/cells/add-button.component.mjs +63 -0
  37. package/esm2020/lib/components/thead/cells/checkbox-select-all.component.mjs +28 -0
  38. package/esm2020/lib/components/thead/cells/column-title.component.mjs +37 -0
  39. package/esm2020/lib/components/thead/cells/title/title.component.mjs +100 -0
  40. package/esm2020/lib/components/thead/rows/thead-filters-row.component.mjs +105 -0
  41. package/esm2020/lib/components/thead/rows/thead-form-row.component.mjs +108 -0
  42. package/esm2020/lib/components/thead/rows/thead-titles-row.component.mjs +103 -0
  43. package/esm2020/lib/components/thead/thead.component.mjs +76 -0
  44. package/esm2020/lib/components/thead/thead.module.mjs +76 -0
  45. package/esm2020/lib/lib/data-set/cell.mjs +41 -0
  46. package/esm2020/lib/lib/data-set/column.mjs +75 -0
  47. package/esm2020/lib/lib/data-set/data-set.mjs +98 -0
  48. package/esm2020/lib/lib/data-set/row.mjs +46 -0
  49. package/esm2020/lib/lib/data-source/data-source.mjs +101 -0
  50. package/esm2020/lib/lib/data-source/local/local.data-source.mjs +228 -0
  51. package/esm2020/lib/lib/data-source/local/local.filter.mjs +13 -0
  52. package/esm2020/lib/lib/data-source/local/local.pager.mjs +6 -0
  53. package/esm2020/lib/lib/data-source/local/local.sorter.mjs +19 -0
  54. package/esm2020/lib/lib/data-source/server/server-source.conf.mjs +20 -0
  55. package/esm2020/lib/lib/data-source/server/server.data-source.mjs +93 -0
  56. package/esm2020/lib/lib/grid.mjs +220 -0
  57. package/esm2020/lib/lib/helpers.mjs +84 -0
  58. package/esm2020/lib/lib/interfaces/smart-table.models.mjs +2 -0
  59. package/esm2020/lib/ng2-smart-table.component.mjs +203 -0
  60. package/esm2020/lib/ng2-smart-table.module.mjs +52 -0
  61. package/esm2020/public-api.mjs +8 -0
  62. package/fesm2015/den4ik92-ng2-smart-table.mjs +4329 -0
  63. package/fesm2015/den4ik92-ng2-smart-table.mjs.map +1 -0
  64. package/fesm2020/den4ik92-ng2-smart-table.mjs +3949 -0
  65. package/fesm2020/den4ik92-ng2-smart-table.mjs.map +1 -0
  66. package/index.d.ts +5 -0
  67. package/lib/components/cell/cell-edit-mode/custom-edit.component.d.ts +13 -0
  68. package/lib/components/cell/cell-edit-mode/default-edit.component.d.ts +8 -0
  69. package/lib/components/cell/cell-edit-mode/edit-cell-default.d.ts +13 -0
  70. package/lib/components/cell/cell-edit-mode/edit-cell.component.d.ts +12 -0
  71. package/lib/components/cell/cell-editors/checkbox-editor.component.d.ts +8 -0
  72. package/lib/components/cell/cell-editors/completer-editor.component.d.ts +13 -0
  73. package/lib/components/cell/cell-editors/default-editor.d.ts +19 -0
  74. package/lib/components/cell/cell-editors/input-editor.component.d.ts +7 -0
  75. package/lib/components/cell/cell-editors/select-editor.component.d.ts +7 -0
  76. package/lib/components/cell/cell-editors/textarea-editor.component.d.ts +7 -0
  77. package/lib/components/cell/cell-view-mode/custom-view.component.d.ts +19 -0
  78. package/lib/components/cell/cell-view-mode/view-cell.component.d.ts +7 -0
  79. package/lib/components/cell/cell-view-mode/view-cell.d.ts +4 -0
  80. package/lib/components/cell/cell.component.d.ts +20 -0
  81. package/lib/components/cell/cell.module.d.ts +21 -0
  82. package/lib/components/filter/custom-filter.component.d.ts +14 -0
  83. package/lib/components/filter/default-filter.component.d.ts +7 -0
  84. package/lib/components/filter/filter-default.d.ts +14 -0
  85. package/lib/components/filter/filter-types/checkbox-filter.component.d.ts +13 -0
  86. package/lib/components/filter/filter-types/completer-filter.component.d.ts +12 -0
  87. package/lib/components/filter/filter-types/default-filter.d.ts +24 -0
  88. package/lib/components/filter/filter-types/input-filter.component.d.ts +12 -0
  89. package/lib/components/filter/filter-types/select-filter.component.d.ts +11 -0
  90. package/lib/components/filter/filter.component.d.ts +11 -0
  91. package/lib/components/filter/filter.module.d.ts +17 -0
  92. package/lib/components/pager/pager.component.d.ts +35 -0
  93. package/lib/components/pager/pager.module.d.ts +9 -0
  94. package/lib/components/tbody/cells/create-cancel.component.d.ts +16 -0
  95. package/lib/components/tbody/cells/custom.component.d.ts +13 -0
  96. package/lib/components/tbody/cells/edit-delete.component.d.ts +24 -0
  97. package/lib/components/tbody/tbody.component.d.ts +37 -0
  98. package/lib/components/tbody/tbody.module.d.ts +13 -0
  99. package/lib/components/thead/cells/actions-title.component.d.ts +13 -0
  100. package/lib/components/thead/cells/actions.component.d.ts +12 -0
  101. package/lib/components/thead/cells/add-button.component.d.ts +18 -0
  102. package/lib/components/thead/cells/checkbox-select-all.component.d.ts +9 -0
  103. package/lib/components/thead/cells/column-title.component.d.ts +11 -0
  104. package/lib/components/thead/cells/title/title.component.d.ts +17 -0
  105. package/lib/components/thead/rows/thead-filters-row.component.d.ts +19 -0
  106. package/lib/components/thead/rows/thead-form-row.component.d.ts +20 -0
  107. package/lib/components/thead/rows/thead-titles-row.component.d.ts +18 -0
  108. package/lib/components/thead/thead.component.d.ts +18 -0
  109. package/lib/components/thead/thead.module.d.ts +20 -0
  110. package/lib/lib/data-set/cell.d.ts +20 -0
  111. package/lib/lib/data-set/column.d.ts +44 -0
  112. package/lib/lib/data-set/data-set.d.ts +37 -0
  113. package/lib/lib/data-set/row.d.ts +20 -0
  114. package/lib/lib/data-source/data-source.d.ts +35 -0
  115. package/lib/lib/data-source/local/local.data-source.d.ts +55 -0
  116. package/lib/lib/data-source/local/local.filter.d.ts +4 -0
  117. package/lib/lib/data-source/local/local.pager.d.ts +3 -0
  118. package/lib/lib/data-source/local/local.sorter.d.ts +4 -0
  119. package/lib/lib/data-source/server/server-source.conf.d.ts +27 -0
  120. package/lib/lib/data-source/server/server.data-source.d.ts +30 -0
  121. package/lib/lib/grid.d.ts +49 -0
  122. package/lib/lib/helpers.d.ts +18 -0
  123. package/lib/lib/interfaces/smart-table.models.d.ts +148 -0
  124. package/lib/ng2-smart-table.component.d.ts +43 -0
  125. package/lib/ng2-smart-table.module.d.ts +14 -0
  126. package/package.json +35 -0
  127. package/public-api.d.ts +8 -0
@@ -0,0 +1,220 @@
1
+ import { Subject } from 'rxjs';
2
+ import { Deferred, getDeepFromObject, getPageForRowIndex } from './helpers';
3
+ import { DataSet } from './data-set/data-set';
4
+ export class Grid {
5
+ constructor(source, settings) {
6
+ this.createFormShown = false;
7
+ this.onSelectRowSource = new Subject();
8
+ this.onDeselectRowSource = new Subject();
9
+ this.setSettings(settings);
10
+ this.setSource(source);
11
+ }
12
+ detach() {
13
+ if (this.sourceOnChangedSubscription) {
14
+ this.sourceOnChangedSubscription.unsubscribe();
15
+ }
16
+ if (this.sourceOnUpdatedSubscription) {
17
+ this.sourceOnUpdatedSubscription.unsubscribe();
18
+ }
19
+ }
20
+ showActionColumn(position) {
21
+ return this.isCurrentActionsPosition(position) && this.isActionsVisible();
22
+ }
23
+ isCurrentActionsPosition(position) {
24
+ return position == this.getSetting('actions.position');
25
+ }
26
+ isActionsVisible() {
27
+ return this.getSetting('actions.add') || this.getSetting('actions.edit') || this.getSetting('actions.delete') || this.getSetting('actions.custom').length;
28
+ }
29
+ isMultiSelectVisible() {
30
+ return this.getSetting('selectMode') === 'multi';
31
+ }
32
+ getNewRow() {
33
+ return this.dataSet.newRow;
34
+ }
35
+ setSettings(settings) {
36
+ this.settings = settings;
37
+ this.dataSet = new DataSet([], this.getSetting('columns'));
38
+ if (this.source) {
39
+ this.source.refresh();
40
+ }
41
+ }
42
+ getDataSet() {
43
+ return this.dataSet;
44
+ }
45
+ setSource(source) {
46
+ this.source = this.prepareSource(source);
47
+ this.detach();
48
+ this.sourceOnChangedSubscription = this.source.onChanged().subscribe((changes) => this.processDataChange(changes));
49
+ this.sourceOnUpdatedSubscription = this.source.onUpdated().subscribe((data) => {
50
+ const changedRow = this.dataSet.findRowByData(data);
51
+ changedRow.setData(data);
52
+ });
53
+ }
54
+ getSetting(name, defaultValue) {
55
+ return getDeepFromObject(this.settings, name, defaultValue);
56
+ }
57
+ getColumns() {
58
+ return this.dataSet.getColumns();
59
+ }
60
+ getRows() {
61
+ return this.dataSet.getRows();
62
+ }
63
+ selectRow(row, state) {
64
+ this.dataSet.selectRow(row, state);
65
+ }
66
+ multipleSelectRow(row) {
67
+ this.dataSet.multipleSelectRow(row);
68
+ }
69
+ onSelectRow() {
70
+ return this.onSelectRowSource.asObservable();
71
+ }
72
+ onDeselectRow() {
73
+ return this.onDeselectRowSource.asObservable();
74
+ }
75
+ edit(row) {
76
+ row.isInEditing = true;
77
+ }
78
+ create(row, confirmEmitter) {
79
+ const deferred = new Deferred();
80
+ deferred.promise.then((newData) => {
81
+ newData = newData ? newData : row.getNewData();
82
+ if (deferred.resolve.skipAdd) {
83
+ this.createFormShown = false;
84
+ }
85
+ else {
86
+ this.source.prepend(newData).then(() => {
87
+ this.createFormShown = false;
88
+ this.dataSet.createNewRow();
89
+ });
90
+ }
91
+ }).catch((err) => {
92
+ // doing nothing
93
+ });
94
+ if (this.getSetting('add.confirmCreate')) {
95
+ confirmEmitter.emit({
96
+ newData: row.getNewData(),
97
+ source: this.source,
98
+ confirm: deferred,
99
+ });
100
+ }
101
+ else {
102
+ deferred.resolve();
103
+ }
104
+ }
105
+ save(row, confirmEmitter) {
106
+ const deferred = new Deferred();
107
+ deferred.promise.then((newData) => {
108
+ newData = newData ? newData : row.getNewData();
109
+ if (deferred.resolve.skipEdit) {
110
+ row.isInEditing = false;
111
+ }
112
+ else {
113
+ this.source.update(row.getData(), newData).then(() => {
114
+ row.isInEditing = false;
115
+ });
116
+ }
117
+ }).catch((err) => {
118
+ // doing nothing
119
+ });
120
+ if (this.getSetting('edit.confirmSave')) {
121
+ confirmEmitter.emit({
122
+ data: row.getData(),
123
+ newData: row.getNewData(),
124
+ source: this.source,
125
+ confirm: deferred,
126
+ });
127
+ }
128
+ else {
129
+ deferred.resolve();
130
+ }
131
+ }
132
+ delete(row, confirmEmitter) {
133
+ const deferred = new Deferred();
134
+ deferred.promise.then(() => {
135
+ this.source.remove(row.getData());
136
+ }).catch((err) => {
137
+ // doing nothing
138
+ });
139
+ if (this.getSetting('delete.confirmDelete')) {
140
+ confirmEmitter.emit({
141
+ data: row.getData(),
142
+ source: this.source,
143
+ confirm: deferred,
144
+ });
145
+ }
146
+ else {
147
+ deferred.resolve();
148
+ }
149
+ if (row.isSelected) {
150
+ this.dataSet.selectRow(row, false);
151
+ }
152
+ }
153
+ processDataChange(changes) {
154
+ if (this.shouldProcessChange(changes)) {
155
+ if (changes['action'] === 'load') {
156
+ this.dataSet.deselectAll();
157
+ }
158
+ this.dataSet.setData(changes['elements']);
159
+ }
160
+ }
161
+ shouldProcessChange(changes) {
162
+ if (['filter', 'sort', 'page', 'remove', 'refresh', 'load', 'paging'].indexOf(changes['action']) !== -1) {
163
+ return true;
164
+ }
165
+ else if (['prepend', 'append'].indexOf(changes['action']) !== -1 && !this.getSetting('pager.display')) {
166
+ return true;
167
+ }
168
+ return false;
169
+ }
170
+ prepareSource(source) {
171
+ const initialSource = this.getInitialSort();
172
+ if (initialSource && initialSource['field'] && initialSource['direction']) {
173
+ source.setSort([initialSource], false);
174
+ }
175
+ if (this.getSetting('pager.display') === true) {
176
+ source.setPaging(this.getPageToSelect(source), this.getSetting('pager.perPage'), false);
177
+ }
178
+ source.refresh();
179
+ return source;
180
+ }
181
+ getInitialSort() {
182
+ const sortConf = {};
183
+ this.getColumns().forEach((column) => {
184
+ if (column.isSortable && column.defaultSortDirection) {
185
+ sortConf['field'] = column.id;
186
+ sortConf['direction'] = column.defaultSortDirection;
187
+ sortConf['compare'] = column.getCompareFunction();
188
+ }
189
+ });
190
+ return sortConf;
191
+ }
192
+ getSelectedRowsData() {
193
+ return this.dataSet.getRows();
194
+ }
195
+ selectAllRows(status) {
196
+ this.dataSet.setSelectAll(status);
197
+ }
198
+ getFirstRow() {
199
+ return this.dataSet.getFirstRow();
200
+ }
201
+ getLastRow() {
202
+ return this.dataSet.getLastRow();
203
+ }
204
+ getSelectionInfo() {
205
+ const switchPageToSelectedRowPage = this.getSetting('switchPageToSelectedRowPage');
206
+ const selectedRowIndex = Number(this.getSetting('selectedRowIndex', 0)) || 0;
207
+ const { perPage, page } = this.getSetting('pager');
208
+ return { perPage, page, selectedRowIndex, switchPageToSelectedRowPage };
209
+ }
210
+ getPageToSelect(source) {
211
+ const { switchPageToSelectedRowPage, selectedRowIndex, perPage, page } = this.getSelectionInfo();
212
+ let pageToSelect = Math.max(1, page);
213
+ if (switchPageToSelectedRowPage && selectedRowIndex >= 0) {
214
+ pageToSelect = getPageForRowIndex(selectedRowIndex, perPage);
215
+ }
216
+ const maxPageAmount = Math.ceil(source.count() / perPage);
217
+ return maxPageAmount ? Math.min(pageToSelect, maxPageAmount) : pageToSelect;
218
+ }
219
+ }
220
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nMi1zbWFydC10YWJsZS9zcmMvbGliL2xpYi9ncmlkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBSTdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFHNUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBSTlDLE1BQU0sT0FBTyxJQUFJO0lBY2YsWUFBWSxNQUFrQixFQUFFLFFBQTRCO1FBWjVELG9CQUFlLEdBQVksS0FBSyxDQUFDO1FBTWpDLHNCQUFpQixHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDdkMsd0JBQW1CLEdBQUcsSUFBSSxPQUFPLEVBQU8sQ0FBQztRQU12QyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNwQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEQ7UUFDRCxJQUFJLElBQUksQ0FBQywyQkFBMkIsRUFBRTtZQUNwQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDaEQ7SUFDSCxDQUFDO0lBRUQsZ0JBQWdCLENBQUMsUUFBZ0I7UUFDL0IsT0FBTyxJQUFJLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUVELHdCQUF3QixDQUFDLFFBQWdCO1FBQ3ZDLE9BQU8sUUFBUSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENB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YUFBYSxHQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxHQUFHLE9BQU8sQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDO0lBQzlFLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFN1YmplY3QsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IERlZmVycmVkLCBnZXREZWVwRnJvbU9iamVjdCwgZ2V0UGFnZUZvclJvd0luZGV4IH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCB7IENvbHVtbiB9IGZyb20gJy4vZGF0YS1zZXQvY29sdW1uJztcbmltcG9ydCB7IFJvdyB9IGZyb20gJy4vZGF0YS1zZXQvcm93JztcbmltcG9ydCB7IERhdGFTZXQgfSBmcm9tICcuL2RhdGEtc2V0L2RhdGEtc2V0JztcbmltcG9ydCB7IERhdGFTb3VyY2UgfSBmcm9tICcuL2RhdGEtc291cmNlL2RhdGEtc291cmNlJztcbmltcG9ydCB7IFNtYXJ0VGFibGVTZXR0aW5ncyB9IGZyb20gJy4vaW50ZXJmYWNlcy9zbWFydC10YWJsZS5tb2RlbHMnO1xuXG5leHBvcnQgY2xhc3MgR3JpZCB7XG5cbiAgY3JlYXRlRm9ybVNob3duOiBib29sZWFuID0gZmFsc2U7XG5cbiAgc291cmNlOiBEYXRhU291cmNlO1xuICBzZXR0aW5nczogU21hcnRUYWJsZVNldHRpbmdzO1xuICBkYXRhU2V0OiBEYXRhU2V0O1xuXG4gIG9uU2VsZWN0Um93U291cmNlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICBvbkRlc2VsZWN0Um93U291cmNlID0gbmV3IFN1YmplY3Q8YW55PigpO1xuXG4gIHByaXZhdGUgc291cmNlT25DaGFuZ2VkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgc291cmNlT25VcGRhdGVkU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgY29uc3RydWN0b3Ioc291cmNlOiBEYXRhU291cmNlLCBzZXR0aW5nczogU21hcnRUYWJsZVNldHRpbmdzKSB7XG4gICAgdGhpcy5zZXRTZXR0aW5ncyhzZXR0aW5ncyk7XG4gICAgdGhpcy5zZXRTb3VyY2Uoc291cmNlKTtcbiAgfVxuXG4gIGRldGFjaCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zb3VyY2VPbkNoYW5nZWRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuc291cmNlT25DaGFuZ2VkU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvdXJjZU9uVXBkYXRlZFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zb3VyY2VPblVwZGF0ZWRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBzaG93QWN0aW9uQ29sdW1uKHBvc2l0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc0N1cnJlbnRBY3Rpb25zUG9zaXRpb24ocG9zaXRpb24pICYmIHRoaXMuaXNBY3Rpb25zVmlzaWJsZSgpO1xuICB9XG5cbiAgaXNDdXJyZW50QWN0aW9uc1Bvc2l0aW9uKHBvc2l0aW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gcG9zaXRpb24gPT0gdGhpcy5nZXRTZXR0aW5nKCdhY3Rpb25zLnBvc2l0aW9uJyk7XG4gIH1cblxuICBpc0FjdGlvbnNWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNldHRpbmcoJ2FjdGlvbnMuYWRkJykgfHwgdGhpcy5nZXRTZXR0aW5nKCdhY3Rpb25zLmVkaXQnKSB8fCB0aGlzLmdldFNldHRpbmcoJ2FjdGlvbnMuZGVsZXRlJykgfHwgdGhpcy5nZXRTZXR0aW5nKCdhY3Rpb25zLmN1c3RvbScpLmxlbmd0aDtcbiAgfVxuXG4gIGlzTXVsdGlTZWxlY3RWaXNpYmxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldFNldHRpbmcoJ3NlbGVjdE1vZGUnKSA9PT0gJ211bHRpJztcbiAgfVxuXG4gIGdldE5ld1JvdygpOiBSb3cge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXQubmV3Um93O1xuICB9XG5cbiAgc2V0U2V0dGluZ3Moc2V0dGluZ3M6IFNtYXJ0VGFibGVTZXR0aW5ncykge1xuICAgIHRoaXMuc2V0dGluZ3MgPSBzZXR0aW5ncztcbiAgICB0aGlzLmRhdGFTZXQgPSBuZXcgRGF0YVNldChbXSwgdGhpcy5nZXRTZXR0aW5nKCdjb2x1bW5zJykpO1xuXG4gICAgaWYgKHRoaXMuc291cmNlKSB7XG4gICAgICB0aGlzLnNvdXJjZS5yZWZyZXNoKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0RGF0YVNldCgpOiBEYXRhU2V0IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2V0O1xuICB9XG5cbiAgc2V0U291cmNlKHNvdXJjZTogRGF0YVNvdXJjZSkge1xuICAgIHRoaXMuc291cmNlID0gdGhpcy5wcmVwYXJlU291cmNlKHNvdXJjZSk7XG4gICAgdGhpcy5kZXRhY2goKTtcblxuICAgIHRoaXMuc291cmNlT25DaGFuZ2VkU3Vic2NyaXB0aW9uID0gdGhpcy5zb3VyY2Uub25DaGFuZ2VkKCkuc3Vic2NyaWJlKChjaGFuZ2VzOiBhbnkpID0+IHRoaXMucHJvY2Vzc0RhdGFDaGFuZ2UoY2hhbmdlcykpO1xuXG4gICAgdGhpcy5zb3VyY2VPblVwZGF0ZWRTdWJzY3JpcHRpb24gPSB0aGlzLnNvdXJjZS5vblVwZGF0ZWQoKS5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlZFJvdyA9IHRoaXMuZGF0YVNldC5maW5kUm93QnlEYXRhKGRhdGEpO1xuICAgICAgY2hhbmdlZFJvdy5zZXREYXRhKGRhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0U2V0dGluZyhuYW1lOiBzdHJpbmcsIGRlZmF1bHRWYWx1ZT86IGFueSk6IGFueSB7XG4gICAgcmV0dXJuIGdldERlZXBGcm9tT2JqZWN0KHRoaXMuc2V0dGluZ3MsIG5hbWUsIGRlZmF1bHRWYWx1ZSk7XG4gIH1cblxuICBnZXRDb2x1bW5zKCk6IEFycmF5PENvbHVtbj4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXQuZ2V0Q29sdW1ucygpO1xuICB9XG5cbiAgZ2V0Um93cygpOiBBcnJheTxSb3c+IHtcbiAgICByZXR1cm4gdGhpcy5kYXRhU2V0LmdldFJvd3MoKTtcbiAgfVxuXG4gIHNlbGVjdFJvdyhyb3c6IFJvdywgc3RhdGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmRhdGFTZXQuc2VsZWN0Um93KHJvdywgc3RhdGUpO1xuICB9XG5cbiAgbXVsdGlwbGVTZWxlY3RSb3cocm93OiBSb3cpIHtcbiAgICB0aGlzLmRhdGFTZXQubXVsdGlwbGVTZWxlY3RSb3cocm93KTtcbiAgfVxuXG4gIG9uU2VsZWN0Um93KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMub25TZWxlY3RSb3dTb3VyY2UuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBvbkRlc2VsZWN0Um93KCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMub25EZXNlbGVjdFJvd1NvdXJjZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIGVkaXQocm93OiBSb3cpIHtcbiAgICByb3cuaXNJbkVkaXRpbmcgPSB0cnVlO1xuICB9XG5cbiAgY3JlYXRlKHJvdzogUm93LCBjb25maXJtRW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4pIHtcblxuICAgIGNvbnN0IGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgZGVmZXJyZWQucHJvbWlzZS50aGVuKChuZXdEYXRhKSA9PiB7XG4gICAgICBuZXdEYXRhID0gbmV3RGF0YSA/IG5ld0RhdGEgOiByb3cuZ2V0TmV3RGF0YSgpO1xuICAgICAgaWYgKGRlZmVycmVkLnJlc29sdmUuc2tpcEFkZCkge1xuICAgICAgICB0aGlzLmNyZWF0ZUZvcm1TaG93biA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zb3VyY2UucHJlcGVuZChuZXdEYXRhKS50aGVuKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmNyZWF0ZUZvcm1TaG93biA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZGF0YVNldC5jcmVhdGVOZXdSb3coKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSkuY2F0Y2goKGVycikgPT4ge1xuICAgICAgLy8gZG9pbmcgbm90aGluZ1xuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuZ2V0U2V0dGluZygnYWRkLmNvbmZpcm1DcmVhdGUnKSkge1xuICAgICAgY29uZmlybUVtaXR0ZXIuZW1pdCh7XG4gICAgICAgIG5ld0RhdGE6IHJvdy5nZXROZXdEYXRhKCksXG4gICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgIGNvbmZpcm06IGRlZmVycmVkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICB9XG4gIH1cblxuICBzYXZlKHJvdzogUm93LCBjb25maXJtRW1pdHRlcjogRXZlbnRFbWl0dGVyPGFueT4pIHtcblxuICAgIGNvbnN0IGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgZGVmZXJyZWQucHJvbWlzZS50aGVuKChuZXdEYXRhKSA9PiB7XG4gICAgICBuZXdEYXRhID0gbmV3RGF0YSA/IG5ld0RhdGEgOiByb3cuZ2V0TmV3RGF0YSgpO1xuICAgICAgaWYgKGRlZmVycmVkLnJlc29sdmUuc2tpcEVkaXQpIHtcbiAgICAgICAgcm93LmlzSW5FZGl0aW5nID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNvdXJjZS51cGRhdGUocm93LmdldERhdGEoKSwgbmV3RGF0YSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgcm93LmlzSW5FZGl0aW5nID0gZmFsc2U7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIC8vIGRvaW5nIG5vdGhpbmdcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmdldFNldHRpbmcoJ2VkaXQuY29uZmlybVNhdmUnKSkge1xuICAgICAgY29uZmlybUVtaXR0ZXIuZW1pdCh7XG4gICAgICAgIGRhdGE6IHJvdy5nZXREYXRhKCksXG4gICAgICAgIG5ld0RhdGE6IHJvdy5nZXROZXdEYXRhKCksXG4gICAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICAgIGNvbmZpcm06IGRlZmVycmVkLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmVycmVkLnJlc29sdmUoKTtcbiAgICB9XG4gIH1cblxuICBkZWxldGUocm93OiBSb3csIGNvbmZpcm1FbWl0dGVyOiBFdmVudEVtaXR0ZXI8YW55Pikge1xuICAgIGNvbnN0IGRlZmVycmVkID0gbmV3IERlZmVycmVkKCk7XG4gICAgZGVmZXJyZWQucHJvbWlzZS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMuc291cmNlLnJlbW92ZShyb3cuZ2V0RGF0YSgpKTtcbiAgICB9KS5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAvLyBkb2luZyBub3RoaW5nXG4gICAgfSk7XG5cbiAgICBpZiAodGhpcy5nZXRTZXR0aW5nKCdkZWxldGUuY29uZmlybURlbGV0ZScpKSB7XG4gICAgICBjb25maXJtRW1pdHRlci5lbWl0KHtcbiAgICAgICAgZGF0YTogcm93LmdldERhdGEoKSxcbiAgICAgICAgc291cmNlOiB0aGlzLnNvdXJjZSxcbiAgICAgICAgY29uZmlybTogZGVmZXJyZWQsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVmZXJyZWQucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBpZihyb3cuaXNTZWxlY3RlZCkge1xuICAgICAgdGhpcy5kYXRhU2V0LnNlbGVjdFJvdyhyb3csIGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzRGF0YUNoYW5nZShjaGFuZ2VzOiBhbnkpIHtcbiAgICBpZiAodGhpcy5zaG91bGRQcm9jZXNzQ2hhbmdlKGNoYW5nZXMpKSB7XG4gICAgICBpZihjaGFuZ2VzWydhY3Rpb24nXSA9PT0gJ2xvYWQnKSB7XG4gICAgICAgIHRoaXMuZGF0YVNldC5kZXNlbGVjdEFsbCgpXG4gICAgICB9XG4gICAgICB0aGlzLmRhdGFTZXQuc2V0RGF0YShjaGFuZ2VzWydlbGVtZW50cyddKTtcbiAgICB9XG4gIH1cblxuICBzaG91bGRQcm9jZXNzQ2hhbmdlKGNoYW5nZXM6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmIChbJ2ZpbHRlcicsICdzb3J0JywgJ3BhZ2UnLCAncmVtb3ZlJywgJ3JlZnJlc2gnLCAnbG9hZCcsICdwYWdpbmcnXS5pbmRleE9mKGNoYW5nZXNbJ2FjdGlvbiddKSAhPT0gLTEpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAoWydwcmVwZW5kJywgJ2FwcGVuZCddLmluZGV4T2YoY2hhbmdlc1snYWN0aW9uJ10pICE9PSAtMSAmJiAhdGhpcy5nZXRTZXR0aW5nKCdwYWdlci5kaXNwbGF5JykpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBwcmVwYXJlU291cmNlKHNvdXJjZTogYW55KTogRGF0YVNvdXJjZSB7XG4gICAgY29uc3QgaW5pdGlhbFNvdXJjZTogYW55ID0gdGhpcy5nZXRJbml0aWFsU29ydCgpO1xuICAgIGlmIChpbml0aWFsU291cmNlICYmIGluaXRpYWxTb3VyY2VbJ2ZpZWxkJ10gJiYgaW5pdGlhbFNvdXJjZVsnZGlyZWN0aW9uJ10pIHtcbiAgICAgIHNvdXJjZS5zZXRTb3J0KFtpbml0aWFsU291cmNlXSwgZmFsc2UpO1xuICAgIH1cbiAgICBpZiAodGhpcy5nZXRTZXR0aW5nKCdwYWdlci5kaXNwbGF5JykgPT09IHRydWUpIHtcbiAgICAgIHNvdXJjZS5zZXRQYWdpbmcodGhpcy5nZXRQYWdlVG9TZWxlY3Qoc291cmNlKSwgdGhpcy5nZXRTZXR0aW5nKCdwYWdlci5wZXJQYWdlJyksIGZhbHNlKTtcbiAgICB9XG5cbiAgICBzb3VyY2UucmVmcmVzaCgpO1xuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICBnZXRJbml0aWFsU29ydCgpIHtcbiAgICBjb25zdCBzb3J0Q29uZjogYW55ID0ge307XG4gICAgdGhpcy5nZXRDb2x1bW5zKCkuZm9yRWFjaCgoY29sdW1uOiBDb2x1bW4pID0+IHtcbiAgICAgIGlmIChjb2x1bW4uaXNTb3J0YWJsZSAmJiBjb2x1bW4uZGVmYXVsdFNvcnREaXJlY3Rpb24pIHtcbiAgICAgICAgc29ydENvbmZbJ2ZpZWxkJ10gPSBjb2x1bW4uaWQ7XG4gICAgICAgIHNvcnRDb25mWydkaXJlY3Rpb24nXSA9IGNvbHVtbi5kZWZhdWx0U29ydERpcmVjdGlvbjtcbiAgICAgICAgc29ydENvbmZbJ2NvbXBhcmUnXSA9IGNvbHVtbi5nZXRDb21wYXJlRnVuY3Rpb24oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc29ydENvbmY7XG4gIH1cblxuICBnZXRTZWxlY3RlZFJvd3NEYXRhKCk6IEFycmF5PGFueT4ge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXQuZ2V0Um93cygpXG4gIH1cblxuICBzZWxlY3RBbGxSb3dzKHN0YXR1czogYm9vbGVhbikge1xuICAgIHRoaXMuZGF0YVNldC5zZXRTZWxlY3RBbGwoc3RhdHVzKTtcbiAgfVxuXG4gIGdldEZpcnN0Um93KCk6IFJvdyB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YVNldC5nZXRGaXJzdFJvdygpO1xuICB9XG5cbiAgZ2V0TGFzdFJvdygpOiBSb3cge1xuICAgIHJldHVybiB0aGlzLmRhdGFTZXQuZ2V0TGFzdFJvdygpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRTZWxlY3Rpb25JbmZvKCk6IHsgcGVyUGFnZTogbnVtYmVyLCBwYWdlOiBudW1iZXIsIHNlbGVjdGVkUm93SW5kZXg6IG51bWJlciwgc3dpdGNoUGFnZVRvU2VsZWN0ZWRSb3dQYWdlOiBib29sZWFuIH0ge1xuICAgIGNvbnN0IHN3aXRjaFBhZ2VUb1NlbGVjdGVkUm93UGFnZTogYm9vbGVhbiA9IHRoaXMuZ2V0U2V0dGluZygnc3dpdGNoUGFnZVRvU2VsZWN0ZWRSb3dQYWdlJyk7XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dJbmRleDogbnVtYmVyID0gTnVtYmVyKHRoaXMuZ2V0U2V0dGluZygnc2VsZWN0ZWRSb3dJbmRleCcsIDApKSB8fCAwO1xuICAgIGNvbnN0IHsgcGVyUGFnZSwgcGFnZSB9OiB7IHBlclBhZ2U6IG51bWJlciwgcGFnZTogbnVtYmVyIH0gPSB0aGlzLmdldFNldHRpbmcoJ3BhZ2VyJyk7XG4gICAgcmV0dXJuIHsgcGVyUGFnZSwgcGFnZSwgc2VsZWN0ZWRSb3dJbmRleCwgc3dpdGNoUGFnZVRvU2VsZWN0ZWRSb3dQYWdlIH07XG4gIH1cblxuICBwcml2YXRlIGdldFBhZ2VUb1NlbGVjdChzb3VyY2U6IERhdGFTb3VyY2UpOiBudW1iZXIge1xuICAgIGNvbnN0IHsgc3dpdGNoUGFnZVRvU2VsZWN0ZWRSb3dQYWdlLCBzZWxlY3RlZFJvd0luZGV4LCBwZXJQYWdlLCBwYWdlIH0gPSB0aGlzLmdldFNlbGVjdGlvbkluZm8oKTtcbiAgICBsZXQgcGFnZVRvU2VsZWN0OiBudW1iZXIgPSBNYXRoLm1heCgxLCBwYWdlKTtcbiAgICBpZiAoc3dpdGNoUGFnZVRvU2VsZWN0ZWRSb3dQYWdlICYmIHNlbGVjdGVkUm93SW5kZXggPj0gMCkge1xuICAgICAgcGFnZVRvU2VsZWN0ID0gZ2V0UGFnZUZvclJvd0luZGV4KHNlbGVjdGVkUm93SW5kZXgsIHBlclBhZ2UpO1xuICAgIH1cbiAgICBjb25zdCBtYXhQYWdlQW1vdW50OiBudW1iZXIgPSBNYXRoLmNlaWwoc291cmNlLmNvdW50KCkgLyBwZXJQYWdlKTtcbiAgICByZXR1cm4gbWF4UGFnZUFtb3VudCA/IE1hdGgubWluKHBhZ2VUb1NlbGVjdCwgbWF4UGFnZUFtb3VudCkgOiBwYWdlVG9TZWxlY3Q7XG4gIH1cbn1cbiJdfQ==
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Extending object that entered in first argument.
3
+ *
4
+ * Returns extended object or false if have no target object or incorrect type.
5
+ *
6
+ * If you wish to clone source object (without modify it), just use empty new
7
+ * object as first argument, like this:
8
+ * deepExtend({}, yourObj_1, [yourObj_N]);
9
+ */
10
+ export const deepExtend = function (...objects) {
11
+ if (arguments.length < 1 || typeof arguments[0] !== 'object') {
12
+ return false;
13
+ }
14
+ if (arguments.length < 2) {
15
+ return arguments[0];
16
+ }
17
+ const target = arguments[0];
18
+ // convert arguments to array and cut off target object
19
+ const args = Array.prototype.slice.call(arguments, 1);
20
+ let val, src;
21
+ args.forEach((obj) => {
22
+ // skip argument if it is array or isn't object
23
+ if (typeof obj !== 'object' || Array.isArray(obj)) {
24
+ return;
25
+ }
26
+ Object.keys(obj).forEach(function (key) {
27
+ src = target[key]; // source value
28
+ val = obj[key]; // new value
29
+ // recursion prevention
30
+ if (val === target) {
31
+ return;
32
+ /**
33
+ * if new value isn't object then just overwrite by new value
34
+ * instead of extending.
35
+ */
36
+ }
37
+ else if (typeof val !== 'object' || val === null) {
38
+ target[key] = val;
39
+ return;
40
+ // just clone arrays (and recursive clone objects inside)
41
+ }
42
+ else if (Array.isArray(val)) {
43
+ target[key] = [...val];
44
+ return;
45
+ // overwrite by new value if source isn't object or array
46
+ }
47
+ else if (typeof src !== 'object' || src === null || Array.isArray(src)) {
48
+ target[key] = deepExtend({}, val);
49
+ return;
50
+ // source value and new value is objects both, extending...
51
+ }
52
+ else {
53
+ target[key] = deepExtend(src, val);
54
+ return;
55
+ }
56
+ });
57
+ });
58
+ return target;
59
+ };
60
+ export class Deferred {
61
+ constructor() {
62
+ this.promise = new Promise((resolve, reject) => {
63
+ this.resolve = resolve;
64
+ this.reject = reject;
65
+ });
66
+ }
67
+ }
68
+ // getDeepFromObject({result: {data: 1}}, 'result.data', 2); // returns 1
69
+ export function getDeepFromObject(object = {}, name, defaultValue) {
70
+ const keys = name.split('.');
71
+ // clone the object
72
+ let level = deepExtend({}, object);
73
+ keys.forEach((k) => {
74
+ if (level && typeof level[k] !== 'undefined') {
75
+ level = level[k];
76
+ }
77
+ });
78
+ return typeof level === 'undefined' ? defaultValue : level;
79
+ }
80
+ export function getPageForRowIndex(index, perPage) {
81
+ // we need to add 1 to convert 0-based index to 1-based page number.
82
+ return Math.floor(index / perPage) + 1;
83
+ }
84
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nMi1zbWFydC10YWJsZS9zcmMvbGliL2xpYi9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLFVBQVMsR0FBRyxPQUFtQjtJQUN2RCxJQUFJLFNBQVMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLE9BQU8sU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLFFBQVEsRUFBRTtRQUM1RCxPQUFPLEtBQUssQ0FBQztLQUNkO0lBRUQsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUN4QixPQUFPLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUNyQjtJQUVELE1BQU0sTUFBTSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU1Qix1REFBdUQ7SUFDdkQsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUV0RCxJQUFJLEdBQUcsRUFBRSxHQUFHLENBQUM7SUFFYixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBUSxFQUFFLEVBQUU7UUFDeEIsK0NBQStDO1FBQy9DLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakQsT0FBTztTQUNSO1FBRUQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsVUFBVSxHQUFHO1lBQ3BDLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxlQUFlO1lBQ2xDLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxZQUFZO1lBRTVCLHVCQUF1QjtZQUN2QixJQUFJLEdBQUcsS0FBSyxNQUFNLEVBQUU7Z0JBQ2xCLE9BQU87Z0JBRVA7OzttQkFHRzthQUNKO2lCQUFNLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxJQUFJLEdBQUcsS0FBSyxJQUFJLEVBQUU7Z0JBQ2xELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ2xCLE9BQU87Z0JBRVAseURBQXlEO2FBQzFEO2lCQUFNLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDN0IsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztnQkFDdkIsT0FBTztnQkFFUCx5REFBeUQ7YUFDMUQ7aUJBQU0sSUFBSSxPQUFPLEdBQUcsS0FBSyxRQUFRLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUN4RSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsVUFBVSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDbEMsT0FBTztnQkFFUCwyREFBMkQ7YUFDNUQ7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7Z0JBQ25DLE9BQU87YUFDUjtRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRixNQUFNLE9BQU8sUUFBUTtJQU9uQjtRQUNFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDN0MsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7WUFDdkIsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0Y7QUFFRCx5RUFBeUU7QUFDekUsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxFQUFFLEVBQUUsSUFBWSxFQUFFLFlBQWtCO0lBQzdFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDN0IsbUJBQW1CO0lBQ25CLElBQUksS0FBSyxHQUFHLFVBQVUsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDbkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ2pCLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLFdBQVcsRUFBRTtZQUM1QyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2xCO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLE9BQU8sS0FBSyxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDN0QsQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxLQUFhLEVBQUUsT0FBZTtJQUMvRCxvRUFBb0U7SUFDcEUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDekMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogRXh0ZW5kaW5nIG9iamVjdCB0aGF0IGVudGVyZWQgaW4gZmlyc3QgYXJndW1lbnQuXG4gKlxuICogUmV0dXJucyBleHRlbmRlZCBvYmplY3Qgb3IgZmFsc2UgaWYgaGF2ZSBubyB0YXJnZXQgb2JqZWN0IG9yIGluY29ycmVjdCB0eXBlLlxuICpcbiAqIElmIHlvdSB3aXNoIHRvIGNsb25lIHNvdXJjZSBvYmplY3QgKHdpdGhvdXQgbW9kaWZ5IGl0KSwganVzdCB1c2UgZW1wdHkgbmV3XG4gKiBvYmplY3QgYXMgZmlyc3QgYXJndW1lbnQsIGxpa2UgdGhpczpcbiAqICAgZGVlcEV4dGVuZCh7fSwgeW91ck9ial8xLCBbeW91ck9ial9OXSk7XG4gKi9cbmV4cG9ydCBjb25zdCBkZWVwRXh0ZW5kID0gZnVuY3Rpb24oLi4ub2JqZWN0czogQXJyYXk8YW55Pik6IGFueSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMSB8fCB0eXBlb2YgYXJndW1lbnRzWzBdICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHJldHVybiBhcmd1bWVudHNbMF07XG4gIH1cblxuICBjb25zdCB0YXJnZXQgPSBhcmd1bWVudHNbMF07XG5cbiAgLy8gY29udmVydCBhcmd1bWVudHMgdG8gYXJyYXkgYW5kIGN1dCBvZmYgdGFyZ2V0IG9iamVjdFxuICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAxKTtcblxuICBsZXQgdmFsLCBzcmM7XG5cbiAgYXJncy5mb3JFYWNoKChvYmo6IGFueSkgPT4ge1xuICAgIC8vIHNraXAgYXJndW1lbnQgaWYgaXQgaXMgYXJyYXkgb3IgaXNuJ3Qgb2JqZWN0XG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICBzcmMgPSB0YXJnZXRba2V5XTsgLy8gc291cmNlIHZhbHVlXG4gICAgICB2YWwgPSBvYmpba2V5XTsgLy8gbmV3IHZhbHVlXG5cbiAgICAgIC8vIHJlY3Vyc2lvbiBwcmV2ZW50aW9uXG4gICAgICBpZiAodmFsID09PSB0YXJnZXQpIHtcbiAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBpZiBuZXcgdmFsdWUgaXNuJ3Qgb2JqZWN0IHRoZW4ganVzdCBvdmVyd3JpdGUgYnkgbmV3IHZhbHVlXG4gICAgICAgICAqIGluc3RlYWQgb2YgZXh0ZW5kaW5nLlxuICAgICAgICAgKi9cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcgfHwgdmFsID09PSBudWxsKSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gdmFsO1xuICAgICAgICByZXR1cm47XG5cbiAgICAgICAgLy8ganVzdCBjbG9uZSBhcnJheXMgKGFuZCByZWN1cnNpdmUgY2xvbmUgb2JqZWN0cyBpbnNpZGUpXG4gICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB0YXJnZXRba2V5XSA9IFsuLi52YWxdO1xuICAgICAgICByZXR1cm47XG5cbiAgICAgICAgLy8gb3ZlcndyaXRlIGJ5IG5ldyB2YWx1ZSBpZiBzb3VyY2UgaXNuJ3Qgb2JqZWN0IG9yIGFycmF5XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcmMgIT09ICdvYmplY3QnIHx8IHNyYyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHNyYykpIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBkZWVwRXh0ZW5kKHt9LCB2YWwpO1xuICAgICAgICByZXR1cm47XG5cbiAgICAgICAgLy8gc291cmNlIHZhbHVlIGFuZCBuZXcgdmFsdWUgaXMgb2JqZWN0cyBib3RoLCBleHRlbmRpbmcuLi5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRhcmdldFtrZXldID0gZGVlcEV4dGVuZChzcmMsIHZhbCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRhcmdldDtcbn07XG5cbmV4cG9ydCBjbGFzcyBEZWZlcnJlZCB7XG5cbiAgcHJvbWlzZTogUHJvbWlzZTxhbnk+O1xuXG4gIHJlc29sdmU6IGFueTtcbiAgcmVqZWN0OiBhbnk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICAgIHRoaXMucmVqZWN0ID0gcmVqZWN0O1xuICAgIH0pO1xuICB9XG59XG5cbi8vIGdldERlZXBGcm9tT2JqZWN0KHtyZXN1bHQ6IHtkYXRhOiAxfX0sICdyZXN1bHQuZGF0YScsIDIpOyAvLyByZXR1cm5zIDFcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWVwRnJvbU9iamVjdChvYmplY3QgPSB7fSwgbmFtZTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnkpIHtcbiAgY29uc3Qga2V5cyA9IG5hbWUuc3BsaXQoJy4nKTtcbiAgLy8gY2xvbmUgdGhlIG9iamVjdFxuICBsZXQgbGV2ZWwgPSBkZWVwRXh0ZW5kKHt9LCBvYmplY3QpO1xuICBrZXlzLmZvckVhY2goKGspID0+IHtcbiAgICBpZiAobGV2ZWwgJiYgdHlwZW9mIGxldmVsW2tdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgbGV2ZWwgPSBsZXZlbFtrXTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0eXBlb2YgbGV2ZWwgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdFZhbHVlIDogbGV2ZWw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWdlRm9yUm93SW5kZXgoaW5kZXg6IG51bWJlciwgcGVyUGFnZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgLy8gd2UgbmVlZCB0byBhZGQgMSB0byBjb252ZXJ0IDAtYmFzZWQgaW5kZXggdG8gMS1iYXNlZCBwYWdlIG51bWJlci5cbiAgcmV0dXJuIE1hdGguZmxvb3IoaW5kZXggLyBwZXJQYWdlKSArIDE7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtdGFibGUubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmcyLXNtYXJ0LXRhYmxlL3NyYy9saWIvbGliL2ludGVyZmFjZXMvc21hcnQtdGFibGUubW9kZWxzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRhU291cmNlIH0gZnJvbSBcIi4uL2RhdGEtc291cmNlL2RhdGEtc291cmNlXCI7XG5pbXBvcnQgeyBMb2NhbERhdGFTb3VyY2UgfSBmcm9tIFwiLi4vZGF0YS1zb3VyY2UvbG9jYWwvbG9jYWwuZGF0YS1zb3VyY2VcIjtcbmltcG9ydCB7IERlZmVycmVkIH0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTZWxlY3RPcHRpb24ge1xuICB0aXRsZTogc3RyaW5nO1xuICB2YWx1ZTogbnVtYmVyIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0VGFibGVTZXR0aW5nczxUID0gYW55PiB7XG5cdG1vZGU/OiAnaW5saW5lJyB8ICdleHRlcm5hbCcgfCAnY2xpY2stdG8tZWRpdCc7XG5cdHNlbGVjdE1vZGU/OiAnc2luZ2xlJyB8ICdtdWx0aSc7XG5cdHNlbGVjdGVkUm93SW5kZXg/OiBudW1iZXI7IC8vaWYgbmVlZCBkZXNlbGVjdCBmaXJzdCBpdGVtIHNldCB2YWx1ZSA8IDA7XG5cdHN3aXRjaFBhZ2VUb1NlbGVjdGVkUm93UGFnZT86IGJvb2xlYW47XG5cdGhpZGVIZWFkZXI/OiBib29sZWFuO1xuXHRoaWRlU3ViSGVhZGVyPzogYm9vbGVhbjtcblx0YWN0aW9ucz86IFNtYXJ0VGFibGVBY3Rpb24gfCBmYWxzZTtcblx0ZmlsdGVyPzoge1xuXHRcdGlucHV0Q2xhc3M6IHN0cmluZztcblx0fTtcblx0ZWRpdD86XG5cdFx0fCB7XG5cdFx0XHRcdGlucHV0Q2xhc3M/OiBzdHJpbmc7XG5cdFx0XHRcdGVkaXRCdXR0b25Db250ZW50Pzogc3RyaW5nO1xuXHRcdFx0XHRzYXZlQnV0dG9uQ29udGVudD86IHN0cmluZztcblx0XHRcdFx0Y2FuY2VsQnV0dG9uQ29udGVudD86IHN0cmluZztcblx0XHRcdFx0Y29uZmlybVNhdmU/OiBib29sZWFuO1xuXHRcdCAgfVxuXHRcdHwgZmFsc2U7XG5cdGFkZD86XG5cdFx0fCB7XG5cdFx0XHRcdGlucHV0Q2xhc3M/OiBzdHJpbmc7XG5cdFx0XHRcdGFkZEJ1dHRvbkNvbnRlbnQ/OiBzdHJpbmc7XG5cdFx0XHRcdGNyZWF0ZUJ1dHRvbkNvbnRlbnQ/OiBzdHJpbmc7XG5cdFx0XHRcdGNhbmNlbEJ1dHRvbkNvbnRlbnQ/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbmZpcm1DcmVhdGU/OiBib29sZWFuO1xuXHRcdCAgfVxuXHRcdHwgZmFsc2U7XG5cdGRlbGV0ZT86XG5cdFx0fCB7XG5cdFx0XHRcdGRlbGV0ZUJ1dHRvbkNvbnRlbnQ/OiBzdHJpbmc7XG5cdFx0XHRcdGNvbmZpcm1EZWxldGU/OiBib29sZWFuO1xuXHRcdCAgfVxuXHRcdHwgZmFsc2U7XG5cdGF0dHI/OiB7XG5cdFx0aWQ/OiBzdHJpbmc7XG5cdFx0Y2xhc3M/OiBzdHJpbmc7XG5cdH07XG5cdG5vRGF0YU1lc3NhZ2U/OiBzdHJpbmc7XG5cdGNvbHVtbnM6IHsgW2tleTogc3RyaW5nXTogU21hcnRUYWJsZUNvbHVtbjxUPiB9O1xuXHRwYWdlcj86IHtcblx0XHRkaXNwbGF5OiBib29sZWFuO1xuXHRcdHBhZ2U/OiBudW1iZXI7XG5cdFx0cGVyUGFnZTogbnVtYmVyO1xuXHR9IHwgZmFsc2U7XG5cdHJvd0NsYXNzRnVuY3Rpb24/OiAocm93OiB7IGRhdGE6IFQgfSkgPT4gc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0VGFibGVBY3Rpb24ge1xuXHRjb2x1bW5UaXRsZT86IHN0cmluZztcblx0YWRkPzogYm9vbGVhbjtcblx0ZWRpdD86IGJvb2xlYW47XG5cdGRlbGV0ZT86IGJvb2xlYW47XG5cdGN1c3RvbT86IFNtYXJ0VGFibGVDdXN0b21BY3Rpb25bXTtcblx0cG9zaXRpb24/OiAnbGVmdCcgfCAncmlnaHQnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0VGFibGVDdXN0b21BY3Rpb24ge1xuXHRuYW1lOiBzdHJpbmc7XG5cdHRpdGxlOiBzdHJpbmc7IC8vIGluc2VydCBodG1sIGNvbnRlbnQgdG8gYWN0aW9uIGJ1dHRvblxufVxuXG5leHBvcnQgdHlwZSBTbWFydFRhYmxlQ29sdW1uPFQ+ID0gU21hcnRUYWJsZVRleHRIdG1sQ29sdW1uPFQ+IHwgU21hcnRUYWJsZUN1c3RvbUNvbHVtbjxUPjtcblxuaW50ZXJmYWNlIFNtYXJ0VGFibGVEZWZhdWx0Q29sdW1uPFQ+IHtcblx0dGl0bGU6IHN0cmluZztcblx0d2lkdGg/OiBzdHJpbmc7IC8vZXhhbXBsZTogJzIwcHgnLCAnMjAlJ1xuXHRjbGFzcz86IHN0cmluZztcblx0ZWRpdGFibGU/OiBib29sZWFuO1xuXHRoaWRlPzogYm9vbGVhbjtcblx0c29ydD86IGJvb2xlYW47XG5cdHNvcnREaXJlY3Rpb24/OiAnZGVzYycgfCAnYXNjJyB8IGZhbHNlO1xuXHRlZGl0b3I/OiBTbWFydFRhYmxlRWRpdG9yQW5kRmlsdGVyO1xuXHRmaWx0ZXI/OiBTbWFydFRhYmxlRWRpdG9yQW5kRmlsdGVyIHwgZmFsc2U7XG5cdGNvbXBhcmVGdW5jdGlvbj86IChpdGVtQTogVCwgaXRlbUI6IFQpID0+IG51bWJlcjtcblx0dmFsdWVQcmVwYXJlRnVuY3Rpb24/OiAoY29sdW1uRGF0YTogYW55LCByb3dEYXRhOiBUKSA9PiBhbnk7XG5cdGZpbHRlckZ1bmN0aW9uPzogKGNvbHVtbkRhdGE6IGFueSwgc2VhcmNoOiBzdHJpbmcpID0+IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBTbWFydFRhYmxlVGV4dEh0bWxDb2x1bW48VD4gZXh0ZW5kcyBTbWFydFRhYmxlRGVmYXVsdENvbHVtbjxUPiB7XG5cdHR5cGU6ICd0ZXh0JyB8ICdodG1sJztcbn1cblxuaW50ZXJmYWNlIFNtYXJ0VGFibGVDdXN0b21Db2x1bW48VD4gZXh0ZW5kcyBTbWFydFRhYmxlRGVmYXVsdENvbHVtbjxUPiB7XG5cdHR5cGU6ICdjdXN0b20nO1xuXHRyZW5kZXJDb21wb25lbnQ6IGFueTtcbn1cblxuZXhwb3J0IHR5cGUgU21hcnRUYWJsZUVkaXRvckFuZEZpbHRlciA9XG5cdHwgeyB0eXBlOiAndGV4dCcgfCAndGV4dGFyZWEnIH1cblx0fCBTbWFydFRhYmxlRWRpdG9yTGlzdFxuXHR8IFNtYXJ0VGFibGVFZGl0b3JDb21wbGV0ZXJcblx0fCBTbWFydFRhYmxlRWRpdG9yQ2hlY2tib3hcblx0fCBTbWFydFRhYmxlRWRpdG9yQ3VzdG9tO1xuXG5pbnRlcmZhY2UgU21hcnRUYWJsZUVkaXRvckxpc3Qge1xuXHR0eXBlOiAnbGlzdCc7XG5cdGNvbmZpZzoge1xuXHRcdHNlbGVjdFRleHQ/OiBzdHJpbmc7XG5cdFx0bGlzdDogU2VsZWN0T3B0aW9uW107XG5cdH07XG59XG5cbmludGVyZmFjZSBTbWFydFRhYmxlRWRpdG9yQ29tcGxldGVyIHtcblx0dHlwZTogJ2NvbXBsZXRlcic7XG5cdGNvbmZpZzoge1xuXHRcdGNvbXBsZXRlcjoge1xuXHRcdFx0ZGF0YTogYW55W107XG5cdFx0XHRzZWFyY2hGaWVsZHM6IHN0cmluZztcblx0XHRcdHRpdGxlRmllbGQ6IHN0cmluZztcblx0XHRcdGRlc2NyaXB0aW9uRmllbGQ/OiBzdHJpbmc7XG5cdFx0fTtcblx0fTtcbn1cblxuaW50ZXJmYWNlIFNtYXJ0VGFibGVFZGl0b3JDdXN0b20ge1xuXHR0eXBlOiAnY3VzdG9tJztcblx0Y29tcG9uZW50OiBhbnk7XG5cdGNvbmZpZz86IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbWFydFRhYmxlRWRpdG9yQ2hlY2tib3gge1xuXHR0eXBlOiAnY2hlY2tib3gnO1xuXHRjb25maWc/OiB7XG5cdFx0dHJ1ZTogc3RyaW5nO1xuXHRcdGZhbHNlOiBzdHJpbmc7XG5cdFx0cmVzZXRUZXh0Pzogc3RyaW5nO1xuXHR9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNtYXJ0VGFibGVGaWx0ZXJJdGVtIHtcblx0ZmllbGQ6IHN0cmluZztcblx0c2VhcmNoOiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBTbWFydFRhYmxlRGVmYXVsdEV2ZW50PFQ+IHtcblx0Y29uZmlybTogRGVmZXJyZWQ7XG5cdGRhdGE6IFQ7XG5cdHNvdXJjZTogRGF0YVNvdXJjZTtcbn1cblxuZXhwb3J0IHR5cGUgU21hcnRUYWJsZUNvbmZpcm1EZWxldGVFdmVudDxUPWFueT4gPSBTbWFydFRhYmxlRGVmYXVsdEV2ZW50PFQ+O1xuXG5leHBvcnQgdHlwZSBTbWFydFRhYmxlUm93Q2xpY2tlZEV2ZW50PFQ9YW55PiA9IE9taXQ8U21hcnRUYWJsZURlZmF1bHRFdmVudDxUPiwgXCJjb25maXJtXCI+XG5cbmV4cG9ydCBpbnRlcmZhY2UgU21hcnRUYWJsZUN1c3RvbUV2ZW50PFQ9YW55PiBleHRlbmRzIE9taXQ8U21hcnRUYWJsZURlZmF1bHRFdmVudDxUPiwgXCJjb25maXJtXCI+IHtcblx0YWN0aW9uOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU21hcnRUYWJsZVJvd1NlbGVjdEV2ZW50PFQ9YW55PiBleHRlbmRzIE9taXQ8U21hcnRUYWJsZURlZmF1bHRFdmVudDxUPiwgXCJjb25maXJtXCI+IHtcblx0aXNTZWxlY3RlZDogYm9vbGVhbjtcblx0c2VsZWN0ZWQ6IFRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbWFydFRhYmxlQ29uZmlybUVkaXRFdmVudDxUPWFueT4gZXh0ZW5kcyBTbWFydFRhYmxlRGVmYXVsdEV2ZW50PFQ+IHtcblx0bmV3RGF0YTogVDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTbWFydFRhYmxlQ3JlYXRlQ29uZmlybTxUPWFueT4gZXh0ZW5kcyBPbWl0PFNtYXJ0VGFibGVEZWZhdWx0RXZlbnQ8VD4sIFwiZGF0YVwiPiB7XG5cdG5ld0RhdGE6IFQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT2JqZWN0U3RyaW5nU3RyaW5nIHtcblx0W2tleTogc3RyaW5nXTogc3RyaW5nO1xufVxuIl19
@@ -0,0 +1,203 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { Grid } from './lib/grid';
3
+ import { DataSource } from './lib/data-source/data-source';
4
+ import { deepExtend } from './lib/helpers';
5
+ import { LocalDataSource } from './lib/data-source/local/local.data-source';
6
+ import * as i0 from "@angular/core";
7
+ import * as i1 from "@angular/common";
8
+ import * as i2 from "./components/pager/pager.component";
9
+ import * as i3 from "./components/tbody/tbody.component";
10
+ import * as i4 from "./components/thead/thead.component";
11
+ function Ng2SmartTableComponent_thead_1_Template(rf, ctx) { if (rf & 1) {
12
+ const _r3 = i0.ɵɵgetCurrentView();
13
+ i0.ɵɵelementStart(0, "thead", 4);
14
+ i0.ɵɵlistener("create", function Ng2SmartTableComponent_thead_1_Template_thead_create_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.create.emit($event)); })("selectAllRows", function Ng2SmartTableComponent_thead_1_Template_thead_selectAllRows_0_listener() { i0.ɵɵrestoreView(_r3); const ctx_r4 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r4.onSelectAllRows()); });
15
+ i0.ɵɵelementEnd();
16
+ } if (rf & 2) {
17
+ const ctx_r0 = i0.ɵɵnextContext();
18
+ i0.ɵɵproperty("grid", ctx_r0.grid)("source", ctx_r0.source)("createConfirm", ctx_r0.createConfirm);
19
+ } }
20
+ function Ng2SmartTableComponent_ng2_smart_table_pager_3_Template(rf, ctx) { if (rf & 1) {
21
+ i0.ɵɵelement(0, "ng2-smart-table-pager", 5);
22
+ } if (rf & 2) {
23
+ const ctx_r1 = i0.ɵɵnextContext();
24
+ i0.ɵɵproperty("source", ctx_r1.source)("perPageSelect", ctx_r1.perPageSelect);
25
+ } }
26
+ export class Ng2SmartTableComponent {
27
+ constructor() {
28
+ this.multiRowSelect = new EventEmitter();
29
+ this.rowClicked = new EventEmitter();
30
+ this.delete = new EventEmitter();
31
+ this.edit = new EventEmitter();
32
+ this.create = new EventEmitter();
33
+ this.custom = new EventEmitter();
34
+ this.deleteConfirm = new EventEmitter();
35
+ this.editConfirm = new EventEmitter();
36
+ this.createConfirm = new EventEmitter();
37
+ this.rowHover = new EventEmitter();
38
+ this.defaultSettings = {
39
+ mode: 'inline',
40
+ selectMode: 'single',
41
+ /**
42
+ * Points to an element in all data
43
+ *
44
+ * when < 0 all lines must be deselected
45
+ */
46
+ selectedRowIndex: 0,
47
+ switchPageToSelectedRowPage: false,
48
+ hideHeader: false,
49
+ hideSubHeader: false,
50
+ actions: {
51
+ columnTitle: 'Actions',
52
+ add: true,
53
+ edit: true,
54
+ delete: true,
55
+ custom: [],
56
+ position: 'left', // left|right
57
+ },
58
+ filter: {
59
+ inputClass: '',
60
+ },
61
+ edit: {
62
+ inputClass: '',
63
+ editButtonContent: 'Edit',
64
+ saveButtonContent: 'Update',
65
+ cancelButtonContent: 'Cancel',
66
+ confirmSave: false,
67
+ },
68
+ add: {
69
+ inputClass: '',
70
+ addButtonContent: 'Add New',
71
+ createButtonContent: 'Create',
72
+ cancelButtonContent: 'Cancel',
73
+ confirmCreate: false,
74
+ },
75
+ delete: {
76
+ deleteButtonContent: 'Delete',
77
+ confirmDelete: false,
78
+ },
79
+ attr: {
80
+ id: '',
81
+ class: '',
82
+ },
83
+ noDataMessage: 'No data found',
84
+ columns: {},
85
+ pager: {
86
+ display: true,
87
+ page: 1,
88
+ perPage: 10,
89
+ },
90
+ rowClassFunction: () => '',
91
+ };
92
+ }
93
+ ngOnChanges(changes) {
94
+ if (this.grid) {
95
+ if (changes['settings']) {
96
+ this.grid.setSettings(this.prepareSettings());
97
+ }
98
+ if (changes['source']) {
99
+ this.source = this.prepareSource();
100
+ this.grid.setSource(this.source);
101
+ }
102
+ }
103
+ else {
104
+ this.initGrid();
105
+ }
106
+ this.tableId = this.grid.getSetting('attr.id');
107
+ this.tableClass = this.grid.getSetting('attr.class');
108
+ this.isHideHeader = this.grid.getSetting('hideHeader');
109
+ this.isHideSubHeader = this.grid.getSetting('hideSubHeader');
110
+ this.isPagerDisplay = this.grid.getSetting('pager.display');
111
+ this.isPagerDisplay = this.grid.getSetting('pager.display');
112
+ this.perPageSelect = this.grid.getSetting('pager.perPageSelect');
113
+ this.rowClassFunction = this.grid.getSetting('rowClassFunction');
114
+ }
115
+ onRowHover(row) {
116
+ this.rowHover.emit(row);
117
+ }
118
+ multipleSelectRow(row) {
119
+ this.grid.multipleSelectRow(row);
120
+ this.emitUserSelectRow(row);
121
+ }
122
+ onSelectAllRows() {
123
+ this.grid.dataSet.isAllSelected;
124
+ this.grid.selectAllRows(!this.grid.dataSet.isAllSelected);
125
+ this.emitUserSelectRow(null);
126
+ }
127
+ onSelectRow(row, state) {
128
+ this.grid.selectRow(row, state);
129
+ }
130
+ initGrid() {
131
+ this.source = this.prepareSource();
132
+ this.grid = new Grid(this.source, this.prepareSettings());
133
+ }
134
+ prepareSource() {
135
+ if (this.source instanceof DataSource) {
136
+ return this.source;
137
+ }
138
+ return new LocalDataSource();
139
+ }
140
+ prepareSettings() {
141
+ return deepExtend({}, this.defaultSettings, this.settings);
142
+ }
143
+ emitUserSelectRow(row) {
144
+ this.multiRowSelect.emit({
145
+ data: row ? row.getData() : null,
146
+ isSelected: row ? row.getIsSelected() : null,
147
+ source: this.source,
148
+ selected: this.grid.dataSet.getSelectedRowsData(),
149
+ });
150
+ }
151
+ emitUserRowClicked(row) {
152
+ this.rowClicked.emit({
153
+ data: row ? row.getData() : null,
154
+ source: this.source,
155
+ });
156
+ }
157
+ }
158
+ Ng2SmartTableComponent.ɵfac = function Ng2SmartTableComponent_Factory(t) { return new (t || Ng2SmartTableComponent)(); };
159
+ Ng2SmartTableComponent.ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: Ng2SmartTableComponent, selectors: [["ng2-smart-table"]], inputs: { source: "source", settings: "settings" }, outputs: { multiRowSelect: "multiRowSelect", rowClicked: "rowClicked", delete: "delete", edit: "edit", create: "create", custom: "custom", deleteConfirm: "deleteConfirm", editConfirm: "editConfirm", createConfirm: "createConfirm", rowHover: "rowHover" }, features: [i0.ɵɵNgOnChangesFeature], decls: 4, vars: 9, consts: [[3, "id", "ngClass"], ["ng2-st-thead", "", 3, "grid", "source", "createConfirm", "create", "selectAllRows", 4, "ngIf"], ["ng2-st-tbody", "", 3, "grid", "source", "deleteConfirm", "editConfirm", "rowClassFunction", "edit", "delete", "custom", "userClickedRow", "multipleSelectRow", "rowHover"], [3, "source", "perPageSelect", 4, "ngIf"], ["ng2-st-thead", "", 3, "grid", "source", "createConfirm", "create", "selectAllRows"], [3, "source", "perPageSelect"]], template: function Ng2SmartTableComponent_Template(rf, ctx) { if (rf & 1) {
160
+ i0.ɵɵelementStart(0, "table", 0);
161
+ i0.ɵɵtemplate(1, Ng2SmartTableComponent_thead_1_Template, 1, 3, "thead", 1);
162
+ i0.ɵɵelementStart(2, "tbody", 2);
163
+ i0.ɵɵlistener("edit", function Ng2SmartTableComponent_Template_tbody_edit_2_listener($event) { return ctx.edit.emit($event); })("delete", function Ng2SmartTableComponent_Template_tbody_delete_2_listener($event) { return ctx.delete.emit($event); })("custom", function Ng2SmartTableComponent_Template_tbody_custom_2_listener($event) { return ctx.custom.emit($event); })("userClickedRow", function Ng2SmartTableComponent_Template_tbody_userClickedRow_2_listener($event) { return ctx.emitUserRowClicked($event); })("multipleSelectRow", function Ng2SmartTableComponent_Template_tbody_multipleSelectRow_2_listener($event) { return ctx.multipleSelectRow($event); })("rowHover", function Ng2SmartTableComponent_Template_tbody_rowHover_2_listener($event) { return ctx.onRowHover($event); });
164
+ i0.ɵɵelementEnd()();
165
+ i0.ɵɵtemplate(3, Ng2SmartTableComponent_ng2_smart_table_pager_3_Template, 1, 2, "ng2-smart-table-pager", 3);
166
+ } if (rf & 2) {
167
+ i0.ɵɵproperty("id", ctx.tableId)("ngClass", ctx.tableClass);
168
+ i0.ɵɵadvance(1);
169
+ i0.ɵɵproperty("ngIf", !ctx.isHideHeader || !ctx.isHideSubHeader);
170
+ i0.ɵɵadvance(1);
171
+ i0.ɵɵproperty("grid", ctx.grid)("source", ctx.source)("deleteConfirm", ctx.deleteConfirm)("editConfirm", ctx.editConfirm)("rowClassFunction", ctx.rowClassFunction);
172
+ i0.ɵɵadvance(1);
173
+ i0.ɵɵproperty("ngIf", ctx.isPagerDisplay);
174
+ } }, dependencies: [i1.NgClass, i1.NgIf, i2.PagerComponent, i3.Ng2SmartTableTbodyComponent, i4.Ng2SmartTableTheadComponent], styles: ["[_nghost-%COMP%]{font-size:1rem}[_nghost-%COMP%] *{box-sizing:border-box}[_nghost-%COMP%] button, [_nghost-%COMP%] input, [_nghost-%COMP%] optgroup, [_nghost-%COMP%] select, [_nghost-%COMP%] textarea{color:inherit;font:inherit;margin:0}[_nghost-%COMP%] table{line-height:1.5em;border-collapse:collapse;border-spacing:0;display:table;width:100%;max-width:100%;overflow:auto;word-break:normal;word-break:keep-all}[_nghost-%COMP%] table tr th{font-weight:700}[_nghost-%COMP%] table tr section{font-size:.75em;font-weight:700}[_nghost-%COMP%] table tr td, [_nghost-%COMP%] table tr th{font-size:.875em;margin:0;padding:.5em 1em}[_nghost-%COMP%] a{color:#1e6bb8;text-decoration:none}[_nghost-%COMP%] a:hover{text-decoration:underline}"] });
175
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(Ng2SmartTableComponent, [{
176
+ type: Component,
177
+ args: [{ selector: 'ng2-smart-table', template: "<table [id]=\"tableId\" [ngClass]=\"tableClass\">\n\n <thead ng2-st-thead *ngIf=\"!isHideHeader || !isHideSubHeader\"\n [grid]=\"grid\"\n [source]=\"source\"\n [createConfirm]=\"createConfirm\"\n (create)=\"create.emit($event)\"\n (selectAllRows)=\"onSelectAllRows()\">\n </thead>\n\n <tbody ng2-st-tbody [grid]=\"grid\"\n [source]=\"source\"\n [deleteConfirm]=\"deleteConfirm\"\n [editConfirm]=\"editConfirm\"\n [rowClassFunction]=\"rowClassFunction\"\n (edit)=\"edit.emit($event)\"\n (delete)=\"delete.emit($event)\"\n (custom)=\"custom.emit($event)\"\n (userClickedRow)=\"emitUserRowClicked($event)\"\n (multipleSelectRow)=\"multipleSelectRow($event)\"\n (rowHover)=\"onRowHover($event)\">\n </tbody>\n\n</table>\n\n<ng2-smart-table-pager *ngIf=\"isPagerDisplay\"\n [source]=\"source\"\n [perPageSelect]=\"perPageSelect\">\n</ng2-smart-table-pager>\n", styles: [":host{font-size:1rem}:host ::ng-deep *{box-sizing:border-box}:host ::ng-deep button,:host ::ng-deep input,:host ::ng-deep optgroup,:host ::ng-deep select,:host ::ng-deep textarea{color:inherit;font:inherit;margin:0}:host ::ng-deep table{line-height:1.5em;border-collapse:collapse;border-spacing:0;display:table;width:100%;max-width:100%;overflow:auto;word-break:normal;word-break:keep-all}:host ::ng-deep table tr th{font-weight:700}:host ::ng-deep table tr section{font-size:.75em;font-weight:700}:host ::ng-deep table tr td,:host ::ng-deep table tr th{font-size:.875em;margin:0;padding:.5em 1em}:host ::ng-deep a{color:#1e6bb8;text-decoration:none}:host ::ng-deep a:hover{text-decoration:underline}\n"] }]
178
+ }], null, { source: [{
179
+ type: Input
180
+ }], settings: [{
181
+ type: Input
182
+ }], multiRowSelect: [{
183
+ type: Output
184
+ }], rowClicked: [{
185
+ type: Output
186
+ }], delete: [{
187
+ type: Output
188
+ }], edit: [{
189
+ type: Output
190
+ }], create: [{
191
+ type: Output
192
+ }], custom: [{
193
+ type: Output
194
+ }], deleteConfirm: [{
195
+ type: Output
196
+ }], editConfirm: [{
197
+ type: Output
198
+ }], createConfirm: [{
199
+ type: Output
200
+ }], rowHover: [{
201
+ type: Output
202
+ }] }); })();
203
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmcyLXNtYXJ0LXRhYmxlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nMi1zbWFydC10YWJsZS9zcmMvbGliL25nMi1zbWFydC10YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZzItc21hcnQtdGFibGUvc3JjL2xpYi9uZzItc21hcnQtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFnQixZQUFZLEVBQXdCLE1BQU0sZUFBZSxDQUFDO0FBRzNHLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTNELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJDQUEyQyxDQUFDOzs7Ozs7OztJQ0wxRSxnQ0FLd0Q7SUFEcEMsNEtBQVUsZUFBQSwwQkFBbUIsQ0FBQSxJQUFDLHVLQUNiLGVBQUEsd0JBQWlCLENBQUEsSUFESjtJQUVsRCxpQkFBUTs7O0lBTFksa0NBQWEseUJBQUEsdUNBQUE7OztJQXNCbkMsMkNBR3dCOzs7SUFGQSxzQ0FBaUIsdUNBQUE7O0FEWHpDLE1BQU0sT0FBTyxzQkFBc0I7SUFMbkM7UUFVWSxtQkFBYyxHQUFHLElBQUksWUFBWSxFQUE0QixDQUFDO1FBQzlELGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBNkIsQ0FBQztRQUMzRCxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxTQUFJLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMvQixXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUNqQyxXQUFNLEdBQUcsSUFBSSxZQUFZLEVBQXlCLENBQUM7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eUIsSUFKcEIsaUdBS2Qsc0JBQWtCLElBTEo7UUFNOUMsaUJBQVEsRUFBQTtRQUlWLDJHQUd3Qjs7UUE1QmpCLGdDQUFjLDJCQUFBO1FBRUUsZUFBdUM7UUFBdkMsZ0VBQXVDO1FBUXhDLGVBQWE7UUFBYiwrQkFBYSxzQkFBQSxvQ0FBQSxnQ0FBQSwwQ0FBQTtRQWVYLGVBQW9CO1FBQXBCLHlDQUFvQjs7dUZEVi9CLHNCQUFzQjtjQUxsQyxTQUFTOzJCQUNFLGlCQUFpQjtnQkFNbEIsTUFBTTtrQkFBZCxLQUFLO1lBQ0csUUFBUTtrQkFBaEIsS0FBSztZQUVJLGNBQWM7a0JBQXZCLE1BQU07WUFDRyxVQUFVO2tCQUFuQixNQUFNO1lBQ0csTUFBTTtrQkFBZixNQUFNO1lBQ0csSUFBSTtrQkFBYixNQUFNO1lBQ0csTUFBTTtrQkFBZixNQUFNO1lBQ0csTUFBTTtrQkFBZixNQUFNO1lBQ0csYUFBYTtrQkFBdEIsTUFBTTtZQUNHLFdBQVc7a0JBQXBCLE1BQU07WUFDRyxhQUFhO2tCQUF0QixNQUFNO1lBQ0csUUFBUTtrQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgU2ltcGxlQ2hhbmdlLCBFdmVudEVtaXR0ZXIsIE9uQ2hhbmdlcywgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgR3JpZCB9IGZyb20gJy4vbGliL2dyaWQnO1xuaW1wb3J0IHsgRGF0YVNvdXJjZSB9IGZyb20gJy4vbGliL2RhdGEtc291cmNlL2RhdGEtc291cmNlJztcbmltcG9ydCB7IFJvdyB9IGZyb20gJy4vbGliL2RhdGEtc2V0L3Jvdyc7XG5pbXBvcnQgeyBkZWVwRXh0ZW5kIH0gZnJvbSAnLi9saWIvaGVscGVycyc7XG5pbXBvcnQgeyBMb2NhbERhdGFTb3VyY2UgfSBmcm9tICcuL2xpYi9kYXRhLXNvdXJjZS9sb2NhbC9sb2NhbC5kYXRhLXNvdXJjZSc7XG5pbXBvcnQgeyBTbWFydFRhYmxlQ29uZmlybURlbGV0ZUV2ZW50LCBTbWFydFRhYmxlQ29uZmlybUVkaXRFdmVudCwgU21hcnRUYWJsZUNyZWF0ZUNvbmZpcm0sIFNtYXJ0VGFibGVDdXN0b21FdmVudCwgU21hcnRUYWJsZVJvd0NsaWNrZWRFdmVudCwgU21hcnRUYWJsZVJvd1NlbGVjdEV2ZW50LCBTbWFydFRhYmxlU2V0dGluZ3MgfSBmcm9tICcuL2xpYi9pbnRlcmZhY2VzL3NtYXJ0LXRhYmxlLm1vZGVscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nMi1zbWFydC10YWJsZScsXG4gIHN0eWxlVXJsczogWycuL25nMi1zbWFydC10YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICB0ZW1wbGF0ZVVybDogJy4vbmcyLXNtYXJ0LXRhYmxlLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgTmcyU21hcnRUYWJsZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG5cbiAgQElucHV0KCkgc291cmNlOiBEYXRhU291cmNlO1xuICBASW5wdXQoKSBzZXR0aW5nczogU21hcnRUYWJsZVNldHRpbmdzO1xuXG4gIEBPdXRwdXQoKSBtdWx0aVJvd1NlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8U21hcnRUYWJsZVJvd1NlbGVjdEV2ZW50PigpO1xuICBAT3V0cHV0KCkgcm93Q2xpY2tlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U21hcnRUYWJsZVJvd0NsaWNrZWRFdmVudD4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY3JlYXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBjdXN0b20gPSBuZXcgRXZlbnRFbWl0dGVyPFNtYXJ0VGFibGVDdXN0b21FdmVudD4oKTtcbiAgQE91dHB1dCgpIGRlbGV0ZUNvbmZpcm0gPSBuZXcgRXZlbnRFbWl0dGVyPFNtYXJ0VGFibGVDb25maXJtRGVsZXRlRXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBlZGl0Q29uZmlybSA9IG5ldyBFdmVudEVtaXR0ZXI8U21hcnRUYWJsZUNvbmZpcm1FZGl0RXZlbnQ+KCk7XG4gIEBPdXRwdXQoKSBjcmVhdGVDb25maXJtID0gbmV3IEV2ZW50RW1pdHRlcjxTbWFydFRhYmxlQ3JlYXRlQ29uZmlybT4oKTtcbiAgQE91dHB1dCgpIHJvd0hvdmVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHRhYmxlQ2xhc3M6IHN0cmluZztcbiAgdGFibGVJZDogc3RyaW5nO1xuICBwZXJQYWdlU2VsZWN0OiBhbnk7XG4gIGlzSGlkZUhlYWRlcjogYm9vbGVhbjtcbiAgaXNIaWRlU3ViSGVhZGVyOiBib29sZWFuO1xuICBpc1BhZ2VyRGlzcGxheTogYm9vbGVhbjtcbiAgcm93Q2xhc3NGdW5jdGlvbjogRnVuY3Rpb247XG5cbiAgZ3JpZDogR3JpZDtcbiAgZGVmYXVsdFNldHRpbmdzOiBTbWFydFRhYmxlU2V0dGluZ3MgPSB7XG4gICAgbW9kZTogJ2lubGluZScsIC8vIGlubGluZXxleHRlcm5hbHxjbGljay10by1lZGl0XG4gICAgc2VsZWN0TW9kZTogJ3NpbmdsZScsIC8vIHNpbmdsZXxtdWx0aVxuICAgIC8qKlxuICAgICAqIFBvaW50cyB0byBhbiBlbGVtZW50IGluIGFsbCBkYXRhXG4gICAgICpcbiAgICAgKiB3aGVuIDwgMCBhbGwgbGluZXMgbXVzdCBiZSBkZXNlbGVjdGVkXG4gICAgICovXG4gICAgc2VsZWN0ZWRSb3dJbmRleDogMCxcbiAgICBzd2l0Y2hQYWdlVG9TZWxlY3RlZFJvd1BhZ2U6IGZhbHNlLFxuICAgIGhpZGVIZWFkZXI6IGZhbHNlLFxuICAgIGhpZGVTdWJIZWFkZXI6IGZhbHNlLFxuICAgIGFjdGlvbnM6IHtcbiAgICAgIGNvbHVtblRpdGxlOiAnQWN0aW9ucycsXG4gICAgICBhZGQ6IHRydWUsXG4gICAgICBlZGl0OiB0cnVlLFxuICAgICAgZGVsZXRlOiB0cnVlLFxuICAgICAgY3VzdG9tOiBbXSxcbiAgICAgIHBvc2l0aW9uOiAnbGVmdCcsIC8vIGxlZnR8cmlnaHRcbiAgICB9LFxuICAgIGZpbHRlcjoge1xuICAgICAgaW5wdXRDbGFzczogJycsXG4gICAgfSxcbiAgICBlZGl0OiB7XG4gICAgICBpbnB1dENsYXNzOiAnJyxcbiAgICAgIGVkaXRCdXR0b25Db250ZW50OiAnRWRpdCcsXG4gICAgICBzYXZlQnV0dG9uQ29udGVudDogJ1VwZGF0ZScsXG4gICAgICBjYW5jZWxCdXR0b25Db250ZW50OiAnQ2FuY2VsJyxcbiAgICAgIGNvbmZpcm1TYXZlOiBmYWxzZSxcbiAgICB9LFxuICAgIGFkZDoge1xuICAgICAgaW5wdXRDbGFzczogJycsXG4gICAgICBhZGRCdXR0b25Db250ZW50OiAnQWRkIE5ldycsXG4gICAgICBjcmVhdGVCdXR0b25Db250ZW50OiAnQ3JlYXRlJyxcbiAgICAgIGNhbmNlbEJ1dHRvbkNvbnRlbnQ6ICdDYW5jZWwnLFxuICAgICAgY29uZmlybUNyZWF0ZTogZmFsc2UsXG4gICAgfSxcbiAgICBkZWxldGU6IHtcbiAgICAgIGRlbGV0ZUJ1dHRvbkNvbnRlbnQ6ICdEZWxldGUnLFxuICAgICAgY29uZmlybURlbGV0ZTogZmFsc2UsXG4gICAgfSxcbiAgICBhdHRyOiB7XG4gICAgICBpZDogJycsXG4gICAgICBjbGFzczogJycsXG4gICAgfSxcbiAgICBub0RhdGFNZXNzYWdlOiAnTm8gZGF0YSBmb3VuZCcsXG4gICAgY29sdW1uczoge30sXG4gICAgcGFnZXI6IHtcbiAgICAgIGRpc3BsYXk6IHRydWUsXG4gICAgICBwYWdlOiAxLFxuICAgICAgcGVyUGFnZTogMTAsXG4gICAgfSxcbiAgICByb3dDbGFzc0Z1bmN0aW9uOiAoKSA9PiAnJyxcbiAgfTtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiB7IFtwcm9wZXJ0eU5hbWU6IHN0cmluZ106IFNpbXBsZUNoYW5nZSB9KSB7XG4gICAgaWYgKHRoaXMuZ3JpZCkge1xuICAgICAgaWYgKGNoYW5nZXNbJ3NldHRpbmdzJ10pIHtcbiAgICAgICAgdGhpcy5ncmlkLnNldFNldHRpbmdzKHRoaXMucHJlcGFyZVNldHRpbmdzKCkpO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZXNbJ3NvdXJjZSddKSB7XG4gICAgICAgIHRoaXMuc291cmNlID0gdGhpcy5wcmVwYXJlU291cmNlKCk7XG4gICAgICAgIHRoaXMuZ3JpZC5zZXRTb3VyY2UodGhpcy5zb3VyY2UpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmluaXRHcmlkKCk7XG4gICAgfVxuICAgIHRoaXMudGFibGVJZCA9IHRoaXMuZ3JpZC5nZXRTZXR0aW5nKCdhdHRyLmlkJyk7XG4gICAgdGhpcy50YWJsZUNsYXNzID0gdGhpcy5ncmlkLmdldFNldHRpbmcoJ2F0dHIuY2xhc3MnKTtcbiAgICB0aGlzLmlzSGlkZUhlYWRlciA9IHRoaXMuZ3JpZC5nZXRTZXR0aW5nKCdoaWRlSGVhZGVyJyk7XG4gICAgdGhpcy5pc0hpZGVTdWJIZWFkZXIgPSB0aGlzLmdyaWQuZ2V0U2V0dGluZygnaGlkZVN1YkhlYWRlcicpO1xuICAgIHRoaXMuaXNQYWdlckRpc3BsYXkgPSB0aGlzLmdyaWQuZ2V0U2V0dGluZygncGFnZXIuZGlzcGxheScpO1xuICAgIHRoaXMuaXNQYWdlckRpc3BsYXkgPSB0aGlzLmdyaWQuZ2V0U2V0dGluZygncGFnZXIuZGlzcGxheScpO1xuICAgIHRoaXMucGVyUGFnZVNlbGVjdCA9IHRoaXMuZ3JpZC5nZXRTZXR0aW5nKCdwYWdlci5wZXJQYWdlU2VsZWN0Jyk7XG4gICAgdGhpcy5yb3dDbGFzc0Z1bmN0aW9uID0gdGhpcy5ncmlkLmdldFNldHRpbmcoJ3Jvd0NsYXNzRnVuY3Rpb24nKTtcbiAgfVxuXG4gIG9uUm93SG92ZXIocm93OiBSb3cpIHtcbiAgICB0aGlzLnJvd0hvdmVyLmVtaXQocm93KTtcbiAgfVxuXG4gIG11bHRpcGxlU2VsZWN0Um93KHJvdzogUm93KSB7XG4gICAgdGhpcy5ncmlkLm11bHRpcGxlU2VsZWN0Um93KHJvdyk7XG4gICAgdGhpcy5lbWl0VXNlclNlbGVjdFJvdyhyb3cpO1xuICB9XG5cbiAgb25TZWxlY3RBbGxSb3dzKCkge1xuICAgIHRoaXMuZ3JpZC5kYXRhU2V0LmlzQWxsU2VsZWN0ZWQ7XG4gICAgdGhpcy5ncmlkLnNlbGVjdEFsbFJvd3MoIXRoaXMuZ3JpZC5kYXRhU2V0LmlzQWxsU2VsZWN0ZWQpO1xuXG4gICAgdGhpcy5lbWl0VXNlclNlbGVjdFJvdyhudWxsKTtcbiAgfVxuXG4gIG9uU2VsZWN0Um93KHJvdzogUm93LCBzdGF0ZTogYm9vbGVhbikge1xuICAgIHRoaXMuZ3JpZC5zZWxlY3RSb3cocm93LCBzdGF0ZSk7XG4gIH1cblxuICBpbml0R3JpZCgpIHtcbiAgICB0aGlzLnNvdXJjZSA9IHRoaXMucHJlcGFyZVNvdXJjZSgpO1xuICAgIHRoaXMuZ3JpZCA9IG5ldyBHcmlkKHRoaXMuc291cmNlLCB0aGlzLnByZXBhcmVTZXR0aW5ncygpKTtcbiAgfVxuXG4gIHByZXBhcmVTb3VyY2UoKTogRGF0YVNvdXJjZSB7XG4gICAgaWYgKHRoaXMuc291cmNlIGluc3RhbmNlb2YgRGF0YVNvdXJjZSkge1xuICAgICAgcmV0dXJuIHRoaXMuc291cmNlO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IExvY2FsRGF0YVNvdXJjZSgpO1xuICB9XG5cbiAgcHJlcGFyZVNldHRpbmdzKCk6IFNtYXJ0VGFibGVTZXR0aW5ncyB7XG4gICAgcmV0dXJuIGRlZXBFeHRlbmQoe30sIHRoaXMuZGVmYXVsdFNldHRpbmdzLCB0aGlzLnNldHRpbmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgZW1pdFVzZXJTZWxlY3RSb3cocm93OiBSb3cpIHtcbiAgICB0aGlzLm11bHRpUm93U2VsZWN0LmVtaXQoe1xuICAgICAgZGF0YTogcm93ID8gcm93LmdldERhdGEoKSA6IG51bGwsXG4gICAgICBpc1NlbGVjdGVkOiByb3cgPyByb3cuZ2V0SXNTZWxlY3RlZCgpIDogbnVsbCxcbiAgICAgIHNvdXJjZTogdGhpcy5zb3VyY2UsXG4gICAgICBzZWxlY3RlZDogdGhpcy5ncmlkLmRhdGFTZXQuZ2V0U2VsZWN0ZWRSb3dzRGF0YSgpLFxuICAgIH0pO1xuICB9ICBcbiAgXG4gIGVtaXRVc2VyUm93Q2xpY2tlZChyb3c6IFJvdykge1xuICAgIHRoaXMucm93Q2xpY2tlZC5lbWl0KHtcbiAgICAgIGRhdGE6IHJvdyA/IHJvdy5nZXREYXRhKCkgOiBudWxsLFxuICAgICAgc291cmNlOiB0aGlzLnNvdXJjZSxcbiAgICB9KTtcbiAgfVxufVxuIiwiPHRhYmxlIFtpZF09XCJ0YWJsZUlkXCIgW25nQ2xhc3NdPVwidGFibGVDbGFzc1wiPlxuXG4gIDx0aGVhZCBuZzItc3QtdGhlYWQgKm5nSWY9XCIhaXNIaWRlSGVhZGVyIHx8ICFpc0hpZGVTdWJIZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgIFtncmlkXT1cImdyaWRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtzb3VyY2VdPVwic291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY3JlYXRlQ29uZmlybV09XCJjcmVhdGVDb25maXJtXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY3JlYXRlKT1cImNyZWF0ZS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3RBbGxSb3dzKT1cIm9uU2VsZWN0QWxsUm93cygpXCI+XG4gIDwvdGhlYWQ+XG5cbiAgPHRib2R5IG5nMi1zdC10Ym9keSBbZ3JpZF09XCJncmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICBbc291cmNlXT1cInNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2RlbGV0ZUNvbmZpcm1dPVwiZGVsZXRlQ29uZmlybVwiXG4gICAgICAgICAgICAgICAgICAgICAgW2VkaXRDb25maXJtXT1cImVkaXRDb25maXJtXCJcbiAgICAgICAgICAgICAgICAgICAgICBbcm93Q2xhc3NGdW5jdGlvbl09XCJyb3dDbGFzc0Z1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAoZWRpdCk9XCJlZGl0LmVtaXQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKGRlbGV0ZSk9XCJkZWxldGUuZW1pdCgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY3VzdG9tKT1cImN1c3RvbS5lbWl0KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICh1c2VyQ2xpY2tlZFJvdyk9XCJlbWl0VXNlclJvd0NsaWNrZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgKG11bHRpcGxlU2VsZWN0Um93KT1cIm11bHRpcGxlU2VsZWN0Um93KCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIChyb3dIb3Zlcik9XCJvblJvd0hvdmVyKCRldmVudClcIj5cbiAgPC90Ym9keT5cblxuPC90YWJsZT5cblxuPG5nMi1zbWFydC10YWJsZS1wYWdlciAqbmdJZj1cImlzUGFnZXJEaXNwbGF5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzb3VyY2VdPVwic291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwZXJQYWdlU2VsZWN0XT1cInBlclBhZ2VTZWxlY3RcIj5cbjwvbmcyLXNtYXJ0LXRhYmxlLXBhZ2VyPlxuIl19