~hacktivista/cursos-web

5793e9a2140adbadf4161d914c176ad6266c03be — Felix Freeman 2 months ago 629105c
mtg-counter: Finish Jest tests + e2e with Playwright
M ejemplos/mtg-counter/coverage/clover.xml => ejemplos/mtg-counter/coverage/clover.xml +33 -23
@@ 1,26 1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<coverage generated="1630458676303" clover="3.2.0">
  <project timestamp="1630458676303" name="All files">
    <metrics statements="17" coveredstatements="15" conditionals="0" coveredconditionals="0" methods="4" coveredmethods="2" elements="21" coveredelements="17" complexity="0" loc="17" ncloc="17" packages="1" files="1" classes="1"/>
    <file name="mtgPlayer.js" path="/home/me/web/ejemplos/mtg-counter/src/mtgPlayer.js">
      <metrics statements="17" coveredstatements="15" conditionals="0" coveredconditionals="0" methods="4" coveredmethods="2"/>
      <line num="3" count="1" type="stmt"/>
      <line num="5" count="1" type="stmt"/>
      <line num="8" count="1" type="stmt"/>
      <line num="9" count="1" type="stmt"/>
      <line num="12" count="1" type="stmt"/>
      <line num="13" count="1" type="stmt"/>
      <line num="14" count="1" type="stmt"/>
      <line num="15" count="1" type="stmt"/>
      <line num="16" count="1" type="stmt"/>
      <line num="17" count="1" type="stmt"/>
      <line num="19" count="1" type="stmt"/>
      <line num="20" count="0" type="stmt"/>
      <line num="22" count="1" type="stmt"/>
      <line num="23" count="0" type="stmt"/>
      <line num="28" count="1" type="stmt"/>
      <line num="29" count="1" type="stmt"/>
      <line num="33" count="1" type="stmt"/>
    </file>
<coverage generated="1630981194100" clover="3.2.0">
  <project timestamp="1630981194100" name="All files">
    <metrics statements="18" coveredstatements="2" conditionals="0" coveredconditionals="0" methods="6" coveredmethods="1" elements="24" coveredelements="3" complexity="0" loc="18" ncloc="18" packages="2" files="2" classes="2"/>
    <package name="src">
      <metrics statements="17" coveredstatements="1" conditionals="0" coveredconditionals="0" methods="4" coveredmethods="0"/>
      <file name="mtgPlayer.js" path="/home/me/web/ejemplos/mtg-counter/src/mtgPlayer.js">
        <metrics statements="17" coveredstatements="1" conditionals="0" coveredconditionals="0" methods="4" coveredmethods="0"/>
        <line num="3" count="0" type="stmt"/>
        <line num="5" count="0" type="stmt"/>
        <line num="8" count="0" type="stmt"/>
        <line num="9" count="0" type="stmt"/>
        <line num="12" count="0" type="stmt"/>
        <line num="13" count="0" type="stmt"/>
        <line num="14" count="0" type="stmt"/>
        <line num="15" count="0" type="stmt"/>
        <line num="16" count="0" type="stmt"/>
        <line num="17" count="0" type="stmt"/>
        <line num="19" count="0" type="stmt"/>
        <line num="20" count="0" type="stmt"/>
        <line num="22" count="0" type="stmt"/>
        <line num="23" count="0" type="stmt"/>
        <line num="28" count="0" type="stmt"/>
        <line num="29" count="0" type="stmt"/>
        <line num="33" count="1" type="stmt"/>
      </file>
    </package>
    <package name="tests.integration">
      <metrics statements="1" coveredstatements="1" conditionals="0" coveredconditionals="0" methods="2" coveredmethods="1"/>
      <file name="helpers.js" path="/home/me/web/ejemplos/mtg-counter/tests/integration/helpers.js">
        <metrics statements="1" coveredstatements="1" conditionals="0" coveredconditionals="0" methods="2" coveredmethods="1"/>
        <line num="2" count="1" type="stmt"/>
      </file>
    </package>
  </project>
</coverage>

