@jscrpt/common 1.2.0 → 2.0.0-beta.20211108120022

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 (238) hide show
  1. package/changelog.md +24 -0
  2. package/dist/es2015/decorators/bindThis.decorator.js +24 -24
  3. package/dist/es2015/decorators/bindThis.decorator.js.map +1 -0
  4. package/dist/es2015/decorators/callOnce.decorator.js +29 -28
  5. package/dist/es2015/decorators/callOnce.decorator.js.map +1 -0
  6. package/dist/es2015/decorators/debounceCall.decorator.js +25 -26
  7. package/dist/es2015/decorators/debounceCall.decorator.js.map +1 -0
  8. package/dist/es2015/decorators/index.js +4 -4
  9. package/dist/es2015/decorators/index.js.map +1 -0
  10. package/dist/es2015/encoder/encoder.js +220 -231
  11. package/dist/es2015/encoder/encoder.js.map +1 -0
  12. package/dist/es2015/enums/index.js +2 -2
  13. package/dist/es2015/enums/index.js.map +1 -0
  14. package/dist/es2015/enums/orderByDirection.js +15 -15
  15. package/dist/es2015/enums/orderByDirection.js.map +1 -0
  16. package/dist/es2015/index.js +10 -24
  17. package/dist/es2015/index.js.map +1 -0
  18. package/dist/es2015/indexNode.js +2 -2
  19. package/dist/es2015/indexNode.js.map +1 -0
  20. package/dist/es2015/initJsDevMode.js +8 -0
  21. package/dist/es2015/initJsDevMode.js.map +1 -0
  22. package/dist/es2015/jsDevMode.js +8 -8
  23. package/dist/es2015/jsDevMode.js.map +1 -0
  24. package/dist/es2015/normalizer/charMaps.js +20 -27
  25. package/dist/es2015/normalizer/charMaps.js.map +1 -0
  26. package/dist/es2015/normalizer/index.js +3 -3
  27. package/dist/es2015/normalizer/index.js.map +1 -0
  28. package/dist/es2015/normalizer/normalizer.js +14 -14
  29. package/dist/es2015/normalizer/normalizer.js.map +1 -0
  30. package/dist/es2015/paginator/paginator.js +230 -224
  31. package/dist/es2015/paginator/paginator.js.map +1 -0
  32. package/dist/es2015/types/dictionaries.js +2 -1
  33. package/dist/es2015/types/dictionaries.js.map +1 -0
  34. package/dist/es2015/types/enums.js +2 -0
  35. package/dist/es2015/types/enums.js.map +1 -0
  36. package/dist/es2015/types/functions.js +2 -0
  37. package/dist/es2015/types/functions.js.map +1 -0
  38. package/dist/es2015/types/index.js +5 -3
  39. package/dist/es2015/types/index.js.map +1 -0
  40. package/dist/es2015/types/valueNamePair.js +2 -1
  41. package/dist/es2015/types/valueNamePair.js.map +1 -0
  42. package/dist/es2015/utils/common.js +209 -215
  43. package/dist/es2015/utils/common.js.map +1 -0
  44. package/dist/es2015/utils/index.js +4 -4
  45. package/dist/es2015/utils/index.js.map +1 -0
  46. package/dist/es2015/utils/lang.js +79 -79
  47. package/dist/es2015/utils/lang.js.map +1 -0
  48. package/dist/es2015/utils/nameof.js +6 -6
  49. package/dist/es2015/utils/nameof.js.map +1 -0
  50. package/dist/es2020/decorators/bindThis.decorator.js +23 -0
  51. package/dist/es2020/decorators/bindThis.decorator.js.map +1 -0
  52. package/dist/es2020/decorators/callOnce.decorator.js +28 -0
  53. package/dist/es2020/decorators/callOnce.decorator.js.map +1 -0
  54. package/dist/es2020/decorators/debounceCall.decorator.js +24 -0
  55. package/dist/es2020/decorators/debounceCall.decorator.js.map +1 -0
  56. package/dist/es2020/decorators/index.js +4 -0
  57. package/dist/es2020/decorators/index.js.map +1 -0
  58. package/dist/es2020/encoder/encoder.js +220 -0
  59. package/dist/es2020/encoder/encoder.js.map +1 -0
  60. package/dist/es2020/enums/index.js +2 -0
  61. package/dist/es2020/enums/index.js.map +1 -0
  62. package/dist/es2020/enums/orderByDirection.js +15 -0
  63. package/dist/es2020/enums/orderByDirection.js.map +1 -0
  64. package/dist/es2020/index.js +10 -0
  65. package/dist/es2020/index.js.map +1 -0
  66. package/dist/es2020/indexNode.js +2 -0
  67. package/dist/es2020/indexNode.js.map +1 -0
  68. package/dist/es2020/initJsDevMode.js +8 -0
  69. package/dist/es2020/initJsDevMode.js.map +1 -0
  70. package/dist/es2020/jsDevMode.js +8 -0
  71. package/dist/es2020/jsDevMode.js.map +1 -0
  72. package/dist/es2020/normalizer/charMaps.js +20 -0
  73. package/dist/es2020/normalizer/charMaps.js.map +1 -0
  74. package/dist/es2020/normalizer/index.js +3 -0
  75. package/dist/es2020/normalizer/index.js.map +1 -0
  76. package/dist/es2020/normalizer/normalizer.js +14 -0
  77. package/dist/es2020/normalizer/normalizer.js.map +1 -0
  78. package/dist/es2020/paginator/paginator.js +230 -0
  79. package/dist/es2020/paginator/paginator.js.map +1 -0
  80. package/dist/es2020/types/dictionaries.js +2 -0
  81. package/dist/es2020/types/dictionaries.js.map +1 -0
  82. package/dist/es2020/types/enums.js +2 -0
  83. package/dist/es2020/types/enums.js.map +1 -0
  84. package/dist/es2020/types/functions.js +2 -0
  85. package/dist/es2020/types/functions.js.map +1 -0
  86. package/dist/es2020/types/index.js +5 -0
  87. package/dist/es2020/types/index.js.map +1 -0
  88. package/dist/es2020/types/valueNamePair.js +2 -0
  89. package/dist/es2020/types/valueNamePair.js.map +1 -0
  90. package/dist/es2020/utils/common.js +208 -0
  91. package/dist/es2020/utils/common.js.map +1 -0
  92. package/dist/es2020/utils/index.js +4 -0
  93. package/dist/es2020/utils/index.js.map +1 -0
  94. package/dist/es2020/utils/lang.js +79 -0
  95. package/dist/es2020/utils/lang.js.map +1 -0
  96. package/dist/es2020/utils/nameof.js +6 -0
  97. package/dist/es2020/utils/nameof.js.map +1 -0
  98. package/dist/es5/decorators/bindThis.decorator.js +24 -24
  99. package/dist/es5/decorators/bindThis.decorator.js.map +1 -0
  100. package/dist/es5/decorators/callOnce.decorator.js +33 -28
  101. package/dist/es5/decorators/callOnce.decorator.js.map +1 -0
  102. package/dist/es5/decorators/debounceCall.decorator.js +30 -27
  103. package/dist/es5/decorators/debounceCall.decorator.js.map +1 -0
  104. package/dist/es5/decorators/index.js +4 -4
  105. package/dist/es5/decorators/index.js.map +1 -0
  106. package/dist/es5/encoder/encoder.js +222 -233
  107. package/dist/es5/encoder/encoder.js.map +1 -0
  108. package/dist/es5/enums/index.js +2 -2
  109. package/dist/es5/enums/index.js.map +1 -0
  110. package/dist/es5/enums/orderByDirection.js +15 -15
  111. package/dist/es5/enums/orderByDirection.js.map +1 -0
  112. package/dist/es5/index.js +10 -24
  113. package/dist/es5/index.js.map +1 -0
  114. package/dist/es5/indexNode.js +2 -2
  115. package/dist/es5/indexNode.js.map +1 -0
  116. package/dist/es5/initJsDevMode.js +8 -0
  117. package/dist/es5/initJsDevMode.js.map +1 -0
  118. package/dist/es5/jsDevMode.js +8 -8
  119. package/dist/es5/jsDevMode.js.map +1 -0
  120. package/dist/es5/normalizer/charMaps.js +20 -35
  121. package/dist/es5/normalizer/charMaps.js.map +1 -0
  122. package/dist/es5/normalizer/index.js +3 -3
  123. package/dist/es5/normalizer/index.js.map +1 -0
  124. package/dist/es5/normalizer/normalizer.js +14 -14
  125. package/dist/es5/normalizer/normalizer.js.map +1 -0
  126. package/dist/es5/paginator/paginator.js +232 -226
  127. package/dist/es5/paginator/paginator.js.map +1 -0
  128. package/dist/es5/types/dictionaries.js +2 -1
  129. package/dist/es5/types/dictionaries.js.map +1 -0
  130. package/dist/es5/types/enums.js +2 -0
  131. package/dist/es5/types/enums.js.map +1 -0
  132. package/dist/es5/types/functions.js +2 -0
  133. package/dist/es5/types/functions.js.map +1 -0
  134. package/dist/es5/types/index.js +5 -3
  135. package/dist/es5/types/index.js.map +1 -0
  136. package/dist/es5/types/valueNamePair.js +2 -1
  137. package/dist/es5/types/valueNamePair.js.map +1 -0
  138. package/dist/es5/utils/common.js +220 -232
  139. package/dist/es5/utils/common.js.map +1 -0
  140. package/dist/es5/utils/index.js +4 -4
  141. package/dist/es5/utils/index.js.map +1 -0
  142. package/dist/es5/utils/lang.js +79 -79
  143. package/dist/es5/utils/lang.js.map +1 -0
  144. package/dist/es5/utils/nameof.js +6 -6
  145. package/dist/es5/utils/nameof.js.map +1 -0
  146. package/dist/module/decorators/bindThis.decorator.js +28 -28
  147. package/dist/module/decorators/bindThis.decorator.js.map +1 -0
  148. package/dist/module/decorators/callOnce.decorator.js +33 -32
  149. package/dist/module/decorators/callOnce.decorator.js.map +1 -0
  150. package/dist/module/decorators/debounceCall.decorator.js +29 -30
  151. package/dist/module/decorators/debounceCall.decorator.js.map +1 -0
  152. package/dist/module/decorators/index.js +7 -16
  153. package/dist/module/decorators/index.js.map +1 -0
  154. package/dist/module/encoder/encoder.js +224 -235
  155. package/dist/module/encoder/encoder.js.map +1 -0
  156. package/dist/module/enums/index.js +5 -14
  157. package/dist/module/enums/index.js.map +1 -0
  158. package/dist/module/enums/orderByDirection.js +18 -18
  159. package/dist/module/enums/orderByDirection.js.map +1 -0
  160. package/dist/module/index.js +13 -37
  161. package/dist/module/index.js.map +1 -0
  162. package/dist/module/indexNode.js +5 -14
  163. package/dist/module/indexNode.js.map +1 -0
  164. package/dist/module/initJsDevMode.js +10 -0
  165. package/dist/module/initJsDevMode.js.map +1 -0
  166. package/dist/module/jsDevMode.js +12 -12
  167. package/dist/module/jsDevMode.js.map +1 -0
  168. package/dist/module/normalizer/charMaps.js +23 -31
  169. package/dist/module/normalizer/charMaps.js.map +1 -0
  170. package/dist/module/normalizer/index.js +6 -15
  171. package/dist/module/normalizer/index.js.map +1 -0
  172. package/dist/module/normalizer/normalizer.js +18 -18
  173. package/dist/module/normalizer/normalizer.js.map +1 -0
  174. package/dist/module/paginator/paginator.js +234 -228
  175. package/dist/module/paginator/paginator.js.map +1 -0
  176. package/dist/module/types/dictionaries.js +3 -3
  177. package/dist/module/types/dictionaries.js.map +1 -0
  178. package/dist/module/types/enums.js +3 -0
  179. package/dist/module/types/enums.js.map +1 -0
  180. package/dist/module/types/functions.js +3 -0
  181. package/dist/module/types/functions.js.map +1 -0
  182. package/dist/module/types/index.js +8 -15
  183. package/dist/module/types/index.js.map +1 -0
  184. package/dist/module/types/valueNamePair.js +3 -3
  185. package/dist/module/types/valueNamePair.js.map +1 -0
  186. package/dist/module/utils/common.js +232 -240
  187. package/dist/module/utils/common.js.map +1 -0
  188. package/dist/module/utils/index.js +7 -16
  189. package/dist/module/utils/index.js.map +1 -0
  190. package/dist/module/utils/lang.js +99 -99
  191. package/dist/module/utils/lang.js.map +1 -0
  192. package/dist/module/utils/nameof.js +10 -9
  193. package/dist/module/utils/nameof.js.map +1 -0
  194. package/package.json +45 -16
  195. package/src/decorators/bindThis.decorator.d.ts +5 -7
  196. package/src/decorators/bindThis.decorator.d.ts.map +1 -1
  197. package/src/decorators/callOnce.decorator.d.ts +5 -5
  198. package/src/decorators/callOnce.decorator.d.ts.map +1 -1
  199. package/src/decorators/debounceCall.decorator.d.ts +5 -5
  200. package/src/decorators/debounceCall.decorator.d.ts.map +1 -1
  201. package/src/decorators/index.d.ts +3 -3
  202. package/src/encoder/encoder.d.ts +45 -45
  203. package/src/encoder/encoder.d.ts.map +1 -1
  204. package/src/enums/index.d.ts +1 -1
  205. package/src/enums/orderByDirection.d.ts +13 -13
  206. package/src/index.d.ts +9 -17
  207. package/src/index.d.ts.map +1 -1
  208. package/src/indexNode.d.ts +1 -1
  209. package/src/initJsDevMode.d.ts +2 -0
  210. package/src/initJsDevMode.d.ts.map +1 -0
  211. package/src/jsDevMode.d.ts +8 -8
  212. package/src/jsDevMode.d.ts.map +1 -1
  213. package/src/normalizer/charMaps.d.ts +5 -9
  214. package/src/normalizer/charMaps.d.ts.map +1 -1
  215. package/src/normalizer/index.d.ts +2 -2
  216. package/src/normalizer/normalizer.d.ts +7 -6
  217. package/src/normalizer/normalizer.d.ts.map +1 -1
  218. package/src/paginator/paginator.d.ts +129 -129
  219. package/src/paginator/paginator.d.ts.map +1 -1
  220. package/src/types/dictionaries.d.ts +15 -6
  221. package/src/types/dictionaries.d.ts.map +1 -1
  222. package/src/types/enums.d.ts +7 -0
  223. package/src/types/enums.d.ts.map +1 -0
  224. package/src/types/functions.d.ts +14 -0
  225. package/src/types/functions.d.ts.map +1 -0
  226. package/src/types/index.d.ts +4 -2
  227. package/src/types/index.d.ts.map +1 -1
  228. package/src/types/valueNamePair.d.ts +13 -13
  229. package/src/utils/common.d.ts +181 -122
  230. package/src/utils/common.d.ts.map +1 -1
  231. package/src/utils/index.d.ts +3 -3
  232. package/src/utils/lang.d.ts +41 -41
  233. package/src/utils/lang.d.ts.map +1 -1
  234. package/src/utils/nameof.d.ts +5 -5
  235. package/src/utils/nameof.d.ts.map +1 -1
  236. package/version.bak +1 -1
  237. package/.jsbeautifyrc +0 -7
  238. package/appveyor.yml +0 -67
