@zajno/common 1.5.5 → 1.5.8

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 (169) hide show
  1. package/coverage/clover.xml +427 -345
  2. package/coverage/coverage-final.json +38 -37
  3. package/coverage/lcov-report/async/index.html +12 -7
  4. package/coverage/lcov-report/async/timeout.ts.html +24 -19
  5. package/coverage/lcov-report/block-navigation.js +8 -0
  6. package/coverage/lcov-report/disposer.ts.html +376 -0
  7. package/coverage/lcov-report/enumHelper.ts.html +454 -0
  8. package/coverage/lcov-report/favicon.png +0 -0
  9. package/coverage/lcov-report/index.html +54 -34
  10. package/coverage/lcov-report/logger/index.html +116 -0
  11. package/coverage/lcov-report/logger/index.ts.html +298 -0
  12. package/coverage/lcov-report/parallel.ts.html +550 -0
  13. package/coverage/lcov-report/queue/index.html +116 -0
  14. package/coverage/lcov-report/queue/parallel.ts.html +499 -0
  15. package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  16. package/coverage/lcov-report/sorter.js +26 -0
  17. package/coverage/lcov-report/src/__tests__/helpers/index.html +8 -3
  18. package/coverage/lcov-report/src/__tests__/helpers/main.ts.html +8 -3
  19. package/coverage/lcov-report/src/async/arrays.ts.html +15 -10
  20. package/coverage/lcov-report/src/async/index.html +13 -8
  21. package/coverage/lcov-report/src/async/timeout.ts.html +24 -19
  22. package/coverage/lcov-report/src/cache.ts.html +15 -10
  23. package/coverage/lcov-report/src/dates/calc.ts.html +10 -5
  24. package/coverage/lcov-report/src/dates/convert.ts.html +9 -4
  25. package/coverage/lcov-report/src/dates/datex.ts.html +8 -3
  26. package/coverage/lcov-report/src/dates/format.ts.html +10 -5
  27. package/coverage/lcov-report/src/dates/index.html +19 -14
  28. package/coverage/lcov-report/src/dates/index.ts.html +8 -3
  29. package/coverage/lcov-report/src/dates/parse.ts.html +9 -4
  30. package/coverage/lcov-report/src/dates/period.ts.html +8 -3
  31. package/coverage/lcov-report/src/dates/shift.ts.html +9 -4
  32. package/coverage/lcov-report/src/dates/types.ts.html +8 -3
  33. package/coverage/lcov-report/src/dates/yearDate.ts.html +10 -5
  34. package/coverage/lcov-report/src/disposer.ts.html +65 -21
  35. package/coverage/lcov-report/src/enumHelper.ts.html +12 -7
  36. package/coverage/lcov-report/src/event.ts.html +50 -21
  37. package/coverage/lcov-report/src/fields/index.html +12 -7
  38. package/coverage/lcov-report/src/fields/update.ts.html +12 -7
  39. package/coverage/lcov-report/src/functions.ts.html +10 -5
  40. package/coverage/lcov-report/src/index.html +52 -47
  41. package/coverage/lcov-report/src/lazy.light.ts.html +9 -4
  42. package/coverage/lcov-report/src/logger/batch.ts.html +9 -4
  43. package/coverage/lcov-report/src/logger/console.ts.html +16 -11
  44. package/coverage/lcov-report/src/logger/index.html +13 -8
  45. package/coverage/lcov-report/src/logger/index.ts.html +38 -33
  46. package/coverage/lcov-report/src/logger/named.ts.html +26 -21
  47. package/coverage/lcov-report/src/logger/proxy.ts.html +20 -15
  48. package/coverage/lcov-report/src/math/arrays.ts.html +33 -28
  49. package/coverage/lcov-report/src/math/calc.ts.html +18 -13
  50. package/coverage/lcov-report/src/math/distribution.ts.html +10 -5
  51. package/coverage/lcov-report/src/math/index.html +16 -11
  52. package/coverage/lcov-report/src/math/index.ts.html +14 -9
  53. package/coverage/lcov-report/src/observersMap.ts.html +12 -7
  54. package/coverage/lcov-report/src/observingCache.ts.html +12 -7
  55. package/coverage/lcov-report/src/queue/index.html +116 -0
  56. package/coverage/lcov-report/src/queue/parallel.ts.html +499 -0
  57. package/coverage/lcov-report/src/tempoCache.ts.html +9 -4
  58. package/coverage/lcov-report/src/transitionObserver.ts.html +14 -9
  59. package/coverage/lcov-report/src/types.ts.html +13 -8
  60. package/coverage/lcov-report/src/validation/ValidationErrors.ts.html +8 -3
  61. package/coverage/lcov-report/src/validation/creditCard.ts.html +8 -3
  62. package/coverage/lcov-report/src/validation/helpers.ts.html +13 -8
  63. package/coverage/lcov-report/src/validation/index.html +11 -6
  64. package/coverage/lcov-report/src/validation/index.ts.html +8 -3
  65. package/coverage/lcov-report/src/validation/types.ts.html +8 -3
  66. package/coverage/lcov-report/src/validation/validators.ts.html +10 -5
  67. package/coverage/lcov-report/src/validation/wrappers.ts.html +8 -3
  68. package/coverage/lcov-report/src/viewModels/CommonModel.ts.html +10 -5
  69. package/coverage/lcov-report/src/viewModels/FlagModel.ts.html +8 -3
  70. package/coverage/lcov-report/src/viewModels/LoadingModel.ts.html +10 -5
  71. package/coverage/lcov-report/src/viewModels/MultiSelectModel.ts.html +13 -8
  72. package/coverage/lcov-report/src/viewModels/NumberModel.ts.html +8 -3
  73. package/coverage/lcov-report/src/viewModels/SelectModel.ts.html +10 -5
  74. package/coverage/lcov-report/src/viewModels/TextModel.ts.html +13 -8
  75. package/coverage/lcov-report/src/viewModels/Validatable.ts.html +12 -7
  76. package/coverage/lcov-report/src/viewModels/index.html +22 -17
  77. package/coverage/lcov-report/src/viewModels/wrappers.ts.html +8 -3
  78. package/coverage/lcov.info +491 -462
  79. package/jest.config.js +2 -1
  80. package/lib/async/arrays.extend.js +4 -4
  81. package/lib/async/arrays.extend.js.map +1 -1
  82. package/lib/cache.js +6 -6
  83. package/lib/cache.js.map +1 -1
  84. package/lib/dates/calc.js +7 -7
  85. package/lib/dates/calc.js.map +1 -1
  86. package/lib/dates/convert.js +11 -11
  87. package/lib/dates/convert.js.map +1 -1
  88. package/lib/dates/format.js +6 -6
  89. package/lib/dates/format.js.map +1 -1
  90. package/lib/dates/period.js +2 -2
  91. package/lib/dates/period.js.map +1 -1
  92. package/lib/dates/shift.js +5 -5
  93. package/lib/dates/shift.js.map +1 -1
  94. package/lib/dates/yearDate.js +2 -2
  95. package/lib/dates/yearDate.js.map +1 -1
  96. package/lib/disposer.d.ts +4 -2
  97. package/lib/disposer.d.ts.map +1 -1
  98. package/lib/disposer.js +10 -5
  99. package/lib/disposer.js.map +1 -1
  100. package/lib/enumHelper.d.ts +2 -2
  101. package/lib/enumHelper.d.ts.map +1 -1
  102. package/lib/enumHelper.js.map +1 -1
  103. package/lib/event.d.ts.map +1 -1
  104. package/lib/event.js +8 -2
  105. package/lib/event.js.map +1 -1
  106. package/lib/fields/update.js +2 -2
  107. package/lib/fields/update.js.map +1 -1
  108. package/lib/lazy.js +2 -2
  109. package/lib/lazy.js.map +1 -1
  110. package/lib/logger/file.js.map +1 -1
  111. package/lib/logger/index.d.ts +1 -1
  112. package/lib/logger/index.d.ts.map +1 -1
  113. package/lib/logger/index.js +1 -1
  114. package/lib/logger/index.js.map +1 -1
  115. package/lib/math/arrays.js +2 -2
  116. package/lib/math/arrays.js.map +1 -1
  117. package/lib/models/EntityWithStatus.js.map +1 -1
  118. package/lib/observersMap.js +2 -2
  119. package/lib/observersMap.js.map +1 -1
  120. package/lib/observingCache.js +1 -1
  121. package/lib/observingCache.js.map +1 -1
  122. package/lib/pool.js +1 -1
  123. package/lib/pool.js.map +1 -1
  124. package/lib/queue/parallel.d.ts +22 -0
  125. package/lib/queue/parallel.d.ts.map +1 -0
  126. package/lib/queue/parallel.js +117 -0
  127. package/lib/queue/parallel.js.map +1 -0
  128. package/lib/services/localization/LocalizationManager.js +1 -1
  129. package/lib/services/localization/LocalizationManager.js.map +1 -1
  130. package/lib/services/storage/web/localStorage.js +1 -1
  131. package/lib/services/storage/web/localStorage.js.map +1 -1
  132. package/lib/services/storage/web/sessionStorage.js +1 -1
  133. package/lib/services/storage/web/sessionStorage.js.map +1 -1
  134. package/lib/transitionObserver.js +3 -3
  135. package/lib/transitionObserver.js.map +1 -1
  136. package/lib/validation/validators.js +1 -1
  137. package/lib/validation/validators.js.map +1 -1
  138. package/lib/validation/wrappers.js +1 -1
  139. package/lib/validation/wrappers.js.map +1 -1
  140. package/lib/viewModels/CommonModel.js +1 -1
  141. package/lib/viewModels/CommonModel.js.map +1 -1
  142. package/lib/viewModels/FlagModel.js +1 -1
  143. package/lib/viewModels/FlagModel.js.map +1 -1
  144. package/lib/viewModels/MultiSelectModel.js +5 -5
  145. package/lib/viewModels/MultiSelectModel.js.map +1 -1
  146. package/lib/viewModels/NumberModel.js +1 -1
  147. package/lib/viewModels/NumberModel.js.map +1 -1
  148. package/lib/viewModels/PromptModal.js +1 -1
  149. package/lib/viewModels/PromptModal.js.map +1 -1
  150. package/lib/viewModels/SelectModel.js +4 -4
  151. package/lib/viewModels/SelectModel.js.map +1 -1
  152. package/lib/viewModels/TextModel.js +3 -3
  153. package/lib/viewModels/TextModel.js.map +1 -1
  154. package/lib/viewModels/Validatable.js +3 -3
  155. package/lib/viewModels/Validatable.js.map +1 -1
  156. package/lib/viewModels/ValueModel.js +1 -1
  157. package/lib/viewModels/ValueModel.js.map +1 -1
  158. package/package.json +11 -11
  159. package/src/.DS_Store +0 -0
  160. package/src/disposer.ts +19 -6
  161. package/src/enumHelper.ts +2 -2
  162. package/src/event.ts +8 -0
  163. package/src/queue/__tests__/parallel.test.ts +58 -0
  164. package/src/queue/parallel.ts +138 -0
  165. package/src/services/storage/web/localStorage.ts +1 -1
  166. package/src/services/storage/web/sessionStorage.ts +1 -1
  167. package/src/validation/__tests__/validator.test.ts +12 -0
  168. package/src/validation/validators.ts +1 -1
  169. package/yarn.lock +1074 -1441
