@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.
@@ -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">&nbsp;</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">&nbsp;</span>
584
+ <span class="cline-any cline-no">&nbsp;</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">&nbsp;</span>
598
+ <span class="cline-any cline-no">&nbsp;</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">&nbsp;</span>
613
+ <span class="cline-any cline-no">&nbsp;</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">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import MemoryCache from './provider/memory';
701
+ &nbsp;
702
+ export type asyncFunction = () =&gt; Promise&lt;any&gt; | (() =&gt; 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) =&gt; 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&lt;{
733
+ res?: any;
734
+ rej?: any;
735
+ queued: Date;
736
+ }&gt;;
737
+ export interface IGorgonCacheProvider {
738
+ init: () =&gt; Promise&lt;void&gt;;
739
+ get: (key: string) =&gt; Promise&lt;any&gt;;
740
+ set: &lt;R&gt;(key: string, value: R, policy: GorgonPolicySanitized) =&gt; Promise&lt;R&gt;;
741
+ clear: (key?: string) =&gt; Promise&lt;boolean&gt;;
742
+ keys: () =&gt; Promise&lt;string[]&gt;;
743
+ }
744
+ &nbsp;
745
+ const Gorgon = (() =&gt; {
746
+ const currentTasks = {} as { [key: string]: GorgonCurrentTaskItem };
747
+ const hOP = currentTasks.hasOwnProperty;
748
+ &nbsp;
749
+ const settings = {
750
+ debug: false,
751
+ defaultProvider: 'memory',
752
+ retry: 5000,
753
+ } as GorgonSettings;
754
+ &nbsp;
755
+ const policyMaker = function (incPolicy?: GorgonPolicyInput) {
756
+ const outPolicy = {
757
+ expiry: false,
758
+ provider: settings.defaultProvider,
759
+ } as GorgonPolicySanitized;
760
+ &nbsp;
761
+ // Blank policy, false, or no policy. lets store forever
762
+ if (!incPolicy) {
763
+ return outPolicy;
764
+ }
765
+ &nbsp;
766
+ // Type is a full policy object
767
+ if (incPolicy instanceof Date) {
768
+ var d = new Date();
769
+ &nbsp;
770
+ outPolicy.expiry = Math.ceil((incPolicy.getTime() - d.getTime()) / 1000);
771
+ } else if (typeof incPolicy === 'object' &amp;&amp; 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
+ &nbsp;
784
+ // Number is too small, negative or not a number
785
+ outPolicy.expiry = outPolicy.expiry &amp;&amp; outPolicy.expiry &gt; 0 ? outPolicy.expiry : false;
786
+ &nbsp;
787
+ return outPolicy;
788
+ };
789
+ &nbsp;
790
+ const gorgonCore = {
791
+ // Providers available for use
792
+ providers: {} as { [key: string]: IGorgonCacheProvider },
793
+ &nbsp;
794
+ // Hooks
795
+ hooks: {} as { [key: string]: Array&lt;GorgonHook&gt; },
796
+ &nbsp;
797
+ _callHooks: (key: GorgonHookKey, input?: any, output?: any) =&gt; {
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
+ &nbsp;
811
+ // Allows for settings on the gorgon cache
812
+ settings: (newSettings?: GorgonSettingsInput) =&gt; {
813
+ if (!newSettings) {
814
+ return settings;
815
+ }
816
+ &nbsp;
817
+ Object.assign(settings, newSettings); // only overwrite ones sent in; keep others at existing
818
+ &nbsp;
819
+ gorgonCore._callHooks('settings', newSettings, settings);
820
+ &nbsp;
821
+ return settings;
822
+ },
823
+ &nbsp;
824
+ // add a hook or array of hooks
825
+ addHook: (key: GorgonHookKey, hook: GorgonHook | Array&lt;GorgonHook&gt;) =&gt; {
826
+ if (!hOP.call(gorgonCore.hooks, key)) {
827
+ gorgonCore.hooks[key] = [];
828
+ }
829
+ &nbsp;
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
+ &nbsp;
837
+ // Add a provider
838
+ addProvider: (name: string, provider: IGorgonCacheProvider) =&gt; {
839
+ provider.init(); // Trigger for provider to clear any old cache items or any other cleanup
840
+ gorgonCore.providers[name] = provider;
841
+ &nbsp;
842
+ gorgonCore._callHooks('addProvider', { name, provider });
843
+ },
844
+ &nbsp;
845
+ // Place an item into the cache
846
+ put: async &lt;R&gt;(key: string, value: R, policy?: GorgonPolicyInput): Promise&lt;R&gt; =&gt; {
847
+ policy = policyMaker(policy);
848
+ var prov = gorgonCore.providers[policy.provider];
849
+ &nbsp;
850
+ gorgonCore._callHooks('put', { key, value, policy }, value);
851
+ &nbsp;
852
+ return prov.set(key, value, policyMaker(policy));
853
+ },
854
+ &nbsp;
855
+ // Clear one or all items in the cache
856
+ clear: async (key: string, provider?: string) =&gt; {
857
+ var prov = gorgonCore.providers[provider || settings.defaultProvider];
858
+ &nbsp;
859
+ gorgonCore._callHooks('clear', { key, provider });
860
+ &nbsp;
861
+ // Clear a wildcard search of objects
862
+ if (key &amp;&amp; key.indexOf('*') &gt; -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
+ &nbsp;
868
+ var clearPromises = cacheMatchKeys.map(prov.clear);
869
+ // Incase someone somehow used a wildcard in their cached key (don't do this)
870
+ &nbsp;
871
+ clearPromises.push(prov.clear(key));
872
+ return Promise.all(clearPromises);
873
+ });
874
+ }
875
+ &nbsp;
876
+ // Not a special clear
877
+ return prov.clear(key);
878
+ },
879
+ &nbsp;
880
+ // Clear all keys/values in the cache
881
+ clearAll: async (provider?: string) =&gt; {
882
+ var prov = gorgonCore.providers[provider || settings.defaultProvider];
883
+ &nbsp;
884
+ gorgonCore._callHooks('clearAll', { provider });
885
+ &nbsp;
886
+ return prov.clear();
887
+ },
888
+ &nbsp;
889
+ // Allows you to instantly overwite a cache object
890
+ overwrite: async (key: string, asyncFunc: asyncFunction, policy?: GorgonPolicyInput) =&gt; {
891
+ try {
892
+ const resolvedData = await asyncFunc();
893
+ &nbsp;
894
+ const val = await gorgonCore.put(key, resolvedData, policyMaker(policy));
895
+ &nbsp;
896
+ gorgonCore._callHooks('overwrite', { key, asyncFunc, policy }, val);
897
+ &nbsp;
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
+ &nbsp;
904
+ // Allows you to get from the cache or pull from the promise
905
+ get: async &lt;R&gt;(key: string, asyncFunc: () =&gt; R, policy?: GorgonPolicyInput): Promise&lt;R&gt; =&gt; {
906
+ policy = policyMaker(policy);
907
+ const prov = gorgonCore.providers[policy.provider];
908
+ &nbsp;
909
+ const currentVal = await prov.get(key); // Most providers will only lookup by key and return false on not found
910
+ &nbsp;
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
+ &nbsp;
917
+ gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: true, queued: false }, currentVal);
918
+ &nbsp;
919
+ return currentVal;
920
+ }
921
+ &nbsp;
922
+ // Are we currently already running this cache item?
923
+ if (hOP.call(currentTasks, key) &amp;&amp; Array.isArray(currentTasks[key]) &amp;&amp; currentTasks[key].length &gt; 0) {
924
+ // Add to the current task, but ignore if any items is below retry anyway threshold
925
+ var oldQueue = false;
926
+ &nbsp;
927
+ for (var i in currentTasks[key]) {
928
+ if (currentTasks[key][i].queued &lt; 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
+ &nbsp;
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
+ &nbsp;
939
+ var concurent = new Promise(function (resolve: (value: R) =&gt; void, reject) {
940
+ currentTasks[key].push({
941
+ res: resolve,
942
+ rej: reject,
943
+ queued: new Date(),
944
+ });
945
+ });
946
+ &nbsp;
947
+ gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: false, queued: true }, concurent);
948
+ &nbsp;
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
+ &nbsp;
956
+ try {
957
+ if (settings.debug) {
958
+ console.info('[Gorgon] Cache miss, resolving item for: ' + key);
959
+ }
960
+ &nbsp;
961
+ // This is the primary item
962
+ const resolver = asyncFunc();
963
+ &nbsp;
964
+ gorgonCore._callHooks('get', { key, asyncFunc, policy, cacheHit: false, queued: false }, resolver);
965
+ &nbsp;
966
+ // wait for it to finish then push it out
967
+ const resolvedData = await resolver;
968
+ &nbsp;
969
+ if (settings.debug) {
970
+ console.info('[Gorgon] Cache resolved, resolved item for: ' + key, resolvedData);
971
+ }
972
+ &nbsp;
973
+ const val = await gorgonCore.put(key, resolvedData, policyMaker(policy));
974
+ &nbsp;
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
+ &nbsp;
982
+ currentTasks[key][i].res(val);
983
+ }
984
+ }
985
+ &nbsp;
986
+ currentTasks[key] = [];
987
+ delete currentTasks[key];
988
+ }
989
+ &nbsp;
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
+ &nbsp;
999
+ gorgonCore._callHooks('valueError', { key, asyncFunc, policy, cacheHit: false, queued: false }, e);
1000
+ &nbsp;
1001
+ currentTasks[key] = [];
1002
+ delete currentTasks[key];
1003
+ }
1004
+ &nbsp;
1005
+ throw e;
1006
+ }
1007
+ },
1008
+ };
1009
+ &nbsp;
1010
+ gorgonCore.addProvider('memory', MemoryCache()); // Default provider, light weight and simple
1011
+ &nbsp;
1012
+ return gorgonCore;
1013
+ })();
1014
+ &nbsp;
1015
+ export { MemoryCache };
1016
+ export default Gorgon;
1017
+ &nbsp;</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
+