Replace CDN React/ReactDOM/Babel with local libs; remove Babel and inline scripts Build Tailwind locally, add safelist; switch to assets/tailwind.css Self-host Font Awesome and Inter (CSS + woff2); remove external font CDNs Implement strict CSP (no unsafe-inline/eval; scripts/styles/fonts from self) Extract inline handlers; move PWA scripts to external files Add local QR code generation (qrcode lib) and remove api.qrserver.com Improve SessionTypeSelector visual selection (highlighted background and ring) Keep PWA working with service worker and offline assets Refs: CSP hardening, offline-first, no external dependencies
950 lines
38 KiB
HTML
950 lines
38 KiB
HTML
|
|
<!doctype html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<title>Code coverage report for parser.js</title>
|
|
<meta charset="utf-8" />
|
|
<link rel="stylesheet" href="prettify.css" />
|
|
<link rel="stylesheet" href="base.css" />
|
|
<link rel="shortcut icon" type="image/x-icon" href="favicon.png" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<style type='text/css'>
|
|
.coverage-summary .sorter {
|
|
background-image: url(sort-arrow-sprite.png);
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<div class='wrapper'>
|
|
<div class='pad1'>
|
|
<h1><a href="index.html">All files</a> parser.js</h1>
|
|
<div class='clearfix'>
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">90.57% </span>
|
|
<span class="quiet">Statements</span>
|
|
<span class='fraction'>144/159</span>
|
|
</div>
|
|
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">85.45% </span>
|
|
<span class="quiet">Branches</span>
|
|
<span class='fraction'>47/55</span>
|
|
</div>
|
|
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">100% </span>
|
|
<span class="quiet">Functions</span>
|
|
<span class='fraction'>20/20</span>
|
|
</div>
|
|
|
|
|
|
<div class='fl pad1y space-right2'>
|
|
<span class="strong">90.32% </span>
|
|
<span class="quiet">Lines</span>
|
|
<span class='fraction'>140/155</span>
|
|
</div>
|
|
|
|
|
|
</div>
|
|
<p class="quiet">
|
|
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.
|
|
</p>
|
|
</div>
|
|
<div class='status-line high'></div>
|
|
<pre><table class="coverage">
|
|
<tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
|
|
<a name='L2'></a><a href='#L2'>2</a>
|
|
<a name='L3'></a><a href='#L3'>3</a>
|
|
<a name='L4'></a><a href='#L4'>4</a>
|
|
<a name='L5'></a><a href='#L5'>5</a>
|
|
<a name='L6'></a><a href='#L6'>6</a>
|
|
<a name='L7'></a><a href='#L7'>7</a>
|
|
<a name='L8'></a><a href='#L8'>8</a>
|
|
<a name='L9'></a><a href='#L9'>9</a>
|
|
<a name='L10'></a><a href='#L10'>10</a>
|
|
<a name='L11'></a><a href='#L11'>11</a>
|
|
<a name='L12'></a><a href='#L12'>12</a>
|
|
<a name='L13'></a><a href='#L13'>13</a>
|
|
<a name='L14'></a><a href='#L14'>14</a>
|
|
<a name='L15'></a><a href='#L15'>15</a>
|
|
<a name='L16'></a><a href='#L16'>16</a>
|
|
<a name='L17'></a><a href='#L17'>17</a>
|
|
<a name='L18'></a><a href='#L18'>18</a>
|
|
<a name='L19'></a><a href='#L19'>19</a>
|
|
<a name='L20'></a><a href='#L20'>20</a>
|
|
<a name='L21'></a><a href='#L21'>21</a>
|
|
<a name='L22'></a><a href='#L22'>22</a>
|
|
<a name='L23'></a><a href='#L23'>23</a>
|
|
<a name='L24'></a><a href='#L24'>24</a>
|
|
<a name='L25'></a><a href='#L25'>25</a>
|
|
<a name='L26'></a><a href='#L26'>26</a>
|
|
<a name='L27'></a><a href='#L27'>27</a>
|
|
<a name='L28'></a><a href='#L28'>28</a>
|
|
<a name='L29'></a><a href='#L29'>29</a>
|
|
<a name='L30'></a><a href='#L30'>30</a>
|
|
<a name='L31'></a><a href='#L31'>31</a>
|
|
<a name='L32'></a><a href='#L32'>32</a>
|
|
<a name='L33'></a><a href='#L33'>33</a>
|
|
<a name='L34'></a><a href='#L34'>34</a>
|
|
<a name='L35'></a><a href='#L35'>35</a>
|
|
<a name='L36'></a><a href='#L36'>36</a>
|
|
<a name='L37'></a><a href='#L37'>37</a>
|
|
<a name='L38'></a><a href='#L38'>38</a>
|
|
<a name='L39'></a><a href='#L39'>39</a>
|
|
<a name='L40'></a><a href='#L40'>40</a>
|
|
<a name='L41'></a><a href='#L41'>41</a>
|
|
<a name='L42'></a><a href='#L42'>42</a>
|
|
<a name='L43'></a><a href='#L43'>43</a>
|
|
<a name='L44'></a><a href='#L44'>44</a>
|
|
<a name='L45'></a><a href='#L45'>45</a>
|
|
<a name='L46'></a><a href='#L46'>46</a>
|
|
<a name='L47'></a><a href='#L47'>47</a>
|
|
<a name='L48'></a><a href='#L48'>48</a>
|
|
<a name='L49'></a><a href='#L49'>49</a>
|
|
<a name='L50'></a><a href='#L50'>50</a>
|
|
<a name='L51'></a><a href='#L51'>51</a>
|
|
<a name='L52'></a><a href='#L52'>52</a>
|
|
<a name='L53'></a><a href='#L53'>53</a>
|
|
<a name='L54'></a><a href='#L54'>54</a>
|
|
<a name='L55'></a><a href='#L55'>55</a>
|
|
<a name='L56'></a><a href='#L56'>56</a>
|
|
<a name='L57'></a><a href='#L57'>57</a>
|
|
<a name='L58'></a><a href='#L58'>58</a>
|
|
<a name='L59'></a><a href='#L59'>59</a>
|
|
<a name='L60'></a><a href='#L60'>60</a>
|
|
<a name='L61'></a><a href='#L61'>61</a>
|
|
<a name='L62'></a><a href='#L62'>62</a>
|
|
<a name='L63'></a><a href='#L63'>63</a>
|
|
<a name='L64'></a><a href='#L64'>64</a>
|
|
<a name='L65'></a><a href='#L65'>65</a>
|
|
<a name='L66'></a><a href='#L66'>66</a>
|
|
<a name='L67'></a><a href='#L67'>67</a>
|
|
<a name='L68'></a><a href='#L68'>68</a>
|
|
<a name='L69'></a><a href='#L69'>69</a>
|
|
<a name='L70'></a><a href='#L70'>70</a>
|
|
<a name='L71'></a><a href='#L71'>71</a>
|
|
<a name='L72'></a><a href='#L72'>72</a>
|
|
<a name='L73'></a><a href='#L73'>73</a>
|
|
<a name='L74'></a><a href='#L74'>74</a>
|
|
<a name='L75'></a><a href='#L75'>75</a>
|
|
<a name='L76'></a><a href='#L76'>76</a>
|
|
<a name='L77'></a><a href='#L77'>77</a>
|
|
<a name='L78'></a><a href='#L78'>78</a>
|
|
<a name='L79'></a><a href='#L79'>79</a>
|
|
<a name='L80'></a><a href='#L80'>80</a>
|
|
<a name='L81'></a><a href='#L81'>81</a>
|
|
<a name='L82'></a><a href='#L82'>82</a>
|
|
<a name='L83'></a><a href='#L83'>83</a>
|
|
<a name='L84'></a><a href='#L84'>84</a>
|
|
<a name='L85'></a><a href='#L85'>85</a>
|
|
<a name='L86'></a><a href='#L86'>86</a>
|
|
<a name='L87'></a><a href='#L87'>87</a>
|
|
<a name='L88'></a><a href='#L88'>88</a>
|
|
<a name='L89'></a><a href='#L89'>89</a>
|
|
<a name='L90'></a><a href='#L90'>90</a>
|
|
<a name='L91'></a><a href='#L91'>91</a>
|
|
<a name='L92'></a><a href='#L92'>92</a>
|
|
<a name='L93'></a><a href='#L93'>93</a>
|
|
<a name='L94'></a><a href='#L94'>94</a>
|
|
<a name='L95'></a><a href='#L95'>95</a>
|
|
<a name='L96'></a><a href='#L96'>96</a>
|
|
<a name='L97'></a><a href='#L97'>97</a>
|
|
<a name='L98'></a><a href='#L98'>98</a>
|
|
<a name='L99'></a><a href='#L99'>99</a>
|
|
<a name='L100'></a><a href='#L100'>100</a>
|
|
<a name='L101'></a><a href='#L101'>101</a>
|
|
<a name='L102'></a><a href='#L102'>102</a>
|
|
<a name='L103'></a><a href='#L103'>103</a>
|
|
<a name='L104'></a><a href='#L104'>104</a>
|
|
<a name='L105'></a><a href='#L105'>105</a>
|
|
<a name='L106'></a><a href='#L106'>106</a>
|
|
<a name='L107'></a><a href='#L107'>107</a>
|
|
<a name='L108'></a><a href='#L108'>108</a>
|
|
<a name='L109'></a><a href='#L109'>109</a>
|
|
<a name='L110'></a><a href='#L110'>110</a>
|
|
<a name='L111'></a><a href='#L111'>111</a>
|
|
<a name='L112'></a><a href='#L112'>112</a>
|
|
<a name='L113'></a><a href='#L113'>113</a>
|
|
<a name='L114'></a><a href='#L114'>114</a>
|
|
<a name='L115'></a><a href='#L115'>115</a>
|
|
<a name='L116'></a><a href='#L116'>116</a>
|
|
<a name='L117'></a><a href='#L117'>117</a>
|
|
<a name='L118'></a><a href='#L118'>118</a>
|
|
<a name='L119'></a><a href='#L119'>119</a>
|
|
<a name='L120'></a><a href='#L120'>120</a>
|
|
<a name='L121'></a><a href='#L121'>121</a>
|
|
<a name='L122'></a><a href='#L122'>122</a>
|
|
<a name='L123'></a><a href='#L123'>123</a>
|
|
<a name='L124'></a><a href='#L124'>124</a>
|
|
<a name='L125'></a><a href='#L125'>125</a>
|
|
<a name='L126'></a><a href='#L126'>126</a>
|
|
<a name='L127'></a><a href='#L127'>127</a>
|
|
<a name='L128'></a><a href='#L128'>128</a>
|
|
<a name='L129'></a><a href='#L129'>129</a>
|
|
<a name='L130'></a><a href='#L130'>130</a>
|
|
<a name='L131'></a><a href='#L131'>131</a>
|
|
<a name='L132'></a><a href='#L132'>132</a>
|
|
<a name='L133'></a><a href='#L133'>133</a>
|
|
<a name='L134'></a><a href='#L134'>134</a>
|
|
<a name='L135'></a><a href='#L135'>135</a>
|
|
<a name='L136'></a><a href='#L136'>136</a>
|
|
<a name='L137'></a><a href='#L137'>137</a>
|
|
<a name='L138'></a><a href='#L138'>138</a>
|
|
<a name='L139'></a><a href='#L139'>139</a>
|
|
<a name='L140'></a><a href='#L140'>140</a>
|
|
<a name='L141'></a><a href='#L141'>141</a>
|
|
<a name='L142'></a><a href='#L142'>142</a>
|
|
<a name='L143'></a><a href='#L143'>143</a>
|
|
<a name='L144'></a><a href='#L144'>144</a>
|
|
<a name='L145'></a><a href='#L145'>145</a>
|
|
<a name='L146'></a><a href='#L146'>146</a>
|
|
<a name='L147'></a><a href='#L147'>147</a>
|
|
<a name='L148'></a><a href='#L148'>148</a>
|
|
<a name='L149'></a><a href='#L149'>149</a>
|
|
<a name='L150'></a><a href='#L150'>150</a>
|
|
<a name='L151'></a><a href='#L151'>151</a>
|
|
<a name='L152'></a><a href='#L152'>152</a>
|
|
<a name='L153'></a><a href='#L153'>153</a>
|
|
<a name='L154'></a><a href='#L154'>154</a>
|
|
<a name='L155'></a><a href='#L155'>155</a>
|
|
<a name='L156'></a><a href='#L156'>156</a>
|
|
<a name='L157'></a><a href='#L157'>157</a>
|
|
<a name='L158'></a><a href='#L158'>158</a>
|
|
<a name='L159'></a><a href='#L159'>159</a>
|
|
<a name='L160'></a><a href='#L160'>160</a>
|
|
<a name='L161'></a><a href='#L161'>161</a>
|
|
<a name='L162'></a><a href='#L162'>162</a>
|
|
<a name='L163'></a><a href='#L163'>163</a>
|
|
<a name='L164'></a><a href='#L164'>164</a>
|
|
<a name='L165'></a><a href='#L165'>165</a>
|
|
<a name='L166'></a><a href='#L166'>166</a>
|
|
<a name='L167'></a><a href='#L167'>167</a>
|
|
<a name='L168'></a><a href='#L168'>168</a>
|
|
<a name='L169'></a><a href='#L169'>169</a>
|
|
<a name='L170'></a><a href='#L170'>170</a>
|
|
<a name='L171'></a><a href='#L171'>171</a>
|
|
<a name='L172'></a><a href='#L172'>172</a>
|
|
<a name='L173'></a><a href='#L173'>173</a>
|
|
<a name='L174'></a><a href='#L174'>174</a>
|
|
<a name='L175'></a><a href='#L175'>175</a>
|
|
<a name='L176'></a><a href='#L176'>176</a>
|
|
<a name='L177'></a><a href='#L177'>177</a>
|
|
<a name='L178'></a><a href='#L178'>178</a>
|
|
<a name='L179'></a><a href='#L179'>179</a>
|
|
<a name='L180'></a><a href='#L180'>180</a>
|
|
<a name='L181'></a><a href='#L181'>181</a>
|
|
<a name='L182'></a><a href='#L182'>182</a>
|
|
<a name='L183'></a><a href='#L183'>183</a>
|
|
<a name='L184'></a><a href='#L184'>184</a>
|
|
<a name='L185'></a><a href='#L185'>185</a>
|
|
<a name='L186'></a><a href='#L186'>186</a>
|
|
<a name='L187'></a><a href='#L187'>187</a>
|
|
<a name='L188'></a><a href='#L188'>188</a>
|
|
<a name='L189'></a><a href='#L189'>189</a>
|
|
<a name='L190'></a><a href='#L190'>190</a>
|
|
<a name='L191'></a><a href='#L191'>191</a>
|
|
<a name='L192'></a><a href='#L192'>192</a>
|
|
<a name='L193'></a><a href='#L193'>193</a>
|
|
<a name='L194'></a><a href='#L194'>194</a>
|
|
<a name='L195'></a><a href='#L195'>195</a>
|
|
<a name='L196'></a><a href='#L196'>196</a>
|
|
<a name='L197'></a><a href='#L197'>197</a>
|
|
<a name='L198'></a><a href='#L198'>198</a>
|
|
<a name='L199'></a><a href='#L199'>199</a>
|
|
<a name='L200'></a><a href='#L200'>200</a>
|
|
<a name='L201'></a><a href='#L201'>201</a>
|
|
<a name='L202'></a><a href='#L202'>202</a>
|
|
<a name='L203'></a><a href='#L203'>203</a>
|
|
<a name='L204'></a><a href='#L204'>204</a>
|
|
<a name='L205'></a><a href='#L205'>205</a>
|
|
<a name='L206'></a><a href='#L206'>206</a>
|
|
<a name='L207'></a><a href='#L207'>207</a>
|
|
<a name='L208'></a><a href='#L208'>208</a>
|
|
<a name='L209'></a><a href='#L209'>209</a>
|
|
<a name='L210'></a><a href='#L210'>210</a>
|
|
<a name='L211'></a><a href='#L211'>211</a>
|
|
<a name='L212'></a><a href='#L212'>212</a>
|
|
<a name='L213'></a><a href='#L213'>213</a>
|
|
<a name='L214'></a><a href='#L214'>214</a>
|
|
<a name='L215'></a><a href='#L215'>215</a>
|
|
<a name='L216'></a><a href='#L216'>216</a>
|
|
<a name='L217'></a><a href='#L217'>217</a>
|
|
<a name='L218'></a><a href='#L218'>218</a>
|
|
<a name='L219'></a><a href='#L219'>219</a>
|
|
<a name='L220'></a><a href='#L220'>220</a>
|
|
<a name='L221'></a><a href='#L221'>221</a>
|
|
<a name='L222'></a><a href='#L222'>222</a>
|
|
<a name='L223'></a><a href='#L223'>223</a>
|
|
<a name='L224'></a><a href='#L224'>224</a>
|
|
<a name='L225'></a><a href='#L225'>225</a>
|
|
<a name='L226'></a><a href='#L226'>226</a>
|
|
<a name='L227'></a><a href='#L227'>227</a>
|
|
<a name='L228'></a><a href='#L228'>228</a>
|
|
<a name='L229'></a><a href='#L229'>229</a>
|
|
<a name='L230'></a><a href='#L230'>230</a>
|
|
<a name='L231'></a><a href='#L231'>231</a>
|
|
<a name='L232'></a><a href='#L232'>232</a>
|
|
<a name='L233'></a><a href='#L233'>233</a>
|
|
<a name='L234'></a><a href='#L234'>234</a>
|
|
<a name='L235'></a><a href='#L235'>235</a>
|
|
<a name='L236'></a><a href='#L236'>236</a>
|
|
<a name='L237'></a><a href='#L237'>237</a>
|
|
<a name='L238'></a><a href='#L238'>238</a>
|
|
<a name='L239'></a><a href='#L239'>239</a>
|
|
<a name='L240'></a><a href='#L240'>240</a>
|
|
<a name='L241'></a><a href='#L241'>241</a>
|
|
<a name='L242'></a><a href='#L242'>242</a>
|
|
<a name='L243'></a><a href='#L243'>243</a>
|
|
<a name='L244'></a><a href='#L244'>244</a>
|
|
<a name='L245'></a><a href='#L245'>245</a>
|
|
<a name='L246'></a><a href='#L246'>246</a>
|
|
<a name='L247'></a><a href='#L247'>247</a>
|
|
<a name='L248'></a><a href='#L248'>248</a>
|
|
<a name='L249'></a><a href='#L249'>249</a>
|
|
<a name='L250'></a><a href='#L250'>250</a>
|
|
<a name='L251'></a><a href='#L251'>251</a>
|
|
<a name='L252'></a><a href='#L252'>252</a>
|
|
<a name='L253'></a><a href='#L253'>253</a>
|
|
<a name='L254'></a><a href='#L254'>254</a>
|
|
<a name='L255'></a><a href='#L255'>255</a>
|
|
<a name='L256'></a><a href='#L256'>256</a>
|
|
<a name='L257'></a><a href='#L257'>257</a>
|
|
<a name='L258'></a><a href='#L258'>258</a>
|
|
<a name='L259'></a><a href='#L259'>259</a>
|
|
<a name='L260'></a><a href='#L260'>260</a>
|
|
<a name='L261'></a><a href='#L261'>261</a>
|
|
<a name='L262'></a><a href='#L262'>262</a>
|
|
<a name='L263'></a><a href='#L263'>263</a>
|
|
<a name='L264'></a><a href='#L264'>264</a>
|
|
<a name='L265'></a><a href='#L265'>265</a>
|
|
<a name='L266'></a><a href='#L266'>266</a>
|
|
<a name='L267'></a><a href='#L267'>267</a>
|
|
<a name='L268'></a><a href='#L268'>268</a>
|
|
<a name='L269'></a><a href='#L269'>269</a>
|
|
<a name='L270'></a><a href='#L270'>270</a>
|
|
<a name='L271'></a><a href='#L271'>271</a>
|
|
<a name='L272'></a><a href='#L272'>272</a>
|
|
<a name='L273'></a><a href='#L273'>273</a>
|
|
<a name='L274'></a><a href='#L274'>274</a>
|
|
<a name='L275'></a><a href='#L275'>275</a>
|
|
<a name='L276'></a><a href='#L276'>276</a>
|
|
<a name='L277'></a><a href='#L277'>277</a>
|
|
<a name='L278'></a><a href='#L278'>278</a>
|
|
<a name='L279'></a><a href='#L279'>279</a>
|
|
<a name='L280'></a><a href='#L280'>280</a>
|
|
<a name='L281'></a><a href='#L281'>281</a>
|
|
<a name='L282'></a><a href='#L282'>282</a>
|
|
<a name='L283'></a><a href='#L283'>283</a>
|
|
<a name='L284'></a><a href='#L284'>284</a>
|
|
<a name='L285'></a><a href='#L285'>285</a>
|
|
<a name='L286'></a><a href='#L286'>286</a>
|
|
<a name='L287'></a><a href='#L287'>287</a>
|
|
<a name='L288'></a><a href='#L288'>288</a>
|
|
<a name='L289'></a><a href='#L289'>289</a>
|
|
<a name='L290'></a><a href='#L290'>290</a>
|
|
<a name='L291'></a><a href='#L291'>291</a></td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">365x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">365x</span>
|
|
<span class="cline-any cline-yes">2867x</span>
|
|
<span class="cline-any cline-yes">13x</span>
|
|
<span class="cline-any cline-yes">13x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">352x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2461x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2461x</span>
|
|
<span class="cline-any cline-yes">2461x</span>
|
|
<span class="cline-any cline-yes">2461x</span>
|
|
<span class="cline-any cline-yes">9844x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2461x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2461x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2461x</span>
|
|
<span class="cline-any cline-yes">2461x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2461x</span>
|
|
<span class="cline-any cline-yes">2205x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">256x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">256x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">256x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2195x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">2195x</span>
|
|
<span class="cline-any cline-yes">2195x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2195x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">2191x</span>
|
|
<span class="cline-any cline-yes">1855x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">351x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">351x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">351x</span>
|
|
<span class="cline-any cline-yes">351x</span>
|
|
<span class="cline-any cline-yes">351x</span>
|
|
<span class="cline-any cline-yes">351x</span>
|
|
<span class="cline-any cline-yes">351x</span>
|
|
<span class="cline-any cline-yes">351x</span>
|
|
<span class="cline-any cline-yes">351x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">351x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">345x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-yes">4x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">341x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">341x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">341x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">341x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">341x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">341x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">341x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">341x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">135x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">135x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">135x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">135x</span>
|
|
<span class="cline-any cline-yes">7350x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">135x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">135x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">27x</span>
|
|
<span class="cline-any cline-yes">27x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">27x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">27x</span>
|
|
<span class="cline-any cline-yes">15x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">15x</span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">15x</span>
|
|
<span class="cline-any cline-yes">529x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">15x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">27x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">27x</span>
|
|
<span class="cline-any cline-yes">6x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">27x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">296x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">296x</span>
|
|
<span class="cline-any cline-yes">296x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">296x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1233x</span>
|
|
<span class="cline-any cline-yes">337x</span>
|
|
<span class="cline-any cline-yes">337x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1233x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">1233x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1233x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-no"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1233x</span>
|
|
<span class="cline-any cline-yes">1233x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1233x</span>
|
|
<span class="cline-any cline-yes">173x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1060x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">336x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">1x</span>
|
|
<span class="cline-any cline-yes">336x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">336x</span>
|
|
<span class="cline-any cline-yes">336x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-yes">336x</span>
|
|
<span class="cline-any cline-yes">173x</span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span>
|
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">"use strict";
|
|
|
|
let constants = require("./constants");
|
|
let CrcCalculator = require("./crc");
|
|
|
|
let Parser = (module.exports = function (options, dependencies) {
|
|
this._options = options;
|
|
options.checkCRC = options.checkCRC !== false;
|
|
|
|
this._hasIHDR = false;
|
|
this._hasIEND = false;
|
|
this._emittedHeadersFinished = false;
|
|
|
|
// input flags/metadata
|
|
this._palette = [];
|
|
this._colorType = 0;
|
|
|
|
this._chunks = {};
|
|
this._chunks[constants.TYPE_IHDR] = this._handleIHDR.bind(this);
|
|
this._chunks[constants.TYPE_IEND] = this._handleIEND.bind(this);
|
|
this._chunks[constants.TYPE_IDAT] = this._handleIDAT.bind(this);
|
|
this._chunks[constants.TYPE_PLTE] = this._handlePLTE.bind(this);
|
|
this._chunks[constants.TYPE_tRNS] = this._handleTRNS.bind(this);
|
|
this._chunks[constants.TYPE_gAMA] = this._handleGAMA.bind(this);
|
|
|
|
this.read = dependencies.read;
|
|
this.error = dependencies.error;
|
|
this.metadata = dependencies.metadata;
|
|
this.gamma = dependencies.gamma;
|
|
this.transColor = dependencies.transColor;
|
|
this.palette = dependencies.palette;
|
|
this.parsed = dependencies.parsed;
|
|
this.inflateData = dependencies.inflateData;
|
|
this.finished = dependencies.finished;
|
|
this.simpleTransparency = dependencies.simpleTransparency;
|
|
this.headersFinished = dependencies.headersFinished || function () {};
|
|
});
|
|
|
|
Parser.prototype.start = function () {
|
|
this.read(constants.PNG_SIGNATURE.length, this._parseSignature.bind(this));
|
|
};
|
|
|
|
Parser.prototype._parseSignature = function (data) {
|
|
let signature = constants.PNG_SIGNATURE;
|
|
|
|
for (let i = 0; i < signature.length; i++) {
|
|
if (data[i] !== signature[i]) {
|
|
this.error(new Error("Invalid file signature"));
|
|
return;
|
|
}
|
|
}
|
|
this.read(8, this._parseChunkBegin.bind(this));
|
|
};
|
|
|
|
Parser.prototype._parseChunkBegin = function (data) {
|
|
// chunk content length
|
|
let length = data.readUInt32BE(0);
|
|
|
|
// chunk type
|
|
let type = data.readUInt32BE(4);
|
|
let name = "";
|
|
for (let i = 4; i < 8; i++) {
|
|
name += String.fromCharCode(data[i]);
|
|
}
|
|
|
|
//console.log('chunk ', name, length);
|
|
|
|
// chunk flags
|
|
let ancillary = Boolean(data[4] & 0x20); // or critical
|
|
// priv = Boolean(data[5] & 0x20), // or public
|
|
// safeToCopy = Boolean(data[7] & 0x20); // or unsafe
|
|
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (!this._hasIHDR && type !== constants.TYPE_IHDR) {
|
|
<span class="cstat-no" title="statement not covered" > this.error(new Error("Expected IHDR on beggining"));</span>
|
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
}
|
|
|
|
this._crc = new CrcCalculator();
|
|
this._crc.write(Buffer.from(name));
|
|
|
|
if (this._chunks[type]) {
|
|
return this._chunks[type](length);
|
|
}
|
|
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (!ancillary) {
|
|
<span class="cstat-no" title="statement not covered" > this.error(new Error("Unsupported critical chunk type " + name));</span>
|
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
}
|
|
|
|
this.read(length + 4, this._skipChunk.bind(this));
|
|
};
|
|
|
|
Parser.prototype._skipChunk = function (/*data*/) {
|
|
this.read(8, this._parseChunkBegin.bind(this));
|
|
};
|
|
|
|
Parser.prototype._handleChunkEnd = function () {
|
|
this.read(4, this._parseChunkEnd.bind(this));
|
|
};
|
|
|
|
Parser.prototype._parseChunkEnd = function (data) {
|
|
let fileCrc = data.readInt32BE(0);
|
|
let calcCrc = this._crc.crc32();
|
|
|
|
// check CRC
|
|
if (this._options.checkCRC && calcCrc !== fileCrc) {
|
|
this.error(new Error("Crc error - " + fileCrc + " - " + calcCrc));
|
|
return;
|
|
}
|
|
|
|
if (!this._hasIEND) {
|
|
this.read(8, this._parseChunkBegin.bind(this));
|
|
}
|
|
};
|
|
|
|
Parser.prototype._handleIHDR = function (length) {
|
|
this.read(length, this._parseIHDR.bind(this));
|
|
};
|
|
Parser.prototype._parseIHDR = function (data) {
|
|
this._crc.write(data);
|
|
|
|
let width = data.readUInt32BE(0);
|
|
let height = data.readUInt32BE(4);
|
|
let depth = data[8];
|
|
let colorType = data[9]; // bits: 1 palette, 2 color, 4 alpha
|
|
let compr = data[10];
|
|
let filter = data[11];
|
|
let interlace = data[12];
|
|
|
|
// console.log(' width', width, 'height', height,
|
|
// 'depth', depth, 'colorType', colorType,
|
|
// 'compr', compr, 'filter', filter, 'interlace', interlace
|
|
// );
|
|
|
|
if (
|
|
depth !== 8 &&
|
|
depth !== 4 &&
|
|
depth !== 2 &&
|
|
depth !== 1 &&
|
|
depth !== 16
|
|
) {
|
|
this.error(new Error("Unsupported bit depth " + depth));
|
|
return;
|
|
}
|
|
if (!(colorType in constants.COLORTYPE_TO_BPP_MAP)) {
|
|
this.error(new Error("Unsupported color type"));
|
|
return;
|
|
}
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (compr !== 0) {
|
|
<span class="cstat-no" title="statement not covered" > this.error(new Error("Unsupported compression method"));</span>
|
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
}
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (filter !== 0) {
|
|
<span class="cstat-no" title="statement not covered" > this.error(new Error("Unsupported filter method"));</span>
|
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
}
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (interlace !== 0 && interlace !== 1) {
|
|
<span class="cstat-no" title="statement not covered" > this.error(new Error("Unsupported interlace method"));</span>
|
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
}
|
|
|
|
this._colorType = colorType;
|
|
|
|
let bpp = constants.COLORTYPE_TO_BPP_MAP[this._colorType];
|
|
|
|
this._hasIHDR = true;
|
|
|
|
this.metadata({
|
|
width: width,
|
|
height: height,
|
|
depth: depth,
|
|
interlace: Boolean(interlace),
|
|
palette: Boolean(colorType & constants.COLORTYPE_PALETTE),
|
|
color: Boolean(colorType & constants.COLORTYPE_COLOR),
|
|
alpha: Boolean(colorType & constants.COLORTYPE_ALPHA),
|
|
bpp: bpp,
|
|
colorType: colorType,
|
|
});
|
|
|
|
this._handleChunkEnd();
|
|
};
|
|
|
|
Parser.prototype._handlePLTE = function (length) {
|
|
this.read(length, this._parsePLTE.bind(this));
|
|
};
|
|
Parser.prototype._parsePLTE = function (data) {
|
|
this._crc.write(data);
|
|
|
|
let entries = Math.floor(data.length / 3);
|
|
// console.log('Palette:', entries);
|
|
|
|
for (let i = 0; i < entries; i++) {
|
|
this._palette.push([data[i * 3], data[i * 3 + 1], data[i * 3 + 2], 0xff]);
|
|
}
|
|
|
|
this.palette(this._palette);
|
|
|
|
this._handleChunkEnd();
|
|
};
|
|
|
|
Parser.prototype._handleTRNS = function (length) {
|
|
this.simpleTransparency();
|
|
this.read(length, this._parseTRNS.bind(this));
|
|
};
|
|
Parser.prototype._parseTRNS = function (data) {
|
|
this._crc.write(data);
|
|
|
|
// palette
|
|
if (this._colorType === constants.COLORTYPE_PALETTE_COLOR) {
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (this._palette.length === 0) {
|
|
<span class="cstat-no" title="statement not covered" > this.error(new Error("Transparency chunk must be after palette"));</span>
|
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
}
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (data.length > this._palette.length) {
|
|
<span class="cstat-no" title="statement not covered" > this.error(new Error("More transparent colors than palette size"));</span>
|
|
<span class="cstat-no" title="statement not covered" > return;</span>
|
|
}
|
|
for (let i = 0; i < data.length; i++) {
|
|
this._palette[i][3] = data[i];
|
|
}
|
|
this.palette(this._palette);
|
|
}
|
|
|
|
// for colorType 0 (grayscale) and 2 (rgb)
|
|
// there might be one gray/color defined as transparent
|
|
if (this._colorType === constants.COLORTYPE_GRAYSCALE) {
|
|
// grey, 2 bytes
|
|
this.transColor([data.readUInt16BE(0)]);
|
|
}
|
|
if (this._colorType === constants.COLORTYPE_COLOR) {
|
|
this.transColor([
|
|
data.readUInt16BE(0),
|
|
data.readUInt16BE(2),
|
|
data.readUInt16BE(4),
|
|
]);
|
|
}
|
|
|
|
this._handleChunkEnd();
|
|
};
|
|
|
|
Parser.prototype._handleGAMA = function (length) {
|
|
this.read(length, this._parseGAMA.bind(this));
|
|
};
|
|
Parser.prototype._parseGAMA = function (data) {
|
|
this._crc.write(data);
|
|
this.gamma(data.readUInt32BE(0) / constants.GAMMA_DIVISION);
|
|
|
|
this._handleChunkEnd();
|
|
};
|
|
|
|
Parser.prototype._handleIDAT = function (length) {
|
|
if (!this._emittedHeadersFinished) {
|
|
this._emittedHeadersFinished = true;
|
|
this.headersFinished();
|
|
}
|
|
this.read(-length, this._parseIDAT.bind(this, length));
|
|
};
|
|
Parser.prototype._parseIDAT = function (length, data) {
|
|
this._crc.write(data);
|
|
|
|
<span class="missing-if-branch" title="if path not taken" >I</span>if (
|
|
this._colorType === constants.COLORTYPE_PALETTE_COLOR &&
|
|
this._palette.length === 0
|
|
) {
|
|
<span class="cstat-no" title="statement not covered" > throw new Error("Expected palette not found");</span>
|
|
}
|
|
|
|
this.inflateData(data);
|
|
let leftOverLength = length - data.length;
|
|
|
|
if (leftOverLength > 0) {
|
|
this._handleIDAT(leftOverLength);
|
|
} else {
|
|
this._handleChunkEnd();
|
|
}
|
|
};
|
|
|
|
Parser.prototype._handleIEND = function (length) {
|
|
this.read(length, this._parseIEND.bind(this));
|
|
};
|
|
Parser.prototype._parseIEND = function (data) {
|
|
this._crc.write(data);
|
|
|
|
this._hasIEND = true;
|
|
this._handleChunkEnd();
|
|
|
|
if (this.finished) {
|
|
this.finished();
|
|
}
|
|
};
|
|
</pre></td></tr></table></pre>
|
|
|
|
<div class='push'></div><!-- for sticky footer -->
|
|
</div><!-- /wrapper -->
|
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
Code coverage generated by
|
|
<a href="https://istanbul.js.org/" target="_blank">istanbul</a>
|
|
at Fri Apr 10 2020 13:53:16 GMT+0200 (Central European Summer Time)
|
|
</div>
|
|
</div>
|
|
<script src="prettify.js"></script>
|
|
<script>
|
|
window.onload = function () {
|
|
prettyPrint();
|
|
};
|
|
</script>
|
|
<script src="sorter.js"></script>
|
|
<script src="block-navigation.js"></script>
|
|
</body>
|
|
</html>
|
|
|