@@ -30,9 +30,9 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">23.08% </span>
33
+ <span class="strong">22.22% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>3/13</span>
35
+ <span class='fraction'>2/9</span>
36
36
  </div>
37
37
 
38
38
 
@@ -54,6 +54,12 @@
54
54
  <p class="quiet">
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
57
63
  </div>
58
64
  <div class='status-line low'></div>
59
65
  <div class="pad1">
@@ -79,8 +85,8 @@
79
85
  </td>
80
86
  <td data-value="42.31" class="pct low">42.31%</td>
81
87
  <td data-value="26" class="abs low">11/26</td>
82
- <td data-value="23.08" class="pct low">23.08%</td>
83
- <td data-value="13" class="abs low">3/13</td>
88
+ <td data-value="22.22" class="pct low">22.22%</td>
89
+ <td data-value="9" class="abs low">2/9</td>
84
90
  <td data-value="42.86" class="pct low">42.86%</td>
85
91
  <td data-value="7" class="abs low">3/7</td>
86
92
  <td data-value="42.31" class="pct low">42.31%</td>
@@ -94,10 +100,9 @@
94
100
  </div><!-- /wrapper -->
95
101
  <div class='footer quiet pad2 space-top1 center small'>
96
102
  Code coverage generated by
97
- <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
98
- at Sat Jun 04 2022 17:01:00 GMT+0000 (Coordinated Universal Time)
103
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
104
+ at 2022-08-16T14:54:54.506Z
99
105
  </div>