M ejemplos/mtg-counter/coverage/coverage-final.json => ejemplos/mtg-counter/coverage/coverage-final.json +2 -1
@@ 1,2 1,3 @@
{"/home/me/web/ejemplos/mtg-counter/src/mtgPlayer.js": {"path":"/home/me/web/ejemplos/mtg-counter/src/mtgPlayer.js","statementMap":{"0":{"start":{"line":3,"column":2},"end":{"line":3,"column":36}},"1":{"start":{"line":5,"column":2},"end":{"line":5,"column":16}},"2":{"start":{"line":8,"column":2},"end":{"line":8,"column":47}},"3":{"start":{"line":9,"column":2},"end":{"line":9,"column":56}},"4":{"start":{"line":12,"column":2},"end":{"line":12,"column":55}},"5":{"start":{"line":13,"column":2},"end":{"line":13,"column":38}},"6":{"start":{"line":14,"column":2},"end":{"line":14,"column":55}},"7":{"start":{"line":15,"column":2},"end":{"line":15,"column":38}},"8":{"start":{"line":16,"column":2},"end":{"line":16,"column":60}},"9":{"start":{"line":17,"column":2},"end":{"line":17,"column":64}},"10":{"start":{"line":19,"column":2},"end":{"line":21,"column":5}},"11":{"start":{"line":20,"column":3},"end":{"line":20,"column":41}},"12":{"start":{"line":22,"column":2},"end":{"line":24,"column":5}},"13":{"start":{"line":23,"column":3},"end":{"line":23,"column":41}},"14":{"start":{"line":28,"column":19},"end":{"line":28,"column":83}},"15":{"start":{"line":29,"column":2},"end":{"line":29,"column":40}},"16":{"start":{"line":33,"column":0},"end":{"line":33,"column":47}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":1},"end":{"line":2,"column":2}},"loc":{"start":{"line":2,"column":21},"end":{"line":25,"column":2}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":19,"column":43},"end":{"line":19,"column":44}},"loc":{"start":{"line":19,"column":49},"end":{"line":21,"column":3}},"line":19},"2":{"name":"(anonymous_2)","decl":{"start":{"line":22,"column":45},"end":{"line":22,"column":46}},"loc":{"start":{"line":22,"column":51},"end":{"line":24,"column":3}},"line":22},"3":{"name":"(anonymous_3)","decl":{"start":{"line":27,"column":1},"end":{"line":27,"column":2}},"loc":{"start":{"line":27,"column":10},"end":{"line":30,"column":2}},"line":27}},"branchMap":{},"s":{"0":1,"1":1,"2":1,"3":1,"4":1,"5":1,"6":1,"7":1,"8":1,"9":1,"10":1,"11":0,"12":1,"13":0,"14":1,"15":1,"16":1},"f":{"0":1,"1":0,"2":0,"3":1},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"54b5492a4c64b8a058aff3fa94b1a931d95166b4"}
{"/home/me/web/ejemplos/mtg-counter/src/mtgPlayer.js": {"path":"/home/me/web/ejemplos/mtg-counter/src/mtgPlayer.js","statementMap":{"0":{"start":{"line":3,"column":2},"end":{"line":3,"column":36}},"1":{"start":{"line":5,"column":2},"end":{"line":5,"column":16}},"2":{"start":{"line":8,"column":2},"end":{"line":8,"column":47}},"3":{"start":{"line":9,"column":2},"end":{"line":9,"column":56}},"4":{"start":{"line":12,"column":2},"end":{"line":12,"column":55}},"5":{"start":{"line":13,"column":2},"end":{"line":13,"column":38}},"6":{"start":{"line":14,"column":2},"end":{"line":14,"column":55}},"7":{"start":{"line":15,"column":2},"end":{"line":15,"column":38}},"8":{"start":{"line":16,"column":2},"end":{"line":16,"column":60}},"9":{"start":{"line":17,"column":2},"end":{"line":17,"column":64}},"10":{"start":{"line":19,"column":2},"end":{"line":21,"column":5}},"11":{"start":{"line":20,"column":3},"end":{"line":20,"column":41}},"12":{"start":{"line":22,"column":2},"end":{"line":24,"column":5}},"13":{"start":{"line":23,"column":3},"end":{"line":23,"column":41}},"14":{"start":{"line":28,"column":19},"end":{"line":28,"column":83}},"15":{"start":{"line":29,"column":2},"end":{"line":29,"column":40}},"16":{"start":{"line":33,"column":0},"end":{"line":33,"column":47}}},"fnMap":{"0":{"name":"(anonymous_0)","decl":{"start":{"line":2,"column":1},"end":{"line":2,"column":2}},"loc":{"start":{"line":2,"column":21},"end":{"line":25,"column":2}},"line":2},"1":{"name":"(anonymous_1)","decl":{"start":{"line":19,"column":43},"end":{"line":19,"column":44}},"loc":{"start":{"line":19,"column":49},"end":{"line":21,"column":3}},"line":19},"2":{"name":"(anonymous_2)","decl":{"start":{"line":22,"column":45},"end":{"line":22,"column":46}},"loc":{"start":{"line":22,"column":51},"end":{"line":24,"column":3}},"line":22},"3":{"name":"(anonymous_3)","decl":{"start":{"line":27,"column":1},"end":{"line":27,"column":2}},"loc":{"start":{"line":27,"column":10},"end":{"line":30,"column":2}},"line":27}},"branchMap":{},"s":{"0":0,"1":0,"2":0,"3":0,"4":0,"5":0,"6":0,"7":0,"8":0,"9":0,"10":0,"11":0,"12":0,"13":0,"14":0,"15":0,"16":1},"f":{"0":0,"1":0,"2":0,"3":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"54b5492a4c64b8a058aff3fa94b1a931d95166b4"}
,"/home/me/web/ejemplos/mtg-counter/tests/integration/helpers.js": {"path":"/home/me/web/ejemplos/mtg-counter/tests/integration/helpers.js","statementMap":{"0":{"start":{"line":2,"column":4},"end":{"line":2,"column":56}},"1":{"start":{"line":2,"column":39},"end":{"line":2,"column":54}}},"fnMap":{"0":{"name":"importHTML","decl":{"start":{"line":1,"column":15},"end":{"line":1,"column":25}},"loc":{"start":{"line":1,"column":31},"end":{"line":3,"column":1}},"line":1},"1":{"name":"(anonymous_1)","decl":{"start":{"line":2,"column":27},"end":{"line":2,"column":28}},"loc":{"start":{"line":2,"column":39},"end":{"line":2,"column":54}},"line":2}},"branchMap":{},"s":{"0":1,"1":0},"f":{"0":1,"1":0},"b":{},"_coverageSchema":"1a1c01bbd47fc00a2c39e90264f33305004495a9","hash":"1512cc6be5245a9fd4ffb5f76a2a3adbd8fedab9"}
}

M ejemplos/mtg-counter/coverage/lcov-report/index.html => ejemplos/mtg-counter/coverage/lcov-report/index.html +31 -16
@@ 23,9 23,9 @@
        <div class='clearfix'>
            
            <div class='fl pad1y space-right2'>
                <span class="strong">88.24% </span>
                <span class="strong">10.53% </span>
                <span class="quiet">Statements</span>
                <span class='fraction'>15/17</span>
                <span class='fraction'>2/19</span>
            </div>
        
            


@@ 37,16 37,16 @@
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">50% </span>
                <span class="strong">16.67% </span>
                <span class="quiet">Functions</span>
                <span class='fraction'>2/4</span>
                <span class='fraction'>1/6</span>
            </div>
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">88.24% </span>
                <span class="strong">11.11% </span>
                <span class="quiet">Lines</span>
                <span class='fraction'>15/17</span>
                <span class='fraction'>2/18</span>
            </div>
        
            


@@ 55,7 55,7 @@
            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>
    <div class='status-line low'></div>
    <div class="pad1">
<table class="coverage-summary">
<thead>


@@ 73,18 73,33 @@
</tr>
</thead>
<tbody><tr>
	<td class="file high" data-value="mtgPlayer.js"><a href="mtgPlayer.js.html">mtgPlayer.js</a></td>
	<td data-value="88.24" class="pic high">
	<div class="chart"><div class="cover-fill" style="width: 88%"></div><div class="cover-empty" style="width: 12%"></div></div>
	<td class="file low" data-value="src"><a href="src/index.html">src</a></td>
	<td data-value="5.88" class="pic low">
	<div class="chart"><div class="cover-fill" style="width: 5%"></div><div class="cover-empty" style="width: 95%"></div></div>
	</td>
	<td data-value="88.24" class="pct high">88.24%</td>
	<td data-value="17" class="abs high">15/17</td>
	<td data-value="5.88" class="pct low">5.88%</td>
	<td data-value="17" class="abs low">1/17</td>
	<td data-value="100" class="pct high">100%</td>
	<td data-value="0" class="abs high">0/0</td>
	<td data-value="0" class="pct low">0%</td>
	<td data-value="4" class="abs low">0/4</td>
	<td data-value="5.88" class="pct low">5.88%</td>
	<td data-value="17" class="abs low">1/17</td>
	</tr>

<tr>
	<td class="file medium" data-value="tests/integration"><a href="tests/integration/index.html">tests/integration</a></td>
	<td data-value="50" class="pic medium">
	<div class="chart"><div class="cover-fill" style="width: 50%"></div><div class="cover-empty" style="width: 50%"></div></div>
	</td>
	<td data-value="50" class="pct medium">50%</td>
	<td data-value="4" class="abs medium">2/4</td>
	<td data-value="88.24" class="pct high">88.24%</td>
	<td data-value="17" class="abs high">15/17</td>
	<td data-value="2" class="abs medium">1/2</td>
	<td data-value="100" class="pct high">100%</td>
	<td data-value="0" class="abs high">0/0</td>
	<td data-value="50" class="pct medium">50%</td>
	<td data-value="2" class="abs medium">1/2</td>
	<td data-value="100" class="pct high">100%</td>
	<td data-value="1" class="abs high">1/1</td>
	</tr>

</tbody>


@@ 95,7 110,7 @@
            <div class='footer quiet pad2 space-top1 center small'>
                Code coverage generated by
                <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
                at Tue Aug 31 2021 21:11:16 GMT-0400 (Chile Standard Time)
                at Mon Sep 06 2021 23:19:53 GMT-0300 (Chile Summer Time)
            </div>
        </div>
        <script src="prettify.js"></script>

M ejemplos/mtg-counter/coverage/lcov-report/mtgPlayer.js.html => ejemplos/mtg-counter/coverage/lcov-report/mtgPlayer.js.html +1 -1
@@ 163,7 163,7 @@ customElements.define('mtg-player', MtgPlayer);
            <div class='footer quiet pad2 space-top1 center small'>
                Code coverage generated by
                <a href="https://istanbul.js.org/" target="_blank">istanbul</a>
                at Tue Aug 31 2021 21:11:16 GMT-0400 (Chile Standard Time)
                at Thu Sep 02 2021 20:51:22 GMT-0400 (Chile Standard Time)
            </div>
        </div>
        <script src="prettify.js"></script>

A ejemplos/mtg-counter/coverage/lcov-report/src/index.html => ejemplos/mtg-counter/coverage/lcov-report/src/index.html +111 -0
@@ 0,0 1,111 @@

<!doctype html>
<html lang="en">

<head>
    <title>Code coverage report for src</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> src</h1>
        <div class='clearfix'>
            
            <div class='fl pad1y space-right2'>
                <span class="strong">5.88% </span>
                <span class="quiet">Statements</span>
                <span class='fraction'>1/17</span>
            </div>
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">100% </span>
                <span class="quiet">Branches</span>
                <span class='fraction'>0/0</span>
            </div>
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">0% </span>
                <span class="quiet">Functions</span>
                <span class='fraction'>0/4</span>
            </div>
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">5.88% </span>
                <span class="quiet">Lines</span>
                <span class='fraction'>1/17</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 low'></div>
    <div class="pad1">
<table class="coverage-summary">
<thead>
<tr>
   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
</tr>
</thead>
<tbody><tr>
	<td class="file low" data-value="mtgPlayer.js"><a href="mtgPlayer.js.html">mtgPlayer.js</a></td>
	<td data-value="5.88" class="pic low">
	<div class="chart"><div class="cover-fill" style="width: 5%"></div><div class="cover-empty" style="width: 95%"></div></div>
	</td>
	<td data-value="5.88" class="pct low">5.88%</td>
	<td data-value="17" class="abs low">1/17</td>
	<td data-value="100" class="pct high">100%</td>
	<td data-value="0" class="abs high">0/0</td>
	<td data-value="0" class="pct low">0%</td>
	<td data-value="4" class="abs low">0/4</td>
	<td data-value="5.88" class="pct low">5.88%</td>
	<td data-value="17" class="abs low">1/17</td>
	</tr>

</tbody>
</table>
</div>
                <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 Mon Sep 06 2021 23:19:53 GMT-0300 (Chile 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>
    
\ No newline at end of file

A ejemplos/mtg-counter/coverage/lcov-report/src/mtgPlayer.js.html => ejemplos/mtg-counter/coverage/lcov-report/src/mtgPlayer.js.html +179 -0
@@ 0,0 1,179 @@

<!doctype html>
<html lang="en">

<head>
    <title>Code coverage report for src/mtgPlayer.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> / <a href="index.html">src</a> mtgPlayer.js</h1>
        <div class='clearfix'>
            
            <div class='fl pad1y space-right2'>
                <span class="strong">5.88% </span>
                <span class="quiet">Statements</span>
                <span class='fraction'>1/17</span>
            </div>
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">100% </span>
                <span class="quiet">Branches</span>
                <span class='fraction'>0/0</span>
            </div>
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">0% </span>
                <span class="quiet">Functions</span>
                <span class='fraction'>0/4</span>
            </div>
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">5.88% </span>
                <span class="quiet">Lines</span>
                <span class='fraction'>1/17</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 low'></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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-no">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">class MtgPlayer extends HTMLElement {
<span class="fstat-no" title="function not covered" >	co</span>nnectedCallback() {
<span class="cstat-no" title="statement not covered" >		this.attachShadow({mode: 'open'});</span>
&nbsp;
<span class="cstat-no" title="statement not covered" >		this.render();</span>
&nbsp;
		// Properties from attributes.
<span class="cstat-no" title="statement not covered" >		this.name = this.getAttribute('player-name');</span>
<span class="cstat-no" title="statement not covered" >		this.life = Number(this.getAttribute('initial-life'));</span>
&nbsp;
		// Elements from template.
<span class="cstat-no" title="statement not covered" >		this.nameEl = this.shadowRoot.querySelector('#name');</span>
<span class="cstat-no" title="statement not covered" >		this.nameEl.textContent = this.name;</span>
<span class="cstat-no" title="statement not covered" >		this.lifeEl = this.shadowRoot.querySelector('#life');</span>
<span class="cstat-no" title="statement not covered" >		this.lifeEl.textContent = this.life;</span>
<span class="cstat-no" title="statement not covered" >		this.lifeUpBtn = this.shadowRoot.querySelector('#lifeUp');</span>
<span class="cstat-no" title="statement not covered" >		this.lifeDownBtn = this.shadowRoot.querySelector('#lifeDown');</span>
&nbsp;
<span class="cstat-no" title="statement not covered" >		this.lifeUpBtn.addEventListener('click', <span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
<span class="cstat-no" title="statement not covered" >			this.lifeEl.textContent = ++this.life;</span>
		});
<span class="cstat-no" title="statement not covered" >		this.lifeDownBtn.addEventListener('click', <span class="fstat-no" title="function not covered" >()</span> =&gt; {</span>
<span class="cstat-no" title="statement not covered" >			this.lifeEl.textContent = --this.life;</span>
		});
	}
&nbsp;
<span class="fstat-no" title="function not covered" >	re</span>nder() {
		const template = <span class="cstat-no" title="statement not covered" >document.querySelector('#mtgPlayer-tpl').content.cloneNode(true);</span>
<span class="cstat-no" title="statement not covered" >		this.shadowRoot.appendChild(template);</span>
	}
}
&nbsp;
customElements.define('mtg-player', MtgPlayer);
&nbsp;</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 Mon Sep 06 2021 23:19:53 GMT-0300 (Chile 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>
    
\ No newline at end of file

A ejemplos/mtg-counter/coverage/lcov-report/tests/integration/helpers.js.html => ejemplos/mtg-counter/coverage/lcov-report/tests/integration/helpers.js.html +95 -0
@@ 0,0 1,95 @@

<!doctype html>
<html lang="en">

<head>
    <title>Code coverage report for tests/integration/helpers.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> / <a href="index.html">tests/integration</a> helpers.js</h1>
        <div class='clearfix'>
            
            <div class='fl pad1y space-right2'>
                <span class="strong">50% </span>
                <span class="quiet">Statements</span>
                <span class='fraction'>1/2</span>
            </div>
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">100% </span>
                <span class="quiet">Branches</span>
                <span class='fraction'>0/0</span>
            </div>
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">50% </span>
                <span class="quiet">Functions</span>
                <span class='fraction'>1/2</span>
            </div>
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">100% </span>
                <span class="quiet">Lines</span>
                <span class='fraction'>1/1</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 medium'></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></td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-yes">1x</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span>
<span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">async function importHTML(url) {
    return fetch(url).then(<span class="fstat-no" title="function not covered" >re</span>sponse =&gt; <span class="cstat-no" title="statement not covered" >response.text())</span>;
}
&nbsp;
export { importHTML };
&nbsp;</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 Mon Sep 06 2021 23:19:53 GMT-0300 (Chile 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>
    
\ No newline at end of file

A ejemplos/mtg-counter/coverage/lcov-report/tests/integration/index.html => ejemplos/mtg-counter/coverage/lcov-report/tests/integration/index.html +111 -0
@@ 0,0 1,111 @@

<!doctype html>
<html lang="en">

<head>
    <title>Code coverage report for tests/integration</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> tests/integration</h1>
        <div class='clearfix'>
            
            <div class='fl pad1y space-right2'>
                <span class="strong">50% </span>
                <span class="quiet">Statements</span>
                <span class='fraction'>1/2</span>
            </div>
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">100% </span>
                <span class="quiet">Branches</span>
                <span class='fraction'>0/0</span>
            </div>
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">50% </span>
                <span class="quiet">Functions</span>
                <span class='fraction'>1/2</span>
            </div>
        
            
            <div class='fl pad1y space-right2'>
                <span class="strong">100% </span>
                <span class="quiet">Lines</span>
                <span class='fraction'>1/1</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 medium'></div>
    <div class="pad1">
<table class="coverage-summary">
<thead>
<tr>
   <th data-col="file" data-fmt="html" data-html="true" class="file">File</th>
   <th data-col="pic" data-type="number" data-fmt="html" data-html="true" class="pic"></th>
   <th data-col="statements" data-type="number" data-fmt="pct" class="pct">Statements</th>
   <th data-col="statements_raw" data-type="number" data-fmt="html" class="abs"></th>
   <th data-col="branches" data-type="number" data-fmt="pct" class="pct">Branches</th>
   <th data-col="branches_raw" data-type="number" data-fmt="html" class="abs"></th>
   <th data-col="functions" data-type="number" data-fmt="pct" class="pct">Functions</th>
   <th data-col="functions_raw" data-type="number" data-fmt="html" class="abs"></th>
   <th data-col="lines" data-type="number" data-fmt="pct" class="pct">Lines</th>
   <th data-col="lines_raw" data-type="number" data-fmt="html" class="abs"></th>
</tr>
</thead>
<tbody><tr>
	<td class="file medium" data-value="helpers.js"><a href="helpers.js.html">helpers.js</a></td>
	<td data-value="50" class="pic medium">
	<div class="chart"><div class="cover-fill" style="width: 50%"></div><div class="cover-empty" style="width: 50%"></div></div>
	</td>
	<td data-value="50" class="pct medium">50%</td>
	<td data-value="2" class="abs medium">1/2</td>
	<td data-value="100" class="pct high">100%</td>
	<td data-value="0" class="abs high">0/0</td>
	<td data-value="50" class="pct medium">50%</td>
	<td data-value="2" class="abs medium">1/2</td>
	<td data-value="100" class="pct high">100%</td>
	<td data-value="1" class="abs high">1/1</td>
	</tr>

</tbody>
</table>
</div>
                <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 Mon Sep 06 2021 23:19:53 GMT-0300 (Chile 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>
    
\ No newline at end of file

M ejemplos/mtg-counter/coverage/lcov.info => ejemplos/mtg-counter/coverage/lcov.info +32 -18
@@ 5,30 5,44 @@ FN:19,(anonymous_1)
FN:22,(anonymous_2)
FN:27,(anonymous_3)
FNF:4
FNH:2
FNDA:1,(anonymous_0)
FNH:0
FNDA:0,(anonymous_0)
FNDA:0,(anonymous_1)
FNDA:0,(anonymous_2)
FNDA:1,(anonymous_3)
DA:3,1
DA:5,1
DA:8,1
DA:9,1
DA:12,1
DA:13,1
DA:14,1
DA:15,1
DA:16,1
DA:17,1
DA:19,1
FNDA:0,(anonymous_3)
DA:3,0
DA:5,0
DA:8,0
DA:9,0
DA:12,0
DA:13,0
DA:14,0
DA:15,0
DA:16,0
DA:17,0
DA:19,0
DA:20,0
DA:22,1
DA:22,0
DA:23,0
DA:28,1
DA:29,1
DA:28,0
DA:29,0
DA:33,1
LF:17
LH:15
LH:1
BRF:0
BRH:0
end_of_record
TN:
SF:tests/integration/helpers.js
FN:1,importHTML
FN:2,(anonymous_1)
FNF:2
FNH:1
FNDA:1,importHTML
FNDA:0,(anonymous_1)
DA:2,1
LF:1
LH:1
BRF:0
BRH:0
end_of_record

M ejemplos/mtg-counter/jest.config.js => ejemplos/mtg-counter/jest.config.js +5 -3
@@ 85,6 85,7 @@ module.exports = {

  // An array of regexp pattern strings, matched against all module paths before considered 'visible' to the module loader
  // modulePathIgnorePatterns: [],
  modulePaths: ['<rootDir>/src/'],

  // Activates notifications for test results
  // notify: false,


@@ 117,9 118,10 @@ module.exports = {
  // rootDir: undefined,

  // A list of paths to directories that Jest should use to search for files in
  // roots: [
  //   "<rootDir>"
  // ],
  roots: [
     "tests/unit",
     "tests/integration"
  ],

  // Allows you to use a custom runner instead of Jest's default test runner
  // runner: "jest-runner",

M ejemplos/mtg-counter/package.json => ejemplos/mtg-counter/package.json +6 -1
@@ 9,10 9,15 @@
  "devDependencies": {
    "@babel/core": "^7.15.0",
    "@babel/preset-env": "^7.15.0",
    "@playwright/test": "^1.14.1",
    "babel-jest": "^27.1.0",
    "http-server": "^13.0.1",
    "jest": "^27.1.0"
  },
  "scripts": {
    "test": "jest"
    "test:unit": "jest tests/unit/",
    "test:integration": "jest tests/integration/",
    "test:e2e": "playwright test tests/e2e/",
    "serve": "http-server -p 3000 src/"
  }
}

A ejemplos/mtg-counter/playwright.config.js => ejemplos/mtg-counter/playwright.config.js +15 -0
@@ 0,0 1,15 @@
/** @type {import('@playwright/test').PlaywrightTestConfig} */
const config = {
    testDir: 'tests/e2e/',
    use: {
        headless: false,
        ignoreHTTPSErrors: true
    },
    webServer: {
        command: 'npm run serve',
        port: 3000,
        timeout: 120 * 1000,
        reuseExistingServer: !process.env.CI
    },
};
module.exports = config;

A ejemplos/mtg-counter/tests/e2e/index.test.mjs => ejemplos/mtg-counter/tests/e2e/index.test.mjs +44 -0
@@ 0,0 1,44 @@
import { test, expect } from '@playwright/test';

test.describe('', () => {
	let page;

	test.beforeAll(async ({ browser }) => {
		page = await browser.newPage();
	});

	test.afterAll(async () => {
		await page.close();
	});

	test('load page', async () => {
		await page.goto('http://127.0.0.1:3000/');
		const label = page.locator('initial-form label[for=players]');
		await expect(label).toHaveText('¿Cuántos jugadores participarán?');
	});

	test('fill amount of players', async() => {
		await page.fill('initial-form #players', '4');
		await page.click('initial-form #step1 button');
		const label = page.locator('initial-form label[for=score]');
		await expect(label).toBeVisible();
	});

	test('fill life of players', async() => {
		const label = page.locator('initial-form label[for=name]');
		await expect(label).not.toBeVisible();
		await page.fill('initial-form #score', '20');
		await page.click('initial-form #step2 button');
		await expect(label).toBeVisible();
	});

	test('fill life names', async() => {
		const playerNames = ['yaca', 'pablo', 'eduardo', 'felix'];
		for (let playerName of playerNames) {
			await page.fill('initial-form #name', playerName);
			await page.click('initial-form #step3 button');
		}
		const playerElements = page.locator('mtg-player');
		await expect(await playerElements.count()).toBe(4);
	});
});

R ejemplos/mtg-counter/tests/mtgPlayer.test.js => ejemplos/mtg-counter/tests/integration/mtgPlayer.test.js +5 -1
@@ 1,4 1,4 @@
import '../src/mtgPlayer.js';
import 'mtgPlayer.js';

beforeAll(() => {
	document.body.innerHTML = `


@@ 18,6 18,10 @@ describe('mtgPlayer insertion on DOM', () => {
		mtgPlayerEl = document.createElement('mtg-player');
	});

	afterEach(() => {
		mtgPlayerEl.remove();
	});

	test('with valid player-name and initial-life attributes', () => {
		mtgPlayerEl.setAttribute('player-name', 'john');
		mtgPlayerEl.setAttribute('initial-life', '20');

R ejemplos/mtg-counter/tests/sum.test.js => ejemplos/mtg-counter/tests/unit/sum.test.js +0 -0
M ejemplos/mtg-counter/yarn.lock => ejemplos/mtg-counter/yarn.lock +638 -9
@@ 2,7 2,7 @@
# yarn lockfile v1


"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.14.5":
"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.14.5":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb"
  integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==


@@ 35,6 35,27 @@
    semver "^6.3.0"
    source-map "^0.5.0"

"@babel/core@^7.14.8":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.15.4.tgz#a70d06c58ae1fce39c23f8efd79f9d5eb8b2f397"
  integrity sha512-Lkcv9I4a8bgUI8LJOLM6IKv6hnz1KOju6KM1lceqVMKlKKqNRopYd2Pc9MgIurqvMJ6BooemrnJz8jlIiQIpsA==
  dependencies:
    "@babel/code-frame" "^7.14.5"
    "@babel/generator" "^7.15.4"
    "@babel/helper-compilation-targets" "^7.15.4"
    "@babel/helper-module-transforms" "^7.15.4"
    "@babel/helpers" "^7.15.4"
    "@babel/parser" "^7.15.4"
    "@babel/template" "^7.15.4"
    "@babel/traverse" "^7.15.4"
    "@babel/types" "^7.15.4"
    convert-source-map "^1.7.0"
    debug "^4.1.0"
    gensync "^1.0.0-beta.2"
    json5 "^2.1.2"
    semver "^6.3.0"
    source-map "^0.5.0"

"@babel/generator@^7.15.0", "@babel/generator@^7.7.2":
  version "7.15.0"
  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.0.tgz#a7d0c172e0d814974bad5aa77ace543b97917f15"


@@ 44,6 65,15 @@
    jsesc "^2.5.1"
    source-map "^0.5.0"

"@babel/generator@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.15.4.tgz#85acb159a267ca6324f9793986991ee2022a05b0"
  integrity sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==
  dependencies:
    "@babel/types" "^7.15.4"
    jsesc "^2.5.1"
    source-map "^0.5.0"

"@babel/helper-annotate-as-pure@^7.14.5":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz#7bf478ec3b71726d56a8ca5775b046fc29879e61"


@@ 51,6 81,13 @@
  dependencies:
    "@babel/types" "^7.14.5"

"@babel/helper-annotate-as-pure@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz#3d0e43b00c5e49fdb6c57e421601a7a658d5f835"
  integrity sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==
  dependencies:
    "@babel/types" "^7.15.4"

"@babel/helper-builder-binary-assignment-operator-visitor@^7.14.5":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz#b939b43f8c37765443a19ae74ad8b15978e0a191"


@@ 69,6 106,16 @@
    browserslist "^4.16.6"
    semver "^6.3.0"

"@babel/helper-compilation-targets@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz#cf6d94f30fbefc139123e27dd6b02f65aeedb7b9"
  integrity sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==
  dependencies:
    "@babel/compat-data" "^7.15.0"
    "@babel/helper-validator-option" "^7.14.5"
    browserslist "^4.16.6"
    semver "^6.3.0"

"@babel/helper-create-class-features-plugin@^7.14.5":
  version "7.15.0"
  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.0.tgz#c9a137a4d137b2d0e2c649acf536d7ba1a76c0f7"


@@ 81,6 128,18 @@
    "@babel/helper-replace-supers" "^7.15.0"
    "@babel/helper-split-export-declaration" "^7.14.5"

"@babel/helper-create-class-features-plugin@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz#7f977c17bd12a5fba363cb19bea090394bf37d2e"
  integrity sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==
  dependencies:
    "@babel/helper-annotate-as-pure" "^7.15.4"
    "@babel/helper-function-name" "^7.15.4"
    "@babel/helper-member-expression-to-functions" "^7.15.4"
    "@babel/helper-optimise-call-expression" "^7.15.4"
    "@babel/helper-replace-supers" "^7.15.4"
    "@babel/helper-split-export-declaration" "^7.15.4"

"@babel/helper-create-regexp-features-plugin@^7.14.5":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4"


@@ 119,6 178,15 @@
    "@babel/template" "^7.14.5"
    "@babel/types" "^7.14.5"

"@babel/helper-function-name@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz#845744dafc4381a4a5fb6afa6c3d36f98a787ebc"
  integrity sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==
  dependencies:
    "@babel/helper-get-function-arity" "^7.15.4"
    "@babel/template" "^7.15.4"
    "@babel/types" "^7.15.4"

"@babel/helper-get-function-arity@^7.14.5":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz#25fbfa579b0937eee1f3b805ece4ce398c431815"


@@ 126,6 194,13 @@
  dependencies:
    "@babel/types" "^7.14.5"

"@babel/helper-get-function-arity@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz#098818934a137fce78b536a3e015864be1e2879b"
  integrity sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==
  dependencies:
    "@babel/types" "^7.15.4"

"@babel/helper-hoist-variables@^7.14.5":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz#e0dd27c33a78e577d7c8884916a3e7ef1f7c7f8d"


@@ 133,6 208,13 @@
  dependencies:
    "@babel/types" "^7.14.5"

"@babel/helper-hoist-variables@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz#09993a3259c0e918f99d104261dfdfc033f178df"
  integrity sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==
  dependencies:
    "@babel/types" "^7.15.4"

"@babel/helper-member-expression-to-functions@^7.15.0":
  version "7.15.0"
  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.0.tgz#0ddaf5299c8179f27f37327936553e9bba60990b"


@@ 140,6 222,13 @@
  dependencies:
    "@babel/types" "^7.15.0"

"@babel/helper-member-expression-to-functions@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz#bfd34dc9bba9824a4658b0317ec2fd571a51e6ef"
  integrity sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==
  dependencies:
    "@babel/types" "^7.15.4"

"@babel/helper-module-imports@^7.12.13", "@babel/helper-module-imports@^7.14.5":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz#6d1a44df6a38c957aa7c312da076429f11b422f3"


@@ 147,6 236,13 @@
  dependencies:
    "@babel/types" "^7.14.5"

"@babel/helper-module-imports@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz#e18007d230632dea19b47853b984476e7b4e103f"
  integrity sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==
  dependencies:
    "@babel/types" "^7.15.4"

"@babel/helper-module-transforms@^7.14.5", "@babel/helper-module-transforms@^7.15.0":
  version "7.15.0"
  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.0.tgz#679275581ea056373eddbe360e1419ef23783b08"


@@ 161,6 257,20 @@
    "@babel/traverse" "^7.15.0"
    "@babel/types" "^7.15.0"

"@babel/helper-module-transforms@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.15.4.tgz#962cc629a7f7f9a082dd62d0307fa75fe8788d7c"
  integrity sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==
  dependencies:
    "@babel/helper-module-imports" "^7.15.4"
    "@babel/helper-replace-supers" "^7.15.4"
    "@babel/helper-simple-access" "^7.15.4"
    "@babel/helper-split-export-declaration" "^7.15.4"
    "@babel/helper-validator-identifier" "^7.14.9"
    "@babel/template" "^7.15.4"
    "@babel/traverse" "^7.15.4"
    "@babel/types" "^7.15.4"

"@babel/helper-optimise-call-expression@^7.14.5":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz#f27395a8619e0665b3f0364cddb41c25d71b499c"


@@ 168,6 278,13 @@
  dependencies:
    "@babel/types" "^7.14.5"

"@babel/helper-optimise-call-expression@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz#f310a5121a3b9cc52d9ab19122bd729822dee171"
  integrity sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==
  dependencies:
    "@babel/types" "^7.15.4"

"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.13.0", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz#5ac822ce97eec46741ab70a517971e443a70c5a9"


@@ 192,6 309,16 @@
    "@babel/traverse" "^7.15.0"
    "@babel/types" "^7.15.0"

"@babel/helper-replace-supers@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz#52a8ab26ba918c7f6dee28628b07071ac7b7347a"
  integrity sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==
  dependencies:
    "@babel/helper-member-expression-to-functions" "^7.15.4"
    "@babel/helper-optimise-call-expression" "^7.15.4"
    "@babel/traverse" "^7.15.4"
    "@babel/types" "^7.15.4"

"@babel/helper-simple-access@^7.14.8":
  version "7.14.8"
  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.14.8.tgz#82e1fec0644a7e775c74d305f212c39f8fe73924"


@@ 199,6 326,13 @@
  dependencies:
    "@babel/types" "^7.14.8"

"@babel/helper-simple-access@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz#ac368905abf1de8e9781434b635d8f8674bcc13b"
  integrity sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==
  dependencies:
    "@babel/types" "^7.15.4"

"@babel/helper-skip-transparent-expression-wrappers@^7.14.5":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz#96f486ac050ca9f44b009fbe5b7d394cab3a0ee4"


@@ 213,6 347,13 @@
  dependencies:
    "@babel/types" "^7.14.5"

"@babel/helper-split-export-declaration@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz#aecab92dcdbef6a10aa3b62ab204b085f776e257"
  integrity sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==
  dependencies:
    "@babel/types" "^7.15.4"

"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9":
  version "7.14.9"
  resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz#6654d171b2024f6d8ee151bf2509699919131d48"


@@ 242,6 383,15 @@
    "@babel/traverse" "^7.15.0"
    "@babel/types" "^7.15.0"

"@babel/helpers@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.15.4.tgz#5f40f02050a3027121a3cf48d497c05c555eaf43"
  integrity sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==
  dependencies:
    "@babel/template" "^7.15.4"
    "@babel/traverse" "^7.15.4"
    "@babel/types" "^7.15.4"

"@babel/highlight@^7.14.5":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9"


@@ 256,6 406,11 @@
  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.3.tgz#3416d9bea748052cfcb63dbcc27368105b1ed862"
  integrity sha512-O0L6v/HvqbdJawj0iBEfVQMc3/6WP+AeOsovsIgBFyJaG+W2w7eqvZB7puddATmWuARlm1SX7DwxJ/JJUnDpEA==

"@babel/parser@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.15.4.tgz#02f2931b822512d3aad17d475ae83da74a255a84"
  integrity sha512-xmzz+7fRpjrvDUj+GV7zfz/R3gSK2cOxGlazaXooxspCr539cbTXJKvBJzSVI2pPhcRGquoOtaIkKCsHQUiO3w==

"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.14.5":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz#4b467302e1548ed3b1be43beae2cc9cf45e0bb7e"


@@ 505,7 660,7 @@
  dependencies:
    "@babel/helper-plugin-utils" "^7.14.5"

"@babel/plugin-syntax-typescript@^7.7.2":
"@babel/plugin-syntax-typescript@^7.14.5", "@babel/plugin-syntax-typescript@^7.7.2":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.14.5.tgz#b82c6ce471b165b5ce420cf92914d6fb46225716"
  integrity sha512-u6OXzDaIXjEstBRRoBCQ/uKQKlbuaeE5in0RvWdA4pN6AhqxTIwUsnHPU1CFZA/amYObMsuWhYfRl3Ch90HD0Q==


@@ 630,6 785,16 @@
    "@babel/helper-plugin-utils" "^7.14.5"
    babel-plugin-dynamic-import-node "^2.3.3"

"@babel/plugin-transform-modules-commonjs@^7.14.5":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz#8201101240eabb5a76c08ef61b2954f767b6b4c1"
  integrity sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==
  dependencies:
    "@babel/helper-module-transforms" "^7.15.4"
    "@babel/helper-plugin-utils" "^7.14.5"
    "@babel/helper-simple-access" "^7.15.4"
    babel-plugin-dynamic-import-node "^2.3.3"

"@babel/plugin-transform-modules-commonjs@^7.15.0":
  version "7.15.0"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.0.tgz#3305896e5835f953b5cdb363acd9e8c2219a5281"


@@ 745,6 910,15 @@
  dependencies:
    "@babel/helper-plugin-utils" "^7.14.5"

"@babel/plugin-transform-typescript@^7.15.0":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.15.4.tgz#db7a062dcf8be5fc096bc0eeb40a13fbfa1fa251"
  integrity sha512-sM1/FEjwYjXvMwu1PJStH11kJ154zd/lpY56NQJ5qH2D0mabMv1CAy/kdvS9RP4Xgfj9fBBA3JiSLdDHgXdzOA==
  dependencies:
    "@babel/helper-create-class-features-plugin" "^7.15.4"
    "@babel/helper-plugin-utils" "^7.14.5"
    "@babel/plugin-syntax-typescript" "^7.14.5"

"@babel/plugin-transform-unicode-escapes@^7.14.5":
  version "7.14.5"
  resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz#9d4bd2a681e3c5d7acf4f57fa9e51175d91d0c6b"


@@ 850,6 1024,15 @@
    "@babel/types" "^7.4.4"
    esutils "^2.0.2"

"@babel/preset-typescript@^7.14.5":
  version "7.15.0"
  resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.15.0.tgz#e8fca638a1a0f64f14e1119f7fe4500277840945"
  integrity sha512-lt0Y/8V3y06Wq/8H/u0WakrqciZ7Fz7mwPDHWUJAXlABL5hiUG42BNlRXiELNjeWjO5rWmnNKlx+yzJvxezHow==
  dependencies:
    "@babel/helper-plugin-utils" "^7.14.5"
    "@babel/helper-validator-option" "^7.14.5"
    "@babel/plugin-transform-typescript" "^7.15.0"

"@babel/runtime@^7.8.4":
  version "7.15.3"
  resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.3.tgz#2e1c2880ca118e5b2f9988322bd8a7656a32502b"


@@ 866,6 1049,15 @@
    "@babel/parser" "^7.14.5"
    "@babel/types" "^7.14.5"

"@babel/template@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.15.4.tgz#51898d35dcf3faa670c4ee6afcfd517ee139f194"
  integrity sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==
  dependencies:
    "@babel/code-frame" "^7.14.5"
    "@babel/parser" "^7.15.4"
    "@babel/types" "^7.15.4"

"@babel/traverse@^7.1.0", "@babel/traverse@^7.13.0", "@babel/traverse@^7.14.5", "@babel/traverse@^7.15.0", "@babel/traverse@^7.7.2":
  version "7.15.0"
  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.0.tgz#4cca838fd1b2a03283c1f38e141f639d60b3fc98"


@@ 881,6 1073,21 @@
    debug "^4.1.0"
    globals "^11.1.0"

"@babel/traverse@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.15.4.tgz#ff8510367a144bfbff552d9e18e28f3e2889c22d"
  integrity sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==
  dependencies:
    "@babel/code-frame" "^7.14.5"
    "@babel/generator" "^7.15.4"
    "@babel/helper-function-name" "^7.15.4"
    "@babel/helper-hoist-variables" "^7.15.4"
    "@babel/helper-split-export-declaration" "^7.15.4"
    "@babel/parser" "^7.15.4"
    "@babel/types" "^7.15.4"
    debug "^4.1.0"
    globals "^11.1.0"

"@babel/types@^7.0.0", "@babel/types@^7.14.5", "@babel/types@^7.14.8", "@babel/types@^7.15.0", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4":
  version "7.15.0"
  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.0.tgz#61af11f2286c4e9c69ca8deb5f4375a73c72dcbd"


@@ 889,6 1096,14 @@
    "@babel/helper-validator-identifier" "^7.14.9"
    to-fast-properties "^2.0.0"

"@babel/types@^7.15.4":
  version "7.15.4"
  resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.15.4.tgz#74eeb86dbd6748d2741396557b9860e57fce0a0d"
  integrity sha512-0f1HJFuGmmbrKTCZtbm3cU+b/AqdEYk5toj5iQur58xkVMlS0JWaKxTBSmCXd47uiN7vbcozAupm6Mvs80GNhw==
  dependencies:
    "@babel/helper-validator-identifier" "^7.14.9"
    to-fast-properties "^2.0.0"

"@bcoe/v8-coverage@^0.2.3":
  version "0.2.3"
  resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"


@@ 1068,6 1283,17 @@
    source-map "^0.6.1"
    write-file-atomic "^3.0.0"

"@jest/types@^26.6.2":
  version "26.6.2"
  resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e"
  integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==
  dependencies:
    "@types/istanbul-lib-coverage" "^2.0.0"
    "@types/istanbul-reports" "^3.0.0"
    "@types/node" "*"
    "@types/yargs" "^15.0.0"
    chalk "^4.0.0"

"@jest/types@^27.1.0":
  version "27.1.0"
  resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.1.0.tgz#674a40325eab23c857ebc0689e7e191a3c5b10cc"


@@ 1079,6 1305,50 @@
    "@types/yargs" "^16.0.0"
    chalk "^4.0.0"

"@playwright/test@^1.14.1":
  version "1.14.1"
  resolved "https://registry.yarnpkg.com/@playwright/test/-/test-1.14.1.tgz#b2c6b76b8bf5958da307c80895847844b7fd172c"
  integrity sha512-yL/808TEvUmsXxKMPf/Hf6Tajx666QFr8g+hCUZbRy2cbmQOPt7xhwGvXb1cpwMwIlJ4gBx/AiOpnnppsuLgTA==
  dependencies:
    "@babel/code-frame" "^7.14.5"
    "@babel/core" "^7.14.8"
    "@babel/plugin-proposal-class-properties" "^7.14.5"
    "@babel/plugin-proposal-dynamic-import" "^7.14.5"
    "@babel/plugin-proposal-export-namespace-from" "^7.14.5"
    "@babel/plugin-proposal-logical-assignment-operators" "^7.14.5"
    "@babel/plugin-proposal-nullish-coalescing-operator" "^7.14.5"
    "@babel/plugin-proposal-numeric-separator" "^7.14.5"
    "@babel/plugin-proposal-optional-chaining" "^7.14.5"
    "@babel/plugin-proposal-private-methods" "^7.14.5"
    "@babel/plugin-proposal-private-property-in-object" "^7.14.5"
    "@babel/plugin-syntax-async-generators" "^7.8.4"
    "@babel/plugin-syntax-json-strings" "^7.8.3"
    "@babel/plugin-syntax-object-rest-spread" "^7.8.3"
    "@babel/plugin-syntax-optional-catch-binding" "^7.8.3"
    "@babel/plugin-transform-modules-commonjs" "^7.14.5"
    "@babel/preset-typescript" "^7.14.5"
    colors "^1.4.0"
    commander "^6.1.0"
    debug "^4.1.1"
    expect "^26.4.2"
    extract-zip "^2.0.1"
    https-proxy-agent "^5.0.0"
    jpeg-js "^0.4.2"
    mime "^2.4.6"
    minimatch "^3.0.3"
    ms "^2.1.2"
    pirates "^4.0.1"
    pixelmatch "^5.2.1"
    pngjs "^5.0.0"
    progress "^2.0.3"
    proper-lockfile "^4.1.1"
    proxy-from-env "^1.1.0"
    rimraf "^3.0.2"
    source-map-support "^0.4.18"
    stack-utils "^2.0.3"
    ws "^7.4.6"
    yazl "^2.5.1"

"@sinonjs/commons@^1.7.0":
  version "1.8.3"
  resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.3.tgz#3802ddd21a50a949b6721ddd72da36e67e7f1b2d"


@@ 1177,6 1447,13 @@
  resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129"
  integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw==

"@types/yargs@^15.0.0":
  version "15.0.14"
  resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06"
  integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ==
  dependencies:
    "@types/yargs-parser" "*"

"@types/yargs@^16.0.0":
  version "16.0.4"
  resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977"


@@ 1184,6 1461,13 @@
  dependencies:
    "@types/yargs-parser" "*"

"@types/yauzl@^2.9.1":
  version "2.9.2"
  resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.9.2.tgz#c48e5d56aff1444409e39fa164b0b4d4552a7b7a"
  integrity sha512-8uALY5LTvSuHgloDVUvWP3pIauILm+8/0pDMokuDYIoNsOkSwd5AiHBTSEJjKTDcZr5z8UpgOWZkxBF4iJftoA==
  dependencies:
    "@types/node" "*"

abab@^2.0.3, abab@^2.0.5:
  version "2.0.5"
  resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"


@@ 1265,6 1549,13 @@ argparse@^1.0.7:
  dependencies:
    sprintf-js "~1.0.2"

async@^2.6.2:
  version "2.6.3"
  resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff"
  integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==
  dependencies:
    lodash "^4.17.14"

asynckit@^0.4.0:
  version "0.4.0"
  resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"


@@ 1367,6 1658,11 @@ balanced-match@^1.0.0:
  resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
  integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==

basic-auth@^1.0.3:
  version "1.1.0"
  resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884"
  integrity sha1-RSIe5Cn37h5QNb4/UVM/HN/SmIQ=

brace-expansion@^1.1.7:
  version "1.1.11"
  resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"


@@ 1405,6 1701,11 @@ bser@2.1.1:
  dependencies:
    node-int64 "^0.4.0"

buffer-crc32@~0.2.3:
  version "0.2.13"
  resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
  integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=

buffer-from@^1.0.0:
  version "1.1.2"
  resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"


@@ 1518,6 1819,11 @@ colorette@^1.3.0:
  resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.3.0.tgz#ff45d2f0edb244069d3b772adeb04fed38d0a0af"
  integrity sha512-ecORCqbSFP7Wm8Y6lyqMJjexBQqXSF7SSeaTyGGphogUjBlFP9m9o08wy86HL2uB7fMTxtOUzLMk7ogKcxMg1w==

colors@^1.4.0:
  version "1.4.0"
  resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78"
  integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==

combined-stream@^1.0.8:
  version "1.0.8"
  resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"


@@ 1525,6 1831,11 @@ combined-stream@^1.0.8:
  dependencies:
    delayed-stream "~1.0.0"

commander@^6.1.0:
  version "6.2.1"
  resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
  integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==

concat-map@0.0.1:
  version "0.0.1"
  resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"


@@ 1545,6 1856,11 @@ core-js-compat@^3.14.0, core-js-compat@^3.16.0:
    browserslist "^4.16.8"
    semver "7.0.0"

corser@^2.0.1:
  version "2.0.1"
  resolved "https://registry.yarnpkg.com/corser/-/corser-2.0.1.tgz#8eda252ecaab5840dcd975ceb90d9370c819ff87"
  integrity sha1-jtolLsqrWEDc2XXOuQ2TcMgZ/4c=

cross-spawn@^7.0.3:
  version "7.0.3"
  resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"


@@ 1587,6 1903,13 @@ debug@4, debug@^4.1.0, debug@^4.1.1:
  dependencies:
    ms "2.1.2"

debug@^3.1.1:
  version "3.2.7"
  resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
  integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
  dependencies:
    ms "^2.1.1"

decimal.js@^10.2.1:
  version "10.3.1"
  resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783"


@@ 1624,6 1947,11 @@ detect-newline@^3.0.0:
  resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
  integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==

diff-sequences@^26.6.2:
  version "26.6.2"
  resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-26.6.2.tgz#48ba99157de1923412eed41db6b6d4aa9ca7c0b1"
  integrity sha512-Mv/TDa3nZ9sbc5soK+OoA74BsS3mL37yixCvUAQkiuA4Wz6YtwP/K47n2rv2ovzHZvoiQeA5FTQOschKkEwB0Q==

diff-sequences@^27.0.6:
  version "27.0.6"
  resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-27.0.6.tgz#3305cb2e55a033924054695cc66019fd7f8e5723"


@@ 1651,6 1979,13 @@ emoji-regex@^8.0.0:
  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==

end-of-stream@^1.1.0:
  version "1.4.4"
  resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
  integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
  dependencies:
    once "^1.4.0"

escalade@^3.1.1:
  version "3.1.1"
  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"


@@ 1693,6 2028,11 @@ esutils@^2.0.2:
  resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64"
  integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==

eventemitter3@^4.0.0:
  version "4.0.7"
  resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
  integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==

execa@^5.0.0:
  version "5.1.1"
  resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"


@@ 1713,6 2053,18 @@ exit@^0.1.2:
  resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c"
  integrity sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=

expect@^26.4.2:
  version "26.6.2"
  resolved "https://registry.yarnpkg.com/expect/-/expect-26.6.2.tgz#c6b996bf26bf3fe18b67b2d0f51fc981ba934417"
  integrity sha512-9/hlOBkQl2l/PLHJx6JjoDF6xPKcJEsUlWKb23rKE7KzeDqUZKXKNMW27KIue5JMdBV9HgmoJPcc8HtO85t9IA==
  dependencies:
    "@jest/types" "^26.6.2"
    ansi-styles "^4.0.0"
    jest-get-type "^26.3.0"
    jest-matcher-utils "^26.6.2"
    jest-message-util "^26.6.2"
    jest-regex-util "^26.0.0"

expect@^27.1.0:
  version "27.1.0"
  resolved "https://registry.yarnpkg.com/expect/-/expect-27.1.0.tgz#380de0abb3a8f2299c4c6c66bbe930483b5dba9b"


@@ 1725,6 2077,17 @@ expect@^27.1.0:
    jest-message-util "^27.1.0"
    jest-regex-util "^27.0.6"

extract-zip@^2.0.1:
  version "2.0.1"
  resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
  integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
  dependencies:
    debug "^4.1.1"
    get-stream "^5.1.0"
    yauzl "^2.10.0"
  optionalDependencies:
    "@types/yauzl" "^2.9.1"

fast-json-stable-stringify@^2.0.0:
  version "2.1.0"
  resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"


@@ 1742,6 2105,13 @@ fb-watchman@^2.0.0:
  dependencies:
    bser "2.1.1"

fd-slicer@~1.1.0:
  version "1.1.0"
  resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
  integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
  dependencies:
    pend "~1.2.0"

fill-range@^7.0.1:
  version "7.0.1"
  resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"


@@ 1757,6 2127,11 @@ find-up@^4.0.0, find-up@^4.1.0:
    locate-path "^5.0.0"
    path-exists "^4.0.0"

follow-redirects@^1.0.0:
  version "1.14.3"
  resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.3.tgz#6ada78118d8d24caee595595accdc0ac6abd022e"
  integrity sha512-3MkHxknWMUtb23apkgz/83fDoe+y+qr0TdgacGIA7bew+QLBo3vdgEN2xEsuXNivpFy4CyDhBBZnNZOtalmenw==

form-data@^3.0.0:
  version "3.0.1"
  resolved "https://registry.yarnpkg.com/form-data/-/form-data-3.0.1.tgz#ebd53791b78356a99af9a300d4282c4d5eb9755f"


@@ 1805,6 2180,13 @@ get-package-type@^0.1.0:
  resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a"
  integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==

get-stream@^5.1.0:
  version "5.2.0"
  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3"
  integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==
  dependencies:
    pump "^3.0.0"

get-stream@^6.0.0:
  version "6.0.1"
  resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"


@@ 1854,6 2236,11 @@ has@^1.0.3:
  dependencies:
    function-bind "^1.1.1"

he@^1.1.0:
  version "1.2.0"
  resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f"
  integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==

html-encoding-sniffer@^2.0.1:
  version "2.0.1"
  resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz#42a6dc4fd33f00281176e8b23759ca4e4fa185f3"


@@ 1875,6 2262,33 @@ http-proxy-agent@^4.0.1:
    agent-base "6"
    debug "4"

http-proxy@^1.18.0:
  version "1.18.1"
  resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.1.tgz#401541f0534884bbf95260334e72f88ee3976549"
  integrity sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==
  dependencies:
    eventemitter3 "^4.0.0"
    follow-redirects "^1.0.0"
    requires-port "^1.0.0"

http-server@^13.0.1:
  version "13.0.1"
  resolved "https://registry.yarnpkg.com/http-server/-/http-server-13.0.1.tgz#e7340d082925c4b1d6484c905d0df29d7d8ec16f"
  integrity sha512-ke9rphoNuqsOCHy4tA3b3W4Yuxy7VUIXcTHSLz6bkMDAJPQD4twjEatquelJBIPwNhZuC3+FYj/+dSaGHdKTCw==
  dependencies:
    basic-auth "^1.0.3"
    colors "^1.4.0"
    corser "^2.0.1"
    he "^1.1.0"
    http-proxy "^1.18.0"
    mime "^1.6.0"
    minimist "^1.2.5"
    opener "^1.5.1"
    portfinder "^1.0.25"
    secure-compare "3.0.1"
    union "~0.5.0"
    url-join "^2.0.5"

https-proxy-agent@^5.0.0:
  version "5.0.0"
  resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2"


@@ 2090,6 2504,16 @@ jest-config@^27.1.0:
    micromatch "^4.0.4"
    pretty-format "^27.1.0"

jest-diff@^26.6.2:
  version "26.6.2"
  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-26.6.2.tgz#1aa7468b52c3a68d7d5c5fdcdfcd5e49bd164394"
  integrity sha512-6m+9Z3Gv9wN0WFVasqjCL/06+EFCMTqDEUl/b87HYK2rAPTyfz4ZIuSlPhY51PIQRWx5TaxeF1qmXKe9gfN3sA==
  dependencies:
    chalk "^4.0.0"
    diff-sequences "^26.6.2"
    jest-get-type "^26.3.0"
    pretty-format "^26.6.2"

jest-diff@^27.1.0:
  version "27.1.0"
  resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-27.1.0.tgz#c7033f25add95e2218f3c7f4c3d7b634ab6b3cd2"


@@ 2143,6 2567,11 @@ jest-environment-node@^27.1.0:
    jest-mock "^27.1.0"
    jest-util "^27.1.0"

jest-get-type@^26.3.0:
  version "26.3.0"
  resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-26.3.0.tgz#e97dc3c3f53c2b406ca7afaed4493b1d099199e0"
  integrity sha512-TpfaviN1R2pQWkIihlfEanwOXK0zcxrKEE4MlU6Tn7keoXdN6/3gK/xl0yEh8DOunn5pOVGKf8hB4R9gVh04ig==

jest-get-type@^27.0.6:
  version "27.0.6"
  resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-27.0.6.tgz#0eb5c7f755854279ce9b68a9f1a4122f69047cfe"


@@ 2200,6 2629,16 @@ jest-leak-detector@^27.1.0:
    jest-get-type "^27.0.6"
    pretty-format "^27.1.0"

jest-matcher-utils@^26.6.2:
  version "26.6.2"
  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-26.6.2.tgz#8e6fd6e863c8b2d31ac6472eeb237bc595e53e7a"
  integrity sha512-llnc8vQgYcNqDrqRDXWwMr9i7rS5XFiCwvh6DTP7Jqa2mqpcCBBlpCbn+trkG0KNhPu/h8rzyBkriOtBstvWhw==
  dependencies:
    chalk "^4.0.0"
    jest-diff "^26.6.2"
    jest-get-type "^26.3.0"
    pretty-format "^26.6.2"

jest-matcher-utils@^27.1.0:
  version "27.1.0"
  resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-27.1.0.tgz#68afda0885db1f0b9472ce98dc4c535080785301"


@@ 2210,6 2649,21 @@ jest-matcher-utils@^27.1.0:
    jest-get-type "^27.0.6"
    pretty-format "^27.1.0"

jest-message-util@^26.6.2:
  version "26.6.2"
  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-26.6.2.tgz#58173744ad6fc0506b5d21150b9be56ef001ca07"
  integrity sha512-rGiLePzQ3AzwUshu2+Rn+UMFk0pHN58sOG+IaJbk5Jxuqo3NYO1U2/MIR4S1sKgsoYSXSzdtSa0TgrmtUwEbmA==
  dependencies:
    "@babel/code-frame" "^7.0.0"
    "@jest/types" "^26.6.2"
    "@types/stack-utils" "^2.0.0"
    chalk "^4.0.0"
    graceful-fs "^4.2.4"
    micromatch "^4.0.2"
    pretty-format "^26.6.2"
    slash "^3.0.0"
    stack-utils "^2.0.2"

jest-message-util@^27.1.0:
  version "27.1.0"
  resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-27.1.0.tgz#e77692c84945d1d10ef00afdfd3d2c20bd8fb468"


@@ 2238,6 2692,11 @@ jest-pnp-resolver@^1.2.2:
  resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.2.tgz#b704ac0ae028a89108a4d040b3f919dfddc8e33c"
  integrity sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==

jest-regex-util@^26.0.0:
  version "26.0.0"
  resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-26.0.0.tgz#d25e7184b36e39fd466c3bc41be0971e821fee28"
  integrity sha512-Gv3ZIs/nA48/Zvjrl34bf+oD76JHiGDUxNOVgUjh3j890sblXryjY4rss71fPtD/njchl6PSE2hIhvyWa1eT0A==

jest-regex-util@^27.0.6:
  version "27.0.6"
  resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-27.0.6.tgz#02e112082935ae949ce5d13b2675db3d8c87d9c5"


@@ 2422,6 2881,11 @@ jest@^27.1.0:
    import-local "^3.0.2"
    jest-cli "^27.1.0"

jpeg-js@^0.4.2:
  version "0.4.3"
  resolved "https://registry.yarnpkg.com/jpeg-js/-/jpeg-js-0.4.3.tgz#6158e09f1983ad773813704be80680550eff977b"
  integrity sha512-ru1HWKek8octvUHFHvE5ZzQ1yAsJmIvRdGWvSoKV52XKyuyYA437QWDttXT8eZXDSbuMpHlLzPDZUPd6idIz+Q==

js-tokens@^4.0.0:
  version "4.0.0"
  resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"


@@ 2515,7 2979,7 @@ lodash.debounce@^4.0.8:
  resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
  integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168=

lodash@^4.7.0:
lodash@^4.17.14, lodash@^4.7.0:
  version "4.17.21"
  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==


@@ 2546,7 3010,7 @@ merge-stream@^2.0.0:
  resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
  integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==

micromatch@^4.0.4:
micromatch@^4.0.2, micromatch@^4.0.4:
  version "4.0.4"
  resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9"
  integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==


@@ 2566,12 3030,22 @@ mime-types@^2.1.12:
  dependencies:
    mime-db "1.49.0"

mime@^1.6.0:
  version "1.6.0"
  resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
  integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==

mime@^2.4.6:
  version "2.5.2"
  resolved "https://registry.yarnpkg.com/mime/-/mime-2.5.2.tgz#6e3dc6cc2b9510643830e5f19d5cb753da5eeabe"
  integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==

mimic-fn@^2.1.0:
  version "2.1.0"
  resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
  integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==

minimatch@^3.0.4:
minimatch@^3.0.3, minimatch@^3.0.4:
  version "3.0.4"
  resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
  integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==


@@ 2583,11 3057,23 @@ minimist@^1.2.5:
  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
  integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==

mkdirp@^0.5.5:
  version "0.5.5"
  resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
  integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
  dependencies:
    minimist "^1.2.5"

ms@2.1.2:
  version "2.1.2"
  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009"
  integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==

ms@^2.1.1, ms@^2.1.2:
  version "2.1.3"
  resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
  integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==

natural-compare@^1.4.0:
  version "1.4.0"
  resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"


@@ 2625,6 3111,11 @@ nwsapi@^2.2.0:
  resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7"
  integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==

object-inspect@^1.9.0:
  version "1.11.0"
  resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.0.tgz#9dceb146cedd4148a0d9e51ab88d34cf509922b1"
  integrity sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==

object-keys@^1.0.12, object-keys@^1.1.1:
  version "1.1.1"
  resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"


@@ 2640,7 3131,7 @@ object.assign@^4.1.0:
    has-symbols "^1.0.1"
    object-keys "^1.1.1"

once@^1.3.0:
once@^1.3.0, once@^1.3.1, once@^1.4.0:
  version "1.4.0"
  resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
  integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=


@@ 2654,6 3145,11 @@ onetime@^5.1.2:
  dependencies:
    mimic-fn "^2.1.0"

opener@^1.5.1:
  version "1.5.2"
  resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.2.tgz#5d37e1f35077b9dcac4301372271afdeb2a13598"
  integrity sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==

optionator@^0.8.1:
  version "0.8.3"
  resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495"


@@ 2715,6 3211,11 @@ path-parse@^1.0.6:
  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==

pend@~1.2.0:
  version "1.2.0"
  resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
  integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA=

picomatch@^2.0.4, picomatch@^2.2.3:
  version "2.3.0"
  resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972"


@@ 2727,6 3228,13 @@ pirates@^4.0.1:
  dependencies:
    node-modules-regexp "^1.0.0"

pixelmatch@^5.2.1:
  version "5.2.1"
  resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-5.2.1.tgz#9e4e4f4aa59648208a31310306a5bed5522b0d65"
  integrity sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ==
  dependencies:
    pngjs "^4.0.1"

pkg-dir@^4.2.0:
  version "4.2.0"
  resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"


@@ 2734,11 3242,40 @@ pkg-dir@^4.2.0:
  dependencies:
    find-up "^4.0.0"

pngjs@^4.0.1:
  version "4.0.1"
  resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-4.0.1.tgz#f803869bb2fc1bfe1bf99aa4ec21c108117cfdbe"
  integrity sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==

pngjs@^5.0.0:
  version "5.0.0"
  resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb"
  integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==

portfinder@^1.0.25:
  version "1.0.28"
  resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.28.tgz#67c4622852bd5374dd1dd900f779f53462fac778"
  integrity sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==
  dependencies:
    async "^2.6.2"
    debug "^3.1.1"
    mkdirp "^0.5.5"

prelude-ls@~1.1.2:
  version "1.1.2"
  resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
  integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=

pretty-format@^26.6.2:
  version "26.6.2"
  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93"
  integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg==
  dependencies:
    "@jest/types" "^26.6.2"
    ansi-regex "^5.0.0"
    ansi-styles "^4.0.0"
    react-is "^17.0.1"

pretty-format@^27.1.0:
  version "27.1.0"
  resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.1.0.tgz#022f3fdb19121e0a2612f3cff8d724431461b9ca"


@@ 2749,6 3286,11 @@ pretty-format@^27.1.0:
    ansi-styles "^5.0.0"
    react-is "^17.0.1"

progress@^2.0.3:
  version "2.0.3"
  resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
  integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==

prompts@^2.0.1:
  version "2.4.1"
  resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.1.tgz#befd3b1195ba052f9fd2fde8a486c4e82ee77f61"


@@ 2757,16 3299,45 @@ prompts@^2.0.1:
    kleur "^3.0.3"
    sisteransi "^1.0.5"

proper-lockfile@^4.1.1:
  version "4.1.2"
  resolved "https://registry.yarnpkg.com/proper-lockfile/-/proper-lockfile-4.1.2.tgz#c8b9de2af6b2f1601067f98e01ac66baa223141f"
  integrity sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==
  dependencies:
    graceful-fs "^4.2.4"
    retry "^0.12.0"
    signal-exit "^3.0.2"

proxy-from-env@^1.1.0:
  version "1.1.0"
  resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
  integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==

psl@^1.1.33:
  version "1.8.0"
  resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
  integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==

pump@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64"
  integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
  dependencies:
    end-of-stream "^1.1.0"
    once "^1.3.1"

punycode@^2.1.1:
  version "2.1.1"
  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==

qs@^6.4.0:
  version "6.10.1"
  resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a"
  integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==
  dependencies:
    side-channel "^1.0.4"

react-is@^17.0.1:
  version "17.0.2"
  resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"


@@ 2825,6 3396,11 @@ require-directory@^2.1.1:
  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
  integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I=

requires-port@^1.0.0:
  version "1.0.0"
  resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff"
  integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=

resolve-cwd@^3.0.0:
  version "3.0.0"
  resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d"


@@ 2845,7 3421,12 @@ resolve@^1.14.2, resolve@^1.20.0:
    is-core-module "^2.2.0"
    path-parse "^1.0.6"

rimraf@^3.0.0:
retry@^0.12.0:
  version "0.12.0"
  resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b"
  integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=

rimraf@^3.0.0, rimraf@^3.0.2:
  version "3.0.2"
  resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
  integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==


@@ 2869,6 3450,11 @@ saxes@^5.0.1:
  dependencies:
    xmlchars "^2.2.0"

secure-compare@3.0.1:
  version "3.0.1"
  resolved "https://registry.yarnpkg.com/secure-compare/-/secure-compare-3.0.1.tgz#f1a0329b308b221fae37b9974f3d578d0ca999e3"
  integrity sha1-8aAymzCLIh+uN7mXTz1XjQypmeM=

semver@7.0.0:
  version "7.0.0"
  resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e"


@@ 2898,6 3484,15 @@ shebang-regex@^3.0.0:
  resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
  integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==

side-channel@^1.0.4:
  version "1.0.4"
  resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
  integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
  dependencies:
    call-bind "^1.0.0"
    get-intrinsic "^1.0.2"
    object-inspect "^1.9.0"

signal-exit@^3.0.2, signal-exit@^3.0.3:
  version "3.0.3"
  resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"


@@ 2913,6 3508,13 @@ slash@^3.0.0:
  resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
  integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==

source-map-support@^0.4.18:
  version "0.4.18"
  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f"
  integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==
  dependencies:
    source-map "^0.5.6"

source-map-support@^0.5.6:
  version "0.5.19"
  resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61"


@@ 2921,7 3523,7 @@ source-map-support@^0.5.6:
    buffer-from "^1.0.0"
    source-map "^0.6.0"

source-map@^0.5.0:
source-map@^0.5.0, source-map@^0.5.6:
  version "0.5.7"
  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
  integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=


@@ 2941,7 3543,7 @@ sprintf-js@~1.0.2:
  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
  integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=

stack-utils@^2.0.3:
stack-utils@^2.0.2, stack-utils@^2.0.3:
  version "2.0.3"
  resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.3.tgz#cd5f030126ff116b78ccb3c027fe302713b61277"
  integrity sha512-gL//fkxfWUsIlFL2Tl42Cl6+HFALEaB1FU76I/Fy+oZjRreP7OPMXFlGbxM7NQsI0ZpUfw76sHnv0WNYuTb7Iw==


@@ 3118,11 3720,23 @@ unicode-property-aliases-ecmascript@^1.0.4:
  resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4"
  integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==

union@~0.5.0:
  version "0.5.0"
  resolved "https://registry.yarnpkg.com/union/-/union-0.5.0.tgz#b2c11be84f60538537b846edb9ba266ba0090075"
  integrity sha512-N6uOhuW6zO95P3Mel2I2zMsbsanvvtgn6jVqJv4vbVcz/JN0OkL9suomjQGmWtxJQXOCqUJvquc1sMeNz/IwlA==
  dependencies:
    qs "^6.4.0"

universalify@^0.1.2:
  version "0.1.2"
  resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
  integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==

url-join@^2.0.5:
  version "2.0.5"
  resolved "https://registry.yarnpkg.com/url-join/-/url-join-2.0.5.tgz#5af22f18c052a000a48d7b82c5e9c2e2feeda728"
  integrity sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=

v8-to-istanbul@^8.0.0:
  version "8.0.0"
  resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-8.0.0.tgz#4229f2a99e367f3f018fa1d5c2b8ec684667c69c"


@@ 3262,3 3876,18 @@ yargs@^16.0.3:
    string-width "^4.2.0"
    y18n "^5.0.5"
    yargs-parser "^20.2.2"

yauzl@^2.10.0:
  version "2.10.0"
  resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
  integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
  dependencies:
    buffer-crc32 "~0.2.3"
    fd-slicer "~1.1.0"

yazl@^2.5.1:
  version "2.5.1"
  resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35"
  integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==
  dependencies:
    buffer-crc32 "~0.2.3"