manner.js 1.0.17 → 1.0.18

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 (37) hide show
  1. package/client/class/ClientFetch.js +1 -1
  2. package/coverage/clover.xml +85 -32
  3. package/coverage/coverage-final.json +5 -4
  4. package/coverage/lcov-report/class/Blocks.js.html +1 -1
  5. package/coverage/lcov-report/class/MultiFetch.js.html +5 -2
  6. package/coverage/lcov-report/class/index.html +1 -1
  7. package/coverage/lcov-report/client/class/ClientFetch.js.html +379 -0
  8. package/coverage/lcov-report/client/class/index.html +116 -0
  9. package/coverage/lcov-report/index.html +26 -11
  10. package/coverage/lcov-report/lib/byteArray.js.html +1 -1
  11. package/coverage/lcov-report/lib/errorHandle.js.html +1 -1
  12. package/coverage/lcov-report/lib/formatHttpDate.js.html +1 -1
  13. package/coverage/lcov-report/lib/formatHttpKey.js.html +1 -1
  14. package/coverage/lcov-report/lib/getOwnIpAddresses.js.html +1 -1
  15. package/coverage/lcov-report/lib/index.html +1 -1
  16. package/coverage/lcov-report/lib/isIntranetIpv4Address.js.html +9 -9
  17. package/coverage/lcov-report/lib/isIpv6Address.js.html +4 -4
  18. package/coverage/lcov-report/lib/nonZeroByteArray.js.html +1 -1
  19. package/coverage/lcov-report/lib/parseHttpDate.js.html +1 -1
  20. package/coverage/lcov-report/lib/wrapIpv6.js.html +1 -1
  21. package/coverage/lcov-report/server/class/Blocks.js.html +403 -0
  22. package/coverage/lcov-report/server/class/MultiFetch.js.html +262 -0
  23. package/coverage/lcov-report/server/class/index.html +131 -0
  24. package/coverage/lcov-report/server/lib/byteArray.js.html +154 -0
  25. package/coverage/lcov-report/server/lib/errorHandle.js.html +124 -0
  26. package/coverage/lcov-report/server/lib/formatHttpDate.js.html +103 -0
  27. package/coverage/lcov-report/server/lib/formatHttpKey.js.html +100 -0
  28. package/coverage/lcov-report/server/lib/getOwnIpAddresses.js.html +220 -0
  29. package/coverage/lcov-report/server/lib/index.html +251 -0
  30. package/coverage/lcov-report/server/lib/isIntranetIpv4Address.js.html +196 -0
  31. package/coverage/lcov-report/server/lib/isIpv6Address.js.html +148 -0
  32. package/coverage/lcov-report/server/lib/nonZeroByteArray.js.html +157 -0
  33. package/coverage/lcov-report/server/lib/parseHttpDate.js.html +238 -0
  34. package/coverage/lcov-report/server/lib/wrapIpv6.js.html +94 -0
  35. package/coverage/lcov.info +143 -50
  36. package/package.json +1 -1
  37. package/server/class/MultiFetch.js +1 -1
@@ -139,27 +139,27 @@
139
139
  <span class="cline-any cline-neutral">&nbsp;</span>
140
140
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">export default function isIntranetIpv4Address(address) {
141
141
  let total = 0;
142
- let sectionValue = 0;;
143
- let sectionCount = 0;
142
+ let value = 0;;
143
+ let count = 0;
144
144
  for (let i = 0; i &lt;= address.length; i += 1) {
145
145
  const char = address.charAt(i);
146
146
  switch (char) {
147
147
  case '':
148
148
  case '.':
149
- sectionCount += 1;
149
+ count += 1;
150
150
  total *= 256;
151
- total += sectionValue;
152
- sectionValue = 0;
151
+ total += value;
152
+ value = 0;
153
153
  break;
154
154
  default:
155
155
  <span class="missing-if-branch" title="if path not taken" >I</span>if (!(char &gt;= '0' &amp;&amp; char &lt;= '9')) {
156
156
  <span class="cstat-no" title="statement not covered" > return false;</span>
157
157
  }
158
- sectionValue *= 10;
159
- sectionValue += parseInt(char);
158
+ value *= 10;
159
+ value += parseInt(char);
160
160
  }
161
161
  }