100
- </div>
101
106
  <script src="../prettify.js"></script>
102
107
  <script>
103
108
  window.onload = function () {
@@ -30,9 +30,9 @@
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">23.08% </span>
33
+ <span class="strong">22.22% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>3/13</span>
35
+ <span class='fraction'>2/9</span>
36
36
  </div>
37
37
 
38
38
 
@@ -54,6 +54,12 @@
54
54
  <p class="quiet">
55
55
  Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
56
  </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
57
63
  </div>
58
64
  <div class='status-line low'></div>
59
65
  <pre><table class="coverage">
@@ -108,21 +114,21 @@
108
114
  <a name='L49'></a><a href='#L49'>49</a>
109
115
  <a name='L50'></a><a href='#L50'>50</a>
110
116
  <a name='L51'></a><a href='#L51'>51</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
111
- <span class="cline-any cline-yes">3x</span>
112
- <span class="cline-any cline-yes">10x</span>
117
+ <span class="cline-any cline-yes">1x</span>
118
+ <span class="cline-any cline-yes">6x</span>
113
119
  <span class="cline-any cline-neutral">&nbsp;</span>
114
120
  <span class="cline-any cline-neutral">&nbsp;</span>
115
- <span class="cline-any cline-yes">10x</span>
116
- <span class="cline-any cline-yes">10x</span>
117
- <span class="cline-any cline-yes">10x</span>
118
- <span class="cline-any cline-yes">10x</span>
119
- <span class="cline-any cline-yes">10x</span>
120
- <span class="cline-any cline-yes">10x</span>
121
+ <span class="cline-any cline-yes">6x</span>
122
+ <span class="cline-any cline-yes">6x</span>
123
+ <span class="cline-any cline-yes">6x</span>
124
+ <span class="cline-any cline-yes">6x</span>
125
+ <span class="cline-any cline-yes">6x</span>
126
+ <span class="cline-any cline-yes">6x</span>
121
127
  <span class="cline-any cline-neutral">&nbsp;</span>
122
128
  <span class="cline-any cline-neutral">&nbsp;</span>
123
129
  <span class="cline-any cline-neutral">&nbsp;</span>
124
130
  <span class="cline-any cline-neutral">&nbsp;</span>
125
- <span class="cline-any cline-yes">10x</span>
131
+ <span class="cline-any cline-yes">6x</span>
126
132
  <span class="cline-any cline-no">&nbsp;</span>
127
133
  <span class="cline-any cline-no">&nbsp;</span>
128
134
  <span class="cline-any cline-no">&nbsp;</span>
@@ -133,12 +139,12 @@
133
139
  <span class="cline-any cline-no">&nbsp;</span>
134
140
  <span class="cline-any cline-neutral">&nbsp;</span>
135
141
  <span class="cline-any cline-neutral">&nbsp;</span>
136
- <span class="cline-any cline-yes">10x</span>
142
+ <span class="cline-any cline-yes">6x</span>
137
143
  <span class="cline-any cline-neutral">&nbsp;</span>
138
144
  <span class="cline-any cline-neutral">&nbsp;</span>
139
145
  <span class="cline-any cline-neutral">&nbsp;</span>
140
146
  <span class="cline-any cline-neutral">&nbsp;</span>
141
- <span class="cline-any cline-yes">3x</span>
147
+ <span class="cline-any cline-yes">1x</span>
142
148
  <span class="cline-any cline-no">&nbsp;</span>
143
149
  <span class="cline-any cline-no">&nbsp;</span>
144
150
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -166,7 +172,7 @@ export function setTimeoutAsync(ms: number, useCancel: (cb: () =&gt; void) =&gt;
166
172
  _reject = reject;
167
173
  token = setTimeout(() =&gt; {
168
174
  _reject = null;
169
- <span class="missing-if-branch" title="else path not taken" >E</span>if (!canceled) {
175
+ if (!canceled) {
170
176
  resolve();
171
177
  }
172
178
  }, ms);
@@ -176,7 +182,7 @@ export function setTimeoutAsync(ms: number, useCancel: (cb: () =&gt; void) =&gt;
176
182
  const cancelCb = <span class="cstat-no" title="statement not covered" ><span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
177
183
  <span class="cstat-no" title="statement not covered" > clearTimeout(token);</span>
178
184
  <span class="cstat-no" title="statement not covered" > canceled = true;</span>
179
- <span class="cstat-no" title="statement not covered" > if (_reject) {</span>
185
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (_reject) {</span>
180
186
  <span class="cstat-no" title="statement not covered" > _reject();</span>
181
187
  }
182
188
  };
@@ -189,7 +195,7 @@ export function setTimeoutAsync(ms: number, useCancel: (cb: () =&gt; void) =&gt;
189
195
  /* global requestAnimationFrame */
190
196
  &nbsp;
191
197
  export function <span class="fstat-no" title="function not covered" >setTimeoutFramesAsync(</span>frames: number) {
192
- <span class="cstat-no" title="statement not covered" > if (typeof requestAnimationFrame === 'undefined') {</span>
198
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (typeof requestAnimationFrame === 'undefined') {</span>
193
199
  <span class="cstat-no" title="statement not covered" > throw new Error('setTimeoutFramesAsync is not supported because "requestAnimationFrame" is not defined.');</span>
194
200
  }
195
201
  &nbsp;
@@ -213,10 +219,9 @@ export function <span class="fstat-no" title="function not covered" >setTimeoutF
213
219
  </div><!-- /wrapper -->
214
220
  <div class='footer quiet pad2 space-top1 center small'>
215
221
  Code coverage generated by
216
- <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
217
- at Sat Jun 04 2022 17:01:00 GMT+0000 (Coordinated Universal Time)
222
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
223
+ at 2022-08-16T14:54:54.506Z
218
224
  </div>
219
- </div>
220
225
  <script src="../prettify.js"></script>
221
226
  <script>
222
227
  window.onload = function () {
@@ -63,6 +63,14 @@ var jumpToCode = (function init() {
63
63
  }
64
64
 
65
65
  return function jump(event) {
66
+ if (
67
+ document.getElementById('fileSearch') === document.activeElement &&
68
+ document.activeElement != null
69
+ ) {
70
+ // if we're currently focused on the search input, we don't want to navigate
71
+ return;
72
+ }
73
+
66
74
  switch (event.which) {
67
75
  case 78: // n
68
76
  case 74: // j
@@ -0,0 +1,376 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for disposer.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="prettify.css" />
9
+ <link rel="stylesheet" href="base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="index.html">All files</a> disposer.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">62.79% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>27/43</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">26.67% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>4/15</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">76.92% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>10/13</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">60% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>24/40</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input oninput="onInput()" type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line medium'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
164
+ <span class="cline-any cline-neutral">&nbsp;</span>
165
+ <span class="cline-any cline-neutral">&nbsp;</span>
166
+ <span class="cline-any cline-neutral">&nbsp;</span>
167
+ <span class="cline-any cline-neutral">&nbsp;</span>
168
+ <span class="cline-any cline-neutral">&nbsp;</span>
169
+ <span class="cline-any cline-neutral">&nbsp;</span>
170
+ <span class="cline-any cline-neutral">&nbsp;</span>
171
+ <span class="cline-any cline-neutral">&nbsp;</span>
172
+ <span class="cline-any cline-neutral">&nbsp;</span>
173
+ <span class="cline-any cline-yes">1x</span>
174
+ <span class="cline-any cline-neutral">&nbsp;</span>
175
+ <span class="cline-any cline-yes">2x</span>
176
+ <span class="cline-any cline-yes">2x</span>
177
+ <span class="cline-any cline-neutral">&nbsp;</span>
178
+ <span class="cline-any cline-yes">2x</span>
179
+ <span class="cline-any cline-neutral">&nbsp;</span>
180
+ <span class="cline-any cline-neutral">&nbsp;</span>
181
+ <span class="cline-any cline-yes">2x</span>
182
+ <span class="cline-any cline-neutral">&nbsp;</span>
183
+ <span class="cline-any cline-neutral">&nbsp;</span>
184
+ <span class="cline-any cline-neutral">&nbsp;</span>
185
+ <span class="cline-any cline-no">&nbsp;</span>
186
+ <span class="cline-any cline-no">&nbsp;</span>
187
+ <span class="cline-any cline-neutral">&nbsp;</span>
188
+ <span class="cline-any cline-neutral">&nbsp;</span>
189
+ <span class="cline-any cline-neutral">&nbsp;</span>
190
+ <span class="cline-any cline-yes">2x</span>
191
+ <span class="cline-any cline-no">&nbsp;</span>
192
+ <span class="cline-any cline-neutral">&nbsp;</span>
193
+ <span class="cline-any cline-neutral">&nbsp;</span>
194
+ <span class="cline-any cline-yes">2x</span>
195
+ <span class="cline-any cline-yes">2x</span>
196
+ <span class="cline-any cline-neutral">&nbsp;</span>
197
+ <span class="cline-any cline-neutral">&nbsp;</span>
198
+ <span class="cline-any cline-yes">2x</span>
199
+ <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-yes">2x</span>
201
+ <span class="cline-any cline-neutral">&nbsp;</span>
202
+ <span class="cline-any cline-no">&nbsp;</span>
203
+ <span class="cline-any cline-no">&nbsp;</span>
204
+ <span class="cline-any cline-neutral">&nbsp;</span>
205
+ <span class="cline-any cline-neutral">&nbsp;</span>
206
+ <span class="cline-any cline-no">&nbsp;</span>
207
+ <span class="cline-any cline-neutral">&nbsp;</span>
208
+ <span class="cline-any cline-neutral">&nbsp;</span>
209
+ <span class="cline-any cline-neutral">&nbsp;</span>
210
+ <span class="cline-any cline-neutral">&nbsp;</span>
211
+ <span class="cline-any cline-no">&nbsp;</span>
212
+ <span class="cline-any cline-no">&nbsp;</span>
213
+ <span class="cline-any cline-no">&nbsp;</span>
214
+ <span class="cline-any cline-neutral">&nbsp;</span>
215
+ <span class="cline-any cline-neutral">&nbsp;</span>
216
+ <span class="cline-any cline-no">&nbsp;</span>
217
+ <span class="cline-any cline-no">&nbsp;</span>
218
+ <span class="cline-any cline-no">&nbsp;</span>
219
+ <span class="cline-any cline-no">&nbsp;</span>
220
+ <span class="cline-any cline-neutral">&nbsp;</span>
221
+ <span class="cline-any cline-neutral">&nbsp;</span>
222
+ <span class="cline-any cline-no">&nbsp;</span>
223
+ <span class="cline-any cline-neutral">&nbsp;</span>
224
+ <span class="cline-any cline-neutral">&nbsp;</span>
225
+ <span class="cline-any cline-neutral">&nbsp;</span>
226
+ <span class="cline-any cline-yes">2x</span>
227
+ <span class="cline-any cline-no">&nbsp;</span>
228
+ <span class="cline-any cline-neutral">&nbsp;</span>
229
+ <span class="cline-any cline-no">&nbsp;</span>
230
+ <span class="cline-any cline-neutral">&nbsp;</span>
231
+ <span class="cline-any cline-neutral">&nbsp;</span>
232
+ <span class="cline-any cline-neutral">&nbsp;</span>
233
+ <span class="cline-any cline-yes">2x</span>
234
+ <span class="cline-any cline-yes">2x</span>
235
+ <span class="cline-any cline-yes">2x</span>
236
+ <span class="cline-any cline-neutral">&nbsp;</span>
237
+ <span class="cline-any cline-neutral">&nbsp;</span>
238
+ <span class="cline-any cline-yes">2x</span>
239
+ <span class="cline-any cline-neutral">&nbsp;</span>
240
+ <span class="cline-any cline-neutral">&nbsp;</span>
241
+ <span class="cline-any cline-neutral">&nbsp;</span>
242
+ <span class="cline-any cline-yes">1x</span>
243
+ <span class="cline-any cline-yes">1x</span>
244
+ <span class="cline-any cline-neutral">&nbsp;</span>
245
+ <span class="cline-any cline-neutral">&nbsp;</span>
246
+ <span class="cline-any cline-yes">1x</span>
247
+ <span class="cline-any cline-neutral">&nbsp;</span>
248
+ <span class="cline-any cline-neutral">&nbsp;</span>
249
+ <span class="cline-any cline-yes">2x</span>
250
+ <span class="cline-any cline-neutral">&nbsp;</span>
251
+ <span class="cline-any cline-neutral">&nbsp;</span>
252
+ <span class="cline-any cline-yes">2x</span>
253
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
+ <span class="cline-any cline-neutral">&nbsp;</span>
255
+ <span class="cline-any cline-yes">2x</span>
256
+ <span class="cline-any cline-yes">2x</span>
257
+ <span class="cline-any cline-yes">2x</span>
258
+ <span class="cline-any cline-neutral">&nbsp;</span>
259
+ <span class="cline-any cline-neutral">&nbsp;</span>
260
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import logger from './logger';
261
+ &nbsp;
262
+ export interface IDisposable {
263
+ dispose(): void;
264
+ }
265
+ &nbsp;
266
+ export interface DisposeFunction {
267
+ (): void;
268
+ }
269
+ &nbsp;
270
+ export class Disposer {
271
+ &nbsp;
272
+ private readonly _disposers: DisposeFunction[] = [];
273
+ private readonly _map = new Map&lt;string, DisposeFunction&gt;();
274
+ &nbsp;
275
+ private _loggerName: string = null;
276
+ &nbsp;
277
+ constructor(loggerName: string = <span class="branch-0 cbranch-no" title="branch not covered" >null)</span> {
278
+ this._loggerName = loggerName;
279
+ }
280
+ &nbsp;
281
+ public <span class="fstat-no" title="function not covered" >setLoggerName(</span>loggerName: string) {
282
+ <span class="cstat-no" title="statement not covered" > this._loggerName = loggerName;</span>
283
+ <span class="cstat-no" title="statement not covered" > return this;</span>
284
+ }
285
+ &nbsp;
286
+ public add(d: DisposeFunction | IDisposable, id?: string) {
287
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!d) {
288
+ <span class="cstat-no" title="statement not covered" > return;</span>
289
+ }
290
+ &nbsp;
291
+ const dd: DisposeFunction = typeof d !== 'function'
292
+ ? (() =&gt; d.dispose ? d.dispose() : <span class="branch-1 cbranch-no" title="branch not covered" >null)</span>
293
+ : <span class="branch-1 cbranch-no" title="branch not covered" >d;</span>
294
+ &nbsp;
295
+ this._disposers.push(dd);
296
+ &nbsp;
297
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (id) {
298
+ // dispose previous identified disposer
299
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this._map.has(id)) {</span>
300
+ <span class="cstat-no" title="statement not covered" > this.execute(id);</span>
301
+ }
302
+ &nbsp;
303
+ <span class="cstat-no" title="statement not covered" > this._map.set(id, dd);</span>
304
+ }
305
+ }
306
+ &nbsp;
307
+ public <span class="fstat-no" title="function not covered" >execute(</span>id: string) {
308
+ const d = <span class="cstat-no" title="statement not covered" >this._map.get(id);</span>
309
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!d) {</span>
310
+ <span class="cstat-no" title="statement not covered" > return;</span>
311
+ }
312
+ &nbsp;
313
+ <span class="cstat-no" title="statement not covered" > this._map.delete(id);</span>
314
+ const i = <span class="cstat-no" title="statement not covered" >this._disposers.indexOf(d);</span>
315
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (i &gt;= 0) {</span>
316
+ <span class="cstat-no" title="statement not covered" > this._disposers.splice(i, 1);</span>
317
+ }
318
+ &nbsp;
319
+ <span class="cstat-no" title="statement not covered" > d();</span>
320
+ }
321
+ &nbsp;
322
+ public dispose(log = false) {
323
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (log) {
324
+ <span class="cstat-no" title="statement not covered" > logger.log(</span>
325
+ `[Disposer:${this._loggerName || '&lt;unknown&gt;'}] Disposing ${this._disposers.length} items including named ones:`,
326
+ Array.from(this._map.entries()).map(<span class="fstat-no" title="function not covered" >e </span>=&gt; <span class="cstat-no" title="statement not covered" >e[0])</span>,
327
+ );
328
+ }
329
+ &nbsp;
330
+ const copy = this._disposers.slice().reverse();
331
+ this._disposers.length = 0;
332
+ this._map.clear();
333
+ &nbsp;
334
+ // this should separate side effects
335
+ copy.forEach(d =&gt; d());
336
+ }
337
+ }
338
+ &nbsp;
339
+ export function combineDisposers(...items: DisposeFunction[]): DisposeFunction {
340
+ return () =&gt; items.forEach(i =&gt; i());
341
+ }
342
+ &nbsp;
343
+ export class Disposable implements IDisposable {
344
+ &nbsp;
345
+ protected readonly disposer: Disposer;
346
+ protected _isDisposed = false;
347
+ &nbsp;
348
+ constructor(loggerName: string = null) {
349
+ this.disposer = new Disposer(loggerName);
350
+ }
351
+ &nbsp;
352
+ public dispose = () =&gt; {
353
+ this._isDisposed = true;
354
+ this.disposer.dispose();
355
+ };
356
+ }
357
+ &nbsp;</pre></td></tr></table></pre>
358
+
359
+ <div class='push'></div><!-- for sticky footer -->
360
+ </div><!-- /wrapper -->
361
+ <div class='footer quiet pad2 space-top1 center small'>
362
+ Code coverage generated by
363
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
364
+ at 2022-07-22T09:38:57.035Z
365
+ </div>
366
+ <script src="prettify.js"></script>
367
+ <script>
368
+ window.onload = function () {
369
+ prettyPrint();
370
+ };
371
+ </script>
372
+ <script src="sorter.js"></script>
373
+ <script src="block-navigation.js"></script>
374
+ </body>
375
+ </html>
376
+