@@ -1,228 +1,234 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Paginator = void 0;
4
- /**
5
- * Class for paging evaluation
6
- */
7
- class Paginator {
8
- constructor() {
9
- //######################### private fields #########################
10
- /**
11
- * First page set to paginator
12
- */
13
- this._base = 1;
14
- /**
15
- * Number of items per page
16
- */
17
- this._itemsPerPage = 10;
18
- /**
19
- * Index of current page
20
- */
21
- this._page = 1;
22
- }
23
- //######################### public methods #########################
24
- /**
25
- * Sets current page number.
26
- * @param page - Page number
27
- * @returns Paginator Provides a fluent interface
28
- */
29
- setPage(page) {
30
- this._page = page;
31
- return this;
32
- }
33
- /**
34
- * Returns current page number.
35
- * @returns number Current page number
36
- */
37
- getPage() {
38
- return this._base + this.getPageIndex();
39
- }
40
- /// <summary>
41
- /// Returns first page number.
42
- /// </summary>
43
- /// <returns>Number of first page</returns>
44
- GetFirstPage() {
45
- return this._base;
46
- }
47
- /**
48
- * Returns last page number.
49
- * @returns number Number of last page
50
- */
51
- getLastPage() {
52
- return this._base + Math.max(0, this.getPageCount() - 1);
53
- }
54
- /**
55
- * Sets first page (base) number.
56
- * @param baseVal - Index of base page
57
- * @returns Paginator Provides a fluent interface
58
- */
59
- setBase(baseVal) {
60
- this._base = baseVal;
61
- return this;
62
- }
63
- /**
64
- * Returns first page (base) number.
65
- * @returns number Index of base page
66
- */
67
- getBase() {
68
- return this._base;
69
- }
70
- /**
71
- * Gets indication whether is the current page the first one?
72
- * @returns boolean True if current page is first one
73
- */
74
- isFirst() {
75
- return this.getPageIndex() == 0;
76
- }
77
- /**
78
- * Gets indication whether is the current page the last one?
79
- * @returns boolean True if current page is last one, otherwise false
80
- */
81
- isLast() {
82
- return this.getPageIndex() == (this.getPageCount() - 1);
83
- }
84
- /**
85
- * Returns the total number of pages.
86
- * @returns number Total number of pages
87
- */
88
- getPageCount() {
89
- return Math.ceil(this._itemCount / this._itemsPerPage);
90
- }
91
- /**
92
- * Sets the number of items to display on a single page.
93
- * @param itemsPerPage - Number of items per page
94
- * @returns Paginator Provides a fluent interface
95
- */
96
- setItemsPerPage(itemsPerPage) {
97
- this._itemsPerPage = Math.max(1, itemsPerPage);
98
- return this;
99
- }
100
- /**
101
- * Returns the number of items to display on a single page.
102
- * @returns number Number of items per one page
103
- */
104
- getItemsPerPage() {
105
- return this._itemsPerPage;
106
- }
107
- /**
108
- * Sets the total number of items.
109
- * @param itemCount - Count of items or -1 for infinity
110
- * @returns Paginator Provides a fluent interface
111
- */
112
- setItemCount(itemCount) {
113
- this._itemCount = itemCount == -1 ? Number.MAX_VALUE : Math.max(0, itemCount);
114
- return this;
115
- }
116
- /**
117
- * Returns the total number of items.
118
- * @returns number Total number of items
119
- */
120
- getItemCount() {
121
- return this._itemCount;
122
- }
123
- /**
124
- * Returns the absolute index of the first item on current page.
125
- * @returns number Absolute index of first item
126
- */
127
- getOffset() {
128
- return this.getPageIndex() * this._itemsPerPage;
129
- }
130
- /**
131
- * Returns the absolute index of the first item on current page in countdown paging.
132
- * @returns number Countdown offset of first item
133
- */
134
- getCountdownOffset() {
135
- return Math.max(0, this._itemCount - (this.getPageIndex() + 1) * this._itemsPerPage);
136
- }
137
- /**
138
- * Returns the number of items on current page.
139
- * @returns number Number of items on page
140
- */
141
- getLength() {
142
- return Math.min(this._itemsPerPage, this._itemCount - this.getPageIndex() * this._itemsPerPage);
143
- }
144
- /**
145
- * Gets indexes for items on current page (zero-based indexes)
146
- * @returns number Array of items indexes
147
- */
148
- getIndexesPerPage() {
149
- let result = [];
150
- if (isNaN(this.getOffset())) {
151
- for (let x = 0; x < this.getItemCount(); x++) {
152
- result.push(x);
153
- }
154
- }
155
- else {
156
- for (let x = this.getOffset(); x < this.getOffset() + this.getLength(); x++) {
157
- result.push(x);
158
- }
159
- }
160
- return result;
161
- }
162
- /**
163
- * Gets list of page numbers with specified dispersion
164
- * @param dispersion - Number identifying dispersion
165
- * @returns number Page numbers according specified dispersion
166
- */
167
- getPagesWithDispersion(dispersion) {
168
- var currentPage = this.getPage();
169
- var pageCount = this.getPageCount();
170
- var numberOfPages = Math.min(pageCount, Math.max(0, dispersion) * 2 + 1) - 1;
171
- var startingPage = Math.max(this._base, currentPage - dispersion);
172
- if ((currentPage + dispersion) > pageCount) {
173
- startingPage = pageCount - numberOfPages;
174
- }
175
- var x, endingPage = startingPage + numberOfPages;
176
- var result = [];
177
- for (x = startingPage; x <= endingPage; x++) {
178
- result.push(x);
179
- }
180
- return result;
181
- }
182
- /**
183
- * Gets list of page numbers with specified dispersion, pages are trimmed if current page is near beginning or end
184
- * @param dispersion - Number identifying dispersion
185
- * @returns number Page numbers according specified dispersion
186
- */
187
- getPagesWithTrimDispersion(dispersion) {
188
- var currentPage = this.getPage();
189
- var lastPage = this.getLastPage();
190
- var startingPage = Math.max(this._base, currentPage - dispersion);
191
- var x, endingPage = Math.min(lastPage, currentPage + dispersion);
192
- var result = [];
193
- for (x = startingPage; x <= endingPage; x++) {
194
- result.push(x);
195
- }
196
- return result;
197
- }
198
- /**
199
- * Gets list of page numbers generated with uniform distribution
200
- * @param numberOfPages - Number of pages that are going to be uniformly distributed between first and last page (including)
201
- * @returns number Uniformly distributed page numbers
202
- */
203
- getPagesWithUniformDistribution(numberOfPages) {
204
- numberOfPages = Math.max(1, numberOfPages - 1);
205
- var pageCount = this.getPageCount();
206
- numberOfPages = Math.min(numberOfPages, pageCount - 1);
207
- var step = pageCount / numberOfPages;
208
- var page = this.GetFirstPage();
209
- var x;
210
- var result = [];
211
- for (x = 0; x < numberOfPages; x++) {
212
- result.push(Math.round(page));
213
- page += step;
214
- }
215
- result.push(pageCount);
216
- return result;
217
- }
218
- //######################### protected methods #########################
219
- /**
220
- * Returns zero-based page number.
221
- * @returns number Zero-based page number
222
- */
223
- getPageIndex() {
224
- return Math.min(Math.max(0, this._page - this._base), Math.max(0, this.getPageCount() - 1));
225
- }
226
- }
227
- exports.Paginator = Paginator;
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFnaW5hdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3BhZ2luYXRvci9wYWdpbmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUE7O0dBRUc7QUFDSCxNQUFhLFNBQVM7SUFBdEI7UUFFSSxxRUFBcUU7UUFFckU7O1dBRUc7UUFDSyxVQUFLLEdBQVcsQ0FBQyxDQUFDO1FBRTFCOztXQUVHO1FBQ0ssa0JBQWEsR0FBVyxFQUFFLENBQUM7UUFFbkM7O1dBRUc7UUFDSyxVQUFLLEdBQVcsQ0FBQyxDQUFDO0lBdVI5QixDQUFDO0lBaFJHLG9FQUFvRTtJQUVwRTs7OztPQUlHO0lBQ0ksT0FBTyxDQUFDLElBQVk7UUFFdkIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFFbEIsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLE9BQU87UUFFVixPQUFPLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzVDLENBQUM7SUFFRCxhQUFhO0lBQ2IsOEJBQThCO0lBQzlCLGNBQWM7SUFDZCwyQ0FBMkM7SUFDcEMsWUFBWTtRQUVmLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksV0FBVztRQUVkLE9BQU8sSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxPQUFPLENBQUMsT0FBZTtRQUUxQixJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQztRQUVyQixPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTztRQUVWLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksT0FBTztRQUVWLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksTUFBTTtRQUVULE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRDs7O09BR0c7SUFDSSxZQUFZO1FBRWYsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksZUFBZSxDQUFDLFlBQW9CO1FBRXZDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFFL0MsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGVBQWU7UUFFbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzlCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksWUFBWSxDQUFDLFNBQWlCO1FBRWpDLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUU5RSxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksWUFBWTtRQUVmLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUMzQixDQUFDO0lBRUQ7OztPQUdHO0lBQ0ksU0FBUztRQUVaLE9BQU8sSUFBSSxDQUFDLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDcEQsQ0FBQztJQUVEOzs7T0FHRztJQUNJLGtCQUFrQjtRQUVyQixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7SUFFRDs7O09BR0c7SUFDSSxTQUFTO1FBRVosT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BHLENBQUM7SUFFRDs7O09BR0c7SUFDSSxpQkFBaUI7UUFFcEIsSUFBSSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBRTFCLElBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxFQUMxQjtZQUNJLEtBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQzNDO2dCQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEI7U0FDSjthQUVEO1lBQ0ksS0FBSSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQzFFO2dCQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDbEI7U0FDSjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksc0JBQXNCLENBQUMsVUFBa0I7UUFFNUMsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQyxJQUFJLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdFLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxXQUFXLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFFbEUsSUFBSSxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUMsR0FBRyxTQUFTLEVBQzFDO1lBQ0ksWUFBWSxHQUFHLFNBQVMsR0FBRyxhQUFhLENBQUM7U0FDNUM7UUFFRCxJQUFJLENBQUMsRUFBRSxVQUFVLEdBQUcsWUFBWSxHQUFHLGFBQWEsQ0FBQztRQUNqRCxJQUFJLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFFMUIsS0FBSyxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUMsSUFBSSxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQzNDO1lBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUNsQjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ksMEJBQTBCLENBQUMsVUFBa0I7UUFFaEQsSUFBSSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2pDLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNsQyxJQUFJLFlBQVksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsV0FBVyxHQUFHLFVBQVUsQ0FBQyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxFQUFFLFVBQVUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLEdBQUcsVUFBVSxDQUFDLENBQUM7UUFFakUsSUFBSSxNQUFNLEdBQWEsRUFBRSxDQUFDO1FBRTFCLEtBQUssQ0FBQyxHQUFHLFlBQVksRUFBRSxDQUFDLElBQUksVUFBVSxFQUFFLENBQUMsRUFBRSxFQUMzQztZQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbEI7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLCtCQUErQixDQUFDLGFBQXFCO1FBRXhELGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxhQUFhLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDL0MsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BDLGFBQWEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDdkQsSUFBSSxJQUFJLEdBQUcsU0FBUyxHQUFHLGFBQWEsQ0FBQztRQUNyQyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLENBQUM7UUFFTixJQUFJLE1BQU0sR0FBYSxFQUFFLENBQUM7UUFFMUIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQ2xDO1lBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFFOUIsSUFBSSxJQUFJLElBQUksQ0FBQztTQUNoQjtRQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFdkIsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELHVFQUF1RTtJQUV2RTs7O09BR0c7SUFDTyxZQUFZO1FBRWxCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNoRyxDQUFDO0NBQ0o7QUF4U0QsOEJBd1NDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIENsYXNzIGZvciBwYWdpbmcgZXZhbHVhdGlvblxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFBhZ2luYXRvclxyXG57XHJcbiAgICAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgcHJpdmF0ZSBmaWVsZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBcclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpcnN0IHBhZ2Ugc2V0IHRvIHBhZ2luYXRvclxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIF9iYXNlOiBudW1iZXIgPSAxO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTnVtYmVyIG9mIGl0ZW1zIHBlciBwYWdlXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2l0ZW1zUGVyUGFnZTogbnVtYmVyID0gMTA7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBJbmRleCBvZiBjdXJyZW50IHBhZ2VcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBfcGFnZTogbnVtYmVyID0gMTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE51bWJlciBvZiBhbGwgaXRlbXMgdG8gYmUgdXNlZCBmb3IgY291bnRpbmcgcGFnaW5nXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX2l0ZW1Db3VudDogbnVtYmVyO1xyXG5cclxuICAgIC8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBwdWJsaWMgbWV0aG9kcyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGN1cnJlbnQgcGFnZSBudW1iZXIuXHJcbiAgICAgKiBAcGFyYW0gcGFnZSAtIFBhZ2UgbnVtYmVyXHJcbiAgICAgKiBAcmV0dXJucyBQYWdpbmF0b3IgUHJvdmlkZXMgYSBmbHVlbnQgaW50ZXJmYWNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRQYWdlKHBhZ2U6IG51bWJlcik6IFBhZ2luYXRvclxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX3BhZ2UgPSBwYWdlO1xyXG5cclxuICAgICAgICByZXR1cm4gdGhpcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgY3VycmVudCBwYWdlIG51bWJlci5cclxuICAgICAqIEByZXR1cm5zIG51bWJlciBDdXJyZW50IHBhZ2UgbnVtYmVyXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQYWdlKCk6IG51bWJlclxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9iYXNlICsgdGhpcy5nZXRQYWdlSW5kZXgoKTtcclxuICAgIH1cclxuXHJcbiAgICAvLy8gPHN1bW1hcnk+XHJcbiAgICAvLy8gUmV0dXJucyBmaXJzdCBwYWdlIG51bWJlci5cclxuICAgIC8vLyA8L3N1bW1hcnk+XHJcbiAgICAvLy8gPHJldHVybnM+TnVtYmVyIG9mIGZpcnN0IHBhZ2U8L3JldHVybnM+XHJcbiAgICBwdWJsaWMgR2V0Rmlyc3RQYWdlKCk6IG51bWJlclxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9iYXNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyBsYXN0IHBhZ2UgbnVtYmVyLlxyXG4gICAgICogQHJldHVybnMgbnVtYmVyIE51bWJlciBvZiBsYXN0IHBhZ2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldExhc3RQYWdlKCk6IG51bWJlclxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9iYXNlICsgTWF0aC5tYXgoMCwgdGhpcy5nZXRQYWdlQ291bnQoKSAtIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyBmaXJzdCBwYWdlIChiYXNlKSBudW1iZXIuXHJcbiAgICAgKiBAcGFyYW0gYmFzZVZhbCAtIEluZGV4IG9mIGJhc2UgcGFnZVxyXG4gICAgICogQHJldHVybnMgUGFnaW5hdG9yIFByb3ZpZGVzIGEgZmx1ZW50IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0QmFzZShiYXNlVmFsOiBudW1iZXIpOiBQYWdpbmF0b3JcclxuICAgIHtcclxuICAgICAgICB0aGlzLl9iYXNlID0gYmFzZVZhbDtcclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGZpcnN0IHBhZ2UgKGJhc2UpIG51bWJlci5cclxuICAgICAqIEByZXR1cm5zIG51bWJlciBJbmRleCBvZiBiYXNlIHBhZ2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEJhc2UoKTogbnVtYmVyXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2Jhc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGluZGljYXRpb24gd2hldGhlciBpcyB0aGUgY3VycmVudCBwYWdlIHRoZSBmaXJzdCBvbmU/XHJcbiAgICAgKiBAcmV0dXJucyBib29sZWFuIFRydWUgaWYgY3VycmVudCBwYWdlIGlzIGZpcnN0IG9uZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNGaXJzdCgpOiBib29sZWFuXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UGFnZUluZGV4KCkgPT0gMDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdldHMgaW5kaWNhdGlvbiB3aGV0aGVyIGlzIHRoZSBjdXJyZW50IHBhZ2UgdGhlIGxhc3Qgb25lP1xyXG4gICAgICogQHJldHVybnMgYm9vbGVhbiBUcnVlIGlmIGN1cnJlbnQgcGFnZSBpcyBsYXN0IG9uZSwgb3RoZXJ3aXNlIGZhbHNlXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBpc0xhc3QoKTogYm9vbGVhblxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhZ2VJbmRleCgpID09ICh0aGlzLmdldFBhZ2VDb3VudCgpIC0gMSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMuXHJcbiAgICAgKiBAcmV0dXJucyBudW1iZXIgVG90YWwgbnVtYmVyIG9mIHBhZ2VzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRQYWdlQ291bnQoKTogbnVtYmVyXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLl9pdGVtQ291bnQgLyB0aGlzLl9pdGVtc1BlclBhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgbnVtYmVyIG9mIGl0ZW1zIHRvIGRpc3BsYXkgb24gYSBzaW5nbGUgcGFnZS5cclxuICAgICAqIEBwYXJhbSBpdGVtc1BlclBhZ2UgLSBOdW1iZXIgb2YgaXRlbXMgcGVyIHBhZ2VcclxuICAgICAqIEByZXR1cm5zIFBhZ2luYXRvciBQcm92aWRlcyBhIGZsdWVudCBpbnRlcmZhY2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIHNldEl0ZW1zUGVyUGFnZShpdGVtc1BlclBhZ2U6IG51bWJlcik6IFBhZ2luYXRvclxyXG4gICAge1xyXG4gICAgICAgIHRoaXMuX2l0ZW1zUGVyUGFnZSA9IE1hdGgubWF4KDEsIGl0ZW1zUGVyUGFnZSk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgdG8gZGlzcGxheSBvbiBhIHNpbmdsZSBwYWdlLlxyXG4gICAgICogQHJldHVybnMgbnVtYmVyIE51bWJlciBvZiBpdGVtcyBwZXIgb25lIHBhZ2VcclxuICAgICAqL1xyXG4gICAgcHVibGljIGdldEl0ZW1zUGVyUGFnZSgpOiBudW1iZXJcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5faXRlbXNQZXJQYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogU2V0cyB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zLlxyXG4gICAgICogQHBhcmFtIGl0ZW1Db3VudCAtIENvdW50IG9mIGl0ZW1zIG9yIC0xIGZvciBpbmZpbml0eVxyXG4gICAgICogQHJldHVybnMgUGFnaW5hdG9yIFByb3ZpZGVzIGEgZmx1ZW50IGludGVyZmFjZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgc2V0SXRlbUNvdW50KGl0ZW1Db3VudDogbnVtYmVyKTogUGFnaW5hdG9yXHJcbiAgICB7XHJcbiAgICAgICAgdGhpcy5faXRlbUNvdW50ID0gaXRlbUNvdW50ID09IC0xID8gTnVtYmVyLk1BWF9WQUxVRSA6IE1hdGgubWF4KDAsIGl0ZW1Db3VudCk7XHJcblxyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgdG90YWwgbnVtYmVyIG9mIGl0ZW1zLlxyXG4gICAgICogQHJldHVybnMgbnVtYmVyIFRvdGFsIG51bWJlciBvZiBpdGVtc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0SXRlbUNvdW50KCk6IG51bWJlclxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtQ291bnQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIHRoZSBhYnNvbHV0ZSBpbmRleCBvZiB0aGUgZmlyc3QgaXRlbSBvbiBjdXJyZW50IHBhZ2UuXHJcbiAgICAgKiBAcmV0dXJucyBudW1iZXIgQWJzb2x1dGUgaW5kZXggb2YgZmlyc3QgaXRlbVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0T2Zmc2V0KCk6IG51bWJlclxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFBhZ2VJbmRleCgpICogdGhpcy5faXRlbXNQZXJQYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgYWJzb2x1dGUgaW5kZXggb2YgdGhlIGZpcnN0IGl0ZW0gb24gY3VycmVudCBwYWdlIGluIGNvdW50ZG93biBwYWdpbmcuXHJcbiAgICAgKiBAcmV0dXJucyBudW1iZXIgQ291bnRkb3duIG9mZnNldCBvZiBmaXJzdCBpdGVtXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRDb3VudGRvd25PZmZzZXQoKTogbnVtYmVyXHJcbiAgICB7XHJcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIHRoaXMuX2l0ZW1Db3VudCAtICh0aGlzLmdldFBhZ2VJbmRleCgpICsgMSkgKiB0aGlzLl9pdGVtc1BlclBhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIG9uIGN1cnJlbnQgcGFnZS5cclxuICAgICAqIEByZXR1cm5zIG51bWJlciBOdW1iZXIgb2YgaXRlbXMgb24gcGFnZVxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0TGVuZ3RoKCk6IG51bWJlclxyXG4gICAge1xyXG4gICAgICAgIHJldHVybiBNYXRoLm1pbih0aGlzLl9pdGVtc1BlclBhZ2UsIHRoaXMuX2l0ZW1Db3VudCAtIHRoaXMuZ2V0UGFnZUluZGV4KCkgKiB0aGlzLl9pdGVtc1BlclBhZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBpbmRleGVzIGZvciBpdGVtcyBvbiBjdXJyZW50IHBhZ2UgKHplcm8tYmFzZWQgaW5kZXhlcylcclxuICAgICAqIEByZXR1cm5zIG51bWJlciBBcnJheSBvZiBpdGVtcyBpbmRleGVzXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBnZXRJbmRleGVzUGVyUGFnZSgpOiBudW1iZXJbXVxyXG4gICAge1xyXG4gICAgICAgIGxldCByZXN1bHQ6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgICAgIGlmKGlzTmFOKHRoaXMuZ2V0T2Zmc2V0KCkpKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yKGxldCB4ID0gMDsgeCA8IHRoaXMuZ2V0SXRlbUNvdW50KCk7IHgrKylcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goeCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgZm9yKGxldCB4ID0gdGhpcy5nZXRPZmZzZXQoKTsgeCA8IHRoaXMuZ2V0T2Zmc2V0KCkgKyB0aGlzLmdldExlbmd0aCgpOyB4KyspXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBsaXN0IG9mIHBhZ2UgbnVtYmVycyB3aXRoIHNwZWNpZmllZCBkaXNwZXJzaW9uXHJcbiAgICAgKiBAcGFyYW0gZGlzcGVyc2lvbiAtIE51bWJlciBpZGVudGlmeWluZyBkaXNwZXJzaW9uXHJcbiAgICAgKiBAcmV0dXJucyBudW1iZXIgUGFnZSBudW1iZXJzIGFjY29yZGluZyBzcGVjaWZpZWQgZGlzcGVyc2lvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0UGFnZXNXaXRoRGlzcGVyc2lvbihkaXNwZXJzaW9uOiBudW1iZXIpOiBudW1iZXJbXVxyXG4gICAge1xyXG4gICAgICAgIHZhciBjdXJyZW50UGFnZSA9IHRoaXMuZ2V0UGFnZSgpO1xyXG4gICAgICAgIHZhciBwYWdlQ291bnQgPSB0aGlzLmdldFBhZ2VDb3VudCgpO1xyXG4gICAgICAgIHZhciBudW1iZXJPZlBhZ2VzID0gTWF0aC5taW4ocGFnZUNvdW50LCBNYXRoLm1heCgwLCBkaXNwZXJzaW9uKSAqIDIgKyAxKSAtIDE7XHJcbiAgICAgICAgdmFyIHN0YXJ0aW5nUGFnZSA9IE1hdGgubWF4KHRoaXMuX2Jhc2UsIGN1cnJlbnRQYWdlIC0gZGlzcGVyc2lvbik7XHJcblxyXG4gICAgICAgIGlmICgoY3VycmVudFBhZ2UgKyBkaXNwZXJzaW9uKSA+IHBhZ2VDb3VudClcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHN0YXJ0aW5nUGFnZSA9IHBhZ2VDb3VudCAtIG51bWJlck9mUGFnZXM7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB2YXIgeCwgZW5kaW5nUGFnZSA9IHN0YXJ0aW5nUGFnZSArIG51bWJlck9mUGFnZXM7XHJcbiAgICAgICAgdmFyIHJlc3VsdDogbnVtYmVyW10gPSBbXTtcclxuXHJcbiAgICAgICAgZm9yICh4ID0gc3RhcnRpbmdQYWdlOyB4IDw9IGVuZGluZ1BhZ2U7IHgrKylcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2V0cyBsaXN0IG9mIHBhZ2UgbnVtYmVycyB3aXRoIHNwZWNpZmllZCBkaXNwZXJzaW9uLCBwYWdlcyBhcmUgdHJpbW1lZCBpZiBjdXJyZW50IHBhZ2UgaXMgbmVhciBiZWdpbm5pbmcgb3IgZW5kXHJcbiAgICAgKiBAcGFyYW0gZGlzcGVyc2lvbiAtIE51bWJlciBpZGVudGlmeWluZyBkaXNwZXJzaW9uXHJcbiAgICAgKiBAcmV0dXJucyBudW1iZXIgUGFnZSBudW1iZXJzIGFjY29yZGluZyBzcGVjaWZpZWQgZGlzcGVyc2lvblxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0UGFnZXNXaXRoVHJpbURpc3BlcnNpb24oZGlzcGVyc2lvbjogbnVtYmVyKTogbnVtYmVyW11cclxuICAgIHtcclxuICAgICAgICB2YXIgY3VycmVudFBhZ2UgPSB0aGlzLmdldFBhZ2UoKTtcclxuICAgICAgICB2YXIgbGFzdFBhZ2UgPSB0aGlzLmdldExhc3RQYWdlKCk7XHJcbiAgICAgICAgdmFyIHN0YXJ0aW5nUGFnZSA9IE1hdGgubWF4KHRoaXMuX2Jhc2UsIGN1cnJlbnRQYWdlIC0gZGlzcGVyc2lvbik7XHJcbiAgICAgICAgdmFyIHgsIGVuZGluZ1BhZ2UgPSBNYXRoLm1pbihsYXN0UGFnZSwgY3VycmVudFBhZ2UgKyBkaXNwZXJzaW9uKTtcclxuXHJcbiAgICAgICAgdmFyIHJlc3VsdDogbnVtYmVyW10gPSBbXTtcclxuICAgICAgICBcclxuICAgICAgICBmb3IgKHggPSBzdGFydGluZ1BhZ2U7IHggPD0gZW5kaW5nUGFnZTsgeCsrKVxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZXRzIGxpc3Qgb2YgcGFnZSBudW1iZXJzIGdlbmVyYXRlZCB3aXRoIHVuaWZvcm0gZGlzdHJpYnV0aW9uXHJcbiAgICAgKiBAcGFyYW0gbnVtYmVyT2ZQYWdlcyAtIE51bWJlciBvZiBwYWdlcyB0aGF0IGFyZSBnb2luZyB0byBiZSB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQgYmV0d2VlbiBmaXJzdCBhbmQgbGFzdCBwYWdlIChpbmNsdWRpbmcpXHJcbiAgICAgKiBAcmV0dXJucyBudW1iZXIgVW5pZm9ybWx5IGRpc3RyaWJ1dGVkIHBhZ2UgbnVtYmVyc1xyXG4gICAgICovXHJcbiAgICBwdWJsaWMgZ2V0UGFnZXNXaXRoVW5pZm9ybURpc3RyaWJ1dGlvbihudW1iZXJPZlBhZ2VzOiBudW1iZXIpOiBudW1iZXJbXVxyXG4gICAge1xyXG4gICAgICAgIG51bWJlck9mUGFnZXMgPSBNYXRoLm1heCgxLCBudW1iZXJPZlBhZ2VzIC0gMSk7XHJcbiAgICAgICAgdmFyIHBhZ2VDb3VudCA9IHRoaXMuZ2V0UGFnZUNvdW50KCk7XHJcbiAgICAgICAgbnVtYmVyT2ZQYWdlcyA9IE1hdGgubWluKG51bWJlck9mUGFnZXMsIHBhZ2VDb3VudCAtIDEpO1xyXG4gICAgICAgIHZhciBzdGVwID0gcGFnZUNvdW50IC8gbnVtYmVyT2ZQYWdlcztcclxuICAgICAgICB2YXIgcGFnZSA9IHRoaXMuR2V0Rmlyc3RQYWdlKCk7XHJcbiAgICAgICAgdmFyIHg7XHJcblxyXG4gICAgICAgIHZhciByZXN1bHQ6IG51bWJlcltdID0gW107XHJcblxyXG4gICAgICAgIGZvciAoeCA9IDA7IHggPCBudW1iZXJPZlBhZ2VzOyB4KyspXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaChNYXRoLnJvdW5kKHBhZ2UpKTtcclxuXHJcbiAgICAgICAgICAgIHBhZ2UgKz0gc3RlcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlc3VsdC5wdXNoKHBhZ2VDb3VudCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICAvLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgcHJvdGVjdGVkIG1ldGhvZHMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmV0dXJucyB6ZXJvLWJhc2VkIHBhZ2UgbnVtYmVyLlxyXG4gICAgICogQHJldHVybnMgbnVtYmVyIFplcm8tYmFzZWQgcGFnZSBudW1iZXJcclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGdldFBhZ2VJbmRleCgpOiBudW1iZXJcclxuICAgIHtcclxuICAgICAgICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoMCwgdGhpcy5fcGFnZSAtIHRoaXMuX2Jhc2UpLCBNYXRoLm1heCgwLCB0aGlzLmdldFBhZ2VDb3VudCgpIC0gMSkpO1xyXG4gICAgfVxyXG59Il19
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Paginator = void 0;
4
+ /**
5
+ * Class for paging evaluation
6
+ */
7
+ class Paginator {
8
+ constructor() {
9
+ //######################### private fields #########################
10
+ /**
11
+ * First page set to paginator
12
+ */
13
+ this._base = 1;
14
+ /**
15
+ * Number of items per page
16
+ */
17
+ this._itemsPerPage = 10;
18
+ /**
19
+ * Index of current page
20
+ */
21
+ this._page = 1;
22
+ /**
23
+ * Number of all items to be used for counting paging
24
+ */
25
+ this._itemCount = 0;
26
+ }
27
+ //######################### public methods #########################
28
+ /**
29
+ * Sets current page number.
30
+ * @param page - Page number
31
+ * @returns Paginator Provides a fluent interface
32
+ */
33
+ setPage(page) {
34
+ this._page = page;
35
+ return this;
36
+ }
37
+ /**
38
+ * Returns current page number.
39
+ * @returns number Current page number
40
+ */
41
+ getPage() {
42
+ return this._base + this.getPageIndex();
43
+ }
44
+ /// <summary>
45
+ /// Returns first page number.
46
+ /// </summary>
47
+ /// <returns>Number of first page</returns>
48
+ GetFirstPage() {
49
+ return this._base;
50
+ }
51
+ /**
52
+ * Returns last page number.
53
+ * @returns number Number of last page
54
+ */
55
+ getLastPage() {
56
+ return this._base + Math.max(0, this.getPageCount() - 1);
57
+ }
58
+ /**
59
+ * Sets first page (base) number.
60
+ * @param baseVal - Index of base page
61
+ * @returns Paginator Provides a fluent interface
62
+ */
63
+ setBase(baseVal) {
64
+ this._base = baseVal;
65
+ return this;
66
+ }
67
+ /**
68
+ * Returns first page (base) number.
69
+ * @returns number Index of base page
70
+ */
71
+ getBase() {
72
+ return this._base;
73
+ }
74
+ /**
75
+ * Gets indication whether is the current page the first one?
76
+ * @returns boolean True if current page is first one
77
+ */
78
+ isFirst() {
79
+ return this.getPageIndex() == 0;
80
+ }
81
+ /**
82
+ * Gets indication whether is the current page the last one?
83
+ * @returns boolean True if current page is last one, otherwise false
84
+ */
85
+ isLast() {
86
+ return this.getPageIndex() == (this.getPageCount() - 1);
87
+ }
88
+ /**
89
+ * Returns the total number of pages.
90
+ * @returns number Total number of pages
91
+ */
92
+ getPageCount() {
93
+ return Math.ceil(this._itemCount / this._itemsPerPage);
94
+ }
95
+ /**
96
+ * Sets the number of items to display on a single page.
97
+ * @param itemsPerPage - Number of items per page
98
+ * @returns Paginator Provides a fluent interface
99
+ */
100
+ setItemsPerPage(itemsPerPage) {
101
+ this._itemsPerPage = Math.max(1, itemsPerPage);
102
+ return this;
103
+ }
104
+ /**
105
+ * Returns the number of items to display on a single page.
106
+ * @returns number Number of items per one page
107
+ */
108
+ getItemsPerPage() {
109
+ return this._itemsPerPage;
110
+ }
111
+ /**
112
+ * Sets the total number of items.
113
+ * @param itemCount - Count of items or -1 for infinity
114
+ * @returns Paginator Provides a fluent interface
115
+ */
116
+ setItemCount(itemCount) {
117
+ this._itemCount = itemCount == -1 ? Number.MAX_VALUE : Math.max(0, itemCount);
118
+ return this;
119
+ }
120
+ /**
121
+ * Returns the total number of items.
122
+ * @returns number Total number of items
123
+ */
124
+ getItemCount() {
125
+ return this._itemCount;
126
+ }
127
+ /**
128
+ * Returns the absolute index of the first item on current page.
129
+ * @returns number Absolute index of first item
130
+ */
131
+ getOffset() {
132
+ return this.getPageIndex() * this._itemsPerPage;
133
+ }
134
+ /**
135
+ * Returns the absolute index of the first item on current page in countdown paging.
136
+ * @returns number Countdown offset of first item
137
+ */
138
+ getCountdownOffset() {
139
+ return Math.max(0, this._itemCount - (this.getPageIndex() + 1) * this._itemsPerPage);
140
+ }
141
+ /**
142
+ * Returns the number of items on current page.
143
+ * @returns number Number of items on page
144
+ */
145
+ getLength() {
146
+ return Math.min(this._itemsPerPage, this._itemCount - this.getPageIndex() * this._itemsPerPage);
147
+ }
148
+ /**
149
+ * Gets indexes for items on current page (zero-based indexes)
150
+ * @returns number Array of items indexes
151
+ */
152
+ getIndexesPerPage() {
153
+ const result = [];
154
+ if (isNaN(this.getOffset())) {
155
+ for (let x = 0; x < this.getItemCount(); x++) {
156
+ result.push(x);
157
+ }
158
+ }
159
+ else {
160
+ for (let x = this.getOffset(); x < this.getOffset() + this.getLength(); x++) {
161
+ result.push(x);
162
+ }
163
+ }
164
+ return result;
165
+ }
166
+ /**
167
+ * Gets list of page numbers with specified dispersion
168
+ * @param dispersion - Number identifying dispersion
169
+ * @returns number Page numbers according specified dispersion
170
+ */
171
+ getPagesWithDispersion(dispersion) {
172
+ const currentPage = this.getPage();
173
+ const pageCount = this.getPageCount();
174
+ const numberOfPages = Math.min(pageCount, Math.max(0, dispersion) * 2 + 1) - 1;
175
+ let startingPage = Math.max(this._base, currentPage - dispersion);
176
+ if ((currentPage + dispersion) > pageCount) {
177
+ startingPage = pageCount - numberOfPages;
178
+ }
179
+ let x;
180
+ const endingPage = startingPage + numberOfPages;
181
+ const result = [];
182
+ for (x = startingPage; x <= endingPage; x++) {
183
+ result.push(x);
184
+ }
185
+ return result;
186
+ }
187
+ /**
188
+ * Gets list of page numbers with specified dispersion, pages are trimmed if current page is near beginning or end
189
+ * @param dispersion - Number identifying dispersion
190
+ * @returns number Page numbers according specified dispersion
191
+ */
192
+ getPagesWithTrimDispersion(dispersion) {
193
+ const currentPage = this.getPage();
194
+ const lastPage = this.getLastPage();
195
+ const startingPage = Math.max(this._base, currentPage - dispersion);
196
+ let x;
197
+ const endingPage = Math.min(lastPage, currentPage + dispersion);
198
+ const result = [];
199
+ for (x = startingPage; x <= endingPage; x++) {
200
+ result.push(x);
201
+ }
202
+ return result;
203
+ }
204
+ /**
205
+ * Gets list of page numbers generated with uniform distribution
206
+ * @param numberOfPages - Number of pages that are going to be uniformly distributed between first and last page (including)
207
+ * @returns number Uniformly distributed page numbers
208
+ */
209
+ getPagesWithUniformDistribution(numberOfPages) {
210
+ numberOfPages = Math.max(1, numberOfPages - 1);
211
+ const pageCount = this.getPageCount();
212
+ numberOfPages = Math.min(numberOfPages, pageCount - 1);
213
+ const step = pageCount / numberOfPages;
214
+ let page = this.GetFirstPage();
215
+ let x;
216
+ const result = [];
217
+ for (x = 0; x < numberOfPages; x++) {
218
+ result.push(Math.round(page));
219
+ page += step;
220
+ }
221
+ result.push(pageCount);
222
+ return result;
223
+ }
224
+ //######################### protected methods #########################
225
+ /**
226
+ * Returns zero-based page number.
227
+ * @returns number Zero-based page number
228
+ */
229
+ getPageIndex() {
230
+ return Math.min(Math.max(0, this._page - this._base), Math.max(0, this.getPageCount() - 1));
231
+ }
232
+ }
233
+ exports.Paginator = Paginator;
234
+ //# sourceMappingURL=paginator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paginator.js","sourceRoot":"","sources":["../../../src/paginator/paginator.ts"],"names":[],"mappings":"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","sourcesContent":["/**\r\n * Class for paging evaluation\r\n */\r\nexport class Paginator\r\n{\r\n //######################### private fields ######################### \r\n\r\n /**\r\n * First page set to paginator\r\n */\r\n private _base: number = 1;\r\n\r\n /**\r\n * Number of items per page\r\n */\r\n private _itemsPerPage: number = 10;\r\n\r\n /**\r\n * Index of current page\r\n */\r\n private _page: number = 1;\r\n\r\n /**\r\n * Number of all items to be used for counting paging\r\n */\r\n private _itemCount: number = 0;\r\n\r\n //######################### public methods #########################\r\n\r\n /**\r\n * Sets current page number.\r\n * @param page - Page number\r\n * @returns Paginator Provides a fluent interface\r\n */\r\n public setPage(page: number): Paginator\r\n {\r\n this._page = page;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Returns current page number.\r\n * @returns number Current page number\r\n */\r\n public getPage(): number\r\n {\r\n return this._base + this.getPageIndex();\r\n }\r\n\r\n /// <summary>\r\n /// Returns first page number.\r\n /// </summary>\r\n /// <returns>Number of first page</returns>\r\n public GetFirstPage(): number\r\n {\r\n return this._base;\r\n }\r\n\r\n /**\r\n * Returns last page number.\r\n * @returns number Number of last page\r\n */\r\n public getLastPage(): number\r\n {\r\n return this._base + Math.max(0, this.getPageCount() - 1);\r\n }\r\n\r\n /**\r\n * Sets first page (base) number.\r\n * @param baseVal - Index of base page\r\n * @returns Paginator Provides a fluent interface\r\n */\r\n public setBase(baseVal: number): Paginator\r\n {\r\n this._base = baseVal;\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Returns first page (base) number.\r\n * @returns number Index of base page\r\n */\r\n public getBase(): number\r\n {\r\n return this._base;\r\n }\r\n\r\n /**\r\n * Gets indication whether is the current page the first one?\r\n * @returns boolean True if current page is first one\r\n */\r\n public isFirst(): boolean\r\n {\r\n return this.getPageIndex() == 0;\r\n }\r\n\r\n /**\r\n * Gets indication whether is the current page the last one?\r\n * @returns boolean True if current page is last one, otherwise false\r\n */\r\n public isLast(): boolean\r\n {\r\n return this.getPageIndex() == (this.getPageCount() - 1);\r\n }\r\n\r\n /**\r\n * Returns the total number of pages.\r\n * @returns number Total number of pages\r\n */\r\n public getPageCount(): number\r\n {\r\n return Math.ceil(this._itemCount / this._itemsPerPage);\r\n }\r\n\r\n /**\r\n * Sets the number of items to display on a single page.\r\n * @param itemsPerPage - Number of items per page\r\n * @returns Paginator Provides a fluent interface\r\n */\r\n public setItemsPerPage(itemsPerPage: number): Paginator\r\n {\r\n this._itemsPerPage = Math.max(1, itemsPerPage);\r\n \r\n return this;\r\n }\r\n\r\n /**\r\n * Returns the number of items to display on a single page.\r\n * @returns number Number of items per one page\r\n */\r\n public getItemsPerPage(): number\r\n {\r\n return this._itemsPerPage;\r\n }\r\n\r\n /**\r\n * Sets the total number of items.\r\n * @param itemCount - Count of items or -1 for infinity\r\n * @returns Paginator Provides a fluent interface\r\n */\r\n public setItemCount(itemCount: number): Paginator\r\n {\r\n this._itemCount = itemCount == -1 ? Number.MAX_VALUE : Math.max(0, itemCount);\r\n\r\n return this;\r\n }\r\n\r\n /**\r\n * Returns the total number of items.\r\n * @returns number Total number of items\r\n */\r\n public getItemCount(): number\r\n {\r\n return this._itemCount;\r\n }\r\n\r\n /**\r\n * Returns the absolute index of the first item on current page.\r\n * @returns number Absolute index of first item\r\n */\r\n public getOffset(): number\r\n {\r\n return this.getPageIndex() * this._itemsPerPage;\r\n }\r\n\r\n /**\r\n * Returns the absolute index of the first item on current page in countdown paging.\r\n * @returns number Countdown offset of first item\r\n */\r\n public getCountdownOffset(): number\r\n {\r\n return Math.max(0, this._itemCount - (this.getPageIndex() + 1) * this._itemsPerPage);\r\n }\r\n\r\n /**\r\n * Returns the number of items on current page.\r\n * @returns number Number of items on page\r\n */\r\n public getLength(): number\r\n {\r\n return Math.min(this._itemsPerPage, this._itemCount - this.getPageIndex() * this._itemsPerPage);\r\n }\r\n\r\n /**\r\n * Gets indexes for items on current page (zero-based indexes)\r\n * @returns number Array of items indexes\r\n */\r\n public getIndexesPerPage(): number[]\r\n {\r\n const result: number[] = [];\r\n\r\n if(isNaN(this.getOffset()))\r\n {\r\n for(let x = 0; x < this.getItemCount(); x++)\r\n {\r\n result.push(x);\r\n }\r\n }\r\n else\r\n {\r\n for(let x = this.getOffset(); x < this.getOffset() + this.getLength(); x++)\r\n {\r\n result.push(x);\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Gets list of page numbers with specified dispersion\r\n * @param dispersion - Number identifying dispersion\r\n * @returns number Page numbers according specified dispersion\r\n */\r\n public getPagesWithDispersion(dispersion: number): number[]\r\n {\r\n const currentPage = this.getPage();\r\n const pageCount = this.getPageCount();\r\n const numberOfPages = Math.min(pageCount, Math.max(0, dispersion) * 2 + 1) - 1;\r\n let startingPage = Math.max(this._base, currentPage - dispersion);\r\n\r\n if ((currentPage + dispersion) > pageCount)\r\n {\r\n startingPage = pageCount - numberOfPages;\r\n }\r\n\r\n let x: number;\r\n const endingPage = startingPage + numberOfPages;\r\n\r\n const result: number[] = [];\r\n\r\n for (x = startingPage; x <= endingPage; x++)\r\n {\r\n result.push(x);\r\n }\r\n \r\n return result;\r\n }\r\n\r\n /**\r\n * Gets list of page numbers with specified dispersion, pages are trimmed if current page is near beginning or end\r\n * @param dispersion - Number identifying dispersion\r\n * @returns number Page numbers according specified dispersion\r\n */\r\n public getPagesWithTrimDispersion(dispersion: number): number[]\r\n {\r\n const currentPage = this.getPage();\r\n const lastPage = this.getLastPage();\r\n const startingPage = Math.max(this._base, currentPage - dispersion);\r\n let x: number;\r\n const endingPage = Math.min(lastPage, currentPage + dispersion);\r\n\r\n const result: number[] = [];\r\n \r\n for (x = startingPage; x <= endingPage; x++)\r\n {\r\n result.push(x);\r\n }\r\n \r\n return result;\r\n }\r\n\r\n /**\r\n * Gets list of page numbers generated with uniform distribution\r\n * @param numberOfPages - Number of pages that are going to be uniformly distributed between first and last page (including)\r\n * @returns number Uniformly distributed page numbers\r\n */\r\n public getPagesWithUniformDistribution(numberOfPages: number): number[]\r\n {\r\n numberOfPages = Math.max(1, numberOfPages - 1);\r\n const pageCount = this.getPageCount();\r\n numberOfPages = Math.min(numberOfPages, pageCount - 1);\r\n const step = pageCount / numberOfPages;\r\n let page = this.GetFirstPage();\r\n let x;\r\n\r\n const result: number[] = [];\r\n\r\n for (x = 0; x < numberOfPages; x++)\r\n {\r\n result.push(Math.round(page));\r\n\r\n page += step;\r\n }\r\n\r\n result.push(pageCount);\r\n \r\n return result;\r\n }\r\n\r\n //######################### protected methods #########################\r\n\r\n /**\r\n * Returns zero-based page number.\r\n * @returns number Zero-based page number\r\n */\r\n protected getPageIndex(): number\r\n {\r\n return Math.min(Math.max(0, this._page - this._base), Math.max(0, this.getPageCount() - 1));\r\n }\r\n}"]}
@@ -1,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGljdGlvbmFyaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3R5cGVzL2RpY3Rpb25hcmllcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHR5cGUgRGljdGlvbmFyeTxURGF0YSA9IGFueT4gPSB7W2luZGV4OiBzdHJpbmddOiBURGF0YX07XHJcbmV4cG9ydCB0eXBlIFN0cmluZ0RpY3Rpb25hcnkgPSB7W2luZGV4OiBzdHJpbmddOiBzdHJpbmd9OyJdfQ==
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=dictionaries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dictionaries.js","sourceRoot":"","sources":["../../../src/types/dictionaries.ts"],"names":[],"mappings":"","sourcesContent":["/**\r\n * Represents type that extracts class as type Record with property keys as index and unknown property values\r\n */\r\nexport type AsDictionary<TType extends Object> = TType extends {[P in keyof TType]: unknown} ? Record<keyof TType, unknown> : unknown;\r\n\r\n/**\r\n * Represents Record type where, key is string and value is defined by typeparam\r\n * @typeparam TData - Type of property value\r\n */\r\nexport type Dictionary<TData = unknown> = Record<string, TData>;\r\n\r\n/**\r\n * Represents Record type where, key is string and value is string\r\n */\r\nexport type StringDictionary = Record<string, string>;"]}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=enums.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums.js","sourceRoot":"","sources":["../../../src/types/enums.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Type that represents enum type\n */\nexport type Enum<E = unknown> = Record<keyof E, number | string> & {[k: number]: string};"]}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/types/functions.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Function definition with no variables and no return type\n */\nexport type NoopAction = () => void;\n\n/**\n * Function definition with variable arguments and no return type\n */\nexport type Action = (...args: unknown[]) => void;\n\n/**\n * Function definition with variable arguments and return type\n * @typeParam TResult - Return type of function\n */\nexport type Func<TResult = unknown> = (...args: unknown[]) => TResult;"]}
@@ -1,15 +1,8 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
- for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);
11
- };
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- __exportStar(require("./dictionaries"), exports);
14
- __exportStar(require("./valueNamePair"), exports);
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdHlwZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsaURBQStCO0FBQy9CLGtEQUFnQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGljdGlvbmFyaWVzJztcclxuZXhwb3J0ICogZnJvbSAnLi92YWx1ZU5hbWVQYWlyJzsiXX0=
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ (0, tslib_1.__exportStar)(require("./dictionaries"), exports);
5
+ (0, tslib_1.__exportStar)(require("./enums"), exports);
6
+ (0, tslib_1.__exportStar)(require("./functions"), exports);
7
+ (0, tslib_1.__exportStar)(require("./valueNamePair"), exports);
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/types/index.ts"],"names":[],"mappings":";;;AAAA,8DAA+B;AAC/B,uDAAwB;AACxB,2DAA4B;AAC5B,+DAAgC","sourcesContent":["export * from './dictionaries';\r\nexport * from './enums';\r\nexport * from './functions';\r\nexport * from './valueNamePair';"]}
@@ -1,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsdWVOYW1lUGFpci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90eXBlcy92YWx1ZU5hbWVQYWlyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogVmFsdWUgbmFtZSBwYWlyIGRhdGEgXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIFZhbHVlTmFtZVBhaXJcclxue1xyXG4gICAgLyoqXHJcbiAgICAgKiBWYWx1ZSBvZiB0aGUgcGFpclxyXG4gICAgICovXHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gICAgXHJcbiAgICAvKipcclxuICAgICAqIE5hbWUgb2YgdGhlIHBhaXJcclxuICAgICAqL1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG59Il19
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=valueNamePair.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"valueNamePair.js","sourceRoot":"","sources":["../../../src/types/valueNamePair.ts"],"names":[],"mappings":"","sourcesContent":["/**\r\n * Value name pair data \r\n */\r\nexport interface ValueNamePair\r\n{\r\n /**\r\n * Value of the pair\r\n */\r\n value: string;\r\n \r\n /**\r\n * Name of the pair\r\n */\r\n name: string;\r\n}"]}