162
- <span class="missing-if-branch" title="if path not taken" >I</span>if (sectionCount !== 4) {
162
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (count !== 4) {
163
163
  <span class="cstat-no" title="statement not covered" > return false;</span>
164
164
  }
165
165
  let ans = false;
@@ -181,7 +181,7 @@
181
181
  <div class='footer quiet pad2 space-top1 center small'>
182
182
  Code coverage generated by
183
183
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
184
- at 2025-07-04T07:00:51.822Z
184
+ at 2025-07-07T13:16:19.437Z
185
185
  </div>
186
186
  <script src="../prettify.js"></script>
187
187
  <script>
@@ -106,14 +106,14 @@
106
106
  <span class="cline-any cline-yes">3x</span>
107
107
  <span class="cline-any cline-neutral">&nbsp;</span>
108
108
  <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">export default function isIpv6Address(address) {
109
- let sectionCount = 0;
109
+ let count = 0;
110
110
  let ans = true;
111
111
  for (let i = 0; i &lt;= address.length; i += 1) {
112
112
  const char = address.charAt(i);
113
113
  switch (char) {
114
114
  case '':
115
115
  case ':':
116
- sectionCount += 1;
116
+ count += 1;
117
117
  break;
118
118
  default:
119
119
  <span class="missing-if-branch" title="if path not taken" >I</span>if (!((char &gt;= '0' &amp;&amp; char &lt;= '9') || (char &gt;= 'a' &amp;&amp; char &lt;= 'f'))) {
@@ -121,7 +121,7 @@
121
121
  }
122
122
  }
123
123
  }
124
- if (sectionCount !== 8) {
124
+ if (count !== 8) {
125
125
  ans = false;
126
126
  }
127
127
  return ans;
@@ -133,7 +133,7 @@
133
133
  <div class='footer quiet pad2 space-top1 center small'>
134
134
  Code coverage generated by
135
135
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
136
- at 2025-07-04T07:00:51.822Z
136
+ at 2025-07-07T13:16:19.437Z
137
137
  </div>
138
138
  <script src="../prettify.js"></script>
139
139
  <script>
@@ -142,7 +142,7 @@ export function toInt(buf) {
142
142
  <div class='footer quiet pad2 space-top1 center small'>
143
143
  Code coverage generated by
144
144
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
145
- at 2025-07-04T07:00:51.822Z
145
+ at 2025-07-07T13:16:19.437Z
146
146
  </div>
147
147
  <script src="../prettify.js"></script>
148
148
  <script>
@@ -223,7 +223,7 @@
223
223
  <div class='footer quiet pad2 space-top1 center small'>
224
224
  Code coverage generated by
225
225
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
226
- at 2025-07-04T07:00:51.822Z
226
+ at 2025-07-07T13:16:19.437Z
227
227
  </div>
228
228
  <script src="../prettify.js"></script>
229
229
  <script>
@@ -79,7 +79,7 @@
79
79
  <div class='footer quiet pad2 space-top1 center small'>
80
80
  Code coverage generated by
81
81
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
82
- at 2025-07-04T07:00:51.822Z
82
+ at 2025-07-07T13:16:19.437Z
83
83
  </div>
84
84
  <script src="../prettify.js"></script>
85
85
  <script>
@@ -0,0 +1,403 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for server/class/Blocks.js</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> / <a href="index.html">server/class</a> Blocks.js</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">78.33% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>47/60</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">53.57% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>15/28</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">77.77% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>7/9</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">77.96% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>46/59</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 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>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
173
+ <span class="cline-any cline-neutral">&nbsp;</span>
174
+ <span class="cline-any cline-neutral">&nbsp;</span>
175
+ <span class="cline-any cline-neutral">&nbsp;</span>
176
+ <span class="cline-any cline-yes">13x</span>
177
+ <span class="cline-any cline-yes">13x</span>
178
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
182
+ <span class="cline-any cline-yes">2x</span>
183
+ <span class="cline-any cline-yes">2x</span>
184
+ <span class="cline-any cline-yes">2x</span>
185
+ <span class="cline-any cline-yes">2x</span>
186
+ <span class="cline-any cline-yes">2x</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-yes">2x</span>
194
+ <span class="cline-any cline-no">&nbsp;</span>
195
+ <span class="cline-any cline-neutral">&nbsp;</span>
196
+ <span class="cline-any cline-yes">2x</span>
197
+ <span class="cline-any cline-no">&nbsp;</span>
198
+ <span class="cline-any cline-neutral">&nbsp;</span>
199
+ <span class="cline-any cline-neutral">&nbsp;</span>
200
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&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-no">&nbsp;</span>
208
+ <span class="cline-any cline-neutral">&nbsp;</span>
209
+ <span class="cline-any cline-no">&nbsp;</span>
210
+ <span class="cline-any cline-no">&nbsp;</span>
211
+ <span class="cline-any cline-neutral">&nbsp;</span>
212
+ <span class="cline-any cline-no">&nbsp;</span>
213
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
217
+ <span class="cline-any cline-yes">3x</span>
218
+ <span class="cline-any cline-yes">2x</span>
219
+ <span class="cline-any cline-yes">1x</span>
220
+ <span class="cline-any cline-yes">1x</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-yes">3x</span>
225
+ <span class="cline-any cline-yes">3x</span>
226
+ <span class="cline-any cline-yes">3x</span>
227
+ <span class="cline-any cline-yes">3x</span>
228
+ <span class="cline-any cline-yes">3x</span>
229
+ <span class="cline-any cline-yes">3x</span>
230
+ <span class="cline-any cline-yes">3x</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-neutral">&nbsp;</span>
234
+ <span class="cline-any cline-neutral">&nbsp;</span>
235
+ <span class="cline-any cline-neutral">&nbsp;</span>
236
+ <span class="cline-any cline-yes">14x</span>
237
+ <span class="cline-any cline-yes">14x</span>
238
+ <span class="cline-any cline-yes">14x</span>
239
+ <span class="cline-any cline-yes">4x</span>
240
+ <span class="cline-any cline-yes">4x</span>
241
+ <span class="cline-any cline-yes">4x</span>
242
+ <span class="cline-any cline-yes">4x</span>
243
+ <span class="cline-any cline-yes">4x</span>
244
+ <span class="cline-any cline-neutral">&nbsp;</span>
245
+ <span class="cline-any cline-yes">10x</span>
246
+ <span class="cline-any cline-yes">10x</span>
247
+ <span class="cline-any cline-yes">10x</span>
248
+ <span class="cline-any cline-yes">10x</span>
249
+ <span class="cline-any cline-yes">10x</span>
250
+ <span class="cline-any cline-yes">10x</span>
251
+ <span class="cline-any cline-yes">10x</span>
252
+ <span class="cline-any cline-yes">10x</span>
253
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
+ <span class="cline-any cline-no">&nbsp;</span>
255
+ <span class="cline-any cline-no">&nbsp;</span>
256
+ <span class="cline-any cline-neutral">&nbsp;</span>
257
+ <span class="cline-any cline-neutral">&nbsp;</span>
258
+ <span class="cline-any cline-yes">14x</span>
259
+ <span class="cline-any cline-neutral">&nbsp;</span>
260
+ <span class="cline-any cline-neutral">&nbsp;</span>
261
+ <span class="cline-any cline-neutral">&nbsp;</span>
262
+ <span class="cline-any cline-yes">14x</span>
263
+ <span class="cline-any cline-yes">14x</span>
264
+ <span class="cline-any cline-yes">14x</span>
265
+ <span class="cline-any cline-yes">7x</span>
266
+ <span class="cline-any cline-yes">7x</span>
267
+ <span class="cline-any cline-yes">7x</span>
268
+ <span class="cline-any cline-yes">7x</span>
269
+ <span class="cline-any cline-yes">7x</span>
270
+ <span class="cline-any cline-neutral">&nbsp;</span>
271
+ <span class="cline-any cline-no">&nbsp;</span>
272
+ <span class="cline-any cline-neutral">&nbsp;</span>
273
+ <span class="cline-any cline-neutral">&nbsp;</span>
274
+ <span class="cline-any cline-neutral">&nbsp;</span>
275
+ <span class="cline-any cline-neutral">&nbsp;</span>
276
+ <span class="cline-any cline-neutral">&nbsp;</span>
277
+ <span class="cline-any cline-neutral">&nbsp;</span>
278
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import net from 'net';
279
+ import { Ipv4Router, Ipv6Router, } from 'advising.js';
280
+ &nbsp;
281
+ function getIntervalFromTime(time) {
282
+ const currentTime = new Date().getTime();
283
+ return Math.floor(currentTime - time);
284
+ }
285
+ &nbsp;
286
+ class Blocks {
287
+ constructor(interval) {
288
+ this.dealParams(interval);
289
+ this.interval = interval;
290
+ this.count = 0;
291
+ this.ipv4Blocks = new Ipv4Router({ debug: false, hideError: true, });
292
+ this.ipv6Blocks = new Ipv6Router({ debug: false, hideError: true, });
293
+ }
294
+ &nbsp;
295
+ dealParams(interval) {
296
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!Number.isInteger(interval)) {
297
+ <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The interval parameter should be of integer type.');</span>
298
+ }
299
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (interval &lt;= 0) {
300
+ <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The interval should be a positive integer otherwise it has no meaning.');</span>
301
+ }
302
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!Number.isInteger(interval / 500)) {
303
+ <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The parameter interval should be divisible by 500 milliseconds.');</span>
304
+ }
305
+ }
306
+ &nbsp;
307
+ <span class="fstat-no" title="function not covered" > ge</span>tCount() {
308
+ <span class="cstat-no" title="statement not covered" > return this.count;</span>
309
+ }
310
+ &nbsp;
311
+ <span class="fstat-no" title="function not covered" > se</span>tInterval(interval) {
312
+ <span class="cstat-no" title="statement not covered" > if (!Number.isInteger(interval)) {</span>
313
+ <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The interval parameter should be of integer type.');</span>
314
+ }
315
+ <span class="cstat-no" title="statement not covered" > if (interval &lt;= 0) {</span>
316
+ <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The interval should be a positive integer otherwise it has no meaning.');</span>
317
+ }
318
+ <span class="cstat-no" title="statement not covered" > this.interval = interval;</span>
319
+ }
320
+ &nbsp;
321
+ cleanIpAddress(ip, formerInterval) {
322
+ let ipBlocks;
323
+ if (net.isIPv4(ip)) {
324
+ ipBlocks = this.ipv4Blocks;
325
+ } else if (net.isIPv6(ip)) {
326
+ ipBlocks = this.ipv6Blocks;
327
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
328
+ <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The Ip type is not expected');</span>
329
+ }
330
+ const block = ipBlocks.gain(ip);
331
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (block !== undefined) {
332
+ const { time, } = block;
333
+ const interval = getIntervalFromTime(time);
334
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (interval &gt;= formerInterval) {
335
+ ipBlocks.ruin(ip);
336
+ this.count = 0;
337
+ }
338
+ }
339
+ }
340
+ &nbsp;
341
+ examineIpAddress(ip, ipBlocks) {
342
+ let ans = true;
343
+ const block = ipBlocks.gain(ip);
344
+ if (block === undefined) {
345
+ const currentTime = new Date().getTime();
346
+ ipBlocks.attach(ip, { time: currentTime, count: 1, });
347
+ this.count = 1;
348
+ const { interval, } = this;
349
+ setTimeout(() =&gt; this.cleanIpAddress(ip, this.interval), interval);
350
+ } else {
351
+ const { time, } = block;
352
+ const interval = getIntervalFromTime(time);
353
+ if (interval &lt; this.interval) {
354
+ let { count, } = block;
355
+ count += 1;
356
+ ipBlocks.revise(ip, { time, count, });
357
+ this.count = count;
358
+ ans = false;
359
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
360
+ <span class="cstat-no" title="statement not covered" > ipBlocks.ruin(ip);</span>
361
+ <span class="cstat-no" title="statement not covered" > this.count = 0;</span>
362
+ }
363
+ }
364
+ return ans;
365
+ }
366
+ &nbsp;
367
+ examine(ip) {
368
+ <span class="missing-if-branch" title="else path not taken" >E</span>if (ip !== undefined) {
369
+ const { interval, } = this;
370
+ if (net.isIPv4(ip)) {
371
+ const { ipv4Blocks, } = this;
372
+ return this.examineIpAddress(ip, ipv4Blocks);
373
+ } else if (net.isIPv6(ip)) {
374
+ const { ipv6Blocks, } = this;
375
+ return this.examineIpAddress(ip, ipv6Blocks);
376
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
377
+ <span class="cstat-no" title="statement not covered" > throw new Error('[Error] The Ip type is not expected.');</span>
378
+ }
379
+ }
380
+ }
381
+ }
382
+ &nbsp;
383
+ export default Blocks;
384
+ &nbsp;</pre></td></tr></table></pre>
385
+
386
+ <div class='push'></div><!-- for sticky footer -->
387
+ </div><!-- /wrapper -->
388
+ <div class='footer quiet pad2 space-top1 center small'>
389
+ Code coverage generated by
390
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
391
+ at 2025-07-08T03:23:18.306Z
392
+ </div>
393
+ <script src="../../prettify.js"></script>
394
+ <script>
395
+ window.onload = function () {
396
+ prettyPrint();
397
+ };
398
+ </script>
399
+ <script src="../../sorter.js"></script>
400
+ <script src="../../block-navigation.js"></script>
401
+ </body>
402
+ </html>
403
+