@gorgonjs/gorgon 1.4.1 → 1.5.1
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.
- package/.eslintrc +5 -85
- package/CHANGELOG.md +11 -0
- package/README.md +2 -2
- package/__tests__/basic.test.ts +91 -74
- package/__tests__/clearmany.test.ts +58 -33
- package/__tests__/concurrency.test.ts +10 -16
- package/__tests__/datePolicy.test.ts +8 -8
- package/__tests__/debug.test.ts +31 -24
- package/__tests__/hooks.test.ts +181 -0
- package/coverage/base.css +224 -0
- package/coverage/block-navigation.js +87 -0
- package/coverage/clover.xml +433 -0
- package/coverage/coverage-final.json +3 -0
- package/coverage/favicon.png +0 -0
- package/coverage/index.html +131 -0
- package/coverage/library/index.html +116 -0
- package/coverage/library/index.ts.html +1036 -0
- package/coverage/library/provider/index.html +116 -0
- package/coverage/library/provider/memory.ts.html +379 -0
- package/coverage/prettify.css +1 -0
- package/coverage/prettify.js +2 -0
- package/coverage/sort-arrow-sprite.png +0 -0
- package/coverage/sorter.js +196 -0
- package/dist/index.d.ts +9 -2
- package/dist/index.es.js +107 -88
- package/dist/index.es.js.map +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/index.umd.js.map +1 -1
- package/index.ts +114 -52
- package/package.json +2 -1
|
@@ -0,0 +1,1036 @@
|
|
|
1
|
+
|
|
2
|
+
<!doctype html>
|
|
3
|
+
<html lang="en">
|
|
4
|
+
|
|
5
|
+
<head>
|
|
6
|
+
<title>Code coverage report for library/index.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> / <a href="index.html">library</a> index.ts</h1>
|
|
23
|
+
<div class='clearfix'>
|
|
24
|
+
|
|
25
|
+
<div class='fl pad1y space-right2'>
|
|
26
|
+
<span class="strong">97.79% </span>
|
|
27
|
+
<span class="quiet">Statements</span>
|
|
28
|
+
<span class='fraction'>310/317</span>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
<div class='fl pad1y space-right2'>
|
|
33
|
+
<span class="strong">90.9% </span>
|
|
34
|
+
<span class="quiet">Branches</span>
|
|
35
|
+
<span class='fraction'>60/66</span>
|
|
36
|
+
</div>
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
<div class='fl pad1y space-right2'>
|
|
40
|
+
<span class="strong">100% </span>
|
|
41
|
+
<span class="quiet">Functions</span>
|
|
42
|
+
<span class='fraction'>10/10</span>
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
<div class='fl pad1y space-right2'>
|
|
47
|
+
<span class="strong">97.79% </span>
|
|
48
|
+
<span class="quiet">Lines</span>
|
|
49
|
+
<span class='fraction'>310/317</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 high'></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>
|
|
173
|
+
<a name='L108'></a><a href='#L108'>108</a>
|
|
174
|
+
<a name='L109'></a><a href='#L109'>109</a>
|
|
175
|
+
<a name='L110'></a><a href='#L110'>110</a>
|
|
176
|
+
<a name='L111'></a><a href='#L111'>111</a>
|
|
177
|
+
<a name='L112'></a><a href='#L112'>112</a>
|
|
178
|
+
<a name='L113'></a><a href='#L113'>113</a>
|
|
179
|
+
<a name='L114'></a><a href='#L114'>114</a>
|
|
180
|
+
<a name='L115'></a><a href='#L115'>115</a>
|
|
181
|
+
<a name='L116'></a><a href='#L116'>116</a>
|
|
182
|
+
<a name='L117'></a><a href='#L117'>117</a>
|
|
183
|
+
<a name='L118'></a><a href='#L118'>118</a>
|
|
184
|
+
<a name='L119'></a><a href='#L119'>119</a>
|
|
185
|
+
<a name='L120'></a><a href='#L120'>120</a>
|
|
186
|
+
<a name='L121'></a><a href='#L121'>121</a>
|
|
187
|
+
<a name='L122'></a><a href='#L122'>122</a>
|
|
188
|
+
<a name='L123'></a><a href='#L123'>123</a>
|
|
189
|
+
<a name='L124'></a><a href='#L124'>124</a>
|
|
190
|
+
<a name='L125'></a><a href='#L125'>125</a>
|
|
191
|
+
<a name='L126'></a><a href='#L126'>126</a>
|
|
192
|
+
<a name='L127'></a><a href='#L127'>127</a>
|
|
193
|
+
<a name='L128'></a><a href='#L128'>128</a>
|
|
194
|
+
<a name='L129'></a><a href='#L129'>129</a>
|
|
195
|
+
<a name='L130'></a><a href='#L130'>130</a>
|
|
196
|
+
<a name='L131'></a><a href='#L131'>131</a>
|
|
197
|
+
<a name='L132'></a><a href='#L132'>132</a>
|
|
198
|
+
<a name='L133'></a><a href='#L133'>133</a>
|
|
199
|
+
<a name='L134'></a><a href='#L134'>134</a>
|
|
200
|
+
<a name='L135'></a><a href='#L135'>135</a>
|
|
201
|
+
<a name='L136'></a><a href='#L136'>136</a>
|
|
202
|
+
<a name='L137'></a><a href='#L137'>137</a>
|
|
203
|
+
<a name='L138'></a><a href='#L138'>138</a>
|
|
204
|
+
<a name='L139'></a><a href='#L139'>139</a>
|
|
205
|
+
<a name='L140'></a><a href='#L140'>140</a>
|
|
206
|
+
<a name='L141'></a><a href='#L141'>141</a>
|
|
207
|
+
<a name='L142'></a><a href='#L142'>142</a>
|
|
208
|
+
<a name='L143'></a><a href='#L143'>143</a>
|
|
209
|
+
<a name='L144'></a><a href='#L144'>144</a>
|
|
210
|
+
<a name='L145'></a><a href='#L145'>145</a>
|
|
211
|
+
<a name='L146'></a><a href='#L146'>146</a>
|
|
212
|
+
<a name='L147'></a><a href='#L147'>147</a>
|
|
213
|
+
<a name='L148'></a><a href='#L148'>148</a>
|
|
214
|
+
<a name='L149'></a><a href='#L149'>149</a>
|
|
215
|
+
<a name='L150'></a><a href='#L150'>150</a>
|
|
216
|
+
<a name='L151'></a><a href='#L151'>151</a>
|
|
217
|
+
<a name='L152'></a><a href='#L152'>152</a>
|
|
218
|
+
<a name='L153'></a><a href='#L153'>153</a>
|
|
219
|
+
<a name='L154'></a><a href='#L154'>154</a>
|
|
220
|
+
<a name='L155'></a><a href='#L155'>155</a>
|
|
221
|
+
<a name='L156'></a><a href='#L156'>156</a>
|
|
222
|
+
<a name='L157'></a><a href='#L157'>157</a>
|
|
223
|
+
<a name='L158'></a><a href='#L158'>158</a>
|
|
224
|
+
<a name='L159'></a><a href='#L159'>159</a>
|
|
225
|
+
<a name='L160'></a><a href='#L160'>160</a>
|
|
226
|
+
<a name='L161'></a><a href='#L161'>161</a>
|
|
227
|
+
<a name='L162'></a><a href='#L162'>162</a>
|
|
228
|
+
<a name='L163'></a><a href='#L163'>163</a>
|
|
229
|
+
<a name='L164'></a><a href='#L164'>164</a>
|
|
230
|
+
<a name='L165'></a><a href='#L165'>165</a>
|
|
231
|
+
<a name='L166'></a><a href='#L166'>166</a>
|
|
232
|
+
<a name='L167'></a><a href='#L167'>167</a>
|
|
233
|
+
<a name='L168'></a><a href='#L168'>168</a>
|
|
234
|
+
<a name='L169'></a><a href='#L169'>169</a>
|
|
235
|
+
<a name='L170'></a><a href='#L170'>170</a>
|
|
236
|
+
<a name='L171'></a><a href='#L171'>171</a>
|
|
237
|
+
<a name='L172'></a><a href='#L172'>172</a>
|
|
238
|
+
<a name='L173'></a><a href='#L173'>173</a>
|
|
239
|
+
<a name='L174'></a><a href='#L174'>174</a>
|
|
240
|
+
<a name='L175'></a><a href='#L175'>175</a>
|
|
241
|
+
<a name='L176'></a><a href='#L176'>176</a>
|
|
242
|
+
<a name='L177'></a><a href='#L177'>177</a>
|
|
243
|
+
<a name='L178'></a><a href='#L178'>178</a>
|
|
244
|
+
<a name='L179'></a><a href='#L179'>179</a>
|
|
245
|
+
<a name='L180'></a><a href='#L180'>180</a>
|
|
246
|
+
<a name='L181'></a><a href='#L181'>181</a>
|
|
247
|
+
<a name='L182'></a><a href='#L182'>182</a>
|
|
248
|
+
<a name='L183'></a><a href='#L183'>183</a>
|
|
249
|
+
<a name='L184'></a><a href='#L184'>184</a>
|
|
250
|
+
<a name='L185'></a><a href='#L185'>185</a>
|
|
251
|
+
<a name='L186'></a><a href='#L186'>186</a>
|
|
252
|
+
<a name='L187'></a><a href='#L187'>187</a>
|
|
253
|
+
<a name='L188'></a><a href='#L188'>188</a>
|
|
254
|
+
<a name='L189'></a><a href='#L189'>189</a>
|
|
255
|
+
<a name='L190'></a><a href='#L190'>190</a>
|
|
256
|
+
<a name='L191'></a><a href='#L191'>191</a>
|
|
257
|
+
<a name='L192'></a><a href='#L192'>192</a>
|
|
258
|
+
<a name='L193'></a><a href='#L193'>193</a>
|
|
259
|
+
<a name='L194'></a><a href='#L194'>194</a>
|
|
260
|
+
<a name='L195'></a><a href='#L195'>195</a>
|
|
261
|
+
<a name='L196'></a><a href='#L196'>196</a>
|
|
262
|
+
<a name='L197'></a><a href='#L197'>197</a>
|
|
263
|
+
<a name='L198'></a><a href='#L198'>198</a>
|
|
264
|
+
<a name='L199'></a><a href='#L199'>199</a>
|
|
265
|
+
<a name='L200'></a><a href='#L200'>200</a>
|
|
266
|
+
<a name='L201'></a><a href='#L201'>201</a>
|
|
267
|
+
<a name='L202'></a><a href='#L202'>202</a>
|
|
268
|
+
<a name='L203'></a><a href='#L203'>203</a>
|
|
269
|
+
<a name='L204'></a><a href='#L204'>204</a>
|
|
270
|
+
<a name='L205'></a><a href='#L205'>205</a>
|
|
271
|
+
<a name='L206'></a><a href='#L206'>206</a>
|
|
272
|
+
<a name='L207'></a><a href='#L207'>207</a>
|
|
273
|
+
<a name='L208'></a><a href='#L208'>208</a>
|
|
274
|
+
<a name='L209'></a><a href='#L209'>209</a>
|
|
275
|
+
<a name='L210'></a><a href='#L210'>210</a>
|
|
276
|
+
<a name='L211'></a><a href='#L211'>211</a>
|
|
277
|
+
<a name='L212'></a><a href='#L212'>212</a>
|
|
278
|
+
<a name='L213'></a><a href='#L213'>213</a>
|
|
279
|
+
<a name='L214'></a><a href='#L214'>214</a>
|
|
280
|
+
<a name='L215'></a><a href='#L215'>215</a>
|
|
281
|
+
<a name='L216'></a><a href='#L216'>216</a>
|
|
282
|
+
<a name='L217'></a><a href='#L217'>217</a>
|
|
283
|
+
<a name='L218'></a><a href='#L218'>218</a>
|
|
284
|
+
<a name='L219'></a><a href='#L219'>219</a>
|
|
285
|
+
<a name='L220'></a><a href='#L220'>220</a>
|
|
286
|
+
<a name='L221'></a><a href='#L221'>221</a>
|
|
287
|
+
<a name='L222'></a><a href='#L222'>222</a>
|
|
288
|
+
<a name='L223'></a><a href='#L223'>223</a>
|
|
289
|
+
<a name='L224'></a><a href='#L224'>224</a>
|
|
290
|
+
<a name='L225'></a><a href='#L225'>225</a>
|
|
291
|
+
<a name='L226'></a><a href='#L226'>226</a>
|
|
292
|
+
<a name='L227'></a><a href='#L227'>227</a>
|
|
293
|
+
<a name='L228'></a><a href='#L228'>228</a>
|
|
294
|
+
<a name='L229'></a><a href='#L229'>229</a>
|
|
295
|
+
<a name='L230'></a><a href='#L230'>230</a>
|
|
296
|
+
<a name='L231'></a><a href='#L231'>231</a>
|
|
297
|
+
<a name='L232'></a><a href='#L232'>232</a>
|
|
298
|
+
<a name='L233'></a><a href='#L233'>233</a>
|
|
299
|
+
<a name='L234'></a><a href='#L234'>234</a>
|
|
300
|
+
<a name='L235'></a><a href='#L235'>235</a>
|
|
301
|
+
<a name='L236'></a><a href='#L236'>236</a>
|
|
302
|
+
<a name='L237'></a><a href='#L237'>237</a>
|
|
303
|
+
<a name='L238'></a><a href='#L238'>238</a>
|
|
304
|
+
<a name='L239'></a><a href='#L239'>239</a>
|
|
305
|
+
<a name='L240'></a><a href='#L240'>240</a>
|
|
306
|
+
<a name='L241'></a><a href='#L241'>241</a>
|
|
307
|
+
<a name='L242'></a><a href='#L242'>242</a>
|
|
308
|
+
<a name='L243'></a><a href='#L243'>243</a>
|
|
309
|
+
<a name='L244'></a><a href='#L244'>244</a>
|
|
310
|
+
<a name='L245'></a><a href='#L245'>245</a>
|
|
311
|
+
<a name='L246'></a><a href='#L246'>246</a>
|
|
312
|
+
<a name='L247'></a><a href='#L247'>247</a>
|
|
313
|
+
<a name='L248'></a><a href='#L248'>248</a>
|
|
314
|
+
<a name='L249'></a><a href='#L249'>249</a>
|
|
315
|
+
<a name='L250'></a><a href='#L250'>250</a>
|
|
316
|
+
<a name='L251'></a><a href='#L251'>251</a>
|
|
317
|
+
<a name='L252'></a><a href='#L252'>252</a>
|
|
318
|
+
<a name='L253'></a><a href='#L253'>253</a>
|
|
319
|
+
<a name='L254'></a><a href='#L254'>254</a>
|
|
320
|
+
<a name='L255'></a><a href='#L255'>255</a>
|
|
321
|
+
<a name='L256'></a><a href='#L256'>256</a>
|
|
322
|
+
<a name='L257'></a><a href='#L257'>257</a>
|
|
323
|
+
<a name='L258'></a><a href='#L258'>258</a>
|
|
324
|
+
<a name='L259'></a><a href='#L259'>259</a>
|
|
325
|
+
<a name='L260'></a><a href='#L260'>260</a>
|
|
326
|
+
<a name='L261'></a><a href='#L261'>261</a>
|
|
327
|
+
<a name='L262'></a><a href='#L262'>262</a>
|
|
328
|
+
<a name='L263'></a><a href='#L263'>263</a>
|
|
329
|
+
<a name='L264'></a><a href='#L264'>264</a>
|
|
330
|
+
<a name='L265'></a><a href='#L265'>265</a>
|
|
331
|
+
<a name='L266'></a><a href='#L266'>266</a>
|
|
332
|
+
<a name='L267'></a><a href='#L267'>267</a>
|
|
333
|
+
<a name='L268'></a><a href='#L268'>268</a>
|
|
334
|
+
<a name='L269'></a><a href='#L269'>269</a>
|
|
335
|
+
<a name='L270'></a><a href='#L270'>270</a>
|
|
336
|
+
<a name='L271'></a><a href='#L271'>271</a>
|
|
337
|
+
<a name='L272'></a><a href='#L272'>272</a>
|
|
338
|
+
<a name='L273'></a><a href='#L273'>273</a>
|
|
339
|
+
<a name='L274'></a><a href='#L274'>274</a>
|
|
340
|
+
<a name='L275'></a><a href='#L275'>275</a>
|
|
341
|
+
<a name='L276'></a><a href='#L276'>276</a>
|
|
342
|
+
<a name='L277'></a><a href='#L277'>277</a>
|
|
343
|
+
<a name='L278'></a><a href='#L278'>278</a>
|
|
344
|
+
<a name='L279'></a><a href='#L279'>279</a>
|
|
345
|
+
<a name='L280'></a><a href='#L280'>280</a>
|
|
346
|
+
<a name='L281'></a><a href='#L281'>281</a>
|
|
347
|
+
<a name='L282'></a><a href='#L282'>282</a>
|
|
348
|
+
<a name='L283'></a><a href='#L283'>283</a>
|
|
349
|
+
<a name='L284'></a><a href='#L284'>284</a>
|
|
350
|
+
<a name='L285'></a><a href='#L285'>285</a>
|
|
351
|
+
<a name='L286'></a><a href='#L286'>286</a>
|
|
352
|
+
<a name='L287'></a><a href='#L287'>287</a>
|
|
353
|
+
<a name='L288'></a><a href='#L288'>288</a>
|
|
354
|
+
<a name='L289'></a><a href='#L289'>289</a>
|
|
355
|
+
<a name='L290'></a><a href='#L290'>290</a>
|
|
356
|
+
<a name='L291'></a><a href='#L291'>291</a>
|
|
357
|
+
<a name='L292'></a><a href='#L292'>292</a>
|
|
358
|
+
<a name='L293'></a><a href='#L293'>293</a>
|
|
359
|
+
<a name='L294'></a><a href='#L294'>294</a>
|
|
360
|
+
<a name='L295'></a><a href='#L295'>295</a>
|
|
361
|
+
<a name='L296'></a><a href='#L296'>296</a>
|
|
362
|
+
<a name='L297'></a><a href='#L297'>297</a>
|
|
363
|
+
<a name='L298'></a><a href='#L298'>298</a>
|
|
364
|
+
<a name='L299'></a><a href='#L299'>299</a>
|
|
365
|
+
<a name='L300'></a><a href='#L300'>300</a>
|
|
366
|
+
<a name='L301'></a><a href='#L301'>301</a>
|
|
367
|
+
<a name='L302'></a><a href='#L302'>302</a>
|
|
368
|
+
<a name='L303'></a><a href='#L303'>303</a>
|
|
369
|
+
<a name='L304'></a><a href='#L304'>304</a>
|
|
370
|
+
<a name='L305'></a><a href='#L305'>305</a>
|
|
371
|
+
<a name='L306'></a><a href='#L306'>306</a>
|
|
372
|
+
<a name='L307'></a><a href='#L307'>307</a>
|
|
373
|
+
<a name='L308'></a><a href='#L308'>308</a>
|
|
374
|
+
<a name='L309'></a><a href='#L309'>309</a>
|
|
375
|
+
<a name='L310'></a><a href='#L310'>310</a>
|
|
376
|
+
<a name='L311'></a><a href='#L311'>311</a>
|
|
377
|
+
<a name='L312'></a><a href='#L312'>312</a>
|
|
378
|
+
<a name='L313'></a><a href='#L313'>313</a>
|
|
379
|
+
<a name='L314'></a><a href='#L314'>314</a>
|
|
380
|
+
<a name='L315'></a><a href='#L315'>315</a>
|
|
381
|
+
<a name='L316'></a><a href='#L316'>316</a>
|
|
382
|
+
<a name='L317'></a><a href='#L317'>317</a>
|
|
383
|
+
<a name='L318'></a><a href='#L318'>318</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
384
|
+
<span class="cline-any cline-yes">1x</span>
|
|
385
|
+
<span class="cline-any cline-yes">1x</span>
|
|
386
|
+
<span class="cline-any cline-yes">1x</span>
|
|
387
|
+
<span class="cline-any cline-yes">1x</span>
|
|
388
|
+
<span class="cline-any cline-yes">1x</span>
|
|
389
|
+
<span class="cline-any cline-yes">1x</span>
|
|
390
|
+
<span class="cline-any cline-yes">1x</span>
|
|
391
|
+
<span class="cline-any cline-yes">1x</span>
|
|
392
|
+
<span class="cline-any cline-yes">1x</span>
|
|
393
|
+
<span class="cline-any cline-yes">1x</span>
|
|
394
|
+
<span class="cline-any cline-yes">1x</span>
|
|
395
|
+
<span class="cline-any cline-yes">1x</span>
|
|
396
|
+
<span class="cline-any cline-yes">1x</span>
|
|
397
|
+
<span class="cline-any cline-yes">1x</span>
|
|
398
|
+
<span class="cline-any cline-yes">1x</span>
|
|
399
|
+
<span class="cline-any cline-yes">1x</span>
|
|
400
|
+
<span class="cline-any cline-yes">1x</span>
|
|
401
|
+
<span class="cline-any cline-yes">1x</span>
|
|
402
|
+
<span class="cline-any cline-yes">1x</span>
|
|
403
|
+
<span class="cline-any cline-yes">1x</span>
|
|
404
|
+
<span class="cline-any cline-yes">1x</span>
|
|
405
|
+
<span class="cline-any cline-yes">1x</span>
|
|
406
|
+
<span class="cline-any cline-yes">1x</span>
|
|
407
|
+
<span class="cline-any cline-yes">1x</span>
|
|
408
|
+
<span class="cline-any cline-yes">1x</span>
|
|
409
|
+
<span class="cline-any cline-yes">1x</span>
|
|
410
|
+
<span class="cline-any cline-yes">1x</span>
|
|
411
|
+
<span class="cline-any cline-yes">1x</span>
|
|
412
|
+
<span class="cline-any cline-yes">1x</span>
|
|
413
|
+
<span class="cline-any cline-yes">1x</span>
|
|
414
|
+
<span class="cline-any cline-yes">1x</span>
|
|
415
|
+
<span class="cline-any cline-yes">1x</span>
|
|
416
|
+
<span class="cline-any cline-yes">1x</span>
|
|
417
|
+
<span class="cline-any cline-yes">1x</span>
|
|
418
|
+
<span class="cline-any cline-yes">1x</span>
|
|
419
|
+
<span class="cline-any cline-yes">1x</span>
|
|
420
|
+
<span class="cline-any cline-yes">1x</span>
|
|
421
|
+
<span class="cline-any cline-yes">1x</span>
|
|
422
|
+
<span class="cline-any cline-yes">1x</span>
|
|
423
|
+
<span class="cline-any cline-yes">1x</span>
|
|
424
|
+
<span class="cline-any cline-yes">1x</span>
|
|
425
|
+
<span class="cline-any cline-yes">1x</span>
|
|
426
|
+
<span class="cline-any cline-yes">1x</span>
|
|
427
|
+
<span class="cline-any cline-yes">1x</span>
|
|
428
|
+
<span class="cline-any cline-yes">1x</span>
|
|
429
|
+
<span class="cline-any cline-yes">6x</span>
|
|
430
|
+
<span class="cline-any cline-yes">6x</span>
|
|
431
|
+
<span class="cline-any cline-yes">6x</span>
|
|
432
|
+
<span class="cline-any cline-yes">6x</span>
|
|
433
|
+
<span class="cline-any cline-yes">6x</span>
|
|
434
|
+
<span class="cline-any cline-yes">6x</span>
|
|
435
|
+
<span class="cline-any cline-yes">6x</span>
|
|
436
|
+
<span class="cline-any cline-yes">6x</span>
|
|
437
|
+
<span class="cline-any cline-yes">6x</span>
|
|
438
|
+
<span class="cline-any cline-yes">6x</span>
|
|
439
|
+
<span class="cline-any cline-yes">112x</span>
|
|
440
|
+
<span class="cline-any cline-yes">112x</span>
|
|
441
|
+
<span class="cline-any cline-yes">112x</span>
|
|
442
|
+
<span class="cline-any cline-yes">112x</span>
|
|
443
|
+
<span class="cline-any cline-yes">112x</span>
|
|
444
|
+
<span class="cline-any cline-yes">112x</span>
|
|
445
|
+
<span class="cline-any cline-yes">112x</span>
|
|
446
|
+
<span class="cline-any cline-yes">5x</span>
|
|
447
|
+
<span class="cline-any cline-yes">5x</span>
|
|
448
|
+
<span class="cline-any cline-yes">107x</span>
|
|
449
|
+
<span class="cline-any cline-yes">107x</span>
|
|
450
|
+
<span class="cline-any cline-yes">112x</span>
|
|
451
|
+
<span class="cline-any cline-yes">1x</span>
|
|
452
|
+
<span class="cline-any cline-yes">1x</span>
|
|
453
|
+
<span class="cline-any cline-yes">1x</span>
|
|
454
|
+
<span class="cline-any cline-yes">112x</span>
|
|
455
|
+
<span class="cline-any cline-yes">62x</span>
|
|
456
|
+
<span class="cline-any cline-no"> </span>
|
|
457
|
+
<span class="cline-any cline-yes">62x</span>
|
|
458
|
+
<span class="cline-any cline-yes">62x</span>
|
|
459
|
+
<span class="cline-any cline-yes">62x</span>
|
|
460
|
+
<span class="cline-any cline-yes">62x</span>
|
|
461
|
+
<span class="cline-any cline-yes">106x</span>
|
|
462
|
+
<span class="cline-any cline-yes">18x</span>
|
|
463
|
+
<span class="cline-any cline-yes">44x</span>
|
|
464
|
+
<span class="cline-any cline-yes">26x</span>
|
|
465
|
+
<span class="cline-any cline-yes">26x</span>
|
|
466
|
+
<span class="cline-any cline-yes">107x</span>
|
|
467
|
+
<span class="cline-any cline-yes">107x</span>
|
|
468
|
+
<span class="cline-any cline-yes">112x</span>
|
|
469
|
+
<span class="cline-any cline-yes">112x</span>
|
|
470
|
+
<span class="cline-any cline-yes">112x</span>
|
|
471
|
+
<span class="cline-any cline-yes">112x</span>
|
|
472
|
+
<span class="cline-any cline-yes">6x</span>
|
|
473
|
+
<span class="cline-any cline-yes">6x</span>
|
|
474
|
+
<span class="cline-any cline-yes">6x</span>
|
|
475
|
+
<span class="cline-any cline-yes">6x</span>
|
|
476
|
+
<span class="cline-any cline-yes">6x</span>
|
|
477
|
+
<span class="cline-any cline-yes">6x</span>
|
|
478
|
+
<span class="cline-any cline-yes">6x</span>
|
|
479
|
+
<span class="cline-any cline-yes">6x</span>
|
|
480
|
+
<span class="cline-any cline-yes">6x</span>
|
|
481
|
+
<span class="cline-any cline-yes">86x</span>
|
|
482
|
+
<span class="cline-any cline-yes">13x</span>
|
|
483
|
+
<span class="cline-any cline-yes">16x</span>
|
|
484
|
+
<span class="cline-any cline-yes">16x</span>
|
|
485
|
+
<span class="cline-any cline-yes">16x</span>
|
|
486
|
+
<span class="cline-any cline-yes">16x</span>
|
|
487
|
+
<span class="cline-any cline-yes">1x</span>
|
|
488
|
+
<span class="cline-any cline-yes">1x</span>
|
|
489
|
+
<span class="cline-any cline-yes">16x</span>
|
|
490
|
+
<span class="cline-any cline-yes">16x</span>
|
|
491
|
+
<span class="cline-any cline-yes">13x</span>
|
|
492
|
+
<span class="cline-any cline-yes">86x</span>
|
|
493
|
+
<span class="cline-any cline-yes">6x</span>
|
|
494
|
+
<span class="cline-any cline-yes">6x</span>
|
|
495
|
+
<span class="cline-any cline-yes">6x</span>
|
|
496
|
+
<span class="cline-any cline-yes">9x</span>
|
|
497
|
+
<span class="cline-any cline-yes">1x</span>
|
|
498
|
+
<span class="cline-any cline-yes">1x</span>
|
|
499
|
+
<span class="cline-any cline-yes">8x</span>
|
|
500
|
+
<span class="cline-any cline-yes">8x</span>
|
|
501
|
+
<span class="cline-any cline-yes">8x</span>
|
|
502
|
+
<span class="cline-any cline-yes">8x</span>
|
|
503
|
+
<span class="cline-any cline-yes">8x</span>
|
|
504
|
+
<span class="cline-any cline-yes">8x</span>
|
|
505
|
+
<span class="cline-any cline-yes">9x</span>
|
|
506
|
+
<span class="cline-any cline-yes">6x</span>
|
|
507
|
+
<span class="cline-any cline-yes">6x</span>
|
|
508
|
+
<span class="cline-any cline-yes">6x</span>
|
|
509
|
+
<span class="cline-any cline-yes">10x</span>
|
|
510
|
+
<span class="cline-any cline-yes">8x</span>
|
|
511
|
+
<span class="cline-any cline-yes">8x</span>
|
|
512
|
+
<span class="cline-any cline-yes">10x</span>
|
|
513
|
+
<span class="cline-any cline-yes">10x</span>
|
|
514
|
+
<span class="cline-any cline-yes">1x</span>
|
|
515
|
+
<span class="cline-any cline-yes">10x</span>
|
|
516
|
+
<span class="cline-any cline-yes">9x</span>
|
|
517
|
+
<span class="cline-any cline-yes">9x</span>
|
|
518
|
+
<span class="cline-any cline-yes">10x</span>
|
|
519
|
+
<span class="cline-any cline-yes">6x</span>
|
|
520
|
+
<span class="cline-any cline-yes">6x</span>
|
|
521
|
+
<span class="cline-any cline-yes">6x</span>
|
|
522
|
+
<span class="cline-any cline-yes">7x</span>
|
|
523
|
+
<span class="cline-any cline-yes">7x</span>
|
|
524
|
+
<span class="cline-any cline-yes">7x</span>
|
|
525
|
+
<span class="cline-any cline-yes">7x</span>
|
|
526
|
+
<span class="cline-any cline-yes">7x</span>
|
|
527
|
+
<span class="cline-any cline-yes">6x</span>
|
|
528
|
+
<span class="cline-any cline-yes">6x</span>
|
|
529
|
+
<span class="cline-any cline-yes">6x</span>
|
|
530
|
+
<span class="cline-any cline-yes">27x</span>
|
|
531
|
+
<span class="cline-any cline-yes">27x</span>
|
|
532
|
+
<span class="cline-any cline-yes">27x</span>
|
|
533
|
+
<span class="cline-any cline-yes">27x</span>
|
|
534
|
+
<span class="cline-any cline-yes">27x</span>
|
|
535
|
+
<span class="cline-any cline-yes">27x</span>
|
|
536
|
+
<span class="cline-any cline-yes">27x</span>
|
|
537
|
+
<span class="cline-any cline-yes">6x</span>
|
|
538
|
+
<span class="cline-any cline-yes">6x</span>
|
|
539
|
+
<span class="cline-any cline-yes">6x</span>
|
|
540
|
+
<span class="cline-any cline-yes">4x</span>
|
|
541
|
+
<span class="cline-any cline-yes">4x</span>
|
|
542
|
+
<span class="cline-any cline-yes">4x</span>
|
|
543
|
+
<span class="cline-any cline-yes">4x</span>
|
|
544
|
+
<span class="cline-any cline-yes">4x</span>
|
|
545
|
+
<span class="cline-any cline-yes">4x</span>
|
|
546
|
+
<span class="cline-any cline-yes">1x</span>
|
|
547
|
+
<span class="cline-any cline-yes">1x</span>
|
|
548
|
+
<span class="cline-any cline-yes">2x</span>
|
|
549
|
+
<span class="cline-any cline-yes">1x</span>
|
|
550
|
+
<span class="cline-any cline-yes">1x</span>
|
|
551
|
+
<span class="cline-any cline-yes">1x</span>
|
|
552
|
+
<span class="cline-any cline-yes">1x</span>
|
|
553
|
+
<span class="cline-any cline-yes">1x</span>
|
|
554
|
+
<span class="cline-any cline-yes">1x</span>
|
|
555
|
+
<span class="cline-any cline-yes">1x</span>
|
|
556
|
+
<span class="cline-any cline-yes">1x</span>
|
|
557
|
+
<span class="cline-any cline-yes">1x</span>
|
|
558
|
+
<span class="cline-any cline-yes">3x</span>
|
|
559
|
+
<span class="cline-any cline-yes">3x</span>
|
|
560
|
+
<span class="cline-any cline-yes">3x</span>
|
|
561
|
+
<span class="cline-any cline-yes">4x</span>
|
|
562
|
+
<span class="cline-any cline-yes">6x</span>
|
|
563
|
+
<span class="cline-any cline-yes">6x</span>
|
|
564
|
+
<span class="cline-any cline-yes">6x</span>
|
|
565
|
+
<span class="cline-any cline-yes">3x</span>
|
|
566
|
+
<span class="cline-any cline-yes">3x</span>
|
|
567
|
+
<span class="cline-any cline-yes">3x</span>
|
|
568
|
+
<span class="cline-any cline-yes">3x</span>
|
|
569
|
+
<span class="cline-any cline-yes">3x</span>
|
|
570
|
+
<span class="cline-any cline-yes">3x</span>
|
|
571
|
+
<span class="cline-any cline-yes">6x</span>
|
|
572
|
+
<span class="cline-any cline-yes">6x</span>
|
|
573
|
+
<span class="cline-any cline-yes">6x</span>
|
|
574
|
+
<span class="cline-any cline-yes">2x</span>
|
|
575
|
+
<span class="cline-any cline-yes">2x</span>
|
|
576
|
+
<span class="cline-any cline-yes">2x</span>
|
|
577
|
+
<span class="cline-any cline-yes">2x</span>
|
|
578
|
+
<span class="cline-any cline-yes">2x</span>
|
|
579
|
+
<span class="cline-any cline-yes">2x</span>
|
|
580
|
+
<span class="cline-any cline-yes">2x</span>
|
|
581
|
+
<span class="cline-any cline-yes">2x</span>
|
|
582
|
+
<span class="cline-any cline-yes">2x</span>
|
|
583
|
+
<span class="cline-any cline-no"> </span>
|
|
584
|
+
<span class="cline-any cline-no"> </span>
|
|
585
|
+
<span class="cline-any cline-yes">2x</span>
|
|
586
|
+
<span class="cline-any cline-yes">6x</span>
|
|
587
|
+
<span class="cline-any cline-yes">6x</span>
|
|
588
|
+
<span class="cline-any cline-yes">6x</span>
|
|
589
|
+
<span class="cline-any cline-yes">32x</span>
|
|
590
|
+
<span class="cline-any cline-yes">32x</span>
|
|
591
|
+
<span class="cline-any cline-yes">32x</span>
|
|
592
|
+
<span class="cline-any cline-yes">32x</span>
|
|
593
|
+
<span class="cline-any cline-yes">32x</span>
|
|
594
|
+
<span class="cline-any cline-yes">32x</span>
|
|
595
|
+
<span class="cline-any cline-yes">32x</span>
|
|
596
|
+
<span class="cline-any cline-yes">2x</span>
|
|
597
|
+
<span class="cline-any cline-no"> </span>
|
|
598
|
+
<span class="cline-any cline-no"> </span>
|
|
599
|
+
<span class="cline-any cline-yes">2x</span>
|
|
600
|
+
<span class="cline-any cline-yes">2x</span>
|
|
601
|
+
<span class="cline-any cline-yes">2x</span>
|
|
602
|
+
<span class="cline-any cline-yes">2x</span>
|
|
603
|
+
<span class="cline-any cline-yes">2x</span>
|
|
604
|
+
<span class="cline-any cline-yes">30x</span>
|
|
605
|
+
<span class="cline-any cline-yes">30x</span>
|
|
606
|
+
<span class="cline-any cline-yes">32x</span>
|
|
607
|
+
<span class="cline-any cline-yes">3x</span>
|
|
608
|
+
<span class="cline-any cline-yes">3x</span>
|
|
609
|
+
<span class="cline-any cline-yes">3x</span>
|
|
610
|
+
<span class="cline-any cline-yes">3x</span>
|
|
611
|
+
<span class="cline-any cline-yes">3x</span>
|
|
612
|
+
<span class="cline-any cline-no"> </span>
|
|
613
|
+
<span class="cline-any cline-no"> </span>
|
|
614
|
+
<span class="cline-any cline-yes">3x</span>
|
|
615
|
+
<span class="cline-any cline-yes">3x</span>
|
|
616
|
+
<span class="cline-any cline-yes">3x</span>
|
|
617
|
+
<span class="cline-any cline-yes">3x</span>
|
|
618
|
+
<span class="cline-any cline-yes">3x</span>
|
|
619
|
+
<span class="cline-any cline-yes">1x</span>
|
|
620
|
+
<span class="cline-any cline-yes">1x</span>
|
|
621
|
+
<span class="cline-any cline-yes">3x</span>
|
|
622
|
+
<span class="cline-any cline-yes">3x</span>
|
|
623
|
+
<span class="cline-any cline-yes">3x</span>
|
|
624
|
+
<span class="cline-any cline-yes">3x</span>
|
|
625
|
+
<span class="cline-any cline-yes">3x</span>
|
|
626
|
+
<span class="cline-any cline-yes">3x</span>
|
|
627
|
+
<span class="cline-any cline-yes">3x</span>
|
|
628
|
+
<span class="cline-any cline-yes">3x</span>
|
|
629
|
+
<span class="cline-any cline-yes">3x</span>
|
|
630
|
+
<span class="cline-any cline-yes">3x</span>
|
|
631
|
+
<span class="cline-any cline-yes">3x</span>
|
|
632
|
+
<span class="cline-any cline-yes">3x</span>
|
|
633
|
+
<span class="cline-any cline-yes">3x</span>
|
|
634
|
+
<span class="cline-any cline-yes">32x</span>
|
|
635
|
+
<span class="cline-any cline-yes">27x</span>
|
|
636
|
+
<span class="cline-any cline-yes">27x</span>
|
|
637
|
+
<span class="cline-any cline-yes">27x</span>
|
|
638
|
+
<span class="cline-any cline-yes">27x</span>
|
|
639
|
+
<span class="cline-any cline-yes">27x</span>
|
|
640
|
+
<span class="cline-any cline-yes">31x</span>
|
|
641
|
+
<span class="cline-any cline-yes">4x</span>
|
|
642
|
+
<span class="cline-any cline-yes">4x</span>
|
|
643
|
+
<span class="cline-any cline-yes">27x</span>
|
|
644
|
+
<span class="cline-any cline-yes">27x</span>
|
|
645
|
+
<span class="cline-any cline-yes">27x</span>
|
|
646
|
+
<span class="cline-any cline-yes">27x</span>
|
|
647
|
+
<span class="cline-any cline-yes">27x</span>
|
|
648
|
+
<span class="cline-any cline-yes">27x</span>
|
|
649
|
+
<span class="cline-any cline-yes">27x</span>
|
|
650
|
+
<span class="cline-any cline-yes">27x</span>
|
|
651
|
+
<span class="cline-any cline-yes">24x</span>
|
|
652
|
+
<span class="cline-any cline-yes">30x</span>
|
|
653
|
+
<span class="cline-any cline-yes">3x</span>
|
|
654
|
+
<span class="cline-any cline-yes">3x</span>
|
|
655
|
+
<span class="cline-any cline-yes">24x</span>
|
|
656
|
+
<span class="cline-any cline-yes">24x</span>
|
|
657
|
+
<span class="cline-any cline-yes">24x</span>
|
|
658
|
+
<span class="cline-any cline-yes">24x</span>
|
|
659
|
+
<span class="cline-any cline-yes">24x</span>
|
|
660
|
+
<span class="cline-any cline-yes">26x</span>
|
|
661
|
+
<span class="cline-any cline-yes">2x</span>
|
|
662
|
+
<span class="cline-any cline-yes">1x</span>
|
|
663
|
+
<span class="cline-any cline-yes">1x</span>
|
|
664
|
+
<span class="cline-any cline-yes">2x</span>
|
|
665
|
+
<span class="cline-any cline-yes">2x</span>
|
|
666
|
+
<span class="cline-any cline-yes">2x</span>
|
|
667
|
+
<span class="cline-any cline-yes">26x</span>
|
|
668
|
+
<span class="cline-any cline-yes">24x</span>
|
|
669
|
+
<span class="cline-any cline-yes">24x</span>
|
|
670
|
+
<span class="cline-any cline-yes">24x</span>
|
|
671
|
+
<span class="cline-any cline-yes">24x</span>
|
|
672
|
+
<span class="cline-any cline-yes">24x</span>
|
|
673
|
+
<span class="cline-any cline-yes">24x</span>
|
|
674
|
+
<span class="cline-any cline-yes">28x</span>
|
|
675
|
+
<span class="cline-any cline-yes">3x</span>
|
|
676
|
+
<span class="cline-any cline-yes">3x</span>
|
|
677
|
+
<span class="cline-any cline-yes">4x</span>
|
|
678
|
+
<span class="cline-any cline-yes">1x</span>
|
|
679
|
+
<span class="cline-any cline-yes">1x</span>
|
|
680
|
+
<span class="cline-any cline-yes">4x</span>
|
|
681
|
+
<span class="cline-any cline-yes">3x</span>
|
|
682
|
+
<span class="cline-any cline-yes">3x</span>
|
|
683
|
+
<span class="cline-any cline-yes">3x</span>
|
|
684
|
+
<span class="cline-any cline-yes">3x</span>
|
|
685
|
+
<span class="cline-any cline-yes">3x</span>
|
|
686
|
+
<span class="cline-any cline-yes">3x</span>
|
|
687
|
+
<span class="cline-any cline-yes">3x</span>
|
|
688
|
+
<span class="cline-any cline-yes">3x</span>
|
|
689
|
+
<span class="cline-any cline-yes">3x</span>
|
|
690
|
+
<span class="cline-any cline-yes">32x</span>
|
|
691
|
+
<span class="cline-any cline-yes">6x</span>
|
|
692
|
+
<span class="cline-any cline-yes">6x</span>
|
|
693
|
+
<span class="cline-any cline-yes">6x</span>
|
|
694
|
+
<span class="cline-any cline-yes">6x</span>
|
|
695
|
+
<span class="cline-any cline-yes">6x</span>
|
|
696
|
+
<span class="cline-any cline-yes">1x</span>
|
|
697
|
+
<span class="cline-any cline-yes">1x</span>
|
|
698
|
+
<span class="cline-any cline-yes">1x</span>
|
|
699
|
+
<span class="cline-any cline-yes">1x</span>
|
|
700
|
+
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import MemoryCache from './provider/memory';
|
|
701
|
+
|
|
702
|
+
export type asyncFunction = () => Promise<any> | (() => any);
|
|
703
|
+
export type GorgonHookKey =
|
|
704
|
+
| 'settings'
|
|
705
|
+
| 'addProvider'
|
|
706
|
+
| 'put'
|
|
707
|
+
| 'clear'
|
|
708
|
+
| 'clearAll'
|
|
709
|
+
| 'overwrite'
|
|
710
|
+
| 'get'
|
|
711
|
+
| 'valueError';
|
|
712
|
+
export type GorgonHook = (key: GorgonHookKey, input?: any, output?: any) => void;
|
|
713
|
+
export type GorgonSettings = {
|
|
714
|
+
debug: boolean;
|
|
715
|
+
defaultProvider: string;
|
|
716
|
+
retry: number;
|
|
717
|
+
};
|
|
718
|
+
export type GorgonSettingsInput = {
|
|
719
|
+
debug?: boolean;
|
|
720
|
+
defaultProvider?: string;
|
|
721
|
+
retry?: number;
|
|
722
|
+
};
|
|
723
|
+
export type GorgonPolicy = {
|
|
724
|
+
expiry: number | Date | false;
|
|
725
|
+
provider: string;
|
|
726
|
+
};
|
|
727
|
+
export type GorgonPolicyInput = GorgonPolicy | number | Date;
|
|
728
|
+
export type GorgonPolicySanitized = {
|
|
729
|
+
expiry: number | false;
|
|
730
|
+
provider: string;
|
|
731
|
+
};
|
|
732
|
+
type GorgonCurrentTaskItem = Array<{
|
|
733
|
+
res?: any;
|
|
734
|
+
rej?: any;
|
|
735
|
+
queued: Date;
|
|
736
|
+
}>;
|
|
737
|
+
export interface IGorgonCacheProvider {
|
|
738
|
+
init: () => Promise<void>;
|
|
739
|
+
get: (key: string) => Promise<any>;
|
|
740
|
+
set: <R>(key: string, value: R, policy: GorgonPolicySanitized) => Promise<R>;
|
|
741
|
+
clear: (key?: string) => Promise<boolean>;
|
|
742
|
+
keys: () => Promise<string[]>;
|
|
743
|
+
}
|
|
744
|
+
|
|
745
|
+
const Gorgon = (() => {
|
|
746
|
+
const currentTasks = {} as { [key: string]: GorgonCurrentTaskItem };
|
|
747
|
+
const hOP = currentTasks.hasOwnProperty;
|
|
748
|
+
|
|
749
|
+
const settings = {
|
|
750
|
+
debug: false,
|
|
751
|
+
defaultProvider: 'memory',
|
|
752
|
+
retry: 5000,
|
|
753
|
+
} as GorgonSettings;
|
|
754
|
+
|
|
755
|
+
const policyMaker = function (incPolicy?: GorgonPolicyInput) {
|
|
756
|
+
const outPolicy = {
|
|
757
|
+
expiry: false,
|
|
758
|
+
provider: settings.defaultProvider,
|
|
759
|
+
} as GorgonPolicySanitized;
|
|
760
|
+
|
|
761
|
+
// Blank policy, false, or no policy. lets store forever
|
|
762
|
+
if (!incPolicy) {
|
|
763
|
+
return outPolicy;
|
|
764
|
+
}
|
|
765
|
+
|
|
766
|
+
// Type is a full policy object
|
|
767
|
+
if (incPolicy instanceof Date) {
|
|
768
|
+
var d = new Date();
|
|
769
|
+
|
|
770
|
+
outPolicy.expiry = Math.ceil((incPolicy.getTime() - d.getTime()) / 1000);
|
|
771
|
+
} else if (typeof incPolicy === 'object' && incPolicy.expiry) {
|
|
772
|
+
if (incPolicy.expiry instanceof Date) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
773
|
+
<span class="cstat-no" title="statement not covered" > outPolicy.expiry = Math.ceil((incPolicy.expiry.getTime() - d.getTime()) / 1000);</span>
|
|
774
|
+
} else {
|
|
775
|
+
outPolicy.expiry = incPolicy.expiry;
|
|
776
|
+
}
|
|
777
|
+
outPolicy.provider = incPolicy.<span class="branch-0 cbranch-no" title="branch not covered" >provider || outPolicy.provider;</span>
|
|
778
|
+
} else if (typeof incPolicy === 'object') {
|
|
779
|
+
outPolicy.provider = incPolicy.<span class="branch-0 cbranch-no" title="branch not covered" >provider || outPolicy.provider;</span>
|
|
780
|
+
} else if (typeof incPolicy === 'number') {
|
|
781
|
+
outPolicy.expiry = incPolicy;
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
// Number is too small, negative or not a number
|
|
785
|
+
outPolicy.expiry = outPolicy.expiry && outPolicy.expiry > 0 ? outPolicy.expiry : false;
|
|
786
|
+
|
|
787
|
+
return outPolicy;
|
|
788
|
+
};
|
|
789
|
+
|
|
790
|
+
const gorgonCore = {
|
|
791
|
+
// Providers available for use
|
|
792
|
+
providers: {} as { [key: string]: IGorgonCacheProvider },
|
|
793
|
+
|
|
794
|
+
// Hooks
|
|
795
|
+
hooks: {} as { [key: string]: Array<GorgonHook> },
|
|
796
|
+
|
|
797
|
+
_callHooks: (key: GorgonHookKey, input?: any, output?: any) => {
|
|
798
|
+
if (hOP.call(gorgonCore.hooks, key)) {
|
|
799
|
+
for (var i in gorgonCore.hooks[key]) {
|
|
800
|
+
if (typeof gorgonCore.hooks[key][i] === 'function') {
|
|
801
|
+
try {
|
|
802
|
+
gorgonCore.hooks[key][i](key, input, output);
|
|
803
|
+
} catch (e) {
|
|
804
|
+
console.error('[Gorgon] Hook error for hook: ' + key, e);
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
}
|
|
808
|
+
}
|
|
809
|
+
},
|
|
810
|
+
|
|
811
|
+
// Allows for settings on the gorgon cache
|
|
812
|
+
settings: (newSettings?: GorgonSettingsInput) => {
|
|
813
|
+
if (!newSettings) {
|
|
814
|
+
return settings;
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
Object.assign(settings, newSettings); // only overwrite ones sent in; keep others at existing
|
|
818
|
+
|
|
819
|
+
gorgonCore._callHooks('settings', newSettings, settings);
|
|
820
|
+
|
|
821
|
+
return settings;
|
|
822
|
+
},
|
|
823
|
+
|
|
824
|
+
// add a hook or array of hooks
|
|
825
|
+
addHook: (key: GorgonHookKey, hook: GorgonHook | Array<GorgonHook>) => {
|
|
826
|
+
if (!hOP.call(gorgonCore.hooks, key)) {
|
|
827
|
+
gorgonCore.hooks[key] = [];
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
if (Array.isArray(hook)) {
|
|
831
|
+
gorgonCore.hooks[key] = gorgonCore.hooks[key].concat(hook);
|
|
832
|
+
} else {
|
|
833
|
+
gorgonCore.hooks[key].push(hook);
|
|
834
|
+
}
|
|
835
|
+
},
|
|
836
|
+
|
|
837
|
+
// Add a provider
|
|
838
|
+
addProvider: (name: string, provider: IGorgonCacheProvider) => {
|
|
839
|
+
provider.init(); // Trigger for provider to clear any old cache items or any other cleanup
|
|
840
|
+
gorgonCore.providers[name] = provider;
|
|
841
|
+
|
|
842
|
+
gorgonCore._callHooks('addProvider', { name, provider });
|
|
843
|
+
},
|
|
844
|
+
|
|
845
|
+
// Place an item into the cache
|
|
846
|
+
put: async <R>(key: string, value: R, policy?: GorgonPolicyInput): Promise<R> => {
|
|
847
|
+
policy = policyMaker(policy);
|
|
848
|
+
var prov = gorgonCore.providers[policy.provider];
|
|
849
|
+
|
|
850
|
+
gorgonCore._callHooks('put', { key, value, policy }, value);
|
|
851
|
+
|
|
852
|
+
return prov.set(key, value, policyMaker(policy));
|
|
853
|
+
},
|
|
854
|
+
|
|
855
|
+
// Clear one or all items in the cache
|
|
856
|
+
clear: async (key: string, provider?: string) => {
|
|
857
|
+
var prov = gorgonCore.providers[provider || settings.defaultProvider];
|
|
858
|
+
|
|
859
|
+
gorgonCore._callHooks('clear', { key, provider });
|
|
860
|
+
|
|
861
|
+
// Clear a wildcard search of objects
|
|
862
|
+
if (key && key.indexOf('*') > -1) {
|
|
863
|
+
return prov.keys().then(function (keys) {
|
|
864
|
+
var cacheMatchKeys = keys.filter(function (str) {
|
|
865
|
+
return new RegExp('^' + key.split('*').join('.*') + '$').test(str);
|
|
866
|
+
});
|
|
867
|
+
|
|
868
|
+
var clearPromises = cacheMatchKeys.map(prov.clear);
|
|
869
|
+
// Incase someone somehow used a wildcard in their cached key (don't do this)
|
|
870
|
+
|
|
871
|
+
clearPromises.push(prov.clear(key));
|
|
872
|
+
return Promise.all(clearPromises);
|
|
873
|
+
});
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
// Not a special clear
|
|
877
|
+
return prov.clear(key);
|
|
878
|
+
},
|
|
879
|
+
|
|
880
|
+
// Clear all keys/values in the cache
|
|
881
|
+
clearAll: async (provider?: string) => {
|
|
882
|
+
var prov = gorgonCore.providers[provider || settings.defaultProvider];
|
|
883
|
+
|
|
884
|
+
gorgonCore._callHooks('clearAll', { provider });
|
|
885
|
+
|
|
886
|
+
return prov.clear();
|
|
887
|
+
},
|
|
888
|
+
|
|
889
|
+
// Allows you to instantly overwite a cache object
|
|
890
|
+
overwrite: async (key: string, asyncFunc: asyncFunction, policy?: GorgonPolicyInput) => {
|
|
891
|
+
try {
|
|
892
|
+
const resolvedData = await asyncFunc();
|
|
893
|
+
|
|
894
|
+
const val = await gorgonCore.put(key, resolvedData, policyMaker(policy));
|
|
895
|
+
|
|
896
|
+
gorgonCore._callHooks('overwrite', { key, asyncFunc, policy }, val);
|
|
897
|
+
|
|
898
|
+
return val;
|
|
899
|
+
<span class="branch-0 cbranch-no" title="branch not covered" > } catch (e) {</span>
|
|
900
|
+
<span class="cstat-no" title="statement not covered" > throw e;</span>
|
|
901
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
902
|
+
},
|
|
903
|
+
|
|
904
|
+
// Allows you to get from the cache or pull from the promise
|
|
905
|
+
get: async <R>(key: string, asyncFunc: () => R, policy?: GorgonPolicyInput): Promise<R> => {
|
|
906
|
+
policy = policyMaker(policy);
|
|
907
|
+
const prov = gorgonCore.providers[policy.provider];
|
|
908
|
+
|
|
909
|
+
const currentVal = await prov.get(key); // Most providers will only lookup by key and return false on not found
|
|
910
|
+
|
|
911
|
+
// If we have a current value sent it out; cache hit!
|
|
912
|
+
if (currentVal !== undefined) {
|
|
913
|
+
if (settings.debug) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
914
|
+
<span class="cstat-no" title="statement not covered" > console.info('[Gorgon] Cache hit for key: ' + key, currentVal);</span>
|
|
915
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
916
|
+
|
|
917
|
+
gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: true, queued: false }, currentVal);
|
|
918
|
+
|
|
919
|
+
return currentVal;
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
// Are we currently already running this cache item?
|
|
923
|
+
if (hOP.call(currentTasks, key) && Array.isArray(currentTasks[key]) && currentTasks[key].length > 0) {
|
|
924
|
+
// Add to the current task, but ignore if any items is below retry anyway threshold
|
|
925
|
+
var oldQueue = false;
|
|
926
|
+
|
|
927
|
+
for (var i in currentTasks[key]) {
|
|
928
|
+
if (currentTasks[key][i].queued < new Date(Date.now() - settings.retry)) <span class="branch-0 cbranch-no" title="branch not covered" >{</span>
|
|
929
|
+
<span class="cstat-no" title="statement not covered" > oldQueue = true;</span>
|
|
930
|
+
<span class="cstat-no" title="statement not covered" > }</span>
|
|
931
|
+
}
|
|
932
|
+
|
|
933
|
+
// Add to the current queue
|
|
934
|
+
if (!oldQueue) {
|
|
935
|
+
if (settings.debug) {
|
|
936
|
+
console.info('[Gorgon] Cache miss, in progress, adding to current queue for key: ' + key);
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
var concurent = new Promise(function (resolve: (value: R) => void, reject) {
|
|
940
|
+
currentTasks[key].push({
|
|
941
|
+
res: resolve,
|
|
942
|
+
rej: reject,
|
|
943
|
+
queued: new Date(),
|
|
944
|
+
});
|
|
945
|
+
});
|
|
946
|
+
|
|
947
|
+
gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: false, queued: true }, concurent);
|
|
948
|
+
|
|
949
|
+
return concurent;
|
|
950
|
+
}
|
|
951
|
+
} else {
|
|
952
|
+
// Add current task to list, this is the first one so the primary
|
|
953
|
+
currentTasks[key] = [{ queued: new Date() }];
|
|
954
|
+
}
|
|
955
|
+
|
|
956
|
+
try {
|
|
957
|
+
if (settings.debug) {
|
|
958
|
+
console.info('[Gorgon] Cache miss, resolving item for: ' + key);
|
|
959
|
+
}
|
|
960
|
+
|
|
961
|
+
// This is the primary item
|
|
962
|
+
const resolver = asyncFunc();
|
|
963
|
+
|
|
964
|
+
gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: false, queued: false }, resolver);
|
|
965
|
+
|
|
966
|
+
// wait for it to finish then push it out
|
|
967
|
+
const resolvedData = await resolver;
|
|
968
|
+
|
|
969
|
+
if (settings.debug) {
|
|
970
|
+
console.info('[Gorgon] Cache resolved, resolved item for: ' + key, resolvedData);
|
|
971
|
+
}
|
|
972
|
+
|
|
973
|
+
const val = await gorgonCore.put(key, resolvedData, policyMaker(policy));
|
|
974
|
+
|
|
975
|
+
if (hOP.call(currentTasks, key)) {
|
|
976
|
+
for (var i in currentTasks[key]) {
|
|
977
|
+
if (currentTasks[key][i].res) {
|
|
978
|
+
if (settings.debug) {
|
|
979
|
+
console.info('[Gorgon] Cache queue resolved for: ' + key, resolvedData);
|
|
980
|
+
}
|
|
981
|
+
|
|
982
|
+
currentTasks[key][i].res(val);
|
|
983
|
+
}
|
|
984
|
+
}
|
|
985
|
+
|
|
986
|
+
currentTasks[key] = [];
|
|
987
|
+
delete currentTasks[key];
|
|
988
|
+
}
|
|
989
|
+
|
|
990
|
+
return val;
|
|
991
|
+
} catch (e) {
|
|
992
|
+
if (hOP.call(currentTasks, key)) {
|
|
993
|
+
for (var i in currentTasks[key]) {
|
|
994
|
+
if (currentTasks[key][i].rej) {
|
|
995
|
+
currentTasks[key][i].rej(e);
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
|
|
999
|
+
gorgonCore._callHooks('valueError', { key, asyncFunc, policy, cacheHit: false, queued: false }, e);
|
|
1000
|
+
|
|
1001
|
+
currentTasks[key] = [];
|
|
1002
|
+
delete currentTasks[key];
|
|
1003
|
+
}
|
|
1004
|
+
|
|
1005
|
+
throw e;
|
|
1006
|
+
}
|
|
1007
|
+
},
|
|
1008
|
+
};
|
|
1009
|
+
|
|
1010
|
+
gorgonCore.addProvider('memory', MemoryCache()); // Default provider, light weight and simple
|
|
1011
|
+
|
|
1012
|
+
return gorgonCore;
|
|
1013
|
+
})();
|
|
1014
|
+
|
|
1015
|
+
export { MemoryCache };
|
|
1016
|
+
export default Gorgon;
|
|
1017
|
+
</pre></td></tr></table></pre>
|
|
1018
|
+
|
|
1019
|
+
<div class='push'></div><!-- for sticky footer -->
|
|
1020
|
+
</div><!-- /wrapper -->
|
|
1021
|
+
<div class='footer quiet pad2 space-top1 center small'>
|
|
1022
|
+
Code coverage generated by
|
|
1023
|
+
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1024
|
+
at 2023-09-06T23:42:25.059Z
|
|
1025
|
+
</div>
|
|
1026
|
+
<script src="../prettify.js"></script>
|
|
1027
|
+
<script>
|
|
1028
|
+
window.onload = function () {
|
|
1029
|
+
prettyPrint();
|
|
1030
|
+
};
|
|
1031
|
+
</script>
|
|
1032
|
+
<script src="../sorter.js"></script>
|
|
1033
|
+
<script src="../block-navigation.js"></script>
|
|
1034
|
+
</body>
|
|
1035
|
+
</html>
|
|
1036
|
+
|